光盘实现半自动化安装linux以及PXE实现自动安装

重点 实验一:使用 kickstart 半自动化安装CentOS系统

可以将定制安装光盘,并结合kickstart实现基于光盘启动的半自动化安装

实现过程

 首先下载httpd搭建个web网页
[root@centos8mini ~]# yum -y install httpd; systemctl enable --now httpd
[root@centos8mini ~]# mkdir /var/www/html/centos/8/os/x86_64/ -pv
mkdir: created directory '/var/www/html/centos'
mkdir: created directory '/var/www/html/centos/8'
mkdir: created directory '/var/www/html/centos/8/os'
mkdir: created directory '/var/www/html/centos/8/os/x86_64/'
#挂载光盘(此处是临时挂载,还是写在文件里面挂载比较好)
[root@centos8mini ~]# mount /dev/sr0 /var/www/html/centos/8/os/x86_64/
mount: /var/www/html/centos/8/os/x86_64: WARNING: device write-protected, mounted read-only.
#打开浏览器测一下看能不能访问
10.0.0.8/centos/8/os/x86_64
#建一个文件夹 起名随意
[root@centos8 ~]#mkdir –pv /data/myiso 
#把光盘里的挂载到的iso目录整个拷贝到这个文件夹下面
[root@centos8 ~]#cp -r mnt/isolinux/ /data/myiso/ 
[root@centos8 ~]#tree /data/myiso/ 
/data/myiso/ 
└── isolinux  ├── boot.cat 
  ├── boot.msg 
  ├── grub.conf 
  ├── initrd.img 
  ├── isolinux.bin 
  ├── isolinux.cfg 
  ├── ldlinux.c32 
  ├── libcom32.c32 
  ├── libutil.c32 
  ├── memtest 
  ├── splash.png 
  ├── TRANS.TBL 
  ├── vesamenu.c32 
  └── vmlinuz 
1 directory, 14 files 
 
#修改菜单文件
[root@centos8 ~]#vim /data/myiso/isolinux/isolinux.cfg 
#方法1:应答方件放在ISO菜单文件里,但是不太方便,光盘一旦写进去只读 修改不了
label linux 
 menu label ^Auto Install CentOS Linux 8 
 kernel vmlinuz 
 initrd=initrd.img text ks=cdrom:/myks.cfg 

#方法2:应答方件放在http网络服务器上,企业里面想装主机的时候把u盘或者光盘做好塞到主机上,用u盘或者光盘启动,选中这图选罢法进行安装就可以选中应答文件进行安装

 
vim /data/myiso/isolinux/isolinux.cfg 
label linux 
 menu label ^Auto Install CentOS Linux 8  
 kernel vmlinuz 
 append initrd=initrd.img quiet ks=http://10.0.0.8/ksdir/ks8.cfg
label rescue 
 menu label ^Rescue a CentOS Linux system 
 kernel vmlinuz 
 append initrd=initrd.img inst.repo=http://10.0.0.8/centos/8 rescue quiet 
label local 
 menu default 
 menu label Boot from ^local drive 
 localboot 0xffff 
#应答文件在/var/www/html/ksdir编辑
[root@centos8mini ]# cd /var/www/html/ksdir
[root@centos8mini ksdir]# ls
ks7.cfg  ks8.cfg
[root@centos8mini ksdir]# vim ks8.cfg 
ignoredisk --only-use=sda
zerombr
text
reboot
clearpart --all --initlabel
selinux --disabled
firewall --disabled
url --url=http://10.0.0.8/centos/8/os/x86_64/
keyboard --vckeymap=us --xlayouts='us'
lang en_US.UTF-8
bootloader --append="net.ifnames=0" --location=mbr --boot-drive=sda  #此行必须指定
network  --bootproto=dhcp --device=eth0 --ipv6=auto --activate
network  --hostname=centos8.magedu.org
rootpw --iscrypted
$6$j9YhzDUnQVnxaAk8$qv7rkMcPAEbV5yvwsP666DXWYadd3jYjkA9fpxAo9qYotjGGBUclCGoP1TRv
gHBpqgc5n0RypMsPTQnVDcpO01
firstboot --enable
skipx
services --disabled="chronyd"
timezone Asia/Shanghai --isUtc --nontp
user --name=wang --
password=6oUfb/02CWfLb5l8f$sgEZeR7c7DpqfpmFDH6huSmDbW1XQNR4qKl2EPns.gOXqlnAIgv9p
TogtFVaDtEpMOC.SWXKYqxfVtd9MCwxb1 --iscrypted --gecos="wang"
#autopart --type=lvm 如果启用这一项使用逻辑卷自动分区
#part / --fstype xfs --size 1 --grow --ondisk sda 启用可以实现根自动使用所有剩余空间
part / --fstype="xfs" --ondisk=sda --size=102400
part /data --fstype="xfs" --ondisk=sda --size=51200
part swap --fstype="swap" --ondisk=sda --size=2048
part /boot --fstype="ext4" --ondisk=sda --size=1024
%packages
@^minimal-environment
kexec-tools
%end
%addon com_redhat_kdump --enable --reserve-mb='auto'
%end
%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end
%post
useradd mage
echo magedu | passwd --stdin mage &> /dev/null
%end 

[root@centos8 ~]#cp /var/www/html/ksdir/ks8.cfg /data/myiso/

#通过mkisofs的工具把做好的文件夹的内容整个刻成iso文件,制作出一个/root/boot.iso文件 [root@centos8 ~]#dnf -y install mkisofs

[root@centos8 ~]#mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 8.1 x86_64 boot" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/boot.iso /data/myiso/ #刻成iso文件之后就可以刻到光盘里面找个机器使用它安装了 [root@centos8mini ~]# ll -h boot.iso -rw-r--r-- 1 root root 68M Sep 12 21:56 boot.iso [root@centos8 ~]sz boot.iso #注意:以上相对路径都是相对于光盘的根,和工作目录无关 #刻出来之后就可以找个机器安装

重点 实验八:实现pxe安装双系统centos6、centos7

1安装前准备

准备一台服务器 同时充当DHCP HTTP TFTP服务器,此处统称PXEserver

关闭防火墙和SELINUX,DHCP服务器静态IP

getenforce查看selinux是否关闭;iptables -vnL查看防火墙是否关闭

网络要求:关闭Vmware软件中的DHCP服务(取消对勾),基于NAT模式

注意:CentOS 7,8使用1G 内存会提示空间不足,建议2G

2 安装相关软件包并启动

DHCP并没有立刻启动需要进行下面配置

 
[root@centos8 ~]#dnf -y install dhcp-server tftp-server httpd syslinux-nonlinux 
[root@centos8 ~]#systemctl enable --now httpd tftp dhcpd  
[root@centos8 ~]ss -ntul查看端口 看服务是否起来,69和80端口打开,67端口没有起来
[root@centos8sl ~]# ss -ntlu
Netid          State        Recv-Q       Send-Q      Local Address:Port      Peer Address:Port           
udp            UNCONN           0         0          *:69                      *:*              
tcp            LISTEN           0        128         0.0.0.0:22                0.0.0.0:*              
tcp            LISTEN           0        128         *:80                      *:*              
tcp            LISTEN           0        128        [::]:22                    [::]:*    

3. 配置DHCP服务

 
[root@centos8 ~]#cp /usr/share/doc/dhcp-server/dhcpd.conf.example /etc/dhcp/dhcpd.conf
[root@centos8 ~]#vim /etc/dhcp/dhcpd.conf 
option domain-name "example.com";
option domain-name-servers 180.76.76.76,223.6.6.6;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
subnet 10.0.0.0 netmask 255.255.255.0 {
 range 10.0.0.100 10.0.0.200;
 option routers 10.0.0.2;
 next-server 10.0.0.8;
 filename "pxelinux.0"; 
 }
[root@centos8 ~]#systemctl restart dhcpd
[root@centos8 ~]#ss -nt 查看67端口是否打开

4 准备yum源和相关目录

配置针对三个服务对应的仓库,准备三个目录存放三个系统678各自的光盘挂载点;实验里在虚拟机里面加两个CD驱动器,使用ISO映像文件

正常生产中没有光盘,把光驱拷贝到电脑上然后挂载iso文件到目录里,没光驱就把iso文件下载下来挂载

 
#此处是参考阿里云的目录结构,具体看sr0,1,2分别对应centos几挂载
在虚拟机里增加678的光盘文件
[root@centos8 ~]#mkdir -pv /var/www/html/centos/{6,7}/os/x86_64/ 
[root@centos8 ~]#mount /dev/sr1 /var/www/html/centos/6/os/x86_64/
[root@centos8 ~]#mount /dev/sr2 /var/www/html/centos/7/os/x86_64

http服务已经启动,使用浏览器访问10.0.0.8/ccentos/6/os/x86_64点进目录看有没有东西,有说明仓库准备好了

5准备kickstart文件

准备两套系统针对的应答文件,准备一个专门的目录来存67各自的应答文件

 
 
[root@centos8 ~]#mkdir /var/www/html/ks/
#cd /var/www/html/ks也行
#编辑应答文件查看里面路径是不是指向10.0.0.8(生产中需要自己写应答文件)
[root@centos8 ~]#vim /var/www/html/ks/centos6.cfg 
install
text
reboot
url --url=http://10.0.0.8/centos/6/os/x86_64/
lang en_US.UTF-8
keyboard us
network --onboot yes --device eth0 --bootproto dhcp  --noipv6
rootpw  --iscrypted
$6$b6C5mM/BwOMBoK8H$cYZFrHoNlOL0iDsxOTRhwnWJ3yfFmf7mRJBOxEqGoI56UMrT8J7qlrGwX7tS
nOf7wKxYR2hAvAREILDgOgsFe1
firewall --disabled
authconfig --enableshadow --passalgo=sha512
selinux --disabled
timezone Asia/Shanghai
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb 
quiet"
zerombr
clearpart --all --initlabel
part /boot --fstype=ext4 --size=1024
part / --fstype=ext4 --size=50000
part /data --fstype=ext4 --size=30000
part swap --size=2048
%packages
@core
@server-policy
@workstation-policy
autofs
vim-enhanced
%end
%post
useradd wang 
echo magedu | passwd --stdin wang &> /dev/null
mkdir /etc/yum.repos.d/bak
mv /etc/yum.repos.d/* /etc/yum.repos.d/bak
cat > /etc/yum.repos.d/base.repo <<EOF
[base]
name=base
baseurl=file:///misc/cd
gpgcheck=0
EOF
%end
[root@centos8 ~]#vim /var/www/html/ks/centos7.cfg 
install
xconfig  --startxonboot
keyboard --vckeymap=us --xlayouts='us'
rootpw --iscrypted $1$bpNEv8S5$lK.CjNkf.YCpFPHskSNiN0
url --url="http://10.0.0.8/centos/7/os/x86_64"
lang en_US
auth  --useshadow  --passalgo=sha512
text
firstboot --enable
selinux --disabled
skipx
services --disabled="chronyd"
ignoredisk --only-use=sda
firewall --disabled
network  --bootproto=dhcp --device=ens33
reboot
timezone Asia/Shanghai --nontp
bootloader --append="crashkernel=auto" --location=mbr --boot-drive=sda
zerombr
clearpart --all --initlabel
autopart --type=lvm
%post
#sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
#systemctl disable firewalld 
mkdir /etc/yum.repos.d/backup
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup
cat > /etc/yum.repos.d/base.repo <<EOF
[base]
name=CentOS
baseurl=file:///misc/cd
       https://mirrors.aliyun.com/centos/\$releasever/os/\$basearch/
gpgcheck=0
[extras]
name=extras
baseurl=https://mirrors.aliyun.com/centos/\$releasever/extras/\$basearch
gpgcheck=0
enabled=1
[epel]
name=EPEL
baseurl=http://mirrors.aliyun.com/epel/\$releasever/\$basearch
gpgcheck=0
enabled=1
EOF
mkdir /root/.ssh -m 700
cat > /root/.ssh/authorized_keys <<EOF
ssh-rsa 
AAAAB3NzaC1yc2EAAAADAQABAAABgQDFyqd76ui/j6IGEsZpCAcNG4rQMexaA/OyrEKiLG56wFpf9rHU
rhp8b7mXrrFxP3r1UPZz3fZeGT8/u5Wr93IXeU9VtAzooXKS8Eh2EvKzuzGKw0t4lY9x2D7BGdl0zz35
3SdpAYqzZtuTEivq3N45zZEP7Y5r0Y5ocCVqL1sCuaHQucue9VTxOZKSs476QE91/pBaORgMf8ZQR6JJ
HvsN8eJmzqhggFqzwt9SiYg9lV+pFyWJfUVj3RYqfg4uw9lS4DUGHcvyL+97XKBSXejerDb9a8agm+ma
Bm/M/46DK6AQNR7wBRXBCoFszJFmeWK4MrXy6Ae3JrwVBGgTo1QKW77C+0luLAm6BjA1ZCgBGA2NXhNh
euYoBVCH6ZUz0eaU57MXD9fmkB+vyxuVjE4AhuR7hkyDrBkLdd2kTk1flcSo4yv0EFgrximrBLSaBfGC
JAdOXY9WrB0L6IoEega7NRrFWaXaEy/AJLOz+h6DxWFpKw7Ly1Wwk4KfHCeUn3s=
root@centos8.wangxiaochun.com
EOF
chmod 600 /root/.ssh/authorized_keys 
useradd magedu
echo 123456 | passwd --stdin m42
%end
%packages
@^minimal
vim-enhanced
wget
curl
tree
%end

6准备PXE启动相关文件

 
[root@centos8 ~]#mkdir /var/lib/tftpboot/centos{6,7}
#准备CentOS6,7,8各自的不同的启动菜单内核相关文件
[root@centos8 ~]#cp /var/www/html/centos/6/os/x86_64/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/centos6
[root@centos8 ~]#cp /var/www/html/centos/7/os/x86_64/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/centos7
#使用蓝色不花哨的菜单menu.c32,来自于syslinunx-nonlinux包
[root@centos8 ~]#cp /usr/share/syslinux/{pxelinux.0,menu.c32} /var/lib/tftpboot/ 
以下三个文件是CentOS8安装所必须文件 centos8的特殊要求,CentOS6,7则不需要
[root@centos8 ~]#cp /var/www/html/centos/8/os/x86_64/isolinux/{ldlinux.c32,libcom32.c32,libutil.c32} /var/lib/tftpboot/
#生成安装菜单文件
[root@centos8 ~]#mkdir /var/lib/tftpboot/pxelinux.cfg/
#把现有的菜单文件拷贝过去修修改改定制个菜单出来起个名字叫default
[root@centos8 ~]#cp /var/www/html/centos/8/os/x86_64/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
#最终目录结构如下,67各有各的文件夹,ldlinux下面都是共用的
[root@centos8 ~]#tree /var/lib/tftpboot
.
├── centos6
│   ├── initrd.img
│   └── vmlinuz
├── centos7
│   ├── initrd.img
│   └── vmlinuz
├── ldlinux.c32
├── libcom32.c32
├── libutil.c32
├── menu.c32
├── pxelinux.0
└── pxelinux.cfg
   └── default

7 准备启动菜单文件

定制菜单内容

 
#调用menu.c32简单风格的文件
[root@centos8 ~]#vim /var/lib/tftpboot/pxelinux.cfg/default 
default menu.c32
timeout 600 超时时间
menu title Install CentOS Linux 总菜单名称
  
label linux7
 menu label Auto Install CentOS Linux ^7 
 kernel centos7/vmlinuz
 append initrd=centos7/initrd.img ks=http://10.0.0.100/ks/centos7.cfg
  
label linux6
 menu label Auto Install CentOS Linux ^6 
 kernel centos6/vmlinuz
 append initrd=centos6/initrd.img ks=http://10.0.0.100/ks/centos6.cfg

label manual
 menu label ^Manual Install CentOS Linux 8.0 
 kernel centos8/vmlinuz
 append initrd=centos8/initrd.img 
inst.repo=http://10.0.0.100/centos/8/os/x86_64/
label rescue
 menu label ^Rescue a CentOS Linux system 8
 kernel centos8/vmlinuz
 append initrd=centos8/initrd.img 
inst.repo=http://10.0.0.100/centos/8/os/x86_64/ rescue 
  
#本地硬盘启动,  
label local
 menu default #设置为默认,如果服务器的时候不做选择会自动选择硬盘启动,避免本地服务器有数据的情况下被覆盖
 menu label Boot from ^local drive
 localboot 0xffff

8测试客户端基于PXE实现自动安装

没有挂光盘自动通过网络引导

新准备两台主机,设置网卡引导,可看到看启动菜单centos6和centos7,并实现自动安装

注意:VMware workstation 对于不同的CentOS 版本,生成的虚拟机的硬件并不兼容

安装

即可登录

posted @ 2020-09-13 19:02  肖豪  阅读(444)  评论(0编辑  收藏  举报