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