3 # Common functions for build scripts used by various packages
4 # incorporated (e.g., build, myplc, myplc-devel, vserver-reference)
6 # Marc E. Fiuczynski <mef@cs.princeton.edu>
7 # Copyright (C) 2007 The Trustees of Princeton University
9 # $Id: build.common 1094 2007-11-16 08:38:42Z thierry $
12 function pl_getDefaultDistro() {
13 # FC4 is currently the default release
17 function pl_getDefaultRelease() {
18 # FC4 is currently the default release
22 function pl_getDistro() {
23 defaultDistro=$(pl_getDefaultDistro)
24 if [ -f "/etc/redhat-release" ] ; then
25 distro=$(awk ' { print $1 } ' /etc/redhat-release)
32 function pl_getRelease() {
33 defaultRelease=$(pl_getDefaultRelease)
34 if [ -f "/etc/redhat-release" ] ; then
35 release=$(awk ' { if ($1=="Fedora" && $2=="Core") print $4 ; if (($1=="Fedora" && $2!="Core")||$1=="CentOS") print $3 } ' /etc/redhat-release)
36 [ $release -lt $defaultRelease ] && release=$defaultRelease
38 release=$defaultRelease
43 # figure out which redhat distro we are using (fedora, centos, redhat)
44 pl_DISTRO=$(pl_getDistro)
46 # select basearch of the host devel environment
47 pl_DISTRO_ARCH=$(uname -i)
49 # let mkfedora select one of its mirrors
52 pl_DISTRO_RELEASE=$(pl_getRelease)
54 # vserver expects something like fc4 or f7
55 # for fedora only as of now
58 if [ "$pl_DISTRO_RELEASE" -le 6 ] ; then
59 pl_DISTRO_NAME=fc$pl_DISTRO_RELEASE
61 pl_DISTRO_NAME=f$pl_DISTRO_RELEASE
64 echo "build.common: WARNING - pl_DISTRO_NAME not set for distro=$pl_DISTRO" ;;
67 # get patch to appropriate yumgroups.xml file
68 # XXX This path should be relative to PLDISTRO, as defined in
70 pl_YUMGROUPSXML="../build/groups/v4_yumgroups.xml"
71 # Thierry: quick & dirty improvement
72 # this is updated by the toplevel build, from the appropriate pldistro-dep file
73 # use another var for now for safety
74 pl_DISTRO_YUMGROUPS="../../../RPMS/yumgroups.xml"
76 function pl_process_fedora_options () {
79 while getopts "l:r:a:h" opt ; do
83 let shiftcount=$shiftcount+2
86 pl_DISTRO_RELEASE=$OPTARG
87 let shiftcount=$shiftcount+2
90 pl_DISTRO_ARCH=$OPTARG
91 let shiftcount=$shiftcount+2
94 echo "Usage: $0 [OPTION]..."
95 echo " -l url distro mirror location (default: $pl_DISTRO_URL)"
96 echo " -r release distro release number (default: $pl_DISTRO_RELEASE)"
97 echo " -a arch distro architecture (default: $pl_DISTRO_ARCH)"
98 echo "where distro can be either fedora, centos, or redhat"
99 echo " -h This message"
107 function pl_makedevs() {
109 # Clean ${vroot}/dev, but only when ${vroot}!=""
110 [ -n $vroot ] && rm -rf $vroot/dev
113 mknod -m 666 $vroot/dev/null c 1 3
114 mknod -m 666 $vroot/dev/zero c 1 5
115 mknod -m 666 $vroot/dev/full c 1 7
116 mknod -m 644 $vroot/dev/random c 1 8
117 mknod -m 644 $vroot/dev/urandom c 1 9
118 mknod -m 666 $vroot/dev/tty c 5 0
119 mknod -m 666 $vroot/dev/ptmx c 5 2
120 # For bash command substitution
121 ln -nsf ../proc/self/fd $vroot/dev/fd
123 # For df and linuxconf
124 touch $vroot/dev/hdv1
127 mkdir -p $vroot/dev/pts
129 # (Might have to remove the following for vserver-reference.)
132 mkdir -p $vroot/dev/shm
135 mkdir -p $vroot/dev/net
136 mknod -m 600 $vroot/dev/net/tun c 10 200
138 # For mkinitrd (in case a kernel is being installed)
139 # As well for loop back mounting within a vserver.
140 for i in $(seq 0 255) ; do
141 mknod -m 640 $vroot/dev/loop$i b 7 $i
145 function pl_mkfedora() {
152 [ -n "$pl_DISTRO_URL" ] && options="$options -l $pl_DISTRO_URL"
153 [ -n "$pl_DISTRO_ARCH" ] && options="$options -a $pl_DISTRO_ARCH"
154 [ -n "$pl_DISTRO_RELEASE" ] && options="$options -r $pl_DISTRO_RELEASE"
155 # echo "mkfedora -v $options $root"
156 eval mkfedora -v $options $root
159 function pl_setup_chroot() {
164 pl_mkfedora $root $options
166 # Disable all services in reference image
167 chroot $root sh -c "/sbin/chkconfig --list | awk '{ print \$1 }' | xargs -i /sbin/chkconfig {} off"
169 # FC2 minilogd starts up during shutdown and makes unmounting
170 # impossible. Just get rid of it.
171 rm -f $root/sbin/minilogd
172 ln -nsf /bin/true $root/sbin/minilogd
174 # This tells the Boot Manager that it is okay to update
175 # /etc/resolv.conf and /etc/hosts whenever the network configuration
176 # changes. Users are free to delete this file.
177 touch $vroot/etc/AUTO_UPDATE_NET_FILES
180 # Move specified directories out of a src tree into a dst tree, and
181 # then for each moved directory create a symlink in src to dst.
182 function pl_move_dirs() {
189 for datadir in "$@" ; do
190 mkdir -p ${data}${datadir}
191 if [ -d ${root}/${datadir} -a ! -h ${root}/${datadir} ] ; then
192 (cd ${root} && find ./${datadir} | cpio -p -d -u ../${data}/)
194 rm -rf ${root}/${datadir}
195 mkdir -p $(dirname ${root}/${datadir})
196 ln -nsf /${store}/${datadir} ${root}/${datadir}
200 # Construct an image file from given some directory
201 # XXX in the future maybe use livecdtools?
202 function pl_make_image() {
207 # Leave about 100 MB free space and allow for about 20% inode overhead
208 bytes=$((($(du -sb $root | cut -f1) + $extraspace) * 120 / 100))
210 blocks=$(($bytes / $bs))
211 dd bs=$bs count=$blocks if=/dev/zero of=$image
212 mkfs.ext3 -b $bs -j -F $image
214 # Temporarily mount it
215 tmp=$(mktemp -d tmp.XXXXXX)
216 mount -o loop $image $tmp
217 trap "umount $tmp; rmdir $tmp" ERR INT
220 (cd $root && tar cpf - .) | (cd $tmp && tar xpf -)
228 # Fix permissions on tmp directories
229 function pl_fixtmp_permissions() {
231 chmod 1777 $root/tmp $root/usr/tmp $root/var/tmp
234 function pl_fixdirs() {
237 for datadir in datadirs ; do
238 if [ -h ${root}/${datadir} ] ; then
239 rm -f ${root}/${datadir}
240 mkdir -p ${root}/${datadir}
245 function pl_getPackages() {
247 packages=$(grep "^package:" $filename | sed -e s,package:,,)
252 # add -p before each package for mkfedora
253 function pl_getPackagesOptions() {
254 pl_getPackages "$@" | awk '{for (i=1;i<=NF;i++) {print "-p " $i}}'
257 function pl_getGroups() {
259 groups=$(grep "^group:" $filename | sed -e s,group:,,)
264 # add -g before each group for mkfedora
265 function pl_getGroupsOptions() {
266 pl_getGroups "$@" | awk '{for (i=1;i<=NF;i++) {print "-g " $i}}'