⾃定制Centos7.3系统镜像(ISO)
本⽂主要介绍如何根据官⽅的Centos镜像⽂件,在保留原有默认安装的RPM包的基础下,添加⾃⼰所需要的RPM包的,最终⽣成⼀个⾃定制版的ISO,节省了宝贵的时间并确保了安装的定制性。对于其他没有介绍的修改,后续在实践中会进⾏更新。
本⽂基于Centos7.3版本制作的ISO镜像,其他版本可能本⽂介绍的制作过程有所差别。
搭建基础环境
#yum install createrepo mkisofs isomd5sum squashfs-tools
#mkdir /root/PanISO
将/root/PanISO作为ISO的制作⽬录
#mount /dev/cdrom /media/
#cp -r /media/* /root/PanIOS/
#cp /media/.discinfo /root/PanIOS/
#cp /media/.treeinfo /root/PanIOS/
# chmod +w /root/PanISO/isolinux/isolinux.cfg
注意:如果你想⽤Centos7.3的ISO进⾏挂载也是可以的
#mount -o loop /root/CentOS-7-x86_64-DVD-1611.iso /mnt
修改isolinux.cfg⽂件,将“append initrd=initrd.img”后⾯的当前⾏内容删除,并加⼊“ks=cdrom:/isolinux/ks.cfg”。
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 Linux 7
kernel vmlinuz
append initrd=initrd.img ks=cdrom:/isolinux/ks.cfg
这步的作⽤是实现⾃动化安装,如果不加上就需要⼿动配置参数就⾏下⼀步安装了。
修改⾃动化安装配置⽂件
#cp /root/anaconda-ks.cfg /root/PanISO/isolinux/ks.cfg
本次制作iso⽤的是系统安装成功⽣成的默认的anaconda-ks.cfg⽂件,并未做修改,如果有需求可以⾃
⾏修改。下⾯是我使⽤的⽰例,并稍加了⼀些⽂件配置说明(详细配置说明可以查kickstart配置⽂件):
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media 从光驱安装
cdrom
# Use graphical install 图形化安装
graphical
# Run the Setup Agent on first boot
firstboot --enable
ignoredisk --only-use=sda
# Keyboard layouts 美式键盘
keyboard --vckeymap=us --xlayouts='us'
# System language 美式英语
lang en_US.UTF-8
# Network information ⽹卡配置
network --bootproto=dhcp --device=ens33 --onboot=off --ipv6=auto --no-activate
network --hostname=localhost.localdomain
# Root password root⽤户的密码
rootpw --iscrypted $6$Ok9Jcj51va/3x830$/6rLkpu8k2tPCmd7byUBE7wuRexmuoMzp0jAelDRYMAIk9yRL/84mCFrOTp5QYWJNVcEIB7wWgw8byp0r21vT0
# System services
services --disabled="chronyd"
# System timezone 时区
timezone Asia/Shanghai --isUtc --nontp
user --name=pan --password=$6$ONSyoQ.S58OJpcnj$jUz6vDadzY5wZ39fr0dEONbI/iNIeVkpRMaUjz9ZJbIqQLPLKqq8ZJWRoDGjolLJfkwmw58Dp5xPhKufAca8y/ --iscrypted --gecos="pan" # System bootloader configuration
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
autopart --type=lvm
# Partition clearing information
clearpart --none --initlabel
%pre
%end
#安装包的信息
%packages
@^minimal
@core
kexec-tools
%end
%post
%end
%addon com_redhat_kdump --enable --reserve-mb='auto'
%end
%anaconda
pwpolicy root --minlen=6 --minquality=50 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=50 --notstrict --nochanges --notempty
pwpolicy luks --minlen=6 --minquality=50 --notstrict --nochanges --notempty
%end
%pre表⽰系统安装前,%post 表⽰在系统安装后执⾏,这样可以定制⾃⼰的⾃动化脚本
获取系统默认安装的RPM包和需要添加的RPM包
在使⽤Centos系统安装完成后会⽣成/root/install.log,该⽂件记录了系统安装时安装的RPM包信息。如果没有该⽂件,可以⼿动⽣成(新安装的⼲净系统):
#rpm -qa >> /root/install.log
清空ISO制作⽬录⾥的Packages和repodata两个⽬录⾥的所有内容,并根据install.log将所需安装包放⼊Packages⽂件夹内:
# awk '{print $2}' /root/install.log |xargs -i cp /media/Packages/{}.rpm /root/PanIOS/Packages/
注:如果是⼿动⽣成的install.log,将'{print $2}' 改为'{print $0}' 。
因为需要⾃定制iso,需要预安装其他的包,将解决好依赖关系的包全部放⼊/root/PanIOS/Packages/中:
多数情况下我们会根据yum来下载安装包,下⾯介绍两种获取下载安装包的⽅法:
1.修改yum的配置⽂件,将yum下载的安装包保存起来
#vim /f
修改keepcache=1 (1为保存,0为不保存,默认是0)
修改后使⽤yum安装的包会保存在“/var/cache/yum/”下。
2.通过yum指令的--downloadonly可以只下载安装包,不进⾏安装
#yum -y install --downloadonly --downloaddir=/root/test/ <file.name>
该指令我会将安装的包统⼀放在/root/test/⽬录下,yum update同样可以使⽤该⽅法,这样定制后的ISO中RPM包都是最新版本的。
修改l⽂件,定义RPM包组
.xml⽂件的写法如下:
<group>
<id>组的ID,⾮数字</id>
<name>组的名字</name>
<description>组的描述</description>
<default>是否预安装,true或者false</default>
<uservisible>是否可见,true或者false</uservisible>
<langonly>zh</langonly> #仅在某个语系的安装界⾯中显⽰,可选项
<packagelist>
<packagereq requires="依赖包" type="conditional">软件包1</packagereq>
<packagereq type="default">软件包2</packagereq>
<packagereq type="default">软件包3</packagereq>
</packagelist>
</group>
......
<category>
<id>分类的名字,⾮数字</id>
<name>将显⽰在左侧列表⾥</name>
<description>将显⽰在下⾯的描述栏⾥</description>
<grouplist>
<groupid>组1的ID</groupid>
<groupid>组2的ID</groupid>
</grouplist>
</category>
<category>
简单来说,⼀个group中包含若⼲个RPM包,⼀个category则包含了若⼲个group,在安装系统的时候,在选择⾃定义安装的步骤中,左侧的是category,右侧是group。
%packages
@^minimalcentos vim命令
@core
kexec-tools
⽰例中的@core就是⼀个组的名称,如果我们想添加指定的包组,就可以在ks.cfg⽂件中指定;
2.在group中的包含的RPM只需要填⼊完整包的名称即可,不需要把依赖也添加进去,只需要在Packages⽂件夹内将所需的依赖添加完整即可;
3.在group中添加完整包的名称是yum安装下显⽰的包名,⽐如vim,它的完整包的名称是vim-enhanced;
4.当然你也可以在Packages中保留完整的Centos系统的RPM包,将⾃定制的分类和组添加进去,这样在安装界⾯就可以发现我们⾃定义的category
和group。
重新⽣成repo
#cd PanISO
#createrepo -l .
注意:在CentOS下需要根据'.discinfo'来设置'baseurl'(declare -x discinfo=head -1 .discinfo; createrepo -u "media://$discinfo"...); 在CentOS7中不再需要如此做,实际上如果在CentOS7中执⾏了这个命令,在安装的过程中,可能会报错"RepoError after 10 retries: Insufficient space in download directory /run/install/repo/Packages"
在其他版本中可执⾏如下指令:
# declare -x discinfo=$(head -1 /root/PanIOS/.discinfo)
# createrepo -u "media://$discinfo" -g /root/l /root/PanIOS/
修改安装界⾯图标背景
以图标为例,其他操作类似
将安装界⾯左上⾓的该图标换为
解压
# unsquashfs /root/PanISO/LiveOS/squashfs.img
把解压后的⽂件进⾏挂载,然后操作
#mount -o loop,rw squashfs-root/LiveOS/rootfs.img /media
/media/usr/share/anaconda/pixmaps/sidebar-logo.png为该安装界⾯的图标,只需根据⾃⼰的需要替换即可,分辨率要跟原图保持基本⼀致,要不会出现图标过⼤的情况
将解压后的⽂件重新打包
#mksquashfs squashfs-root/ squashfs.img
并将⽣成的squashfs.img替换原来的squashfs.img
制作ISO
#mkisofs -o Pan-7.3.iso -input-charset utf-8 -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -R -J -v -T -joliet-long /root/PanIOS/
#implantisomd5 Pan-7.3.iso
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论