Add cache directory support to base-bootstrap
[opensuse:base-installer.git] / base-installer
1 #!/bin/sh
2
3 SCRIPT_DIR=$([ -e @SCRIPTSDIR@/$(basename $0).py ] && \
4     echo @SCRIPTSDIR@ || echo $(pwd))
5
6 OPTIONS=`getopt -o f:hr:t: --long fstype:,help,rootdev:,target: \
7     -n '$(basename $0)' -- "$@"`
8 if [ $? != 0 ] ; then
9     echo "Terminating..." >&2
10     exit 1
11 fi
12
13 # Note the quotes around `$TEMP': they are essential!
14 eval set -- "$OPTIONS"
15
16 function usage()
17 {
18     printf "Usage: $(basename $0) [OPTION]... ROOTDIR\n"
19
20     if [ x$1 = x-h ] ; then
21         printf $"\nOutput control:
22   -f, --fstype\t\tfilesystem type (ext2, ext3)
23   -h, --help\t\tprint help text
24   -r, --rootdev\t\troot device in target system
25   -t, --target\t\ttarget image format (qemu)\n"
26     fi
27 }
28
29 while true ; do
30     case "$1" in
31         -f|--fstype)
32             FSTYPE="$2"
33             shift 2
34             ;;
35         -h|--help)
36             usage -h
37             exit 0
38             ;;
39         -r|--rootdev)
40             ROOTDEV="$2"
41             shift 2
42             ;;
43         -t|--target) 
44             TARGET="$2"
45             shift 2
46             ;;
47         --)
48             shift
49             break
50             ;;
51         *)
52             echo "Internal error!"
53             exit 1
54             ;;
55     esac
56 done
57
58 ROOT_DIR="$1"
59 if [ -z "$ROOT_DIR" ] ; then
60     echo "ERROR: no ROOTDIR defined"
61     usage
62     exit 1
63 fi
64
65 # Read in library functions
66 if [ "$(type -t prepare_image)" != function ]
67 then
68         if ! [ -r $SCRIPT_DIR/basefns ]
69         then
70                 echo "Cannot read library $SCRIPT_DIR/basefns" >&2
71                 exit 1
72         fi
73         source $SCRIPT_DIR/basefns
74 fi
75
76 # Load target configuration in exactly that order:
77 # - $SCRIPT_DIR, e.g. /usr/lib/base-installer, systemwide
78 # - $HOME/.base-installer, per user
79 # - $(pwd), per project
80 for file in {$SCRIPT_DIR,$HOME/.base-installer/,$(pwd)}/$TARGET.config; do
81     if [ -s "$file" ] ; then
82         echo "Loading target configuration $file"
83         source "$file"
84         target_init
85     fi
86 done
87
88 # Cleanup from previous run
89 if [ -e $ROOT_DIR ]; then
90     tmpdir=$(mktemp -d ${ROOT_DIR%/*}/${0##*/}.XXXXXX)
91     if [ -n "$tmpdir" ]; then
92         echo "Cleaning up from previous run (background)"
93         mv $ROOT_DIR $tmpdir
94         rm -rf $tmpdir &
95     else
96         echo "Cleaning up from previous run"
97         rm -rf $ROOT_DIR
98     fi
99 fi
100
101 prepare_image
102 trap finalize_image EXIT
103
104 # Install the basesystem
105 REPOS="--repo Base:install/standard --repo Base:Kernel/standard --repo Base:build/standard"
106 PACKAGES="aaa_base kernel-default"
107 sudo base-bootstrap -c /var/cache/base-installer $ROOT_DIR $REPOS $PACKAGES \
108     || exit 1
109
110 customize_image
111
112 if [ -x $ROOT_DIR/sbin/depmod -a -x $ROOT_DIR/sbin/mkinitrd ] ; then
113     chroot $ROOT_DIR run_mkinitrd
114 else
115     run_mkinitrd $ROOT_DIR
116 fi
117
118 finalize_image
119 trap "" EXIT