解决orangepi-build编译Orange PI 3B的Server镜像时卡住的问题
izilzty 发布于 阅读:4946
不想看废话的朋友可以直接拉到文章最后,在配置文件里修改apt-get的选项并保存,即可解决问题。
本来我是不喜欢自己编译像系统镜像这种大工程的,又费时间又费流量,但是无奈由于最近测试电量计芯片时修改了板子的设备树和启用了内核的驱动,如果每次都是刷完官方系统再去安装这两个文件的话会比较麻烦,于是就决定直接重新编译一下镜像,把这两个修改的地方直接编译到新系统里。
最开始是尝试编译了Armbian,编译过程很顺利,但是刷进板子以后发现对I2C之类的接口支持不好,不能直接在armbian-config里启用,于是就开始尝试编译香橙派官方的系统。本来想着orangepi-build是在armbian-build基础上改的,有了Armbian的编译经验,这次应该会很轻松,结果一上来就踩坑了...
在编译legacy内核+bookworm的服务器镜像时,每次都是卡在Installing [ orangepi-zsh_1.0.2_all.deb ]
这里,不管怎么换系统版本,怎么换网络环境,都还是会卡在这里。同时,还可以看到有一条apt的进程apt-get -y -qq install dnsmasq v4l-utils ...
一直卡着。在网上搜了一圈好像没有碰到这个问题的,于是只能硬着头皮自己解决。
排查问题首先需要的就是日志,但是在orangepi-build的readme文档里什么都没写,这怎么办呢?不慌,直接看armbian-build的!看了一下编译选项,在编译时添加PROGRESS_LOG_TO_FILE=yes
参数可以把日志写到文件,于是立刻加上后再次开始编译。
等到卡住后打开install.log日志,拉到最下面,终于发现了罪魁祸首:
正在设置 libpulse0:arm64 (16.1+dfsg1-2+b1) ...
配置文件 '/etc/pulse/client.conf'
==> 系统中的这个文件或者是由您创建的,或者是由脚本建立的。
==> 软件包维护者所提供的软件包中也包含了该文件。
您现在希望如何处理呢? 您有以下几个选择:
Y 或 I :安装软件包维护者所提供的版本
N 或 O :保留您原来安装的版本
D :显示两者的区别
Z :把当前进程切换到后台,然后查看现在的具体情况
默认的处理方法是保留您当前使用的版本。
*** client.conf (Y/I/N/O/D/Z) [默认选项=N] ?
好家伙,这属于双向奔赴了,一个等着输入,一个等着输出。
找到问题了以后,剩下的就容易了,只要让dpkg在安装时使用默认选项就好了。通过在orangepi-build的仓库里搜索上面卡住的apt命令,发现命令是存在external/config/sources/families/rockchip-rk356x.conf
这个文件里的第48行,于是打开这个文件,找到48行,在apt-get后面加上-o Dpkg::Options::='--force-confdef' -o Dpkg::Options::='--force-confold'
,然后保存,重新开始编译,问题解决!
下面附上改好的第48行,可以直接替换:
chroot $SDCARD /bin/bash -c "apt-get -o Dpkg::Options::='--force-confdef' -o Dpkg::Options::='--force-confold' -y -qq install dnsmasq v4l-utils cheese swig python3-dev python3-setuptools bluez libncurses-dev" >> "${DEST}"/${LOG_SUBPATH}/install.log 2>&1
其实中还怀疑过一阵image-helpers.sh
,但最后发现并不是它的问题,它安装zsh的过程是成功的,实际是在安装zsh以后安装bluez卡住的,但是因为没有其他显示,所以感觉就像卡在了它上面。
参考链接:
https://debian-handbook.info/browse/stable/sect.automatic-upgrades.html
https://stackoverflow.com/questions/33370297/apt-get-update-non-interactive
https://docs.armbian.com/Developer-Guide_Build-Options/
https://github.com/orangepi-xunlong/orangepi-build