使用AppImage進(jìn)行Linux軟件包管理
AppImage 在自足的環(huán)境中分發(fā)應(yīng)用, 它適用于任何 Linux 發(fā)行版。
管理 Linux 機(jī)器(尤其是遠(yuǎn)程機(jī)器)的一個(gè)重要分就是管理和安裝軟件。當(dāng)本地應(yīng)用程序出現(xiàn)問(wèn)題時(shí),或者文件系統(tǒng)上的某些文件損壞需要修復(fù)時(shí),你通常會(huì)希望推送更新,而不必走很多路坐在物理屏幕前。正如我在 Pluralsight 課程《Linux 系統(tǒng)維護(hù)和故障排除》中所解釋的那樣,許多問(wèn)題當(dāng)然可以通過(guò) Bash 腳本解決,但是仍有很多情況下,除了老式的二進(jìn)制文件外,沒(méi)有其他選擇。
想象一下,你的某些遠(yuǎn)程系統(tǒng)需要安裝新的應(yīng)用程序,這樣使用這些計(jì)算機(jī)的團(tuán)隊(duì)成員就能夠執(zhí)行某些業(yè)務(wù)。能夠利用 Debian 或 RPM 之類(lèi)的主要 Linux 倉(cāng)庫(kù)系統(tǒng)的集成和自動(dòng)化,可以使你的管理任務(wù)變得更加容易。
正如 Linus Torvalds 永不厭倦地提醒我們的那樣,太多的 Linux 軟件管理系統(tǒng)的問(wèn)題是 Linux 軟件管理系統(tǒng)太多了。多年來(lái),應(yīng)用開(kāi)發(fā)甚至是 Linux 的采用都變得愈加復(fù)雜起來(lái),因?yàn)槟銥榱颂峁┠愕能浖ū热纾诺?Debian 倉(cāng)庫(kù))而投入的所有時(shí)間和工作,對(duì)于你想讓它們進(jìn)入 RPM 系統(tǒng)并沒(méi)有什么幫助,對(duì)于 SUSE 的 Zypper 管理器也一樣,沒(méi)有什么幫助。
解決軟件孤島問(wèn)題的一種有前途的方案是分發(fā)具有自足環(huán)境的應(yīng)用,它們可以在任何 Linux 發(fā)行版上運(yùn)行。在這個(gè)年輕且不斷發(fā)展的領(lǐng)域中,選擇之一是 AppImage。
使用 AppImage
我全面投入到了 AppImage。就像我提到的其他軟件包管理系統(tǒng)一樣,如果你需要的話(huà),有很多復(fù)雜的功能可以使用。但是,從本質(zhì)上講,AppImage 非常簡(jiǎn)單。AppImage 不像大多數(shù)其他包管理器一樣通過(guò)倉(cāng)庫(kù)工作,它使用單個(gè)、獨(dú)立的文件,可以直接發(fā)送或通過(guò)網(wǎng)站共享。
下面是個(gè)展示它的美妙之處的例子。當(dāng)我在用 AppImage 時(shí),我在一個(gè)技術(shù)論壇上看到了一個(gè)很老的討論,它讓我找到了一個(gè)同樣久遠(yuǎn)且廢棄的 GitHub 項(xiàng)目以及相關(guān)的 YAML 和配方文件。它們旨在自動(dòng)構(gòu)建準(zhǔn)備生成 AppImage 包所需的相當(dāng)復(fù)雜的基礎(chǔ)架構(gòu)。盡管該基礎(chǔ)架構(gòu)全部是在 5 年前的 Ubuntu 版本上構(gòu)建的,但是當(dāng)我將它們放在一起并運(yùn)行 appimagetool
命令時(shí),它創(chuàng)建了一個(gè) AppImage 文件,它可在我當(dāng)前的桌面上無(wú)縫運(yùn)行。我不認(rèn)為有很多有五年歷史的 GitHub 復(fù)雜項(xiàng)目可以使用其他技術(shù)運(yùn)行,而無(wú)需認(rèn)真重做。
但是這里我我不會(huì)介紹這個(gè)案例。相反,我將用一個(gè)簡(jiǎn)單的 Hello World 程序向你展示它是如何工作的。首先,請(qǐng)確保本地已安裝 AppStream 包。
對(duì)于基于 Debian 的系統(tǒng),運(yùn)行:
$ sudo apt install appstream
對(duì)于 RPM 系統(tǒng),請(qǐng)使用:
$ sudo dnf install appstream
克隆這篇文章中提及的 Git 倉(cāng)庫(kù),我會(huì)基于它示例:
$ git clone <https://github.com/boolean-world/appimage-resources>
$ cd appimage-resources
$ ls hello-world-appimage
接下來(lái),使用 cd
進(jìn)入 Git 新創(chuàng)建的目錄。這里有兩個(gè)目錄。請(qǐng)使用 hello-world-appimage
。另一個(gè)是更復(fù)雜的項(xiàng)目,你也應(yīng)該考慮嘗試一下。
Linux GUI 系統(tǒng)會(huì)讀取 helloworld.desktop
文件來(lái)知道如何呈現(xiàn)桌面圖標(biāo)。事實(shí)證明,當(dāng)前的這個(gè)文件會(huì)在以后給你帶來(lái)點(diǎn)麻煩,因此請(qǐng)進(jìn)行一些小修改:添加 Categories=
這行并為其賦予值 GNOME
。不要忘記最后的分號(hào):
$ nano hello-world-appimage/helloworld.desktop
add Categories=GNOME;
從 AppImage GitHub 項(xiàng)目下載 appimagetool
預(yù)編譯的二進(jìn)制文件。訪(fǎng)問(wèn) GitHub 的原因之一:那里有很多出色的文檔和資源。下載二進(jìn)制文件后,使文件可執(zhí)行,并將 hello-world-appimage
目錄傳給它。但是首先,你需要告訴它你想要的架構(gòu)。由于某些原因,一個(gè)名字以 x86_64 結(jié)尾的工具都不能自行確定是否該使用 x86_64 來(lái)構(gòu)建應(yīng)用程序(我不知道這是怎么回事)。
$ 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
如果你沒(méi)有看到任何錯(cuò)誤消息,那么表示完成了,請(qǐng)運(yùn)行:
$ ls
$ ./hello-world-appimage-x86_64.AppImage
總結(jié)
AppImage 是軟件包管理的非常有效的選擇。當(dāng)你探索它時(shí),我想你會(huì)發(fā)現(xiàn)它是 Linux 發(fā)行版默認(rèn)軟件包系統(tǒng)的很好的替代品。