Hướng dẫn cài đặt centos 7 qua network PXE

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