老 Android 手機裝 Ubuntu 用做 低功耗伺服器
作 zuō
最近尋思著弄一臺低功耗 linux
伺服器用,只執行一些小程式,例如 Python
寫的爬蟲或者定時任務。網上看了一圈,什麼樹莓派呀啥的,一套下來要兩三百了,有點不划算。突然想到我還有一個小米3觸控不靈,閒置著。看了一下它的配置,ac 的 wifi + 2.3GHz 的 cpu,很強啦!(比樹莓派強)
裝個 Ubuntu core
!
本安裝方法基於開源專案 Linux on Android,該專案讓你能夠在安卓手機上執行很多 Linux 發行版。
當然了本篇文章只講解如何安裝 Ubuntu 13.10 core
,也就是隻有命令列的版本(作為伺服器,不需要圖形介面,最大化效能)
注:此方法理應適用於 android 版本大於4.3的手機,並且必須要 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 的低功耗伺服器就搭建成功了。
後記
長期更新
,後記則是用作後期優化以及問題解決方案提供的一個板塊
– 改 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
– Python3 安裝
有了 Python 這伺服器才像樣,哈哈。
我這裡選擇的是安裝 Python3
, 以下方式進行安裝:
# 安裝 python3
sudo apt-get install python3
# 安裝 python3 對應的 pip
sudo 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 = 1
def task():
# 在這裡寫下你要執行的命令,例如列印 HelloWorld
print(`Hello World!
`)
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 掉你想關的後臺程式即可
– 中文亂碼
應用場景:
是個中國人就可能碰到。。。
嗯,這個問題我現在用的方式是:不用中文?。
理由是:
- 對中文輸出要求不那麼強烈
- 正則匹配中可以略過中文,犧牲一丁點效能算不了啥事兒
- 支援中文的話要裝一大堆包,秉承能不裝則不裝的心態。