Kalau biasanya saya menginstal Linux dengan cara booting dari CD media instalasinya, kali ini saya mencoba menginstal Linux dengan cara booting dari network. Caranya saya harus membuat sebuah server yang menyediakan media booting bagi PC lain yang terhubung dengannya. Di lingkungan Linux (dalam hal ini saya pakai Red Hat Linux) ada mekanisme Kickstart Installation.
Lewat Google saya menemukan link tentang instalasi Linux lewat network, berikut adalah panduan yang saya pakai selama utak-atik :
http://www.stanford.edu/~alfw/PXE-Kickstart/PXE-Kickstart.html#toc12
Prinsip bodoh-bodohannya bagaimana mekanisme kickstart adalah seperti ini :
“………….PC yang akan diinstal “dipaksa” untuk booting via network, dia akan mencari DHCP server yang menyediakan alamat IP. Kickstart server diatur supaya bila ada request dari PC tersebut (dia tahu dari MAC address si PC), server akan merespon dengan memberikan alamat IP tertentu. Ok setelah PC mendapat IP, dia akan mencoba menggunakan boot media yang ada pada kickstart server. Proses ini menggunakan protokol TFTP. Setelah boot media berhasil digunakan oleh PC, PC akan mencari bahan-bahan instalasi. Bahan-bahan instalasi ini akan disediakan oleh kickstart server melalui sharing NFS. Selanjutnya proses instalasi akan berjalan otomatis karena di dalam kickstart server sudah disediakan pula aturan-aturan instalasi (bagaimana partisi harddisk, apa passwordnya, aplikasi apa yang perlu diinstal, dsb)………..”
Ada beberapa hal yang perlu saya jelaskan sebelum menuliskan langkah-langkah instalasinya :
- Semua konfigurasi ini dijalankan oleh user
root
. - PC yang akan dipakai sebagai installation server menggunakan sistem operasi Red Hat Linux 5.1. Untuk selanjutnya sebut saja server ini sebagai
kickstart-server
. - PC kosong yang perlu diinstal selanjutnya kita sebut
kickstart-client
.
Langkah-langkah yang harus saya lakukan pada kickstart-server
adalah seperti berikut ini :
1. Mount DVD Red Hat Linux (saya pilih Red Hat Linux Enterprise). Pada contoh ini saya menggunakan file ISO image RHEL 5.1
[root@aptserver ~]# mount -o loop /home/tedy/RHEL_5-1.iso /media/iso mount: /home/tedy/RHEL_5-1.iso already mounted on /media/iso
2. Buat sebuah direktori baru yang akan menyimpan media instalasi. Selanjutnya kita sebut direktori ini sebagai direktori-kickstart
.
[root@aptserver ~]# mkdir -p /export/cdrom
3. Salin isi DVD RHEL ke dalam direktori-kickstart
, kali ini saya menggunakan rsync
:
[root@aptserver ~]# rsync -rtv /media/iso/ /export/cdrom/ building file list ... done ./ .discinfo EULA GPL README-as.html README-bn.html README-de.html .............. .............. .............. isolinux/rescue.msg isolinux/splash.lss isolinux/vmlinuz sent 2987057878 bytes received 52700 bytes 11083898.25 bytes/sec total size is 2986502132 speedup is 1.00
4. Share direktori-kickstart
dengan menggunakan NFS. Caranya adalah dengan mendaftarkan direktori tersebut ke dalam file /etc/exports
seperti pada contoh berikut ini :
[root@aptserver cdrom]# cat /etc/exports /export/cdrom/ 192.168.1.20/255.255.255.0 (ro) [root@aptserver cdrom]#
Kita juga mengatur komputer mana saja yang boleh mengakses NFS share direktori tersebut. Pada contoh di atas, yang boleh mengakses hanyalah komputer dengan alamat IP 192.168.1.20. Oh ya, client hanya boleh mengakses direktori tersebut secara read only. Setelah konfigurasi selesai baru kita mulai menjalankan service NFS server seperti berikut ini :
[root@aptserver cdrom]# service nfs start Starting NFS services: [ OK ] Starting NFS quotas: [ OK ] Starting NFS daemon: [ OK ] Starting NFS mountd: [ OK ] [root@aptserver cdrom]# service nfs status rpc.mountd (pid 2460) is running... [root@aptserver cdrom]# showmount -e Export list for aptserver: /export/cdrom 192.168.1.20/255.255.255.0
5. kickstart-client
akan mencari media boot yang tersedia di jaringan melalui protokol TFTP (trivial file transfer protocol). Buat sebuah direktori baru yang akan berfungsi sebagai boot directory, selanjutnya kita sebut direktori-TFTP
.
[root@aptserver ~]# mkdir /tftpboot/ [root@aptserver ~]# mkdir /tftpboot/pxelinux.cfg/
6. Copy kernel image ke dalam direktori-TFTP
:
[root@aptserver ~]# cp /export/cdrom/images/pxeboot/initrd.img /tftpboot [root@aptserver ~]# cp /export/cdrom/images/pxeboot/vmlinuz /tftpboot
7. Copy file pxelinux.0
ke dalam direktori TFTP. File pxelinux.0
dapat diambil di dalam direktori-kickstart
atau bisa juga diambil di dalam /usr/lib/syslinux/
:
[root@aptserver ~]# cp /export/cdrom/syslinux-3.73/core/pxelinux.0 /tftpboot/
8. Buat kickstart profile di dalam direktori-TFTP
. Contohnya seperti berikut ini :
[root@aptserver ~]# cat /tftpboot/pxelinux.cfg/default.netks-7.2 default linux serial 0,9600n8 label linux ks=192.168.1.5:/export/cdrom/ kernel vmlinuz append ksdevice=eth0 console=ttyS0,38400 console=tty0 load_ramdisk=1 initrd=initrd.img network ks=nfs:192.168.1.5:/export/cdrom/ks.cfg [root@aptserver ~]#
9. Buat softlink dari kickstart profile tadi. Pada contoh di bawah ini, link yang dibuat adalah C0A80114
. Kombinasi itu berasal dari alamat IP 192.168.1.20 yang diubah ke dalam bentuk hexadecimal : 192 -> C0, 168 -> A8, 1 -> 01, 20 -> 14. IP ini adalah alamat IP yang akan dipakai oleh kickstart-client
, akan dibahas di langkah selanjutnya.
[root@aptserver pxelinux.cfg]# ln -s default.netks-7.2 C0A80114 [root@aptserver pxelinux.cfg]# ls -lh total 8.0K lrwxrwxrwx 1 root root 17 Jan 31 04:30 C0A80114 -> default.netks-7.2 -rw-r--r-- 1 root root 38 Jan 31 02:04 default -rw-r--r-- 1 root root 222 Jan 31 05:01 default.netks-7.2
10. Tahap berikutnya adalah menginstal TFTP server . Pada contoh ini saya menggunakan atftpd
sebagai TFTP server. Oh ya karena paket atftpd
tidak tersedia di dalam DVD instalasi Red Hat, jadi saya harus download dulu.
[root@aptserver ~]# wget http://www.silfreed.net/download/repo/packages/atftp/atftp-0.7-5.fc8.i386.rpm --04:18:14-- http://www.silfreed.net/download/repo/packages/atftp/atftp-0.7-5.fc8.i386.rpm Resolving www.silfreed.net... 66.59.109.136, 2002:423b:6d88::1 Connecting to www.silfreed.net|66.59.109.136|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 83279 (81K) [application/x-rpm] Saving to: `atftp-0.7-5.fc8.i386.rpm' 100%[====================================================================================>] 83,279 28.0K/s in 2.9s 04:18:18 (28.0 KB/s) - `atftp-0.7-5.fc8.i386.rpm' saved [83279/83279] [root@aptserver ~]# rpm -i atftp-0.7-5.fc8.i386.rpm warning: atftp-0.7-5.fc8.i386.rpm: Header V3 DSA signature: NOKEY, key ID ed00d312 error reading information on service atftp: No such file or directory error: %post(atftp-0.7-5.fc8.i386) scriptlet failed, exit status 1 [root@aptserver ~]# [root@aptserver ~]# rpm -ivh atftp-0.7-5.fc8.i386.rpm warning: atftp-0.7-5.fc8.i386.rpm: Header V3 DSA signature: NOKEY, key ID ed00d312 Preparing... ########################################### [100%] package atftp-0.7-5.fc8 is already installed [root@aptserver ~]#
11. Setelah TFTP server terinstal, yang harus dilakukan adalah melakukan konfigurasi seperti berikut ini :
[root@aptserver ~]# /usr/sbin/atftpd --daemon --no-multicast --group nobody --tftpd-timeout 0 -m 1000 /tftpboot/
Dengan perintah di atas, kita memberitahu TFTP server untuk menggunakan /tftpboot/
sebagai direktori TFTP.
12. Saat mulai proses booting dari network, kickstart-client
akan meminta alamat IP dari kickstart-server
. Oleh karenanya, selain menjalankan TFTP server, kickstart-server
juga berfungsi sebagai DHCP server. Untuk menjalankan servis DHCP di Red Hat Linux, kita harus mengatur file /etc/dhcpd.conf
terlebih dulu. Lihat contohnya sebagai berikut :
[root@aptserver Server]# cat /etc/dhcpd.conf # # DHCP Server Configuration file. # see /usr/share/doc/dhcp*/dhcpd.conf.sample # ddns-update-style interim; ignore client-updates; default-lease-time 600; max-lease-time 7200; deny unknown-clients; not authoritative; option domain-name "tedytirta.com"; option subnet-mask 255.255.255.0; option broadcast-address 192.168.1.255; allow bootp; allow booting; subnet 192.168.1.0 netmask 255.255.25.0 { range 192.168.1.18 192.168.1.21; option routers 192.168.1.1; option subnet-mask 255.255.255.0; } group { next-server 192.168.1.5; filename "gpxelinux.0"; host JumpstartClient { hardware ethernet 08:00:27:E4:57:BB; fixed-address 192.168.1.20; } } [root@aptserver Server]#
Di dalam file/etc/dhcpd.conf
kita mendaftarkan MAC address dari kickstart-client
supaya bisa memperoleh IP address. Selain itu pada contoh di atas, saya juga mendefinisikan bahwa kickstart-client
akan menggunakan alamat IP 192.168.1.20. Setelah file /etc/dhcpd.conf
selesai diatur, baru kita bisa menjalankan DHCP server seperti terlihat pada contoh berikut ini :
[root@aptserver Server]# service dhcpd start Starting dhcpd: [ OK ] [root@aptserver Server]#
13. Langkah terakhir adalah membuat sebuah file konfigurasi. File ini mendeskripsikan proses instalasi yang harus dijalankan oleh
kickstart-client
(bagaimana partisi harddisk, apa password rootnya, aplikasi apa yang perlu diinstal, alamat IP yang harus dipakai, dsb). File ini disimpan di dalam direktori-kickstart
. Dengan adanya file ini tidak perlu lagi ada intervensi user pada saat instalasi, kita cukup boot kickstart-client
lewat network dan tunggu sampai instalasi selesai. Makanya penting sekali mengatur file ini, file ini mendeskripsikan segala detail proses instalasi. Lihat contohnya berikut ini :
[root@aptserver cdrom]# cat /export/cdrom/ks.cfg # Kickstart file automatically generated by anaconda. install text nfs --server 192.168.1.5 --dir /export/cdrom key --skip lang en_US.UTF-8 keyboard us network --device eth0 --bootproto=static --ip=192.168.1.231 --netmask=255.255.255.0 --gateway=192.168.1.1 rootpw --iscrypted $1$.dZrkeXj$CLB4rgZWpI7bzX5W5NINS/ firewall --enabled --port=22:tcp authconfig --enableshadow --enablemd5 reboot selinux --enforcing timezone --utc Asia/Jakarta bootloader --location=mbr --driveorder=hda --append="acpi=off rhgb quiet" clearpart --all --drives=hda --initlabel part /boot --fstype ext3 --size=100 --ondisk=hda --asprimary part / --fstype ext3 --size=1024 --grow --ondisk=hda --asprimary part swap --size=128 --grow --size=256 --ondisk=hda --asprimary %packages @mysql @editors @system-tools @text-internet @legacy-network-server @dns-server @dialup @core @base @ftp-server @network-server @java @smb-server @base-x @kde-desktop @development-libs @web-server @printing @mail-server @server-cfg @sql-server @admin-tools @development-tools @graphical-internet audit kexec-tools bridge-utils device-mapper-multipath dnsmasq vnc-server #xorg-x11-utils xorg-x11-server-Xnest xorg-x11-server-Xvfb -compiz-kde -knetworkmanager -amarok imake -sysreport mc festival libgnome-java libgtk-java libgconf-java kexec-tools %post useradd -d /home/tedy -m -p tedy123 tedy mv /etc/motd /etc/motd.orig echo "" >> /etc/motd echo "========================================" >> /etc/motd echo " Kickstart Client Server" >> /etc/motd echo "========================================" >> /etc/motd echo "" >> /etc/motd [root@aptserver cdrom]#
Pada contoh di atas, password root yang saya pakai dalam bentuk terenkripsi. Supaya mudah, saya salin saja password kickstart-server
(lihat dari file /etc/passwd
).
Ok sampai di sini semua konfigurasi kickstart-server
sudah selesai. Tinggal tes, lihat hasil yang saya dapat :
Dalam contoh ini kickstart-client
yang saya pakai adalah sebuah virtul mesin (dibuat dengan Sun VirtualBox). Saya masuk BIOSnya lalu saya set supaya boot via network. Dan lihat proses instalasi berjalan otomatis sampai selesai. Saya tinggal tunggu sampai muncul halaman login…..ah senangnya 😀 Proses ini berguna sekali kalau ingin menginstal Linux ke dalam beberapa PC sekaligus.
Wah ternyata tulisan ini panjang sekali, lega juga bisa selesai menulisnya di blog ini. Padahal sudah lama juga saya melakukan tes instalasi kickstart. Ok sekarang saatnya berangkat ke kantor :-p
Wah ini bisa jadi primbon jilid dua Ted 😀
@ Bas : file Unix Primbon gua makin bertambah besar..ah senangnya :))
Wahh keren, nambah wawasan..
btw intalasai ini (%packages) udh mencakup semua paket seperti halnya install dgn konfigurasi “everything” ?
terus bisa gak ya kita tambahin command (kyk di console)
“chkconfig sendmail off” di script ks.cfg (kyknya sih bisa di bagian %post) ? :-D
thx,
^_^