dev replaced with udev for mkfedora package checking
[bootmanager.git] / support-files / buildsupport.sh
1 #!/bin/bash
2
3 # for each file in support-rpms/*.list, extract the rpm and
4 # keep the files from the list
5
6 # list of stage tar ball we need to build, this is basically
7 # the list of stage directories
8 ALL_STAGES='PartDisks BootstrapRPM BootLVM'
9
10 # new files, in each stage dir
11 RPM_EXTRACT_DIR='rpm-extract/'
12 KEEP_FILE_LIST='keep-files'
13
14 # source files, in each stage dir
15 SOURCE_RPM_DIR='source-rpms/'
16 EXTRA_FILES='lib-paths'
17 CUSTOM_SCRIPT='custom.sh'
18
19 # destination for upload command
20 DEST_USER='root'
21 DEST_SERVER='yankee.cs.princeton.edu'
22 DEST_PATH='/export0/echo/alpina/'
23
24
25 build()
26 {
27     BUILD_STAGE=$1
28
29     for STAGE_DIR in $BUILD_STAGE; do
30
31         echo "Building $STAGE_DIR"
32         cd $STAGE_DIR
33
34         STAGE_DEST_FILE="alpina-$STAGE_DIR.tar.gz"
35
36         for file in `ls $SOURCE_RPM_DIR/*.list`; do
37             RPM_NAME="`basename $file list`rpm"
38             RPM_FILE="$SOURCE_RPM_DIR/$RPM_NAME"
39             
40             echo
41             echo "Extracting $RPM_NAME:"
42             extract $RPM_FILE $RPM_EXTRACT_DIR
43             
44             echo "Files to be kept from $RPM_NAME:"
45             for line in `cat $file`; do
46                 echo "./$RPM_EXTRACT_DIR/$line"
47                 echo "./$line" >> $KEEP_FILE_LIST
48             done
49    
50         done
51
52         if [[ -f $CUSTOM_SCRIPT ]]; then
53             echo "Running stage specific script"
54             ./$CUSTOM_SCRIPT
55
56             if [[ "$?" -ne 0 ]]; then
57                 echo "Custom stage script failed, exiting."
58                 exit 1
59             fi
60         fi
61    
62         echo "Compressing files:"
63         cd $RPM_EXTRACT_DIR
64         tar --files-from=../$KEEP_FILE_LIST --exclude=CVS -cvzf ../../$STAGE_DEST_FILE
65         cd ..
66
67         echo "Completed building $STAGE_DIR"
68
69         cd ..
70
71     done
72 }
73
74 upload()
75 {
76     UPLOAD_STAGE=$1
77
78     STAGE_FILE_LIST=''
79     for STAGE_DIR in $UPLOAD_STAGE; do
80         STAGE_FILE_LIST="$STAGE_FILE_LIST alpina-$STAGE_DIR.tar.gz"
81     done
82
83     scp $STAGE_FILE_LIST $DEST_USER@$DEST_SERVER:$DEST_PATH
84 }
85
86 clean()
87 {
88     CLEAN_STAGE=$1
89
90     for STAGE_DIR in $CLEAN_STAGE; do
91         rm -rf $STAGE_DIR/$RPM_EXTRACT_DIR
92         rm -f $STAGE_DIR/$KEEP_FILE_LIST
93
94         STAGE_DEST_FILE="alpina-$STAGE_DIR.tar.gz"
95         rm -f $STAGE_DEST_FILE
96
97         echo "Cleaned $STAGE_DIR"
98     done
99 }
100
101 extract()
102 {
103     RPM=$1
104     DEST=$2
105
106     mkdir -p $DEST
107     rpm2cpio $RPM > $DEST/out.cpio
108     (cd $DEST && cpio -ivd < out.cpio && rm out.cpio)
109 }
110
111 usage()
112 {
113     echo "Usage buildsupport.sh (build|upload|clean)";
114 }
115
116 # find out what do do
117 COMMAND=$1
118 STAGE=$2
119
120
121 if [[ -z "$STAGE" ]]; then
122     # if the stage is blank, build all
123     STAGE=$ALL_STAGES
124 else
125     # make sure the stage exists
126     if [[ ! -d "$STAGE" ]]; then
127         usage
128         exit 1
129     fi
130 fi
131
132 case "$COMMAND" in
133     build)   build "$STAGE";;
134     upload)  upload "$STAGE";;
135     clean)   clean "$STAGE";;
136     *)       usage; exit 1;;
137 esac