Diskless Nodes dengan Gentoo
1.
Pendahuluan
Tentang HOWTO ini
HOWTO ini akan membantu anda untuk mensetup workstation diskless
berbasis distribusi Gentoo Linux. Kami sengaja membuat panduan ini semudah
mungkin dan dapat dicerna oleh pengguna baru Linux, karena kita semua barawal
dari sana :) Walaupun penguna yang telah berpengalaman dapat mennyatukan
berbagai HOWTO yang tersedia untuk diskless nodes dan jaringan bersamaan kami
harap panduan ini dapat memudahkan instalasi untuk semua pengguna yang
tertarik, gaek ataupun bukan.
Aa itu komputer diskless?
Komputer diskless merupakan sebuah PC tanpa perangkat boot biasa seperti
harddisk, floppy, atau CD-ROM. Diskless node melakukan boot dari jaringan
dan membutuhkan server yang menyediakan ruangan peyimpanan sebagaimana
harddisk lokal. Dari sekarang kita akan menyebut server sebagai master,
sedangkan komputer diskless kita namakan slave. Node slave membutuhkan
kartu jaringan yang mendukung boot PXE atau Etherboot; bacalah Etherboot.org untuk daftar perangkat yang
didukung. Kartu-kartu jaringan modern kebanyakan telah mendukung PXE dan banyak
kartu jaringan built-in motherboard juga dapat digunakan.
Sebelum anda mulai
Anda harus memiliki instalasi Gentoo pada node master dan ruang yang cukup di
harddisk master untuk menempatkan filesystem node slave. Pastikan juga agar
anda memiliki satu antarmuka jaringan untuk internet yang terpisah dari koneksi
lokal.
2.
Konfigurasi master dan slave
Tentang kernel-kernel
Kernel merupakan software yang berada di antara hardware anda dan semua
software yang terinstal di komputer anda, jadi pada dasarnya merupakan jantung
dari sistem operasi. Ketika komputer anda dinyalakan, BIOS mengeksekusi
instruksi-instruksi yang ditemukan di ruang boot dari harddisk anda.
Instruksi-instruksi ini biasanya merupakan sebuah bootloader yang me-load
kernel anda. Setelah kernel di-load, semua proses ditangani oleh kernel.
Untuk informasi lebih rinci tentanf kerel dan konfigurasi kernel, anda mungkin
ingin membaca HOWTO
kernel.
Konfigurasi kernel master
Kernel master boleh berukuran sebesar mungkin dan terkostumisasi sesuai dengan
keinginan anda, tetapi ada beberapa opsi kernel yang perlu anda aktifkan.
Masuklah ke menu konfigurasi kernel dengan mengetikkan:
Daftar Kode 2.1: Mengedit konfigurasi kernel master |
# cd /usr/src/linux
# make menuconfig
|
Anda akan mendapatkan GUI abu-abu dan biru yang menawarkan cara alternatif yang
lebih aman daripada mengedit file /usr/src/linux/.config. Jika
kernel anda saat ini telah berfungsi dengan benar, anda mungkin ingin menyimpan
konfigurasinya dengan cara keluar dari GUI lalu mengetikkan:
Daftar Kode 2.2: Mem-backup konfigurasi kernel master |
# cp .config .config_working
|
Masuklah ke submenu-submenu berikut ini dan pastikan agar semua item yang ada
telah anda pilih sebagai built-in (dan BUKAN sebagai modul). Opsi-opsi
berikut ini diambil dari kernel versi 2.6.10. Jika anda menggunakan versi lain,
tulisan atau urutannya mungkin berbeda. Pastikan saja agar anda paling tidak
telah memilih opsi-opsi yang ditunjukkan di bawah ini.
Daftar Kode 2.3: Opsi-opsi kernel master |
Code maturity level options --->
[*] Prompt for development and/or incomplete code/drivers
Device Drivers --->
Networking options --->
<*> Packet socket
<*> Unix domain sockets
[*] TCP/IP networking
[*] IP: multicasting
[ ] Network packet filtering (replaces ipchains)
File systems --->
Network File Systems --->
<*> NFS server support
[*] Provide NFSv3 server support
[*] Network packet filtering (replaces ipchains)
IP: Netfilter Configuration --->
<*> Connection tracking (required for masq/NAT)
<*> IP tables support (required for filtering/masq/NAT)
|
Jika anda ingin menggunakan packet filtering, anda dapat menambahkan
modul-modul yang nanti. Jangan lupa untuk membaca Bab tentang
Firewall dari Buku panduan Keamanan Gentoo tentang cara men-setup-nya
dengan benar.
Catatan:
Opsi-opsi konfigurasi kernel ini hanya ditujukan untuk ditambahkan ke opsi-opsi
konfigurasi sistem anda dan bukan untuk mengganti konfigurasi kernel anda.
|
Setelah mengkonfigurasi-ulang kernel master, anda perlu membangun-ulang kernel
anda.
Daftar Kode 2.4: Mengkompilasi-ulang kernel master's kernel dan modul-modulnya |
# make && make modules_install
# cp arch/i386/boot/bzImage /boot/bzImage-master
|
Kemudian tambahkan sebuah entri untuk kernel baru tersebut di
lilo.conf atau grub.conf, tergantung bootloader yang
anda gunakan, lalu jadikan kernel baru sebagai kernel default. Sekarang setelah
bzImage disalin ke direktori boot anda, yang perlu anda lakukan adalah me-reboot
sistem anda agar opsi-opsi baru tadi di-load.
Tentang kernel slave
Anda dianjurkan untuk mengkompilasi kernel slave tanpa modul apapun, karena
me-load modul dan menyiapkannya lewat boot jauh merupakan proses yang susah
dan sia-sia. Sebagai tambahan, kernel slave harus berukuran sekecil dan
seramping mungkin untuk mengefisiensikan boot lewat jaringan. Kita akan
mengkompilasi kernel di tempat yang sama dengan tempat kita mengkonfigurasi
kernel master.
Untuk menghindari kebingungan dan menyingkat waktu, mungkin mem-backup
konfigurasi master merupakan ide bagus. Lakukan dengan perintah berikut:
Daftar Kode 2.5: Mem-backup konfigurasi kernel master |
# cp /usr/src/linux/.config /usr/src/linux/.config_master
|
Sekarang kita perlu mengkonfigurasi kernel slave seperti kita telah
mengkonfigurasi kernel master. Jika anda ingin memulai dengan file konfigurasi
baru, anda dapat membuat file /usr/src/linux/.config default
dengan mengetikkan:
Daftar Kode 2.6: Mendapatkan konfigurasi kernel baru |
# cd /usr/src/linux
# cp .config_master .config
|
Sekarang masuklah ke GUI konfigurasi kernel dengan mengetikkan:
Daftar Kode 2.7: Mengedit konfigurasi kernel slave |
# cd /usr/src/linux
# make menuconfig
|
Anda perlu memastikan untuk memilih opsi-opsi berikut ini sebagai built-in
dan BUKAN sebagai modul:
Daftar Kode 2.8: Opsi-opsi kernel slave |
Code maturity level options --->
[*] Prompt for development and/or incomplete code/drivers
Device Drivers --->
[*] Networking support
Networking options --->
<*> Packet socket
<*> Unix domain sockets
[*] TCP/IP networking
[*] IP: multicasting
[*] IP: kernel level autoconfiguration
[*] IP: DHCP support (NEW)
File systems --->
Network File Systems --->
<*> file system support
[*] Provide NFSv3 client support
[*] Root file system on NFS
|
Catatan:
Sebuah cara alternatif untuk memiliki server dhcp adalah dengan men-setup
server BOOTP.
|
Penting:
Penting bagi anda untuk menambahkan kartu jaringan anda ke dalam kernel (dan
bukan sebagai modul) pada node. Tetapi menggunakan modul pada node diskless
biasanya tidak menjadi masalah.
|
Sekarang kernel slave perlu dikompilasi. Anda perlu berhati-hati di sini karena
anda tidak ingin mengacak-acak modul (jika memang ada) yang telah anda kompilasi
untuk master:
Daftar Kode 2.9: Kompilasi kernel slave |
# cd /usr/src/linux
# make
|
Sekarang ciptakan direktori di master yang akan digunakan untuk menyimpan
file-file slave dan file-file sistem yang diperlukan. Kami akan menggunakan
/diskless, tetapi anda dapat memilih lokasi lain yang anda sukai.
sekarang salin bzImage slave ke direktori /diskless:
Catatan:
Jika anda menggunakan arsitektur yang berbeda, anda mungkin perlu menyimpan
setiap konfigurasi ke .config_arch. Lakukan hal yang sama pada
imej-imej kernel: simpanlah ke /diskless sebagai
bzImage_arch.
|
Daftar Kode 2.10: Menyalin kernel slave |
# mkdir /diskless
# cp /usr/src/linux/arch/i386/boot/bzImage /diskless
|
Mengkonfigurasi filesystem awal slave
Filesystem master dan slave dapat banyak anda tweak dan ubah. Untuk sekarang
ini kita hanya akan mengurusi filesystem dasar dari file konfigurasi dan titik
mount. Pertama kita perlu menciptakan sebuah direktori di dalam
/diskless untuk slave pertama. Setiap slave harus memiliki
filesystem root-nya masing masing, karena berbagi file-file sistem tertentu
akan mengakibatkan masalah perizinan dan hard crash. Anda boleh
menamakan direktori-direktori ini dengan nama aa saja, tetapi penulis sarankan
untuk menggunakan alamat iP masing masing slave, karena alamat IP unik dan
tidak membingungkan. IP statis slave pertama kita misalnya adalah,
192.168.1.21:
Daftar Kode 2.11: Menciptakan direktori root remote |
# mkdir /diskless/192.168.1.21
|
Banyak file konfigurasi di /etc yang perlu anda edit agar berfungsi di
slave. Salin direktori /etc master ke root slave anda dengan mengetikkan:
Daftar Kode 2.12: Menciptakan /etc untuk filesystem slave |
# cp -r /etc /diskless/192.168.1.21/etc
|
Filesystem ini masih belum siap pakai karena masih memerlukan beberapa titik
mount dan direktori. Untuk menciptakannya, ketik:
Daftar Kode 2.13: Menciptakan titik mount dan direktori di filesystem slave |
# mkdir /diskless/192.168.1.21/home
# mkdir /diskless/192.168.1.21/dev
# mkdir /diskless/192.168.1.21/proc
# mkdir /diskless/192.168.1.21/tmp
# mkdir /diskless/192.168.1.21/mnt
# chmod a+w /diskless/192.168.1.21/tmp
# mkdir /diskless/192.168.1.21/mnt/.initd
# mkdir /diskless/192.168.1.21/root
# mkdir /diskless/192.168.1.21/sys
# mkdir /diskless/192.168.1.21/var
# mkdir /diskless/192.168.1.21/var/empty
# mkdir /diskless/192.168.1.21/var/lock
# mkdir /diskless/192.168.1.21/var/log
# mkdir /diskless/192.168.1.21/var/run
# mkdir /diskless/192.168.1.21/var/spool
# mkdir /diskless/192.168.1.21/usr
# mkdir /diskless/192.168.1.21/opt
|
Anda seharusnya sudah mengenal kebanyakan dari "stub" ini; stub seperti
/dev, /proc atau /sys akan diisi ketika
slave dinyalakan, sisanya akan di-mount nanti. Anda juga perlu mengedit file
/diskless/192.168.1.21/etc/conf.d/hostname dan menyesuaikannya
dengan nama host slave. Binari, pustaka dan file-file lain akan diisikan
di bagian selanjutnya pada HOWTO ini tepat sebelum anda mulai mem-boot slave.
Walaupun /dev nantinya akan diisikan oleh udev, anda perlu
menciptakan entri console. Jika tidak, anda akan mendapatkan
pesan error yang mengatakan "unable to open initial console".
Daftar Kode 2.14: Menciptakan entri console di /dev |
# mknod /diskless/192.168.1.21/dev/console c 5 1
|
3.
Konfigurasi server DHCP
Tentang server DHCP
DHCP adalah kependekan dari Dynamic Host Configuration Protocol. Sever DHCP
adalah komputer pertama yang akan dihubungi oleh slave ketika PXE boot. Tujuan
utama dari server DHCP adalah untuk memberikan alamat IP. Server DHCP dapat
memberikan alamat IP berdasarkan alamat MAC ethernet host. Ketika slave telah
mendapatkan alamat IP, server DHCP akan memberitahukan slave tempat mengambil
filesystem dasar dan kernel-nya.
Sebelum anda mulai
Ada beberapa hal yang perlu anda pastikan telah berfungsi dengan benar sebelum
anda memulai. Pertama, periksa koneksi jaringan anda:
Daftar Kode 3.1: Memeriksa konfigurasi jaringan |
# ifconfig eth0 multicast
# ifconfig -a
|
Anda perlu memastikan agar eth0 telah berfungsi. Seharusnya terlihat
seperti berikut ini:
Daftar Kode 3.2: Perangkat eth0 yang telah berfungsi dengan benar |
eth0 Link encap:Ethernet HWaddr 00:E0:83:16:2F:D6
inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:26460491 errors:0 dropped:0 overruns:2 frame:0
TX packets:32903198 errors:0 dropped:0 overruns:0 carrier:1
collisions:0 txqueuelen:100
RX bytes:2483502568 (2368.4 Mb) TX bytes:1411984950 (1346.5 Mb)
Interrupt:18 Base address:0x1800
|
MULTICAST harus ada, jika tidak, anda perlu mengkompilasi ulang kernel
anda dan mengaktifkan dukungan multicast.
Instalasi sever DHCP
Jika jaringan anda belum memiliki server DHCP, anda perlu menginstalnya:
Daftar Kode 3.3: Instalasi server dhcp |
# emerge dhcp
|
Jika jaringan anda sudah memiliki server DHCP, anda perlu mengedit file
konfigurasinya agar PXE dapat boot dengan benar.
Konfigurasi server DHCP
Anda hanya perlu mengedit satu file konfigurasi sebelum menjalankan server
DHCP: /etc/dhcp/dhcpd.conf. Salin lalu edit contoh file
konfigurasi berikut ini:
Daftar Kode 3.4: Edit file konfigurasi server dhcp |
# cp /etc/dhcp/dhcpd.conf.sample /etc/dhcp/dhcpd.conf
# nano -w /etc/dhcp/dhcpd.conf
|
Layout umum dari file ini telah di-set dengan gaya indent dan terlihat seperti
berikut:
Daftar Kode 3.5: Contoh layout dhcpd.conf |
ddns-update-style none;
shared-network LOCAL-NET {
subnet 192.168.1.0 netmask 255.255.255.0 {
host slave{
}
group {
}
}
}
|
Blok shared-network hanyalah opsional dan digunakan untuk IP yang ingin
anda berikan kepada host di jaringan yang menggunakan topologi yang sama.
Paling tidak harus ada satu subnet yang ditentukan dan blok group
yang opsional dpat anda gunakan untuk mengelompokkan opsi-opsi di anatara
item-item. Contoh yang bagus dari dhcpd.conf terlihat seperti
berikut:
Daftar Kode 3.6: Contoh dhcpd.conf |
#
# contoh dhcpd.conf untuk klien diskless
#
ddns-update-style none;
# Dengan anggapan satu gateway sudah cukup untuk traffic IP
option routers 192.168.1.1;
# Memberikan info DNS ke klien
option domain-name-servers 192.168.1.1;
option domain-name "mydomain.com";
# Menentukan server TFTP yang digunakan
next-server 192.168.1.1;
# Menentukan buffer opsi-opsi khusus vendor ke klien PXE:
# Code 1: Multicast IP address of boot file server
# Code 2: UDP port that client should monitor for MTFTP responses
# Code 3: UDP port that MTFTP servers are using to listen for MTFTP requests
# Code 4: Number of seconds a client must listen for activity before trying
# to start a new MTFTP transfer
# Code 5: Number of seconds a client must listen before trying to restart
# a MTFTP transfer
option space PXE;
option PXE.mtftp-ip code 1 = ip-address;
option PXE.mtftp-cport code 2 = unsigned integer 16;
option PXE.mtftp-sport code 3 = unsigned integer 16;
option PXE.mtftp-tmout code 4 = unsigned integer 8;
option PXE.mtftp-delay code 5 = unsigned integer 8;
option PXE.discovery-control code 6 = unsigned integer 8;
option PXE.discovery-mcast-addr code 7 = ip-address;
# Menentukan subnet tempat node diskless berada
subnet 192.168.1.0 netmask 255.255.255.0 {
# Memberikan info yang dibutuhkan untuk klien PXE
class "pxeclients" {
match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
vendor-option-space PXE;
# Paling tidak harus ada satu opsi khusus vendor PXE yang harus di-set agar
# ROM boot klien tahu bahwa server ini mendukung PXE. Kita set alamat IP
# MCAST ke 0.0.0.0 agar ROM tahu bahwa kita tidak dapat menyediakan TFTP
# multicast
option PXE.mtftp-ip 0.0.0.0;
# Ini adalah nama file yang harus didownload oleh ROM boot
filename "pxelinux.0";
}
# Menyediakan info yang diperlukan untuk klien etherboot
class "etherboot" {
match if substring(option vendor-class-identifier, 0, 9) = "Etherboot";
filename "vmlinuz_arch";
}
# Menambahkan satu deklarasi host untuk setiap klien diskless
host slave21 {
hardware ethernet 00:02:A5:04:3B:66;
fixed-address 192.168.1.21;
}
}
|
Catatan:
Anda boleh menggunakan PXE dan Etherboot bersama-sama. Konfigurasi di atas
hanyalah sebuah contoh; jika anda mendapatkan masalah, bacalah dokumentasi
DHCPd.
|
Alamat IP setelah next-server akan ditanyakan untuk filename
yang ditentukan. Alamat IP ini harus merupakan IP server tftp, biasanya
alamat yang sama dengan alamat IP master. filename tergantung kepada
direktori /diskless (ini karena opsi-opsi server tftp yang akan
dijelaskan nanti). Di dalam blok host, opsi hardware ethernet
menentukan alamat MAC, dan fixed-address memberikan IP tetap ke alamat
MAC tersebut. Terdapat manual yang bagus dhcpd.conf berisi
opsi-opsi yang tidak dapat kami jelaskan di panduan ini. Anda dapat membacanya
dengan mengetikkan:
Daftar Kode 3.7: Membaca manual dhcpd.conf |
# man dhcpd.conf
|
Menjalankan server DHCP
Sebelum anda menjalankan skrip inisialiasi dhcp, edit file
/etc/conf.d/dhcp agar menjadi seperti berikut ini:
Daftar Kode 3.8: Contoh /etc/conf.d/dhcp |
IFACE="eth0"
|
Variabel IFACE merupakan device yang ingin anda gunakan untuk menjalankan
server DHCP, pada contoh ini adalah eth0. Menambahkan argumen lain pada
variabel IFACE bisa berguna untuk topologi jaringan rumit dengan banyak
kartu jaringan. Untuk menjalankan server dhcp, ketik:
Daftar Kode 3.9: Menjalankan server dhcp pada master |
# /etc/init.d/dhcp start
|
Untuk menambahkan server dhcp di skrip start-up, ketik:
Daftar Kode 3.10: Menambahkan server dhcp di runlevel default master |
# rc-update add dhcp default
|
Mengatasi masalah server DHCP
Untuk mengetahui apakah node telah boot, anda dapat melihat isi file
/var/log/messages. Jika node telah boot dengan sukses, file
messages akan berisi baris-baris seperti berikut ini:
Daftar Kode 3.11: Contoh entri file log yang diciptakan oleh dhcp |
DHCPDISCOVER from 00:00:00:00:00:00 via eth0
DHCPOFFER on 192.168.1.21 to 00:00:00:00:00:00 via eth0
DHCPREQUEST for 192.168.1.21 from 00:00:00:00:00:00 via eth0
DHCPACK on 192.168.1.21 to 00:00:00:00:00:00 via eth0
|
Catatan:
File log ini juga dapat membantu anda untuk mengetahui alamat MAC slave.
|
Jika anda mendapatkan pesan berikut, kemungkinan ada sesuatu yang salah dengan
file konfigurasi, tetapi server DHCP telah melakukan broadcast dengan benar.
Daftar Kode 3.12: contoh kesalahan server dhpc |
no free leases on subnet LOCAL-NET
|
Setiap kali anda mengubah isi file konfigurasi, anda harus me-restart server
DHCP. Untuk me-restart-nya, ketik:
Daftar Kode 3.13: Me-estart server dhcp pada master |
# /etc/init.d/dhcpd restart
|
4.
Konfigurasi server TFTP dan Bootloader PXE Linux dan/atau Etherboot
Tentang server TFTP
TFTP merupakan singkatan dari Trivial File Transfer Protocol. Sever TFTP akan
mensuplai kernel dan sistem dasar untuk slave. Semua kernel dan filesystem
slave disimpan di server TFTP, jadi sebaiknya anda menjadikan master sebagai
server TFTP.
Instalasi server TFTP
Server yang sangat dianjurkan penggunaanya tersedia pada paket tftp-hpa.
Server tftp ini kebetulan diciptakan oleh pencipta SYSLINUX dan dapat
bekerja sama dengan baik dengan pxelinux. Untuk menginstalnya, ketik:
Daftar Kode 4.1: Instalasi server tfp |
# emerge tftp-hpa
|
Konfigurasi server TFTP
Edit /etc/conf.d/in.tftpd. Anda perlu menentukan direktori
tftproot dengan variabel INTFTPD_PATH dan opsi-opsi perintah dengan
variabel INTFTPD_OPTS. Berikut ini merupakan contohnya:
Daftar Kode 4.2: Contoh /etc/conf.d/in.tftpd |
INTFTPD_PATH="/diskless"
INTFTPD_OPTS="-l -v -s ${INTFTPD_PATH}"
|
Opsi -l menyatakan bahwa server ini berjalan pada modus stand
alone, jadi anda tidak perlu menjalankan inetd. Opsi -v menyatakan
bahwa pesan-pesan log/error harus terinci. Opsi -s /diskless menentukan
root server tftp anda.
Menjalankan Server TFTP
Untuk menjalankan server tftp, ketik:
Daftar Kode 4.3: Menjalankan server tftp master |
# /etc/init.d/in.tftpd start
|
Perintah tadi akan menjalankan server tftp dengan opsi-opsi yang telah anda
tentukan di /etc/conf.d/in.tftpd. Jika anda ingin agar server ini
dijalankan langsung ketika boot, ketik:
Daftar Kode 4.4: Menambahkan server tftp ke runlevel default master |
# rc-update add in.tftpd default
|
Tentang PXELINUX
Seksi ini tidak diperlukan jika anda hanya menggunakan Etherboot. PXELINUX
adalah bootloader jaringan yang setara dengan LILO atau GRUB dan akan
dijalankan dengan bantuan TFTP. Paket ini pada dasarnya hanyalah kumpulan
instruksi-instruksi yang memberitahukan klien kemana mencari kernel dan
filesystem dasarnya serta dapat ditambahkan berbagai opsi-opsi kernel.
Sebelum anda memulai
Anda memerlukan file pxelinux.0 yang diikutsertakan pada paket SYSLINUX
ciptaan H. Peter Anvin. Anda dapat menginstal paket ini dengan mengetikkan:
Daftar Kode 4.5: Instalasi syslinux |
# emerge syslinux
|
Men-setup PXELINUX
Catatan:
Seksi ini tidak diperlukan untuk Etherboot
|
Sebelum anda menjalankan server tftp anda, anda perlu men-setup pxelinux.
Pertama, salin binari pxelinux ke direktori /diskless anda:
Daftar Kode 4.6: Men-setup bootloader jaringan |
# cp /usr/lib/syslinux/pxelinux.0 /diskless
# mkdir /diskless/pxelinux.cfg
# touch /diskless/pxelinux.cfg/default
|
Perintah-perintah tersebut akan menciptakan file konfigurasi bootloader. Binari
pxelinux.0 akan mencari file dengan nama alamat IP klien dalam
format heksadesimal di direktori pxelinux.cfg. Jika tidak ditemukan,
dijit paling akhir dari nama file akan dibuang lalu pencarian dilanjutkan sampai
semua dijit habis. Syslinux versi 2.05 dan yang lebih baru pertama-tama akan
melakukan pencarian untuk file dengan nama alamat MAC. Jika file ini tidak
ditemukan, metode pencarian dengan alamat IP dalam heksadesimal akan dilakukan.
Jika masih tidak ditemukan, maka file default akan digunakan.
Daftar Kode 4.7: Urutan file yang dicari oleh PXE di dalam direktori pxelinux.cfg/ |
01-00-40-63-c2-ca-c9
C0A80115
C0A8011
C0A801
C0A80
C0A8
C0A
C0
C
default
|
Catatan:
Semua dengan huruf kecil.
|
Mari kita mulai dengan file default:
Daftar Kode 4.8: Contoh pxelinux.cfg/default |
DEFAULT /bzImage
APPEND ip=dhcp root=/dev/nfs nfsroot=192.168.1.1:/diskless/192.168.1.21
|
Tag DEFAULT menunjukkan pxelinux ke kernel bzImage yang telah kita
kompilasi sebelumnya. Tag APPEND menambahkan opsi-opsi inisialisasi
kernel. Karena kita telah mengkompilasi kernel slave dengan opsi
NFS_ROOT_SUPPORT, kita perlu menentukan nfsroot di sini. IP pertama
adalah IP master, sedangkan IP kedua adalah direktori yang telah dibuat di
dalam /diskless untuk menyimpan filesystem dasar slave.
Tentang Etherboot
Catatan:
Seksi ini tidak diperlukan jika anda menggunakan boot PXE.
|
Etherboot mem-boot imej boot jaringan dari server TFTP. Seperti PXE, Etherboot
setara dengan LILO atau GRUB. Utilitas mknbi dapat membantu anda untuk
menciptakan imej-imej dengan opsi-opsi yang berbeda.
Sebelum anda memulai
Anda memerlukan paket mknbi (utilitas untuk menciptakan imej kernel yang telah
diberikan tag untuk digunakan boot jaringan) untuk menciptakan imej Etherboot anda.
Tool ini akan menciptakan imej kernel yang telah dikonfigurasi dari kernel asli anda.
Imej ini berisi opsi-opsi boot seperti yang tertera berikut:
Daftar Kode 4.9: Instalasi mknbi |
# emerge mknbi
|
Men-setup Etherboot
Pada bagian ini kita akan menciptakan imej etherboot sederhana. Karena server
dhcp telah memberitahukan klien tentang root-path di "option root-path"
dhcp.conf, kita tidak perlu lagi memasukkannya di sini. Perinciannya bisa
anda dapatkan dari manual mknbi.
Daftar Kode 4.10: Manual mknbi |
# man mknbi
|
Menciptakan imej boot. Perintah ini akan menciptakan imej bootable ELF yang
dapat menghantarkan dhcp dan rootpath ke kernel. Juga memaksa kernel untuk
mencari server dhcp di jaringan.
Daftar Kode 4.11: Menciptakan imej netboot |
# mkelf-linux -ip=dhcp /diskless/bzImage > /diskless/vmlinuz
|
Catatan:
Untuk imej khusus arch tertentu, anda perlu mengetikkan bzImage_arch
dan vmlinuz_arch.
|
Mengatasi masalah pada proses boot jaringan
Ada beberapa hal yang dapat anda lakukan untuk mengatasi masalah pada proses
boot jaringan. Pertama anda dapat menggunakan tool tcpdump. Untuk
menginstalnya, ketik:
Daftar Kode 4.12: Instalasi tcpdump |
# emerge tcpdump
|
Sekarang anda dapat memperhatikan berbagai lalu-lintas jaringan dan pastikan
agar interaksi klien/server telah berfungsi. Jika ada sesuatu yang tidak
berfungsi, ada beberapa hal yang mungkin perlu anda periksa. Pertama pastika
agar klien dan server secara fisik telah terhubung dan kabel-kabel jaringan
tidak ada yang rusak. Jika klien/server anda tidak dapat menerima request pada
port tertentu, pastikan agar tidak ada rintangan firewall. Untuk melihat
interaksi antara dua komputer, ketik:
Daftar Kode 4.13: Melihat interaksi klien dan server dengan tcpdump |
# tcpdump host and
|
Anda juga dapat menggunakan tcpdump untuk melihat port tertentu seperti
port ftp dengan mengetikkan:
Daftar Kode 4.14: Mengawasi server tftp |
# tcpdump port 69
|
Kesalahan umum yang mungkin akan anda dapatkan adalah: "PXE-E32: TFTP open
time-out". Ini kemungkinan disebabkan oleh firewall. Jika anda menggunakan
TCPwrappers, anda mungkin perlu memeriksa /etc/hosts.allow
dan etc/hosts.deny untuk memastikan agar konfigurasinya telah
benar. Klien harus diperbolehkan untuk terhubung ke server.
5.
Konfigurasi server NFS
Tentang server NFS
NFS adalah singkatan dari Network File System. Server NFS akan digunakan untuk
menyediakan direktori-direktori bagi slave. Bagian ini bisa anda utak-atik lagi
nantinya, tetapi untuk sekarang ini kita akan menyiapakan node slave dasar
untuk mem-boot diskless.
Tentang Portmapper
Banyak servis klien/server yang tidak menggunakan port tertentu, melainkan
bergantung pada RPC (Remote Procedure Calls). Ketika servis tersebut dijalankan
ia akan menggunakan sembarang port yang kemudian akan didaftarkan dengan
utilitas Portmapper. NFS bergantung pada RPC dan untuk itu memerlukan
Portmapper dijalankan sebelumnya.
Sebelum anda mulai
Server NFS memerlukan dukungan pada level kernel, jadi jika anda belum
mengkonfigurasinya, anda perlu mengkompilasi ulang kernel master anda. Untuk
memriksa kembali konfigurasi kernel anda, ketik:
Daftar Kode 5.1: Memeriksa opsi-opsi NFS tertentu |
# grep NFS /usr/src/linux/.config_master
|
Anda seharusnya melihat output seperti ini jika kernel anda telah dikonfigurasi
dengan benar:
Daftar Kode 5.2: Opsi-opsi NFS yang telah dipilih dengan benar pada konfigurasi kernel master |
CONFIG_PACKET=y
# CONFIG_PACKET_MMAP is not set
# CONFIG_NETFILTER is not set
CONFIG_NFS_FS=y
CONFIG_NFS_V3=y
# CONFIG_NFS_V4 is not set
# CONFIG_NFS_DIRECTIO is not set
CONFIG_NFSD=y
CONFIG_NFSD_V3=y
# CONFIG_NFSD_V4 is not set
# CONFIG_NFSD_TCP is not set
|
Instalasi server NFS
Paket NFS bisa anda dapatkan dari portage dengan megetikkan:
Daftar Kode 5.3: Instalasi nfs-utils |
# emerge nfs-utils
|
Paket ini akan meng-emerge utilitas portmap, server nfs dan utilitas klien nfs
serta dependensi dasarnya.
Konfigurasi server NFS
Ada tiga file konfigurasi utama yang perlu anda edit:
Daftar Kode 5.4: File konfigurasi NFS |
/etc/exports
/diskless/192.168.1.21/etc/fstab
/etc/conf.d/nfs
|
File /etc/exports menentukan bagaimana, kemana, dan apa yang akan
diekspor melalui NFS. fstab slave akan diubah agar dapat me-mount filesystem
NFS yang diekspor oleh master.
File /etc/exports master biasanya berisi seperti berikut ini:
Daftar Kode 5.5: Contoh /etc/exports master |
/diskless/192.168.1.21 192.168.1.21(sync,rw,no_root_squash,no_all_squash)
/opt 192.168.1.0/24(sync,ro,no_root_squash,no_all_squash)
/usr 192.168.1.0/24(sync,ro,no_root_squash,no_all_squash)
/home 192.168.1.0/24(sync,rw,no_root_squash,no_all_squash)
/var/log 192.168.1.21(sync,rw,no_root_squash,no_all_squash)
|
Kolom pertama berisi direktori yang akan diekspor, dan kolom selanjutnya
berisi kemana dan bagaimana. Kolom ini dapat dibagi dua: komputer mana saja
yang boleh me-mount direktori tertentu, dan apa yang dapat dilakukan oleh
klien terhadap filesystem yang di-mount tersebut: ro untuk read
only, rw untuk read/write; no_root_squash dan
no_all_squash sangat penting untuk klien diskless karena penulisan ke
disk diperlukan, jadi klien-klien ini tidak di-"squash" ketika melakukan
request I/O. Berikut ini contoh file fstab slave
/diskless/192.168.1.21/etc/fstab.
Daftar Kode 5.6: Contoh fstab slave |
master:/diskless/192.168.1.21 / nfs sync,hard,intr,rw,nolock,rsize=8192,wsize=8192 0 0
master:/opt /opt nfs sync,hard,intr,ro,nolock,rsize=8192,wsize=8192 0 0
master:/usr /usr nfs sync,hard,intr,ro,nolock,rsize=8192,wsize=8192 0 0
master:/home /home nfs sync,hard,intr,rw,nolock,rsize=8192,wsize=8192 0 0
none /proc proc defaults 0 0
master:/var/log /var/log nfs hard,intr,rw 0 0
|
Pada contoh ini, master hanyalah nama host dari master, tetapi bisa juga
berupa alamat IP master. Kolom pertama mencantumkan direktori yang akan di-mount
dan kolom kedua berisi mount point. Kolom ketiga mencantumkan filesystem dan
harus diisi dengan NFS untuk semua direktori NFS yang di-mount. Kolom keempat
mencantumkan berbagai opsi yang akan digunakan ketika proses mount berlangsung
(baca manual mount(1) untuk mengetahui opsi-opsi mount). Dilaporkan adanya
masalah dengan soft mount point untuk itu di sini kami menciptakan
hard mount point, namun anda perlu mengetahui opsi-opsi
/etc/fstab agar cluster anda lebih efisien.
File terakhir yang perlu anda edit adalah /etc/conf.d/nfs yang
berisi beberapa opsi untuk NFS ketika diinisialisasi, isinya seperti berikut:
Daftar Kode 5.7: Contoh /etc/conf.d/nfs master |
# Config file for /etc/init.d/nfs
# Jumlah server yang akan dijalankan secara default
RPCNFSDCOUNT=8
# Opsi-opsi yag akan diberikan ke rpc.mountd
RPCMOUNTDOPTS=""
|
Anda perlu mengganti RPCNFSDCOUNT dengan jumlah node diskless yang ada
di jaringan.
Menjalankan server NFS
Anda perlu menjalankan server NFS dengan skrip initnya yang ada di
/etc/init.d dengan mengetikkan:
Daftar Kode 5.8: Menjalankan server NFS master |
# /etc/init.d/nfs start
|
Jika anda ingin agar skrip ini dijalankan ketika sistem anda bot:
Daftar Kode 5.9: Menambahkan server nfs ke runlevel default master |
# rc-update add nfs default
|
6.
Melengkapi filesystem slave
Menyalin file-file
Sekarang kita akan mengsinkronkan filesystem slave dengan filesystem master
dan menyediakan binari-binari yang diperlukan namun tetap menjaga file-file
khusus slave.
Daftar Kode 6.1: Menciptakan filesystem slave |
# rsync -avz /bin /diskless/192.168.1.21
# rsync -avz /sbin /diskless/192.168.1.21
# rsync -avz /lib /diskless/192.168.1.21
|
Catatan:
Alasan penggunaan rsync -avz dan bukan cp adalah untuk memelihara symlink
dan perizinan
|
Konfigurasi jaringan diskless
Agar skrip init jaringan tidak menghentikan koneksi ke server NFS, anda perlu
menambahkan sebuah opsi di /etc/conf.d/net pada klien diskless.
Daftar Kode 6.2: Edit /etc/conf.d/net |
config_eth0=( "noop" )
|
Catatan:
Untuk informasi lebih lanjut, bacalah /etc/conf.d/net.example.
|
Skrip-skrip inisialisasi
Anda membutuhkan skrip-skrip init di
/diskless/192.168.1.21/etc/runlevels sebanyak skrip init yang
anda butuhkan di node diskless. Namun semuanya tergantung pada apa yang
ingin anda tugaskan pada slave.
Peringatan:
Jangan gunakan program rc-update untuk menambah atau menghapus skrip
dari runlevel slave ketika anda sedang login di master karena dapat mengubah
runlevel master. Anda perlu menciptakan sendiri link-link yang dibutuhkan
atau dengan login ke node slave melalui ssh atau memasang monitor dan keyboard
ke slave.
|
Daftar Kode 6.3: Contoh runlevel slave |
/diskless/192.168.1.21/etc/runlevels/:
total 16
drwxr-xr-x 2 root root 4096 2003-11-09 15:27 boot
drwxr-xr-x 2 root root 4096 2003-10-01 21:10 default
drwxr-xr-x 2 root root 4096 2003-03-13 19:05 nonetwork
drwxr-xr-x 2 root root 4096 2003-02-23 12:26 single
/diskless/192.168.1.21/etc/runlevels/boot:
total 0
lrwxrwxrwx 1 root root 20 2003-10-18 17:28 bootmisc -> /etc/init.d/bootmisc
lrwxrwxrwx 1 root root 19 2003-10-18 17:28 checkfs -> /etc/init.d/checkfs
lrwxrwxrwx 1 root root 17 2003-10-18 17:28 clock -> /etc/init.d/clock
lrwxrwxrwx 1 root root 22 2003-10-18 17:28 domainname -> /etc/init.d/domainname
lrwxrwxrwx 1 root root 20 2003-10-18 17:28 hostname -> /etc/init.d/hostname
lrwxrwxrwx 1 root root 22 2003-10-18 17:28 localmount -> /etc/init.d/localmount
lrwxrwxrwx 1 root root 19 2003-10-18 17:28 modules -> /etc/init.d/modules
lrwxrwxrwx 1 root root 18 2003-10-18 17:28 net.lo -> /etc/init.d/net.lo
lrwxrwxrwx 1 root root 20 2003-10-18 17:28 netmount -> /etc/init.d/netmount
lrwxrwxrwx 1 root root 21 2003-10-18 17:28 rmnologin -> /etc/init.d/rmnologin
lrwxrwxrwx 1 root root 19 2003-10-18 17:28 urandom -> /etc/init.d/urandom
/diskless/192.168.1.21/etc/runlevels/default:
total 0
lrwxrwxrwx 1 root root 23 2003-10-18 17:28 consolefont -> /etc/init.d/consolefont
lrwxrwxrwx 1 root root 19 2003-10-18 17:28 distccd -> /etc/init.d/distccd
lrwxrwxrwx 1 root root 19 2003-10-18 17:28 keymaps -> /etc/init.d/keymaps
lrwxrwxrwx 1 root root 17 2003-10-18 17:28 local -> /etc/init.d/local
lrwxrwxrwx 1 root root 16 2003-10-18 17:28 sshd -> /etc/init.d/sshd
lrwxrwxrwx 1 root root 21 2003-10-18 17:28 syslog-ng -> /etc/init.d/syslog-ng
lrwxrwxrwx 1 root root 17 2003-10-18 17:28 vixie-cron -> /etc/init.d/vixie-cron
/diskless/192.168.1.21/etc/runlevels/nonetwork:
total 0
lrwxrwxrwx 1 root root 17 2003-10-18 17:28 local -> /etc/init.d/local
/diskless/192.168.1.21/etc/runlevels/single:
total 0
|
Sekarang adalah saatnya untuk mem-boot slave anda. Berhasilkah? Selamat,
sekarang anda telah menjadi pemilik node diskless! :)
Isi dokumen ini dilisensikan dengan lisensi Creative Commons -
Attribution / Share Alike.
|