big feat & update commit, read description...

feat: regenerate packages & release (update option), letter based folder structure support, choose gpg key, config file, multiple architecture done
update: docs, comments in code, add, del, list, sign
i dont know honestly... docs will be updated later
This commit is contained in:
Filip Rojek 2023-05-03 17:07:33 +02:00
parent 5af9d45d43
commit ce0b37cabe
7 changed files with 160 additions and 28 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
build/
commit

35
build.sh Executable file
View File

@ -0,0 +1,35 @@
#!/bin/sh
PACKAGE="debrepo"
VERSION="1.0.0"
MAINTAINER="Filip Rojek <filip@filiprojek.cz>"
DEPENDS=""
ARCHITECTURE=""
HOMEPAGE="https://git.filiprojek.cz/fr/debrepo"
DESCRIPTION=""
BASEF=$PACKAGE"_"$VERSION"_"$ACHITECTURE
# create folder structure
mkdir -p "./build/$BASEF/DEBIAN/" "./build/$BASEF/usr/bin/"
# create control file
echo "\
Package: $PACKAGE
Version: $VERSION
Maintainer: $MAINTAINER
Depends: $DEPENDS
Architecture: $ARCHITECTURE
Homepage: $HOMEPAGE
Description: $DESCRIPTION
" > "./build/$BASEF/DEBIAN/control"
# copy bin file
cp ./hello-program/hello-world "./build/$BASEF/usr/bin/"
# build deb file
dpkg --build "./build/$BASEF/"
# print info about deb file
dpkg-deb --info "./build/$BASEF.deb" && echo "Package build was successful"

72
debrepo
View File

@ -1,39 +1,95 @@
#!/bin/sh
VERSION="1.0.0"
DIR="$(cd "$(dirname "$0")" && pwd)"
DIR="$(cd "$(dirname "$0")" && pwd)" # location of debrepo source 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
$DIR/scripts/repoinit.sh && echo "debrepo: repository folders have been successfully created"
# 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
# copy deb file to repo folder structure
cp "./$2" "./apt-repo/pool/main/"
if [ "$2" = "--letter-based-structure" ] || [ "$2" = "-l" ];then
first_letter=$(echo "$3" | sed 's/[.\/]//g' | cut -c 1 | tr '[:upper:]' '[:lower:]')
mkdir "$REPODIR/apt-repo/pool/main/$first_letter/"
cp "./$3" "$REPODIR/apt-repo/pool/main/$first_letter/$3"
else
cp "./$2" "$REPODIR/apt-repo/pool/main/"
fi
# generate package and release file
$DIR/scripts/genPkgRel.sh $2 && echo "debrepo: package $2 was successfully added"
$DIR/scripts/genPkgRel.sh $REPODIR $2 && echo "debrepo: package $2 was successfully added"
$DIR/scripts/gpgSign.sh $REPODIR $GPG && echo "debrepo: repo was succesfully signed"
exit
fi
if [ "$1" = "del" ] || [ "$1" = "-d" ] || [ "$1" = "--del" ]; then
rm -i "./apt-repo/pool/main/$2" && echo "debrepo: package $2 was successfully removed"
first_letter=$(echo "$2" | sed 's/[.\/]//g' | cut -c 1 | tr '[:upper:]' '[:lower:]')
if [ -f "$REPODIR/apt-repo/pool/main/$first_letter/$2" ]; then
# remove package
rm -i "$REPODIR/apt-repo/pool/main/$first_letter/$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 $2 && echo "debrepo: repository was successfully updated"
$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"
ls -l "./apt-repo/pool/main/"
# 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
$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

View File

@ -1,17 +1,18 @@
#!/bin/sh
DIR="$(cd "$(dirname "$0")" && pwd)"
LS="$(which ls)"
ARCHS="$($LS -l apt-repo/dists/stable/main/ | awk '{print $9}' | awk NF | awk -F - '{print $2}')"
LS="$(which ls)" # this prevents bugs when aliasing ls to tools like exa
REPODIR="$1"
ARCHS="$($LS -l $REPODIR/apt-repo/dists/stable/main/ | awk '{print $9}' | awk NF | awk -F - '{print $2}')"
# generate Packages file
for ARCH in $ARCHS; do
echo $ARCH
dpkg-scanpackages --multiversion --arch $ARCH "./apt-repo/pool/" > "./apt-repo/dists/stable/main/binary-$ARCH/Packages"
dpkg-scanpackages --multiversion --arch $ARCH "$REPODIR/apt-repo/pool/" > "$REPODIR/apt-repo/dists/stable/main/binary-$ARCH/Packages"
# compress Packages file
cat "./apt-repo/dists/stable/main/binary-$ARCH/Packages" | gzip -9 > "./apt-repo/dists/stable/main/binary-$ARCH/Packages.gz"
cat "$REPODIR/apt-repo/dists/stable/main/binary-$ARCH/Packages" | gzip -9 > "$REPODIR/apt-repo/dists/stable/main/binary-$ARCH/Packages.gz"
done
# generate Release file
cd "./apt-repo/dists/stable/"
cd "$REPODIR/apt-repo/dists/stable/"
$DIR/generate-release.sh > "Release"

View File

@ -1,5 +1,6 @@
#!/bin/sh
set -e
. ../../config # this file is in /apt-repo/config
do_hash() {
HASH_NAME=$1
@ -11,20 +12,28 @@ do_hash() {
continue
fi
echo " $(${HASH_CMD} ${f} | cut -d" " -f1) $(wc -c $f)"
pwd
done
}
if [ ! -f "../../config" ]; then
echo "error - config file does not exists"
exit 1;
fi
cat << EOF
Origin: Example Repository
Label: Example
Suite: stable
Codename: stable
Version: 1.0
Architectures: amd64 arm64 arm7
Components: main
Description: An example software repository
Origin: $ORIGIN
Label: $LABEL
Suite: $SUITE
Codename: $CODENAME
Version: $VERSION
Architectures: $ARCHITECTURES
Components: $COMPONENTS
Description: $DESCRIPTION
Date: $(date -Ru)
EOF
do_hash "MD5Sum" "md5sum"
do_hash "SHA1" "sha1sum"
do_hash "SHA256" "sha256sum"

View File

@ -1,8 +1,32 @@
#!/bin/sh
KEY="$1"
REPODIR="$1"
. $REPODIR/apt-repo/config
#KEY="$2"
#echo $KEY
#if [ $KEY = "--repodir" ]; then
# KEY=""
#fi
#
#if [ $KEY ]; then
# continue
#elif [ $DEFAULT_GPG ]; then
# KEY="$DEFAULT_GPG"
#else
# echo "error: no gpg key provided"
# exit 1
#fi
if [ ! $DEFAULT_GPG ]; then
echo "error: no gpg key provided in config file"
exit 1
fi
KEY=$DEFAULT_GPG
echo "debrepo: signing using $KEY"
cat ./apt-repo/dists/stable/Release | gpg --default-key $KEY -abs > ./apt-repo/dists/stable/Release.gpg
cat ./apt-repo/dists/stable/Release | gpg --default-key $KEY -abs --clearsign > ./apt-repo/dists/stable/InRelease
cat $REPODIR/apt-repo/dists/stable/Release | gpg --default-key $KEY -abs > $REPODIR/apt-repo/dists/stable/Release.gpg
cat $REPODIR/apt-repo/dists/stable/Release | gpg --default-key $KEY -abs --clearsign > $REPODIR/apt-repo/dists/stable/InRelease

View File

@ -1,6 +1,11 @@
#!/bin/sh
# make folders
mkdir -p ./apt-repo/dists/stable/main/binary-amd64/
mkdir -p ./apt-repo/pool/main/
if [ -z $1 ]; then
echo "error: --repodir is not set"
exit 1
fi
# make folders
mkdir -p $1/apt-repo/dists/stable/main/binary-amd64/
mkdir -p $1/apt-repo/pool/main/