added utilvserver_int2str()
[util-vserver.git] / util-vserver / scripts / vserver-init
index 3116a82..565966c 100755 (executable)
@@ -26,23 +26,20 @@ test -e "$UTIL_VSERVER_VARS" || {
 . "$UTIL_VSERVER_VARS"
 . "$PKGLIBDIR/functions"
 
-tmp=$(getopt -o d:r: --long force,dir:,pkgcfg:,hostname:,iproot:,iprootmask:,iprootbcast:,iprootdev:,help,version \
+tmp=$(getopt -o d:r: --long force,dir:,pkgcfg:,hostname:,lockfile:,help,version \
       -n "$0" -- "$@") || exit 1
 
 eval set -- "$tmp"
 
 distrib=
-root=/vservers
+root=
+root_rel=1
 dir=
 name=
-hostname=
-iproot=
-iprootmask=
-iprootbcast=
-iprootdev=
 force=
 pkgcfg=
-
+pkgcfgbase_rel=
+lockfile=
 
 function makeDevEntry
 {
@@ -110,6 +107,26 @@ function prepareRPMDb
     mkdir -p "$vdir$rpmdb_path"
 }
 
+function importGPGPubKeys
+{
+    local dst=$1
+    local pkgs
+    declare -a pkgs
+    local i
+    
+    shift
+    for i; do
+       local file=
+       for file in "$i"/*; do
+           test -f "$file" || continue
+           pkgs[${#pkgs[*]}]=$file
+       done
+    done
+
+    test "$pkgs" || return 0
+    "$_VRPM" "$dst" -- --import "${pkgs[@]}"
+}
+
 while true; do
     case "$1" in
        -d)             distrib="$2"; shift 2;;
@@ -117,11 +134,7 @@ while true; do
        --pkgcfg)       pkgcfg="$2";  shift 2;;
        --force)        force=1;      shift;;
        --dir)          dir="$2";     shift 2;;
-       --hostname)     hostname="$2"; shift 2;;
-       --iproot)       iproot="$2";   shift 2;;
-       --iprootmask)   iprootmask="$2";  shift 2;;
-       --iprootbcast)  iprootbcast="$2"; shift 2;;
-       --iprootdev)    iprootdev="$2";   shift 2;;
+       --lockfile)     lockfile="$2";    shift 2;;
        --help)         showHelp;         exit 0;;
        --version)      showVersion;      exit 0;;
        --)             shift; break;;
@@ -140,8 +153,41 @@ test "$#" = 1 || {
 }
 
 name=$1
-test "$dir"    || dir=$name
-test "$pkgcfg" || pkgcfg=$root/.pkg/$name
+
+test "$root"    || {
+    for item in "$CONFDIR/.defaults/vdirbase 1" "/vservers"; do
+       set -- $item
+       root=$1
+       root_rel=$2
+       test ! -d "$root" || break
+    done
+}
+
+test -d "$root" || {
+    echo "Root-directory '$root' does not exists or is invalid"
+    exit 1
+}
+
+test "$lockfile" || lockfile=/var/run/vservers/$name
+    
+test "$pkgcfg"  || {
+    pkgcfgbase=
+    for item in "$CONFDIR/.defaults/apps/pkgmgmt/base 1" "$root/.pkg"; do
+       set -- $item
+       pkgcfgbase=$1
+       pkgcfgbase_rel=$2
+       test ! -d "$pkgcfgbase" || break
+    done
+
+    test -d "$pkgcfgbase"  || {
+       echo "pkgcfgbase-dir '$pkgcfgbase' does not exists or is invalid"
+       exit 1
+    }
+
+    pkgcfg="$pkgcfgbase/$name"
+}
+
+test "$dir"        || dir=$name
 
 vdir=$root/$dir
 test ! -d "$vdir"  || {
@@ -177,16 +223,18 @@ findDir  EXECDIR  $CONFDIR/.distributions/$distrib/execdir  $DISTRIBDIR/$distrib
 findDir  RPMLIB   $CONFDIR/.distributions/$distrib/rpmlib   $DISTRIBDIR/$distrib/rpmlib        /
 findDir  PKGDIR   $CONFDIR/.distributions/$distrib/pkgs     $DISTRIBDIR/$distrib/pkgs          /
 
-mkdir -p "$confdir"/apps/pkgmgmt "$vdir"/{dev,etc} \
+mkdir -p "$confdir"/apps/pkgmgmt "$vdir"/{dev/pts,etc} \
          "$pkgcfg"/{rpm/{etc,state},apt/{etc,archives/partial,cache,state/lists/partial}}
+ln -s "$lockfile" "$confdir"/run
 
 prepareRPMDb
                 
 ## HACK AND SECURITY ALERT!
 ## /var/lib/rpm is hardcoded into apt-get which does not honor the
 ## %_dbpath variable therefore
-#mkdir -p "$vdir"/var/lib
-#ln -s ../../dev "$vdir"/var/lib/rpm
+## see ???
+mkdir -p "$vdir"/var/lib
+ln -s "$rpmdb_path" "$vdir"/var/lib/rpm
 
 
 while read spec; do
@@ -194,7 +242,7 @@ while read spec; do
 done <$DEVDESCR
 
 ln -s "$vdir" "$confdir"/vdir
-for i in hostname iproot iprootmask iprootbcast iprootdev; do
+for i in hostname; do
     i_=\$$i
     eval "v=$i_"
     test -z "$v" || echo $v >"$confdir/$i"
@@ -211,6 +259,7 @@ populateDirectory "$pkgcfg/rpm/etc" "$DISTRIBDIR/defaults/rpm" "$DISTRIBDIR/$dis
 echo "%_dbpath $rpmdb_path" >>"$pkgcfg/rpm/etc/macros"
                  
 test -z "$INITPRE"  || "$INITPRE" "$name"
+importGPGPubKeys "$name" "$CONFDIR/.distributions/$distrib/pubkeys" "$DISTRIBDIR/$distrib/pubkeys"
 "$_VAPT_GET" "$name" -- update
 installBasePackages "$name" "$PKGDIR"
 "$_VAPT_GET" "$name" -- dist-upgrade -y