toastで行うソフトウェアのインストールとアップデート管理

 ソースコードからソフトウェアのビルドをする場合、そうした処理とインストールの記録を管理していくのは一苦労だが、このような手間を軽減してくれるのが toast というツールだ。toastで対処できるのは、個々の一般ユーザが各自の/homeディレクトリにて行うソフトウェアのビルドとインストールおよび、全ユーザを対象に/usr/localにて行うソフトウェアのセットアップである。toastによるパッケージ入手は、HTTP、HTTPS、FTP、SSH、CVS経由の方式に対応しており、アーカイブ形式についても.rpmおよび.debパッケージを含めた大部分のフォーマットが扱える。

 toast本体については、Ubuntu、Fedora、openSUSEの専用パッケージは用意されていない。その実行に必要になる基本コンポーネントはPerlであり、ダウンロードの手順としては、デフォルト設定のままインストールするのであればPerlで記述されたスクリプトを各自の$PATHの通ったディレクトリに登録すればいいが、あるいはこのインストール自身をtoastを介して実行させることも可能で、その場合は自分のhomeディレクトリにインストールしてtoastのユーザを自分1人だけに限定することも、全ユーザに同じtoastを使用させるようシステム全体の共通設定とすることもできる。下記のサンプルは自分のhomeディレクトリにtoast本体をインストールさせる場合の実行例である。Webプロキシを介したファイルのダウンロードを行う場合は、toast本体のインストールをするための環境変数のセットアップが必要となる。


$ export http_proxy=http://hostname.example.com:port/
$ wget -O- http://toastball.net/toast/toast|perl -x - arm toast

 単独ユーザとしてtoastをインストールする場合、パッケージ群の格納先は$HOME/.toastとされるが、toastツール本体の位置は$HOME/.toast/armed/binになる。ただしこのarmed/binディレクトリは各自のパスに登録するのではなく、toastの起動はenvコマンドを介して行い、マニュアル、インフォメーション、ヘッダファイル、ライブラリをセットアップするためのパスを出力させて、個々のhomeディレクトリにて過去にtoastを用いてインストールしたソフトウェアを取り込めるようにしておく必要がある。

 また個々のブートアップ時に「toast env」を実行するようにしておくと、明示的な環境設定の変更をすることなく、toastを介してインストールしたソフトウェアを使用できるようになる。例えば下記に示したサンプル設定では、1つ目のコマンドにて該当する環境変数の変更を行っており、2つ目のコマンドでは、変更した環境変数を画面に出力させる代わりにevalに渡すようbashrcを変更して、新規シェルを開始させるごとにtoastのセットアップを実行させている。


$ $HOME/.toast/armed/bin/toast env
PATH=/home/saru/.toast/armed/bin:/usr/lib64/qt-3.3/bin:/usr/kerberos/bin:/usr/lib64/ccache:/usr/local/bin:/bin:/usr/bin:/home/saru/bin;
MANPATH=/home/saru/.toast/armed/man:/usr/kerberos/man:/usr/local/share/man:/usr/share/man/en:/usr/share/man:/usr/local/man;
INFOPATH=/home/saru/.toast/armed/info:;
CPATH=/home/saru/.toast/armed/include;
LIBRARY_PATH=/home/saru/.toast/armed/lib;
XML_CATALOG_FILES='/home/saru/.toast/armed/etc/xml/toast-xml-catalog /etc/xml/toast-xml-catalog';

$ echo 'eval `$HOME/.toast/armed/bin/toast env` ' >> ~/.bashrc

 システム全域をカバーするtoastのインストール手順についてはtoastのマニュアルを参照して頂きたい。私の場合、システム全域をカバーしたtoastの起動を一般ユーザの1人として試みた際にディレクトリのパーミッションに関する問題に遭遇したため、benというユーザ用にインストールしておいたバージョン1.453を使用せざるを得なかった。

 toastコマンドは、多数のオープンソース系ソフトウェアの配布用Webサイトに関するメタデータおよびソースリポジトリを認識できるように作られている。例えばFUSEファイルシステムのsshfsをインストールするといった場合、通常のダウンロード時に行うtarボールの特定をユーザが行う必要はなく、toastのfindコマンドによって該当するアプリケーションのダウンロード元を検索して入手可能なバージョンを一覧させることができるが、その際には正確なパッケージ名を指定しなければならない。実際このsshfsの場合も、freshmeat.netでのプロジェクト名はsshfs-fuseとされている。必要なパッケージをtoastにて検索できた場合は、armコマンドによるパッケージのダウンロード、ビルド、インストール、およびソフトリンクの作成を行えばいい。


$ toast find sshfs
...
can't find sshfs
$ toast find sshfs-fuse
...
sshfs-fuse
  version 1.7: found
    urls:
      http://downloads.sourceforge.net/fuse/sshfs-fuse-1.7.tar.gz?modtime=1156687148&big_mirror=0
  version 1.8: found
    urls:
      http://downloads.sourceforge.net/fuse/sshfs-fuse-1.8.tar.gz?modtime=1179322924&big_mirror=0
  version 1.9: found
    urls:
      http://downloads.sourceforge.net/fuse/sshfs-fuse-1.9.tar.gz?modtime=1197907540&big_mirror=0

$ toast arm sshfs-fuse
...
mkdir /home/ben/.toast/pkg/sshfs-fuse
mkdir /home/ben/.toast/pkg/sshfs-fuse/v1.9
...
# creating /home/ben/.toast/pkg/sshfs-fuse/v1.9/archive.tmp/sshfs-fuse-1.9.tar.gz
# fetching http://downloads.sourceforge.net/fuse/sshfs-fuse-1.9.tar.gz?modtime=1197907540&big_mirror=0
...
  export LD_PRELOAD=/home/ben/.toast/pkg/sshfs-fuse/v1.9/1/helpers/rewrite.so
  (cd /home/ben/.toast/pkg/sshfs-fuse/v1.9/1/src/sshfs-fuse-1.9; ./configure --prefix=/home/ben/.toast/armed)
  checking for a BSD-compatible install... /home/ben/.toast/pkg/sshfs-fuse/v1.9/1/helpers/install -c
  checking whether build environment is sane... yes
  checking for gawk... gawk
  checking whether make sets $(MAKE)... yes
  checking for gcc... gcc
...
$ ls -lh ~/.toast/armed/bin
lrwxrwxrwx 1 ben ben 53 2008-04-07 09:40 sshfs -> /home/ben/.toast/pkg/sshfs-fuse/v1.9/1/root/bin/sshfs*
lrwxrwxrwx 1 ben ben 50 2008-04-07 09:37 toast -> /home/ben/.toast/pkg/toast/v1.454/1/root/bin/toast*

 toastを介したインストールを行う最大のメリットは、この方式で過去にインストールしたソフトウェアの追跡とアップデートといった処理を簡単化できることである。インストール済みパッケージに関する情報はstatusコマンドで、それらのアップデートはupgradeコマンドで行えるが、具体的なパッケージ名を指定することなくこれらのコマンドを実行すると全パッケージを対象とした処理がtoastにより行われる。


$ toast status
sshfs-fuse
  version 1.9: stored
    urls:
      http://downloads.sourceforge.net/fuse/sshfs-fuse-1.9.tar.gz?modtime=1197907540&big_mirror=0
    build 1: armed
toast
  version 1.454: stored
    urls:
      http://www.toastball.net/toast/toast-1.454.tar.gz
    build 1: armed

$ toast upgrade
# fetching http://downloads.sourceforge.net/fuse/
# fetching http://sourceforge.net/projects/fuse/files
# fetching http://sourceforge.net/project/showfiles.php?group_id=121684
sshfs-fuse version 1.9 appears to be the latest available version
[/home/ben/.toast/armed/bin/toast: 4787/5855/5855/5872/5880/6718 v1.454]

通常の手順で処理できない場合の対処法

 一般的な操作手順である./configure; make; make install以外のビルドを行うパッケージの場合は、そのための調整をtoast側にて施しておく必要がある。ここではそうした事例としてarchivemountツールを考えてみよう。このプログラムはfreshmeat.netにも登録されていないので、addコマンドを用いてtoastにarchivemountの取得先を認識させなくてはならない。また同プロジェクトのWebページを見ると、そこにはtarボールの一覧がリストされているだけである。よってtoastを用いてarchivemountをインストールさせようとしても、このソフトウェアに対するmake installが行えないため、その処理は失敗することになる。


$ toast add http://www.cybernoia.de/software/archivemount
$ toast install archivemount
...
# fetching http://www.cybernoia.de/software/archivemount
# fetching http://www.cybernoia.de/software/archivemount/
rm -f /home/ben/.toast/pkg/archivemount/vunknown/archive.tmp/archivemount
# creating /home/ben/.toast/pkg/archivemount/vunknown/archive.tmp/archivemount-0.5.3.tar.gz
# fetching http://www.cybernoia.de/software/archivemount/archivemount-0.5.3.tar.gz
...
  (cd /home/ben/.toast/pkg/archivemount/vunknown/1/src/archivemount-0.5.3; make install)
  make: *** No rule to make target `install'.  Stop.
  make install returned 512
 

 この問題を回避する一番手軽な方法は、インストールのターゲットを指定するパッチを作成しておき、toast armコマンドの実行時にこのパッチをtoastに通知させるようにすることである。こうしたパッチについてはarmコマンドのソースに組み込んでおけばよく、これによりビルド、インストール、ソフトリンク作成の実行を含めた全ての手順が正常に実行されるようになる。この方式によるインストールの完了後statusコマンドを実行してみると、archivemountインストレーション時のパッチ適用をtoastが認識していることおよび当該パッチの取得先についての情報を確認できるはずだ。こうした処置を施しておくと、後日archivemountの新バージョンがリリースされた際に役立つはずである。


$ cd /home/ben/.toast/pkg/archivemount/v0.5.3/1/src/archivemount-0.5.3
$ cd ..
$ mkdir archivemount-0.5.3.me
$ cp archivemount-0.5.3/Makefile  archivemount-0.5.3.me/
$ vi archivemount-0.5.3.me/Makefile
$ diff -Nuar archivemount-0.5.3/Makefile archivemount-0.5.3.me
--- archivemount-0.5.3/Makefile 2006-12-29 01:32:47.000000000 +1000
+++ archivemount-0.5.3.me/Makefile      2008-04-07 10:35:13.000000000 +1000
@@ -49,3 +49,5 @@
 .PHONY: all test clean dist


+install:
+       install --mode 555 archivemount /usr/local/bin

$ diff -Nuar archivemount-0.5.3/Makefile archivemount-0.5.3.me >| /home/ben/.toast/archivemount-makefile.patch
$ toast clean archivemount
$ toast arm archivemount/0.5.3: \
  [ http://www.cybernoia.de/software/archivemount/archivemount-0.5.3.tar.gz \
    ~/.toast/archivemount-makefile.patch ]
...
$ toast status
archivemount
  version 0.5.3: stored
    urls:
      http://www.cybernoia.de/software/archivemount/archivemount-0.5.3.tar.gz
      file://localhost/home/ben/.toast/archivemount-makefile.patch
    build 1: armed
 

 toastを使えば、新規のソフトウェアにせよマイナーな存在のソフトウェアにせよ、それらのインストールはごく簡単に済ませることができる。freshmeat.netに登録されているプロジェクトの場合は、正しいプロジェクト名をtoastに指定するだけで、ユーザが個人的に使用するパッケージの最新バージョンのダウンロード、コンパイル、インストールが最低限の手間で実行されてしまうのだ。いずれにせよtoastを用いる最大のメリットは、インストール済みパッケージの管理およびソフトウェアのアップデートを簡単に済ませられるようになることだと言っていいだろう。

Ben Martinは10年以上にわたってファイルシステムに取り組んでおり、博士課程の取得後、現在はlibferris、ファイルシステム、検索ソリューションを中心としたコンサルティング業に従事している。

Linux.com 原文