ここで解決策が見つからなかったため、dpkgでdebパッケージをインストールしましたが、特に探していたいくつかのアイテムが見つかりませんでした。
かなり長い1つのライナーですが、コピーして貼り付けるのに便利です:
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
次に、2つのファイル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
。