mirror of
https://github.com/unifi-utilities/unifios-utilities.git
synced 2024-08-30 18:32:21 +00:00
6b127a8d63
populate_netd is called and makes symlins into /etc/cni/net.d but the directory doesn't necessarily exist yet so need to ensure it is there before using it. fixes #505
155 lines
5.0 KiB
Bash
155 lines
5.0 KiB
Bash
#!/bin/bash
|
|
|
|
# Get DataDir location
|
|
DATA_DIR="/data"
|
|
case "$(ubnt-device-info firmware || true)" in
|
|
1*)
|
|
DATA_DIR="/mnt/data"
|
|
;;
|
|
2*)
|
|
DATA_DIR="/data"
|
|
;;
|
|
3*)
|
|
DATA_DIR="/data"
|
|
;;
|
|
*)
|
|
echo "ERROR: No persistent storage found." 1>&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
## Set the version of cni plugin to use. It will revert to latest if an invalid version is given, and the installer will use the last installed version if that fails.
|
|
# Examples of valid version code would be "latest", "v0.9.1" and "v0.9.0".
|
|
CNI_PLUGIN_VER=latest
|
|
# location of the CNI Plugin cached tar files
|
|
CNI_CACHE="${DATA_DIR}/.cache/cni-plugins"
|
|
# location of the conf files to go in the net.d folder of the cni-plugin directory
|
|
CNI_NETD="${DATA_DIR}/podman/cni"
|
|
# The checksum to use. For CNI Plugin sha1, sha256 and sha512 are available.
|
|
CNI_CHECKSUM="sha256"
|
|
# Maximum number of loops to attempt to download the plugin if required - setting a 0 or negative value will reinstalled the currently installed version (if in cache)
|
|
MAX_TRIES=3
|
|
|
|
mkdir -p "${CNI_CACHE}" "${CNI_NETD}" "/etc/cni/net.d"
|
|
# The script will attempt to use the nominated version first, and falls back to latest version if that fails
|
|
if [ "$#" -eq 0 ]; then
|
|
set ${CNI_PLUGIN_VER}
|
|
fi
|
|
# Insert conf files for podman networks into the net.d folder
|
|
populate_netd()
|
|
{
|
|
for file in "${CNI_NETD}"/*.conflist
|
|
do
|
|
if [ -f "$file" ]; then
|
|
ln -fs "$file" "/etc/cni/net.d/$(basename "$file")"
|
|
fi
|
|
done
|
|
}
|
|
# This function checks a valid checksum has been selected. It requires the checksum is given as the first argument
|
|
checksum_check()
|
|
{
|
|
if [ "$#" -eq 0 ]; then
|
|
echo "no arguement given"
|
|
return 2
|
|
fi
|
|
case $1 in
|
|
"sha1" | "sha256" | "sha512")
|
|
return 0;
|
|
;;
|
|
*)
|
|
echo "Incorrect checksum selection"
|
|
return 1;
|
|
;;
|
|
esac
|
|
}
|
|
# Test a file against it's checksum - 1 is the checksum type, 2 is the file to test and 3 is the checksum file
|
|
checksum_test()
|
|
{
|
|
if [ ! -f ${2} ] || [ ! -f ${3} ]; then
|
|
echo "file does not exist"
|
|
return 2
|
|
fi
|
|
if ! checksum_check ${1}; then
|
|
echo "An incorrect checksum has been used"
|
|
return 3
|
|
fi
|
|
value1=$(${1}sum ${2} | awk '{print $1}')
|
|
value2=$(cat ${3} | awk '{print $1}')
|
|
if [ "${value1}" = "${value2}" ]; then
|
|
return 0
|
|
else
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# Install function - it requires the first argument to be the version to install
|
|
install()
|
|
{
|
|
if [ "$#" -eq 0 ]; then
|
|
set "installed"
|
|
fi
|
|
if [ -f "${CNI_CACHE}/cni-plugins-linux-arm64-$1.tgz" ]; then
|
|
echo "Pouring ${CNI_CACHE}/cni-plugins-linux-arm64-$1.tgz"
|
|
rm -rf /opt/cni/bin
|
|
mkdir -p /opt/cni/bin
|
|
tar -xzC /opt/cni/bin -f "${CNI_CACHE}/cni-plugins-linux-arm64-$1.tgz"
|
|
# Create a link to installed version as fallback option
|
|
if [ "$1" != "installed" ]; then
|
|
ln -sf "${CNI_CACHE}/${CNI_TAR}" "${CNI_CACHE}/cni-plugins-linux-arm64-installed.tgz"
|
|
ln -sf "${CNI_CACHE}/${CNI_TAR}.${CNI_CHECKSUM}" "${CNI_CACHE}/cni-plugins-linux-arm64-installed.tgz.${CNI_CHECKSUM}"
|
|
fi
|
|
return 0
|
|
fi
|
|
echo "No CNI Plugin available to install"
|
|
return 1
|
|
}
|
|
# Download function - the first argument is the version to download. It will default to latest if a invalid option is given.
|
|
download()
|
|
{
|
|
# To stop infinite recursion
|
|
if [ ${MAX_TRIES} -lt 1 ]; then
|
|
# install the last installed version if latest and specified version have both failed.
|
|
install
|
|
return 1
|
|
fi
|
|
# This defaults to latest, in case the specified download doesn't work.
|
|
if [ "$#" -eq 0 ]; then
|
|
set latest
|
|
fi
|
|
# Find the corect parameters
|
|
set "$(basename "$(curl -fsSLo /dev/null -w "%{url_effective}" https://github.com/containernetworking/plugins/releases/$1)")" "$@"
|
|
CNI_TAR="cni-plugins-linux-arm64-$1.tgz"
|
|
URL="https://github.com/containernetworking/plugins/releases/download/$1/${CNI_TAR}"
|
|
# Cache a checksum for the file
|
|
if [ ! -f "${CNI_CACHE}/${CNI_TAR}.${CNI_CHECKSUM}" ]; then
|
|
echo "Downloading ${URL}.${CNI_CHECKSUM}"
|
|
curl -fsSLo "/tmp/${CNI_TAR}.${CNI_CHECKSUM}" "${URL}.${CNI_CHECKSUM}"
|
|
mv "/tmp/${CNI_TAR}.${CNI_CHECKSUM}" "${CNI_CACHE}/${CNI_TAR}.${CNI_CHECKSUM}"
|
|
fi
|
|
# Cache the tar file
|
|
if [ ! -f "${CNI_CACHE}/${CNI_TAR}" ]; then
|
|
echo "Downloading ${URL}"
|
|
curl -fsSLo "/tmp/${CNI_TAR}" "${URL}"
|
|
mv "/tmp/${CNI_TAR}" "${CNI_CACHE}/${CNI_TAR}"
|
|
fi
|
|
# Symbolic link to latest
|
|
if [ "$1" != "$2" ]; then
|
|
ln -sf "${CNI_CACHE}/${CNI_TAR}" "${CNI_CACHE}/cni-plugins-linux-arm64-$2.tgz"
|
|
ln -sf "${CNI_CACHE}/${CNI_TAR}.${CNI_CHECKSUM}" "${CNI_CACHE}/cni-plugins-linux-arm64-$2.tgz.${CNI_CHECKSUM}"
|
|
fi
|
|
# Test integrity of the files
|
|
if ! checksum_test ${CNI_CHECKSUM} ${CNI_CACHE}/${CNI_TAR} ${CNI_CACHE}/${CNI_TAR}.${CNI_CHECKSUM}; then
|
|
echo "Corrupt tar file, deleting tar and checksum"
|
|
rm -f "${CNI_CACHE}/${CNI_TAR}" "${CNI_CACHE}/${CNI_TAR}.${CNI_CHECKSUM}"
|
|
MAX_TRIES=${(MAX_TRIES - 1)}
|
|
# try again on fallback of latest until retries are exhausted
|
|
download
|
|
else
|
|
install $1 $2
|
|
return 0
|
|
fi
|
|
}
|
|
|
|
download
|
|
populate_netd
|