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 } |