Magellan Linux

Annotation of /trunk/mage-buildroot/mage-buildroot.sh

Parent Directory Parent Directory | Revision Log Revision Log


Revision 720 - (hide annotations) (download) (as text)
Wed Apr 23 16:07:00 2008 UTC (16 years ago) by niro
File MIME type: application/x-sh
File size: 6542 byte(s)
-several fixups

1 niro 309 #!/bin/bash
2 niro 720 # $Header: /home/cvsd/magellan-cvs/magellan-src/mage-buildroot/mage-buildroot.sh,v 1.4 2008-04-23 16:07:00 niro Exp $
3 niro 309 #
4     # mage buildroot
5 niro 322 # creates a buildroot to compile programms
6 niro 309 # may get later into mage
7     #
8 niro 322 # Niels Rogalla <niro@magellan-linux.de>
9     #
10 niro 309
11     # default die function
12     die()
13     {
14 niro 720 echo -e ${COLRED}"Exited ${BASH_SOURCE} at line no ${BASH_LINENO}."${COLDEFAULT}
15 niro 309 echo -e ${COLRED}"$@"${COLDEFAULT}
16     exit 1
17     }
18    
19     installrc()
20     {
21     local var="$1"
22    
23     # sanity checks
24     [ -z "${MROOT}" ] && die "\$MROOT not given."
25     echo "${var}" >> ${MROOT}/.installrc || die "add_initrc() adding \$var"
26     }
27    
28     enter_chroot()
29     {
30     [ ! -d ${MROOT}/proc ] && install -d ${MROOT}/proc
31     [ ! -d ${MROOT}/dev ] && install -d ${MROOT}/dev
32     [ ! -d ${MROOT}/sys ] && install -d ${MROOT}/sys
33    
34     mount -t proc proc ${MROOT}/proc
35 niro 720 mount -t sysfs sysfs ${MROOT}/sys
36 niro 309 mount -o bind /dev ${MROOT}/dev
37    
38 niro 720 if [[ ${SMAGE_USE_CCACHE} = true ]] || [[ -f ${MROOT}/.ccache_enabled ]]
39     then
40     [ ! -d ${MROOT}/root/.ccache ] && install -d ${MROOT}/root/.ccache
41     mount -o bind /root/.ccache ${MROOT}/root/.ccache
42     fi
43    
44     chroot ${MROOT} /usr/bin/env -i \
45     HOME=/root \
46     TERM="${TERM}" \
47     PS1='\u:\w\$ ' \
48 niro 309 PATH=/bin:/usr/bin:/sbin:/usr/sbin \
49 niro 720 /bin/bash /.installrc #|| die "chr00ting"
50 niro 309
51     umount ${MROOT}/dev
52     umount ${MROOT}/proc
53     umount ${MROOT}/sys
54    
55 niro 720 [ -f ${MROOT}/.installrc ] && rm ${MROOT}/.installrc
56 niro 309 }
57    
58     # some sane defaults
59     MROOT="$1"
60     TARGET_PKG="$2"
61 niro 720 MAGERC="/etc/mage.rc"
62     #MAGERC="/home/tjoke/mage.rc-buildroot"
63 niro 309 MAGE_PROFILE="$(basename $(readlink /etc/mage-profile))"
64     TOOLCHAIN=toolchain
65     BASESYSTEM=common-devutils
66    
67 niro 720 [[ $(id -u ) != 0 ]] && die "you must be root"
68    
69     # i need some settings and functions from mage
70     [ -f /etc/rc.d/init.d/functions ] && \
71     source /etc/rc.d/init.d/functions || \
72     die "Your /etc/mage.rc is missing. Aborting."
73    
74     [ -f /etc/mage.rc.global ] && \
75     source /etc/mage.rc.global || \
76     die "/etc/mage.rc.global missing"
77    
78     [ -f ${MAGERC} ] && source ${MAGERC} || \
79     die "Your /etc/mage.rc is missing. Aborting."
80    
81     [ -f ${MLIBDIR}/mage4.functions.sh ] && \
82     source ${MLIBDIR}/mage4.functions.sh || \
83     die "mage functions missing"
84    
85     # sanity checks
86     [[ -z ${MROOT} ]] && die "\$MROOT not given."
87     [[ -z ${TARGET_PKG} ]] && die "\$TARGET_PKG not given."
88    
89 niro 309 # first install a toolchain and some common dev-utils using bootstrap2
90     # only if not already builded
91     if [ ! -f ${MROOT}/.buildroot_build_ok-${TOOLCHAIN}-${BASESYSTEM} ]
92     then
93 niro 720 mage-bootstrap \
94 niro 309 --root "${MROOT}" \
95     --magerc "${MAGERC}" \
96     --profile "${MAGE_PROFILE}" \
97     --toolchain "${TOOLCHAIN}" \
98     --basesystem "${BASESYSTEM}" \
99     || die "bootstrapping toolchain"
100    
101     # mark this as builded
102     touch ${MROOT}/.buildroot_build_ok-${TOOLCHAIN}-${BASESYSTEM} || die "touch ok"
103 niro 720
104     # enable ccache
105     [[ ${SMAGE_USE_CCACHE} = true ]] && touch ${MROOT}/.ccache_enabled
106 niro 309 fi
107    
108     #####################################################
109     # setup a chroot environment #
110     #####################################################
111 niro 720 :> ${MROOT}/.installrc || die
112 niro 309
113     # some needed env-vars and functions
114     installrc 'unset MROOT'
115     installrc 'env-rebuild'
116     installrc 'source /etc/profile'
117 niro 720 installrc 'die() { echo -e ${COLRED}"Exited ${BASH_SOURCE} at line no ${BASH_LINENO}."${COLDEFAULT};echo -e ${COLRED}"$@"${COLDEFAULT}; exit 1; }'
118 niro 309 installrc '[ -f /etc/rc.d/init.d/functions ] && . /etc/rc.d/init.d/functions' # || die "Your /etc/mage.rc is missing. Aborting."'
119     installrc '[ -f /etc/mage.rc.global ] && . /etc/mage.rc.global' # || die "/etc/mage.rc.global missing"'
120     installrc '[ -f /etc/mage.rc ] && . /etc/mage.rc' # || die "Your /etc/mage.rc is missing. Aborting."'
121     installrc '[ -f ${MLIBDIR}/mage4.functions.sh ] && . ${MLIBDIR}/mage4.functions.sh' # || die "mage functions missing"'
122     installrc "export FAKE_MROOT=\"${MROOT}\""
123     installrc "export TARGET_PKG=\"${TARGET_PKG}\""
124    
125     # update mage only if buildroot already exists
126     [ -f ${MROOT}/.buildroot_build_ok-${TOOLCHAIN}-${BASESYSTEM} ] && installrc 'mage update'
127     installrc 'smage2 update'
128    
129     # run part
130     cat >> ${MROOT}/.installrc << "EOF"
131    
132     #####################################################
133     # now calculate the src-dependencies for TARGET_PKG #
134     #####################################################
135    
136     # before anything run mage_setup
137     mage_setup || die "error in mage_setup()"
138    
139     # first of all get the right pkg which going to be installed
140     PCAT="$(pname2pcat ${TARGET_PKG})"
141    
142     # package does not exists
143     [ -z "${PCAT}" ] && die "Package '${TARGET_PKG}' does not exist."
144    
145     # source the highest magefile of this pkg
146     PKGNAME=$(get_value_from_magefile PKGNAME $(get_highest_magefile ${PCAT} ${TARGET_PKG}))
147    
148     # convert PKGNAME to PNAME/PVER/PBUILD
149     # we're working *only* with these three vars from here on
150     PNAME="$(pkgname2pname ${PKGNAME})"
151     PVER="$(pkgname2pver ${PKGNAME})"
152     PBUILD="$(pkgname2pbuild ${PKGNAME})"
153    
154     if is_installed ${PCAT}/${PNAME}-${PVER}-${PBUILD}
155     then
156     echo -en "Package "
157     echo -en "${COLRED}${PCAT}/${PNAME}-${PVER}-${PBUILD}${COLDEFAULT}"
158     echo -e " already installed."
159     exit 3
160     fi
161    
162     # get all dependencies of this package
163 niro 383 echo
164     echo -n "Calculating dependencies ... "
165 niro 309 ALLDEPS="$(${MLIBDIR}/depwalker.sh \
166     --method srcinstall \
167     --pcat ${PCAT} \
168     --pname ${PNAME} \
169     --pver ${PVER} \
170     --pbuild ${PBUILD})"
171 niro 383 echo "done"
172 niro 309
173     # remove TARGET_PKG from list
174     SRC_INSTALL_DEPS="$(get_highest_magefile ${PCAT} ${TARGET_PKG})"
175     INSTALL_DEPS="${ALLDEPS/${SRC_INSTALL_DEPS}/}"
176    
177     echo
178     echo "---- environment -----"
179     echo "MROOT: ${FAKE_MROOT}"
180     echo "PKGDIR: ${PKGDIR}"
181     echo "BUILDDIR: ${BUILDDIR}"
182     echo "BINDIR: ${BINDIR}"
183     echo "----------------------"
184     echo
185     echo "---- dependencies ----"
186 niro 383 echo "SRC_INSTALL_DEPS:"
187     for i in ${SRC_INSTALL_DEPS}
188     do
189     echo " * ${i}"
190     done
191     echo "INSTALL_DEPS:"
192     for i in ${INSTALL_DEPS}
193     do
194     echo " * ${i}"
195     done
196 niro 309 echo "----------------------"
197    
198     #read
199    
200     # now install the packages (no srcinstall, when the user not explcitly want this)
201     fetch_packages ${INSTALL_DEPS} || die "fetching packages"
202     md5sum_packages ${INSTALL_DEPS} || die "md5 sum packages"
203     unpack_packages ${INSTALL_DEPS} || die "unpacking packages"
204     install_packages ${INSTALL_DEPS} || die "installing packages"
205    
206     # whipe out all packages
207     mage clean
208    
209     # now src-install TARGET_PKG
210     install_packages --src-install ${SRC_INSTALL_DEPS} || die "src-installing packages"
211    
212     # done
213 niro 383 [[ ! -d /BUILDED ]] && install -d /BUILDED
214     mv ${PKGDIR}/${PNAME}-${PVER}-${ARCH}-${PBUILD}.mpk /BUILDED || die "pkg move"
215 niro 309 echo -e "Package ${COLGREEN}${PCAT}/${PNAME}-${PVER}-${PBUILD}${COLDEFAULT} successfully builded."
216 niro 383 echo "You will find this in ${FAKE_MROOT}/BUILDED."
217 niro 309 EOF
218    
219     # run this stuff
220     enter_chroot

Properties

Name Value
svn:executable *