From 6276eafcbf6f2d1c9189fd4c29f93d6992ac3c9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergiusz=20Baza=C5=84ski?= Date: Mon, 19 Nov 2012 13:24:39 +0100 Subject: [PATCH] Basic functionality. --- bin/dafuq-install | 58 +++++++++++++++++++++++++++++++++++++++++++++++ bin/dafuq-make | 46 +++++++++++++++++++++++++++++++++++++ bin/dafuq-remove | 54 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 158 insertions(+) create mode 100755 bin/dafuq-install create mode 100755 bin/dafuq-make create mode 100755 bin/dafuq-remove diff --git a/bin/dafuq-install b/bin/dafuq-install new file mode 100755 index 0000000..ae4483e --- /dev/null +++ b/bin/dafuq-install @@ -0,0 +1,58 @@ +#!/tools/bin/bash + +NAME=$1 +VERSION=$2 + +if [ -z $NAME ]; then + echo "[e] Please provide a package name.">&2 + exit 1 +fi +VERSIONS="/usr/dafuq/packages/$NAME-*" +if [ -z $VERSIONS ]; then + echo "[e] Cannot find package.">&2 + exit 1 +fi +echo "[i] Available versions:" +i=0 +for version in $VERSIONS; do + echo " [$i] $version" + i=$(expr $i + 1) +done +if [ $i == "1" ]; then + VERSION=$VERSIONS +elif [ -z $VERSION ]; then + echo "[e] Please provide a version number.">&2 + exit 1 +else + VERSION=$(echo $VERSIONS | cut -d" " -f $(expr $VERSION + 1)) + if [ -z $VERSION ]; then + echo "[e] Incorrect version number.">&2 + exit 1 + fi +fi + +INSTALLED_VERSIONS=/usr/dafuq/installed/$NAME-* +if test -n "$(shopt -s nullglob; echo $INSTALLED_VERSIONS)"; then + echo "[e] Following version(s) of package already installed:" + for version in $INSTALLED_VERSIONS; do + echo " $(echo $version | sed -e "s,/usr/dafuq/installed/,,")" + done + exit 1 +fi + +echo "[i] Checking for collisions..." +MANIFEST=$(tar xfO $VERSION manifest) +while read -r line; do + linetype=$(echo $line | cut -d":" -f 1) + if [ $linetype == "file" ]; then + filename=$(echo $line | cut -d" " -f 2) + if [ -e $filename ]; then + echo "[e] File exists in filesystem: $filename" + exit 1 + fi + fi +done <<< "$MANIFEST" +echo "[i] Installing..." +tar xfp $VERSION -C / --transform 's,^root/,,' --transform 's,^root,,' --show-transformed root/ +ln -s $VERSION $(echo $VERSION | sed -e "s,/usr/dafuq/packages/,/usr/dafuq/installed/,") +echo "[i] Done." diff --git a/bin/dafuq-make b/bin/dafuq-make new file mode 100755 index 0000000..795f744 --- /dev/null +++ b/bin/dafuq-make @@ -0,0 +1,46 @@ +#!/tools/bin/bash + +NAME=$1 +DESTDIR=/tmp/dafuq/$NAME/root +INSTALLCMD="make install DESTDIR=$DESTDIR" + +if [ ! -z "$2" ]; then + INSTALLCMD=$(echo "$2" | sed -e "s:%DESTDIR%:$DESTDIR:g") + echo "[i] Custom installation command: $INSTALLCMD" +fi +rm -rf /tmp/dafuq/$NAME 2>/dev/null +echo "[i] Packaging $NAME..." +mkdir -p $DESTDIR +echo "[i] Making..." +/tools/bin/bash -c "$INSTALLCMD" + +echo "[i] Taking note of directories..." +PKG_DIRS=$(find $DESTDIR -type d) +PKG_DIRS_CREATE="" +for dir in $PKG_DIRS; do + dir_root=$(echo $dir | sed -e "s:$DESTDIR::g") + if [ ! -e $dir_root ]; then + PKG_DIRS_CREATE="$PKG_DIRS_CREATE $dir_root" + fi +done + +echo "[i] Taking note of files..." +PKG_FILES=$(find $DESTDIR -type f -o -type l) + +echo "[i] Creating manifest..." +PKG_MANIFEST="/tmp/dafuq/$NAME/manifest" +echo "name: $NAME" >> $PKG_MANIFEST +echo "installcmd: $INSTALLCMD" >> $PKG_MANIFEST +echo "built: $(date)" >> $PKG_MANIFEST +for dir in $PKG_DIRS_CREATE; do + echo "dir: $dir" >> $PKG_MANIFEST +done +for f in $PKG_FILES; do + echo "file: $(echo $f | sed -e "s:$DESTDIR::g") $(sha256sum $f | cut -d" " -f 1) $(stat -c "%a %U:%G" $f)" >> $PKG_MANIFEST +done + +echo "[i] Compressing package..." +tar cJf /usr/dafuq/packages/$NAME.tar.xz -C /tmp/dafuq/$NAME manifest root +echo "[i] Cleaning up..." +rm -rf /tmp/dafuq/$NAME 2>/dev/null +echo "[i] Done." diff --git a/bin/dafuq-remove b/bin/dafuq-remove new file mode 100755 index 0000000..29394db --- /dev/null +++ b/bin/dafuq-remove @@ -0,0 +1,54 @@ +#!/tools/bin/bash + +NAME=$1 +VERSION=$2 + +if [ -z $NAME ]; then + echo "[e] Please provide a package name.">&2 + exit 1 +fi +VERSIONS="/usr/dafuq/installed/$NAME-*" +if [ -z $VERSIONS ]; then + echo "[e] Cannot find package.">&2 + exit 1 +fi +echo "[i] Installed versions:" +i=0 +for version in $VERSIONS; do + echo " [$i] $version" + i=$(expr $i + 1) +done +if [ $i == "1" ]; then + VERSION=$VERSIONS +elif [ -z $VERSION ]; then + echo "[e] Please provide a version number.">&2 + exit 1 +else + VERSION=$(echo $VERSIONS | cut -d" " -f $(expr $VERSION + 1)) + if [ -z $VERSION ]; then + echo "[e] Incorrect version number.">&2 + exit 1 + fi +fi + +echo "[i] Removing files..." +MANIFEST=$(tar xfO $VERSION manifest) +while read -r line; do + linetype=$(echo $line | cut -d":" -f 1) + if [ $linetype == "file" ]; then + filename=$(echo $line | cut -d" " -f 2) + if [ ! -e $filename ]; then + echo "[w] File missing from filesystem: $filename" + exit 1 + fi + rm $filename + fi +done <<< "$MANIFEST" +while read -r line; do + linetype=$(echo $line | cut -d":" -f 1) + if [ $linetype == "dir" ]; then + rmdir $(echo $line | cut -d" " -f 2) + fi +done <<< "$MANIFEST" +rm $(echo $VERSION | sed -e "s,/usr/dafuq/packages/,/usr/dafuq/installed/,") +echo "[i] Done."