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