mirror of
https://github.com/kernelkit/infix.git
synced 2026-07-30 20:43:02 +02:00
- Moved setup.sh and yang_modules files from infix/src/confd/scripts/ to infix/utils/ to streamline the repository structure - Updated confd.mk to correctly reference the new location of the setup script - Introduced yang_modules_<type>.inc file to list all YANG modules for improved clarity and maintainability - Modified the new setup script to dynamically source module lists from yang_modules_<type>.inc
139 lines
4.0 KiB
Bash
Executable File
139 lines
4.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -x
|
|
# This is based on scripts/setup.sh from Netopeer2/libnetconf2
|
|
# env variables NP2_MODULE_DIR, NP2_MODULE_PERMS must be defined and NP2_MODULE_OWNER, NP2_MODULE_GROUP will be used if
|
|
# defined when executing this script!
|
|
#if [ -z "$NP2_MODULE_DIR" -o -z "$NP2_MODULE_PERMS" ]; then
|
|
# echo "Required environment variables not defined!"
|
|
# exit 1
|
|
#fi
|
|
|
|
|
|
# Source the provided file, which is expected to contain the list of YANG modules and their features.
|
|
# This file, specified by the first argument to the script ($1), is sourced to populate the MODULES
|
|
# array with the modules and their respective features to be processed by this script.
|
|
# The file typically includes definitions in the form of module@revision with optional features to enable,
|
|
# e.g., module@revision -e feature1 -e feature2.
|
|
source $1
|
|
|
|
# optional env variable override
|
|
if [ -n "$SYSREPOCTL_EXECUTABLE" ]; then
|
|
SYSREPOCTL="$SYSREPOCTL_EXECUTABLE"
|
|
# avoid problems with sudo PATH
|
|
elif [ `id -u` -eq 0 ] && [ -n "$USER" ] && [ `command -v su` ]; then
|
|
SYSREPOCTL=`command -v sysrepoctl -l $USER`
|
|
else
|
|
SYSREPOCTL=`command -v sysrepoctl`
|
|
fi
|
|
|
|
MODDIR=${SEARCH_PATH}
|
|
PERMS="660"
|
|
#OWNER=root
|
|
#GROUP=wheel
|
|
|
|
CMD_INSTALL=
|
|
|
|
# functions
|
|
INSTALL_MODULE_CMD() {
|
|
if [ -z "${CMD_INSTALL}" ]; then
|
|
CMD_INSTALL="'$SYSREPOCTL' -s $MODDIR -v2"
|
|
fi
|
|
CMD_INSTALL="$CMD_INSTALL -i $MODDIR/$1 -p '$PERMS'"
|
|
if [ ! -z "${OWNER}" ]; then
|
|
CMD_INSTALL="$CMD_INSTALL -o '$OWNER'"
|
|
fi
|
|
if [ ! -z "${GROUP}" ]; then
|
|
CMD_INSTALL="$CMD_INSTALL -g '$GROUP'"
|
|
fi
|
|
}
|
|
|
|
UPDATE_MODULE() {
|
|
CMD="'$SYSREPOCTL' -U $MODDIR/$1 -s '$MODDIR -v2"
|
|
eval $CMD
|
|
local rc=$?
|
|
if [ $rc -ne 0 ]; then
|
|
exit $rc
|
|
fi
|
|
}
|
|
|
|
CHANGE_PERMS() {
|
|
CMD="'$SYSREPOCTL' -c $1 -p '$PERMS' -v2"
|
|
if [ ! -z "${OWNER}" ]; then
|
|
CMD="$CMD -o '$OWNER'"
|
|
fi
|
|
if [ ! -z "${GROUP}" ]; then
|
|
CMD="$CMD -g '$GROUP'"
|
|
fi
|
|
eval $CMD
|
|
local rc=$?
|
|
if [ $rc -ne 0 ]; then
|
|
exit $rc
|
|
fi
|
|
}
|
|
|
|
ENABLE_FEATURE() {
|
|
"$SYSREPOCTL" -c $1 -e $2 -v2
|
|
local rc=$?
|
|
if [ $rc -ne 0 ]; then
|
|
exit $rc
|
|
fi
|
|
}
|
|
|
|
# get current modules
|
|
SCTL_MODULES=`$SYSREPOCTL -l`
|
|
for i in "${MODULES[@]}"; do
|
|
name=`echo "$i" | sed 's/\([^@]*\).*/\1/'`
|
|
|
|
SCTL_MODULE=`echo "$SCTL_MODULES" | grep "^$name \+|[^|]*| I"`
|
|
if [ -z "$SCTL_MODULE" ]; then
|
|
# prepare command to install module with all its features
|
|
INSTALL_MODULE_CMD "$i"
|
|
continue
|
|
fi
|
|
|
|
sctl_revision=`echo "$SCTL_MODULE" | sed 's/[^|]*| \([^ ]*\).*/\1/'`
|
|
revision=`echo "$i" | sed 's/[^@]*@\([^\.]*\).*/\1/'`
|
|
if [ "$sctl_revision" \< "$revision" ]; then
|
|
# update module without any features
|
|
file=`echo "$i" | cut -d' ' -f 1`
|
|
UPDATE_MODULE "$file"
|
|
fi
|
|
|
|
sctl_owner=`echo "$SCTL_MODULE" | sed 's/\([^|]*|\)\{3\} \([^:]*\).*/\2/'`
|
|
sctl_group=`echo "$SCTL_MODULE" | sed 's/\([^|]*|\)\{3\}[^:]*:\([^ ]*\).*/\2/'`
|
|
sctl_perms=`echo "$SCTL_MODULE" | sed 's/\([^|]*|\)\{4\} \([^ ]*\).*/\2/'`
|
|
if [ "$sctl_perms" != "$PERMS" ]; then
|
|
# change permissions/owner
|
|
CHANGE_PERMS "$name"
|
|
fi
|
|
|
|
# parse sysrepoctl features and add extra space at the end for easier matching
|
|
sctl_features="`echo "$SCTL_MODULE" | sed 's/\([^|]*|\)\{6\}\(.*\)/\2/'` "
|
|
# parse features we want to enable
|
|
features=`echo "$i" | sed 's/[^ ]* \(.*\)/\1/'`
|
|
while [ "${features:0:3}" = "-e " ]; do
|
|
# skip "-e "
|
|
features=${features:3}
|
|
# parse feature
|
|
feature=`echo "$features" | sed 's/\([^[:space:]]*\).*/\1/'`
|
|
|
|
# enable feature if not already
|
|
sctl_feature=`echo "$sctl_features" | grep " ${feature} "`
|
|
if [ -z "$sctl_feature" ]; then
|
|
# enable feature
|
|
ENABLE_FEATURE $name $feature
|
|
fi
|
|
|
|
# next iteration, skip this feature
|
|
features=`echo "$features" | sed 's/[^[:space:]]* \(.*\)/\1/'`
|
|
done
|
|
done
|
|
# install all the new modules
|
|
if [ ! -z "${CMD_INSTALL}" ]; then
|
|
eval $CMD_INSTALL
|
|
rc=$?
|
|
if [ $rc -ne 0 ]; then
|
|
exit $rc
|
|
fi
|
|
fi
|