kompilasi yang sukses

Membuat Paket DEB sekaligus Mengunggahnya ke PPA Launchpad

Kali ini saya perlu mendokumentasikan tata cara packaging di Ubuntu. Sebelumnya sudah pernah, sebagaimana saya ceritakan pada tulisan #34, tetapi karena kesombongan, saya hanya mengandalkan ingatan yang mana ingatan itu ternyata tidak abadi. Dengan kata lain, saya sudah lupa.

Packaging di Ubuntu bagi saya yangnoobdan bukan programmer ini terasa rumit dan susah. Tutorial dan dokumentasi tentang packaging memang banyak, tapi dalam bahasa Inggris. Ini yang menjadi kendala lain untuk mempelajarinya. Saya yakin banyak juga ahli di bidang ini di negeri ini yang sudah berpengalaman, namun belum sempat berbagi ilmunya itu, mengingat ada beberapa distro racikan anak negeri, atau mungkin saya saja yang belum mencarinya 😀 . Nah, walaupun saya bukan ahli, setidaknya dan mudah-mudahan bisa memberikan sedikit gambaran bagaimana proses memaketkan aplikasi untuk Ubuntu sekaligus membuat PPA (Personal Package Archive) di Launchpad.

Sebelum melangkah, kita perlu tahu seluk-beluk bagaimana pemaketan aplikasi Ubuntu itu. Ubuntu sudah menyediakan dokumentasi lengkap yang ada di http://packaging.ubuntu.com/. Silakan unduh versi PDF untuk referensi. Selain itu, Launchpad sendiri menyediakan laman bantuan untuk ini pada https://help.launchpad.net/Packaging/PPA.

Ubuntu Packaging Guide
Ubuntu Packaging Guide, versi cetak 🙂

Dan karena kita akan membuat PPA, maka harus mempunyai akun di Launchpad. Jika belum punya, silakan mendaftar dahulu. Buka https://launchpad.net/+login dan pilih Create new account. Selesaikan pendaftaran itu.

mendaftar di launchpad
Mendaftar di Launchpad

Untuk memulai pemaketan aplikasi Ubuntu, kita harus menentukan aplikasi apa yang ingin kita buat paketnya. Pemilihan paket sebaiknya mempertimbangkan keberadaannya di repositori pusat Ubuntu atau PPA. Jika aplikasi dengan versi yang kita inginkan sudah ada pada salah satunya, sebaiknya gunakan yang ada itu.

Untuk tulisan ini saya menggunakan acang plasma Mawakit, pengingat waktu shalat, yang mana sudah saya tuliskan cara kompilasinya di tulisan sebelumnya. Silakan baca dulu tulisan tersebut agar lebih mudah memahami dan bisa mengikuti langkah-langkah yang akan ditempuh. Dan saya anggap komputer kita sudah siap untuk digunakan mengompilasi sebuah kode sumber.

Siapkan Lingkungan Kerja

Langkah pertama adalah menyiapkan tempat untuk menjalankan segala perintah.

direktori kerja membuat deb
Tempat kode sumber akan diproses

Pada gambar tampak kode sumber plasma-widget-mawakit berganda. Sebenarnya kita cukup menyediakan file tarball-nya saja. Saya punya dua karena file Tar.Gz dari sumber aslinya tidak dianggap berkas Tar oleh dh-make. Saya coba ekstrak dengan tar -xvfz plasma-widget-mawakit-0.3.0.tar.gz pun gagal. Maka saya ekstrak dengan Ark, menghasilkan folder plasma-widget-mawakit-0.3.0 lalu folder ini saya kompres lagi menjadi tar.gz.

Instalasi paket untuk packaging

Menurut tutorial resmi Ubuntu, kita memerlukan sejumlah paket berikut ini:

$ sudo apt-get install gnupg pbuilder ubuntu-dev-tools bzr-builddeb apt-file

Atau singkatnya:

$ sudo apt-get install packaging-dev

Perintah kedua ini sudah mencakup perintah pertama, jadi pilih salah satu saja. Tetapi saya menyarankan perintah yang kedua.

Membuat Tanda Tangan (GPG Key)

Kunci GPG (GNU Privacy Guard) ini berfungsi untuk menandatangani paket yang akan kita unggah ke PPA Launchpad. Cara membuatnya, jalankan perintah:

$ gpg --gen-key
membuat tanda tangan GPG
Membuat tanda tangan GPG

Jawab setiap pertanyaan, dan terakhir adalah memasukkan kata sandi untuk kunci GPG kita ini. Setelah memasukkan kata sandi untuk kedua kalinya, kita diminta untuk melakukan hal-hal acak. Entah mengetik, mengklik, atau apa saja yang penting jangan di dalam konsol itu, sampai kunci GPG selesai dibuat. Mungkin membutuhkan waktu lama.

Hasilnya akan seperti ini:

berhasil membuat kunci gpg
Berhasil membuat Kunci GPG

Setelah itu, kunci GPG kita perlu diunggah ke pusat kunci Ubuntu agar bisa digunakan untuk menandatangani PPA. Perintahnya:

gpg --send-keys --keyserver keyserver.ubuntu.com 8_DIGIT_TERAKHIR

8 digit terakhir sidik jari kunci disesuaikan dengan huruf yang anda peroleh.

Sidik jari kunci tersebut perlu ditambahkan ke akun Launchpad kita agar saat mengunggah hasil kompilasi tidak ditolak. Buka https://launchpad.net/~/+editgpgkeys. Salin seluruh sidik jari kunci dan tempelkan pada kotak yang tersedia. Klik Import key, jika gagal, ulangi lagi, mungkin sidik jari tadi masih diproses di server kunci ubuntu. Atau tundalah sekitar 15 menit, baru coba lagi. Jika masih gagal, mungkin belum berhasil ditambahkan ke server kunci Ubuntu.

berhasil menambahkan kunci gpg
Berhasil menambahkan kunci GPG

Jika berhasil, akan ada email yang dikirim kepada kita yang berisi tautan untuk mengonfirmasi perubahan yang baru kita buat. Email ini dienkripsi, maka kita harus membukanya dengan kunci yang kita buat tadi. Saya menggunakan Thunderbird yang dipasangi add-on Enigmail yang secara otomatis akan menggunakan kunci tadi untuk men-dekripsi email tersebut.

email konfirmasi dari launchpad
Email yang di-dekripsi oleh Enigmail

Mengunggah Kunci SSH

Buka http://launchpad.net/~/+editsshkeys. Buka juga file /home/namauser/.ssh/id_rsa.pub dengan editor teks. Ini adalah bagian publik dari kunci SSH kita. Jika tidak punya, menurut keterangan https://help.launchpad.net/YourAccount/CreatingAnSSHKeyPair, kita perlu melakukan:

sudo apt-get install openssh-client
ssh-keygen -t rsa

Salin isi file tersebut ke laman Launchpad barusan. Akhirnya, klik Import public key.

mengimpor kunci ssh
Mengimpor kunci SSH

Mulai Mengompilasi

Persiapan sudah lengkap, tinggal mengeksekusi. Pertama, kita buat identitas kita:

bzr whoami "Slamet Badwi (bedouin) <slamet.badwi@gmail.com>"
bzr launchpad-login bedouin

Identitas itu harus sama persis dengan kunci GPG yang tadi dibuat. Masih dalam direktori kerja kita tadi, jalankan perintah:

bzr dh-make plasma-widget-mawakit 0.3.0 plasma-widget-mawakit-0.3.0_1.tar.gz

Jadi, perintah itu akan membuat folder plasma-widget-mawakit (blok ketiga pada perintah), 0.3.0 merupakan nomor versi kode sumber tersebut, dan blok terakhir adalah nama file tarball kode sumber. Serta akan dibuat folder build-area sebagai tempat untuk menampung hasil akhir.

memilih jenis paket
Memilih jenis paket

Pilih saja ‘s’ jika ada pertanyaan seperti gambar. ‘s’ artinya single binary, atau membuat satu file DEB. Jika ingin membuat dua, tiga atau lebih file DEB dari satu kode sumber, pilih ‘m’ dan nanti kita harus mengubah file control lebih lanjut. Di sini saya tidak akan menjelaskannya.

Lalu pindah ke direktori yang baru saja dibuat.

cd plasma-widget-mawakit

Di situ ada folder debian. Nah di situlah letak semua keajaibannya. Terlebih dahulu hapus file-file yang tidak diperlukan (berakhiran .ex).

hapus file-file yang tidak perlu
Hapus file-file yang tidak perlu

Yang perlu kita ubah adalah file changelog, control, copyright, dan rules.

Pada changelog saya ubah seperti ini:

plasma-widget-mawakit (0.3.0-ppa1) trusty; urgency=low

  * Initial release (Closes: #nnnnn)

 -- Slamet Badwi (bedouin) <slamet.badwi@gmail.com> Wed, 19 Mar 2014 17:20:06 +0700

Untuk nama dan email serta yang ada dalam kurung harus sama persis dengan identitas GPG yang kita buat tadi. Jika tidak, maka setiap kali akan menandatangani, gagal.

Untuk file control, saya ubah menjadi seperti ini:

Source: plasma-widget-mawakit
Section: kde
Priority: optional
Maintainer: Slamet Badwi <slamet.badwi@gmail.com>
Original-Maintainer: Amine Roukh
Build-Depends: debhelper (>= 9.0.0), cmake (>= 2.8.0), pkg-kde-tools, kdelibs5-dev,
 libstdc++6,
 libqt4-xml,
 libcloog-isl4,
 libegl1-mesa,
 libdbus-1-3,
 g++ (>= 4.8.2),
[DAFTAR PAKET DEPENDENDSI YANG BANYAK SEKALI....] 
 libxau-dev,
 libattr1,
 libqt4-svg,
 libqwt5-qt4-dev,
 kde-workspace-dev
Standards-Version: 3.9.5
Homepage: http://kde-apps.org/content/show.php/?content=128606

Package: plasma-widget-mawakit
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: Plasmoid for Adhan Reminder
 Mawakit is a prayer times plasmoid that plays the Islamic Adhan
 when it is time for prayer.
 Designed to be simple and elegant, Mawakit shows a countdown
 until the next prayer in a nice tooltip.

Untuk mendapatkan paket-paket dependensi seperti dalam Build-Depends di atas, kakas yang digunakan adalah dpkg-depcheck. Perintah ini dipadukan dengan perintah kompilasi standar dari kode sumber tersebut. Biasanya dpkg-depcheck ./configure

Tetapi karena acang plasma Mawakit ini memakai CMake, maka perintahnya:

dpkg-depcheck cmake -DCMAKE_INSTALL_PREFIX=`kde4-config --prefix` -DQT_QMAKE_EXECUTABLE=/usr/bin/qmake-qt4

Jalankan perintah itu di direktori build-area saja. Jika kompilasi sukses, akan ditampilkan paket-paket dependensi yang memang diperlukan untuk mengompilasi. Di situ saya tambahkan dua paket terakhir sebagaimana sudah saya jelaskan pada tulisan sebelumnya.

Lalu file copyright juga penting untuk diubah, seperti ini contohnya:

Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: plasma-widget-mawakit
Source: http://kde-apps.org/content/show.php/?content=128606
Files: *
Copyright: 2010-2011 Amine Roukh 
License: GPL-3+

(dst....)

Yang terakhir adalah file rules, yang sempat membuat saya pusing, tapi alhamdulillah ketemu juga http://superuser.com/questions/250437/how-to-pass-custom-options-to-configure-when-building-a-package-with-debuild , maka saya berhasil mengubahnya menjadi:

#!/usr/bin/make -f
# -*- makefile -*-

%:
    dh $@ --with=kde --build-system=cmake

override_dh_auto_configure:
    dh_auto_configure -- -DCMAKE_INSTALL_PREFIX=`kde4-config --prefix` -DQT_QMAKE_EXECUTABLE=/usr/bin/qmake-qt4

Untuk kode sumber dengan skrip autoconfigure, file rules tidak diubah pun mungkin sudah lancar. Oke, simpan semua, kembali ke direktori kerja tadi, jalankan perintah:

bzr commit -m "Initial commit of Ubuntu packaging"

Lalu jalankan perintah yang akan melakukan pemaketan DEB yang sebenarnya:

bzr builddeb -- -us -uc

-us -uc artinya tanpa tanda tangan. Jadi, kita memeriksa dulu apakah pemaketan sudah bisa atau belum. Jika berhasil, akan didapatkan file-file seperti berikut:

file-file hasil pemaketan
File-file hasil pemaketan
file deb yang sudah jadi
File DEB yang sudah jadi

Untuk memeriksa keabsahan hasil kompilasi tersebut, jalankan perintah:

lintian plasma-widget-mawakit_0.3.0-ppa1.dsc
lintian plasma-widget-mawakit_0.3.0-ppa1_i386.changes
lintian plasma-widget-mawakit_0.3.0-ppa1_i386.deb

Mungkin akan tampil banyak kesalahan, maka perlu dibenahi terlebih dahulu. Dan jika sudah yakin bahwa konfigurasi tersebut sudah benar, kita bisa menjalankan perintah:

bzr builddeb -- -nc -us -uc

-nc berarti no clean, yang artinya mengompilasi ulang tanpa harus dari awal lagi, sehingga mempercepat proses kompilasi. Lalu jika memang sudah bersih, kita bisa mengompilasi dengan menandatanganinya:

bzr builddeb -S

Isikan kata sandi GPG kita saat ditanya. Dan jadilah paket kita tersebut siap untuk diunggah ke PPA Launchpad.

Update: Kadang-kadang file kode sumber (orig.tar.gz) tidak ikut terunggah. Ini akan menyebabkan kegagalan build di server. Maka perintah di atas perlu diubah:

bzr builddeb -S -- -sa

-sa artinya menyertakan file kode sumber tadi untuk diunggah.

Mengunggah ke launchpad

Sebelum mulai mengunggah, buatlah PPA terlebih dahulu di akun Launchpad kita. Sesuaikan namanya dengan yang ada di perintah.

membuat ppa di lauchpad
Membuat PPA di Launchpad

Masuk ke direktori build-area, jalankan perintah:

dput ppa:bedouin/mawakit plasma-widget-mawakit_0.3.0-ppa1_source.changes

Perhatikan, mungkin file .changes ada dua, kirim yang ada kata ‘_source,changes’.

Tunggu beberapa saat atau bahkan beberapa hari, tergantung banyaknya tugas yang harus dilaksanakan oleh server. Tapi mungkin sekarang jumlah server diperbanyak, jadi kita tidak perlu menunggu lama.

Laporan kompilasi yang dilaksanakan di server Launchpad
Laporan kompilasi yang dilaksanakan di server Launchpad

Dan jika sudah selesai:

kompilasi yang sukses
Kompilasi yang sukses

Selamat, kita sudah punya PPA sendiri.

Langkah terakhir adalah menambahkan repositori PPA kita ke Ubuntu.

sudo add-apt-repository ppa:bedouin/mawakit
sudo apt-get update
sudo apt-get install plasma-widget-mawakit

Selesai.

Penutup

Demikianlah catatan seorang newbie yang sudah sangat senang setelah bisa melakukan hal dasar seperti ini. Pastinya tulisan ini masih banyak kekurangan lho. Semoga menginspirasi, begitu saja. Terima kasih.

Tutorial ringkas tentang pemaketan DEB juga ada di http://www.webupd8.org/2010/01/how-to-create-deb-package-ubuntu-debian.html

Baca juga  tulisannya saudara Ade Malsasa Akbar tentang Pemaketan DEB Termudah.

Untuk sementara, versi PDF tulisan ini bisa dibuat sendiri dengan mengklik ikon Sharing yang paling kanan di bawah ini. (Di Chromium browser mungkin tidak muncul)

Advertisements

Published by

Badwi

A Muslim, sober, a Javanese

11 thoughts on “Membuat Paket DEB sekaligus Mengunggahnya ke PPA Launchpad”

  1. Bismillahirrahmanirrahim.

    Terima kasih banyak, Kang Slamet. Sungguh inilah tutorial pemaketan PPA (plus bzr) yang pertama ada di Indonesia. Bahkan saya tidak menyangka akang sampai mencetak panduan pemaketan Ubuntu secara fisik. Sebuah posting monumental yang luar biasa. Terima kasih, sekali lagi saya senang dengan akhir tulisan ini:

    “Demikianlah catatan seorang newbie yang sudah sangat senang setelah bisa melakukan hal dasar seperti ini”

    /me menyimpan halaman ini

    1. Kang Malsasa ini berlebihan, sebenarnya setelah saya telusuri lagi, pengembang blankon juga sudah membuat panduan semacam ini, hanya saja tidak pakai cuplikan layar.
      Alhamdulillah saya juga senang kalau tulisan ini bermanfaat

      1. waduh, link-nya mbleber… harus lapor dulu nih.. (maaf ya kang, komentarnya tak edit)

        kalau menurut saya, saudara Bawang Bombai ini punya referensi lain kang Malsasa. soalnya alldeb itu kan skrip bash. gak perlu dikompilasi.

Share your idea here (markdown enabled)

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s