📚

OpenWrt+OCNバーチャルコネクトでIPv6接続する(その4:インストール)

2021/04/19に公開

はじめに

前回、届いたPC Engines apu2の開封で終わってしまったが、今回はこれにOpenWrtをインストールしてく。オンラインでインストールする方がいろいろと楽な気がするがあえてのオフラインインストールをやってみる。ついでにファームウェアも最新化しておく。

英語サイトだが画面入りで詳しく書かれたこちらのサイトを参考にした。
https://teklager.se/en/knowledge-base/openwrt-installation-instructions/

インストール

素のapu2には、映像端子がついてないので、シリアルケーブルを接続してインストールする必要がある。いったんネットワークに繋がってしまえばWebインタフェースやらsshやらで設定が可能だが、ネットワークに繋がるまではこうやる他ない。

USBシリアルドライバ

本家から購入したUSBシリアルケーブルは、Sillicon LabsのUSBシリアルケーブルで、下記サイトにドライバがある。「Download」のタブから自身のOS向けのドライバをインストールしてほしい。
https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers

適切にインストールされ、接続したあとに本体の電源を投入するとファームが起動し文字が出てくるはずである。

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でやっていく。

https://cdimage.debian.org/debian-cd/current-live/amd64/iso-hybrid/
からdebian-live-10.9.0-amd64-standard.iso
というファイルをダウンロードしてUSBメモリに焼く。焼く方法はWindowsならrufus、MacならEtcher、Linuxならddコマンドなどを使うがご自由に。

ファームとOpenWrtをUSBメモリにコピー

先ほど焼いたUSBからLinuxを起動するが、オフラインインストールなので必要なファイルはここでコピーしておく。先ほどのisoで作ったブータブルUSBのパーティションは書き込み禁止になっているので、別途パーティションを作るか、別の書き込み可能なUSBメモリを使うと良い。自分は別パーティションに必要なファイルをコピーして進めた。

最新ファーム

最新のファームウェアは
https://pcengines.github.io/
にある。最新のファームをダウンロードしてください。自分の執筆時はv4.13.0.4が最新だったため、
https://3mdeb.com/open-source-firmware/pcengines/apu2/apu2_v4.13.0.4.rom
をダウンロードした。

flashrom

先ほどのファームを書き込むにはflashromパッケージが必要。
https://debian.pkgs.org/10/debian-main-amd64/flashrom_1.0-1_amd64.deb.html

依存するライブラリがあるのだが、オフラインインストールのため、下記ライブラリの.debパッケージもダウンロードしてコピーしておく必要がある。
libftdi1-2
libusb-0.1-4
libusb-1.0-0

parted

最後にパーティションサイズをドライブの最大サイズに変更する必要があるのだが、それには以下のパッケージを使う。
https://debian.pkgs.org/10/debian-main-amd64/parted_3.2-25_amd64.deb.html

こちらも下記ライブラリが必要なので、こちらもダウンロードしておく。
libparted2

OpenWrt

肝心なOpenWrtもダウンロードする。

以下のサイトに最新版がある。自分はapu2に合わせたイメージを自作したが、自作する方法は別エントリで書く予定
https://downloads.openwrt.org/releases/

https://downloads.openwrt.org/releases/19.07.7/targets/x86/64/openwrt-19.07.7-x86-64-combined-ext4.img.gz
をダウンロードした。

インストール

ここからいよいよインストールを始める。ここまでくればもうゴールは見えているようなものだ。上記で作成したブータブル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