시스템 패키지 관리자 식별


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.