Merges dan Syncs

[Penting]

Requirements: build-essential, automake, gnupg, lintian, fakeroot, patchutils, debhelper dan pbuilder.

Ubuntu berbasis dari distribusi Linux Debian dan menggunakan sistem manajemen paket (APT) yang sama. Pada original tiap siklus pengembangan Ubuntu, paket-paket di Ubuntu di-update menggunakan arsip dari Debian unstable. Akan tetapi, karena Ubuntu tidak sama dengan Debian, maka beberapa paket itu harus dimodifikasi agar dapat bekerja di Ubuntu. Mungkin juga ada perbaikan bug yang dilakukan oleh pengembang Ubuntu dalam suatu paket. Anda dapat menentukan apakah suatu perbaikan telah dilakukan dengan melihat versi paket. Jika versi paket menyertakan ubuntu di dalamnya (contohnya seperti gimp-2.2.9-3ubuntu2), maka pengembang Ubuntu telah melakukan perubahan, dan paket itu tidak sama lagi dengan paket Debian. Ada sekitar 1000 lebih paket yang dimodifikasi dalam repository Universe.

Pada original tiap siklus pengembangan Ubuntu, suatu keputusan dibuat berkenaan dengan versi suatu paket. Tentu saja jika versi Debian tidak berubah sejak rilis Ubuntu terakhir, maka tidak ada yang perlu diubah. Akan tetapi, jika terdapat versi paket terbaru dalam Debian, maka satu dari dua hal dapat terjadi. Jika semua hasil modifikasi Ubuntu (perbaikan bug, dependency, dll) juga diperbaiki dalam paket baru Debian, maka kami cukup langsung mengambil paket Debian tersebut. Keputusan ini yang disebut sebagai sync. Akan tetapi, jika versi baru Debian masih memiliki beberapa persoalan yang mengharuskan dibuatnya versi Ubuntu, maka perubahan tersebut harus diterapkan juga ke dalam versi baru Debian. Keputusan ini yang disebut sebagai merging.

Tutorial Untuk Merging

Proses merging mengharuskan kita untuk melihat perubahan yang terjadi pada paket source Debian dan Ubuntu serta menentukan apa yang telah diubah dan perubahan mana yang terkait dengan Ubuntu. Mari kita lihat sebuah contoh, program untuk membuat CD yang disebut xcdroast.

Untuk memulainya, buat folder untuk menyimpan proyek kita, lalu pindah ke sana:

mkdir ~/xcdroast
cd ~/xcdroast

Sekarang download seluruh paket source yang dibutuhkan ke dalam direktori ini:

[Catatan]

Langkah ini dapat diselesaikan dengan mencari paket Debian pada packages.debian.org dan paket Ubuntu pada packages.ubuntu.com.

[Tip]

Paket penting yang harus diinstal saat melakukan penggabungan (atau untuk setiap pembuatan paket Ubuntu) adalah devscripts. Jika Anda belum menginstalnya, silakan instal terlebih dahulu sebelum melanjutkan ini.

Dengan melihat changelog Ubuntu Anda sudah dapat melihat perbedaan mana yang terjadi antara paket Ubuntu dan paket Debian. Untuk xcdroast, changelog Ubuntu dapat ditemukan pada changelogs.ubuntu.com. Dari sini diketahui bahwa berkas .desktop telah diperbaiki dan dapat diinstal dengan baik untuk menutup laporan bug dalam Malone.

Sekarang teliti perubahan yang terjadi dalam paket source:

debdiff xcdroast_0.98+0alpha15-1.1.dsc xcdroast_0.98+0alpha15-1.1ubuntu1.dsc | \
	ubuntu.debdiff | less ubuntu.debdiff

Baris yang dimulai dengan - menunjukan baris yang telah dihapus dari paket Debian, dan baris yang dimulai dengan + menunjukkan baris yang ditambahkan ke paket Ubuntu.

Hal berikut inilah yang kita lihat:

  • Dalam debian/rules perintah instal, dibandingkan cp, telah digunakan untuk menginstal ikon xcdroast. Sekarang juga terdapat baris baru untuk menginstal berkas .desktop.

  • Dalam debian/changelog perubahan yang terjadi ditambahkan ke entri changelog.

  • Dalam debian/dirs usr/share/applications telah ditambahkan agar baris instal diatas dapat bekerja dengan baik.

  • xcdroast.desktop telah ditambah

Sekarang kita mengetahui bagaimana source Ubuntu telah berubah. Sekarang kita harus melihat perubahan yang terjadi dalam source Debian.

debdiff xcdroast_0.98+0alpha15-1.1.dsc xcdroast_0.98+0alpha15-3.dsc > debian.debdiff
less debian.debdiff

Ada lebih banyak dalam debdiff ini dibanding yang sebelumnya. Salah satu cara agar kita lebih mengerti tentang apa yang telah diubah adalah dengan melihat berkas yang diubah dalam debdiff:

grep diff debian.debdiff

Ini menandakan bahwa debian/postinst, debian/rules, debian/changelog, debian/doc-base.manual, debian/control, dan debian/menu telah diubah dalam versi baru Debian.

Dengan demikian kita harus memeriksa debian/rules untuk melihat apakah perubahan pada Ubuntu juga dipakai. Kita juga dapat melihat bahwa debian/dirs tidak berubah dari versi lama Debian. Sekarang coba lihat pada berkas. Kita dapat meng-unpack berkas source dengan menggunakan dpkg-source:

dpkg-source -x xcdroast_0.98+0alpha15-3.dsc

Perintah ini akan melakukan men-decompress berkas xcdroast_0.98+0alpha15.orig.tar.gz, lalu membuat direktori xcdroast-0.98+0alpha15 dan kemudian menerapkan perubahan yang terdapat dalam xcdroast_0.98+0alpha15-3.diff.gz.

Sekarang silakan pindah ke direktori debian:

cd xcdroast-0.98+0alpha15/debian

Kita dapat melihat pada berkas rules bahwa perubahan yang dilakukan oleh Ubuntu tidak diterapkan ke versi baru Debian. Ini berarti bahwa:

cp debian/xcdroast.xpm `pwd`/debian/$(PACKAGE)/usr/share/pixmaps

...harus diubah menjadi:

#cp debian/xcdroast.xpm `pwd`/debian/$(PACKAGE)/usr/share/pixmaps

#instal desktop and icon
instal -D -m 644 $(CURDIR)/debian/xcdroast.desktop \
	$(CURDIR)/debian/xcdroast/usr/share/applications/xcdroast.desktop
instal -D -m 644 $(CURDIR)/debian/xcdroast.xpm \
	$(CURDIR)/debian/xcdroast/usr/share/pixmaps/xcdroast.xpm

Sekarang dalam berkas dirs, baris berikut harus ditambahkan agar berkas .desktop dapat diinstal:

usr/share/applications

Sekarang kita membutuhkan berkas .desktop (simpan sebagai debian/xcdroast.desktop). Dari ubuntu.debdiff (atau dari paket source Ubuntu), dapat kita lihat bahwa:

[Desktop Entry]
Encoding=UTF-8
Name=X-CD-Roast
Comment=Create a CD
Exec=xcdroast
Icon=xcdroast.xpm
Type=Application
Categories=Application;AudioVideo;

Perubahan terakhir yang harus dilakukan adalah didalam berkas changelog. Tidak hanya kita perlu menambahkan apa yang telah kita lakukan (penggabungan dengan Debian), tetapi kita juga harus menambahkan entri changelog Ubuntu sebelumnya. Untuk melakukan ini, jalankan dch -i -D dapper dan isi sesuatu untuk entri changelog ini:

xcdroast (0.98+0alpha15-3ubuntu1) dapper; urgency=low

  * Resynchronise with Debian.

Pastikan untuk mengubah nomor versi ke versi Ubuntu yang benar. Juga tambah:

xcdroast (0.98+0alpha15-1.1ubuntu1) breezy; urgency=low

  * Fix and instal existing .desktop file. (Closes Malone #2698)
				
  -- Captain Packager <packager@coolness.com>  Sat,  1 Oct 2005 19:39:04 -0400

diantara entri log 0.98+0alpha15-1.1 dan 0.98+0alpha15-2.

Sekarang Anda dapat membangun dan menguji paket source baru. Ada beberapa cara untuk melakukan hal ini, salah satu contohnya:

cd ..
debuild -S
cd ..
sudo pbuilder build xcdroast_0.98+0alpha15-3ubuntu1.dsc

Perintah ini akan membuat ulang paket source, menanda-tangani dengan GPG key Anda, dan membuat paket dalam lingkungan pbuilder untuk memastikan agar source dibuat dengan benar. Pastikan untuk selalu menguji paket Anda sebelum mengeluarkan patch. Langkah terakhir adalah membuat debdiff yang dapat dilampirkan pada laporan bug atau memberikannya kepada MOTU yang ada di kanal IRC #ubuntu-motu. Untuk melakukan hal ini, kita akan mendapatkan perbedaan antara paket source Debian unstable dan versi baru Ubuntu:

debdiff xcdroast_0.98+0alpha15-3.dsc xcdroast_0.98+0alpha15-3ubuntu1.dsc > \
	xcdroast_0.98+0alpha15-3ubuntu1.debdiff