老 Android 手機裝 Ubuntu 用作低功耗服務器

老 Android 手機裝 Ubuntu 用作 低功耗服務器

做 zuō

最近尋思着弄一臺低功耗 linux 服務器用,只運行一些小程序,例如 Python 寫的爬蟲或者定時任務。網上看了一圈,什麼樹莓派呀啥的,一套下來要兩三百了,有點不划算。忽然想到我還有一個小米3觸控不靈,閒置着。看了一下它的配置,ac 的 wifi + 2.3GHz 的 cpu,很強啦!(比樹莓派強)python

裝個 Ubuntu corelinux

本安裝方法基於開源項目 Linux on Android,該項目讓你可以在安卓手機上運行不少 Linux 發行版。android

固然了本篇文章只講解如何安裝 Ubuntu 13.10 core,也就是隻有命令行的版本(做爲服務器,不須要圖形界面,最大化性能)shell

注:此方法理應適用於 android 版本大於4.3的手機,而且必需要 ROOTubuntu

注2: 若是你這手機只用做服務器的話,在條件容許的狀況下,建議你再把手機系統刷成AOSP(安卓官方開源項目,無任何捆綁、後臺軟件,最大限度釋放你老手機的性能),小程序

注3?: (沒想到吧,還特麼有注3。。)若是你只是輕度折騰一族,強烈建議不要刷AOSP,否則中途放棄了,就不能看下面的教程了bash

準備

咱們須要下載的文件有這麼幾個:服務器

文件名 做用 下載地址
ubuntu.img Ubuntu 鏡像 core 種子文件
ubuntu.sh 安裝 Ubuntu 的腳本文件 百度雲 密碼: td75
androidterm.apk 能在安卓上敲命令行的應用 百度雲 密碼: crzy
busybox.apk 增長更多命令行命令 百度雲 密碼:tizn

固然這些我也都放在了百度盤裏面,你能夠打包下載 密碼:tiut網絡

下載好後,把 androidterm.apkbusybox.apk 安裝到手機上,而後在手機存儲(非外置內存卡)根目錄下新建一個文件夾 ubuntu ,把 ubuntu.imgubuntu.sh 都複製進去。python2.7

安裝

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

  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!\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 掉你想關的後臺程序便可

- 中文亂碼

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

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

理由是:

  1. 對中文輸出要求不那麼強烈
  2. 正則匹配中能夠略過中文,犧牲一丁點性能算不了啥事兒
  3. 支持中文的話要裝一大堆包,秉承能不裝則不裝的心態。
相關文章
相關標籤/搜索