tazpkg rev 648
tazpkg: add get repo support
author | Pascal Bellard <pascal.bellard@slitaz.org> |
---|---|
date | Sun Feb 16 11:19:03 2014 +0000 (2014-02-16) |
parents | d224faea85cc |
children | 192b971ccc93 |
files | tazpkg |
line diff
1.1 --- a/tazpkg Sun Feb 16 11:30:17 2014 +0100 1.2 +++ b/tazpkg Sun Feb 16 11:19:03 2014 +0000 1.3 @@ -444,6 +444,23 @@ 1.4 echo "$DATE - $1 - $PACKAGE ($VERSION$EXTRAVERSION)$extra" >> $LOG 1.5 } 1.6 1.7 +# Download a get-package script from this mirror 1.8 +download_get_script() 1.9 +{ 1.10 + local p 1.11 + for p in $priority ; do 1.12 + local i 1.13 + for i in $(cat $p/mirror) ; do 1.14 + case "$i" in 1.15 + http://*|ftp://*) 1.16 + wget -O $2 ${i%packages/*}packages/get/$1 && 1.17 + return 0 ;; 1.18 + esac 1.19 + done 1.20 + done 1.21 + return 1 1.22 +} 1.23 + 1.24 # Download a file from this mirror 1.25 download_from() 1.26 { 1.27 @@ -702,6 +719,63 @@ 1.28 [ -n "$ROOT" ] || log_pkg Installed 1.29 } 1.30 1.31 +# This function may be called by a get script. 1.32 +abort_package() 1.33 +{ 1.34 + cd $CUR_DIR 1.35 + rm -rf $TMP_DIR 1.36 + echo "${1:-Abort $PACKAGE.}" 1.37 + exit 1 1.38 +} 1.39 + 1.40 +# This function installs a package form a get script in the rootfs. 1.41 +install_package_from_get_script() 1.42 +{ 1.43 + SCRIPT="$1" 1.44 + ROOT="$2" 1.45 + [ -d $ROOT$INSTALLED/$PACKAGE ] && exit 1 1.46 + 1.47 + grep -q no-check-certificate $SCRIPT && 1.48 + [ ! -d $INSTALLED/wget ] && tazpkg get-install wget 1.49 + 1.50 + mkdir -p $TMP_DIR && cd $TMP_DIR 1.51 + 1.52 + unset VERSION CATEGORY WEB_SITE SHORT_DESC MAINTAINER LICENSE \ 1.53 + TARBALL WGET_URL CONFIG_FILES SUGGESTED PROVIDE DEPENDS 1.54 + set -e 1.55 + . $SCRIPT 1.56 + 1.57 + if [ ! -s $PACKAGE-$VERSION/receipt ]; then 1.58 + cat > $PACKAGE-$VERSION/receipt <<EOT 1.59 +# SliTaz package receipt. 1.60 + 1.61 +PACKAGE="$PACKAGE" 1.62 +VERSION="$VERSION" 1.63 +CATEGORY="${CATEGORY:-non-free}" 1.64 +WEB_SITE="$WEB_SITE" 1.65 +SHORT_DESC="${SHORT_DESC:-$PACKAGE}" 1.66 +MAINTAINER="${MAINTAINER:-nobody@slitaz.org}" 1.67 +EOT 1.68 + for i in LICENSE TARBALL WGET_URL CONFIG_FILES SUGGESTED \ 1.69 + PROVIDE DEPENDS ; do 1.70 + eval "[ -n \"\$$i\" ] && echo \"$i=\\\"\$$i\\\"\"" 1.71 + done >> $PACKAGE-$VERSION/receipt 1.72 + fi 1.73 + 1.74 + tazpkg pack $PACKAGE-$VERSION 1.75 + 1.76 + # Clean to save RAM memory before installation 1.77 + rm -rf $PACKAGE-$VERSION 1.78 + 1.79 + # Install pseudo package 1.80 + tazpkg install $PACKAGE-$VERSION.tazpkg --root=$ROOT 1.81 + mv $PACKAGE-$VERSION.tazpkg $CACHE_DIR 1.82 + 1.83 + # Clean 1.84 + cd $TOP_DIR 1.85 + rm -rf $TMP_DIR 1.86 +} 1.87 + 1.88 # Check for loop in deps tree. 1.89 check_for_deps_loop() 1.90 { 1.91 @@ -1096,7 +1170,7 @@ 1.92 done 1.93 done 1.94 spc="" 1.95 - cat $TMP_DIR/depends 2> /dev/null | sort | uniq | while read file; do 1.96 + sort < $TMP_DIR/depends 2> /dev/null | uniq | while read file; do 1.97 echo -n "$spc$file" 1.98 spc=" " 1.99 done 1.100 @@ -1106,7 +1180,7 @@ 1.101 { 1.102 if [ -s $TMP_DIR/unresolved ]; then 1.103 echo -e "BUGS=\"`gettext \"No dependency for\"`" >> $1 1.104 - cat $TMP_DIR/unresolved | sort | uniq | while read file; do 1.105 + sort < $TMP_DIR/unresolved | uniq | while read file; do 1.106 eval_gettext "WARNING: unknown dependency for \$lib"; echo 1.107 echo -n " $file" >> $1 1.108 done 1.109 @@ -1257,7 +1331,7 @@ 1.110 { 1.111 chroot \$1/ sh - << EOT 1.112 cd / 1.113 -$(cat $file/fs/p$i.sh | sed -e 's/\\/\\\\/g' | sed -e 's/\$/\\$/g' ; rm -f $file/fs/p$i.sh) 1.114 +$(sed -e 's/\\/\\\\/g' -e 's/\$/\\$/g' < $file/fs/p$i.sh ; rm -f $file/fs/p$i.sh) 1.115 EOT 1.116 } 1.117 EOM 1.118 @@ -1372,7 +1446,7 @@ 1.119 { 1.120 chroot \$1/ sh - << EOT 1.121 cd / 1.122 -$(cat $file/fs/install/doinst.sh | sed -e 's/\\/\\\\/g' | sed -e 's/\$/\\$/g') 1.123 +$(sed -e 's/\\/\\\\/g' -e 's/\$/\\$/g' < $file/fs/install/doinst.sh) 1.124 EOT 1.125 } 1.126 EOM 1.127 @@ -1619,7 +1693,7 @@ 1.128 if [ -f "$LOCALSTATE/packages.diff" ]; then 1.129 title 'Mirrored packages diff' 1.130 cat $LOCALSTATE/packages.diff 1.131 - num=$(cat $LOCALSTATE/packages.diff | wc -l) 1.132 + num=$(wc -l < $LOCALSTATE/packages.diff) 1.133 footer "$(eval_ngettext \ 1.134 '$num new package listed on the mirror.' \ 1.135 '$num new packages listed on the mirror.' $num)" 1.136 @@ -1633,7 +1707,7 @@ 1.137 title 'List of available packages on the mirror' 1.138 cat $LOCALSTATE/packages.txt ;; 1.139 esac 1.140 - pkgs=$(cat $LOCALSTATE/packages.list | wc -l) 1.141 + pkgs=$(wc -l < $LOCALSTATE/packages.list) 1.142 num=$(emsg "<c 32>$pkgs</c>") 1.143 footer "$(eval_ngettext \ 1.144 '$num package in the last recharged list.' \ 1.145 @@ -1644,8 +1718,8 @@ 1.146 check_for_package_on_cmdline 1.147 check_for_receipt 1.148 title 'Installed files by: $PACKAGE' 1.149 - cat $INSTALLED/$PACKAGE/files.list | sort 1.150 - files=$(cat $INSTALLED/$PACKAGE/files.list | wc -l) 1.151 + sort < $INSTALLED/$PACKAGE/files.list 1.152 + files=$(wc -l < INSTALLED/$PACKAGE/files.list) 1.153 num=$(emsg "<c 32>$files</c>") 1.154 footer "$(eval_ngettext \ 1.155 '$num file installed with $PACKAGE' \ 1.156 @@ -2338,7 +2412,7 @@ 1.157 sed -i s/+// packages.diff 1.158 title 'Mirrored packages diff' 1.159 cat packages.diff 1.160 - new_pkgs=`cat packages.diff | wc -l` 1.161 + new_pkgs=$(wc -l < packages.diff) 1.162 if [ "$new_pkgs" != 0 ]; then 1.163 num=$(emsg "<c 32>$new_pkgs</c>") 1.164 footer "$(eval_ngettext \ 1.165 @@ -2435,7 +2509,7 @@ 1.166 done 1.167 done 1.168 sed -i /^$/d $UP_LIST 1.169 - upnb=$(cat $UP_LIST | wc -l) 1.170 + upnb=$(wc -l < $UP_LIST) 1.171 pkgs=$(ls | wc -l) 1.172 time=$(($(date +%s) - $time)) 1.173 if [ "$upnb" = 0 ]; then 1.174 @@ -2704,14 +2778,19 @@ 1.175 1.176 AUTOEXEC="no" 1.177 if ! check_for_package_in_list check; then 1.178 - PACKAGE=get-$PACKAGE 1.179 - AUTOEXEC=$PACKAGE 1.180 - check_for_package_in_list 1.181 - if [ -n "$(get_installed_package_pathname $PACKAGE $ROOT)" ]; then 1.182 - CACHE_DIR="${CACHE_DIR%/*}/get" 1.183 - [ -d "$CACHE_DIR" ] || mkdir -p $CACHE_DIR 1.184 - $AUTOEXEC $ROOT 1.185 + CACHE_DIR="${CACHE_DIR%/*}/get" 1.186 + [ -d "$CACHE_DIR" ] || mkdir -p $CACHE_DIR 1.187 + if download_get_script $PACKAGE /tmp/$PACKAGE.$$ ; then 1.188 + install_package_from_get_script /tmp/$PACKAGE.$$ $ROOT 1.189 exit 0 1.190 + else 1.191 + PACKAGE=get-$PACKAGE 1.192 + AUTOEXEC=$PACKAGE 1.193 + check_for_package_in_list 1.194 + if [ -n "$(get_installed_package_pathname $PACKAGE $ROOT)" ]; then 1.195 + $AUTOEXEC $ROOT 1.196 + exit 0 1.197 + fi 1.198 fi 1.199 fi 1.200 # Check if forced install.