概要
porg は、ソースコードからビルドを行ったパッケージソフトウェアなどを管理するためのパッケージ管理ツールです。通常の Linux ディストリビューションなどでは、既定のパッケージ管理ツールが提供されていますから、普通はこんなツールを必要としません。これが必要となるのは、既定のパッケージ管理ツールの範囲外において、そもそも必要なパッケージが提供されていなかったり、パッケージ提供はあるけれども root 権限がないので導入できなかったり、あるいは既存パッケージをカスタマイズしてインストールしたかったり、といった場面を通じて、各種ソフトウェアを導入および管理する際に porg が活用できます1。
porg は元々は paco という名で開発されていたものが、名前が変わり開発者も変わって porg となりました。何人かの方が porg (あるいは paco) のことを紹介したり説明したりするサイトが存在していますから、覗いて見るのも良いかと思います。ただ筆者はこれまで porg の扱いに慣れ親しんできていて、他の方の紹介サイトなどには、後一歩、実践的な手順が抜けているようにも感じます。ですから、porg の実践的活用方法を示すことにします。まずここではインストールまでの話をします。
入手とインストール
提供サイトからのソース入手
提供サイトは以下です:
porg Source Code Package Organizer
https://sourceforge.net/projects/porg/files/
本文執筆時点での最新バージョンは porg-0.10 ですので、上記サイトから porg-0.10.tar.gz をダウンロードします。
$ wget https://sourceforge.net/projects/porg/files/porg-0.10.tar.gz
標準的なインストール
porg のソースからのビルド・インストールは、標準的には以下のようにします。ここでいう標準的とは、root 権限も有していて、porg を全ユーザー向けにインストールするような状況を指すものとします。そしてこの節の後に、実践的なインストール手順も示しますが、一通りここでの手順も一読ください。
$ tar xf porg-0.10.tar.gz
$ cd porg-0.10
$ ./configure --prefix=/usr \
$ --sysconfdir=/etc \
$ --disable-grop
$ make
$ sudo ./porg/porg -lD make install
ポイントをいくつか示します。
-
--prefix=/usr
により、porg の実行モジュールを/usr/bin
にインストールするようにします。必要に応じて--prefix=/usr/local
などとします。 -
--sysconfdir=/etc
により porg の設定ファイルporgrc
などを/etc
ディレクトリ配下にインストールします。これがない場合は${PREFIX}/etc
になってしまい、FHS 的には不適当となります。 -
--disable-grop
は porg の GUI バージョンをインストールしないようにします。デスクトップ環境 (X 環境) でのインストールであって GUI 版も利用する場合には、このオプションをはずします。ちなみにこの GUI 版はあまり期待しない方がよいです。コマンドラインを叩く方法をしっかり身につければよいと思います。 -
sudo ./porg/porg ...
は、他のサイトでは見かけないインストールの仕方かと思います。これが正しいのです。
./porg/porg
というのは、ソースディレクトリ内にてビルドされた、出来立てホヤホヤの porg 実行モジュールです。
porg のバージョン 0.8 以下か、あるいはその前身である paco を操作されていた方は、ここでmake install
とした上で続けてmake logme
としていたはずです。
この logme というのは、porg そのものを porg のパッケージ管理の中に登録するコマンドになっていました。こうしないと登録が出来なかったのです。
しかしこの logme は porg 0.9 以降はなくなりました。
代わりに./porg/porg -lD make install
で、porg のインストールと同時に、管理登録までも行うようになりました。
実践的なインストール
そもそもなぜ porg を利用したいかと言えば、端的に言って「root 権限を持っていないけど、パッケージ管理をしたい」ということになるかと思います。となると、上で示した標準的インストールの手順は使えません。なぜなら /usr
ディレクトリは管理権限なしには操作できないからです。さらに porg は登録されるパッケージ情報をテキストファイルに保存するのですが、その保存先ディレクトリはデフォルトでは /var/log/porg
となっています。これもまた管理権限なしには操作できません。
ちなみに上の標準的なインストールを行った porg を、一般ユーザーが利用すると以下のように、
$ porg -lp package somecommands....
porg: /var/log/porg: Permission denied
といったように /var/log/porg
にアクセスできず porg 操作ができません。
一般ユーザーでの利用を前提に (一般ユーザーが自分だけで porg を導入して利用することを前提に) porg をインストールするのであれば、例えば以下のようなインストール手順とします。ここでの要点は、root 権限を必要とするディレクトリにはインストールを行わないようにすることです。
$ tar xf porg-0.10.tar.gz
$ cd porg-0.10
$ ./configure --prefix=$HOME/usr \
$ --sysconfdir=$HOME/etc \
$ --with-porg-logdir=$HOME/var/log/porg \
$ --disable-grop
$ make
$ mkdir -p $HOME/var/log/porg
$ ./porg/porg -lD make install
ポイントは以下となります。各種ディレクトリは適宜、好みに合わせて変更してください。
-
--prefix=$HOME/usr
は、自分のホームディレクトリ配下の$HOME/usr/bin
(具体的に例えば/home/foo/usr/bin
) に porg 実行モジュールをインストールするようにします。
当然$HOME/usr/bin
には PATH を通す必要があります2。 -
--sysconfdir=$HOME/etc
も同様です。/etc
ではなく$HOME/etc
を指定します。 - 新たに
--with-porg-logdir=$HOME/var/log/porg
を加えます。前述した「porg が管理する各種パッケージ情報を示したテキストファイル」を$HOME/var/log/porg
に置くことを指示します。 -
mkdir -p $HOME/var/log/porg
により、上のディレクトリを生成します。
こうすることで、porg を root 権限なしに自在に操作していくことができます。
インストール後の動作確認
porg のバージョンを確認します。
$ porg --version
porg-0.10 (17 May 2016)
Written by David Ricart <http://porg.sourceforge.net>
porg そのものが porg によって管理されているかどうかを確認します。
$ porg porg
porg-0.10
管理されている porg のインストール済ファイルを一覧確認します。(foo
は自ユーザー名を表わします。)
$ porg -f porg
porg-0.10:
/home/foo/etc/bash_completion.d/porg_bash_completion
/home/foo/etc/porgrc
/home/foo/usr/bin/paco2porg
/home/foo/usr/bin/porg
/home/foo/usr/bin/porgball
/home/foo/usr/lib/libporg-log.a
/home/foo/usr/lib/libporg-log.la
/home/foo/usr/share/man/man5/porgrc.5
/home/foo/usr/share/man/man8/porg.8
/home/foo/usr/share/man/man8/porgball.8
/home/foo/usr/share/porg/README
/home/foo/usr/share/porg/download.png
/home/foo/usr/share/porg/faq.txt
/home/foo/usr/share/porg/index.html
/home/foo/usr/share/porg/porg.png
/home/foo/usr/share/porg/porgrc
なおこの出力結果は、先に示した「実践的インストール」を行った結果です。「標準的インストール」を行った場合は、ちょうど \home\foo
を取り除いた出力結果となります。
また bash-completion
パッケージがインストールされていない場合は、ファイル一覧先頭の /home/foo/etc/bash_completion.d/porg_bash_completion
はインストールされていないはずです。
/usr/bin/porg
を一般ユーザーが使うための環境整備
porg が root 権限で既にインストールされている環境において、自ユーザーが独自に porg によるパッケージ管理を行いたいとします。つまり porg がごく標準的に /usr/bin/porg
にインストールされている状態で、root ではない自ユーザーが porg を使う方法です。単純に porg -lD make install
を実行するだけでは、上で示したように /var/log/porg
へのアクセス権限がないため正常処理ができません。
そこで /var/log/porg
というディレクトリアクセスを、実行時に変更する方法をとります。porg の実行オプション --logdir=<log directory>
を使います。前述のとおり、このディレクトリは「porg が管理する各種パッケージ情報を示したテキストファイル」が収容される場所であるため、そういったディレクトリを自ユーザーが自由にアクセスできるディレクトリに振り替えてしまうというやり方になります。
まずは自ユーザーのホームディレクトリ配下に、上で言うディレクトリを新たに作ります。ここでは $HOME/.var/log/porg
というディレクトリにします。
$ mkdir -p $HOME/.var/log/porg
そして例えば bar パッケージを make install
によりインストールする際には、--logdir
オプションをつけて以下のように実行します。
$ porg -lp bar-0.0.1 --logdir=$HOME/.var/log/porg make install
$HOME/.var/log/porg
へは、今の場合 bar パッケージに関する情報を収めたテキストファイルが新たに作り出されます。
これより先は注意が必要です。
/usr/bin/porg
によって管理された通常のパッケージ情報は /var/log/porg
配下にあるはずですので、単純に porg
を実行すると、それは /var/log/porg
配下にあるパッケージ情報を取り扱うことになります。したがってもし、上の bar パッケージを以下のようなコマンドにより参照しようとしても、参照できないことになります。bar パッケージの情報は $HOME/.var/log/porg
にあるのであって、/var/log/porg
にはないからです。
$ porg bar
(...何も表示されない...)
bar パッケージの情報は $HOME/.var/log/porg
にあるわけですから、これを参照するためにはここでも --logdir
オプションを使わなければなりません。
$ porg --logdir=$HOME/.var/log/porg bar
bar-0.0.1
この後に、自ユーザー管理のもとに、別のパッケージを新たにインストールする場合や、それまでの自分が管理する登録パッケージを参照する場合など、すべての局面において --logdir=$HOME/.var/log/porg
をつけていくことになります。毎回毎回 --logdir
オプションをつけての実行は面倒になるので、いっそのこと alias を定義してしまいましょう。~/.bashrc
あたりに以下の1行を加えます。
alias porg="porg --logdir=$HOME/.var/log/porg"
もう一度、今度は --logdir
オプションを入力せずに bar パッケージを参照してみます。(source ~/.bashrc
を行うなどして alias を有効にしておきます。)
$ porg bar
bar-0.0.1
bar パッケージの情報が表示されます。もうこれから先は、--logdir
をつけずに利用していくことができます。
なお /var/log/porg
に登録されているパッケージ情報も、同時に参照したいような場合は、alias を無効にするために porg
の前に \
(バックスラッシュ) をつけて実行します。
$ \porg somepackage
somepackage-1.2.3
このあたりは、かなり個人的な嗜好もあるところかと思いますので、適宜ご対処ください。
-
そもそもこのツールは Linux From Scratch に集う開発者の中から作り出されたツールであるようで、実践として Linux From Scratch をビルド構築する際のパッケージ管理に活用することができます。 ↩
-
~/.bashrc
などにexport PATH=$HOME/usr/bin:$PATH
といった記述を書き加えることになります。さらに man ページも参照したいなら、同じように~/.bashrc
にexport MANPATH=$HOME/usr/share/man:$MANPATH
も加えることになるでしょう。 ↩