Snap, Ubuntu dağıtımına yazılım yüklemeyi kolaylaştırmak için Canonical tarafından geliştirilen bir teknolojidir. Nispeten yeni bir gelişmedir. Snap'in geliştirilmesi birkaç yıl içinde gerçekleşti, ancak yalnızca Ubuntu 16.04'ün piyasaya sürülmesiyle kitleler tarafından kullanılmaya hazır bir durumda ortaya çıktı.
Snap'in ana avantajı, programları bağımlılıkları olmadan yükleyebilmesidir. Gerekli tüm kütüphaneler zaten programla birlikte paketin içindedir ve programı çalıştırmak için sistemden hiçbir şey gerekmez. Güncelleme yaparken kullanıcı sistemde değişiklik yapmadan bir snap paketini güncellemek zorundadır ve arıza ve hata durumunda paketi önceki sürüme geri döndürebilir. Web'de kullanıcılar arasında snap teknolojisinin gerçekten iyi olup olmadığı ya da deb
paketleri lehine terk edilip edilmemesi gerektiği konusunda sık sık tartışmalara rastlayabilirsiniz. Ancak bunu zaman ve testler gösterecektir. Bu makalede snap
paketleri oluşturma sürecine bakacağız. Bunları oluşturmak aynı deb
paketlerinden biraz daha kolaydır.
Snap
paketleri oluşturmak için Snapcraft adında özel bir araç kullanacağız. Bu, geliştiricinin sistem genelinde gerekli dosyaları oluşturmak için programları paketlemesine olanak tanıyan snap paketleri oluşturmak için resmi bir araçtır. Snapcraft yalnızca dosyaları kopyalamanıza değil, aynı zamanda kaynak kodunu indirmenize ve programı oluşturmanıza da olanak tanır.
Şimdi, örnek olarak Samplenote uygulamasını kullanarak snap
paketlerinin nasıl oluşturulacağını görelim.
İlk olarak Snapcraft'ı yükleyin. En son sürümü edinmek için sistemimize bir PPA ekleyin:
$ sudo add-apt-repository ppa:snappy-dev/tools
Şimdi paket listesini güncelleyin ve programı yükleyin:
$ sudo apt-get update
$ sudo apt-get install snapcraft
Snapcraft'ın kurulumu tamamlandığında, programın kaynak kodunu almak için devam edebiliriz. Öncelikle GitHub'dan kaynakları indirin ve açın:
$ wget https://github.com/Automattic/simplenote-electron/releases/download/v1.0.1/Simplenote-linux-x64.1.0.1.tar.gz
$ tar xvzf Simplenote-linux-x64.1.0.1.tar.gz
Programın derlenmesine gerek olmadığı için işimiz biraz daha kolay. Programın bulunduğu klasöre gidin ve Snapcraft derleme ortamını orada başlatın:
$ cd Simplenote-linux-x64
$ snapcraft init
Son komutu çalıştırdıktan sonra snapcraft.yml
dosyası klasörde görünecektir. Dosyayı düzenleyerek snap paketimizi oluşturma sürecini yapılandıralım. Aşağıdaki içeriğe sahip bir dosyaya ihtiyacımız olacak:
name: simplenote
version: 1.0.1
summary: The simplest way to keep notes.
description: The simplest way to keep notes. Light, clean, and free.
apps:
simplenote:
command: usr/bin/wrapper
plugs:
- unity7
- opengl
- network
parts:
simplenote:
plugin: copy
stage-packages:
- libnss3
- fontconfig-config
- gnome-themes-standard
files:
Simplenote: Simplenote
wrapper: usr/bin/wrapper
icudtl.dat: icudtl.dat
snapshot_blob.bin: snapshot_blob.bin
natives_blob.bin: natives_blob.bin
resources*: resources
libnode.so: usr/lib/x86_64-linux-gnu/libnode.so
libffmpeg.so: usr/lib/x86_64-linux-gnu/libffmpeg.so
İlk dört satır paketin kendisi hakkında bilgi, programın adı, sürümü ve kısa ve tam bir açıklamadır.
Komut - bu, programı başlatacak komuttur, ayrıca script warpper
kullanacağız, çünkü ek ortam değişkenleri belirtmemiz gerekiyor.
Fişler
- bunlar program tarafından kullanılabilecek arayüzlerdir. Önemli olan nokta, ek programların donanım ve kişisel verilere erişemedikleri izole bir ortamda çalışmasıdır. Programımızın düzgün çalışması için opengl
, unity7
ve ağ
arayüzlerine erişim sağlaması gerekir.
Komutu çalıştırarak mevcut arayüzleri ve bunları kullanan programları görebilirsiniz:
$ snap interfaces
Parçalar
bölümünde program dosyalarını belirtmeniz gerekir. Özellikle, snapcraft
'ın bir paket oluştururken ne yapması gerektiği. Herhangi bir şeyi derlememiz gerekmediğinden, dosyaları kopyalamak için copy eklentisini kullanırız. Kopyalanması gereken dosyalar
dosyalar bölümünde listelenir. Sadece çalıştırılabilir dosyalar değil, aynı zamanda gerekli tüm kütüphaneler de vardır, böylece program ihtiyaç duyduğu tüm bileşenleri alacaktır.
Girişin formatı aşağıdaki gibidir:
system_file: snap_package_file_path
Standart olmayan bir giriş vardır:
resources*: resources
Joker karakter *
tüm dizini kopyalamanızı sağlar. Tüm dosyaların sistemden kopyalanmasını önlemek için, site-packages bölümünde programa hangi paketlerin snap paketine yüklenmesi gerektiğini söyleyen bir seçenek vardır, bizim durumumuzda bunlar libnss3
, fontconfig-config-config
ve gnome-themes-standard
'dır.
Programın hangi kütüphaneleri kullandığını görmek için komutu kullanabilirsiniz:
ldd Simplenote | grep Simplenote
libnode.so => /home/sergiy/test/Simplenote/Simplenote-linux-x64/./libnode.so (0x00007f05fb477000)
libffmpeg.so => /home/sergiy/test/Simplenote/Simplenote-linux-x64/./libffmpeg.so (0x00007f05f61ec000)
Önemli olan bu kütüphanelerin programla birlikte gönderilmesidir, bu yüzden snapcraft.yaml
yapılandırma dosyasında bunları belirtmemiz gerekir. Diğer tüm kütüphaneler sistemde mevcuttur ve snapcraft
tarafından otomatik olarak algılanacaktır.
Sonra, sarmalayıcı
dosyasını oluşturalım:
!/bin/sh
export FONTCONFIG_PATH=$SNAP/etc/fonts
export FONTCONFIG_FILE=$SNAP/etc/fonts/fonts.conf
export XDG_DATA_HOME=$SNAP/usr/share
export LD_LIBRARY_PATH=$SNAP_LIBRARY_PATH:$SNAP/usr/lib/x86_64-linux-gnu/
exec "$SNAP/Simplenote" "$@"
Bu çok basit - bir Bash
betiği. Yazı tipleri için yolları ayarlayın ve programa kütüphaneleri nerede arayacağını söyleyin, böylece libnote.
so
ve libffmpeg.so
başarıyla bulunur. Ve son satır simplenote
'u başlatır.
Yapılacak bir sonraki şey bu dosyayı çalıştırılabilir hale getirmektir:
$ chmod +x wrapper
Paketi oluşturmaya başlamak için çalıştırın:
$ snapcraft
Derleme işlemi biraz zaman alabilir ve derleme tamamlandığında paketi kurabilirsiniz:
$ sudo snap install simplenote_1.0.1_amd64.snap
Programı çalıştırmak için normal komutu kullanabilirsiniz:
$ simplenote
Şimdi program yüklenmiştir. Uygulamalarınızı paketlemek için aynı ek
paket oluşturma yöntemini kullanabilirsiniz.