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

第3回 Plamoメンテナのすゝめ(上)

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

昨今は少子高齢化に伴なう労働力不足がかまびすしく論じられ,定年の延長や外国人労働者,AIやロボット,ドローンの活用等,さまざまな方策が検討されています。

規模こそ異なりますが,Plamo Linuxでもパッケージを作成するメンテナの不足,高齢化は深刻な問題になっています。

そこで,Plamo Linux 7.0(Plamo-7.0)が出た機会に合わせ,一人でも多くの人にパッケージ作りに関心を持ってもらうため,何回かに渡ってPlamo Linuxのパッケージ作成方法を紹介していこうと思います。

「自動化」が人手不足の対策になるように,Plamo Linuxではmake_PlamoBuild.pyというビルドスクリプト作成ツールがメンテナ不足の対策になっているので,まずはこのツールの紹介から始めましょう。

make_PlamoBuild.pyの基本的な使い方

Plamo Linux用のパッケージをビルドするためのスクリプトとそれを作るツールについては,過去に何度かとりあげたことがあります。しかしながら,最後に取りあげた回から早2年,その間にPlamo-7.0をリリースするなど状況もずいぶん変化しているので,過去の記事と重複する部分もあるものの,改めて最初から解説することにします。

ソースコードからパッケージを作成するにはさまざまな作業が必要で,ビルドスクリプトをゼロから書くのはかなり面倒です。一方,必要な作業はたいていのパッケージに共通で,定型化することも可能です。そこでPlamo Linuxでは,メンテナの手間を省くために,ビルドスクリプトを作成するツールを用意しました。

このツールはPlamo Linuxのバージョンアップと共に進化していて,最近使っているmake_PlamoBuild.pyでは,作成したビルドスクリプトそのままで,たいていのソフトウェアをパッケージ化できるようになりました。

make_PlamoBuild.pyは,ソースコードを展開したディレクトリを調べてそのソフトウェアのビルド方法を推測し,それに応じたビルドスクリプトを作成します。このツールは"-h"を引数にして起動すると,簡単な使い方を示します。

$ make_PlamoBuild.py -h
usage: make_PlamoBuild.py [-h] [-p PREFIX] [-u URL] [-m METHOD] [-s] srcdir
 
PlamoBuild script maker
 
positional arguments:
  srcdir                source code directory
  
optional arguments:
  -h, --help            show this help message and exit
  -p PREFIX, --prefix PREFIX
                        install directory prefix(default=/usr)
  -u URL, --url URL     source code download url
  -m METHOD, --method METHOD
                        force config method(config, cmake, perl, python)
  -s, --source          copy source codes into build directory(use with configure)

ビルドしたいソースコードを展開したディレクトリsrcdirが必須の引数です。よく使うオプションはソースコードのURLを指定する"-u"で,ここで指定したURLは作成したビルドスクリプトのヘッダ部分に設定されます。その他のオプションについては後述します。

make_PlamoBuild.pyの実行例として,Plamo-7.0には含まれていない,fluxboxウィンドウマネージャーをパッケージ化してみましょう。

ソースコードのダウンロードと展開

まず,作業用のディレクトリを作ります。筆者は,ファイルとディレクトリを一目で区別できるように,ディレクトリ名は大文字で始めるのが好みです。

$ mkdir Fluxbox ; cd Fluxbox

パッケージ化したいソフトウェアのソースコードURLをホームページ等で調べ,必要なファイルをダウンロード,展開します。fluxboxの場合,sourceforge.netが入手先でした。

$ wget http://sourceforge.net/projects/fluxbox/files/fluxbox/1.3.7/fluxbox-1.3.7.tar.xz
  --2018-10-25 12:31:50--  http://sourceforge.net/projects/fluxbox/files/fluxbox/1.3.7/fluxbox-1.3.7.tar.xz
  sourceforge.net をDNSに問いあわせています... 216.105.38.13
  sourceforge.net|216.105.38.13|:80 に接続しています... 接続しました。
  ...
  2018-10-25 12:38:59 (2.70 MB/s) - `fluxbox-1.3.7.tar.xz' へ保存完了 [786492/786492]
$ tar xvf fluxbox-1.3.7.tar.gz
  fluxbox-1.3.7/
  fluxbox-1.3.7/TODO
  ...
  fluxbox-1.3.7/3rd/vim/vim/compile_vba.sh
  fluxbox-1.3.7/3rd/vim/vim/Makefile

make_PlamoBuild.pyの実行

展開したソースコードディレクトリ(fluxbox-1.3.7)を指定してmake_PlamoBuild.pyを実行します。その際,"-u"オプションでソースコードのURLを指定すれば,作成するPlamoBuildスクリプトに自動的に組み込まれます。また,スクリプト名やパッケージ名,バージョンなども,ソースコードディレクトリの名前を元に生成します。

$ make_PlamoBuild.py -u http://sourceforge.net/projects/fluxbox/files/fluxbox/1.3.7/fluxbox-1.3.7.tar.xz fluxbox-1.3.7
$ ls -l
合計 802,816
-rwxr-xr-x  1 kojima users   2,854 10月 25日  19:44 PlamoBuild.fluxbox-1.3.7*
drwxr-xr-x 10 kojima users   4,096  2月  8日 2015年 fluxbox-1.3.7/
-rw-r--r--  1 kojima users 786,492  2月  8日 2015年 fluxbox-1.3.7.tar.xz

これで,fluxbox-1.3.7のビルドスクリプトPlamoBuild.fluxbox-1.3.7が作成できました。

こうして作成したPlamoBuild.fluxbox-1.3.7を実行すると,configure,make,make installを順に実行して,最終的にfluxbox-1.3.7-x86_64-B1.txzというパッケージを作成します。

$ ./PlamoBuild.fluxbox-1.3.7
configure: WARNING: unrecognized options: --disable-static, --enable-shared
checking for gcc... gcc
checking whether the C compiler works... yes
...
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' から出ます
Do you want to package as root? [y/N] N
...
pruning symlink in /home/kojima/Srcs/Fluxbox/work/usr/share/man/mann
basename:fluxbox
version:1.3.7
arch:x86_64
build:B1
ext:txz
$ ls -l
-rwxr-xr-x  1 kojima users   2,854 10月 25日  19:44 PlamoBuild.fluxbox-1.3.7*
drwxr-xr-x 10 kojima users   4,096  2月  8日 2015年 fluxbox-1.3.7/
-rw-r--r--  1 kojima users 798,240 10月 25日  20:00 fluxbox-1.3.7-x86_64-B1.txz
-rw-r--r--  1 kojima users 786,492  2月  8日 2015年 fluxbox-1.3.7.tar.xz
drwxr-xr-x  3 kojima users   4,096 10月 25日  20:00 work/

この例では,⁠--disable-static, --enable-shared というオプションは無いよ」という警告がでているものの,fluxboxのビルドには支障なく,make_PlamoBuild.pyで作成したビルドスクリプトそのままでパッケージが作成できました。最近の標準的なビルド手法を採用しているソフトウェアでは,この例のように,ソースコードやビルドスクリプトを見ることなくパッケージを作ることが可能です。

もちろん,皆さんに使っていただく公式パッケージを作る際はもっと丁寧に,ソースコード付属のドキュメントを眺めたり,ビルドスクリプトをチェックしたり,インストールしたファイルの位置やパーミッションを確認したりしますのでご心配なく。⁠苦笑)

なお,上記の手順では一般ユーザのままパッケージを作成しているため,パッケージ内のファイルのオーナーやパーミッション等が正しく設定されず,このままでは使用できません。PlamoBuildスクリプトの使い方や修正方法の詳細は改めて紹介する予定なものの,それが待てない方は "Do you want to package as root?"の質問に"y"と答え,root権限でパッケージを作成するようにしてください。

著者プロフィール

こじまみつひろ

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

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

コメント

コメントの記入