sup annotate libsup.sh @ rev 41

Fix wrong path for installed package (Tanks Paul for proofreading :-)
author Christophe Lincoln <pankso@slitaz.org>
date Wed Mar 01 00:06:21 2017 +0100 (2017-03-01)
parents 642f0fa9f0ff
children 5fd828b6743f
rev   line source
pankso@6 1 #!/bin/sh
pankso@6 2 #
pankso@6 3 # libsup.sh - Shared SHell functions between sup cmdline/gtk+ tools
pankso@6 4 #
pankso@6 5 # Copyright (C) 2017 SliTaz GNU/Linux - BSD License
pankso@6 6 # Author: Christophe Lincoln <pankso@slitaz.org>
pankso@6 7 #
pankso@6 8 . /lib/libtaz.sh
pankso@6 9
pankso@6 10 config="$HOME/.config"
pankso@6 11 cache="$HOME/.cache/sup"
pankso@6 12 data="$HOME/.local/share"
pankso@6 13 supdb="$data/sup"
pankso@6 14 installed="$supdb/installed"
pankso@6 15 activity="$cache/activity.log"
pankso@6 16
pankso@34 17 server="http://scn.slitaz.org/"
pankso@34 18 mirror="${server}content/sup/packages"
pankso@30 19 pkgsdb="$supdb/packages.sql"
pankso@6 20
pankso@6 21 wok="$supdb/wok"
pankso@6 22 supcook="$HOME/sup-cook"
pankso@6 23 cooked="$supcook/packages"
pankso@6 24
pankso@17 25 export TEXTDOMAIN='sup-clients'
pankso@17 26 alias wget="busybox wget"
pankso@17 27
pankso@6 28 #
pankso@6 29 # Functions
pankso@6 30 #
pankso@6 31
pankso@20 32 # Set ttysize= # stty will not work if called from GTK box or CGI script
pankso@20 33 tty_size() {
pankso@36 34 if ! stty size | cut -d " " -f 2; then
pankso@36 35 echo 80
pankso@36 36 fi
pankso@20 37 }
pankso@20 38
pankso@36 39 # Pretty Busybox wget output. Usage: download [name] [url] [dest]
paul@40 40 # Download in current dir if $3 is not set
pankso@34 41 download() {
pankso@36 42 name="$1"
pankso@36 43 url="$2"
pankso@36 44 dest=${3:-$(pwd)}
pankso@36 45 file=$(basename $url)
pankso@36 46 trap "echo -e '\nExiting...'; rm -f ${dest%/}/$file" SIGINT INT TERM
pankso@36 47 # i18n
pankso@36 48 dl="$(gettext 'Downloading')"
pankso@36 49
pankso@36 50 # Get download name chars to adjust progress bar placement
pankso@36 51 char="$(echo $dl $name | wc -L)"
pankso@36 52 in=$((3 + ${char}))
pankso@36 53
pankso@36 54 echo -n "$dl $(colorize 035 $name →)"
pankso@36 55 wget -c -P ${dest} "$url" 2>&1 | while read file pct progress null
pankso@36 56 do
pankso@36 57 case "$progress" in
pankso@36 58 "|"*) echo -n "$(indent ${in} $progress)" | sed s'!*!-!'g ;;
pankso@36 59 esac
pankso@36 60 done
pankso@36 61
pankso@36 62 case "$?" in
pankso@36 63 0)
pankso@36 64 # Handle 4.0K 46.0M
pankso@36 65 size="$(du -mh ${dest%/}/$(basename $2) | awk '{print $1}')"
pankso@36 66 char="$(echo $size | wc -L)"
pankso@36 67 in=$((7 + ${char}))
pankso@36 68 indent $(($(tty_size) - ${in})) "[ $(colorize 035 $size) ]" ;;
pankso@36 69 1) status ;;
pankso@36 70 esac
pankso@34 71 }
pankso@34 72
pankso@6 73 # Extract a sup package: extract_sup "/path/to/pkg.sup"
pankso@6 74 extract_sup() {
pankso@6 75 pkg="$(basename ${1%.sup})"
pankso@6 76 supfile="$(readlink -f ${1%.sup}.sup)"
pankso@6 77
pankso@6 78 gettext "Uncompressing package tree..."
pankso@6 79 rm -rf ${pkg} && mkdir -p ${pkg} && cd ${pkg}
pankso@6 80
pankso@6 81 cpio -idm --quiet < "$supfile"
pankso@6 82 unlzma -c files.lzma | cpio -idm --quiet
pankso@6 83
pankso@6 84 rm files.lzma
pankso@6 85 size="$(du -sh $dest | cut -d " " -f 1)"
pankso@6 86 status
pankso@6 87 }
pankso@6 88
pankso@6 89 # Install a sup package
pankso@6 90 install_sup() {
pankso@6 91 pkg="$(basename ${1%.sup})"
pankso@6 92 supfile="$(readlink -f ${1%.sup}.sup)"
pankso@6 93
pankso@34 94 rm -rf ${cache}/install && mkdir ${cache}/install
pankso@34 95 cp ${supfile} ${cache}/install && cd ${cache}/install
pankso@6 96
pankso@12 97 # Get receip for deps
pankso@12 98 cpio -i receip --quiet < ${supfile}
pankso@12 99 . receip
pankso@6 100
pankso@6 101 # Install sup deps || exit on missing system deps ?
pankso@39 102 gettext "Checking package dependencies"
pankso@39 103 deps="$(echo $SUP_DEPS $DEPENDS | wc -L)"
pankso@39 104 in=$((8 + ${deps}))
pankso@39 105 indent $(($(tty_size) - ${in})) "[ $(colorize 033 $deps) ]"
pankso@39 106
pankso@6 107 for dep in ${SUP_DEPS}; do
pankso@6 108 if [ ! "$installed/$dep" ]; then
pankso@39 109 gettext "Missing dependency:"; colorize 35 " $dep"
pankso@39 110 sup -i "$dep"
pankso@6 111 fi
pankso@6 112 done
pankso@34 113 . /etc/slitaz/slitaz.conf # PKGS_DB
pankso@6 114 for dep in ${DEPENDS}; do
pankso@6 115 if [ ! "$PKGS_DB/installed/$dep" ]; then
pankso@39 116 gettext "Missing dependency:"; colorize 31 " $dep"
pankso@6 117 fi
pankso@6 118 done
pankso@6 119
paul@40 120 # Remove existing package files to avoid untracked files
pankso@41 121 if [ -d "$installed/$PACKAGE" ]; then
pankso@39 122 gettext "Removing existing package files..."
pankso@39 123 remove_sup "$PACKAGE" >/dev/null; status
pankso@39 124 fi
pankso@39 125
pankso@6 126 newline
pankso@36 127 echo -n "$(colorize 33 $(gettext 'Installing package:'))"
pankso@36 128 colorize 36 " $PACKAGE $VERSION"
pankso@20 129 log "$(gettext 'Installing package:') $PACKAGE $VERSION"
pankso@6 130 separator
pankso@6 131
pankso@12 132 # Extract and source receip first to check deps
pankso@34 133 md5sum=$(md5sum $supfile | awk '{print $1}')
pankso@6 134 extract_sup "$supfile"
pankso@6 135
pankso@6 136 # Execute sup_install() in files/ tree so packages maintainers just
paul@9 137 # have to dl and move files where they were in $HOME
pankso@6 138 cd files
pankso@12 139 if grep -q "^sup_install" ../receip; then
pankso@17 140 gettext "Executing install function:"
pankso@34 141 indent $(($(tty_size) - 18)) "[ $(colorize 033 sup_install) ]"
pankso@6 142 sup_install
pankso@6 143 fi
pankso@6 144
pankso@6 145 # Create files.list
pankso@6 146 if [ "$verbose" ]; then
pankso@6 147 gettext "Creating the list of installed files..."; echo
pankso@6 148 fi
pankso@34 149 files_list="${cache}/install/${PACKAGE}-${VERSION}/files.list"
pankso@6 150 find . -type f -print > ${files_list}
pankso@6 151 find . -type l -print >> ${files_list}
pankso@6 152 sed -i s/'^.'/''/g ${files_list}
pankso@6 153
pankso@6 154 # Back to pkg tree
pankso@34 155 cd ${cache}/install/${PACKAGE}-${VERSION}
pankso@12 156 echo "sup_size=\"$(du -sh files | cut -d " " -f 1)\"" >> receip
pankso@34 157 echo "md5_sum=\"${md5sum}\"" >> receip
pankso@6 158
pankso@6 159 # Now we need a place to store package data and set $sup_size
pankso@36 160 echo -n "$(colorize 036 $(gettext 'Installing files:'))"
pankso@36 161 echo -n " $(colorize 033 $(wc -l files.list | cut -d ' ' -f 1))"
pankso@36 162
pankso@6 163 data="${installed}/${PACKAGE}"
pankso@6 164 mkdir -p ${data}
pankso@21 165
pankso@12 166 for file in receip README files.list; do
pankso@6 167 [ -f "$file" ] && cp -f ${file} ${data}
pankso@6 168 done
pankso@6 169 for file in $(ls -A files); do
pankso@6 170 cp -rf files/${file} ${HOME}
pankso@34 171 done
pankso@34 172 status
pankso@34 173
pankso@34 174 newline && rm -rf ${cache}/install
pankso@6 175 }
pankso@20 176
pankso@20 177 # Remove a sup package
pankso@20 178 remove_sup() {
pankso@20 179 pkg="$1"
pankso@20 180 files_list="$installed/$pkg/files.list"
pankso@20 181 . ${installed}/${pkg}/receip
pankso@20 182
pankso@20 183 newline
pankso@36 184 echo -n "$(colorize 33 $(gettext 'Removing package:'))"
pankso@36 185 colorize 36 " $PACKAGE $VERSION"
pankso@20 186 log "$(gettext 'Removing package:') $PACKAGE $VERSION"
pankso@20 187 separator
pankso@20 188
pankso@20 189 gettext "Files to remove :"
pankso@36 190 files="$(wc -l ${files_list} | cut -d ' ' -f 1)"
pankso@36 191 char="$(echo $files | wc -L)"
pankso@36 192 in=$((7 + ${char}))
pankso@36 193 indent $(($(tty_size) - ${in})) "[ $(colorize 033 $files) ]"
pankso@20 194
pankso@20 195 # Remove all files
pankso@20 196 for file in $(cat $files_list)
pankso@20 197 do
pankso@20 198 # --verbose
pankso@20 199 if [ "$verbose" ]; then
pankso@20 200 gettext "Removing file :"; echo -n " ${file#/}"
pankso@20 201 rm -f "${HOME}${file}"; status
pankso@20 202 # Empty folder ?
pankso@20 203 if [ ! "$(ls -A ${HOME}$(dirname $file))" ]; then
pankso@20 204 path="$(dirname $file)"
pankso@20 205 gettext "Removing folder :"; echo -n " ${path#/}"
pankso@20 206 rmdir "${HOME}$(dirname $file)"; status
pankso@20 207 fi
pankso@20 208 else
pankso@20 209 rm -f "${HOME}${file}"
pankso@20 210 # Empty folder ?
pankso@20 211 if [ ! "$(ls -A ${HOME}$(dirname $file))" ]; then
pankso@20 212 rmdir "${HOME}$(dirname $file)"
pankso@20 213 fi
pankso@20 214 fi
pankso@20 215 done
pankso@20 216 gettext "Removing packages from local database..."
pankso@20 217 rm -rf ${installed}/${pkg}; status
pankso@20 218 newline
pankso@20 219 }