ARMBIANのカーネルを更新した
以下の投稿に記載したように、systemdのUpgradeに伴う障害対応の一環で、ARMBIANを導入したOrangePi Oneのカーネルを更新しました。
wave.hatenablog.com
Linuxカーネルの更新は面倒な作業を想定していたのですが、armbian-configツールを使って簡単にカーネル更新が行えました。その手順を紹介します*1。
Linux Kernel更新手順
1. 現状のLinux Kernelバージョンを確認し、armbian-configを起動*2
$ uname -a Linux orangepione 3.4.113-sun8i #2 SMP PREEMPT Sat Jan 12 15:54:26 CET 2019 armv7l armv7l armv7l GNU/Linux $ sudo armbian-config
2. Systemを選択しOK
3. Switch(またはOther*3 )を選択しOK
4. 「シングルボードコンピュータの挙動が変わったり、ブートに失敗する可能性がある」旨の警告を承諾できるなら"Yes, I understand"にマークしてOK
5. 更新したいカーネルを選択しOK
6. 「ほかのカーネルでは挙動が変わったり*4壊れたりするかもしれないし、ボードの設定がデフォルトに戻る*5」という趣旨の警告を承諾できるならOK
7. インストールが実行されるのでしばらく待つ
8. インストール完了メッセージが表示されたらリブートするためYes
9. リブート完了後、更新後のLinux Kernelバージョンを確認
$ uname -a Linux orangepione 4.19.13-sunxi #5.70 SMP Sat Jan 12 15:43:21 CET 2019 armv7l armv7l armv7l GNU/Linux
10. 各種設定及びソフトウェアの挙動を確認し、必要に応じて対策
雑感
(上記手順の10は動作させているソフトウェアによっては面倒かもしれませんが、)カーネル更新自体は上記のように対話型UIで非常に簡単に行えました。
今回行った3.4.113-sun8i→4.19.13-sunxiの更新では、ハードウェア周りの情報取得のためのファイルが変わっていたため、自前の監視スクリプトがエラーを起こすようになったのを修正する必要がありました。また、512MBしかないメモリをアプリケーションで有効利用するため、ramlogとzramを止めていたのですが、これがデフォルトの挙動で動作するようになっていたため、disabledにする必要がありました。他にも何かdisabledにしていたサービスがあったような気もするのですが、はっきりした記憶が無く。これから作業する場合には予め何をdisabledにしているのか、事前に確認しておくのが望ましいと思います。
以上。
*1:スクリーンショットはOrangePi Oneのものですが、NanoPi Neoでも同様でした。表示内容はarmbian-configのバージョンや現在のLinuxカーネルのバージョン等によって微妙に異なりますが、基本的には似た感じです。
*2:armbian-configが未インストールならsudo apt install armbian-configでインストール可能。
*3:現在使用中のLinux Kernelバージョン等により異なります。
*4:例えば、SoCの温度が読み取れるファイル/sys/devices/virtual/hwmon/hwmon1/temp1_inputが無くなって、/sys/devices/virtual/thermal/thermal_zone0/tempに代わっていたりすることを確認しています。