文章更新

20161025 初次成文
20170422 微小修正

问题提出

因为小苏在很久之前就听说在安卓上可以跑Linux系统,期间各种工具也试了很多(包括这个),但是要么是使用方法不得当,要么是和ROM不兼容,总之是一直都没成功,所以这类软件总是下了用,用了卸,想起来的时候再下了用...无限循环。直到之前,看了一篇简单的关于Linux Deploy的使用教程之后茅塞顿开,在Android上成功跑起了Ubuntu,所以写这篇文章来记录一下。

解决方案

Linux Deploy是一款可以在Android设备上部署Linux环境的应用,在小苏这种非专业人士来看,其原理大概是在Android的Linux层跑一个chroot或者proot容器,然后再在容器中运行我们准备好的另外一个Linux系统。值得注意的是,这与我们熟知的虚拟机技术不同,新的Linux系统将和Android系统平行运行(非专业解释不要深究)。

在使用Linux Deploy之前,我们需要获取手机的Root权限,获取Root权限后,由于原机自带的Linux命令集不完整,我们需要安装Busybox来扩充Linux命令集。

Screenshot_20161025-202736.png

安装完成后,我们将使用Linux Deploy在Android设备上部署Ubuntu系统:

点击界面最右下方的"下载"图标进入配置文件的设置界面进行如下设置(我也不知道开发者为什么会用这么一个"下载"图标作为配置文件设置界面的图标):

Containerization method:"chroot"

发行版:"Ubuntu"

架构:保持默认值

发行版版本:"yakkety"(即Ubuntu 16.10)

源地址:http://mirror.tuna.tsinghua.edu.cn/ubuntu-ports/(这里我们采用默认方式部署,即在软件源中下载Linux组件和必要的软件包的方式部署,因为默认源速度不佳,为了不下载一天一夜,我们这里使用的是清华大学的开源镜像源,如果你采用Repository方式部署(之后的文章会讲到),这里的"源地址"应该填写Repository文件(后缀为tgz/tar.gz)文件的本地或远程路径)

安装类型:这一选项的话小苏有两种建议,"目录"和"文件",如果对Linux不太熟悉并且/data分区剩余空间≥2g的话,小苏建议使用"目录"的安装方式,如果对Linux比较熟悉或者/data分区剩余空间<2g的话,小苏建议使用"文件"的安装方式。在这里,为了操作方便,小苏使用"目录"的安装方式,但在实际使用中,为了不占用/data分区空间,小苏建议大家采用"文件(镜像)"的安装方式。

安装路径:"安装路径"选择"目录"时,这个选项将定义系统安装在哪个路径中,默认路径为${ENV_DIR}/rootfs/linux,即安装在/data/user/0/ru.meefik.linuxdeploy/env/rootfs/linux目录下。"安装类型"选择"文件"时,这个选项将定义Linux系统安装在哪个镜像文件中,默认值为外置存储/linux.img

镜像大小(MB)(安装类型"选择"文件"时可用):这个选项将定义系统所在镜像文件的大小。系统安装之前将在安装目录创建一个大小为设置的镜像大小的空文件用来存放系统文件和数据(相当于新Linux系统的总磁盘空间)。小苏建议不要用默认值,填写2048m足够了。

文件系统(安装类型"选择"文件"时可用):选择"自动"。

用户名:这个选项为登录系统时的用户名,默认为"android",可以随意更改。

用户密码:这个选项为Ubuntu系统中用户的密码,可以根据自己的习惯填写。

Privileged Users:保持默认值"root"

DNS服务器:可以保持默认值,也可自定义填写DNS服务器地址(如114.114.114.114等)

本地化:建议保持默认值POSIX,如果有其他需求,比如需要让ssh返回结果为中文或者让图形界面的显示语言为中文时,选择"zh_CN.UTF8"

INIT/MOUNTS项:若有需求时可以设置,无需求可以忽略。

允许SSH服务器启动:打开此选项

SSH设置:保持默认

允许图形界面启动:若有需求可以设置,这里暂时不打开这个选项(之后的文章将会为大家介绍如何部署图形界面)。

result-2016-10-25-20-32-07.png

设置完成后,按返回键返回到应用主界面,按下菜单键,选择"安装"开始Linux系统的安装,安装过程中需要一直保持网络连接(建议在WIFI下安装,大概需要几百兆流量)。

当看到终端输出">>>deploy"时,代表安装已开始:

Screenshot_20161021-160229.png

当看到终端输出"<<<deploy"时,代表安装已完成:

Screenshot_20161021-162913.png

点击主界面下方的"启动"按钮可以启动新安装的系统,点击"停止"可以停止系统。

Screenshot_20161025-192219.png

至此,系统部署部分描述完毕。

部署完毕后,我们需要用到lJuiceSSH/ConnectBot之类的SSH工具来登录系统(这里以JuiceSSH为例)。

成功启动系统后我们打开JuiceSSH,依次点击 "连接" - 右下角"+"按钮 进入新建连接界面:

昵称:可随意填写,我们以"Localhost - Android"为例
类型:SSH
地址:127.0.0.1

Screenshot_20161025-191426.png

认证:选择"新建"跳转到"新建认证"界面:
昵称:同样可以随意填写,我们同样以"Localhost - Android"为例
用户名:填写"配置文件设置"界面的"用户名",默认为android
密码:填写"配置文件设置"界面的设置的"用户密码"

Screenshot_20161025-191457.png

点击右上角的"√"图标保存并返回到"新建连接"界面,再次点击"√"图标保存,在"连接列表"中点击刚刚新建的这个项目连接到我们刚刚部署好的系统,连接成功后界面如下:

Screenshot_20161025-192244.png

因为我们是通过普通用户android登陆系统的,接下来我们需要设置超级用户(root)的密码并且以超级用户的身份登陆系统:

在终端中键入:

sudo passwd root

终端将会提示用户输入root用户的密码并且再次输入一次以确认(输入密码时密码将不可见,连*都不会显示),设置完毕后,在终端键入命令su并输入刚刚设置好的root用户密码即可切换到root用户。

文件的管理:
如果你是通过"目录"方式部署的Linux系统,那么你可以直接使用R.E.管理器访问/data/user/0/ru.meefik.linuxdeploy/env/rootfs/linux即可管理新系统中的文件,如果你是通过"文件"方式部署的Linux系统,管理文件等操作就得依靠SFTP了(当然使用SSH方式也没问题,但是小苏还是觉得SFTP更方便些)。当我们使用普通用户身份登录SFTP时,由于权限原因,我们无权操作大多数文件。所以我们需要以超级用户身份登录SFTP。但默认配置是不允许root用户登录SSH和SFTP的,所以我们需要进行如下设置:

在Linux Deploy中启动部署好的系统,以android用户登录到SSH,在终端中执行:

sudo apt-get install -y vim #安装vim编辑器

当然啦,使用系统自带的vi编辑器也是可以的,如果你对vi编辑器比较熟悉也可以使用vi编辑器编辑文件。vim编辑器安装完成后我们继续在终端执行:

vim /etc/ssh/sshd_config #使用vim编辑器打开/etc/ssh/sshd_config这个文件

打开文件后,键入i进入编辑模式,点击终端任意空白位置可以弹出特殊键键盘,使用上下光标滚动浏览文件,在文件的#Authentication部分找到PermitRootLogin这一项,将其改为yes,改动完成后点击特殊键键盘中的"ESC"键退出编辑模式,键盘键入:wq!保存并强制退出文件完成对文件的编辑操作。

Screenshot_20161025-194835.png

打开Linux Deploy,停止后再启动Linux系统。打开"Turbo客户端" - 侧边栏 - 创建一个新账户 - SFTP 来新建一个SFTP连接(部分文件管理器,比如ES文件浏览器(ESFileExplorer),SE文件管理器(SolidExplorer)也带有SFTP功能,如果不想安装TurboFTP的话,可以用它们来代替):

Screenshot_20161025-200159.png

其中:

用户名为:root
密码为刚刚设置好的root用户的密码
主机名为:127.0.0.1

其他项保持默认,点击右上角的"保存"图标保存配置,在侧边栏的连接列表中我们将以root用户连接到SFTP并管理文件:

Screenshot_20161025-200916.png

当然,修改完sshd_config文件,停止并启动Linux系统后,你也可以直接以root用户连接到SSH了。

介绍完安装,介绍一下卸载吧~你可以通过以下方法完全卸载Linux Deploy:

1.如果你使用"目录"的方式部署的Linux系统,那么在Linux Deploy内"停止"Linux系统,接着直接卸载Linux Deploy并重启手机即可完全卸载;
2.如果你使用"文件(镜像)"方式部署的Linux系统,你需要先"停止"Linux系统,然后删除放置在内置存储下的镜像文件,镜像文件路径就是上文在部署Linux系统之前提到的"安装路径"这一项,如果此项未经修改,则镜像路径为外置存储/linux.img,接着卸载Linux Deploy并重启手机即可完全卸载。

相关内容

使用上述方法仍然部署失败?试试这个:
Linux Deploy:使用Repository部署Linux系统(推荐方案)

还是部署失败?这是备选方案:
备选方案:在Linux Deploy上使用镜像部署Linux系统

如果你想部署图形界面,请看这篇文章:
Linux Deploy:部署图形界面环境

资源下载:

Linux Deploy

酷安网/Google Play

JuiceSSH

酷安网/Google Play

Turbo FTP

ApkPure/Google Play

标签: ubuntu, linux deploy, 干货

已有 55 条评论

  1. OK,已成功。

  2. 感谢分享。

  3. 萌新

    感谢教程~
    请问,为什么我使用文中的源地址下载的ubuntu文件大小只有90M啊?(以目录方式安装)
    以文件方式安装的确创建了2048M的文件,但内容有什么就不得而知了.......
    结果是,ssh服务开不起来,vnc开起来了但是连接不上........

  4. 萌新

    下载了别人的kali镜像,在LD设置好了可以启动了........ssh连接成功,然而vnc还是开起来了连接不上........
    5900,5901,5902都试过了........
    后来发现输入startvnc,vncserver都提示找不到命令......
    这是没安装vnc吗?

    1. 孤城

      安装vnc
      可以使用sudo apt-get install vnc4server命令安装

      1. 萌新

        已经解决了23333
        LD自动下载的vnc似乎不是vnc4server,那个vnc好像是可以把分辨率,启动端口,是否只允许本地连接等设置写到文件,直接使用startvnc执行就可以了...
        而vnc4server似乎不行(或者我没发现?)
        顺便问下,apt和apt-get有什么区别吗?

        1. 孤城

          不知道有没有区别

  5. 萌新

    成功安装了vnc.....也运行了X-server
    然而LD设置里的vnc开了还是没用,只能通过ssh进入系统然后启动vnc或者xserver.....
    目前的问题只有:
    如果突然ssh开不起来了该怎么办.....
    如何使用其他linux系统?(LD自带的下载似乎不靠谱.....难道只能靠直接找img镜像了吗)

    去Google了一下然而还是没找到答案(关键词不对?),希望大神能指导一下......非常感谢~

  6. 萌新

    在"图形子系统"里面,除了"VNC"外,还有"X11"和"Framebuffer"的选项,请问这是怎么使用的呢?

    1. 之后我会写一篇文章,直接提供我部署好的镜像。

      你说的那篇文章我也读过,它文章中的内容可能已经不适用于当前版本的Linux Deploy了,并且我也成功部署了Kail Linux,在之后我会把过程写出来~

      至于另外两个图形界面,因为没有接触过,所以暂时不清楚。

      1. 魔龙卍解

        为啥我修改了yes后,键盘输入了wq!后还是没用?

        1. 修改完文件的内容后,按下 Esc 键,然后再输入:wq!存储文件的内容并退出 vim 编辑器(有个英文状态下的冒号不能丢掉)。

          修改完毕后,你可以执行:
          cat /etc/ssh/sshd_config
          查看一下修改的内容是否成功被存储。

          如果文件修改成功的话,尝试停止再启动 Linux 系统,
          或者在 SSH 中执行:
          sudo service sshd restart
          试一下是否可以以 Root 用户登录 SSH 或者 SFTP。

          1. 魔龙卍解

            但是并没有退出vim编辑器

          2. 魔龙卍解

            另外,我用的es文件管理器,你那个软件找不到!

          3. 魔龙卍解

            大佬啊,还有个冒号………我这才弄懂…

            1. 哈哈哈那个冒号的确是不好发觉。抽空我把这篇文章再小改一下~
              至于 Turbo FTP,文章中的链接已经失效了,所以我单独上传了一份 apk,点击下面的链接即可下载:
              Turbo-Ftp-Pro_3.6.apk

              1. 魔龙卍解

                老铁,JDK知道怎么安装么?

              2. 这个不是特别清楚,因为没玩儿过 JDK ...
                不过既然 Linux 系统已经部署成功,那么理论上网络上同一系统的教程在这个 Linux 系统上都是能用的。
                比如你部署成功了 Ubuntu ,那么网络上关于 Ubuntu 安装 JDK 的教程应该都是可用的(前提是教程没错,并且能跟得上时代的话),具体的安装方法可以百度或者谷歌搜索一下。

              3. 魔龙卍解

                有教程,就是酷安里弄黑域补丁那个,我看不懂……

              4. 我之前也收藏了那个教程,刚刚回过头来看了一下,有点麻烦...
                想用黑域的话,我还是建议用 NeoTerm 安装 android-platform-tools 软件包,然后打开网络 adb 调试,在 NeoTerm 里执行黑域提供的 adb 命令来启用黑域(必须是 Play 版黑域)。之后我会写一篇教程,大概一周之内会发。

              5. 魔龙卍解

                可以私发个么,

              6. 还没写...
                你也可以在酷安找找有没有"黑域一键补丁"的 apk ,里面的一键打补丁功能虽然不能用了,但是用网络 adb 调试来启用黑域的功能应该还是能用的,你可以先用那个工具启用黑域,至于"黑域一键补丁"的安装包...我手头也没有。

              7. 魔龙卍解

                那好吧

    2. 这是我部署好的镜像:

      http://pan.baidu.com/share/link?shareid=955940514&uk=3357893188

      建议下载ubuntu.zip的那个。解压后会释放出一个2048m的镜像文件,你只需要按照文章中的内容修改一下Linux Deploy的配置文件(就是"下载"图标的那个地方)的安装类型(镜像),安装路径,用户名和密码(用户名android,密码sun12345)就可以了,其他的保持文章中介绍的就好~

      在我的镜像中没有部署vncserver,在"配置文件"中勾选"启用VNC"并且选择好桌面环境之后,你可以在Linux Deploy主界面中按下菜单键,选择"配置",重新配置一下vncserver,Linux Deploy会自动部署好vncserver和桌面环境。

      1. 永远的萌新

        非常感谢~我会试试看的~

      2. 萌新

        选择了vncserver,尝试了各种桌面环境.......然而似乎中文乱码了........
        本地化选择了zh_CN.UTF-8,测试了不行,再切回POSIX,貌似变成英文了........
        然而找不到设置语言的选项QAQ

        话说,这种镜像要如何制作呢?
        能否把一个已安装完成的linux系统制作成这种镜像.......
        比如说CDLinux什么的........

        1. 以Ubuntu为例,在英文状态下执行:

          sudo apt-get install -y ttf-wqy-zenhei

          然后再切换到zh_CN.UTF-8就不乱码了~

          这个镜像实际上就是在我的手机上以镜像方式部署了一个Linux系统,部署好之后再把这个镜像提取出来~

          把在Linux Deploy支持范围之外的,并且是已部署好的Linux系统打包成镜像应该是可以的,而且也应该能在手机上运行,不过因为没有电脑的原因,对chroot也没有什么研究,所以目前也没有尝试过~

          1. 萌新

            谢谢,已经成功了~
            果然图形界面什么的好麻烦,还是下个core版镜像安安静静打命令好了~

    3. 孤城

      "Framebuffer",好像是直接输出到手机屏幕,我的显示出来了,但是操作不了

      1. 萌新

        大概是驱动什么的问题?反正我的直接就是黑屏.....

        1. 孤城

          可能是输出的路径错了,可以在那个图形界面的设置里面更改

          1. 永远的萌新

            不知道怎么确认路径......之前貌似找到过一个命令,可以看到输入输出设备什么的....然而已经忘掉了

  7. 萌新

    突然发现个问题,Linux Deploy貌似不支持https链接......

    1. 一般的镜像站都支持http/https双协议的,所以如果碰到https协议的软件源地址,把它改成http就能用了。

  8. 感谢LZ无私奉献。可以说是全网最为详细的Linux Deploy教程了,为小白指路。感谢感谢~

    1. 谢谢支持~
      (。・ω・。)ノ♡

  9. honoka

    你好,安卓4.1平板安裝ubuntu系統後,不進行安裝ssh組件,直接顯示>>>deploy。ssh啟用已打勾,怎麼回事?

    1. 可以把终端的输出复制一份给我吗?

      1. honoka

        你好,截圖發到哪裡?

        1. 直接复制终端输出内容,粘贴到这里就可以~

  10. honoka

    你好,好像不能複製終端內容?就是這帖的第四張圖裡的get:1.2.3之類的輸出沒有,直接第三張圖就顯示

  11. honoka

    直接第三張圖就顯示

  12. honoka

    顯示

  13. honoka

    直接第三張圖就顯示deploy,ssh顯示fail。

  14. honoka

    你好,從Install core system package開始就沒有了,直接顯示deploy,然後開啟系統ssh顯示fail。

  15. honoka

    你好,是不是沒有swap空間就裝不了啊?system空間只有0.8g。容量不夠嗎?

  16. [...]Linux Deploy:在Android上部署Linux[...]

  17. 庄园

    我在天猫魔盒上安装好debian 了,但是无法用在同局域网内的PUTTY连接,提示access denies 之类,用的配置时设定用的用户名和密码,请问什么原因。

  18. jokerfrankz

    我三星s4 I9500安装,连接不上,ssh和vnc的端口都开启fail,提示说我设备不是loop设备

  19. gzj

    那个发行版yakkety怎么弄,Linux deploy没有啊,求解,谢谢

  20. Hyt

    ssh 总是失败。安装好几次都不行

  21. Hyt

    ssh 总是失败。安装好几次都不行

  22. Hyt

    ssh 总是失败。安装好几次都不行

  23. littlebugk

    首先镜像地址建议改为阿里云,速度超快
    http://mirrors.aliyun.com/kali

    然后我照着你的视频教程做的,vnc无论在手机还是电脑上面打开都是黑屏,显示unencrypted connection,按网上教程按回车什么都没用。

    然后按网上xammp安装教程也是失败,最后 安装 宝塔 成功。

    现在正在安装环境。

添加新评论