Package-Management

在 Gentoo 上,我如何找到在某個特定日期之後安裝的軟體包列表?

  • December 4, 2017

我有 Gentoo VM,我用它來測試不同的 puppet 配方,我經常需要刪除包以使其恢復到干淨的初始狀態。雖然我可以在只安裝很少的軟體包時手動執行此操作(並刪除依賴emerge -av --depclean項),但有一些方法涉及安裝幾十個 perl 模組,我需要在測試後清理這些模組。我考慮將它們打包到單個虛擬 ebuild 中,但我的測試系統已經被許多已安裝的軟體包弄髒了,我想避免一一審查它們。所以問題是 我如何找到在某個特定日期之後安裝的軟體包列表

你可以用app-portage/genlop這個。

genlop -l --date some_date

將列出在該日期或之後合併的所有包。(您也可以指定結束日期。)

要獲取適用於 的軟體包列表emerge --unmerge,請嘗試以下操作:

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

在實際取消合併之前仔細檢查該列表,意外刪除系統包並不好玩。

在給定日期之後獲得合併的事物列表的另一種方法是查看BUILD_TIME保存在 portage 數據庫中的內容。

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

引用自:https://unix.stackexchange.com/questions/21881