Annotation of /trunk/mage-buildroot/mage-buildroot.sh
Parent Directory | Revision Log
Revision 720 -
(hide annotations)
(download)
(as text)
Wed Apr 23 16:07:00 2008 UTC (16 years, 6 months ago) by niro
File MIME type: application/x-sh
File size: 6542 byte(s)
Wed Apr 23 16:07:00 2008 UTC (16 years, 6 months 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 | * |