一个在安卓手机上“一键”安装debian系统的脚本

先说点扫兴的:1. 手机必须有adb root权限;2. 安装后的debian只有命令行,没有手机上的图形界面。所以感到失望的朋友就不必往下看了,建议去网上查一下debian andorid,在debian官方的wiki里有一些项目貌似是支持图形界面的。

脚本的位置在 adb-install-debian 。像我所有的脚本一样,运行之前需确保已经配置了 我的system-config项目

1 原理

操作的原理在网上可以查到,这里简单描述一下。

  1. 在debian PC上用 sudo debootstrap --verbose --arch armel --foreign testing ~/tmp/debian 来装一个arm版的debian系统.
  2. 把这个系统打包传到手机上,再解包。
  3. 在手机上chroot进入这个debian目录,再完成剩下的配置。最主要的命令是 /debootstrap/debootstrap --second-stage ,只有完成这个命令之后,这个debian系统才算一个完整的debian,否则只是一个半成品。然后就可以用adduser加一个用户,用apt-get安装ssh/rsync等远程控制的程序。这里要注意的一点是一般的安卓手机/data分区都是nodev mount的,这样的话运行上面那条命令会出错退出。另外,su/sudo命令均不可用,因为/data分区一般都是nosuid mount的;但这应该不是问题,因为我们可以用root账号。

2 用途

一个短小精干的debian系统,用途有很多。

  1. 提供busybox、bash的编译。

    在安卓手机上的开发,没有busybox和bash会很痛苦。CyanogenMod项目可能已经提供了busybox,但不知道有没有提供bash——自从我安装了arm版debian之后,我就用它编了静态版的busybox和bash,然后把它们用prebuilt的形式往安卓代码库里一放,非常方便。

    但后来我发现了更好的方法,那就是emdebian项目,也是debian官方的,它提供了在x86平台上针对arm平台的交叉编译链,所以busybox、bash、tar我都改用PC来编了,关键是性能足够强劲,一眨眼就编完啊。

  2. 提供增量备份、还原手机的方法

    没错,在手机开发的过程中,用daily use的方法去测试公司的手机是非常重要的,英文里有个术语叫“eat your own dog food”,吃自己的狗粮。所以我一直坚持把自己所有的sim卡都插在公司提供的工程机上使用。给父母、爱人、亲戚打电话全部用工程机,不停地测试。

    但这会带来一个问题,就是有时候有些测试版本有严重的bug,导致手机不可用,只能重新刷机。可这样的话所有的App、照片、设置、联系人、账号、聊天记录就全都丢掉了。

    有了debian系统之后,我可以用rsync备份整个手机的/data分区,最关键的是,rsync备份是真正的增量备份,也就是说第一次备份完之后(一般有10几个G的数据),下一次再备份就只需要备份有改动的那些文件(一般几百兆左右),从而大大的节省时间。还原也一样,只要没有重新刷机,还原也可以增量还原。

  3. 提供增量刷机的方案

    没错!这是我刚刚实现的一个功能。

    刷机好像在安卓手机上是一件很简单的事情。的确是这样,但那都是对已经上市的手机,别人已经帮你做好了刷机工具的前提下。在手机开发的过程中,是不大可能有拿来就能用的刷机方案的。

    我们天天都需要刷机,因为内部版本天天都会更新。所以内部工具组的同事会在第一时间生产出一个刷机工具给大家用。

    但我不喜欢用这个刷机工具,因为在上面也提到了,每次刷完机,整个/data分区都没了,需要整个还原,这个还原可不是增量还原,而是10几20个G的完整还原,一般要耗时1小时以上…

    另外一个不喜欢用它的原因是它是Windows版的,而我需要一个Linux下能刷机的方案,否则老是切换工作环境,也很烦很没效率的。

    但有了debian之后,我可以像备份还原我的/data分区一样去改动我的/system分区了,真的是太方便了。另外一些非文件系统的分区一般都很小,直接把img文件adb push上去之后用dd命令写下去就好了。

    注意,adb自身有一个sync命令,也是干这事儿的,但我觉得非常不好用。有了rsync,干嘛还要去搞adb sync…

3 用法

我有另外一个脚本 ssh-to-phone ,每次运行一下就可以在手机上启动ssh服务。