使用kickstart定制openEuler 24.03 LTS SP1 ISO镜像方法

使用kickstart定制openEuler 24.03 LTS SP1 ISO镜像方法

1.自定义流程

开始
明确定制内容
准备ISO镜像
准备虚拟机VBox
准备定制环境
定制环境下载安装验证定制包
配置ks/配置启动项
打包ISO镜像
验证测试
结束
  • 明确定制内容,如: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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值