admin管理员组文章数量:1652205
1、准备:
镜像文件:Kylin-Server-10-SP1-Release-Build20-20210518-x86_64.iso
然后安装在服务器上(用来定制ISO的服务器)
根据自己的需求选择安装,我这里选择的是GUI安装
2、安装制作ISO的工具
yum -y install createrepo mkisofs isomd5sum rsync squashfs-tools
3、建立 image-making-directory
(1)创建 ISO制作目录
mkdir /newiso
(2)挂载官方ISO启动盘
mount -o loop Kylin-Server-10-SP1-Release-Build20-20210518-x86_64.iso /mnt
(3)把官方镜像里的文件同步到image-making-directory
rsync -rav /mnt/. /newiso
可以使用 ll -a查看目录,其中
[root@kylinos-server ~]# ls -al /newiso/
总用量 260
dr-xr-xr-x 9 root root 277 9月 8 15:45 .
dr-xr-xr-x. 20 root root 280 9月 8 12:09 ..
-r--r--r-- 1 root root 53 5月 18 2021 .discinfo
dr-xr-xr-x 3 root root 35 5月 18 2021 EFI
dr-xr-xr-x 4 root root 97 9月 8 12:08 images
dr-xr-xr-x 2 root root 270 9月 8 15:53 isolinux
-r--r--r-- 1 root root 266 5月 24 2021 .kyinfo
-r--r--r-- 1 root root 1150 5月 18 2021 .kylin-post-actions
-r--r--r-- 1 root root 135 5月 18 2021 .kylin-post-actions-nochroot
-r--r--r-- 1 root root 438 5月 24 2021 LICENSE
dr-xr-xr-x 2 root root 218 5月 18 2021 manual
dr-xr-xr-x 2 root root 180224 9月 8 15:40 Packages
dr-xr-xr-x 3 root root 4096 5月 18 2021 Packages-gcc
-r--r--r-- 1 root root 82 5月 18 2021 .productinfo
drwxr-xr-x 2 root root 4096 9月 8 15:45 repodata
-r--r--r-- 1 root root 3110 5月 24 2021 TRANS.TBL
-r--r--r-- 1 root root 437 5月 18 2021 .treeinfo
isolinux directory: store the installation interface information when the CD is booted;
images directory: necessary boot image files;
Packages directory: install packages and information;
repodata directory: packages dependency information.
(4)将自定义rpm包同步到image-making-directory
(1)获取当前系统中安装的所有rpm包列表;
rpm -qa > /root/package-list.txt
(2)为使后面我们生成的ISO文件尽可能的小,我们只保留系统安装所需要的RPM包以及其它需要定制的RPM包;
A. 首先,删除ISO制作目录/newiso/Packages/下所有的RPM包;
cd /newiso/Packages/
rm -rf *.rpm
B. 接着,从ISO挂载目录/mnt/Packages/拷贝系统安装所需的RPM包拷贝到“ISO镜像制作目录”/newiso/Packages/中;
cat /root/package-list.txt | awk ‘{print $0}’ |xargs -i cp /mnt/Packages/{}.rpm /newiso/Packages/
C. 将自定义的软件包拷贝到系统安装所需的RPM包拷贝到“ISO镜像制作目录”/newiso/Packages/中;我是安装向日葵[SunloginClient_11.0.1.44968_amd64]为例。
[root@kylinos-server ~]# ls *rpm
libappindicator-gtk3-12.10.0-25.ky10.x86_64.rpm libdbusmenu-gtk3-16.04.0-10.ky10.x86_64.rpm webkitgtk3-2.4.11-2.ky10.ky10.x86_64.rpm
libdbusmenu-16.04.0-10.ky10.x86_64.rpm libindicator-gtk3-12.10.1-15.ky10.x86_64.rpm SunloginClient_11.0.1.44968_amd64.rpm
这里有个坑,后续再详述。
[root@kylinos-server ~]# cp ~/*rpm /newiso/Packages
(5) 编辑自己的组件说明文件
编辑comps.xml文件,将我们的自定义的组件加入进去。
[root@kylinos-server ~]# ll /newiso/repodata/
总用量 10144
-rw-r--r-- 1 root root 24987 9月 8 16:24 296dc4bb6d160b9fba3b20fe7a7d31c2663455664a8fc1eac57b9bcfc1b0fe93-Kylin-x86_64-V10-ukui-comps.xml.gz
-rw-r--r-- 1 root root 3154273 9月 8 16:24 3efb77bc4e4a3efe76944123ad5560a55fbcb285501e2bd458439b37c0bd6487-filelists.sqlite.bz2
-rw-r--r-- 1 root root 3138204 9月 8 16:24 4c714f5433b03c5c56da209e252ecffa866feacfde28a6d8ff13b2dfa6344123-filelists.xml.gz
-rw-r--r-- 1 root root 501472 9月 8 16:24 4f6e46e6a4eeb3f4fa702facac06e0f82b8da081bb4cfb38431d3dec4ea348ff-other.sqlite.bz2
-rw-r--r-- 1 root root 348054 9月 8 16:24 59e8b973c034b3317e2956526a10cd4c6aef2611ed03e36ae20d78c9591c4640-other.xml.gz
-rw-r--r-- 1 root root 196249 9月 8 16:24 d373aec87ba0a3fbcfb9fb644330bd1e39e2fd248435d42148ef081fe58834de-Kylin-x86_64-V10-ukui-comps.xml
-rw-r--r-- 1 root root 978981 9月 8 16:24 e91c1bf7bcfbd120458ba6ce1a847941e26a364e03af178582bf28844bad25ec-primary.xml.gz
-rw-r--r-- 1 root root 2018889 9月 8 16:24 f0e510fcd601d55a7c07adb2466bef571da90944b3c20bbc0713afe0c590fa88-primary.sqlite.bz2
-rw-r--r-- 1 root root 3914 9月 8 16:24 repomd.xml
-r--r--r-- 1 root root 2599 5月 24 2021 TRANS.TBL
这个文件的主要作用,就说用于说明ks.cfg packages段中的每一个组件都对应那些安装包。前面我们声明了一个SunloginClient的安装组件,这里就要在这个comps.xml文件里对SunloginClient的内容进行定义。
打开comps.xml文件,里面主要是两个数据段<group></group> 以及 <environment></environment>
其中group用于定义每个组件包含那些rpm包, environment用于定义不同组件之间的组合。
针对我们上面的需求,在文件中加入一个group段,内容如下:
<group>
<id>SunloginClient</id>
<name>sunloginclient</name>
<name xml:lang="zh_CN">向日葵安装包</name>
<description>SunloginClient software</description>
<description xml:lang="zh_CN">向日葵需要的所有组件</description>
<default>false</default>
<uservisible>false</uservisible>
<packagelist>
<packagereq type="mandatory">libindicator-gtk3</packagereq>
<packagereq type="mandatory">libdbusmenu</packagereq>
<packagereq type="mandatory">libdbusmenu-gtk3</packagereq>
<packagereq type="mandatory">libappindicator-gtk3</packagereq>
<packagereq type="mandatory">webkitgtk3</packagereq>
<packagereq type="mandatory">sunloginclient</packagereq>
</packagelist>
</group>
其中 id 必须和ks.cfg文件中定义的名字完全一致,否则会找到不到安装组件。
name是起一个名字,英文名 name xml:lang 用于声明国际化的名字,可以针对不同的语言提供文字说明,我们只用了中文,如果想要更多,可以参考文件中原有的group的内容。
description和name类似,随便写个描述
packagelist 用来列出所有需要安装的rpm包,我们上面列出来的需要安装的都会写在这里面。这里要注意,安装包的名字一般不需要写后面的版本号,只需要写主要的名字就行了。
向日葵sunloginclient这里需要全部小写,要不然软件安装不成功。
<packagereq type="mandatory">sunloginclient</packagereq>
因为在rpm -ivh SunloginClient_11.0.1.44968_amd64.rpm的时候会提示:
Verifying... ################################# [100%]
准备中... ################################# [100%]
正在升级/安装...
1:sunloginclient_11.0.1.44968_amd64 ################################# [100%]
sunloginclient: 未找到进程
sunloginclient_linux: 未找到进程
check operate system OK
Created symlink /etc/systemd/system/multi-user.target.wants/runsunloginclient.service → /etc/systemd/system/runsunloginclient.service.
如果是java的话,必须带上它的版本号。 只写jdk是不行的。至于具体写什么名字,如果不确定的话,可以用 rmp2cpio xxxx.rpm | cpio -idv 看一下解压出来的路径。一般用路径中的名字就可以(但是也有例外,实在不行,只能多试几次了)。
<packagereq type="mandatory">jdk-11.0.9</packagereq>
group编辑完之后,我们需要在设定一个environment. 我当时写的内容如下:
<environment>
<id>sunloginclient-env</id>
<name>taoxc customization</name>
<name xml:lang="zh_CN">向日葵需要的所有组件</name>
<description>SunloginClient software</description>
<description xml:lang="zh_CN">向日葵需要的所有组件</description>
<display_order>8</display_order>
<grouplist>
<groupid>SunloginClient</groupid>
</grouplist>
<optionlist>
</optionlist>
</environment>
同样起一个ID, 然后声明一下这个安装环境都需要装那些包。一般只写自己的group就行。
(6) 更新“ISO镜像制作目录”的repodata文件夹下的xxx-comps.xml文件;
[root@kylinos-server ~]# createrepo -g /newiso/repodata/*-comps.xml /newiso/
执行完成后repodata包中就会多出一堆xml和 zip文件。 这里也需要注意:一旦你对Packages目录中的内容作了变更,就需要重新编译comps.xml。 所以最好留好备份。甚至有时候对其他内容的改动也会需要重新制作comps.xml 否则可能会出现一些小问题,所以建议大家做好备份,最好每次都制作一下。
(7)编辑ks.cfg文件
将我们编辑好的ks.cfg文件复制到/root/kickstart/iso/isolinux/ 目录下面。 理论上,iso下面的任何位置都可以,不过我测试的时候是放在isolinux目录下面的。
#version=DEVEL ignoredisk --only-use=sda autopart --type=lvm # Partition clearing information clearpart --all --initlabel --drives=sda # Use graphical install graphical # Use CDROM installation media cdrom # Keyboard layouts keyboard --vckeymap=cn --xlayouts='cn' # System language lang zh_CN.UTF-8 # Network information network --bootproto=dhcp --device=ens33 --ipv6=auto --activate network --bootproto=dhcp --device=ens37 --onboot=off --ipv6=auto network --hostname=localhost.localdomain # Root password rootpw --plaintext PassworD # X Window System configuration information xconfig --startxonboot # Run the Setup Agent on first boot firstboot --enable # System services services --enabled="chronyd" # System timezone timezone Asia/Shanghai --isUtc %post --nochroot #####copy kyinfo and LICENSE if [ -e /tmp/.kyinfo ];then echo y | cp -a /tmp/.kyinfo $ANA_INSTALL_PATH/etc/ fi if [ -e /tmp/LICENSE ];then echo y | cp -a /tmp/LICENSE $ANA_INSTALL_PATH/etc/ fi if [ -e /run/install/repo/.kyinfo ];then echo y | cp -a /run/install/repo/.kyinfo $ANA_INSTALL_PATH/etc/ fi if [ -e /run/install/repo/LICENSE ];then echo y | cp -a /run/install/repo/LICENSE $ANA_INSTALL_PATH/etc/ fi ##### kylin postaction ## cdrom install, copy .kylin-post-actions if [ -e /run/install/repo/.kylin-post-actions ];then echo y | cp -a /run/install/repo/.kylin-post-actions /tmp/.kylin-post-actions echo "repo=/run/install/repo" > /tmp/.kylin-repo fi ## copy kylin post scripts in new os if [ -e /tmp/.kylin-post-actions ];then echo y | cp -a /tmp/.kylin-post-actions $ANA_INSTALL_PATH/bin fi if [ -e /tmp/.kylin-repo ];then echo y | cp -a /tmp/.kylin-repo $ANA_INSTALL_PATH/tmp/ fi ## copy and run .kylin-post-actions-nochroot if [ -e /run/install/repo/.kylin-post-actions-nochroot ];then echo y | cp -a /run/install/repo/.kylin-post-actions-nochroot /tmp/.kylin-post-actions-nochroot fi if [ -e /tmp/.kylin-post-actions-nochroot ];then /bin/bash -x /tmp/.kylin-post-actions-nochroot &> $ANA_INSTALL_PATH/var/log/.kylin-post-actions-nochroot.log fi %end %post /bin/sed -i '13a Port 6022' /etc/ssh/sshd_config; \\ /bin/sed -i '/PermitRootLogin /d' /etc/ssh/sshd_config; \\ /bin/sed -i '32a PermitRootLogin yes' /etc/ssh/sshd_config; \\ systemctl disable systemd-networkd-wait-online.service systemctl disable multipathd.service ### do kylin post action if [ -e /bin/.kylin-post-actions ];then /bin/bash -x /bin/.kylin-post-actions &> /var/log/.kylin-post-actions.log fi %end %packages @^kylin-desktop-environment kexec-tools openssh audit mate-indicators @SunloginClient %end %addon com_redhat_kdump --enable --reserve-mb='1024M' %end %anaconda pwpolicy root --minlen=8 --minquality=1 --notstrict --nochanges --notempty pwpolicy user --minlen=8 --minquality=1 --notstrict --nochanges --emptyok pwpolicy luks --minlen=8 --minquality=1 --notstrict --nochanges --notempty %end reboot |
我们在%packages这个列表上,加上我们自定义的安装组件<group><id>的值, 起名字叫做SunloginClient。
(8)设定启动菜单
注意::本系列最大的坑来了。
要让我们ks.cfg生效,需要修改一下启动菜单的配置文件,告知启动菜单,在安装的时候加载哪个配置文件。很多网上的资料都会告诉你需要修改的是 /isolinux/isolinux.cfg文件,但是实际上根据安装和启动方式的不同生效的配置文件是不一样的。
如果你是光盘安装,请修改/isolinux/isolinux.cfg;
如果你是用U盘 Lagency方式安装操作系统,则需要修改的是/isolinux/syslinux.cfg;
而如果你用的UEFI方式,U盘安装操作系统,需要修改的文件就变成了/EFI/BOOT/grub.cfg;
至于怎么修改,方式都是一样的。
根据你需要的安装方式,打开相应的配置文件。或者你干脆通是把三个配置文件都改了
打开配置文件之后,向下翻找到这样一行文字:
label linux menu default menu label ^Install Kylin Linux Advanced Server V10 kernel vmlinuz append initrd=initrd.img inst.stage2=hd:LABEL=Kylin-Server-10 video=efifb:on quiet label check menu label Test this ^media & install Kylin Linux Advanced Server V10 kernel vmlinuz append initrd=initrd.img inst.stage2=hd:LABEL=Kylin-Server-10 rd.live.check video=efifb:on quiet |
怎么样?是不是有些眼熟?这个其实就是安装的时候,Linux弹出来的安装菜单。第一项(label linux)就是安装,第二项(label check)就是先对介质做校验,然后在安装。 我只对第一种安装方式做了修改,如果你需要先校验在安装的话,那么请修改第二种安装方式。
将我们的ks.cfg文件加入到安装菜单中,加入后的样子如下:用于指定ks文件的位置.
label linux menu default menu label ^Install Kylin Linux Advanced Server V10 kernel vmlinuz append initrd=initrd.img inst.stage2=hd:LABEL=Kylin-Server-10 inst.ks=hd:LABEL=Kylin-Server-10:/isolinux/ks.cfg video=efifb:on quiet label check menu label Test this ^media & install Kylin Linux Advanced Server V10 kernel vmlinuz append initrd=initrd.img inst.stage2=hd:LABEL=Kylin-Server-10 rd.live.check video=efifb:on quiet |
这个“Kylin-Server-10”可以任意命名,记得保持一致就好(后面刻盘时候,USB启动盘的名字要改成这个。不然找不到U盘的话需要先在install centos那里按"E",然后使用linux dd 查看U盘设备名,假如是/dev/sda4,确认设备名后重启,再次按E编辑,把"LABEL=Kylin-Server-10"改为/dev/sda4,两边都要改,然后ctrl+X进入安装界面)
在这里,又有两个小坑:
第一,注意LABEL= 后面要跟光盘/U盘的卷标,一个小坑就是,如果你的镜像要拿去windows下刻录(到光盘或者U盘),则卷标必须少于12个字符(windows的要求),否则的话会导致卷标被截断,从而导致第二个问题。
第二,关于ks.cfg的路径,网上可以找到几种写法,一开始我用的是inst.ks=cdrom:/isolinux/ks.cfg, 对于光盘安装,这个自然没有问题。但是如果用的是U盘,就会出现找不到ks.cfg的问题,一种临时的解决方案是,在启动菜单出现的时候,按下tab或者是e 然后对展示出来的加载项进行修改,将cdrom改为U盘的路径。 但是这种方式比较繁琐,也不符合我们自动化安装的理念,所以我们 改用 卷标的方式指定文件位置。这样无论光盘 U盘都可以。但是,就必须注意第一点中提到的问题,如果卷标过长,windows下刻录的时候会被截断,仍然会导致无法找到配置文件。
4、制作ISO
(1) 运行如下命令
mkisofs -o ~/kylin10.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 -V Kylin-Server-10 .
或者
genisoimage -joliet-long -V kylin10 -o kylin10.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -R -J -v -cache-inodes -T -eltorito-alt-boot -e images/efiboot.img -no-emul-boot /newiso #这条命令没测试
(2)生成MD5(虽然不做这一步ISO也能用)
implantisomd5 kylin10.iso
5、附:没遇到过,也没试过,网上摘录的
关于安装过程要注意的点:
(1) 我是在制作CentOS7.4-wedge400.iso后,拷贝到U盘里,然后windows下使用UltraISO软碟通刻盘,刻录完成后U盘名字可能是
“NO NAME”,这时要手动改成之前制作时设置的LABEL,如”EVGLOW“
如果还是不行,则采用以下万能方法:
安装时,在"在install centos"那里按"E",然后删掉"linuxefi /image/pxeboot/vmlinuz"哪一行后面的内容(一般是到quiet结束),追加linux dd 命令查看U盘设备名,按Ctrl+X运行,然后可以看到挂载情况。假如是/dev/sda4,确认设备名后重启,再次按E编辑,把"LABEL=EVGLOW"改为/dev/sda4,前后都要改,然后ctrl+X进入安装界面
(2) 服务器本身没有VGA/HDMI显示器接口使用的是外接显卡,如果安装界面一直黑屏,换一张显卡试试。我遇见过安装好OS后,换一种显卡进不去(一直黑屏)的情况,但是使用SSH可以登录机器,说明OS起来了,再换回原来的显卡也是可以开机的。
可能是显卡生成了多个窗口等原因造成的。
命令解释:
rsync是可以实现增量备份的工具。配合任务计划,rsync能实现定时或间隔同步,配合inotify或sersync,可以实现触发式的实时同步。
-r 即 recursive(递归的、循环的)
-l 同步软链接文件(小写的L)
-p 这个选项的全名是 perserve permissions,顾名思义,就是保持权限
-g -o 这两个选项是一对,用来保持文件的属组(group)和属主(owner)。改变属主和属组,往往要有管理员权限才可以。
-D 原文解释是 preserve devices (root only),从字面意思看,是保持设备文件的原始信息
-a 使用-a选项,就相当于使用了-rlptgoD选项, archive option,中文叫做归档选项。使用-a选项,就表明你希望采取递归方式来同步,且尽可能的保持各个方面的一致性
createrepo 命令用于创建yum源(软件仓库),即为存放于本地特定位置的众多rpm包建立索引,描述各包所需依赖信息,并形成元数据。
-g --groupfile 指定本地软件仓库的组划分,范例如下: createrepo -g comps.xml /path/to/rpms 注意:组文件需要和rpm包放置于同一路径下。
-u --baseurl 指定Base URL的地址 -o --outputdir 指定元数据的输出位置
-x --excludes 指定在形成元数据时需要排除的包 -i --pkglist 指定一个文件,该文件内的包信息将被包含在即将生成的元数据中,格式为每个包信息独占一行,不含通配符、正则,以及范围表达式。
-n --includepkg 通过命令行指定要纳入本地库中的包信息,需要提供URL或本地路径。
-q --quiet 安静模式执行操作,不输出任何信息。 -v --verbose 输出详细信息。
-c --cachedir 指定一个目录,用作存放软件仓库中软件包的校验和信息。 当createrepo在未发生明显改变的相同仓库文件上持续多次运行时,指定cachedir会明显提高其性能。
–update 如果元数据已经存在,且软件仓库中只有部分软件发生了改变或增减, 则可用update参数直接对原有元数据进行升级,效率比重新分析rpm包依赖并生成新的元数据要高很多。
-p --pretty 以整洁的格式输出xml文件。
-d --database 该选项指定使用SQLite来存储生成的元数据,默认项。
mkisofs可将指定的目录与文件做成ISO 9660格式的映像文件,以供刻录光盘
-D或-disable-deep-relocation ISO 9660最多只能处理8层的目录,超过8层的部分,RRIP会自动将它们设置成ISO 9660兼容的格式。使用-D参数可关闭此功能。
-o<映像文件>或-output<映像文件> 指定映像文件的名称
-input-charset utf8 -output-charset utf8,解决中文文件名乱码问题
-b<开机映像文件>或-eltorito-boot<开机映像文件> 指定在制作可开机光盘时所需的开机映像文件。
-c<开机文件名称> 制作可开机光盘时,mkisofs会将开机映像文件中的全-eltorito-catalog<开机文件名称>全部内容作成一个文件
-load-size 4:设置加载扇区数
-boot-info-table:修补启动映像与信息表 Patch boot image with info table
-no-emul-boot Boot image is ‘no emulation’ image 无仿真
-R, -rock Generate Rock Ridge directory information
-J或-joliet 使用Joliet格式的目录与文件名称
-v或-verbose 执行时显示详细的信息。
-V<光盘ID>或-volid<光盘ID> 指定光盘的卷册集ID
-T或-translation-table 建立文件名的转换表,适用于不支持Rock Ridge Extensions的系统上
implantisomd5 – implant an MD5 checksum in an ISO9660 image
This manual page documents briefly the implantisomd5 command. implantisomd5 is a program that embeds an MD5 checksum in an unused section of and ISO9660 (.iso) image. This checksum can later be compared to the .iso, or a block device, using the corresponding checkisomd5 command.
版权声明:本文标题:KylinOS-Server定制制作属于自己的ISO镜像文件 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1729581330a1207466.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论