1.目标
>> 基于CentOS-6.10-x86_64-minimal.iso进行定制,选它是因为包比较小,才400M
>> 以text方式安装,安装过程尽量无需用户参与
>> 固定root密码,并创建好内置用户与权限
>> 隐藏与CentOS相关的信息,更换为自己的产品名称
>> 携带自己的软件,如jre环境等
2.环境准备
>> 下载CentOS6.10,地址:http://mirrors.aliyun.com/centos/6.10/isos/x86_64/CentOS-6.10-x86_64-minimal.iso
>> 准备linux环境,建议直接使用要定制的基础iso安装
>> 以root登录系统,配置好网络
>> 通过yum安装必备组件
yuminstallanacondacreaterepomkisofsrpm-build
>> 上传iso到/root,并挂载到/mnt/src,之后拷贝所有文件到工作目录下,注意包含两个隐藏文件.diskinfo和.treeinfo
mkdir/mnt/src mount–oloop/root/CentOS-6.9-x86_64-minimal.iso/mnt/src mkdir/root/iso cp–r/mnt/src/./root/iso
3.修改欢迎界面
3.1.修改背景图
原始界面为:
替换界面需要修改/root/iso/isolinux/splash.jpg,替换为需要的图片,保持文件名不变,图片大小640x480。
3.2.修改产品名与选项
修改/root/iso/isolinux/isolinux.cfg,原始内容为:
defaultvesamenu.c32 #prompt1 timeout600 displayboot.msg menubackgroundsplash.jpg menutitleWelcometoCentOS6.10! menucolorborder0#ffffffff#00000000 menucolorsel7#ffffffff#ff000000 menucolortitle0#ffffffff#00000000 menucolortabmsg0#ffffffff#00000000 menucolorunsel0#ffffffff#00000000 menucolorhotsel0#ff000000#ffffffff menucolorhotkey7#ffffffff#ff000000 menucolorscrollbar0#ffffffff#00000000 labellinux menulabel^Installorupgradeanexistingsystem menudefault kernelvmlinuz appendinitrd=initrd.img labelvesa menulabelInstallsystemwith^basicvideodriver kernelvmlinuz appendinitrd=initrd.imgnomodeset labelrescue menulabel^Rescueinstalledsystem kernelvmlinuz appendinitrd=initrd.imgrescue labellocal menulabelBootfrom^localdrive localboot0xffff labelmemtest86 menulabel^Memorytest kernelmemtest append-
修改为:
defaultvesamenu.c32 #prompt1 timeout150 displayboot.msg menubackgroundsplash.jpg menutitleWelcometoRVS3.0! menucolorborder0#ffffffff#00000000 menucolorsel7#ffffffff#ff000000 menucolortitle0#ffffffff#00000000 menucolortabmsg0#ffffffff#00000000 menucolorunsel0#ffffffff#00000000 menucolorhotsel0#ff000000#ffffffff menucolorhotkey7#ffffffff#ff000000 menucolorscrollbar0#ffffffff#00000000 labellinux menulabel^InstallRVS3.0 menudefault kernelvmlinuz appendks=cdrom:/isolinux/ks.cfginitrd=initrd.img labellocal menulabel^Bootfromlocaldrive localboot0xffff
做了以下几处调整:
◇修改timeout,默认超时是60秒,改为15秒,即15秒内不做选择默认执行菜单中的default项
◇去掉部分菜单项,只保留安装(label linux)和从硬盘启动(label local)这两项
◇调整了label linux项的文字,同时调整了append项,增加了对kickstart的支持,指定ks.cfg位置,此配置用于自动安装,后面会涉及
4.修改安装过程
4.1.调整安装界面名称
想更换CentOS为自定义名称,需要调整/root/iso/isolinux/initrd.img:
>> 解开initrd.img到工作目录
mkdir/root/initrd cd/root/initrd xz-dc/root/iso/isolinux/initrd.img|cpio-id
201806291108.x86_64 CentOS 6.10 FINAL=YES http://bugs.centos.org/
修改为:
201806291108.x86_64 RVS 3.0 FINAL=YES http://www.your-company.com.cn/
>> 重新压缩img文件,并覆盖工作目录下的原文件,然后清理
cd/root/initrd find.|cpio-c-o|xz-9--format=lzma>initrd2.img cpinitrd2.img/root/iso/isolinux/initrd.img cd/root rm–rf/root/initrd
这里比较奇怪的是,如果直接压缩生成initrd.img,文件会比较大,但压缩initrd2.img就能基本等于原尺寸。
4.2.定制自动安装参数
定制自动安装参数需要依赖kickstart,生成/root/iso/isolinux/ks.cfg,填写内容为(#为注释行,不需要):
#全新安装,使用cdrom作为安装源 install cdrom #使用text模式而不要用图形模式安装 text #设置键盘与语言 keyboardus langen_US.UTF-8 #设置root密码与认证加密方式,此处设置root密码为PASSWD1! rootpw--iscrypted$6$rUp4SXGKaN7Z.eix$/6tp2c9zsSwN8a2a.TmDcKHjhjAm.CFhlunvKZRqZAO.UQ8mrOT4Im/pCiL5d388VEEHMrhha0N3Q2BwqxHPV1 auth--useshadow--passalgo=sha512 #设置防火墙,放过ssh firewall--service=ssh #设置selinux selinux–-enforcing #设置网络eth0,使用dhcp模式,设置hostname,不启用ipv6 network--onboot=yes--device=eth0--bootproto=dhcp–hostname=rvs--noipv6 #不使用XWindow skipx #安装完成后重启系统 reboot #设置时区 timezoneAsia/Shanghai #设置启动引导参数 bootloader--location=mbr--driveorder=sda #清除mbr zerombr #清除分区 clearpart--all--initlabel
参数很多,可以参考以下文章:https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/installation_guide/s1-kickstart2-options。或者如果你有图形界面,安装一个system-config-kickstart,可以进行图形化的参数设置。
root密码是以加密方式设置的,可以通过以下方法得到密文:
python-c'importcrypt;print(crypt.crypt("PASSWD1!"))'
以安装oracle server jre为例:
>> 在iso目录中创建软件存放目录,放入待安装的软件
mkdir/root/iso/soft cp/root/server-jre-8u172-linux-x64.tar.gz/root/iso/soft
%post mkdir-p/media/cdrom ln-s/dev/scd0/dev/cdrom mount-oloop/dev/cdrom/media/cdrom tar-zxvf/media/cdrom/soft/server-jre-8u172-linux-x64.tar.gz-C/usr/local echo"JAVA_HOME=/usr/local/jdk1.8.0_172">>/etc/profile echo"PATH=\$JAVA_HOME/bin:\$PATH">>/etc/profile echo"exportJAVA_HOMEPATH">>/etc/profile %end
%post表示安装完成后执行的脚本,这里首先挂载光驱,然后解压jre并设置环境变量。
产品名称出现在启动界面以及登录前,想变更需要修改centos-release-6-10.el6.centos.12.3.x86_64.rpm,但此包无法直接修改,需要从源码包修改,步骤如下:
>> 下载源码包到/root,并解开
cd/root wgethttp://vault.centos.org/6.10/os/Source/SPackages/centos-release-6-10.el6.centos.12.3.src.rpm rpm2cpio/root/centos-release-6-10.el6.centos.12.3.src.rpm|cpio-id
echo"%_topdir/root/rpmbuild">/root/.rpmmacros mkdir-pv/root/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS} cpcentos-release-6-10.tar.gz/root/rpmbuild/SOURCES cpcentos-release.spec/root/rpmbuild/SPECS
>> 修改centos-release.spec,分别找到%define product_family和%define full_release_version这两行,改为需要的值:
%defineproduct_familyRVS %definefull_release_version3.0
注意%define base_release_version这一行不要修改,否则会生成错误。
cd/root/rpmbuild/SPECS rpmbuild-bpcentos-release.spec rpmbuild-bccentos-release.spec rpmbuild-bicentos-release.spec rpmbuild-bbcentos-release.spec cp/root/rpmbuild/RPMS/x86_64/centos-release-6-10.el6.12.3.x86_64.rpm/root/iso/Packages/centos-release-6-10.el6.centos.12.3.x86_64.rpm
执行每条命令时注意观察有无错误产生。
>> 更新repodata数据
cd/root/iso declare-xdiscinfo=`head-1.discinfo` cp/root/iso/repodata/*-x86_64.xml/root/iso/comps.xml rm–rf/root/iso/repodata createrepo-u"media://$discinfo"-gcomps.xml./
6.重新生成ISO
cd/root mkisofs-orvs-3.0.iso-bisolinux/isolinux.bin-cisolinux/boot.cat-no-emul-boot-boot-load-size4-boot-info-table-R-J-v-Tiso/
成功后会在/root目录下生成rvs-3.0.iso。
7.检验成果
使用VMware虚拟机安装,欢迎页面,已显示RVS 3.0,且菜单项只剩2项:
进入text模式,左上角显示产品名为RVS,安装过程中只需要选择磁盘,其它参数都不需要设置:
安装完成后自动重启,GRUB里及启动过程右下角已显示RVS 3.0:
启动完成,显示RVS release 3.0 (Final),以root登录,密码PASSWD1!,执行java命令可正常运行,查看IP已通过dhcp分配成功。
大家可以在此基础上添加更多个性化的内容,来生成自己专属的iso安装包。
没有涉及rpm包剪裁,曾经试着去掉了几个rpm再重新生成repodata,比如去掉了python相关组件,iso确实是小了,但由于yum对它有依赖,在安装时会给出警告,可以继续安装,但安装完成后yum无法使用。
PS:感谢appresearch的文章。
原文链接:https://www.f2er.com/centos/374126.html