分12前回までにmake_PlamoBuild.pyで作成されるPlamoBuildスクリプトを使って,ソースコードからパッケージを作成する流れを紹介してきました。今回は少し視点を変えて,作成したパッケージをインストールする際の処理を紹介します。Linuxのパッケージは,rpmやdebといったパッケージ用に開発された独自形式ではなく,インストールしたいファイルをtarでまとめ,それを圧縮しただけの簡単な構造になっています。そのためパッケージの中身もtarやlessといった基本コマンドで確認できます。リンク...さらにはemacsを使って内部のテキストファイルを直接確認することも可能です。emacsでzlib-1.2.8-x86_64-P2.txzパッケージを開いたところこうしていくつかのパッケージを眺めていると,パッケージによってはusr/lib以下にサイズ0のファイルが複数含まれていたり,作った覚えのないinstall/doinst.shというファイルが含まれていたりすることに気づくでしょう。zlib-1.2.8パッケージには,"usr/lib/libz.so"と"usr/lib/libz.so.1"というサイズ0のファイルと,"install/doinst.sh"という作成した覚えのないファイルが存在しています。install/doinst.shさて,これらサイズ0のファイルと,作った覚えのないinstall/doinst.shというファイルは,一体どういう役割を果しているのだろうか,というのが今回の話題です。install/doinst.shスクリプト謎解き風に話題を展開する筆力もないので先に答を言ってしまうと(苦笑⁠)⁠,このinstall/doinst.shというファイルは,パッケージを展開した直後に実行されるシェルスクリプトで,tarアーカイブを展開しただけでは対応できない処理をするために用意されています。このスクリプトの主な使い道は,tarアーカイブに収めるべきではないシンボリックリンクを復元させることで,PlamoBuildスクリプトや/sbin/makepkgコマンドは,パッケージ化しようとしているディレクトリツリー中にシンボリックリンクを見つけた場合,そのリンクがtarアーカイブ中に含まれないように刈り取って,tarアーカイブを展開後に復元するような操作をinstall/doinst.shに追加します。シンボリックリンクは,ファイルの実体とは関係ない,ファイル名に対する参照なため,ファイルの実体をまとめるように設計されているtarアーカイブとは相性がよくありません。tarでも,バージョンによってシンボリックリンクが既存ファイルを上書きする際の動作が異なっていたことがありました。Linux)では「パッケージにはシンボリックリンクを含めない」という方針を取っています。シンボリックリンクをスクリプトに変換する処理は,先に見たzlibパッケージのような共有ライブラリを提供するパッケージでは必須です。いうのも,共有ライブラリの場合,libz.so.1.2.8という完全なバージョン番号を含んだライブラリ名から,メジャーバージョン番号のみを含んだlibz.so.1,ライブラリ名のみを含んだlibz.soというシンボリックリンクを用意することになっており,共有ライブラリを含むパッケージでは,install/doinst.shスクリプトでそれらシンボリックリンクを再現する必要があるからです。共有ライブラリは,動的リンクされる際にはメジャーバージョンまでを指定した"libz.so.1"という名前,コンパイル時にリンカから呼び出される際はバージョン番号を略した"libz.so"という名前で参照されます。そのため,上記zlib-1.2.8パッケージのinstall/doinst.shには,以下のような「同名のファイルがあれば削除してシンボリックリンクを張る」という処理が設定されています。)一方,パッケージに含まれるファイルを調べると,"libz.so"と"libz.so.1"はそれぞれサイズが0のファイルになっています。usr/lib/libz.so.1これらサイズが0の,展開はされるもののinstall/doinst.shスクリプトで即座に削除,置き換えられるファイルは,「⁠このパッケージにはこういう名前のシンボリックリンクが作成される」ことを示す目印,いわゆる「プレースホルダー」として置かれているわけです。このシンボリックリンクをスクリプトに変換する処理は,PlamoBuildスクリプトが自動的に行うので,通常は気にする必要ありません。具体的には,makepkgを実行する直前の"convert_links"がそのための処理になっています。<<EOFこのconvert_linksの実体は,ビルド用の処理をまとめた"/usr/share/plamobuild_functions.sh"に定義されているので,興味ある方は調べてみてください。install"が作成する以外のリンクも事前に用意しておけばinstall/doinst.shに変換できます。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.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。