企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[TOC] ### 总体流程 > 复制官方ISO -> 集成rpm -> 编写ks.cfg文件 -> 加入自定义业务部署脚本 -> ISO封装 -> 写入U盘 ### 使用到的工具 `yum -y install anaconda createrepo mkisofs rsync syslinux` ## 具体操作 ### 挂载标准镜像 这里使用CentOS-7-x86_64-Minimal-1511.iso作为基础镜像,选择Minimal是因为镜像比较小,可以保证最终生成的镜像大小不至于很大,需要的功能,根据需要添加即可。 挂载光盘镜像,并复制光盘内容到/tmp/iso目录下 #创建挂载目录 `mkdir /mnt/cdrom` #挂载光盘到/mnt目录 `mount -o loop /dev/sr0 /mnt/cdrom` #创建工作目录 `mkdir -p /tmp/iso` #复制光盘内容到iso目录 `cp -r /mnt/cdrom/* /tmp/iso/` #设置光盘作为yum本地源,方便分析哪些包在光盘中没有,需要添加 ``` cd /etc/yum.repo mkdir bak mv *.repo bak mv bak/CentOS-Media.repo . vi CentOS-Media.repo [c7-local] name=CentOS-7-CD baseurl=file:///tmp/iso/ gpgcheck=0 enabled=1 gpgkey=file:///tmp/iso/RPM-GPG-KEY-CentOS-7 yum clean all yum makecache ``` ### 编写ks.cfg 如果希望使用图形化工具生成ks.cfg可以安装system-config-kickstart,这边将直接编辑ks.cfg ``` #platform=x86, AMD64, or Intel EM64T #version=DEVEL # Install OS instead of upgrade install # Keyboard layouts keyboard 'us' # Root password 默认是www.upsoft01.com rootpw --iscrypted $1$4FH.jrCj$NIpqwnkXalm.HqmrN4bMQ/ # System language lang en_US # Firewall configuration firewall --enabled --ssh # System authorization information auth --useshadow --passalgo=sha512 # Use CDROM installation media安装源 cdrom # 指定要安装的软件包 # 在%packages与%end中间加入需要自定义安装的包组 # 默认 %packages @^minimal @core #kexec-tools # 额外添加 #net-tools #openssl #pciutils #percona-xtrabackup-24 %end # Use graphical install图形化界面,txt即为命令行模式 graphical # SELinux configuration selinux --disabled # Do not configure the X Window System skipx # Network information启动默认eth0的DHCP network --bootproto=dhcp --device=eth0 --onboot=yes --activate # Reboot after installation reboot # System timezone timezone Asia/Shanghai # System bootloader configuration bootloader --location=mbr # Clear the Master Boot Record zerombr # Partition clearing information clearpart --all --initlabel # Disk partitioning information # 分区设置 # 要使用全部空间 使用--size=1 --grow # 分区要使用所有剩余空间大小 --percent=100 part /boot --fstype="xfs" --ondisk=sda --size=400 part pv.364 --fstype="lvmpv" --ondisk=sda --size=1 --grow volgroup centos_school --pesize=4096 pv.364 logvol swap --fstype="swap" --size=4096 --name=swap --vgname=centos_school logvol /home --fstype="xfs" --percent=100 --name=date --vgname=centos_school logvol / --fstype="xfs" --size=10240 --name=root --vgname=centos_school #%pre # 安装前执行的脚本 注意 此时磁盘尚未格式化 所以能执行的工作有限 # 常用于读取磁盘信息 生成分区脚本 然后供之后格式化使用 #%end # 安装后脚本 # %post --nochroot # 安装后脚本有两种模式 一种是在安装环境运行 此时系统挂载于/mnt/sysimage 光盘挂载于/mnt/install/repo # 可以从光盘复制文件到系统 # %post --log=/root/ks-post.log # 但是如果安装源不被识别为/dev/sr0 则不能通过挂载的方式把光盘中的文件复制到系统 # 将外部文件拷贝到系统内,需在/ISO目录下创建plus文件夹, # 将外部文件(例如二进制文件dota_driver)放进plus目录下。 # 在安装系统期间,该文件的绝对路径为/run/install/repo/plus/,而系统的文件路径挂载在/mnt/sysimage, # 所以目的地址为/mnt/sysimage/usr/bin。 %post --nochroot # 复制安装光盘plus目录下所有内容到系统/mnt目录下 mkdir -p /mnt/sysimage/mnt/plus cp -fr /mnt/install/repo/plus/* /mnt/sysimage/mnt/plus/ # 复制安装光盘plus/init.sh文件到系统/root目录下 作为初始化执行脚本 cp /mnt/install/repo/plus/init.sh /mnt/sysimage/root/ echo "successd read" > /mnt/sysimage/install.log %end ``` 自己编写的ks.conf文件很有可能存在语法错误,可以通过这个命令来检查 `ksvalidator ks.cfg` 如果没有任何输出则表示文件没有语法错误 ks.cfg文件转换成linux格式,放到/tmp/iso/isolinux下 ### 修改isolinux.cfg ``` default vesamenu.c32 timeout 150 display boot.msg # Clear the screen when exiting the menu, instead of leaving the menu displayed. # For vesamenu, this means the graphical background is still displayed without # the menu itself for as long as the screen remains in graphics mode. menu clear menu background splash.png menu title CentOS 7 menu vshift 8 menu rows 18 menu margin 8 #menu hidden menu helpmsgrow 15 menu tabmsgrow 13 # Border Area menu color border * #00000000 #00000000 none # Selected item menu color sel 0 #ffffffff #00000000 none # Title bar menu color title 0 #ff7ba3d0 #00000000 none # Press [Tab] message menu color tabmsg 0 #ff3a6496 #00000000 none # Unselected menu item menu color unsel 0 #84b8ffff #00000000 none # Selected hotkey menu color hotsel 0 #84b8ffff #00000000 none # Unselected hotkey menu color hotkey 0 #ffffffff #00000000 none # Help text menu color help 0 #ffffffff #00000000 none # A scrollbar of some type? Not sure. menu color scrollbar 0 #ffffffff #ff355594 none # Timeout msg menu color timeout 0 #ffffffff #00000000 none menu color timeout_msg 0 #ffffffff #00000000 none # Command prompt text menu color cmdmark 0 #84b8ffff #00000000 none menu color cmdline 0 #ffffffff #00000000 none # Do not display the actual menu unless the user presses a key. All that is displayed is a timeout message. 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 Manual kernel vmlinuz append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 quiet label linux2 menu label ^Install CentOS 7 Auto menu default kernel vmlinuz append initrd=initrd.img inst.ks=hd:LABEL=CentOS\x207\x20x86_64:/isolinux/ks.cfg inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 quiet label check menu label Test this ^media & install CentOS 7 kernel vmlinuz append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 rd.live.check quiet menu separator # insert an empty line # utilities submenu menu begin ^Troubleshooting menu title Troubleshooting label vesa menu indent count 5 menu label Install CentOS 7 in ^basic graphics mode text help Try this option out if you're having trouble installing CentOS 7. endtext kernel vmlinuz append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 xdriver=vesa nomodeset quiet label rescue menu indent count 5 menu label ^Rescue a CentOS system text help If the system will not boot, this lets you access files and edit config files to try to get it booting again. endtext kernel vmlinuz append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 rescue quiet label memtest menu label Run a ^memory test text help If your system is having issues, a problem with your system's memory may be the cause. Use this utility to see if the memory is working correctly. endtext kernel memtest menu separator # insert an empty line label local menu label Boot from ^local drive localboot 0xffff menu separator # insert an empty line menu separator # insert an empty line label returntomain menu label Return to ^main menu menu exit menu end ``` isolinux.cfg文件存在isolinux文件夹下 * timeout 150 表示倒计时15秒将从默认选项开始执行安装 * 这里的默认选项是 Install CentOS 7 Auto menu default为默认选项的标识 * 新增一段,添加一个选项 ``` label linux2 menu label ^Install CentOS 7 Auto menu default kernel vmlinuz append initrd=initrd.img inst.ks=hd:LABEL=CentOS\x207\x20x86_64:/isolinux/ks.cfg inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 quiet ``` 其中指定了ks.cfg的路径inst.ks=hd:LABEL=CentOS\x207\x20x86_64:/isolinux/ks.cfg ### 自定义业务脚本 * ks.cfg中%post和%end段内定制了安装完成系统后执行的命令 ``` mkdir -p /mnt/sysimage/mnt/plus cp -fr /mnt/install/repo/plus/* /mnt/sysimage/mnt/plus/ cp /mnt/install/repo/plus/init.sh /mnt/sysimage/root/ ``` 其中的init.sh就是自定义业务的脚本 ``` #!/bin/sh echo "###########################################################" echo "++++++++++++++Setup System++Deplay Bigant++++++++++++++++++" echo "###########################################################" #主动启动网卡并设置开机自启动 interface=$(ls /sys/class/net| grep -v "lo" | head -1) ipaddr=$(ip route show | grep -v default | awk '{print $9}') ifup $interface sed -i "s/^ONBOOT=no/ONBOOT=yes/g" /etc/sysconfig/network-scripts/ifcfg-${interface} #添加防火墙规则 firewall-cmd --zone=public --add-port=80/tcp --permanent firewall-cmd --reload #修改系统资源限制 sed -i '51a* soft noproc 40960' /etc/security/limits.conf sed -i '51a* hard noproc 40960' /etc/security/limits.conf sed -i '51a* soft nofile 40960' /etc/security/limits.conf sed -i '51a* hard nofile 40960' /etc/security/limits.conf #安装bigant cd /mnt/plus tar zxvf *.tar.gz cd oneinstack ./install.sh -a && /etc/init.d/bigant_root && echo -e "\e[1;31mPlace reboot system and deplay with Browser! \n Open http://${ipaddr}:8000\e[0m" ``` ### 打包ISO 1. 制作iso文件 `mkisofs -o /tmp/CentOS7-v1.0.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -joliet-long -R -J -v -V "CentOS 7 x86\_64" -T /tmp/iso/` * mkisofs参数说明: \-o /tmp/My-Server-CentOS7-v1.0.iso,设置输出文件名,-output \-b isolinux/isolinux.bin,指定开机映像文件 \-c isolinux/boot.cat,制作启动光盘时,mkisofs会将开机映像文件中的全-eltorito-catalog\*文件的全部内容作成一个文件 \-no-emul-boot,非模拟模式启动 \-boot-load-size 4, \-boot-info-table, \-joliet-long, \-R,使用Rock Ridge Extensions,是用于linux环境下的光盘,文件名区分大小写同时记录文件长度,-rock \-J,使用Joliet格式的目录与文件名称,Jolient是windows下使用的光盘,-joliet \-v,执行时显示详细的信息,-verbose \-V "CentOS 7 x86\_64",设置卷标Volume ID,-volid \-T,建立文件名的转换表,适用于不支持Rock Ridge Extensions的系统,-translation-table /tmp/iso/,光盘源文件目录 2. 转换为ISOhybrid (该命令由syslinux提供) `isohybrid /tmp/CentOS7-v1.0.iso` 3. 嵌入md5校验码 (该命令由isomd5sum提供) `implantisomd5 /tmp/CentOS7-v1.0.iso` 4. 检验md5 `checkisomd5 /tmp/CentOS7-v1.0.iso`