使用 AppImage 進行 Linux 軟體包管理

2020-06-15 14:01:00

AppImage 在自足的環境中分發應用, 它適用於任何 Linux 發行版。

管理 Linux 機器(尤其是遠端機器)的一個重要分就是管理和安裝軟體。當本地應用程式出現問題時,或者檔案系統上的某些檔案損壞需要修復時,你通常會希望推播更新,而不必走很多路坐在物理螢幕前。正如我在 Pluralsight 課程《Linux 系統維護和故障排除》中所解釋的那樣,許多問題當然可以通過 Bash 指令碼解決,但是仍有很多情況下,除了老式的二進位制檔案外,沒有其他選擇。

想象一下,你的某些遠端系統需要安裝新的應用程式,這樣使用這些計算機的團隊成員就能夠執行某些業務。能夠利用 Debian 或 RPM 之類的主要 Linux 倉庫系統的整合和自動化,可以使你的管理任務變得更加容易。

正如 Linus Torvalds 永不厭倦地提醒我們的那樣,太多的 Linux 軟體管理系統的問題是 Linux 軟體管理系統太多了。多年來,應用開發甚至是 Linux 的採用都變得愈加複雜起來,因為你為了提供你的軟體(比如,放到 Debian 倉庫)而投入的所有時間和工作,對於你想讓它們進入 RPM 系統並沒有什麼幫助,對於 SUSE 的 Zypper 管理器也一樣,沒有什麼幫助。

解決軟體孤島問題的一種有前途的方案是分發具有自足環境的應用,它們可以在任何 Linux 發行版上執行。在這個年輕且不斷發展的領域中,選擇之一是 AppImage

使用 AppImage

我全面投入到了 AppImage。就像我提到的其他軟體包管理系統一樣,如果你需要的話,有很多複雜的功能可以使用。但是,從本質上講,AppImage 非常簡單。AppImage 不像大多數其他包管理器一樣通過倉庫工作,它使用單個、獨立的檔案,可以直接傳送或通過網站共用。

下面是個展示它的美妙之處的例子。當我在用 AppImage 時,我在一個技術論壇上看到了一個很老的討論,它讓我找到了一個同樣久遠且廢棄的 GitHub 專案以及相關的 YAML 和配方檔案。它們旨在自動構建準備生成 AppImage 包所需的相當複雜的基礎架構。儘管該基礎架構全部是在 5 年前的 Ubuntu 版本上構建的,但是當我將它們放在一起並執行 appimagetool 命令時,它建立了一個 AppImage 檔案,它可在我當前的桌面上無縫執行。我不認為有很多有五年歷史的 GitHub 複雜專案可以使用其他技術執行,而無需認真重做。

但是這裡我我不會介紹這個案例。相反,我將用一個簡單的 Hello World 程式向你展示它是如何工作的。首先,請確保本地已安裝 AppStream 包。

對於基於 Debian 的系統,執行:

$ sudo apt install appstream

對於 RPM 系統,請使用:

$ sudo dnf install appstream

克隆這篇文章中提及的 Git 倉庫,我會基於它範例:

$ git clone <https://github.com/boolean-world/appimage-resources>$ cd appimage-resources$ ls hello-world-appimage

接下來,使用 cd 進入 Git 新建立的目錄。這裡有兩個目錄。請使用 hello-world-appimage。另一個是更複雜的專案,你也應該考慮嘗試一下。

Linux GUI 系統會讀取 helloworld.desktop 檔案來知道如何呈現桌面圖示。事實證明,當前的這個檔案會在以後給你帶來點麻煩,因此請進行一些小修改:新增 Categories= 這行並為其賦予值 GNOME。不要忘記最後的分號:

$ nano hello-world-appimage/helloworld.desktop        add Categories=GNOME;

從 AppImage GitHub 專案下載 appimagetool 預編譯的二進位制檔案。存取 GitHub 的原因之一:那裡有很多出色的文件和資源。下載二進位制檔案後,使檔案可執行,並將 hello-world-appimage 目錄傳給它。但是首先,你需要告訴它你想要的架構。由於某些原因,一個名字以 x86_64 結尾的工具都不能自行確定是否該使用 x86_64 來構建應用程式(我不知道這是怎麼回事)。

$ wget <https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage>$ chmod +x appimagetool-x86_64.AppImage$ ARCH=x86_64 ./appimagetool-x86_64.AppImage hello-world-appimage

如果你沒有看到任何錯誤訊息,那麼表示完成了,請執行:

$ ls$ ./hello-world-appimage-x86_64.AppImage

總結

AppImage 是軟體包管理的非常有效的選擇。當你探索它時,我想你會發現它是 Linux 發行版預設軟體包系統的很好的替代品。