Pemaketan Debian - Bagian 1

Reading time ~9 minutes

Pedoman pemaketan dasar Debian.

Pada tulisan ini kita akan belajar membuat paket untuk Debian dan distro turunannya, kita akan mencoba beragam cara membuat paket Debian, saya memisahkan Pedoman ini dalam beberapa bagian dan berusaha agar pembaca dapat dengan mudah memahaminya.

Daftar Isi

Persiapan.

Pemasangan paket yang diperlukan.

$ sudo apt-get install -y devscripts build-essential fakeroot debhelper \
gnupg pbuilder dh-make dpkg-dev ubuntu-dev-tools \
autotools-dev lintian rng-tools
Catatan:

Aplikasi rng-tools di gunakan disini untuk mempercepat proses pembuatan kunci GPG.

Konfigurasi awal informasi tentang pemaket.

Mengatur variabel $DEBFULLNAME dan $DEBEMAIL pada lingkungan shell sehingga berbagai alat-alat pemaketan Debian mengenali Nama dan Alamat Email Anda untuk memaketkan paket.

$ echo 'export DEBFULLNAME="Nama Anda"' >> ~/.bashrc
$ echo 'export DEBEMAIL="email@anda.com"' >> ~/.bashrc

$ source ~/.bashrc

atau

$ echo 'export DEBFULLNAME="Nama Anda"' >> ~/.profile
$ echo 'export DEBEMAIL="email@anda.com"' >> ~/.profile

$ source ~/.profile

atau

$ . ~/.bashrc

atau

$ . ~/.profile

atau bisa juga seperti ini:

$ cat >> ~/.bashrc <<EOF
DEBFULLNAME="Nama Anda"
DEBEMAIL="email@anda.com"
export DEBFULLNAME DEBEMAIL
EOF
$ . ~/.bashrc

Periksa hasilnya

$ echo $DEBFULLNAME ; echo $DEBEMAIL
$ export | grep DEB
$ grep DEB* ~/.bashrc
$ grep DEB* ~/.profile

Hasilnya akan menampilkan informasi tentang pemaket, pilih salah satu antara merubah berkas .bashrc atau .profile karena Banyak jalan menuju Roma :)

Membuat kunci GnuPG (GnuPrivacyGuard).

Sebelum membuat kunci GPG, kita jalankan daemon rngd secara manual:

$ sudo rngd -r /dev/urandom

Kita juga perlu memperbaharui GnuPG untuk menggunakan SHA 2 mengacu pada SHA1. Jadi tambahkan pada akhir file ~/.gnupg/gpg.conf:

personal-digest-preferences SHA256
cert-digest-algo SHA256
default-preference-list SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES CAST5 ZLIB BZIP2 ZIP Uncompressed

Berikut ini detailnya:

$ mkdir -p ~/.gnupg/
$ cat >> ~/.gnupg/gpg.conf <<EOF
personal-digest-preferences SHA256
cert-digest-algo SHA256
default-preference-list SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES CAST5 ZLIB BZIP2 ZIP Uncompressed
EOF

Lanjutkan dengan proses membuat kunci GPG:

$ gpg --gen-key

Pilih: (1) RSA and RSA (default) -> 4096 -> (0) -> y -> (O)kay

Untuk melihat hasil dari pembuatan kunci GPG, bisa dilakukan dengan perintah berikut:

$ gpg --list-key --fingerprint

Setelah proses pembuatan kunci GPG selesai, hentikan daemon rngd dengan perintah pkill:

$ sudo pkill rngd

Pastikan daemon rngd tidak berjalan:

$ ps ax | grep rngd
15459 pts/1    S+     0:00 grep rngd

Hapus paket rng-tools bila tidak ingin membuat kunci gpg di kemudian hari.

$ sudo apt-get remove rng-tools

Membuat direktori kerja.

Sebelum kita memulai pada tahap selanjutnya, mari kita membuat direktori kerja kemudian masuk ke direktori yang telah kita buat:

$ mkdir -p ~/Belajar/Pemaketan/{src,final,github}
$ cd ~/Belajar/Pemaketan/src

Hasil dari membuat direktori kerja akan tampak seperti ini:

$ tree ~/Belajar
/home/user-anda/Belajar
└── Pemaketan
    ├── final
    ├── github
    └── src

4 directories, 0 files
Keterangan:
  • Direktori src digunakan untuk membangun paket Debian.
  • Direktori final digunakan untuk menyimpan paket yang akan kita buat.
  • Direktori github digunakan untuk membuat repositori Git dari paket yang akan kita buat.

Unduh paket sumber.

Anda bisa memilih paket apa yang mau di buatkan versi Debiannya, disini saya memilih paket GNU ed. Saat artikel ini ditulis versi terakhir adalah 1.9.

Mulai mengunduh paket sumber

$ wget http://ftp.gnu.org/gnu/ed/ed-1.9.tar.gz

Ekstrak paket sumber dan masuk ke direktori hasil ekstrak

$ tar zxvf ed-1.9.tar.gz
$ cd ed-1.9

Kita dapat melihat struktur direktorinya dengan perintah tree

$ tree -d ../
../
`-- ed-1.9
	|-- doc
	`-- testsuite

Bila perintah tidak ditemukan silahkan pasang paketnya

$ sudo apt-get install -y tree

Memulai membangun paket.

Mari kita mulai membangun paket yang telah kita pilih sebelumnya

$ dh_make -e $DEBEMAIL -c gpl3 -s -f ../ed-1.9.tar.gz

Kita bisa melihat perubahan yang terjadi pada struktur direktorinya

$ tree -d -D -t ../
../
`-- [Jul  3  3:41]  ed-1.9
	|-- [Jul  3  3:38]  doc
	|-- [Jul  3  3:38]  testsuite
	`-- [Jul  3  3:41]  debian
		`-- [Jul  3  3:41]  source


$ tree -D -t debian/
debian/
|-- [Jul  3  3:41]  README.Debian
|-- [Jul  3  3:41]  README.source
|-- [Jul  3  3:41]  changelog
|-- [Jul  3  3:41]  compat
|-- [Jul  3  3:41]  control
|-- [Jul  3  3:41]  copyright
|-- [Jul  3  3:41]  docs
|-- [Jul  3  3:41]  ed.cron.d.ex
|-- [Jul  3  3:41]  ed.default.ex
|-- [Jul  3  3:41]  ed.doc-base.EX
|-- [Jul  3  3:41]  info
|-- [Jul  3  3:41]  init.d.ex
|-- [Jul  3  3:41]  manpage.1.ex
|-- [Jul  3  3:41]  manpage.sgml.ex
|-- [Jul  3  3:41]  manpage.xml.ex
|-- [Jul  3  3:41]  menu.ex
|-- [Jul  3  3:41]  postinst.ex
|-- [Jul  3  3:41]  postrm.ex
|-- [Jul  3  3:41]  preinst.ex
|-- [Jul  3  3:41]  prerm.ex
|-- [Jul  3  3:41]  rules
|-- [Jul  3  3:41]  source
|   `-- [Jul  3  3:41]  format
`-- [Jul  3  3:41]  watch.ex


$ ls ../
ed-1.9  ed-1.9.tar.gz  ed_1.9.orig.tar.gz

Dari hasil perintah tree kita bisa melihat ada penambahan direktori debian dan debian/source dan juga salinan dari paket sumber yaitu ed_1.9.orig.tar.gz.

Mari kita hapus beberapa berkas yang saat tidak diperlukan1 pada direktori debian.

$ cd debian
$ rm *.ex *.EX README.* *.docs info

Hasilnya akan seperti ini

$ tree -D ../debian/
../debian/
|-- [Jul  3  3:41]  changelog
|-- [Jul  3  3:41]  compat
|-- [Jul  3  3:41]  control
|-- [Jul  3  3:41]  copyright
|-- [Jul  3  3:41]  rules
`-- [Jul  3  3:41]  source
	`-- [Jul  3  3:41]  format

Pada tahap ini kita akan merubah beberapa berkas yang ada di direktori debian diawali dengan berkas changelog, sebagai catatan…berkas-berkas ini disunting sesuai dengan ketentuan pemaketan Debian, sehingga kita tidak bisa seenaknya menyunting berkas yang ada.

Sunting berkas changelog.

Mari kita mulai menyunting berkas changelog ala Debian :)

$ dch -e
Keterangan:
  1. Perintah dch -e digunakan untuk penyuntingan awal.
  2. Perintah dch -i digunakan untuk penyuntingan selanjutnya ataupun pemaket lainnya.
ed (1.9-1) unstable; urgency=low

  * Initial release (Closes: #nnnn)  <nnnn is the bug number of your ITP>

 -- Nama Anda <email@anda.com>  Sun, 03 Jul 2016 03:41:14 +0700
Keterangan:
  • 1.9 merupakan versi upstream/hulu.
  • 1 merupakan versi Debian.
  • unstable merupakan kode rilis paket Debian, nilai unstable umumnya digunakan untuk paket baru, versi terbaru dari paket upstream/hulu dan perbaikan kutu, sedangkan nilai experimental umumnya digunakan saat pengembang melakukan uji coba (versi beta) sebelum paket itu dirilis untuk Debian (nilainya experimental, unstable, testing dan stable). Lihat Debian Developer's Reference dan The Debian Administrator's Handbook untuk informasi lebih lanjut.
  • urgency=low merupakan deskripsi tentang seberapa pentingnya peningkatan versi dari versi sebelumnya (nilainya low, medium, high, emergency, atau critical).
  • nnnn merupakan nomor kutu Intent to Package (ITP) yang diperoleh ketika kita melaporkan paket yang ingin ditambahkan/kelola melalui Debian Bug Tracking System (Debian BTS).
Catatan:

Bila ingin memaketkan untuk Debian silahkan hapus keterangan nnnn is the bug number of your ITP.

Menjadi

ed (1.9-0blankon1) tambora; urgency=low

  * Initial release for Blankon Tambora

 -- Nama Anda <email@anda.com>  Sun, 03 Jul 2016 03:41:14 +0700
Keterangan:
  • 1.9 merupakan versi upstream/hulu.
  • 0 merupakan versi Debian.
  • blankon1 merupakan versi Blankon.
  • tambora merupakan kode rilis Blankon.
Sunting berkas control.

Sunting berkas control dengan text editor favorit.

$ cd ..
$ nano debian/control
		
Source: ed
Section: editors
Priority: optional
Maintainer: Nama Anda <email@anda.com>
Build-Depends: debhelper (>= 9), autotools-dev
Standards-Version: 3.9.9
Homepage: http://www.gnu.org/software/ed/
#Vcs-Git:
Vcs-Browser: http://web.cvs.savannah.gnu.org/viewvc/?root=ed

Package: ed
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: GNU ed is a line-oriented text editor.
 GNU ed is a line-oriented text editor. It is used to create, display,
 modify and otherwise manipulate text files, both interactively and via
 shell scripts. A restricted version of ed, red, can only edit files in
 the current directory and cannot execute shell commands.
 .
 Ed is the "standard" text editor in the sense that it is the original
 editor for Unix, and thus widely available. For most purposes, however,
 it is superseded by full-screen editors such as GNU Emacs or GNU Moe.
 .
 Extensions to and deviations from the POSIX standard are described below.

Pada paket Debian, berkas debian/control memiliki sintaks tertentu dimana setiap baris harus dimulai dengan spasi dan paragraf dipisahkan oleh sebuah titik. Jika ingin mengikuti sintaks DEP-5 untuk berkas debian/copyright, Kita akan memiliki masalah yang sama saat mengisi teks lisensi untuk creative-common license: sehingga spasi atau titik akan terlewatkan.

Pada berkas ini saya hanya melakukan penyuntingan pada bagian Section, Homepage, Vcs-Git, Vcs-Browser dan Description. silahkan lihat informasi paket GNU ed pada berkas README, untuk informasi lengkap paket ini bisa merujuk pada websitenya.

Langkah berikutnya kita akan menyunting berkas copyright, berikut caranya

$ nano debian/copyright

Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: ed
Source: http://www.gnu.org/software/ed/

Files: *
Copyright: 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, Free Software Foundation, Inc.
	   2006, 2007, 2008, 2009, 2010, 2012, 2013, Antonio Diaz Diaz <ant_diaz@teleline.es>
	   1993, Francois Pinard <pinard@icule>
	   1993-1994, Andrew Moore <alm@woops.talke.org>
License: GPL-3.0+

Files: debian/*
Copyright: 2016 Nama Anda <email@anda.com>
License: GPL-3.0+

License: GPL-3.0+
 This program 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 3 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 <http://www.gnu.org/licenses/>.
 .
 On Debian systems, the complete text of the GNU General
 Public License version 3 can be found in "/usr/share/common-licenses/GPL-3".

Informasi lisensi bisa dilihat di berkas AUTHORS dan ChangeLog. Saya hanya menyunting bagian Upstream-Name dan Copyright.

Lakukan pengecekan dengan perintah cme, bila tidak tersedia silahkan pasang terlebih dahulu

$ sudo apt-get install -y install cme libconfig-model-dpkg-perl libconfig-model-tkui-perl
$ cme check dpkg
loading data
checking data
check done

Apabila hasilnya tidak seperti diatas maka lakukan penyuntingan kembali sesuai dengan output dari perintah cme. Anda juga bisa menyunting paket Debian dengan GUI, silahkan jalankan diterminal:

$ cme edit dpkg

Akan tampil jendela baru seperti gambar dibawah ini

Langkah 4
cme GUI.

Cara penggunaan silahkan lihat disini.

Paketkan.

Langkah selanjutnya kita akan mulai membuat paket Debian.

$ dpkg-buildpackage -rfakeroot
Catatan:

Tunggulah hingga proses selesai, karena nantinya akan diminta passphrase yang dibuat saat membuat kunci GnuPG. Apabila hal ini terlewati maka pembuatan paket akan galat/gagal.

Paket versi BlankOn.

Lihat hasilnya

$ ls ../ | grep ed
ed-1.9
ed-1.9.tar.gz
ed_1.9-0blankon1.debian.tar.xz
ed_1.9-0blankon1.dsc
ed_1.9-0blankon1_armhf.changes
ed_1.9-0blankon1_armhf.deb
ed_1.9.orig.tar.gz

Paket versi Debian.

Bila memaketkan ke versi Debian hasilnya seperti ini

$ ls ../ | grep ed
ed-1.9
ed-1.9.tar.gz
ed_1.9-1.debian.tar.xz
ed_1.9-1.dsc
ed_1.9-1_armhf.changes
ed_1.9-1_armhf.deb
ed_1.9.orig.tar.gz

Saya membangun paket pada mesin ARM Raspberry 2 model B, hasil yang ditampilkan akan berbeda bila Anda membangun paket pada mesin berarsitektur 32-bit dan 64-bit, saya merekomendasikan Anda untuk membangun paket pada mesin 64-bit. Silahkan lihat arsitektur apa saja yang di dukung pada halaman Ports website Debian.

Pemeriksaan paket.

Periksa paket dengan menggunakan lintian

$ lintian -iIEv --pedantic ../*.changes

Selesai…sampai nanti di tulisan berikutnya.

Rujukan


  1. Dilain kesempatan kita akan bahas bagaimana cara menyunting berkas postinst, postrm, preinst, prerm, dll.

Instalasi Docker di Raspbian - Bagian 1

Pemasangan Docker di Raspbian Jessie - Bagian 1 Continue reading

E: Failed to fetch - Size mismatch

Published on August 12, 2016

My Contribution to FOSS in July 2016

Published on July 31, 2016