Linuxのビルドスクリプトの改修について取りあげることにします。Linuxのビルドスクリプトやパッケージ管理ツールについては,以前,この連載でもとりあげたことがあるものの,記事の日付を見ると4年前でした。PlamoBuildスクリプトを使ってパッケージを作成し,installpkgかupdatepkgを使ってインストール,removepkgを使ってアンインストール,という枠組みは変っていないものの,この4年ほどの間にPlamoBuildスクリプトやPlamoBuildスクリプトを生成するメタ・ビルドスクリプトもだいぶ進化してきたので,今回はそのあたりの最新状況を紹介します。中心に,それぞれのソフトウェアをパッケージ化するための処理を手書きしたスクリプトでした。そのうち,いちいち0から手書きするのも面倒なので,典型的な手順を整理してテンプレートを作り,パッケージ作成の際はそのテンプレートをコピーして使うようになりました。ソースコードを指定するとパッケージ名やバージョン番号を設定したビルドスクリプトを生成するメタ・ビルドスクリプトを使うようになったのは過去の記事で紹介した通りです。Autotoolsが生成するconfigureスクリプトを使うソフトウェアが主流だったので,ビルドスクリプトのテンプレートもconfigureを使うことを前提にしていました。AutotoolsはUNIXの仕様が分裂していた時代に開発されたこともあり,ずいぶん煩雑な設定を必要とします。Autotoolsではなく,cmakeを使ってMakefileを生成する例が多くなってきました。加えて,最近ではPythonやPerlで書かれたアプリケーションも広まってきて,Python用のsetup.pyやPerl用のMakefile.PLを用いてビルドする例も目に付きます。テンプレート化したビルドスクリプトを使い回す方法は簡単なものの,1つのテンプレートでこれら全てに対応しようとすると,それぞれの方法に応じた手順を用意して,configureやCMakeList.txt等の有無で動作を変えるような処理が必要になります。加えて,同梱するドキュメント類を圧縮する機能やファイルの所有者をチェックする機能など,便利な機能をあれこれテンプレートに組み込んでいった結果,シンプルさが売りものだったはずのPlamoBuildスクリプトがずいぶん複雑になってしまいました。Linuxは「作者(メンテナ)と利用者(ユーザ)の垣根を低くする」ことをひとつの目的としていました。パッケージがどのような設定や手順で作られているかを紹介するビルドスクリプトはユーザとメンテナをつなぐ重要なツールなので,複雑化して読みづらくなるのは問題です。Linuxの原点に回帰するためにも,ビルドスクリプトをよりシンプルな形に再構成することにしました。ビルドスクリプトの再構成PlamoBuildスクリプトはシェルスクリプトなので,シンプル化といってもそれほど凝ったことができるわけではありません。汎用的な処理をサブルーチン化して別ファイルに括り出し,ビルドスクリプトの先頭付近でそのファイルを読み込む程度です。今回は,この別ファイルを/usr/share/plamobuild_functions.shという名前にして,テンプレートのうちすでにサブルーチン化できている部分と,作成したバイナリを作業用ディレクトリに仮インストールしてパッケージ用に調整する部分の処理を括り出すことにしました。"...コードの断片だけで恐縮ですが,例に示したprune_symlink()は指定したディレクトリ以下のシンボリックリンクを刈り取る処理,strip_all()は生成したバイナリファイルからデバッグ用のシンボルを取りのぞく処理です。Linux以来のtarアーカイブをそのままパッケージ形式にする方式を踏襲しており,シンボリックリンクはパッケージ化する際にいったんダミーのファイルに置き替えて,インストール時に改めてリンクを張り直す,という処理も継承しています。tarならこの作業は不要かも知れません。このような形で,prune_symlink()やstrip_all()の他,指定したディレクトリにある全てのファイルを圧縮するgzip_dir(),指定したURLからソースコードをダウンロードするdownload_sources()等のコードをplamobuild_functions.shに切り出した結果,テンプレートを250行ほど削減することができました。plamobuild_functions.shはメンテナの加藤さんがGitHubで管理してくれているので,GitHubのページで全体をご覧いただけます。前節で紹介したplamobuild_functions.shに汎用的な処理を切り出すことでビルドスクリプトのテンプレートはずいぶん見通しがよくなりました。そこにconfigureやcmakeそれぞれの処理を盛り込むのも見苦しいので,ビルドスクリプトを作るスクリプト(メタ・ビルドスクリプト)がそのソフトウェアに応じた設定方法を判断し,ビルドスクリプトにはconfigureならconfigure用,cmakeならcmake用の処理のみを組み込むようにしました。そのためにはメタ・ビルドスクリプト(make_PlamoBuild.py)がソースコード中にconfigureがあるか,あるいはCMakeList.txtがあるか,等を調べなければなりません。そこで以前のバージョンとは仕様が変わるものの,make_PlamoBuild.pyの必須引数にはソースコードのアーカイブファイルではなく,ソースコードを展開したディレクトリを指定するようにしました。make_PlamoBuild.pyはソースコードを展開したディレクトリを引数に与えると,ディレクトリ名から作成するパッケージの名前とバージョンを取り出すと共に,configureやcmakeそれぞれに合わせたビルドスクリプトを生成します。手動で設定方法を指定するための-mオプションも用意しました。configure)make_PlamoBuild.pyもplamobuild_functions.sh同様,メンテナの加藤さんがGitHubで管理してくれているので,最新版のコードはGitHubから入手できます。Linuxとりまとめ役。人類学的にハッカー文化を研究しようとしていたものの,いつの間にかミイラ取りがミイラになってOSSの世界にどっぷりと漬かってしまいました。最近は田舎に隠棲して半農半自営な生活をしながらソフトウェアと戯れています。2019」を開催しました。DAY1・DAY2の様子を注目セッションとともにお伝えします。LINEのエンジニア3名がイベントに先駆けて見どころを紹介します。コードの安全性・安定性を高める開発サイクル~テスト管理の効率を上げ,脆弱性診断を自動で行う~本連載では,連載「業務を改善する情報共有の仕掛け」を受けつつ,安全性・安定性を加えた開発サイクルについて考えていきます。若者世代から圧倒的な人気を誇るライブ配信&動画投稿コミュニティアプリ「MixChannel」(ミクチャ)の裏側(レコメンドシステムやサーバサイド開発など)について解説していきます。その他の連載CSS3アニメーションでつくるインターフェイス表現CSS3によるアニメーション表現を紹介していきます。その中でも,幅広い読者に応用してもらえるだろうインターフェイスを主なお題とします。MySQL道普請便り本連載では,MySQLを使ったアプリ開発・運用に関するノウハウをご紹介していきます。RecipeUbuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。JavaScriptセキュリティの基礎知識JavaScriptに関するセキュリティ上の問題はどこで発生し,どうすれば防ぐことができるのか?について解説していきます。〜システムをきちんと運用するための基礎知識システムは「作って終わり」ではなく,運用の中でさまざまな問題が発生します。問題の発生に備えて事前にどのような対応をしておくべきなのか,問題発生時に何をしなければならないのか,ポイントを解説していきます。きたみりゅうじの聞かせて珍プレーソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。Linuxのメンテナンスの傍ら,Linuxやオープンソースソフトと日々を過ごす著者が,その魅力とつきあい方を,エッセイ風味でお届けします。PRESS特別編集部員,さわやか笑顔のスーパーハカーはまちちゃんとネット大好き14歳わかばちゃんが,毎号,読者の皆さんから寄せられたおたよりを紹介します。皆さんの日頃の悩みにも答えちゃいますよ。]メールでのお知らせメールで次の案内をお送りしております。メールの配信を希望する方は,利用したい項目をチェックしてメールアドレスを入力し,[登録]ボタンをクリックしてください。UPDATES[ほぼ週間に1回]新刊メールマガジン[ほぼ週間に1回]電脳会議の各号案内[ほぼ1ヵ月半に1回]※変更する場合や停止する場合は,登録情報変更ページをご覧ください。※登録いただいたメールアドレスには,そのお知らせ以外,配信いたしません。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。