老 Android 手機裝 Ubuntu 用做低功耗伺服器

Aiello_Chan發表於2018-02-04

老 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.apkbusybox.apk 安裝到手機上,然後在手機儲存(非外接記憶體卡)根目錄下新建一個資料夾 ubuntu ,把 ubuntu.imgubuntu.sh 都複製進去。

安裝

準備工作都已經完成,開始安裝吧!

  1. Busybox
    先開啟 busybox 彈出的第一個視窗點叉關掉,然後在主介面中選擇安裝版本:1.26.2 或更高,安裝位置選擇為:/system/bin ,最後點選左下角的 Install (期間會彈出請求 ROOT 授權,請選擇允許)等待安裝完成即可;
  2. Androidterm
    等 Busybox 安裝好後,我們就開啟 Terminal(也叫 終端) 這個 App,出現在我們眼前的是命令列介面,我們鍵入 cd /sdcard/ubuntu 點選鍵盤上的回車按鈕(或者是 確認),他將會切換目錄到我們之前存放 ubuntu.imgubuntu.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 掉你想關的後臺程式即可

– 中文亂碼

應用場景:是個中國人就可能碰到。。。

嗯,這個問題我現在用的方式是:不用中文?。

理由是:

  1. 對中文輸出要求不那麼強烈
  2. 正則匹配中可以略過中文,犧牲一丁點效能算不了啥事兒
  3. 支援中文的話要裝一大堆包,秉承能不裝則不裝的心態。

相關文章