在Android中运行Linux

简介

Linux Deploy是在Android通过chroot方式部署各种Linux发行版本的开源工具,并且在Google Play市场上提供了一个安装程序,非常方便将手机操作系统转换成完整的Linux系统:

  • 支持各种发行版本:Debian, Ubuntu, Kali Linux, Arch Linux, Fedora, CentOS, Gentoo, openSUSE, Slackware, RootFS (tgz, tbz2, txz)

  • 支持各种CPU结构:ARM, ARM64, x86, x86_64, emulation mode (ARM ~ x86)

  • 多种控制界面:CLI, SSH, VNC, X, framebuffer

  • 多种环境:XTerm, LXDE, Xfce, GNOME, KDE, other (manual configuration)

安装Debian

初始化要求

检查自己设备是否成功root,可以参考How to Check If Your Android is Rooted ,从Google Play Store下载安装joeykrim Root Checker,这个工具只用来检查是否成功root,不会对系统做任何修改,是一个安全的工具。

  • 从Google Play Store安装Linux Deploy软件包,然后启动Linux Deploy,按照其引导介绍界面,点击Install BusyBox

  • 从Google Play Store安装BusyBox,安装完应用程序,需要先点击应用程序图标

  • 我需要的是比较简单的字符终端,所以特意选择去掉了安装LXDE图形界面,也不需要安装VNC,只要安装 SSH Server

  • 确保网络联通情况下,点击'Install',安装过程是自动的,最后可以看到<<< end: install表示安装完成。

安装对网络有要求(景德镇访问非常不稳定),实际上我安装了多次才成功

默认启动的账户是android密码是changeme,请立即修改帐号密码。

  • 安装后通过ssh登录手机中运行的Debian Jesssie,可以看到系统占用了4G空间,对于一些常规的使用已经足够

可以在平时采用iPad Pro登录到Nexus 5手机的Linux操作系统,使用这个环境来做一些相关的维护和开发工作。

安装完成后的一些简单维护

作为服务器爱好者,安装的debian系统自然是选择最小化安装,安装完成后,可以做一些简单的包管理配置以便完善系统

apt-get update
apt-get upgrade
apt-get install dnsutils

由于网络不稳定等原因,在线安装debian的时候,有可能部分软件包安装存在问题,可以通过debian在线搜索软件包找到对应包进行补充安装。

主机名修改

hostname nexus5
echo nexus5 > /etc/hostname
sed -i 's/localhost/localhost nexus5/g' /etc/hosts

ARMHF versus ARMEL

参考 ARMHF versus ARMEL

  • armel 二进制程序是兼容性较好的浮点计算模式,但是速度较慢。支持ARMv4指令集

  • armel 提供了直接的硬件浮点支持,速度比armel快,但是不兼容老的架构。支持ARMv7平台

Init system

Deploy Linux 2.0开始支持init system,可以在启动时执行服务脚本。分为以下两种方式:

  • run-parts - run scripts or programs in a directory

  • sysv

安装Kali Linux

请参考 If you have issues, read this post. !!! [L.Deploy Kali Linux Mini Documentation] #183

官方文档参考 Kali Linux Mini Documentation

  • 手机必须ROOT

  • Installation Type : File

  • File syste: ext2

  • 磁盘空间要使用10G - 在安装kali-linux-full这个meta包验证发现,空间需求超过了6GB

  • 选择桌面环境,VNC,SSH Server,以及X Server作为可选包。但是不要选择Kali Components

  • 不要将用户名修改成 root

  • 可以挂载Android文件系统,方便进行开发:但是不要挂载/data目录,该目录下很多系统目录会导致df命令显示/cache等目录无法访问。所以,该为挂载/data/data目录,就可以访问Android中的很多应用数据。

  • 安装以后不要直接用启动按钮启动,使用终端模拟器运行以下代码:

su
/data/data/ru.meefik.linuxdeploy/bin/linuxdeploy shell
sudo apt-get update

此时还没有完成安装,Kali Linux有一个meta包( https://www.kali.org/news/kali-linux-metapackages/ )需要安装:

sudo apt-get install kali-linux-full

请参考 Kali Linux Metapackages ,Kali Linux提供了多种安装模式:

  • kali-linux-full 所有你熟悉的Kali工具

  • kali-linux-top10 每个子类提供最常用的10个工具

  • kali-linux-gpu 依赖GPU来完成的一些特定工具,如果选择 kali-linux-all 也会包含这个子集

这个kali-linux-full需要占用4G以上空间,而Deploy Linux最初只给这个Linux镜像文件提供了2G的空间,所以会导致无法继续安装。

参考 How to change image size #395提供了一个重新调整镜像文件大小的方法:

例如,增加4G空间

dd if=/dev/zero bs=1048576 count=4096 >> /mnt/sdcard/linux.img
e2fsck -y -f /mnt/sdcard/linux.img
resize2fs /mnt/sdcard/linux.img 6144M

注意:这里resize2fs需要给出实际设置的更改文件系统大小,例如这里是6144M(6GB),否则还是会保持原来的空间大小。(测试了在linuxdeploy设置安装镜像文件设置成6G,但是实际安装时候依然生成了2G的空间(BUG?),还是通过上述方法调整的镜像文件系统大小。)

另外,根据实际经验,如果要安装kali-linux-full需要超过6G空间,建议10G。

参考How to resize ext3 image files

上述问题可能也是resize2fs的版本问题,从How to Grow an ext2/3/4 File System with resize2fs文档看不加参数应该也是可行的。

始终报错E: Failed getting release file

在安装Kali Linux时,总是遇到不能下载Release文件或者其他文件。虽然从浏览器访问 http://http.kali.org/kali/dists/kali-rolling/Release 实际上都正常。

Fails to download the release file #84 有一个建议是把网站镜像下来,然后修改DNS解析,从自己的服务器安装。这个思路可以借鉴。

创建Kali Linux镜像网站的方法参考 How to create a mirror repository from kali

也可以尝试Kali Linux的镜像网站列表 https://http.kali.org/README.mirrorlist ,最后,采用 http://mirrors.ocf.berkeley.edu/kali/ ,虽然速度不快,但是比较稳定,最终完成安装。

参考

Last updated