mirror of
https://github.com/webmin/webmin.git
synced 2026-02-03 14:13:29 +00:00
Add script to setup development repos with signing keys
This commit is contained in:
192
setup-repos-nightly.sh
Normal file
192
setup-repos-nightly.sh
Normal file
@@ -0,0 +1,192 @@
|
||||
#!/bin/sh
|
||||
# shellcheck disable=SC1090 disable=SC2059 disable=SC2164 disable=SC2181
|
||||
# setup-repos-nightly.sh
|
||||
# Configures Webmin development repository for RHEL and Debian systems (derivatives)
|
||||
|
||||
webmin_download="https://download.webmin.com"
|
||||
webmin_download_nightly="https://builds.webmin.dev"
|
||||
webmin_key="developers-key.asc"
|
||||
webmin_key_download="$webmin_download/$webmin_key"
|
||||
webmin_key_suffix="webmin-developers"
|
||||
debian_repo_file="/etc/apt/sources.list.d/webmin-nightly.list"
|
||||
rhel_repo_file="/etc/yum.repos.d/webmin-nightly.repo"
|
||||
download_wget="/usr/bin/wget"
|
||||
download="$download_wget -nv"
|
||||
|
||||
# Temporary colors
|
||||
NORMAL=''
|
||||
GREEN=''
|
||||
RED=''
|
||||
ITALIC=''
|
||||
BOLD=''
|
||||
if tty -s; then
|
||||
NORMAL="$(tput sgr0)"
|
||||
GREEN=$(tput setaf 2)
|
||||
RED="$(tput setaf 1)"
|
||||
BOLD=$(tput bold)
|
||||
ITALIC=$(tput sitm)
|
||||
fi
|
||||
|
||||
# Check user permission
|
||||
if [ "$(id -u)" -ne 0 ]; then
|
||||
echo "${RED}Error:${NORMAL} \`setup-repos-nightly.sh\` script must be run as root!" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Go to temp
|
||||
cd "/tmp" 1>/dev/null 2>&1
|
||||
if [ "$?" != "0" ]; then
|
||||
echo "${RED}Error:${NORMAL} Failed to switch to \`/tmp\` directory!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check for OS release file
|
||||
osrelease="/etc/os-release"
|
||||
if [ ! -f "$osrelease" ]; then
|
||||
echo "${RED}Error:${NORMAL} Cannot detect OS!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Detect OS and package manager and install command
|
||||
. "$osrelease"
|
||||
if [ -n "${ID_LIKE}" ]; then
|
||||
osid="$ID_LIKE"
|
||||
else
|
||||
osid="$ID"
|
||||
fi
|
||||
if [ -z "$osid" ]; then
|
||||
echo "${RED}Error:${NORMAL} Failed to detect OS!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Derivatives precise test
|
||||
osid_debian_like=$(echo "$osid" | grep "debian\|ubuntu")
|
||||
osid_rhel_like=$(echo "$osid" | grep "rhel\|fedora\|centos")
|
||||
|
||||
repoid_debian_like=debian
|
||||
if [ -n "${ID}" ]; then
|
||||
repoid_debian_like="${ID}"
|
||||
fi
|
||||
|
||||
# Setup OS dependent
|
||||
if [ -n "$osid_debian_like" ]; then
|
||||
package_type=deb
|
||||
install_cmd="apt-get install"
|
||||
install="$install_cmd --quiet --assume-yes"
|
||||
clean="apt-get clean"
|
||||
update="apt-get update"
|
||||
elif [ -n "$osid_rhel_like" ]; then
|
||||
package_type=rpm
|
||||
if command -pv dnf 1>/dev/null 2>&1; then
|
||||
install_cmd="dnf install"
|
||||
install="$install_cmd -y"
|
||||
clean="dnf clean all"
|
||||
else
|
||||
install_cmd="yum install"
|
||||
install="$install_cmd -y"
|
||||
clean="yum clean all"
|
||||
fi
|
||||
else
|
||||
echo "${RED}Error:${NORMAL} Unknown OS : $osid"
|
||||
exit
|
||||
fi
|
||||
|
||||
# Ask first
|
||||
if [ "$1" != "-f" ] && [ "$1" != "--force" ]; then
|
||||
printf "Setup development repository? (y/N) "
|
||||
read -r sslyn
|
||||
if [ "$sslyn" != "y" ] && [ "$sslyn" != "Y" ]; then
|
||||
exit
|
||||
fi
|
||||
fi
|
||||
|
||||
# Check for wget or curl or fetch
|
||||
if [ ! -x "$download_wget" ]; then
|
||||
if [ -x "/usr/bin/curl" ]; then
|
||||
download="/usr/bin/curl -f -s -L -O"
|
||||
elif [ -x "/usr/bin/fetch" ]; then
|
||||
download="/usr/bin/fetch"
|
||||
else
|
||||
# Try installing wget
|
||||
echo " Installing required ${ITALIC}wget${NORMAL} package from OS repository .."
|
||||
$install wget 1>/dev/null 2>&1
|
||||
if [ "$?" != "0" ]; then
|
||||
echo " .. failed to install 'wget' package!"
|
||||
exit 1
|
||||
else
|
||||
echo " .. done"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
# Check if GPG command is installed
|
||||
if [ -n "$osid_debian_like" ]; then
|
||||
if [ ! -x /usr/bin/gpg ]; then
|
||||
$update 1>/dev/null 2>&1
|
||||
$install gnupg 1>/dev/null 2>&1
|
||||
fi
|
||||
fi
|
||||
|
||||
# Clean files
|
||||
rm -f "/tmp/$webmin_key"
|
||||
|
||||
# Download key
|
||||
echo " Downloading Webmin key .."
|
||||
download_out=$($download $webmin_key_download 2>/dev/null 2>&1)
|
||||
if [ "$?" != "0" ]; then
|
||||
download_out=$(echo "$download_out" | tr '\n' ' ')
|
||||
echo " ..failed : $download_out"
|
||||
exit
|
||||
fi
|
||||
echo " .. done"
|
||||
|
||||
# Setup repos
|
||||
case "$package_type" in
|
||||
rpm)
|
||||
# Install our keys
|
||||
echo " Installing Webmin key .."
|
||||
rpm --import $webmin_key
|
||||
cp -f $webmin_key /etc/pki/rpm-gpg/RPM-GPG-KEY-$webmin_key_suffix
|
||||
echo " .. done"
|
||||
# Create repo file
|
||||
echo " Setting up Webmin development repository .."
|
||||
echo "[webmin-nightly-noarch]" >$rhel_repo_file
|
||||
echo "name=Webmin Development - noarch" >>$rhel_repo_file
|
||||
echo "baseurl=$webmin_download_nightly" >>$rhel_repo_file
|
||||
echo "enabled=1" >>$rhel_repo_file
|
||||
echo "gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-$webmin_key_suffix" >>$rhel_repo_file
|
||||
echo "gpgcheck=1" >>$rhel_repo_file
|
||||
echo " .. done"
|
||||
;;
|
||||
deb)
|
||||
# Install our keys
|
||||
echo " Installing Webmin key .."
|
||||
gpg --import $webmin_key 1>/dev/null 2>&1
|
||||
cat $webmin_key | gpg --dearmor > "/usr/share/keyrings/$repoid_debian_like-$webmin_key_suffix.gpg"
|
||||
echo " .. done"
|
||||
# Create repo file
|
||||
echo " Setting up Webmin development repository .."
|
||||
echo "deb [signed-by=/usr/share/keyrings/$repoid_debian_like-$webmin_key_suffix.gpg] $webmin_download_nightly ./" >$debian_repo_file
|
||||
echo " .. done"
|
||||
# Clean meta
|
||||
echo " Cleaning repository metadata .."
|
||||
$clean 1>/dev/null 2>&1
|
||||
echo " .. done"
|
||||
# Update meta
|
||||
echo " Downloading repository metadata .."
|
||||
$update 1>/dev/null 2>&1
|
||||
echo " .. done"
|
||||
;;
|
||||
*)
|
||||
echo "${RED}Error:${NORMAL} Cannot setup repositories on this system."
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# Could not setup
|
||||
if [ ! -x "/usr/bin/webmin" ]; then
|
||||
echo "Webmin package can now be installed using ${GREEN}${BOLD}${ITALIC}$install_cmd webmin${NORMAL} command."
|
||||
fi
|
||||
|
||||
exit 0
|
||||
Reference in New Issue
Block a user