tazpkg diff tazpkg @ rev 845
install: rebuild fs/ tree respecting destination symlinks before installing files and folders to filesystem
author | Aleksej Bobylev <al.bobylev@gmail.com> |
---|---|
date | Tue Oct 06 15:46:41 2015 +0300 (2015-10-06) |
parents | 0560ba4306a1 |
children | 8a73a58ed3cb |
line diff
1.1 --- a/tazpkg Wed Sep 02 03:31:47 2015 +0300 1.2 +++ b/tazpkg Tue Oct 06 15:46:41 2015 +0300 1.3 @@ -34,17 +34,6 @@ 1.4 printf "$(ngettext "$S" "$P" "$N")" "$@"; } 1.5 1.6 1.7 -# Translate category names (must be last in line) 1.8 - 1.9 -translate_category() { 1.10 - sed "s|base-system$|$(_ base-system)|; s|x-window$|$(_ x-window)|; 1.11 - s|utilities$|$(_ utilities)|; s|network$|$(_ network)|; 1.12 - s|graphics$|$(_ graphics)|; s|multimedia$|$(_ multimedia)|; 1.13 - s|office$|$(_ office)|; s|development$|$(_ development)|; 1.14 - s|system-tools$|$(_ system-tools)|; s|security$|$(_ security)|; 1.15 - s|games$|$(_ games)|; s|misc$|$(_ misc)|; s|meta$|$(_ meta)|; 1.16 - s|non-free$|$(_ non-free)|; s|all$|$(_ all)|; s|extra$|$(_ extra)|" 1.17 -} 1.18 1.19 1.20 # Remove all --parameters from cmdline 1.21 @@ -83,11 +72,11 @@ 1.22 DEFAULT_MIRROR="$ONLINE_PKGS" 1.23 1.24 # TazPkg version 1.25 -export VERSION=$(awk -F$'\t' '$1=="tazpkg"{print $2}' $PKGS_DB/installed.info) 1.26 +export VERSION=$(awk -F$'\t' '$1=="tazpkg"{print $2}' "$PKGS_DB/installed.info") 1.27 # User Agent 1.28 export UA="TazPkg-$VERSION" 1.29 1.30 -#title 'DEBUG'; emsg "<b>COMMAND</b>=\"$COMMAND\"\n<b>PACKAGE</b>=\"$PACKAGE\"\n<b>PACKAGE_FILE</b>=\"$PACKAGE_FILE\"\n<b>TARGET_DIR</b>=\"$TARGET_DIR\"\n<b>TOP_DIR</b>=\"$TOP_DIR\"\n<b>TMP_DIR</b>=\"$TMP_DIR\"\n<b>INSTALL_LIST</b>=\"$INSTALL_LIST\"\n<b>SAVE_CACHE_DIR</b>=\"$SAVE_CACHE_DIR\"\n<b>MIRROR</b>=\"$MIRROR\"\n<b>BLOCKED</b>=\"$BLOCKED\"\n<b>UP_LIST</b>=\"$UP_LIST\"\n<b>DEFAULT_MIRROR</b>=\"$DEFAULT_MIRROR\"\n<b>VERSION</b>=\"$VERSION\""; footer 1.31 + 1.32 1.33 1.34 #################### 1.35 @@ -100,6 +89,10 @@ 1.36 im() { tty -s; } 1.37 1.38 1.39 +# Show debug messages 1.40 +debug() { if [ -n "$debug" ]; then colorize 036 "$@" >&2; fi; } 1.41 + 1.42 + 1.43 # Check if dir exists 1.44 1.45 check_dir() { 1.46 @@ -129,277 +122,89 @@ 1.47 check_base_dir 1.48 1.49 1.50 -# Check for a package name on cmdline. 1.51 1.52 -check_for_package_on_cmdline() { 1.53 - if [ -z "$PACKAGE" ]; then 1.54 - newline 1.55 - _ 'Please specify a package name on the command line.' 1.56 - newline 1.57 + 1.58 +# Check commandline for tazpkg syntax 1.59 + 1.60 +check_cmd() { 1.61 + for i in $@; do 1.62 + case $i in 1.63 + su) 1.64 + check_root "$COMMAND"; continue;; 1.65 + pkg) 1.66 + [ -n "$PACKAGE" -o -n "$list" ] && continue 1.67 + newline; _ 'Please specify a package name on the command line.';; 1.68 + list) 1.69 + [ -n "$PACKAGE" ] && continue 1.70 + newline; _ 'Please specify a list name on the command line.';; 1.71 + flavor) 1.72 + [ -n "$PACKAGE" ] && continue 1.73 + newline; _ 'Please specify a flavor name on the command line.';; 1.74 + release) 1.75 + [ -n "$PACKAGE" ] && continue 1.76 + newline; _ 'Please specify a release name on the command line.';; 1.77 + file) 1.78 + [ -f "$PACKAGE_FILE" ] && continue 1.79 + newline; _ 'Unable to find file "%s"' "$PACKAGE_FILE";; 1.80 + dir) 1.81 + [ -d "$TARGET_DIR" ] && continue 1.82 + newline; _ 'Please specify an existing folder name on the command line.';; 1.83 + pattern) 1.84 + [ -n "$PACKAGE" ] && continue 1.85 + newline; _ 'Please specify a pattern to search for.';; 1.86 + receipt) 1.87 + [ -f "$INSTALLED/$PACKAGE/receipt" ] && continue 1.88 + newline; _ 'Unable to find the receipt "%s"' "$INSTALLED/$PACKAGE/receipt";; 1.89 + esac 1.90 + tazpkg -h "$COMMAND" 1.91 exit 1 1.92 - fi 1.93 -} 1.94 - 1.95 - 1.96 -# Check if the package (*.tazpkg) exists before installing or extracting. 1.97 - 1.98 -check_for_package_file() { 1.99 - if [ ! -f "$PACKAGE_FILE" ]; then 1.100 - newline 1.101 - _ 'Unable to find file "%s"' "$PACKAGE_FILE" 1.102 - newline 1.103 - exit 1 1.104 - fi 1.105 -} 1.106 - 1.107 - 1.108 -# Check for the receipt of an installed package. 1.109 - 1.110 -check_for_receipt() { 1.111 - if [ ! -f "$1$INSTALLED/$PACKAGE/receipt" ]; then 1.112 - newline 1.113 - _ 'Unable to find the receipt "%s"' "$1$INSTALLED/$PACKAGE/receipt" 1.114 - newline 1.115 - exit 1 1.116 - fi 1.117 -} 1.118 - 1.119 - 1.120 -# Get repositories priority using $PKGS_DB/priority. 1.121 -# In this file undigest repos are called by their names and main mirror 1.122 -# by 'main'. Sort order: priority 1.123 - 1.124 -look_for_priority() { 1.125 - [ -s "$PKGS_DB/priority" ] && priority=$(cat $PKGS_DB/priority) 1.126 - 1.127 - for rep in main $(ls $PKGS_DB/undigest 2>/dev/null); do 1.128 - if [ ! -s "$PKGS_DB/priority" ] || ! grep -q ^$rep$ "$PKGS_DB/priority"; then 1.129 - priority=$(echo -e "$priority\n$rep") 1.130 - fi 1.131 - done 1.132 - echo "$priority" | sed '/^$/d' | \ 1.133 - while read line; do 1.134 - case $line in 1.135 - main) echo "$PKGS_DB";; 1.136 - *) echo "$PKGS_DB/undigest/$line";; 1.137 - esac 1.138 done 1.139 } 1.140 1.141 1.142 -# Get package name in a directory 1.143 +# List support for getting/installing packages listed in the file 1.144 +process_list() { 1.145 + debug "\nprocess_list()\n list='$list'" 1.146 + local tmp_list pkg 1.147 1.148 -package_fullname_in_dir() { 1.149 - [ ! -f "$1/receipt" ] && return 1.150 - EXTRAVERSION='' 1.151 - . $1/receipt 1.152 - echo "$PACKAGE-$VERSION$EXTRAVERSION" 1.153 + [ -z "$list" ] && return 1.154 + 1.155 + tmp_list="$(mktemp)" 1.156 + cp "$list" "$tmp_list" 1.157 + debug " tmp_list='$tmp_list'" 1.158 + 1.159 + # Upgrade tazpkg first. It may handle new features/formats... 1.160 + # then upgrade essential packages early 1.161 + debug ' process important packages...' 1.162 + for pkg in busybox-pam busybox gcc-lib-base glibc-base slitaz-base-files tazpkg; do 1.163 + debug " pkg='$pkg'" 1.164 + pkg=$(grep "^$pkg" "$tmp_list") 1.165 + [ -z "$pkg" ] && continue 1.166 + # Specify here empty list to prevent looping while recursive calls 1.167 + debug " tazpkg $COMMAND '$pkg' --list=''" 1.168 + tazpkg $COMMAND "$pkg" --list='' 1.169 + sed -i "/^$pkg$/d" "$tmp_list" 1.170 + done 1.171 + 1.172 + # Process the rest of the list 1.173 + debug ' process the rest...' 1.174 + for pkg in $(cat "$tmp_list"); do 1.175 + debug "tazpkg $COMMAND '$pkg' --list=''" 1.176 + tazpkg $COMMAND "$pkg" --list='' 1.177 + done 1.178 + 1.179 + # Clean 1.180 + rm "$tmp_list" 1.181 + debug ' END: process_list()' 1.182 } 1.183 1.184 1.185 -# Get package name that is already installed. 1.186 1.187 -get_installed_package_pathname() { 1.188 - for i in $2$INSTALLED/${1%%-*}*; do 1.189 - [ ! -d $i ] && continue 1.190 - if [ "$1" == "$(package_fullname_in_dir $i)" ]; then 1.191 - echo "$i" 1.192 - return 1.193 - fi 1.194 - done 1.195 -} 1.196 1.197 +# Shared functions 1.198 +# ---------------- 1.199 1.200 -# Check if a package is already installed. 1.201 - 1.202 -check_for_installed_package() { 1.203 - if [ -n "$(get_installed_package_pathname "$PACKAGE" "$1")" ]; then 1.204 - newline 1.205 - _ '"%s" package is already installed.' "$(colorize 34 "$PACKAGE")" 1.206 - longline "$(_ 'You can use the --forced option to force installation.')" 1.207 - newline 1.208 - exit 0 1.209 - fi 1.210 -} 1.211 - 1.212 - 1.213 -# Check for packages.list to download and install packages. 1.214 - 1.215 -check_for_packages_list() { 1.216 - list_path="$PKGS_DB/packages.list" 1.217 - if [ ! -f "$list_path" ]; then 1.218 - if [ $(id -u) -eq 0 ]; then 1.219 - tazpkg recharge 1.220 - else 1.221 - newline 1.222 - _ 'Unable to find the list "%s"' "$list_path" 1.223 - longline "$(_ "You must probably run '%s' as root to get the \ 1.224 -latest list of packages available on the mirror." 'tazpkg recharge')" 1.225 - newline 1.226 - exit 0 1.227 - fi 1.228 - fi 1.229 -} 1.230 - 1.231 - 1.232 -# Check for installed.info - local file with format of packages.info 1.233 -# "installed.info" is absent on not clean installs; check it and re-generate if needed. 1.234 - 1.235 -check_for_installed_info() { 1.236 - info_path="$ROOT$PKGS_DB/installed.info" 1.237 - if [ ! -f "$info_path" ]; then 1.238 - if [ $(id -u) -eq 0 ]; then 1.239 - _ 'File "%s" generated. Please wait...' 'installed.info' 1.240 - for pkg in $ROOT$PKGS_DB/installed/*/receipt; do 1.241 - unset_receipt 1.242 - . $pkg 1.243 - SIZES=$(echo $PACKED_SIZE $UNPACKED_SIZE | sed 's|\.0||g') 1.244 - DEPENDS=$(echo $DEPENDS) # remove newlines from some receipts 1.245 - MD5="$(fgrep " $PACKAGE-$VERSION$EXTRAVERSION.tazpkg" \ 1.246 - $ROOT$PKGS_DB/installed.md5 | awk '{print $1}')" 1.247 - cat >> $info_path << EOT 1.248 -$PACKAGE $VERSION$EXTRAVERSION $CATEGORY $SHORT_DESC $WEB_SITE $TAGS $SIZES $DEPENDS $MD5 1.249 -EOT 1.250 - done 1.251 - else 1.252 - _ 'Unable to find file "%s"' installed.info 1.253 - _ 'Please run tazpkg as root.' 1.254 - exit 1 1.255 - fi 1.256 - fi 1.257 - 1.258 - # Check for md5 field (#9) in the installed.info 1.259 - if [ -n "$(awk -F$'\t' 'BEGIN{ n = "" } { if(NF != 9){ n = "o"; } } END{ print n }' $info_path)" ]; then 1.260 - _n 'File "%s" generated. Please wait...' 'installed.info.new' 1.261 - awk -F$'\t' -vm="$ROOT$PKGS_DB/installed.md5" 'BEGIN{OFS="\t"} 1.262 - { 1.263 - if (NF != 9) { 1.264 - pkg = $1 "-" $2 ".tazpkg"; 1.265 - "fgrep " pkg " " m " | cut -c-32" | getline $9; 1.266 - $9 = ($9 == "") ? "00000000000000000000000000000000" : $9; 1.267 - } 1.268 - print; 1.269 - }' $info_path > $info_path.new 1.270 - mv -f $info_path.new $info_path 1.271 - status 1.272 - fi 1.273 -} 1.274 - 1.275 - 1.276 -get_cache_dir() { 1.277 - echo $rep > $tmp/rep 1.278 - if [ "$rep" == "$PKGS_DB" ]; then 1.279 - CACHE_DIR="$SAVE_CACHE_DIR/$SLITAZ_RELEASE/packages" 1.280 - elif [ "${rep%-incoming}" == "$rep" ]; then 1.281 - CACHE_DIR="$SAVE_CACHE_DIR/${rep##*/}/packages" 1.282 - else 1.283 - rep="${rep%-incoming}" 1.284 - CACHE_DIR="$SAVE_CACHE_DIR/${rep##*/}/packages-incoming" 1.285 - fi 1.286 - [ ! -d "$CACHE_DIR" ] && mkdir -p $CACHE_DIR 1.287 - echo $CACHE_DIR > $tmp/cachedir 1.288 -} 1.289 - 1.290 - 1.291 -# get an already installed package from packages.equiv 1.292 - 1.293 -equivalent_pkg() { 1.294 - for i in $(grep -hs "^$1=" $PKGS_DB/packages.equiv \ 1.295 - $PKGS_DB/undigest/*/packages.equiv | sed "s/^$1=//"); do 1.296 - if echo $i | fgrep -q : ; then 1.297 - # format 'alternative:newname' 1.298 - # if alternative is installed then substitute newname 1.299 - if [ -f "$2$INSTALLED/${i%:*}/receipt" ]; then 1.300 - # substitute package dependency 1.301 - echo "${i#*:}" 1.302 - return 1.303 - fi 1.304 - else 1.305 - # if alternative is installed then nothing to install 1.306 - if [ -f "$2$INSTALLED/$i/receipt" ]; then 1.307 - # substitute installed package 1.308 - echo "$i" 1.309 - return 1.310 - fi 1.311 - fi 1.312 - done 1.313 - # if not found in packages.equiv then no substitution 1.314 - echo "$1" 1.315 -} 1.316 - 1.317 - 1.318 -# get a virtual package from packages.equiv 1.319 - 1.320 -virtual_pkg() { 1.321 - for i in $(for rep in $priority; do 1.322 - grep -hs "^$1=" $rep/packages.equiv 1.323 - done | sed "s/^$1=//"); do 1.324 - if echo $i | fgrep -q : ; then 1.325 - # format 'alternative:newname' 1.326 - # if alternative is installed then substitute newname 1.327 - if [ -f "$2$INSTALLED/${i%:*}/receipt" ]; then 1.328 - # substitute package dependency 1.329 - echo "${i#*:}" 1.330 - return 1.331 - fi 1.332 - else 1.333 - # unconditional substitution 1.334 - echo "$i" 1.335 - return 1.336 - fi 1.337 - done 1.338 -} 1.339 - 1.340 - 1.341 -# Get package filename available on the mirror 1.342 - 1.343 -get_package_filename() { 1.344 - # input: "<package_name>" or "<package_name>-<version>" (ex. "nano" or "nano-2.4.0") 1.345 - local pkg equiv 1.346 - for rep in $priority; do 1.347 - pkg=$(awk -F$'\t' -vp="$1" 'p==$1||p==$1"-"$2{print $1"-"$2}' "$rep/packages.info") 1.348 - 1.349 - if [ -n "$pkg" ]; then 1.350 - get_cache_dir; break 1.351 - fi 1.352 - done 1.353 - if [ -z "$pkg" ]; then 1.354 - # Check for virtual package 1.355 - equiv=$(virtual_pkg $1) 1.356 - if [ "$equiv" != "$1" ]; then 1.357 - PACKAGE="$equiv" 1.358 - get_package_filename "$PACKAGE" 1.359 - return 1.360 - fi 1.361 - fi 1.362 - echo "$pkg" 1.363 -} 1.364 - 1.365 - 1.366 -# Check for a package in packages DB. Used by get and get-install to grep 1.367 -# package basename. 1.368 - 1.369 -check_for_package_in_list() { 1.370 - local filename check_only 1.371 - check_only="$1" 1.372 - filename="$(get_package_filename "$PACKAGE")" 1.373 - if [ -n "$filename" ]; then 1.374 - PACKAGE="$filename" 1.375 - CACHE_DIR="$(cat $tmp/cachedir)" 1.376 - rep="$(cat $tmp/rep)" 1.377 - rm -f $tmp/rep $tmp/cachedir 1.378 - else 1.379 - newline 1.380 - _ 'Unable to find package "%s" in the mirrored packages list.' "$PACKAGE" 1.381 - newline 1.382 - [ -n "$check_only" ] && return 1 1.383 - exit 0 1.384 - fi 1.385 -} 1.386 - 1.387 - 1.388 -# Log this activity 1.389 -# (there's log_pkg because we have log() in libtaz.sh) 1.390 +# Log TazPkg activity 1.391 1.392 log_pkg() { 1.393 local extra 1.394 @@ -414,62 +219,6 @@ 1.395 } 1.396 1.397 1.398 -# Download a get-package script from this mirror 1.399 - 1.400 -download_get_script() { 1.401 - local p i 1.402 - for p in $priority ; do 1.403 - for i in $(cat $p/mirror) ; do 1.404 - case "$i" in 1.405 - http://*|https://*|ftp://*) 1.406 - busybox wget -q -T 30 -U $UA -O $2 \ 1.407 - ${i%packages/*}packages/get/$1 && return 0 ;; 1.408 - esac 1.409 - done 1.410 - done 1.411 - return 1 1.412 -} 1.413 - 1.414 - 1.415 -# Download a file from this mirror 1.416 - 1.417 -download_from() { 1.418 - # input: "<mirror_url>+" "<package_name>-<version>.tazpkg" 1.419 - local i 1.420 - for i in $1; do 1.421 - case "$i" in 1.422 - # Mirror URL can have a trailing slash or not. 1.423 - http://* | https://* | ftp://*) 1.424 - busybox wget -c -q -T 30 -U $UA ${i%/}/$2 2>/dev/null && break ;; 1.425 - *) 1.426 - ln -sf ${i%/}/$2 . && break ;; 1.427 - esac 1.428 - done 1.429 -} 1.430 - 1.431 - 1.432 -# Download a file trying all mirrors 1.433 - 1.434 -download() { 1.435 - # input: <package_name>-<version>.tazpkg 1.436 - local i 1.437 - case "$1" in 1.438 - *.tazpkg) 1.439 - for i in $priority; do 1.440 - if [ -n "$(awk -F$'\t' -vp="$1" 'p==$1"-"$2".tazpkg"{print $1}' \ 1.441 - $i/packages.info)" ]; then 1.442 - download_from "$(cat $i/mirror)" "$@" && return 1.443 - fi 1.444 - done 1.445 - ;; 1.446 - esac 1.447 - 1.448 - for i in $(cat $(for rep in $priority; do echo $rep/mirror; done) 2>/dev/null); do 1.449 - download_from "$i" "$@" && break 1.450 - done 1.451 -} 1.452 - 1.453 - 1.454 # Extract a package with cpio and gzip/lzma. 1.455 1.456 extract_package() { 1.457 @@ -484,492 +233,29 @@ 1.458 } 1.459 1.460 1.461 -remove_with_path() { 1.462 - # Avoid dirname errors by checking for argument. 1.463 - [ -n "$1" ] || return 1.464 +# Translate category names (must be last in line) 1.465 1.466 - local dir 1.467 - rm -f $1 2>/dev/null 1.468 - dir="$1" 1.469 - while [ "$dir" != "/" ]; do 1.470 - dir="$(dirname "$dir")" 1.471 - rmdir "$dir" 2>/dev/null || break 1.472 - done 1.473 +translate_category() { 1.474 + sed "s|base-system$|$(_ base-system)|g; s|x-window$|$(_ x-window)|g; 1.475 + s|utilities$|$(_ utilities)|g; s|network$|$(_ network)|g; 1.476 + s|graphics$|$(_ graphics)|g; s|multimedia$|$(_ multimedia)|g; 1.477 + s|office$|$(_ office)|g; s|development$|$(_ development)|g; 1.478 + s|system-tools$|$(_ system-tools)|g; s|security$|$(_ security)|g; 1.479 + s|games$|$(_ games)|g; s|misc$|$(_ misc)|g; s|meta$|$(_ meta)|g; 1.480 + s|non-free$|$(_ non-free)|g" 1.481 } 1.482 1.483 1.484 -grepesc() { 1.485 - sed 's/\[/\\[/g' 1.486 +# If category is not one of those translated in native language, keep it 1.487 +# untranslated. This allows both native and English language support. 1.488 +# This also supports custom categories. 1.489 +# And now we support spaces in translated categories 1.490 + 1.491 +reverse_translate_category() { 1.492 + echo "$cat_i18n" | awk "BEGIN{FS=\" \"}{if (/^$@ /) a=\$2}END{if (a==\"\") a=\"$@\"; print a}" 1.493 } 1.494 1.495 - 1.496 -# Print short package description 1.497 -print_short_description() { 1.498 - local short_desc='' 1.499 - for LC in $LANG ${LANG%_*}; do 1.500 - if [ -e "$PKGS_DB/packages-desc.$LC" ]; then 1.501 - short_desc=$(grep -e "^$1 " $PKGS_DB/packages-desc.$LC | cut -d' ' -f2) 1.502 - fi 1.503 - done 1.504 - [ -z "$short_desc" -a -s $PKGS_DB/packages.info ] && 1.505 - short_desc="$(awk -F$'\t' -vp="$PACKAGE" '{if($1==p){print $4;exit}}' $PKGS_DB/packages.info)" 1.506 - longline "$short_desc" 1.507 -} 1.508 - 1.509 - 1.510 -# This function installs a package in the rootfs. 1.511 - 1.512 -install_package() { 1.513 - ROOT=$1 1.514 - if [ -n "$ROOT" ]; then 1.515 - # Get absolute path 1.516 - ROOT=$(realpath $ROOT) 1.517 - fi 1.518 - { 1.519 - # Create package path early to avoid dependencies loop 1.520 - mkdir -p $TMP_DIR 1.521 - { cd $TMP_DIR ; cpio --quiet -i receipt >/dev/null 2>&1; } < "$PACKAGE_FILE" 1.522 - . $TMP_DIR/receipt 1.523 - # FIXME: legacy? 1.524 - if grep -q ^pre_depends $TMP_DIR/receipt; then 1.525 - pre_depends $ROOT 1.526 - fi 1.527 - 1.528 - # Keep modifiers and file list on upgrade 1.529 - cp "$ROOT$INSTALLED/$PACKAGE/modifiers" \ 1.530 - "$ROOT$INSTALLED/$PACKAGE/files.list" $TMP_DIR 2>/dev/null 1.531 - rm -rf "$ROOT$INSTALLED/$PACKAGE" 2>/dev/null 1.532 - 1.533 - # Make the installed package data dir to store 1.534 - # the receipt and the files list. 1.535 - mkdir -p "$ROOT$INSTALLED/$PACKAGE" 1.536 - cp $TMP_DIR/modifiers "$ROOT$INSTALLED/$PACKAGE" 2>/dev/null 1.537 - cp $TMP_DIR/files.list "$ROOT$INSTALLED/$PACKAGE" 2>/dev/null 1.538 - rm -rf $TMP_DIR 2> /dev/null 1.539 - sed -i "/ $(basename "$PACKAGE_FILE")$/d" $ROOT$PKGS_DB/installed.$SUM 2>/dev/null 1.540 - cd "$(dirname "$PACKAGE_FILE")" 1.541 - $CHECKSUM "$(basename "$PACKAGE_FILE")" >> $ROOT$PKGS_DB/installed.$SUM 1.542 - } 1.543 - 1.544 - # Resolve package deps. 1.545 - check_for_deps $ROOT 1.546 - if [ -n "$MISSING_PACKAGE" ]; then 1.547 - install_deps $ROOT 1.548 - fi 1.549 - mkdir -p $TMP_DIR 1.550 - [ -n "$INSTALL_LIST" ] && echo "$PACKAGE_FILE" >> $ROOT$PKGS_DB/$INSTALL_LIST-processed 1.551 - 1.552 - title 'Installation of package "%s"' "$PACKAGE" 1.553 - 1.554 - short_desc="$(print_short_description "$PACKAGE")" 1.555 - [ -n "$short_desc" ] && echo "$short_desc" && separator '-' 1.556 - 1.557 - action 'Copying package...' 1.558 - cp "$PACKAGE_FILE" "$TMP_DIR" 1.559 - status 1.560 - 1.561 - cd "$TMP_DIR" 1.562 - extract_package 1.563 - SELF_INSTALL='0' 1.564 - EXTRAVERSION='' 1.565 - CONFIG_FILES='' 1.566 - 1.567 - # Include temporary receipt to get the right variables. 1.568 - . $PWD/receipt 1.569 - cd $ROOT$INSTALLED 1.570 - 1.571 - # FIXME: legacy? 1.572 - if [ $SELF_INSTALL -ne 0 -a -n "$ROOT" ]; then 1.573 - action "Checking post install dependencies..." 1.574 - [ -f "$INSTALLED/$PACKAGE/receipt" ] 1.575 - if ! status; then 1.576 - _ 'Please run "%s" in / and retry.' "tazpkg install $PACKAGE_FILE" 1.577 - rm -rf $TMP_DIR 1.578 - exit 1 1.579 - fi 1.580 - fi 1.581 - 1.582 - # Get files to remove if upgrading 1.583 - if [ -f "$PACKAGE/files.list" ]; then 1.584 - while read file; do 1.585 - grep -q "^$(echo $file | grepesc)$" $TMP_DIR/files.list && continue 1.586 - for i in $(cat "$PACKAGE/modifiers" 2>/dev/null ; 1.587 - fgrep -sl "$PACKAGE" */modifiers | cut -d/ -f1 ); do 1.588 - grep -qs "^$(echo $file | grepesc)$" $i/files.list && continue 2 1.589 - done 1.590 - echo $file 1.591 - done < "$PACKAGE/files.list" > $TMP_DIR/files2remove.list 1.592 - fi 1.593 - 1.594 - # Remember modified packages 1.595 - { 1.596 - check=false 1.597 - for i in $(fgrep -v [ $TMP_DIR/files.list); do 1.598 - [ -e "$ROOT$i" ] || continue 1.599 - [ -d "$ROOT$i" ] && continue 1.600 - echo "- $i" 1.601 - check=true 1.602 - done ; 1.603 - $check && \ 1.604 - for i in *; do 1.605 - [ "$i" == "$PACKAGE" ] && continue 1.606 - [ -s $i/files.list ] || continue 1.607 - awk "{ printf \"$i %s\\n\",\$1 }" < $i/files.list 1.608 - done; 1.609 - } | awk ' 1.610 -{ 1.611 - if ($1 == "-" || file[$2] != "") { 1.612 - file[$2] = file[$2] " " $1 1.613 - if ($1 != "-") { 1.614 - if (pkg[$1] == "") all = all " " $1 1.615 - pkg[$1] = pkg[$1] " " $2 1.616 - } 1.617 - } 1.618 -} 1.619 -END { 1.620 - for (i = split(all, p, " "); i > 0; i--) 1.621 - for (j = split(pkg[p[i]], f, " "); j > 0; j--) 1.622 - printf "%s %s\n",p[i],f[j]; 1.623 -} 1.624 - ' | while read dir file; do 1.625 - if grep -qs ^$dir$ "$PACKAGE/modifiers"; then 1.626 - # Do not overload an overloaded file ! 1.627 - rm $TMP_DIR$file 2>/dev/null 1.628 - continue 1.629 - fi 1.630 - grep -qs "^$PACKAGE$" $dir/modifiers && continue 1.631 - if [ -s "$dir/volatile.cpio.gz" ]; then 1.632 - # We can modify backed up files without notice 1.633 - zcat $dir/volatile.cpio.gz | cpio -t --quiet | \ 1.634 - grep -q "^${file#/}$" && continue 1.635 - fi 1.636 - echo "$PACKAGE" >> $dir/modifiers 1.637 - done 1.638 - 1.639 - cd $TMP_DIR 1.640 - cp receipt files.list "$ROOT$INSTALLED/$PACKAGE" 1.641 - 1.642 - # Copy the description if found. 1.643 - if [ -f "description.txt" ]; then 1.644 - cp description.txt "$ROOT$INSTALLED/$PACKAGE" 1.645 - fi 1.646 - 1.647 - # Copy the md5sum if found. 1.648 - if [ -f "$CHECKSUM" ]; then 1.649 - cp $CHECKSUM "$ROOT$INSTALLED/$PACKAGE" 1.650 - fi 1.651 - 1.652 - # Pre install commands. 1.653 - if grep -q ^pre_install "$ROOT$INSTALLED/$PACKAGE/receipt"; then 1.654 - pre_install $ROOT 1.655 - fi 1.656 - 1.657 - if [ -n "$CONFIG_FILES" ]; then 1.658 - # save 'official' configuration files 1.659 - action 'Saving configuration files...' 1.660 - for i in $CONFIG_FILES; do 1.661 - { cd fs ; find ${i#/} -type f 2> /dev/null; cd ..; } 1.662 - done | { cd fs ; cpio -o -H newc --quiet | gzip -9; cd ..; } > \ 1.663 - "$ROOT$INSTALLED/$PACKAGE/volatile.cpio.gz" 1.664 - 1.665 - if [ -z "$newconf" ]; then 1.666 - # keep user configuration files 1.667 - for i in $CONFIG_FILES; do 1.668 - { cd fs ; find ${i#/} -type f 2> /dev/null; cd ..; } 1.669 - done | while read i; do 1.670 - [ -e $ROOT/$i ] || continue 1.671 - cp -a $ROOT/$i fs/$i 1.672 - done 1.673 - fi 1.674 - status 1.675 - fi 1.676 - 1.677 - action 'Installing package...' 1.678 - [ "$(busybox ls fs/* 2>/dev/null)" ] && cp -af fs/* $ROOT/ 1.679 - status 1.680 - 1.681 - if [ -s files2remove.list ]; then 1.682 - action 'Removing old package...' 1.683 - while read file; do 1.684 - remove_with_path $ROOT$file 1.685 - done < files2remove.list 1.686 - true 1.687 - status 1.688 - fi 1.689 - 1.690 - # Remove the temporary random directory. 1.691 - action "Removing all tmp files..." 1.692 - cd ..; rm -rf $TMP_DIR 1.693 - status 1.694 - 1.695 - # Post install commands. 1.696 - if grep -q ^post_install "$ROOT$INSTALLED/$PACKAGE/receipt"; then 1.697 - action "Execute post-install commands..." 1.698 - post_install $ROOT 1.699 - status 1.700 - fi 1.701 - 1.702 - # Update-desktop-database if needed. 1.703 - if [ "$(fgrep .desktop "$ROOT$INSTALLED/$PACKAGE/files.list" | fgrep /usr/share/applications/)" ]; then 1.704 - updatedesktopdb=yes 1.705 - fi 1.706 - 1.707 - # Update-mime-database if needed. 1.708 - if [ "$(fgrep /usr/share/mime "$ROOT$INSTALLED/$PACKAGE/files.list")" ]; then 1.709 - updatemimedb=yes 1.710 - fi 1.711 - 1.712 - # Update-icon-database 1.713 - if [ "$(fgrep /usr/share/icon/hicolor "$ROOT$INSTALLED/$PACKAGE/files.list")" ]; then 1.714 - updateicondb=yes 1.715 - fi 1.716 - 1.717 - # Compile glib schemas if needed. 1.718 - if [ "$(fgrep /usr/share/glib-2.0/schemas "$ROOT$INSTALLED/$PACKAGE/files.list")" ]; then 1.719 - compile_schemas=yes 1.720 - fi 1.721 - 1.722 - # Update depmod list 1.723 - if [ "$(fgrep /lib/modules "$ROOT$INSTALLED/$PACKAGE/files.list")" ]; then 1.724 - updatedepmod=yes 1.725 - fi 1.726 - 1.727 - # Update installed.info 1.728 - check_for_installed_info 1.729 - SIZES=$(echo $PACKED_SIZE $UNPACKED_SIZE | sed 's|\.0||g') 1.730 - DEPENDS=$(echo $DEPENDS) # remove newlines from some receipts 1.731 - PKG_SUM="$(fgrep " $PACKAGE-$VERSION$EXTRAVERSION.tazpkg" "$ROOT$PKGS_DB/installed.$SUM" | cut -d' ' -f1)" 1.732 - II=$ROOT$PKGS_DB/installed.info 1.733 - sed -i "/^$PACKAGE /d" $II # remove old entry 1.734 - cat >> $II <<EOT 1.735 -$PACKAGE $VERSION$EXTRAVERSION $CATEGORY $SHORT_DESC $WEB_SITE $TAGS $SIZES $DEPENDS $PKG_SUM 1.736 -EOT 1.737 - #awk -F$'\t' -vp="$PACKAGE" '$1==p' $ROOT$PKGS_DB/packages.info > $II 1.738 - TEMP_FILE=$(mktemp) 1.739 - sort $II > $TEMP_FILE; mv -f $TEMP_FILE $II; chmod a+r $II; unset II 1.740 - 1.741 - cd "$TOP_DIR" 1.742 - footer "$(_ 'Package "%s" (%s) is installed.' "$PACKAGE" "$VERSION$EXTRAVERSION")" 1.743 - 1.744 - # Log this activity 1.745 - [ -n "$ROOT" ] || log_pkg Installed 1.746 - 1.747 - # Remove package from upgrade list 1.748 - [ -s $UP_LIST ] && sed -i "/^$PACKAGE\$/d" $UP_LIST 1.749 -} 1.750 - 1.751 - 1.752 -# This function may be called by a get script. 1.753 - 1.754 -abort_package() { 1.755 - cd $CUR_DIR 1.756 - rm -rf $TMP_DIR 1.757 - echo "${1:-Abort $PACKAGE.}" 1.758 - exit 1 1.759 -} 1.760 - 1.761 - 1.762 -# This function installs a package from a get script in the rootfs. 1.763 - 1.764 -install_package_from_get_script() { 1.765 - SCRIPT="$1" 1.766 - ROOT="$2" 1.767 - [ -d "$ROOT$INSTALLED/$PACKAGE" ] && exit 1 1.768 - 1.769 - grep -q no-check-certificate $SCRIPT && 1.770 - [ ! -d "$INSTALLED/wget" ] && tazpkg get-install wget 1.771 - 1.772 - mkdir -p $TMP_DIR && cd $TMP_DIR 1.773 - saved="$PACKAGE" 1.774 - unset_receipt 1.775 - PACKAGE="$saved" 1.776 - 1.777 - set -e 1.778 - . $SCRIPT 1.779 - set +e 1.780 - [ -d "$PACKAGE-$VERSION" ] || cd $TMP_DIR 1.781 - [ -d "$PACKAGE-$VERSION" ] || abort_package \ 1.782 - "$(_ 'Could not download "%s" from "%s". Exiting.' "${TARBALL:-$PACKAGE}" "${WGET_URL:-$WEB_SITE}")" 1.783 - 1.784 - if [ ! -s "$PACKAGE-$VERSION/receipt" ]; then 1.785 - cat > "$PACKAGE-$VERSION/receipt" <<EOT 1.786 -# SliTaz package receipt. 1.787 - 1.788 -PACKAGE="$PACKAGE" 1.789 -VERSION="${VERSION:-unknown}" 1.790 -CATEGORY="${CATEGORY:-non-free}" 1.791 -WEB_SITE="$WEB_SITE" 1.792 -SHORT_DESC="${SHORT_DESC:-$PACKAGE}" 1.793 -MAINTAINER="${MAINTAINER:-nobody@slitaz.org}" 1.794 -EOT 1.795 - for i in LICENSE TARBALL WGET_URL CONFIG_FILES SUGGESTED \ 1.796 - PROVIDE DEPENDS HOST_ARCH TAGS EXTRA_SOURCE_FILES ; do 1.797 - eval "[ -n \"\$$i\" ] && echo \"$i=\\\"\$$i\\\"\"" 1.798 - done >> "$PACKAGE-$VERSION/receipt" 1.799 - fi 1.800 - 1.801 - DEPENDS="$(unset DEPENDS; . "$PACKAGE-$VERSION/receipt"; echo $DEPENDS)" 1.802 - for i in $(find_depends "$PACKAGE-$VERSION/fs"); do 1.803 - case " $DEPENDS " in 1.804 - *\ $i\ *) continue;; 1.805 - esac 1.806 - grep -q '^DEPENDS="' "$PACKAGE-$VERSION/receipt" || 1.807 - echo 'DEPENDS=""' >> "$PACKAGE-$VERSION/receipt" 1.808 - sed -i "s/^DEPENDS=\"/&$i /" "$PACKAGE-$VERSION/receipt" 1.809 - done 1.810 - 1.811 - TAZPKG_PACK=gzip 1.812 - tazpkg pack "$PACKAGE-$VERSION" 1.813 - 1.814 - # Clean to save RAM memory before installation 1.815 - rm -rf "$PACKAGE-$VERSION" 1.816 - 1.817 - if [ -n "$get" ]; then 1.818 - mv "$PACKAGE-$VERSION.tazpkg" "$TOP_DIR" 1.819 - else 1.820 - # Install pseudo package 1.821 - tazpkg install "$PACKAGE-$VERSION.tazpkg" --root=$ROOT 1.822 - mv "$PACKAGE-$VERSION.tazpkg" $CACHE_DIR 1.823 - fi 1.824 - 1.825 - # Clean 1.826 - cd "$TOP_DIR" 1.827 - rm -rf $TMP_DIR 1.828 -} 1.829 - 1.830 - 1.831 -# Check for missing deps listed in a receipt packages. 1.832 - 1.833 -check_for_deps() { 1.834 - local saved; 1.835 - saved="$PACKAGE" 1.836 - mkdir -p $TMP_DIR 1.837 - { cd $TMP_DIR ; cpio --quiet -i receipt >/dev/null 2>&1; } < "$PACKAGE_FILE" 1.838 - . $TMP_DIR/receipt 1.839 - PACKAGE="$saved" 1.840 - rm -rf $TMP_DIR 1.841 - 1.842 - num=0 1.843 - for pkgorg in $DEPENDS; do 1.844 - i=$(equivalent_pkg $pkgorg $1) 1.845 - if [ ! -d "$1$INSTALLED/$i" ]; then 1.846 - MISSING_PACKAGE=$i 1.847 - num=$(($num+1)) 1.848 - elif [ ! -f "$1$INSTALLED/$i/receipt" ]; then 1.849 - _ 'WARNING! Dependency loop between "%s" and "%s".' "$PACKAGE" "$i" 1.850 - fi 1.851 - done 1.852 - 1.853 - if [ -n "$MISSING_PACKAGE" ]; then 1.854 - title "$(_ 'Tracking dependencies for package "%s"' "$PACKAGE")" 1.855 - for pkgorg in $DEPENDS; do 1.856 - i=$(equivalent_pkg $pkgorg $1) 1.857 - if [ ! -d "$1$INSTALLED/$i" ]; then 1.858 - MISSING_PACKAGE="$i" 1.859 - _ 'Missing package "%s"' $MISSING_PACKAGE 1.860 - fi 1.861 - done 1.862 - footer "$(_p \ 1.863 - '%s missing package to install.' \ 1.864 - '%s missing packages to install.' $num \ 1.865 - $num)" 1.866 - fi 1.867 -} 1.868 - 1.869 - 1.870 -# Install all missing deps. Auto install or ask user then install all missing 1.871 -# deps from local dir, CD-ROM, media or from the mirror. In case we want to 1.872 -# install packages from local, we need a packages.list to find the version. 1.873 - 1.874 -install_deps() { 1.875 - local root='' 1.876 - [ -n "$1" ] && root="--root=$1" 1.877 - 1.878 - if [ "$AUTO_INSTALL_DEPS" == 'yes' ]; then 1.879 - answer=0 1.880 - else 1.881 - newline 1.882 - confirm "$(_ 'Install all missing dependencies? (y/N)')" 1.883 - answer=$? 1.884 - newline 1.885 - fi 1.886 - 1.887 - if [ "$answer" -eq 0 ] && [ -z "$nodeps" ]; then 1.888 - for pkgorg in $DEPENDS; do 1.889 - pkg=$(equivalent_pkg $pkgorg $1) 1.890 - if [ ! -d "$1$INSTALLED/$pkg" ]; then 1.891 - local list="$INSTALL_LIST" 1.892 - [ -n "$list" ] || list="$TOP_DIR/packages.list" 1.893 - # We can install packages from a local dir by greping 1.894 - # the TAZPKG_BASENAME in the local packages.list. 1.895 - found='0' 1.896 - if [ -f "$list" ]; then 1.897 - _ 'Checking if package "%s" exists in local list...' $pkg 1.898 - mkdir $TMP_DIR 1.899 - for i in $pkg-*.tazpkg; do 1.900 - [ -f $i ] || continue 1.901 - { cd $TMP_DIR ; cpio --quiet -i receipt > /dev/null 2>&1; } < $i 1.902 - [ "$(. $TMP_DIR/receipt; echo "$PACKAGE")" == "$pkg" ] || continue 1.903 - if grep -q ^$(package_fullname_in_dir $TMP_DIR).tazpkg$ $list 1.904 - then 1.905 - found='1' 1.906 - tazpkg install $i $root --list=$list 1.907 - break 1.908 - fi 1.909 - done 1.910 - rm -rf $TMP_DIR 1.911 - fi 1.912 - # Install deps from the mirror. 1.913 - if [ $found -eq 0 ]; then 1.914 - if [ ! -f "$PKGS_DB/packages.list" ]; then 1.915 - tazpkg recharge 1.916 - fi 1.917 - tazpkg get-install $pkg $root 1.918 - fi 1.919 - fi 1.920 - done 1.921 - else 1.922 - newline 1.923 - _ 'Leaving dependencies for package "%s" unresolved.' "$PACKAGE" 1.924 - _ 'The package is installed but will probably not work.' 1.925 - newline 1.926 - fi 1.927 -} 1.928 - 1.929 - 1.930 -update_desktop_database() { 1.931 - if [ -f "$1/usr/bin/update-desktop-database" ] && [ -n "$updatedesktopdb" ]; then 1.932 - chroot "$1/" /usr/bin/update-desktop-database /usr/share/applications 2>/dev/null 1.933 - fi 1.934 -} 1.935 - 1.936 - 1.937 -update_mime_database() { 1.938 - if [ -f "$1/usr/bin/update-mime-database" ] && [ -n "$updatemimedb" ]; then 1.939 - chroot "$1/" /usr/bin/update-mime-database /usr/share/mime 1.940 - fi 1.941 -} 1.942 - 1.943 - 1.944 -update_icon_database() { 1.945 - if [ -f "$1/usr/bin/gtk-update-icon-cache" ] && [ -n "$updateicondb" ]; then 1.946 - chroot "$1/" /usr/bin/gtk-update-icon-cache /usr/share/icons/hicolor 1.947 - fi 1.948 -} 1.949 - 1.950 - 1.951 -compile_glib_schemas() { 1.952 - if [ -f "$1/usr/bin/glib-compile-schemas" ] && [ -n "$compile_schemas" ]; then 1.953 - chroot "$1/" /usr/bin/glib-compile-schemas /usr/share/glib-2.0/schemas 1.954 - fi 1.955 -} 1.956 - 1.957 - 1.958 -update_kernel_modules() { 1.959 - if [ -f "$1/sbin/depmod" ] && [ -n "$updatedepmod" ]; then 1.960 - chroot "$1/" /sbin/depmod -a 1.961 - fi 1.962 -} 1.963 +# END: Shared functions 1.964 1.965 1.966 1.967 @@ -992,48 +278,46 @@ 1.968 # Various lists 1.969 shift 1.970 case $1 in 1.971 - b|blocked) @@MODULES@@/list blocked ;; 1.972 + b|blocked) @@MODULES@@/list blocked;; 1.973 c|cat|categories) @@MODULES@@/list categories;; 1.974 - l|linked) @@MODULES@@/list linked ;; 1.975 - '') @@MODULES@@/list installed ;; 1.976 + l|linked) @@MODULES@@/list linked;; 1.977 + '') @@MODULES@@/list installed;; 1.978 *) @@MODULES@@/list installed_of_category "$@";; 1.979 esac 1.980 ;; 1.981 - -lb) @@MODULES@@/list blocked ;; 1.982 + -lb) @@MODULES@@/list blocked;; 1.983 -lc) @@MODULES@@/list categories;; 1.984 - -ll) @@MODULES@@/list linked ;; 1.985 + -ll) @@MODULES@@/list linked;; 1.986 1.987 - -lm|list-mirror) @@MODULES@@/list mirrored ;; 1.988 - -lf|list-files) check_for_package_on_cmdline 1.989 - @@MODULES@@/list installed_files $PACKAGE;; 1.990 - -a|activity|log) @@MODULES@@/list activity ;; 1.991 - list-config) @@MODULES@@/list config_files $2;; 1.992 - list-suggested) @@MODULES@@/list suggested ;; 1.993 + -lm|list-mirror) @@MODULES@@/list mirrored;; 1.994 + -lf|list-files) check_cmd pkg; @@MODULES@@/list installed_files "$PACKAGE";; 1.995 + -a|activity|log) @@MODULES@@/list activity;; 1.996 + list-config) @@MODULES@@/list config_files "$2";; 1.997 + list-suggested) @@MODULES@@/list suggested;; 1.998 1.999 1.1000 + # Information about package 1.1001 info) 1.1002 - # Information about package 1.1003 - check_for_package_on_cmdline 1.1004 - @@MODULES@@/info "$2" 1.1005 - ;; 1.1006 + check_cmd pkg; @@MODULES@@/info "$2";; 1.1007 1.1008 1.1009 desc|-d) 1.1010 # Display package description 1.1011 - @@MODULES@@/description "$2" 1.1012 - ;; 1.1013 + check_cmd pkg; @@MODULES@@/description "$2";; 1.1014 1.1015 1.1016 - search|-s) 1.1017 + search|-s|-si|-sl|-sm) 1.1018 # Search for a package by pattern or name. 1.1019 - if [ -z "$2" ]; then tazpkg -h search; exit 1; fi 1.1020 + check_cmd pattern 1.1021 1.1022 # Extend short options to long analogs 1.1023 - case "$3" in 1.1024 - -i) export installed='yes';; 1.1025 - -l) export list='yes';; 1.1026 - -m) export mirror='yes';; 1.1027 - esac 1.1028 + for i in $@; do 1.1029 + case "$i" in 1.1030 + -i|-si) export installed='yes';; 1.1031 + -l|-sl) export list='yes';; 1.1032 + -m|-sm) export mirror='yes';; 1.1033 + esac 1.1034 + done 1.1035 1.1036 @@MODULES@@/search pkg "$2" 1.1037 ;; 1.1038 @@ -1041,241 +325,58 @@ 1.1039 1.1040 search-file|-sf) 1.1041 # Search for a file by pattern or name in all files.list. 1.1042 - if [ -z "$2" ]; then tazpkg -h search-file; exit 1; fi 1.1043 - 1.1044 - @@MODULES@@/search file "$2" 1.1045 - ;; 1.1046 + check_cmd pattern; @@MODULES@@/search file "$2";; 1.1047 1.1048 1.1049 search-pkgname|-sp) 1.1050 # Search for a package name 1.1051 - if [ -z "$2" ]; then tazpkg -h search-pkgname; exit 1; fi 1.1052 - 1.1053 - @@MODULES@@/search file2 "$2" 1.1054 - ;; 1.1055 - 1.1056 - 1.1057 - install|-i) 1.1058 - # Install .tazpkg packages. 1.1059 - check_root $1 1.1060 - check_for_package_on_cmdline 1.1061 - check_for_package_file 1.1062 - check_for_installed_info 1.1063 - 1.1064 - if [ -n "$root" ]; then 1.1065 - ROOT="$root"; 1.1066 - check_base_dir "$root" 1.1067 - fi 1.1068 - 1.1069 - [ -n "$list" ] && INSTALL_LIST="$list" 1.1070 - 1.1071 - # Get repositories priority list. 1.1072 - priority=$(look_for_priority) 1.1073 - 1.1074 - # Check if forced install. 1.1075 - if [ -z "$forced" ]; then 1.1076 - check_for_installed_package $ROOT 1.1077 - fi 1.1078 - install_package $ROOT 1.1079 - update_desktop_database $ROOT 1.1080 - update_mime_database $ROOT 1.1081 - update_icon_database $ROOT 1.1082 - compile_glib_schemas $ROOT 1.1083 - ;; 1.1084 - 1.1085 - 1.1086 - install-list|get-install-list) 1.1087 - # Install a set of packages from a list. 1.1088 - check_root $1 1.1089 - 1.1090 - if [ -z "$2" ]; then tazpkg -h "$1"; exit 1; fi 1.1091 - 1.1092 - # Check if the packages list exists. 1.1093 - if [ ! -f "$2" ]; then 1.1094 - _ 'Unable to find list "%s"' "$2" 1.1095 - exit 1 1.1096 - fi 1.1097 - 1.1098 - LIST=$(cat $2) 1.1099 - 1.1100 - # Remember processed list 1.1101 - export INSTALL_LIST="$2" 1.1102 - 1.1103 - # Set $COMMAND and install all packages. 1.1104 - COMMAND=${1%-list} 1.1105 - 1.1106 - touch $2-processed 1.1107 - 1.1108 - # Upgrade tazpkg first. It may handle new features/formats... 1.1109 - # then upgrade essential packages early 1.1110 - for pkg in busybox-pam busybox gcc-lib-base glibc-base \ 1.1111 - slitaz-base-files tazpkg ; do 1.1112 - pkg=$(egrep $pkg-[0-9] $INSTALL_LIST) 1.1113 - [ -z "$pkg" ] && continue 1.1114 - _ 'Adding implicit depends "%s"...' $pkg 1.1115 - LIST="$pkg"$'\n'"$LIST" 1.1116 - done 1.1117 - 1.1118 - for pkg in $LIST; do 1.1119 - grep -qs ^$pkg$ $2-processed && continue 1.1120 - [ -d "$root/var/lib/tazpkg/installed" ] && 1.1121 - tazpkg $COMMAND $pkg --list="$2" "$3" "$4" "$5" 1.1122 - done 1.1123 - rm -f $2-processed 1.1124 - ;; 1.1125 + check_cmd pattern; @@MODULES@@/search file2 "$2";; 1.1126 1.1127 1.1128 add-flavor) 1.1129 # Install a set of packages from a flavor. 1.1130 - check_root $1 1.1131 - shift; @@MODULES@@/flavor $@ 1.1132 - ;; 1.1133 + check_cmd su flavor; shift; @@MODULES@@/flavor $@;; 1.1134 install-flavor) 1.1135 # Install a set of packages from a flavor and purge other ones. 1.1136 - check_root $1 1.1137 - shift; purge='yes' @@MODULES@@/flavor $@ 1.1138 - ;; 1.1139 + check_cmd su flavor; shift; purge='yes' @@MODULES@@/flavor $@;; 1.1140 1.1141 1.1142 set-release) 1.1143 # Change current release and upgrade packages. 1.1144 - check_root $1 1.1145 - if [ -z "$2" ]; then tazpkg -h "$1"; exit 1; fi 1.1146 - RELEASE="$2" 1.1147 - rm "$PKGS_DB/mirror" 1.1148 - echo "$RELEASE" > "$root/etc/slitaz-release" 1.1149 - tazpkg recharge && tazpkg upgrade 1.1150 - 1.1151 - # Install missing depends 1.1152 - cd "$INSTALLED" 1.1153 - for i in * ; do 1.1154 - unset DEPENDS; . "$i/receipt" 1.1155 - for j in $DEPENDS; do 1.1156 - [ -d "$j" ] || tazpkg get-install "$j" 1.1157 - done 1.1158 - done 1.1159 - ;; 1.1160 + check_cmd su release 1.1161 + @@MODULES@@/set-release "$2";; 1.1162 1.1163 1.1164 remove|-r) 1.1165 # Remove packages. 1.1166 - check_root $1 1.1167 - check_for_package_on_cmdline 1.1168 - shift; @@MODULES@@/remove $@ 1.1169 - ;; 1.1170 + check_cmd su pkg; shift; @@MODULES@@/remove $@;; 1.1171 + # TODO: remove multiple packages 1.1172 1.1173 1.1174 extract|-e) 1.1175 # Extract .tazpkg cpio archive into a directory. 1.1176 - check_for_package_on_cmdline 1.1177 - check_for_package_file 1.1178 - title 'Extracting package "%s"' "$PACKAGE" 1.1179 - 1.1180 - # If no directory destination is found on the cmdline 1.1181 - # we create one in the current dir using the package name. 1.1182 - if [ -n "$TARGET_DIR" ]; then 1.1183 - DESTDIR="$TARGET_DIR/$PACKAGE" 1.1184 - else 1.1185 - DESTDIR="$PACKAGE" 1.1186 - fi 1.1187 - mkdir -p $DESTDIR 1.1188 - 1.1189 - action 'Copying original package...' 1.1190 - cp "$PACKAGE_FILE" $DESTDIR 1.1191 - status 1.1192 - 1.1193 - cd $DESTDIR 1.1194 - extract_package 1.1195 - [ -e "receipt" ] && \ 1.1196 - footer "$(_ 'Package "%s" is extracted to "%s"' "$PACKAGE" "$DESTDIR")" 1.1197 - ;; 1.1198 + check_cmd pkg file; shift; @@MODULES@@/extract $@;; 1.1199 1.1200 1.1201 recompress) 1.1202 # Recompress .tazpkg cpio archive with lzma. 1.1203 - check_for_package_on_cmdline 1.1204 - check_for_package_file 1.1205 - title 'Recompressing package "%s"' "$PACKAGE" 1.1206 - mkdir -p $TMP_DIR 1.1207 - 1.1208 - action "Copying original package..." 1.1209 - cp "$PACKAGE_FILE" $TMP_DIR 1.1210 - status 1.1211 - 1.1212 - cd $TMP_DIR 1.1213 - extract_package 1.1214 - 1.1215 - action "Recompressing the FS..." 1.1216 - find fs | cpio -o -H newc --quiet | lzma e fs.cpio.lzma -si 1.1217 - rm -rf fs 1.1218 - status 1.1219 - 1.1220 - action "Creating new package..." 1.1221 - find . -print | cpio -o -H newc --quiet > \ 1.1222 - "$TOP_DIR/$(basename "$PACKAGE_FILE").$$" && mv -f \ 1.1223 - "$TOP_DIR/$(basename "$PACKAGE_FILE").$$" \ 1.1224 - "$TOP_DIR/$(basename "$PACKAGE_FILE")" 1.1225 - status 1.1226 - 1.1227 - cd "$TOP_DIR" 1.1228 - rm -rf $TMP_DIR 1.1229 - separator; newline 1.1230 - ;; 1.1231 + check_cmd su pkg file; @@MODULES@@/recompress "$PACKAGE_FILE";; 1.1232 1.1233 1.1234 repack-config) 1.1235 - check_root $@ 1.1236 # Create SliTaz package archive from configuration files. 1.1237 - mkdir -p $TMP_DIR; cd $TMP_DIR 1.1238 - CONFIG_VERSION='1.0' 1.1239 - mkdir config-$CONFIG_VERSION 1.1240 - cd config-$CONFIG_VERSION 1.1241 - for i in $INSTALLED/*/volatile.cpio.gz; do 1.1242 - zcat $i | cpio -t --quiet 1.1243 - done > files.list 1.1244 - mkdir fs 1.1245 - cd fs 1.1246 - ( cd / ; cpio -o -H newc --quiet ) < ../files.list | cpio -idm --quiet > /dev/null 1.1247 - mkdir -p etc/tazlito 1.1248 - for i in $INSTALLED/*/receipt; do 1.1249 - EXTRAVERSION='' 1.1250 - . $i 1.1251 - echo "$PACKAGE-$VERSION$EXTRAVERSION" 1.1252 - done > etc/tazlito/config-packages.list 1.1253 - cd .. 1.1254 - echo "etc/tazlito/config-packages.list" >> files.list 1.1255 - pkg_date=$(date +"%x %X") 1.1256 - cat > receipt <<EOT 1.1257 -# SliTaz package receipt. 1.1258 - 1.1259 -PACKAGE="config" 1.1260 -VERSION="$CONFIG_VERSION" 1.1261 -CATEGORY="base-system" 1.1262 -SHORT_DESC="$(_n 'User configuration backup on date %s' "$pkg_date")" 1.1263 -DEPENDS="$(ls $INSTALLED)" 1.1264 -EOT 1.1265 - cd .. 1.1266 - tazpkg pack config-$CONFIG_VERSION 1.1267 - cp config-$CONFIG_VERSION.tazpkg "$TOP_DIR" 1.1268 - cd "$TOP_DIR" 1.1269 - rm -rf $TMP_DIR 1.1270 - ;; 1.1271 + check_cmd su; @@MODULES@@/repack-config;; 1.1272 1.1273 1.1274 repack) 1.1275 # Create SliTaz package archive from an installed package. 1.1276 - check_for_package_on_cmdline 1.1277 - check_for_receipt 1.1278 - shift; @@MODULES@@/repack $@ 1.1279 - ;; 1.1280 + check_cmd pkg receipt; shift; @@MODULES@@/repack $@;; 1.1281 1.1282 1.1283 pack) 1.1284 # Create SliTaz package archive using cpio and lzma. 1.1285 # TODO: Cook also pack packages, we should share code in libpkg.sh 1.1286 - check_for_package_on_cmdline 1.1287 - shift; @@MODULES@@/pack $@ 1.1288 - ;; 1.1289 + check_cmd pkg; shift; @@MODULES@@/pack $@;; 1.1290 1.1291 1.1292 recharge) 1.1293 @@ -1284,19 +385,16 @@ 1.1294 # WARNING: The 'mirrors' file has all SliTaz mirrors but 'mirror' 1.1295 # must have only the chosen main mirror. 1.1296 # 1.1297 - check_root $1 1.1298 - shift; @@MODULES@@/recharge $@ 1.1299 - ;; 1.1300 + check_cmd su; shift; @@MODULES@@/recharge $@;; 1.1301 1.1302 1.1303 up|upgrade) 1.1304 - check_root $1 1.1305 - # 1.1306 # This is the new way to upgrade packages making 'upgrade' and 1.1307 # upgradeable out-of-date. This new way is much, much more faster! 1.1308 # Look into installed packages and get data from receipt, it is fast 1.1309 # and easy to handle vars after using only md5sum to compare packages 1.1310 # 1.1311 + check_cmd su 1.1312 for opt in $@; do 1.1313 case "$opt" in 1.1314 -i) export install='yes';; 1.1315 @@ -1310,222 +408,86 @@ 1.1316 1.1317 bugs) 1.1318 # Show known bugs in package(s) 1.1319 - cd $INSTALLED 1.1320 - shift 1.1321 - LIST=$@ 1.1322 - [ -z "$LIST" ] && LIST=$(ls) 1.1323 - MSG=$(_n 'No known bugs.') 1.1324 - 1.1325 - title 'Known bugs in packages' 1.1326 - for PACKAGE in $LIST; do 1.1327 - BUGS='' 1.1328 - EXTRAVERSION='' 1.1329 - . "$PACKAGE/receipt" 1.1330 - if [ -n "$BUGS" ]; then 1.1331 - MSG=$(_n 'Bug list completed') 1.1332 - newline 1.1333 - _ 'Bugs in package "%s" version %s:' "$PACKAGE" "$VERSION$EXTRAVERSION" 1.1334 - cat <<EOT 1.1335 - $BUGS 1.1336 -EOT 1.1337 - fi 1.1338 - done 1.1339 - footer "$MSG" 1.1340 - ;; 1.1341 + shift; @@MODULES@@/bugs $@;; 1.1342 1.1343 1.1344 check) 1.1345 # Check installed packages set. 1.1346 - shift; @@MODULES@@/check $@ 1.1347 - ;; 1.1348 + shift; @@MODULES@@/check $@;; 1.1349 1.1350 1.1351 block|-b|unblock|-u|chblock) 1.1352 # Add/remove a pkg name to the list of blocked packages. 1.1353 - check_root $@ 1.1354 - check_for_package_on_cmdline 1.1355 - @@MODULES@@/block $@ 1.1356 - ;; 1.1357 + check_cmd su pkg; @@MODULES@@/block $@;; 1.1358 1.1359 1.1360 get|-g) 1.1361 # Download a package with wget. 1.1362 - check_root $@ 1.1363 - check_for_package_on_cmdline 1.1364 - check_for_packages_list 1.1365 + check_cmd pkg; shift 1.1366 + # Get all the packages given on command line 1.1367 + export nocache='yes' 1.1368 + for i in $@; do 1.1369 + pkg="$(@@MODULES@@/get $i)" && _ 'Done: %s' "${pkg##*/}" 1.1370 + done 1.1371 + # Get all the packages listed in the file 1.1372 + process_list 1.1373 + ;; 1.1374 1.1375 - [ -n "$root" ] && ROOT="$root" && check_base_dir "$root" 1.1376 - if [ -n "$rootconfig" ]; then 1.1377 - if [ -n "$root" ]; then 1.1378 - CACHE_DIR="$root/$CACHE_DIR" 1.1379 - SAVE_CACHE_DIR="$CACHE_DIR" 1.1380 - PKGS_DB="$root/$PKGS_DB" 1.1381 - else 1.1382 - _ 'rootconfig needs --root= option used.' >&2 1.1383 - exit 1 1.1384 - fi 1.1385 - fi 1.1386 1.1387 - # Get repositories priority list. 1.1388 - priority=$(look_for_priority) 1.1389 - 1.1390 - CURRENT_DIR="$PWD" 1.1391 - cd "$CACHE_DIR" 1.1392 - if check_for_package_in_list check ; then 1.1393 - cd "$CACHE_DIR" 1.1394 - if [ -f "$PACKAGE.tazpkg" ]; then 1.1395 - _ 'Package "%s" already in the cache' "$PACKAGE" 1.1396 - # Check package download was finished 1.1397 - tail -c 2k "$PACKAGE.tazpkg" | fgrep -q '00000000TRAILER' || { 1.1398 - _ 'Continuing package "%s" download' "$PACKAGE" 1.1399 - download "$PACKAGE.tazpkg" 1.1400 - } 1.1401 - if [ "$($CHECKSUM "$PACKAGE.tazpkg")" != \ 1.1402 - "$(fgrep " $PACKAGE.tazpkg" "$rep/packages.$SUM")" ]; then 1.1403 - rm -f "$PACKAGE.tazpkg" 1.1404 - download "$PACKAGE.tazpkg" 1.1405 - fi 1.1406 - else 1.1407 - download "$PACKAGE.tazpkg" 1.1408 - fi 1.1409 - PACKAGE_FILE="$CACHE_DIR/$PACKAGE.tazpkg" 1.1410 - elif download_get_script "$PACKAGE" "/tmp/$PACKAGE.$$" ; then 1.1411 - install_package_from_get_script "/tmp/$PACKAGE.$$" "$ROOT" --get 1.1412 - PACKAGE_FILE="$(ls "$PWD/$PACKAGE-*.tazpkg")" 1.1413 - fi 1.1414 - [ "$PWD" != "$CURRENT_DIR" ] && 1.1415 - cp -a "$PACKAGE_FILE" "$CURRENT_DIR" 1.1416 + install|-i) 1.1417 + # Install .tazpkg packages. 1.1418 + check_cmd su pkg file; shift 1.1419 + for i in $@; do 1.1420 + @@MODULES@@/install $i 1.1421 + done 1.1422 + # Install all the packages listed in the file 1.1423 + process_list 1.1424 ;; 1.1425 1.1426 1.1427 get-install|-gi) 1.1428 # Download and install a package. 1.1429 - check_root $@ 1.1430 - check_for_package_on_cmdline 1.1431 - check_for_packages_list 1.1432 + check_cmd su pkg; shift 1.1433 + # Get and install all the packages given on command line 1.1434 + for i in $@; do 1.1435 + pkg="$(@@MODULES@@/get $i)" && @@MODULES@@/install "$pkg" 1.1436 + done 1.1437 + # Get and install all the packages listed in the file 1.1438 + process_list 1.1439 + ;; 1.1440 1.1441 - DO_CHECK='' 1.1442 - [ -n "$forced" ] && DO_CHECK='no' 1.1443 - [ -n "$root" ] && ROOT="$root" && check_base_dir "$root" 1.1444 - [ -n "$list" ] && INSTALL_LIST="$list" # internal option 1.1445 1.1446 - # Get repositories priority list. 1.1447 - priority=$(look_for_priority) 1.1448 - 1.1449 - AUTOEXEC='no' 1.1450 - # Magic :) 1.1451 - # After testing this condition $PACKAGE become $PACKAGE-$VERSION$EXTRAVERSION 1.1452 - if ! check_for_package_in_list check; then 1.1453 - CACHE_DIR="${CACHE_DIR%/*}/get" 1.1454 - [ -d "$CACHE_DIR" ] || mkdir -p $CACHE_DIR 1.1455 - if download_get_script "$PACKAGE" "/tmp/$PACKAGE.$$" ; then 1.1456 - install_package_from_get_script "/tmp/$PACKAGE.$$" $ROOT 1.1457 - exit 0 1.1458 - else 1.1459 - PACKAGE="get-$PACKAGE" 1.1460 - AUTOEXEC="$PACKAGE" 1.1461 - # Here $PACKAGE become $PACKAGE-$VERSION$EXTRAVERSION 1.1462 - check_for_package_in_list 1.1463 - if [ -n "$(get_installed_package_pathname "$PACKAGE" "$ROOT")" ]; then 1.1464 - $AUTOEXEC $ROOT 1.1465 - exit 0 1.1466 - fi 1.1467 - fi 1.1468 - fi 1.1469 - # Check if no forced install. 1.1470 - if [ -z "$forced" ]; then 1.1471 - check_for_installed_package $ROOT 1.1472 - fi 1.1473 - 1.1474 - cd $CACHE_DIR 1.1475 - # Here $PACKAGE is $PACKAGE-$VERSION$EXTRAVERSION 1.1476 - if [ -f "$PACKAGE.tazpkg" ]; then 1.1477 - _ 'Package "%s" already in the cache' "$PACKAGE" 1.1478 - # Check package download was finished 1.1479 - tail -c 2k "$PACKAGE.tazpkg" | fgrep -q '00000000TRAILER' || { 1.1480 - _ 'Continuing package "%s" download' "$PACKAGE" 1.1481 - download "$PACKAGE.tazpkg" 1.1482 - } 1.1483 - if [ "$($CHECKSUM "$PACKAGE.tazpkg")" != "$(fgrep " $PACKAGE.tazpkg" $rep/packages.$SUM)" ]; then 1.1484 - rm -f "$PACKAGE.tazpkg" 1.1485 - download "$PACKAGE.tazpkg" 1.1486 - fi 1.1487 - else 1.1488 - newline 1.1489 - download "$PACKAGE.tazpkg" 1.1490 - fi 1.1491 - PACKAGE_FILE="$CACHE_DIR/$PACKAGE.tazpkg" 1.1492 - [ -n "$rootconfig" ] && PKGS_DB="${PKGS_DB#$root}" 1.1493 - install_package "$ROOT" 1.1494 - [ "$AUTOEXEC" != 'no' ] && "$PACKAGE" $ROOT 1.1495 - update_desktop_database $ROOT 1.1496 - update_mime_database $ROOT ;; 1.1497 + get-list|install-list|get-install-list) 1.1498 + # Install a set of packages from a list. 1.1499 + check_cmd su list file 1.1500 + COMMAND=${COMMAND%-list} 1.1501 + export list="$2" 1.1502 + process_list 1.1503 + ;; 1.1504 1.1505 1.1506 clean-cache|-cc) 1.1507 # Remove all downloaded packages. 1.1508 - check_root $@ 1.1509 - files=$(find $CACHE_DIR -name *.tazpkg | wc -l) 1.1510 - size=$(du -hs $CACHE_DIR | cut -f1 | sed 's|\.0||'); [ "$files" -eq 0 ] && size="0K" 1.1511 - 1.1512 - title 'Cleaning cache directory...' 1.1513 - action 'Path: %s' "$CACHE_DIR" 1.1514 - rm -rf $CACHE_DIR/* 1.1515 - status 1.1516 - 1.1517 - footer "$(_p \ 1.1518 - '%s file removed from cache (%s).' \ 1.1519 - '%s files removed from cache (%s).' $files \ 1.1520 - "$(colorize 32 "$files")" $size)" 1.1521 - ;; 1.1522 + check_cmd su; @@MODULES@@/cache clean;; 1.1523 1.1524 1.1525 list-undigest) 1.1526 # List undigest mirrors 1.1527 - @@MODULES@@/mirror list 1.1528 - ;; 1.1529 + @@MODULES@@/mirror list;; 1.1530 remove-undigest) 1.1531 # Remove undigest mirror 1.1532 - check_root $1 1.1533 - shift; @@MODULES@@/mirror remove $@ 1.1534 - ;; 1.1535 + check_cmd su; shift; @@MODULES@@/mirror remove $@;; 1.1536 add-undigest|setup-undigest) 1.1537 # Add undigest mirror 1.1538 - check_root $1 1.1539 - shift; @@MODULES@@/mirror add $@ 1.1540 - ;; 1.1541 + check_cmd su; shift; @@MODULES@@/mirror add $@;; 1.1542 setup-mirror|-sm) 1.1543 # Change main mirror 1.1544 - check_root $@ 1.1545 - shift; @@MODULES@@/mirror setup $@ 1.1546 - ;; 1.1547 + check_cmd su; shift; @@MODULES@@/mirror setup $@;; 1.1548 1.1549 1.1550 reconfigure) 1.1551 # Replay post_install from receipt 1.1552 - check_for_package_on_cmdline 1.1553 - check_root $1 1.1554 - 1.1555 - ROOT="$root" 1.1556 - if [ -d "$ROOT$INSTALLED/$PACKAGE" ]; then 1.1557 - check_for_receipt $ROOT 1.1558 - # Check for post_install 1.1559 - if grep -q ^post_install "$ROOT$INSTALLED/$PACKAGE/receipt"; then 1.1560 - . "$ROOT$INSTALLED/$PACKAGE/receipt" 1.1561 - post_install $ROOT 1.1562 - # Log this activity 1.1563 - [ -z "$ROOT" ] && log_pkg Reconfigured 1.1564 - else 1.1565 - newline 1.1566 - _ 'Nothing to do for package "%s".' "$PACKAGE" 1.1567 - fi 1.1568 - else 1.1569 - newline 1.1570 - _ 'Package "%s" is not installed.' "$PACKAGE" 1.1571 - _ 'Install package with "%s" or "%s"' 'tazpkg install' 'tazpkg get-install' 1.1572 - newline 1.1573 - fi 1.1574 - ;; 1.1575 + check_cmd su pkg receipt; @@MODULES@@/reconfigure "$2";; 1.1576 1.1577 1.1578 shell) 1.1579 @@ -1560,78 +522,20 @@ 1.1580 1.1581 depends) 1.1582 # Display dependencies tree 1.1583 - shift; @@MODULES@@/depends depends $@ 1.1584 - ;; 1.1585 + check_cmd pkg; shift; @@MODULES@@/depends depends $@;; 1.1586 rdepends) 1.1587 # Display reverse dependencies tree 1.1588 - shift; @@MODULES@@/depends rdepends $@ 1.1589 - ;; 1.1590 + check_cmd pkg; shift; @@MODULES@@/depends rdepends $@;; 1.1591 1.1592 1.1593 convert|-c) 1.1594 # convert misc package format to .tazpkg 1.1595 - check_for_package_file 1.1596 - shift; @@MODULES@@/convert $@ 1.1597 - ;; 1.1598 + check_cmd file; shift; @@MODULES@@/convert $@;; 1.1599 1.1600 1.1601 link) 1.1602 # link a package from another SliTaz installation 1.1603 - PACKAGE="$2" 1.1604 - if [ ! -d "$TARGET_DIR" -o \ 1.1605 - ! -d "$TARGET_DIR$INSTALLED/$PACKAGE" ]; then 1.1606 - _ 'Usage: tazpkg link package_name slitaz_root' 1.1607 - longline "$( 1.1608 - _n 'Example:' 1.1609 - echo -n ' ' 1.1610 - _ '"%s" will use less than 100k in your running system RAM.' \ 1.1611 - 'tazpkg link openoffice /mnt')" 1.1612 - exit 1 1.1613 - fi 1.1614 - if [ -e "$INSTALLED/$PACKAGE" ]; then 1.1615 - _ 'Package "%s" is already installed.' "$PACKAGE" 1.1616 - exit 1 1.1617 - fi 1.1618 - ln -s "$TARGET_DIR$INSTALLED/$PACKAGE" $INSTALLED 1.1619 - DEPENDS="$(. "$INSTALLED/$PACKAGE/receipt"; echo $DEPENDS)" 1.1620 - MISSING='' 1.1621 - for i in $DEPENDS; do 1.1622 - [ -e $INSTALLED/$i ] && continue 1.1623 - MISSING="$MISSING$i " 1.1624 - _ 'Missing: %s' $i 1.1625 - done 1.1626 - if [ -n "$MISSING" ]; then 1.1627 - newline 1.1628 - confirm "$(_ 'Link all missing dependencies? (y/N)')" 1.1629 - answer=$? 1.1630 - newline 1.1631 - if [ "$answer" -eq 0 ]; then 1.1632 - for i in $MISSING; do 1.1633 - tazpkg link $i $TARGET_DIR 1.1634 - done 1.1635 - else 1.1636 - newline 1.1637 - _ 'Leaving dependencies unresolved for package "%s"' "$PACKAGE" 1.1638 - _ 'The package is installed but probably will not work.' 1.1639 - newline 1.1640 - fi 1.1641 - fi 1.1642 - . "$INSTALLED/$PACKAGE/receipt" 1.1643 - if grep -q ^pre_install "$INSTALLED/$PACKAGE/receipt"; then 1.1644 - pre_install 1.1645 - fi 1.1646 - while read path; do 1.1647 - [ -e "$path" ] && continue 1.1648 - while true; do 1.1649 - dir="$(dirname "$path")" 1.1650 - [ -e "$dir" ] && break 1.1651 - path="$dir" 1.1652 - done 1.1653 - ln -s "$TARGET_DIR$path" "$dir" 1.1654 - done < "$INSTALLED/$PACKAGE/files.list" 1.1655 - if grep -q ^post_install "$INSTALLED/$PACKAGE/receipt"; then 1.1656 - post_install 1.1657 - fi ;; 1.1658 + check_cmd su pkg dir; shift; @@MODULES@@/link $@;; 1.1659 1.1660 1.1661 help|-h) 1.1662 @@ -1654,7 +558,8 @@ 1.1663 1.1664 usage|*) 1.1665 # Print a short help or give usage for an unknown or empty command. 1.1666 - @@MODULES@@/help ;; 1.1667 + @@MODULES@@/help 1.1668 + ;; 1.1669 esac 1.1670 1.1671 exit 0