Built and documented more logic functions, started an exit codes help section adding exit codes as I go. Ceated a tester script for testing logic functions from functions.lib.sh without the need to run the entire code base.
This commit is contained in:
@@ -1,7 +1,122 @@
|
||||
## DebMirror Manager Actions Library
|
||||
|
||||
# doAddRepo (Busy)
|
||||
# doEditRepo
|
||||
# doHelper
|
||||
# doHelperAdd
|
||||
# doHelperEditRepo
|
||||
# doHelperExitCodes
|
||||
# doHelperListRepos
|
||||
# doHelperQuietSyncRepos
|
||||
# doHelperRemoveRepo
|
||||
# doHelperRepoUsage
|
||||
# doHelperShowRepo
|
||||
# doHelperSyncRepos
|
||||
# doHelperTestRepo
|
||||
# doHelperUpdater
|
||||
# doLicense
|
||||
# doQuietSyncRepos
|
||||
# doRepoUsage
|
||||
# doShowRepo
|
||||
# doSyncRepos
|
||||
# doTestRepo
|
||||
# doUpdater
|
||||
|
||||
function doAddRepo {
|
||||
echo "Add Repo"
|
||||
local architecture
|
||||
local debinst
|
||||
local distribution
|
||||
local keyring
|
||||
local keyringurl
|
||||
local localrepo
|
||||
local method
|
||||
local prettyname
|
||||
local remotefqdn
|
||||
local remoterepo
|
||||
local section
|
||||
local sources
|
||||
|
||||
echo -en "What is the FQDN for the repo server you want to mirror? "
|
||||
read -r remotefqdn
|
||||
[[ "${remotefqdn}" =~ ^([a-z0-9](-?[a-z0-9])*\.)+[a-z]{2,}$ ]] || funcError "Not a valid FQDN..."
|
||||
nslookup "${remotefqdn}" > /dev/null 2>&1 || funcError "FQDN does not resolve to an IP address..."
|
||||
echo -en "What is the name of the repo on ${remotefqdn} you want to mirror? "
|
||||
read -r remoterepo
|
||||
[[ "${remoterepo}" =~ ^[a-z0-9]+([a-z0-9-]*[a-z0-9])?$ ]] || funcError "Invalid repo name...\nMust use lowercase letter, digits and/or dash - (dash can not be the first or last character)..."
|
||||
echo -en "What is the name you want to use for the repo on your local mirror server ${localfqdn}?\n(Press ENTER to use ${remoterepo}) "
|
||||
read -r localrepo
|
||||
if [[ -z "${localrepo}" ]]; then
|
||||
localrepo="${remoterepo}"
|
||||
fi
|
||||
[[ "${localrepo}" =~ ^[a-z0-9]+([a-z0-9-]*[a-z0-9])?$ ]] || funcError "Invalid repo name...\nMust use lowercase letter, digits and/or dash - (dash can not be the first or last character)..."
|
||||
echo -en "What is the name of the section(s) on ${remotefqdn}/${remoterepo} that you want to mirror?\n(Use a comma , as a delimeter if you want to use more than one - no spaces) "
|
||||
read -r section
|
||||
[[ "${section}" =~ ^([a-z0-9]+([a-z0-9-]*[a-z0-9])?)(,([a-z0-9]+([a-z0-9-]*[a-z0-9])?))*$ ]] || funcError "Invalid section(s) name(s)...\nMust use lowercase letter, digits and/or dash - (dash can not be the first or last character)...\nYou can use a comma , as a delimiter for multiple sections, but no spaces..."
|
||||
echo -en "What is the name of the distribution(s) on ${remotefqdn}/${remoterepo} that you want to mirror?\n(Use a comma , as a delimeter if you want to use more than one - no spaces) "
|
||||
read -r distribution
|
||||
[[ "${distribution}" =~ ^([a-z0-9]+([a-z0-9-]*[a-z0-9])?)(,([a-z0-9]+([a-z0-9-]*[a-z0-9])?))*$ ]] || funcError "Invalid distribution(s) name(s)...\nMust use lowercase letter, digits and/or dash - (dash can not be the first or last character)...\nYou can use a comma , as a delimiter for multiple distributions, but no spaces..."
|
||||
echo -en "What hardware architecture(s) do you want to mirror? (Use a comma , as a delimeter\nif you want to use more than one - no spaces) "
|
||||
read -r architecture
|
||||
[[ "${architecture}" =~ ^([a-z0-9]+)(,[a-z0-9]+)*$ ]] || funcError "Invalid architecture string given...\nMust use lowercase letter, digits and/or dash - (dash can not be the first or last character)...\nYou can use a comma , as a delimiter for multiple architectures, but no spaces..."
|
||||
echo -en "Must we use HTTPS for the remote repo? (Y/n) "
|
||||
read -r -n 1 method
|
||||
if [[ -z "${method}" || "${method,,}" == "y" ]]; then
|
||||
echo "Using HTTPS..."
|
||||
method="https"
|
||||
else
|
||||
echo "Using HTTP..."
|
||||
method="http"
|
||||
fi
|
||||
echo -en "If this repo requires a GPG key then paste the URL to download it, or just press\nENTER if there is no GPG key. "
|
||||
read -r keyringurl
|
||||
if [[ -z "${keyringurl}" ]]; then
|
||||
echo "No keyring is being used..."
|
||||
keyring=false
|
||||
else
|
||||
echo "Downloading keyring file and saving it to /etc/debmirrorman/${localrepo}.gpg..."
|
||||
curl -sSLo "/etc/debmirrorman/${localrepo}.gpg" "${keyringurl}" || funcError "Failed to down ${keyringurl}..."
|
||||
keyring=true
|
||||
fi
|
||||
echo -en "Do you want to mirror the Source data and files (y/N) "
|
||||
read -r -n 1 sources
|
||||
if [[ -z "${sources}" || "${sources,,}" != "y" ]]; then
|
||||
echo "Not including Source data..."
|
||||
sources=false
|
||||
else
|
||||
echo "Including Source data..."
|
||||
sources=true
|
||||
fi
|
||||
echo -en "Do you want to mirror the Debian Install data (normally only needed when mirroring\nthe main Debian repos at deb.debian.org) (y/N) "
|
||||
read -r -n 1 debinst
|
||||
if [[ -z "${debinst}" || "${debinst,,}" != "y" ]]; then
|
||||
echo "Not including Debian Install data..."
|
||||
debinst=false
|
||||
else
|
||||
echo "Including Debian Install data..."
|
||||
debinst=true
|
||||
fi
|
||||
echo -en "Choose a memorable name that you can use to identify this repo in the future... "
|
||||
read -r prettyname
|
||||
echo "Writing configuration files..."
|
||||
echo "declare -a localrepos=(" >> "/etc/debmirrorman/settings.conf" || funcError "Failed to write /etc/debmirrorman/settings.conf"
|
||||
echo " \"${localrepo}\"" >> "/etc/debmirrorman/settings.conf" || funcError "Failed to write /etc/debmirrorman/settings.conf"
|
||||
echo ")" >> "/etc/debmirrorman/settings.conf" || funcError "Failed to write /etc/debmirrorman/settings.conf"
|
||||
echo "declare -A prettynames=(" >> "/etc/debmirrorman/settings.conf" || funcError "Failed to write /etc/debmirrorman/settings.conf"
|
||||
echo " [${localrepo}]=\"${prettyname}\"" >> "/etc/debmirrorman/settings.conf" || funcError "Failed to write /etc/debmirrorman/settings.conf"
|
||||
echo ")" >> "/etc/debmirrorman/settings.conf" || funcError "Failed to write /etc/debmirrorman/settings.conf"
|
||||
echo "## Details for ${prettyname}" > "/etc/debmirrorman/${localrepo}.repo" || funcError "Failed to write /etc/debmirrorman/${localrepo}.repo"
|
||||
echo "declare remotefqdn=\"${remotefqdn}\"" >> "/etc/debmirrorman/${localrepo}.repo" || funcError "Failed to write /etc/debmirrorman/${localrepo}.repo"
|
||||
echo "declare remoterepo=\"${remoterepo}\"" >> "/etc/debmirrorman/${localrepo}.repo" || funcError "Failed to write /etc/debmirrorman/${localrepo}.repo"
|
||||
echo "declare section=\"${section}\"" >> "/etc/debmirrorman/${localrepo}.repo" || funcError "Failed to write /etc/debmirrorman/${localrepo}.repo"
|
||||
echo "declare distribution=\"${distribution}\"" >> "/etc/debmirrorman/${localrepo}.repo" || funcError "Failed to write /etc/debmirrorman/${localrepo}.repo"
|
||||
echo "declare architecture=\"${architecture}\"" >> "/etc/debmirrorman/${localrepo}.repo" || funcError "Failed to write /etc/debmirrorman/${localrepo}.repo"
|
||||
echo "declare method=\"${method}\"" >> "/etc/debmirrorman/${localrepo}.repo" || funcError "Failed to write /etc/debmirrorman/${localrepo}.repo"
|
||||
echo "declare keyring=${keyring}" >> "/etc/debmirrorman/${localrepo}.repo" || funcError "Failed to write /etc/debmirrorman/${localrepo}.repo"
|
||||
echo "declare keyringurl=\"${keyringurl}\"" >> "/etc/debmirrorman/${localrepo}.repo" || funcError "Failed to write /etc/debmirrorman/${localrepo}.repo"
|
||||
echo "declare sources=${sources}" >> "/etc/debmirrorman/${localrepo}.repo" || funcError "Failed to write /etc/debmirrorman/${localrepo}.repo"
|
||||
echo "declare debinst=${debinst}" >> "/etc/debmirrorman/${localrepo}.repo" || funcError "Failed to write /etc/debmirrorman/${localrepo}.repo"
|
||||
echo "## This file was last updated on $(date)" >> "/etc/debmirrorman/${localrepo}.repo" || funcError "Failed to write /etc/debmirrorman/${localrepo}.repo"
|
||||
echo
|
||||
exit
|
||||
}
|
||||
|
||||
@@ -25,6 +140,54 @@ function doHelperEditRepo {
|
||||
exit
|
||||
}
|
||||
|
||||
function doHelperExitCodes {
|
||||
echo "${TITLE} Documentation - Exit Codes"
|
||||
echo
|
||||
echo "Use up and down arrows to scroll or press Q to exit"
|
||||
echo
|
||||
echo " No Errors"
|
||||
echo " 0 - Completed and exited with no errors"
|
||||
echo
|
||||
echo " Command Errors"
|
||||
echo " 1 - Command not valid"
|
||||
echo " 2 - Command does not support a local repo name"
|
||||
echo " 3 - Command requires a local repo name"
|
||||
echo " 4 - Local repo name is not valid"
|
||||
echo " 5 - Local repo name is not found in ${etcdirectory}/settings.conf"
|
||||
echo " 6 - Local repo file is not found in ${etcdirectory}"
|
||||
echo " 9 - Unknown error with local repo"
|
||||
echo
|
||||
echo " Help Errors"
|
||||
echo " 11 - No help documentation available for invalid command"
|
||||
echo " 12 - No help documentation available for command"
|
||||
echo
|
||||
echo " Configuration Errors"
|
||||
echo " 21 - ${etcdirectory}/settings.conf does not exist"
|
||||
echo " 22 - No \${localfqdn} defined in ${etcdirectory}/settings.conf"
|
||||
echo " 23 - Invalid \${localfqdn} defined in ${etcdirectory}/settings.conf"
|
||||
echo " 29 - Unknown error loading ${etcdirectory}/settings.conf"
|
||||
echo
|
||||
echo " Adding Repo Errors"
|
||||
echo " 31 - No local repo name given"
|
||||
echo " 32 - Given local repo name is invalid"
|
||||
echo " 33 - Given local repo name already exists in ${etcdirectory}/settings.conf"
|
||||
echo " 34 - There is already a file {localreponame}.repo in /etc/debmirrorman"
|
||||
echo " 35 - No pretty name given"
|
||||
echo " 36 - No remote FQDN given"
|
||||
echo " 37 - Given remote FQDN is invalid"
|
||||
echo " 38 - Given remote FQDN does not resolve to an IP address"
|
||||
echo " 39 - No remote repo name given"
|
||||
echo " 40 - Given remote repo name is invalid"
|
||||
echo " 41 - No section name given"
|
||||
echo " 42 - Given section name is invalid"
|
||||
echo " 43 - No distributions list given"
|
||||
echo " 44 - Given distributions list is invalid"
|
||||
echo " 45 - No architectures list given"
|
||||
echo " 46 - Given architectures list is invalid"
|
||||
echo " 47 - Given keyring URL is invalid"
|
||||
echo " 48 - Given keyring URL cannot be downloaded"
|
||||
}
|
||||
|
||||
function doHelperListRepos {
|
||||
echo "Helper List"
|
||||
exit
|
||||
@@ -71,7 +234,44 @@ function doLicense {
|
||||
}
|
||||
|
||||
function doListRepos {
|
||||
echo "List Repos"
|
||||
local diff
|
||||
local n
|
||||
local repo
|
||||
local reponamelength
|
||||
local reponamemaxlength
|
||||
|
||||
reponamemaxlength=10
|
||||
|
||||
for repo in ${localrepos[@]}; do
|
||||
reponamelength=${#repo}
|
||||
[[ ${reponamelength} -gt ${reponamemaxlength} ]] && reponamemaxlength=${reponamelength}
|
||||
done
|
||||
|
||||
diff=$((reponamemaxlength-7))
|
||||
|
||||
echo -n "Local Repo"
|
||||
|
||||
for ((n=0; n<${diff}; n++)); do
|
||||
echo -n " "
|
||||
done
|
||||
|
||||
echo "Pretty Name"
|
||||
echo
|
||||
|
||||
for repo in ${localrepos[@]}; do
|
||||
reponamelength=${#repo}
|
||||
diff=$((reponamemaxlength-${reponamelength}+3))
|
||||
|
||||
echo -n "${repo}"
|
||||
|
||||
for ((n=0; n<${diff}; n++)); do
|
||||
echo -n " "
|
||||
done
|
||||
|
||||
echo "${prettynames[${repo}]}"
|
||||
done | sort
|
||||
echo
|
||||
|
||||
exit
|
||||
}
|
||||
|
||||
@@ -85,7 +285,52 @@ function doQuietSyncRepos {
|
||||
}
|
||||
|
||||
function doRemoveRepo {
|
||||
echo "Remove Repo ${1}"
|
||||
local confirmation
|
||||
local repo="${1}"
|
||||
|
||||
echo "Removing '${prettynames[${repo}]}'..."
|
||||
echo -n "This cannot be undone. Type REMOVE then press ENTER to continue... "
|
||||
read -r confirmation
|
||||
|
||||
if [[ "${confirmation,,}" != "remove" ]]; then
|
||||
echo "Exiting without removing!"
|
||||
echo
|
||||
exit
|
||||
fi
|
||||
|
||||
if [[ -f /etc/debmirrorman/${repo}.repo ]]; then
|
||||
echo "Deleting /etc/debmirrorman/${repo}.repo..."
|
||||
rm -f /etc/debmirrorman/${repo}.repo
|
||||
fi
|
||||
|
||||
if [[ -f /etc/debmirrorman/${repo}.gpg ]]; then
|
||||
echo "Deleting /etc/debmirrorman/${repo}.gpg..."
|
||||
rm -f /etc/debmirrorman/${repo}.gpg
|
||||
fi
|
||||
|
||||
echo "Writing /etc/debmirrorman/settings.conf..."
|
||||
|
||||
localrepos+=("${repo}")
|
||||
localrepos=($(echo "${localrepos[@]}" | tr ' ' '\n' | sort | uniq -u))
|
||||
|
||||
echo "declare localfqdn=\"${localfqdn}\"" > /etc/debmirrorman/settings.conf
|
||||
echo "declare -a localrepos=(" >> /etc/debmirrorman/settings.conf
|
||||
|
||||
for repo in ${localrepos[@]}; do
|
||||
echo " \"${repo}\"" >> /etc/debmirrorman/settings.conf
|
||||
done
|
||||
|
||||
echo ")" >> /etc/debmirrorman/settings.conf
|
||||
echo "declare -A prettynames=(" >> /etc/debmirrorman/settings.conf
|
||||
|
||||
for repo in ${localrepos[@]}; do
|
||||
echo " [${repo}]=\"${prettynames[${repo}]}\"" >> /etc/debmirrorman/settings.conf
|
||||
done
|
||||
|
||||
echo ")" >> /etc/debmirrorman/settings.conf
|
||||
|
||||
echo "DONE!"
|
||||
echo
|
||||
exit
|
||||
}
|
||||
|
||||
@@ -124,5 +369,6 @@ function doUpdater {
|
||||
|
||||
function doVersion {
|
||||
echo "DebMirror Manager version ${VERSION}"
|
||||
echo
|
||||
exit
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user