나는 여기에 어떤 해결책도 효과가 없다는 것을 보지 못했다. 나는 dpkg와 함께 꽤 많은 deb 패키지를 설치했으며 특히 내가 찾고있는 몇 가지 항목이 누락되었다.
다소 긴 라이너이지만 복사하여 붙여 넣기가 편리한 방법은 다음과 같습니다.
export DPKG_INITIAL=$(mktemp) DPKG_INSTALLED=$(mktemp) DPKG_CUSTOM=$(mktemp) DPKG_DEPS=$(mktemp) zgrep -E '^Package' /var/log/installer/initial-status.gz | awk '{ print $2 }' > $DPKG_INITIAL ; awk '$3 !~ /install|remove|purge/ { next } { gsub(/remove|purge/, "uninstall", $3) ; gsub(/:.+/, "", $4) ; a[$4]=$3 } END { for (p in a) { if (a[p] == "install") { print p } } }' /var/log/dpkg.log | sort -u > $DPKG_INSTALLED ; comm -23 installed initial > $DPKG_CUSTOM ; function rdep() { apt-cache rdepends $1 | tail -n +3 | sed -e 's/^ //' -e '/^ /d' | cut -d':' -f1 | sort -u; } ; echo "$(for i in $(cat custom) ; do rdep $i ; done)" | sort -u > $DPKG_DEPS ; comm -23 custom deps > my-packages ; rm $DPKG_INITIAL $DPKG_INSTALLED $DPKG_CUSTOM $DPKG_DEPS
위 명령은 패키지 목록을 현재 작업중인 디렉토리의 파일에 저장합니다 my-packages.
설명
먼저 설치 중에 선택한 패키지의 기준을 구성하는 패키지 목록을 작성했습니다.
zgrep -E '^Package' /var/log/installer/initial-status.gz | awk '{ print $2 }' > initial
일반적으로 설치된 긴 항목 목록이 뒤 따릅니다.
awk '$3 !~ /install|remove|purge/ { next } { gsub(/remove|purge/, "uninstall", $3) ; gsub(/:.+/, "", $4) ; a[$4]=$3 } END { for (p in a) { if (a[p] == "install") { print p } } }' /var/log/dpkg.log | sort -u > installed
나는 다음 두 파일을 비교 initial및 installed설치에 고유 한 항목 만 나열합니다.
comm -23 installed initial > custom
거기에서 종속성을 필터링하고 싶었습니다.이 방법은 원하는 패키지를 놓칠 수있는 곳이며, 명시 적으로 설치된 종속성을 알지 못합니다.
이 항목을 처리 할 때이 단계를 단축하기 위해 빠른 bash 함수를 작성했습니다.
function rdep() { apt-cache rdepends $1 | tail -n +3 | sed -e 's/^ //' -e '/^ /d' | cut -d':' -f1 | sort -u; }
그 후 나는 파일에서 각 줄 custom을이 함수로 전달 했다 xargs.
echo "$(for i in $(cat custom) ; do rdep $i ; done)" | sort -u > deps
가능한 모든 의존성에 대한 긴 목록 (모든 가능한 진술에 대해 확실하지 않음)을 얻은 후에는 단일 파일에 고유 한 행을 다시 얻었습니다.
comm -23 custom deps > manual
완성 된 패키지 목록은 이제 manual검토 할 수 있는 파일 이름으로되어 있습니다.
something하지 않습니다something-common.