Android完美运行Debian

其实已经有一个在手机上部署linux的软件——Linux Deploy,不过安装过后死活开启不了ssh,另外上面附带的linux发行版部分收费,在安卓上跑linux其实没那么复杂,跑linux系统无非需要kernelrootfs,因此可以直接使用Androidkernel,只需一个完整的rootfs,做好与android系统隔离。另外做好与android系统的虚拟文件映射。

下面这种方法理论适用于所有支持armv7架构的发行版,这篇文章我使用debian_arm进行测试,其他发行版本也大同小异。

必备工具

  • 终端模拟器(提供命令行环境)
  • BusyBox(提供chroot命令)
  • ROOT权限(映射虚拟文件系统)

安装终端模拟器

安卓平台的终端模拟器有很多,这里我使用的是Termux前面的文章介绍了这个神器,最好配置好sshd服务方便后续的操作。

下载根文件系统

下载链接: debian_arm

1
2
3
(termux)$ wget http://hub.meefik.ru/rootfs/debian_arm.tgz
(termux)$ mkdir debian_arm && cd debian_arm
(termux)$ tar zxvf debian_arm.tgz

初次在termux下运行可能提示缺少命令,按照上面的提示安装即可,建议首先看看我前面关于这个神器的介绍

解压之后会看到被debian系列钦定的根文件系统,注意这时候的虚拟文件系统sysproc还不存在。

挂载虚拟文件系统

这个步骤需要busybox提供的mount命令和root权限。

首先来到debian未来的根目录下创建这几个虚拟目录并且挂载。

1
2
3
4
5
6
7
(termux)$ cd /data/data/com.termux/files/home/debian_arm
(termux)$ su
(termux)# mkdir -p dev/pts proc sys
(termux)# /system/xbin/mount -o bind /dev/ dev/
(termux)# /system/xbin/mount -t devpts devpts dev/pts
(termux)# /system/xbin/mount -t proc proc proc
(termux)# /system/xbin/mount -t sysfs sysfs sys

/system/xbin/mount是因为我切换到root用户后PATH环境变量没有更新,如果报错换成你自己的busybox安装目录。

切换根目录

以上配置完毕后即可切换根目录

1
(termux)# /system/xbin/chroot /data/data/com.termux/files/home/debian_arm /bin/su -

这个时候理论上会报出LD_PRELOAD路径中缺少相应的库。

1
ERROR: ld.so: object 'libsigchain.so' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.

使用如下命令解决报错。

1
(debian)# unset LD_PRELOAD

新系统环境配置

接下来就进行新系统环境的一些配置。

修改软件源

修改/etc/apt/sources.list,详细过程可以参考使用说明

1
(debian)# sed -i 's/httpredir.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
检查网络环境

修改DNS设置

1
2
(debian)# echo "nameserver 114.114.114.114" > /etc/resolv.conf
(debian)# chmod 644 /etc/resolv.conf

查看配置信息

1
(debian)# ifconfig && route -n

安装图形化界面

图形界面的安装包相当大,容量小的同学谨慎安装

1
(debian)# apt-get install x-window-system-core gnome-core gdm
安装VNC

原来写过一篇树莓派安装vnc的文章,在这篇文章的最下面。

下载VNC客户端 注意填写端口的正确性,默认5901

由于我没有安装图像界面,所以vnc看到的就是命令行。

关于BUG

目前看到的bug就是screenfetch无法读取系统信息

1
2
/usr/bin/screenfetch: line 3572: /dev/fd/62: No such file or directory
/usr/bin/screenfetch: line 3573: 3: Bad file descriptor

不过查看硬件信息的命令可以正常显示

1
2
cat /proc/cpuinfo
cat /proc/meminfo

所以就不能愉快的zb了…另外还有什么bug欢迎留言。

分享到: