ext4のOpenWrtのバージョン更新。
OpenWrt x86 の ext4 をdist release upgrade してみた。先月にルーターとして稼働させたばかりだけど、マイナーバージョンのアップデートが来ていたので試した。
2020-01-30 に 19.07.1 がリリースされていたので、 インストールした OpenWrt x86をさっそくアップデートしてみた
やること
sysuprade コマンドでもできるようですが、今回は手作業でアップデートをしてみた。
root@MyOpenWRT:~# opkg install curl Package curl (7.66.0-1) installed in root is up to date.
バックアップの作成
アップデートまえに現在の稼働中のOSをバックアップします。
いろいろな方法があるかと思います。わたしは、KVM+Qemu で動かしているので、virt-manager からディスクイメージをバックアップしました。
こういうとき仮想マシンって便利だね。
現在のインストールを最新版まで上げておきます。
現在インストールされているパッケージを最新版までアップデートしておきます。
root@MyOpenWRT:~# opkg update root@MyOpenWRT:~# opkg list-upgradable root@MyOpenWRT:~# opkg list-upgradable | cut -d ' ' -f 1 | xargs opkg upgrade
boot のvmlinuz更新
マウントされていることを確認
root@MyOpenWRT:~# mount | grep boot /dev/sda1 on /boot type ext4 (rw,noatime) /dev/sda1 on /boot type ext4 (rw,noatime)
boot に移動
root@MyOpenWRT:~# cd /boot root@MyOpenWRT:/boot# ls grub vmlinuz root@MyOpenWRT:/boot# cp vmlinuz vmlinuz.bk
vmlinuz をアップデートするので消してもいいようにバックアップを取っておく。
ダウンロードして更新
root@MyOpenWRT:/boot# curl -LJO https://downloads.openwrt.org/releases/19.07.1/targets/x86/64/openwrt-19.07.1-x86-64-vmlinuz root@MyOpenWRT:/boot# ls grub vmlinuz openwrt-19.07.1-x86-64-vmlinuz vmlinuz.bk root@MyOpenWRT:/boot# cp openwrt-19.07.1-x86-64-vmlinuz vmlinuz
これで、vmlinuz は更新された、まだ再起動しません。
kernel image の更新
公式サイトから 、kernel_4.XXX_x86_64.ipk を取得して、インストールします。
root@MyOpenWRT:~# curl -LJO https://downloads.openwrt.org/releases/19.07.1/targets/x86/64/packages/kernel_4.14.167-1-e1dd7676581672f6f0bdb1363506dee1_x86_64.ipk root@MyOpenWRT:~# ll drwxr-xr-x 3 root root 4096 Feb 3 17:45 ./ drwxr-xr-x 19 root root 4096 Jan 21 03:06 ../ -rw------- 1 root root 12968 Feb 3 16:11 .bash_history drwx------ 2 root root 4096 Jan 21 03:17 .ssh/ -rw------- 1 root root 15511 Feb 3 04:31 .viminfo -rw-r--r-- 1 root root 798 Feb 3 17:45 kernel_4.14.167-1-e1dd7676581672f6f0bdb1363506dee1_x86_64.ipk
ダウンロードできたのでインストールします。
root@MyOpenWRT:~# opkg install kernel_4.14.167-1-e1dd7676581672f6f0bdb1363506dee1_x86_64.ipk Upgrading kernel on root from 4.14.162-1-e1dd7676581672f6f0bdb1363506dee1 to 4.14.167-1-e1dd7676581672f6f0bdb1363506dee1... Configuring kernel.
これで、カーネルインストールができました。
パッケージの更新
パッケージをバージョンに合わせて更新するのですが、まず、バージョンの数字を合わせていきます。
/etc/opkg/distfeeds.conf に、パッケージ取得元のURLが記載されています。
確認します。
root@MyOpenWRT:~# cat /etc/opkg/distfeeds.conf src/gz openwrt_core http://downloads.openwrt.org/releases/19.07.0/targets/x86/64/packages src/gz openwrt_base http://downloads.openwrt.org/releases/19.07.0/packages/x86_64/base src/gz openwrt_luci http://downloads.openwrt.org/releases/19.07.0/packages/x86_64/luci src/gz openwrt_packages http://downloads.openwrt.org/releases/19.07.0/packages/x86_64/packages src/gz openwrt_routing http://downloads.openwrt.org/releases/19.07.0/packages/x86_64/routing src/gz openwrt_telephony http://downloads.openwrt.org/releases/19.07.0/packages/x86_64/telephony
この数字を更新するのですが、sedで更新します。
sed -i
はミスると致命的なので、先にcat で試しておきます。
## cat で sedのミスがないか確認 root@MyOpenWRT:~# cat /etc/opkg/distfeeds.conf | sed 's/19.07.0/19.07.1/' src/gz openwrt_core http://downloads.openwrt.org/releases/19.07.1/targets/x86/64/packages src/gz openwrt_base http://downloads.openwrt.org/releases/19.07.1/packages/x86_64/base src/gz openwrt_luci http://downloads.openwrt.org/releases/19.07.1/packages/x86_64/luci src/gz openwrt_packages http://downloads.openwrt.org/releases/19.07.1/packages/x86_64/packages src/gz openwrt_routing http://downloads.openwrt.org/releases/19.07.1/packages/x86_64/routing src/gz openwrt_telephony http://downloads.openwrt.org/releases/19.07.1/packages/x86_64/telephony
sed でただしく、書き換えられることががわかったので、このファイルをsed -i
で直接更新(上書き)します。
root@MyOpenWRT:~# sed -i 's/19.07.0/19.07.1/' /etc/opkg/distfeeds.conf
これで、パッケージ取得元を変更できました。
opkg の一覧を更新して、アップデートします。
root@MyOpenWRT:~# opkg update
実行例
root@MyOpenWRT:~# opkg update Downloading http://downloads.openwrt.org/releases/19.07.1/targets/x86/64/packages/Packages.gz Updated list of available packages in /var/opkg-lists/openwrt_core Downloading http://downloads.openwrt.org/releases/19.07.1/targets/x86/64/packages/Packages.sig Signature check passed. Downloading http://downloads.openwrt.org/releases/19.07.1/packages/x86_64/base/Packages.gz Updated list of available packages in /var/opkg-lists/openwrt_base Downloading http://downloads.openwrt.org/releases/19.07.1/packages/x86_64/base/Packages.sig Signature check passed. Downloading http://downloads.openwrt.org/releases/19.07.1/packages/x86_64/luci/Packages.gz Updated list of available packages in /var/opkg-lists/openwrt_luci Downloading http://downloads.openwrt.org/releases/19.07.1/packages/x86_64/luci/Packages.sig Signature check passed. Downloading http://downloads.openwrt.org/releases/19.07.1/packages/x86_64/packages/Packages.gz Updated list of available packages in /var/opkg-lists/openwrt_packages Downloading http://downloads.openwrt.org/releases/19.07.1/packages/x86_64/packages/Packages.sig Signature check passed. Downloading http://downloads.openwrt.org/releases/19.07.1/packages/x86_64/routing/Packages.gz Updated list of available packages in /var/opkg-lists/openwrt_routing Downloading http://downloads.openwrt.org/releases/19.07.1/packages/x86_64/routing/Packages.sig Signature check passed. Downloading http://downloads.openwrt.org/releases/19.07.1/packages/x86_64/telephony/Packages.gz Updated list of available packages in /var/opkg-lists/openwrt_telephony Downloading http://downloads.openwrt.org/releases/19.07.1/packages/x86_64/telephony/Packages.sig Signature check passed.
インストール中に/lib/functions.shが実行されないように実行権限を外します。 initスクリプトが何度も実行されないように。(らしい
root@MyOpenWRT:~# ll /lib/functions.sh -rwxr-xr-x 1 root root 8104 Jan 7 01:47 /lib/functions.sh* root@MyOpenWRT:~# chmod -x /lib/functions.sh root@MyOpenWRT:~# opkg upgrade base-files Upgrading base-files on root from 204.2-r10860-a3ffeb413b to 204.2-r10911-c155900f66... ...
最後にパッケージ全部アップデートしていきます。
root@MyOpenWRT:~# opkg list-upgradable | cut -d ' ' -f 1 | xargs opkg upgrade
これでアップデート出来ました。
再起動します。
root@MyOpenWRT:~# reboot
アップデートを確認します。
OSのgitのコミットのバージョン
root@MyOpenWRT:~# cat /etc/openwrt_version r10911-c155900f66
カーネルのバージョン
root@MyOpenWRT:~# uname -a Linux OpenWRT_livaZ_VM 4.14.167 #0 SMP Wed Jan 29 16:05:35 2020 x86_64 GNU/Linux
wrt関連の情報
root@MyOpenWRT:~# cat /etc/openwrt_release DISTRIB_ID='OpenWrt' DISTRIB_RELEASE='19.07.1' DISTRIB_REVISION='r10911-c155900f66' DISTRIB_TARGET='x86/64' DISTRIB_ARCH='x86_64' DISTRIB_DESCRIPTION='OpenWrt 19.07.1 r10911-c155900f66' DISTRIB_TAINTS=''
Linux にある os-releaseの情報
root@MyOpenWRT:~# cat /etc/os-release NAME="OpenWrt" VERSION="19.07.1" ID="openwrt" ID_LIKE="lede openwrt" PRETTY_NAME="OpenWrt 19.07.1" VERSION_ID="19.07.1" HOME_URL="https://openwrt.org/" BUG_URL="https://bugs.openwrt.org/" SUPPORT_URL="https://forum.openwrt.org/" BUILD_ID="r10911-c155900f66" OPENWRT_BOARD="x86/64" OPENWRT_ARCH="x86_64" OPENWRT_TAINTS="" OPENWRT_DEVICE_MANUFACTURER="OpenWrt" OPENWRT_DEVICE_MANUFACTURER_URL="https://openwrt.org/" OPENWRT_DEVICE_PRODUCT="Generic" OPENWRT_DEVICE_REVISION="v0" OPENWRT_RELEASE="OpenWrt 19.07.1 r10911-c155900f66"
これで無事にバージョンが出来ました。
後片付け
kernel.ipkのパッケージを削除しておきます
root@MyOpenWRT:/etc# cd / root@MyOpenWRT:~# rm kernel_4.14.167-1-e1dd7676581672f6f0bdb1363506dee1_x86_64.ipk
/boot に作ったバックアップを削除しておきます。
root@MyOpenWRT:~# cd /boot root@MyOpenWRT:/boot# ls grub openwrt-19.07.1-x86-64-vmlinuz vmlinuz vmlinuz.bk root@MyOpenWRT:/boot# rm vmlinuz.bk root@MyOpenWRT:/boot# rm openwrt-19.07.1-x86-64-vmlinuz
パーミッションも直しておきました。
root@MyOpenWRT:~# chmod +x /lib/functions.sh
今回省略したこと
ハッシュ値のチェック。はやってません。
sysupgrade などのファームウェアの書き換えもやってません。ext4 に直接いれてるOpenWrt x86 なので
参考資料
Upgrading an OpenWrt 18.06.1 x86_64 ext4 image to 18.06.2 – 文卓的笔记