在安卓上使用运行debian

人在外面,有时候可能需要用linux做一点小事情。但是呢又不想带电脑,尽管可以通过ssh连接你的pc或者vps来干,但是这样还是不是如何方便。那么我这个方法就有了意义。
我这个方法主要是通过编写一个适合于你的设备的initscript并执行它来引导启动在你安卓设备上的一个linux发行版文件系统。在这里我用debian为例,但是这个方法理论上使用于所有。
注意:如果你的设备没有获得root那么你也许就可以退出这篇博文了。

准备需要的文件与工具

1.busybox

需要使用到busybox中的chroot,mount,mdev。如果你的手机上那么就不用安装。

2.终端模拟器

需要访问本地shell

3.debian的文件系统

因为以debian为例所以是debian,也可以是其他。请注意这个文件系统一定要是兼容你处理器架构的。这个文件系统可以自己用debootstrap制作。也可以直接下载linuxdeploy仓库里面的使用,在文章的最后面我将贴出一部分linuxdeploy仓库里面的linux发行版的文件系统,如果你愿意支持linuxdeploy的作者的话可以去linuxdeploy里购买这些东西,毕竟人家也是要吃饭的。

开始

1.首先需要把处理一下这个下载的debian文件系统。我这里是把这个文件系统放在data分区的某个目录。你可以单独放在一个分区或者制作成镜像文件,这样的隔离效果可能会更好吧。
2.把安装在系统里的静态busybox拷贝一份到你debian文件系统里面去,因为initscript引导启动这个debian的时候需要初始化dev,但是Debian的udev依赖于内核中的devtmpfs,然而Android 的内核多半精简掉了这个组件。所以我们需要使用busybox中的mdev来代替udev。如果你安装的busybox没有包含mdev那么需要换一个busybox。
3.编写适用于你的设备的initscript,这个需要根据个人的手机来编写但是大多是通用的。下面我贴出我的initscript。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#! /bin/dash

# 初始化用户变量
export PATH=/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/local/sbin
export HOME=/root
export SHELL=/bin/bash
export TERMINFO=/etc/terminfo
export LD_LIBRARY_PATH=/lib:/usr/lib

#设置主机名
hostname JHB

#挂载虚拟文件系统
mount sysfs /sys -t sysfs
mount proc /proc -t proc
mount tmpfs /dev -t tmpfs
busybox mdev -s
mkdir /dev/pts
mount devpts /dev/pts -t devpts
mkdir /dev/shm
mount -t tmpfs tmpfs /dev/shm
chmod -R 777 /dev/
mount tmpfs /run/lock -t tmpfs -o rw,nosuid,nodev,noexec,relatime,size=5120k
clear
/bin/bash

这个script的保存的位置可以随意,但是必须要在你的debian文件系统里面,我建议是放在debian文件系统的根目录。
4.测试并运行吧,然后根据自己的需求进行一定修改。在终端里输入:

1
chroot 你的debian文件系统的目录 以debian文件系统为根目录initscript的位置

一部分linuxdeploy仓库的linux发行版文件系统

archlinux_arm
archlinux_x86
centos_arm
centos_x86
debian_arm
debian_x86
就提供这六个吧,想用其他的可以自己去linuxdeploy里购买,但是其实只要知道自己的需要然后根据我上面的链接改一下就好了。

你可以考虑向我捐赠