[technology][openwrt]OpenWrt 15.05を18.06にアップグレード(Extroot込)
自宅でProxyサーバーとして使用しているOpenWrtマシン(Buffalo BHR-4GRV,1GbE有線ルーター)のアップグレードを計画中です。
現在はOpenWrt Chaos Calmer 15.05.1なのですがこれを現時点で最新安定版の18.06.2にアップグレードしたい。
理由はこのProxyサーバーにTCP BBRを組み込んでProxy→Wi-Fi接続スマフォの下り通信パフォーマンス/安定性が上がるか試してみたいというものです。
TCP BBRはgoogleが開発したTCPの輻輳制御アルゴリズムでLinux Kernel 4.9に組み込み可能です。実は混雑時にはあまり改善しないとか、Fairnessに問題があるとかとも言われていますが、Wi-Fiの様にパケットドロップが多い場合は効果があるらしいので、それを試してみたいと。
現在Proxyサーバーとして使用している15.05のKernelは3.18.23なのでそのままでは使えません。
基本的には
https://downloads.openwrt.org/releases/
から使う機種に対応したupgrade用バイナリイメージ(ファイル名末尾がsquashfs-sysupgrade.binで終わるもの)をダウンロードしてきて、sysupgradeコマンドを叩くか、LuCIからファーム更新を実行すれば良いのですが、USBメモリを使ってrootファイルシステムを拡張している(Extroot)と、その部分にインストールされたパッケージ等が引き継がれないため、Extrootの再作成を含めた手順が必要なので、あまり纏まっているところがなく、複数の情報を見ながらProxyサーバーとは別のOpenWrtマシン(こちらもExtroot化済み)でリハーサルを実施しました。
以下、手順です。
- 各種バックアップ実行
- opkgでインストールしたパッケージリストを取得
ググるといくつか方法が出てくるのですが、一番簡単そうな下記の方法でリストを作りました。
アップグレードをExtroot再作成後に、リスト見ながら必要なパッケージを再インストールするためのメモになります。opkg list-installed | cut -f 1 -d ' ' > /root/installed_packages.txt
- /etc配下のバックアップ
LuCIからアップグレードする場合、一応/etc配下の設定ファイルは維持したままアップグレード出来るのですが(ただし、Extrootはアンマウントされる)、念の為、基本的な設定ファイルをtar ballに固めておきます。自分は/etc/config,/etc/init.d配下と、Proxyサーバーとして使用しているPrivoxyのフィルター設定が入った/etc/privoxyをそれぞれ別のtar ballにしました。
- opkgでインストールしたパッケージリストを取得
- LuCIからアップグレード実施
LuCI(Web設定UI)にログインし、「System」→「Backup/Flash Firmware」画面からアップグレード実行画面に入ります。ダウンロードしておいたxxxx-squashfs-sysupgrade.bin(xxxxは機種依存のファイル名)をImageとして指定、「Keep settings:」にチェックを入れてから、「Flash image」ボタンをクリック。これだけでファームウェア更新が始まります。後は、再起動するまでしばらく待ちます。
- 再起動したOpenWrtマシンに再ログインする
成功していればIPアドレスやssh有効化設定、rootパスワード等の設定は引き継がれているので、アップグレード前と同じ手順でログイン出来るはずです。ここではsshでログインし、CLIで作業を進めます。
- 一応/etc配下の状態を確認する
自分が試した結果では/etc/configや/etc/init.d配下はそのまま残っていました。Privoxy用フィルタ設定が格納されている/etc/privoxyも保全されていました。
- opkgでインストール済みパッケージを確認する
こちらはデフォルトのインストール済みパッケージのみに戻っており、追加でインストールされていたパッケージは消失しています。
- Extroot化に必要なパッケージをインストールする
# opkg update # opkg install block-mount kmod-fs-ext4 kmod-usb-storage e2fsprogs kmod-usb-ohci kmod-usb-uhci fdisk
- USBメモリ上にExt4ファイルシステムを再作成する
下記の様にmkfsコマンドでファイルシステムを作成します。下記の例では/dev/sda1にしていますが、USBメモリのデバイスファイル名は事前に確認しておいて下さい。# mkfs.ext4 /dev/sda1 mke2fs 1.44.1 (24-Mar-2018) /dev/sda1 contains a ext4 file system last mounted on /tmp/extroot/overlay on Tue May 14 14:39:39 2019 Proceed anyway? (y,N) y Creating filesystem with 1954560 4k blocks and 488640 inodes Filesystem UUID: f3349314-b97a-4705-812d-f7932b142390 Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632 Allocating group tables: done Writing inode tables: done Creating journal (16384 blocks): done Writing superblocks and filesystem accounting information: done
- USBメモリ上のExt4ファイルシステムに、rootファイルシステムの中身をコピーする
# mount /dev/sda1 /mnt ; tar -C /overlay -cvf - . | tar -C /mnt -xf - ; umount /mnt
- /etc/config/fstabを作成する
次の手順で作成します。
- 下記のコマンドを実行
# block detect > /etc/config/fstab
- /etc/config/fstabファイルを編集
修正前:config 'global' option anon_swap '0' option anon_mount '0' option auto_swap '1' option auto_mount '1' option delay_root '5' option check_fs '0' config 'mount' option target '/mnt/sda1' option uuid 'f3349314-b97a-4705-812d-f7932b142390' option enabled '0'
修正後:
config 'global' option anon_swap '0' option anon_mount '0' option auto_swap '1' option auto_mount '1' option delay_root '5' option check_fs '0' config 'mount' option target '/overlay' option uuid 'f3349314-b97a-4705-812d-f7932b142390' option enabled '1'
config 'mount'セクションのtargetを'/overlay'に変更、同じセクションのenabledを'1'に変更します。
- 下記のコマンドを実行
- rebootコマンドでreboot実行、再起動を待ちます。
- reboot後、再ログイン、dfコマンドでrootfs及びoverlayfsのパーティションサイズが/dev/sda1と同じになっており容量が拡張されている事を確認します。
# df Filesystem 1K-blocks Used Available Use% Mounted on rootfs 15260592 83316 14379020 1% / /dev/root 2304 2304 0 100% /rom tmpfs 30532 3236 27296 11% /tmp /dev/sda1 15260592 83316 14379020 1% /overlay overlayfs:/overlay 15260592 83316 14379020 1% / tmpfs 512 0 512 0% /dev
- 必要なパッケージを再インストール
インストール後、必要な設定を行って下さい。Privoxyはアップグレード前のフィルター設定がそのまま残っていたので,opkgでインストール後にサービスの有効・無効の再設定するのみでした。
意外とトラブル事も無く、簡単にアップグレード出来ました。
opkg listで見るとkmod-tcp-bbrというBBRモジュールが追加されており、これもopkgでインストールしました。
まだTCP BBRのテストはしていません。
一度、このリハーサル機でTCP BBRのテストまでしてから本運用マシンのアップグレードをしたいと思います。