在 Android 系統(tǒng)上安裝 Debian Linux 與 R (更新 RStudio Server 安裝)
其實在 Android 平板上通過第三方軟件,已經(jīng)可以提供很多類似一般桌面 Linux 系統(tǒng)的工具了。常用的 Firefox、VLC、 LibreOffice 以及終端模擬器都有 Android 版本,結(jié)合 Busybox 也能擁有大部分 coreutils 工具,甚至還有諸如 Terminal IDE這種一站式的開發(fā)工具方案(不過不支持 Android 5.0+)。若是想要接近桌面級別的體驗的話,比如像在下希望使用的 R 語言環(huán)境,還是安裝一個完整的 Linux 環(huán)境比較好。
在 Android 手機或平板上,若是 Unlock Bootloader 且獲取了 root 權(quán)限,那么多種的方法可以將亦或完整亦或深度定制各種的 Linux 環(huán)境安裝上去,網(wǎng)上教程也有不少,不再贅述。本文描述的方法則具有如下特點:
- 無需 root,無需修改系統(tǒng)分區(qū)或者 Bootloader;
- 安裝的是正常的 Debian Linux ARM 版本,可從官方倉庫獲得更新,兼容第三方 backport 倉庫;
- 允許多個 Linux 發(fā)行版共存,非常方便的刪除或重建,無需擔(dān)心在系統(tǒng)或者 SD 卡上有異樣殘留;
- 像普通 Android 應(yīng)用一樣運行 Linux 系統(tǒng),可與其他 Android 應(yīng)用之間自由切換;
- Linux 系統(tǒng)服從 Android 系統(tǒng)的電源管理策略(讀作:省電)。
首先請出主角 GNURoot 及 GNURoot Wheezy。前者在應(yīng)用程序級別提供一個虛擬根文件系統(tǒng),允許在其上運行為其微調(diào)的桌面 Linux 發(fā)行版;后者則顯而易見的是為其打造的 Debian Wheezy 版本。
GNURoot 本身支持多個不同的 Linux 發(fā)行版,在下常用的 Fedora 亦在其中。不過由于打包的是古老亦不再維護的 Fedora 17,實在是不推薦使用。至于那個 Debian WheezyX 版本,稍候說明。
GNURoot 的使用方法相當(dāng)直觀。第一步選擇要創(chuàng)建的根文件系統(tǒng),若是沒有安裝上面提到的 Wheezy 的話,在選擇后跳轉(zhuǎn)到 Play Store 提示安裝。稍事片刻創(chuàng)建完成后,就可以在第二步選擇啟動了,記得勾上 "Launch As Fake Root" 的選項。第三個選項則是刪除根文件系統(tǒng),點擊后選中的根文件系統(tǒng)就會干凈的刪除,估計您不會想現(xiàn)在就點擊它吧…
不過在點擊啟動之前,最好確認(rèn)下您已經(jīng)準(zhǔn)備好了合適的輸入設(shè)備,因為即將迎接您的僅僅是一個終端模擬器,而安裝 R 的操作需要有不少終端的操作。若是有藍牙鍵盤最好,沒有的話推薦使用這款名為 的虛擬鍵盤,可以提供很多終端下常用的按鍵。
Debian Wheezy 這個根文件系統(tǒng)生成時間稍早,所以當(dāng)然一上來是通過 apt-get
升級到最新版本了。除此之外,諸如 less
、vim
之類的工具也還是裝上才感覺完整了。有幾點需要注意的:
- 默認(rèn)登錄即是 root 賬戶;
- 主機的內(nèi)置存儲和 SD 記憶卡等設(shè)備被掛載到
/storage
下; - 由于 Android 系統(tǒng)權(quán)限限定,僅能寫入內(nèi)置存儲,不能寫入外置 SD 卡;
- 包括 GNURoot 及 GNURoot Wheezy 在內(nèi)的程序都無法移動到 SD 卡,因為 SD 卡上沒有可執(zhí)行權(quán)限的概念。
由于 Debian 針對 Stable 的管理策略,要想用上最新的 R 必須使用 backport 的倉庫。根據(jù)Debian Package for R Software的描述,需要將如下倉庫信息添加到 /etc/apt/sources.list
文件末尾:
deb http://<favorite-cran-mirror>/bin/linux/debian wheezy-cran3/
對于在下的網(wǎng)絡(luò)來說,既是以下地址:
deb http://mirrors.ustc.edu.cn/CRAN/bin/linux/debian wheezy-cran3/
通過 echo
加重定向的方式可以非常方便的將其添加到文件末尾。
然后添加加密公鑰到:
apt-key adv --keyserver keys.gnupg.net --recv-key 381BA480
再下來就是安裝了:
apt-get update
apt-get install r-base r-base-dev
這個過程比較漫長(約200M),一方面是 Debian FTP 的訪問速度所限,另一方面則是安裝及解包時間了。在耐心等待或者睡一覺之后,就可以開心的在平板上使用 R 語言啦!
對于已經(jīng)習(xí)慣使用圖形化 IDE Rstudio 的在下來說,R 終端還是需要熟悉下的:
- 運行腳本需要使用
Rscript
,而非R CMD BATCH
。 - 使用 help.start() 可以啟動 HTML 的幫助手冊頁面,可以在 Android 系統(tǒng)環(huán)境下的瀏覽器中查看。
- 類似的,圖形繪制及表格之類的,也可以通過嵌套在 Shiny 的方式輸出到 Web 頁面,之后在 Android 系統(tǒng)瀏覽器中查看。
最后說說同一個作者出品的 WheezyX 和GNURoot Debian。前者是在啟動時初始化一個 vnc 服務(wù),使得可以使用本地或遠(yuǎn)程的 VNC 客戶端看到 X 圖形化界面。在下嘗試了在其基礎(chǔ)上安裝 LXDE 桌面環(huán)境,在極度漫長的安裝過程(包含依賴關(guān)系近 700M)后失敗,無法啟動 LXDE。后者則是該名作者的新作品,按照其說明是新的結(jié)合及未來的趨勢,不過根據(jù)評論來看似乎還有不少問題需要處理。
經(jīng)過這么一番折騰,感覺 Android 平板還是有不少可以把玩和折騰的地方,特別是對 Linux 用戶來說。若是您有更多折騰的經(jīng)歷或心得,不妨來稿或者在評論中分享。
7 月 22 日更新
在本文發(fā)布第三天,GNURoot Debian 發(fā)布了新版本 0.2,這兩天再次體(zhe)驗(teng)了下:
- 與 GNURoot 完全不同,無法延用之前創(chuàng)建的根文件系統(tǒng),且僅支持 Debian
- 升級到 Debian Jessie 8.1 Stable 版本,且架構(gòu)支持硬浮點
armhf
- 掛載以及和系統(tǒng)交互的方式變化不少,$HOME 分區(qū)可以直接在 Android 系統(tǒng)下訪問,還有一些奇怪的
mount
輸出沒看懂 - 附帶的 Jessie 特別精簡,連
vi
都沒有,創(chuàng)建根分區(qū)之后要安裝的常用工具不少… - CRAN Backport 里的 R 貌似只有針對
armel
的,而 Jessie Backport 里的版本太老,于是想了想,干脆自己動手編譯了 R 3.2.1 版本,總共用時兩個半小時,還好 - 至少在我使用的 Z4 Tablet 上,安裝部分應(yīng)用(比如 git, openssh-client)會提示
Cannot open audit interface
,谷歌說可能跟內(nèi)核或者掛載有關(guān),已經(jīng)提交 Issue Report 等反饋… - 理論上講 RStudio Server 也可以編譯,但是至少需要解決上述的問題才能安裝必要的依賴關(guān)系。
8 月 4 日更新
上個周末 GNURoot Debian 發(fā)布了 0.26 版本,解決了之前反饋的問題,意味著可以編譯 RStudio Server 了!
- 首先前往 RStudio 官網(wǎng)下載源代碼包。
- 解壓到某處之后,仔細(xì)閱讀其中的 INSTALL 說明。
- RStudio 需要 R 的共享庫,如果之前手動編譯 R 的過程中沒加上
--enable-R-shlib
選項的話(竟然不是默認(rèn)啟用),重編譯先吧… - 根據(jù)說明,可以借助
dependencies/linux/install-dependency-debian
文件的內(nèi)容處理編譯 RStudio 的依賴關(guān)系。由于 GNURoot Debian 默認(rèn)沒有配置sudo
,這里建議還是手動安裝各個依賴比較好 - 幾點需要提醒的:
- 沒必要特別安裝 OpenJDK 6,在編譯 R 的時候所用的 OpenJDK 7 即可
- 無需擔(dān)心 AppArmor、Qt SDK 的依賴,Server 版本用不上
- 解決完 debian 文件所描述的后,參照
common/install-common
里的內(nèi)容進一步處理依賴關(guān)系,同樣還是建議參考,但是手動處理,其實也就是手動執(zhí)行同目錄下的其他以 install 開頭的腳本。當(dāng)然在上一步 debian 腳本中通過倉庫解決的就不需要了,比如 boost 和 pandoc - 此時可以參考 RStudio 論壇上的解答,包括下載最新版本的 Closure Complier 來替換
src/gwt/tools
目錄中的老版本,已經(jīng)創(chuàng)建空的 pandoc 目錄,都是值得應(yīng)用的。它還提到了使用 Oracle JDK 8 來加快 GWT 構(gòu)建,這點我沒有嘗試,有興趣也可以用 OpenJDK 8 看看。這篇文檔較早,新版本還需要一些 clang 的頭文件,也是使用 install 腳本處理就好。 - 全部依賴關(guān)系處理結(jié)束之后,返回源代碼頂層目錄,按照 INSTALL 文檔的說明,創(chuàng)建 build 目錄并調(diào)用 cmake 創(chuàng)建編譯配置文件,
- 若一切正常,就可以使用
make install
開始編譯了(沒看錯,沒有make
步驟)。在 Z4 Tablet 上,GWT 構(gòu)建果真使用了 90 分鐘,而 C++ 代碼部分的編譯用了 6 至 8 小時(具體時間未知,因為中途睡著了…) - 結(jié)束之后,繼續(xù)按照 INSTALL 文檔的說明,創(chuàng)建服務(wù)所用的運行賬戶、添加 init.d 配置文件、創(chuàng)建管理腳本符號鏈接、創(chuàng)建運行時所必要的目錄
- 之后就可以通過
rstudio-server start
啟動,然后在系統(tǒng)瀏覽器中輸入 `127.0.0.1:8787`,其中 8787 是 rstudio-server 的默認(rèn)端口號,就能看到熟悉的 RStduio 登錄界面啦! - 不過,別高興的太早…你會發(fā)現(xiàn) root 賬戶登錄不能,提示需要密碼,設(shè)置密碼后還是不行,創(chuàng)建個全新的普通用戶,問題依舊,提示
Error occurred during transmission
…網(wǎng)上搜到的解決方案提示根分區(qū)滿了,呃,好像不相關(guān)啊… - 嘗試換用 systemd 的啟動腳本時收到提示說 dbus 不可用,不知道這個會不會是原因?
所以,RStudio Server 的確可以在 Andriod/GNURoot Debian 環(huán)境下正常編譯(盡管時間比較長),但是其正常工作,似乎還需要一些研究。