続・玩式草子 ―戯れせんとや生まれけん―

第49回Plamo Linux 8.0 released !

先日、筆者がまとめ役をやっているPlamo Linuxの新版、8.0をリリースしました。バージョン番号が示す通り、今回は久しぶりのメジャーバージョンの更新で、ログを調べたところ、7.0のリリースが2018年6月だったので、ちょうど5年ぶりのバージョンアップになるようです。そこで今回は、この新バージョン(Plamo-8.0)の特徴を紹介してみましょう。

Plamo-8.0のインストーラ起動画面
Plamo-8.0のインストーラ起動画面

glibc-2.37

前節で「5年ぶりのメジャー・バージョンアップ」と述べたものの、Plamo-8.0は機能的には従来のPlamo-7.xのシリーズとほとんど違いはありません。

最近では、Plamo Linuxでもget_pkginfoコマンドを用いて更新されたパッケージに追従できるので、⁠公式リリース」は何か大きな変更があったから実施するのではなく、年に一度程度、その時点での最新パッケージを集めてisoイメージを更新するいわゆる「ローリング・リリース」的なスタイルを取っています。

事実、Plamo-7.xのシリーズは、2018年の7.0に始まり、19年の7.1、20年の7.2とほぼ1年ごとにマイナーバージョンアップを重ね、最終の7.4は2022年4月に公開しました。それではなぜ今回はメジャーバージョンを更新したのか、と言うと、glibcを2.37まで上げたためです。

以前紹介したように、glibcは2.34で内部的な仕様が少し変更され、2.33以前とはバイナリの互換性が完全ではなくなりました。具体的に言うと、glibc-2.34で仕様変更された機能にはシンボル名に"@GLIBC_2.34"という修飾子が付くようになり、そのシンボルを参照するバイナリ、すなわちglibc-2.34以降でビルドされたバイナリはこの修飾子を持たない2.33以前では動作しなくなりました。

チェックしてみたところ、pthread回りや非同期IO(aio)回りの機能に"@GLIBC_2.34"の修飾子が見られます。"@@GLIBC_2.34"のように"@"が2つ付くのは、複数バージョンが存在するシンボルの最新版を意味します。

$ nm /lib/libc.so.6
...
000000000008f240 T __pthread_register_cancel@@GLIBC_2.34
000000000008f240 T __pthread_register_cancel@GLIBC_2.3.3
000000000008f2d0 T __pthread_register_cancel_defer@@GLIBC_2.34
000000000008f2d0 T __pthread_register_cancel_defer@GLIBC_2.3.3
0000000000098840 T __pthread_rwlock_destroy@GLIBC_2.2.5
...
000000000009be30 T aio_cancel64@@GLIBC_2.34
000000000009be30 T aio_cancel64@GLIBC_2.2.5
000000000009be30 T aio_cancel@@GLIBC_2.34
000000000009be30 T aio_cancel@GLIBC_2.2.5
000000000009bfe0 T aio_error64@@GLIBC_2.34
000000000009bfe0 T aio_error64@GLIBC_2.2.5
...

"@GLIBC_2.34"な修飾子が付くシンボルはごく一部だけなので、それらを参照しないバイナリならば2.33以前の環境でも動作するはずですが、利用する共有ライブラリがこれらのシンボルを参照していてもダメなので、glibc-2.33以前とglibc-2.34以降のバイナリを混在するのはよろしくありません。そのため、glibc-2.34以降を明示するためにメジャーバージョンを更新したわけです。

一方、"@GLIBC_2.34"な修飾子が付かない環境、すなわちPlamo-7.x環境でビルドしたバイナリはそのままglibc-2.34以降のPlamo-8.xでも動作するので、⁠わざわざglibcのバージョンを上げなくてもいいのでは」と考える人もいるかも知れません。しかしながら、カーネルの機能を使うにはglibcのシステムコールが必要で、新機能用のシステムコールは新しいglibcにしか実装されないので、新しいカーネルを使うならglibcも更新していく必要があります。そのような事情から、今回のメジャーバージョンアップを機にglibcの更新を行ったわけです。

Python-3.11

もうひとつ互換性に影響する変更がPythonのバージョンアップです。Plamo-7.xではPython-3.9シリーズ(最終的には3.9.12)を使っていたのに対し、8.0では3.11シリーズに更新しました。

Pythonの場合、バージョン2と3の間で言語的な仕様変更が行われ、Python2用のコードはPython3で動かなくなりました。そのため、Plamo-7.xではPython2と3を併存させていたものの、最近ではPython2を必須とするソフトウェアは見当たらなくなったので、Plamo-8.0ではPython2は削除しました。

一方、Python用のモジュールは/usr/lib/python3.9/といったマイナーバージョン番号まで含めたディレクトリに集積されるので、Python本体のバージョンに合わせて更新する必要があります。

Plamoの場合、筆者がPythonを好んで使っていることもあり、Python用のモジュールを多数パッケージ化していています。パッケージ化したモジュールはインストール直後から使えて便利なものの、それなりの数になってしまうと、なかなか更新に手を付けられません。

しかしPlamo-8系への更新の機会を逃すとマズい、と考えて、3.10のシリーズは飛ばして、Python-3.11.3でモジュール類を作り直しました。

更新したパッケージは40ほどでしたが、さまざまなカテゴリ(Plamo Linuxで利用しているパッケージのグループ分け)に散らばっていて整理が大変でした。このあたり、Pythonのモジュール・リポジトリPyPI(Python Package Index)を活用するなり、モジュール用のカテゴリを用意するなりした方がいいかも知れません。

もっとも、Python-3.11系はFaster CPythonプロジェクトの成果を反映し、3.10系に比べて2割ほど速度が向上したそうなので、3.10系を飛ばしたのは結果的には正解だったかな、と思っています。

その他更新したパッケージ群

互換性に注意しなければいけないのは上述のglibcとPythonくらいなものの、Plamo-7.4の公開から1年ほど経っているので、その間に多くのパッケージが更新されています。それらの中から目に付くものを紹介してみましょう。

カーネル 6.1.30

カーネルは6.x系の最初のLTS(Long Term Support)になった6.1系から6.1.30を採用しています。

$ uname -a
Linux pl80b2 6.1.30-plamo64 #1 SMP PREEMPT_DYNAMIC Mon May 29 10:51:15 JST 2023 x86_64 x86_64 x86_64 GNU/Linux

実のところ、最近のカーネルは機能が豊富になりすぎ、聞いたことがないような周辺機器用のドライバが多くて、どこまで対応すべきなのかよく理解できていません。

Plamo-8.0で提供しているカーネルは、基本的に従来のビルドオプションを踏襲しつつ、新しく追加されたドライバ類はできるだけモジュールとして用意するようにしていますが、筆者の開発環境がずいぶん時代遅れになっているので、最近普及が進んだハードウェアを見落している可能性があります。そのようなハードウェアやドライバに気づかれた方は、ぜひご一報ください。

GCC-12.2.0 & LLVM-15.0.7

GCCは12.2.0、LLVMは15.0.7をそれぞれ採用しています。

$ gcc --version
gcc (GCC) 12.2.0
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ clang --version
clang version 15.0.7
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /usr/bin

GCCは13.1が、LLVMも16.0がリリースされており、それぞれ手元ではビルドしてみたものの、これら言語処理系の最先端のバージョンでは、より厳しくなったエラーチェックのため今まで通っていたコードが通らなくなることがよくあるので、少し前のバージョンに留めています。

Xfce-4.18 & Lxqt-1.3

デスクトップ環境として用意しているXfceLxqtを、それぞれ最新の4.181.3に更新しました。XfceはGtk3上に構築され「ネズミ」のロゴで知られたデスクトップ環境、LxqtはQt5上に構築されたシンプルでコンパクトなデスクトップ環境です。

Xfce-4.18とLxqt-1.3
Xfce-4.18
Lxqt-1.3

どちらのデスクトップ環境もマイナーバージョンが上がったレベルで、以前と比べて特に目新しい変更は無いものの、バグの修正や細かなチューンアップで使いやすくなったように感じます。

texlive-20230313

TeX関連ツールの集大成であるtexliveを2023版に更新しました。texliveに関してはメンテナの加藤さんに丸投げしているので、どのような変更等が入ってるのかはよくわかっていませんが(苦笑⁠⁠、年に1度更新されるtexliveのバージョンアップに追従いただいています。なお、texliveとlibreofficeは容量の都合でDVDサイズのisoイメージでは2枚目に収めています。

Wine

本連載でも何度か取りあげているWineを動かす際に必要となるcontrib/Wine/lib32/以下に収めている32ビット版パッケージについて、バージョンをPlamo-8.0本体の64ビット版に合わせると共に、それらをビルドするためのGCC/MinGWも最新版に更新しました。

MinGWはMinimalist Gnu for Windowsの略で、GCCでWindows用のバイナリを作成するためのツールです。WineではWindowsとの互換性を高めるために、Windows用のアプリが使うDLLはMinGWを使ってWindowsネィティブなPE形式にしています。

1年ぐらい放置していたため(苦笑⁠⁠、更新が必要になったWine用のパッケージは100を越え、ビルドにも時間がかかったものの、Wine自体の進化もあって、Windows用アプリはよりスムーズに動くようになったようです。

winecfgの画面(Wine-8.11へ更新済)
winecfgの画面(Wine-8.11へ更新済)

Plamo-8.1 released !

上述のような特徴をもったPlamo-8.0のisoイメージを6/10に公開したところ、数日後に「新しめのCPU(Ryzen9 7950X3D)でインストーラが起動しない」旨の報告がありました。それによると、起動のかなり初期、カーネルがfirmwareをロードするあたりで停止するそうです。

確認したところ、linux-firmwareパッケージが1年くらい前の古いバージョンだったことが原因で、最新のlinux_firmware-20230515に更新したところ、正しく起動するようになりました。

linux_firmwareもパッケージになっているので、動作中の環境ならばupdatepkgで更新できます。しかし、firmware無しにシステムが起動しないとなると「缶切りは缶の中」という状態なのでどうしようもありません。

しばらく考えたものの、インストーラから対応する必要があるので、結局新しいfirmwareを取り込んだ形でisoイメージを作り直し、Plamo-8.1として6/15に公開しました。というわけで、現状ではこのPlamo-8.1がPlamo Linuxの最新版となります。


上述のように、リリース直後のバージョンアップ、というドタバタはあったものの、それ以外は特に大きな問題もなく、Plamo-8.1は筆者の日常環境となっています。久しぶりのメジャーバージョンアップということもあり、次回からは、自前でソフトウェアをインストールする方法を中心に、Plamo Linuxでの遊び方を紹介してみましょう。

おすすめ記事

記事・ニュース一覧