Stowを使ってのパッケージ管理

Stow -- RPMの代わりとなる柔軟で、優れたソフトウェア

本稿では、Linux向けソフトウェア・インストール管理ユーティリティーのひとつで、Red HatやDebianの実証済みのパッケージ管理システムに比べても数多くの利点を備えているStowについて解説します。Stowを利用すれば、アプリケーションを標準のtarファイルにパッケージし、アプリケーション・バイナリーを論理的に整理して保存しておくことで簡単にアクセスできるようにすることができます。

Mugdha Vairagade (vmugdha@indiatimes.com), Independent developer

Mugdha Vairagadeは、いろいろな企業や組織といっしょにワイヤレス・アプリケーション開発を行っている開発技術者で、コンポーネント・アーキテクチャーを専門としています。彼女は、オープン・ソース・プロジェクトに特別な関心をもっており、これまで、Linux Documentation Project、Forum Nokia (WAP開発者フォーラム) およびW3Cに参加してきています。また、LinuxやXMLのテクノロジーについての技術記事も執筆しています。Mugdhaのメール・アドレスはvmugdha@indiatimes.com です。



2003年 2月 20日

Perlで記述され、インストールや使い方の簡単なStowは、シンプルながらも、Linuxボックスでのさまざまなソフトウェア・インストールの整理や管理に有効なソフトウェアです。Stowは、いろいろな種類のソフトウェア・パッケージを、きれいなディレクトリー・ツリー構造にして配置するのに便利です。このことは、あるソフトウェア・パッケージに属するファイルを別のパッケージのものと分離しておくのに役に立つだけでなく、そのソフトウェアがソフトウェア・パッケージやOSから要求されている場所にインストールされているかのように見せながらも、自分の望みの場所に自由に格納したりインストールするのを可能にします。

注意: Linuxについての中級レベルの知識とLinuxアプリケーションをインストールした経験があれば、本稿は理解しやすいことと思います。本稿では、Stowバージョン1.3.3およびPerlバージョン5.005を使用しています。

Linuxでのソフトウェア・インストールの管理

Stowのことを紹介する前に、まず、ソフトウェアのインストール管理 あるいはパッケージ管理 とも呼ばれているものについて考えてみたいと思います。ソフトウェアのインストール管理とは、ソフトウェア・アプリケーション、すなわちパッケージを、あるシステムにインストール、アンインストール、更新、整理するといった作業を総称して言い表したものです。これらの作業の中でも、アプリケーションの整理は、とくに重要な作業です。Linuxボックスでのアプリケーションのインストール、更新、アンインストールは、アプリケーションがきれいに整理されていれば、簡単に行えるようになり、便利になります。

Linuxシステムのほとんどのアプリケーションは、正しく実行し、機能させるためには、特定のディレクトリー (普通は、/usr/local/) にインストールする必要があります。これは、Linuxが要求する場合もあれば、アプリケーション自体が要求する場合もあります。Linuxシステムにインストールされているアプリケーションが少なく、アプリケーション同士のファイルを簡単に区別できる場合には、これが大きな問題となることはありません。

しかしながら、現実問題として、同じディレクトリーにたくさんのアプリケーションがインストールされたりすると、ディレクトリーの中は、すぐに、乱雑なものになります。たとえば、別のアプリケーションに属しているファイルを誤って上書きするようなアプリケーションをインストールした場合を考えてみてください。上書きされたそのファイルは取り替える必要があります。あるいは、アプリケーションをアンインストールも削除もせずに、どのファイルがそのアプリケーションに属しているかを確認することを考えてみてください。あるいは、あるアプリケーションで不要となったファイルを見つけ出し、除去したいということもあります。これらの状況は、どれも、多大な労力と時間、それにファイル名に対する強力な記憶力を必要とします。

そうした問題を克服するために、Linuxシステムでは、ソフトウェア・インストール管理ユーティリティーが使われています。それらのユーティリティーは、たくさんあるソフトウェア・インストールを整理、整頓するのに役立つだけでなく、そのように整理された配置を、必要に応じて何回でも簡単に変更できるようにもしています。Stowも、そうしたLinux用ユーティリティーの1つというわけです。


Stowの紹介

Red HatやDebianなどのLinuxのバージョンによっては、Stowと同様に効率的な独自のパッケージ管理ユーティリティーを同梱しているものもありますが (Red Hat 、Debianの場合は、それぞれrpm、apt-get)、それらのユーティリティーは、特定のパッケージング・フォーマットしか扱えないようになっています (Red Hat、Debianの場合は、それぞれ .rpm、.deb)。単純に .tarファイルでパッケージされているアプリケーションを管理するのであれば、Stowが一番です。

その他、Red HatとDebian以外のLinuxディストリビューションを使っている人や、いまあるパッケージ管理ユーティリティーに代わる安価なあるいは無料の製品を探している人、あるいは何でも自由自在に制御したいと思っている人にも、Stowは適しています。Stowは、GNUのGPL (General Public License) にしたがってライセンスされるフリー・ソフトウェアで、柔軟性があり、カスタマイズもでき、ユーザー・サポートや参考資料も豊富に用意されています。

Stowは、アプリケーションのインストール・ファイルをパッケージ・ディレクトリー と呼ばれる、アプリケーションごとの専用のディレクトリーに格納して整理し、したがってアプリケーション同士を分離することで、いろいろな種類のアプリケーションを管理します。これらのパッケージ・ディレクトリーは、収容ディレクトリー の中に設けられます。これは、収容されるすべてのアプリケーションのパッケージ・ディレクトリーを収めた親ディレクトリーです。

Stowでは、パッケージ・ディレクトリーに含まれるアプリケーションや関連するファイルを、ローカルなアプリケーション・インストールに通常使用される場所 (/usr/local/ ディレクトリー) やアプリケーション自体が指定するデフォルトの場所とは別のどこか適当な場所に自由に (その場所を収容ディレクトリーとして指定することで) インストール、格納することができます。このようにすることで、/usr/local/ ディレクトリーを整然と保っておくことができますし、きれいなディレクトリー・ツリー構造にして配置されたアプリケーションは、探し出すのも簡単です。

注意: デフォルトの収容ディレクトリーは、/usr/local/bin の中のStow自身のディレクトリーとなります。このディレクトリーは、Stowをインストールする際に変更することもできます (以下のStowのインストールを参照)。

Stowは、収容ディレクトリーのツリーにアプリケーションを整理して配置するばかりでなく、対応するsymlink (シンボリック・リンク) を、そのアプリケーションがもともとインストールされるべきだったデフォルトの場所に作成するということも行います。Stowでは、このデフォルトの場所のことをターゲット・ディレクトリー といいます。デフォルトでは、収容ディレクトリーの親ディレクトリーがターゲット・ディレクトリーとなります。/usr/local/stow を収容ディレクトリーとし、/usr/local を収容されるすべてのアプリケーションに共通なターゲット・ディレクトリーとするのが、通常のやり方ですが、収容ディレクトリーとターゲット・ディレクトリーのいずれについても、ユーザーが自由に別の場所を指定することができます (以下のstowコマンドを参照)。収容ディレクトリー中のアプリケーションのディレクトリー・ツリーは、ターゲット・ディレクトリー中の指定されたツリーと同じでなければなりません。

アプリケーションのターゲット・ディレクトリー中に置かれるsymlinkは、収容ディレクトリー中の対応するアプリケーションの実際の場所 (パッケージ・ディレクトリー) を指します。symlinkは、別の場所 (別のドライブやディレクトリーでもよい) に格納されているアプリケーションのイメージを代理するWindowsのショートカットやMacOSのエイリアスと似た面があり、symlinkを使って、アプリケーションの起動、実行を行うことができます。そうすることで、そのアプリケーションがターゲット・ディレクトリーにインストールされていて、そこから実行されるかのように見せることができます。この手法は、他のアプリケーションが、当該アプリケーションを起動したり、それと交信する必要がある場合や、そのアプリケーションがデフォルトの場所に収容されていることを前提としているような場合に役に立ちます。

注意:

  1. Stowは、相対のsymlinkを作成します。すなわち、symlinkは、自分自身の場所との相対関係で、パッケージ・ディレクトリーへのパスを表現します。
  2. Stowは、アプリケーションごとに作成するsymlinkの個数を最小限にしようとします。可能なら、パッケージ・ディレクトリー内のサブディレクトリー・ツリー1個につき、symlinkを1個だけ作成しようとします。このようにsymlinkを1個だけ作成する処理のことを、ツリーの折り畳み (tree folding) といいます。

また、Stowを使えば、同じアプリケーションを複数個インストールすることもできます。異なったインストレーションを、場所を変えて格納することができ、Stowを使うことで、それらの場所の中の任意のものを指すために、アプリケーションのsymlinkの集合を1つだけ作成し、更新することで対応できます。

Stowを使えば、ソフトウェア・インストールを整理できるだけでなく、それまでのソフトウェア・インストールの配置替えを何回でも行うことができます。Stowは、収容ディレクトリーに含まれるファイルやディレクトリーを、アンインストールの最中ですら、絶対に削除することはありません。アプリケーション・インストールを指しているターゲット・ツリー中のsymlinkを更新したり除去するだけです。したがって、アンインストールされたアプリケーションでも、それを単に収容し直すことで、いつでもインストールし直すことができます。


Stowのインストールと実行

必要なもの

Stowは、非常に簡単にインストールできます。Stowをインストールして実行するのに必要なものは、StowそのものとPerlバージョン5.005以上だけです。

  • Stowの最新バージョンは、GNUのFTPサイトからダウンロードできます (リンクについては、参考文献参照)。本稿では、記事執筆時点での最新バージョン1.3.3を使用しています。
  • Perlは、主だったすべてのLinuxディストリビューションで、標準でインストールされるようになっています。現在使用しているPerlのバージョンは、perl -v で確認できます。Perlに関する情報やPerlの最新バージョンは、perl.comから入手できます (リンクは、参考文献参照)。

Stowのインストール

Stowをインストールするには、Linuxシステムにルートとしてログインする必要があります。Stowのソース・ファイル (stow-1.3.3.tar.gz) をダウンロードしたら、以下の手順で、Stowを解凍 (untar) して、インストールを行います。

リスト1. Stowのインストール
# tar -zxvf stow-1.3.3.tar.gz
# cd stow-1.3.3
#./configure
# make
# make install prefix=/usr/local/stow

Stowのデフォルトのインストール場所は、/user/local/bin ディレクトリーです。このディレクトリーは変更することもできます。変更したい場合は、上のリストのmake install コマンドでprefix オプションの値に適当な場所を (ディレクトリーの絶対パスで) 指定します。

これで、Stowは、/usr/local/stow 下のそれ自身のディレクトリー・ツリーにインストールされます。すなわち、Stowの実行ファイルは/usr/local/stow/bin ディレクトリーに、Stowのman ファイルは/usr/local/stow/man ディレクトリーに、info ファイルは/usr/local/stow/info ディレクトリーに、それぞれ保存されます。以上で、Stowを使って、アプリケーションの収容作業を行う準備ができました。

注意:

  1. Stowのソースを解凍すると、stow-1.3.3フォルダーに、INSTALLという名前のファイルが作成されます。このファイルには、インストール手順についての有用な情報が示されています。
  2. Stowをインストールしたら、$PATH変数に収容ディレクトリーへの絶対パスを追加してください。

stowコマンド

Stowには、stow という特別なコマンドが用意されています。このコマンドにいろいろなオプションを添えて実行することで、Stowを起動して、ソフトウェアのインストール管理を行うことができます。stowコマンドの一般的な記法は、以下のとおりです。

$ stow [options] application-name

stowのオプションには、以下のものがあります。

  • -v または--verbose[=n] : Stowが何を行っているのかの詳しい説明を表示します。nは、詳しさのレベルを、0、1、2、3の4段階で表します。デフォルトは0です。単に-v または--verbose を指定すると、詳しさのレベルが1段階上がります。--verbose=n は、レベルをnにします。
  • -ddirectory または--dir=directory : 収容ディレクトリーを、カレント・ディレクトリーではなく、directory (所望のディレクトリーへの絶対パス) にします。これによって、directory の親をデフォルトのターゲット・ディレクトリーにすることにもなります。
  • -tdirectory または--target=directory : ターゲット・ディレクトリーを、現在の収容ディレクトリーの親ではなく、directory (所望のディレクトリーの絶対パス) にします。
  • -D または--delete : ターゲット・ディレクトリーからアプリケーションのsymlinkを削除します。すなわち、アプリケーションの収容解除 (unstow) を行います。
  • -R または--restow : アプリケーションの再収容 (restow) を行います (まず収容解除を行ってから、再度収容を行います)。このオプションは、アプリケーションのパッケージ・ディレクトリーに変更を加え、アプリケーションを更新した場合に、ターゲット・ツリーのsymlinkを更新して、不要になったものを除去するときに使用されます。
  • -c または--conflicts : 収容操作を実行したときに発生するかもしれない情報の不一致を検出します。このオプションは、別のオプション-n (以下参照) といっしょに使用します。ただし、間違った不一致情報が報告される可能性もあります (参考文献 には、Stowのマニュアルの中の情報の不一致に関する章へのリンクを示してあります)。
  • -n または--no : 収容操作は何も行わず、どんな結果になるかだけを表示します。実際の操作を何も行いませんので、stow -n を実行すると、操作を行った場合に実際に起こるはずの情報の不一致とともに、実在しない情報の不一致を報告する可能性があります (参考文献 には、Stowのマニュアルの中の情報の不一致に関する章へのリンクを示してあります)。
  • -V または--version : Stowのバージョンを表示します。
  • -h または--help : stowコマンドの記法を表示します。

Stowの使用例

Stowの使い方を学ぶために、仮想的なアプリケーションapp-1.4を収容することを考えます。アプリケーションのソースはapp-1.4.tar.gzで、/usr/local/bin にインストールしなければならないことになっているものとします。このアプリケーションをインストールするには、ルートとしてログインする必要があります。

まず、tarで圧縮されているソースを、たとえば、以下のようにsourceという名前のディレクトリーにアンパックします。

[root@linuxbox source]# tar -zxvf app-1.4.tar.gz

すると、ディレクトリーsourceにapp-1.4 というディレクトリーが新規に作成され、その中にapp-1.4のソースが格納されます。そこで、app-1.4 ディレクトリーに移ります。

[root@linuxbox source]# cd app-1.4

まずは、収容ディレクトリー下にアプリケーションをインストールします。その場所は/usr/local/stow であるとします。このインストールでは、以下のように、通常のconfigure、make、make installというお決まりの手順に従います。

[root@linuxbox app-1.4]# ./configure --prefix=/usr/local/stow/app-1.4
[root@linuxbox app-1.4]# make
[root@linuxbox app-1.4]# make install

次に、Stowを使って、アプリケーション・インストールを収容し、それに対応するsymlinkをターゲット・ディレクトリー/usr/local/bin に作成します。この作業を行うときには、ルートとしてログインする必要はありません。まず、収容ディレクトリーに移り、そこからstow コマンドを実行します。

[userX@linuxbox app-1.4]$ cd /usr/local/stow/
[userX@linuxbox stow]$ stow -t /usr/local/bin app-1.4

これで、アプリケーションapp-1.4が収容ディレクトリー内の専用のパッケージ・ディレクトリーapp-1.4 に収容され、対応するsymlinkがターゲット・ディレクトリー/usr/local/bin 内に配置されました。

app-1.4の更新や再構成を行う必要がでてきた場合には、そのパッケージ・ディレクトリーに変更を加え、アプリケーションの更新後に、再収容を行って、対応するsymlinksを更新します。

[userX@linuxbox stow]# stow -R app-1.4

このアプリケーションをアンインストールしたい場合は、app-1.4を収容解除 すればよいだけのことです。

[userX@linuxbox stow]# stow -D app-1.4

その場合、Stowは、アプリケーション・インストールを指しているリンクを除去するだけで、インストール・ファイルを削除することはありません。したがって、後でもう一度収容し直せば、そのアプリケーションを使用できるようになります。


まとめ

Stowは、Linuxシステム向けの、簡単で使いやすいフリーのソフトウェア・インストール管理ユーティリティーです。Stowは、.rpmや .debなどの標準的なパッケージング・フォーマットを使わずに、tarのソースから直接インストールされるアプリケーションに最適です。Stowは、所望の任意の場所に設けた専用のディレクトリーにアプリケーションを収容しながら、要求されている場所にアプリケーションがインストールされているかのように見せるといった方法で、アプリケーションのインストールを管理します。

Stowでソフトウェア・インストール管理を行うと、アプリケーションのインストール、アンインストールが簡単になる、インストールされたアプリケーションや関連するファイルの検出が簡単になる、アップグレードが簡単になる、収容されているアプリケーションの再構成が簡単になるという具合に、さまざまな利点が得られます。

参考文献

  • GNU公式サイト にあるStowのホームページには、関連する情報へのリンクが示されています。
  • Stowの最新バージョンは、GNUのFTPサイトからダウンロードできます。
  • Stowのマニュアル・ページには、一般的な情報の他、名前付けの不一致に対するStowの処理方法についてのもあります。
  • Perl関係の情報やPerlの最新バージョンは、perl.com から入手できます。
  • Red Hatのパッケージング管理ユーティリティーについては、本サイトが3回の連載記事として紹介しています。第1回 ではRPMの使い方が、第2回ではソフトウェア・パッチとRPMの配布方法が、第3回ではインストール、アンインストール時のスクリプトの実行方法が解説されています。
  • 企業全体でソフトウェア・ディストリビューションを管理する必要がある場合には、Tivoliが役に立ちます。IBM.comのTivoli構成マネージャーを参照してみてください。

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Linux, Open source
ArticleID=231412
ArticleTitle=Stowを使ってのパッケージ管理
publish-date=02202003