不要なパッケージを完全に削除できるインストーラー GNU Stow

 フリー・ソフトウェアでは、インストール関連の手順が十分に説明されていないことが多い。たとえば、インストールしたパッケージが気に入らなかったときに削除する方法や、気に入ったパッケージをアップグレードする方法がわからないことがある。しかし、 GNU Stow を使えば、このどちらの問題にも容易に対処することができる。Stowは、自分でコンパイルしインストールするタイプのパッケージのためのパッケージ・マネージャーだ。

 StowはGNU/Linuxディストリビューションの開発でよく使われている。したがって、主要なGNU/Linuxディストリビューションであれば、デフォルトのパッケージ・リポジトリーに含まれている。ほかに必要なパッケージはPerlだけだ。両方ともないディストリビューションの場合でも、簡単なブートストラッピング・インストールで、両方インストールすることができる。

 Stowでパッケージを作成してインストールする場合は、ソース・パッケージに付属するインストール手順の「make install」部分を次のように一部(太字の部分)変更する。

sudo make install prefix=/usr/local/stow/pkgname 
cd /usr/local/stow
sudo stow pkgname 

 最初に、「make install」を実行する。これによりprefix=変数に指定されているディレクトリーが作成され、そのディレクトリーにパッケージの全ファイルが格納される。そのディレクトリーを/usr/local/stow/に変更するのは/usr/local/にインストールするためだ。というのは、Stowはカレント・ディレクトリーの「1つ上」にパッケージをインストールするからだ。次に、「stow pkgname 」を実行する。これにより、パッケージ・ディレクトリーの下にある各ファイルのシンボリック・リンクが/usr/local/に作られ、stow/pkgname/を省いてパスを指定できるようになる。したがって、ほとんどのシェルやアプリケーション・ランチャーでは、vimと入力するだけで/usr/local/stow/vim-7.0/bin/vimを起動することができる。

パッケージの削除方法
 Stowを使わなくても、コンパイルを要するパッケージを削除することはできる。たとえば、一部のパッケージでは、Makefileにオプション「make uninstall」が記述されており、「make install」でインストールしたファイルの全部または一部を削除できるようになっている。ただし、次のような欠点がある。すなわち、一部のファイルが削除されずに残ることがあり、ディレクトリーについては大方は削除されず、ソース・パッケージは必ず残しておかなければならない。これに対して、Stowはパッケージが作成したファイルとディレクトリーを完全に削除でき、ソース・パッケージも不要だ。

 削除に備えて、専用のディレクトリーにインストールすることもできる。しかし、その場合、たとえばVimを/opt/vim/にインストールしたとすると、Vimを使うには/opt/vim/bin/vimと入力しなければならない。これに対して、Stowは実行形式を/usr/local/bin/にインストールするので、名前を入力するだけで実行可能だ。

 ほかのインストール・ユーティリティー、たとえばCheckInstallもある。これは使いやすいが、すべてのソース・パッケージに使えるわけではない。これに対して、Stowは使いやすく、しかもすべてのソース・パッケージに対して使うことができる。

AutoConfが使われていない場合

 Unix系オペレーティング・システム向けに作られたフリー・ソフトウェア・パッケージのほとんどは、GNU AutoConfを使ってビルドされており、そうしたパッケージでは「make install」コマンドでprefix=変数を使うことができる。したがって、上の方法を使ってインストール可能だ。しかし、中にはAutoConfを使っていないパッケージもあり、prefix=変数に対応していないことがある。そうしたパッケージをStowでインストールする場合は、パッケージのMakefileまたはインストール・スクリプトを変更する。

 まず、パッケージに付属するインストール手順説明書(通常はREADMEまたはINSTALLという名のファイル)を探し、手順を確認する。次に、パッケージのファイルが/usr/local/stow/の下にインストールされるように、その手順を変更する。具体的な変更方法は次の通り。makeを使ってインストールする場合は、Makefileを開いて、インストール先のディレクトリー名(通常/usr/local)を含む変数を探し、その値を/usr/local/stow/package_name-release_number/に変更する。makeを使わず、ソース・ディレクトリーに用意されている独自のスクリプト(たとえば、./install)を使ってインストールする場合は、そのスクリプト中のインストール先ディレクトリー名を含む変数を変更する。

 パッケージにインストーラーが付属していない場合は、/usr/local/stow/package_name-release_number/というディレクトリーを作り、パッケージのファイルをそのディレクトリーに自分の手でコピーする。

 ごく少数だが、CONSやSConsなどの特殊なインストーラーを使っているパッケージもある。しかし、大概のインストーラーは、makeと同じように、パッケージのソース・ディレクトリーの最上位レベルに動作を指示する制御ファイルがあり、これを読み込んで動くように作られているものだ。上記の2種もそうなっている。したがって、そうしたパッケージをStowでインストールするときは、インストーラーのマニュアルを見て制御ファイルがいずれであるかを調べ、テキスト・エディターでそのファイルを開き、インストール先ディレクトリー名を含む変数を変更すればよい。

ファイル名の競合

 パッケージ・マネージャーは、一般に、ファイル名の競合に弱い。これはStowも同じだ。たとえば、/usr/local/にNew vi(Nvi)がある環境にVimをインストールする場合を考えてみよう。VimもNviも/usr/local/bin/exファイルが必要なため、Stowを実行すると次のエラーが表示される。

stow: CONFLICT: /usr/local/stow/vim-7.0/bin/ex vs. /usr/local/bin/ex

 エラーには違いないが、これはありがたいエラーだ。Stowでなければ、このインストールでNviのexバイナリは何の断りもなくVimの同名ファイルに置き換わってしまうからだ。

 このような場合、最も簡単な対策はいずれかのパッケージを削除することだ。ファイルの名前を変更して両方のパッケージを残すこともできるが、いろいろ厄介な事象が生ずる可能性がある。プログラムの中には必要なファイルを名前で検索するものがあるし、自身が正常に動作するのにその名前を必要とするものさえあるからだ。たとえば、exは名前を変更すると正常に動作しない。Vimのexは、コマンド名「ex」で呼び出されたときにexモードで動作するように作られているからだ。

 この場合、一方のパッケージを異なるファイル名でコンパイルし直せば、両方のパッケージが使えるようになる。たとえば、Vimのソース・ディレクトリーで./configure --helpを実行すると、次の3つのオプションが表示される。

--with-vim-name=NAME    what to call the Vim executable
--with-ex-name=NAME     what to call the Ex executable
--with-view-name=NAME   what to call the View executable

 この3つのオプションに既定のNAMEとは異なる名前を設定して./configureを実行し、次いでmakeを、次に「make install」を(prefix=付きで)実行すれば、ファイル名の競合は解消する。

パッケージの削除とアップグレード

 Stowでパッケージを削除するにはコマンドが2つ必要だ。まず、パッケージをインストールしたときと同じように、cdでカレントディレクトリーを/usr/local/stow/に変更しておく。2つめのコマンドは、「stow -D dirname 」で、これは削除するパッケージのあるディレクトリーの1つ上(すなわち/usr/local/stow/)で実行する。

 これにより、/usr/local/のシンボリック・リンクで/usr/local/stow/dirname/を指すものはすべて削除される。しかし、/usr/local/stow/とそのサブディレクトリーにあるファイルについては削除も変更もされず、そのままディスク上に残る。ディスク上の領域を使うことになるが、いつでも再インストール可能だ。領域を開放したければ、rmを使ってパッケージのあるディレクトリーを完全に削除すればよい。

 Stowはパッケージのインストールや削除ができるだけでなく、古いパッケージを削除し新しいものをインストールする形で、アップグレードすることもできる。アップグレードしたものの不満な場合は、逆に、新しいものを削除し以前のものをインストールして復元することもできる。

 最後に、Stowをインストールして使ってみたものの気に入らなかったらどうするか。その場合は、お使いのディストリビューションに付属するパッケージ・マネージャーを使ってStow自身を削除する。あるいは、「stow -D stow」で削除することも可能だ。Stowを削除しても、Stowを使ってインストールした既存のパッケージが壊れることはなく、削除後も正常に機能する。

Linux.com 原文