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项

修改memu title行,可以定制欢迎标题

去掉部分菜单项,只保留安装(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

>> 修改.buildstamp文件,原始内容为:

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!"))'



4.3.添加自定义软件与脚本

以安装oracle server jre为例:

>> 在iso目录中创建软件存放目录,放入待安装的软件

mkdir/root/iso/soft
cp/root/server-jre-8u172-linux-x64.tar.gz/root/iso/soft

>> 修改ks.cfg,以末尾添加内容

%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并设置环境变量。


5.修改产品名称

产品名称出现在启动界面以及登录前,想变更需要修改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

>> 建立root用户的rpm环境,并将解压得到的文件放入

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这一行不要修改,否则会生成错误。

>> 重新生成rpm包,覆盖原始文件

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的文章。

定制自己的CentOS安装光盘ISO的更多相关文章

  1. openstack学习笔记七 swift安装

    指定映射位置创建ring文件启动服务代维服务proxyserver

  2. openstack安装liberty--安装对象存储服务swift

    通常使用CACHE技術提高性能Accountservers賬戶服務,管理對象存儲中的賬戶定義。Containerservers容器服務,在對象存儲中管理容器或文件夾映……Objectservers對象服務,在存儲節點管理實際的對象,比如文件。Wsgimiddleware處理認證,通常使用OPENSTACKIdentityswiftclient為用戶提供命令行接口使用RESTAPIswift-init初始化和構建RING文件腳本swift-recon一個命令行工具,用於檢索群集的各種度量和測試信息。

  3. 将我的Android应用程序签名为系统应用程序

    将我的Android应用程序签名为系统应用程序在我的公司,我们希望在现场完全控制电池消耗,仅使用2g和gps可以快速耗尽电池.我们的决定是我们需要拥有移动电话的root权限,这样当手机闲置时,我们就会关掉那些不必要的电池消耗.而且我们也不允许用户将其卸载并清除数据.我的问题是:>我从哪里获得这些签名密钥?>它是否会像root访问权限一样如果我成功地成功了签字?

  4. 获得Android App的“root”权限

    我想知道如何从Android应用程序获得root权限?我尝试了下面的代码行来列出文件但没有发生任何事情我试图在我的清单文件中给予TEST_FACTORY权限,但是我收到错误“允许系统应用”如何制作我的应用系统应用?

  5. CentOS 8.2服务器上安装最新版Node.js的方法

    这篇文章主要介绍了CentOS 8.2服务器上安装最新版Node.js的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  6. centos+php+coreseek+sphinx+mysql之一coreseek安装篇

    这篇文章主要介绍了centos+php+coreseek+sphinx+mysql之一coreseek安装篇的相关资料,非常不错具有参考借鉴价值,需要的朋友可以参考下

  7. Centos7 中 Node.js安装简单方法

    这篇文章主要介绍了Centos7 中 Node.js安装简单方法,非常不错具有一定的参考借鉴价值,需要的朋友可以参考下

  8. nodejs脚本centos开机启动实操方法

    在本篇文章里小编给大家整理的是关于nodejs脚本centos开机启动实操方法,有兴趣的朋友们参考下。

  9. Centos PHP 扩展Xchche的安装教程

    这篇文章主要介绍了Centos PHP 扩展Xchche的安装教程的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下

  10. Linux CentOS系统下安装node.js与express的方法

    这篇文章主要给大家介绍了在Linux CentOS系统下安装node.js与express的方法,文中介绍的非常详细,相信对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。

随机推荐

  1. 在airgapped(离线)CentOS 6系统上安装yum软件包

    我有一个CentOS6系统,出于安全考虑,它已经被空气泄漏.它可能从未连接到互联网,如果有,它很长时间没有更新.我想将所有.rpm软件包放在一个驱动器上,这样它们就可以脱机安装而无需查询互联网.但是,我在测试VM上遇到的问题是,即使指定了本地路径,yum仍然会挂起并尝试从在线存储库进行更新.另外,有没有办法使用yum-utils/yumdownloader轻松获取该包的所有依赖项和所有依赖项?目前

  2. centos – 命名在日志旋转后停止记录到rsyslog

    CentOS6.2,绑定9.7.3,rsyslog4.6.2我最近设置了一个服务器,我注意到在日志轮换后,named已停止记录到/var/log/messages.我认为这很奇怪,因为所有日志记录都是通过rsyslog进行的,并且named不会直接写入日志文件.这更奇怪,因为我在更新区域文件后命名了HUPed,但它仍然没有记录.在我停止并重新启动命名后,记录恢复.这里发生了什么?

  3. centos – 显示错误的磁盘大小

    对于其中一个磁盘,Df-h在我的服务器上显示错误的空白区域:Cpanel表明它只有34GB免费,但还有更多.几分钟前,我删除了超过80GB的日志文件.所以,我确信它完全错了.fdisk-l/dev/sda2也显示错误:如果没有格式化,我该怎么做才能解决这个问题?并且打开文件描述符就是它需要使用才能做到这一点.所以…使用“lsof”并查找已删除的文件.重新启动写入日志文件的服务,你很可能会看到空间可用.

  4. 如何在centos 6.9上安装docker-ce 17?

    我目前正在尝试在centOS6.9服务器上安装docker-ce17,但是,当运行yuminstalldocker-ce时,我收到以下错误:如果我用跳过的标志运行它我仍然得到相同的消息,有没有人知道这方面的方法?

  5. centos – 闲置工作站的异常负载平均值

    我有一个新的工作站,具有不寻常的高负载平均值.机器规格是:>至强cpu>256GB的RAM>4x512GBSSD连接到LSI2108RAID控制器我从livecd安装了CentOS6.564位,配置了分区,网络,用户/组,并安装了一些软件,如开发工具和MATLAB.在启动几分钟后,工作站负载平均值的值介于0.5到0.9之间.但它没有做任何事情.因此我无法理解为什么负载平均值如此之高.你能帮我诊断一下这个问题吗?

  6. centos – Cryptsetup luks – 检查内核是否支持aes-xts-plain64密码

    我在CentOS5上使用cryptsetupluks加密加密了一堆硬盘.一切都很好,直到我将系统升级到CentOS6.现在我再也无法安装磁盘了.使用我的关键短语装载:我收到此错误:在/var/log/messages中:有关如何装载的任何想法?找到解决方案问题是驱动器使用大约512个字符长的交互式关键短语加密.出于某种原因,CentOS6中的新内核模块在由旧版本创建时无法正确读取512个字符的加密密钥.似乎只会影响内核或cryptsetup的不同版本,因为在同一系统上创建和打开时,512字符的密钥将起作用

  7. centos – 大量ssh登录尝试

    22个我今天登录CentOS盒找到以下内容这是过去3天内的11次登录尝试.WTF?请注意,这是我从我的提供商处获得的全新IP,该盒子是全新的.我还没有发布任何关于此框的内容.为什么我会进行如此大量的登录尝试?是某种IP/端口扫描?基本上有4名匪徒,其中2名来自中国,1名来自香港,1名来自Verizon.这只发生在SSH上.HTTP上没有问题.我应该将罪魁祸首子网路由吗?你们有什么建议?

  8. centos – kswap使用100%的CPU,即使有100GB的RAM也可用

    >Linux内核是否应该足够智能,只需从内存中清除旧缓存页而不是启动kswap?

  9. centos – Azure将VM从A2 / 3调整为DS2 v2

    我正在尝试调整前一段时间创建的几个AzureVM,从基本的A3和标准A3到标准的DS2v2.我似乎没有能力调整到这个大小的VM.必须从头开始重建服务器会有点痛苦.如果它有所不同我在VM中运行CentOS,每个都有一个带有应用程序和操作系统的磁盘.任何人都可以告诉我是否可以在不删除磁盘的情况下删除VM,创建新VM然后将磁盘附加到新VM?

  10. centos – 广泛使用RAM时服务器计算速度减慢

    我在非常具体的情况下遇到服务器速度下降的问题.事实是:>1)我使用计算应用WRF>2)我使用双XeonE5-2620v3和128GBRAM(NUMA架构–可能与问题有关!

返回
顶部