No Gentoo, como faço para encontrar a lista de pacotes instalados após uma data específica?

7

Eu tenho a VM do Gentoo que eu uso para testar diferentes receitas de fantoches e frequentemente preciso remover pacotes para trazê-los para o estado inicial. Enquanto eu poderia fazer isso manualmente quando há apenas alguns pacotes instalados (e remover dependências com emerge -av --depclean ), mas existem algumas receitas envolvendo a instalação de algumas dezenas de módulos perl que eu preciso limpar após o teste. Eu penso em empacotá-los em ebuild virtual único, mas eu já tenho sistema de teste sujo com muitos pacotes instalados e eu quero evitar revê-los um por um. Então pergunta é como faço para encontrar uma lista de pacotes instalados após uma data específica ?

    
por AlexD 02.10.2011 / 09:01

2 respostas

9

Você pode usar app-portage/genlop para isso.

genlop -l --date some_date

listará todos os pacotes mesclados a partir dessa data. (Você também pode especificar uma data final.)

Para obter uma lista de pacotes adequados para emerge --unmerge , tente algo como:

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

Verifique novamente essa lista antes de realmente desenterrá-la, removendo pacotes do sistema por acidente não é divertido.

Outra maneira de obter uma lista de coisas mescladas após uma determinada data é ver o BUILD_TIME salvo no banco de dados do 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

Chame isso de uma data (ou seja, ./script "2001/09/30 21:32" ) e você terá uma lista de pacotes mesclados desde essa data.

O Portage não armazena se uma fusão foi uma nova instalação ou uma atualização em seu banco de dados. Você poderia reconstruir essa informação a partir do arquivo emerge.log supondo que você tenha todo o histórico do seu sistema lá.

Uma maneira mais simples de lidar com tudo isso seria usar conjuntos de pacotes. Crie um conjunto cada vez que você experimentar uma nova receita e use-a para fazer suas limpezas. (Depclean ainda é necessário.)

# 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] 
    
por 02.10.2011 / 09:52
0

Este script emerged-after listará todos os pacotes surgidos após uma determinada data

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

Você precisa ter o eix instalado (senão emerge eix && eix-update ) chamar por exemplo bash emerged-after 31/12/2016

    
por 04.12.2017 / 18:22