tazpkg rev 887

module get: fix virtual packages support; module remove: provide virt. pkg. support, update system DBs; add test06 for virt. packages
author Aleksej Bobylev <al.bobylev@gmail.com>
date Fri Dec 11 01:32:39 2015 +0200 (2015-12-11)
parents d2e1b7133079
children 66b0ea69ad69
files doc/tazpkg.fr.html modules/get modules/install modules/remove tests/test06
line diff
     1.1 --- a/doc/tazpkg.fr.html	Thu Dec 10 04:08:41 2015 +0200
     1.2 +++ b/doc/tazpkg.fr.html	Fri Dec 11 01:32:39 2015 +0200
     1.3 @@ -131,7 +131,7 @@
     1.4              target="_blank">packages.equiv</a></tt>&nbsp;: liste des paquets
     1.5              équivalents du dépôt. Les entrées sont de la
     1.6              forme&nbsp;: <tt><em>paquet</em>=<em>règle règle…</em></tt>.<br>
     1.7 -            Il y a deux formes de règle&nbsp;:</li>
     1.8 +            Il y a deux formes de règle&nbsp;:
     1.9            <ul>
    1.10              <li><tt><em>alternative:substitut</em></tt>&nbsp;: si le
    1.11                paquet <tt><em>alternative</em></tt> est installé, alors le
    1.12 @@ -141,7 +141,7 @@
    1.13                <tt><em>newname</em></tt> <em>peut </em>être installé en
    1.14                remplacement du <tt><em>paquet</em></tt>, à la discrétion
    1.15                de l'utilisateur.</li>
    1.16 -          </ul>
    1.17 +          </ul></li>
    1.18            <li><tt><a href="file:///var/lib/tazpkg/packages.diff"
    1.19              target="_blank">packages.diff</a></tt>&nbsp;: liste créée à
    1.20              l'exécution de la
    1.21 @@ -589,7 +589,7 @@
    1.22            (voir aussi <tt><a href="#get-list">install-list</a></tt>).</p>
    1.23          <pre># tazpkg install <em>package-1.0.tazpkg</em>
    1.24  # tazpkg -i <em>chemin/vers/paquet-1.0.tazpkg</em> --forced
    1.25 -# tazpkg -i <em><em>chemin/vers/paquet</em>-1.0.tazpkg</em> --root=<em>/mnt/rootfs</em>
    1.26 +# tazpkg -i <em>chemin/vers/paquet-1.0.tazpkg</em> --root=<em>/mnt/rootfs</em>
    1.27  # tazpkg -i <em>nano-2.4.0.tazpkg mc-4.8.14.tazpkg</em>
    1.28  # tazpkg -i --list=<em>/tmp/developpement</em>
    1.29  # cd <em>/home/boot/packages</em>; tazpkg -i <em>nano-2.4.0.tazpkg</em> --local</pre>
     2.1 --- a/modules/get	Thu Dec 10 04:08:41 2015 +0200
     2.2 +++ b/modules/get	Fri Dec 11 01:32:39 2015 +0200
     2.3 @@ -288,7 +288,9 @@
     2.4  	#         $2 repository db directory
     2.5  	# output: display possible package name
     2.6  
     2.7 +	debug "\nvirtual_pkg('$1', '$2')"
     2.8  	local i
     2.9 +	unset IFS
    2.10  	for i in $(grep -hs "^$1=" "$2/packages.equiv" | sed "s/^$1=//"); do
    2.11  		if echo $i | fgrep -q : ; then
    2.12  			# format 'alternative:newname'
    2.13 @@ -298,8 +300,7 @@
    2.14  				echo ${i#*:}
    2.15  				return
    2.16  			fi
    2.17 -		elif ! grep -q "^$1$" "$2/packages.txt" ||
    2.18 -		     [ -f $INSTALLED/$i/receipt ]; then
    2.19 +		elif ! grep -q "^$1	" "$2/packages.info" || [ -f "$INSTALLED/$i/receipt" ]; then
    2.20  			# unconditional substitution
    2.21  			echo $i
    2.22  			return
    2.23 @@ -309,6 +310,7 @@
    2.24  	echo $1
    2.25  }
    2.26  
    2.27 +
    2.28  # Download package file to the cache
    2.29  
    2.30  get_pkg() {
     3.1 --- a/modules/install	Thu Dec 10 04:08:41 2015 +0200
     3.2 +++ b/modules/install	Fri Dec 11 01:32:39 2015 +0200
     3.3 @@ -517,7 +517,7 @@
     3.4  	# Updating DBs is important process, so not to hide such errors (localized):
     3.5  	# chroot: can't execute '/usr/bin/***': No such file or directory
     3.6  
     3.7 -	local fl="$INSTALLED/$PACKAGE/files.list" upd=0 ud um ui us uk
     3.8 +	local fl="$INSTALLED/$PACKAGE/files.list" upd=0 udesk umime uicon uschm ukrnl
     3.9  
    3.10  	fgrep    /usr/share/applications/ "$fl" | fgrep -q .desktop && udesk='yes'
    3.11  	fgrep -q /usr/share/mime "$fl" && umime='yes'
     4.1 --- a/modules/remove	Thu Dec 10 04:08:41 2015 +0200
     4.2 +++ b/modules/remove	Fri Dec 11 01:32:39 2015 +0200
     4.3 @@ -59,9 +59,43 @@
     4.4  }
     4.5  
     4.6  
     4.7 +# return possible name for a virtual package name
     4.8  
     4.9 +virtual_pkg() {
    4.10 +	# input:  $1 virtual package name
    4.11 +	#         $2 repository db directory
    4.12 +	# output: display possible package name
    4.13  
    4.14 -PACKAGE="$1"
    4.15 +	debug "\nvirtual_pkg('$1', '$2')"
    4.16 +	local i
    4.17 +	unset IFS
    4.18 +	for i in $(grep -hs "^$1=" "$2/packages.equiv" | sed "s/^$1=//"); do
    4.19 +		if echo $i | fgrep -q : ; then
    4.20 +			# format 'alternative:newname'
    4.21 +			# if alternative is installed then substitute newname
    4.22 +			if [ -f $INSTALLED/${i%:*}/receipt ]; then
    4.23 +				# substitute package dependency
    4.24 +				echo ${i#*:}
    4.25 +				return
    4.26 +			fi
    4.27 +		elif ! grep -q "^$1	" "$2/packages.info" || [ -f "$INSTALLED/$i/receipt" ]; then
    4.28 +			# unconditional substitution
    4.29 +			echo $i
    4.30 +			return
    4.31 +		fi
    4.32 +	done
    4.33 +	# the real package name
    4.34 +	echo $1
    4.35 +}
    4.36 +
    4.37 +
    4.38 +
    4.39 +
    4.40 +for rep in $PRIORITY; do
    4.41 +	[ ! -f "$rep/packages.info" ] && continue
    4.42 +	PACKAGE="$(virtual_pkg "$1" "$rep")"
    4.43 +	[ "$PACKAGE" != "$1" ] && break
    4.44 +done
    4.45  
    4.46  if [ ! -f "$INSTALLED/$PACKAGE/receipt" ]; then
    4.47  	newline; _ 'Package "%s" is not installed.' "$PACKAGE"
    4.48 @@ -101,11 +135,11 @@
    4.49  # Removing package
    4.50  title 'Removing package "%s"' "$PACKAGE"
    4.51  
    4.52 -# [1/4] Pre-remove commands
    4.53 +# [1/5] Pre-remove commands
    4.54  call_pre_remove "$INSTALLED/$PACKAGE/receipt"
    4.55  
    4.56  
    4.57 -# [2/4] Removing files
    4.58 +# [2/5] Removing files
    4.59  action 'Removing all files installed...'
    4.60  
    4.61  # NOTE: package 'faenza-icon-theme' install time: 12s; removing time ~ 11min on my system  o_O
    4.62 @@ -168,10 +202,41 @@
    4.63  
    4.64  status
    4.65  
    4.66 -# [3/4] Post-remove commands
    4.67 +# [3/5] Post-remove commands
    4.68  call_post_remove "$INSTALLED/$PACKAGE/receipt"
    4.69  
    4.70 -# [4/4] Remove package receipt and remove it from databases
    4.71 +# [4/5] Update system databases
    4.72 +local fl="$INSTALLED/$PACKAGE/files.list" upd=0 udesk umime uicon uschm ukrnl
    4.73 +
    4.74 +fgrep    /usr/share/applications/ "$fl" | fgrep -q .desktop && udesk='yes'
    4.75 +fgrep -q /usr/share/mime "$fl" && umime='yes'
    4.76 +fgrep -q /usr/share/icon/hicolor "$fl" && uicon='yes'
    4.77 +fgrep -q /usr/share/glib-2.0/schemas "$fl" && uschm='yes'
    4.78 +fgrep    /usr/lib/gdk-pixbuf "$fl" | fgrep -q .so && upixb='yes'
    4.79 +fgrep -q /lib/modules "$fl" && ukrnl='yes'
    4.80 +
    4.81 +if [ -n "$udesk$umime$uicon$uschm$upixb$ukrnl" ]; then
    4.82 +	action 'Update system databases...'
    4.83 +	upd=1
    4.84 +fi
    4.85 +
    4.86 +# package 'desktop-file-utils'
    4.87 +[ -n "$udesk" ] && chroot "$root/" /usr/bin/update-desktop-database /usr/share/applications 2>/dev/null
    4.88 +# package 'shared-mime-info'
    4.89 +[ -n "$umime" ] && chroot "$root/" /usr/bin/update-mime-database /usr/share/mime
    4.90 +# packages 'gtk+', 'gtk+3'
    4.91 +[ -n "$uicon" ] && chroot "$root/" /usr/bin/gtk-update-icon-cache /usr/share/icons/hicolor
    4.92 +# package 'glib'
    4.93 +[ -n "$uschm" ] && chroot "$root/" /usr/bin/glib-compile-schemas /usr/share/glib-2.0/schemas
    4.94 +# package 'gdk-pixbuf'
    4.95 +[ -n "$upixb" ] && chroot "$root/" /usr/bin/gdk-pixbuf-query-loaders --update-cache
    4.96 +# packages 'busybox', 'kmod', 'depmod'
    4.97 +[ -n "$ukrnl" ] && grep '/lib/modules' "$fl" | cut -d'/' -f4 | uniq | xargs chroot "$root/" /sbin/depmod -a
    4.98 +
    4.99 +[ "$upd" -eq 1 ] && status
   4.100 +
   4.101 +
   4.102 +# [5/5] Remove package receipt and remove it from databases
   4.103  action 'Removing package receipt...'
   4.104  rm -rf "$INSTALLED/$PACKAGE"
   4.105  sed -i "/ $PACKAGE-$VERSION$EXTRAVERSION.tazpkg$/d" "$PKGS_DB/installed.$SUM"
     5.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     5.2 +++ b/tests/test06	Fri Dec 11 01:32:39 2015 +0200
     5.3 @@ -0,0 +1,62 @@
     5.4 +#!/bin/sh
     5.5 +#
     5.6 +. /lib/libtaz.sh
     5.7 +check_root
     5.8 +export root='/tmp/test'
     5.9 +
    5.10 +title 'Test #06'
    5.11 +colorize 033 "$(longline "Test virtual package rules")"
    5.12 +newline
    5.13 +
    5.14 +########
    5.15 +boldify '1/4. Install "ssh"'
    5.16 +tazpkg --nodeps -gi pam
    5.17 +tazpkg --nodeps -gi ssh
    5.18 +tazpkg -l
    5.19 +########
    5.20 +
    5.21 +installedssh="$(ls $root/var/lib/tazpkg/installed | fgrep ssh)"
    5.22 +
    5.23 +if [ "$installedssh" != 'openssh-pam' ]; then
    5.24 +	colorize 31 "ERROR. Expected package 'openssh-pam' installed. Given: '$installedssh' Exit test"
    5.25 +	exit 1
    5.26 +fi
    5.27 +
    5.28 +########
    5.29 +boldify '2/4. Install "openssh"'
    5.30 +tazpkg --nodeps -gi openssh
    5.31 +tazpkg -l
    5.32 +########
    5.33 +
    5.34 +if [ -d "$root/var/lib/tazpkg/installed/openssh" ]; then
    5.35 +	colorize 31 "ERROR. Expected package 'openssh' NOT installed. Exit test"
    5.36 +	exit 1
    5.37 +fi
    5.38 +
    5.39 +########
    5.40 +boldify '3/4. Remove "pam", "openssh-pam"; install "ssh"'
    5.41 +yes y | tazpkg -r pam
    5.42 +yes y | tazpkg -r openssh-pam
    5.43 +tazpkg --nodeps -gi ssh
    5.44 +tazpkg -l
    5.45 +########
    5.46 +
    5.47 +if [ ! -d "$root/var/lib/tazpkg/installed/openssh" ]; then
    5.48 +	colorize 31 "ERROR. Expected package 'openssh' installed. Exit test"
    5.49 +	exit 1
    5.50 +fi
    5.51 +
    5.52 +########
    5.53 +boldify '4/4. Remove "ssh"'
    5.54 +yes y | tazpkg -r ssh
    5.55 +tazpkg -l
    5.56 +########
    5.57 +
    5.58 +if [ -d "$root/var/lib/tazpkg/installed/openssh" ]; then
    5.59 +	colorize 31 "ERROR. Expected package 'openssh' NOT installed. Exit test"
    5.60 +	exit 1
    5.61 +fi
    5.62 +
    5.63 +
    5.64 +footer "$(colorize 32 'Test #06 passed')"
    5.65 +exit 0