153 lines
4.4 KiB
Bash
Executable File
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
|
|
|