web-dev-qa-db-ja.com

Gentooで、特定の日付以降にインストールされたパッケージのリストを見つけるにはどうすればよいですか?

Gentoo VMを使用して、さまざまなパペットレシピをテストしています。パッケージを削除して、初期状態をクリーンにする必要があります。インストールされているパッケージが少ない場合は、手動で行うことができます。 (そしてemerge -av --depcleanで依存関係を削除します)しかし、テスト後にクリーンアップする必要がある数十のPerlモジュールのインストールを含むいくつかのレシピがあります。それらを単一の仮想ebuildにパックすることを考えていますが、すでにテストシステムが汚れています。インストールされたパッケージを1つずつ確認したくないので、質問は特定の日付以降にインストールされたパッケージのリストを見つけるにはどうすればよいですか

7
AlexD

これにはapp-portage/genlopを使用できます。

genlop -l --date some_date

その日付以降にマージされたすべてのパッケージが一覧表示されます。 (終了日も指定できます。)

emerge --unmergeに適したパッケージのリストを取得するには、次のようにしてみてください。

genlop -ln --date 2011/10/02 | Perl -ne '/>>> (.*)/ and print " =$1";'

実際にマージを解除する前に、そのリストを再確認してください。誤ってシステムパッケージを削除するのは楽しいことではありません。

特定の日付の後にマージされたもののリストを取得する別の方法は、Portageデータベースに保存されているBUILD_TIMEを調べることです。

#!/bin/bash
stime=$(date -d "$1" +%s)

for dir in /var/db/pkg/*/* ; do
    if [ -f $dir/BUILD_TIME ] ; then
        btime=$(<$dir/BUILD_TIME)
        if [ $btime -ge $stime ] ; then
            package=$(basename $dir)
            category=$(basename $(dirname $dir))
            echo $category/$package
        fi
    fi
done

これを日付(つまり、./script "2001/09/30 21:32")で呼び出すと、その日付以降にマージされたパッケージのリストが表示されます。

Portageは、マージが新規インストールであったか更新であったかをデータベースに保存しません。システムのすべての履歴がそこにあると仮定すると、emerge.logファイルからその情報を再構築できます。

これらすべてを処理する簡単な方法は、パッケージセットを使用することです。新しいレシピを試すたびにセットを作成し、それを使用してクリーンアップを行います。 (Depcleanはまだ必要です。)

# echo dev-Perl/IO-AIO > /etc/portage/sets/my_set
# emerge -a @my_set

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild  N     ] dev-Perl/IO-AIO-2.33 

Would you like to merge these packages? [Yes/No] y
>>> Recording @my_set in "world" favorites file...

...
>>> Installing (1 of 1) dev-Perl/IO-AIO-2.33
>>> Auto-cleaning packages...

>>> No outdated packages were found on your system.

 * GNU info directory index is up-to-date.
# emerge -a --unmerge @my_set
 * This action can remove important packages! In order to be safer, use
 * `emerge -pv --depclean <atom>` to check for reverse dependencies before
 * removing packages.

>>> These are the packages that would be unmerged:

 dev-Perl/IO-AIO
    selected: 2.33 
   protected: none 
     omitted: none 

All selected packages: dev-Perl/IO-AIO-2.33

>>> 'Selected' packages are slated for removal.
>>> 'Protected' and 'omitted' packages will not be removed.

Would you like to unmerge these packages? [Yes/No] 
11
Mat

このスクリプトemerged-afterは、特定の日付以降に出現したすべてのパッケージを一覧表示します

#!/bin/bash
etime=`date -d $1 +%s`
eix '-I*' --format '<installedversions:DATESORT>' | cut -f1,3 | cat <(cat -) <(echo $etime) | sort -nr | sed -e/$etime/q | sed -e'/[0-9]*\t*/s///'

eixをインストールする必要があります(そうでない場合はemerge eix && eix-update)。次に、たとえばbash emerged-after 31/12/2016を呼び出します。

0
PiedPiper