Hoşgeldin Misafir

Debian paket hazırlama rehberi

DevilMcRayn

20 Kas 2017
665 Mesaj

Aktiflik

Seviye

Deneyim

TIM / GÖREV:

Merhabalar bu yazımızda Lojistik grup adına Debia paket hazırlama rehberi Hakkında bilgileri siz değerli Turkhacks üyelerimize Anlatmaya çalışacaz.

1. Genel Bakış​

Bir Debian paketi, Debian tabanlı dağıtımlarda yazılım dağıtmanın en basit ve en etkili yoludur. Bağımlılıkları yönetmekle ilgilenir ve kurulum/yükseltme/kaldırma işlemleri için iyi bir arayüz sağlar.
Bir paket oluşturmanın resmi yolu birçok adım ve işlem içerir. Bu eğitimde, bu paketleri oluşturmanın daha basit bir yoluna bakacağız. Ancak, paket oluşturmanın resmi yolu üretim amaçları için idealdir ve önerilir.

2. Dosyaların Hazırlanması

2.1. .deb Paketinin Yapısı


Debian tabanlı dağıtımlarda, uygulamaları yükleme yollarımızdan biri .deb paket dosyasını indirip dpkg komutunu kullanarak yüklemektir . Bu "deb paketi", bir yazılım uygulamasıyla ilişkili ikili dosyaların ve yapılandırma dosyalarının bir arşividir. Arşivin içindeki tüm dosyalar belirli bir klasör yapısında tutulur.

Kurulum sırasında hedef makinede ikili dosyalar ve yapılandırma dosyaları kök klasörden benzer bir klasör yapısına gider .

2.2. Uygulamayla İlgili Dosyalar


Daha net anlamak için bir örneğe bakalım. İlk olarak, build için bir çalışma klasörü oluşturuyoruz:
bluelake@pacific:~/Documents/deb/build$ mkdir test
Lütfen yolu not edin; bu alıştırmada ilerledikçe klasörü değiştireceğiz.

Daha sonra, uygulamamız için dosyaları hazırlarız. İşleri basit tutmak için iki dosyamız olsun:

  • test.sh çalıştırılabilir dosyası
  • test.conf yapılandırma dosyası
Bu dosyalar için, bu alıştırmada içerikleri aşağıdaki gibi tutacağız:

bluelake@pacific:~/Documents/deb/build/test$ cat test.conf
NAME=Test
bluelake@pacific:~/Documents/deb/build/test$ cat test.sh
#!/bin/bash
. test.conf
echo "Hi $NAME"


Debian'daki yürütülebilir dosyaların /bin klasöründe ve yapılandırma dosyalarının /etc klasöründe tutulduğunu biliyoruz . Sözleşmeye uyarak, test.sh dosyasını /bin klasöründe ve test.conf dosyasını / etc klasöründe tutacağız .

Dolayısıyla, mevcut dizinimizde bin ve etc adında iki klasör oluşturuyoruz :
bluelake@pacific:~/Documents/deb/build/test$ mkdir {bin,etc}
bluelake@pacific:~/Documents/deb/build/test$ ls
bin etc test.conf test.shKopyala
Şimdi çalıştırılabilir ve yapılandırma dosyalarını ilgili klasörlere taşıyalım:

bluelake@pacific:~/Documents/deb/build/test$ mv test.conf etc/
bluelake@pacific:~/Documents/deb/build/test$ mv test.sh bin/
bluelake@pacific:~/Documents/deb/build/test$ ls
bin etc


Bununla birlikte, dosyalarımızı hedef makineye kurulduğunda da aynı olacak bir klasör yapısına yerleştirmiş olduk .

2.3. Kontrol Dosyası

Son olarak, paket için meta verileri içeren bir kontrol dosyasına ihtiyacımız var . Bu , alanları ve açıklamaları olan bir metin dosyasıdır . Desteklenen alanlar şunlardır:
  • Paket (Gerekli): Paketin adı
  • Sürüm (Gerekli): Paketin sürümü
  • Bakımcı (Gerekli): Bakımcının adı ve e-postası
  • Mimarlık (Gerekli): Desteklenen hedef makine mimarisi
  • Açıklama (Gerekli): Paketin kısa açıklaması
  • Bölüm: admin , database , kernel , utils gibi paket sınıflandırmaları
  • Öncelik: Paketin isteğe bağlı mı yoksa zorunlu mu olduğu
  • Temel: Paketin her zaman gerekli olup olmadığı
  • Bağımlılıklar: libc6 (>= 2.2.4-4) gibi diğer bağımlı paketleri listeleyin
  • Ana sayfa: Paketle ilişkili web sitesinin URL'si
  • Paket Türü: Türleri belirtin, örneğin deb veya udeb
Yukarıda belirtildiği gibi bazı alanlar zorunlu, bazıları ise isteğe bağlıdır.

Bu bilgileri kullanarak, gerekli alanlar ve önerilen alanlardan bazılarını içeren bir kontrol dosyası oluşturalım . Bu dosya DEBIAN adlı bir klasörün altına gider :
bluelake@pacific:~/Documents/deb/build/test$ ls
bin DEBIAN etc
bluelake@pacific:~/Documents/deb/build/test$ cat DEBIAN/control
Package: test
Version: 1.0-1
Section: utils
Priority: optional
Architecture: all
Maintainer: Baeldung <[email protected]>
Description: This is a test application
for packaging

3. Paketin Oluşturulması​

Bununla birlikte paketimizi oluşturmaya hazırız. Ve bunun için dpkg-deb komutunu kullanabiliriz :

bluelake@pacific:~/Documents/deb/build$ dpkg-deb --root-owner-group --build test
dpkg-deb: building package 'test' in 'test.deb'.
bluelake@pacific:~/Documents/deb/build$ ls
test test.deb


Gördüğümüz gibi, bir test.deb dosyası başarıyla oluşturuldu. Bununla birlikte, paketimiz neredeyse hazır.

4. Paketi Doğrulayın

4.1. İçeriği Kontrol Et

Paket oluşturulduktan sonra, dpkg komutunu çalıştırarak dosyaların pakette mevcut olup olmadığını doğrulayabiliriz :

bluelake@pacific:~/Documents/deb/build$ dpkg -c test.deb
drwxr-xr-x thinkpalm/thinkpalm 0 2021-12-23 12:09 ./
drwxr-xr-x thinkpalm/thinkpalm 0 2021-12-23 11:30 ./bin/
-rwxr-xr-x thinkpalm/thinkpalm 40 2021-12-23 11:15 ./bin/test.sh
drwxr-xr-x thinkpalm/thinkpalm 0 2021-12-23 11:30 ./etc/
-rw-r--r-- thinkpalm/thinkpalm 10 2021-12-23 11:15 ./etc/test.conf


Sonuçlardan eklediğimiz dosyaların beklenen yollarında olduğunu görüyoruz.

4.2. Tüylenme


Debian paketleme kurallarına daha fazla uymak için paketi lint edebiliriz. Bunun için lintian adlı aracı kullanırız .
Bu aracı nasıl kullanabileceğimize bakalım:

bluelake@pacific:~/Documents/deb/build$ lintian test.deb
E: test: debian-changelog-file-missing
E: test: file-in-etc-not-marked-as-conffile etc/test.conf
E: test: no-copyright-file
W: test: script-with-language-extension bin/test.sh
W: test: binary-without-manpage bin/test.sh


Komutu çalıştırdıktan sonra E olarak işaretlenmiş bazı hataları ve W olarak işaretlenmiş uyarıları görebiliriz .
Bunları nasıl düzeltebileceğimize tek tek bakalım.
Değişiklik Günlüğü Dosyası Eksik :
Bu hatayı düzeltmek için bir değişiklik günlüğü dosyası ekleyebiliriz :

bluelake@pacific:~/Documents/deb/build$ cat changelog.Debian
test (1.0-2) stable; urgency=low

[ Baeldung ]
* Changes to installer

-- Baeldung <[email protected]> Thu, 23 Dec 2021 11:30:00 +0100

test (1.0-1) stable; urgency=low

[ Baeldung ]
* Wonderful program to print the name ;)

-- Baeldung <[email protected]> Thu, 23 Dec 2021 11:00:00 +0100
bluelake@pacific:~/Documents/deb/build$ gzip --best -n changelog.Debian
bluelake@pacific:~/Documents/deb/build$ mkdir -p test/usr/share/doc/test
bluelake@pacific:~/Documents/deb/build$ cp changelog.Debian.gz test/usr/share/doc/test/


Dosyayı Conf Dosyası Olarak İşaretleme :
Bu hatayı düzeltmek için DEBIAN klasörüne bir conffile ekleyebiliriz :

bluelake@pacific:~/Documents/deb/build$ cat test/DEBIAN/conffiles
/etc/test.conf


Telif Hakkı Dosyası Ekleniyor :

Bunu düzeltmek için bir telif hakkı dosyası ekleyebiliriz :

bluelake@pacific:~/Documents/deb/build$ cat test/usr/share/doc/test/copyright
test
Copyright: 2020 Baeldung <[email protected]>

2020-12-23

The entire code base may be distributed under the terms of the GNU General
Public License (GPL), which appears immediately below. Alternatively, all
of the source code as any code derived from that code may instead be
distributed under the GNU Lesser General Public License (LGPL), at the
choice of the distributor. The complete text of the LGPL appears at the
bottom of this file.
See /usr/share/common-licenses/(GPL|LGPL)


İkili Dosya İçin Uzantıyı Kaldırma :
Bu hatayı düzeltmek için script dosyasının uzantısını kaldıralım:
bluelake@pacific:~/Documents/deb/build$ mv test/bin/test.sh test/bin/test

Binary için Man Girişi Ekleniyor :

Bu hatayı düzeltmek için bir man dosyası ekleyelim :

bluelake@pacific:~/Documents/deb/build$ cat test.1
.\" Hey, EMACS: -*- nroff -*-
.\" (C) Copyright 2020 Baeldung <[email protected]>
.\"
.TH TEST 1
.SH NAME
test \- test application
.SH SYNOPSIS
.B test.sh
.SH DESCRIPTION
The
.B test
prints the name.
.SH SEE ALSO
.BR echo (1).
.SH AUTHORS
The
.B test
script was written by
Baeldung <[email protected]>
.PP
This document was written by Baeldung <[email protected]> for Debian.

bluelake@pacific:~/Documents/deb/build$ gzip --best -n test.1
bluelake@pacific:~/Documents/deb/build$ ls
build.sh changelog.Debian.gz changelog.gz test test_1.0-1.deb test.1.gz
bluelake@pacific:~/Documents/deb/build$ mkdir -p test/usr/share/man/man1
bluelake@pacific:~/Documents/deb/build$ cp test.1.gz test/usr/share/man/man1/



Son klasör yapısı şu şekilde olacaktır:

bluelake@pacific:~/Documents/deb/build$ tree test
test
├── bin
│ └── test
├── DEBIAN
│ ├── conffiles
│ └── control
├── etc
│ └── test.conf
└── usr
└── share
├── doc
│ └── test
│ ├── changelog.Debian.gz
│ └── copyright
└── man
└── man1
└── test.1.gz


9 directories, 7 files
Kopyala
Bunu tekrar oluşturalım:

bluelake@pacific:~/Documents/deb/build$ dpkg-deb --root-owner-group --build test
dpkg-deb: building package 'test' in 'test.deb'.
bluelake@pacific:~/Documents/deb/build$ mv test.deb test_1.0-2.deb
bluelake@pacific:~/Documents/deb/build$ lintian test_1.0-2.deb
bluelake@pacific:~/Documents/deb/build$


Artık tüm hataların ve uyarıların düzeldiğini görebiliyoruz .

5. Sonuç

Bu eğitimde, minimum adımla bir deb paketi oluşturma sürecini ele aldık. Bunun Debian paketleri oluşturmayı öğrenmek için iyi bir başlangıç noktası olacağını umuyoruz.
LOJİSTİK TİM SUNDU

btn1pyf.png