util-vserver-0.30.208
[util-vserver.git] / scripts / vserver-build.functions.rpm
diff --git a/scripts/vserver-build.functions.rpm b/scripts/vserver-build.functions.rpm
new file mode 100644 (file)
index 0000000..9aa499d
--- /dev/null
@@ -0,0 +1,126 @@
+# $Id: vserver-build.functions.rpm,v 1.8 2005/04/16 21:20:45 ensc Exp $        --*- sh -*--
+
+# Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+#  
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 of the License.
+#  
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#  
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+RPMDB_PATH=
+RPMLIBDIR=
+
+function rpm.importGPGPubKeys
+{
+    local dst=$1
+    local pkgs
+    declare -a pkgs
+    local i
+    
+    shift
+    for i; do
+       local file=
+       for file in "$i"/*; do
+           isRegularFile "$file" || continue
+
+           pkgs=( "${pkgs[@]}" "$file" )
+       done
+    done
+
+    test -n "$pkgs" || return 0
+    "$_VRPM" "$dst" -- --import "${pkgs[@]}"
+}
+
+function rpm.initVariables
+{
+    test -n "$WORKAROUND_106057" && \
+       RPMDB_PATH=/.rpmdb || \
+       RPMDB_PATH=/dev
+
+    findDir RPMLIBDIR "$__CONFDIR/.distributions/$DISTRIBUTION/rpmlib" "$__DISTRIBDIR/$DISTRIBUTION/rpmlib" /
+}
+
+function rpm.initFilesystem
+{
+    test -z "$WORKAROUND_106057" || mkdir -p "$RPMDB_PATH"
+    mkdir -p "$VDIR$RPMDB_PATH"
+
+    test -z "$WORKAROUND_APT_DBPATH" || {
+       mkdir -p "$VDIR/var/lib"
+       ln -s "$RPMDB_PATH" "$VDIR/var/lib/rpm"
+    }
+
+    mkdir -p "$PKGCFGDIR"/rpm/{etc,state}
+    populateDirectory "$PKGCFGDIR/rpm/etc" \
+       "$__DISTRIBDIR/defaults/rpm" \
+       "$__DISTRIBDIR/$DISTRIBUTION/rpm" \
+       "$__CONFDIR/.distributions/$DISTRIBUTION/rpm"
+
+    echo "%_dbpath $RPMDB_PATH" >>"$PKGCFGDIR/rpm/etc/macros"
+
+    test "$RPMLIBDIR"  = / || ln -s "$RPMLIB"  "$SETUP_CONFDIR/apps/pkgmgmt/rpmlib"
+}
+
+function rpm.initDB
+{
+    RPM_FLAVOR=d "$_VRPM" "$1" -- --initdb
+}
+
+
+
+## Usage: rpmlist.install <vserver> <basedir> <tmpfile> <listfile> <rpm-options>*
+function rpmlist.install()
+{
+    local      cfgdir=$1
+    local      basedir=$2
+    local       manifest=$3
+    local      listfile=$4
+    shift 4
+
+    while read; do
+       case x"$REPLY" in
+           (x|\#*)     continue;;
+       esac
+       
+       echo "$basedir/$REPLY"
+    done >"$manifest" <"$listfile"
+
+    test "$OPTION_DEBUG" -eq 0 || cat "$manifest"
+    test ! -s "$manifest"      || $_VRPM "$cfgdir" -- -U "$@" "$manifest"
+}
+
+
+## Usage: rpmlist.initByDistribution <result-var> <distribution>
+function rpmlist.initByDistribution()
+{
+    local      _rlid_listdir
+    declare -a _rlid_res=() 
+    
+
+    findDir _rlid_listdir "$__CONFDIR/.distributions/$2/rpmlist.d" \
+                         "$__DISTRIBDIR/$2/rpmlist.d" \
+                         ''
+                   
+    test -d "$_rlid_listdir" || return 0
+
+    local      _rlid_lst
+    for _rlid_lst in "$_rlid_listdir"/*.lst; do
+       isRegularFile "$_rlid_lst" || continue
+
+       local           _rlid_opts=${_rlid_lst%%lst}cmd
+       declare -a      _rlid_tmp=()
+
+       test ! -e "$_rlid_opts" || getFileArray _rlid_tmp "$_rlid_opts"
+       _rlid_res=( "${_rlid_res[@]}" "${_rlid_tmp[@]}" "$_rlid_lst" )
+    done
+
+    eval "$1"='( "${_rlid_res[@]}" )'
+}