1
0
Files
build.ems/build.sh

180 lines
4.2 KiB
Bash
Executable File

#!/bin/bash
# 默认版本值
VERSION="1.0.0"
# usage
usage() {
echo "Usage: bash $0 [OPTION]"
echo
echo "Build Software Package OPTION:"
echo " -v Specify the version"
echo " -h Display this help message"
echo
exit 1
}
# 读取命令行参数
while [[ $# -gt 0 ]]; do
case "$1" in
-v) VERSION="$2"; shift 2 ;; # 处理 -v 后面的版本
*) usage ;;
esac
done
# 输出结果
echo "Version: $VERSION"
# ===================
# 包管理器
get_manager() {
if command -v rpm &> /dev/null; then
echo "rpm"
elif command -v dpkg &> /dev/null; then
echo "deb"
else
echo "unknown manager"
cat /etc/os-release
exit 1
fi
}
# 获取当前系统的包管理器
PACKAGE_MANAGER=$(get_manager)
echo "Package Manager: $PACKAGE_MANAGER"
# 架构
get_arch() {
ARCH_UNAME=$(uname -m)
case $ARCH_UNAME in
x86_64) echo "amd64" ;;
aarch64) echo "arm64" ;;
i386|i686) echo "i386" ;;
*)
echo "unknown architecture: $ARCH_UNAME"
exit 1
;;
esac
}
# 获取当前系统的架构
PACKAGE_ARCH=$(get_arch)
echo "Architecture: $PACKAGE_ARCH"
# 操作系统名称
get_os_name() {
if [ -f /etc/os-release ]; then
. /etc/os-release
# 检查 $ID 是否为空
if [ -z "$ID" ]; then
echo "ID is not defined in /etc/os-release"
exit 1
fi
echo "$ID$VERSION_ID"
else
echo "unknown ID: /etc/os-release not found"
exit 1
fi
}
# 获取当前操作系统名称
OS_NAME=$(get_os_name)
echo "OS: $OS_NAME"
# ===================
# 编译日期
Date=`date +%Y%m%d`
# 脚本所在路径
RootDir=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
# 编译Linux目录
BuildLinuxDir=${RootDir}/linux
# 编译包管理目录
BuildPackagelDir=${RootDir}/pkg
# 编译目录
BuildDir=${RootDir}/tmp
# 发布包目录
ReleaseDir=${RootDir}/release/${PACKAGE_MANAGER}/${PACKAGE_ARCH}
# 发布包文件名称
ReleaseFileName=omc-r${VERSION}-${Date}-${OS_NAME}-${PACKAGE_ARCH}.${PACKAGE_MANAGER}
# ===================
# 应用文件处理 ./位于临时目录
app() {
# 数据库脚本 common属于重建脚本
modeList="std lite"
for v in ${modeList}; do
path=./usr/local/etc/omc/database/${v}
cp -rf $path/common/* $path/install/
cp -rf $path/common/* $path/upgrade/
rm -rf $path/common
done
}
# ===================
# deb包管理器
deb() {
cd ${BuildDir}
# 替换标签 {version} {arch}
sed -i "s/{arch}/${PACKAGE_ARCH}/g" ./DEBIAN/control
sed -i "s/{version}/${VERSION}/g" ./DEBIAN/control
sed -i "s/{date}/${Date}/g" ./DEBIAN/control
# 打包deb
chmod 755 -R ${BuildDir}
dpkg -b ${BuildDir} ${ReleaseDir}/${ReleaseFileName}
# 生成MD5文件
rm -f omc_md5sum.txt
md5sum ${ReleaseDir}/${ReleaseFileName} >${ReleaseDir}/omc_md5sum.txt
cat ${ReleaseDir}/omc_md5sum.txt
}
# rpm包管理器
rpm() {
cd ${BuildDir}
ARCH_UNAME=$(uname -m)
# 替换标签 {version} {arch} {date}
sed -i "s/{version}/${VERSION}/g" ./SPECS/omc.spec
sed -i "s/{arch}/${ARCH_UNAME}/g" ./SPECS/omc.spec
sed -i "s/{date}/${Date}/g" ./SPECS/omc.spec
# 打包rpm
chmod 755 -R ${BuildDir}
rpmbuild -bb -D "_topdir ${BuildDir}" ${BuildDir}/SPECS/omc.spec
# 移动rpm包到发布目录
if [[ "$OS_NAME" == kylin* ]]; then # 麒麟系统有ky10标签
mv ${BuildDir}/RPMS/${ARCH_UNAME}/omc-${VERSION}-${Date}.ky10.${ARCH_UNAME}.rpm ${ReleaseDir}/${ReleaseFileName}
else
mv ${BuildDir}/RPMS/${ARCH_UNAME}/omc-${VERSION}-${Date}.${ARCH_UNAME}.rpm ${ReleaseDir}/${ReleaseFileName}
fi
rm -rf ${BuildDir}/RPMS
# 生成MD5文件
rm -f omc_md5sum.txt
md5sum ${ReleaseDir}/${ReleaseFileName} >${ReleaseDir}/omc_md5sum.txt
cat ${ReleaseDir}/omc_md5sum.txt
}
# ===================
echo
echo "building omc..."
rm -rf ${BuildDir} && mkdir -p ${BuildDir}
cp -rf ${BuildPackagelDir}/${PACKAGE_MANAGER}/* ${BuildDir}
if [[ $PACKAGE_MANAGER = "deb" ]]; then
cp -rf ${BuildLinuxDir}/* ${BuildDir}
cd ${BuildDir}
# 应用文件处理
app
# 打包
deb
elif [[ $PACKAGE_MANAGER = "rpm" ]]; then
cp -rf ${BuildLinuxDir}/* ${BuildDir}/BUILD
cd ${BuildDir}/BUILD
# 应用文件处理
app
# 打包
rpm
else
echo "unknown runing: $PACKAGE_MANAGER"
exit 1
fi