快轉到主要內容

musl系發行版Alpine Linux跑glibc程式的方法

分類   Linux系統 Linux使用技巧
標籤   Alpine Linux PostmarketOS
🗓️ 民國113年 甲辰年
✍ 切換正體/簡體字

Alpine Linux和postmarketOS都是使用musl libc作為C函式庫,跟主流GNU/Linux所採用的glibc不相容。在執行或編譯一些強制依賴glibc的程式會出問題。在無法修改原始碼的情況下,我們有一些作法可以迴避。

如果要執行的程式只是單一執行檔,那麼用Adélie Linux開發的 gcompat就行了,指令類似wine

gcompat "執行檔路徑"

但是,大部份時候不會這麼簡單,gcompat不能當headers使用,拿它來編譯程式照樣會失敗。

這時我們得使用自帶依賴套件的容器技術,跳脫依賴宿主機musl的問題。

例如:

  • chroot:薑是老的辣,使用 debootrap建立Ubuntu環境,或是pacstrap建立Arch Linux環境。如想簡化進入chroot流程可善用 arch-chroot指令稿。
  • DistroBox:可以用來裝圖形程式。Alpine Linux似乎偏好以Podman作為後端。在Alpine Linux需要將root掛載:sudo mount --make-rshared /,DistroBox才可以正常運作。
  • Flatpak:可以用來裝圖形程式。
  • Docker: 跑其他主流發行版,例如Ubuntu的映像檔。什麼?你說你的Alpine Linux就是跑在Docker容器裡?啊這…跳船吧 請改用內含glibc的特製Alpine映像檔,例如 jeanblanchard/docker-alpine-glibc

以上套件Alpine Linux的套件庫都有收。

注意 Snap是不可行的,因為Alpine Linux不支援Systemd。儘管postmarketOS有支援Systemd,但預設init依然是用OpenRC。

順帶一提,目前Nvidia CUDA(驅動版本555)無法在musl的發行版執行,連Nvidia Container ToolKit都不行。因為這涉及到驅動程式問題,而Nvidia閉源驅動壓根不支援musl,且沒有原始碼,不可移植。


參考資料: Running glibc programs - Alpine Linux Wiki

相關文章

教你在Arch Linux安裝Nvidia專有驅動、CUDA、NVIDIA Container Toolkit
分類   Linux系統 Linux使用技巧
標籤   Arch Linux Nvidia
Ubuntu LTS如何進行大版本系統升級
分類   Linux系統 Linux使用技巧
標籤   Ubuntu
透過USB傳輸線,從Linux電腦走RNDIS協定登入樹莓派系統
分類   Linux系統 Linux使用技巧
標籤   Raspberry Pi

留言板

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

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

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。為防止垃圾內容,有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請善用圖床網站。