Armbian_N1_笔记
转载注明来源: 本文链接 来自osnosn的博客,写于 2020-11-17, 更新于 2023-08.
一些笔记/备忘,关于N1(S905d)
- Debian-10 防火墙内核是 nft。默认是通过 iptables/ip6tables 命令转换的。
- armbian 默认开了 restore-iptables。所以关了它,改用nftables。
systemctl disable armbian-restore-iptables,
apt install nftables; systemctl enable nftables; nft -f /etc/nftables.conf
apt upgrade 之后,文件系统错误
- 发现文件系统错误。重启之后。
- 如果直接
fsck -y /dev/mmcblk1p2提示/dev/mmcblk1p2 is mounted.说明还是 mount 在 rw 模式。 - 执行
find / -ls > /tmp/xxxx.log让它触发错误,自动 remount 为 ro 模式。就可以 fsck 了。
- 如果直接
cd /tmp这个目录是挂载在内存的,速度很快,
find / -ls > /tmp/xxxx.log或find / -ls > /dev/null触发文件系统错误。(如果有错误的话)- 出现文件系统错误后,
/dev/mmcblk1p2挂载的所有点,都会变成 ro (只读)。
乘此机会,fsck /dev/mmcblk1p2,检查出的错误,全部用y回答。 - 然后
reboot整个系统,即可。
interfaces 中配置了 dhcp , resolv.conf (DNS) 不更新
- 执行
resolvconf -u会给出警告,Warning: /etc/resolv.conf is not a symbolic link to /run/resolvconf/resolv.conf
原因是 /etc/resolv.conf 被 NetworkManager 接管了。
改网卡由 NetworkManager 管理,取消 /etc/network/interfaces 中的配置。 - NetworkManager 比 interfaces 好用多了。可以用 nmtui 管理网卡。
参考【Linux_ipv6_无状态_设置为_eui64_有状态ipv6更改后缀】 - 如果发现
/etc/resolv.conf没有更新,看man NetworkManager.conf中,关于rc-manager的说明。
修改/etc/NetworkManager/NetworkManager.conf中 main 部分,rc-manager=file。
chrony is masked 无法启动
systemctl unmask chrony取消 mask,就正常了。/etc/chrony/chrony.conf最后一行加入allow all就能作为对时服务器,为内网其他机器对时。
检查一下系统文件的 owner 是否正确,应该是 root
- 如果不是,就全部改成root。即,把用户id 1234 改为 id 0。
find / -uid 1234 -exec chown -h 0 {} \;
find / -gid 1234 -exec chgrp -h 0 {} \;
eth0 上添加一个ip (单网口,多IP)
- 此系统的网口是由
NetworkManager管理的。 - 临时:
- 添加,
ip addr add 192.168.1.100/24 dev eth0 - 删除,
ip addr del 192.168.1.100/24 dev eth0
- 添加,
- 永久:
nmtui编辑 eth0 网口,在ipv4部分,
保持IPv4 CONFIGURATION <Automatic>,
在Addresses <Add...>添加一个IP(包括掩码)。如192.168.1.100/24
reboot 后生效。 (仅 restart NetworkManager 好像不行。)
远程 ssh 升级 Debian
- 大版本升级, 建议用一个可靠的机器作为跳板,套上 tmux 或 screen,然后连接目标 N1,再次套上 tmux, 再执行大版本的升级操作。
因为大版本升级,会更新关键库文件。在 sshd 升级完成前,无法再次通过ssh连接机器。新启动的 sshd 进程因为库不兼容会闪退。
已经连接的 ssh 不会主动断开。
升级完成前,如果断电重启,会导致 kernel panic 无法启动。
当 sshd 服务完成升级后 (大约是20分钟后),就没问题了。如果断线可以重新连回去。再用tmux恢复升级的界面。
如果 tmux 不可用,见【tmux_server_version_is_too_old】 - 小版本升级, 直接连 目标 N1,套上 tmux, 升级即可。
远程 ssh 升级 Debian 过程中掉线,重启失败,需要重装恢复
- 参考【N1盒子刷Armbian,看这一篇就够了——Armbian全方位安装指导书】
文件获取【N1_armbian_Debian_stretch_5.0.2_20190318.7z】
直接从 第二步:制作系统U盘 开始。 - 重装,会清空N1中原有的所有内容。以下,是步骤的文字描述。
- 把
Armbian_5.77_Aml-s905_Debian_stretch_default_5.0.2_20190318.img.xz解压后,用Win32DiskImager写入U盘,约 1.9GB - 把
meson-gxl-s905d-phicomm-n1.dtbcopy到 u盘的 dtb 目录 - 修改 u盘根目录的 uEnv.ini 文件,核对 dtb文件路径。
- 将U盘插入靠近hdmi的USB口里,上电重启,会自动进入U盘系统。
- 用 root、1234 登录系统,修改 root 密码。创建普通用户 (可跳过)。
- 用命令
nand–sata-install把系统写入 emmc。
这个Armbian-5.77安装映像的nand-stat-install是链接到/root/install.sh,是同一个脚本。 - 执行 2次
sync防止文件系统软故障。 shutdown或halt -p关机,拔掉u盘。重新插拔电源,重启系统。- 修改系统的 machine-id。 这样 此机的 DUID, client-id 都会改变。
rm /etc/machine-id; rm /var/lib/dbus/machine-id; systemd-machine-id-setup;
/etc/machine-id 可以手工修改。
/var/lib/dbus/machine-id 不要手工修改,重启后可能导致进不了系统。 - 写入的文件系统有 bug,
用find / -ls > /dev/null触发文件系统错误。
fsck /dev/mmcblk1p2修复文件系统。
reboot重启。 nmtui修改一下机器名。- 时区,用
timedatectl命令设置。 - 重装完成。
- nmtui 增加 eth0 的网口,设置 eui64。取消 interfaces 中的 eth0。
n1 的 debian 从 stretch 升级到 bullseye (2021-10记录)
- 直接修改 sources.list 为 bullseye, apt update 就会出错。说是pgp key错误。
- 发现可以跳过 buster 直接升级到 bullseye。以下是升级的步骤。
- 先保留 sources.list 为 stretch,
apt update, 发现有错误,update-command-not-found修正。
然后apt upgrade升级到 stretch 的最新。 - 修改 sources.list 为 bullseye,
apt update, 先apt update --fix-missing修正一下,否则 full-upgrade 会有错误。
然后apt full-upgrade - 先
sync,再 重启,完成升级。 - 发现 root 分区还是有错误。(如果有sync,可能不会有错误了)
需要反复多次find / -ls > /dev/null触发错误, 然后fsck -y /dev/mmcblk1p2修复文件系统,然后重启。
完善一下系统
nmtui修改一下机器名。- 时区,用
timedatectl命令设置。【Linux下使用timedatectl命令时间时区操作详解】
timedatectl status查看系统时间方面的各种状态
timedatectl list-timezones列出所有时区
timedatectl set-local-rtc 1将硬件时钟调整为与本地时钟一致, 0 为设置为 UTC 时间
timedatectl set-timezone Asia/Shanghai设置系统时区为上海- N1没有RTC,用
timedatectl如果修改失败。手动修改 /etc/timezone 的内容,手动修改 /etc/localtime 的链接,即可。
- N1没有RTC,用
- date 显示24小时制,在
/etc/default/locale加一行LC_TIME=C.UTF-8
或者 .bashrc 中加入export LC_TIME=C.UTF-8(似乎没用)localectl list-locales查看列表。
apt install locales-all之后可以用en_DK.UTF-8- 如果要自定义 date 的格式,用 alias 吧。
- 装本地邮件系统 postfix ,邮件客户端 mutt。改 aliases,把root邮件转给自己。
- 装 tmux。
- 修改 prefix 键 Ctrl-b 为 Ctrl-a ,copy-mode 为 vi 样式。历史行增加到2万行。
在/etc/tmux.conf中加入以下5行。
set-option -g prefix C-a
unbind-key C-b
bind-key C-a send-prefix
set -g mode-keys vi
set -g history-limit 20000 - 在
~/.bashrc中添加,alias tmux='tmux -2',让 tmux 支持256colors。
或, 在/etc/tmux.conf中加一行set -as terminal-features ",*:256"指定支持256色。
测试echo -e '\033[38;5;158mAAA\033[38;5;189m666\033[0m'应该是颜色差异很小的白色, 而不是绿/蓝。 - 如果出现错误
unknown terminal type tmux-256color,
检查ncurses-term是否安装。用apt install ...安装,可解决。
- 修改 prefix 键 Ctrl-b 为 Ctrl-a ,copy-mode 为 vi 样式。历史行增加到2万行。
- sshd 增加一个端口,为了方便 ipv6 登录。另外,设置一下用 key 登录。
- 创建一个 ddns 更新脚本,用 crontab 定时启动。
- 参考【UnRAID_6.8.2_配置_设置】中,关于 Debian 的设置。
- /var/log/journal 目录,会占用不少空间,需要解决一下。
【Linux 系统 /var/log/journal/ 垃圾日志清理】
【N1刷入Armbian后保护emmc – 禁止varlog日志】
【N1盒子armbian/ubuntu/linux系统修改日志输出到内存】- 手动删除到8M
journalctl --vacuum-size=8M - 配置中限制大小8M
/etc/systemd/journald.conf中SystemMaxUse=8M - 手工清理
/var/log/中的东西,记得还要清理/var/log.hdd/目录中对应的文件。否则,重启又回来了。 - journal 改到内存
/run/log/journal/
/etc/systemd/journald.conf中Storage=volatile,systemctl restart systemd-journald
- 手动删除到8M
- sshd 配置,仅允许 root 从内网用密码登录。其他地方要用密钥登录。
【配置sshd_除了特定ip外_仅密钥登录】# 修改 /etc/ssh/sshd_config # 找到 PermitRootLogin yes,改为以下一行。没找到就添加这行。 # 禁止 root 用户通过密码登录。 PermitRootLogin prohibit-password PasswordAuthentication no # 在文件最后添加以下两行 Match Address 127.0.0.1/32,::1/128,192.168.0.0/16,10.0.0.0/8,172.16.0.0/12,fe80::/16,fd00::/8 # PermitRootLogin yes PasswordAuthentication yes Subsystem sftp /usr/lib/openssh/sftp-server -l INFO记录sftp的活动。- 太多猜密码的,在 log 中留下不少记录,占用空间。装个 fail2bain 限制一下。只需限制 sshd 的对应端口就够了。
- N1 的 armbian 有 ntpd 对时服务。不用装 chronyd 了。
如果没有 ntpd 就装 chronyd 吧。 - auth.log 中留下很多
dev/ttyS0: not a tty的记录,syslog daemaon.log 也有不少 ttyS0 的记录。
因为 N1 本身没有串口,所以出错。除非 USB 上插了一个。
systemctl disable serial-getty@ttyS0,service serial-getty@ttyS0 stop即可- ttyAML0 是 TTL串口。N1有这个设备,需要自己接线出来用。
- 修改默认的 editor。
- 设置环境变量
EDITOR=vim - 使用命令
update-alternatives --config editor。
- 设置环境变量
- ls带颜色输出时,目录是蓝色,阅读吃力,改一下。
dircolors -p > ~/.dircolors修改这个文件,把DIR 01;34改为DIR 00;44。- debian 只支持
~/.dircolors,centos支持~/.dircolors或~/.dir_colors。
- debian 只支持
ssh 连接上去 debian 从 11 升级到 12,bullseye升bookworm
(2023-06记录)
- 把 11 升级到最新
apt update ; apt upgrade。 - 用
find / -ls > /dev/null触发文件系统错误。防止重启失败。 - reboot (选做)。
- 改 sources.list ,准备升到 12。
把 bullseye 改为 bookworm ,
把 non-free 改为 non-free non-free-firmware , - 执行 tmux 。(使用一个好的网络,最好不要掉线。家庭宽带或4G网络,比酒店网的稳定)。
- "apt update ; apt full-upgrade"。
如果出现某个包下载失败的错误。则再执行一次,"apt update ; apt full-upgrade --fix-missing"。 - 用
find / -ls > /dev/null触发文件系统错误。防止重启失败。 - sync 然后 reboot
- 启动失败。用armbian的U盘启动。"fsck /dev/mmblk1p1 ; fsck /dev/mmblk1p2"
- 拔掉U盘,启动成功。
- 再次reboot,失败。U盘启动后,
发现 mmblk1p1 没有正确的umount,需要用fsck清除mount标记,才行。
发现是一个服务启动失败 "systemd-fsck@'dev-disk-by\x2dlabel-BOOT_EMMC' "这个不影响。
又发现,内核-5.0.2和nft-1.06 搭配不好,导致 nftables 服务卡住。- 降级 nftables-0.9.8
“/etc/apt/sources.list" 中保留一行 "deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free"。
创建 "/etc/apt/preferences", 内容,
重新安装这两个包,remove 和 install。Package: nftables Pin: version 0.9.8* Pin-Priority: 1001 Package: libnftables1 Pin: version 0.9.8* Pin-Priority: 1001
自定义规则,不能放在 nftables.service 中启动,否则会卡死系统(系统不能登录)。
等系统完全启动好之后,手工执行 "nft -f my-nft-rules.nft" 就没有问题。
(这个问题,最终通过升级内核解决。见下文)
- 降级 nftables-0.9.8
- "apt autoclean ; apt autoremove" 清理一下无用的包。
新的参考
- 之前用的 armbian 系统 (Armbian_5.77_Aml-s905_Ubuntu_bionic_default_5.0.2_20190401),内核是无法升级的。升级系统过程中,内核的升级,因权限问题,无法写入。
- 【SuzukiHonoka/s905d-kernel-precompiled】由 Starx 预编译的 S905d 内核仓库。
有个【视频教程】, - 【ophub/amlogic-s9xxx-armbian】ophub的armbian系统。整套系统,更新活跃。
给 N1 新装系统,建议使用 ophub 的 armbian,内核比较新,稳定性不错,也方便今后的升级,包括 kernel 的升级。(2023-06)
ARMBIAN 5.67 或 5.77 换新内核
(2023-08记录)
- 之前刷的 ARMBIAN-5.67,内核为 kernel-4.18 好旧。是 stretch (9)。
之前刷的 ARMBIAN-5.77,内核为 kernel-5.0.2 比较旧。是 stretch (9)。 - 先升级到 buster (10),再升级到 bullseye (11),最后升级到 bookworm (12)
因为直接升级到 bullseye,apt会报错,大概是 apt的版本太低。- 可以试试,更改了 sources.list 之后,
apt update; apt install apt只升级apt。
最终改为 bookworm 再做完整升级apt upgrade。
- 可以试试,更改了 sources.list 之后,
换SuzukiHonoka/s905d-kernel-precompiled
(2023-08记录)
- 去 【SuzukiHonoka/s905d-kernel-precompiled】找预编译内核。
主页上的 README 说:- "从 5.15.x 开始,本内核已不适合非服务器环境使用。"
- "目前 N1 已完成 5.9.x - 5.15.x 内核的安装及稳定性测试。"
- "通过测试的版本: Linux Kernel 5.15.15 and above"。
就用比较新的 5.15.15 吧。去 【releases 的历史】 下载 Kernel.5.15.15.zip
- 上传到目标机器 (N1),解压。
里头有个 install_kernel.sh 脚本,脚本中写漏了两句。需要手工补上。- su 到 root 身份。
cp /boot/uInitrd /root/uInitrd.old这是漏的第一句。这句也很重要,否则失败后,恢复不了旧内核。mkdir /boot/dtb/amlogic/这是漏的第二句。- 然后执行这个脚本,
sh install_kernel.sh
其实,脚本中应该少装一个 deb 包。"linux-libc-dev_5.15.15-...arm64.deb",
这个 linux-libc-dev 包 bookworm 中的版本更高,没必要装。 - 重要: 别漏这一步,修改 "/boot/uEnv.ini" 文件中 "dtb_name=" 这一行。
改为dtb_name=/dtb/amlogic/meson-gxl-s905d-phicomm-n1.dtb - 执行
sync2次,防止缓存未写入磁盘。 - 用
find / -ls > /dev/null触发文件系统错误。防止重启失败。 - reboot ,就应该成功了。
- 重启后,用
find / -ls > /dev/null再次触发文件系统错误。
如果没问题,那就是 OK 啦。 - 因为 /boot/ 分区只有 122MB。此时应该只剩下 11MB 左右了。
应该清理一下这个分区。删除旧内核。否则下次更换内核,空间就不够用了。- N1 启动,其实只需要 zImage, uInitrd, dtb, uEnv.ini。
config-xxx, initrd.img-xxx, vmlinuz-xxx 启动时用不到。(2023-08测)
如果 "boot" 分区空间紧张,可以把 vmlinuz-xxxx, initrd.img-xxxx 移出去别的地方备份。
- N1 启动,其实只需要 zImage, uInitrd, dtb, uEnv.ini。
- 如果启动失败,恢复方法。
断电,插u盘启动。
挂载 "/dev/mmcblk1p1" 到某个目录(就是 armbian的 "/boot/" 分区)。
删除 zImage,把 zImage.old 改名为 zImage。
把备份的 uInitrd.old 拷贝覆盖到 uInitrd 上。
然后修改 uEnv.ini 中,关于 dtb 的路径。
重启,就能恢复原来的内核。 - 如果想再重新换个kernel版本。
先恢复 zImage.old,参考上面"启动失败"的恢复方法。
卸载旧版的几个 deb 包,
然后,删除 /boot/ 中,initrd.img-5.15.xx... ,dpkg -r linux-headers-xxxx...... dpkg -r linux-image-xxxx...... dpkg -r linux-libc-dev #如果装了他的版本
把备份的 uInitrd.old 拷贝覆盖到 uInitrd 上。(如果没备份,应该可以用 update-initramfs 重新生成)
/boot/ 中,旧版的 zImage 已经恢复了,就不用处理了。
即可。
注意。我尝试 从 kernel-5.15.15 直接 降级换到 kernel-5.13.14,启动失败了。
然后,退回最初的 kernel-5.0.2 之后再换 kernel-5.13.14,启动成功。(2023-08记录) - 其中,ARMBIAN-5.77,换内核的时候,发现 /dev/mmcblk1 中的分区表丢失。
用 fdisk 恢复它就行了。开始/结束,抄下面的表。5.67和5.77制作的分区表是一样的。(2023-08记录)
如果担心和我的N1的分区表不同。最好自己先备份一个。用命令fdisk -l /dev/mmcblk1。Disk /dev/mmcblk1: 7.28 GiB, 7818182656 bytes, 15269888 sectors Disklabel type: dos Device Boot Start End Sectors Size Id Type /dev/mmcblk1p1 1368064 1617919 249856 122M c W95 FAT32 (LBA) /dev/mmcblk1p2 1619968 15269887 13649920 6.5G 83 Linux- 如果确实没有备份。找到当时的安装u盘,找到文件 "/root/install.sh"。
手工执行一下前面的20-30行,跳过最前的 u-boot 备份,就用 u盘上原来的备份文件 "u-boot-default.img"。
执行 parted 分区, 恢复 u-boot,执行到 "sync"。就恢复分区表了。
- 如果确实没有备份。找到当时的安装u盘,找到文件 "/root/install.sh"。
- 两个链接,感觉有用,但没看懂。先留着。
【eMMC读写操作(eMMC5.1)】,【E900v22C Armbian 写入emmc】
各个kernel版本的尝试
最终,我用了 ophub的 kernel-5.15.125。见本帖子的后面。
- 尝试 SuzukiHonoka/s905d-kernel-precompiled 的各个kernel版本。
- kernel-5.15.15 和 kernel-5.15.104。(2023-08记录)
uname -a分别显示:
Linux aml 5.15.15-aml-s905d-starx-action #1 SMP PREEMPT Tue Jan 18 08:33:08 UTC 2022 aarch64 GNU/Linux
Linux aml 5.15.104-aml-s905d-starx-action #1 SMP PREEMPT Tue Mar 28 01:48:47 UTC 2023 aarch64 GNU/Linux- /boot/ 分区剩余 11MB, 8.2MB。
- 内核 和 nft-1.06 搭配很好。有 TUN, TAP, WIREGUARD, PPP, PPPOE 支持。无 loop 设备。
- N1启动,直到进入系统,插 HDMI 的显示器,一直都显示开机 LOGO 图。启动OK。
插上USB键盘也没变化。系统只能远程登录。本地的键盘,显示器,没法用。
(15和104版一样,USB键盘,显示器没法用。网络正常。) - kernel-5.15.104 比5.15.15 编译的config项目多了一些。个人感觉 104 应该更好点。
- kernel-6.1.42。 启动失败。N1 不能用。(2023-08记录)
- kernel-6.1.25。 启动失败。N1 不能用。(2023-08记录)
- kernel-5.13.14 (2023-08记录)
uname -a显示:
Linux aml 5.13.14-aml-s905d-starx-action #1 SMP PREEMPT Sat Sep 4 10:35:52 UTC 2021 aarch64 GNU/Linux- /boot/ 分区剩余 4.9MB。
- 内核 和 nft-1.06 搭配很好。有 TUN, TAP, WIREGUARD; 无 PPP, PPPOE支持。
- N1启动,直到进入系统,插 HDMI 的显示器,显示开机 LOGO 图几秒后,蓝屏。显示器提示"无信号"。
插上USB键盘也没变化。系统只能远程登录。本地的键盘,显示器,没法用。 - 退回 kernel5.0.2,重新装 kernel5.13.14,居然好了。(也许前一次安装, 哪里做的不对)
启动成功。本地显示器有显示,usb键盘工作正常。
- kernel-5.14.11 (2023-08记录)
- /boot/ 分区剩余 3.1MB。
- 内核 和 nft-1.06 搭配很好。有 TUN, TAP, WIREGUARD; 无 PPP, PPPOE支持。
- N1启动,直到进入系统,插 HDMI 的显示器,显示开机 LOGO 图几秒后,蓝屏。显示器提示"无信号"。
插上USB键盘也没变化。系统只能远程登录。本地的键盘,显示器,没法用。 - 换用 kernel-5.0.2 的 dtb (改uEnv.ini),显示开机 LOGO 图几秒后,显示正常。
插上usb键盘没反应。本地console,有显示,不能输入,没法用。 - 也许,重装,也会好。没再测试了。
ARMBIAN 5.67, 5.77 之前换的不满意,再换
基础知识参考
- 【vmlinuz 文件解压缩】
【How do I uncompress vmlinuz to vmlinux?】
【Extract vmlinux from vmlinuz or bzImage】
N1 的 uboot 不支持 gzip压缩的内核,我测试过,启动失败。所以要解开它。# 如果 "file vmlinuz" 显示: Linux kernel ARM64 boot executable Image, #--- 则 vmlinuz 不是 gzip压缩的,执行 cp vmlinuz Image # 如果 "file vmlinuz" 显示: gzip compressed data, max compression, #--- 则 vmlinuz 是 gzip压缩的,执行 (较慢) dd if=vmlinuz-xxxx skip=$(head -c1m vmlinuz-xxxx | grep -abo -m1 -e $'\x1f\x8b\x08\x00' |cut -d: -f 1) bs=1 |zcat > ./Image #或 (较快) N=$(head -c1m vmlinuz-xxxx | grep -abo -m1 -e $'\x1f\x8b\x08\x00'| awk -F: '{print $1+1}') && tail -c +$N vmlinuz-xxx | gzip -d > ./Image - 【initrd.img, vmlinux】
- 【initrd.img的压缩(制作)及解压的过程】
- 【How to build uInitrd/initrd.img for Ubuntu?】
【Extracting content from the file uInitrd】
mkimage, dumpimage 需要安装apt install u-boot-tools#---- 安装好 vmlinuz 之后,生成 initrd.img 和 uInitrd,执行, /etc/kernel/postinst.d/initramfs-tools ${version} #或 update-initramfs -c -t -k "${version}" #---- uInitrd 转 initrd.img.gz dd if=/boot/uInitrd of=./initrd.img.gz bs=64 skip=1 #或 dumpimage -T ramdisk -o uInitrd initrd.img.gz #---- initrd.img.gz 转 uInitrd, mkimage -A arm64 -O linux -T ramdisk -C gzip -a 0 -e 0 -n uInitrd -d /boot/initrd.img-xxx ./uInitrd-xxx #---- vmlinuz 转 uImage, mkimage -A arm64 -O linux -T kernel -C gzip -a 0x1080000 -e 0x1080000 -n "Linux" -d vmlinuz-xxx uImage #---- uImage 转 vmlinuz, dumpimage -T kernel -o vmlinuz uImage - 【cpio格式 initrd 的解压与压缩】
试试别人的内核
devmfc/debian-on-amlogic
- 试了试 他家的 6.1.38-meson64 (2023-08记录)
从 .config 文件看,有 TUN, TAP, BLK_DEV_LOOP, 还有很多的 ROCKCHIP 配置。没有选 ACPI。
换到 N1 上,无法启动。看来不合适。
ophub/kernel
-
去 【ophub/kernel_dev】下载 "5.15.125.tar.gz",约 89MB。
-
写了个脚本,见【Debian11_手工制作deb安装包_过程和例子】。
把 tar.gz 压缩包,转换成 deb 安装包。
这个脚本,创建"文件目录"部分,参考了 ophub 内核升级脚本 【armbian-update】"update_kernel()"函数的安装步骤。 -
在 N1 上执行这个脚本。耗时 2m55s 生成两个 deb 文件。文件的体积还好。
7.2M linux-headers-5.15.125-ophub-amlogic-s905d-osn_arm64.deb 26M linux-image-5.15.125-ophub-amlogic-s905d-osn_arm64.deb -
把这两个包安装好。(2023-08记录)
- 注意: "boot" 分区剩余空间 86MB,安装 linux-image-xxx.deb 失败,报错:"空间不足"。
清理到剩余空间 105MB,安装成功。装完剩余 46MB。可以把之前移出的文件,再移回来。
因为安装结束,会触发脚本重新生成initrd.img,uInitrd,产生的临时文件 导致 boot分区满了。
两个解决办法,- 把文件移出去,剩余空间留大点。
- 修改生成deb的脚本,去掉 postinst 脚本。不触发重新生成initrd.img。
- "file vmlinuz-5.15.125-ophub" 显示: Linux kernel ARM64 boot executable Image,
vmlinuz 27MB。"/boot/"目录中,执行
cp vmlinuz-5.15.125-ophub zImage - uInitrd 已经重新生成了,不用修改。
- 检查 uEnv.ini 中 dtb 的路径。ophub的dtb,在 "/boot/dtb-5.15.125-ophub/" 目录中。
- 先 sync,再 reboot,重启。 N1 启动成功。(2023-08记录)
- "uname -a" 显示,
Linux aml 5.15.125-ophub #1 SMP PREEMPT Wed Aug 9 12:36:03 CST 2023 aarch64 GNU/Linux - 有 TUN, TAP, WIREGUARD, PPP, PPPOE, BLK_DEV_LOOP 支持。ipv6 功能正常。
BLK_DEV_LOOP 设置了 128 个,有点多,其实有 16个就够用了。
内核 和 nft-1.06 搭配很好。nftables 规则启用正常。(2023-08记录)
syslog中有 蓝牙,wifi的相关显示。我没测试 蓝牙,wifi。 - 连接本机的 HDMI显示器,usb键盘,工作正常。插u盘能正常识别,挂载。(2023-08记录)
- 如果这个内核,使用 SuzukiHonoka/s905d-kernel-precompiled 的 5.15.104 的 dtb,也能用,运行也没发现问题。
- N1 不插外设,没啥访问,市电插座上的功率计显示,2.7~3.2 瓦。(2023-08记录)
- 注意: "boot" 分区剩余空间 86MB,安装 linux-image-xxx.deb 失败,报错:"空间不足"。
-
以下各个版本的内核测试,都是使用【Debian11_手工制作deb安装包_过程和例子】中的脚本,打包成两个 deb 安装包。
安装其中的 linux-image-xxx(版本号)-amlogic-s905d.deb ,然后启动。ophub/kernel 【kernel_dev】
"6.1.45.tar.gz"
90.5MB。启动成功
2023-08测hdmi显示器,usb键盘 工作正常。
vmlinuz 33MB。
128个dev_loop。有ppp。【kernel_dev】
"5.15.125.tar.gz"
88.2MB。启动成功
2023-08测见上文的描述。
vmlinuz 27MB。
128个dev_loop。有ppp。【kernel_stable】
"6.1.45.tar.gz"
84.4MB。启动失败
2023-08测黑屏,大约每十秒闪现一次开机logo。
似乎在不停重启。
安装了两次,测试了两次。排除了操作失误的可能。确实是不能启动。【kernel_stable】
"5.15.125.tar.gz"
82.1MB。启动成功
2023-08测hdmi显示,usb键盘,正常。
vmlinuz 27MB。
128个dev_loop。有ppp。【kernel_flippy】
"6.1.45.tar.gz"
72.9MB。启动失败
2023-08测黑屏,大约每十秒闪现一次开机logo。
似乎在不停重启。【kernel_flippy】
"5.15.125.tar.gz"
65.9MB。启动成功
2023-08测hdmi显示,usb键盘,正常。
vmlinuz 24MB。
8个dev_loop。有ppp。【kernel_beta】
"6.1.45.tar.gz"
84.4MB。启动成功
2023-08测hdmi显示,usb键盘,正常。
vmlinuz 33MB。
128个dev_loop。有ppp。【kernel_beta】
"5.15.125.tar.gz"
82.1MB。启动成功
2023-08测hdmi显示,usb键盘,正常。
vmlinuz 27MB。
128个dev_loop。有ppp。
自编译一个精简版
-
【osnosn/armbian-kernel-precompiled/】,用 ophub的源码,重新编译的。
# N1_Kernel_5.15.126+.rar 中,需要用到,两个 deb文件和一个 zImage。 dpkg -c linux-image-5.15.126+_5.15.126+-4_arm64.deb #查看deb包中的文件列表 dpkg -x linux-image-5.15.126+_5.15.126+-4_arm64.deb ./xxx/ #把deb包中的文件解压到xxx/目录中,用来查看文件kernel-5.15.126。vmlinuz 22MB。有 ppp,tun,tap,wireguard。有 8个dev_loop。
安装说明,见【说明 armbian-kernel-s905d-phicomm-n1】。## ---安装步骤--- cd /root/ mkdir boot_5.0.2-bak/; cd boot_5.0.2-bak/ ## 移动文件,腾出空间 mv /boot/System.map-5.0.2-aml-s905 ./ mv /boot/config-5.0.2-aml-s905 ./ mv /boot/vmlinuz-5.0.2-aml-s905 ./ mv /boot/initrd.img-5.0.2-aml-s905 ./ mv /boot/uInitrd ./ mv /boot/zImage ./ ## 备份其他文件 cp -p /boot/u-boot-default.img ./ cp -p /boot/armbian* ./ cp -p /boot/boot* ./ cp -p /boot/emmc_autoscript* ./ cp -p /boot/uEnv.ini ./ cp -rp /boot/dtb-5.0.2-aml-s905 ./ # 解压 RAR文件,并进入解压目录。先装headers再装image,然后覆盖zImage,最后替换dtb文件 dpkg -i linux-headers-5.15.126+_5.15.126+-4_arm64.deb #安装headers文件 dpkg -i linux-image-5.15.126+_5.15.126+-4_arm64.deb #安装新内核 cp zImage /boot/zImage #把 RAR中的 zImage拷贝过去 rm /boot/uImage #删除无用文件 cd /boot/; mkdir dtb-5.15.126/ cp -p /usr/lib/linux-image-5.15.126+/amlogic/meson-gxl-s905d-phicomm-n1.dtb dtb-5.15.126/ 修改 /boot/uEnv.ini 中对应的行,用"#"注释旧的行,新增一行 dtb_name=/dtb-5.15.126/meson-gxl-s905d-phicomm-n1.dtb sync; sync; #确保所有更改,已经写入emmc -
换了 kernel-5.15.126,如果要使用 wireguard 网络,无需安装 wireguard包,仅安装
apt install wireguard-tools即可。(2023-10测)
因为安装 wireguard包,需要依赖官方内核 linux-image-xxx。而,N1无法安装官方内核。
【WireGuard_2和3台OpenWRT测试_LAN-LAN连接测试_Debian11_CentOS8】 -
恢复 nftables 为最新版本。
删除 "/etc/apt/preferences",文件,或者注释里头关于 nftables libnftables1 的内容,
重新安装这两个包,apt remove 和 install。则恢复为 nftables-1.0.6 (2024-12记录)。
可以激活服务 nftables.service。
ssh 连接上去 debian 从 12 升级到 13,bookworm升trixie
(2023-06记录)
- 升级过程中,mariadb数据库会停掉,php的module包不完整,导致大量报错。
可以考虑停掉 mariadb,nginx 之类的服务。等到升级完成后再开启。
如果有什么服务监控脚本,也要停掉。否则升级过程中,你的脚本不停重启服务,容易出问题。 - 把 12 升级到最新
apt update ; apt upgrade。 - 改 sources.list ,准备升到 13。
把 bookworm 改为 trixie , - 清理配置文件残留
find /etc -name '*.dpkg-*' -o -name '*.ucf-*' -o -name '*.merge-error'
找出来的文件,都删除掉。 - 执行 tmux 。(使用一个好的网络,最好不要掉线。家庭宽带或4G网络,比酒店网的稳定)。
- "apt update ; apt full-upgrade"。
如果出现某个包下载失败的错误。则再执行一次,"apt update ; apt full-upgrade --fix-missing"。
如果某个配置文件曾经修改过,会报配置冲突,手工对比修改一下。或者直接选择保留旧配置。 - 用
find / -ls > /dev/null触发文件系统错误。防止重启失败。 - sync,sync,然后 reboot
- "apt autoclean ; apt autoremove" 清理一下无用的包。
- 如果发现 ping 命令报错,Operation not permitted,需要root权限。
安装linux-sysctl-defaults包就能解决。 last命令没了。或者安装wtmpdb包来使用last命令。或者使用lslogins命令。
debian官方文档建议: 安装wtmpdb后,需要安装libpam-wtmpdb。我没装libpam-wtmpdb,似乎也没问题。- 有一行 armbian的源,
apt update报Missing key DF00FAF1C577104B50BF1D0093D6889F9F0E78D5
参考【armbian更新报不能验证公钥】【GPG 错误:https://github.armbian.com/configng stable InRelease: 无法验证签名】【n1刷入armbian无法验证GPG问题】
如果看不到key值,可以通过apt update --audit查看详细。curl 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xDF00FAF1C577104B50BF1D0093D6889F9F0E78D5' |gpg --dearmor > /etc/apt/trusted.gpg.d/armbian.gpg - ip命令默认输出颜色,环境变量 COLORFGBG 不能关掉颜色,
只能使用alias ip='ip -c=never',放在/etc/profile.d/my_alias.sh或~/.bashrc或~/.profile中。 - 网卡接口的名称可能会改变,比如从
enp2s0变为enp3s0, 注意检查,使用了网卡接口名称的脚本。 - nginx-1.25 以上的新版,
listen 443 ssl http2;要改为两行listen 443 ssl; http2 on; /usr/share/zoneinfo中,时区'PRC'没了,要用'Asia/Shanghai',
比如php中的date_default_timezone_set('Asia/Shanghai');- systemd-sysctl不再读取
/etc/sysctl.conf,如果设置了内容,需要移到/etc/sysctl.d/xxx.conf中。 - crontab中的脚本如果用到 date命令,比如
acme.sh,建议在crontab中加一行,
指定时区TZ=Asia/Shanghai,否则有可能输出的时间不正确。因为 date依赖TZ环境变量。 - 清理 rc 包
dpkg -l | grep '^rc' #列出rc包 dpkg -L xxx_rc_pkg_name #查看rc包的剩余文件 # 清除 rc 包 dpkg -P rc_pkg_name #比较快 aptitude purge rc_pkg_name #稍慢 apt purge rc_pkg_name #比较慢
N1_更换emmc_升级到64GB
- 去海鲜市场,找店家升级emmc到64GB.
重刷系统_ophub
- 全新安装 armbian,用 ophub,内核 6.1.149
支持 TUN, TAP, WIREGUARD, PPP, PPPOE, BLK_DEV_LOOP(128个)。支持 ipv6。 - 装好后,boot分区 510MB,root分区 58GB。
- 接上hdmi显示,usb键盘,工作正常。
- 用命令 reboot,能正常启动进入linux系统。启动过程没有地方卡住,没有需要人工干预的情况。
- 多次重启,没发现 eth0网口的 mac地址变化。
重新配置
- 2025-09 配置
- 系统中还没有 vim,很不方便,只能先用 nano。
- 虽然重启后mac地址不会变化,
还是在/boot/uEnv.ini加入一行ethaddr=12:34:56:78:90:ab,修改了网卡的mac地址并固定mac。 - 主路由上,设置这个mac地址,静态分配一个固定的 ipv4地址。
- 系统已经是 debian13 (trixie)。
备份/修改/etc/apt/sources.list.d/中内容,改用国内镜像地址。使用https:URIs。
加了后缀的备份文件名,如果后缀不是.bak .disabled .save,则会报错。
可以用echo 'Dir::Ignore-Files-Silently:: "\.mybak$"' >> /etc/apt/apt.conf.d/89-IgnoreFiles指定忽略的文件后缀。可以用多行配置指定多个后缀。 - 升级到最新,安装 vim。设置
/etc/vim/vimrc.local。 - 设置
/etc/tmux.conf。
设置/etc/profile.d/local_alias.sh,关于 ls ip cp rm 的alias。
修改/root/.bash_aliases不习惯的alias。记得加入alias tmux='tmux -2',支持256色,否则vim的颜色不好看。
或, 在/etc/tmux.conf中加一行set -as terminal-features ",*:256"指定支持256色。 - 网卡是由NetworkManager管理的,修改 ipv6 地址为 eui64。
用nmtui-edit修改有线连接的名称Profile name: eth0,其他不修改,保存。
执行nmcli c modify eth0 ipv6.addr-gen-mode eui64或直接修改/etc/NetworkManager/system-connections/eth0.nmconnection文件中的对应的配置。 - 创建普通用户。修改
/etc/ssh/sshd_config,改端口。
只允许本地内网地址使用密码登录,远程必须使用密钥/证书登录。 apt install nftables,修改/配置/etc/nftables.conf,防止扫描,限制 ssh每分钟连接次数。
然后安装 fail2ban保护 ssh,扫描/猜密码的总是很多。apt install wtmpdb,还是习惯用 last命令。- 安装工具,
apt install dnsutils ncat telnet 7zip 7zip-rar unrar proxychains4 apt install mutt postfix,安装时选择Local only,建立本地邮件系统,系统中有啥错误,可以收到邮件。- 已经安装了 chrony 服务。装个工具
apt install ntpsec-ntpdate,
在/etc/chrony/conf.d/中添加一些配置。"allow, logchange"
在/etc/chrony/source.d/中添加一些时间服务器。
N1 无硬件时钟,无需安装 hwclock。 - ls带颜色输出时,目录是蓝色,阅读吃力,改一下。
dircolors -p > ~/.dircolors修改这个文件,把DIR 01;34改为DIR 00;44,蓝底白字。 - 检查
/etc/fstab中, btrfs 的挂载选项是defaults,noatime,compress=zstd:6,无需修改。
系统服务fstrim.timer默认已经激活。
对比df -hT和du -xhs /,发现df报告使用了1.0GB,du报告使用了2.0GB。文件系统压缩确实省空间。去我的旧的 8gb的 N1上看,文件系统是ext4。df和 du的输出是吻合的,都报告使用了 4.1GB。
- 创建文件
/etc/update-motd.d/85-motd-mymsg-xxxx写入自己的登录提示信息。
修改/etc/update-motd.d/10-armbian-header,脚本通过网络获取wan口ipv4和ipv6,又耗时又不正确。
找到curl的行(60行),用http://icanhazip.com/替换http://whatismyip.akamai.com/。
找到echo -e "${all_ip6_address}"(227行),去掉注释。
或者,自己 修改脚本,去掉获取wan口ipv4/ipv6的相关内容。 - 如果要设置
net.ipv4.ip_forward=1,则在/etc/sysctl.d/中创建20-xxx.conf。 - 【My apt search has become super slow recently】
所以我把以上配置恢复了一半。使用 lz4 压缩。* ophub的默认配置是使用 gz压缩。/var/lib/apt/lists/ 占用 152MB. * 修改 /etc/apt/apt.conf.d/02-armbian-compress-indexes 注释掉两行: #Acquire::CompressionTypes::Order:: "gz"; #APT::Compressor::gzip::Cost "10"; 执行: apt distclean; apt update; 变成使用 lz4 压缩。lists/ 占用 205MB. * 再修改 /etc/apt/apt.conf.d/50apt-file.conf 增加 4行: Acquire::IndexTargets::deb::Contents-deb::KeepCompressed "false"; Acquire::IndexTargets::deb::Contents-udeb::KeepCompressed "false"; Acquire::IndexTargets::deb::Contents-deb-legacy::KeepCompressed "false"; Acquire::IndexTargets::deb-src::Contents-dsc::KeepCompressed "false"; 执行: apt distclean; apt update; 变成 无压缩。lists/ 占用 1.4GB. * 无论使用 gz, lz4 压缩, 或 无压缩。apt search xxxx 都要耗时10秒,没有明显的耗时差异。
安装工具apt install lz4 - 修改
/etc/profile
注释掉最后一行#[[ "${SHELL}" == *bash && -f "${HOME}/.bashrc" ]] && . ${HOME}/.bashrc
否则,用户登录时,~/.bashrc会被执行两遍。 - 工具,
apt install etherwake lm-sensors bvi hyx command-not-found gnutls-bin sqlite3 tcpdump traceroute w3m xxd zip zstd - web服务,
apt install nginx-full apache2-utils php-cli php-fpm php-curl php-xml php-sqlite3,以后跟随系统升级。 - 在普通用户中,安装 acme.sh,证书自动化,申请LetsEncrypt或ZeroSSL的网站证书。给 nginx用。
- go语言环境
apt install golang-go golang-1.24-go指定版本,以后不打算升级。
golang-go包含manpage和go环境设置,golang-1.24-go没有环境设置。 - py3的module
apt install python3-pip python3-pycurl python3-requests python3-socks - 参考【清华镜像站docker-ce说明】添加 docker-ce的源
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" > /etc/apt/sources.list.d/docker-ce.list apt modernize-sources #把所有的 xx.list 转换为 xx.sources (DEB822格式) echo 'Architectures: amd64' >> /etc/apt/sources.list.d/docker-ce.list #参考 man sources.list - 3proxy, 【github/3proxy】, 下载后,安装
dpkg -i 3proxy-0.9.5.aarch64.deb。
如果 3proxy.cfg中有daeman配置项,需要修改/usr/lib/systemd/system/3proxy.service
在[Service]中加入Type=forking,系统服务才能正常启动/停止/重启。如果没有配置daeman就不用加这行。
修改后,需要执行systemctl daemon-reload刷新服务。
或者,systemctl disable 3proxy,禁用服务,自己手动执行。
如果需要以普通用户执行。在[Service]加入一行User=proxy。(注意: pid 和log 要放到 /var/log/3proxy/中)。
其他
- android 旧手机。
- 做电脑副屏,用 spacedesk。手机和PC都要装 app。
- 做电脑副屏,买一个 USB3的HDMI视频采集卡,插在手机的 type-C 上。PC无需安装软件。
也可以插在PC的usb3上采集其他hdmi的视频输出。 - 做摄像头,用 DroidCam。手机和PC都要装 app。
- 行车记录仪,dailyraods。
转载注明来源: 本文链接 https://www.cnblogs.com/osnosn/p/13994474.html 来自osnosn的博客.

浙公网安备 33010602011771号