Mock untuk build paket: Perbedaan revisi

Dari IGNwiki
Langsung ke: navigasi, cari
(Tambah pengguna ke grup mock)
 
(15 revisi antara oleh pengguna yang sama tidak ditampilkan)
Baris 1: Baris 1:
Mock dipakai untuk build paket untuk versi tertentu. Misal dari Fedora 12 dapat melakukan build paket untuk Fedora 8, atau bahkan build paket untuk CentOS.
+
Pengembang distro berbasis rpm dapat melakukan build src.rpm ke versi atau platform tertentu. Contoh Pengembang IGOS Nusantara saat ini sedang memakai IGN2011, lalu ada kebutuhan update paket tertentu untuk IGN2008. Akan cukup sulit apabila pengembang harus instal ulang IGN2008 untuk build paket.
 +
 
 +
Mock dipakai untuk build paket src.rpm menjadi rpm ke versi tertentu. Misal dari IGN2009 dapat melakukan build paket untuk IGN2008, atau bahkan build paket untuk CentOS. Mock sangat memudahkan proses build. Saat melakukan build, mock akan membuat lingkungan/environment chroot.
  
 
== Pasang Mock ==
 
== Pasang Mock ==
Baris 5: Baris 7:
  
 
== Atur Konfigurasi ==
 
== Atur Konfigurasi ==
Misal fedora-11-i386.cfg sebagai default
+
Misal fedora-13-i386.cfg menjadi ign2010.cfg
 
  # cd /etc/mock
 
  # cd /etc/mock
  # ln -s --force fedora-11-i386.cfg default.cfg
+
  # cp fedora-13-i386.cfg ign2010.cfg
  
Agar mock memakai repositori lokal lakukan penyesuaian:
+
Atur mock supaya memakai repositori lokal, lakukan penyesuaian:
  
 
'''SEMULA''':
 
'''SEMULA''':
Baris 15: Baris 17:
 
  [fedora]
 
  [fedora]
 
  name=fedora
 
  name=fedora
  mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=fedora-11&arch=i386
+
  mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=fedora-13&arch=i386
 
  failovermethod=priority
 
  failovermethod=priority
 
   
 
   
 
  [updates-released]
 
  [updates-released]
 
  name=updates
 
  name=updates
  mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=updates-released-f11&arch=i386
+
  mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=updates-released-f13&arch=i386
 
  failovermethod=priority
 
  failovermethod=priority
 
   
 
   
Baris 28: Baris 30:
 
  cost=2000
 
  cost=2000
 
  enabled=0
 
  enabled=0
 +
"""
  
 
'''MENJADI''' (misal)
 
'''MENJADI''' (misal)
 
  # repos
 
  # repos
  [f11-all]
+
  [f13-all]
  name=f11-all
+
  name=f13-all
  baseurl=http://192.168.1.100/public/fedora/f11/all
+
  baseurl=http://192.168.1.100/public/fedora/13/all
 
   
 
   
  [f11-updates]
+
  [f13-updates]
  name=f11-updates
+
  name=f13-updates
  baseurl=http://192.168.1.100/public/fedora/f11/updates
+
  baseurl=http://192.168.1.100/public/fedora/13/updates
 +
"""
 +
# Ada tiga double apostrof di bagian akhir.
 +
 
 +
== Modifikasi /etc/mock/site-defaults.cfg ==
 +
Tambahkan pada bagian bawah site-defaults.cfg
 +
 
 +
# Setup various rpm macros to use
 +
config_opts['macros']['%packager'] = 'Nana Suryana <nana@suryana.or.id>'
 +
config_opts['macros']['%debug_package'] = '%{nil}'
  
 
== Tambah pengguna ke grup mock ==
 
== Tambah pengguna ke grup mock ==
Baris 49: Baris 61:
  
 
== Inisialisasi mock ==
 
== Inisialisasi mock ==
 +
Inisialisasi akan menghasilkan /var/lib/mock/<system type>/root
 
  $ mock clean
 
  $ mock clean
 
  $ mock init
 
  $ mock init
 
Perintah di atas akan membuat chroot (ada di: /var/lib/mock/<system type>/root)
 
  
 
== Modifikasi paket melalui shell==
 
== Modifikasi paket melalui shell==
=== Pasang dependencies ===
+
=== Cara1: shell untuk build dari berkas spec ===
Dependencies suatu paket dapat dipasang. Opsi "--no-clean" diperlukan.
+
==== Pasang dependencies ====
  $ mock --no-clean installdeps ~/rpmbuild/SRPMS/paketku-1.2-3.src.rpm
+
Dependencies suatu paket dipasang dengan "installdeps" dan memakai opsi "--no-clean" sehingga siap melakukan build src.rpm menjadi rpm:
 +
  $ mock -r ign2010 --no-clean installdeps ~/rpmbuild/SRPMS/paketku-1.2-3.src.rpm
  
Dependencies sudah siap untuk build src.rpm menjadi rpm.
+
Untuk memodifikasi berkas spec pasang paket nano, caranya:
 
  $ mock-helper yum --installroot /var/lib/mock/<system type>/root install nano
 
  $ mock-helper yum --installroot /var/lib/mock/<system type>/root install nano
  
=== Masuk shell ===
+
==== Masuk shell ====
 
  $ mock shell
 
  $ mock shell
 
Setelah masuk shell lakukan:
 
Setelah masuk shell lakukan:
Baris 68: Baris 80:
 
  nano paketku.spec # lakukan perubahan spec
 
  nano paketku.spec # lakukan perubahan spec
 
  rpmbuild -bb paketku.spec
 
  rpmbuild -bb paketku.spec
 +
 +
=== Cara2: shell untuk build dari berkas src.rpm ===
 +
==== Salin src.rpm ke mock ====
 +
Misal menyalin ~/rpmbuild/SRPMS/paketku-1.2-3.src.rpm ke direktori /tmp yang ada di mock
 +
$ mock -r ign2010 --copyin ~/rpmbuild/SRPMS/paketku-1.2-3.src.rpm /tmp
 +
Masuk shell dan melakukan build:
 +
$ mock -r ign2010 --shell
 +
$ cd
 +
$ rpmbuild --rebuild /tmp/paketku-1.2-3.src.rpm
  
 
== Modifikasi paket tanpa shell ==
 
== Modifikasi paket tanpa shell ==
Baris 74: Baris 95:
  
 
Berkas src.rpm yang dihasilkan ada di ~/rpmbuild/SRPMS/paketku-1.2-3.src.rpm
 
Berkas src.rpm yang dihasilkan ada di ~/rpmbuild/SRPMS/paketku-1.2-3.src.rpm
 +
 +
== Pasang paket ke dalam mock ==
 +
Paket yang tidak ada dalam repositori dan diperlukan paket lain yang ada di dalam mock dapat dipasang dengan cara:
 +
$ mock -r <config-name> --install <your packages>
 +
Contoh:
 +
$ mock -r ign2010 --install kernel-devel
  
 
== Build Paket ==
 
== Build Paket ==
Baris 79: Baris 106:
 
  $ mock -r <configfile> --rebuild ~/rpmbuild/SRPMS/paketku-1.2-3.src.rpm
 
  $ mock -r <configfile> --rebuild ~/rpmbuild/SRPMS/paketku-1.2-3.src.rpm
  
'''Contoh1''': Paket yang akan di build adalah paketku-1.2-3.src.rpm untuk fedora-11-i386, lakukan:
+
'''Contoh1''': Paket yang akan di build adalah paketku-1.2-3.src.rpm untuk ign2010, lakukan:
  $ mock --rebuild package-1.2-3.src.rpm
+
  $ mock -r ign2010 --rebuild paketku-1.2-3.src.rpm
  
'''Contoh2''': Paket yang akan di build adalah paketku-1.2-3.src.rpm untuk fedora-8-i386, lakukan:
+
'''Contoh2''': Memakai beberapa parameter
$ mock -r fedora-8-i386 --rebuild paketku-1.2-3.src.rpm
+
  $ mock -r ign2010 \
 
+
    --verbose \
'''Contoh3''': Memakai beberapa parameter
+
  $ mock -r fedora-10-x86_64 \
+
 
     --resultdir=/home/igos/var/rpm/mock/"%(dist)s"/"%(target_arch)s"/ \
 
     --resultdir=/home/igos/var/rpm/mock/"%(dist)s"/"%(target_arch)s"/ \
 
     --no-clean --no-cleanup-after \
 
     --no-clean --no-cleanup-after \
 
     --rebuild paketku-1.2-3.src.rpm
 
     --rebuild paketku-1.2-3.src.rpm
 +
 +
== Hasil Rebuild ==
 +
Paket hasil rebuild ada di direktori /var/lib/mock/$CONFIG/result:
 +
 +
$ ls -1 /var/lib/mock/$CONFIG/result
 +
build.log
 +
paketku-1.2-3.noarch.rpm
 +
paketku-1.2-3.src.rpm
 +
root.log
 +
state.log

Revisi terkini pada 17 Agustus 2011 14.50

Pengembang distro berbasis rpm dapat melakukan build src.rpm ke versi atau platform tertentu. Contoh Pengembang IGOS Nusantara saat ini sedang memakai IGN2011, lalu ada kebutuhan update paket tertentu untuk IGN2008. Akan cukup sulit apabila pengembang harus instal ulang IGN2008 untuk build paket.

Mock dipakai untuk build paket src.rpm menjadi rpm ke versi tertentu. Misal dari IGN2009 dapat melakukan build paket untuk IGN2008, atau bahkan build paket untuk CentOS. Mock sangat memudahkan proses build. Saat melakukan build, mock akan membuat lingkungan/environment chroot.

Pasang Mock

# yum -y install mock

Atur Konfigurasi

Misal fedora-13-i386.cfg menjadi ign2010.cfg

# cd /etc/mock
# cp fedora-13-i386.cfg ign2010.cfg

Atur mock supaya memakai repositori lokal, lakukan penyesuaian:

SEMULA:

# repos
[fedora]
name=fedora
mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=fedora-13&arch=i386
failovermethod=priority

[updates-released]
name=updates
mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=updates-released-f13&arch=i386
failovermethod=priority

[local]
name=local
baseurl=http://kojipkgs.fedoraproject.org/repos/dist-f11-build/latest/i386/
cost=2000
enabled=0
"""

MENJADI (misal)

# repos
[f13-all]
name=f13-all
baseurl=http://192.168.1.100/public/fedora/13/all

[f13-updates]
name=f13-updates
baseurl=http://192.168.1.100/public/fedora/13/updates
"""
# Ada tiga double apostrof di bagian akhir.

Modifikasi /etc/mock/site-defaults.cfg

Tambahkan pada bagian bawah site-defaults.cfg

# Setup various rpm macros to use 
config_opts['macros']['%packager'] = 'Nana Suryana <nana@suryana.or.id>'
config_opts['macros']['%debug_package'] = '%{nil}'

Tambah pengguna ke grup mock

Pengguna yang akan melakukan build paket harus dimasukkan ke grup mock. Misal memasukkan pengguna dengan nama "igos"

# usermod -a -G mock igos

Ganti user ke igos untuk menjalankan mock

# su - igos
$ whoami
igos

Inisialisasi mock

Inisialisasi akan menghasilkan /var/lib/mock/<system type>/root

$ mock clean
$ mock init

Modifikasi paket melalui shell

Cara1: shell untuk build dari berkas spec

Pasang dependencies

Dependencies suatu paket dipasang dengan "installdeps" dan memakai opsi "--no-clean" sehingga siap melakukan build src.rpm menjadi rpm:

$ mock -r ign2010 --no-clean installdeps ~/rpmbuild/SRPMS/paketku-1.2-3.src.rpm

Untuk memodifikasi berkas spec pasang paket nano, caranya:

$ mock-helper yum --installroot /var/lib/mock/<system type>/root install nano

Masuk shell

$ mock shell

Setelah masuk shell lakukan:

cd /builddir/build/SPECS
nano paketku.spec # lakukan perubahan spec
rpmbuild -bb paketku.spec

Cara2: shell untuk build dari berkas src.rpm

Salin src.rpm ke mock

Misal menyalin ~/rpmbuild/SRPMS/paketku-1.2-3.src.rpm ke direktori /tmp yang ada di mock

$ mock -r ign2010 --copyin ~/rpmbuild/SRPMS/paketku-1.2-3.src.rpm /tmp

Masuk shell dan melakukan build:

$ mock -r ign2010 --shell
$ cd
$ rpmbuild --rebuild /tmp/paketku-1.2-3.src.rpm

Modifikasi paket tanpa shell

Paket yang akan dibuild dengan mock dapat disesuaikan lebih dulu. Setelah pengaturan selesai, buat src.rpm:

$ rpmbuild -bs ~/rpmbuild/SPECS/paketku.spec

Berkas src.rpm yang dihasilkan ada di ~/rpmbuild/SRPMS/paketku-1.2-3.src.rpm

Pasang paket ke dalam mock

Paket yang tidak ada dalam repositori dan diperlukan paket lain yang ada di dalam mock dapat dipasang dengan cara:

$ mock -r <config-name> --install <your packages>

Contoh:

$ mock -r ign2010 --install kernel-devel

Build Paket

Sintak:

$ mock -r <configfile> --rebuild ~/rpmbuild/SRPMS/paketku-1.2-3.src.rpm

Contoh1: Paket yang akan di build adalah paketku-1.2-3.src.rpm untuk ign2010, lakukan:

$ mock -r ign2010 --rebuild paketku-1.2-3.src.rpm

Contoh2: Memakai beberapa parameter

$ mock -r ign2010 \
    --verbose \
    --resultdir=/home/igos/var/rpm/mock/"%(dist)s"/"%(target_arch)s"/ \
    --no-clean --no-cleanup-after \
    --rebuild paketku-1.2-3.src.rpm

Hasil Rebuild

Paket hasil rebuild ada di direktori /var/lib/mock/$CONFIG/result:

$ ls -1 /var/lib/mock/$CONFIG/result
build.log
paketku-1.2-3.noarch.rpm
paketku-1.2-3.src.rpm
root.log
state.log