From 3bf0dc2da722acd875064cf93c439c1913a41bc2 Mon Sep 17 00:00:00 2001 From: gordonwwang Date: Wed, 31 Jul 2024 13:06:46 +0800 Subject: [PATCH 1/2] upload rust auto-package v1.0 --- auto_package_rust/Readme.md | 25 ++++++++ auto_package_rust/rust_package.sh | 103 ++++++++++++++++++++++++++++++ 2 files changed, 128 insertions(+) create mode 100644 auto_package_rust/Readme.md create mode 100755 auto_package_rust/rust_package.sh diff --git a/auto_package_rust/Readme.md b/auto_package_rust/Readme.md new file mode 100644 index 0000000..d89c29b --- /dev/null +++ b/auto_package_rust/Readme.md @@ -0,0 +1,25 @@ +## 安装配置 + +``` +#安装 rust2rpm,建议更新为26.1.1以上版本 +dnf install rust2rpm + +#安装脚本所需工具 +dnf install -y rpm-build rpmdevtools + +# changelog中name、email来源于git config +dnf install -y git +git config --global user.email @tencent.com +git config --global user.name +``` + +## 自动打包 +执行章节2.3脚本,一键式打包。参考用法: + +``` +# rust_package.sh 为上述脚本,pyo3为rust的crates名称 +sh rust_package.sh pyo3 +``` + +执行脚本后,本地生成 rust-pyo3 软件包仓库。 +参考示例:https://gitee.com/opencloudos-stream/rust-pyo3/pulls/1 diff --git a/auto_package_rust/rust_package.sh b/auto_package_rust/rust_package.sh new file mode 100755 index 0000000..d104b25 --- /dev/null +++ b/auto_package_rust/rust_package.sh @@ -0,0 +1,103 @@ +#!/bin/bash +set -e + +function gen_vendor(){ + # get Name, Version, Source0 + spec_info=$(rpmspec -P ${spec_file}) + name=$(echo "${spec_info}" | grep '^Name:' | awk '{print $2}') + version=$(echo "${spec_info}" | grep '^Version:' | awk '{print $2}') + source0=$(echo "${spec_info}" | grep -E '^Source:|Source0:' | head -1 | awk '{print $2}') + cur_dir=$(pwd) + + # 下载源码包 + rm -rf "${tarball_name}" + tarball_name=$(basename "${source0}") + + #wget "$source0" + spectool -g *.spec + + # 解压源码包 + dir_name="${crate_name}-${version}" + rm -rf ${dir_name} + tar -xzf "${tarball_name}" + + # 进入解压后的目录 + pushd "${dir_name}" + # 执行cargo vendor + cargo vendor + + # 打包vendor目录 + vendor_name="${name}-${version}-vendor.tar.bz2" + tar -cjf "${vendor_name}" vendor + mv "${vendor_name}" ../ + + # tear down + popd + #rm -rf ${tarball_name} ${dir_name} + + echo "### generate vendor completed! ###" +} + +function modify_spec(){ + # 按照S-N-V-R-L-U排序 + summary_line=$(grep "^Summary:" "${spec_file}" | head -1) + sed -i "/^${summary_line}/d" "${spec_file}" + sed -i "s/^Name:/${summary_line}\nName:/" "${spec_file}" + # 移除Release后空行, Source0规范命名 + sed -i '/^Release:/ {N; s/\n$//}' "${spec_file}" + sed -i 's/^Source: /Source0:/' "$spec_file" + # 移除FIXME + sed -i '/# FIXME: paste output of %%cargo_license_summary here/d' "$spec_file" + sed -i '/License: # FIXME/d' "$spec_file" + + # 补丁编号 + awk ' + BEGIN { patch_num = 3000 } + /^Patch:/ { + sub("Patch:", "Patch" patch_num ":", $0) + patch_num++ + } + { print } + ' "${spec_file}" > "${spec_file}.tmp" && mv "${spec_file}.tmp" "${spec_file}" + + # add vendor as Source1 + newline=$(printf '\\\n') + sed -i "/^Source:\|^Source0:/a ${newline}Source1: %{name}-%{version}-vendor.tar.bz2" "${spec_file}" + + # 解压Source1 + sed -i '/^%autosetup/s/$/ -a1/' "${spec_file}" + # Source解压后为vendor,作为本地源 + sed -i '/^%cargo_prep/s/$/ -v .\/vendor/' "${spec_file}" + + # 注释 BuildRequires crate, 直接通过vendor提供依赖 + sed -i '/^BuildRequires: crate\|^BuildRequires: (crate/s/^/# /' "${spec_file}" + + # 如果是 rust2rpm-24、cargo-rpm-mocros-24 版本,请取消下述4行注释 + # sed -i '/^%build/i \ + # tar -jxf %{SOURCE1}\n\ + # sed -i "/^\\[source.crates-io\\]/i \\\\\n\\[source.vendored-sources\\]\\\\\ndirectory = \\"vendor\\"\\\\\n" .cargo/config\n\ + # sed -i "s/replace-with = \\"local-registry\\"/replace-with = \\"vendored-sources\\"/" .cargo/config\n' "${spec_file}" + + echo "### Edit spec completed! ###" +} + + +crate_name="$1" +repo_name="rust-${crate_name}" +spec_file="${repo_name}.spec" + +rm -rf ${repo_name} +# create repo +mkdir -p ${repo_name} +cd ${repo_name} + +echo "#******************** 1.generate spec ********************#" +rust2rpm --no-existence-check ${crate_name} +echo "generate vendor completed!" + +echo "#******************* 2.generate vendor *******************#" +gen_vendor + +echo "#********************** 3.edit spec **********************#" +modify_spec + -- Gitee From 5b6516b65677a4889bad2cdeec4ae2e73e002841 Mon Sep 17 00:00:00 2001 From: gordonwwang Date: Wed, 31 Jul 2024 15:18:34 +0800 Subject: [PATCH 2/2] rust auto-package v2.0: simplize for ocs --- auto_package_rust/rust_package.sh | 70 ++++--------------------------- 1 file changed, 7 insertions(+), 63 deletions(-) diff --git a/auto_package_rust/rust_package.sh b/auto_package_rust/rust_package.sh index d104b25..c484ae9 100755 --- a/auto_package_rust/rust_package.sh +++ b/auto_package_rust/rust_package.sh @@ -1,51 +1,16 @@ #!/bin/bash set -e -function gen_vendor(){ - # get Name, Version, Source0 - spec_info=$(rpmspec -P ${spec_file}) - name=$(echo "${spec_info}" | grep '^Name:' | awk '{print $2}') - version=$(echo "${spec_info}" | grep '^Version:' | awk '{print $2}') - source0=$(echo "${spec_info}" | grep -E '^Source:|Source0:' | head -1 | awk '{print $2}') - cur_dir=$(pwd) - - # 下载源码包 - rm -rf "${tarball_name}" - tarball_name=$(basename "${source0}") - - #wget "$source0" - spectool -g *.spec - - # 解压源码包 - dir_name="${crate_name}-${version}" - rm -rf ${dir_name} - tar -xzf "${tarball_name}" - - # 进入解压后的目录 - pushd "${dir_name}" - # 执行cargo vendor - cargo vendor - - # 打包vendor目录 - vendor_name="${name}-${version}-vendor.tar.bz2" - tar -cjf "${vendor_name}" vendor - mv "${vendor_name}" ../ - - # tear down - popd - #rm -rf ${tarball_name} ${dir_name} - - echo "### generate vendor completed! ###" -} - function modify_spec(){ # 按照S-N-V-R-L-U排序 summary_line=$(grep "^Summary:" "${spec_file}" | head -1) sed -i "/^${summary_line}/d" "${spec_file}" sed -i "s/^Name:/${summary_line}\nName:/" "${spec_file}" - # 移除Release后空行, Source0规范命名 + # 移除Release后空行 sed -i '/^Release:/ {N; s/\n$//}' "${spec_file}" - sed -i 's/^Source: /Source0:/' "$spec_file" + # Source规范命名 + sed -i 's/^Source: %{crates_source}/Source0: %{crates_source}/' "$spec_file" + sed -i 's/^Source: /Source1:/' "$spec_file" # 移除FIXME sed -i '/# FIXME: paste output of %%cargo_license_summary here/d' "$spec_file" sed -i '/License: # FIXME/d' "$spec_file" @@ -60,24 +25,6 @@ function modify_spec(){ { print } ' "${spec_file}" > "${spec_file}.tmp" && mv "${spec_file}.tmp" "${spec_file}" - # add vendor as Source1 - newline=$(printf '\\\n') - sed -i "/^Source:\|^Source0:/a ${newline}Source1: %{name}-%{version}-vendor.tar.bz2" "${spec_file}" - - # 解压Source1 - sed -i '/^%autosetup/s/$/ -a1/' "${spec_file}" - # Source解压后为vendor,作为本地源 - sed -i '/^%cargo_prep/s/$/ -v .\/vendor/' "${spec_file}" - - # 注释 BuildRequires crate, 直接通过vendor提供依赖 - sed -i '/^BuildRequires: crate\|^BuildRequires: (crate/s/^/# /' "${spec_file}" - - # 如果是 rust2rpm-24、cargo-rpm-mocros-24 版本,请取消下述4行注释 - # sed -i '/^%build/i \ - # tar -jxf %{SOURCE1}\n\ - # sed -i "/^\\[source.crates-io\\]/i \\\\\n\\[source.vendored-sources\\]\\\\\ndirectory = \\"vendor\\"\\\\\n" .cargo/config\n\ - # sed -i "s/replace-with = \\"local-registry\\"/replace-with = \\"vendored-sources\\"/" .cargo/config\n' "${spec_file}" - echo "### Edit spec completed! ###" } @@ -92,12 +39,9 @@ mkdir -p ${repo_name} cd ${repo_name} echo "#******************** 1.generate spec ********************#" -rust2rpm --no-existence-check ${crate_name} -echo "generate vendor completed!" - -echo "#******************* 2.generate vendor *******************#" -gen_vendor +# -s:下载Source0 --vendor: 生成并使用vendor +rust2rpm --no-existence-check ${crate_name} -s --vendor -echo "#********************** 3.edit spec **********************#" +echo "#********************** 2.edit spec **********************#" modify_spec -- Gitee