#!/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 package to add or delete from repository. " printf "%s\n" "$HELPMESSAGE" fi