最近寻思着弄一台低功耗 linux
服务器用,只运行一些小程序,例如 Python
写的爬虫或者定时任务。网上看了一圈,什么树莓派呀啥的,一套下来要两三百了,有点不划算。突然想到我还有一android电视,闲置着。看了一下它的配置,ac 的 wifi + 1.6GHz 4核的A9 cpu,很强啦!(比树莓派强)
装个 Ubuntu core
!
本安装方法基于开源项目 Linux on Android,该项目让你能够在安卓手机上运行很多 Linux 发行版。
当然了本篇文章只讲解如何安装 Ubuntu 13.10 core
,也就是只有命令行的版本(作为服务器,不需要图形界面,最大化性能)
注:此方法理应适用于 android 版本大于4.2.2的手机,并且必须要 ROOT
!
注2: 如果你这手机只用作服务器的话,在条件允许的情况下,建议你再把手机系统刷成AOSP(安卓官方开源项目,无任何捆绑、后台软件,最大限度释放你老手机的性能),
注3?: (没想到吧,还特么有注3。。)如果你只是轻度折腾一族,强烈建议不要刷AOSP,不然中途放弃了,就不能看下面的教程了
准备
我们需要下载的文件有这么几个:
文件名 | 作用 | 下载地址 |
---|---|---|
ubuntu.img | Ubuntu 镜像 | core 种子文件 |
ubuntu.sh | 安装 Ubuntu 的脚本文件 | 百度云 密码: td75 |
androidterm.apk | 能在安卓上敲命令行的应用 | 百度云 密码: crzy |
busybox.apk | 增加更多命令行命令 | 百度云 密码:tizn |
当然这些我也都放在了百度盘里面,你可以打包下载 密码:tiut
。
下载好后,把 androidterm.apk
和 busybox.apk
安装到手机上,然后在手机存储(非外置内存卡)根目录下新建一个文件夹 ubuntu
,把 ubuntu.img
和 ubuntu.sh
都复制进去。
安装
准备工作都已经完成,开始安装吧!
- Busybox
先打开busybox
弹出的第一个窗口点叉关掉,然后在主界面中选择安装版本:1.26.2
或更高,安装位置选择为:/system/bin
,最后点击左下角的Install
(期间会弹出请求 ROOT 授权,请选择允许)等待安装完成即可; - Androidterm
等 Busybox 安装好后,我们就打开Terminal
(也叫 终端) 这个 App,出现在我们眼前的是命令行界面,我们键入cd /sdcard/ubuntu
点击键盘上的回车按钮(或者是 确认),他将会切换目录到我们之前存放ubuntu.img
和ubuntu.sh
的文件目录下。然后输入su
并确定,将会切换为 ROOT 用户,接着键入sh ./ubuntu.sh
即可开始安装 Ubuntu 了。
安装的时候会让你输入新建的 ubuntu root 用户密码,并再次输入以确认,然后会问你是否开启 VNC 服务,我没有图形界面,则输入 n 并确定,接着他又会问你,是否开启 ssh 服务,这个必须要啊!! 输入 y 并确定,最后会问你是否将刚才的输入保存为默认,输入 y 点确定即可。
等命令行开头的部分变成:root@localhost 时,就说明安装并启动完成啦!
使用
在使用前,要确保你的手机是连接了 WiFi 网络的(不然有啥用呢),然后在手机的命令行中,输入 ifconfig
,看里面能看到你手机的 IP 地址,你在其他设备上,用 root 用户 ssh 连接这个 IP 就行了!
注意
作为服务器,是不允许机器自动挂掉的,所以,你需要将 terminal
这个程序锁住,不让系统自动关闭它,并保持着为手机充电的状态,这样,一个自带 ups 的低功耗服务器就搭建成功了。
后记
可参考脚本https://github.com/szTed/android-linux-deploy
长期更新
,后记则是用作后期优化以及问题解决方案提供的一个板块
- 改 ARM 专用源
Ubuntu改源怎么操作不用这里说明了吧,下面列出两个比较快的源:
中科大源
deb http://mirrors.ustc.edu.cn/ubuntu-ports trusty main universe restricted multiverse
deb http://mirrors.ustc.edu.cn/ubuntu-ports trusty-security main universe restricted multiverse
deb http://mirrors.ustc.edu.cn/ubuntu-ports trusty-updates main universe restricted multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports trusty main universe restricted multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports trusty-security main universe restricted multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports trusty-updates main universe restricted multiverse
清华源
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ trusty main universe restricted multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ trusty-security main universe restricted multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ trusty-updates main universe restricted multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ trusty main universe restricted multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ trusty-security main universe restricted multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ trusty-updates main universe restricted multiverse
因为手机andorid4.2.2比较老所以使用老版本linuxdeploy-2.2.1-243各个版本如https://github.com/meefik/linuxdeploy/tags
到这里折腾了1个晚上终于搞定了!最后解决方案,因为外置sdcard不能直接读取,所以需要把下载的ubuntu.img镜像放在手机自带的scard/ubuntu/ubuntu.img下,在内存卡下直接新建一个ubuntu文件夹,然后再使用工具linux deploy手机应用
1,android手机获得root权限,方法网上千百种,我采用下载360超级root(当贝应用市场下载)
2,android手机安装linux deploy /Terminal Emulator(google应用商店)/filemager+把下载的镜像copy到sdcard/ubuntu/ubuntu.img /安装busybox(goole应用商店)
3,下载ubuntu的镜像文件ubuntu.img
https://sourceforge.net/projects/linuxonandroid/files/Ubuntu/13.10/
下载small版本2G的lxde桌面用户名ubuntu密码ubuntu
4,android手机打开usb调试模式(在手机设置关于AboutDevice里面的版本上点击5下,会打开开发者模式)
5,打开手机linux deploy点击右上角配置
chroot/Ubuntu/Architecture选armhf/xenial/source path(找一个中科院android版的源)/file/${EXTERNAL_STORAGE}/ubuntu/ubuntu.img /3500mb/ext4/username
其他都点勾然后默认
启动模式:1,在terminal中输入su 然后再打开linuxdeploy点击开始 done好了!
接下来再电脑下连接win+r输入cmd打开命令程序输入ssh root@192.168.1.2输入密码连接
修改22端口通过外网端口转发连接,使用top查看状态。
第二步 使用BusyBox来扩展安卓命令和应用
如果你已经通过其他方式安装好了BusyBox,可以跳过这步
打开已安装的BusyBox应用,SU会提示你BusyBox请求Root权限,选择GRANT允许
进入页面,选择右下角的INSATALL安装,YES确认安装
第三步 使用LinuxDeploy运行Linux
如果你已经通过其他方式安装好了Linux,可以……那你还看这篇教程干嘛
打开LinuxDeploy,界面是介样的
左上角三横是对LinuxDeploy程序的一些配置,右上角三点是对Linux运行的一些操作,右下角下载图标是对Linux的配置
由于我们是首次安装,需要先配置Linux,点击右下角 选armf
选择你想使用的容器 发行版本 架构 安装类型,最新的CentOS不知道为什么打不开SSH和VNC 慎用
不知道该怎么选的就像图里一样设置就行了
选择你的用户名 登陆密码 区域建议如图选择,否则可能不能正确显示汉字
同样的,不知道该怎么选的就像图里一样设置就行了
一些其他选项
设置完成后返回,点击右上角选择Install 安装
如果之后你更改了任何Linux的配置,需要点击Configure 配置而不是安装
SU又提示需要Root权限 允许
开始安装了,耐心等待
安装完成
点击START启动
启动完成
第四步 使用
可以使用手机里的终端模拟器或者通过SSH连接来操作你的Linux
另:DeployLinux其他的一些设置
点击界面的左上角进入
可以配置多个Linux 可以查看受支持的Linux 可以进入终端模拟器
点击Settings设置
可以根据需要开关和调整功能
以下是安装好之后的效果:
- Python3 安装
有了 Python 这服务器才像样,哈哈。
我这里选择的是安装 Python3
, 以下方式进行安装:
# 安装 python3sudo apt-get install python3 # 安装 python3 对应的 pipsudo apt-get install python3-pip
- crontab 任务
应用场景:
每天自动签到的爬虫程序。
经过反复测试,好像这个版本中的crontab
(通过 sudo apt-get install cron
安装)无法正常执行任务,在进程列表(ps -e | grep cron
)中也看不到其踪影。所以放弃之,用 python
来解决(如果你有其他解决方法,请不惜赐教):
下面例子是每秒打印一次 hello world 到标准输出
hello.py
# -*- coding: UTF-8 -*-import threading# 任务执行间隔时间,下面是 1s 也就每秒执行一次INTERVAL_TIME = 1def task(): # 在这里写下你要执行的命令,例如打印 HelloWorld print('Hello World!\n')def cron(): task() threading.Timer(INTERVAL_TIME, cron).start()# 调用 cron 函数,即开始任务cron()
执行的话就这样:
# 使用系统默认 python2.7 执行python hello.py# 使用新装的 python3 执行python hello.py
我们就能看见控制台每秒都打印出字符了。
进阶:让脚本在后台执行,_即使我们关闭当前 shell,它也执行_
# 当然这句执行后,除了返回一个 pID 啥都没有的,如果你以后的脚本要输出信息,# 就只需要将信息写入指定的 log 文件中即可nohup python ./hello.py &
以上命令执行后会返回一个 pID,如果你想结束这个后台程序,只需要这样
kill 对应的pID
如果 pID 记不得了,下面方法能帮助你:
# 如果是用 python 执行的后台程序,就输入以下命令ps -e|grep python
就能获得对应的列表,列表第一列就是 pID, kill 掉你想关的后台程序即可
- 中文乱码
应用场景:
是个中国人就可能碰到。。。
嗯,这个问题我现在用的方式是:不用中文?。
理由是:
- 对中文输出要求不那么强烈
- 正则匹配中可以略过中文,牺牲一丁点性能算不了啥事儿
- 支持中文的话要装一大堆包,秉承能不装则不装的心态。