新年明けましておめでとうございます。通常、本連載は月末ごろに公開しているものの、今回は年末進行の都合で年明け公開になりました。つきましては、昨年一年のご愛読を感謝すると共に、本年もよろしくお付き合いくださいますよう、この場を借りてお願い申しあげます。
さて、暮れも押し詰まった大晦日の日、何とか年内駆け込みでPlamo Linux 5.3 をリリースしました 。従来、Plamo Linuxは年に1、2度のペースで新バージョンをリリースしてきたものの、2014年は、夏ごろに予定していたリリースの機会を逃してしまい、そのまま秋が来て、冬になり、そろそろ年末が見えてきた11月の下旬、このままではリリースが無いまま一年が終ってしまう、と一念発起し、11月の終りごろから、古くなっていたパッケージの更新と更新したバイナリとライブラリの依存関係の調整を繰り返し、最後の数日はひたすらテストやパッケージの解説ファイル書きに費して、何とかリリースにこぎつけることができました。
図1 Plamo-5.3のKDE環境
上図に示したスクリーン画面を見る限り、以前のバージョンとそう変わりないように見えるものの、内側では多くのソフトウェアが最新版に更新され、使い勝手等も改善しているので、Plamo Linuxに興味を持った方は、ぜひ最新版のPlamo-5.3 を試してみてください。今回は宣伝を兼ねて(苦笑) 、Plamo Linux 5.3の新機能や変更点などを紹介します。
Plamo Linux 5.3の新機能
"5.3"というバージョン番号が示すように、今回のバージョンアップは「メンテナンス・リリース」という位置づけにしています。しかしながら、前バージョンである5.2からは丸一年ぶりのバージョンアップ で、GCCやGlibcといったシステムの根幹部分のソフトウェアも更新しており、その意味ではPlamo-6.0への経由地的なリリース とも言えそうです。以下、更新した主要なソフトウェアについて、前バージョンと比較しながら紹介してみます。
Glibc-2.20
Plamo-5.2では2.16だったGlibcを2.20 に更新しました。GlibcはC言語で書かれたソフトウェア全てが利用するライブラリなので、仕様が変ると既存ソフトウェアの大半が影響を受けることになります。そのため従来は、同じメジャーバージョン(たとえばPlamo-3)の間はGlibcのバージョンを変えず、Plamo-4に更新する際にGlibcもバージョンアップする、という形にしていました。しかしながら、最近ではGlibcの後方互換性も十分に保証されるようになったので、今回はメンテナンス・リリースの枠内でもGlibcをバージョンアップしてみました。
UNIX系OSではカーネルとアプリケーションソフトウェアは厳格に分離され、アプリケーションがカーネルの機能を利用する際は、常にlibc(Linuxの場合はGlibc)を経由する必要があります。すなわち、カーネルに何か新機能が追加されたとしても、libcにその機能を利用するためのシステムコール が追加されない限り、アプリケーションからカーネルの新機能は利用できないわけです。glibc-2.16は2年半ほど前の2012年6月に公開されており、その後カーネルに追加された新機能には対応していません。2014年9月に公開されたglibc-2.20はこの2年少しのギャップを埋めてくれることでしょう。
GCC-4.8.4
Plamo-5.2では4.6.3だったGCCも4.8.4 まで更新しました。GCCはコンパイラなので、互換性を損なうような変更があっても、更新した影響は新たにコンパイルするソフトウェアに限定されるため、Glibcよりは気軽に更新できます。しかしながら、安定性を重視して最新の4.9系ではなく、1つ前の4.8系 を採用することにしました。
$ gcc -v
組み込み spec を使用しています。
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib64/gcc/x86_64-pc-linux-gnu/4.8.4/lto-wrapper
ターゲット: x86_64-pc-linux-gnu
configure 設定: /mnt/Srcs/G/Gcc/gcc-4.8.4/configure --prefix=/usr --libdir=/usr/lib64
--sysconfdir=/etc --localstatedir=/var --mandir='/usr/share/man' --build=x86_64-pc-linux-gnu
--host=x86_64-pc-linux-gnu --libexecdir=/usr/lib64 --enable-languages=c,c++,fortran,go,lto
--enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu
--enable-gnu-unique-object --enable-linker-build-id --enable-cloog-backend=isl --enable-lto
--enable-plugin --enable-install-libiberty --enable-clocale=gnu --disable-libunwind-exceptions
--disable-libstdcxx-pch --disable-werror --disable-multilib --with-system-zlib --with-linker-hash-style=gnu
スレッドモデル: posix
gcc バージョン 4.8.4 (GCC)
GCCはフリーなC/C++コンパイラとして独占的な地位を占めていたこともあって、新機能の採用には比較的慎重でした。しかし最近では、LLVM/Clang が性能や移植性でGCCに肩を並べるまでに成長し、それに刺激されてGCCの開発ペースも上がって、新しい機能や仕様を取り込んだ新バージョンが早いサイクルでリリースされるようになりました。両者の競争は、LLVMがApple社が提唱したSwift 言語を利用可能としたのに対し、GCCはGoogle社が提唱したGo 言語を採用するなど、新世代の言語の発展にも好影響を及ぼしているようです。
linux-3.17.6
カーネルはPlamo-5.2の3.12.5に対し、5世代くらい新しくなった3.17.6 を採用しました。
$ uname -a
Linux corei7 3.17.6-plamo64 #1 SMP PREEMPT Tue Dec 16 11:18:32 JST 2014 x86_64 GNU/Linux
メンテナの田向さんや名倉さんの努力で、コンソールにEUC-JPな日本語を表示するuniconパッチ やLiveCD(P-Plamo)に必須のaufsパッチ も従来同様に使えると共に、3.18カーネルで正式に採用されたoverlayfsパッチ も先取りして適用しています。
最近のカーネルでは、KMS (Kernel Mode Set)と呼ばれる機能を使って、IntelやAMD/ATIのGPUをより積極的に操作するようになっています。このような操作はGPUを活用するためには必要なものの、まれに副作用を引き起こすこともあるようで、手もとのRadeon HD 5450を使ったビデオカードでは、3.17.6カーネルで起動するとKMSが働いた瞬間、画面がブラックアウトして、システムがハングしてしまいました。
3.12.5ではこのような問題は起きなかったので、どこからダメになったのかを調べようと、3.12から3.17までの間のカーネルを順番に試してみたところ、3.13.11から3.14の間でダメになったことが分かりました。この間の変更箇所や同様のトラブル情報をあれこれ調べた結果、どうやら3.14で更新されたRadeon用のDRM(Direct Rendering Manager)にはDPM(Dynamic Power Management)と呼ばれる電源管理機能が追加されており、手元のビデオカードはこの機能を利用しようとするとハングするようでした。
この機能はデフォルトで有効になるものの、起動時パラメータにradeon.dpm=0 を追加すれば無効にできるとのことなので、この設定をgrub.cfgに追加して、無事起動できるようになりました。
echo 'Linux 3.17.6-plamo64 をロード中...'
linux /boot/vmlinuz-3.17.6-plamo64 root=/dev/sdc1 ro vga16 unicon=eucjp vt.default_utf8=0 panic_output=7 radeon.dpm=0
同じRadeon系のビデオカードを使っている方からは、このオプションを指定しなくても異常なく起動した旨の報告もあるので、この問題は恐らくビデオカード側の設計に起因するのでしょう。
Xorg-server-1.16.3/MesaLib-10.2.9
Plamo-5.2では1.14.2だったXサーバ(xorg-server)も、1.16.3 までバージョンアップしました。
X Window Systemは、さまざまなプロトタイプ宣言(ヘッダファイル)やライブラリ、ドライバ、アプリケーションなどから構成される巨大システムです。X11R6のころまではそれら全てが1つのソースツリー内で管理されていましたが、さすがにそれでは開発が大変だ、ということで、X11R7以降では各パーツが独立したソフトウェアとして分割され、パーツごとに独自のペースで開発を進めることができるようになりました。
そういう変更の結果、パーツごとの開発は容易になったものの、今度は全体をまとめることが難しくなりました。そのせいもあって、2012年4月に公開されたX11R77以降、X11R7の新しいバージョンは公開されておらず、新しいX Window Systemを構築するには、各パーツをどのバージョンで組み合わせていくかに頭を悩ませることになります。
そのような組み合わせパズルを解くのは面倒なので、最近のPlamo LinuxではLFS(Linux From Scratch)プロジェクトが公開しているドキュメントに従ってXサーバをビルドすることにしています。その結果、Xを構成する主要なソフトウェアは以下のようなバージョンになりました。
libXau-1.0.8
libXdmcp-1.1.1
xcb-proto-1.11
libxcb-1.11
xcb-util-0.4.0
xcb-util-image-0.4.0
xcb-util-keysyms-0.4.0
xcb-util-renderutil-0.3.9
xcb-util-wm-0.4.1
MesaLib-10.2.9
xbitmaps-1.1.1
xcursor-themes-1.0.4
XKeyboardConfig-2.13
Xorg-Server-1.16.3
最近のXサーバでは、実際に画面を描画する機能はGPUごとのドライバとして分離され、必要なドライバのみを用意すれば事足りるようになっています。最近のGPUメーカは、AMD/ATI(Radeon) 、Intel(HD Graphics) 、NVIDIA(Nouveau)の3社くらいに淘汰されているものの、もう少し古い世代のマシンでも利用されることを考えて、Plamo-5.3では上記3社用のドライバに加えて、Matrox MGA、VIA OpenChrome、SiS、CirrusLogicなどのドライバも収録しています。
OpenGLの機能を提供するMesaLibは10.3系が公開されているものの、このシリーズが要求するLLVMの新版を用意する時間が無かったので、1つ前の10.2.9 を採用しました。
Firefox-34.0
メンテナの加藤さんのご尽力で、Firefoxも現時点での最新版である34.0 を採用しています。
図2 Firefox-34
Plamo-5.2に採用していたのはFirefox-26.0だったので、Firefoxは約1年ほどで8世代ほどもバージョンアップしていることになります。
これは最近のFirefoxが採用している、6~8週間ごとに新バージョンを公開する「ラピッド・リリース」という方式のせいで、開発の最新成果が常に公開されるというメリットがある一方、Plamo Linuxのように自動アップデートの仕組みのないディストリビューションでは、最新版に追従し続けるのが面倒だ、というデメリットもあります。HDDの中身が自分の知らないうちに書き変わる「自動アップデート」はあまり好きではないものの、Firefoxのようなソフトウェア用にはそのような仕組みを用意した方がいいのかも知れません。
Mate-1.8.1
メンテナの植竹さんのご尽力で、Mateデスクトップ環境も1.6から1.8.1 に更新されました。
図3 Mateデスクトップ環境 1.8.1
Mateデスクトップ環境は、新しもの好きなGNOME開発者たちが放棄したGNOME2を引き継いだデスクトップ環境で、GNOME3のような目新しい機能は無いものの、統合デスクトップ環境として必要十分な機能を洗練し続けているのは好感が持てます。
特に、Nautilusを進化させたCaja と呼ばれるファイルマネージャーは、ネットワーク経由で利用するファイルシステムの文字コードを正しく判断してくれるので、EUC-JPという今となってはobsoleteな文字コードを使っていて、自動接続するとKDEやXfceでは文字化けしてしまうPlamo Linuxなファイルサーバでも日本語ファイル名を正しく表示してくれるのはうれしいところです。
Emacs-24.4/Mew-6.6
メンテナの松木さんがEmacsを24.2から最新の24.4.2 に更新してくれました。
図4 Emacs-24.4.2のスタートアップ画面
加えて、今回の更新ではEmacs本体と補助コマンド、Emacs Lispのマクロファイル等を分割し、Emacs本体もXlib等をリンクしたGUI版と、それらをリンクしないコンパクトなコンソール版(emacs_mini)を作ってもらい、コンソール版は00_baseカテゴリに収めることで、LXC上の仮想サーバのようなGUI不在な環境でもEmacsを使える ようになりました。
一方、24.4系にバージョンアップした結果、24.2系で愛用していたmenu-tree.elというマクロが使えなくなり、Emacs-24.4.2では「ファイル」や「編集」 、「 オプション」といった日本語メニューが、"File","Edit","Options"等の英語メニューに戻ってしまいました。実用上は問題ないものの、menu-tree.elの更新を期待したい気分です。
加えて、Emacs上のメーラMewも、だいぶ古くなっていた6.3から、最新版の6.6 に更新いただき、各種画像のサポートやGnuPG最新版への対応も進んだそうです。
LXC
メンテナの加藤さんと田向さんがLXCの開発に参加されていることもあって、Plamo-5.3のcontrib/Virtualization/以下にはgihyp.jpで紹介しているLXCの記事「LXCで学ぶコンテナ入門 -軽量仮想化環境を実現する技術」 で取りあげているLXCに関するソフトウェアの最新版が揃っています。LXCに関心のある方は、ぜひPlamo LinuxでもLXCを試してみてください。
今後の課題
最初にも述べたように、今回のリリースは年内に公開することを目的に進めてきたので、β版でのテスト期間があまり取れず、いくつか積み残した問題があります。
たとえば、カーネルイメージを収める/boot ディレクトリをBtrfs形式なファイルシステム上に置くと、grubがカーネルサイズを正しく認識できず、ブートローダをインストールできない、という問題が見つかっています。多分これは、grubがBtrfs上の大きなファイルを扱う際の問題で、開発版のgrubに入っているBtrfs関連のさまざまな修正で修正されているかも……、と思いつつ、時間切れで対応できませんでした。また、最近普及しつつあるsystemdがらみでいくつか引っかかる部分も報告されており、それらの修正版を近いうちに公開する予定です。
加えて、今回も「メンテナンス・リリース」という位置付けなので、前バージョンからのアップデータを用意したいところです。しかしながら、ざっと調べた限りでも、約1330ほどあるパッケージのうち、半数強の675パッケージが更新 されているので、「 アップデータ」という形で対応できるものか、パッケージリストを眺めて思案しているところです。
このように今年も前途多難な一年になりそうですが、2015年もPlamo Linuxはマイペースで開発を続けていく予定ですので、本連載同様、お付き合いいただければ幸いです。