Giriş

Bu yazıda bir önceki bölümde anlatılanların devamı olarak sistemden bağımsız hale getirdiğimiz uygulamamızı nasıl appimage haline getireceğimiz anlatılacaktır.

Yazımızın 1. bölümüne bu adresten ulaşabilirsiniz.

İlk olarak Appimage dosyasını çözme ve paketleme ardından appimage dosyasının iç yapısı üzerinde durulacaktır.

Appimage dosyalarının çözülmesi

Herhangi bir appimage dosyasına –appimage-extract parametresi eklendiğinde appimage dosyası çözülür.

Appimage paketleme

Appimage dosyaları appimagekit kullanılarak paketlenir. Appimagekit aşağıdaki gibi kullanılır.

ARCH=x86_64 appimagetool-x86_64.AppImage /home/user/appimage-proje

Appimage dosyamız proje dizinimizin bir üst dizininde oluşturulur.

Paketleme dizini oluşturma

Öncelikle paketleme dizini oluşturmamız gerekiyor. Appimage dosyalarında temel 3 dosyaya ihtiyaç vardır. Bunlar AppRun dosyası, uygulama başlatıcısı ve uygulama simgesidir.

$ ls appimage-test
test.desktop
test.png
AppRun
...
test.bin
libs/
ld-linux-x86-64.so.2
...

Bir önceki bölümde sistemden bağımsız hale getirdiğimiz uygulamamızı yukarıdaki örnekteki gibi yerleştirmemiz gerekmektedir. Burada .desktop uzantılı dosyamızı yakından inceleyelim.

[Desktop Entry]
Name=Test uygulama
Exec=test.bin
Icon=test
Type=Application
Categories=Utility;

Burada Name uygulamamızın ismini, Exec çalıştırılacak dosyanın adını, Icon uygulama simgesi adını belirtir.

  • Not: Icon bölümünde belirtilen isimle aynı isime sahip uygulama simgesi bulunması gerekmektedir.

AppRun dosyası

AppRun dosyası appimage çalıştırıldığında çalıştırılacak olan dosyadır. Bu dosyada uygulamamızı çalıştırmak için gereken komutlar tanımlanır.

#!/bin/bash
echo "Merhaba Dünya"

Yukarıda ekrana yazı yazan basit bir komut kullandık. Burada dikkat edilmesi gereken noktalar şunlardır.

  • Appimage bütün sistemlerde çalışması için tasarlandığı için /bin/sh yerine /bin/bash tercih edilir.
  • Paketlenmiş bir appimage dosyası salt okur olarak bağlanarak çalıştırılır.
  • AppRun dosyasarı çalıştırılabilir dosya olmalıdır. Betik olmasına gerek yoktur. Eğer ikili dosya kullanılacaksa static oarak derlenmelidir.

AppRun dosyamızın içerisinde bir önceki bölümdeki gibi uygulamamızı çalıştıralım. İlk olarak mevcut bulunduğumuz yeri tespit etmemiz gerekmektedir. Bunun için readlink komutundan faydalanabiliriz.

#!/bin/bash
export SELF=$(readlink -f "$0")
export HERE=${SELF%/*}
"${HERE}"/ld-linux-x86-64.so.2 --library-path "${HERE}"/libs/ "${HERE}"/test.bin

Bukarıdaki örnekte appimage bağlanan dizini HERE çevresel değişkeni olarak tanımlayıp onu kullanarak uygulamamızı başlattık.

Çevresel değişkenler

Yazının devamında uygulamamızın düzgün çalışması için gereken tanımlamalar üzerinde durulacaktır.

AppRun dosyamızda glib şemaları için aşağıdaki gibi çevresel değişken tanımı yapılır. Ardından glib şemamız derlenir.

# AppRun dosyamıza aşağıdaki ekleme yapılır.
export GSETTINGS_SCHEMA_DIR="${HERE}"/glib-schemas
# glib şemamız aşağıdaki gibi derlenir.
glib-compile-schemas proje-dizini/glib-schemas

Qt plugin dizini QT_PLUGIN_PATH değişkeni ile belirtilir.

export QT_PLUGIN_PATH="${HERE}"/qt5/plugins

Uygulamanın normalde /usr/share dizininde yer alması gereken dosyalarının konumunu XDG_DATA_DIRS değişkeni ile tanımlamamız gerekebilir.

export XDG_DATA_DIRS="${HERE}"/share

Python modülü dizini PYTHONPATH ile tanımlanır.

export PYTHONPATH="${HERE}/python-shared"

Perl kütüphanesi dizinleri PERLLIB ile tanımlanır.

export PERLLIB="${HERE}/perl-libs"