Trên Gentoo, làm cách nào để tìm danh sách các gói được cài đặt sau một số ngày cụ thể?


7

Tôi có Gentoo VM mà tôi sử dụng để kiểm tra các công thức múa rối khác nhau và tôi thường xuyên cần phải gỡ bỏ các gói để đưa nó về trạng thái ban đầu. Mặc dù tôi có thể làm điều này bằng tay khi chỉ có vài gói được cài đặt (và loại bỏ các phụ thuộc với emerge -av --depclean) nhưng có một số công thức liên quan đến việc cài đặt vài chục mô-đun perl mà tôi cần phải làm sạch sau khi thử nghiệm. Tôi nghĩ về việc đóng gói chúng vào một ebuild ảo đơn lẻ nhưng tôi đã có hệ thống kiểm tra bẩn với nhiều gói được cài đặt và tôi muốn tránh xem xét từng cái một. Vì vậy, câu hỏi là làm thế nào để tôi tìm thấy danh sách các gói được cài đặt sau một số ngày cụ thể ?

Câu trả lời:


11

Bạn có thể sử dụng app-portage/genlopcho việc này.

genlop -l --date some_date

sẽ liệt kê tất cả các gói được hợp nhất vào hoặc sau ngày đó. (Bạn cũng có thể chỉ định ngày kết thúc.)

Để có được danh sách các gói phù hợp emerge --unmerge, hãy thử một số thứ như:

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

Kiểm tra kỹ danh sách đó trước khi thực sự không hợp nhất, loại bỏ các gói hệ thống một cách tình cờ là không vui.

Một cách khác để có được một danh sách các thứ được hợp nhất sau một ngày nhất định là xem xét BUILD_TIMElưu trong cơ sở dữ liệu 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

Gọi đây với một ngày (tức là ./script "2001/09/30 21:32") và bạn sẽ nhận được một danh sách các gói được hợp nhất kể từ ngày đó.

Portage không lưu trữ cho dù hợp nhất là cài đặt mới hay cập nhật trong cơ sở dữ liệu của nó. Bạn có thể xây dựng lại thông tin đó từ emerge.logtệp giả sử bạn có tất cả lịch sử hệ thống của mình ở đó.

Một cách đơn giản hơn để xử lý tất cả điều này sẽ là sử dụng các bộ gói. Tạo một bộ mỗi khi bạn thử một công thức mới và sử dụng nó để dọn dẹp. (Depclean vẫn cần thiết.)

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

Cảm ơn đề nghị, tôi đã thử nó. Thật không may genlopdựa vào phân tích cú pháp logfile và không phản ánh trạng thái hệ thống hiện tại nên đầu ra của nó bao gồm các gói đã bị xóa và một số gói được bao gồm nhiều lần khi chúng được cài đặt nhiều lần và cũng có một số gói được cập nhật cùng lúc giai đoạn = Stage. Vì vậy, sau tất cả, tôi vẫn cần kiểm tra từng gói một mà tôi đang cố gắng tránh.
AlexD

Đã thêm thông tin và cách tốt hơn để xử lý tình huống của bạn. HTH.
Mat

Cảm ơn, truy cập trực tiếp /var/pkg/dblà tốt hơn nhiều. Tôi đã sửa đổi tập lệnh của bạn để sử dụng equery dependsđể bỏ qua các gói có bất cứ thứ gì phụ thuộc vào chúng để tôi có thể nhận danh sách các gói an toàn để xóa mà không phá vỡ các gói khác. Bộ là tính năng thú vị nhưng không thể giải quyết trường hợp sử dụng khi gói được bao gồm trong bộ cũng được sử dụng bởi một số gói khác không được bao gồm trong bộ, vì vậy loại bỏ bộ sẽ phá vỡ gói khác này.
AlexD

Khi hợp nhất một tập hợp, portage sẽ không xóa bất kỳ gói nào trừ khi chúng được liệt kê cụ thể trong tập hợp. Nói chung, các gói sẽ được đặt vào một bộ không phụ thuộc vào các gói khác trong cùng một bộ. Ví dụ, www-clients/firefoxkéo theo một loạt các phụ thuộc, nhưng rất ít gói phụ thuộc vào nó. Nếu www-clients/firefoxmedia-libs/mesanằm trong cùng một bộ, bạn có thể tiếp tục và xóa media-libs/mesa. Khi bạn hủy kết nối, mesa sẽ không bị xóa. Chỉ khi bạn chạy, emerge --depcleannó sẽ bị xóa và chỉ khi không có gói thế giới hoặc tập hợp nào khác cần nó.
hololeap

Khi bạn tiếp tục sử dụng Gentoo, bạn sẽ biết khi nào nên sử dụng --oneshotcờ để tránh đặt các gói trong bộ "thế giới" (nghĩa là chúng sẽ bị xóa trong lần chạy tiếp theo emerge --depclean), khi nào nên sử dụng bộ tùy chỉnh và khi nào nên viết ebuild của riêng bạn cho phần mềm không chính thức (để bạn có thể cài đặt vĩnh viễn mọi phụ thuộc thư viện mà không cần thêm chúng vào bộ "thế giới").
hololeap

0

Kịch bản emerged-afternày sẽ liệt kê tất cả các gói xuất hiện sau một ngày nhất định

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

Bạn cần phải eixcài đặt (nếu không thì emerge eix && eix-update), hãy gọi, vdbash emerged-after 31/12/2016

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.