diff --git a/docs/cicd/build_docker_with_kiwi/appliance.kiwi b/docs/cicd/build_docker_with_kiwi/appliance.kiwi
new file mode 100644
index 0000000000000000000000000000000000000000..8a93150871a30621bae2245daf33410304cd1322
--- /dev/null
+++ b/docs/cicd/build_docker_with_kiwi/appliance.kiwi
@@ -0,0 +1,50 @@
+
+
+
+
+ sysmaster groups
+ dev@openeuler.overweight
+ docker test build
+
+
+ 1.0.0
+ dnf
+ true
+ false
+ en_US
+ us
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/cicd/build_docker_with_kiwi/config.sh b/docs/cicd/build_docker_with_kiwi/config.sh
new file mode 100644
index 0000000000000000000000000000000000000000..9756fda1b1b01c523578b5a52f76beb6967615e0
--- /dev/null
+++ b/docs/cicd/build_docker_with_kiwi/config.sh
@@ -0,0 +1,15 @@
+#!/bin/bash
+#--------------------------------------
+test -f /.kconfig && . /.kconfig
+test -f /.profile && . /.profile
+
+#======================================
+# Greeting...
+#--------------------------------------
+echo "Configure image: [$kiwi_iname]..."
+
+#======================================
+# Create ssh machine keys
+#--------------------------------------
+
+(cd /usr/share/locale && find -name "*.mo" | xargs rm)
diff --git a/docs/cicd/build_docker_with_kiwi/readme.md b/docs/cicd/build_docker_with_kiwi/readme.md
new file mode 100644
index 0000000000000000000000000000000000000000..7cfd3c90bf00f2aa83916cd19fc0ad319b4a7753
--- /dev/null
+++ b/docs/cicd/build_docker_with_kiwi/readme.md
@@ -0,0 +1,95 @@
+# 使用自己的RPM和Kiwi制作Docker镜像
+
+Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。
+Kiwi是一个开源的Linux发行版构建工具,可以帮助你创建自定义的Linux发行版。
+
+在本教程中,我们将使用自己的RPM和Kiwi来制作Docker镜像。
+
+步骤1:准备工作
+首先,你需要安装Docker和Kiwi。如果你还没有安装,可以参考以下链接进行安装:
+```
+sudo dnf install docker kiwi
+```
+
+步骤2:创建Kiwi描述文件
+Kiwi描述文件是一个XML文件,它描述了你的Linux发行版的配置。你可以使用Kiwi提供的工具来创建这个文件。
+
+例如,你可以创建一个简单的描述文件,如下所示:
+
+```xml
+
+
+
+
+ sysmaster groups
+ dev@openeuler.overweight
+ docker test build
+
+
+ 1.0.0
+ dnf
+ true
+ false
+ en_US
+ us
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+在这个例子中,我们创建了一个名为`sysmaster`的Docker镜像,它包含了名为`sysmaster`和`openssh-server`的RPM包。其中sysmaster包是build-rpm-with-mock中脚本一键式生成的.
+
+步骤3:构建Docker镜像
+使用Kiwi的kiwi-ng工具来构建Docker镜像。
+
+```bash
+kiwi-ng system build --description . --target-dir my_image
+```
+在这个命令中,--description选项指定了Kiwi描述文件的路径,--target-dir选项指定了构建结果的存放路径。
+
+```xml
+
+
+
+```
+你需要修改path,指向自己的repo目录.
+
+步骤4:运行Docker镜像
+使用Docker的docker run命令来运行你的Docker镜像。
+
+```bash
+docker run --privileged --rm -it sysmaster /bin/bash
+```
+结论
+使用Kiwi和Docker,你可以轻松地创建和管理自己的Linux发行版。这不仅可以帮助你更好地理解Linux系统的工作原理,也可以帮助你更有效地管理和部署你的应用。
diff --git a/docs/cicd/build_rpm_with_mock/build_rpm.sh b/docs/cicd/build_rpm_with_mock/build_rpm.sh
index 56d530fc0a506b310f73c0975820dfd27c08a3b7..caee1c0e587514ae71c459bbc7976f5d2e78ea4d 100644
--- a/docs/cicd/build_rpm_with_mock/build_rpm.sh
+++ b/docs/cicd/build_rpm_with_mock/build_rpm.sh
@@ -2,12 +2,29 @@
set -e
arch=$(uname -m)
vendor="openeuler-22.03LTS_SP1"
-if [ $# -ne 1 ]; then
- echo "More than one argument supplied, not supported"
- echo "./build_rpm.sh [openeuler-22.03LTS_SP1]"
-else
- vendor=$1
-fi
+force=false
+
+# 处理参数
+while [[ $# -gt 0 ]]
+do
+ key="$1"
+ case $key in
+ --force)
+ force=true
+ shift # 移除参数
+ ;;
+ *)
+ if [ $# -ne 1 ]; then
+ echo "More than one argument supplied, not supported"
+ echo "./build_rpm.sh [openeuler-22.03LTS_SP1]"
+ exit 1
+ else
+ vendor=$1
+ fi
+ shift # 移除参数
+ ;;
+ esac
+done
# 获取当前脚本的目录
SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)
@@ -18,70 +35,70 @@ while [ ! -f "$ROOTDIR/Cargo.lock" ] && [ "$ROOTDIR" != "/" ]; do
ROOTDIR=$(dirname "$ROOTDIR")
done
-TARGETDIR=$ROOTDIR/target/rpms
-rm -rf $TARGETDIR
-mkdir -p $TARGETDIR
-
pushd $ROOTDIR
+version_line=$(grep -Eo '^version = "[0-9]+\.[0-9]+\.[0-9]+"' ./Cargo.toml)
+version=$(echo "$version_line" | awk -F'"' '{print $2}')
+
+TARGETDIR=$ROOTDIR/target/rpms
+if [ "$force" = false ]; then
+ rm -rf $TARGETDIR
+ mkdir -p $TARGETDIR
# 利用cargo vendor创建源码压缩包
-rustup override set stable
-rm -rf vendor
-cargo vendor
-rustup override unset
+ rustup override set stable
+ rm -rf vendor
+ cargo vendor
+ rustup override unset
-# delete large and unused files
-for lib in `find vendor/windows* | grep \\.a$`
-do
- rm -rf $lib
-done
-for lib in `find vendor/winapi* | grep \\.a$`
-do
- rm -rf $lib
-done
-for lib in `find vendor/windows* | grep \\.lib$`
-do
- rm -rf $lib
-done
+ # delete large and unused files
+ for lib in `find vendor/windows* | grep \\.a$`
+ do
+ rm -rf $lib
+ done
+ for lib in `find vendor/winapi* | grep \\.a$`
+ do
+ rm -rf $lib
+ done
+ for lib in `find vendor/windows* | grep \\.lib$`
+ do
+ rm -rf $lib
+ done
-rm -rf petgraph/tests
+ rm -rf petgraph/tests
-for crate in `ls -d vendor/win*`
-do
- pushd $crate/src
- if [ $? -ne 0 ] ;then
- continue;
- fi
- for pathToDelete in `ls`
+ for crate in `ls -d vendor/win*`
do
- if [ -d "$pathToDelete" ]; then
- echo "Deleting files in $pathToDelete..."
- rm -rf "$pathToDelete"
- else
- echo "$pathToDelete is not dir."
+ pushd $crate/src
+ if [ $? -ne 0 ] ;then
+ continue;
fi
+ for pathToDelete in `ls`
+ do
+ if [ -d "$pathToDelete" ]; then
+ echo "Deleting files in $pathToDelete..."
+ rm -rf "$pathToDelete"
+ else
+ echo "$pathToDelete is not dir."
+ fi
+ done
+ popd
done
- popd
-done
-echo "Create a compressed archive of tar.gz ..."
-version_line=$(grep -Eo '^version = "[0-9]+\.[0-9]+\.[0-9]+"' ./Cargo.toml)
-version=$(echo "$version_line" | awk -F'"' '{print $2}')
-
-# compress sysmaster
-pushd $ROOTDIR/../
- rm -rf sysmaster-$version
- cp -a $(basename $ROOTDIR) sysmaster-$version
- pushd sysmaster-$version
- cargo clean
- rm -rf .git next docs tools patch target
- sed -i '/\[patch.crates-io.loopdev\]/{N;N;d}' Cargo.toml
+ # compress sysmaster
+ pushd $ROOTDIR/../
+ rm -rf sysmaster-$version
+ cp -a $(basename $ROOTDIR) sysmaster-$version
+ pushd sysmaster-$version
+ cargo clean
+ rm -rf .git next docs tools patch target
+ sed -i '/\[patch.crates-io.loopdev\]/{N;N;d}' Cargo.toml
+ popd > /dev/null 2>&1
+ tar -cJvf $TARGETDIR/sysmaster-$version.tar.xz sysmaster-$version
+ rm -rf sysmaster-$version
popd > /dev/null 2>&1
- tar -cJvf $TARGETDIR/sysmaster-$version.tar.xz sysmaster-$version
- rm -rf sysmaster-$version
-popd > /dev/null 2>&1
+fi
set +e
# 构建srpm
-sudo dnf install -y mock rpm-build
+sudo dnf install -y mock rpm-build createrepo
sudo groupadd mock
sudo usermod -a -G mock $(who | awk '{print $1}' | sort -u)
cp -a $SCRIPT_DIR/* $TARGETDIR
@@ -90,3 +107,5 @@ mock -r $vendor-$arch --configdir $TARGETDIR --no-clean --isolation simple --bui
# rebuild构建rpms, 结果输出到target/rpms目录下
srpms=$(ls $TARGETDIR/sysmaster-*.src.rpm)
mock -r $vendor-$arch --configdir $TARGETDIR --no-clean --isolation simple --rebuild $srpms --resultdir $TARGETDIR
+createrepo_c $TARGETDIR
+popd