설치된 패키지 세트를 재현하는 데 필요한 최소한의 데비안 패키지 세트를 어떻게 나열 할 수 있습니까?
문제
첫 번째에 설치된 패키지를 복제하기 위해 두 번째 기계에 설치 해야하는 패키지 목록을 생성하기 위해 DPKG, APT-GET 또는 APTIDET를 얻는 방법이 있습니까?
즉, 일반 우분투 서버를 설치 한 경우 설치 시간에 SSHD 옵션을 선택한 다음 빌드 필수 정보를 설치 한 경우 출력이 다음과 같은 것을 볼 것으로 예상됩니다.
#ubuntu 9.10 server
openssh-sshd
build-essential
내가 볼 수있는 한, 사용 가능한 모든 포장 도구는 상자에 패키지의 장점 목록을 생성합니다. SSHD 및 Build-Estential을 설치할 때 설치 될 예정이므로 SSHD 및 Build-Estential이 뽑은 OpenSsh Libs, LD, GCC 및 기타 모든 패키지에 관심이 없습니다.
다른 컴퓨터에서 현재 패키지 세트를 재현하기 위해 설치 해야하는 패키지 목록 만보고 싶습니다.
이게 가능해?
해결책
deborphan
, 일종의. 시스템의 모든 패키지 목록을 작성하고, 무엇에 의존하는지 파악하고 의존성이없는 패키지를 인쇄합니다. 기본적으로 라이브러리 만 인쇄합니다 (다른 패키지에서 설치하고 더 이상 필요하지 않은 라이브러리를 쉽게 찾을 수 있으므로 이름이 있습니다). 주로 원하는 것을 수행 할 수있는 옵션이 있습니다. 나는 그것을처럼 달린다 :
deborphan -anp required --no-show-section
-a
모든 패키지를 지정합니다 (라이브러리뿐만 아니라)
-n
"제안"또는 "권장"종속성 검사를 무시합니다 (예 : 단지 "의존")
-p required
우선 순위에도 불구하고 모든 패키지를 나열합니다
--no-show-section
데비안의 어느 부분이 있는지를 나타내지 않고 목록을 작성하는 데 유용한 멋진 형식 기능 만 표시합니다.
일부 패키지에는 원형 의존성이 있기 때문에 패키지를 놓칠 것입니다. 그러나 그것들은 상당히 드문 경향이 있으므로 충분히 가까워 질 수 있습니다.
다른 팁
Dannysauer가 게시 한 코드는 시작입니다. 종속성이 포함 된 패키지 목록이 있으면 사용할 수 있습니다. apt-rdepends
특정 패키지의 종속성을 찾으려면 (참조 이 페이지 예를 들어 사용법 및 출력).
절차 개요
- Dannysauer의 코드가 반환 한 패키지 목록을 반복
- 부르다
apt-rdepends
각각에 - 출력에 표시되는 목록에서 패키지 삭제
apt-rdepends
따라서 자동 의존성이 아닌 명시 적으로 설치된 패키지 목록 (예 : Ubuntu-Desktop 및 OpenSsh)을 원하십니까? 나는 긍정적이지는 않지만 그게 뭐야 dpkg --get-selections
하다. 그래서 당신은 할 수 있습니다
dpkg --get-selections > file
그런 다음 다른 컴퓨터에서 동일한 "파일"을 사용하고 실행하십시오.
dpkg --set-selections < file
apt-get dselect-upgrade
난 아니에요 절대적으로 긍정적입니다 그러나 이러한 명령은 수동으로 선택한 패키지를 수행하고 있으며 현재 데비안 기반 시스템에서 멀어지면서 확인합니다. :)
이건 어때 :
#!/bin/bash
packages=$(dpkg --get-selections | grep '[[:space:]]install$' | awk '{print $1}')
for pkg in $packages
do
nr_lines=$(apt-cache -i rdepends $pkg | wc -l )
if [ "$nr_lines" = "2" ]
then
echo $pkg
fi
done
잘 작동합니까? 어떻게 든 향상 될 수 있습니까?