好文收藏

kickstart文件实现基于ISO文件的Linux半自动化安装

2020-12-31  本文已影响0人  念念OPS

1.实现在主机以光盘启动并在 boot: 字符界面填写 kickstart 文件后即可自动化安装并启动,自动配置 aliyun 的 yum 源,自动配置密钥连接

实验思路:
1.在centos7使用system-config-kickstart工具生成centos7.cfg文件 也就是定制自动安装系统需要的 ks 文件
2.在centos8的http目录下 挂载centos7 iso镜像,生成网络源,当然你用阿里的也可以
3.启动系统选择光盘引导在 anaconda 的菜单界面按下 ESC 进入 boot: 字符界面并定义 linux ks=http://10.0.0.8/ks/ks7.cfg 文件定义

centos7 10.0.0.7上操作
首先,下载system-config-kickstart并启动

yum -y install system-config-kickstart

启动system-config-kickstart
mac笔记本 没有xshell 具体操作请看我的上篇文章
mac os下使用X11访问远程Unix/Linux 主机图形界面

下面是启动之后的操作


image.png
image.png image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png

生成了centos7.cfg文件,我把它保存在了centos7的/root/下 命名centos7.cfg

root@7  ~]# sed -r '/^(#|$)/d' centos7.cfg
install
keyboard 'us'
rootpw --iscrypted $1$vRYsQJrK$Hc0vDoh5KDiGFb0FcbusO/
lang en_US
auth  --useshadow  --passalgo=sha512
text
firstboot --disable
selinux --disabled
firewall --disabled
network  --bootproto=dhcp --device=eth0
reboot
timezone Asia/Shanghai
url --url="http://10.0.0.8/centos/7/os/x86_64/"
bootloader --append="net.ifnames=0" --location=none
zerombr
clearpart --all --initlabel
part /boot --fstype="ext4" --size=1024
part / --fstype="xfs" --size=100000
part swap --fstype="swap" --size=2048
%post
mkdir /root/.ssh -m 700
cat >>authorized_keys<<EOF
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDNmdSu8Kl+hISOESS3atpaAMFmMieLziavBYHVHvwseTX54mvSgBneEHAkgDvOZkze00g27h/4LxSbpbwwALI/aqNLc9uMe6NjzFVwOouL+sO5AaBQz9tItAwkMxe8vqPzMmUoUu4lABvw/JLL3wGKVr4VOzQjXux+/ywWiNmfnVVJk+cjwy+0igFUM1kCv5egX4XcPXSF51ZpeKOPQzwfavNwNQENF0UoglYjd+9OSawrSV7LLFGKK3FiAcgCQtYPgSZH8oFD0XyPWilnFhwrUnxUY0UOFdF2/GuAGRRBuazMoO+fW1jcfg72NSZtIRjPoQLGV+ajmDuIifIBJGWW5D04jsb9Mgkl7H7lB0RxgHnW0QRgYh0O66yay0v4CNY4oE44ixp8W/Oz0oRM00sxGJmtT53DQcnaM5YV+otA+ju9w0LvNYxPU0E7GLAohRH1hDXh4a+qlGmlCEU73rF1fgwze+ZFtSfAM+JH8GPBOUP4S0MT4IYxJMCcXPWH/zk= wangxw@bogon
EOF
cat > /etc/yum.repo/CentOS-Base.repo <<EOF
[base]
name=CentOS-$releasever - Base - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
        http://mirrors.aliyuncs.com/centos/$releasever/os/$basearch/
        http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

[updates]
name=CentOS-$releasever - Updates - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
        http://mirrors.aliyuncs.com/centos/$releasever/updates/$basearch/
        http://mirrors.cloud.aliyuncs.com/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

[extras]
name=CentOS-$releasever - Extras - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
        http://mirrors.aliyuncs.com/centos/$releasever/extras/$basearch/
        http://mirrors.cloud.aliyuncs.com/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

[centosplus]
name=CentOS-$releasever - Plus - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/centosplus/$basearch/
        http://mirrors.aliyuncs.com/centos/$releasever/centosplus/$basearch/
        http://mirrors.cloud.aliyuncs.com/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

[contrib]
name=CentOS-$releasever - Contrib - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/contrib/$basearch/
        http://mirrors.aliyuncs.com/centos/$releasever/contrib/$basearch/
        http://mirrors.cloud.aliyuncs.com/centos/$releasever/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
EOF

useradd wang
echo "123456"| passwd --stdin wang

%end
%packages
vim
tree
curl
wget
@development
%end

centos8准备环境

yum -y install httpd
root@8  ~]# mkdir /var/www/html/ksdir
root@8  ~]# mkdir -p /var/www/html/centos/{7..8}/os/x86_64
root@8  /]# mount /dev/sr1 /var/www/html/centos/7/os/x86_64/
mount: /var/www/html/centos/7/os/x86_64: WARNING: device write-protected, mounted read-only.
root@8  /]# 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.
root@8  /]#
root@8  ~]# systemctl enable --now httpd

将做好的centos7.cfg传给centos8,centos8作为http服务器提供kickstart文件

root@7  ~]# scp /root/centos7.cfg root@10.0.0.8:/var/www/html/ksdir
centos7.cfg                                                                                  100% 3655     4.2MB/s   00:00

本地主机访问http://10.0.0.8/ksdir/centos7.cfg的 证明应答文件可以正常访问

设置新的虚拟机,镜像用centos7的iso文件,硬盘设置200G,SATA盘,内存稍微大点1.5G,从光盘启动。

启动系统选择光盘引导在 anaconda 的菜单界面按下 ESC 进入 boot: 字符界面 定义自己想要的内核参数
boot: linux ks=http://10.0.0.8/ksdir/centos7.cfg

即从标签linux启动 内核参数是ks 从网络http下载

image.png

2.通过 mkiso 刻录光盘,可以实现将光盘挂载后无人监守即可自动安装

实验思路

  1. 创建存放镜像和启动文件的目录,并复制内容到目录下
  2. 编辑 isolinux.cfg 文件
  3. 刻录光盘并挂载光盘

centos8 httpserver操作

yum -y install httpd

#创建软件源目录
mkdir -p /var/www/html/centos/{7,8}/os/x86_64/
#创建kickstart目录
mkdir  /var/www/html/ksdir/

mkdir /mnt/centos{7,8}
mount /dev/sr0 /mnt/centos8/
mount /dev/sr1 /mnt/centos7/

mount /dev/sr0 /var/www/html/centos/8/os/x86_64/
mount /dev/sr1 /var/www/html/centos/7/os/x86_64/

systemctl enable --now httpd

#本地创建isolinux目录 准备从这里修改isolinux.cfg并使用mkiso命令创建iso文件
mkdir -p /data/myiso/{7,8}/

cp -r /mnt/centos8/isolinux/ /data/myiso/8/
cp -r /mnt/centos7/isolinux/ /data/myiso/7/

root@8  isolinux]# tree /data/myiso/
/data/myiso/
├── 7
│   └── isolinux
│       ├── boot.cat
│       ├── boot.msg
│       ├── grub.conf
│       ├── initrd.img
│       ├── isolinux.bin
│       ├── isolinux.cfg
│       ├── memtest
│       ├── splash.png
│       ├── TRANS.TBL
│       ├── vesamenu.c32
│       └── vmlinuz
└── 8
    └── 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
#编辑/data/myiso/8/isolinux的isolinux.cfg文件 设置启动菜单
cd /data/myiso/8/isolinux

root@8  isolinux]# cat isolinux.cfg |grep -vE '^(#|$)'
default vesamenu.c32
timeout 600
display boot.msg
menu clear
menu background splash.png
menu title CentOS Linux 8
menu vshift 8
menu rows 18
menu margin 8
menu helpmsgrow 15
menu tabmsgrow 13
menu color border * #00000000 #00000000 none
menu color sel 0 #ffffffff #00000000 none
menu color title 0 #ff7ba3d0 #00000000 none
menu color tabmsg 0 #ff3a6496 #00000000 none
menu color unsel 0 #84b8ffff #00000000 none
menu color hotsel 0 #84b8ffff #00000000 none
menu color hotkey 0 #ffffffff #00000000 none
menu color help 0 #ffffffff #00000000 none
menu color scrollbar 0 #ffffffff #ff355594 none
menu color timeout 0 #ffffffff #00000000 none
menu color timeout_msg 0 #ffffffff #00000000 none
menu color cmdmark 0 #84b8ffff #00000000 none
menu color cmdline 0 #ffffffff #00000000 none
menu tabmsg Press Tab for full configuration options on menu items.
menu separator # insert an empty line
menu separator # insert an empty line
label linux
  menu label ^Auto Install CentOS Linux 8
  kernel vmlinuz
  append initrd=initrd.img quiet ks=http://10.0.0.8/ksdir/centos8.cfg
label rescue
  menu indent count 5
  menu label ^Rescue a CentOS Linux system
  kernel vmlinuz
  append initrd=initrd.img inst.repo=http://10.0.0.8/centos/8/os/x86_64/ rescue quiet
label local
  menu default
  menu label Boot from ^local drive
  localboot 0xffff
menu end

#编辑/var/www/html/ksdir/centos8.cfg
cd /var/www/html/ksdir
ksdir]# sed -r '/^#/d' centos8.cfg
text
reboot
zerombr
ignoredisk --only-use=sda
clearpart --all --initlabel
selinux --disabled
firewall --disabled
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
url --url=http://10.0.0.8/centos/8/os/x86_64/
rootpw --plaintext 123456
firstboot --enable
skipx
services --disabled="chronyd"
timezone Asia/Shanghai --isUtc --nontp
part /data --fstype="xfs" --ondisk=sda --size=51200
part / --fstype="xfs" --ondisk=sda --size=102400
part /boot --fstype="ext4" --ondisk=sda --size=1024
part swap --fstype="swap" --ondisk=sda --size=2048

%packages
@^minimal-environment
kexec-tools
wget
vim
curl
tree
%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 wang
echo "123456"|passwd --stdin wang &>/dev/null
mkdir /root/.ssh -m 700
cat >> /root/.ssh/authorized_keys <<EOF
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDNmdSu8Kl+hISOESS3atpaAMFmMieLziavBYHVHvwseTX54mvSgBneEHAkgDvOZkze00g27h/4LxSbpbwwALI/aqNLc9uMe6NjzFVwOouL+sO5AaBQz9tItAwkMxe8vqPzMmUoUu4lABvw/JLL3wGKVr4VOzQjXux+/ywWiNmfnVVJk+cjwy+0igFUM1kCv5egX4XcPXSF51ZpeKOPQzwfavNwNQENF0UoglYjd+9OSawrSV7LLFGKK3FiAcgCQtYPgSZH8oFD0XyPWilnFhwrUnxUY0UOFdF2/GuAGRRBuazMoO+fW1jcfg72NSZtIRjPoQLGV+ajmDuIifIBJGWW5D04jsb9Mgkl7H7lB0RxgHnW0QRgYh0O66yay0v4CNY4oE44ixp8W/Oz0oRM00sxGJmtT53DQcnaM5YV+otA+ju9w0LvNYxPU0E7GLAohRH1hDXh4a+qlGmlCEU73rF1fgwze+ZFtSfAM+JH8GPBOUP4S0MT4IYxJMCcXPWH/zk= wangxw@bogon
EOF
chmod 700 /root/.ssh/authorized_keys

mkdir /etc/yum.repos.d/backup`date +%F`
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup`date +%F`

cat > /etc/yum.repos.d/base.repo <<-EOF
[centos8base]
name=centos8base
baseurl=https://mirrors.aliyun.com/centos/\$releasever/BaseOS/\$basearch/os/
gpgcheck=0
enable=1

[centos8extra]
name=centos8extra
baseurl=https://mirrors.aliyun.com/centos/\$releasever/extras/\$basearch/os/
gpgcheck=0
enable=0

[centos8epel]
name=centos8epel
baseurl=https://mirrors.aliyun.com/epel/\$releasever/Everything/\$basearch/
gpgcheck=0
enable=1
EOF

%end

做iso文件

yum -y install mkisofs
mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 8.0 x86_64 boot" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/centos8boot.iso /data/myiso/8

root@8  ~]# ll -h /root
total 72M
-rw-r--r--. 1 root root  16K Dec  4 19:59 access_log
-rw-------. 1 root root 1.6K Oct  7 12:04 anaconda-ks.cfg
-rw-r--r--  1 root root  72M Dec 31 13:10 centos8boot.iso

#将centos8boot.iso传送到桌面 作为光盘创建虚拟机


image.png
image.png

验证公钥推送是否成功


image.png

centos7同理
centos7 kickstart文件

ksdir]# sed -r '/^#/d' centos7.cfg
install
keyboard 'us'
rootpw --plaintext 123456
lang en_US
auth  --useshadow  --passalgo=sha512
text
firstboot --enable
selinux --disabled


firewall --disabled
network  --bootproto=dhcp --device=eth0
reboot
timezone Asia/Shanghai
url --url="http://10.0.0.8/centos/7/os/x86_64/"
bootloader --append="net.ifnames=0" --location=mbr
zerombr
clearpart --all --initlabel
part /boot --fstype="ext4" --size=1024
part / --fstype="xfs" --size=100000
part swap --fstype="swap" --size=2048


%post
mkdir /root/.ssh -m 700
cat >>/root/.ssh/authorized_keys<<EOF
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDNmdSu8Kl+hISOESS3atpaAMFmMieLziavBYHVHvwseTX54mvSgBneEHAkgDvOZkze00g27h/4LxSbpbwwALI/aqNLc9uMe6NjzFVwOouL+sO5AaBQz9tItAwkMxe8vqPzMmUoUu4lABvw/JLL3wGKVr4VOzQjXux+/ywWiNmfnVVJk+cjwy+0igFUM1kCv5egX4XcPXSF51ZpeKOPQzwfavNwNQENF0UoglYjd+9OSawrSV7LLFGKK3FiAcgCQtYPgSZH8oFD0XyPWilnFhwrUnxUY0UOFdF2/GuAGRRBuazMoO+fW1jcfg72NSZtIRjPoQLGV+ajmDuIifIBJGWW5D04jsb9Mgkl7H7lB0RxgHnW0QRgYh0O66yay0v4CNY4oE44ixp8W/Oz0oRM00sxGJmtT53DQcnaM5YV+otA+ju9w0LvNYxPU0E7GLAohRH1hDXh4a+qlGmlCEU73rF1fgwze+ZFtSfAM+JH8GPBOUP4S0MT4IYxJMCcXPWH/zk= wangxw@bogon
EOF
useradd wang
echo "123456"|passwd --stdin wang

mkdir /etc/yum.repos.d/backup`date +%F`
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup`date +%F`

cat > /etc/yum.repos.d/base.repo <<-EOF
[centos8base]
name=centos8base
baseurl=https://mirrors.aliyun.com/centos/\$releasever/BaseOS/\$basearch/os/
gpgcheck=0
enable=1

[centos8extra]
name=centos8extra
baseurl=https://mirrors.aliyun.com/centos/\$releasever/extras/\$basearch/os/
gpgcheck=0
enable=0

[centos8epel]
name=centos8epel
baseurl=https://mirrors.aliyun.com/epel/\$releasever/Everything/\$basearch/
gpgcheck=0
enable=1
EOF

%end

%packages
@^minimal
%end

centos7的内核菜单文件

isolinux]# sed -r '/^#/d' isolinux.cfg
default vesamenu.c32
timeout 600

display boot.msg

menu clear
menu background splash.png
menu title CentOS 7
menu vshift 8
menu rows 18
menu margin 8
menu helpmsgrow 15
menu tabmsgrow 13

menu color border * #00000000 #00000000 none

menu color sel 0 #ffffffff #00000000 none

menu color title 0 #ff7ba3d0 #00000000 none

menu color tabmsg 0 #ff3a6496 #00000000 none

menu color unsel 0 #84b8ffff #00000000 none

menu color hotsel 0 #84b8ffff #00000000 none

menu color hotkey 0 #ffffffff #00000000 none

menu color help 0 #ffffffff #00000000 none

menu color scrollbar 0 #ffffffff #ff355594 none

menu color timeout 0 #ffffffff #00000000 none
menu color timeout_msg 0 #ffffffff #00000000 none

menu color cmdmark 0 #84b8ffff #00000000 none
menu color cmdline 0 #ffffffff #00000000 none


menu tabmsg Press Tab for full configuration options on menu items.

menu separator # insert an empty line
menu separator # insert an empty line

label linux
  menu label ^Install CentOS 7
  kernel vmlinuz
  append initrd=initrd.img quiet ks=http://10.0.0.8/ksdir/centos7.cfg

label rescue
  kernel vmlinuz
  append initrd=initrd.img rescue quiet inst.repo=http://10.0.0.8/centos/7/os/x86_64/

label local
  menu default
  menu label Boot from ^local drive
  localboot 0xffff

menu end

制作ISO

mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 8.0 x86_64 boot" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/centos7boot.iso /data/myiso/7
上一篇下一篇

猜你喜欢

热点阅读