玩式草子─ソフトウェアとたわむれる日々

第68回 Plamo-5.3.1とget_pkginfoスクリプト[その3]

この記事を読むのに必要な時間:およそ 6 分

前回は最初のバージョンのソースコードを使ってget_pkginfoのアイデアを紹介しました。最後に触れたように,このコードを公開後,メンテナの間でさまざまな機能追加や書き直しが施され,現在のget_pkginfoは最初のバージョンとは似ても似つかないほど高機能なスクリプトに成長しています。そこで今回は,このスクリプトの最新版を使って,実際にどのようなことができるのかを紹介してみましょう。

なお,get_pkginfoコマンドは現在も開発中のため,以下ではgithubのページからダウンロードした最新版のget_pkginfo.pyを/usr/bin/get_pkginfoにインストールして利用しています。古いバージョンでは動作しないオプション等があるのでご注意ください。

基本的な使い方

get_pkginfoの一番簡単な使い方は,そのまま起動することです。

$ get_pkginfo
local package: openssh-6.7p1-x86_64-P1
new   package: openssh-6.8p1-x86_64-P1
URL: ftp://ring.yamanashi.ac.jp/pub/linux/Plamo/Plamo-5.x/x86_64/plamo/00_base/openssh-6.8p1-x86_64-P1.txz

local package: openssl-1.0.1k-x86_64-P1
new   package: openssl-1.0.1m-x86_64-P1
URL: ftp://ring.yamanashi.ac.jp/pub/linux/Plamo/Plamo-5.x/x86_64/plamo/00_base/openssl-1.0.1m-x86_64-P1.txz

local package: libgcrypt-1.5.4-x86_64-P1
new   package: libgcrypt-1.5.4-x86_64-P2
URL: ftp://ring.yamanashi.ac.jp/pub/linux/Plamo/Plamo-5.x/x86_64/plamo/01_minimum/gnupg_tls.txz/libgcrypt-1.5.4-x86_64-P2.txz
...

オプションを指定せずに起動すると,get_pkginfoはローカルにインストール済みのパッケージとFTPサーバにある最新パッケージを比較して,バージョンやビルド番号に違いがあるパッケージとその入手先を表示します。

FTPサーバの指定(-uオプション)

以前にも紹介したように,ローカルの情報は/var/log/packages/以下に記録されているインストール済みパッケージから調べるので常に最新なのに対し,サーバの情報はマスターのFTPサーバ(plamo.linet.gr.jp)で定期的に更新しているパッケージ情報のpickleファイルを,ミラーサイト(デフォルトではring.yamanashi.ac.jp)経由で入手するため,最新パッケージの情報が伝わるまで最大1日程度のタイムラグが生じることがあります。

通常,その程度の遅れが問題になることはないと思うものの,最新情報を確認したい場合など,-uオプションで接続先のサーバを変更することができます。

$ get_pkginfo -u ftp://plamo.linet.gr.jp/pub/Plamo-5.x/
local package: openssh-6.7p1-x86_64-P1
new   package: openssh-6.8p1-x86_64-P1
URL: ftp://plamo.linet.gr.jp/pub/Plamo-5.x/x86_64/plamo/00_base/openssh-6.8p1-x86_64-P1.txz
...

このオプションを指定する場合,パッケージ情報が置かれているディレクトリを指定する必要があるので,最後の/を忘れないようにしてください。

plamo.linet.gr.jpは筆者宅の「お家サーバ」で回線があまり太くないので,通常はデフォルトのリングサーバ・プロジェクトのサーバをご利用ください。

パッケージのダウンロード(-d/-sオプション)

get_pkginfoという名称が示すように,このスクリプトは,元々,パッケージの最新情報を入手することが目的でした。しかし,入手先までわかるならダウンロードできた方が便利だろう,ということで,パッケージのダウンロード機能を追加しました。更新されたパッケージをダウンロードするためには-dあるいは-sのオプションを指定します。-dを指定した場合,パッケージは1つのディレクトリにまとめてダウンロードされます。

$ get_pkginfo.py -d
local package: openssh-6.7p1-x86_64-P1
new   package: openssh-6.8p1-x86_64-P1
URL: ftp://ring.yamanashi.ac.jp/pub/linux/Plamo/Plamo-5.x/x86_64/plamo/00_base/openssh-6.8p1-x86_64-P1.txz
downloading: openssh-6.8p1-x86_64-P1.txz
[     825072 /     825072 ]

local package: openssl-1.0.1k-x86_64-P1
new   package: openssl-1.0.1m-x86_64-P1
URL: ftp://ring.yamanashi.ac.jp/pub/linux/Plamo/Plamo-5.x/x86_64/plamo/00_base/openssl-1.0.1m-x86_64-P1.txz
downloading: openssl-1.0.1m-x86_64-P1.txz
[    2763180 /    2763180 ]
...

$ ls
bind-9.9.6_P2-x86_64-P1.txz    libssh2-1.5.0-x86_64-P1.txz   rsync-3.1.1-x86_64-P2.txz
libgcrypt-1.5.4-x86_64-P2.txz  openssh-6.8p1-x86_64-P1.txz  ...

一方,-sを指定すると,各パッケージはFTPサーバ上のカテゴリやサブカテゴリを再現したディレクトリにダウンロードされます。

$ get_pkginfo.py -s
local package: openssh-6.7p1-x86_64-P1
new   package: openssh-6.8p1-x86_64-P1
URL: ftp://ring.yamanashi.ac.jp/pub/linux/Plamo/Plamo-5.x/x86_64/plamo/00_base/openssh-6.8p1-x86_64-P1.txz
downloading: diskbase
[      20830 /      20830 ]
downloading: ediskbase
[      15875 /      15875 ]
downloading: openssh-6.8p1-x86_64-P1.txz
[     825072 /     825072 ]
...
$ ls -R
.:
00_base/  01_minimum/

./00_base:
diskbase  ediskbase  openssh-6.8p1-x86_64-P1.txz  openssl-1.0.1m-x86_64-P1.txz

./01_minimum:
diskminimum  ediskminimum  gnupg_tls.txz/  network.txz/

./01_minimum/gnupg_tls.txz:
diskgnupg_tls  ediskgnupg_tls  libgcrypt-1.5.4-x86_64-P2.txz
...

-sオプションでカテゴリごとにパッケージをダウンロードした場合は,パッケージの解説文書(diskbase等)も合わせてダウンロードされるので,パッケージを確認しつつ更新する際はこちらのオプションが便利でしょう。

ダウンロード先の指定(-oオプション)

通常,ダウンロードしたパッケージはカレントディレクトリ(get_pkginfoを起動したディレクトリ)に保存されます。一方,更新パッケージを特定のディレクトリに集めておきたい場合など,-oオプションでダウンロード先を指定することもできます。

$ get_pkginfo -s -o /var/packages
local package: openssh-6.7p1-x86_64-P1
new   package: openssh-6.8p1-x86_64-P1
...
$ ls /var/packages
00_base/  01_minimum/ ..

ダウンロード先には,実際に存在して書き込めるディレクトリを指定してください。

パッケージの自動更新(-a/-iオプション)

パッケージがダウンロードできるなら,アップデートもできれば便利じゃない?ということで,パッケージの自動更新機能も追加しました。

パッケージの更新にはupdatepkgコマンドを利用するのでroot権限が必要になります。そこで,まずsudoが可能かを確認した後,必要なパッケージをダウンロードし,sudo updatepkgでそのパッケージを更新します。

$ get_pkginfo.py -a
You need sudo to install package(s).  Are you sure? [y/N] y
local package: btrfs_progs-3.12-x86_64-P1
new   package: btrfs_progs-3.19_rc2-x86_64-P1
URL: ftp://ring.yamanashi.ac.jp/pub/linux/Plamo/Plamo-5.x/x86_64/plamo/00_base/btrfs_progs-3.19_rc2-x86_64-P1.txz
downloading: diskbase
[      20830 /      20830 ]
downloading: ediskbase
[      15875 /      15875 ]
downloading: btrfs_progs-3.19_rc2-x86_64-P1.txz
[     528240 /     528240 ]
installing: btrfs_progs-3.19_rc2-x86_64-P1.txz
invoking: sudo /sbin/updatepkg -f btrfs_progs-3.19_rc2-x86_64-P1.txz
パスワード: ******

Removing package btrfs_progs...
Removing files:
  --> Deleting symlink sbin/btrfs
  --> Deleting symlink usr/lib/libbtrfs.so
  --> Deleting symlink usr/lib/libbtrfs.so.0
...
  --> Deleting empty directory usr/share/doc/btrfs-progs-v3.12
  --> Deleting empty directory usr/include/btrfs
btrfs_progs-3.19_rc2-x86_64-P1 のインストール中
PACKAGE DESCRIPTION:
btrfs_progs: Btrfs 操作ツール
btrfs_progs: 
btrfs_progs: Btrfsを操作するために必要なプログラム集です
btrfs_progs: 
btrfs_progs-3.19_rc2-x86_64-P1 のインストールスクリプトを実行中
...

自動更新オプションは-sオプションを含意し,パッケージ類はカテゴリごとのディレクトリにダウンロードされ,それぞれのディレクトリからupdatepkgコマンドを実行します。

-aオプションはパッケージの更新を一気に進める(autoモード)のに対し,-iオプションを指定するとダウンロードしたパッケージごとにアップデートするかどうかを問い合わせます(manualモード)⁠アップデートするパッケージを細かくチェックしたい場合はこちらのオプションが便利でしょう。

$ get_pkginfo -i
You need sudo to install package(s).  Are you sure? [y/N] y
local package: libgcrypt-1.5.4-x86_64-P1
new   package: libgcrypt-1.5.4-x86_64-P2
URL: ftp://ring.yamanashi.ac.jp/pub/linux/Plamo/Plamo-5.x/x86_64/plamo/01_minimum/gnupg_tls.txz/libgcrypt-1.5.4-x86_64-P2.txz
downloading: libgcrypt-1.5.4-x86_64-P2.txz
[     381736 /     381736 ]
Install libgcrypt? [y/N] y
installing: libgcrypt-1.5.4-x86_64-P2.txz
invoking: sudo /sbin/updatepkg -f libgcrypt-1.5.4-x86_64-P2.txz
パスワード:

Removing package libgcrypt...
Removing files:
  --> Deleting symlink usr/lib64/libgcrypt.so
...
local package: libxml2-2.9.2-x86_64-P1
new   package: libxml2-2.9.2-x86_64-P2
...
Install libxml2? [y/N] y
installing: libxml2-2.9.2-x86_64-P2.txz
invoking: sudo /sbin/updatepkg -f libxml2-2.9.2-x86_64-P2.txz
...

Plamo Linuxの場合,カーネル関連パッケージやブートローダなど,環境に合わせた調整が必要でupdatepkgだけでは更新できないパッケージもわずかながら存在します。それらのパッケージは自動更新の対象外に指定しており,-aや-iオプションを指定した場合,ダウンロードはするものの,パッケージの更新は行いません。

...
local package: grub-git_20150121-x86_64-P1
new   package: grub-git_20150121-x86_64-P2
URL: ftp://ring.yamanashi.ac.jp/pub/linux/Plamo/Plamo-5.x/x86_64/plamo/00_base/grub-git_20150121-x86_64-P2.txz
downloading: grub-git_20150121-x86_64-P2.txz
[    4500408 /    4500408 ]
grub needs some tweaks to install.  Auto installation skipped.
...

これらのパッケージは必要に応じて手動で更新する必要があります。

著者プロフィール

こじまみつひろ

Plamo Linuxとりまとめ役。もともとは人類学的にハッカー文化を研究しようとしていたものの,いつの間にかミイラ取りがミイラになってOSSの世界にどっぷりと漬かってしまいました。最近は田舎に隠棲して半農半自営な生活をしながらソフトウェアと戯れています。

URLhttp://www.linet.gr.jp/~kojima/Plamo/index.html

コメント

コメントの記入