Lista de pacotes instáveis atualmente instalados (Gentoo Linux)

1

Eu acidentalmente removi meu arquivo accept_keywords do pacote. Havia apenas alguns pacotes que eu precisava de ~ amd64, mas não me lembro de todos eles. Eu poderia recuperá-los se eu tivesse a lista de todos os pacotes instáveis atualmente instalados. Como eu faço isso?

    
por John Ashpool 02.03.2014 / 18:30

2 respostas

1

Usaremos o comando equery para fazer isso.

equery y "PACKAGE NAME" gerará informações sobre o pacote com dados de palavras-chave. Pacotes instáveis são marcados como ~ . Portanto, precisamos escrever um script que iterará a lista de pacotes instalados e a saída, se estiver estável ou não.

A saída de equery y "PACKAGE" única é assim:

test@test ~ $ equery y "portage"
Keywords for sys-apps/portage:
                 |                             | u   |  
                 | a a   a           p     s   | n   |  
                 | l m   r h i m m   p s   p   | u s | r
                 | p d a m p a 6 i p c 3   a x | s l | e
                 | h 6 r 6 p 6 8 p p 6 9 s r 8 | e o | p
                 | a 4 m 4 a 4 k s c 4 0 h c 6 | d t | o
-----------------+-----------------------------+-----+-------
[M]2.1.6.7_p1    | + + + o + + + ~ + + + + + + | # 0 | gentoo
    2.1.11.62    | + + + o + + + ~ + + + + + + | #   | gentoo
     2.1.12.2    | + + + o + + + ~ + + + + + + | #   | gentoo
        2.2.1    | + + + o + + + ~ + + + + + + | #   | gentoo
        2.2.6    | ~ ~ ~ o ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ | #   | gentoo
     [I]2.2.7    | + + + + + + + ~ + + + + + + | o   | gentoo
        2.2.8    | ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ | #   | gentoo
        2.2.8-r1 | ~ ~ ~ ~ + ~ ~ ~ ~ ~ ~ ~ ~ ~ | o   | gentoo
         9999    | o o o o o o o o o o o o o o | o   | gentoo

A partir desta saída, precisamos obter linha com [I] , o que significa que o pacote está instalado. Em seguida, precisamos gerar uma palavra-chave para sua arquitetura (digamos que seja amd64 - segunda coluna da tabela). Para isso, podemos usar awk ( Página do manual do AWK como referência). Para um pacote único, ficará assim:

equery y "portage" | awk '/[I]/{print $4;}'

e a saída será

+

enquanto que para o pacote instável, a saída seria

~

Agora precisamos fazer isso com todos os pacotes instalados. Este script nos ajudará:

#!/bin/bash

ALL_PKG='equery list "*"'

for PKG in $ALL_PKG
do

 echo $PKG
 equery y "$PKG" | awk '/[I]/{print $4;}'

done

Você precisa ajustar o número de impressões do awk ( awk '/[I]/{print $4;}' ) com base na sua arquitetura de sistema.

Existem algumas exceções que precisam ser tratadas individualmente. Por exemplo, o pacote winetricks fornece a seguinte saída:

test@test ~ $ equery y "winetricks"
Keywords for app-emulation/winetricks:
         |                             | u   |  
         | a a   a           p     s   | n   |  
         | l m   r h i m m   p s   p   | u s | r
         | p d a m p a 6 i p c 3   a x | s l | e
         | h 6 r 6 p 6 8 p p 6 9 s r 8 | e o | p
         | a 4 m 4 a 4 k s c 4 0 h c 6 | d t | o
---------+-----------------------------+-----+-------
20130629 | o ~ o o o o o o o o o o o ~ | # 0 | gentoo
20130707 | o ~ o o o o o o o o o o o ~ | o   | gentoo
99999999 | o o o o o o o o o o o o o o | o   | gentoo

Não há símbolo [I] aqui, então o awk não produzirá nada. Se você não vir saída ou saída estranha para o pacote - inspecione-a manualmente. Deve haver uma quantidade muito pequena de tais pacotes.

Esta versão também mostra a lista de pacotes instáveis para unstable.txt

#!/bin/bash
ALL_PKG='equery list "*"'

for PKG in $ALL_PKG
do

  echo $PKG
  export stb=$(equery y "$PKG" | awk '/[I]/{print $4;}' 2>&1)
  echo $stb
  if [[ "$stb" == "~" ]]; then echo $PKG >> unstable.txt; fi

done
    
por 02.03.2014 / 20:05
1

Solução usando eix , mas muito mais rápido, então a solução usando equery

eix -c --installed-unstable

Se você precisa apenas de nomes de pacotes, adicione jsut --only-names option.

    
por 07.09.2017 / 14:45

Tags