首頁 > 軟體

在 Android 系統上安裝 Debian Linux 與 R

2020-06-16 17:57:39

其實在 Android 平板上通過第三方軟體 , 已經可以提供很多類似一般桌面 Linux 系統的工具了 。 常用的 FirefoxVLCLibreOffice 以及 終端模擬器 都有 Android 版本 , 結合 Busybox 也能擁有大部分 coreutils 工具 , 甚至還有諸如 Terminal IDE 這種一站式的開發工具方案 ( 不過不支援 Android 5.0+)。 若是想要接近桌面級別的體驗的話 , 比如像在下希望使用的 R 語言環境 , 還是安裝一個完整的 Linux 環境比較好 。

在 Android 平台上 , 若是 Unlock Bootloader 且獲取了 root 許可權 , 那麼有一大票的方法可以將亦或完整亦或深度客製化各種的 Linux 環境安裝上去 , 網上教學也有不少 , 不再贅述 。 本文描述的方法則是 :

  1. 無需 root, 無需修改系統分割區或者 Bootloader;
  2. 安裝的是正常的 Debian Linux ARM 版本 , 可從官方倉庫獲得更新 , 相容第三方 backport 倉庫 ;
  3. 允許多個 Linux 發行版共存 , 非常方便的刪除或重建 , 無需擔心在系統或者 SD 卡上有異樣殘留 。

首先請出主角 GNURootGNURoot Wheezy。 前者在應用程式級別提供一個虛擬根檔案系統 , 允許在其上執行為其微調的桌面 Linux 發行版 ; 後者則顯而易見的是為其打造的 Debian Wheezy 版本 。

GNURoot 本身支援多個不同的 Linux 發行版 , 在下常用的 Fedora 亦在其中 , 不過由於打包的古老亦不再維護的 Fedora 17, 實在是不推薦使用 。 至於那個 Debian WheezyX 版本 , 稍候說明 。

GNURoot 的使用方法相當直觀 。 第一步選擇要建立的根檔案系統 , 若是沒有安裝上面提到的 Wheezy 的話 , 在選擇後跳轉到 Play Store 提示安裝 。 稍事片刻建立完成後 , 就可以在第二步選擇啟動了 , 記得勾上 "Launch As Fake Root" 的選項 。 第三個選項則是刪除根檔案系統 , 點選後選中的根檔案系統就會乾淨的刪除 , 估計您不會想現在就點選它吧 …

不過在點選啟動之前 , 最好確認下您已經準備好了合適的輸入裝置 , 因為即將迎接您的僅僅是一個終端模擬器 , 而安裝 R 的操作需要有不少終端的操作 。 若是有藍牙鍵盤最好 , 沒有的話推薦使用這款名為 Hacker's Keyboard 的虛擬鍵盤 , 可以提供很多終端下常用的按鍵 。

Debian Wheezy 這個根檔案系統生成時間稍早 , 所以當然一上來是通過 apt-get 升級到最新版本了 。 除此之外 , 諸如 less、`vim` 之類的工具也還是裝上才感覺正確了 。 有幾點注意的 :

  1. 預設登入即是 root 賬戶 ;
  2. 主機的內建儲存和 SD 記憶卡等裝置被掛載到 /storage 下 ;
  3. 由於 Android 系統許可權限定 , 僅能寫入內建儲存 , 不能寫入外接 SD 卡 ;
  4. 包括 GNURoot 及 GNURoot Wheezy 在內的程式都無法移動到 SD 卡 , 因為 SD 卡上沒有可執行許可權的概念 。

由於 Debian 針對 Stable 的管理策略 , 要想用上最新的 R 必須使用 backport 的倉庫 。 根據 Debian Package for R Software 的描述 , 需要將如下倉庫資訊新增到 /etc/apt/sources.list 檔案末尾 :

deb http://<favorite-cran-mirror>/bin/linux/debian wheezy-cran3/

對於在下的網路來說 , 既是以下地址 :

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

這個過程比較漫長 , 一方面是源自存取 Debian FTP 的速度 , 另外則是安裝及解包時間了 。 在耐心等待或者一覺之後 , 就可以開心的在平板上使用 R 語言啦 !

對於已經習慣使用圖形化 IDE Rstudio 的在下來說 ,R 終端還是需要熟悉下的 :

  1. 執行指令碼需要使用 Rscript, 而非 R CMD BATCH
  2. 使用 help.start() 可以啟動 HTML 的幫助手冊頁面 , 可以在 Android 系統環境下的瀏覽器中檢視 。
  3. 類似的 , 圖形繪製及表格之類的 , 也可以通過巢狀在 Shiny 的方式輸出到 Web 頁面 , 之後再 Android 系統瀏覽器中檢視 。

最後說說同一個作者出品的 WheezyXGNURoot Debian。 前者是在啟動時初始化一個 vnc 服務 , 使得可以使用本地或遠端的 VNC 用戶端看到 X 圖形化介面 。 在下嘗試了在其基礎上安裝 LXDE 桌面環境 , 在極度漫長的等待失敗 , 無法啟動 LXDE。 後者是該名作者的新作品 , 按照其說明是新的結合 , 不過根據評論來看似乎還有不少問題需要處理 。

經過這麼一番折騰 , 感覺 Android 平板還是有不少可以把玩和折騰的地方 , 特別是對 Linux 使用者來說 。 若是您有更多折騰的經歷或心得 , 不妨來稿或者在評論中分享 。

7 月 22 日更新

在本文發布第三天,GNURoot Debian 發布了新版本 0.2,這兩天再次體(zhe)驗(teng)了下:

  • 與 GNURoot 完全不同,無法延用之前建立的根檔案系統,且僅支援 Debian
  • 升級到 Debian Jessie 8.1 Stable 版本,且架構支援硬浮點 armhf
  • 掛載以及和系統互動的方式變化不少,$HOME 分割區可以直接在 Android 系統下存取,還有一些奇怪的 mount 輸出沒看懂
  • 附帶的 Jessie 特別精簡,連 vi 都沒有,建立根分割區之後要安裝的常用工具不少…
  • CRAN Backport 裡的 R 貌似只有針對 armel 的,而 Jessie Backport 裡的版本太老,於是想了想,乾脆自己動手編譯了 R 3.2.1 版本,總共用時兩個半小時,還好
  • 至少在我使用的 Z4 Tablet 上,安裝部分應用(比如 git, openssh-client)會提示 Cannot open audit interface,谷歌說可能跟核心或者掛載有關,已經提交 Issue Report 等反饋…
  • 理論上講 RStudio Server 也可以編譯,但是至少需要解決上述的問題才能安裝必要的依賴關係。

8 月 4 日更新

上個週末 GNURoot Debian 發布了 0.26 版本,解決了之前反饋的問題,意味著可以編譯 RStudio Server 了!

  • 首先前往 RStudio 官網下載原始碼包。
  • 解壓到某處之後,仔細閱讀其中的 INSTALL 說明。
  • RStudio 需要 R 的共用庫,如果之前手動編譯 R 的過程中沒加上 --enable-R-shlib 選項的話(竟然不是預設啟用),重編譯先吧…
  • 根據說明,可以借助 dependencies/linux/install-dependency-debian 檔案的內容處理編譯 RStudio 的依賴關係。由於 GNURoot Debian 預設沒有設定 sudo,這裡建議還是手動安裝各個依賴比較好
  • 幾點需要提醒的:
  • 沒必要特別安裝 OpenJDK 6,在編譯 R 的時候所用的 OpenJDK 7 即可
  • 無需擔心 AppArmor、Qt SDK 的依賴,Server 版本用不上
  • 解決完 debian 檔案所描述的後,參照 common/install-common 裡的內容進一步處理依賴關係,同樣還是建議參考,但是手動處理,其實也就是手動執行同目錄下的其他以 install 開頭的指令碼。當然在上一步 debian 指令碼中通過倉庫解決的就不需要了,比如 boost 和 pandoc
  • 此時可以參考 RStudio 論壇上的解答,包括下載最新版本的 Closure Complier 來替換 src/gwt/tools目錄中的老版本,已經建立空的 pandoc 目錄,都是值得應用的。它還提到了使用 Oracle JDK 8 來加快 GWT 構建,這點我沒有嘗試,有興趣也可以用 OpenJDK 8 看看。這篇文件較早,新版本還需要一些 clang 的標頭檔案,也是使用 install 指令碼處理就好。
  • 全部依賴關係處理結束之後,返回原始碼頂層目錄,按照 INSTALL 文件的說明,建立 build 目錄並呼叫 cmake 建立編譯組態檔,
  • 若一切正常,就可以使用 make install 開始編譯了(沒看錯,沒有 make 步驟)。在 Z4 Tablet 上,GWT 構建果真使用了 90 分鐘,而 C++ 程式碼部分的編譯用了 6 至 8 小時(具體時間未知,因為中途睡著了…)
  • 結束之後,繼續按照 INSTALL 文件的說明,建立服務所用的執行賬戶、新增 init.d 組態檔、建立管理指令碼符號連結、建立執行時所必要的目錄
  • 之後就可以通過 rstudio-server start 啟動,然後在系統瀏覽器中輸入 `127.0.0.1:8787`,其中 8787 是 rstudio-server 的預設埠號,就能看到熟悉的 RStduio 登入介面啦!
  • 不過,別高興的太早…你會發現 root 賬戶登入不能,提示需要密碼,設定密碼後還是不行,建立個全新的普通使用者,問題依舊,提示 Error occurred during transmission…網上搜到的解決方案提示根分割區滿了,呃,好像不相關啊…
  • 嘗試換用 systemd 的啟動指令碼時收到提示說 dbus 不可用,不知道這個會不會是原因?

所以,RStudio Server 的確可以在 Andriod/GNURoot Debian 環境下正常編譯(儘管時間比較長),但是其正常工作,似乎還需要一些研究。


IT145.com E-mail:sddin#qq.com