source: jhalfs@ d505128

ablfs-more legacy trunk
Last change on this file since d505128 was d505128, checked in by Pierre Labastie <pierre@…>, 6 years ago

Do not exit on SIGCHLD:

With bash 5.0, a SIGCHLD signal is sent whenever a subshell exits. The signal
numbers passed to the trap instruction in jhalfs contain SIGCHLD, and this
new behavior causes jhalfs to exit. Fix this by using names instead of numbers
for the trap, and (of course) not trapping SIGCHLD.

  • Property mode set to 100755
File size: 14.5 KB
Line 
1#!/bin/bash
2# $Id$
3set -e
4# Pass trap handlers to functions
5set -E
6
7# VT100 colors
8declare -r BLACK=$'\e[1;30m'
9declare -r DK_GRAY=$'\e[0;30m'
10
11declare -r RED=$'\e[31m'
12declare -r GREEN=$'\e[32m'
13declare -r YELLOW=$'\e[33m'
14declare -r BLUE=$'\e[34m'
15declare -r MAGENTA=$'\e[35m'
16declare -r CYAN=$'\e[36m'
17declare -r WHITE=$'\e[37m'
18
19declare -r OFF=$'\e[0m'
20declare -r BOLD=$'\e[1m'
21declare -r REVERSE=$'\e[7m'
22declare -r HIDDEN=$'\e[8m'
23
24declare -r tab_=$'\t'
25declare -r nl_=$'\n'
26
27declare -r DD_BORDER="${BOLD}==============================================================================${OFF}"
28declare -r SD_BORDER="${BOLD}------------------------------------------------------------------------------${OFF}"
29declare -r STAR_BORDER="${BOLD}******************************************************************************${OFF}"
30
31# bold yellow > < pair
32declare -r R_arrow=$'\e[1;33m>\e[0m'
33declare -r L_arrow=$'\e[1;33m<\e[0m'
34
35
36#>>>>>>>>>>>>>>>ERROR TRAPPING >>>>>>>>>>>>>>>>>>>>
37#-----------------------#
38simple_error() { # Basic error trap.... JUST DIE
39#-----------------------#
40 # If +e then disable text output
41 if [[ "$-" =~ e ]]; then
42 LASTLINE="$1"
43 LASTERR="$2"
44 LASTFUNC="$3"
45 LASTSOURCE="$4"
46# echo -e "\n${RED}ERROR:${GREEN} basic error trapped!${OFF}\n" >&2
47 echo -e "\n${RED}ERROR:${GREEN} Error $LASTERR at $LASTSOURCE line ${LASTLINE}!${OFF}\n" >&2
48 fi
49 exit $LASTERR
50}
51
52see_ya() {
53 echo -e "\n${L_arrow}${BOLD}jhalfs${R_arrow} exit${OFF}\n"
54}
55##### Simple error TRAPS
56# ctrl-c SIGINT
57# ctrl-y
58# ctrl-z SIGTSTP
59# SIGHUP 1 HANGUP
60# SIGINT 2 INTRERRUPT FROM KEYBOARD Ctrl-C
61# SIGQUIT 3
62# SIGKILL 9 KILL
63# SIGTERM 15 TERMINATION
64# SIGSTOP 17,18,23 STOP THE PROCESS
65#####
66set -e
67trap see_ya 0
68trap 'simple_error "${LINENO}" "$?" "${FUNCNAME}" "${BASH_SOURCE}"' ERR
69trap 'echo -e "\n\n${RED}INTERRUPT${OFF} trapped\n" && exit 2' \
70 HUP INT QUIT TERM # STOP stops tterminal output and does not seem to
71 # execute the handler
72#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
73
74version="
75${BOLD} \"jhalfs\"${OFF} builder tool (development) \$Rev$
76 \$Date$
77
78 Written by George Boudreau, Manuel Canales Esparcia, Pierre Labastie,
79 plus several contributions.
80
81 Based on an idea from Jeremy Huntwork
82
83 This set of files are published under the
84 ${BOLD}Gnu General Public License, Version 2.${OFF}
85 See the ${BOLD}LICENCE${OFF} file in this directory.
86"
87
88case $1 in
89 -v ) echo "$version" && exit ;;
90 run ) : ;;
91 * )
92 echo "${nl_}${tab_}${BOLD}${RED}This script cannot be called directly: EXITING ${OFF}${nl_}"
93 exit 1
94 ;;
95esac
96
97# If the user has not saved his configuration file, let's ask
98# if he or she really wants to run this stuff
99if [ $(ls -l --time-style='+%Y%m%d%H%M%S' configuration.old | cut -d' ' -f 6) \
100 -ge $(ls -l --time-style='+%Y%m%d%H%M%S' configuration | cut -d' ' -f 6) ]
101 then echo -n "Do you want to run jhalfs? yes/no (yes): "
102 read ANSWER
103 if [ x${ANSWER:0:1} = "xn" -o x${ANSWER:0:1} = "xN" ] ; then
104 echo "${nl_}Exiting gracefully.${nl_}"
105 exit
106 fi
107fi
108
109# Change this to 0 to suppress almost all messages
110VERBOSITY=1
111
112[[ $VERBOSITY > 0 ]] && echo -n "Loading config params from <configuration>..."
113source configuration
114[[ $? > 0 ]] && echo "file: configuration did not load.." && exit 1
115[[ $VERBOSITY > 0 ]] && echo "OK"
116
117# These are boolean vars generated from Config.in.
118# ISSUE: If a boolean parameter is not set to y(es) there
119# is no variable defined by the menu app. This can
120# cause a headache if you are not aware.
121# The following variables MUST exist. If they don't, the
122# default value is n(o).
123RUNMAKE=${RUNMAKE:-n}
124GETPKG=${GETPKG:-n}
125COMPARE=${COMPARE:-n}
126RUN_FARCE=${RUN_FARCE:-n}
127RUN_ICA=${RUN_ICA:-n}
128PKGMNGT=${PKGMNGT:-n}
129WRAP_INSTALL=${WRAP_INSTALL:-n}
130BOMB_TEST=${BOMB_TEST:-n}
131STRIP=${STRIP:=n}
132REPORT=${REPORT:=n}
133VIMLANG=${VIMLANG:-n}
134DEL_LA_FILES=${DEL_LA_FILES:-n}
135FULL_LOCALE=${FULL_LOCALE:-n}
136GRSECURITY_HOST=${GRSECURITY_HOST:-n}
137CUSTOM_TOOLS=${CUSTOM_TOOLS:-n}
138REBUILD_MAKEFILE=${REBUILD_MAKEFILE:-n}
139INSTALL_LOG=${INSTALL_LOG:-n}
140CLEAN=${CLEAN:=n}
141SET_SSP=${SET_SSP:=n}
142SET_ASLR=${SET_ASLR:=n}
143SET_PAX=${SET_PAX:=n}
144SET_HARDENED_TMP=${SET_HARDENED_TMP:=n}
145SET_WARNINGS=${SET_WARNINGS:=n}
146SET_MISC=${SET_MISC:=n}
147SET_BLOWFISH=${SET_BLOWFISH:=n}
148UNICODE=${UNICODE:=n}
149REALSBU=${REALSBU:=n}
150
151if [[ "${NO_PROGRESS_BAR}" = "y" ]] ; then
152 NO_PROGRESS="#"
153fi
154
155
156# Sanity check on the location of $BUILDDIR / $JHALFSDIR
157CWD=$(cd `dirname $0` && pwd)
158if [[ $JHALFSDIR == $CWD ]]; then
159 echo " The jhalfs source directory conflicts with the jhalfs build directory."
160 echo " Please move the source directory or change the build directory."
161 exit 2
162fi
163
164# Book sources envars
165BRANCH_ID=${BRANCH_ID:=development}
166
167case $BRANCH_ID in
168 development )
169 case $PROGNAME in
170 clfs* ) TREE="" ;;
171 * ) TREE=trunk/BOOK ;;
172 esac
173 LFSVRS=development
174 ;;
175 *EDIT* ) echo " You forgot to set the branch or stable book version."
176 echo " Please rerun make and fix the configuration."
177 exit 2 ;;
178 branch-* )
179 case $PROGNAME in
180 lfs )
181 LFSVRS=${BRANCH_ID}
182 TREE=branches/${BRANCH_ID#branch-}
183 if [ ${BRANCH_ID:7:1} = 6 ]; then
184 TREE=${TREE}/BOOK
185 fi
186 ;;
187 clfs* )
188 LFSVRS=${BRANCH_ID}
189 TREE=${BRANCH_ID#branch-}
190 ;;
191 esac
192 ;;
193 * )
194 case $PROGNAME in
195 lfs )
196 LFSVRS=${BRANCH_ID}
197 TREE=tags/${BRANCH_ID}
198 if (( ${BRANCH_ID:0:1} < 7 )) ; then
199 TREE=${TREE}/BOOK
200 fi
201 ;;
202 hlfs )
203 LFSVRS=${BRANCH_ID}
204 TREE=tags/${BRANCH_ID}/BOOK
205 ;;
206 clfs* )
207 LFSVRS=${BRANCH_ID}
208 TREE=clfs-${BRANCH_ID}
209 ;;
210 * )
211 esac
212 ;;
213esac
214
215# Set the document location...
216BOOK=${BOOK:=$JHALFSDIR/$PROGNAME-$LFSVRS}
217
218
219#--- Envars not sourced from configuration
220case $PROGNAME in
221 clfs ) declare -r GIT="git://git.clfs.org/cross-lfs" ;;
222 clfs2 ) declare -r GIT="git://git.clfs.org/clfs-sysroot" ;;
223 clfs3 ) declare -r GIT="git://git.clfs.org/clfs-embedded" ;;
224 *) declare -r SVN="svn://svn.linuxfromscratch.org" ;;
225esac
226declare -r LOG=000-masterscript.log
227 # Needed for fetching BLFS book sources when building CLFS
228declare -r SVN_2="svn://svn.linuxfromscratch.org"
229
230# Set true internal variables
231COMMON_DIR="common"
232PACKAGE_DIR=$(echo $PROGNAME | tr '[a-z]' '[A-Z]')
233MODULE=$PACKAGE_DIR/master.sh
234PKGMNGTDIR="pkgmngt"
235# The name packageManager.xml is hardcoded in *.xsl, so no variable.
236
237[[ $VERBOSITY > 0 ]] && echo -n "Loading common-functions module..."
238source $COMMON_DIR/common-functions
239[[ $? > 0 ]] && echo " $COMMON_DIR/common-functions did not load.." && exit
240[[ $VERBOSITY > 0 ]] && echo "OK"
241[[ $VERBOSITY > 0 ]] && echo -n "Loading code module <$MODULE>..."
242source $MODULE
243[[ $? > 0 ]] && echo "$MODULE did not load.." && exit 2
244[[ $VERBOSITY > 0 ]] && echo "OK"
245#
246[[ $VERBOSITY > 0 ]] && echo "${SD_BORDER}${nl_}"
247
248
249#*******************************************************************#
250[[ $VERBOSITY > 0 ]] && echo -n "Loading function <func_check_version.sh>..."
251source $COMMON_DIR/libs/func_check_version.sh
252[[ $? > 0 ]] && echo " function module did not load.." && exit 2
253[[ $VERBOSITY > 0 ]] && echo "OK"
254
255[[ $VERBOSITY > 0 ]] && echo -n "Loading function <func_validate_configs.sh>..."
256source $COMMON_DIR/libs/func_validate_configs.sh
257[[ $? > 0 ]] && echo " function module did not load.." && exit 2
258[[ $VERBOSITY > 0 ]] && echo "OK"
259
260[[ $VERBOSITY > 0 ]] && echo -n "Loading function <func_custom_pkgs>..."
261source $COMMON_DIR/libs/func_custom_pkgs
262[[ $? > 0 ]] && echo " function module did not load.." && exit 2
263[[ $VERBOSITY > 0 ]] && echo "OK"
264
265
266[[ $VERBOSITY > 0 ]] && echo "${SD_BORDER}${nl_}"
267
268[[ $VERBOSITY > 0 ]] && echo Checking tools required for jhalfs
269check_alfs_tools
270
271[[ $VERBOSITY > 0 ]] && echo "${SD_BORDER}${nl_}"
272
273# blfs-tool envars
274BLFS_TOOL=${BLFS_TOOL:-n}
275if [[ "${BLFS_TOOL}" = "y" ]] ; then
276 [[ $VERBOSITY > 0 ]] && echo Checking supplementary tools for installing BLFS
277 check_blfs_tools
278 [[ $VERBOSITY > 0 ]] && echo "${SD_BORDER}${nl_}"
279 BLFS_SVN=${BLFS_SVN:-n}
280 BLFS_WORKING_COPY=${BLFS_WORKING_COPY:-n}
281 BLFS_BRANCH=${BLFS_BRANCH:-n}
282 if [[ "${BLFS_SVN}" = "y" ]]; then
283 BLFS_BRANCH_ID=development
284 BLFS_TREE=trunk/BOOK
285 elif [[ "${BLFS_WORKING_COPY}" = "y" ]]; then
286 [[ -d "$BLFS_WC_LOCATION" ]] &&
287 [[ -d "$BLFS_WC_LOCATION/postlfs" ]] || {
288 echo " BLFS tools: This is not a working copy: $BLFS_WC_LOCATION."
289 echo " Please rerun make and fix the configuration."
290 exit 2
291 }
292 BLFS_TREE=$(cd $BLFS_WC_LOCATION; svn info | grep '^URL' | sed 's@.*BLFS/@@')
293 BLFS_BRANCH_ID=$(echo $BLFS_TREE | sed -e 's@trunk/BOOK@development@' \
294 -e 's@branches/@branch-@' \
295 -e 's@tags/@@' \
296 -e 's@/BOOK@@')
297 elif [[ "${BLFS_BRANCH}" = "y" ]] ; then
298 case $BLFS_BRANCH_ID in
299 *EDIT* ) echo " You forgot to set the BLFS branch or stable book version."
300 echo " Please rerun make and fix the configuration."
301 exit 2 ;;
302 branch-6.* ) BLFS_TREE=branches/${BLFS_BRANCH_ID#branch-}/BOOK ;;
303 branch-* ) BLFS_TREE=branches/${BLFS_BRANCH_ID#branch-} ;;
304 6.2* | 7.* | 8.*) BLFS_TREE=tags/${BLFS_BRANCH_ID} ;;
305 * ) BLFS_TREE=tags/${BLFS_BRANCH_ID}/BOOK ;;
306 esac
307 fi
308 [[ $VERBOSITY > 0 ]] && echo -n "Loading blfs tools installation function..."
309 source $COMMON_DIR/libs/func_install_blfs
310 [[ $? > 0 ]] && echo "function module did not load.." && exit 1
311 [[ $VERBOSITY > 0 ]] && echo "OK"
312fi
313
314###################################
315### MAIN ###
316###################################
317
318
319validate_config
320echo "${SD_BORDER}${nl_}"
321echo -n "Are you happy with these settings? yes/no (no): "
322read ANSWER
323if [ x$ANSWER != "xyes" ] ; then
324 echo "${nl_}Rerun make to fix the configuration options.${nl_}"
325 exit
326fi
327echo "${nl_}${SD_BORDER}${nl_}"
328
329# Load additional modules or configuration files based on global settings
330# compare module
331if [[ "$COMPARE" = "y" ]]; then
332 [[ $VERBOSITY > 0 ]] && echo -n "Loading compare module..."
333 source $COMMON_DIR/libs/func_compare.sh
334 [[ $? > 0 ]] && echo "$COMMON_DIR/libs/func_compare.sh did not load.." && exit
335 [[ $VERBOSITY > 0 ]] && echo "OK"
336fi
337#
338# optimize module
339if [[ "$OPTIMIZE" != "0" ]]; then
340 [[ $VERBOSITY > 0 ]] && echo -n "Loading optimization module..."
341 source optimize/optimize_functions
342 [[ $? > 0 ]] && echo " optimize/optimize_functions did not load.." && exit
343 [[ $VERBOSITY > 0 ]] && echo "OK"
344 #
345 # optimize configurations
346 [[ $VERBOSITY > 0 ]] && echo -n "Loading optimization config..."
347 source optimize/opt_config
348 [[ $? > 0 ]] && echo " optimize/opt_config did not load.." && exit
349 [[ $VERBOSITY > 0 ]] && echo "OK"
350 # The number of parallel jobs is taken from configuration now
351 MAKEFLAGS="-j${N_PARALLEL}"
352 # Validate optimize settings, if required
353 validate_opt_settings
354fi
355#
356
357if [[ "$REBUILD_MAKEFILE" = "n" ]] ; then
358
359# If requested, clean the build directory
360 clean_builddir
361
362 if [[ ! -d $JHALFSDIR ]]; then
363 sudo mkdir -p $JHALFSDIR
364 sudo chown $USER:$USER $JHALFSDIR
365 fi
366
367# Create $BUILDDIR/sources even though it could be created by get_sources()
368 if [[ ! -d $BUILDDIR/sources ]]; then
369 sudo mkdir -p $BUILDDIR/sources
370 sudo chmod a+wt $BUILDDIR/sources
371 fi
372
373# Create the log directory
374 if [[ ! -d $LOGDIR ]]; then
375 mkdir $LOGDIR
376 fi
377 >$LOGDIR/$LOG
378
379# Copy common helper files
380 cp $COMMON_DIR/{makefile-functions,progress_bar.sh} $JHALFSDIR/
381
382# Copy needed stylesheets
383 cp $COMMON_DIR/{packages.xsl,chroot.xsl} $JHALFSDIR/
384
385# Fix the XSL book parser
386 case $PROGNAME in
387 clfs* ) sed 's,FAKEDIR,'${BOOK}/BOOK',' ${PACKAGE_DIR}/${XSL} > $JHALFSDIR/${XSL} ;;
388 lfs | hlfs ) sed 's,FAKEDIR,'$BOOK',' $PACKAGE_DIR/$XSL > $JHALFSDIR/${XSL} ;;
389 * ) ;;
390 esac
391 export XSL=$JHALFSDIR/${XSL}
392
393# Copy packageManager.xml, if needed
394 [[ "$PKGMNGT" = "y" ]] && [[ "$PROGNAME" = "lfs" ]] && {
395 cp $PKGMNGTDIR/packageManager.xml $JHALFSDIR/
396 cp $PKGMNGTDIR/packInstall.sh $JHALFSDIR/
397 }
398
399# Copy urls.xsl, if needed
400 [[ "$GETPKG" = "y" ]] && cp $COMMON_DIR/urls.xsl $JHALFSDIR/
401
402# Always create the test-log directory to allow user to "uncomment" test
403# instructions
404 install -d -m 1777 $TESTLOGDIR
405
406# Create the installed-files directory, if needed
407 [[ "$INSTALL_LOG" = "y" ]] && [[ ! -d $FILELOGDIR ]] && install -d -m 1777 $FILELOGDIR
408
409# Prepare report creation, if needed
410 if [[ "$REPORT" = "y" ]]; then
411 cp $COMMON_DIR/create-sbu_du-report.sh $JHALFSDIR/
412 # After making sure that all looks sane, dump the settings to a file
413 # This file will be used to create the REPORT header
414 validate_config > $JHALFSDIR/jhalfs.config
415 fi
416
417# Copy optimize files, if needed
418 [[ "$OPTIMIZE" != "0" ]] && cp optimize/opt_override $JHALFSDIR/
419
420# Copy compare files, if needed
421 if [[ "$COMPARE" = "y" ]]; then
422 mkdir -p $JHALFSDIR/extras
423 cp extras/* $JHALFSDIR/extras
424 fi
425
426# Copy custom tools config files, if requested
427 if [[ "${CUSTOM_TOOLS}" = "y" ]]; then
428 echo "Copying custom tool scripts to $JHALFSDIR"
429 mkdir -p $JHALFSDIR/custom-commands
430 cp -f custom/config/* $JHALFSDIR/custom-commands
431 fi
432
433# Download or updates the book source
434# Note that all customization to $JHALFSDIR have to be done before this.
435# But the LFS book is needed for BLFS tools.
436 get_book
437 extract_commands
438 echo "${SD_BORDER}${nl_}"
439 cd $CWD # the functions above change directory
440
441# Install blfs-tool, if requested.
442 if [[ "${BLFS_TOOL}" = "y" ]] ; then
443 echo Installing BLFS book and tools
444 install_blfs_tools 2>&1 | tee -a $LOGDIR/$LOG
445 [[ ${PIPESTATUS[0]} != 0 ]] && exit 1
446 fi
447
448fi
449
450# When regenerating the Makefile, we need to know also the
451# canonical book version
452if [[ "$REBUILD_MAKEFILE" = "y" ]] ; then
453 case $PROGNAME in
454 clfs* )
455 VERSION=$(xmllint --noent $BOOK/prologue/$ARCH/bookinfo.xml 2>/dev/null | grep subtitle | sed -e 's/^.*ion //' -e 's/<\/.*//') ;;
456 lfs)
457 if [[ "$INITSYS" = "sysv" ]] ; then
458 VERSION=$(grep 'ENTITY version ' $BOOK/general.ent| cut -d\" -f2)
459 else
460 VERSION=$(grep 'ENTITY versiond' $BOOK/general.ent| cut -d\" -f2)
461 fi
462 ;;
463 *)
464 VERSION=$(xmllint --noent $BOOK/prologue/bookinfo.xml 2>/dev/null | grep subtitle | sed -e 's/^.*ion //' -e 's/<\/.*//') ;;
465 esac
466fi
467
468build_Makefile
469
470echo "${SD_BORDER}${nl_}"
471
472# Check for build prerequisites.
473 echo
474 cd $CWD
475 check_prerequisites
476 echo "${SD_BORDER}${nl_}"
477# All is well, run the build (if requested)
478run_make
Note: See TracBrowser for help on using the repository browser.