Created
October 29, 2022 17:36
-
-
Save dkebler/877ee12b00088898e3f3c30b42cb9ed7 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
add-ppa () { | |
if [ $EUID != 0 ]; then | |
sudo bash -c "$(declare -f add-ppa); add-ppa $*" | |
else | |
VERSION=jammy | |
KEYSDIR=/etc/apt/trusted.gpg.d | |
KEYSERVER=keyserver.ubuntu.com | |
declare OPTION; declare OPTARG; declare OPTIND | |
while getopts 'v:p:s:k:c:d:oi' OPTION; do | |
echo processing: option:$OPTION argument:$OPTARG index:$OPTIND remaining:${@:$OPTIND} | |
case "$OPTION" in | |
i) | |
INSTALL=true | |
;; | |
v) | |
VERSION=$OPTARG | |
;; | |
p) | |
PACKAGE=$OPTARG | |
;; | |
c) | |
CMD=$OPTARG | |
;; | |
d) | |
KEYSDIR=$OPTARG | |
;; | |
s) | |
KEYSERVER=$OPTARG | |
;; | |
o) | |
# overwrite any exising public key | |
KEYOVERWRITE=true | |
;; | |
*) echo unknown run option -$OPTARG | |
echo "USAGE: add-ppa <options> package/branch (e.g. git-core/ppa)" | |
echo "available options -v <ubnutu version name - default Jammy>; -p <apt install package name if not the same>" | |
;; | |
esac | |
done | |
shift $((OPTIND - 1)) | |
#check input | |
if [ -z ${1+x} ]; then | |
echo "No ppa provided!" | |
return 1 | |
fi | |
LAUNCHPAD="https://ppa.launchpadcontent.net" | |
DEV=$(echo $1 | cut -d ':' -f 2 | cut -d '/' -f1 ) | |
PACKAGE=${PACKAGE:-$DEV} | |
CMD=${CMD:-$PACKAGE} | |
BRANCH=${2:-$(echo $1| cut -d '/' -f 2)} | |
URL="$LAUNCHPAD/$DEV/$BRANCH/ubuntu $VERSION main" | |
echo "*********** Adding PPA Repository ************" | |
echo DEVELOPER: $DEV | |
echo BRANCH: $BRANCH | |
echo PACKAGE: $PACKAGE | |
echo COMMAND: $CMD | |
echo URL: $URL | |
if [[ -t 0 ]]; then | |
read -n 1 -p "do you want to continue [y]=>" REPLY | |
[[ $REPLY != "y" ]] && return 0 | |
fi | |
echo -e "\n*********************************************" | |
#create source list file | |
echo "deb $URL" > /etc/apt/sources.list.d/$DEV.list | |
echo "***** added /etc/apt/sources.list.d/$DEV.list with****" | |
cat /etc/apt/sources.list.d/$DEV.list | |
echo "*********************************************" | |
KEYFILE=$KEYSDIR/$DEV.gpg | |
[[ $KEYOVERWRITE ]] && rm $KEYFILE | |
if [ ! -f $KEYFILE ]; then | |
# using an update error to grab key id | |
KEY_ERROR=/tmp/${DEV}_key_error | |
touch $KEY_ERROR | |
apt-get update > /dev/null 2> $KEY_ERROR | |
cat $KEY_ERROR | |
KEY=$(sed -n 's/^.*NO_PUBKEY //p' "$KEY_ERROR" | head -1) | |
# echo Reposity Public Key Settings | |
# echo KEYS DIRECTORY: $KEYSDIR | |
# echo KEY SERVER: $KEYSERVER | |
# echo KEY: $KEY | |
if [ ! $KEY ]; then | |
echo can not determine $DEV/$BRANCH key sign | |
echo "removing file: /etc/apt/sources.list.d/$DEV.list and aborting" | |
rm /etc/apt/sources.list.d/$DEV.list | |
return 1 | |
fi | |
echo downloading and saving public key $KEY for $DEV/$BRANCH to $KEYFILE | |
gpg --keyserver $KEYSERVER --recv $KEY | |
gpg --export $KEY > $KEYFILE | |
else | |
echo " >>>>>> $KEYFILE already exists, using that key $KEY <<<<<" | |
fi | |
echo ppa repo $DEV/$BRANCH for package $PACKAGE now registered, updating... | |
apt-get update 1> /dev/null | |
if [[ $INSTALL ]]; then | |
echo installing $PACKAGE | |
[[ -t 0 ]] && apt policy $PACKAGE | |
apt-get install $PACKAGE -y | |
$CMD --version | |
fi | |
fi | |
} | |
# # if script was executed then call the function | |
(return 0 2>/dev/null) || add-ppa $@ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment