123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- #!/bin/sh
- #(c) Copyright Barry Kauler 2009, puppylinux.com
- #2009 Lesser GPL licence v2 (see /usr/share/doc/legal).
- #called from /usr/local/petget/installpreview.sh or check_deps.sh
- #/tmp/petget_pkg_name_aliases_patterns is written by pkg_chooser.sh.
- #passed param is a list of dependencies (DB_dependencies field of the pkg database).
- #results format, see comment end of this script.
- #100126 handle PKG_NAME_IGNORE variable from file PKGS_MANAGEMENT.
- #100711 fix handling of PKG_NAME_ALIASES variable (defined in PKGS_MANAGEMENT file).
- #110706 finding missing dependencies fix (running mageia 1).
- #110722 versioning info added to dependencies.
- #110822 versioning operators can be chained, ex: +linux_kernel&ge2.6.32<2.6.33
- #120822 in precise puppy have a pet 'cups' instead of the ubuntu debs. the latter are various pkgs, including 'libcups2'. we don't want libcups2 showing up as a missing dependency, so have to screen these alternative names out. see also pkg_chooser.sh
- #120904 bugfix, was very slow.
- DB_dependencies="$1" #in standard format of the package database, field 9.
- . /etc/DISTRO_SPECS #has DISTRO_BINARY_COMPAT, DISTRO_COMPAT_VERSION
- . /root/.packages/DISTRO_PKGS_SPECS #has PKGS_SPECS_TABLE
- . /root/.packages/PKGS_MANAGEMENT #has PKG_ALIASES_INSTALLED
- #110722 versioning info added to dependencies...
- #the dependencies field can now have &ge, >, &eq, &le, <
- #ex1: |+ncurses,+readline&ge2.3.5,+glibc|
- #chained operators allowed: ex2: |+ncurses,+readline&ge2.3.5<2.3.6,+glibc|
- #if you want a package to be kernel version sensitive:
- #ex3: |+ncurses,+readline,+glibc,+linux_kernel&ge2.6.39|
- xDB_dependencies="`echo -n "$DB_dependencies" | tr ',' '\n' | cut -f 1 -d '&' | tr '\n' ','`" #110722 chop off any versioning info.
- #make pkg deps into patterns... 110722 change DB_dependencies to xDB_dependencies...
- PKGDEPS_PATTERNS="`echo -n "$xDB_dependencies" | tr ',' '\n' | grep '^+' | sed -e 's%^+%%' -e 's%^%|%' -e 's%$%|%'`"
- echo "$PKGDEPS_PATTERNS" > /tmp/petget_pkg_deps_patterns #ex line, mageia: |libdbus-glib-1_2|
- #110722 same as above, but with versioning info...
- PKGDEPS_PATTERNS_WITHVER="`echo -n "$DB_dependencies" | tr ',' '\n' | grep '^+' | sed -e 's%^+%%' -e 's%^%|%' -e 's%$%|%' -e 's%&%|%g'`"
- echo "$PKGDEPS_PATTERNS_WITHVER" > /tmp/petget_pkg_deps_patterns_with_versioning #ex line, mageia: |libdbus-glib-1_2|ge2.3.6|
- #110706 mageia, a dep "libdbus-glib-1_2" must be located in variable PKG_ALIASES_INSTALLED (in file PKGS_MANAGEMENT)...
- #/tmp/petget_pkg_name_aliases_patterns[_raw] created in check_deps.sh
- for ONEALIAS in `cat /tmp/petget_pkg_name_aliases_patterns_raw | tr '\n' ' ' | tr ',' ' '` #ex: |cxxlibs|,|glibc.*|,|libc\-.*|
- do
- FNDDEPSPTNS="`grep "$ONEALIAS" /tmp/petget_pkg_deps_patterns`"
- if [ "$FNDDEPSPTNS" != "" ];then
- echo "$FNDDEPSPTNS" >> /tmp/petget_pkg_name_aliases_patterns
- fi
- done
- #need patterns of all installed pkgs...
- #100711 /tmp/petget_installed_patterns_system is created in pkg_chooser.sh.
- cp -f /tmp/petget_installed_patterns_system /tmp/petget_installed_patterns_all
- if [ -s /root/.packages/user-installed-packages ];then
- INSTALLED_PATTERNS_USER="`cat /root/.packages/user-installed-packages | cut -f 2 -d '|' | sed -e 's%^%|%' -e 's%$%|%' -e 's%\\-%\\\\-%g'`"
- echo "$INSTALLED_PATTERNS_USER" >> /tmp/petget_installed_patterns_all
- #120822 this code also in pkg_chooser.sh, find alt deb names...
- case $DISTRO_BINARY_COMPAT in
- ubuntu|debian|raspbian)
- #120904 bugfix, was very slow...
- MODIF1=`stat --format=%Y /root/.packages/user-installed-packages` #seconds since epoch.
- MODIF2=0
- [ -f /var/local/petget/installed_alt_ptns_pet_user ] && MODIF2=`stat --format=%Y /var/local/petget/installed_alt_ptns_pet_user`
- if [ $MODIF1 -gt $MODIF2 ];then
- INSTALLED_PTNS_PET="$(grep '\.pet|' /root/.packages/user-installed-packages | cut -f 2 -d '|')"
- if [ "$INSTALLED_PTNS_PET" != "" ];then
- xINSTALLED_PTNS_PET="$(echo "$INSTALLED_PTNS_PET" | sed -e 's%^%/%' -e 's%$%|%' -e 's%\-%\\-%g')"
- echo "$xINSTALLED_PTNS_PET" > /tmp/petget/fmp_xipp
- INSTALLED_ALT_NAMES="$(grep --no-filename -f /tmp/petget/fmp_xipp /root/.packages/Packages-${DISTRO_BINARY_COMPAT}-${DISTRO_COMPAT_VERSION}-* | cut -f 2 -d '|')"
- if [ "$INSTALLED_ALT_NAMES" ];then
- INSTALLED_ALT_PTNS="$(echo "$INSTALLED_ALT_NAMES" | sed -e 's%^%|%' -e 's%$%|%' -e 's%\-%\\-%g')"
- echo "$INSTALLED_ALT_PTNS" > /var/local/petget/installed_alt_ptns_pet_user
- echo "$INSTALLED_ALT_PTNS" >> /tmp/petget_installed_patterns_all
- fi
- fi
- touch /var/local/petget/installed_alt_ptns_pet_user
- else
- cat /var/local/petget/installed_alt_ptns_pet_user >> /tmp/petget_installed_patterns_all
- fi
- ;;
- esac
- fi
- #add these alias names to the installed patterns...
- #packages may have different names, add them to installed list...
- INSTALLEDALIASES="`grep --file=/tmp/petget_installed_patterns_all /tmp/petget_pkg_name_aliases_patterns | tr ',' '\n'`"
- [ "$INSTALLEDALIASES" ] && echo "$INSTALLEDALIASES" >> /tmp/petget_installed_patterns_all
- #110706 mageia, a dep "libdbus-glib-1_2" must be located in variable PKG_ALIASES_INSTALLED (in file PKGS_MANAGEMENT)...
- #/tmp/petget_pkg_name_aliases_patterns[_raw] created in check_deps.sh, pkg_chooser.sh
- for ONEALIAS in `cat /tmp/petget_pkg_name_aliases_patterns_raw | tr '\n' ' ' | tr ',' ' '` #ex: |cxxlibs|,|glibc.*|,|libc\-.*|
- do
- FNDPTN="`grep "$ONEALIAS" /tmp/petget_installed_patterns_all`"
- if [ "$FNDPTN" ];then
- FNDDEPPTN="`grep "$ONEALIAS" /tmp/petget_pkg_deps_patterns`"
- [ "$FNDDEPPTN" ] && echo "$FNDDEPPTN" >> /tmp/petget_installed_patterns_all
- fi
- done
- #100126 some names to ignore, as most likely already installed...
- #/tmp/petget_pkg_name_ignore_patterns is created in pkg_choose.sh
- cat /tmp/petget_pkg_name_ignore_patterns >> /tmp/petget_installed_patterns_all
- #clean it up...
- grep -v '^$' /tmp/petget_installed_patterns_all > /tmp/petget_installed_patterns_all-tmp
- mv -f /tmp/petget_installed_patterns_all-tmp /tmp/petget_installed_patterns_all
- #remove installed pkgs from the list of dependencies...
- MISSINGDEPS_PATTERNS="`grep --file=/tmp/petget_installed_patterns_all -v /tmp/petget_pkg_deps_patterns | grep -v '^$'`"
- echo "$MISSINGDEPS_PATTERNS" > /tmp/petget_missingpkgs_patterns #can be read by dependencies.sh, find_deps.sh.
- #notes on results:
- #/tmp/petget_missingpkgs_patterns has a list of missing dependencies, format ex:
- # |kdebase|
- # |kdelibs|
- # |mesa-lib|
- # |qt|
- #/tmp/petget_installed_patterns_all (read in dependencies.sh) has a list of already installed
- # packages, both builtin and user-installed. One on each line, exs:
- # |915resolution|
- # |a52dec|
- # |absvolume_puppy|
- # |alsa\-lib|
- # |cyrus\-sasl|
- # ...notice the '-' are backslashed.
- #110722
- MISSINGDEPS_PATTERNS_WITHVER="`grep --file=/tmp/petget_missingpkgs_patterns /tmp/petget_pkg_deps_patterns_with_versioning | grep -v '^$'`"
- echo "$MISSINGDEPS_PATTERNS_WITHVER" > /tmp/petget_missingpkgs_patterns_with_versioning #can be read by dependencies.sh, find_deps.sh.
- #...ex each line: |kdebase|ge2.3.6|
- # ex with chained operators: |kdebase|ge2.3.6|lt2.4.5|
- #note, dependencies.sh currently not using this file.
- #120831 npierce, jemimah: dependencies.sh now using /tmp/petget_missingpkgs_patterns_with_versioning.
- ###END###
|