Skip to content

Commit 039d14e

Browse files
authored
[Packaging] Package verifier script (#1120)
* add verifier script * rework * make CERT and KEY optional * update comments, now prints the download location for each package
1 parent 9f24720 commit 039d14e

File tree

1 file changed

+159
-0
lines changed

1 file changed

+159
-0
lines changed

scripts/packages/package-check.sh

Lines changed: 159 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,159 @@
1+
#!/bin/bash
2+
# Usage:
3+
#
4+
# Check package v3.0.0 availability for all platforms, no auth required:
5+
# > ./package_check.sh 3.0.0
6+
#
7+
# Check pkgs and download if present, with authentication:
8+
# > CERT=<cert-path> KEY=<key-path> DL=1 ./package_check.sh 3.0.0
9+
#
10+
# Required parameters:
11+
#
12+
# version: the version of agent you wish to search for i.e 3.0.0
13+
#
14+
# Optional parameters:
15+
#
16+
# PKG_REPO: The root url for the repository you wish to check, defaults to packages.nginx.org
17+
# CERT: Path to your cert file
18+
# KEY: Path to your key file
19+
# DL: Switch to download the package if it is present, set to 1 if download required, defaults to 0
20+
#
21+
# Packages are downloaded to the local directory with the path of its corresponding repo url + uri i.e
22+
#
23+
# packages.nginx.org/nginx-agent/debian/pool/agent/n/nginx-agent/nginx-agent_3.0.0~bullseye_arm64.deb
24+
#
25+
26+
27+
RED='\033[0;31m'
28+
GREEN='\033[0;32m'
29+
NC='\033[0m' # No Color
30+
31+
CURL_OPTS=""
32+
if [[ ! -z ${CERT} ]] && [[ ! -z ${KEY} ]]; then
33+
CURL_OPTS="-E ${CERT} --key ${KEY}"
34+
fi
35+
36+
if [[ -z ${PKG_REPO} ]]; then
37+
echo "defaulting to packages.nginx.com"
38+
PKG_REPO="packages.nginx.org"
39+
fi
40+
41+
PKG_NAME="nginx-agent"
42+
VERSION="${1}"
43+
if [[ -z $VERSION ]]; then
44+
echo "no version provided"
45+
exit 1
46+
fi
47+
48+
PKG_DIR="${PKG_REPO}/${PKG_NAME}"
49+
PKG_REPO_URL="https://${PKG_DIR}"
50+
51+
APK=(
52+
alpine/v3.21/main/aarch64/nginx-agent-$VERSION.apk
53+
alpine/v3.21/main/x86_64/nginx-agent-$VERSION.apk
54+
alpine/v3.20/main/aarch64/nginx-agent-$VERSION.apk
55+
alpine/v3.20/main/x86_64/nginx-agent-$VERSION.apk
56+
alpine/v3.18/main/aarch64/nginx-agent-$VERSION.apk
57+
alpine/v3.18/main/x86_64/nginx-agent-$VERSION.apk
58+
alpine/v3.19/main/aarch64/nginx-agent-$VERSION.apk
59+
alpine/v3.19/main/x86_64/nginx-agent-$VERSION.apk
60+
)
61+
UBUNTU=(
62+
ubuntu/pool/agent/n/nginx-agent/nginx-agent_$VERSION~focal_arm64.deb
63+
ubuntu/pool/agent/n/nginx-agent/nginx-agent_$VERSION~jammy_amd64.deb
64+
ubuntu/pool/agent/n/nginx-agent/nginx-agent_$VERSION~noble_arm64.deb
65+
ubuntu/pool/agent/n/nginx-agent/nginx-agent_$VERSION~jammy_arm64.deb
66+
ubuntu/pool/agent/n/nginx-agent/nginx-agent_$VERSION~noble_amd64.deb
67+
ubuntu/pool/agent/n/nginx-agent/nginx-agent_$VERSION~focal_amd64.deb
68+
)
69+
DEBIAN=(
70+
debian/pool/agent/n/nginx-agent/nginx-agent_$VERSION~bullseye_arm64.deb
71+
debian/pool/agent/n/nginx-agent/nginx-agent_$VERSION~bookworm_amd64.deb
72+
debian/pool/agent/n/nginx-agent/nginx-agent_$VERSION~bookworm_arm64.deb
73+
debian/pool/agent/n/nginx-agent/nginx-agent_$VERSION~bullseye_amd64.deb
74+
)
75+
AMZN=(
76+
amzn/2023/aarch64/RPMS/nginx-agent-$VERSION.amzn2023.ngx.aarch64.rpm
77+
amzn/2023/x86_64/RPMS/nginx-agent-$VERSION.amzn2023.ngx.x86_64.rpm
78+
79+
amzn2/2/aarch64/RPMS/nginx-agent-$VERSION.amzn2.ngx.aarch64.rpm
80+
amzn2/2/x86_64/RPMS/nginx-agent-$VERSION.amzn2.ngx.x86_64.rpm
81+
)
82+
SUSE=(
83+
sles/15/x86_64/RPMS/nginx-agent-$VERSION.sles15.ngx.x86_64.rpm
84+
sles/12/x86_64/RPMS/nginx-agent-$VERSION.sles12.ngx.x86_64.rpm
85+
)
86+
CENTOS=(
87+
centos/9/aarch64/RPMS/nginx-agent-$VERSION.el9.ngx.aarch64.rpm
88+
centos/9/x86_64/RPMS/nginx-agent-$VERSION.el9.ngx.x86_64.rpm
89+
centos/8/aarch64/RPMS/nginx-agent-$VERSION.el8.ngx.aarch64.rpm
90+
centos/8/x86_64/RPMS/nginx-agent-$VERSION.el8.ngx.x86_64.rpm
91+
)
92+
93+
uris=(
94+
${DEBIAN[@]}
95+
${UBUNTU[@]}
96+
${CENTOS[@]}
97+
${APK[@]}
98+
${AMZN[@]}
99+
${SUSE[@]}
100+
)
101+
102+
## Check and download if nginx-agent packages are present in the repository
103+
check_pkgs () {
104+
for pkg in ${uris[@]}; do
105+
echo -n "CHECK: ${PKG_REPO_URL}/${pkg} -> "
106+
local ret=$(curl -I -s ${CURL_OPTS} "https://${PKG_DIR}/${pkg}" | head -n1 | awk '{ print $2 }')
107+
if [[ ${ret} != 200 ]]; then
108+
echo -e "${RED}${ret}${NC}"
109+
continue
110+
fi
111+
echo -e "${GREEN}${ret}${NC}"
112+
113+
if [[ ${DL} == 1 ]]; then
114+
dl_pkg "${PKG_REPO_URL}/${pkg}"
115+
fi
116+
117+
done
118+
}
119+
120+
## Download a package
121+
dl_pkg () {
122+
local url=${1}
123+
echo -n "GET: ${url}... "
124+
mkdir -p "${PKG_DIR}/$(dirname ${pkg})"
125+
local ret=$(curl -s ${CURL_OPTS} "${url}" --output "${PKG_DIR}/${pkg}")
126+
if [[ $? != 0 ]]; then
127+
echo -e "${RED}Download failed!${NC}"
128+
return
129+
fi
130+
echo -e "${GREEN}Done${NC}"
131+
echo "SAVED: ${PKG_DIR}/${pkg}"
132+
}
133+
134+
## Check for the presence of an nginx-agent version matching $VERSION
135+
check_repo() {
136+
echo -n "Checking package repository ${PKG_REPO_URL}... "
137+
curl -s -I ${CURL_OPTS} "${PKG_REPO_URL}/index.xml" > /dev/null
138+
if [[ $? != 0 ]]; then
139+
echo -e "${RED}index.xml not found in ${PKG_REPO_URL} repository${NC}"
140+
exit 1
141+
else
142+
echo -e "${GREEN}Found!${NC}"
143+
fi
144+
145+
mkdir -p ${PKG_DIR}
146+
curl -s ${CURL_OPTS} "${PKG_REPO_URL}/index.xml" --output "${PKG_DIR}/index.xml" || exit 1
147+
148+
echo -n "Checking for nginx-agent version ${VERSION}... "
149+
grep -qnF "ver=\"${VERSION}\"" "${PKG_DIR}/index.xml"
150+
if [[ $? != 0 ]]; then
151+
echo -e "${RED}not found${NC}"
152+
exit 1
153+
else
154+
echo -e "${GREEN}Found!${NC}"
155+
fi
156+
}
157+
158+
check_repo
159+
check_pkgs

0 commit comments

Comments
 (0)