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