2020/4/28 Fedora 32 がリリースされたため、自宅のデスクトップPC の OS をアップグレードした。本稿ではその作業メモを掲載する。

Fedora32 Desktop

Fedora は Red Hat 社が支援する Fedora Project コミュニティによって開発されている Linux ディストリビューションである。 Fedora には Workstation, Server, CoreOS, Silverblue, IoT といったエディションが存在しているが、うちで使っているのは Fedora Workstation である。

Fedora 32 is officially here! - Fedora Magazine

今回のアップグレードも特に大きな問題も無く平和に完了した。 Fedora OS のアップグレードも随分と安定しており、ここ数回は PC が起動しなくなったり、画面が崩壊したり、デバイスが操作不能になどといったトラブルに遭うことなく、まったりと成功している。品質の高いソフトウェアを提供する Fedora 開発陣には感謝の念が絶えない。

しかしあまりに平和では刺激が少なくやや物足りない気もする。最近は作業メモさえ残していなかったが、今回は気が向いたので書いてみた。一応、いくら安定しているとは言っても、メイン PC の OS バージョンアップは、失敗すると当面の作業ができなくなったり、最悪データが飛ぶような、生活や精神に支障を来たす危険があるイベントである、重大な祭りであることには変わりない。

過去の記録は下記の通り:

1. Fedora 32 の変更点

Fedora 32 における変更点も Fedora Magazine に書かれている。 ここで紹介しなくとも日本語の記事も多く存在するため、項目だけ並べるだけに留めることにする。

What’s new in Fedora 32 Workstation - Fedora Magazine

Gnome 3.36 へのアップグレード:

  • Redesigned Lock Screen
  • New Extensions Application
  • Reorganized Settings
  • Redesigned Notifications / Calendar popover
  • Redesigned Clocks Application

This release features GNOME 3.36, which has plenty of great improvements as usual. My favorite is the new lock screen!

プログラミング言語バージョンの更新:

  • GCC 10
  • Ruby 2.7
  • Python 3.8

Following our “First” foundation, we’ve updated key programming language and system library packages, including GCC 10, Ruby 2.7, and Python 3.8. Of course, with Python 2 past end-of-life, we’ve removed most Python 2 packages from Fedora. A legacy python27 package is provided for developers and users who still need it.

EarlyOOM 関連:

  • Improved Out of Memory handling

EarlyOOM サービスが初期状態で有効になったことで、利用可能なメモリ量が少ない時に UI が操作不能になっても、素早く復帰することができるという。

In Fedora Workstation, we’ve enabled the EarlyOOM service by default to improve the user experience in low-memory situations.

2. Fedora 32 へのアップグレード手順

これまでの OS バージョンは Fedora 31 であった。

Linux fg-ryz 5.6.8-200.fc31.x86_64 #1 SMP Wed Apr 29 19:10:01 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

アップグレード手順は Fedora Magazine で説明された通りにコマンドを実行するだけである。いつもの手順と特に変わりなく淡々と執り行うのみである。

Upgrading Fedora 31 to Fedora 32 - Fedora Magazine

まず PC にインストールされた各種パッケージを全て最新化する。 OS アップグレードの成功確率を高める重要な手順である。

sudo dnf update --refresh

次にアップグレードツールをインストールする。大体すでに持っているため何も起きない。

sudo dnf install dnf-plugin-system-upgrade

Fedora 32 をダウンロードする。

sudo dnf system-upgrade download --releasever=32

最後に次のコマンドを実行すると、PC が再起動し、OS アップグレード本番が自動的に開始する。

sudo dnf system-upgrade reboot

Fedora32 Upgrading

うまくいけばただ待っているだけで全て完了し、最終的には見慣れた画面が表示される。

起動後、ターミナルから uname -a コマンドを実行すると Fedora 32 にアップグレードされたことが確認できた。

Linux fg-ryz 5.6.11-300.fc32.x86_64 #1 SMP Wed May 6 19:12:19 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

3. Fedora 32 へのアップグレード後

3.1. Mozc の設定

キーの入力ソフトには iBus + Mozc を使っているが、アップグレード後キーボード設定が US レイアウトになってしまった。これまでに何回も遭遇したもので、いつも通り対処した。

JP106 レイアウトに直すために、下記のように Mozc の設定ファイルを変更する。

$ sudo vim /usr/share/ibus/component/mozc.xml
$ grep -A3 -B8 layout /usr/share/ibus/component/mozc.xml
<engine>
  <description>Mozc (Japanese Input Method)</description>
  <language>ja</language>
  <symbol>&#x3042;</symbol>
  <rank>80</rank>
  <icon_prop_key>InputMode</icon_prop_key>
  <icon>/usr/share/ibus-mozc/product_icon.png</icon>
  <setup>/usr/libexec/mozc/mozc_tool --mode=config_dialog</setup>
  <layout>jp</layout>
  <name>mozc-jp</name>
  <longname>Mozc</longname>
</engine>

ファイル編集後、Gnome に再ログインすれば変更が反映される。

3.2. Gnome の設定

今回のアップデートにより、Gnome 3.36 に更新された。

何やら Gnome Shell エクステンションの管理 UI が追加されたらしい。 これまでは Gnome Tweaks を開くと下の方にあったが、今回から日本語設定の場合「拡張機能」というアプリがあって、少し手軽にエクステンションを管理できるようになった。

初期状態ではインストールされていないため、次のコマンドで導入する。

sudo dnf install gnome-extensions-app

特に感動はしなかった。

エクステンション関係では、他に gTile が動作しなくなってしまった。 どうも Gnome Shell 3.36 で廃止された API を使っていたようである。

これは一旦 gTile を削除したあと、 GitHub から最新のソースコードを持ってきて、Gnome Shell エクステンションのディレクトリに置いてあげたところ直った。置いたあとは Gnome の再ログイン等が必要である。

git clone https://github.com/gTile/gTile.git ~/.local/share/gnome-shell/extensions/gTile@vibou

GNOME Shell 3.36 support · Issue #118 · gTile/gTile

3.3. Docker コンテナから DNS の名前解決ができない

Docker 周りだけは OS アップグレードのたびに毎回少しずつ異なる動きをするので、少し楽しい。 今度は Docker コンテナで DNS の名前解決ができなくなり、 コンテナからのインターネット接続と、コンテナ間の通信が失敗するようになってしまった。

実は Fedora32 では Firewalld のバックエンドが iptables から nftables に変わっている。 Docker では iptables が前提の実装になっており、nftables には対応していないため不都合が起きる (らしい)。

/etc/firewalld/firewalld.conf から抜粋:

# FirewallBackend
# Selects the firewall backend implementation.
# Choices are:
#       - nftables (default)
#       - iptables (iptables, ip6tables, ebtables and ipset)
FirewallBackend=nftables

Docker and Fedora 32 - Fedora Magazine によると、Firewalld の設定と Moby のインストールによって解決できるとのこと。 私の場合、色々と試していつのまにか問題無く動くようになっていたので詳しい手順は不明である。 よって手順はリンク先を参照。

下記は Docker ネットワークと、デフォルトインターフェースについて、 Firewalld の設定を変更するメモである:

まず Docker の仮想ブリッジ docker0 に使うゾーンを設定する。 私の環境では、気がついたら docker が使われるようになっていた。

# firewall-cmd --permanent --get-zone-of-interface=docker0
docker
# firewall-cmd --get-zone-of-interface=docker0
docker

ちなみに yes/no を問い合わせることもできる。

# firewall-cmd --query-interface=docker0 --zone=docker
yes
# firewall-cmd --permanent --query-interface=docker0 --zone=docker
yes

おそらく下記のようにして設定を変更したのだと思う。 --permanent を使うと再起動後に効果がある。 直ちに反映させたい場合は --permanent 無しでも実行してあげるのが良い。

# firewall-cmd --permanent --zone=docker --add-interface=docker0
# firewall-cmd --zone=docker --add-interface=docker0

リンク先では trusted ゾーンに登録している。

# firewall-cmd --permanent --zone=trusted --add-interface=docker0

次はデフォルトインターフェイスについて IPv4 マスカレーディングを有効化する。 IPv4 マスカレーディング機能を有効化すると、 そのインターフェイスは NAT の機能をするようになる。

Firewalld のデフォルトゾーンを調べる:

# firewall-cmd --get-default-zone
FedoraWorkstation

IPv4 マスカレーディングが有効になっているか調べる:

# firewall-cmd --zone=FedoraWorkstation --query-masquerade
yes
# firewall-cmd --permanent --zone=FedoraWorkstation --query-masquerade
yes

IPv4 マスカレードを有効化する。

# firewall-cmd --zone=FedoraWorkstation --add-masquerade
Warning: ALREADY_ENABLED: masquerade
success
# firewall-cmd --permanent --zone=FedoraWorkstation --add-masquerade
Warning: ALREADY_ENABLED: masquerade
success

なお、物理 LAN インターフェイス eno1 のゾーンは trusted になっている。

# firewall-cmd --get-active-zones
docker
  interfaces: docker0
libvirt
  interfaces: virbr0
trusted
  interfaces: eno1

下記のようにして Docker コンテナ起動時のネットワーク設定をホスト直結 (?) にする 解決方法もあるが、セキュリティ的に良くなさそうなためおすめしない。

Docker コンテナ起動時に --network=host というオプションを追加してあげるという暫定対処が発見されている。Docker compose の場合には、下記のように network_mode: "host" を設定すればよい。なお link と一緒に使う場合には工夫が必要そうなので注意。-

version: "3.7"
services:
  proxy:
    image: sameersbn/squid:3.5.27-2
    volumes:
      - ./squid.conf:/etc/squid/squid.conf
      - ./root:/root
    ports:
      - "3128:3128"
    tty: true
    network_mode: "host"

3.4. ブランクスクリーンで Emacs が落ちる

直し方がわからないのでブランクスクリーンを無効にして当面を凌ぐこととした。 journalctl -xe には以下のように出力されていた。

 5月 20 00:58:00 fg-ryz emacs.desktop[95761]: X protocol error: BadWindow (invalid Window parameter) on protocol request 25
 5月 20 00:58:00 fg-ryz emacs.desktop[95761]: When compiled with GTK, Emacs cannot recover from X disconnects.
 5月 20 00:58:00 fg-ryz emacs.desktop[95761]: This is a GTK bug: https://gitlab.gnome.org/GNOME/gtk/issues/221
 5月 20 00:58:00 fg-ryz emacs.desktop[95761]: For details, see etc/PROBLEMS.
 5月 20 00:58:00 fg-ryz audit[95761]: ANOM_ABEND auid=1000 uid=1000 gid=1000 ses=3 subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 pid=95761 comm="emacs" exe="/usr/bin/emacs-26.3" sig=6 res=1
 5月 20 00:58:00 fg-ryz gnome-terminal-[2117]: gnome-terminal-server has no capability of surrounding-text feature
 5月 20 00:58:00 fg-ryz emacs.desktop[95761]: Backtrace:
 5月 20 00:58:00 fg-ryz emacs.desktop[95761]: emacs[0x51fc08]
 5月 20 00:58:00 fg-ryz emacs.desktop[95761]: emacs[0x504931]
 5月 20 00:58:00 fg-ryz emacs.desktop[95761]: emacs[0x51fd19]
 5月 20 00:58:00 fg-ryz emacs.desktop[95761]: emacs[0x4ce963]
 5月 20 00:58:00 fg-ryz emacs.desktop[95761]: emacs[0x4d06ba]
 5月 20 00:58:00 fg-ryz emacs.desktop[95761]: emacs[0x4d074d]
 5月 20 00:58:00 fg-ryz emacs.desktop[95761]: /lib64/libX11.so.6(_XError+0xfb)[0x7f844e44b5cb]
 5月 20 00:58:00 fg-ryz emacs.desktop[95761]: /lib64/libX11.so.6(+0x46337)[0x7f844e448337]
 5月 20 00:58:00 fg-ryz emacs.desktop[95761]: /lib64/libX11.so.6(+0x463d5)[0x7f844e4483d5]
 5月 20 00:58:00 fg-ryz emacs.desktop[95761]: /lib64/libX11.so.6(_XEventsQueued+0x52)[0x7f844e448d22]
 5月 20 00:58:00 fg-ryz emacs.desktop[95761]: /lib64/libX11.so.6(XFlush+0x1e)[0x7f844e42a0ce]
 5月 20 00:58:00 fg-ryz emacs.desktop[95761]: /lib64/libX11.so.6(+0x664c6)[0x7f844e4684c6]
 5月 20 00:58:00 fg-ryz emacs.desktop[95761]: /lib64/libX11.so.6(XDestroyIC+0x16)[0x7f844e456386]
 5月 20 00:58:00 fg-ryz emacs.desktop[95761]: emacs[0x4e7230]
 5月 20 00:58:00 fg-ryz emacs.desktop[95761]: emacs[0x4dd2ec]
 5月 20 00:58:00 fg-ryz emacs.desktop[95761]: emacs[0x4dd9df]
 5月 20 00:58:00 fg-ryz emacs.desktop[95761]: emacs[0x42f534]
 5月 20 00:58:00 fg-ryz emacs.desktop[95761]: emacs[0x4ce8f3]
 5月 20 00:58:00 fg-ryz emacs.desktop[95761]: emacs[0x4d06ba]
 5月 20 00:58:00 fg-ryz emacs.desktop[95761]: emacs[0x4d074d]
 5月 20 00:58:00 fg-ryz emacs.desktop[95761]: /lib64/libX11.so.6(_XError+0xfb)[0x7f844e44b5cb]
 5月 20 00:58:00 fg-ryz emacs.desktop[95761]: /lib64/libX11.so.6(+0x46337)[0x7f844e448337]
 5月 20 00:58:00 fg-ryz emacs.desktop[95761]: /lib64/libX11.so.6(+0x463d5)[0x7f844e4483d5]
 5月 20 00:58:00 fg-ryz emacs.desktop[95761]: /lib64/libX11.so.6(_XReadEvents+0x81)[0x7f844e448e51]
 5月 20 00:58:00 fg-ryz emacs.desktop[95761]: /lib64/libX11.so.6(XIfEvent+0x8d)[0x7f844e42ff9d]
 5月 20 00:58:00 fg-ryz emacs.desktop[95761]: /lib64/libX11.so.6(+0x7792f)[0x7f844e47992f]
 5月 20 00:58:00 fg-ryz emacs.desktop[95761]: /lib64/libX11.so.6(+0x78682)[0x7f844e47a682]
 5月 20 00:58:00 fg-ryz emacs.desktop[95761]: /lib64/libX11.so.6(_XimRead+0x50)[0x7f844e47a910]
 5月 20 00:58:00 fg-ryz emacs.desktop[95761]: /lib64/libX11.so.6(+0x66cfb)[0x7f844e468cfb]
 5月 20 00:58:00 fg-ryz emacs.desktop[95761]: /lib64/libX11.so.6(XSetICValues+0x109)[0x7f844e456639]
 5月 20 00:58:00 fg-ryz emacs.desktop[95761]: emacs[0x4e7327]
 5月 20 00:58:00 fg-ryz emacs.desktop[95761]: emacs[0x46a60d]
 5月 20 00:58:00 fg-ryz emacs.desktop[95761]: emacs[0x46aa56]
 5月 20 00:58:00 fg-ryz emacs.desktop[95761]: emacs[0x4741de]
 5月 20 00:58:00 fg-ryz emacs.desktop[95761]: emacs[0x474465]
 5月 20 00:58:00 fg-ryz emacs.desktop[95761]: emacs[0x4dabc3]
 5月 20 00:58:00 fg-ryz emacs.desktop[95761]: emacs[0x4dc378]
 5月 20 00:58:00 fg-ryz emacs.desktop[95761]: /lib64/libgdk-3.so.0(+0x7183f)[0x7f844ec2083f]
 5月 20 00:58:00 fg-ryz emacs.desktop[95761]: /lib64/libgdk-3.so.0(+0x71b72)[0x7f844ec20b72]
 5月 20 00:58:00 fg-ryz emacs.desktop[95761]: /lib64/libgdk-3.so.0(gdk_display_get_event+0x44)[0x7f844ebe7114]
 5月 20 00:58:00 fg-ryz emacs.desktop[95761]: /lib64/libgdk-3.so.0(+0x718d6)[0x7f844ec208d6]
 5月 20 00:58:00 fg-ryz emacs.desktop[95761]: ...

applications - How to get GNU Emacs work on elementary OS? - elementary OS Stack Exchange