在 Gentoo 上,我如何找到某个特定日期之后安装的软件包列表?

在 Gentoo 上,我如何找到某个特定日期之后安装的软件包列表?

我有 Gentoo VM,用来测试不同的 puppet 配方,并且经常需要删除软件包以使其恢复干净的初始状态。虽然当只安装了很少的软件包时我可以手动执行此操作(并使用 删除依赖项emerge -av --depclean),但有一些方法涉及安装几十个 perl 模块,我需要在测试后清理这些模块。我考虑将它们打包到单个虚拟 ebuild 中,但我已经用许多已安装的软件包弄脏了测试系统,我想避免一一审查它们。所以问题是 如何查找某个特定日期之后安装的软件包列表

答案1

您可以用于app-portage/genlop此目的。

genlop -l --date some_date

将列出该日期或之后合并的所有包。 (您还可以指定结束日期。)

要获取适合的软件包列表emerge --unmerge,请尝试以下操作:

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

在实际取消合并之前请仔细检查该列表,意外删除系统软件包并不有趣。

获取给定日期之后合并的事物列表的另一种方法是查看BUILD_TIMEportage 数据库中保存的内容。

#!/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] 

答案2

该脚本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

相关内容