OpenWrt+OCNバーチャルコネクトでIPv6接続する(その4:インストール)
はじめに
前回、届いたPC Engines apu2の開封で終わってしまったが、今回はこれにOpenWrtをインストールしてく。オンラインでインストールする方がいろいろと楽な気がするがあえてのオフラインインストールをやってみる。ついでにファームウェアも最新化しておく。
英語サイトだが画面入りで詳しく書かれたこちらのサイトを参考にした。
インストール
素のapu2には、映像端子がついてないので、シリアルケーブルを接続してインストールする必要がある。いったんネットワークに繋がってしまえばWebインタフェースやらsshやらで設定が可能だが、ネットワークに繋がるまではこうやる他ない。
USBシリアルドライバ
本家から購入したUSBシリアルケーブルは、Sillicon LabsのUSBシリアルケーブルで、下記サイトにドライバがある。「Download」のタブから自身のOS向けのドライバをインストールしてほしい。
適切にインストールされ、接続したあとに本体の電源を投入するとファームが起動し文字が出てくるはずである。
Mac
Macの場合は(Linuxもなのかな)、/dev/tty.SLAB_USBtoUARTというデバイスができているはずなので、screenコマンドなどからつなげる。
$ ls -la /dev/tty.SLAB_USBtoUART
crw-rw-rw- 1 root wheel 20, 20 3 24 21:39 /dev/tty.SLAB_USBtoUART
$ screen /dev/tty.SLAB_USBtoUART 115200
Windows
Windowsの場合は、「Silicon Labs CP210x USB to UART Bridge(COM3)」のようなデバイス(COMの後の数字は環境で変わる)ができていると思うので、Teratermやらなどでつなげる。余談ですが自分のお気に入りはMobaXtermです。
USBブートのLinux
ファームウェアアップデートや最初のインストールには、USBブートするLinuxから行う。ディストリビューションはなんでもいいと思うが、Debianでやっていく。
debian-live-10.9.0-amd64-standard.iso
というファイルをダウンロードしてUSBメモリに焼く。焼く方法はWindowsならrufus、MacならEtcher、Linuxならddコマンドなどを使うがご自由に。
ファームとOpenWrtをUSBメモリにコピー
先ほど焼いたUSBからLinuxを起動するが、オフラインインストールなので必要なファイルはここでコピーしておく。先ほどのisoで作ったブータブルUSBのパーティションは書き込み禁止になっているので、別途パーティションを作るか、別の書き込み可能なUSBメモリを使うと良い。自分は別パーティションに必要なファイルをコピーして進めた。
最新ファーム
最新のファームウェアは
にある。最新のファームをダウンロードしてください。自分の執筆時はv4.13.0.4が最新だったため、 をダウンロードした。flashrom
先ほどのファームを書き込むにはflashromパッケージが必要。
依存するライブラリがあるのだが、オフラインインストールのため、下記ライブラリの.debパッケージもダウンロードしてコピーしておく必要がある。
libftdi1-2
libusb-0.1-4
libusb-1.0-0
parted
最後にパーティションサイズをドライブの最大サイズに変更する必要があるのだが、それには以下のパッケージを使う。
こちらも下記ライブラリが必要なので、こちらもダウンロードしておく。
libparted2
OpenWrt
肝心なOpenWrtもダウンロードする。
以下のサイトに最新版がある。自分はapu2に合わせたイメージを自作したが、自作する方法は別エントリで書く予定
をダウンロードした。
インストール
ここからいよいよインストールを始める。ここまでくればもうゴールは見えているようなものだ。上記で作成したブータブルUSBを本体に挿して電源を投入する。
Debianの起動画面がでてくると思うので、ここで「TAB」キー押下。
入力待ちになるので「console=ttyS0,115200n8」と入力してEnter。
しばらくするとログインプロンプトが出てくると思うので、下記ユーザとパスワードでログインする。そして次以降の作業のためにrootになっておく。
user: user
pass: live
$ sudo su
ファームアップデート
ファイルをコピーしたパーティションをマウントしておく。マウントしたディレクトリに移動して、必要なパッケージをインストールしたのち、ファームをアップデートする。
# apt install ./flashrom_1.0-1_amd64.deb ./libftdi1-2_1.4-1+b2_amd64.deb ./libusb-0.1-4_0.1.12-32_amd64.deb ./libusb-1.0-0_1.0.22-2_amd64.deb
# flashrom -w ./apu2_v4.13.0.4.rom -p internal:boardmismatch=force
flashrom on Linux 4.19.0-14-amd64 (x86_64)
flashrom is free software, get the source code at https://flashrom.org
Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).
coreboot table found at 0x77fae000.
Found chipset "AMD FCH".
Enabling flash write... OK.
Found Winbond flash chip "W25Q64.V" (8192 kB, SPI) mapped at physical address 0x00000000ff800000.
This coreboot image (PC Engines:apu2) does not appear to
be correct for the detected mainboard (PC Engines:PCEngines apu2).
Proceeding anyway because user forced us to.
Reading old flash chip contents... done.
Erasing and writing flash chip... Erase/write done.
Verifying flash... VERIFIED.
念のため再起動。再度ログインしてrootになる。
OpenWrtインストール
SSDは/dev/sdaになっているはずなので、そこにインストールしていく。
# dd if=openwrt-19.07.7-x86-64-combined-ext4.img of=/dev/sda bs=1M status=progress
68+1 records in
68+1 records out
285736960 bytes (286 MB, 272 MiB) copied, 11.3303 s, 25.2 MB/s
サイズは公式イメージと少し違うかもしれない。
size
最後に、パーティションサイズを変更してトライブ全体を使えるようにする。
# apt install ./parted_3.2-25_amd64.deb ./libparted2_3.2-25_amd64.deb
# parted /dev/sda print
Model: ATA SATA SSD (scsi)
Disk /dev/sda: 30.0GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 262kB 17.0MB 16.8MB primary ext2 boot
2 17.3MB 286MB 268MB primary ext2
# parted /dev/sda resizepart 2 30G
Information: You may need to update /etc/fstab.
# resize2fs /dev/sda2
resize2fs 1.44.5 (15-Dec-2018)
Resizing the filesystem on /dev/sda2 to 7319994 (4k) blocks.
The filesystem on /dev/sda2 is now 7319994 (4k) blocks long.
もしfsckをやれと言われたらfsckもやっておく。
boot
まだネットワークにはつながってないはずなので、シリアルケーブルはそのままで。eth1とeth2のデフォルトのIPアドレスが「192.168.1.1」になっているようなので、ルータにつないだ場合は競合しないように気をつける。
BusyBox v1.30.1 () built-in shell (ash)
_______ ________ __
| |.-----.-----.-----.| | | |.----.| |_
| - || _ | -__| || | | || _|| _|
|_______|| __|_____|__|__||________||__| |____|
|__| W I R E L E S S F R E E D O M
-----------------------------------------------------
OpenWrt 19.07.7, r11306-c4a6851c72
-----------------------------------------------------
=== WARNING! =====================================
There is no root password defined on this device!
Use the "passwd" command to set up a new password
in order to prevent unauthorized SSH logins.
--------------------------------------------------
上記のような出力ならうまく動いてるはずです。おめでとうございます。
環境確認
一通り確認してみる。
uname -a
# uname -a
Linux OpenWrt 4.14.221 #0 SMP Mon Feb 15 15:22:37 2021 x86_64 GNU/Linux
ip a
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN qlen 1000
link/ether 00:0d:b9:xx:xx:xx brd ff:ff:ff:ff:ff:ff
3: eth1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq master br-lan state DOWN qlen 1000
link/ether 00:0d:b9:xx:xx:xx brd ff:ff:ff:ff:ff:ff
4: eth2: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq master br-lan state DOWN qlen 1000
link/ether 00:0d:b9:xx:xx:xx brd ff:ff:ff:ff:ff:ff
5: br-lan: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN qlen 1000
link/ether 00:0d:b9:xx:xx:xx brd ff:ff:ff:ff:ff:ff
inet 192.168.1.1/24 brd 192.168.1.255 scope global br-lan
valid_lft forever preferred_lft forever
inet6 fdd9:822f:9e88::1/60 scope global tentative
valid_lft forever preferred_lft forever
デフォルトではeth1とeth2がブリッジされていて、同じIPアドレスがふられている。
uci show network
# uci show network
network.loopback=interface
network.loopback.ifname='lo'
network.loopback.proto='static'
network.loopback.ipaddr='127.0.0.1'
network.loopback.netmask='255.0.0.0'
network.globals=globals
network.globals.ula_prefix='fdd9:822f:9e88::/48'
network.lan=interface
network.lan.type='bridge'
network.lan.ifname='eth1 eth2'
network.lan.proto='static'
network.lan.ipaddr='192.168.1.1'
network.lan.netmask='255.255.255.0'
network.lan.ip6assign='60'
network.wan=interface
network.wan.ifname='eth0'
network.wan.proto='dhcp'
network.wan6=interface
network.wan6.ifname='eth0'
network.wan6.proto='dhcpv6'
/etc/config/network
# cat /etc/config/network
config interface 'loopback'
option ifname 'lo'
option proto 'static'
option ipaddr '127.0.0.1'
option netmask '255.0.0.0'
config globals 'globals'
option ula_prefix 'fdd9:822f:9e88::/48'
config interface 'lan'
option type 'bridge'
option ifname 'eth1 eth2'
option proto 'static'
option ipaddr '192.168.1.1'
option netmask '255.255.255.0'
option ip6assign '60'
config interface 'wan'
option ifname 'eth0'
option proto 'dhcp'
config interface 'wan6'
option ifname 'eth0'
option proto 'dhcpv6'
まとめ
apu2にOpenWrtをオフラインインストールした。映像出力などなくてもそんなに難しくないですね。実際にしばらく使ってみると、メモリは70MB程度しか使わないし、SSDも1GB以下しか使ってないのでルータ用途としてはオーバースペックかもしれない。市販のルータと比較しても十分ですね。
さて、次回はいよいよOCNバーチャルコネクトを使ったIPoE環境を構築していきたい。
Discussion