Slackware Packaging Manual : Using MAKEPKG Facilities

Posted by beritaini

on Friday, July 8, 2011

Umumnya source code program untuk Linux/Unix dikompres dengan sistem tar.gz atau tar.bz2. Hal ini ditujukan untuk menjaga skema kepemilikan dan permisi (permission) dari tiap file dan direktori dari source. Kita sudah mengetahui bahwa file binary executable memiliki permisi 755 secara default dan file teks memiliki permisi 644, maka source code tsb dibundel dengan kompresi tar untuk menjaga agar atribut ini tidak berubah termasuk menjaga konsistensi dari file2 link/symbolic link jika ada. Untuk lebih memadatkan file terkompresi ini digunakan kompresi gzip atau bzip2

Seperti yg telah diketahui bersama, paket instalasi program/aplikasi untuk Slackware menggunakan ekstensi .tgz secara default. Tetapi lebih baik kita coba melihat isi dari sebuah paket program/aplikasi milik Slackware. Secara garis besar sebuah paket program/aplikasi Slackware memiliki struktur seperti ini:
/install
....|-doinst.sh
....|-slack-desc
/DIR_SISTEM

Direktori install berisi file script instalasi yaitu doinst.sh dan file deskripsi/summary dari program tsb. Di dalam file doinst.sh dapat ditulis script2 post-instalasi seperti pembuatan link/symbolic link, penambahan user dalam sistem, pengubahan permisi untuk file/direktori tertentu, pokoknya semua yang bisa dilakukan dalam shell. Deskripsi dalam file slack-desc, sangat berguna untuk mencari deskripsi sebuah program karena isi file ini akan di-copy ke dalam database paket slackware yang diletakkan di direktori /var/log/packages. Direktori yang saya tulis sebagai /DIR_SISTEM merupakan tempat/lokasi direktori dimana file2 dalam paket program tsb akan di-install. Misalnya jika dalam paket a.tgz terdapat
/install
...|-doinst.sh
...|-slack-desc
/etc
...|-a.conf
/usr
...|-/bin
........|-binary_a

maka secara mudahnya dapat dikatakan bahwa a.conf akan di-install ke dalam direktori /etc dan paket binary_a akan di-install ke dalam direktori /usr/bin. Sekarang yang menjadi masalah adalah bagaimana membuat sebuah paket program dari source agar memiliki struktur seperti di atas.

Slackware sebenarnya sudah menyediakan utilitas untuk keperluan ini dengan menggunakan binary makepkg. Urutan pembuatan paket dengan makepkg secara mudah adalah seperti ini (misalnya source code abc.tar.gz):

    1. Dekompres file abc.tar.gz dengan:

    shell>tar -xvfz abc-1.0.0.tar.gz

    hasilnya adalah direktori source abc-1.0.0.
    2. cd ke direktori abc-1.0.0
    3. Lakukan pre-instalasi konfigurasi dengan menjalankan script configure:

    shell>./configure --opsi1 --opsi2

    Untuk mengetahui opsi konfigurasi dari source tsb (abc-1.0.0) bisa dengan melakukan:

    shell>./configure --help

    Prosedur ini akan membuat Makefile sesuai dengan hasil system checking yang dilakukan script configure dari file dasar/template Makefile.in.
    4. Jika tidak ada kesalahan dan Makefile terbuat dengan sukses, lakukan proses building dengan make:

    shell>make

    5. Jika proses no. 4 selesai tanpa kesalahan, kita mulai membuat paket program tsb, atau paket tgz-nya.
      5.a. Jika file Makefile source menyertakan string informasi DESTDIR, dapat diketahui dengan melakukan:

      shell>grep -n DESTDIR *

      maka langkah pertama adalah membuat direktori instalasi, misalnya pkg yang letaknya terserah kita. kemudian lakukan:

      shell>make -k DESTDIR=/PATH_TO_DIR/pkg install

      binary yang telah terbuat pada prosedur 4 akan di-install ke dalam direktori pkg dan secara otomatis make akan membuat child directory dalam direktori pkg sesuai dengan informasi dari string DESTDIR dalam file Makefile, misalnya /usr/bin, /usr/lib, dst.
      5.b. Jika file Makefile tidak memiliki string DESTDIR, maka kita harus melakukan pembuatan tree direktori secara manual, minimal kita membuat direktori prefix, misalnya /usr atau /usr/local atau yang lainnya. Jadi kita buat dulu direktori instalasi, misalnya pkg dan kemudian di dalam pkg kita buat direktori /usr atau /usr/local atau yang lainnya yang dibutuhkan oleh program yang akan di-install. Setelah itu lakukan (misalnya prefix direktorinya adalah /usr):

      shell>make -k prefix=/PATH_TO_DIR/pkg/usr install
    6. cd ke direktori instalasi, misal pkg.

    shell> cd pkg

    Periksa apakah semua binary yang diinginkan telah ter-install ke dalam direktori instalasi. Jika sudah yakin bahwa semua binary/file telah te-install sempurna maka file2 binary yang ada dalam direktori instalasi dapat di-stripping untuk menghilangkan simbol2 debugging dan dapat mengurangi ukuran file2 binary yang akan di-install. Lakukan dengan cara:

    shell>strip -sv usr/bin/*

    untuk libraries ada dua langkah, yang pertama untuk shared libs (file .so) dan yg kedua untuk static libs (file .a) (addition from rizzie, thanks):

    shell>strip --strip-unneeded -v usr/lib/*.so shell>strip --strip-debug -v usr/lib/*.a

    strip hanya dapat men-stripping file2 binary. File teks atau lainnya akan di-ignore.
    7. Buat direktori install di direktori install

    shell>mkdir install

    8. Buat file deskripsi slack-desc dan letakkan dalam direktori install yang telah dibuat. Contoh file slack-desc dapat dilihat di sini
    Syarat slack-desc hanya satu yaitu nama paket program dalam file slack-desc harus sama dengan nama paket program sebenarnya, misalnya abc-1.0.0, maka dalam slack-desc ditulis:

         |-----handy-ruler------------------------------------------------------| abc: Program ABC abc: abc: Deskripsi singkat program abc

    angka versi tidak perlu ditulis dalam slack-desc.
    9. Setelah prosedur 8 selesai, paket dibuat dengan menggunakan makepkg di direktori instalasi (dalam kasus ini direktori pkg) dan jangan lupa kita tentukan output direktori tempat paket2 kita akan disimpan sebelum kita install:

    makepkg $DIREKTORI_OUTPUT/abc-1.0.0-ARCH-REV.tgz

    ARCH=optimasi yang digunakan sewaktu building (prosedur 4). Lihat opsi yang diperlukan untuk membuat paket untuk arsitektur CPU dalam opsi help script configure. Biasanya string ini mengikuti tipe prosesor yang digunakan kompiler jika tidak diberikan opsi khusus, jadi isinya bisa i486, i586, i686, dst.
    REV=angka ini menunjukkan urutan perubahan minor dari source code yang digunakan atau perubahan konfigurasi paket dari source code yang sama. misalnya untuk Dropline GNOME menggunakan 1dl, 2dl, 3dl, dst.
    Dalam prosedur ini kita akan mendapat pertanyaan dari program makepkg, yaitu:
      1. Penghilangan link/symbolic link yang ada dan membuat script untuk membuat link2 tsb sewaktu instalasi. 2. Mengubah permisi dan kepemilikan file2 dan direktori dalam paket.
    Untuk no. 1 direkomendasikan agar link2 dihilangkan dan dibuat script untuk membuat link2 yang dibutuhkan sewaktu instalasi. Untuk no. 2, rekomendasinya adalah tidak mengubah apapun alias jawabannya adalah no.
    Dapat pula disertakan/ditambahkan file2 konfigurasi atau lainnya ke dalam direktori instalasi misalnya menambahkan file2 dokumentasi yang biasanya diletakkan di direktori /usr/share/NAMA_PROGRAM.
    10. Tunggu beberapa saat, jika tidak aa error maka paket kita, misalnya abc-1.0.0-i686-1wl.tgz terbuat dengan sempurna dan siap di-install edngan pkgtool ato installpkg:

    installpkg $DIREKTORI_OUTPUT/abc-1.0.0-i686-1wl.tgz


    Dengan begini proses install dan un-install paket program/aplikasi yang dibuat sendiri dari soure code menjadi mudah dan lebih aman.