それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

OpenWrt x86 の リリースのバージョン更新する。

ext4のOpenWrtのバージョン更新。

OpenWrt x86ext4 をdist release upgrade してみた。先月にルーターとして稼働させたばかりだけど、マイナーバージョンのアップデートが来ていたので試した。

2020-01-30 に 19.07.1 がリリースされていたので、 インストールした OpenWrt x86をさっそくアップデートしてみた

やること

  • バックアップの作成
  • curlモジュールのインストール
  • boot のvmlinux の更新
  • カーネルのインストール
  • アップデートスクリプトの実行
  • パッケージ取得バージョンの更新

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 – 文卓的笔记

OpenWrt Project: Upgrading OpenWrt firmware via CLI