7.1をリリースしました。www.plamolinux.orgのリリースアナウンスもっとも最近では,新しいパッケージは随時FTPで公開していて,get_pkginfoコマンドでFTP上のパッケージと同期を取るのも簡単なので,「⁠バージョンアップ」といっても,含まれているソフトウェアにそれほど目新しいものはありません。Plamo-7.0でデフォルトの文字コードをUTF-8に変更したことに続き,今回のPlamo-7.1でもシステムレベルではかなり大きな変更を加えています。それが今回取りあげる「initrdの採用」です。initrd自体は古くからある技術ですし,Plamo以外のディストリビューションではたいていinitrdを採用しているので,いまさら,という気はするものの,この機会にinitrdの仕組みや動作の流れを紹介してみます。initrdとinitramfsLinuxでは,周辺機器用のドライバはカーネル本体とは独立したモジュールとしてビルドでき,/lib/modulesディレクトリ以下から必要に応じて組み込めるようになっています。/lib/modulesディレクトリを使うためには,ハードディスク用のドライバとルートファイルシステムに応じたファイルシステム用のドライバが必要で,これらをモジュール化すると「缶詰の中に缶切りが入った」状態になってしまいます。このような状況を回避するために考案されたのがinitrdです。initrdは,ハードディスクとファイルシステム用のドライバを/lib/modulesとは別に用意しておいて,カーネルがルートファイルシステムをマウントする前に必要なモジュールを組み込んでしまおう,という仕組みです。initrdの歴史は古く,ソースコードのDocumentation/admin-guide/initrd.rstを見ると,文書の初版は1996年になっています(多分,linux-1.3シリーズの後期⁠)⁠。diskにマウントする,というスタイルで,固定サイズのファイルシステムイメージを用意しなければならない等,使い勝手はよくありませんでした。diskではなく,ディスクキャッシュを汎用化する形で実装されたramfsの機能を使うinitramfsが開発されました(2005年前後,linux-2.5の後期⁠)⁠。initramfsはinitrdと同じ機能を果すものの,あらかじめファイルシステムを用意する必要が無く,使いたいコマンドやライブラリを集めたcpioアーカイブを作るだけで利用できるため,急速にinitrdに取って代わりました。grub等のブートローダでは"initrd=...."という指定が定着していることもあり,最近ではinitrd/initramfsの双方を"initrd"という名前で呼ぶようになっています。そのため,Plamo-7.1で採用したのは正確にはinitramfsなものの,通称であるinitrdで通しておきます。前述のように,initrdはHDDやファイルシステムのような「ルートファイルシステムを読み込むのに必要なドライバ」を,起動時に直接カーネルに組み込む仕組みで,カーネル本体の機能はできるだけ小さくして,必要な機能は環境に応じて動的に組み込むマイクロカーネル的なデザインにするなら必須の機能になります。モノリシックカーネルであるLinuxでは,ルートファイルシステムをマウントするのに必要なドライバはあらかじめカーネル本体に組み込んでおくことも可能で,カーネル本体が多少大きくなっても構わなければinitrdを使う必要はありません。Linuxではinitrdを使っていませんでした。SCSI)のようにSCSI機能と絡んできたりして,組み込まなければならないドライバがずいぶん増加し,ドライバ間の依存関係もずいぶん複雑になってきた上,新しいドライバも日々増加し続けています。menuconfigでカーネル構築時の設定を決める際も,どのドライバを組み込み,どれをモジュールにすべきかにずいぶん悩むようになりました。それならいっそモジュールにできるドライバは全部モジュールにして,組み込むかどうかはカーネル自身に任せた方がいいんじゃないかと考えて,Plamo-7.1ではあらかじめ用意したinitrdイメージをカーネルパッケージに含めることにしたわけです。次節以降で紹介するように,initrdは仕組み的にはそれほど難しいわけではないものの,どのコマンドやライブラリ,ドライバ・モジュールを含めるかを0から考えていくのはかなり面倒です。そこで今回も,BLFSプロジェクトで紹介されているスクリプトを元に,Plamo用に多少アレンジして採用することにしました。Plamo-7.1のinitrdinitrdの実体は,ドライバ・モジュールとそれをカーネルに組み込むためのツール一式をcpio形式で固めて圧縮したファイルです。このファイルのことを「initrdイメージ」と呼ぶことにしましょう。initrdイメージがどのような作りになっているのか,実際のファイルを展開しながら紹介します。カーネルパッケージは随時バージョンアップするので,バージョン番号は適宜読み替えてください。Plamo-7.1のカーネルパッケージはplamolinux.orgからダウンロードできます。このパッケージに含まれているboot/initrd.img-4.19.35_plamo64というファイルがinitrdイメージなので,まずパッケージからこのファイルを取り出します。Linuxのパッケージは単純なtar+xz形式なので,tarコマンドでファイルを取り出すことができます。initrd.img-4.19.35_plamo64*約17MBのinitrdイメージが取り出せました。このファイルは,cpio形式のアーカイブをgzipで圧縮した形になっているため,展開する際はzcatコマンドを通してからcpioを適用する必要があります。取り出したファイルはカレント・ディレクトリ以下にばらまかれるので,まずはInitrdという作業用ディレクトリを作り,そこでinitrdイメージを展開します。ブロック展開したinitrdイメージの中身を見ると,/devや/proc,/sysを含む,シンプルなルートファイルシステムになっています。usr/Linuxのお手本であるUNIXでは,起動したカーネルは必要な初期化処理を終えれば,ルートファイルシステム上にある/sbin/initコマンドを起動することになっています。この流儀を崩さずに必要な処理を実行するため,initrdはいったん仮のルートファイルシステムを提供し,そこにあるinitコマンドを実行させてカーネルに必要なモジュールを組み込むわけです。このinitはシェルスクリプトなので,つまみ読みしながら動作を紹介してみましょう。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.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。