PXE Automatic Install OS Script

一、准备工作

  1. PXE Server
  2. pxe boot文件:
    放到pxe server tftp共享目录下
    [root@simon pxeboot]# pwd
    /tftpboot/pxeboot
    [root@simon pxeboot]# tree
    .
    ├── boot-initrd
    ├── boot-kernel
    ├── default
    └── squashfs
    [root@simon pxeboot]# cp squashfs /var/www/html/pxeboot/squashfs
    
  3. 安装系统文件tarball.tar.gz : 将系统打包或mksquashfs
    放到pxe server http共享目录下
    [root@simon centos-6u3]# pwd
    /var/www/html/images/centos-6u3#
    [root@simon centos-6u3]# ls
    tarball.tar.gz
    

二、 制作装机脚本

2.1、 系统盘分区格式化

  • Legacy

    echo "Start Legacy Parted"
    parted /dev/sda -s mklabel gpt
    parted /dev/sda -s mklabel msdos
    parted /dev/sda -s mklabel gpt
    parted /dev/sda -s mkpart primary 1049KB 2097KB
    parted /dev/sda -s mkpart primary 2MB 20.0GB
    parted /dev/sda -s mkpart primary 20.0GB 35.0GB
    parted /dev/sda -s mkpart primary 35.0GB 50.0GB
    parted /dev/sda -s mkpart primary 50.0GB 55.0GB
    parted /dev/sda -s mkpart primary 55.0GB 57.0GB
    MSize=`parted /dev/sda -s p | grep "Disk /dev/sda" | awk '{print $3}'`
    parted /dev/sda -s mkpart primary 64.0GB $MSize
    sleep 1
    clear
    parted /dev/sda -s set 1 bios_grub on
    
    parted /dev/sda -s set 2 boot
    parted /dev/sda -s p
    
    parted /dev/sda -s p | grep "boot"
    if [ $? -eq 1 ];then
            parted /dev/sda -s set 2 boot
    fi
    

    备注:

      grub配置文件路径	/boot/grub2/grub.cfg
      sda1分区大小	1024k
      sda1格式化	分区时设置bios_grub,无需格式化
      parted -s /dev/sda set 1 bios_grub on	
      sda1 : 'bios_grub', size: 1M
      sda2 : '/',         size: 20G      
      sda3 : '/var',      size: 15G      
      sda4 : '/noah',     size: 15G
      sda5 : '/matrix',   size: 5G
      sda6 : '/has',      size: 2G
      sda7 : '/tmp',      size: 7G
      sda8 : '/home',     size: 剩余全部
    
  • UEFI

    echo "Start EFI parted"
    parted /dev/sda -s mklabel gpt
    parted /dev/sda -s mklabel msdos
    parted /dev/sda -s mklabel gpt
    parted /dev/sda -s mkpart primary 1049KB 1000MB
    parted /dev/sda -s mkpart primary 1000MB 21.0GB
    parted /dev/sda -s mkpart primary 21.0GB 36.0GB
    parted /dev/sda -s mkpart primary 36.0GB 51.0GB
    parted /dev/sda -s mkpart primary 51.0GB 56.0GB
    parted /dev/sda -s mkpart primary 56.0GB 58.0GB
    parted /dev/sda -s mkpart primary 58.0GB 65.0GB
    MSize=`parted /dev/sda -s p | grep "Disk /dev/sda" | awk '{print $3}'`
    parted /dev/sda -s mkpart primary 65.0GB $MSize
    mkfs -t vfat -F 32 -n uefi-boot /dev/sda1
    sleep 2
    parted -s /dev/sda set 1 boot on
    

    备注:

      grub配置文件路径 /boot/efi/grub2/grub.cfg
      sda1分区大小 1G
      sda1格式化	正常分区,格式化时指定vfat格式
      mkfs -t vfat -F 32 -n uefi-boot "/dev/sda1"
      parted -s /dev/sda set 1 boot on
      parted -s /dev/sda set 2 msftdata on
      sda1 : 'uefi-boot',    size: 1G  
      sda2 : '/',       size: 20G
      sda3 : '/var',    size: 15G
      sda4 : '/noah',   size: 15G
      sda5 : '/matrix', size: 5G
      sda6 : '/has',    size: 2G
      sda7 : '/tmp',    size: 7G
      sda8 : '/home',   size: 剩余全部
    

汇整Legacy&UEFI分区格式化脚本如下

parted_osdisk()
{
    ipmitool chassis identify
    if [ -d /sys/firmware/efi ];then
            echo "Start EFI parted"
            parted /dev/sda -s mklabel gpt
            parted /dev/sda -s mklabel msdos
            parted /dev/sda -s mklabel gpt
            parted /dev/sda -s mkpart primary 1049KB 1000MB
            parted /dev/sda -s mkpart primary 1000MB 21.0GB
            parted /dev/sda -s mkpart primary 21.0GB 36.0GB
            parted /dev/sda -s mkpart primary 36.0GB 51.0GB
            parted /dev/sda -s mkpart primary 51.0GB 56.0GB
            parted /dev/sda -s mkpart primary 56.0GB 58.0GB
            parted /dev/sda -s mkpart primary 58.0GB 65.0GB
            MSize=`parted /dev/sda -s p | grep "Disk /dev/sda" | awk '{print $3}'`
            parted /dev/sda -s mkpart primary 65.0GB $MSize
            mkfs -t vfat -F 32 -n uefi-boot /dev/sda1
            sleep 2
            parted -s /dev/sda set 1 boot on
    else
            echo "Start Legacy Parted"
            parted /dev/sda -s mklabel gpt
            parted /dev/sda -s mklabel msdos
            parted /dev/sda -s mklabel gpt
            parted /dev/sda -s mkpart primary 1049KB 2097KB
            parted /dev/sda -s mkpart primary 2MB 20.0GB
            parted /dev/sda -s mkpart primary 20.0GB 35.0GB
            parted /dev/sda -s mkpart primary 35.0GB 50.0GB
            parted /dev/sda -s mkpart primary 50.0GB 55.0GB
            parted /dev/sda -s mkpart primary 55.0GB 57.0GB
            MSize=`parted /dev/sda -s p | grep "Disk /dev/sda" | awk '{print $3}'`
            parted /dev/sda -s mkpart primary 64.0GB $MSize
            sleep 1
            clear
            parted /dev/sda -s set 1 bios_grub on

            parted /dev/sda -s set 2 boot
            parted /dev/sda -s p

            parted /dev/sda -s p | grep "boot"
            if [ $? -eq 1 ];then
                    parted /dev/sda -s set 2 boot
            fi
    fi
}

format_osdisk()
{
    ipmitool chassis identify
    echo "start formart /dev/sda8 fs type ext4"
    mkfs.ext4 /dev/sda8
    sleep 1
    ipmitool chassis identify
    echo "start formart /dev/sda7 fs type ext2"
    mkfs.ext2 /dev/sda7
    sleep 1
    ipmitool chassis identify
    echo "start formart /dev/sda6 fs type ext2"
    mkfs.ext2 /dev/sda6
    sleep 1
    ipmitool chassis identify
    echo "start formart /dev/sda5 fs type ext2"
    mkfs.ext2 /dev/sda5
    sleep 1
    ipmitool chassis identify
    echo "start formart /dev/sda4 fs type ext2"
    mkfs.ext2 /dev/sda4
    sleep 1
    ipmitool chassis identify
    echo "start formart /dev/sda3 fs type ext2"
    mkfs.ext2 /dev/sda3
    sleep 1
    ipmitool chassis identify
    echo "start formart /dev/sda2 fs type ext2"
    mkfs.ext2 /dev/sda2
    sleep 10
}

2.2、 下载操作系统tarball.tar.gz

download_img()
{
    sip=`cat /proc/cmdline | awk -F "http://" '{print $2}' | awk -F'/' '{print $1}'`
    osname=`cat /proc/cmdline | awk -F "osname=" '{print $2}' | awk '{print $1}'`
    echo "Start Download $osname tarball from $sip"
    wget -t 3 -T 10 -O /tarball.tar.gz "http://${sip}/images/${osname}/tarball.tar.gz"
    if [ $? -ne 0 ];then
            echo -e "\033[1;31m Download $osname tarball from $sip Failed"
            exit 1
    else
            echo "\033[32m Download $osname tarball from $ip PASS"
    fi
}

2.3、 挂载系统盘,并解压tarball.tar.gz到盘内

mount_rootfs()
{
    mkdir /mnt/root
    mkdir /mnt/root/{var,noah,matrix,has,tmp,home}
    mount /dev/sda2 /mnt/root
    mount /dev/sda3 /mnt/root/var
    mount /dev/sda4 /mnt/root/noah
    mount /dev/sda5 /mnt/root/matrix
    mount /dev/sda6 /mnt/root/hax
    mount /dev/sda7 /mnt/root/tmp
    mount /dev/sda8 /mnt/root/home 
    tar zxvf  /tarball.tar.gz -C /mnt/root
}

2.4、 修改系统挂载文件fstab

mod_fstab()
{
    if [ -d /sys/firmware/efi ];then
    cat > /mnt/root/etc/fstab <<-EOF
    #
    # /etc/fstab
    # Created by curtin fast-path installer.
    #
    # Accessible filesystems, by reference, are maintained under '/dev/disk'
    # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
    #
    /dev/sda2  / ext2 defaults 0 1
    /dev/sda1               /boot/efi               vfat    umask=0077,shortname=winnt      0 0
    /dev/sda3  /var ext2 defaults 0 1
    /dev/sda4  /noah ext2 defaults 0 1
    /dev/sda5  /matrix ext2 defaults 0 1
    /dev/sda6  /has ext2 defaults 0 1
    /dev/sda7  /tmp ext2 defaults 0 1
    tmpfs                   /dev/shm                tmpfs   defaults        0 0
    devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
    sysfs                   /sys                    sysfs   defaults        0 0
    proc                    /proc                   proc    defaults        0 0
EOF
else
    cat > /mnt/root/etc/fstab <<-EOF
    #
    # /etc/fstab
    # Created by curtin fast-path installer.
    #
    # Accessible filesystems, by reference, are maintained under '/dev/disk'
    # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
    #
    tmpfs                   /dev/shm                tmpfs   defaults        0 0
    devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
    sysfs                   /sys                    sysfs   defaults        0 0
    proc                    /proc                   proc    defaults        0 0
    /dev/sda2  / ext2 defaults 0 1
    /dev/sda3  /var ext2 defaults 0 1
    /dev/sda4  /noah ext2 defaults 0 1
    /dev/sda5  /matrix ext2 defaults 0 1
    /dev/sda6  /has ext2 defaults 0 1
    /dev/sda7  /tmp ext2 defaults 0 1
EOF
fi
}

2.5、 修改网络配置文件

target-network-config()
{
    ls /etc/sysconfig/network-scripts/ifcfg-eth* >/dev/null
    if [ $? -eq 0 ]; then
        rm -v /mnt/root/etc/sysconfig/network-scripts/ifcfg-eth*
        cp -pv /etc/sysconfig/network-scripts/ifcfg-eth* /mnt/root/etc/sysconfig/network-scripts/
    else
    echo -e "DEVICE=xgbe0" > /mnt/root/etc/sysconfig/network-scripts/ifcfg-xgbe0
    echo -e "BOOTPROTO=dhcp" >> /mnt/root/etc/sysconfig/network-scripts/ifcfg-xgbe0
    echo -e "ONBOOT=yes" >> /mnt/root/etc/sysconfig/network-scripts/ifcfg-xgbe0

    echo -e "DEVICE=xgbe1" > /mnt/root/etc/sysconfig/network-scripts/ifcfg-xgbe1
    echo -e "BOOTPROTO=dhcp" >> /mnt/root/etc/sysconfig/network-scripts/ifcfg-xgbe1
    echo -e "ONBOOT=yes" >> /mnt/root/etc/sysconfig/network-scripts/ifcfg-xgbe1

    echo -e "DEVICE=xgbe2" > /mnt/root/etc/sysconfig/network-scripts/ifcfg-xgbe2
    echo -e "BOOTPROTO=dhcp" >> /mnt/root/etc/sysconfig/network-scripts/ifcfg-xgbe2
    echo -e "ONBOOT=yes" >> /mnt/root/etc/sysconfig/network-scripts/ifcfg-xgbe2

    echo -e "DEVICE=xgbe3" > /mnt/root/etc/sysconfig/network-scripts/ifcfg-xgbe3
    echo -e "BOOTPROTO=dhcp" >> /mnt/root/etc/sysconfig/network-scripts/ifcfg-xgbe3
    echo -e "ONBOOT=yes" >> /mnt/root/etc/sysconfig/network-scripts/ifcfg-xgbe3

    echo -e "DEVICE=eth0" > /mnt/root/etc/sysconfig/network-scripts/ifcfg-eth0
    echo -e "BOOTPROTO=dhcp" >> /mnt/root/etc/sysconfig/network-scripts/ifcfg-eth0
    echo -e "ONBOOT=yes" >> /mnt/root/etc/sysconfig/network-scripts/ifcfg-eth0

    echo -e "DEVICE=eth1" > /mnt/root/etc/sysconfig/network-scripts/ifcfg-eth1
    echo -e "BOOTPROTO=dhcp" >> /mnt/root/etc/sysconfig/network-scripts/ifcfg-eth1
    echo -e "ONBOOT=yes" >> /mnt/root/etc/sysconfig/network-scripts/ifcfg-eth1

    echo -e "DEVICE=eth2" > /mnt/root/etc/sysconfig/network-scripts/ifcfg-eth2
    echo -e "BOOTPROTO=dhcp" >> /mnt/root/etc/sysconfig/network-scripts/ifcfg-eth2
    echo -e "ONBOOT=yes" >> /mnt/root/etc/sysconfig/network-scripts/ifcfg-eth2

    echo -e "DEVICE=eth3" > /mnt/root/etc/sysconfig/network-scripts/ifcfg-eth3
    echo -e "BOOTPROTO=dhcp" >> /mnt/root/etc/sysconfig/network-scripts/ifcfg-eth3
    echo -e "ONBOOT=yes" >> /mnt/root/etc/sysconfig/network-scripts/ifcfg-eth3
    fi
}

2.6、 安装bootloader,更新引导grub.cfg菜单

up_grub()
{
    ROOT=/mnt/root
    mkdir $ROOT
    mount /dev/sda2 $ROOT
    test -d /sys/firmware/efi && mount /dev/sda1 $ROOT/boot/efi
    mount -o bind /dev $ROOT/dev
    mount -t devpts devpts $ROOT/dev/pts
    mount -t proc proc $ROOT/proc
    mount -t sysfs sysfs $ROOT/sys
    echo -n -e "111111\n111111\n" | chroot $ROOT passwd
    if [ -d /sys/firmware/efi ];then
            grub-install --directory=/usr/lib/grub/x86_64-efi --target=x86_64-efi --efi-directory=$ROOT/boot/efi  --boot-directory=$ROOT/boot/efi  --bootloader-id=GRUB2 --recheck /dev/sda
            rm -fr /boot
            ln -s $ROOT/boot /boot
            cp $ROOT/etc/default/grub.install /etc/default/grub
            grub-mkconfig -o $ROOT/boot/efi/grub2/grub.cfg

    else
            grub-install --root-directory=$ROOT /dev/sda
            rm -fr /boot
            ln -s $ROOT/boot /boot
            cp $ROOT/etc/default/grub.install /etc/default/grub
            grub-mkconfig -o $ROOT/boot/grub2/grub.cfg
    fi
    umount /dev/sda1
    umount $ROOT/dev/pts
    umount $ROOT/dev
    umount $ROOT/proc
    umount $ROOT/sys
    umount $ROOT
    sync
}

2.7、 完整安装脚本

完整的脚本install.sh

parted_osdisk()
{
    ipmitool chassis identify
    if [ -d /sys/firmware/efi ];then
            echo "Start EFI parted"
            parted /dev/sda -s mklabel gpt
            parted /dev/sda -s mklabel msdos
            parted /dev/sda -s mklabel gpt
            parted /dev/sda -s mkpart primary 1049KB 1000MB
            parted /dev/sda -s mkpart primary 1000MB 21.0GB
            parted /dev/sda -s mkpart primary 21.0GB 36.0GB
            parted /dev/sda -s mkpart primary 36.0GB 51.0GB
            parted /dev/sda -s mkpart primary 51.0GB 56.0GB
            parted /dev/sda -s mkpart primary 56.0GB 58.0GB
            parted /dev/sda -s mkpart primary 58.0GB 65.0GB
            MSize=`parted /dev/sda -s p | grep "Disk /dev/sda" | awk '{print $3}'`
            parted /dev/sda -s mkpart primary 65.0GB $MSize
            mkfs -t vfat32 -F 32 -n uefi-boot /dev/sda1
            sleep 2
            parted -s /dev/sda set 1 boot on
    else
            echo "Start Legacy Parted"
            parted /dev/sda -s mklabel gpt
            parted /dev/sda -s mklabel msdos
            parted /dev/sda -s mklabel gpt
            parted /dev/sda -s mkpart primary 1049KB 2097KB
            parted /dev/sda -s mkpart primary 2MB 20.0GB
            parted /dev/sda -s mkpart primary 20.0GB 35.0GB
            parted /dev/sda -s mkpart primary 35.0GB 50.0GB
            parted /dev/sda -s mkpart primary 50.0GB 55.0GB
            parted /dev/sda -s mkpart primary 55.0GB 57.0GB
            parted /dev/sda -s mkpart primary 57.0GB 64.0GB
            MSize=`parted /dev/sda -s p | grep "Disk /dev/sda" | awk '{print $3}'`
            parted /dev/sda -s mkpart primary 64.0GB $MSize
            sleep 1
            clear
            parted /dev/sda -s set 1 bios_grub on
            parted /dev/sda -s set 2 boot
            parted /dev/sda -s p
            parted /dev/sda -s p | grep "boot"
            if [ $? -eq 1 ];then
                    parted /dev/sda -s set 2 boot
            fi
    fi
}

format_osdisk()
{
    ipmitool chassis identify
    echo "start formart /dev/sda8 fs type ext4"
    mkfs.ext4 /dev/sda8
    sleep 1
    ipmitool chassis identify
    echo "start formart /dev/sda7 fs type ext2"
    mkfs.ext2 /dev/sda7
    sleep 1
    ipmitool chassis identify
    echo "start formart /dev/sda6 fs type ext2"
    mkfs.ext2 /dev/sda6
    sleep 1
    ipmitool chassis identify
    echo "start formart /dev/sda5 fs type ext2"
    mkfs.ext2 /dev/sda5
    sleep 1
    ipmitool chassis identify
    echo "start formart /dev/sda4 fs type ext2"
    mkfs.ext2 /dev/sda4
    sleep 1
    ipmitool chassis identify
    echo "start formart /dev/sda3 fs type ext2"
    mkfs.ext2 /dev/sda3
    sleep 1
    ipmitool chassis identify
    echo "start formart /dev/sda2 fs type ext2"
    mkfs.ext2 /dev/sda2
    sleep 10
}

download_img()
{
    sip=`cat /proc/cmdline | awk -F "http://" '{print $2}' | awk -F'/' '{print $1}'`
    osname=`cat /proc/cmdline | awk -F "osname=" '{print $2}' | awk '{print $1}'`
    echo "Start Download $osname tarball from $sip"
    wget -t 3 -T 10 -O /tarball.tar.gz "http://${sip}/images/${osname}/tarball.tar.gz"
    if [ $? -ne 0 ];then
            echo -e "\033[1;31m Download $osname tarball from $sip Failed"
            exit 1
    else
            echo "\033[32m Download $osname tarball from $ip PASS"
    fi
}

mount_rootfs()
{
    mkdir /mnt/root
    mkdir /mnt/root/{var,noah,matrix,has,tmp,home}
    mount /dev/sda2 /mnt/root
    mount /dev/sda3 /mnt/root/var
    mount /dev/sda4 /mnt/root/noah
    mount /dev/sda5 /mnt/root/matrix
    mount /dev/sda6 /mnt/root/hax
    mount /dev/sda7 /mnt/root/tmp
    mount /dev/sda8 /mnt/root/home 
    tar zxvf  /tarball.tar.gz -C /mnt/root
}

mod_fstab()
{
    if [ -d /sys/firmware/efi ];then
    cat > /mnt/root/etc/fstab <<-EOF
    #
    # /etc/fstab
    # Created by curtin fast-path installer.
    #
    # Accessible filesystems, by reference, are maintained under '/dev/disk'
    # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
    #
    /dev/sda2  / ext2 defaults 0 1
    /dev/sda1               /boot/efi               vfat    umask=0077,shortname=winnt      0 0
    /dev/sda3  /var ext2 defaults 0 1
    /dev/sda4  /noah ext2 defaults 0 1
    /dev/sda5  /matrix ext2 defaults 0 1
    /dev/sda6  /has ext2 defaults 0 1
    /dev/sda7  /tmp ext2 defaults 0 1
    tmpfs                   /dev/shm                tmpfs   defaults        0 0
    devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
    sysfs                   /sys                    sysfs   defaults        0 0
    proc                    /proc                   proc    defaults        0 0
EOF
else
    cat > /mnt/root/etc/fstab <<-EOF
	#
    # /etc/fstab
    # Created by curtin fast-path installer.
    #
    # Accessible filesystems, by reference, are maintained under '/dev/disk'
    # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
    #
    tmpfs                   /dev/shm                tmpfs   defaults        0 0
    devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
    sysfs                   /sys                    sysfs   defaults        0 0
    proc                    /proc                   proc    defaults        0 0
    /dev/sda2  / ext2 defaults 0 1
    /dev/sda3  /var ext2 defaults 0 1
    /dev/sda4  /noah ext2 defaults 0 1
    /dev/sda5  /matrix ext2 defaults 0 1
    /dev/sda6  /has ext2 defaults 0 1
    /dev/sda7  /tmp ext2 defaults 0 1
EOF
fi
}

target-network-config()
{
    ls /etc/sysconfig/network-scripts/ifcfg-eth* >/dev/null
    if [ $? -eq 0 ]; then
        rm -v /mnt/root/etc/sysconfig/network-scripts/ifcfg-eth*
        cp -pv /etc/sysconfig/network-scripts/ifcfg-eth* /mnt/root/etc/sysconfig/network-scripts/
    else
        echo -e "DEVICE=eth0" > /mnt/root/etc/sysconfig/network-scripts/ifcfg-eth0
        echo -e "BOOTPROTO=dhcp" >> /mnt/root/etc/sysconfig/network-scripts/ifcfg-eth0
        echo -e "ONBOOT=yes" >> /mnt/root/etc/sysconfig/network-scripts/ifcfg-eth0

        echo -e "DEVICE=eth1" > /mnt/root/etc/sysconfig/network-scripts/ifcfg-eth1
        echo -e "BOOTPROTO=dhcp" >> /mnt/root/etc/sysconfig/network-scripts/ifcfg-eth1
        echo -e "ONBOOT=yes" >> /mnt/root/etc/sysconfig/network-scripts/ifcfg-eth1

        echo -e "DEVICE=eth2" > /mnt/root/etc/sysconfig/network-scripts/ifcfg-eth2
        echo -e "BOOTPROTO=dhcp" >> /mnt/root/etc/sysconfig/network-scripts/ifcfg-eth2
        echo -e "ONBOOT=yes" >> /mnt/root/etc/sysconfig/network-scripts/ifcfg-eth2

        echo -e "DEVICE=eth3" > /mnt/root/etc/sysconfig/network-scripts/ifcfg-eth3
        echo -e "BOOTPROTO=dhcp" >> /mnt/root/etc/sysconfig/network-scripts/ifcfg-eth3
        echo -e "ONBOOT=yes" >> /mnt/root/etc/sysconfig/network-scripts/ifcfg-eth3
    fi
}

up_grub()
{
    ROOT=/mnt/root
    mkdir $ROOT
    mount /dev/sda2 $ROOT
    test -d /sys/firmware/efi && mount /dev/sda1 $ROOT/boot/efi
    mount -o bind /dev $ROOT/dev
    mount -t devpts devpts $ROOT/dev/pts
    mount -t proc proc $ROOT/proc
    mount -t sysfs sysfs $ROOT/sys
    echo -n -e "111111\n111111\n" | chroot $ROOT passwd
    if [ -d /sys/firmware/efi ];then
            grub-install --directory=/usr/lib/grub/x86_64-efi --target=x86_64-efi --efi-directory=$ROOT/boot/efi  --boot-directory=$ROOT/boot/efi  --bootloader-id=GRUB2 --recheck /dev/sda
            rm -fr /boot
            ln -s $ROOT/boot /boot
            cp $ROOT/etc/default/grub.install /etc/default/grub
            grub-mkconfig -o $ROOT/boot/efi/grub2/grub.cfg

    else
            grub-install --root-directory=$ROOT /dev/sda
            rm -fr /boot
            ln -s $ROOT/boot /boot
            cp $ROOT/etc/default/grub.install /etc/default/grub
            grub-mkconfig -o $ROOT/boot/grub2/grub.cfg
    fi
    umount /dev/sda1
    umount $ROOT/dev/pts
    umount $ROOT/dev
    umount $ROOT/proc
    umount $ROOT/sys
    umount $ROOT
    sync
}

main()
{
    parted_osdisk
    format_osdisk
    download_img
    mount_rootfs
    mod_fstab
    target-network-config
    up_grub
    sleep 5
    reboot -f
}
main

三、 解压并修改squashfs

3.1 解压squashfs

cd /var/www/html/pxeboot
unsquashfs squashfs

3.2 在squashfs-root/opt放入装机脚本,并重命名为start

cd /var/www/html/pxeboot/squashfs-root
mv /root/install.sh ./opt/start

3.3 修改rc.local, 添加自动执行装机

cd /var/www/html/squashfs-root
vim etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

nohup bash -x /opt/start 2>&1 >> /tmp/osstart.log 2>&1 &
exit 0
~

3.4 重新打包squashfs-root

cd /var/www/html/pxeboot
mksquashfs squashfs-root/ squashfs-new

四、添加pxe引导菜单

Legacy
在pxe/tftpboot/pxelinux.cfg/default文件中添加如下内容

label CentOS-6u3
    kernel /pxeboot/boot-kernel
    append initrd=/pxeboot/boot-initrd root=squash:http://http地址/pxeboot/squashfs-new ro osname=centos-6u3 ip=dhcp ip6=off overlayroot=tmpfs overlayroot_cfgdisk=disabled apparmor=0 net.ifnames=0 biosdevname=0 blacklist=isci

UEFI
在/tftpboot/uefi/grub.cfg中添加

submenu 'CentOS Install under UEFI mode' {
menuentry '01 Install Centos 6U3 OS under UEFI mode' --class fedora --class gnu-linux --class gnu --class os{
    set background_color=black
    linuxefi   /pxeboot/boot-kernel   root=squash:http://http地址/pxeboot/squashfs-new ro ip=dhcp i
p6=off overlayroot=tmpfs osname=centos-6u3 overlayroot_cfgdisk=disabled apparmor=0 net.ifnames=0 biosdevname=0 blacklist=isci
,megaraid_sas,mpt3sas
    initrdefi   /pxeboot/boot-initrd
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值