2018年3月21日 星期三

CentOS 7 as initramfs for PXE server

1. 安裝CentOS 7.x 在任意一台電腦 or 使用已安裝CentOS 7.x的電腦

2. 停用SELinux(做完的無碟系統仍然會是開啟SELinux的)
   • Edit /etc/sysconfig/selinux
   • Set SELINUX=disabled
   • reboot to apply the new SELinux configuration
 
3. 建立相關資料匣
   # mkdir -p /var/nodes/initramfs
   # mkdir -p /var/nodes/newroot
   # cd /var/nodes/initramfs
   # mkdir bin dev etc proc sys usr usr/bin usr/sbin
 
4. 下載busybox
   # cd /var/nodes/initramfs/bin/
   # wget https://www.busybox.net/downloads/binaries/1.21.1/busybox-x86_64
   # chmod +x busybox-x86_64
   # ln -s busybox-x86_64 sh
   # cp /etc/hosts /var/nodes/initramfs/etc/hosts --> 待確認
 
5. 建立init檔
   # vim /var/nodes/initramfs/init
   ------------------------------------------------------------
   #!/bin/sh
   echo "Welcome to the initramfs!"
   # Make all core utils reachable
   export PATH="/bin:/sbin:/usr/bin:/usr/sbin"
   # Create all busybox's symb links
   /bin/busybox-x86_64 --install -s
   # Mount /newroot in tmpfs
   mount -t tmpfs -o size=2048M tmpfs /newroot
   # Unpack the root file system
   tar -x -z -f newroot.tar.gz
   # Mount /usr read-only and /home read-write from NFS server ----> 回存到nfs server
   #mount -t nfs4 -o ro $NFS_server_IP:/usr /newroot/usr
   #mount -t nfs4 -o rw $NFS_server_IP:/home /newroot/home
   # Switch the root filesystem and start normal boot process
   exec switch_root /newroot /sbin/init
   # Drop to shell if switch_root fails
   sh
   ------------------------------------------------------------
   # chmod +x /var/nodes/initramfs/init
 
6. 透過yum安裝OS到newroot下
   # yum -y groupinstall "Minimal Install" --installroot=/var/nodes/newroot --releasever=/
   可以使用# yum groups list查詢group
 
7. 將其它所需的套件補完
   # yum -y install kernel kernel-devel ipmitool dialog --installroot=/var/nodes/newroot --releasever=/
 
8. 配置newroot OS
   # cp /etc/resolv.conf /var/nodes/newroot/etc/resolv.conf
   # vim /var/nodes/newroot/etc/fstab
     none  /tmp     tmpfs defaults 0 0
     tmpfs /dev/shm tmpfs defaults 0 0
     sysfs /sys     sysfs defaults 0 0
     proc  /proc    proc  defaults 0 0
   關閉selinux
   # vim /var/nodes/newroot/etc/selinux/config
     SELINUX=disabled
   設定hostname
   # vim /var/nodes/newroot/etc/hosts
     127.0.0.1     localhost
     192.168.0.100 nfsserver

9. 設定os root password(沒有關閉SELinux會不成功)
   # chroot /var/nodes/newroot
   # passwd root
   # exit
 
10. 壓縮newroot os (注意壓縮路徑)
   # cd /var/nodes/
   # tar -cvzf initramfs/newroot.tar.gz newroot

11. 壓縮成initramfs.cpio.gz
   # cd /var/node/initramfs
   # find . -print0 | cpio --null -ov --format=newc | gzip -9 > /var/nodes/initramfs.cpio.gz

12. 在PXE上建立資料匣
   # mkdir -p /var/lib/tftpboot/pxelinux/ramdisk
 
13. 將vmlinuz & initramfs複製到PXE server上
   # scp /var/nodes/initramfs.cpio.gz root@192.168.100.1:/var/lib/tftpboot/pxelinux/ramdisk/
   # scp /var/nodes/newroot/boot/vmlinuz-3.10.0-693.21.1.el7.x86_64 root@192.168.100.1:/var/lib/tftpboot/pxelinux/ramdisk/

14. 設定PXE file
   # vim /var/lib/tftpboot/pxelinux/pxelinux.cfg/defaults
    default menu.c32
    prompt 0
    label centos7.4 Ramdisk
    kernel /ramdisk/vmlinuz-3.10.0-693.21.1.el7.x86_64
    append initrd=/ramdisk/initramfs.cpio.gz rw ip=dhcp net.ifnames=0 selinux=0





CentOS 7 diskless boot

1. 安裝CentOS 7.x 在任意一台電腦

2. 停用SELinux(做完的無碟系統仍然會是開啟SELinux的)
   • Edit /etc/sysconfig/selinux
   • Set SELINUX=disabled
   • reboot to apply the new SELinux configuration
 
3. 設定臨時環境變數
   # export NFSROOT=/home/nfsroot
   # mkdir ${NFSROOT}
 
4. 透過yum安裝OS到nfsroot下
   # yum -y groupinstall "Server with GUI" --installroot=${NFSROOT} --releasever=/
 
5. 將其它所需的套件補完
   # yum -y install kernel nfs-utils ipmitool dialog  --installroot=${NFSROOT} --releasever=/
 
6. 配置nfsroot OS
   # cp /etc/resolv.conf ${NFSROOT}/etc/resolv.conf
   # vim ${NFSROOT}/etc/fstab
     none  /tmp     tmpfs defaults 0 0
     tmpfs /dev/shm tmpfs defaults 0 0
     sysfs /sys     sysfs defaults 0 0
     proc  /proc    proc  defaults 0 0

   關閉selinux
   # vim ${NFSROOT}/etc/selinux/config
     SELINUX=disabled

   設定hostname
   # vim ${NFSROOT}/etc/hosts
     127.0.0.1     localhost
     192.168.0.100 nfsserver

7. 設定nfsroot os root password(沒有關閉SELinux會不成功)
   # chroot ${NFSROOT}
   # passwd root
   # exit

8. 建立含有nfs的initramfs
   # vim $NFSROOT/etc/dracut.conf
   add_dracutmodules+="nfs"
   # chroot $NFSROOT
   # dracut --no-hostonly --nolvmconf -m "nfs network base" --xz /boot/initramfs.pxe-$(uname -r) $(uname -r)
   # chmod ugo+r /boot/initramfs.pxe-$(uname -r)  --> user,group,other給予讀的權限
   # exit
 
9. 將nfsroot的資料複製到nfsserver上
   # rsync -av ${NFSROOT}/ root@192.168.100.1:/home/CentOS74 --> -a 歸檔模式 -v 詳細內容
 
10. 在PXE上建立資料匣
   # mkdir -p /var/lib/tftpboot/pxelinux/nfsroot
q
11. 在PXE上建立NFS server
    # yum -y install nfs-utils
    # vim /etc/exports
  /home/CentOS74 192.168.100.*(rw,sync,no_root_squash)
    # systemctl start nfs.service

12. 複製nfsroot的vmlinux initramfs到PXE
   # scp ${NFSROOT}/boot/vmlinuz-3.10.0-693.el7.x86_64 ${NFSROOT}/boot/initramfs.pxe-3.10.0-693.el7.x86_64 root@192.168.100.1:/var/lib/tftpboot/pxelinux/nfsroot/
 
12. 設定PXE file
   # vim /var/lib/tftpboot/pxelinux/pxelinux.cfg/defaults
    default menu.c32
    prompt 0
    label centos7
    kernel vmlinuz-3.10.0-514.21.2.el7.x86_64
    append root=/dev/nfs initrd=initramfs.pxe-3.10.0-514.21.2.el7.x86_64 nfsroot=192.168.130.11:/path/to/exportdir rw panic=60 ipv6.disable=1