source: jhalfs@ a659e46

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

Get virtual kernel filesystem commands from the book, and really add
/run/systemd/resolve/resolv.conf after creating the kernel FS in chapter 6

  • 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}
149LOCAL=${LOCAL:=n}
150REALSBU=${REALSBU:=n}
151
152if [[ "${NO_PROGRESS_BAR}" = "y" ]] ; then
153 NO_PROGRESS="#"
154fi
155
156
157# Sanity check on the location of $BUILDDIR / $JHALFSDIR
158CWD=$(cd `dirname $0` && pwd)
159if [[ $JHALFSDIR == $CWD ]]; then
160 echo " The jhalfs source directory conflicts with the jhalfs build directory."
161 echo " Please move the source directory or change the build directory."
162 exit 2
163fi
164
165# Book sources envars
166BRANCH_ID=${BRANCH_ID:=development}
167
168case $BRANCH_ID in
169 development )
170 case $PROGNAME in
171 clfs* ) TREE="" ;;
172 * ) TREE=trunk/BOOK ;;
173 esac
174 LFSVRS=development
175 ;;
176 *EDIT* ) echo " You forgot to set the branch or stable book version."
177 echo " Please rerun make and fix the configuration."
178 exit 2 ;;
179 branch-* )
180 case $PROGNAME in
181 lfs )
182 LFSVRS=${BRANCH_ID}
183 TREE=branches/${BRANCH_ID#branch-}
184 if [ ${BRANCH_ID:7:1} = 6 ]; then
185 TREE=${TREE}/BOOK
186 fi
187 ;;
188 clfs* )
189 LFSVRS=${BRANCH_ID}
190 TREE=${BRANCH_ID#branch-}
191 ;;
192 esac
193 ;;
194 * )
195 case $PROGNAME in
196 lfs )
197 LFSVRS=${BRANCH_ID}
198 TREE=tags/${BRANCH_ID}
199 if (( ${BRANCH_ID:0:1} < 7 )) ; then
200 TREE=${TREE}/BOOK
201 fi
202 ;;
203 hlfs )
204 LFSVRS=${BRANCH_ID}
205 TREE=tags/${BRANCH_ID}/BOOK
206 ;;
207 clfs* )
208 LFSVRS=${BRANCH_ID}
209 TREE=clfs-${BRANCH_ID}
210 ;;
211 * )
212 esac
213 ;;
214esac
215
216# Set the document location...
217BOOK=${BOOK:=$JHALFSDIR/$PROGNAME-$LFSVRS}
218
219
220#--- Envars not sourced from configuration
221case $PROGNAME in
222 clfs ) declare -r GIT="git://git.clfs.org/cross-lfs" ;;
223 clfs2 ) declare -r GIT="git://git.clfs.org/clfs-sysroot" ;;
224 clfs3 ) declare -r GIT="git://git.clfs.org/clfs-embedded" ;;
225 *) declare -r SVN="svn://svn.linuxfromscratch.org" ;;
226esac
227declare -r LOG=000-masterscript.log
228 # Needed for fetching BLFS book sources when building CLFS
229declare -r SVN_2="svn://svn.linuxfromscratch.org"
230
231# Set true internal variables
232COMMON_DIR="common"
233PACKAGE_DIR=$(echo $PROGNAME | tr '[a-z]' '[A-Z]')
234MODULE=$PACKAGE_DIR/master.sh
235PKGMNGTDIR="pkgmngt"
236# The name packageManager.xml is hardcoded in *.xsl, so no variable.
237
238[[ $VERBOSITY > 0 ]] && echo -n "Loading common-functions module..."
239source $COMMON_DIR/common-functions
240[[ $? > 0 ]] && echo " $COMMON_DIR/common-functions did not load.." && exit
241[[ $VERBOSITY > 0 ]] && echo "OK"
242[[ $VERBOSITY > 0 ]] && echo -n "Loading code module <$MODULE>..."
243source $MODULE
244[[ $? > 0 ]] && echo "$MODULE did not load.." && exit 2
245[[ $VERBOSITY > 0 ]] && echo "OK"
246#
247[[ $VERBOSITY > 0 ]] && echo "${SD_BORDER}${nl_}"
248
249
250#*******************************************************************#
251[[ $VERBOSITY > 0 ]] && echo -n "Loading function <func_check_version.sh>..."
252source $COMMON_DIR/libs/func_check_version.sh
253[[ $? > 0 ]] && echo " function module did not load.." && exit 2
254[[ $VERBOSITY > 0 ]] && echo "OK"
255
256[[ $VERBOSITY > 0 ]] && echo -n "Loading function <func_validate_configs.sh>..."
257source $COMMON_DIR/libs/func_validate_configs.sh
258[[ $? > 0 ]] && echo " function module did not load.." && exit 2
259[[ $VERBOSITY > 0 ]] && echo "OK"
260
261[[ $VERBOSITY > 0 ]] && echo -n "Loading function <func_custom_pkgs>..."
262source $COMMON_DIR/libs/func_custom_pkgs
263[[ $? > 0 ]] && echo " function module did not load.." && exit 2
264[[ $VERBOSITY > 0 ]] && echo "OK"
265
266
267[[ $VERBOSITY > 0 ]] && echo "${SD_BORDER}${nl_}"
268
269[[ $VERBOSITY > 0 ]] && echo Checking tools required for jhalfs
270check_alfs_tools
271
272[[ $VERBOSITY > 0 ]] && echo "${SD_BORDER}${nl_}"
273
274# blfs-tool envars
275BLFS_TOOL=${BLFS_TOOL:-n}
276if [[ "${BLFS_TOOL}" = "y" ]] ; then
277 [[ $VERBOSITY > 0 ]] && echo Checking supplementary tools for installing BLFS
278 check_blfs_tools
279 [[ $VERBOSITY > 0 ]] && echo "${SD_BORDER}${nl_}"
280 BLFS_SVN=${BLFS_SVN:-n}
281 BLFS_WORKING_COPY=${BLFS_WORKING_COPY:-n}
282 BLFS_BRANCH=${BLFS_BRANCH:-n}
283 if [[ "${BLFS_SVN}" = "y" ]]; then
284 BLFS_BRANCH_ID=development
285 BLFS_TREE=trunk/BOOK
286 elif [[ "${BLFS_WORKING_COPY}" = "y" ]]; then
287 [[ -d "$BLFS_WC_LOCATION" ]] &&
288 [[ -d "$BLFS_WC_LOCATION/postlfs" ]] || {
289 echo " BLFS tools: This is not a working copy: $BLFS_WC_LOCATION."
290 echo " Please rerun make and fix the configuration."
291 exit 2
292 }
293 BLFS_TREE=$(cd $BLFS_WC_LOCATION; svn info | grep '^URL' | sed 's@.*BLFS/@@')
294 BLFS_BRANCH_ID=$(echo $BLFS_TREE | sed -e 's@trunk/BOOK@development@' \
295 -e 's@branches/@branch-@' \
296 -e 's@tags/@@' \
297 -e 's@/BOOK@@')
298 elif [[ "${BLFS_BRANCH}" = "y" ]] ; then
299 case $BLFS_BRANCH_ID in
300 *EDIT* ) echo " You forgot to set the BLFS branch or stable book version."
301 echo " Please rerun make and fix the configuration."
302 exit 2 ;;
303 branch-6.* ) BLFS_TREE=branches/${BLFS_BRANCH_ID#branch-}/BOOK ;;
304 branch-* ) BLFS_TREE=branches/${BLFS_BRANCH_ID#branch-} ;;
305 6.2* | 7.* | 8.*) BLFS_TREE=tags/${BLFS_BRANCH_ID} ;;
306 * ) BLFS_TREE=tags/${BLFS_BRANCH_ID}/BOOK ;;
307 esac
308 fi
309 [[ $VERBOSITY > 0 ]] && echo -n "Loading blfs tools installation function..."
310 source $COMMON_DIR/libs/func_install_blfs
311 [[ $? > 0 ]] && echo "function module did not load.." && exit 1
312 [[ $VERBOSITY > 0 ]] && echo "OK"
313fi
314
315###################################
316### MAIN ###
317###################################
318
319
320validate_config
321echo "${SD_BORDER}${nl_}"
322echo -n "Are you happy with these settings? yes/no (no): "
323read ANSWER
324if [ x$ANSWER != "xyes" ] ; then
325 echo "${nl_}Rerun make to fix the configuration options.${nl_}"
326 exit
327fi
328echo "${nl_}${SD_BORDER}${nl_}"
329
330# Load additional modules or configuration files based on global settings
331# compare module
332if [[ "$COMPARE" = "y" ]]; then
333 [[ $VERBOSITY > 0 ]] && echo -n "Loading compare module..."
334 source $COMMON_DIR/libs/func_compare.sh
335 [[ $? > 0 ]] && echo "$COMMON_DIR/libs/func_compare.sh did not load.." && exit
336 [[ $VERBOSITY > 0 ]] && echo "OK"
337fi
338#
339# optimize module
340if [[ "$OPTIMIZE" != "0" ]]; then
341 [[ $VERBOSITY > 0 ]] && echo -n "Loading optimization module..."
342 source optimize/optimize_functions
343 [[ $? > 0 ]] && echo " optimize/optimize_functions did not load.." && exit
344 [[ $VERBOSITY > 0 ]] && echo "OK"
345 #
346 # optimize configurations
347 [[ $VERBOSITY > 0 ]] && echo -n "Loading optimization config..."
348 source optimize/opt_config
349 [[ $? > 0 ]] && echo " optimize/opt_config did not load.." && exit
350 [[ $VERBOSITY > 0 ]] && echo "OK"
351 # The number of parallel jobs is taken from configuration now
352 MAKEFLAGS="-j${N_PARALLEL}"
353 # Validate optimize settings, if required
354 validate_opt_settings
355fi
356#
357
358if [[ "$REBUILD_MAKEFILE" = "n" ]] ; then
359
360# If requested, clean the build directory
361 clean_builddir
362
363 if [[ ! -d $JHALFSDIR ]]; then
364 sudo mkdir -p $JHALFSDIR
365 sudo chown $USER:$USER $JHALFSDIR
366 fi
367
368# Create $BUILDDIR/sources even though it could be created by get_sources()
369 if [[ ! -d $BUILDDIR/sources ]]; then
370 sudo mkdir -p $BUILDDIR/sources
371 sudo chmod a+wt $BUILDDIR/sources
372 fi
373
374# Create the log directory
375 if [[ ! -d $LOGDIR ]]; then
376 mkdir $LOGDIR
377 fi
378 >$LOGDIR/$LOG
379
380# Copy common helper files
381 cp $COMMON_DIR/{makefile-functions,progress_bar.sh} $JHALFSDIR/
382
383# Copy needed stylesheets
384 cp $COMMON_DIR/{packages.xsl,chroot.xsl,kernfs.xsl} $JHALFSDIR/
385
386# Fix the XSL book parser
387 case $PROGNAME in
388 clfs* ) sed 's,FAKEDIR,'${BOOK}/BOOK',' ${PACKAGE_DIR}/${XSL} > $JHALFSDIR/${XSL} ;;
389 lfs | hlfs ) sed 's,FAKEDIR,'$BOOK',' $PACKAGE_DIR/$XSL > $JHALFSDIR/${XSL} ;;
390 * ) ;;
391 esac
392 export XSL=$JHALFSDIR/${XSL}
393
394# Copy packageManager.xml, if needed
395 [[ "$PKGMNGT" = "y" ]] && [[ "$PROGNAME" = "lfs" ]] && {
396 cp $PKGMNGTDIR/packageManager.xml $JHALFSDIR/
397 cp $PKGMNGTDIR/packInstall.sh $JHALFSDIR/
398 }
399
400# Copy urls.xsl, if needed
401 [[ "$GETPKG" = "y" ]] && cp $COMMON_DIR/urls.xsl $JHALFSDIR/
402
403# Always create the test-log directory to allow user to "uncomment" test
404# instructions
405 install -d -m 1777 $TESTLOGDIR
406
407# Create the installed-files directory, if needed
408 [[ "$INSTALL_LOG" = "y" ]] && [[ ! -d $FILELOGDIR ]] && install -d -m 1777 $FILELOGDIR
409
410# Prepare report creation, if needed
411 if [[ "$REPORT" = "y" ]]; then
412 cp $COMMON_DIR/create-sbu_du-report.sh $JHALFSDIR/
413 # After making sure that all looks sane, dump the settings to a file
414 # This file will be used to create the REPORT header
415 validate_config > $JHALFSDIR/jhalfs.config
416 fi
417
418# Copy optimize files, if needed
419 [[ "$OPTIMIZE" != "0" ]] && cp optimize/opt_override $JHALFSDIR/
420
421# Copy compare files, if needed
422 if [[ "$COMPARE" = "y" ]]; then
423 mkdir -p $JHALFSDIR/extras
424 cp extras/* $JHALFSDIR/extras
425 fi
426
427# Copy custom tools config files, if requested
428 if [[ "${CUSTOM_TOOLS}" = "y" ]]; then
429 echo "Copying custom tool scripts to $JHALFSDIR"
430 mkdir -p $JHALFSDIR/custom-commands
431 cp -f custom/config/* $JHALFSDIR/custom-commands
432 fi
433
434# Download or updates the book source
435# Note that all customization to $JHALFSDIR have to be done before this.
436# But the LFS book is needed for BLFS tools.
437 get_book
438 extract_commands
439 echo "${SD_BORDER}${nl_}"
440 cd $CWD # the functions above change directory
441
442# Install blfs-tool, if requested.
443 if [[ "${BLFS_TOOL}" = "y" ]] ; then
444 echo Installing BLFS book and tools
445 install_blfs_tools 2>&1 | tee -a $LOGDIR/$LOG
446 [[ ${PIPESTATUS[0]} != 0 ]] && exit 1
447 fi
448
449fi
450
451# When regenerating the Makefile, we need to know also the
452# canonical book version
453if [[ "$REBUILD_MAKEFILE" = "y" ]] ; then
454 case $PROGNAME in
455 clfs* )
456 VERSION=$(xmllint --noent $BOOK/prologue/$ARCH/bookinfo.xml 2>/dev/null | grep subtitle | sed -e 's/^.*ion //' -e 's/<\/.*//') ;;
457 lfs)
458 if [[ "$INITSYS" = "sysv" ]] ; then
459 VERSION=$(grep 'ENTITY version ' $BOOK/general.ent| cut -d\" -f2)
460 else
461 VERSION=$(grep 'ENTITY versiond' $BOOK/general.ent| cut -d\" -f2)
462 fi
463 ;;
464 *)
465 VERSION=$(xmllint --noent $BOOK/prologue/bookinfo.xml 2>/dev/null | grep subtitle | sed -e 's/^.*ion //' -e 's/<\/.*//') ;;
466 esac
467fi
468
469build_Makefile
470
471echo "${SD_BORDER}${nl_}"
472
473# Check for build prerequisites.
474 echo
475 cd $CWD
476 check_prerequisites
477 echo "${SD_BORDER}${nl_}"
478# All is well, run the build (if requested)
479run_make
Note: See TracBrowser for help on using the repository browser.