GL-iNet GL-AR750S を自宅に導入して数ヶ月、設定も出来上がり、安定期に入りました。せっかくここまで仕上げた設定を失いたくないので、cronで定期的に OpenWRT 設定の バックアップ を行えるよう、バッチを組んでみたいと思います。
OpenWRTのGUI、LuciではSystemからバックアップを生成ダウンロード出来る機能が用意されています。ダウンロードしたファイルを開いてみると、これはシステムの/etc以下の一部をtar.gzで固めたもので、基本的な設定はここを網羅しておけば良いことが分かりました。
さらにCLIベースのバックアップについては、OpenWRT公式で詳しく解説されています。
バックアップしたい箇所を増やしたければ、/etc/sysupgrade.confに追記すれば良いそうなので、早速以下を追加します。
1 2 |
/mnt/sda1/vnstat/ # vnstat DB /root/ # 各種バッチ格納場所 |
追加後、sysupgrade -l でバックアップ対象パスを確認しましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
root@GL-AR750S_A7:~# sysupgrade -l /etc/collectd.conf /etc/config/ddns /etc/config/dhcp /etc/config/dnscrypt-proxy /etc/config/dropbear /etc/config/etherwake /etc/config/firewall /etc/config/fstab /etc/config/gl_s2s /etc/config/glconfig /etc/config/glcrond /etc/config/glfw /etc/config/glmodem /etc/config/luci /etc/config/luci_statistics /etc/config/mwan3 /etc/config/network /etc/config/nodogsplash /etc/config/openvpn /etc/config/openvpn_recipes /etc/config/ovpnclients /etc/config/pptpd /etc/config/rpcd /etc/config/samba /etc/config/stubby /etc/config/system /etc/config/system1 /etc/config/tertf /etc/config/tor /etc/config/ubootenv /etc/config/ucitrack /etc/config/uhttpd /etc/config/vnstat /etc/config/vpn_service /etc/config/wireguard /etc/config/wireguard_server /etc/config/wireless /etc/crontabs/root /etc/dropbear/authorized_keys /etc/dropbear/dropbear_rsa_host_key /etc/firewall.user /etc/group /etc/hosts /etc/inittab /etc/lighttpd/lighttpd.conf /etc/luci-uploads/.placeholder /etc/luci-uploads/cbid.openvpn.tap_server.ca /etc/luci-uploads/cbid.openvpn.tap_server.cert /etc/luci-uploads/cbid.openvpn.tap_server.dh /etc/luci-uploads/cbid.openvpn.tap_server.key /etc/openvpn/cert/ca.crt /etc/openvpn/cert/ca.key /etc/openvpn/cert/ca.srl /etc/openvpn/cert/client.crt /etc/openvpn/cert/client.csr /etc/openvpn/cert/client.key /etc/openvpn/cert/dh1024.pem /etc/openvpn/cert/server.crt /etc/openvpn/cert/server.csr /etc/openvpn/cert/server.key /etc/openvpn/ovpn/client.ovpn /etc/openvpn/ovpn/server.ovpn /etc/openvpn/update-resolv-conf /etc/opkg/keys/1035ac73cc4e59e3 /etc/opkg/keys/5151f69420c3f508 /etc/opkg/keys/72a57f2191b211e0 /etc/opkg/keys/792d9d9b39f180dc /etc/opkg/keys/9ef4694208102c43 /etc/opkg/keys/9f9024096bd6e280 /etc/opkg/keys/b26f36ae0f4106d /etc/opkg/keys/b5043e70f9a75cde /etc/opkg/keys/c10b9afab19ee428 /etc/opkg/keys/dace9d4df16896bf /etc/opkg/keys/dd6de0d06bbd3d85 /etc/passwd /etc/ppp/chap-secrets /etc/ppp/options.pptpd /etc/profile /etc/rc.local /etc/samba/smb.conf.template /etc/samba/smbpasswd /etc/shadow /etc/shells /etc/sysctl.conf /etc/sysupgrade.conf /etc/tertf/tertfinfo_bak /etc/tor/torrc /etc/vnstat.conf /mnt/sda1/vnstat/db/.br-lan /mnt/sda1/vnstat/db/.eth0.2 /mnt/sda1/vnstat/db/.tap2 /mnt/sda1/vnstat/db/.wlan0 /mnt/sda1/vnstat/db/.wlan1 /mnt/sda1/vnstat/db/br-lan /mnt/sda1/vnstat/db/eth0.2 /mnt/sda1/vnstat/db/tap2 /mnt/sda1/vnstat/db/wlan0 /mnt/sda1/vnstat/db/wlan1 /root/.rnd /root/Adafruit_Python_BME280/Adafruit_BME280.py /root/Adafruit_Python_BME280/Adafruit_BME280_Example.py /root/Adafruit_Python_BME280/Adafruit_BME280_Example_Curses.py /root/Adafruit_Python_BME280/LICENSE /root/Adafruit_Python_BME280/README.md /root/Adafruit_Python_BME280/setup.py /root/Adafruit_Python_GPIO/Adafruit_GPIO/FT232H.py /root/Adafruit_Python_GPIO/Adafruit_GPIO/GPIO.py /root/Adafruit_Python_GPIO/Adafruit_GPIO/I2C.py /root/Adafruit_Python_GPIO/Adafruit_GPIO/MCP230xx.py /root/Adafruit_Python_GPIO/Adafruit_GPIO/PCA95xx.py /root/Adafruit_Python_GPIO/Adafruit_GPIO/PCF8574.py /root/Adafruit_Python_GPIO/Adafruit_GPIO/PWM.py /root/Adafruit_Python_GPIO/Adafruit_GPIO/Platform.py /root/Adafruit_Python_GPIO/Adafruit_GPIO/SPI.py /root/Adafruit_Python_GPIO/Adafruit_GPIO/__init__.py /root/Adafruit_Python_GPIO/LICENSE /root/Adafruit_Python_GPIO/README.md /root/Adafruit_Python_GPIO/ez_setup.py /root/Adafruit_Python_GPIO/setup.py /root/Adafruit_Python_GPIO/tests/MockGPIO.py /root/Adafruit_Python_GPIO/tests/__init__.py /root/Adafruit_Python_GPIO/tests/test_GPIO.py /root/Adafruit_Python_GPIO/tests/test_I2C.py /root/Adafruit_Python_GPIO/tests/test_PWM.py /root/Adafruit_Python_GPIO/tests/test_Platform.py /root/Adafruit_Python_GPIO/tests/test_SPI.py /root/gli_usbpow.sh /root/privkey /root/pubkey /root/sensors_upload.py /root/vnstat_email_glinet.py |
バックアップ先は以前、追加したSDカードストレージに作ったbakcupフォルダとし、早速バックアップ実行してみます。
1 2 3 4 5 6 |
root@GL-AR750S_A7:# sysupgrade -b /mnt/sda1/backup/${HOSTNAME}/${HOSTNAME}_$(date +%F).tar.gz Saving config files... root@GL-AR750S_A7:# ls -la /mnt/sda1/backup/GL-AR750S_A7 drwxr-xr-x 2 root root 4096 Jun 13 15:57 . drwxr-xr-x 3 root root 4096 Jun 13 15:17 .. -rw-r--r-- 1 root root 73817 Jun 13 15:57 GL-AR750S_A7_2020-06-13.tar.gz |
これをcronに追加しておけばOK。毎日設定をいじるものでもないので、週一のバックアップで十分でしょう。
1 2 3 |
root@GL-AR750S_A7# crontab -e 57 06 * * * python /root/vnstat_email_glinet.py >/dev/null 2>&1 43 03 * * 3 sysupgrade -b /mnt/sda1/backup/${HOSTNAME}/${HOSTNAME}_$(date +%F).tar.gz >/dev/null 2>&1 |
実は自宅にはもう一台、GL-AR750Sが別の部屋にAPとして稼働しています。こちらもほぼ設定は同じで、SDカードもマウントしています。せっかくなので、この2つのデバイスのSDカードストレージにあるbackupフォルダをrsync+sshで同期させ、互いのバックアップファイルを持ち合うようにしてみます。
OpenWRT機器へのssh公開鍵接続の方法は、これもOpenWRT公式に詳しく述べられています。
ただ今回は、sshクライアント側もOpenWRTなので、ssh-keygenをOpenWRT上で実行して鍵を生成する必要があります。opkgでインストールしましょう。
(デフォルトのsshクライアントはopenssh-clientではないので、keygenだけではなく、クライアントも入れます。一応、インストール後再起動推奨)
1 2 3 |
opkg install openssh-keygen opkg install openssh-client opkg install rsync |
鍵ペアさえ出来てしまえば、あとは上述のOpenWRT公式の通り、互いの公開鍵を互いのdropbearのauthorized_keysに登録するだけです。rsyncを動かす前にsshで互いにパスワードプロンプト無しでもログイン出来ることを確認しておきます。問題無ければ、rsyncを以下の通り実行します。
1 2 |
# [RTR] GL-AR750S_A7 --> GL-AR750S_E4 [AP] root@GL-AR750S_A7:~# rsync -avzz --delete -e ssh /mnt/sda1/backup/GL-AR750S_A7/ root@@GL-AR750S_E4:/mnt/sda1/backup/GL-AR750S_A7 |
未だに元・先パスの末尾のスラッシュを理解していないのでよく間違えるのですが、元がスラッシュ、先はスラッシュ無し。逆にAP側からAPのバックアップファイルを同期してみます。
1 2 |
# [RTR] GL-AR750S_A7 <-- GL-AR750S_E4 [AP] root@GL-AR750S_E4:~# rsync -avzz --delete -e ssh /mnt/sda1/backup/GL-AR750S_E4/ root@GL-AR750S_A7:/mnt/sda1/backup/GL-AR750S_E4 |
ちなみに、rsyncのオプションをいつも通りに「-avz」としていたところ、次のようなメッセージを目にしたので、「-avzz」としました。
1 2 |
This rsync lacks old-style --compress due to its external zlib. Try -zz. Continuing without compression. |
ひとまずこの部分を先ほど、cronに登録したバックアップタスクに連結追加して、しばらく運用しようと思います。