toastで行うソフトウェアのインストールとアップデート管理
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、ファイルシステム、検索ソリューションを中心としたコンサルティング業に従事している。