最近因为移动送的路由器居然带了vlan transparent功能，不再需要爱快拨号了，于是打算节约点电停了hyperv，重新启用N1盒子。看了下，已经有大神非常成熟的armbian方案了，不再需要像以前那样烧录和更换文件等等。下载 https://github.com/ophub/amlogic-s9xxx-armbian 选择amlogic_s905d_bullseye_6.1.59_server。利用 balenaEtcher-Portable-1.18.11 将镜像烧录到u盘，期间多次尝试用移动硬盘启动，都失败（机械硬盘和SSD）。插到靠近HDMI边上的usb口通电启动。新版启动时自动将u盘扩容了 256G都利用上了，不再需要armbian-tf进行扩容。更新最新脚本armbian-sync 。换源国内。armbian-software 进行设置和安装，看了下清单，没有OMV，但是居然有PVE，直接选择输入编号，安装看看吧。毕竟pve的lxc和vm管理还是很方便的。装完看了下内存过半了，很夸张，于是减少服务，启用IPV6。systemctl stop pve-ha-lrm.service systemctl stop pve-ha-crm.service systemctl disable pve-ha-lrm.service systemctl disable pve-ha-crm.service systemctl disable pve-firewall.service systemctl stop pve-firewall.service systemctl stop pvescheduler.service systemctl disable pvescheduler.service systemctl stop spiceproxy.service systemctl disable spiceproxy.service # 启用ipv6 # 将下列配置加入/etc/sysctl.conf net.ipv6.conf.all.forwarding=1 net.ipv6.conf.all.accept_ra=2 net.ipv6.conf.default.accept_ra=2 net.ipv6.conf.vmbr0.accept_ra=2 net.ipv6.conf.all.autoconf=1 net.ipv6.conf.default.autoconf=1 net.ipv6.conf.vmbr0.autoconf=1 sysctl -p设置dynv6，开机运行和cron防止失联。添加.ssh\authorized_keys 方便登录。安装tailscale大内网，设置子网路由， 安装adguardhome并停用系统自带的解析。学这个禁用log服务似乎能改善u盘寿命。默认是amd64的lxc模板，可以去此处下载arm64 lxc模板，比如alpine，放入/var/lib/vz/template/cache/。利用命令tailscale cert domain的证书crt和key，上传到pve的certificates，方便登录和记住密码。同时也可以用于adguardhome，不过都是大内网使用。这功耗价格市面上仍是最佳。PVE如有问题可以参看issues和下图选择
之前在N1下armbian中用docker实现了openwrt，为什么要折腾LXC容器的openwrt：ipv6的支持问题，docker这点支持度不高，lxc能更好适应ipv6 only的vps和移动较低的ipv6丢包。LXC容器的隔离性以及挂载备份都更方便，无非config修订和文件夹打包。操作在N1 ubuntu实现，理论debian一样，x86的机器一般直接利用PVE虚拟机里的LXC，不用以下手工，N1没有。另外方法也可以同时建立其他容器，方便调试，rootfs路径自由也可以避免N1 emmc空间小的问题。除了openwrt，我也测试lxc了ubuntu和debian：安装软件apt install lxc bridge-utilshost主机网桥设置将eth0单网口设置为网桥，lxc自带的lxcbr0内部网桥 10.0.3.1，无法实现旁路网关将原有网卡/etc/network/interfaces固定地址注释，改为br0。#iface eth0 inet static #address 192.168.0.251 #netmask 255.255.255.0 #gateway 192.168.0.1 #dns-nameservers 1.1.1.1 8.8.8.8 auto br0 iface br0 inet static address 192.168.0.251 netmask 255.255.255.0 gateway 192.168.0.1 bridge_ports eth0 bridge_stp off bridge_maxwait 5 dns-nameservers 1.1.1.1 8.8.8.8重启网卡/etc/init.d/networking restart配置文件准备在lxc默认文件夹/var/lib/lxc/下新建openwrt文件夹（也可以建在别处，但注意config中lxc.rootfs.path）,然后建立config文件和rootfs文件夹。编辑/var/lib/lxc/openwrt/config，复制以下内容，按需注释。lxc.include = /etc/lxc/default.conf lxc.include = /usr/share/lxc/config/common.conf lxc.include = /usr/share/lxc/config/userns.conf lxc.arch = armvirt lxc.uts.name = openwrt lxc.start.auto = 1 lxc.start.delay = 1 lxc.rootfs.path = /var/lib/lxc/openwrt/rootfs lxc.mount.auto = proc:mixed sys:ro cgroup:mixed # lan interface lxc.net.0.link = br0 # lxc.cgroup.memory.limit_in_bytes = 512M # lxc.cgroup.cpuset.cpus = "0,1" # 挂载host的文件夹 # lxc.mount.entry = /mnt/usb mnt/usb none rw,bind,create=dir 0 0 # vpn tun启用 lxc.mount.entry = /dev/net/tun dev/net/tun none rw,bind,create=file 0 0镜像固件将下载的rootfs.tar.gz解压至rootfs文件夹tar zxvf rootfs.tar.gz -C /var/lib/lxc/openwrt/rootfs/各版本x64或arm64的openwrt rootfs可在网上下载或云编译，如果有的作者只提供img文件，如xxx-squashfs-rootfs.img.gz，则需要 apt install squashfs-tools工具解压教程。也可以用我云编译0416版本进行测试，一个只有bp和adguard的 https://molezz.lanzouj.com/iFTvD03g1dba 密码:6sf6。 之后发现bp不支持v6，换回pw+adg的组合： https://molezz.lanzouj.com/ipvs804081ed至此，config文件和rootfs文件夹完成， 日常可直接备份文件夹（先stop或者freeze容器）启动容器lxc-start openwrt，lxc-attach openwrt进入容器修改密码和ip等，生效后即可登录网页版。一般命令# 查看网桥信息，veth的既lxc容器的，eth0是物理卡 root@N1:~# brctl show br0 eth0 vethQby# 重启容器 root@N1:~# lxc-stop openwrt && lxc-start openwrt # 冻结容器，解冻容器，可用于文件夹打包时或脚本 lxc-freeze openwrt lxc-unfreeze openwrt # 容器信息 root@N1:~# lxc-info openwrt Name: openwrt State: RUNNING PID: 4910 IP: 192.168.0.251 IP: 2401:8a1e:6a65:321::a CPU use: 191.45 seconds BlkIO use: 700.00 KiB Memory use: 126.52 MiB KMem use: 4.74 MiB Link: vethQby TX bytes: 11.01 MiB RX bytes: 16.82 MiB Total bytes: 27.84 MiB同样也可以安装各种其他lxc容器，如debian，centos等rootfs镜像官方： https://uk.lxd.images.canonical.com/images/高阶用法snapsot，config可参考官网和以下参考链接https://www.how2shout.com/how-to/how-to-install-and-use-lxc-linux-containers-on-ubuntu.htmlhttps://yunfwe.cn/2019/09/23/2019/LXC%20Linux%E7%B3%BB%E7%BB%9F%E5%AE%B9%E5%99%A8/
先用openwrt试了下，用的云编译版本，没有问题，用root下的脚本刷入eMMC也一次成功。如果没从U盘启动，android盒子下可以安装LibreELEC 后启动一次，需要root权限。但是现在pve下有了一个x86的openwrt，所以还是刷成armbian功能更丰富些。在 https://users.armbian.com/balbes150/arm-64/ 或 https://disk.yandex.ru/d/_rQgn_FosYuW0g/20.10/20201014 下载合适的5.9版本，解压后得到img格式文件，如Armbian_20.10_Arm-64_focal_current_5.9.0.img，显示5G大小不到。利用usb写盘工具烧录到U盘，如 USB Image Tool 或balenaEtcher-Portable。boot盘符中修改2个地方，根目录中u-boot-s905x-s912文件名改成u-boot.ext。 编辑器/extlinux/extlinux.conf全部删除后粘贴如下：LABEL Armbian LINUX /zImage INITRD /uInitrd FDT /dtb/amlogic/meson-gxl-s905d-phicomm-n1.dtb APPEND root=LABEL=ROOTFS rootflags=data=writeback rw console=ttyAML0,115200n8 console=tty0 no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0由于高负载问题，按照这个帖子 修改了原始的dtb文件，当中会出现warning字样报错，不影响修改。dtb文件的修改也可以在写入eMMC后完成，这样万一有问题还可以利用U盘重置或挽救。反编译文件dtc -I dtb -O dts -o n1.dts /boot/dtb/amlogic/meson-gxl-s905d-phicomm-n1.dtb注释掉 interrupt-controller@9880块中的phandle = < 0x21 >; interrupt-controller@9880 { compatible = "amlogic,meson-gpio-intc\0amlogic,meson-gxl-gpio-intc"; reg = < 0x00 0x9880 0x00 0x10 >; interrupt-controller; #interrupt-cells = < 0x02 >; amlogic,channel-interrupts = < 0x40 0x41 0x42 0x43 0x44 0x45 0x46 0x47 >; status = "okay"; # phandle = < 0x21 >; #// 这行引起高负载 };插入U盘再插电源启动后，1秒按一下回车，显示器无信号后，黑屏模式下盲输run usb_boot后回车（这里一开始不了解，以为u盘问题，换了两个发现都一样，并不会出现别的帖子说的显示器有提示）。一串绿色ok启动后会创建密码和时区等。最后通过root目录下的install-aml.sh写入eMMC。常用命令查看温度：cat /sys/class/hwmon/hwmon0/temp1_input 系统设置，wifi蓝牙等 armbian-config docker openwrt详见： https://github.com/molezz/openwrt_cloud2022.02.09 云编译N1的固件，利用rootfs文件import docker精简使用，仅hello，pw，nps等，N1为armbian系统。https://molezz.lanzouj.com/inHzezugy0f 密码:2ggk