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> : liste des paquets 1.5 équivalents du dépôt. Les entrées sont de la 1.6 forme : <tt><em>paquet</em>=<em>règle règle…</em></tt>.<br> 1.7 - Il y a deux formes de règle :</li> 1.8 + Il y a deux formes de règle : 1.9 <ul> 1.10 <li><tt><em>alternative:substitut</em></tt> : 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> : 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