changeset 45:d8200b14e76a 0.1.0

vpk: support post (un)install scripts, closes #1420
author David Demelier <markand@malikania.fr>
date Fri, 22 Mar 2019 20:01:00 +0100
parents 86ae689420c2
children 2a41e6228536
files libexec/vpk/build libexec/vpk/install libexec/vpk/remove
diffstat 3 files changed, 38 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/libexec/vpk/build	Tue Mar 19 13:20:55 2019 +0100
+++ b/libexec/vpk/build	Fri Mar 22 20:01:00 2019 +0100
@@ -65,6 +65,11 @@
 	rm -rf $tmp/$PKGNAME
 	. ./$script && DESTDIR=$tmp/$PKGNAME build > $out
 
+	# Copy post-(un)install script if present.
+	if [ -f ./$PKGNAME-post.sh ]; then
+		cp ./$PKGNAME-post.sh $DESTDIR/+POST
+	fi
+
 	# Package filenames.
 	bname=$PKGNAME#$PKGVERSION-$PKGREVISION-$arch.txz
 	sname=$PKGNAME#$PKGVERSION-$PKGREVISION.src.txz
--- a/libexec/vpk/install	Tue Mar 19 13:20:55 2019 +0100
+++ b/libexec/vpk/install	Fri Mar 22 20:01:00 2019 +0100
@@ -117,7 +117,7 @@
 
 	# Install the list of packages requested.
 	for pkg in $list; do
-		# extract name from package name.
+		# Extract name from package name.
 		name=$(basename ${pkg%#*})
 
 		# Check that it is a valid vanilla package.
@@ -126,13 +126,27 @@
 			continue
 		fi
 
-		pkgfile=$root/var/lib/vpk/$name
+		# Extract package.
+		echo -n "installing $(basename $pkg): "
+		tar xa${varg}f $pkg -C "${root:-/}" --exclude=+INFO --exclude=+POST
+
+		# Extract post install script if found and run it.
+		postfile="$root/var/lib/vpk/$name-post.sh"
 
-		echo "installing $(basename $pkg): done"
-		tar xa${varg}f $pkg -C ${root:-/} --exclude=+INFO
+		if tar taf "$pkg" -O +POST >/dev/null 2>&1; then
+			tar xaf "$1" -O +POST 2>&1 > $postfile
+			chmod +x $postfile
+
+			# Don't forget to execute with DESTDIR.
+			DESTDIR=$root $postfile "install"
+			echo -n "post-install "
+		fi
+
+		echo "done"
 
 		# copy metadata and file list.
+		pkgfile=$root/var/lib/vpk/$name
 		tar xaf $pkg -O +INFO > $pkgfile
-		tar taf $pkg --exclude=+INFO >> $pkgfile
+		tar taf $pkg --exclude=+INFO --exclude=+POST >> $pkgfile
 	done
 }
--- a/libexec/vpk/remove	Tue Mar 19 13:20:55 2019 +0100
+++ b/libexec/vpk/remove	Fri Mar 22 20:01:00 2019 +0100
@@ -52,18 +52,19 @@
 
 	for p in "$@"; do
 		pkgfile=$root/var/lib/vpk/$p
+		postfile=$root/var/lib/vpk/$p-post.sh
 
 		if [ ! -f $pkgfile ]; then
 			continue
 		fi
 
-		# directories to remove if empty.
+		# Directories to remove if empty.
 		directories="/tmp/vpk/.directories-$p"
 
 		truncate -s 0 $directories
 		echo "removing $p#$(grep version $pkgfile | awk '{print $2}')"
 
-		# skip metadata in the form variable: value.
+		# Skip metadata in the form variable: value.
 		grep -v ':' $pkgfile | while read f; do
 			if [ "$verbose" -eq 1 ]; then
 				echo "  --> deleting $root/$f"
@@ -73,7 +74,7 @@
 			rm -f $root/$f >/dev/null 2>&1
 		done
 
-		# cleanup directories.
+		# Cleanup directories.
 		sort -r $directories | uniq | while read d; do
 			if [ $(ls -a $root/$d | wc -l) -eq 2 ]; then
 				if [ "$verbose" -eq 1 ]; then
@@ -84,8 +85,18 @@
 			fi
 		done
 
+		# Run post-uninstall script if any.
+		if [ -x $postfile ]; then
+			DESTDIR=$root $postfile "uninstall"
+
+			if [ "$verbose" -eq 1 ]; then
+				echo "  --> running post uninstall script"
+			fi
+		fi
+
 		rm -f $directories >/dev/null 2>&1
 		rm -f $pkgfile >/dev/null 2>&1
+		rm -f $postfile >/dev/null 2>&1
 	done
 
 	rmdir /tmp/vpk >/dev/null 2>&1