3 # install a file from a package
12 while getopts :f:v:r:d:a:u:g:l:p:b:P:R: opt; do
14 R) pkgroot="$OPTARG" ;;
15 f) pkgfile="$OPTARG" ;;
16 v) pkgver="$OPTARG" ;;
17 r) pkgrel="$OPTARG" ;;
18 P) prefix="$OPTARG" ;;
31 zpm shell $pkgfile<<EOS
32 select $1 from packagefiles
34 and package||'-'||version||'-'||release = '$pkg'
39 # if not from a package file, from local db
40 if [ -z "$pkgfile" ]; then
41 die "installing from non-pkgfile not supported"
52 name=$(basename -- "$path")
53 dir=$(dirname -- "$path")
56 if [ "$pkgroot" != '/' ]; then
59 # if [ "$dir" = "//" ]; then dir=/ ; fi
64 # TODO generate some unique hash
65 tmppath=$dir/.installing.$name
67 printf '%s installing %s\n' $pkg $dir/$name
69 fhash=$(pkgfileinfo hash $path)
70 mode=$(pkgfileinfo mode $path)
71 ftype=$(pkgfileinfo filetype $path)
72 : ${owner:=$(pkgfileinfo username $path)}
73 : ${group:=$(pkgfileinfo groupname $path)}
75 # TODO if the file already exists, and is the correct
76 # hash or directory, do nothing
78 # can't use install because it's not posix.
79 # probably worth writing a zpm-install, but with
80 # a different name since that wants to be a package install
81 # probably makes the most sense for extract to know how
82 # to do the extract to temp and such, then
83 # you can just add the -S option (secure)
88 r*) zpm extract $pkgfile $fhash $tmppath
89 chown $owner:$group $tmppath
91 # TODO mv -n non-posix, going to need to have extract
93 mv $tmppath $dir/$name
96 mkdir -m 000 $dir/$name
97 chown $owner:$group $dir/$name
101 *) echo unknown filetype ; exit 1 ;;