Files
debrepo/debrepo.sh

153 lines
4.4 KiB
Bash
Executable File

#!/bin/sh
VERSION="0.1.0"
#DIR="$(cd "$(dirname "$0")" && pwd)" # location of debrepo source path
SCRIPT_PATH=$(readlink -f "$0")
DIR=$(dirname "$SCRIPT_PATH")
# set vars
index=1
for arg in $@; do
# set REPODIR variable
if [ $arg = "--repodir" ]; then
ARGID="$((index+1))"
eval "REPODIR=\$$ARGID"
fi
if [ $arg = "--gpg" ]; then
ARGID="$((index+1))"
eval "GPG=\$$ARGID"
fi
index=$((index+1))
done
if [ -z $REPODIR ]; then
echo "error: --repodir is not set"
exit 1
fi
if [ "$1" = "init" ] || [ "$1" = "-i" ] || [ "$1" = "--init" ]; then
# create basic folder structure
$DIR/scripts/repoinit.sh $REPODIR && echo "debrepo: repository folders have been successfully created"
exit
fi
if [ "$1" = "add" ] || [ "$1" = "-a" ] || [ "$1" = "--add" ]; then
if [ "$2" = "--letter-based-structure" ] || [ "$2" = "-l" ]; then
# generate package file name and copy deb file
PKG=$3
PKG_ARCH=$(dpkg -I $PKG | grep "Architecture" | sed 's/ Architecture: //')
PKG_VERSION=$(dpkg -I $PKG | grep "Version" | sed 's/ Version: //')
PKG_NAME=$(echo "$PKG" | sed 's/.*\///' | awk -F "_" '{print $1}')
PKG_FULLNAME="${PKG_NAME}_${PKG_VERSION}_${PKG_ARCH}.deb"
FIRST_LETTER=$(echo "$PKG" | sed 's/.*\///' | cut -c 1 | tr '[:upper:]' '[:lower:]')
PKG_PATH="$REPODIR/apt-repo/pool/main/$FIRST_LETTER/$PKG_NAME/$PKG_FULLNAME"
mkdir -p "$REPODIR/apt-repo/pool/main/$FIRST_LETTER/$PKG_NAME/"
cp $PKG $PKG_PATH
else
# generate package file name and copy deb file
PKG=$2
PKG_ARCH=$(dpkg -I $PKG | grep "Architecture" | sed 's/ Architecture: //')
PKG_VERSION=$(dpkg -I $PKG | grep "Version" | sed 's/ Version: //')
PKG_NAME=$(echo "$PKG" | sed 's/.*\///' | awk -F "_" '{print $1}')
PKG_FULLNAME="${PKG_NAME}_${PKG_VERSION}_${PKG_ARCH}.deb"
cp $PKG "$REPODIR/apt-repo/pool/main/$PKG_FULNAME"
fi
# generate package and release file
$DIR/scripts/genPkgRel.sh $REPODIR && echo "debrepo: package $PKG_FULLNAME was successfully added"
$DIR/scripts/gpgSign.sh $REPODIR && echo "debrepo: repo was succesfully signed"
exit
fi
if [ "$1" = "del" ] || [ "$1" = "-d" ] || [ "$1" = "--del" ]; then
first_letter=$(echo "$2" | sed 's/.*\///' | cut -c 1 | tr '[:upper:]' '[:lower:]')
pkg_name=$(echo "$2" | sed 's/.*\///' | awk -F "_" '{print $1}')
if [ -f "$REPODIR/apt-repo/pool/main/$first_letter/$pkg_name/$2" ]; then
# remove package
rm -i "$REPODIR/apt-repo/pool/main/$first_letter/$pkg_name/$2" && echo "debrepo: package $2 was successfully removed"
elif [ -f "$REPODIR/apt-repo/pool/main/$2" ]; then
# remove package
rm -i "$REPODIR/apt-repo/pool/main/$2" && echo "debrepo: package $2 was successfully removed"
else
echo "error: package $2 was not found";
exit 1;
fi
# generate package and release file
$DIR/scripts/genPkgRel.sh $REPODIR && echo "debrepo: repository was successfully updated"
$DIR/scripts/gpgSign.sh $REPODIR && echo "debrepo: repo was succesfully signed"
exit
fi
if [ "$1" = "list" ] || [ "$1" = "-l" ] || [ "$1" = "--list" ]; then
echo "debrepo: list of packages"
# if command tree is installed
if [ -e "$(which tree)" ]; then
tree "$REPODIR/apt-repo/pool/main/"
else
ls -R "$REPODIR/apt-repo/pool/main/"
fi
exit
fi
if [ "$1" = "sign" ] || [ "$1" = "-s" ] || [ "$1" = "--sign" ]; then
$DIR/scripts/gpgSign.sh $2 # $2 is optional value if GPG is set in config file
exit
fi
if [ "$1" = "update" ] || [ "$1" = "-u" ] || [ "$1" = "--update" ]; then
$DIR/scripts/genPkgRel.sh && echo "debrepo: repo was successfully updated" $DIR/scripts/gpgSign.sh $3 && echo "debrepo: repo was succesfully signed" # $3 is optional value if GPG is set in config file
exit
fi
if [ "$1" = "serve" ] || [ "$1" = "-S" ] || [ "$1" = "--serve" ]; then
echo "THIS SHOULD BE ONLY USED FOR TESTING!"
python3 -m http.server
exit
fi
if [ "$1" = "-v" ] || [ "$1" = "--version" ]; then
echo "debrepo $VERSION"
exit
fi
#if [ "$1" = "help" ] || [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
if [ 1 ]; then
HELPMESSAGE="
debrepo $VERSION
A Debian repository management tool.
USAGE:
debrepo [OPTIONS] [DEB]
OPTIONS:
init, -i, --init
create repository folder structure
add, -a, --add
add deb package to repository
del, -d, --del
delete deb package from repository
list, -l, --list
list deb packages
serve, -s, --serve
serve repository using python built in http module
help, -h, --help
print help message
-v, --version
print version of debrepo package
ARGS:
<DEB>...
*.deb package to add or delete from repository.
"
printf "%s\n" "$HELPMESSAGE"
fi