From e1f4eb6267607c83ceafd3b7ccb2a74cd32e275f Mon Sep 17 00:00:00 2001 From: zhangsz Date: Mon, 14 Apr 2025 16:05:39 +0800 Subject: [PATCH] feat: psap init --- build.sh => bin/build.sh | 67 +++++++++++++++++- makepkg.sh => bin/makepkg.sh | 0 build/usr/local/omc/etc/default/restconf.yaml | 10 +-- debbuild/22.04/DEBIAN/control | 2 +- .../usr/local/omc/etc/default/restconf.yaml | 10 +-- docs/requirement/PSAP-OPENAPI说明文档.docx | Bin 0 -> 23824 bytes .../requirement/PSAP门户网站-20250319-V1.xlsx | Bin 0 -> 10593 bytes 7 files changed, 72 insertions(+), 17 deletions(-) rename build.sh => bin/build.sh (81%) rename makepkg.sh => bin/makepkg.sh (100%) create mode 100644 docs/requirement/PSAP-OPENAPI说明文档.docx create mode 100644 docs/requirement/PSAP门户网站-20250319-V1.xlsx diff --git a/build.sh b/bin/build.sh similarity index 81% rename from build.sh rename to bin/build.sh index b45f9fa..a43adbf 100755 --- a/build.sh +++ b/bin/build.sh @@ -1,14 +1,17 @@ #!/bin/bash usage() { - echo "Usage: $0 [OPTION] deb|badeb|rpm" + echo "Usage: $0 [OPTION] deb|badeb|rpm|psap" echo echo "Build omc package, option as follow:" echo " deb|badeb|rpm, deb: ubuntu|debian package build by dpkg" echo " badeb: ubuntu|debian package build by dpkg" echo " rpm: centos/redhat package, build by rpmbuild" + echo " psap psap package, build by dpkg" + echo echo " -r, =build root directory build root directory, default directory is $HOME/omc.git" echo " -d dump SQL from database" + echo " -h, --help display this help and exit" echo } @@ -16,7 +19,7 @@ pkgtype="" new_args=() # Traverse all parameters for arg in "$@"; do - if [[ "$arg" == "deb" || "$arg" == "badeb" || "$arg" == "rpm" ]]; then + if [[ "$arg" == "deb" || "$arg" == "badeb" || "$arg" == "rpm" || "$arg" == "psap" ]]; then pkgtype=$arg else new_args+=("$arg") # Add non pkgtype parameters to a new parameter list @@ -351,6 +354,66 @@ case "${pkgtype}" in md5sum ${DebPkgName} >omc-md5sum.txt echo "Finish to make ${pkgtype} package <======" ;; + psap) + ProjectL="psap" + echo "Begin to make ${pkgtype} package ======>" + ReleasePkgDir=${ReleaseDir}/debs/${RelArch} + ProcList="restagent" + cd $EmsBEDir + for procName in $ProcList;do + cd $EmsBEDir/$procName + echo "Make $procName ..." + make + done + + DebPkgFile=${ProjectL}-r${RelVer}-${RelOS}-${RelArch}.${ptype} + if [ ! $ProjectTag = "" ]; then + DebPkgFile=${ProjectL}-r${RelVer}-${RelOS}-${RelArch}-${ProjectTag}.${ptype} + fi + + cd ${EmsBEDir} + + #make deb + # clear build cache + rm -rf ${FrontBuildDir}/front/* + rm -rf ${DebFEBuildDir}/front/* + rm -rf ${DebBuildDir}/usr/local/omc/etc/db/* + rm -rf ${DebBuildOMCDir}/static/* + + for procName in $ProcList;do + cd $EmsBEDir/$procName + cp -rf ${procName} ${BuildOMCBinDir} + done + + cp -rf ${MiscDir}/* ${BuildOMCBinDir} + cp -rf ${ConfigEtcDir}/* ${BuildOMCEtcDir} + rm -rf ${BuildOMCEtcDir}/db/* + cp -rf ${DBSQLSrcDir}/* ${BuildOMCEtcDir}/db/ + cp -rf ${BuildOMCEtcDir}/db/common/* ${BuildOMCEtcDir}/db/install + cp -rf ${BuildOMCEtcDir}/db/common/* ${BuildOMCEtcDir}/db/upgrade + #Get SQL from database, overwrite from git + cp -rf ${ConfigSystemdDir}/* ${BuildLibSystemDir} + cp -rf ${EmsFEVue3Dir}/* ${FrontBuildDir}/front >/dev/null + chmod 755 ${BuildOMCBinDir}/* + chmod 755 ${DebBuildDir}/DEBIAN/preinst + chmod 755 ${DebBuildDir}/DEBIAN/postinst + chmod 755 ${DebBuildDir}/DEBIAN/postrm + cp -rf ${BuildDir}/* ${DebBuildDir}/ + cp -rf ${CustomizedDir}/agt.d ${DebBuildOMCDir}/static + cp -rf ${CustomizedDir}/omc.d ${DebBuildOMCDir}/static + #cp -rf ${BuildDir}/nginx/* ${DebBuildDir}/etc/nginx/conf.d + #cp -rf ${BuildDir}/systemd/*.service ${DebBuildDir}/lib/systemd/system/ + chmod +x ${DebBuildDir}/usr/local/omc/bin/* + sed -i "s/YYYYMMDD/${RelDate}/g" ${DebBuildDir}/DEBIAN/control + sed -i "s/Architecture: amd64/Architecture: ${RelArch}/g" ${DebBuildDir}/DEBIAN/control + perl -0777 -i -pe 's/ne:\n user: root/ne:\n user: omcuser/g' ${DebBuildDir}/usr/local/omc/etc/default/restconf.yaml + dpkg -b ${DebBuildDir} ${ReleasePkgDir}/${DebPkgFile} + + cd ${ReleasePkgDir} + rm -f omc-md5sum.txt + md5sum ${DebPkgName} >omc-md5sum.txt + echo "Finish to make ${pkgtype} package <=======" + ;; *) usage exit 4 diff --git a/makepkg.sh b/bin/makepkg.sh similarity index 100% rename from makepkg.sh rename to bin/makepkg.sh diff --git a/build/usr/local/omc/etc/default/restconf.yaml b/build/usr/local/omc/etc/default/restconf.yaml index 60d882a..7a8a8e3 100644 --- a/build/usr/local/omc/etc/default/restconf.yaml +++ b/build/usr/local/omc/etc/default/restconf.yaml @@ -57,12 +57,6 @@ redis: host: "127.0.0.1" # Redis host password: "helloearth" db: 10 # Redis db_num - # UDM sub/auth db - udmuser: - port: 6379 # Redis port - host: "127.0.0.1" - password: "helloearth" - db: 0 # Redis db_num # used to specify the default data source for multiple data resourece defaultDataSourceName: "default" @@ -78,7 +72,7 @@ mml: # Tracking configuration trace: - enabled: true + enabled: false host: "172.16.5.100" # Fill in the specific IP address port: 33033 @@ -109,7 +103,9 @@ omc: vendor: "" dn: "" chk2ne: false + capability: 50 sn: "-" + expiryDate: "-" checksign: false rootDir: /usr/local/omc binDir: /usr/local/omc/bin diff --git a/debbuild/22.04/DEBIAN/control b/debbuild/22.04/DEBIAN/control index 2888988..d6e8a7c 100644 --- a/debbuild/22.04/DEBIAN/control +++ b/debbuild/22.04/DEBIAN/control @@ -1,5 +1,5 @@ Package: OMC -Version: 2.2503.5-YYYYMMDD +Version: 2.2503.5-20250414 Section: AGrandTech Prioritt: optional Architecture: amd64 diff --git a/debbuild/22.04/usr/local/omc/etc/default/restconf.yaml b/debbuild/22.04/usr/local/omc/etc/default/restconf.yaml index 60d882a..7a8a8e3 100644 --- a/debbuild/22.04/usr/local/omc/etc/default/restconf.yaml +++ b/debbuild/22.04/usr/local/omc/etc/default/restconf.yaml @@ -57,12 +57,6 @@ redis: host: "127.0.0.1" # Redis host password: "helloearth" db: 10 # Redis db_num - # UDM sub/auth db - udmuser: - port: 6379 # Redis port - host: "127.0.0.1" - password: "helloearth" - db: 0 # Redis db_num # used to specify the default data source for multiple data resourece defaultDataSourceName: "default" @@ -78,7 +72,7 @@ mml: # Tracking configuration trace: - enabled: true + enabled: false host: "172.16.5.100" # Fill in the specific IP address port: 33033 @@ -109,7 +103,9 @@ omc: vendor: "" dn: "" chk2ne: false + capability: 50 sn: "-" + expiryDate: "-" checksign: false rootDir: /usr/local/omc binDir: /usr/local/omc/bin diff --git a/docs/requirement/PSAP-OPENAPI说明文档.docx b/docs/requirement/PSAP-OPENAPI说明文档.docx new file mode 100644 index 0000000000000000000000000000000000000000..864c2b0a47f1973a5135893a7e5191087411b5f8 GIT binary patch literal 23824 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 literal 0 HcmV?d00001 diff --git a/docs/requirement/PSAP门户网站-20250319-V1.xlsx b/docs/requirement/PSAP门户网站-20250319-V1.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..bb5201c7ca6dad8abdacf7e0c1d4c34e0255f5bc GIT binary patch literal 10593 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 literal 0 HcmV?d00001