시스템 패키지 관리자 식별


12

기본 시스템 패키지 관리자를 식별하는 방법이 있습니까 (스크립트에서)?

명확히하기 위해, 내가하고 싶은 것은 주어진 명령을 실행하는 것이고, 데비안이나 그 파생물에서 "apt"와 같은 것을 반환합니다. "yum", 아치 리눅스에서는 "pacman"등을 반환합니다.

다음과 같은 방법 으로이 작업을 수행 할 수 있다는 것을 알고 있습니다. 동일한 이름의 실행 파일이있는 즉시 깨지지 않는 더 강력한 방법이 있는지 궁금합니다.

which apt >/dev/null 2>&1
if [ $? -eq 0 ]
then
    echo "apt"
fi
# etc...

답변:


9

이 질문에 대한 대답으로 시작하십시오 . 간단한 쉘 스크립트로 배포 이름과 버전 번호를 어떻게 얻을 수 있습니까? . 그런 다음 감지 된 분배를 기반으로 사용할 패키지 관리자를 결정하십시오.


다른 배포판에 대해 쉽게 사용할 수있는 패키지 관리자 목록이 있습니까? 특히 데비안 클론이 많이 있습니다.
— DrAl

쉽게 구할 수있는 목록은 확실하지 않지만 모든 데비안 클론은를 사용 apt-get합니다.
— Jim Paris

그렇습니다. 내 문제는 배포판을 너무 많이 식별하지는 않지만 (링크가 확실히 더 쉬워 지지만) 모든 배포판 목록을 유지하지 않고 배포판 이름을 (임의로 임의로 선택) "SolusOS"와 같은 배포판 이름을 연결하는 방법을 알아내는 중입니다. 존재합니다.
— DrAl

autotools 방식으로 수행하십시오 : 작동하는지 확인하십시오. BTW, 배포판이 apt를 사용한다는 것은 그것이 데비안 친척이라는 것을 의미합니다 (그리고 그들은 콤팩트 한 묶음입니다). yum을 찾는 것이 포장 규칙 (라이브러리 / 개발, 펄의 큰 벽돌 또는 개별 패키지에서 분리됨)을 의미하지는 않습니다 CPAN, ...)은 동일합니다. CentOS에 Fedora 패키지를 설치하지 마십시오 (최소 3 년 또는 4 년의 버전 차이가 있지만 작동하지 않습니다).
— vonbrand

배포판을 감지하면 인기있는 배포판에서만 작동합니다. 잘 모르는 배포판에 대해서는 화이트리스트를 업데이트 할 수 없습니다. 도구가 있는지 직접 테스트하는 것이 도구를 작동시키는 유일한 방법입니다. 오리처럼 보이고 오리처럼 수영하고 오리처럼 like 거리면 아마도 오리 일 것입니다.
— liberforce

8

바이너리 프로그램을 식별하는 대신 식별 배포에서 시작해야합니다.

bash 스크립팅에서 작동하는 몇 줄을 제공하십시오.

declare -A osInfo;
osInfo[/etc/redhat-release]=yum
osInfo[/etc/arch-release]=pacman
osInfo[/etc/gentoo-release]=emerge
osInfo[/etc/SuSE-release]=zypp
osInfo[/etc/debian_version]=apt-get

for f in ${!osInfo[@]}
do
    if [[ -f $f ]];then
        echo Package manager: ${osInfo[$f]}
    fi
done

이러한 부분을 신뢰할 수는 없지만 일반적으로 사람들은 그렇게 할 수 없습니다.


2

나는 다른 사람들을 검토 한 후에이 길을 가기로 결정했다. 이것은 많은 도커 컨테이너를 실행하고 curl / jq가 필요하고 작업마다 사용할 수있는 것에 의존 할 수 없을 때 나에게 나타났습니다.

script:
 - if [ -x "$(command -v apk)" ]; then apk add --no-cache curl jq; fi
 - if [ -x "$(command -v apt-get)" ]; then apt-get install curl jq; fi
 - if [ -x "$(command -v dnf)" ]; then dnf install curl jq; fi
 - if [ -x "$(command -v zypper)" ]; then zypper install curl jq; fi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.