ソースコード・リテラシーのススメ

第18回 ディストリビューターの日々

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

きびしい残暑が収まると一気の秋の気配が深まり,筆者の実家の回りでも稲刈りの時期になりました。実りの秋に便乗するわけではありませんが,筆者が取りまとめ役をやっているPlamo Linuxも,1年ぶりの新バージョンのリリースに向けて最終的な調整段階に入っています。そのような状況を反映して,今回は普段の「ソースコードリテラシー」とは少し趣向を変えて,ディストリビューション作成の裏側的な話をしてみようと思います。

図1 画面を一新したKDE4.1環境

図1 画面を一新したKDE4.1環境

新バージョン開発の開始

ディストリビューションは多数のソフトウェアパッケージから構成されています。比較的規模の小さなPlamo Linuxでも,最近ではX Window Systemを構成するパッケージが細かく分割されたこともあって,GNOMEやKDEまでインストールすると900を超えるパッケージが必要となります。

これら多数のパッケージが相互に協働しながらひとつのシステムを作りあげていくわけですが,パッケージの間にはさまざまな依存関係があり問題を複雑にしています。依存関係は動作に必須のライブラリから,あれば便利な付加的機能までさまざまですが,それらの依存関係の中でも,Cコンパイラ(gcc)Cライブラリ(glibc)はほぼ全てのパッケージが必須の依存関係を持つパッケージで,システムの最も基礎となる部分です。

OSの機能的に言うと,アプリケーションやライブラリとハードウェアの橋渡しをするカーネルの方がより基盤的なソフトウェアになりますが, カーネル本体は外部ライブラリやアプリケーションとは独立に機能するように設計されているため依存関係の問題は存在せず,再起動が必要なものの,アップデートは案外簡単です。

Linuxやその元になっているUNIXはC言語で開発されているOSなので,CコンパイラやCライブラリに問題が生じると,他の全てのパッケージが影響を被ることになります。そのため,CコンパイラやCライブラリの更新には慎重を期す必要があります。

最近のgccやglibcでは過去のバージョンとの互換性は十分考慮されており,古いバージョンのgccやglibc用に作成したバイナリファイルでもたいていそのままで動作します。しかし,新しいバージョン用に作成したバイナリファイルは,ライブラリの新機能を使っている場合,その機能を持たない古い環境では動作しなくなります。

このような理由から,Plamo Linuxではgccやglibcの更新はバージョンが大きく変る場合に留めており,新バージョンの開発はまずgccやglibcの更新から始めることにしています。Plamo-4.2系は,2年ほどの間に4.21,4.22とアップデートしてきましたが,gccやglibcは最初に採用した3.4系,2.3系をそのまま引きずっており,やや古さが目についていましたので,今回も新バージョンの開発は新しいgcc,glibcを採用するところから始めました。

Plamo-4.5の変更履歴(Change.Log)を見ると,今年の1月21日にglibc-2.7,gcc-4.2.2にそれぞれ更新しています。ここからPlamo-4.5の開発作業が公式に始まりました。

ここで言う「更新」とはFTPサーバに登録して誰もが自由にダウンロードできるようになったことを意味します。ローカルでのビルドやパッケージ化,互換性のテストはそのずっと前,去年の秋ごろから始めています。

パッケージ更新の日々

前述のように,最近のgccやglibcは以前のバージョンとの互換性が高く,古い環境で作成したアプリケーションでもたいていそのまま新しいライブラリの上で動きます。このような特徴を使って,動いているPlamo Linux環境(4.22)上でgccとglibcをまず入れ替え,新しいgccとglibcでパッケージを作り直していきます。

gccとglibcの更新も,古いバージョンへの参照を無くすため,いったん暫定版を作り,暫定版で正式版を再度作成する,という手順が必要になります。

変更履歴によると,1月下旬はほぼ毎日のようにパッケージを更新しています。これらパッケージの更新は,元々動いていたソフトウェアを再度入れ直すという,動作や表示が大きく変わることもない地味な作業ですが,基盤的なパッケージで設定を間違えるとそれらを利用して作成するパッケージ全てに影響が及んでしまうので,注意深く進める必要があります。個人的には,このあたりの作業を「賽の河原の小石詰み」と自嘲したりしています。

理想を言えば,gccやglibcを更新すれば全てのパッケージを再コンパイルしたいところですが,使える時間もマシンも限られているPlamo Linuxの世界では,重要性の高いものやバージョンが上ったものから更新していくのが精一杯です。

比較的独立性の高いパッケージならば,このような漸進的な更新で変更していくことができますが,相互に密接に関連しあった一群のパッケージはまとめて更新する必要があります。たとえばXlibを元に構築されているX Window Systemや,GTK/Qtといった高機能なウィジェットを元に構築されているGNOME/KDEといったデスクトップ環境は,半分だけ更新して一休み,というわけには行かず,更新を始めたら全て更新してしまわないと正しく動作してくれません。これら大規模なパッケージの中でも,Plamo-4.5の開発の中ではX11R7.3への更新が一番大変でした。

著者プロフィール

こじまみつひろ

Plamo Linuxとりまとめ役。もともとは人類学的にハッカー文化を研究しようとしていたのが,いつの間にかミイラ取りがミイラになってOSSを仕事にするようになってしまいました。最近はスペシャリスト養成を目的とした専門職大学院で教壇に立ったりもしています。

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

コメント

コメントの記入