快轉到主要內容

把PinePhone當作樹苺派用,架設Linux伺服器

智慧型手機 真Linux手機 PinePhone Debian Raspberry Pi
🗓️ 民國113年 甲辰年
✍ 切換正體/簡體字
目錄

Turning PinePhone into a Linux server like Raspberry Pi.

將Linux手機「PinePhone」變成擬似樹莓派的Linux伺服器。

這不是台灣小蛋捲,這是美國大手機。

2019年發表的無印版PinePhone,距離我 買來開箱已經兩年了啊。當初買來實際拿在手上幾個月後就放到抽屜保存了,因為Wifi晶片自己燒壞了。開著4G隨便就飆到50度的手機真不適合放在口袋帶著走。

如今,PinePhone的核心已經從特製版kernel-megi變成主線linux-sunxi了,看來開發者統一了這個板子系列了,讓同一個板子的裝置都能夠跑主線Linux核心。

感謝開發者的付出,postmarketOS和Mobian皆使用了linux-sunxi核心,那麼PinePhone硬體方面的開發應該算是「完成」了吧。儘管開發過程艱困,postmarketOS、Mobian、Ubuntu touch仍支援PinePhone,Arch Linux ARM已經放棄更新。

考慮到我已經 買了PineTab 2當作新主力裝置,PinePhone就沒什麼用了。儘管PineTab 2的RK3566處理器也很慢,但是至少PineTab 2有塊大螢幕,能看看電子書。

塵歸塵,土歸土,我曾想過要買樹莓派5取代目前架在x86主機上的self-hosting服務的,但是先廢物利用看看吧,將原本就是開發板改裝的PinePhone手機,變回開發板的用途。

PinePhone跟一般ARM開發板的差別在於多了電池、相機、傳感器,但是缺乏I/O傳輸埠、沒有GPIO接腳等。沒有人寫Android TV系統不太可能當電視盒子,那麼PinePhone就剩下當伺服器一途了。

為什麼不選其他能跑 postmarketOS的高性能舊Android手機來跑呢?他們沒有一台像PinePhone一樣硬體驅動全受Linux支援的啊…尤其是USB部份。

根據網路資料,PinePhone的Allwinner A64處理器性能只有樹苺派4 Broadcom BCM2711的二分之一,但起碼比樹苺派3 Broadcom BCM2837好一些,還是有用處的!

它能跑什麼?

用Docker跑 Nextclould檔案伺服器 Immich照片雲端 Sonarr BT種子下載服務還湊合,窮人版的NAS。但是 Jellyfin影片串流就不行了,PinePhone在伺服端1080p解碼很慢。如果要影片播放只能用SAMBA伺服器的模式串流,讓影片在播放端解碼了。

PinePhone還可以跑PiHole擋廣告,準備二個網路卡的話當簡單的路由器也行。或者是作為VPN的入口(不過我比較常用TailScale或ZeroTier,家用VPN實無必要)。PinePhone畢竟是開發板改裝的,耗電量低,開24小時應該沒問題的。

1. 環境
#

  • 系統:Mobian (Debian Trixie)
  • 手機:Pine64 PinePhone
  • 配件:USB擴充埠、硬碟外接盒x1、硬碟x1、microSD卡x1、USB Wifi兼藍芽網路卡x1、一個鐵盒子

這是最終的樣子,整組裝置放在鐵盒子裡面。這樣就算燒起來也不會央及周遭(?)。

如圖所示,PinePhone下方的是外接硬碟,透過USB連接。PinePhone再透過USB擴充埠連線到Wifi、乙太網路、充電線。

PinePhone內置eMMC疑似壞軌了,所以只得將系統安裝到SD卡,重要資料放在外接硬碟。

這個結構還需要改進,可能買個小米的方塊集線器統一管理裡面電器的電源,並設計一個延長線按鈕方便開關電源。

2. 先重裝系統
#

裝系統的目的在於確認硬體正常與否。

系統選擇Mobian,基於Debian Testing分支開發,目前是Trixie

參考 PinePhone系統安裝教學,先裝好 Tow-Boot,再寫入 Mobian映像檔到SD卡。

我使用遠端登入SSH方式搭配Phosh圖形環境下設定系統。如果要用UART也是可以的但是得另外買轉接頭(PinePhone的UART位於手機耳機孔部份)

  1. 開機之後,進入Phosh圖形界面,到系統設定關閉自動暗停模式。再加入~/.bashrc,防止休眠
if [[ -n $SSH_CONNECTION ]]; then
  sh -c "gnome-session-inhibit --inhibit suspend --reason \"SSH connection active\" --inhibit-only > /dev/null 2>&1 &"
fi
  1. 大部分時候用SSH遠端存取之, 使用nmcli設定固定IP

  2. 因為Debian是自由軟體發行版,Linux主線核心支援的MT7601 Wifi驅動需要安裝linux-firmware-nonfree套件才能載入。其他不支援的Wifi自行用DKMS編譯安裝驅動。

  3. 使用ip addr列出Wifi裝置

  4. 設定Wfii和開機自動連線

sudo nmcli dev wifi connect "SSID"  password "password"
sudo nmcli device set wlan0  autoconnect yes
  1. 設定防火牆和SSH服務
sudo apt install openssh-server ufw
sudo systemctl enable ssh
sudo ufw enable
sudo ufw allow ssh
sudo ufw reload
  1. 裝好系統後將PinePhone關機,開始改造硬體。
sudo shutdown now

3. 針對伺服器的硬體改造
#

PinePhone機殼用螺絲起子就可以拆解,理論上我可以把螢幕和外殼拆掉,露出板子部分再自己找一個盒子裝,不過我手太笨了,暫時不想這麼做。

僅拆開塑膠背板,保留螢幕當作底座,露出整塊主機板。拆掉背板後要記得把黏在塑膠殼上的揚聲器零件裝回去。

就在我拆開框架的時候,塑膠殼因為脆化…斷了

為了讓開機鍵比較好按(Tow-Boot需要手動按音量鍵才會從SD卡開機),把音量鍵模組撬開,使其平放。

PinePhone需要電池才可以開機,這個沒辦法,除非自製電容。這裡電池就當作廉價UPS系統吧,電池充電上限用軟體控制。

再來是4G模組部分,不當手機用的情況下這個東西基本沒用,所以我就利用PinePhone設計的Kill Switch將其關閉。金屬部份留著當散熱板。

PinePhone只要螢幕亮著就會額外發熱,且跑伺服器也不用螢幕,所以將螢幕拔掉。參照下圖,把電池上面這條線拆掉就不會對螢幕輸出訊號了。

PinePhone待機大概40 ~ 50度左右,工作的時候約60度,如果溫度壓不下來得買個USB風扇。

4. 後續的服務安裝
#

  1. 根據測試,PinePhone只要螢幕亮著就會發熱,所以裝好系統後將桌面環境Phosh服務關掉。
sudo systemctl disable phosh
  1. 設定電池充電上限為80%
echo 80 > /sys/class/power_supply/axp20x-battery
/charge_control_end_threshold
  1. Debian Testing的Docker沒有官方套件庫支援,只能從Debian的套件庫裝
sudo apt install docker.io docker-compose
  1. 沒有螢幕下只能從LED燈和硬碟讀取燈號判別系統有無正常開機,為此設計開機服務,讓PinePhone的LED在系統服務啟動後亮藍燈。
cat <<EOF > /etc/systemd/system/bootled.service
[Unit]
Description=Booting LED service

[Service]
ExecStart=/bin/bash -c "/usr/bin/echo 1 > /sys/class/leds/blue:indicator/brightness"

[Install]
WantedBy=multi-user.target
EOF

echo 1 > '/sys/class/leds/blue:indicator/brightness'

sudo systemctl daemon-reload

sudo systemctl enable bootled.service
  1. 如果臨時需要圖形界面,不插硬體螢幕的話就是搞個 VNC伺服器再開桌面環境

  2. 外接硬碟格式化為EXT4,並設定開機自動掛載。

# 找出硬碟代號
lsblk

# 分割硬碟,新增GPT分割區
sudo fdisk /dev/sdb
g
n
w
q

mkfs.ext4 /dev/sdb1

sudo mkdir /run/media
sudo mkdir /run/media/mobian/HDD

#列出硬碟UUID
sudo blkid

su

echo 'UUID="uuid" /run/media/mobian/HDD ext4 defaults,rw  0  1' >> /etc/fstab

參考資料
#

相關文章

PinePhone:什麼是Tow-Boot bootloader?如何安裝?
智慧型手機 真Linux手機 PinePhone
手機版的Debian,小米Pocophone F1安裝Mobian
智慧型手機 真Linux手機 Mobian Debian Xiaomi
用Box86 + Wine在ARM Linux裝置玩x86架構的Windows exe遊戲
智慧型手機 真Linux手機 Box86 Box64 PinePhone Wine Steam Mobian

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur連結。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。