added the '-m rpm' method
[util-vserver.git] / util-vserver / scripts / vserver-build.rpm
1 # $Id$  --*- sh -*--
2
3 # Copyright (C) 2005 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
4 #  
5 # This program is free software; you can redistribute it and/or modify
6 # it under the terms of the GNU General Public License as published by
7 # the Free Software Foundation; version 2 of the License.
8 #  
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 # GNU General Public License for more details.
13 #  
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17
18 tmp=$(getopt -o +d:b: --long debug -n "$0" -- "$@") || exit 1
19 eval set -- "$tmp"
20
21 . "$_LIB_VSERVER_BUILD_FUNCTIONS_RPM"
22 . "$_LIB_VSERVER_BUILD_FUNCTIONS_PKGMGMT"
23
24 set -e
25
26
27 ## Usage: installPackages <vserver> <rpm-options>*
28 ## it expects a list of packages on stdin
29 function installPackages()
30 {
31     local       cfgdir=$1
32     shift
33
34     while read; do
35         case x"$REPLY" in
36             (x|\#*)     continue;;
37         esac
38         
39         echo "$BASEDIR/$REPLY"
40     done >>"$manifest"
41
42     cat "$manifest"
43     test ! -s "$manifest" || $_VRPM "$cfgdir" -- -Uv "$@" "$manifest"
44 }
45
46 BASEDIR=$(pwd)
47 DISTRIBUTION=
48
49 echo "$@"
50
51 while true; do
52     case "$1" in
53         (-d)            DISTRIBUTION=$2; shift;;
54         (-b)            BASEDIR=$2; shift;;
55         (--debug)       set -x;;
56         (--)            shift; break ;;
57         (*)             echo "vserver-build.rpm: internal error: unrecognized option '$1'" >&2
58                         exit 1
59                         ;;
60     esac
61     shift
62 done
63
64 getDistribution "template"
65
66 base.initVariables
67 pkgmgmt.initVariables
68 rpm.initVariables
69
70 base.initFilesystem    "$OPTION_FORCE"
71 pkgmgmt.initFilesystem "$OPTION_FORCE"
72 rpm.initFilesystem
73
74 setup_writeOption "$VSERVER_NAME"
75 setup_writeInitialFstab
76
77 # when basedir is a non-local location, rpm will download it into the
78 # current directory. Therefore, create and go into a temporay directory
79 # before doing the operations.
80 tmpdir=$($_MKTEMPDIR /var/tmp/vserver-build.rpm.XXXXXX)
81 manifest=$($_MKTEMP /tmp/vserver-build.rpm.manifest.XXXXXX)
82 trap "rm -rf $tmpdir $manifest" EXIT
83 cd "$tmpdir"                    
84
85 test -z "$BUILD_INITPRE"  || "$BUILD_INITPRE" "$SETUP_CONFDIR"  "$UTIL_VSERVER_VARS"
86 rpm.importGPGPubKeys "$SETUP_CONFDIR" "$CONFDIR/.distributions/$DISTRIBUTION/pubkeys" "$DISTRIBDIR/$DISTRIBUTION/pubkeys"
87 rpm.initDB           "$SETUP_CONFDIR"
88
89 for i; do
90     case "$i" in
91         (--force|--nodeps)      opts=( "${opts[@]}" "$i" ); continue;;
92     esac
93     
94     installPackages "$VSERVER_NAME" "${opts[@]}" <"$i"
95     opts=
96 done
97
98 test -z "$BUILD_INITPOST" || "$BUILD_INITPOST" "$SETUP_CONFDIR" "$UTIL_VSERVER_VARS"