sup view libsup.sh @ rev 45

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