继续对电视盒子android9进行折腾。
前面已经建立好了Entware环境,想安装caddy https服务器,主要看中它的文件展示系统,但是entware中没有,于是想装个debian玩玩。
主要参考https://github.com/Entware-for-kernel-3x/Entware-ng-3x/wiki/Installing-Debian-chroot-environment
运用debootstrap chroot方法安装debian,简单记录下遇到的巨坑,耗了我二天时间
opkg update
opkg upgrade
opkg install debootstrap
出现问题:
/opt/sbin/debootstrap[592]: can't create /opt/debian/test-dev-null: Permission denied
E: Cannot install into target '/opt/debian' mounted with noexec or nodev
搜索后参考这个答案
https://askubuntu.com/questions/409609/cannot-install-into-target-mounted-with-noexec-or-nodev-while-doing-qemu-deboot
使用命令
/system/bin/mount -o exec.dev,remount /opt
重新opkg install debootstrap顺利通过。
继续install-debian,执行命令之前更改了/opt/bin/install-debian的二个地方,
因为是armv7 的cpu,所以
想速度快一些,更改了国内的mirror
install-debian
又出现问题
/opt/bin/install-debian[40]: can't create /opt/debian/usr/sbin/policy-rc.d: No such file or directory
chmod: /opt/debian/usr/sbin/policy-rc.d: No such file or directory
/opt/bin/install-debian[44]: can't create /opt/debian/etc/profile: No such file or directory
/opt/bin/install-debian[47]: can't create /opt/debian/etc/securetty: No such file or directory
/opt/bin/install-debian[48]: can't create /opt/debian/etc/securetty: No such file or directory
/opt/bin/install-debian[49]: can't create /opt/debian/etc/securetty: No such file or directory
用winscp ssh进入盒子后发现opt下已经有debian文件夹,但是下面完全是空的,没有文件,考虑是权限问题,赋权并赋予写操作后,似乎顺利进行。
/opt/etc/init.d/S99debian start
start-debian
结果似乎是进入了debian中,也有/#,通过passwd命令也新建了root:ZHANG0114的帐户,但是总少了些东西,因为apt或apt-get update 或者 apt install locales时总会报错,
Err:1 http://ftp2.cn.debian.org/debian stable InRelease
Temporary failure resolving 'ftp2.cn.debian.org
很明显是网络不通,运用service --status-all查看服务,networking是?,心想应该是没有启动,于是开始了大搜索,debian的网络设置,当时想,debian作为chroot运行,是不是像是虚拟机一样,可以有个不同的ip地址但和主机是在同一网段内的。
~ # /opt/etc/init.d/S99debian start
Starting Debian services...
WARNING: No Debian services defined.
Please, define Debian services to start in /opt/debian/chroot-services.list file!
One service per line. Hint: these are script names from Debian /etc/init.d/
很明显是没有service出现,于是新建了/opt/debian/chroot-services.list文件,在其中写入networking
重新运行:
~ # /opt/etc/init.d/S99debian start
Starting Debian services...
[....] Configuring network interfaces...Running in chroot, ignoring request.
RTNETLINK answers: File exists
ifup: failed to bring up eth0
failed.
从这个“Running in chroot, ignoring request”应该是网络不需要设置的,但当时没有意识到这一点,
查看opt/debian/etc/init.d/networking得知,重要的设置文件是opt/debian/etc/network/interfaces,当时很惊异原始的设置就只有这一行
source-directory /etc/network/interfaces.d
心想这肯定不行啊,于是参考网上的教程设置成了
source-directory /etc/network/interfaces.d
auto lo eth0
iface lo inet loopback
iface eth0 inet static
address 192.168.1.118 #这个地址不能是他的真实地址,chroot应该像是虚拟网卡,和真实地址同一网段,静态给他另一个地址,当时的想法。现在来看是错误的。chroot下debian是不需要设置网络的。
netmask 255.255.255.0
gateway 192.168.1.1
重新service networking start(restart)后盒子的以太网地址一般出现二个ip,但有时候ssh会断开,有时候会断网,总之状况不断,因为断网后我必须打开盒子重新开机才行,我连的是有线网络,盒子没有wifi设置那样对有线进行设置的地方。
但无论如何设置,apt update命令始终出现网络的问题
可以看到ping是没有任何问题的,网上的答案大部分都是resolv.conf的DNS设置更改,我改了无数遍问题依旧。也有说是opt/debian/apt/etc/source.list问题,后来参考https://wiki.debian.org/SourcesList#Name_Resolution的解决方法,直接将其中ftp.debian.org ping后更改成了IP,
opt/debian/apt/etc/source.list:
deb http://130.89.148.12/debian stable main
仍然出现问题
继续搜索,终于不负有心人,通过近二天的搜索,终于发现在android下apt的group问题才会出现这个情况,
这个应该是android下apt问题的通病了吧,stackoverflow上高人很多,感谢
https://stackoverflow.com/questions/43724042/apt-get-update-fails-on-chroot-ubuntu-16-04-on-android
最后参考https://stackoverflow.com/questions/36451444/what-can-cause-a-socket-permission-denied-error 中完美解决
前后的passwd区别就是
apt group从65543变成了3003,总之这样以后问题解决了
apt install也能用了