PXE (Preboot eXecution Environment) Server cho phép cài đặt OS qua network, có thể thiết lập tự động chọn các cấu hình ban đầu khi cài đặt OS. Lợi ích chính của việc này đó là chúng ta có thể cài đặt server 1 lần, sau đó sử dụng để cài đặt một cách tự động cho hàng chục, thậm chí hàng trăm máy khác nhau mà không cần phải mất công burn file ISO sang USB hay DVD như trước đây.
Trong bài viết dưới đây chúng ta sẽ cài đặt 1 PXE server, phục vụ cài centos 7 cho máy khác.
Chi tiết:
- Server IP = 192.168.150.11
- Host name = pxe.example.com
- OS = CentOS 7.x
- SELinux = enabled
- Firewall = disabled
Step:1 Cài đặt các gói cần thiết cho PXE
Các gói cần thiết: “dhcp, tftp-server, ftp server(vsftpd), xinted”.
[root@pxe ~]# yum install dhcp tftp tftp-server syslinux vsftpd xinetd vim -y
Step:2 Cấu hình DHCP
Sau khi cài đặt gói dhcp ở trên, chúng ta tạo file cấu hình cho nó có nội dung dưới đây, các bạn có thể thay thế IP tương ứng vủa nhà mình vào.
[root@pxe ~]# vi /etc/dhcp/dhcpd.conf # DHCP Server Configuration file. ddns-update-style interim; ignore client-updates; authoritative; allow booting; allow bootp; allow unknown-clients; # internal subnet for my DHCP Server subnet 192.168.150.0 netmask 255.255.255.0 { range 192.168.150.21 192.168.150.151; option domain-name-servers 192.168.150.11; option domain-name "pxe.example.com"; option routers 192.168.150.11; option broadcast-address 192.168.150.255; default-lease-time 600; max-lease-time 7200; # IP of PXE Server next-server 192.168.150.11; filename "pxelinux.0"; }
Step:3 Cấu hình tftp server (/etc/xinetd.d/tftp)
TFTP (Trivial File Transfer Protocol ) is được sử dụng để tranfer file qua network mà không cần xác thực. Với PXE server, tftp được sử dụng cho bootstrap loading. Để cấu hình tftp server, sửa file ‘ /etc/xinetd.d/tftp’, thay đổi thông số ‘disable = yes‘ -> ‘disable = no’ và để nguyên đám còn lại mặc định, nội dung của nó sẽ tương tự như sau:
[root@pxe ~]# vi /etc/xinetd.d/tftp service tftp { socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /var/lib/tftpboot disable = no per_source = 11 cps = 100 2 flags = IPv4 }
Toàn bộ các file phục vụ cho việc boot qua network được đặt trong thư mục tftp root “/var/lib/tftpboot”
Chạy các câu lênh sau để chép các file cần thiết vào ‘/var/lib/tftpboot/’
[root@pxe ~]# cp -v /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot [root@pxe ~]# cp -v /usr/share/syslinux/menu.c32 /var/lib/tftpboot [root@pxe ~]# cp -v /usr/share/syslinux/memdisk /var/lib/tftpboot [root@pxe ~]# cp -v /usr/share/syslinux/mboot.c32 /var/lib/tftpboot [root@pxe ~]# cp -v /usr/share/syslinux/chain.c32 /var/lib/tftpboot [root@pxe ~]# [root@pxe ~]# mkdir /var/lib/tftpboot/pxelinux.cfg [root@pxe ~]# mkdir /var/lib/tftpboot/networkboot root@pxe ~]#
Step:4 Mount ISO Centos 7 và copy tới thực mụcftp
Download file iso trên mạng, mount vào và copy cả folder vào thư mục sau ‘/var/ftp/pub’
[root@pxe ~]# mount -o loop CentOS-7-x86_64-DVD-1511.iso /mnt/ mount: /dev/loop0 is write-protected, mounting read-only [root@pxe ~]# cd /mnt/ [root@pxe mnt]# cp -av * /var/ftp/pub/
Copy Kernel file (vmlimz) và initrd file từ thư mục đã mount ở trên vào thư mục ‘/var/lib/tftpboot/networkboot/’
[root@pxe ~]# cp /mnt/images/pxeboot/vmlinuz /var/lib/tftpboot/networkboot/ [root@pxe ~]# cp /mnt/images/pxeboot/initrd.img /var/lib/tftpboot/networkboot/ [root@pxe ~]#
Step:5 Create kickStart & PXE menu file.
Tạo 1 password được mã hoá, sẽ sử dụng sau này bằng lệnh dưới, thay cái 123@123a bằng pass của mình. Xong copy output lại, có việc cần tới.
[root@pxe ~]# openssl passwd -1 123@123a $1$qwUUn.B3$Da8qxnXqxwh6zwBWrnE7/. [root@pxe ~]#
Default kickstart file được đặt tại /root với tên ‘anaconda-ks.cfg’. chúng ta sẽ tạo file kickstart mới tại /var/ftp/pub với tên ‘centos7.cfg’
Copy nội dung dưới ném vào file /var/ftp/pub/centos7.cfg
Thay thế cấu hình dòng rootpw –iscrypted bằng chuỗi pass mã hoá đã thực hiện ở trên.
[root@pxe ~]# vi /var/ftp/pub/centos7.cfg #platform=x86, AMD64, or Intel EM64T #version=DEVEL # Firewall configuration firewall --disabled # Install OS instead of upgrade install # Use FTP installation media url --url="ftp://192.168.150.11/pub/" # Root password rootpw --iscrypted $1$e2wrcGGX$tZPQKPsXVhNmbiGg53MN41 # System authorization information auth useshadow passalgo=sha512 # Use graphical install graphical firstboot disable # System keyboard keyboard us # System language lang en_US # SELinux configuration selinux disabled # Installation logging level logging level=info # System timezone timezone Europe/Amsterdam # System bootloader configuration bootloader location=mbr clearpart --all --initlabel part swap --asprimary --fstype="swap" --size=1024 part /boot --fstype xfs --size=300 part pv.01 --size=1 --grow volgroup root_vg01 pv.01 logvol / --fstype xfs --name=lv_01 --vgname=root_vg01 --size=1 --grow %packages @^minimal @core %end %addon com_redhat_kdump --disable --reserve-mb='auto' %end
Tạo PXE menu file (/var/lib/tftpboot/pxelinux.cfg/default), Copy nội dung bên dưới bỏ vào
[root@pxe ~]# vi /var/lib/tftpboot/pxelinux.cfg/default
[root@pxe ~]# vi /var/lib/tftpboot/pxelinux.cfg/default default menu.c32 prompt 0 timeout 30 MENU TITLE LinuxTechi.com PXE Menu LABEL centos7_x64 MENU LABEL CentOS 7_X64 KERNEL /networkboot/vmlinuz APPEND initrd=/networkboot/initrd.img inst.repo=ftp://192.168.150.11/pub ks=ftp://192.168.150.11/pub/centos7.cfg
Step:6 Bật các dịch vụ
Sử dụng các lệnh dưới đây
[root@pxe ~]# systemctl start xinetd [root@pxe ~]# systemctl enable xinetd [root@pxe ~]# systemctl start dhcpd.service [root@pxe ~]# systemctl enable dhcpd.service Created symlink from /etc/systemd/system/multi-user.target.wants/dhcpd.service to /usr/lib/systemd/system/dhcpd.service. [root@pxe ~]# [root@pxe ~]# systemctl start vsftpd [root@pxe ~]# systemctl enable vsftpd Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service. [root@pxe ~]#
[root@pxe ~]# setsebool -P allow_ftpd_full_access 1 [root@pxe ~]#
Mở port cho firewall
[root@pxe ~]# firewall-cmd --add-service=ftp --permanent success [root@pxe ~]# firewall-cmd --add-service=dhcp --permanent success [root@pxe ~]# firewall-cmd --add-port=69/tcp --permanent success [root@pxe ~]# firewall-cmd --add-port=69/udp --permanent success [root@pxe ~]# firewall-cmd --add-port=4011/udp --permanent success [root@pxe ~]# firewall-cmd --reload success [root@pxe ~]#
Nếu lười quá, thì cứ stop firewall lại là xong, cho đỡ rách việc
systemctl disable –now firewalld
Step:7 Boot the clients with pxe boot option.
Dưới đây là video hướng dẫn thực hiện