You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
deb paketi oluşturmak için bir derleme talimatı gereklidir. Her ne kadar biz derleme işlemi yapmasak bile dosyaların gerekli yerlere kopyalanması için Makefile dosyası oluşturmalıyız.
build:
# make build komutunda hata vermemesi için:do nothing
install:
mkdir -p $(DESTDIR)
cp -rf usr $(DESTDIR)/
cp -rf opt $(DESTDIR)/
# gerekli diğer dosyalar varsa benzer şekilde kopyalanır.
Not: başta dosyaları taşımlak yerine makefile yardımı ile doğrudan istenilen yere kopyalayabilirsiniz.
4. debian dosyaları.
Öncelikle gerekli dosyaları aşağıdaki komut ile oluşturun.
debmake -n -u 0.0.1 -p example
Ardından debian dizini altındaki dosyaları düzenleyin.
Son olarak paket haline getirin.
dpkg-buildpackage -b
Not: binary formattaki dosyalar git üzerinde tutmak için uygun olmadığı için gbp kullanmadık. İsterseniz kullanabilirsiniz.
Meta paketler arşivi bulunmayan native formatına sahip paketlerdir.
Oluşturmak için boş bir dizin açın ve içerisine aşağıdaki komut ile şablon oluşturun.
mkdir example
cd example
debmake -n -u 0.0.1 -p example
Ardından oluşan control dosyasını düzenleyin.
Source: exampleSection: metapackagesPriority: optionalMaintainer: Sagopa Kajmer <[email protected]>Build-Depends: debhelper (>= 12)Standards-Version: 4.5.0Package: exampleArchitecture: allDepends: package1, package2, package3Description: This is a meta package that depends on package1, package2, and package3.This package is used to install a set of related packages.
├── data
│ ├── org.example.application.desktop # uygulama başlatıcısı
│ ├── org.example.application.gschema.xml # glib şeması
│ ├── org.example.application.policy # polkit kuralı
│ ├── org.example.application.svg # uygulama simgesi
│ └── ...
├── src
│ ├── Actions.py # yetkili kullanıcı ile çalıştırılacak dosya
│ ├── main.py # ana dosya
│ ├── MainWindow.py # uygulama penceresi dosyası
│ ├── ui
│ │ └── MainWindow.ui # glabe şeması
│ ├── util.py # İşe yarar fonksiyonlar için
│ └── ...
├── example.py # uygulama başlatıcı dosya
├── meson.build # derleme talimatı
├── po
│ ├── example.pot # dil dosyası şeması
│ ├── LINGUAS # dil listesi
│ ├── meson.build # dil derleme dosyası
│ ├── tr.po # türkçe çeviri| └── ...
├── README.md # uygulama açıklaması
└── update-translation.sh # dil dosyası güncelleyici betik
Not: Bu şemadaki bazı dosyalar ihitiyaca göre bulunmayabilir.
2. Uygulama kodu
Her uygulamanın bir idsi bulunur. Bu örnekte org.example.application olarak ele aldık.
main.py
Bu dosyanın amacı uygulamanın id değeri ile uygulamayı başlatmak ve ana pencereyi göstermektir. Bu dosyada argument işlemleri gibi işlemler de gerçekleştirilir.
Bu dosyanın amacı uygulamanın ana penceresini oluşturmaktır. Bu dosyada uygulamanın grafiksel işlemleri gerçekleştirilir. (Örneğin bir tuşa basınca çalışacak eylem)
#!/usr/bin/env python3importgiimportosgi.require_version("Gtk", "3.0")
fromgi.repositoryimportGtktry:
importlocalefromlocaleimportgettextas_# Translation Constants:APPNAME="example"TRANSLATIONS_PATH="/usr/share/locale"locale.bindtextdomain(APPNAME, TRANSLATIONS_PATH)
locale.textdomain(APPNAME)
except:
# locale load fallbackdef_(msg):
returnmsgclassMainWindow:
def__init__(self, application):
self.builder=Gtk.Builder()
# Import UI file:glade_file= (
os.path.dirname(os.path.abspath(__file__)) +"/ui/MainWindow.ui"
)
self.builder.add_from_file(glade_file)
self.builder.connect_signals(self)
self.ui_window_main.set_application(application)
# show main windowself.ui_window_main.show()
# do some stuffprint(_("Hello World"))
Burada glade üzerindeki bir elemanı kod tarafında çekmek için self.builder.get_object("element-adı") kullanılabilir.
util.py
Bu dosyanın amacı grafiksel olmayan işlemlerin gerçekleştirildiği yerdir. (Örneğin config dosyası okuma yazma işi). Duruma göre birden çok dosya oluşturabilir ve farklı isimler verebilirsiniz.
Actions.py
Bu dosyanın amacı yetkili kullanıcı ile çalıştırılacak işlemleri içermesidir. Güvenlik sebebi ile bu dosyayı oluştururken dikkatli olmalı ve parametre olarak gelen değerleri doğrudan çalıştırmamalısınız.
glade dosyaları
Bu dosyanın amacı gtk uygulamanız için şema oluşturmaktır. glade üzerinden bu dosyayı oluşturup düzenleyebilirsiniz.
.py dosyası
Bu dosya komut olarak çalışacak ana dosyadır. Asıl görevi uygulamanın bulunduğu dizini sys.path içerisine ekleyip ana uygulamayı çalıştırmaktır. Bu dosya kaynak kod üzerinden çalıştırılma durumunda kullanılmaz. O yüzden bu dosyaya extra bir kod yazılmamalıdır. İçeriği aşağıdaki gibi olabilir.
Çeviri için öncelikle pot dosyasına ihtiyacımız bulunur. Bunun için ise bir betikten yardım alırız.
#!/bin/bashif!command -v xgettext &> /dev/null
thenecho"xgettext could not be found."echo"you can install the package with 'apt install gettext' command on debian."exitfiecho"updating pot file"
xgettext -o po/example.pot --from-code="utf-8" \
`find example -type f -iname "*.py"` \
`find example -type f -iname "*.ui"`forlangin$(cat po/LINGUAS);doif [[ -f po/$lang.po ]];thenecho"updating $lang.po"
msgmerge -o po/$lang.po po/$lang.po po/example.pot
elseecho"creating $lang.po"
cp po/example.pot po/$lang.po
fidone
Bu betik ve ayrıca derleme talimatı için dil listesi gerekmektedir. Bunu po/LINGUAS dizini içine alt alta ekleyebilirsiniz. Uygulama içerisindeki yazılar ingilizce yazılacağı için ingilizce çeviri dosyasına gerek yoktur.
tr
pt
es
Ardından bu betiği çalıştıralım ve pot dosyasını oluşturalım. Çeviri dosyalarını da ekledikten sonra derleme yapmak için meson dosyasını po/meson.build içine yazalım.
Bu dosyanın tek amacı changelog dosyasını okuyup içerisindeki sürüm bilgisini çekmek ve bir dosyaya yazmaktır.
# Define the output fileoutput_file='__version__'# Define the command to extract the versioncmd= ['bash', '-c', 'head -n 1 changelog | sed "s/.*(//g;s/).*//g" > '+meson.current_build_dir()+'/__version__']
# Create a custom targetrun_command(cmd, check:true)
install_data(meson.current_build_dir() /output_file, install_dir : '/usr/share/example')
Bu dosyayı kullanmak için projenin ana meson dosyasına subdir('debian') satırı ekleyin.
Not: Bu dosyayı kullanmak yerine elle sürüm bilgisi yazıp güncelleyebilirsiniz.
rules dosyası
Bu dosya nasıl derlenmesi gerektiğini belirtir. İçeriği aşağıdaki gibi olmalıdır.
#!/usr/bin/make -f
%:
dh $@ --buildsystem=meson
4. paket haline getirilmesi
Uygulama dosyalarımızı ve debian dizinimizi oluşturduktan sonra git üzerine atmaya hazır hale gelmiş demektir. Bunun için öncelikle gitignore dosyasını yazmamız ve git üzerine atmamız gerekmektedir. gitignore içeriği aşağıdaki gibi olmalıdır