快轉到主要內容

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、cuDNN、TensorRT專有驅動程式
分類   Linux系統 Linux使用技巧
標籤   Arch Linux Nvidia
Ubuntu LTS如何進行大版本系統升級
分類   Linux系統 Linux使用技巧
標籤   Ubuntu
透過USB傳輸線,從電腦登入樹莓派系統
分類   Linux系統 Linux使用技巧
標籤   Raspberry Pi

留言板

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

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

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