Gentoo Logo

Diskless Nodes dengan Gentoo

Daftar Isi:

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


Jika anda menginginkan akses internet lewat node master anda dan/atau
memiliki sebuah firewall yang aman, pastikan agar anda menambahkan dukungan
untuk iptables

  [*] 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
(Pastikan agar /boot telah di-mount sebelum menyalinnya)
# 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

# opsi-opsi global di sini
ddns-update-style none;
shared-network LOCAL-NET {
# opsi-opsi shared network di sini
subnet 192.168.1.0 netmask 255.255.255.0 {
    # opsi-opsi subnet network di sini
    host slave{
        # opsi-opsi khusus host di sini
    }
    group {
        # opsi-opsi khusus grup di sini
    }
}
}

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"
# masukkan opsi-opsi lain yang diperlukan

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 di depan berarti Ethernet, byte selanjutnya sesuai dengan alamat MAC slave)
01-00-40-63-c2-ca-c9

(IP dalam hexadecimal)
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 client_ip and server_ip

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

# satu baris seperti ini untuk setiap slave
/diskless/192.168.1.21   192.168.1.21(sync,rw,no_root_squash,no_all_squash)
# untuk semua slave
/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)
# jika anda ingin memiliki log gabungan
/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

# entri-entri ini wajib
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
# useful but superfluous
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

(Tambahkan baris ini)
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! :)



Print

Diperbarui 5 Maret 2007

Versi asli dari dokumen ini terakhir diupdate 30 Oktober 2011

Rangkuman: HOWTO akan membantu anda untuk mensetup diskless nodes dengan Gentoo Linux

Michael Andrews
Researcher

Kristian Jerpetjoen
Editor

Sven Vermeulen
Reviewer

Xavier Neys
Reviewer

Dzikri Aziz
Translator

Donate to support our development efforts.

Copyright 2001-2012 Gentoo Foundation, Inc. Questions, Comments? Contact us.