Mercurial > vpk
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