美文网首页好文收藏
kickstart文件实现基于ISO文件的Linux半自动化安装

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

作者: 念念OPS | 来源:发表于2020-12-31 14:26 被阅读0次

    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
    

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/kmokoktx.html