Build Openwrt 18.06 on Arch Linux

2022-09-12

Openwrtの21.02でも4MB以内のイメージは作成できたが、4/32MBデバイスのサポートは、19.07が最後となっているため、18.06でコンパイル。https://openwrt.org/supported_devices/432_warning
https://openwrt.org/supported_devices/openwrt_on_432_devices

gccとg++のバージョンチェックでエラーとなるため、2020年12月1日バージョンにダウングレードしたArch Linuxを準備。

glibcは2.32.5から2.35-1に、ncursesは6.2-1から6.3-1アップグレード。
pacman -U https://archive.archlinux.org/packages/g/glibc/glibc-2.35-1-x86_64.pkg.tar.zst
pacman -U https://archive.archlinux.org/packages/n/ncurses/ncurses-6.3.1-x86_64.pkg.tar.zst

python2などの必要なパッケージを追加する。
pacman -S python2 unzip rsync

openwrt v21.02.3をを参考に下記を変更する。
m4はglibcのアップグレードとコンフリクトするので、m4のコンパイルでエラーが起こる。
c-stack.c:55:26: error: missing binary operator
glibc-2.34からSIGSTKSZが定数でなくなったことが原因なので、m4をアップデートする。
./tools/m4/Makefileをm4-1.4.18からm4-1.4.19に置き換える。patchesのディレクトリは多分不要なので削除する。
perlもgcc v10でエラーになるので、./feeds/packages/lang/perlを5.28.0から5.28.1に入れ替える。
perl/patchesにg㏄-10用のパッチが含まれている。

IO DATA WN-G300DGR用にdtsを追加し、その他を編集する。
./target/linux/ramips/dts/rt3052_iodata_wn-g300dgr.dts
./target/linux/ramips/image/rt305x.mk
./target/linux/ramips/base-files/etc/board.d/02_network
./target/linux/ramips/base-files/etc/board.d/01_leds
./target/linux/ramips/base-files/lib/ramips.sh

初期設定を編集する。
./package/kernel/mac80211/files/lib/wifi/mac80211.sh
; wireless encryption, sae is not supported until 19.07
./package/base-files/files/bin/config_generate

make menuconfig
Global build settings, Enable IPv6 off
Base system, opkg off
Language, Lua, libiwinfo-lua on
LuCI, Modules, luci-mod-admin-full on
LuCI, Applications, luci-app-firewall on
LuCI, Themes, luci-theme-bootstrap on
Network, Firewall, iptables on
Network, Web Servers/Proxies, uhttpd on uhttpd-mod-ubus on
Network, ppp off, odhcpd off

下記を参考にfirmwareをコンパクトにするが、カーネルプリントは残した。
Global build settings / Kernel build options / Enable support for printk on
Global build settings / Kernel build options / Enable printk timestamps on
squashfsのブロックサイズは1024に設定した。
https://openwrt.org/docs/guide-user/additional-software/saving_space

openwrt-ramips-rt305x-wn-g300dgr-initramfs-kernel.bin(3,377,851)は、コンソールからTFTPで送り込む際に使用する。
openwrt-ramips-rt305x-wn-g300dgr-squashfs-sysupgrade.bin(3,408,054)は、WebUIからのsysupgradeに使用する。
cat /proc/mtd
mtd0: 00030000 00010000 “u-boot"
mtd1: 00010000 00010000 “u-boot-env"
mtd2: 00010000 00010000 “factory"
mtd3: 003b0000 00010000 “firmware"
mtd4: 0011b8b1 00010000 “kernel"
mtd5: 0029474f 00010000 “rootfs"
mtd6: 00070000 00010000 “rootfs_data"

LuCI接続もssh接続もLAN側からのみだが、Firewall, Traffic RulesでWAN側ポート(22, 80)を開けばWAN側からもせつぞくできる。

/etc/config/networkを編集して不要なswitch(rt305x)を削除する。