ติดตั้ง Fedora ผ่านเน็ตเวิร์กด้วย Cobbler

โดยทั่วไปการติดตั้งลีนุกซ์จะทำผ่านแผ่นซีดีหรือดีวีดี แต่ถ้าเป็นการติดตั้งหลายๆ เครื่อง ปริมาณมากๆ เราสามารถทำได้โดยติดตั้งผ่านเน็ตเวิร์กได้ โดยคอนฟิกเครื่องหนึ่งทำหน้าที่เป็น server แล้วให้เครื่องอื่นๆ บู๊ตผ่านเน็ตเวิร์ก (PXE Boot) มาอ่านไฟล์จากเครื่องนี้ได้ โดยไม่จำเป็นใส่แผ่นซีดีแต่ละเครื่อง

และถ้าต้องการให้คอนฟิกแต่ละเครื่องเหมือนกัน เช่นการเลือกโปรแกรมที่จะติดตั้ง การคอนฟิก timezone, keyboard สามารถใช้ kickstart เข้าช่วยได้

ในบทความนี้จะแนะนำโปรแกรม cobbler ซึ่งเป็นโปรแกรมช่วยในการคอนฟิกและสร้าง network boot server โดยจะช่วยสร้างคอนฟิกที่จำเป็นเช่น dhcp server พร้อมทั้ง image เพื่อให้เครื่องอื่นๆ มาเรียกใช้ได้

ติดตั้งโปรแกรม cobbler บน Server

เริ่มต้นต้องสร้าง server ขึ้นมาก่อน ในที่นี้จะใช้ Fedora 10 (i386) โดยตอนติดตั้ง เลือก Package Group ดังนี้

  • Base
  • Developement Libraries
  • Developement Tools
  • Editors

หลังจากติดตั้ง Fedora โปรแกรมที่ต้องติดตั้งเพิ่มเติมมีดังนี้

หมายเหตุ บางโปรแกรมไม่มีในแผ่นดีวีดี ต้องโหลดเพิ่มจาก Fedora 10 Everything

  • apr-1.3.3-1.fc10.i386.rpm
  • apr-util-1.3.4-1.fc10.i386.rpm
  • httpd-tools-2.2.10-2.i386.rpm
  • httpd-2.2.10-2.i386.rpm
  • mod_python-3.3.1-8.i386.rpm
  • xinetd-2.3.14-21.fc10.i386.rpm
  • tftp-server-0.48-6.fc10.i386.rpm
  • python-devel-2.5.2-1.fc10.i386.rpm
  • python-cheetah-2.0.1-2.fc9.i386.rpm
  • libxml2-python-2.7.2-1.fc10.i386.rpm
  • createrepo-0.9.6-3.fc10.noarch.rpm
  • mtools-3.9.11-5.fc10.i386.rpm
  • syslinux-3.61-3.fc10.i386.rpm
  • dhcp-4.0.0-30.fc10.i386.rpm
  • cobbler-1.2.8-1.fc10.noarch.rpm

คอนฟิกและรันเซอร์วิส cobblerd

เมื่อลงโปรแกรมเรียบร้อย ขั้นต่อไปต้องคอนฟิก cobbler โดยสามารถใช้คำสั่ง cobbler check ในการตรวจสอบพร้อมทั้งคำแนะนำในการแก้ไขคอนฟิกที่จำเป็นได้

ตัวอย่างการรัน cobbler check เพื่อตรวจสอบคอนฟิกที่ต้องแก้ไข

[root@image-server ~]# cobbler check
The following potential problems were detected:
#0: The 'server' field in /etc/cobbler/settings must be set to something other than localhost, or kickstarting features will not work.  This should be a resolvable hostname or IP for the boot server as reachable by all machines that will use it.
#1: For PXE to be functional, the 'next_server' field in /etc/cobbler/settings must be set to something other than 127.0.0.1, and should match the IP of the boot server on the PXE network.
#2: Must enable selinux boolean to enable Apache and web services components, run: setsebool -P httpd_can_network_connect true
#3: service cobblerd is not running
#4: service xinetd is not running
#5: change 'disable' to 'no' in /etc/xinetd.d/tftp
#6: service httpd is not running
#7: since iptables may be running, ensure 69, 80, 25150, and 25151 are unblocked
#8: One or more kickstart templates references default password 'cobbler' and should be changed for security reasons: /etc/cobbler/sample.ks, /etc/cobbler/legacy.ks, /etc/cobbler/sample_end.ks

ในส่วนแรกที่ต้องแก้ไข คือไฟล์ /etc/cobbler/settings โดยต้องเปลี่ยน server และ next_server เป็น ip address ของ server สมมติว่าเป็น 192.168.1.1 อีกส่วนที่แนะนำให้แก้ไข คือให้ cobbler จัดการ dhcp โดยเปลี่ยน manage_dhcp เป็น 1

ตัวอย่างการแก้ไขไฟล์ /etc/cobbler/settings

# this is the address of the cobbler server -- as it is used
# by systems during the install process, it must be the address
# or hostname of the system as those systems can see the server.
# if you have a server that appears differently to different subnets
# (dual homed, etc), you need to read the --server-override section
# of the manpage for how that works.
server: '192.168.1.1'
# if using cobbler with manage_dhcp, put the IP address
# of the cobbler server here so that PXE booting guests can find it
# if you do not set this correctly, this will be manifested in TFTP open timeouts.
next_server: '192.168.1.1'
# set to 1 to enable Cobbler's DHCP management features.
# the choice of DHCP management engine is in /etc/cobbler/modules.conf
manage_dhcp: 1

ใช้คำสั่ง server เพื่อรันเซอร์วิสต่างๆ ที่จำเป็นดังนี้

[root@image-server ~]# service httpd start
Starting httpd:                                            [  OK  ]

[root@image-server ~]# service xinetd start
Starting xinetd:                                           [  OK  ]

[root@image-server ~]# chkconfig tftp on

[root@image-server ~]# service cobblerd start
Starting cobbler daemon:                                   [  OK  ]

หมายเหตุ เซอร์วิส dhcpd ยังไม่ต้องรันตอนนี้

เปลี่ยน selinux policy ให้ถูกต้อง ด้วยคำสั่ง setsebool โดยคำสั่งนี้อาจใช้เวลานานพอสมควรในการรัน

[root@image-server ~]# setsebool -P httpd_can_network_connect true

เปิดพอร์ตที่ต้องใช้ของ cobbler โดยแก้ไขในไฟล์ /etc/sysconfig/iptables

ตัวอย่างการแก้ไขไฟล์ /etc/sysconfig/iptables เพื่อเปิดพอร์ตที่ต้องใช้

[root@image-server ~]# cat /etc/sysconfig/iptables
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m udp -p udp --dport 69 -j ACCEPT
-A INPUT -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m tcp -p tcp --dport 25151 -j ACCEPT
-A INPUT -m udp -p udp --dport 25150 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed

ใช้คำสั่ง service iptables เพื่อโหลด rules ใหม่ของ iptables

[root@image-server sysconfig]# service iptables restart
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
iptables: Unloading modules:                               [  OK  ]
iptables: Applying firewall rules:                         [  OK  ]

สร้าง kickstart configuration เพื่อช่วยในการติดตั้ง

เพื่อสะดวกในการติดตั้ง โดยที่ไม่ต้องมาคอนฟิกทีละเครื่อง เราสามารถใช้ kickstart เพื่อช่วยได้ดังนี้

ตัวอย่างไฟล์ kickstart

[root@image-server ~]# cat /root/fc10-i386.ks
# Kickstart file automatically generated by anaconda.
#version=DEVEL
install
url --url=http://192.168.1.1/cobbler/ks_mirror/fc10-i386
lang en_US.UTF-8
keyboard us
network --device eth0 --bootproto dhcp
rootpw  --iscrypted xxx
firewall --service=ssh
authconfig --enableshadow --passalgo=sha512
selinux --enforcing
timezone --utc Asia/Bangkok
bootloader --location=mbr --driveorder=sda --append="rhgb quiet"
# The following is the partition information you requested
# Note that any partitions you deleted are not expressed
# here so unless you clear all partitions first, this is
# not guaranteed to work
#clearpart --all --drives=sda
#part /boot --fstype ext3 --size=200 --ondisk=sda
#part pv.2 --size=0 --grow --ondisk=sda
#volgroup VolGroup00 --pesize=32768 pv.2
#logvol / --fstype ext3 --name=LogVol00 --vgname=VolGroup00 --size=1024 --grow
#logvol swap --fstype swap --name=LogVol01 --vgname=VolGroup00 --size=512 --grow --maxsize=1024
%packages
@base
@core
@development-libs
@development-tools
@editors
gnupg2
gpgme
gpm
lua
pax

%end

สร้าง image และ profile สำหรับการติดตั้ง

ใส่แผ่นดีวีดีติดตั้ง Fedora 10 แล้วใช้คำสั่ง mount ไว้ที่ /media

[root@image-server ~]# mount /dev/scd0 /media
mount: block device /dev/sr0 is write-protected, mounting read-only

[root@image-server ~]# ls /media/
GPL                            RPM-GPG-KEY-fedora-10-primary       RPM-GPG-KEY-fedora-test-i386
images                         RPM-GPG-KEY-fedora-i386             RPM-GPG-KEY-fedora-test-ia64
isolinux                       RPM-GPG-KEY-fedora-ia64             RPM-GPG-KEY-fedora-test-ppc
media.repo                     RPM-GPG-KEY-fedora-ppc              RPM-GPG-KEY-fedora-test-ppc64
Packages                       RPM-GPG-KEY-fedora-ppc64            RPM-GPG-KEY-fedora-test-primary
README-BURNING-ISOS-en_US.txt  RPM-GPG-KEY-fedora-primary          RPM-GPG-KEY-fedora-test-x86_64
repodata                       RPM-GPG-KEY-fedora-test             RPM-GPG-KEY-fedora-x86_64
RPM-GPG-KEY-fedora             RPM-GPG-KEY-fedora-test-10-primary  TRANS.TBL

ใช้คำสั่ง cobbler import เพื่อสร้าง images และ profile สำหรับ network boot

[root@image-server ~]# cobbler import --name=fc10-i386 --kickstart=/root/fc10-i386.ks --path=/media
sending incremental file list
./
.discinfo
          37 100%    0.00kB/s    0:00:00 (xfer#1, to-check=2207/2209)
.treeinfo
        1159 100%    1.11MB/s    0:00:00 (xfer#2, to-check=2206/2209)
GPL
       18363 100%    3.50MB/s    0:00:00 (xfer#3, to-check=2205/2209)
...
...
...
- url: http://@@http_server@@/cobbler/ks_mirror/config/fc10-i386-5.repo
- processing: /var/www/cobbler/ks_mirror/fc10-i386/repodata
- processing: /var/www/cobbler/ks_mirror/fc10-i386/cache
- processing: /var/www/cobbler/ks_mirror/fc10-i386/Packages
- processing: /var/www/cobbler/ks_mirror/fc10-i386/images
- processing: /var/www/cobbler/ks_mirror/fc10-i386/images/pxeboot
- processing: /var/www/cobbler/ks_mirror/fc10-i386/isolinux
---------------- (associating kickstarts)
- using kickstart file /root/fc10-net.ks
---------------- (syncing)

ตัวอย่างไฟล์ต่างๆ ที่คำสั่ง cobber import สร้างขึ้น

[root@image-server ~]# ls /var/lib/tftpboot/
elilo-3.6-ia64.efi  images  memdisk  menu.c32  pxelinux.0  pxelinux.cfg  s390x
[root@image-server ~]# ls /var/www/cobbler/ks_mirror/fc10-i386/
cache                          RPM-GPG-KEY-fedora-10-primary       RPM-GPG-KEY-fedora-test-ia64
GPL                            RPM-GPG-KEY-fedora-i386             RPM-GPG-KEY-fedora-test-ppc
images                         RPM-GPG-KEY-fedora-ia64             RPM-GPG-KEY-fedora-test-ppc64
isolinux                       RPM-GPG-KEY-fedora-ppc              RPM-GPG-KEY-fedora-test-primary
media.repo                     RPM-GPG-KEY-fedora-ppc64            RPM-GPG-KEY-fedora-test-x86_64
Packages                       RPM-GPG-KEY-fedora-primary          RPM-GPG-KEY-fedora-x86_64
README-BURNING-ISOS-en_US.txt  RPM-GPG-KEY-fedora-test             TRANS.TBL
repodata                       RPM-GPG-KEY-fedora-test-10-primary
RPM-GPG-KEY-fedora             RPM-GPG-KEY-fedora-test-i386

รันเซอร์วิส DHCP Server

จากการรันคำสั่ง cobbler import เราจะได้ไฟล์คอนฟิกของ dhcp server มาด้วย ตรวจสอบ ip address และ range ip ให้ตรงกับ server แล้วรันเซอร์วิส DHCP Server

[root@image-server ~]# cat /etc/dhcpd.conf
# ******************************************************************
# Cobbler managed dhcpd.conf file
# generated from cobbler dhcp.conf template (Sun Dec  7 20:31:48 2008)
# ******************************************************************
ddns-update-style interim;
allow booting;
allow bootp;
omapi-port 647;
ignore client-updates;
set vendorclass = option vendor-class-identifier;
subnet 192.168.1.0 netmask 255.255.255.0 {
     option routers          192.168.1.1;
     option subnet-mask      255.255.255.0;
     range dynamic-bootp     192.168.1.100 192.168.1.254;
     filename                "/pxelinux.0";
     default-lease-time      21600;
     max-lease-time          43200;
     next-server             192.168.1.1;
}

# group for Cobbler DHCP tag: default
group {
}

ใช้คำสั่ง service เพื่อรันเซอร์วิส dhcpd

[root@image-server ~]# service dhcpd start
Starting dhcpd:                                            [  OK  ]

ทดสอบติดตั้งบนเครื่องไคลเอนต์ด้วย Network boot

ต่อเครื่องไคลเอนต์ที่จะติดตั้ง เข้ากับเน็ตเวิร์ก แล้วเลือกบู๊ตแบบ Network Boot ถ้าคอนฟิกถูกต้อง หน้าจอไคลเอนต์ จะขึ้น Cobbler boot menu ตามรูป

ข้อมูลอ้างอิง

Leave a Reply

Your email address will not be published.