2 # Trap these signals and kill ourselves if recieved
3 # Force ourselves to die if any of these signals are recieved
4 # most likely our controlling terminal is gone
5 trap "echo SIGTERM signal recieved killing $0 with pid $$;kill -9 $$" SIGTERM
6 trap "echo SIGHUP signal recieved killing $0 with pid $$;kill -9 $$" SIGHUP
7 trap "echo SIGKILL signal recieved killing $0 with pid $$;kill -9 $$" SIGKILL
9 #SIGINT interrupt character (usually Ctrl-C)
10 # * example: high-level sequence of events
11 # * my process (call it "P") is running
13 # * kernel recognizes this and generates SIGINT signal
14 trap "echo SIGINT signal recieved killing $0 with pid $$;kill -9 $$" SIGINT
16 check_genkernel_version(){
17 if [ -x /usr/bin/genkernel ]
19 genkernel_version=$(genkernel --version)
20 genkernel_version_major=${genkernel_version%%.*}
21 genkernel_version_minor_sub=${genkernel_version#${genkernel_version_major}.}
22 genkernel_version_minor=${genkernel_version_minor_sub%%.*}
23 genkernel_version_sub=${genkernel_version##*.}
24 if [ -n "${genkernel_version}" -a "${genkernel_version_major}" -eq '3' -a "${genkernel_version_minor}" -ge '3' ]
26 echo "Genkernel version ${genkernel_version} found ... continuing"
28 echo "ERROR: Your genkernel version is too low in your seed stage. genkernel version 3.3.0"
29 echo "or greater is required."
38 if [ -n "${clst_CCACHE}" ]
40 export clst_myfeatures="${clst_myfeatures} ccache"
41 #if [ "${clst_AUTORESUME}" = "1" -a -e /tmp/.clst_ccache ]
43 # echo "CCACHE Autoresume point found not emerging ccache"
45 emerge --oneshot --nodeps -b -k ccache || exit 1
46 # touch /tmp/.clst_ccache
50 if [ -n "${clst_DISTCC}" ]
52 export clst_myfeatures="${clst_myfeatures} distcc"
53 export DISTCC_HOSTS="${clst_distcc_hosts}"
54 #if [ "${clst_AUTORESUME}" = "1" -a -e /tmp/.clst_distcc ]
56 # echo "DISTCC Autoresume point found not emerging distcc"
58 USE="-gtk -gnome" emerge --oneshot --nodeps -b -k distcc || exit 1
59 #touch /tmp/.clst_distcc
62 echo "${clst_distcc_hosts}" > /etc/distcc/hosts
67 if [ -n "${clst_VERBOSE}" ]
69 clst_myemergeopts="--verbose"
71 clst_myemergeopts="--quiet"
73 if [ -n "${clst_FETCH}" ]
75 export bootstrap_opts="-f"
76 export clst_myemergeopts="${clst_myemergeopts} -f"
77 elif [ -n "${clst_PKGCACHE}" ]
79 export clst_myemergeopts="${clst_myemergeopts} --usepkg --buildpkg --newuse"
80 export bootstrap_opts="-r"
86 # portage needs to be merged manually with USE="build" set to avoid frying
87 # our make.conf. emerge system could merge it otherwise.
88 if [ "${clst_AUTORESUME}" = "1" -a -e /tmp/.clst_portage ]
90 echo "Portage Autoresume point found not emerging portage"
92 USE="build" run_emerge --oneshot --nodeps portage
93 touch /tmp/.clst_portage || exit 1
98 if [ -x /usr/bin/gcc-config ]
100 mythang=$( cd /etc/env.d/gcc; ls ${clst_CHOST}-* | head -n 1 )
101 if [ -z "${mythang}" ]
105 gcc-config ${mythang}; update_env_settings
110 if [ -x /usr/bin/binutils-config ]
112 mythang=$( cd /etc/env.d/binutils; ls ${clst_CHOST}-* | head -n 1 )
113 if [ -z "${mythang}" ]
117 binutils-config ${mythang}; update_env_settings
122 rm -rf /etc/distcc/hosts
125 update_env_settings(){
128 [ -f /tmp/envscript ] && source /tmp/envscript
150 # Sets up the ROOT= parameter
151 # with no options ROOT=/
152 make_destpath ${clst_root_path}
154 export EMERGE_WARNING_DELAY=0
156 export EBEEP_IGNORE=0
157 export EPAUSE_IGNORE=0
158 export CONFIG_PROTECT="-*"
160 if [ -n "${clst_VERBOSE}" ]
162 echo "ROOT=${ROOT} emerge ${clst_myemergeopts} -pt $@" || exit 1
163 emerge ${clst_myemergeopts} -pt $@ || exit 3
164 echo "Press any key within 15 seconds to pause the build..."
168 echo "Press any key to continue..."
173 echo "emerge ${clst_myemergeopts} $@" || exit 1
175 emerge ${clst_myemergeopts} $@ || exit 1
179 # Copy libs of a executable in the chroot
180 function copy_libs() {
181 # Check if it's a dynamix exec
182 ldd ${1} > /dev/null 2>&1 || return
184 for lib in `ldd ${1} | awk '{ print $3 }'`
189 if [ ! -e ${clst_root_path}/${lib} ]
192 [ -e "${clst_root_path}/${lib}" ] && \
193 strip -R .comment -R .note ${clst_root_path}/${lib} \
194 || echo "WARNING : Cannot strip lib ${clst_root_path}/${lib} !"
197 echo "WARNING : Some library was not found for ${lib} !"
202 function copy_symlink() {
204 [ "${STACK}" = "" ] && STACK=16 || STACK=$((${STACK} - 1 ))
206 if [ ${STACK} -le 0 ]
208 echo "WARNING : ${TARGET} : too many levels of symbolic links !"
212 [ ! -e ${clst_root_path}/`dirname ${1}` ] && \
213 mkdir -p ${clst_root_path}/`dirname ${1}`
214 [ ! -e ${clst_root_path}/${1} ] && \
215 cp -vfdp ${1} ${clst_root_path}/${1}
217 if [[ -n $(type -p realpath) ]]; then
218 TARGET=`realpath ${1}`
220 TARGET=`readlink -f ${1}`
224 copy_symlink ${TARGET} ${STACK}
230 function copy_file() {
235 echo "WARNING : File not found : ${f}"
239 [ ! -e ${clst_root_path}/`dirname ${f}` ] && \
240 mkdir -p ${clst_root_path}/`dirname ${f}`
241 [ ! -e ${clst_root_path}/${f} ] && \
242 cp -vfdp ${f} ${clst_root_path}/${f}
243 if [ -x ${f} -a ! -h ${f} ]
246 strip -R .comment -R .note ${clst_root_path}/${f} > /dev/null 2>&1
253 create_handbook_icon() {
254 # This function creates a local icon to the Gentoo Handbook
255 echo "[Desktop Entry]
259 URL=file:///mnt/cdrom/docs/handbook/html/index.html
261 Name=Gentoo Linux Handbook
262 GenericName=Gentoo Linux Handbook
263 Comment=This is a link to the local copy of the Gentoo Linux Handbook.
264 Icon=gedit-icon.png" > /usr/share/applications/gentoo-handbook.desktop