sup annotate sup @ rev 35
Add update to help/usage
author | Christophe Lincoln <pankso@slitaz.org> |
---|---|
date | Tue Feb 28 05:18:43 2017 +0100 (2017-02-28) |
parents | 090432cab673 |
children | f63ac3e0e9da |
rev | line source |
---|---|
pankso@6 | 1 #!/bin/sh |
pankso@6 | 2 # |
pankso@6 | 3 # SliTaz Users Package - Minimal cmdline tools - README for devel info |
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@34 | 8 # Colors: installed 036/36; wok/package 035/35; commands/functions 033/33 |
pankso@27 | 9 # |
pankso@27 | 10 |
pankso@27 | 11 # Get system wide libsup.sh or development version if working in Hg folder |
pankso@6 | 12 if [ -f "/usr/lib/slitaz/libsup.sh" ]; then |
pankso@18 | 13 . /usr/lib/slitaz/libsup.sh |
pankso@18 | 14 fi |
pankso@18 | 15 if [ -f "./libsup.sh" ]; then |
pankso@17 | 16 . ./libsup.sh |
pankso@6 | 17 fi |
pankso@6 | 18 |
pankso@6 | 19 # Sanity check |
pankso@13 | 20 if ! [ -d "/home/$(id -un)" ]; then |
pankso@13 | 21 gettext "Not a valid user:"; colorize 31 " $(id -un)" && exit 1 |
pankso@6 | 22 fi |
pankso@6 | 23 mkdir -p ${cache} ${installed} |
pankso@6 | 24 |
pankso@6 | 25 # |
pankso@6 | 26 # Functions |
pankso@6 | 27 # |
pankso@6 | 28 |
pankso@6 | 29 help() { |
pankso@6 | 30 cat << EOT |
pankso@6 | 31 |
pankso@19 | 32 $(boldify $(gettext "Usage:")) $(basename $0) [command|package] [package] |
pankso@6 | 33 |
pankso@6 | 34 $(boldify $(gettext "Commands:")) |
pankso@19 | 35 -c cook $(gettext "Cook a package from the wok") |
pankso@19 | 36 -e extract $(gettext "Extract a package to current dir") |
pankso@22 | 37 -i install $(gettext "Install a new package") |
pankso@35 | 38 -u update $(gettext "Update installed package") |
pankso@21 | 39 -r remove $(gettext "Remove package files") |
pankso@22 | 40 -n new $(gettext "Create a new package :-)") |
paul@28 | 41 -l list $(gettext "List installed packages in your wok") |
pankso@6 | 42 |
pankso@6 | 43 $(boldify $(gettext "Options:")) |
pankso@35 | 44 --install update $(gettext "Install updates") |
pankso@19 | 45 --init cook $(gettext "Initialize sup cook environment") |
paul@9 | 46 --verbose all $(gettext "Display more output messages") |
pankso@6 | 47 |
pankso@22 | 48 $(colorize 33 README) /usr/share/sup/README |
pankso@22 | 49 $(colorize 33 Documentation) http://scn.slitaz.org/?d=en/sup |
pankso@22 | 50 |
pankso@6 | 51 EOT |
pankso@6 | 52 exit 0 |
pankso@6 | 53 } |
pankso@6 | 54 |
pankso@6 | 55 cook_init() { |
pankso@6 | 56 mkdir -p ${wok} ${cooked} |
pankso@6 | 57 if [ ! -d "$supcook/wok" ]; then |
pankso@6 | 58 ln -s ${wok} ${supcook}/wok |
pankso@6 | 59 fi |
pankso@6 | 60 } |
pankso@6 | 61 |
pankso@22 | 62 # check_pkg_arg "command" |
pankso@22 | 63 check_pkg_arg() { |
pankso@22 | 64 if [ ! "$pkg" ]; then |
pankso@22 | 65 gettext "Missing package name or file path:" |
pankso@22 | 66 boldify " sup $1 [package|file.sup]" && exit 1 |
pankso@22 | 67 fi |
pankso@22 | 68 } |
pankso@22 | 69 |
pankso@22 | 70 # new_receip "package" |
pankso@15 | 71 new_receip() { |
pankso@22 | 72 cat > ${wok}/${1}/receip << EOT |
pankso@22 | 73 # SliTaz User Package receip |
pankso@15 | 74 |
pankso@16 | 75 PACKAGE="$1" |
pankso@15 | 76 VERSION="" |
pankso@15 | 77 SHORT_DESC="" |
pankso@15 | 78 MAINTAINER="" |
pankso@15 | 79 LICENSE="" |
pankso@15 | 80 WEB_SITE="" |
pankso@15 | 81 |
pankso@15 | 82 # Sup dependencies will be automatically downloaded but system wide |
pankso@15 | 83 # deps must be manually installed by root. |
pankso@15 | 84 SUP_DEPS="" |
pankso@15 | 85 DEPENDS="" |
pankso@15 | 86 |
pankso@15 | 87 # Here are the optional install rules (download, configure, etc) |
pankso@15 | 88 sup_install() { |
pankso@15 | 89 echo "" |
pankso@15 | 90 } |
pankso@15 | 91 |
pankso@15 | 92 EOT |
pankso@15 | 93 } |
pankso@15 | 94 |
pankso@6 | 95 # |
pankso@6 | 96 # Commands |
pankso@6 | 97 # |
pankso@6 | 98 |
pankso@6 | 99 case "$1" in |
pankso@6 | 100 |
pankso@6 | 101 -c|cook) |
paul@28 | 102 # Cook in $cache/cook and mv pkg to a visible dir |
pankso@6 | 103 pkg="$2" |
pankso@12 | 104 receip="$wok/$pkg/receip" |
pankso@6 | 105 cache="$cache/cook" |
pankso@6 | 106 |
pankso@6 | 107 # Handle --init |
pankso@6 | 108 if [ "$init" ]; then |
pankso@6 | 109 gettext "Initializing sup cook environment..." |
pankso@6 | 110 cook_init |
pankso@6 | 111 status && exit 0 |
pankso@6 | 112 fi |
pankso@6 | 113 |
pankso@6 | 114 # Sanity check |
pankso@22 | 115 check_pkg_arg "$1" |
pankso@12 | 116 if [ ! -f "$receip" ]; then |
pankso@12 | 117 gettext "Can't find receip in wok for:" |
pankso@6 | 118 colorize 31 " $pkg" && exit 1 |
pankso@6 | 119 fi |
pankso@6 | 120 |
pankso@6 | 121 newline |
pankso@6 | 122 gettext "Building package:"; colorize 36 " $pkg" |
pankso@6 | 123 separator |
pankso@6 | 124 rm -rf ${cache} && mkdir -p ${cache} ${cooked} |
pankso@6 | 125 |
pankso@12 | 126 # Check receip |
pankso@12 | 127 [ "$verbose" ] && gettext "Checking receip variables..." |
pankso@12 | 128 . ${receip} |
pankso@6 | 129 for var in PACKAGE VERSION SHORT_DESC MAINTAINER LICENSE WEB_SITE |
pankso@6 | 130 do |
pankso@12 | 131 value="$(. $receip; eval echo \$$var)" |
pankso@6 | 132 case "$var" in |
pankso@6 | 133 PACKAGE|VERSION|SHORT_DESC|MAINTAINER|LICENSE) |
pankso@6 | 134 if [ ! "$value" ]; then |
pankso@6 | 135 gettext "Empty variable:"; colorize 31 " $var=\"\"" |
pankso@6 | 136 exit 1 |
pankso@6 | 137 fi ;; |
pankso@6 | 138 WEB_SITE) |
pankso@6 | 139 if [ ! "$value" ]; then |
pankso@6 | 140 gettext "Empty variable:"; colorize 31 " $var=\"\"" |
pankso@6 | 141 gettext "You can use:" |
pankso@6 | 142 boldify " http://scn.slitaz.org/?sup&pkg=$PACKAGE" |
pankso@6 | 143 exit 1 |
pankso@6 | 144 fi ;; |
pankso@6 | 145 esac |
pankso@6 | 146 done |
pankso@6 | 147 [ "$verbose" ] && status |
pankso@6 | 148 |
pankso@6 | 149 # Set $PACKAGE-$VERSION.sup and copy pkg to cache |
pankso@6 | 150 supfile="$PACKAGE-$VERSION.sup" |
pankso@6 | 151 cp -rf ${wok}/${pkg} ${cache}/${supfile%.sup} |
pankso@6 | 152 cd ${cache}/${supfile%.sup} |
pankso@6 | 153 |
paul@9 | 154 # Move to hidden dir: ~/.local and ~/.config |
pankso@6 | 155 for dir in local config; do |
pankso@6 | 156 mv files/${dir} files/.${dir} |
pankso@6 | 157 done |
pankso@6 | 158 |
pankso@6 | 159 # Add $build_date |
pankso@23 | 160 sed -i "/^build_date=/"d receip |
pankso@23 | 161 echo "build_date=\"$(date "+%Y-%m-%d %H:%M")\"" >> receip |
pankso@6 | 162 |
pankso@6 | 163 gettext "Creating compressed archive..." |
pankso@6 | 164 find files | cpio -o -H newc --quiet | lzma e files.lzma -si |
pankso@6 | 165 rm -rf files |
pankso@6 | 166 find . -print | cpio -o -H newc --quiet > ${cooked}/${supfile} |
pankso@6 | 167 status |
pankso@6 | 168 |
pankso@6 | 169 size="$(du -sh $cooked/$supfile | cut -d " " -f 1)" |
pankso@34 | 170 echo "$(gettext 'Packages:') $(colorize 35 $supfile) ($size)" |
pankso@6 | 171 rm -rf ${cache} && newline ;; |
pankso@6 | 172 |
pankso@22 | 173 -n|new) |
pankso@22 | 174 pkg="$2" |
pankso@22 | 175 if [ ! "$pkg" ]; then |
pankso@27 | 176 newline |
pankso@22 | 177 gettext "New package name:"; echo -n " "; read pkg |
pankso@22 | 178 fi |
pankso@27 | 179 newline |
pankso@22 | 180 [ ! "$pkg" ] && exit 0 |
pankso@27 | 181 [ ! -d "$wok" ] && cook_init |
pankso@22 | 182 if [ -d "$wok/$pkg" ]; then |
paul@28 | 183 gettext "Package already exists in wok:"; colorize 35 " $pkg" |
pankso@22 | 184 newline && exit 0 |
pankso@22 | 185 fi |
pankso@22 | 186 gettext "Creating new package files and tree..." |
pankso@22 | 187 mkdir -p ${wok}/${pkg}/files |
pankso@27 | 188 new_receip "$pkg"; status |
pankso@27 | 189 gettext "Executing your favorite editor..." |
pankso@27 | 190 editor ${wok}/${pkg}/receip; status |
pankso@27 | 191 gettext "To cook your package:"; colorize 33 " sup cook $pkg" |
pankso@27 | 192 newline ;; |
pankso@22 | 193 |
pankso@6 | 194 -e|extract) |
pankso@6 | 195 # Extract package.sup to current dir |
pankso@6 | 196 pkg="$2" |
pankso@6 | 197 |
pankso@6 | 198 # Sanity check |
pankso@22 | 199 check_pkg_arg "$1" |
pankso@6 | 200 if [ ! -f "$pkg" ]; then |
pankso@6 | 201 gettext "Can't find package file:"; colorize 35 " $pkg" && exit 1 |
pankso@6 | 202 fi |
pankso@6 | 203 |
pankso@6 | 204 newline |
pankso@6 | 205 gettext "Extract package:"; colorize 36 " $(basename $pkg)" |
pankso@6 | 206 separator |
pankso@6 | 207 |
pankso@6 | 208 extract_sup "$pkg" |
pankso@6 | 209 |
pankso@6 | 210 echo "$(gettext 'Packages:') $(colorize 33 $pkg) ($size)" |
pankso@6 | 211 newline ;; |
pankso@6 | 212 |
pankso@6 | 213 -i|install) |
pankso@6 | 214 # Download/extract run install() in $cache/install |
pankso@6 | 215 pkg="$2" |
pankso@22 | 216 check_pkg_arg "$1" |
pankso@6 | 217 |
pankso@6 | 218 # Sup pkg in current dir |
pankso@6 | 219 if [ -f "$pkg" ]; then |
pankso@6 | 220 install_sup "$pkg" && exit 0 |
pankso@6 | 221 fi |
pankso@6 | 222 |
pankso@19 | 223 # Sup cooked from wok |
pankso@19 | 224 if [ -f "$wok/$pkg/receip" ]; then |
pankso@19 | 225 . $wok/$pkg/receip |
pankso@19 | 226 if [ -f "$cooked/$PACKAGE-$VERSION.sup" ]; then |
pankso@19 | 227 install_sup "$cooked/$PACKAGE-$VERSION.sup" && exit 0 |
pankso@19 | 228 fi |
pankso@19 | 229 fi |
pankso@19 | 230 |
pankso@19 | 231 # Sup on mirror |
pankso@34 | 232 [ ! -f "${pkgsdb}" ] && sup -u |
pankso@6 | 233 |
pankso@34 | 234 if sqlite3 ${pkgsdb} "SELECT name FROM pkgs WHERE name = '$pkg'" >/dev/null |
pankso@34 | 235 then |
pankso@34 | 236 vers=$(sqlite3 ${pkgsdb} "SELECT version FROM pkgs WHERE name = '$pkg'") |
pankso@34 | 237 mkdir -p ${cache}/wget && cd ${cache}/wget |
pankso@34 | 238 # Download |
pankso@34 | 239 newline |
pankso@34 | 240 download "$pkg" "${mirror}/${pkg}-${vers}.sup" |
pankso@34 | 241 install_sup "${pkg}-${vers}.sup" |
pankso@34 | 242 rm -rf ${cache}/wget && exit 0 |
pankso@34 | 243 fi |
pankso@6 | 244 gettext "Can't find sup package:"; colorize 31 " $pkg" ;; |
pankso@6 | 245 |
pankso@27 | 246 -u|update) |
pankso@27 | 247 # Update packages |
pankso@34 | 248 online="" |
pankso@27 | 249 newline |
pankso@27 | 250 colorize 33 $(gettext "SUP Update") |
pankso@27 | 251 separator |
pankso@27 | 252 |
pankso@27 | 253 # Skip HTTP/1.1 404 Not Found: 2>/dev/null |
pankso@33 | 254 if ! wget -q -T 5 --spider ${mirror}/packages.sql 2>/dev/null; then |
pankso@31 | 255 gettext "Mirror is unreachable"; newline |
pankso@34 | 256 else |
pankso@34 | 257 online=0 |
pankso@27 | 258 fi |
pankso@33 | 259 |
pankso@33 | 260 # Newer packages.sql ? |
pankso@34 | 261 gettext "Checking packages.sql..." |
pankso@34 | 262 db_sum=$(wget -q "${server}?sup=dbsum" -O -) |
pankso@34 | 263 if echo "$db_sum $pkgsdb" | md5sum -s -c -; then |
pankso@34 | 264 indent $(($(tty_size) - 13)) "[ $(colorize 36 synced) ]" |
pankso@34 | 265 else |
pankso@34 | 266 [ "$online" ] && rm -f ${pkgsdb} |
pankso@34 | 267 indent $(($(tty_size) - 13)) "[ $(colorize 35 update) ]" |
pankso@34 | 268 fi |
pankso@33 | 269 |
pankso@34 | 270 # No packages.sql: get latest! |
pankso@34 | 271 if [ ! -f "$pkgsdb" ] && [ "$online" ]; then |
pankso@34 | 272 gettext "Fetching db"; echo -n " → " |
pankso@34 | 273 wget -P ${supdb} ${mirror}/packages.sql 2>&1 | tail -n 2 \ |
pankso@34 | 274 | awk '{printf $3}'; status |
pankso@34 | 275 |
pankso@34 | 276 timestamp=$(sqlite3 ${pkgsdb} 'SELECT timestamp FROM info' \ |
pankso@34 | 277 | awk '{printf $1 " " $2}') |
pankso@34 | 278 gettext "Database timestamp:" |
pankso@34 | 279 indent $(($(tty_size) - 23)) "[ $(boldify $timestamp) ]" |
pankso@34 | 280 fi |
pankso@33 | 281 |
pankso@34 | 282 # Scan installed packages |
pankso@34 | 283 count=$(ls $installed | wc -l) in=8 |
pankso@34 | 284 [ "$count" -gt "10" ] && in=9 && [ "$count" -gt "100" ] && in=10 |
pankso@34 | 285 gettext "Installed packages:" |
pankso@34 | 286 indent $(($(tty_size) - ${in})) "[ $(colorize 33 $count) ]" |
pankso@34 | 287 cat << EOT |
pankso@34 | 288 |
pankso@34 | 289 $(boldify Package $(indent 30 Version) $(indent 52 Status)) |
pankso@34 | 290 -------------------------------------------------------------------------------- |
pankso@34 | 291 EOT |
pankso@34 | 292 for pkg in $(ls $installed) |
pankso@34 | 293 do |
pankso@34 | 294 . ${installed}/${pkg}/receip |
pankso@34 | 295 db_sum=$(sqlite3 ${pkgsdb} \ |
pankso@34 | 296 "SELECT md5sum FROM pkgs WHERE name = '$pkg'") |
pankso@34 | 297 |
pankso@34 | 298 # MD5sum not matching: new version our new build ? |
pankso@34 | 299 if [ "$md5_sum" != "$db_sum" ]; then |
pankso@34 | 300 vers=$(sqlite3 ${pkgsdb} \ |
pankso@34 | 301 "SELECT version FROM pkgs WHERE name = '$pkg'") |
pankso@34 | 302 if [ "$VERSION" != "$vers" ]; then |
pankso@34 | 303 status="$(gettext "update")" |
pankso@34 | 304 else |
pankso@34 | 305 status="$(gettext "rebuilt")" |
pankso@34 | 306 fi |
pankso@34 | 307 echo "$pkg $(indent 30 $VERSION) $(indent 52 $status)" |
pankso@34 | 308 echo "$pkg" >> ${cache}/updates |
pankso@34 | 309 fi |
pankso@33 | 310 done |
pankso@27 | 311 |
pankso@34 | 312 if [ -f "$cache/updates" ]; then |
pankso@34 | 313 count=$(cat $cache/updates | wc -l) |
pankso@34 | 314 cat << EOT |
pankso@34 | 315 -------------------------------------------------------------------------------- |
pankso@34 | 316 EOT |
pankso@34 | 317 gettext "Available updates:"; colorize 32 " $count" |
pankso@34 | 318 # --install |
pankso@34 | 319 if [ "$install" ]; then |
pankso@34 | 320 for pkg in $(cat $cache/updates); do |
pankso@34 | 321 sup -i ${pkg} |
pankso@34 | 322 done |
pankso@34 | 323 fi |
pankso@34 | 324 else |
pankso@34 | 325 gettext "Packages are up-to-date"; echo |
pankso@34 | 326 newline |
pankso@34 | 327 fi |
pankso@34 | 328 rm -f ${cache}/updates ;; |
pankso@27 | 329 |
pankso@20 | 330 -r|remove) |
pankso@20 | 331 # Remove a package |
pankso@20 | 332 pkg="$2" |
pankso@22 | 333 check_pkg_arg "$1" |
pankso@20 | 334 if [ -d "$installed/$pkg" ]; then |
pankso@20 | 335 remove_sup "$pkg" |
pankso@20 | 336 else |
pankso@20 | 337 gettext "Can't find installed package:"; colorize 31 " $pkg" |
pankso@20 | 338 exit 1 |
pankso@20 | 339 fi ;; |
pankso@20 | 340 |
pankso@6 | 341 -l|list) |
pankso@6 | 342 installed_nb=$(ls ${installed} | wc -l) |
pankso@6 | 343 newline |
pankso@6 | 344 echo -n "$(colorize 36 $(gettext 'Installed sup packages:'))" |
pankso@6 | 345 boldify " $installed_nb" |
pankso@6 | 346 separator |
pankso@6 | 347 for pkg in $(ls ${installed}); do |
pankso@12 | 348 . ${wok}/${pkg}/receip |
pankso@6 | 349 echo "$pkg $(indent 26 $VERSION) $(indent 42 $MAINTAINER)" |
pankso@6 | 350 done |
pankso@6 | 351 if [ "$installed_nb" == 0 ]; then |
pankso@6 | 352 gettext "No sup packages installed"; echo |
pankso@6 | 353 fi |
pankso@6 | 354 newline |
pankso@6 | 355 if [ -d "$wok" ]; then |
pankso@6 | 356 echo -n "$(colorize 35 $(gettext 'Sup packages in your wok:'))" |
pankso@6 | 357 boldify " $(ls ${wok} | wc -l)" |
pankso@6 | 358 separator |
pankso@6 | 359 for pkg in $(ls ${wok}); do |
pankso@12 | 360 . ${wok}/${pkg}/receip |
pankso@6 | 361 echo "$pkg $(indent 26 $VERSION) $(indent 42 $MAINTAINER)" |
pankso@6 | 362 done |
pankso@6 | 363 newline |
pankso@6 | 364 fi ;; |
pankso@6 | 365 |
pankso@6 | 366 ""|-h|help) help ;; |
pankso@6 | 367 |
pankso@6 | 368 *) |
pankso@6 | 369 # Display pkg info if installed |
pankso@6 | 370 pkg="$1" |
pankso@12 | 371 if [ -f "$installed/$pkg/receip" ]; then |
pankso@12 | 372 . ${installed}/${pkg}/receip |
pankso@6 | 373 newline |
pankso@19 | 374 gettext "Installed package:"; colorize 36 " $PACKAGE $VERSION" |
pankso@6 | 375 separator |
pankso@6 | 376 echo "Short desc: $SHORT_DESC" |
pankso@6 | 377 echo "" |
pankso@20 | 378 boldify "$(gettext 'Installed files:') ($sup_size)" |
pankso@6 | 379 cat ${installed}/${pkg}/files.list |
pankso@6 | 380 newline |
pankso@6 | 381 else |
pankso@6 | 382 gettext "Can't find installed package:"; colorize 31 " $pkg" |
pankso@6 | 383 fi ;; |
pankso@6 | 384 |
pankso@6 | 385 esac && exit 0 |