それマグで!

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

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

OpenWrt x86のアップグレード手順(見直し

2023-10-16 追記

手順を見直して、新規エントリして書き直した。 openwrtのアップグレード手順(見直しの見直し - それマグで!

以下 以前の記録。

x86_64のアップグレード手順を公式Wikiに従って見直してみた。公式Wikiがロードが早くなって読みやすくなったし、整理されて読みやすくなって便利だ。

19.07.{1,2,3,4,5} を21.xへアップグレードしながらアップグレード手順を見直した。

アップグレード手順

  1. opkg の一覧の保存
  2. 保存が必要なファイルを列挙。sysupgrade.conf
  3. 設定の保存とバックアップ
  4. WEBか、コマンドからアップグレード
  5. SSH ログインしてopkgをインストール

手順1

opkg save 

手順2

## 保存するファイルの追加
echo path/to/config >> /etc/sysupgrade.conf
## 保存するファイルの確認
sysupgrade -l 

手順3

## バックアップ作成
sysupgrade --create-backup $HOSTNAME-$( date -I ).tgz
## バックアップ保存(scpやUSBで)
scp $HOSTNAME-$( date -I ).tgz takuya@myserver:~/

または、WEB(luci)の画面から。っていうか、WEB-UIからやるのが楽ちん。

手順4

URL=https://downloads.openwrt.org/releases/21.02.1/targets/x86/64/openwrt-21.02.1-x86-64-generic-ext4-combined.img.gz
sysupgrade  --test -f $( date -I ).tgz -v  $URL
sysupgrade  -f $( date -I ).tgz -v  $URL

コマンドでやるより、WEB画面の方が圧倒的に楽ちん。っていうかコマンドからは地獄。

手順5

ssh wrt-router
### pppoeが起動してないときは 
# ip route add default via 192.168.111.111 # 別のルータ経由で出る
## opkg構成を復元
opkg restore

ここで、PPPoEにつながってないと詰むので、別のルータを用意してPPPoEさせるほうがいい。

各手順について

各手順ついて、知っておく必要があったこと、実際にアップグレードして起きたトラブルと対応をまとめておく。

opkg でインストールしたものを保存

opkg save
opkg restore  # 再現インストール

注意点 opkg save コマンドは、19.x 系には存在しないので、スクリプトをとってくる.

saveがない場合

wget -O opkg-extras.sh "https://openwrt.org/_export/code/docs/guide-user/advanced/opkg_extras?codeblock=0"
. ./opkg-extras.sh

アップグレード時に維持する設定ファイルを指定sysupgrade.conf

アップグレードでファームを書き換えると設定もファイルも消える。x86/64のEXT4を使っていてるが、容赦なくext4もまっさらになる。

そこで、sysypgrade.confを使って、アップグレード後に保持するファイル指定が必要。

  • /etc/configにあるファイルは保持される。
  • /etc/sysupgrade.conf に書いたファイルは追加で保持される。
  • 例外的にパッケージが指定したファイルは保持される ( 例 /etc/unbound/unbound_srv.conf など)

その他: 特定アップグレードの注意点。

  • SoftEtherの設定は保持されない
  • DDNSスクリプトは19.x と 21.x で違うので設定が保持されない。
  • /root/.ssh は破棄されるので、もし使ってる場合は、 sysupgrade.confに書くこと
  • chsh している場合は、/bin/ash に戻しておくこと。
  • luci-proto 関連
  • hotplug 関連
  • opkgを再インストール時の注意
  • ipv6 NGNの注意。

softether の設定は保持されない

そのままでは、/etc/ 中に、softetherの設定は存在しない、パッケージが指定してないので、設定はバックアップされないので注意する。

SoftEtherについては、次の3つの選択肢がある。

  • エクスポート・インポート
  • 設定ファイルをバックアップ(sysupgrade.conf)に含める
  • vpncmd を作っておく。

エクスポートする場合

vpncmd /CLIENT localhost /CMD AccountExport $NAME /SAVEPATH:/etc/config/softether-$name.config

sysupgradeに含めるなら、設定は次の場所にある。

/usr/libexec/softethervpn/vpn_client.config

再設定のvpncmd を作っておく(おすすめ

vpncmd /CLIENT localhost /CMD NicCreate soeth0
vpncmd /CLIENT localhost /CMD AccountCreate ocn /SERVER:vpn.example.com:443 /HUB:Vpn /USERNAME:takuya@myCA /NICNAME:soeth0
vpncmd /CLIENT localhost /CMD AccountPasswordSet ocn /PASSWORD:*****  /TYPE:radius
vpncmd /CLIENT localhost /CMD AccountConnect ocn
udhcpc -i vpn_soeth0 -s /etc/config/custom/softether/dhcp.sh
vpncmd /CLIENT localhost /CMD AccountDisconnect ocn

DHCP割当をもらうときは、udhcpcを使って割当をもらう

DDNSの設定

DDNSの設定は、19.07 と 21.0 で構成が違うようです。

21.xへアップグレードしたあと、ddns設定が飛んでしまいました。

19→21のアップグレードは、ddns関連の罠が多いので注意する。

ddnsスクリプトは、それ自体が一覧としてopkgとは別管理になったみたい。

なので一旦設定を破棄して、インストールし直して、設定し直したたほうが良さそうです。

mv /etc/config/ddns /etc/config/ddns.my.conf
service ddns stop
opkg reinstall ddns-scripts luci-app-ddns    ddns-scripts-cloudflare
mv /etc/config/ddns.my.conf /etc/config/ddns 
vim /etc/config/ddns  # または luci から作り直し。

SSH

/root/.sshの鍵は sysupgrade.conf で指定しないと、消えます。

wrt の root でどこか他のサーバにsshしているなら注意。

chshの注意

インストール後、ashで起動します。

chshbash指定したままアップグレードすると、、bashが未インストール状態で起動します。

bashが見つからなくてログイン失敗します。Luci 入れてる場合はWebからインストールが可能なので復旧できる。

Luci 入れてない場合は、完全に詰み。諦めるしかない。シリアルコンソールを使ってブート時に何とかする。潔く諦める。

luci-proto 関連

luci-proto をopkgでインストールしたWRTで、設定を保持ししてアップグレードすると、エラーになる。

初期起動時にluci-protoが見つからなくて、WEBからネットワークの状態が見られない。

wrt自体は起動するので、大至急 opkg restoreで luci-protoを戻すこと。

hotplug 関連

hotplug関連であれこれしてるときは、設定が誤作動の元になるのでいったんhotplugのカスタマイズを無効にする。

無効にしてからアップグレードするほうがトラブルが少なくていい

opkgの再インストールトラブル。

opkg の構成の復元は、saveを使う。

opkg list-installed でインストール済み一覧を作れるが、これをもとに作業すると、ミスを引き起こすので、opkg saveを使うこと。

適当に opkg list-installedの結果をcat list | xargs opkg re-installとかやると opkg がopkg 自体をアンインストして詰むので注意。

opkg で一部のパッケージはrestoreされないので手動でreinstallした。

opkg reinstall ip-full
opkg reinstall wget
opkg reinstall procps-ng-ps
opkg reinstall ddns-scripts luci-app-ddns   
opkg reinstall less

IPv6 NGNを使ってる場合

19.x から 21.x にアップグレードするとv6の機能が増えているので取り扱いには注意する。

ip -6 route 

のデフォルトルートが、構成が代わるので注意する。 busybox の ipip-full の ipで v6の表示が異なる。

また、DS-liteとか ip4ip6 をしているときは、NTTのGWまでの経路に注意すること。

参考資料