From 9d1293bd0ab61b6a3b0fbbe5b6426178cbbd2cec Mon Sep 17 00:00:00 2001 From: hemiao Date: Wed, 10 Dec 2025 15:02:19 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=8Edocs=E4=BB=93=E5=BA=93=E5=A4=8D?= =?UTF-8?q?=E5=88=B62403LTSSP2=E5=86=85=E5=AE=B9=E5=88=B02403LTSSP3?= =?UTF-8?q?=E5=88=86=E6=94=AF=E9=87=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/en/_toc.yaml | 6 + docs/en/figures/flowchart.png | Bin 0 -> 21270 bytes docs/en/figures/lack_pack.png | Bin 0 -> 33182 bytes docs/en/isocut_user_guide.md | 356 +++++++++++++++++++++ docs/en/public_sys-resources/icon-note.gif | Bin 0 -> 394 bytes docs/zh/_toc.yaml | 6 + docs/zh/figures/flowchart.png | Bin 0 -> 21270 bytes docs/zh/figures/lack_pack.png | Bin 0 -> 33182 bytes docs/zh/isocut_user_guide.md | 355 ++++++++++++++++++++ docs/zh/public_sys-resources/icon-note.gif | Bin 0 -> 394 bytes 10 files changed, 723 insertions(+) create mode 100644 docs/en/_toc.yaml create mode 100644 docs/en/figures/flowchart.png create mode 100644 docs/en/figures/lack_pack.png create mode 100644 docs/en/isocut_user_guide.md create mode 100644 docs/en/public_sys-resources/icon-note.gif create mode 100644 docs/zh/_toc.yaml create mode 100644 docs/zh/figures/flowchart.png create mode 100644 docs/zh/figures/lack_pack.png create mode 100644 docs/zh/isocut_user_guide.md create mode 100644 docs/zh/public_sys-resources/icon-note.gif diff --git a/docs/en/_toc.yaml b/docs/en/_toc.yaml new file mode 100644 index 0000000..017bfc9 --- /dev/null +++ b/docs/en/_toc.yaml @@ -0,0 +1,6 @@ +label: isocut User Guide +isManual: true +description: Customize openEuler ISO images. +sections: + - label: isocut User Guide + href: ./isocut_user_guide.md diff --git a/docs/en/figures/flowchart.png b/docs/en/figures/flowchart.png new file mode 100644 index 0000000000000000000000000000000000000000..e4fecb8b310f204d6cfd07449ccc3c93d1badd51 GIT binary patch literal 21270 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 X@4L`5c?#MHM8+U%jJ;)U5F_Tf22 literal 0 HcmV?d00001 diff --git a/docs/en/figures/lack_pack.png b/docs/en/figures/lack_pack.png new file mode 100644 index 0000000000000000000000000000000000000000..a4b7f1da15da70f63a86aae360e89017c2b98f2d GIT binary patch literal 33182 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 + +3. Create a **/etc/yum.repos.d/local.repo** file to configure the Yum repository. The following is an example of the configuration file. **baseurl** is the directory for mounting the ISO image. + + ```shell + [local] + name=local + baseurl=file:///home/isocut_mount + gpgcheck=0 + enabled=1 + ``` + +4. Run the following command as the **root** user to mount the image to the **/home/isocut_mount** directory (ensure that the mount directory is the same as **baseurl** configured in the **repo** file) as the Yum repository: + + ```shell + sudo mount -o loop /home/isocut_iso/openEuler-24.03-LTS-SP1-everything-aarch64-dvd.iso /home/isocut_mount + ``` + +5. Make the Yum repository take effect. + + ```shell + yum clean all + yum makecache + ``` + +6. Install the image tailoring and customization tool as the **root** user. + + ```shell + sudo yum install -y isocut + ``` + +7. Run the following command as the **root** user to verify that the tool has been installed successfully: + + ```shell + $ sudo isocut -h + Checking input ... + usage: isocut [-h] [-t temporary_path] [-r rpm_path] [-k file_path] source_iso dest_iso + + Cut openEuler iso to small one + + positional arguments: + source_iso source iso image + dest_iso destination iso image + + optional arguments: + -h, --help show this help message and exit + -t temporary_path temporary path + -r rpm_path extern rpm packages path + -k file_path kickstart file + ``` + +## Tailoring and Customizing an Image + +This section describes how to use the image tailoring and customization tool to create an image by tailoring or adding RPM packages to an openEuler image. + +### Command Description + +#### Format + +Run the `isocut` command to use the image tailoring and customization tool. The command format is as follows: + +**isocut** \[ --help \| -h \] \[ -t \ ] \[ -r \ ] \[ -k \ ] \ \ + +#### Parameter Description + +| Parameter | Mandatory | Description | +| ---------------- | --------- | ----------------------------------------------------------------------------------------------------------------------------------- | +| --help \| -h | No | Queries the help information about the command. | +| -t \<*temp_path*> | No | Specifies the temporary directory *temp_path* for running the tool, which is an absolute path. The default value is **/tmp**. | +| -r \<*rpm_path*> | No | Specifies the path of the RPM packages to be added to the ISO image. | +| -k \<*file_path*> | No | Specifies the kickstart template path if kickstart is used for automatic installation. | +| *source_iso* | Yes | Path and name of the ISO source image to be tailored. If no path is specified, the current path is used by default. | +| *dest_iso* | Yes | Specifies the path and name of the new ISO image created by the tool. If no path is specified, the current path is used by default. | + +### Software Package Source + +The RPM packages of the new image can be: + +- Packages contained in an official ISO image. In this case, the RPM packages to be installed are specified in the configuration file **/etc/isocut/rpmlist**. The configuration format is *software_package_name.architecture*. For example, **kernel.aarch64**. + +- Specified in addition. In this case, use the `-r` parameter to specify the path in which the RPM packages are stored when running the `isocut` command and add the RPM package names to the **/etc/isocut/rpmlist** configuration file. (See the name format above.) + + > [!NOTE]NOTE + > + > - When customizing an image, if an RPM package specified in the configuration file cannot be found, the RPM package will not be added to the image. + > - If the dependency of the RPM package is incorrect, an error may be reported when running the tailoring and customization tool. + +### kickstart Functions + +You can use kickstart to install images automatically by using the `-k` parameter to specify a kickstart file when running the `isocut` command. + +The isocut tool provides a kickstart template (**/etc/isocut/anaconda-ks.cfg**). You can modify the template as required. + +#### Modifying the kickstart Template + +If you need to use the kickstart template provided by the isocut tool, perform the following modifications: + +- Configure the root user password and the GRUB2 password in the **/etc/isocut/anaconda-ks.cfg** file. Otherwise, the automatic image installation will pause during the password setting process, waiting for you to manually enter the passwords. +- If you want to specify additional RPM packages and use kickstart for automatic installation, specify the RPM packages in the **%packages** field in both the **/etc/isocut/rpmlist** file and the kickstart file. + +See the next section for details about how to modify the kickstart file. + +##### Configuring Initial Passwords + +###### Setting the Initial Password of the **root** User + +Set the initial password of the **root** user as follows in the **/etc/isocut/anaconda-ks.cfg** file. Replace **${pwd}** with the encrypted password. + +```shell +rootpw --iscrypted ${pwd} +``` + +Obtain the initial password of the **root** user as follows (**root** permissions are required): + +1. Add a user for generating the password, for example, **testUser**. + + ```shell + sudo useradd testUser + ``` + +2. Set the password for the **testUser** user. Run the following command to set the password as prompted: + + ```shell + $ sudo passwd testUser + Changing password for user testUser. + New password: + Retype new password: + passwd: all authentication tokens updated successfully. + ``` + +3. View the **/etc/shadow** file to obtain the encrypted password. The encrypted password is the string between the two colons (:) following the **testUser** user name. (******* is used as an example.) + + ```shell + $ sudo cat /etc/shadow | grep testUser + testUser:***:19052:0:90:7:35:: + ``` + +4. Run the following command to replace the **pwd** field in the **/etc/isocut/anaconda-ks.cfg** file with the encrypted password (replace __***__ with the actual password): + + ```shell + rootpw --iscrypted *** + ``` + +###### Configuring the Initial GRUB2 Password + +Add the following configuration to the **/etc/isocut/anaconda-ks.cfg** file to set the initial GRUB2 password: Replace **${pwd}** with the encrypted password. + +```shell +%addon com_huawei_grub_safe --iscrypted --password='${pwd}' +%end +``` + +> ![](./public_sys-resources/icon-note.gif)NOTE: +> +> - The **root** permissions are required for configuring the initial GRUB password. +> - The default user corresponding to the GRUB password is **root**. +> +> - The `grub2-set-password` command must exist in the system. If the command does not exist, install it in advance. + +1. Run the following command and set the GRUB2 password as prompted: + + ```shell + $ sudo grub2-set-password -o ./ + Enter password: + Confirm password: + grep: .//grub.cfg: No such file or directory + WARNING: The current configuration lacks password support! + Update your configuration with grub2-mkconfig to support this feature. + ``` + +2. After the command is executed, the **user.cfg** file is generated in the current directory. The content starting with **grub.pbkdf2.sha512** is the encrypted GRUB2 password. + + ```shell + $ sudo cat user.cfg + GRUB2_PASSWORD=grub.pbkdf2.sha512.*** + ``` + +3. Add the following information to the **/etc/isocut/anaconda-ks.cfg** file. Replace ******* with the encrypted GRUB2 password. + + ```shell + %addon com_huawei_grub_safe --iscrypted --password='grub.pbkdf2.sha512.***' + %end + ``` + +##### Configuring the %packages Field + +If you want to specify additional RPM packages and use kickstart for automatic installation, specify the RPM packages in the **%packages** field in both the **/etc/isocut/rpmlist** file and the kickstart file. + +This section describes how to specify RPM packages in the **/etc/isocut/anaconda-ks.cfg** file. + +The default configurations of **%packages** in the **/etc/isocut/anaconda-ks.cfg** file are as follows: + +```shell +%packages --multilib --ignoremissing +acl.aarch64 +aide.aarch64 +...... +NetworkManager.aarch64 +%end +``` + +Add specified RPM packages to the **%packages** configurations in the following format: + +*software_package_name.architecture*. For example, **kernel.aarch64**. + +```shell +%packages --multilib --ignoremissing +acl.aarch64 +aide.aarch64 +...... +NetworkManager.aarch64 +kernel.aarch64 +%end +``` + +### Operation Guide + +> [!NOTE]NOTE +> +> - Do not modify or delete the default configuration items in the **/etc/isocut/rpmlist** file. +> - All `isocut` operations require **root** permissions. +> - The source image to be tailored can be a basic image or **everything** image. In this example, the basic image **openEuler-{version}-aarch64-dvd.iso** is used. +> - In this example, assume that the new image is named **new.iso** and stored in the **/home/result** directory, the temporary directory for running the tool is **/home/temp**, and the additional RPM packages are stored in the **/home/rpms** directory. + +1. Open the configuration file **/etc/isocut/rpmlist** and specify the RPM packages to be installed (from the official ISO image). + + ```shell + sudo vi /etc/isocut/rpmlist + ``` + +2. Ensure that the space of the temporary directory for running the image tailoring and customization tool is greater than 8 GB. The default temporary directory is**/tmp**. You can also use the `-t` parameter to specify another directory as the temporary directory. The path of the directory must be an absolute path. In this example, the **/home/temp** directory is used. The following command output indicates that the available drive space of the **/home** directory is 38 GB, which meets the requirements. + + ```shell + $ df -h + Filesystem Size Used Avail Use% Mounted on + devtmpfs 1.2G 0 1.2G 0% /dev + tmpfs 1.5G 0 1.5G 0% /dev/shm + tmpfs 1.5G 23M 1.5G 2% /run + tmpfs 1.5G 0 1.5G 0% /sys/fs/cgroup + /dev/mapper/openeuler_openeuler-root 69G 2.8G 63G 5% / + /dev/sda2 976M 114M 796M 13% /boot + /dev/mapper/openeuler_openeuler-home 61G 21G 38G 35% /home + ``` + +3. Tailor and customize the image. + + **Scenario 1**: All RPM packages of the new image are from the official ISO image. + + ```shell + $ sudo isocut -t /home/temp /home/isocut_iso/openEuler-{version}-aarch64-dvd.iso /home/result/new.iso + Checking input ... + Checking user ... + Checking necessary tools ... + Initing workspace ... + Copying basic part of iso image ... + Downloading rpms ... + Finish create yum conf + finished + Regenerating repodata ... + Checking rpm deps ... + Getting the description of iso image ... + Remaking iso ... + Adding checksum for iso ... + Adding sha256sum for iso ... + ISO cutout succeeded, enjoy your new image "/home/result/new.iso" + isocut.lock unlocked ... + ``` + + If the preceding information is displayed, the custom image **new.iso** is successfully created. + + **Scenario 2**: The RPM packages of the new image are from the official ISO image and additional packages in **/home/rpms**. + + ```shell + sudo isocut -t /home/temp -r /home/rpms /home/isocut_iso/openEuler-24.03-LTS-SP1-aarch64-dvd.iso /home/result/new.iso + ``` + + **Scenario 3**: The kickstart file is used for automatic installation. You need to modify the **/etc/isocut/anaconda-ks.cfg** file. + + ```shell + sudo isocut -t /home/temp -k /etc/isocut/anaconda-ks.cfg /home/isocut_iso/openEuler-24.03-LTS-SP1-aarch64-dvd.iso /home/result/new.iso + ``` + +## FAQ + +### 1. Default RPM Package List Causes System Installation Failure + +#### Context + +When using isocut to trim ISO images, users specify required software packages via the configuration file **/etc/isocut/rpmlist**. + +Since different OS versions may have reduced package sets, the default configuration only includes the kernel package to ensure successful ISO trimming. This guarantees the default configuration always produces a valid ISO image. + +#### Symptom + +The trimmed ISO image created with default settings may be successfully generated but fail during system installation. + +The installation reports missing packages as shown in the error screenshot: + +![](./figures/lack_pack.png) + +#### Possible Causes + +The default RPM package list lacks essential packages required for system installation. The specific missing packages vary across OS versions, as shown in the error message during installation. + +#### Solution + +1. Add missing packages: + + 1. Identify required RPM packages from the installation error message. + 2. Append these packages to **/etc/isocut/rpmlist**. + 3. Rebuild the ISO image. + + Example modified **rpmlist** configuration based on the reported error: + + ```shell + $ cat /etc/isocut/rpmlist + kernel.aarch64 + lvm2.aarch64 + chrony.aarch64 + authselect.aarch64 + shim.aarch64 + efibootmgr.aarch64 + grub2-efi-aa64.aarch64 + dosfstools.aarch64 + ``` diff --git a/docs/en/public_sys-resources/icon-note.gif b/docs/en/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda GIT binary patch literal 394 zcmZ?wbhEHblx7fPSjxcg=ii?@_wH=jwxy=7CMGH-B`L+l$wfv=#>UF#$gv|VY%C^b zCQFtrnKN(Bo_%|sJbO}7RAORe!otL&qo<>yq_Sq+8Xqqo5h0P3w3Lvb5E(g{p01vl zxR@)KuDH0l^z`+-dH3eaw=XqSH7aTIx{kzVBN;X&hha0dQSgWuiw0NWUvMRmkD|> literal 0 HcmV?d00001 diff --git a/docs/zh/_toc.yaml b/docs/zh/_toc.yaml new file mode 100644 index 0000000..59c80a8 --- /dev/null +++ b/docs/zh/_toc.yaml @@ -0,0 +1,6 @@ +label: isocut 使用指南 +isManual: true +description: 对 openEuler 光盘镜像进行裁剪定制 +sections: + - label: isocut 使用指南 + href: ./isocut_user_guide.md diff --git a/docs/zh/figures/flowchart.png b/docs/zh/figures/flowchart.png new file mode 100644 index 0000000000000000000000000000000000000000..e4fecb8b310f204d6cfd07449ccc3c93d1badd51 GIT binary patch literal 21270 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 X@4L`5c?#MHM8+U%jJ;)U5F_Tf22 literal 0 HcmV?d00001 diff --git a/docs/zh/figures/lack_pack.png b/docs/zh/figures/lack_pack.png new file mode 100644 index 0000000000000000000000000000000000000000..a4b7f1da15da70f63a86aae360e89017c2b98f2d GIT binary patch literal 33182 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 + +3. 创建文件 /etc/yum.repos.d/local.repo,配置对应 yum 源。配置内容参考如下,其中 baseurl 是用于挂载 ISO 镜像的目录。 + + ``` shell script + [local] + name=local + baseurl=file:///home/isocut_mount + gpgcheck=0 + enabled=1 + ``` + +4. 使用 root 权限,挂载光盘镜像到 /home/isocut_mount 目录(请与上述 repo 文件中配置的 baseurl 保持一致)作为 yum 源。参考命令如下: + + ```shell + sudo mount -o loop /home/isocut_iso/openEuler-24.03-LTS-SP3-everything-aarch64-dvd.iso /home/isocut_mount + ``` + +5. 使 yum 源生效。 + + ```shell + yum clean all + yum makecache + ``` + +6. 使用 root 权限,安装镜像裁剪定制工具。 + + ```shell + sudo yum install -y isocut + ``` + +7. 使用 root 权限,确认工具已安装成功。 + + ```shell + $ sudo isocut -h + Checking input ... + usage: isocut [-h] [-t temporary_path] [-r rpm_path] [-k file_path] source_iso dest_iso + + Cut openEuler iso to small one + + positional arguments: + source_iso source iso image + dest_iso destination iso image + + optional arguments: + -h, --help show this help message and exit + -t temporary_path temporary path + -r rpm_path extern rpm packages path + -k file_path kickstart file + ``` + +## 裁剪定制镜像 + +此处介绍如何使用镜像裁剪定制工具基于 openEuler 光盘镜像裁剪或添加额外 RPM 软件包制作新镜像的方法。 + +### 命令介绍 + +#### 命令格式 + +镜像裁剪定制工具通过 isocut 命令执行功能。命令的使用格式为: + +**isocut** [ --help | -h ] [ -t \<*temp_path*> ] [ -r \<*rpm_path*> ] [ -k \<*file_path*> ] \< *source_iso* > \< *dest_iso* > + +#### 参数说明 + +| 参数 | 是否必选 | 参数含义 | +| ---------------- | -------- | ------------------------------------------------------------ | +| --help \| -h | 否 | 查询命令的帮助信息。 | +| -t \<*temp_path*> | 否 | 指定工具运行的临时目录 *temp_path*,其中 *temp_path* 为绝对路径。默认为 /tmp 。 | +| -r \<*rpm_path*> | 否 | 用户需要额外添加到 ISO 镜像中的 RPM 包路径。 | +| -k \<*file_path*> | 否 | 用户需要使用 kickstart 自动安装,指定 kickstart 模板路径。 | +| *source_iso* | 是 | 用于裁剪的 ISO 源镜像所在路径和名称。不指定路径时,默认当前路径。 | +| *dest_iso* | 是 | 裁剪定制生成的 ISO 新镜像存放路径和名称。不指定路径时,默认当前路径。 | + +### 软件包来源 + +新镜像的 RPM 包来源有: + +- 原有 ISO 镜像。该情况通过配置文件 /etc/isocut/rpmlist 指定需要安装的 RPM 软件包,配置格式为 "软件包名.对应架构",例如:kernel.aarch64 。 + +- 额外指定。执行 **isocut** 时使用 -r 参数指定软件包所在路径,并将添加的 RPM 包按上述格式添加到配置文件 /etc/isocut/rpmlist 中。 + + >![](./public_sys-resources/icon-note.gif) **说明:** + > + >- 裁剪定制镜像时,若无法找到配置文件中指定的 RPM 包,则镜像中不会添加该 RPM 包。 + >- 若 RPM 包的依赖有问题,则裁剪定制镜像时可能会报错。 + +### kickstart 功能介绍 + +用户需要实现镜像自动化安装,可以通过 kickstart 的方式。在执行 **isocut** 时使用 -k 参数指定 kickstart 文件。 + +isocut 为用户提供了 kickstart 模板,路径是 /etc/isocut/anaconda-ks.cfg,用户可以基于该模板修改。 + +#### 修改 kickstart 模板 + +若用户需要使用 isocut 工具提供的 kickstart 模板,需要修改以下内容: + +- 必须在文件 /etc/isocut/anaconda-ks.cfg 中配置 root 和 grub2 的密码。否则镜像自动化安装会卡在设置密码的环节,等待用户手动输入密码。 +- 如果要添加额外 RPM 包,并使用 kickstart 自动安装,则在 /etc/isocut/rpmlist 和 kickstart 文件的 %packages 字段都要指定该 RPM 包。 + +接下来介绍 kickstart 文件详细修改方法。 + +##### 配置初始密码 + +###### 配置 root 初始密码 + +/etc/isocut/anaconda-ks.cfg 中 root 初始密码的默认配置如下,其中 ${pwd} 需要替换成用户实际的加密密文: + +```shell +rootpw --iscrypted ${pwd} +``` + +这里给出设置 root 初始密码的方法(需使用 root 权限)。 + +1. 添加用于生成密码的用户,此处假设 testUser。 + + ``` shell script + $ sudo useradd testUser + ``` + +2. 设置 testUser 用户的密码。参考命令如下,根据提示设置密码。 + + ``` shell script + $ sudo passwd testUser + Changing password for user testUser. + New password: + Retype new password: + passwd: all authentication tokens updated successfully. + ``` + +3. 查看 /etc/shadow 文件,获取加密密码(用户 testUser 后,两个 : 间的字符串,此处使用 *** 代替)。 + + ``` shell script + $ sudo cat /etc/shadow | grep testUser + testUser:***:19052:0:90:7:35:: + ``` + +4. 拷贝上述加密密码替换 /etc/isocut/anaconda-ks.cfg 中的 pwd 字段,如下所示(请用实际内容替换 *** )。 + + ``` shell script + rootpw --iscrypted *** + ``` + +###### 配置 grub2 初始密码 + +/etc/isocut/anaconda-ks.cfg 文件中添加以下配置,配置 grub2 初始密码。其中 ${pwd} 需要替换成用户实际的加密密文。 + +```shell +%addon com_huawei_grub_safe --iscrypted --password='${pwd}' +%end +``` + +> ![](./public_sys-resources/icon-note.gif)说明: +> +> - 配置 grub 初始密码需要使用 root 权限。 +> - grub 密码对应的默认用户为 root 。 +> +> - 系统中需有 grub2-set-password 命令,若不存在,请提前安装该命令。 + +1. 执行如下命令,根据提示设置 grub2 密码。 + + ```shell + $ sudo grub2-set-password -o ./ + Enter password: + Confirm password: + grep: .//grub.cfg: No such file or directory + WARNING: The current configuration lacks password support! + Update your configuration with grub2-mkconfig to support this feature. + ``` + +2. 命令执行完成后,会在当前目录生成 user.cfg 文件,grub.pbkdf2.sha512 开头的内容即 grub2 加密密码。 + + ```shell + $ sudo cat user.cfg + GRUB2_PASSWORD=grub.pbkdf2.sha512.*** + ``` + +3. 复制上述密文,并在 /etc/isocut/anaconda-ks.cfg 文件中增加如下配置。 + + ```shell + %addon com_huawei_grub_safe --iscrypted --password='grub.pbkdf2.sha512.***' + %end + ``` + +##### 配置 %packages 字段 + +如果需要添加额外 RPM 包,并使用 kickstart 自动安装,需要在 /etc/isocut/rpmlist 和 kickstart 文件的 %packages 字段都指定该 RPM 包。 + +此处介绍在 /etc/isocut/anaconda-ks.cfg 文件中添加 RPM 包。 + +/etc/isocut/anaconda-ks.cfg 文件的 %packages 默认配置如下: + +```shell +%packages --multilib --ignoremissing +acl.aarch64 +aide.aarch64 +...... +NetworkManager.aarch64 +%end +``` + +将额外指定的 RPM 软件包添加到 %packages 配置中,需要遵循如下配置格式: + +"软件包名.对应架构",例如:kernel.aarch64 + +```shell +%packages --multilib --ignoremissing +acl.aarch64 +aide.aarch64 +...... +NetworkManager.aarch64 +kernel.aarch64 +%end +``` + +### 操作指导 + +>![](./public_sys-resources/icon-note.gif) **说明:** +> +>- 请不要修改或删除 /etc/isocut/rpmlist 文件中的默认配置项。 +>- isocut 的所有操作需要使用 root 权限。 +>- 待裁剪的源镜像可以为基础镜像,也可以是 everything 版镜像,例子中以基础版镜像 openEuler-24.03-LTS-SP3-aarch64-dvd.iso 为例。 +>- 例子中假设新生成的镜像名称为 new.iso,且存放在 /home/result 路径;运行工具的临时目录为 /home/temp;额外的 RPM 软件包存放在 /home/rpms 目录。 + +1. 修改配置文件 /etc/isocut/rpmlist,指定用户需要安装的 RPM 软件包(来自原有 ISO 镜像)。 + + ``` shell script + sudo vi /etc/isocut/rpmlist + ``` + +2. 确定运行镜像裁剪定制工具的临时目录空间大于 8 GB 。默认临时目录为 /tmp,也可以使用 -t 参数指定其他目录作为临时目录,该目录必须为绝对路径。本例中使用目录 /home/temp,由如下回显可知 /home 目录可用磁盘为 38 GB,满足要求。 + + ```shell + $ df -h + Filesystem Size Used Avail Use% Mounted on + devtmpfs 1.2G 0 1.2G 0% /dev + tmpfs 1.5G 0 1.5G 0% /dev/shm + tmpfs 1.5G 23M 1.5G 2% /run + tmpfs 1.5G 0 1.5G 0% /sys/fs/cgroup + /dev/mapper/openeuler_openeuler-root 69G 2.8G 63G 5% / + /dev/sda2 976M 114M 796M 13% /boot + /dev/mapper/openeuler_openeuler-home 61G 21G 38G 35% /home + ``` + +3. 执行裁剪定制。 + + **场景一**:新镜像的所有 RPM 包来自原有 ISO 镜像 + + ``` shell script + $ sudo isocut -t /home/temp /home/isocut_iso/openEuler-24.03-LTS-SP3-aarch64-dvd.iso /home/result/new.iso + Checking input ... + Checking user ... + Checking necessary tools ... + Initing workspace ... + Copying basic part of iso image ... + Downloading rpms ... + Finish create yum conf + finished + Regenerating repodata ... + Checking rpm deps ... + Getting the description of iso image ... + Remaking iso ... + Adding checksum for iso ... + Adding sha256sum for iso ... + ISO cutout succeeded, enjoy your new image "/home/result/new.iso" + isocut.lock unlocked ... + ``` + + 回显如上,说明新镜像 new.iso 定制成功。 + + **场景二**:新镜像的 RPM 包除来自原有 ISO 镜像,还包含来自 /home/rpms 的额外软件包 + + ```shell + sudo isocut -t /home/temp -r /home/rpms /home/isocut_iso/openEuler-24.03-LTS-SP3-aarch64-dvd.iso /home/result/new.iso + ``` + + **场景三**:使用 kickstart 文件实现自动化安装,需要修改 /etc/isocut/anaconda-ks.cfg 文件 + + ```shell + sudo isocut -t /home/temp -k /etc/isocut/anaconda-ks.cfg /home/isocut_iso/openEuler-24.03-LTS-SP3-aarch64-dvd.iso /home/result/new.iso + ``` + +## FAQ + +### 默认 rpm 包列表安装系统失败 + +#### 背景描述 + +用户使用 isocut 裁剪镜像时通过配置文件 /etc/isocut/rpmlist 指定需要安装的软件包。 + +由于不同版本会有软件包减少,可能导致裁剪镜像时出现缺包等问题。 +因此 /etc/isocut/rpmlist 中默认只包含 kernel 软件包。 +保证默认配置裁剪镜像必定成功。 + +#### 问题描述 + +使用默认配置裁剪出来的 iso 镜像,能够裁剪成功,但是安装可能失败。 + +安装报错缺包,报错截图如下: + +![](./figures/lack_pack.png) + +#### 原因分析 + +使用默认配置的 RPM 软件包列表,裁剪的 iso 镜像在安装时缺少必要的 RPM 包。 +缺少的包如报错的图示,并且在不同版本中,缺少的 RPM 包也可能是不同的,以安装时实际报错为准。 + +#### 解决方案 + +1. 增加缺少的包 + + 1. 根据报错的提示整理缺少的 RPM 包列表。 + 2. 将上述 RPM 包列表添加到配置文件 /etc/isocut/rpmlist 中。 + 3. 再次裁剪安装 iso 镜像。 + + 以问题描述中的缺包情况为例,修改 rpmlist 配置文件如下: + + ```shell + $ cat /etc/isocut/rpmlist + kernel.aarch64 + lvm2.aarch64 + chrony.aarch64 + authselect.aarch64 + shim.aarch64 + efibootmgr.aarch64 + grub2-efi-aa64.aarch64 + dosfstools.aarch64 + ``` diff --git a/docs/zh/public_sys-resources/icon-note.gif b/docs/zh/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda GIT binary patch literal 394 zcmZ?wbhEHblx7fPSjxcg=ii?@_wH=jwxy=7CMGH-B`L+l$wfv=#>UF#$gv|VY%C^b zCQFtrnKN(Bo_%|sJbO}7RAORe!otL&qo<>yq_Sq+8Xqqo5h0P3w3Lvb5E(g{p01vl zxR@)KuDH0l^z`+-dH3eaw=XqSH7aTIx{kzVBN;X&hha0dQSgWuiw0NWUvMRmkD|> literal 0 HcmV?d00001 -- Gitee