えんでぃの技術ブログ

えんでぃの技術ブログ

ネットワークエンジニアの視点で、IT系のお役立ち情報を提供する技術ブログです。

Fedora35の変更点

fedora_logo

前の記事

Fedora34のアップデート情報はこちらをどうぞ。

endy-tech.hatenablog.jp

お伝えしたいこと

Fedora35のリリースノートを読んで、個人的に気になった項目をまとめます。
末尾のsssdの問題は、バージョンアップした方全員に該当すると思いますのでぜひチェックしてください。

docs.fedoraproject.org

公式情報の見方

Fedora 35の変更点は、以下のリンクに載っています。
概要はリリースノートに、詳細情報はChange Setsのページに書いてあります。

Change Setの各サブタイトルのリンクから詳細情報に飛べるようになっています (下図赤枠部)。
詳細を知りたい時に便利なので、こちらも活用ください。

fedora_change_sets

Fedora35の既知の問題は、以下にまとめられています。

他バージョンのFedoraについて知りたい場合は、以下のリンクを参照してください。

Release Notes & Changes

firewalldがv1.0.0に

firewalldを操作した経験がないので、あっさりめに触れます。
以下が主な変更点とのことです。

  • ゾーン内通信がデフォルト許可に
  • NAT rulesがinet family配下に移動した
  • Default target は reject と類似した挙動になる
  • ICMPは受信時のみフィルタする。ルーティングする際はフィルタしない
  • iptables backendが非推奨に
  • Direct interfaceが非推奨に

既存でfirewalldをカスタマイズしている方にとって、一部通信制御の挙動が変わるのは影響が大きい印象です。

音声サービスのセッションマネージャーにWirePlumberを採用

Fedora34では、既存の音声サーバサービスが全てPipeWireに集約されました (過去記事)。

PipeWireのSessionManagerは簡素な作りで、カスタマイズできる範囲が少なかったとのことです。
SessionManagerの機能をPipeWireに移行することで、カスタマイズ性が上がるとあります。
また、WirePlumberはPipeWireのSession Managerと完全に同等の機能を持ちます。

詳しいところは調べていません。
Fedora33から34、35とバージョンアップした後も音が出たので、私としてはヨシとします。
しかし、残念ながら音が出なくなるケースもあるようです。
音が出ないという方は、#WirePlumberが自動起動せず、音が出ないことがあるを参照してください。

デフォルトのPythonが3.10に

Fedora34まではデフォルトのPythonがバージョン3.9でしたが、Fedora35以降では3.10になります。
Python 3.10の特徴は、python.org - PEP 619にまとめられています。

詳細は上記のPEP 619を参照なのですが、Python 3.10以降はOpenSSL 1.1.1以上を必須とするとのことです。
これにより、Python 3.10は基本的にRHEL8.0以上でしかPython3.10が動かなくなるようです。
他のディストリビューションも含めた詳細は、python.org - PEP 644を参照してください。

sssdがデフォルトで無効に

sssdとは、リモートアクセスやログイン認証を取り扱うデーモンです。
NSS (Name System Switch -> /etc/nsswitch.conf) やPAM (Pluggable Authentication Modules)と連携して動作します。
sssdはキャッシュ機構を持つため、filesと比較して認証処理が効率的であることが利点です。

Fedora34以前では、sssdというデーモンがデフォルトで起動していましたが、Fedora35以降ではデフォルトで停止されます。

それに伴い、/etc/nsswitch.confの記載内容が以下のように変わっています。
パスワード、及びユーザーグループの参照にsssではなくfile (/etc/passwd, /etc/group) を使うようになりました。

passwd:     files sss systemd
group:      files sss systemd

# Fedora34以前では以下の内容だった
# passwd:     sss files systemd
# group:      sss files systemd

変更の理由は、「最小構成のFedoraにおいて自動起動するデーモンを減らしたかったから」とのことです。
今回の変更に伴い、Fedoraコンテナからsssd-clientパッケージが除外され、ファイルサイズが軽量化されました。

実施することはないと思いますが、Fedora Wikiのリンクにsssdを再び利用するための手順もありました。
sudoを使うようアレンジを加えたコマンドは、以下のとおりです。
これらのコマンドは、手元のFedora35環境で動作確認済みです。

sudo authselect select sssd with-files-domain
sudo bash -c "echo -e '[sssd]\nenable_files_domain = True'  > /etc/sssd/conf.d/files_domain.conf"
sudo chmod 600 /etc/sssd/conf.d/files_domain.conf
sudo systemctl start sssd

更に、再びFedora35のデフォルトに戻すコマンドは、以下の通りです。

sudo systemctl stop sssd
sudo rm /etc/sssd/conf.d/files_domain.conf
sudo authselect select sssd with-fingerprint with-silent-lastlog

手順について、いくつか補足します。

  • /etc/nsswitch.confは手動での変更ではなく、authselectコマンドによって変更するのが推奨
  • authselect currentで現在のモードを表示
  • authselect show sssdsssdモードの詳細を表示
  • Fedora35から、sssd.serviceの起動条件に「/etc/sssd/sssd.conf/etc/sssd/conf.d/*.confのいずれかが存在すること」が追加された
  • glibc 2.33以降 (Fedora34以降)、/etc/nsswitchのタイムスタンプが変わっていると再読込が走る。ファイル更新後のOS再起動は不要となった

Bugs

Bugsの中から気になる情報を拾います。

WirePlumberが自動起動せず、音が出ないことがある

Fedora35にバージョンアップした後、WirePlumberが、時折自動起動しない設定になってしまうことがあると報告されています。
WirePlumberは音声サーバーのSession Managerとして動作しており、このサービスが起動しないと音声が流れません。

WirePlumberの起動有無は、以下のコマンドで確認可能です。

systemctl --user status wireplumber

WirePlumberが一般ユーザー権限で起動していなかった場合は、一般ユーザーで以下のコマンドを実行することで復旧するとのことです。
rootユーザーによる実行や、sudoを付けての実行は不要です。

systemctl --user enable --now wireplumber

その他

Release NotesやBugsには載っていませんが、私が遭遇した事象と対処法をメモします。

Fedora35にアップグレード後、ユーザー追加・削除時にエラーメッセージが出る

タイトルの通りです。
Fedora34以前からFedora35にアップグレードした後、useradduserdelコマンドを実行するたびにエラーメッセージが出ました。
passwdgroupaddなどは試していませんが、同様にエラーが出る可能性はあると思います。

実際にユーザー追加・削除はできているので、エラーメッセージに実害はないと思います。

実際に発生するエラーメッセージは、以下のような内容です。
sssdのバージョンが変わったが、キャッシュファイルが古いバージョンのsssdのままであるためにエラーが出力されています。
Fedora35へのバージョンアップによってsssdが新しいバージョンとなり、なおかつsssdが自動起動しなくなったために古いキャッシュが残ったことが原因です。

sudo useradd endy2
# [sss_cache] [sysdb_domain_cache_connect] (0x0010): DB version too old [0.22], expected [0.23] for domain implicit_files!
# Higher version of database is expected!
# In order to upgrade the database, you must run SSSD.
# Removing cache files in /var/lib/sss/db should fix the issue, but note that removing cache files will also remove all of your cached credentials.
# Could not open available domains
# [sss_cache] [sysdb_domain_cache_connect] (0x0010): DB version too old [0.22], expected [0.23] for domain implicit_files!
# Higher version of database is expected!
# In order to upgrade the database, you must run SSSD.
# Removing cache files in /var/lib/sss/db should fix the issue, but note that removing cache files will also remove all of your cached credentials.
# Could not open available domains

id endy2
# uid=1001(endy2) gid=1002(endy2) groups=1002(endy2)

sudo userdel -r endy2
# [sss_cache] [sysdb_domain_cache_connect] (0x0010): DB version too old [0.22], expected [0.23] for domain implicit_files!
# Higher version of database is expected!
# In order to upgrade the database, you must run SSSD.
# Removing cache files in /var/lib/sss/db should fix the issue, but note that removing cache files will also remove all of your cached credentials.
# Could not open available domains
# [sss_cache] [sysdb_domain_cache_connect] (0x0010): DB version too old [0.22], expected [0.23] for domain implicit_files!
# Higher version of database is expected!
# In order to upgrade the database, you must run SSSD.
# Removing cache files in /var/lib/sss/db should fix the issue, but note that removing cache files will also remove all of your cached credentials.
# Could not open available domains

対処法は、上記エラーメッセージが示すとおり/var/lib/sss/db内のファイルを削除することです。
フォルダごと削除しないよう気をつけてください。
フォルダを削除すると、sssd.serviceが起動しなくなります。
間違えて消した場合は、sudo mkdir /var/lib/sss/dbで再作成すれば大丈夫です。

以下のコマンドでエラーは出なくなります。

sudo bash -c 'rm /var/lib/sss/db/*'

/var/lib/sss/db/は、sssdのキャッシュが保存されるディレクトリです。
内部のファイルは、#sssdがデフォルトで無効にで紹介した手順などでsssd.serviceを起動することで再生成するので、消してしまっても問題ありません。

ちなみに、キャッシュを削除する代わりにsssdを起動・停止することでもこの問題は一時的に対処できますが、将来sssdをバージョンアップしたときに再びエラーが出る懸念があります。

一連の手順は、手元のFedora35で動作確認済みです。

まとめ

興味を持ったトピック限定ですが、Fedora35の更新点をまとめました。

sssdのエラーにヒットした場合、sudo bash -c 'rm /var/lib/sss/db/*'ワークアラウンドをぜひお試しくださいね。