使用kickstart定制openEuler 24.03 LTS SP1 ISO镜像方法
1.自定义流程
- 明确定制内容,如:0-基础环境gcc等、1-nfs服务、2-关闭防火墙、3-桌面、4-谷歌浏览器、5-远程工具、6-指定版本docker工具
- 准备 ISO 镜像,如:openEuler-24.03-LTS-SP1-x86_64-dvd.iso
- 准备虚拟机VBox,如:VirtualBox-7.1.10
- 准备定制环境:使用VBox安装openEuler镜像,使用小安装
- 定制环境下载安装验证定制包,如:gcc、g++、ukui桌面、google-chrome
- 添加配置ks以及启动项
- 打包ISO镜像
- 验证测试
2.定制ISO
1)安装定制环境
要保证创建环境和自定ISO保持在同一基础上,比如都是最小的安装环境下、对应的配置如用户网络都配置好对应内容。 注意:这里最好按照定制需求,配置当前的VBox的定制环境,定制环境会生成后面需要的ks文件,有些ks配置直接使用就行。





2)配置安装定制环境
VBox系统安装完后,需要配置共享目录、挂载镜像、设挂载镜像本地安装源。注意:共享目录是为了方便与主机传输文件和保存文件;挂载镜像和本地源是为了后需验证软件包。
a)关闭虚拟机网络
注意:避免使用本地源时,安装或下载软件包混乱,分不清是ISO自带还是网络源。

b)挂载镜像
-

-
挂载命令如下:
# 查看设备节点位置
lsblk
# 连续创建 镜像挂载目录、镜像本地源目录、定制目录、共享目录
mkdir -p /mnt/iso /mnt/localrepo /mnt/openEuler /mnt/shared
# 挂载镜像
mount /dev/sr0 /mnt/iso

c)设置镜像本地源如下
# 拷贝镜像中的软件包和数据元
cp /mnt/iso/{Packages,repodata} /mnt/localrepo/ -fr
# 关闭默认源,默认源是网络源
mv /etc/yum.repos.d/openEuler.repo /etc/yum.repos.d/openEuler.repo.bk
# 设置本地镜像源
cat > /etc/yum.repos.d/local.repo <<EOF
[local]
name=localrepo
baseurl=file:///mnt/localrepo/
enabled=1
gpgcheck=0
gpgkey=file:///mnt/localrepo/
EOF



d)拷贝定制基础数据
cp /mnt/iso/* /mnt/openEuler -fr

e)共享目录设置
-
安装增强工具
-
解挂 /mnt/iso, 设备选择安装增强,再挂载此增强工具镜像到 /mnt/iso,拷贝 /mnt/iso/ 下的数据到 /mnt/tools/ 下, 。 注意:注意顺序,/mnt/iso 就是为了挂载相关ISO镜像内容用的。


-
安装增强工具依赖并记录安装的软件包名 gcc make perl kernel-headers kernel-devel tar,注意:软件包名一定要记住,包含他的出处比如当前的所有包都在ISO中自带。

-
记录安装的软件到 install 文件中
# install文件 gcc make perl kernel-headers kernel-devel tar -
设置共享目录,安装增强工具后即可生效

# 安装增强工具 /mnt/tools/VBoxLinuxAdditions.run
-
3)下载、验证、安装软件包
这里包括 ISO 自带的软件包,如:gcc、gcc-c++、nfs;ISO 非自带但官方指定源 [ EPOL、everything ] 带的软件包,如:ukui桌面;ISO和官方源都不带的软件包,如:指定版本的docker、todesk、向日葵。
a)软件包验证
-
获取 rpm 软件真实包名
rpm -qip /mnt/openEuler/Packages/vim-enhanced-9.0.2092-15.oe2403sp1.x86_64.rpm
-
获取 rpm 软件包依赖和真实包名
# 使用 dnf install pkg.rpm 可以查看依赖和真实包名是否可以安装 # 使用 rpm -ivh pkg.rpm 也可查看依赖是否可以安装

-
ISO本地包:可以通过dnf install或者dnf search 安装和查找的

-
官方网络包:可以通过dnf install或者dnf search 安装不了和查找不到,且在官方有记录的


-
自定义下载包:在其他软件非官方且无官方记录的
b)软件下载和安装
注意:下载以及安装一个软件包成功到定制环境就需要记录到install文件中,也是同步验证安装问题。
-
根据需要的软件列出安装列表:
gcc 工具 g++ 工具 python3-devel 工具 kernel-headers 工具 kernel-devel 工具 tar 工具 vim 工具 ifconfig 工具 telnet 工具 ffmpeg 工具 nfs 服务 ntp 服务 ukui 桌面 google-chrome-stable 浏览器 todesk 服务 向日葵 服务 docker 服务 -
根据需要的软件找到软件包和依赖名并记录:
-
根据验证方法ISO本地存在可使用的软件真实包名列表:
gcc gcc-c++ python3-devel kernel-devel # 已经包含kernel-headers依赖 tar vim-enhanced # vim net-tools # ifconfig telnet ffmpeg nfs-utils # nfs 服务 ntp # ntp 服务 -
根据验证方法:ukui 桌面不在ISO本地,在官方文档有描述,从EPOL网络源中找到并下载ukui-2.0.2-20.oe2403sp1.noarch.rpm经过验证方法找到依赖。

注意:当出现很多依赖时可以开启虚拟机网络,打开openEuler.repo.bk系统的默认网络源,使用如下命令下载到当前目录。下载完需要关闭系统的默认网络源并关闭虚拟机网络以免影响后面
dnf download ukui --resolve

到此时这个真实包名列表为:
gcc gcc-c++ python3-devel kernel-devel # 已经包含kernel-headers依赖 tar vim-enhanced # vim net-tools # ifconfig telnet ffmpeg nfs-utils # nfs 服务 ntp # ntp 服务 ukui -
根据需求在对应第三官方下载谷歌浏览器、todesk、向日葵软件rpm包,根据上一步方式获取真实包名列表:
gcc gcc-c++ python3-devel kernel-devel # 已经包含kernel-headers依赖 tar vim-enhanced # vim net-tools # ifconfig telnet ffmpeg nfs-utils # nfs 服务 ntp # ntp 服务 ukui google-chrome-stable todesk #sunloginclient注意:这里向日葵软件包虽然提供但是没有支持openEuler系统所以后期安装需要特殊处理。所以向日葵真实安装包名被注释处理,注意如果是其他软件有可能有依赖且不在本地ISO中需要单独从openEuler的官方网络源中下载下来。
-
根据需求在对应docker软件rpm包可以从centos的相关源中下载rpm包,根据验证方式获取真实包名和依赖列表:
containerd.io docker-buildx-plugin docker-ce docker-ce-cli docker-ce-rootless-extras docker-compose-plugin对应依赖缺少如下,我们可以从openEuler的官方网络源中下载下来:

-
最终将所有安装软件的真实包名覆盖填写到install文件中: 注意:这一步记录很重要,后面需要对应配置
# install gcc gcc-c++ python3-devel kernel-devel # 已经包含kernel-headers依赖 tar vim-enhanced # vim net-tools # ifconfig telnet ffmpeg nfs-utils # nfs 服务 ntp # ntp 服务 ukui google-chrome-stable todesk #sunloginclient containerd.io docker-buildx-plugin docker-ce docker-ce-cli docker-ce-rootless-extras docker-compose-plugin -
最终将所有下载的安装软件rpm包和依赖拷贝到要定制的 /mnt/openEuler/Packages/ 文件夹中:注意:这一步拷贝很重要,后面需要对应生成定制的ISO本地源
-
4)定制ISO
a)定制ISO repo源
-
将整合的 /mnt/openEuler/Packages/ 更新 /mnt/openEuler/repodata/ 数据 注意:此步骤很重要,否则生成的ISO中无法找到软件包安装
# 安装repo源生成工具 dnf install createrepo_c # 进入目录 /mnt/openEuler/ cd /mnt/openEuler # 更新 /mnt/openEuler/repodata/ 数据 createrepo -g repodata/normal.xml ./
b)定制 EFI 和 Legacy 两种模式的启动项
-
EFI 配置 /mnt/openEuler/EFI/BOOT/grub.cfg
# 设置默认启动项为第一个 set default="0" ... # 修改第一个启动项内容名称 加入 ks.cfg 配置 menuentry 'Install openEuler 24.03-LTS-SP1-CR' --class openEuler --class gnu-linux --class gnu --class os { linuxefi /images/pxeboot/vmlinuz inst.stage2=hd:LABEL=openEuler-24.03-LTS-SP1-x86_64 inst.ks=hd:LABEL=openEuler-24.03-LTS-SP1-x86_64:/isolinux/ks.cfg initrdefi /images/pxeboot/initrd.img } ... -
Legacy 配置 /mnt/openEuler/isolinux/isolinux.cfg
... # 修改第一个启动项内容名称 加入 ks.cfg 配置 label linux menu label ^Install openEuler 24.03-LTS-SP1-CR20250720 # 设置此标签为默认启动,注意其他标签中是否有此设置若果有则删除掉 menu default kernel vmlinuz append initrd=initrd.img inst.stage2=hd:LABEL=openEuler-24.03-LTS-SP1-x86_64 inst.ks=hd:LABEL=openEuler-24.03-LTS-SP1-x86_64:/isolinux/ks.cfg ...
c)定制kickstart文件
-
将 /root/anaconda-ks.cfg 拷贝到 /mnt/openEuler/isolinux/ks.cfg 注意:自己定制kickstart文件是定制环境的配置/root/anaconda-ks.cfg可以作为参考修改
-
以此当前需求给出以下配置
# Generated by Anaconda 36.16.5 # Generated by pykickstart v3.48 # version=DEVEL # 使用界面化安装 graphical # 键盘布局 keyboard --vckeymap=cn --xlayouts='cn' # 安装系统的语言 lang zh_CN.UTF-8 # 安装的软件仓库 #url --url="hd:LABEL=openEuler-24.03-LTS-x86_64" #repo --name="localrepo" --baseurl=file:///localrepo/ --cost=100 # 安装前处理ks网卡问题 %pre #!/bin/bash DEVICE=$(blkid -L openEuler-24.03-LTS-SP1-x86_64 || findfs LABEL=openEuler-24.03-LTS-SP1-x86_64) sed -i "/^harddrive/c\harddrive --dir= --partition=$DEVICE" /run/install/ks.cfg # 获取本地网卡名称配置复写入ks.cfg中默认识别到的第一网口为11.88 INTERFACE=$(ls /sys/class/net | grep -v lo) COUNTER=0 for IFACE in $INTERFACE; do if [ "$COUNTER" == "0" ] then sed -i "/^network --device=NETDEV/c\network --device=$IFACE --bootproto=static --ip=192.168.11.88 --netmask=255.255.255.0 --gateway=192.168.11.1 --ipv6=auto --activate" /run/install/ks.cfg else echo "===================== $IFACE ===========================" fi COUNTER=$((COUNTER + 1)) done %end # 指定安装介质和位置 harddrive --dir= --partition=LABEL=openEuler-24.03-LTS-SP1-x86_64 # 此注释为复写网络配置使用勿删 network --device=NETDEV --bootproto=static --ip=192.168.11.88 --netmask=255.255.255.0 --gateway=192.168.11.1 # 从软件源中安装环境包和软件包 %packages # 环境包 软件依赖的基础环境 @^minimal-environment gcc gcc-c++ net-tools ffmpeg telnet nfs-utils python3-devel kernel-devel tar ntp vim-enhanced ukui todesk google-chrome-stable containerd.io docker-buildx-plugin docker-ce docker-ce-cli docker-ce-rootless-extras docker-compose-plugin %end # Run the Setup Agent on first boot firstboot --enable # 系统安装磁盘处理 # Generated using Blivet version 3.8.2 ignoredisk --only-use=sda autopart # Partition clearing information clearpart --none --initlabel # 系统时区选择 timezone Asia/Shanghai --utc # root 用户密码设置 admin rootpw --iscrypted $6$HO1hR2AokOcHfloo$yMeB7wNGQBch.cJkxndKJBTcUFz3HIVSu7Kxg0Jqj4Ra.2DTfE5gaebkV./eBrTsA6yeCxEGohBpFhBNpxBU6/ # 添加 corerain 用户赋予超级权权限,密码设置corerain user --groups=wheel --name=corerain --password=$6$fGCE3krhwabdJdK3$W7z86rZtpl9dsFSBV9E0xPCogQHZEBJIAGVs9plM3m5MLRQytiDjY4GfPSFmvCXG2uw6rk74eo4jo9WEnfLAw1 --iscrypted --gecos="corerain" # 软件安装的后处理 %post --log=/root/ks-post.log #!/bin/bash mv /etc/yum.repos.d/openEuler.repo /etc/yum.repos.d/openEuler.repo.bk # 添加本地源包地址加速无网安装 cat > /etc/yum.repos.d/local.repo <<EOF [local] name=localrepo baseurl=file:///mnt/iso/ enabled=1 gpgcheck=0 gpgkey=file:///mnt/iso/ EOF # 添加南京源包地址加速有网安装 cat > /etc/yum.repos.d/NanJing.repo.bk <<EOF [NanJing] name=NanJing openEuler Repository baseurl=https://mirror.accum.se/mirror/openeuler.org/openEuler-24.03-LTS-SP1/OS/x86_64/ enabled=1 gpgcheck=0 gpgkey=https://mirror.accum.se/mirror/openeuler.org/openEuler-24.03-LTS-SP1/OS/x86_64/RPM-GPG-KEY-openEuler EOF # 全局排除内核更新 echo "exclude=kernel* kernel-* kmod-*" >> /etc/dnf/dnf.conf # 关闭 防火墙 服务 systemctl stop firewalld systemctl disable firewalld # 开启 docker 服务 systemctl enable --now docker systemctl start docker # 将corerain加入用户组 usermod -aG docker corerain # 挂载启动盘 DEVICE=$(blkid -L openEuler-24.03-LTS-SP1-x86_64 || findfs LABEL=openEuler-24.03-LTS-SP1-x86_64) echo "Found the $DEVICE" >> /root/ks-port.log mkdir -p /mnt/iso mount -o ro "$DEVICE" /mnt/iso # 向日葵特殊处理,并未安装成功 dnf install -y sunloginclient #rpm2cpio /mnt/iso/Packages/SunloginClient_15.2.0.63064_x86_64.rpm | (cd / && cpio -idmv) sed -i "s/CentOS/openEuler/g" /usr/local/sunlogin/scripts/common.sh sed -i "/rpm\ -q\ centos-release/c\os_version=8" /usr/local/sunlogin/scripts/common.sh cd /usr/local/sunlogin/ && bash rpminstall.sh # docker-compose 安装 cp -fr /mnt/iso/Packages/docker-compose-linux-x86_64 /usr/local/bin/docker-compose cp -fr /mnt/iso/Packages/docker-compose-linux-x86_64 /usr/bin/docker-compose chmod a+x /usr/bin/docker-compose /usr/local/bin/docker-compose # 解挂载 umount /mnt/iso # N460 NFS 配置 echo "/data/algorithms/ *(rw,sync,no_subtree_check)" >> /etc/exports # 启动并设置 NFS 开机启动 systemctl enable --now nfs-server # 启动图形化桌面 systemctl set-default graphical.target %end
d)定制生成ISO
-
将定制配置好的 /mnt/openEuler/ 生成 镜像名为 my ,标签为 openEuler-24.03-LTS-SP1-x86_64,可支持EFI和Legacy模式的 iso 文件。 注意:使用以上定制配置时不要修改标签
# 安装ISO生成工具 dnf install genisoimage # 进入目录 /mnt/openEuler/ cd /mnt/openEuler/ # 生成ISO mkisofs -V "openEuler-24.03-LTS-SP1-x86_64" -o ../my.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -sysid "LINUX" -A "Base openEuler-24.03-LTS-SP1-x86_64 without ukui desktop and desktop software" -eltorito-alt-boot -e images/efiboot.img -no-emul-boot -R -J -v -T ./
5)测试ISO




1996

被折叠的 条评论
为什么被折叠?



