自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Canonical 告訴你如何不通過(guò) Snap 商店使用 Snap 包

系統(tǒng) Linux
雖然你可能聽(tīng)到不同的看法,但實(shí)際上,它并未像一些批評(píng)者所想象的那樣完全專有。

對(duì) Ubuntu 的 Snap 打包格式最常見(jiàn)的誤解之一是它是專有的 —— 但是深入研究其文檔后,會(huì)發(fā)現(xiàn)這個(gè)說(shuō)法并不對(duì)。

在上周末拉脫維亞的里加舉行的 Ubuntu 峰會(huì)上,筆者有幸采訪到 Ubuntu 的開(kāi)發(fā)者大使developer advocate,Igor Ljubuncic。期間,他們?cè)敿?xì)探討了關(guān)于 Snap 的各種誤區(qū),包括它被視為完全閉源的、受 Canonical 控制、必須使用 Canonical 的 Snap 商店等眾多謬論。

如果說(shuō)有什么比糟糕的軟件更加厭惡的,那一定是謊言。正如我們?cè)?nbsp;點(diǎn)評(píng) Fedora 39 時(shí)所注意到的,即使在 Linux 誕生之前,各種軟件的擁躉們就經(jīng)常爆發(fā)各種 圣戰(zhàn)。但我們至少希望能堅(jiān)守事實(shí)的公道。毫無(wú)根據(jù)的惡意指責(zé)是沒(méi)有必要的:生活本身已經(jīng)足夠糟糕。

筆者的立場(chǎng)很明確,我們并不特別偏愛(ài)任何 Linux 發(fā)行版或其打包工具。像許多資深電腦技術(shù)人員一樣,在長(zhǎng)期和各種軟件打交道后,筆者已經(jīng)對(duì)所有的軟件厭煩至極。一句廣為接受的說(shuō)法就是:沒(méi)有一個(gè)軟件不讓人頭疼

Linux 就是一個(gè)軟件,因而它難免讓人頭疼。承此,所有的 Linux 發(fā)行版也都不盡如人意。包管理器也是一個(gè)軟件,同樣也不盡人意。但幸運(yùn)的是,至少大多數(shù) Linux 發(fā)行版都有一個(gè)包管理器。這比沒(méi)有軟件包管理器要好,或者更糟糕的是,有不止一個(gè)以上的包管理器,這一點(diǎn) XKCD 927 漫畫(huà)體現(xiàn)的淋漓盡致。

我們并不特別青睞 Snap,也不特別反對(duì) Flatpak。筆者個(gè)人更偏好 AppImage 格式,它不需要其他額外的框架。但雖然有個(gè) AppImageHub,但該格式卻并沒(méi)有提供軟件更新的工具,這個(gè)問(wèn)題就留給了應(yīng)用本身來(lái)解決。

鑒于所有的軟件都不完美,那唯一重要的區(qū)別就在于其問(wèn)題嚴(yán)重的程度。一段時(shí)間以后,你最關(guān)注的就是它是否可運(yùn)行,能否滿足你的需要,以及它的可靠性。

我在早年的職業(yè)生涯中花了很多時(shí)間在技術(shù)支持上,修復(fù)其他人的軟件。因此,我學(xué)到了一個(gè)經(jīng)驗(yàn),那就是降低軟件讓人厭煩程度的一個(gè)重要因素就是它工作的方式是否容易理解。

Btrfs 是復(fù)雜的,而修復(fù)它則更是如此。Git 屬于本質(zhì)復(fù)雜,其 名稱 就體現(xiàn)出這一點(diǎn)。(沒(méi)錯(cuò),“git” 是一個(gè)名詞,而非縮寫(xiě)或代號(hào),有實(shí)際的意思 —— “飯桶”。)OStree 可以說(shuō)是針對(duì)二進(jìn)制文件的 Git,這使得它比普通 Git 至少?gòu)?fù)雜兩倍。而 Flatpak 則是 OStree 的封裝。

這意味著增加了兩層額外的復(fù)雜度:首先,對(duì)復(fù)雜事物的封裝只能隱藏其復(fù)雜性,而不能消除其復(fù)雜性。其次,你不能使用 Flatpak 構(gòu)建一個(gè)操作系統(tǒng),因此你還需要 OStree。

因此,我們將來(lái)逐一揭穿關(guān)于 Snap 格式和工具的一些誤解。這不是一篇入門(mén)指南,而是對(duì)那些不那么顯而易見(jiàn),并且對(duì) Snap 有所誤解的人的一份快速概覽。

無(wú)需商店進(jìn)行分發(fā)

Snap 包其實(shí)就是一個(gè) Squashfs,類似于大多數(shù) Linux 安裝介質(zhì)上的系統(tǒng)鏡像。Snap 包以兩個(gè)文件傳遞:其中一個(gè)是命名為 <name>_<revision>.snap,該文件包含了軟件本身;另一個(gè)則是一個(gè)伴隨的 聲明文件,它為 Snap 提供了數(shù)字簽名。然后,Canonical 還進(jìn)一步 詳細(xì)闡明 了版本修訂的工作原則。

使用 snap download 的指令(而非 snap install)可以容易獲取這些基本文件:

# snap download firefox
Fetching snap "firefox"
Fetching assertions for "firefox"
Install the snap with:
  snap ack firefox_3252.assert
  snap install firefox_3252.snap

然后,這些文件便可以被復(fù)制到另一臺(tái)設(shè)備上進(jìn)行安裝,這種操作不需要訪問(wèn) Snap 商店,僅需使用輸出中的指令即可。

如 Igor 所說(shuō):

“這樣,從 Snap 商店中,你可以選擇你想要的 Snap 包(如 Firefox),將其放入你的內(nèi)部倉(cāng)庫(kù)中,或是 FTP,或是 NFS 上。接著你可以使用它作為在內(nèi)部安裝 Snap 的來(lái)源,而這不需要去訪問(wèn)商店。此外,你還可以將這個(gè)操作與你所使用的任何調(diào)度或部署機(jī)制結(jié)合起來(lái),就如配置管理那樣。”

安裝無(wú)需聲明文件的 Snap 包

通常來(lái)說(shuō),snap ack 命令會(huì)首先讀取并驗(yàn)證簽名,但是你可以選擇跳過(guò)這個(gè)步驟。

snap install "downloaded snap" --dangerous

上述指令會(huì)安裝該 Snap 包,并不會(huì)驗(yàn)證其簽名。請(qǐng)注意,這樣做雖然操作簡(jiǎn)單,但也有一個(gè)重要的限制:使用 --dangerous 選項(xiàng)安裝的 Snap 包不會(huì)自動(dòng)從商店中更新。

所以,實(shí)際上,你可以在你的網(wǎng)絡(luò)內(nèi)部分發(fā) Snap 包,避免它們?cè)噲D連接到 Snap 商店,并自主管理更新。

管控 snapd 內(nèi)置的更新機(jī)制

另一方面,你可以在不忽略驗(yàn)證機(jī)制的前提下,管理和控制操作系統(tǒng)何時(shí)以及如何更新 Snap 包。Igor 則曾撰寫(xiě)過(guò)關(guān)于如何使 Snap 更新暫停 的文章。

你可以設(shè)置暫停 Snap 的更新一段時(shí)間,或永久暫停,甚至只選擇暫停特定的 Snap 包,同時(shí)也能簡(jiǎn)單取消此設(shè)置。例如:

snap refresh --hold
Auto-refresh of all snaps held indefinitely.

另外,你也可以通過(guò)以下方式設(shè)置防火墻攔截 Snap API:

sudo iptables -A OUTPUT -d api.snapcraft.io -j DROP

在無(wú) snapd 環(huán)境下運(yùn)行 snaps

.snap 文件實(shí)際上就是一個(gè)壓縮的文件系統(tǒng),它包含著程序文件(以及各種庫(kù)等),這些都被存放在一個(gè)傳統(tǒng)的目錄結(jié)構(gòu)中,而該目錄結(jié)構(gòu)對(duì)于打包在 Snap 應(yīng)用程序內(nèi)的應(yīng)用來(lái)說(shuō),就是它的根目錄。Snapd 負(fù)責(zé)為此設(shè)置掛載名空間,并通過(guò) Apparmor 和 seccomp 實(shí)現(xiàn)安全隔離。

你可以將其內(nèi)容解壓并直接運(yùn)行:

unsquashfs firefox_3252.snap  
Parallel unsquashfs: Using 20 processors
565 inodes (5428 blocks) to write
[=====================/] 5428/5428 100%
created 399 files
created 149 directories
created 166 symlinks
created 0 devices
created 0 fifos
created 0 sockets
ll squashfs-root/
total 80
drwxr-xr-x  7 igor igor  4096 lis  10 02:33 ./
drwxr-xr-x 10 igor igor  4096 lis  19 15:32 ../
drwxr-xr-x  5 igor igor  4096 lis  10 02:33 data-dir/
-rw-r--r--  1 igor igor 32441 lis  10 02:33 default256.png
-rw-r--r--  1 igor igor  9146 lis  10 02:33 firefox.desktop
-rwxr-xr-x  1 igor igor  2680 lis  10 02:33 firefox.launcher*
drwxr-xr-x  2 igor igor  4096 lis  10 02:33 gnome-platform/
drwxr-xr-x  4 igor igor  4096 lis  10 02:33 meta/
-rwxr-xr-x  1 igor igor  3716 lis  10 02:33 patch-default-profile.py*
drwxr-xr-x  4 igor igor  4096 lis  10 02:33 snap/
drwxr-xr-x  4 igor igor  4096 sij  19  2022 usr/

如果你查看 Snap 內(nèi) Firefox 二進(jìn)制文件的動(dòng)態(tài)依賴,你會(huì)注意到它希望從根文件系統(tǒng)中獲取文件:

ldd usr/lib/firefox/firefox-bin
       linux-vdso.so.1 (0x00007fff33cc5000)
       libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f6cf2c00000)
       libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f6cf2e40000)
       libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f6cf2be0000)
       libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f6cf2800000)
       /lib64/ld-linux-x86-64.so.2 (0x00007f6cf300e000)

在 Snap 內(nèi)部,這個(gè)“根”就是你的基礎(chǔ)系統(tǒng)(比如 core18 或 core20 等)。但是一旦你解壓了這個(gè) Snap,沒(méi)有 snapd 在安裝和運(yùn)行 Snap 時(shí)提供的安全隔離,F(xiàn)irefox 將會(huì)嘗試直接訪問(wèn)你的根目錄的庫(kù)。這可能會(huì)導(dǎo)致執(zhí)行時(shí)的不一致性。

舉例來(lái)說(shuō),你的 Snap 內(nèi)可能包含的是 GNOME 3.38 版的庫(kù),但是你的主機(jī)上運(yùn)行的可能是 GNOME 3.32。如果你嘗試解壓并運(yùn)行這個(gè)應(yīng)用,它可能會(huì)試圖從主機(jī)中加載庫(kù),這可能引起不一致 —— 更甚者,可能會(huì)讓程序崩潰。

為了避免這種情況發(fā)生,你需要做的唯一事情就是設(shè)置 LD_LIBRARY_PATH 環(huán)境變量,以讓程序知道其庫(kù)在何處,確保它首選這些庫(kù),而不是使用可能導(dǎo)致其運(yùn)行失敗的操作系統(tǒng)中的庫(kù)副本。

LD_LIBRARY_PATH: ${SNAP_LIBRARY_PATH}${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}:$SNAP/usr/lib:$SNAP/usr/lib/x86_64-linux-gnu

通常,你會(huì)希望 LD_LIBRARY_PATH 開(kāi)始于 /snap/<snap name>/,然后是 /lib/usr/lib 和其他常用路徑。至于其他內(nèi)容,firefox.launcher 文件負(fù)責(zé)準(zhǔn)備運(yùn)行環(huán)境,剩余的,比如 firefox.desktop,都用于桌面集成:如圖標(biāo)、全名、文件關(guān)聯(lián)等。這些內(nèi)容雖然使應(yīng)用看起來(lái)效果更好,但它們并非嚴(yán)格的必需品。

其實(shí),你甚至不需要解壓 Snap 的內(nèi)容,你可以直接將 Snap 文件本身作為一個(gè) 回環(huán)設(shè)備 掛載 —— 你甚至可以設(shè)置為只讀 —— 但沒(méi)有掛載命名空間隔離。并且,如果沒(méi)有設(shè)置環(huán)境讓 Snap 內(nèi)部的應(yīng)用在尋找它的庫(kù)時(shí)首先從 Snap 內(nèi)部開(kāi)始,你仍然需要正確地設(shè)置庫(kù)路徑。

代理和緩存 Snap 包

正如 Igor 所說(shuō),如果客戶并不打算自行運(yùn)營(yíng)一家具備完整品牌屬性的 Snap 商店,他們可以選擇手動(dòng)設(shè)置一個(gè) Snap 代理。對(duì)此,Canonical 也提供了相應(yīng)的 文檔,并描述了所需的 網(wǎng)絡(luò)訪問(wèn) 權(quán)限。

同時(shí),你也可以 配置 一個(gè)緩存 Snap 代理 —— 這項(xiàng)任務(wù)稍微簡(jiǎn)單一些,對(duì)于希望降低下載帶寬的家庭網(wǎng)絡(luò)來(lái)說(shuō),可能是個(gè)不錯(cuò)的選擇。

搭建自己的 Snap 商店

就如我們之前所述,你完全可以忽略所有來(lái)自 Canonical 的基礎(chǔ)設(shè)施,直接運(yùn)行自己的 Snap 商店。去年,我們寫(xiě)過(guò)一篇關(guān)于 Ubuntu Unity 維護(hù)者 Rudra Saraswat 的文章,他就 做到了這一點(diǎn),這只是他的眾多項(xiàng)目中之一。據(jù)悉,好幾個(gè)在生產(chǎn)環(huán)境中使用 Ubuntu Core 的組織都采取了此種做法,而所有所需的工具都存放在 Ubuntu 倉(cāng)庫(kù)中。

Canonical 在這方面發(fā)布了大量的文檔,包括怎樣構(gòu)建你的 第一個(gè) Snap 包,以及如何用 不同的編程語(yǔ)言 構(gòu)建。今年的峰會(huì)上有多場(chǎng)關(guān)于如何構(gòu)建 Snap 的演講 - 包括 在平板電腦上構(gòu)建 Snap 包,以及如何 自動(dòng)化構(gòu)建更新的 Snap 包,雖然這對(duì)筆者來(lái)說(shuō)有點(diǎn)過(guò)于復(fù)雜。

學(xué)習(xí)一些新的術(shù)語(yǔ)是有必要的,同時(shí)也有 官方文檔 提供幫助。這段解釋我們特別喜歡:

  • 插槽slots
  • 插口plugs
  • 接口interfaces

從我們與 Canonical 代表的對(duì)話中,他們似乎對(duì) Snap 商店被誤解,以及 Snap 被視為封閉、專有系統(tǒng)的爭(zhēng)論顯得尤為不滿。

大約十五年前,有人曾聲稱 Canonical 的代碼托管和項(xiàng)目管理平臺(tái) Launchpad 是專有的,所以 Canonical 在整理代碼后在 2009 年 公開(kāi)發(fā)布 了代碼庫(kù)。但如我們交談的人所言:“沒(méi)人在意?!?它是 Canonical 的內(nèi)部工具,對(duì)其他人來(lái)說(shuō)并沒(méi)有太大的用處。他們表示,他們不希望再經(jīng)歷一次這樣的情況。

我們還注意到,紅帽正在朝反方向前進(jìn),即從開(kāi)源的 Bugzilla 遷移 到封閉的、基于云的 Jira —— 這并未引起太大的爭(zhēng)議。

snapd 自身的代碼已經(jīng)托管在 GitHub 上,作為 Canonical 的 snapcore 倉(cāng)庫(kù)的一部分。這個(gè)被大多數(shù)發(fā)行版使用的打包格式是一個(gè)已經(jīng)存在、有文檔記錄的格式。用于進(jìn)行隔離的工具,是已經(jīng)存在并在其他發(fā)行版中使用的第三方工具,比如,Debian 和 SUSE 家族也使用了 AppArmor,這與 Arch 維基中的 描述 相符,而它的主要競(jìng)品,SELinux,則更復(fù)雜,主要在紅帽及其衍生產(chǎn)品中使用。

盡管 Canonical 自家定制的 Snap 商店 的后端仍然 閉源,但 Snap 格式、snapcore 軟件、snapcraft.io 前端,以及更多組件都是開(kāi)放的。我們?cè)俅螐?qiáng)調(diào),你完全可以自行搭建 自己的 Snap 商店。

請(qǐng)不要受到憤怒的論壇噴子們的誤導(dǎo)。

最后再說(shuō)一點(diǎn)...

實(shí)際上,撰寫(xiě)這篇文章的作者曾經(jīng)就職于紅帽和 SUSE,但他主要還是使用 Ubuntu,從 2004 年 Ubuntu 剛剛發(fā)布起就開(kāi)始一直使用。Ubuntu 不但運(yùn)行順暢,使用起來(lái)也十分便捷。然而,早在多年前他就已經(jīng)從他的主要工作電腦上刪除了 snapd 和相關(guān)的一切工具,取而代之的是 deb-get —— 最初這是 Ubuntu MATE 的創(chuàng)造者 Martin Wimpress 編寫(xiě)的。為了更加迅速,他還選擇使用 Nala 包管理器 而不是 Apt。

如果可以的話,筆者很希望可以放棄各種形式的 Unix,除了服務(wù)器,其他情況下更傾向于使用 RISC OS 或是經(jīng)典的 MacOS。但是遺憾的是,這兩個(gè)操作系統(tǒng)在網(wǎng)絡(luò)瀏覽器、網(wǎng)絡(luò)連接,還有多核支持和整體穩(wěn)定性上有待改進(jìn)。

筆者今年參加 Ubuntu 峰會(huì)的費(fèi)用是由 Canonical 承擔(dān)的,這一點(diǎn)他愿意公開(kāi)。類似的,Linux 基金會(huì)曾資助他參加 今年 在 Bilbao 的開(kāi)源峰會(huì),而紅帽則資助了他在 2016 年在 Kraków 參加 Flock to Fedora 峰會(huì)。這類贊助可以讓我們將廣告預(yù)算分配到其他地方,但并不會(huì)對(duì)我們的報(bào)道產(chǎn)生影響:我們總會(huì)積極追蹤那些 IT 新聞。

責(zé)任編輯:龐桂玉 來(lái)源: Linux中國(guó)
相關(guān)推薦

2016-06-17 08:29:09

CanonicalSnapLinux

2022-01-10 08:43:25

CanonicalSnap應(yīng)用Linux

2022-02-24 16:48:53

SnapLinux

2017-08-21 11:13:43

LinuxSnapcraft Snap軟件包

2022-04-17 18:26:36

Ubuntu開(kāi)源

2021-09-18 10:26:58

UbuntuFirefox瀏覽器

2022-11-17 15:10:41

Ubuntu

2021-01-12 10:16:42

CSS 容器優(yōu)化滾動(dòng)

2022-10-21 10:31:36

Arch LinuxSnap

2022-03-28 13:30:24

UbuntuFirefoxsnap

2022-05-09 10:51:26

Snap軟件包Ubuntu

2022-11-06 19:34:53

UbuntuLinux

2022-08-07 12:17:21

Snap磁盤(pán)

2022-07-11 12:23:50

UbuntuLinux

2011-09-15 15:58:37

iPhone應(yīng)用Quick Snap拍攝工具

2021-05-11 09:42:04

CI校驗(yàn)前端git config

2022-11-13 19:46:49

Ubuntu

2023-04-06 11:10:31

閉包JavaScript

2009-03-21 09:47:09

微軟Windows 7Aero Snap

2023-07-25 09:28:24

UbuntuFlatpak
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)