2014年5月23日金曜日

Puppy パッケージマネージャに日付情報を付加する実験

パッケージマネージャで、インストールしたパッケージの一覧に日付情報を付加したいと思った。

或るパッケージをインストールすると、依存関係のライブラリやら何やら、沢山のパッケージを
インストールしなければならない場合がある。
後からパッケージマネージャを見たときに、インストール日時の情報があれば、近い時間帯に
インストールされたものは、依存関係によるものだと推測することができるんじゃないか。

で、実験してみた。
実験なので、実際には使わないでください!!


パッケージマネージャの下段「インストール済みパッケージ」にDate項目を追加されているのが
分かると思う。

Puppy Linux(Presice Puppy 5.7.1)では、/root/.packages/ 以下に
インストールされたパッケージの情報を持っている。
沢山の情報が集まった宝のディレクトリなのだが、今回注目するのは、その中の
user-installed-packages と言うファイル。
これは、ユーザがインストールしたパッケージ情報を書き込んだテキストファイルで、
パッケージマネージャは、ここの情報を間接的に)読み込んで表示している。
このファイルにパッケージをインストールした日時の記載があれば、それを使って、
パッケージマネージャに表示させられるんじゃないかと思った。

ところが、実際には日時の記載はない。
(逆にそれがあれば、何らかの方法で利用されているだろう)
そこで先ず、日付情報の書き込みから始める。

パッケージインストール時(?)に、user-installed-packages に情報の書き込みを行っているのは、
/usr/local/petget/installpkg.sh の669行目。

echo "$DB_ENTRY" >> /root/.packages/user-installed-packages

ここで日付を付加して書き込みを行うようにする。

temp_time=$(date)
echo "$DB_ENTRY""$temp_time" >> /root/.packages/user-installed-packages

次に、パッケージマネージャが表示のときに読み込むファイルを整形する必要がある。
パッケージマネージャは、/root/.packages/user-installed-packages を直接読んでいるのではなく、
/sur/local/petget/finduserinstalledpkgs.sh が用意するテンポラリファイル、
/tmp/petget/installedpkgs.results.post を読んでいる。

/tmp/petget/installedpkgs.results は、user-installed-packages の内容から、
パッケージマネージャで表示する項目だけを抽出したものになっている。
したがって、その抽出項目として日時を選んでやらないといけない。

/sur/local/petget/finduserinstalledpkgs.sh の11行目

cut -f 1,5,10 -d '|' /root/.packages/user-installed-packages > /tmp/petget/installedpkgs.results

user-installed-packages から「|」を区切り文字にして、1,5,10番目のフィールドを
抽出してテンポラリファイルに書き出している。
ここで、フィールドの最後に位置する日時を awk を使って抽出し、書き出しをする。

echo -n > /tmp/petget/installedpkgs.results
while read line;do
  temp_line=$(echo $line | cut -f1,5,10 -d "|")
  last_field=$(echo $line | awk -F "|" '{print $NF}')
  echo "$temp_line""|""$last_field" >> /tmp/petget/installedpkgs.results
done < /root/.packages/user-installed-packages

最初は、cut を使って「14番目のフィールド」を指定したが、パッケージによっては、
フィールド数が一定でないことが分かったので、「最後のフィールド」を取り出す方式に変更。
(この際、最初にテンポラリファイルを空にしておくことが必要)

更に、15行目

cut -f 1,3 -d '|' /tmp/petget/installedpkgs.results > /tmp/petget/installedpkgs.results.post-noicons #120908

を下のように変更。
(整形したテンポラリファイルから更に抽出する際に日時を含めるように、4番目のフィールドを追加)

cut -f 1,3,4 -d '|' /tmp/petget/installedpkgs.results > /tmp/petget/installedpkgs.results.post-noicons #120908

最後は、/sur/local/petget/ui_Classic の変更。
これは、gtkdialogの<tree>を使ってるので、

<label>$(gettext 'Package|Description|Date')</label>

上のように、3番めのcolumnとしてDateを追加するだけ。
「Date」のところをクリックすれば、日時での昇順・降順を切り替えることができる。

以上で、実験終了
終了したので、元に戻すのを忘れずに!


※ 余談 ※
抽出する項目
フィールド 1  パッケージの名称
フィールド 5  カテゴリー
フィールド 10  説明

カテゴリーは、columnとして使用するのではなく、ミニ・アイコン用に抽出してるらしい。
「説明」として、10番目をそのまま選択するのが見やすいかどうかは、別の問題としてあると思う。
何らかの整形をしないと、長い文章が表示されてしまう場合有り。

※ 追記 ※
/usr/share/locale/ja/LC_MESSAGES/petget__ui_Classic.mo を編集して、
columnの項目名を日本語表示(日時)にした。

0 件のコメント :

コメントを投稿