さくら VPS に Fedora 39 をインストールする
Fedora 39 をインストールしました。今回、設定上の変更点はとくにありません。BIOSブートのサポートを止めるとアナウンスがあってから 1年経ちましたが、未だに BIOSブートで新規インストール可能です。
Fedora 38 からの非互換あれこれ
いくつか非互換がありました。いずれも小さな問題で解決策ありです。
kickstart
が 2〜3回設定を取得しにくる
HTTP で設定ファイルを渡していますが、ARM版で 3回、x86版で 2回取得しにきます。Fedora 38 までは一回だけでした。謎の仕様変更です。私は、面倒臭がって、ncat
でサーバ建ててたので、代替手段を講じることになりました。
/var/log/maillog
に大量の warning が出ている。
以下のような warning が出ます。これは postfix-3.8.1-5.fc39
にて、修正済みです。
Nov 13 05:27:25 hostname postfix/smtpd[950]: warning: run-time library vs. compile-time header version mismatch: OpenSSL 3.1.0 may not be compatible with OpenSSL 3.0.0
uwsgi
が起動しない
また君かぁ、とばかりにトラブルを起こす常連の uwsgi
です。
まず、Python 3.12 と非互換。これは uwsgi-2.0.23-1.fc39
で修正済みです。
uwsgi[27597]: Fatal Python error: PyImport_AppendInittab: PyImport_AppendInittab() may not be called after Py_Initialize()
uwsgi
で複数アプリを動かせない
もう 1つ、バグレポートも上がってないのですが、mount
が正しく動きません。
[uwsgi] socket = 127.0.0.1:8000 plugins = python3 mount = /proj1=/path/to/proj1/cgi-bin/trac.wsgi mount = /proj2=/path/to/proj2/cgi-bin/trac.wsgi mount = /proj3=/path/to/proj3/cgi-bin/trac.wsgi callable = application manage-script-name = true
これは SCRIPT_NAME
と PATH_INFO
を設定し、複数のアプリケーションを動かす設定です。上記のように記述することで、複数の Trac プロジェクトをホストできるのですが、なぜか 1つ目の mount で書かれた Trac のみ正常に動作し、2つ目以降の mount で書いた Trac はエラー(500
)になります。mount の順番を入れ換えると、やはり、1つ目の mount で書いた Trac プロジェクトは正常、2つ目以降はダメです。
Fedora 38 で同じ設定で uwsgi のバージョンを揃えて動かしてみましたが、再現しません。Fedora 38 は Python 3.11 ですので、 Python 3.12 との非互換という感触ですが、どうにも腑に落ちない感じです。現象から、uwsgi のバグの可能性を考えていますが、Trac のバグの可能性も捨てきれません。環境変数を表示するだけの簡単なアプリケーションを作成し、切り分けを試みていますが、こちらは再現せず。uwsgi と Trac のどちらにバグレポートを投げるかも決まらず、困っています。Python 3 以降、Trac は uwsgi との相性が悪く、現在、パッチを充てて動かしているので、これもちょっと後ろめたいところではあります。
なお、エラーとしては、以下のものが出ます。何か分かる方がいらっしゃいましたら、コメントでお知らせいただけると幸いです。
Traceback (most recent call last): File "/path/to/proj2/cgi-bin/trac.wsgi", line 30, in application from trac.web.main import dispatch_request File "/usr/local/lib/python3.12/site-packages/Trac-1.7.1.dev0-py3.12.egg/trac/__init__.py", line 17, in <module> File "/usr/lib/python3.12/site-packages/pkg_resources/__init__.py", line 524, in get_distribution dist = Requirement.parse(dist) ^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/site-packages/pkg_resources/__init__.py", line 3214, in parse (req,) = parse_requirements(s) ^^^^^^ File "/usr/lib/python3.12/site-packages/pkg_resources/__init__.py", line 3173, in __init__ super(Requirement, self).__init__(requirement_string) File "/usr/lib/python3.12/site-packages/pkg_resources/_vendor/packaging/requirements.py", line 35, in __init__ parsed = parse_requirement(requirement_string) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/site-packages/pkg_resources/_vendor/packaging/_parser.py", line 64, in parse_requirement return _parse_requirement(Tokenizer(source, rules=DEFAULT_RULES)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/site-packages/pkg_resources/_vendor/packaging/_parser.py", line 73, in _parse_requirement name_token = tokenizer.expect( ^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/site-packages/pkg_resources/_vendor/packaging/_tokenizer.py", line 137, in expect if not self.check(name): ^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/site-packages/pkg_resources/_vendor/packaging/_tokenizer.py", line 129, in check self.next_token = Token(name, match[0], self.position) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ TypeError: Token() takes no arguments
firewalld
が 2.0.x にアップデートされた
Fedora 38 では、firewalld は 1.3.x でしたが、Fedora 39 では firewalld 2.0.x にアップデートされています。基本的に破壊的な変更ないようなので、これまでの設定で同じように動いています。
新機能としては色々あるのですが、個人的にはずっと気になっていたゾーン間の優先順位を明示的に指定できるようになったことが良かったです(web サーバの設定で言うと、order: allow, deny
のような指定が可能になった)。薄々そうなんだろうな、と思ってはいたのですが、これまでの優先順位は、ゾーン名の ASCII コード順であると、公式が認めました。
UEFI 完全移行はいつから?
今回、dnf5 移行が先送りになりました。BIOS ブート廃止(UEFI ブートのみになる)も Fedora 37 からアナウンスされていますが、未だに実施されていません。さくら VPS で UEFI ブート可能なのか現時点で分からないので。毎回、インストールできなくなるのでは? とヒヤヒヤしていますが、まあ、その時が来れば何とかなるのかな、とも思っています。