続・玩式草子 ―戯れせんとや生まれけん―

第4回 Plamoメンテナのすゝめ(中)

この記事を読むのに必要な時間:およそ 6 分

ビルド作業

次にbuildを指定して実行すると,/tmp/buildに移って(67行⁠⁠,make -j3を実行(69行)します。

$ ./PlamoBuild.fluxbox-1.3.7 build
cmp: ./src/defaults.cc: そのようなファイルやディレクトリはありません
make  all-recursive
make[1]: ディレクトリ '/tmp/build' に入ります
...
g++  -g -O2   -Wl,--as-needed -o fluxbox-update_configs src/fluxbox_update_configs-defaults.o \
   src/fluxbox_update_configs-Resources.o util/fluxbox_update_configs-fluxbox-update_configs.o \
   libFbTk.a -lfribidi -lX11  -lrt  -lm
make[2]: ディレクトリ '/tmp/build' から出ます
make[1]: ディレクトリ '/tmp/build' から出ます

最初にcmpが「ファイルが見つからない」旨のエラーを出しているものの,ビルドそのものは問題なく進み,/tmp/build/以下にコンパイルされたファイルが集積されました。

$ ls /tmp/build/
Makefile    config.status*  fluxbox*                 libFbTk.a  stamp-h1
config.h    fbrun*          fluxbox-remote*          nls/       util/
config.log  fbsetroot*      fluxbox-update_configs*  src/       version.h

デフォルトで設定している"make -j3"は「make作業を3プロセスまで並列で進める」という指定で,4コアくらいのCPUを想定しています。搭載メモリに余裕があり,コア数が多いCPU環境では,並列度を上げればビルド速度も向上します。

一方,並列ビルドを考慮していない古めのソフトウェアの中には並列処理しようとすると「必要なファイルが見つからない」旨のエラーを出すものがあります。そのような場合,"-j3"オプションを削除するか,"-j1"として並列処理を禁止すれば解決することがあります。

パッケージ化

最後にpackageを指定してパッケージ化の作業を行います。"package"を指定すると,ビルドスクリプトは$Pで指定しているインストール先ディレクトリを準備した上で(78行目⁠⁠,82行目の"make install DESTDIR=$P"を実行します。

22行目にコメントしてあるように,$Pはカレントディレクトリ(ビルドスクリプトのあるディレクトリ)の"work"ディレクトリを指しているので,./work/に必要なファイルがインストールされ,そこからパッケージが作られることになります。

$ ./PlamoBuild.fluxbox-1.3.7 package
Do you want to package as root? [y/N] 
make  install-recursive
make[1]: ディレクトリ '/tmp/build' に入ります
...
pruning symlink in /home/kojima/Srcs/F/Fluxbox/work/usr/share/man/mann
basename:fluxbox
version:1.3.7
arch:x86_64
build:B1
ext:txz

しかしながら前回も指摘したように,一般ユーザで作成したパッケージでは,ファイルの所有者が一般ユーザ(kojima)のままです。

$ tar tvf fluxbox-1.3.7-x86_64-B1.txz
drwxr-xr-x kojima/users      0 2018-11-23 16:09:24 usr/
drwxr-xr-x kojima/users      0 2018-11-23 16:09:26 usr/share/
drwxr-xr-x kojima/users      0 2018-11-23 16:09:25 usr/share/fluxbox/
...

間違えてこの状態のパッケージをインストールしてしまうと,/usr以下のディレクトリの所有者がkojima/usersに変更されてしまい,一般ユーザが/usr以下を書き替え可能になる等の不具合が生じます。そのため,再度ビルドスクリプトを実行し,今度はroot権限でパッケージ化します。

$ ./PlamoBuild.fluxbox-1.3.7 package
Do you want to package as root? [y/N] y
パスワード: *******
make  install-recursive
...

"Do you want to package as root?"の質問に "y"と答えると,rootパスワードの入力が求められ,認証されればroot権限でmake installが実行されて,適切なユーザパーミッションが設定されたパッケージが作成できます。

$ tar tvf fluxbox-1.3.7-x86_64-B1.txz
drwxr-xr-x root/root         0 2018-11-23 16:14:22 usr/
drwxr-xr-x root/root         0 2018-11-23 16:14:24 usr/share/
...

紹介したように,一度一般ユーザで作成してから,再度root権限でパッケージを作成し直すのは二度手間のように思われるかも知れません。しかしながら,インストール先を/usr/local/に決め打ちしているなど,DESTDIRが効かない作りのソフトウェアもたまにあり,それに気づかないままroot権限でmake installすると,思ってもいない所にファイルがインストールされてしまうことがあります。そのようなトラブルを防ぐため,一度,一般ユーザでインストールして,全てのファイルが"./work/"以下に収まることを確認した上で,root権限でパッケージ化する方が安全です。

作成したパッケージは,他のPlamo用パッケージ同様,installpkgコマンドでインストールできます。

$ sudo installpkg fluxbox-1.3.7-x86_64-B1.txz 
fluxbox-1.3.7-x86_64-B1 のインストール中

テストのために,fluxboxがウィンドウマネージャーになるよう,~/.xinitrc を書き替えます。

$ mv .xinitrc .xinitrc.org
$ echo "startfluxbox" > .xinitrc

こうしておいてからstartxでXを起動すると,シンプルなfluxboxウィンドウマネージャーが起動しました。

図1 fluxboxウィンドウマネージャの設定画面

図1 fluxboxウィンドウマネージャの設定画面

インストール済パッケージの管理情報

Plamo Linuxではインストールした各パッケージの情報を/var/log/packagesディレクトリにファイルとして記録しています。

今回インストールしたfluxboxでは,/var/log/packages/fluxboxというファイルに,パッケージ名やサイズ,このパッケージからインストールした全ファイルの名前が登録されます。

$ cat -n /var/log/packages/fluxbox 
    1 PACKAGE NAME:     fluxbox-1.3.7-x86_64-B1
    2 COMPRESSED PACKAGE SIZE:     776 K
    3 UNCOMPRESSED PACKAGE SIZE:     3300 K
    4 PACKAGE LOCATION: fluxbox-1.3.7-x86_64-B1.txz
    5 PACKAGE DESCRIPTION:
    6 FILE LIST:
    7 usr/
    ....
  333 usr/bin/fluxbox
  334 usr/bin/fbsetroot
  335 usr/bin/fluxbox-remote
  336 usr/bin/fluxbox-update_configs
  337 usr/bin/fbrun

installpkgコマンドでインストールしたパッケージの情報は全てこのディレクトリに保存されているので,たとえば/usr/bin/mutoolというコマンドがどのパッケージからインストールされたかも,grepコマンドを使って簡単に調べることができます。

$ grep mutool /var/log/packages
/var/log/packages/mupdf:usr/bin/mutool
/var/log/packages/mupdf:usr/share/man/man1/mutool.1.gz

この例では,/usr/bin/mutoolはmupdfというパッケージに由来することがわかり,/var/log/packages/mupdfを見ればソフトウェアのバージョンやサイズ,一緒にインストールされたファイルなどを確認できます。

$ cat -n /var/log/packages/mupdf
   1  PACKAGE NAME:     mupdf-1.11-x86_64-B1
   2  COMPRESSED PACKAGE SIZE:     20845 K
   3  UNCOMPRESSED PACKAGE SIZE:     43950 K
   4  PACKAGE LOCATION: /var/adm/mount/plamo/09_printings/mupdf-1.11-x86_64-B1.txz
   5  PACKAGE DESCRIPTION:
   6  mupdf: 軽量PDF/XPS/E-bookビューワー MuPDF
   ...

最近では,たいていのソフトウェアが"./configure && make && make install"だけでインストールできます。しかしながら,この方法でインストールしてしまうと,どこにどのファイルがインストールされたかを管理できないため,そのソフトウェアをアンインストールしたい際に面倒なことになります。

そのため,簡単なソフトウェアでも,いったんパッケージ化してinstallpkg/removepkgで管理するのがお勧めで,make_PlamoBuild.pyはそのためのヘルパーとして使えるように設計しているつもりです。

Plamo Linuxは,メンテナの人手不足もあって,パッケージの数はメジャーなディストリビューションと比べるとずいぶん見劣りします。しかしながら,紹介してきたmake_PlamoBuild.pyを使えば誰でも簡単にパッケージを作れますので,皆さんもぜひパッケージ作りに挑戦してみてください。

著者プロフィール

こじまみつひろ

Plamo Linuxとりまとめ役。もともとは人類学的にハッカー文化を研究しようとしていたものの,いつの間にかミイラ取りがミイラになってOSSの世界にどっぷりと漬かってしまいました。最近は田舎に隠棲して半農半自営な生活をしながらソフトウェアと戯れています。

URLhttp://www.linet.gr.jp/~kojima/Plamo/index.html