]> pd.if.org Git - zpackage/blobdiff - zpm-install
teach findpkg to parse full or partial package triples
[zpackage] / zpm-install
index 487740ddc4dbca063b3cbab96d1177dfa7a60bab..589cb84adc3e9acd90fc7fba90293e5f2bbfe93a 100755 (executable)
@@ -1,12 +1,22 @@
 #!/bin/sh
 
-#package=${1:-$ZPMPACKAGE}
+# what we need to install a package:
+
+# recording repo: where we record what we've done
+# source: where we get the package and files from
+# install root: really just a prefix, but thought about differently,
+#    and we might need to do a chroot
+
+# zpm install [options] <package ...>
+
 pkgver=${ZPMPACKAGEVER:-1.0}
 pkgrel=${ZPMPACKAGEREL:-1}
 
 pkgroot=/
 
 # allocate an install id, perhaps hash package and timestamp
+# installid=$(echo $(date) $pkglist | zpm hash)
+
 # extract pre-scripts and run them
 # get list of paths to install
 # for each path, if directory, create and set mode
@@ -18,40 +28,71 @@ pkgroot=/
 # move into place
 # after all the files, extract post scripts and run them
 
+# also need to mark package as installing so if it fails part way
+# through, it can be finished later
+# probably also want an option to "backup" any packages being upgraded
+# so it's trivial to downgrade or to revert if the install fails
+
 # option for "multipackage" just to let the system know that's what you meant
 # option to take filenames from stdin
 # parse package, version, release from file if not given
-while getopts :f:v:r:d:a:u:l:p:b:P:R: opt; do
+# TODO what's the difference between prefix and pkgroot
+# need an option to not chown the files
+# option to install but not merge/track
+
+# options
+# -R install root, if installing as root, will chroot?
+# -C no chroot, even if root
+# -N no pre-scripts
+# -X no post-scripts
+# -f source repository file
+# -d local (recording) repository database
+# -D don't locally record
+# -t only files matching tags
+# -T exclude files matching tags
+
+chroot=1
+
+for cf in /etc/zpmrc ~/.zpmrc ./.zpmrc; do
+       test -r $cf && . $cf
+done
+
+while getopts :R:CNXf:d:Dt:T:u:g: opt; do
        case $opt in
                R) pkgroot="$OPTARG" ;;
+               C) chroot=0 ;;
                f) pkgfile="$OPTARG" ;;
-               v) pkgver="$OPTARG" ;;
-               r) pkgrel="$OPTARG" ;;
-               d) description="$OPTARG" ;;
-               a) arch="$OPTARG" ;;
-               u) url="$OPTARG" ;;
-               l) licenses="$OPTARG" ;;
-               p) packager="$OPTARG" ;;
-               b) builddate="$OPTARG" ;;
-               P) prefix="$OPTARG" ;;
+               u) user="$OPTARG" ;;
+               g) group="$OPTARG" ;;
+               d) ZPMDB="$OPTARG" ;;
        esac
 done
+
 shift $((OPTIND - 1))
 
-set -e
-if [ -z "$pkgfile" ]; then
-       # actually, if no pkgfile, get pkgfile from repo
-       pkgfile="$package-$pkgver-$pkgrel.zpm"
-fi
+: ${ZPMDB:=/var/lib/zpm/db.zpm}
+
+export ZPMDB
 
 die() {
-       echo $* 1&>2
+       printf 'zpm-install:' 1>&2
+       printf ' %s' $* 1>&2
+       printf '\n' 1>&2
        exit 1
 }
 
+if [ -z "$pkgfile" ]; then
+       # actually, if no pkgfile, get pkgfile from repo
+       # but need to loop over finding package files then
+       # so this program probably needs to be "install from pkgfile"
+       # and a separate one that will loop over a package
+       # spec list and find from repos
+       die "must specify package file" 
+       pkgfile="$package-$pkgver-$pkgrel.zpm"
+fi
+
 set -e
 zpm test -v $pkgfile
-set +e
 
 if [ $# -gt 0 ]; then
        pkglist="$@"
@@ -60,13 +101,24 @@ else
 fi
 
 pathlist() {
-       sqlite3 $pkgfile<<EOS
+       zpm shell $pkgfile<<EOS
 select path from packagefiles
        where package||'-'||version||'-'||release = '$pkg'
        ;
 EOS
 }
 
+# find a repo file for a given package
+findrepofor() {
+       false
+}
+
+installpkg() (
+       package="$1"
+)
+
+zpm merge $pkgfile
+
 for pkg in $pkglist; do
        # TODO find scripts marked as pre-install
        # TODO if this is an upgrade, run pre-upgrade
@@ -74,12 +126,16 @@ for pkg in $pkglist; do
        # TODO get total size of install so we can do a progress bar
 
        # add package info to local package db
-       # zpm merge -L -f $pkgfile $pkg
+       # check for conflicts
        # mark package in localdb as installing
        # zpm setmark installing $pkg
        # install all the files for a package
        # TODO install directories first in order of path length
-       pathlist | xargs zpm ipkgfile -R "$pkgroot" -f $pkgfile -- $pkg 
+       echo installing $pkglist
+       filecount=$(pathlist | wc -l)
+       echo $filecount files
+       #pathlist
+       pathlist | xargs zpm ipkgfile ${user+-u $user} ${group+-g $group} -R "$pkgroot" -f $pkgfile -- $pkg
 
        # TODO find scripts marked as post-install
        # TODO if this is an upgrade, run post-upgrade