Next Previous Contents

6. Membuat File RPM Sendiri

Membangun RPM adalah cukup mudah untuk dikerjakan, khususnya bila anda dapat mengambil perangkat lunak yang anda coba paketkan untuk membangun dirinya.

Prosedur dasar untuk membangun RPM sebagai berikut :

Dalam operasi yang normal, RPM membangun baik paket dalam biner maupun dalam source.

6.1 File rpmrc

Sampai saat ini, konfigurasi RPM hanya tersedia via file /etc/rpmrc. Sebuah contoh, seperti :

require_vendor: 1
distribution: I roll my own!
require_distribution: 1
topdir: /usr/src/me
vendor: Mickiesoft
packager:  Mickeysoft Packaging Account <packages@mickiesoft.com>

optflags: i386 -O2 -m486 -fno-strength-reduce
optflags: alpha -O2
optflags: sparc -O2

signature: pgp
pgp_name: Mickeysoft Packaging Account
pgp_path: /home/packages/.pgp

tmppath: /usr/tmp

Baris require_vendor menyebabkan RPM mensyaratkan bahwa ia menemukan baris vendor. Ini dapat terjadi dari /etc/rpmrc atau dari header file spesifikasi itu sendiri. Untuk menonaktifkannya, ganti nomor ke 0. Hal yang sama untuk baris require_distribution dan require_group.

Baris berikutnya adalah baris distribution. Anda dapat mendefinisikannya di sini atau nanti di header file spesifikasi. Saat membangun sebuah distribusi tertentu, adalah ide bagus untuk memastikan baris ini adalah benar, bahkan meski tidak disyaratkan. Baris vendor bekerja dengan cara yang sama, tetapi dapat berupa apa pun (sebagai contoh Joe's Software and Rock Music Emporium).

RPM sekarang juga mendukung paket dalam banyak arsitektur. File /rpmrc dapat mengendalikan sebuah variabel ``optflags'' untuk membangun sesuatu yang memerlukan arsitektur yang spesifik. Lihat bagian berikutnya untuk mengetahui bagaimana menggunakan variabel ini.

Dalam tambahan untuk makro yang di atas, ada beberapa lagi. Anda dapat menggunakan :

rpm --showrc

untuk menemukan bagaimana tag ter-set dan flag apa saja yang tersedia.

6.2 File Spesifikasi

Kami akan memulai diskusi tentang file spesifikasi. File spesifikasi diperlukan untuk membangun sebuah paket. File spesisikasi adalah gambaran tentang perangkat lunak dengan instruksinya tentang bagaimana untuk membangunnya dan sebuah daftar file untuk semua file biner yang terinstall.

Anda akan menginginkan menamai file spesifikasi anda, mengacu kepada konvensi standar. Namanya seharusnya seperti ini nama paket-tanda hubung-nomor versi-tanda hubung-nomor rilis-titik-spec.

Ini contoh file spesifikasi yang kecil (vim-3.0-1.spec):

Summary: ejects ejectable media and controls auto ejection
Name: eject
Version: 1.4
Release: 3
Copyright: GPL
Group: Utilities/System
Source: sunsite.unc.edu:/pub/Linux/utils/disk-management/eject-1.4.tar.gz
Patch: eject-1.4-make.patch
Patch1: eject-1.4-jaz.patch
%description
This program allows the user to eject media that is autoejecting like
CD-ROMs, Jaz and Zip drives, and floppy drives on SPARC machines.

%prep
%setup
%patch -p1
%patch1 -p1

%build
make RPM_OPT_FLAGS="$RPM_OPT_FLAGS"

%install
install -s -m 755 -o 0 -g 0 eject /usr/bin/eject
install -m 644 -o 0 -g 0 eject.1 /usr/man/man1

%files
%doc README COPYING ChangeLog

/usr/bin/eject
/usr/man/man1/eject.1

6.3 Header

Header mempunyai field standar yang anda perlu isi. Ada sedikit keberatan memang. Fieldnya harus diisi seperti ini :

6.4 Persiapan

Ini adalah bagian kedua dalam file spesifikasi. Ini digunakan untuk mendapatkan source yang siap dibangun. Di sini anda memerlukan apa pun yang dibutuhkan untuk mendapatkan source telah tertambal dan setup seperti yang mereka inginkan dikerjakan dengan 'make'.

Satu hal yang harus dicatat : Setiap bagian ini adalah benar-benar hanya sebuah tempat untuk mengeksekusi script shell. Anda dapat membuat sebuah script sh dengan mudah dan menaruhnya setelah tag %prep untuk melakukan unpack dan menambal source anda. Kami membuat makro untuk membantu dalam hal ini, bagaimana pun juga.

Yang pertama dari makro-makro ini adalah makro %setup. Dalam bentuk yang paling sederhana (tanpa pilihan baris perintah), dia akan melakukan unpack source dan melakukan cd ke direktori source. Hal itu juga akan disertai pilihan (option) :

Makro berikutnya yang tersedia adalah makro %patch. Makro ini membantu mengotomatiskan proses penerapan patch ke source. Makro ini memerlukan beberapa pilihan, diperlihatkan di bawah ini :

Itu seharusnya adalah semua makro yang anda perlukan. Setelah anda meyakinkan semuanya benar, anda dapat juga mengerjakan setup yang lain yang anda perlukan untuk dikerjakan via script bertipe sh. Apa pun yang anda sertakan sampai makro %build (didiskusikan dalam bagian berikutnya) adalah menjalankannya via sh. Lihat contoh di atas untuk ketikan dari sesuatu yang anda mungkin inginkan untuk dikerjakan di sini.

6.5 Membangun (Build)

Pada dasarnya tak ada makro apa pun untuk bagian ini. Anda seharusnya hanya meletakkan perintah apa pun di sini yang akan anda pakai untuk membangun perangkat lunak, sekali anda melakukan untar sourcenya, menambalnya dan melakukan cd ke dalam direktori. Ini hanyalah set perintah yang lain yang dilewatkan ke sh, sehingga perintah sah (legal) apa pun dapat pergi ke sini (termasuk komentar). Direktori kerja anda saat ini di-reset dalam setiap bagian ini ke tingkat atas dari direktori sumber, jadi ingatlah itu baik-baik. Anda dapat melakukan cd ke dalam subdirektori bila diperlukan.

6.6 Memasang (Install)

Sebenarnya tak ada makro apa pun di sini. Anda hanya ingin meletakkan perintah apa pun di sini yang diperlukan untuk menginstall. Bila anda punya 'make install' tersedia untuk anda dalam paket yang anda bangun, letakkan itu di sini. Bila tidak, anda dapat menambal makefile untuk sebuah make install dan hanya mengerjakan sebuah 'make install' di sini, atau anda dapat menginstall mereka secara manual dengan perintah sh. Anda dapat mempertimbangkan direktori anda saat ini untuk menjadi tingkat atas dari direktori source.

6.7 Pilihan Script Install/Uninstall pre dan post

Anda dapat membuat script dijalankan sebelum dan sesudah instalasi dan uninstalasi dari paket biner. Sebuah alasan utama untuk itu adalah mengerjakan sesuatu seperti menjalankan ldconfig setelah instalasi atau memindahkan paket yang berisikan libraries / kepustakaan yang dipakai bersama (shared). Makro untuk setiap script adalah sebagai berikut :

Isi dari bagian ini seharusnya hanyalah beberapa bentuk dari script, meski anda tidak membutuhkan #!/bin/sh.

6.8 File-file

Ini adalah bagian di mana anda harus melihat file-file paket biner. RPM tak punya cara lain untuk mengetahui file biner apa yang sudah diinstall sebagai hasil dari make install. Ada jalan untuk mengetahuinya. Beberapa menyarankan untuk melakukan find sebelum dan sesudah paket diinstall. Dengan sistem multiuser (banyak pemakai), ini tak dapat diterima seperti file lain mungkin telah dibuat selama sebuah proses pembangunan paket yang menyebabkan tak ada yang dikerjakan dengan paket itu sendiri.

Ada beberapa makro tersedia untuk mengerjakan beberapa hal yang istimewa. Mereka terdaftar dan digambarkan di sini :

Keberatan terbesar dalam daftar file adalah daftar direktori-direktori. Bila anda mendaftarkan /usr/bin secara tak sengaja, paket biner anda akan berisi setiap file dalam /usr/bin di sistem anda.

6.9 Cara membangunnya !

'Source' Pohon Direktori

Pertama kali yang anda butuhkan adalah build tree yang terkonfigurasi dengan benar. Ini dapat dikonfigurasi menggunakan file /etc/rpmrc. Sebagian besar orang akan hanya menggunakan /usr/src.

Anda mungkin memerlukan membuat direktori selanjutnya untuk membuat sebuah build tree :

Mengetes pembangunan

Pertama kali yang anda mungkin akan inginkan adalah mengambil source untuk membangun secara bersih tanpa RPM. Untuk mengerjakan ini, lakukan 'unpack' pada source, dan rubah nama direktori ke$NAME.orig. Lalu lakukan 'unpack' pada source lagi. Gunakan source ini untuk membangunnya. Pergilah ke dalam direktori source dan ikuti instruksi untuk membangunnya. Bila anda harus menyunting sesuatu, anda akan membutuhkan sebuah patch. Sekali anda memilihnya untuk dibangun, bersihkan direktori sourcenya. Pastikan dan hapus file apa pun yang diambil dari sebuah script configure. Lalu lakukan cd kembali, keluar dari direktori source ke induknya. Kemudian anda akan mengerjakan sesuatu seperti :

diff -uNr dirname.orig dirname >../SOURCES/dirname-linux.patch

Ini akan membuat sebuah patch untuk anda yang anda gunakan dalam file spesifikasi anda. Catatan bahwa ``linux'' yang anda lihat dalam nama patch adalah hanya sebuah identifier. Anda mungkin ingin menggunakan sesuatu yang lebih bisa menggambarkan seperti ``config'' atau bugs untuk menggambarkan mengapa anda harus membuat sebuah patch.

Sebuah ide yang bagus juga untuk melihat file patch yang anda buat sebelum menggunakannya untuk memastikan tak ada file biner yang terselip secara tak sengaja.

Membuat Daftar File

Sekarang, anda telah mempunyai source yang akan dibangun dan tahu bagaimana mengerjakannya, membangunnya, dan memasangnya. Lihatlah keluaran dari urutan pemasangan dan membangun daftar file anda dari hal itu untuk digunakan dalam file spesifikasi. Kami pada umumnya membangun file spesifikasi secara paralel dengan semua langkah ini. Anda dapat membuat salah satu inisial dan mengisinya ke dalam bagian yang mudah, dan lalu mengisikan ke dalam langkah lain sebagaimana anda lakukan.

Membangun sebuah Paket dengan RPM

Sekali anda punya sebuah file spesifikasi, anda siap untuk mencoba dan membangun paket anda. Cara yang paling bermanfaat untuk mengerjakan ini adalah dengan sebuah perintah seperti :

rpm -ba foobar-1.0.spec

Ada pilihan lain yang berguna dengan switch -b seperti :

Ada beberapa modifier dalam switch -b, yaitu :

6.10 Pengetesan

Sekali anda telah memiliki sebuah rpm source dan biner untuk paket anda, anda perlu mengetesnya. Cara paling mudah dan terbaik adalah menggunakan mesin yang benar-benar berbeda dari seseorang di mana anda membangun di atasnya dalam rangka mengetes. Sesudah itu, anda hanya harus mengerjakan make install di mesin anda sendiri, sehingga seharusnya ia sudah terpasang dengan cukup baik.

Anda dapat mengetik rpm -u namapaket atas sebuah paket untuk mengetesnya, tetapi cara itu tidak dapat dipercaya, karena dalam membangun sebuah paket, anda telah mengerjakan make install. Bila anda meninggalkan sesuatu di luar daftar file anda, ia tidak akan di-uninstall. Anda akan kemudian menginstall ulang paket biner dan sistem anda akan menjadi lengkap lagi, tetapi rpm anda masih belum lengkap. Pastikan dan ingat-ingat bahwa hanya karena anda melakukan rpm -ba namapaket, kebanyakan orang memasang paket anda akan hanya mengerjakan rpm -i namapaket. Patikan anda tidak mengerjakan apa pun dalam bagian pemasangan atau install yang akan diperlukan untuk dikerjakan saat binernya terpasang secara otomatis.

6.11 Apa dapat yang dikerjakan dengan RPM baru anda

Sekali anda telah membuat RPM anda sendiri atas sesuatu (diasumsikan sesuatu yang belum pernah di-RPM-kan), anda dapat melakukan kontribusi pekerjaan anda ke yang lain (juga diasumsikan anda me-RPM-kan sesuatu yang didistribusikan dengan bebas). Untuk mengerjakan itu, anda ingin melakukan upload paketnya ke ftp://ftp.redhat.com

6.12 Sekarang Mau Apa Lagi?

Silakan lihat bagian di atas dalam Pengetesan dan Apa yang dikerjakan dengan RPM baru anda. Kami ingin semua ketersediaan RPM dapat kami ambil, dan kami ingin 'mereka' menjadi RPM yang baik. Silakan ambil waktu untuk mengetes mereka sebaik mungkin, dan kemudian ambil waktu untuk meng-uploadnya untuk keuntungan semua orang. Juga, silakan memastikan anda hanya melakukan upload perngkat lunak yang tersedia dengan gratis. Perangkat lunak komersial dan shareware tak seharusnya di-upload kecuali mereka punya hak cipta dan dinyatakan bahwa hal ini diizinkan. Ini termasuk perangkat lunak dari Netscape, ssh, pgp, dll.


Next Previous Contents