Compare commits
1 Commits
main
...
feat/distr
Author | SHA1 | Date | |
---|---|---|---|
d3f1349838 |
21
README.md
21
README.md
@ -2,6 +2,17 @@
|
|||||||
|
|
||||||
A Debian repository management tool.
|
A Debian repository management tool.
|
||||||
|
|
||||||
|
## Development
|
||||||
|
__Warning! This software is still under development and is not intended for stable use.__
|
||||||
|
|
||||||
|
### Todo
|
||||||
|
- [x] finish add feature
|
||||||
|
- [x] create del feature
|
||||||
|
- [ ] multiple repositories feature
|
||||||
|
- [ ] multiple archs feature
|
||||||
|
- [x] signing repositories using GPG
|
||||||
|
- [ ] make simple way to edit repository info in release file
|
||||||
|
|
||||||
## About
|
## About
|
||||||
`Debrepo` is a software tool designed for creating and managing Debian repositories for `*.deb` packages, providing a lightweight and user-friendly alternative to more complex tools like `reprepo` or `aptly`. While these alternatives may offer more advanced features, Debrepo focuses on providing essential functionality and ease of use for repository management, allowing users to easily add, remove, and update packages within their repositories. With Debrepo, users can efficiently manage their Debian repositories without the unnecessary complexity of more advanced tools.
|
`Debrepo` is a software tool designed for creating and managing Debian repositories for `*.deb` packages, providing a lightweight and user-friendly alternative to more complex tools like `reprepo` or `aptly`. While these alternatives may offer more advanced features, Debrepo focuses on providing essential functionality and ease of use for repository management, allowing users to easily add, remove, and update packages within their repositories. With Debrepo, users can efficiently manage their Debian repositories without the unnecessary complexity of more advanced tools.
|
||||||
|
|
||||||
@ -9,13 +20,11 @@ A Debian repository management tool.
|
|||||||
`sh` `dpkg` `gpg` `python3`
|
`sh` `dpkg` `gpg` `python3`
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
### from source
|
|
||||||
- clone this repository to some folder inside your file system
|
|
||||||
- make symlink to `/bin/`
|
|
||||||
- now you should be able to use `debrepo`
|
|
||||||
|
|
||||||
### from deb package
|
### from deb package
|
||||||
- *Todo*
|
- Todo
|
||||||
|
|
||||||
|
### from source
|
||||||
|
- Todo
|
||||||
|
|
||||||
## How to use
|
## How to use
|
||||||
```
|
```
|
||||||
|
48
debrepo
48
debrepo
@ -1,13 +1,10 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
VERSION="0.1.0"
|
VERSION="1.0.0"
|
||||||
#DIR="$(cd "$(dirname "$0")" && pwd)" # location of debrepo source path
|
DIR="$(cd "$(dirname "$0")" && pwd)" # location of debrepo source path
|
||||||
SCRIPT_PATH=$(readlink -f "$0")
|
|
||||||
DIR=$(dirname "$SCRIPT_PATH")
|
|
||||||
|
|
||||||
# set vars
|
# set vars
|
||||||
index=1
|
index=1
|
||||||
for arg in $@; do
|
for arg in $@; do
|
||||||
# set REPODIR variable
|
|
||||||
if [ $arg = "--repodir" ]; then
|
if [ $arg = "--repodir" ]; then
|
||||||
ARGID="$((index+1))"
|
ARGID="$((index+1))"
|
||||||
eval "REPODIR=\$$ARGID"
|
eval "REPODIR=\$$ARGID"
|
||||||
@ -18,6 +15,11 @@ for arg in $@; do
|
|||||||
eval "GPG=\$$ARGID"
|
eval "GPG=\$$ARGID"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ $arg = "--distro" ]; then
|
||||||
|
ARGID="$((index+1))"
|
||||||
|
eval "DISTRO=\$$ARGID"
|
||||||
|
fi
|
||||||
|
|
||||||
index=$((index+1))
|
index=$((index+1))
|
||||||
done
|
done
|
||||||
|
|
||||||
@ -33,32 +35,26 @@ if [ "$1" = "init" ] || [ "$1" = "-i" ] || [ "$1" = "--init" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$1" = "add" ] || [ "$1" = "-a" ] || [ "$1" = "--add" ]; then
|
if [ "$1" = "add" ] || [ "$1" = "-a" ] || [ "$1" = "--add" ]; then
|
||||||
if [ "$2" = "--letter-based-structure" ] || [ "$2" = "-l" ]; then
|
# if distro specific package
|
||||||
# generate package file name and copy deb file
|
if [ "$DISTRO" ]; then
|
||||||
PKG=$3
|
echo "distro: $DISTRO"
|
||||||
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/"
|
exit
|
||||||
cp $PKG $PKG_PATH
|
fi
|
||||||
|
exit
|
||||||
|
# copy deb file to repo folder structure
|
||||||
|
if [ "$2" = "--letter-based-structure" ] || [ "$2" = "-l" ];then
|
||||||
|
first_letter=$(echo "$3" | sed 's/.*\///' | cut -c 1 | tr '[:upper:]' '[:lower:]')
|
||||||
|
pkg_name=$(echo "$3" | sed 's/.*\///' | awk -F "_" '{print $1}')
|
||||||
|
mkdir -p "$REPODIR/apt-repo/pool/main/$first_letter/$pkg_name/"
|
||||||
|
cp "$3" "$REPODIR/apt-repo/pool/main/$first_letter/$pkg_name/"
|
||||||
else
|
else
|
||||||
# generate package file name and copy deb file
|
cp "$2" "$REPODIR/apt-repo/pool/main/"
|
||||||
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
|
fi
|
||||||
|
|
||||||
# generate package and release file
|
# generate package and release file
|
||||||
$DIR/scripts/genPkgRel.sh $REPODIR && echo "debrepo: package $PKG_FULLNAME was successfully added"
|
$DIR/scripts/genPkgRel.sh $REPODIR $2 $DISTRO && echo "debrepo: package $2 was successfully added"
|
||||||
$DIR/scripts/gpgSign.sh $REPODIR && echo "debrepo: repo was succesfully signed"
|
$DIR/scripts/gpgSign.sh $REPODIR $GPG $DISTRO && echo "debrepo: repo was succesfully signed"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -1,20 +1,22 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
#DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
||||||
SCRIPT_PATH=$(readlink -f "$0")
|
|
||||||
DIR=$(dirname "$SCRIPT_PATH")
|
|
||||||
LS="$(which ls)" # this prevents bugs when aliasing ls to tools like exa
|
LS="$(which ls)" # this prevents bugs when aliasing ls to tools like exa
|
||||||
|
DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||||
REPODIR="$1"
|
REPODIR="$1"
|
||||||
ARCHS="$($LS -l $REPODIR/apt-repo/dists/stable/main/ | awk '{print $9}' | awk NF | awk -F - '{print $2}')"
|
DISTRO="$3"
|
||||||
|
if [ !$DISTRO ]; then
|
||||||
|
DISTRO="stable"
|
||||||
|
fi
|
||||||
|
|
||||||
|
ARCHS="$($LS -l $REPODIR/apt-repo/dists/$DISTRO/main/ | awk '{print $9}' | awk NF | awk -F - '{print $2}')"
|
||||||
|
|
||||||
# generate Packages file
|
# generate Packages file
|
||||||
cd $REPODIR/apt-repo/
|
|
||||||
for ARCH in $ARCHS; do
|
for ARCH in $ARCHS; do
|
||||||
dpkg-scanpackages --multiversion --arch $ARCH "pool/" > "dists/stable/main/binary-$ARCH/Packages"
|
dpkg-scanpackages --multiversion --arch $ARCH "$REPODIR/apt-repo/pool/" > "$REPODIR/apt-repo/dists/$DISTRO/main/binary-$ARCH/Packages"
|
||||||
# compress Packages file
|
# compress Packages file
|
||||||
cat "dists/stable/main/binary-$ARCH/Packages" | gzip -9 > "dists/stable/main/binary-$ARCH/Packages.gz"
|
cat "$REPODIR/apt-repo/dists/$DISTRO/main/binary-$ARCH/Packages" | gzip -9 > "$REPODIR/apt-repo/dists/$DISTRO/main/binary-$ARCH/Packages.gz"
|
||||||
done
|
done
|
||||||
|
|
||||||
# generate Release file
|
# generate Release file
|
||||||
cd "dists/stable/"
|
cd "$REPODIR/apt-repo/dists/$DISTRO/"
|
||||||
$DIR/generate-release.sh > "Release"
|
$DIR/generate-release.sh $DISTRO > "Release"
|
||||||
|
|
||||||
|
@ -2,6 +2,15 @@
|
|||||||
set -e
|
set -e
|
||||||
. ../../config # this file is in /apt-repo/config
|
. ../../config # this file is in /apt-repo/config
|
||||||
|
|
||||||
|
if [ ! $DISTRO ]; then
|
||||||
|
DISTRO="stable"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f "../../config" ]; then
|
||||||
|
echo "error - config file does not exists"
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
|
||||||
do_hash() {
|
do_hash() {
|
||||||
HASH_NAME=$1
|
HASH_NAME=$1
|
||||||
HASH_CMD=$2
|
HASH_CMD=$2
|
||||||
@ -15,17 +24,11 @@ do_hash() {
|
|||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
if [ ! -f "../../config" ]; then
|
|
||||||
echo "error - config file does not exists"
|
|
||||||
exit 1;
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
cat << EOF
|
cat << EOF
|
||||||
Origin: $ORIGIN
|
Origin: $ORIGIN
|
||||||
Label: $LABEL
|
Label: $LABEL
|
||||||
Suite: $SUITE
|
Suite: $SUITE
|
||||||
Codename: $CODENAME
|
Codename: $DISTRO
|
||||||
Version: $VERSION
|
Version: $VERSION
|
||||||
Architectures: $ARCHITECTURES
|
Architectures: $ARCHITECTURES
|
||||||
Components: $COMPONENTS
|
Components: $COMPONENTS
|
||||||
|
@ -1,17 +1,20 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
REPODIR="$1"
|
REPODIR="$1"
|
||||||
|
DISTRO="$3"
|
||||||
. $REPODIR/apt-repo/config
|
. $REPODIR/apt-repo/config
|
||||||
|
|
||||||
|
if [ ! $DISTRO ]; then
|
||||||
|
DISTRO="stable"
|
||||||
|
fi
|
||||||
|
|
||||||
if [ ! $DEFAULT_GPG ]; then
|
if [ ! $DEFAULT_GPG ]; then
|
||||||
echo "error: no gpg key provided in config file"
|
echo "error: no gpg key provided in config file"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
KEY=$DEFAULT_GPG
|
KEY=$DEFAULT_GPG
|
||||||
|
|
||||||
|
|
||||||
echo "debrepo: signing using $KEY"
|
echo "debrepo: signing using $KEY"
|
||||||
|
|
||||||
cat $REPODIR/apt-repo/dists/stable/Release | gpg --default-key $KEY -abs > $REPODIR/apt-repo/dists/stable/Release.gpg
|
cat $REPODIR/apt-repo/dists/$DISTRO/Release | gpg --default-key $KEY -abs > $REPODIR/apt-repo/dists/$DISTRO/Release.gpg
|
||||||
cat $REPODIR/apt-repo/dists/stable/Release | gpg --default-key $KEY -abs --clearsign > $REPODIR/apt-repo/dists/stable/InRelease
|
cat $REPODIR/apt-repo/dists/$DISTRO/Release | gpg --default-key $KEY -abs --clearsign > $REPODIR/apt-repo/dists/$DISTRO/InRelease
|
||||||
|
|
||||||
|
@ -9,3 +9,21 @@ fi
|
|||||||
mkdir -p $1/apt-repo/dists/stable/main/binary-amd64/
|
mkdir -p $1/apt-repo/dists/stable/main/binary-amd64/
|
||||||
mkdir -p $1/apt-repo/pool/main/
|
mkdir -p $1/apt-repo/pool/main/
|
||||||
|
|
||||||
|
# make config file
|
||||||
|
echo \
|
||||||
|
"#!/bin/sh
|
||||||
|
|
||||||
|
# Repository preferences
|
||||||
|
DEFAULT_GPG=\"\"
|
||||||
|
|
||||||
|
# Repository info
|
||||||
|
ORIGIN=\"example.com\"
|
||||||
|
LABEL=\"example repository\"
|
||||||
|
SUITE=\"stable\"
|
||||||
|
CODENAME=\"stable\"
|
||||||
|
VERSION=\"1.0\"
|
||||||
|
ARCHITECTURES=\"amd64\"
|
||||||
|
COMPONENTS=\"main\"
|
||||||
|
DESCRIPTION=\"example repository\"
|
||||||
|
" > $1/apt-repo/config
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user