web-dev-qa-db-ja.com

現在インストールされている不安定なパッケージのリスト(Gentoo Linux)

誤ってパッケージを削除しましたaccept_keywordsファイル。 〜AMD64から必要なパッケージはわずかしかありませんでしたが、すべてを思い出せません。現在インストールされているすべての不安定なパッケージのリストがあれば、それらを回復できます。それ、どうやったら出来るの?

2
John Ashpool

これを行うには、 equery コマンドを使用します。

equery y "PACKAGE NAME"は、キーワードデータを含むパッケージに関する情報を出力します。不安定なパッケージは~としてマークされます。したがって、インストールされているパッケージのリストを繰り返し、安定しているかどうかを出力するスクリプトを作成する必要があります。

シングルequery y "PACKAGE"の出力は次のようになります。

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

この出力から、パッケージがインストールされていることを意味する[I]の行を取得する必要があります。次に、アーキテクチャのキーワードを出力する必要があります(たとえば、AMD64-テーブルの2番目の列)。このために、awkを使用できます(AWKの マニュアルページ 参照用)。単一パッケージの場合、次のようになります。

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

出力は

+

不安定なパッケージの場合、出力は次のようになります。

~

次に、インストールされているすべてのパッケージでそれを行う必要があります。このスクリプトは私たちを助けます:

#!/bin/bash

ALL_PKG=`equery list "*"`

for PKG in $ALL_PKG
do

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

done

システムアーキテクチャに基づいて、awkの印刷番号(awk '/[I]/{print $4;}')を調整する必要があります。

個別に処理する必要があるいくつかの例外があります。たとえば、パッケージwinetricksは次の出力を提供します。

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

ここには[I]記号がないため、awkは何も出力しません。パッケージの出力が表示されない、または出力がおかしい場合は、手動で調べてください。そのようなパッケージはごく少量であるはずです。

このバージョンでは、不安定なパッケージのリストも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
2
VL-80

eix を使用したソリューションですが、はるかに高速で、equeryを使用したソリューションよりもはるかに高速です

eix -c --installed-unstable

パッケージの名前だけが必要な場合は、jsut add --only-namesオプション。

3
j123b567