Debian Paketi Oluşturma Nasıl Yapılır

Debian Package Creation Howto



1. Önsöz

Bir makineden sorumlu olmak, donanımın yanı sıra yazılım bileşenlerine de bakmak anlamına gelir. Bir sistem yöneticisi olarak günlük hayatta görüldüğü gibi, yazılımı bir sürü kaynak dosyadan ziyade bir yazılım paketi olarak kurmak çok daha iyidir. Bu, sistemi düzgün bir şekilde koruma maliyetlerini azaltır.

Tercih ettiğiniz distribütörden temin edilebilen paketler, bir paket bakımcısı tarafından doğrulanır ve denetlenir. Yazılımı test etti ve dağıtımda bulunan diğer yazılım paketlerine uyduğundan emin oldu. Ayrıca, paket sorumlusundan alınan bir GPG anahtarı ile paket imzalanır. Bu, paketin bütünlüğünü garanti eder ve paketin güvenilir bir kaynaktan geldiğini gösterir.







Paket formatı Linux dağıtımınıza bağlıdır. Seçilen formatlar aşağıdakilerdir:



deb

Kullanılan paketler: Debian GNU/Linux , Ubuntu , Armbian , Linux Darphanesi , Knoppix



rpm

Kullanılan paketler: Kırmızı şapka , fötr şapka , CentOS , OpenSuse





tgz and txz

Kullanılan paketler: slackware

tar.xz

Kullanılan paketler: Arch Linux



Bu belge, Debian GNU/Linux için bir paketin nasıl oluşturulacağını kısaca açıklar. Debian paket formatı ve 'deb' tabanlı bir Linux sistemini sürdürme araçları hakkında ayrıntılı bilgi için Debian Paket Yönetim Kitabına göz atabilirsiniz. [dpmb] Debian GNU/Linux için paketler oluşturmak için bu belgeler gereklidir:

  • Debian Yeni Bakımcı Kılavuzu [dnmg]
  • Debian Geliştirici Referansı [GDR]
  • Debian Paketleme Eğitimi [Yapabilmek]
  • Debian Politika Kılavuzu [dpm]

Üzerinde çalışacağımız paketin adı `helloworld` olup 0.1 versiyon numarasına sahiptir. Gösteri amacıyla, yalnızca şu ünlü mesajı veren tek bir Python betiği içerir Hello, world!:

#!/usr/bin/python print ('Hello, world!') 

2. Gereksinimler

2.1. GPG anahtarı

1. adım olarak, GPG anahtarınızı hazır bulundurun. Daha sonra, paketi imzalamak için anahtara ihtiyaç duyulacaktır. İmzasız paketlerin güvenilmez olduğunu ve Debian evreninin bir parçası olamayacağını unutmayın.

Henüz bir GPG anahtarınız yoksa bir tane oluşturun. Aşağıdaki üç adımı takip edebilirsiniz. İlk komut yeni bir anahtar oluşturur, ikincisi yeni anahtarınızı ayrı bir dosyaya aktarır ve üçüncü komut, anahtarı kişisel anahtarlığınıza ekler.

$ gpg --gen-key $ gpg -a --output ~/.gnupg/YOUR_NAME.gpg --export 'YOUR NAME' $ gpg --import ~/.gnupg/YOUR_NAME.gpg 

Oluşturma sırasında _YOUR NAME_ adının doğru olduğundan emin olun. Ad ve soyadının bir arada kullanılması yaygındır. Debian paketinin 'kontrol' dosyasını oluştururken bu adın pakette tam olarak aynı olması gerekir. GPG ile ilgili daha fazla bilgi için GNU Gizlilik El Kitabına [gph] bakın.

2.2. paketleme aracı zinciri

Kaynak kodlu bir Debian paketi oluşturmak için sisteminizde aşağıdaki yazılım paketleri gereklidir:

  • inşa-temel
  • otomatik konf
  • otomobil yapımı
  • autotools-dev
  • dh-make
  • debhelper
  • tanımlayıcılar
  • sahte kök
  • xutils
  • lintian
  • inşaatçı

Kullanıcı `root` olarak bunları aşağıdaki komutu kullanarak yükleyebilirsiniz:

# apt-get install build-essential autoconf automake autotools-dev dh-make debhelper devscripts fakeroot xutils lintian pbuilder 

2.3. Paketlenecek yazılımı hazırlayın

Paketi oluşturmak için bir dizin hazırlamamız gerekiyor. Paketi oluşturacağımız ortamı hazırlamak için bir dizin oluşturun:

$ mkdir -p ~./build/helloworld/0.1 

`tar.gz` sıkıştırılmış arşivini dizine kopyalayın:

$ cp helloworld-0.1.tar.gz ~./build/helloworld/0.1 

Dizine geçin ve paketi çıkarın:

$ cd ~./build/helloworld/0.1 ~/build/helloworld/0.1$ tar -xzf helloworld-0.1.tar.gz 

Şimdi, dizin hem kaynak kodu ayrı bir dizinde hem de sıkıştırılmış arşivi içerir:

~/build/helloworld/0.1$ ls helloworld-0.1 helloworld-0.1.tar.gz 

3. Debianizasyon

Bu noktada bir Debian paketine özgü dosyaları ekleyeceğiz. Bu nedenle bu adıma yazılımın _Debianization_ adı verilmiştir. Bu, birkaç tek adımda yapılır.

3.1 Paket yapısını hazırlayın

Paketin tüm kaynak kodunu tutan dizine geçin. Örneğimizde paket, yalnızca 'helloworld.py' dosyasını içerir:

~$ cd build/helloworld/0.1/helloworld-0.1 ~/build/helloworld/0.1/helloworld-0.1$ ls helloworld.py 

Bir Debian paketine özgü dosyaları ekleyelim. 'dh_make' aracı devreye girer. '-e' anahtarı, 'debian/control' dosyasının 'Maintainer' alanındaki e-posta adresi olarak verilen adresi kullanır. Paketi oluşturmak yerine kendi e-posta adresinizi kullanın. GPG anahtarınıza karşılık gelen aynı e-posta adresini kullanmayı unutmayın.

'-f' anahtarı, verilen dosyayı orijinal kaynak arşivi olarak kullanır ve mevcut program ağacının 'program.orig'e kopyalanmasını atlar.

~/build/helloworld/0.1/helloworld-0.1$ dh_make -e [email protected] -f ../helloworld-0.1.tar.gz 

Komut isteminde, oluşturulması gereken paket türünü seçmeniz istenir. _single binary_ seçmek için `s` yazın.

Type of package: single binary, indep binary, multiple binary, library, kernel module, kernel patch? [s/i/m/l/k/n] s Maintainer name : Frank Hofmann Email-Address : [email protected] Date : Sat, 04 Nov 2017 21:16:13 +0100 Package Name : helloworld Version : 0.1 License : blank Type of Package : Single Hit to confirm: Currently there is no top level Makefile. This may require additional tuning. Done. Please edit the files in the debian/ subdirectory now. You should also check that the helloworld Makefiles install into $DESTDIR and not in / . 

Bu, 'debian' adlı bir dizinde sonuçlanır:

~/build/helloworld/0.1/helloworld-0.1$ ls debian helloworld.py 

Bu dizin, pakete özgü tüm dosyaları içerir.

3.2. Kontrol dosyasını ayarlayın

'debian/control' dosyası, paketi _oluşturmak_ için gerekli olan bağımlılıkları tutar. `dpkg-depcheck -d ./configure` komutunu kullanarak gerekli tüm paketleri içeren bir liste alırsınız. Bizim durumumuzda Python yorumlanmış bir dil olduğu için başka bir pakete gerek yoktur.

Ardından, `debian/control` dosyasını düzenlemeli ve pakete özel değerler eklemeliyiz. Örneğimiz için aşağıdaki gibi görünüyor:

Source: helloworld Section: python Priority: optional Maintainer: Frank Hofmann < [email protected] > Build-Depends: debhelper (>= 9) Standards-Version: 3.9.5 Homepage: http://www.efho.de/ #Vcs-Git: git://anonscm.debian.org/collab-maint/helloworld.git #Vcs-Browser: http://anonscm.debian.org/?p=collab-maint/helloworld.git;a=summary Package: helloworld Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, python Description: Prints Hello World in Python Prints Hello World in Python 

3.3. Telif hakkı dosyasını ayarlayın

'debian/copyright' dosyası, yazılım paketinin lisans bilgilerini içerir. GNU Kamu Lisansı 2 (GPLv2) aracılığıyla yayınlanmak üzere hazırlanmıştır. Örneğimiz için aşağıdaki gibi görünüyor:

Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: helloworld Source: http://www.efho.de/ Files: debian/* Copyright: 2017 Frank Hofmann < [email protected] > License: GPL-2+ This package is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. . This package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. . You should have received a copy of the GNU General Public License along with this program. If not, see . On Debian systems, the complete text of the GNU General Public License version 2 can be found in '/usr/share/common-licenses/GPL-2'. 

3.4. Değişiklik günlüğü dosyasını ayarlayın

Telif hakkı bilgisinden sonra `debian/changelog` dosyası ayarlanmalıdır. Örneğimizde İlk sürüm bilgisini ekliyoruz.

helloworld (0.1-1) unstable; urgency=low * Initial release -- Frank Hofmann < [email protected] > Sat, 04 Nov 2017 21:16:13 +0100 

Şimdiye kadar ihtiyacımız olan tek şey bu - şimdi nihayet paketi oluşturabiliriz.


4. Paketi oluşturun

Paketi oluşturmak için bir dizini yukarı taşımalı ve aşağıdaki komutu çalıştırmalıyız:

~/build/helloworld/0.1/helloworld-0.1$ dpkg-buildpackage -rfakeroot

'-rfakeroot' seçeneği, 'dpkg-buildpackage'nin 'fakeroot' komutunun yardımıyla ayrıcalıklı bir kullanıcı olarak komutları çalıştırmasını sağlar. Bu, paketi hazırlamak ve dosya ve dizinler oluşturmak için gereklidir.
Yukarıdaki komut, daha uzun bir çıktı mesajları listesiyle sonuçlanır (burada Almanca dil ortamında gösterilmektedir):

dpkg-buildpackage: Quellpaket helloworld dpkg-buildpackage: Quellpaket helloworld dpkg-buildpackage: Quellversion 0.1-1 dpkg-buildpackage: Quelldistribution unstable dpkg-buildpackage: Quellen geändert durch Frank Hofmann < [email protected] > dpkg-buildpackage: Host-Architektur amd64 dpkg-source --before-build helloworld-0.1 fakeroot debian/rules clean dh clean dh_testdir dh_auto_clean dh_clean dpkg-source -b helloworld-0.1 dpkg-source: Information: Quellformat 3.0 (quilt) wird verwendet dpkg-source: Information: helloworld wird unter Benutzung des existierenden ./helloworld_0.1.orig.tar.gz gebaut dpkg-source: Information: helloworld wird in helloworld_0.1-1.debian.tar.xz gebaut dpkg-source: Information: helloworld wird in helloworld_0.1-1.dsc gebaut debian/rules build dh build dh_testdir dh_auto_configure dh_auto_build dh_auto_test fakeroot debian/rules binary dh binary dh_testroot dh_prep dh_auto_install dh_installdocs dh_installchangelogs dh_perl dh_link dh_compress dh_fixperms dh_strip dh_makeshlibs dh_shlibdeps dh_installdeb dh_gencontrol dpkg-gencontrol: Warnung: Feld Depends von Paket helloworld: unbekannte Substitutionsvariable ${shlibs:Depends} dh_md5sums dh_builddeb dpkg-deb: Paket helloworld wird in ../helloworld_0.1-1_amd64.deb gebaut. dpkg-genchanges <../helloworld_0.1-1_amd64.changes dpkg-genchanges: kompletter Quellcode beim Hochladen hinzufügen dpkg-source --after-build helloworld-0.1 dpkg-buildpackage: Alles hochzuladen (Originalquellen enthalten) signfile helloworld_0.1-1.dsc Sie benötigen eine Passphrase, um den geheimen Schlüssel zu entsperren. Benutzer: 'Frank Hofmann (Hofmann EDV) < [email protected] > ' 4096-Bit RSA Schlüssel, ID D431AC07, erzeugt 2014-09-05 

4.1. Paketin doğrulanması

Tebrikler - bir Debian paketi oluşturmayı başardınız - evet! Şimdi pakete daha yakından bakalım. Burada 'lintian' devreye giriyor. Bu araç, Debian paketlerinin yerine getirmesi gereken katı kurallara karşı ihlalleri bulmak için paketinizi doğrular.

Testleri çalıştırmak için aşağıdaki komutu yazın:

lintian helloworld_0.1-1_amd64.deb 

Araç kural ihlallerini değil, aynı zamanda yazım hatalarını ve yanlış karakterleri de bulur. “–pedantic” anahtarı, “lintian”ın normalden çok daha kritik olmasını ister. Aşağıda görebileceğiniz gibi 'lintian' biraz huysuz ve üç uyarı ve bir hata keşfetti.

İlk uyarı dışında lintian'ı kolayca mutlu edebilir ve paket içeriğini kural setine göre ayarlayabiliriz. 'new-package-should-itp-bug' uyarısı, ITP paketine karşı herhangi bir hata raporu olmadığı anlamına gelir (ITP, _pakete yöneliktir_ anlamına gelir). Normal bir Debian paketi için, bu yazılımı paketlemeye başlamayı düşündüğünüzü başkalarına bildirmek için ITP paketi için bugtracker'a bir hata raporu gönderilmelidir.

4.2. Uyarı: `readme-debian-contains-debmake-template

`README.Debian` dosyasının bu paketle ilgili ek notlar tutması amaçlanmıştır. `dh_make` bizim için bu dosyayı yarattı:

helloworld for Debian --------------------- -- Frank Hofmann < [email protected] > Sat, 04 Nov 2017 21:16:13 +0100 

Örneğimizde ek bilgiye sahip değiliz, bu yüzden dosyayı silebiliriz.

4.3. Uyarı: 'açıklama-başlı-boşluklarla-başlar'

Bu uyarı, paketimizin `debian/control` dosyasındaki daha uzun açıklamasının birden fazla boşlukla başlamasından kaynaklanmaktadır. Tek bir boşluğu kaldırır kaldırmaz uyarı kaybolacaktır.

4.4. Hata: 'açıklama-özet-yinelendi'

Her paket, 'debian/control'de hem kısa hem de daha uzun bir açıklama gerektirir. Her iki açıklama da aynı olduğu için bu hata oluşur. Daha uzun açıklamayı uzattığımız anda hata ortadan kalktı.


5. Bağlantılar ve Referanslar

- [ddr] Andreas Barth, Adam Di Carlo, Raphaël Hertzog, Lucas Nussbaum, Christian Schwarz, Ian Jackson: Debian Geliştirici Referansı
– [Dnmg] Josip Rodin, Osamu Aoki: Debian Yeni Bakımcı Kılavuzu
- [dpmb] Axel Beckert, Frank Hofmann: Debian Paket Yönetim Kitabı
- [dpm] Debian Politika Kılavuzu
- [Yapabilmek] Debian Paketleme Eğitimi
– [gph] GNU Gizlilik El Kitabı
– [lushpaiPackage] Alex Lushpai: Kaynaktan debian paketi nasıl oluşturulur


6. Teşekkür

Yazar teşekkür etmek istiyor Axel Beckert ve Gerold Rupprecht Bu makaleyi hazırlarken destekleri ve eleştirmenleri için.