snap是ubuntu母公司canonical於2023年4月發布ubuntu16.04時候引入的一種安全的、易於管理的、沙盒化的軟體包格式,與傳統的dpkg/apt有著很大的區別。
snap可以讓開發者將他們的軟體更新包隨時發布給使用者,而不必等待發行版的更新週期;其次snap應用可以同時安裝多個版本的軟體,比如安裝python2.7和python3.3。
#查詢已經安裝了的軟體
sudo snap list
#搜尋要安裝的snap軟體包
sudo snap find ***x
#檢視snap軟體的更多資訊
sudo snap info ***x
#安裝snap軟體包
sudo snap install ***x
#更換軟體安裝通道
sudo snap switch –channel=***x ***x
#更新snap軟體包
sudo snap refresh ***x
#還原到之前版本
sudo snap revert ***x
#解除安裝snap軟體
snapcraft是用來構建snaps的軟體,他使用也非常的簡單,我們僅僅需要寫乙個snapcraft.yaml的配置檔案即可。接下來就用snapcraft打包一下gnu專案裡的hello和bash。先從hello開始。
由於ubuntu 18.04lts中已經安裝有snapcraft了,我們就不需要在去apt安裝了。可以直接開始打包我們的snap軟體。
1.建立乙個打包snap的目錄hello。
mkdir hello
cd hello
snapcraft init
3.使用vim編輯配置檔案snapcraft.yaml。
vim snap/snapcraft.yaml
將其修改為以下內容。
name:描述這個snap軟體的名稱
version:描述這個軟體的版本,可以用ascii碼。
summary:對軟體的乙個總結。
description:對軟體進行乙個描述。
grade:軟體的發行通道。
confinement:對軟體做乙個限制,如devmode或者strict。
之後按照格式定義以下parts。
其中source表示打包軟體的**,plugin表示此軟體安裝時候需要的一些依賴關係,使用autotools即可。
4.編譯snap打包軟體。
5.之後進行測試安裝。
可以通過snap list檢視是否安裝成功,注意看notes部分,其為devmode。
6.進行測試,輸入hello命令。
神馬??竟然抱錯了。當然你肯定會想用which hello進行檢查。不過我可以告訴你答案,hello的二進位制檔案在/snap/bin裡,是不是明白**出問題了?
我們已經知道了為什麼hello不能成為全域性命令了,當然也還是只能通過修改snapcraft.yaml配置檔案來使之成為全域性命令。
2.迭代你的snap打包軟體。
3.之後再次嘗試hello命令,終於生效了。
2.之後我們重新執行。
snapcraft prime
毫無疑問你肯定會報錯失敗。為什麼呢??因為gnu-hello和gnu-bash兩個不同的parts都將定向到了乙個share/info/dir裡,這裡就發生了衝突。
3.其實在執行snapcraft的時候,類似於執行./configure,這裡只用給./configure乙個引數即可。那麼snapcraft.yaml配置檔案可以這麼修改。
這相當於將—infodir=/var/bash/info作為乙個引數傳遞給了./configure。
3.之後重新編譯。
4.之後重新測試。
sudo snap try --devmode prime
5.之後再次測試hello和hello.bash命令,看看是否能進入這個子shell。
之後通過env查詢當前的環境,確認進入子shell,要退出的話,按q哦!
刪除devmode
之前通過snap list可以看出notes部分標記hello為devmode,既然我們都測試完畢了,那麼是時候改為strict了。
1.修改配置檔案snapcraft.yaml。
將devmode修改為strict;其實也可以將grade後面的devel修改為stable了。
2.再次snapscraft一下。
3.你可以嘗試安裝它。
sudo snap install hello2.10amd64.snap
不出意外會報錯:error: cannot find signatures with metadata for snap "hello2.10amd64.snap"。
4.為什麼會報錯呢?是由於我們的軟體沒有經過snap store簽名,而之前的安裝是因為是devmode所以可以被安裝,因而要在本地安裝非devmode的snap時候,需要加入—dangerous選項。
之後snap打包後的hello即可被安裝,在通過snap list看一下,notes部分已經沒有devmode的字樣了。而程式也可以正常的執行。
iOS 沙盒 資料持久化
注意在這個筆記裡有部分路徑為方法,需要自己定義,在這裡一定要熟練使用獲取資料夾路徑以及路徑的拼接 什麼是資料持久化 資料的永久儲存 為什麼要做資料持久化 儲存在記憶體中的資料,程式關閉,記憶體釋放,資料丟失。這種資料是臨時的。資料持久化的本質 資料儲存成檔案,儲存到程式的沙盒裡 1.每個應用程式位於...
軟體包安裝
指令碼安裝包,c語言源 開源 編譯時間長。lamp環境搭建 linux apache mysql php 效率高 mnt cdrom packagehttpd 2.2.15 15.el6.centos.1.i686.rpm httpd 軟體名 2.2.15 軟體版本 15 軟體發布次數 el6.ce...
ios沙箱軟體 iOS app ipa 與 沙盒
documents 儲存應用執行時生成的需要持久化的資料,itunes同步裝置時會備份該目錄。例如,遊戲應用可將遊戲存檔儲存在該目錄 獲取路徑方法 nsstring documents nssearchpathfordirectoriesindomains nsdocumentdirectory,1...