source: jhalfs@ 9f89fae

ablfs-more trunk
Last change on this file since 9f89fae was 9f89fae, checked in by Pierre Labastie <pierre.labastie@…>, 3 years ago

LFS: Simplify git repo management

Use inly one variable, REPO, containing the LFS git repo url. The
BLFS Makefile hardcodes the LFS and BLFS git repo urls, so no need
to pass them.

  • Property mode set to 100755
File size: 12.7 KB
RevLine 
[4da2512]1#!/bin/bash
2set -e
[bbcdeab]3# Pass trap handlers to functions
4set -E
[4da2512]5
6# VT100 colors
7declare -r RED=$'\e[31m'
8declare -r GREEN=$'\e[32m'
9declare -r YELLOW=$'\e[33m'
10
[0e4ddfa]11# shellcheck disable=SC2034
12declare -r BLUE=$'\e[34m'
[4da2512]13declare -r OFF=$'\e[0m'
14declare -r BOLD=$'\e[1m'
15declare -r tab_=$'\t'
16declare -r nl_=$'\n'
17
[0e4ddfa]18# shellcheck disable=SC2034
[4da2512]19declare -r DD_BORDER="${BOLD}==============================================================================${OFF}"
[0e4ddfa]20# shellcheck disable=SC2034
[4da2512]21declare -r SD_BORDER="${BOLD}------------------------------------------------------------------------------${OFF}"
[0e4ddfa]22# shellcheck disable=SC2034
[4da2512]23declare -r STAR_BORDER="${BOLD}******************************************************************************${OFF}"
24
25# bold yellow > < pair
26declare -r R_arrow=$'\e[1;33m>\e[0m'
27declare -r L_arrow=$'\e[1;33m<\e[0m'
28
29
30#>>>>>>>>>>>>>>>ERROR TRAPPING >>>>>>>>>>>>>>>>>>>>
31#-----------------------#
32simple_error() { # Basic error trap.... JUST DIE
33#-----------------------#
[0e4ddfa]34 LASTLINE="$1"
35 LASTERR="$2"
36 LASTSOURCE="$4"
37 error_message "${GREEN} Error $LASTERR at $LASTSOURCE line ${LASTLINE}!"
[4da2512]38}
39
40see_ya() {
[0e4ddfa]41 printf '\n%b%bjhalfs%b exit%b\n' "$L_arrow" "$BOLD" "$R_arrow" "$OFF"
[4da2512]42}
43##### Simple error TRAPS
44# ctrl-c SIGINT
45# ctrl-y
46# ctrl-z SIGTSTP
47# SIGHUP 1 HANGUP
48# SIGINT 2 INTRERRUPT FROM KEYBOARD Ctrl-C
49# SIGQUIT 3
50# SIGKILL 9 KILL
51# SIGTERM 15 TERMINATION
52# SIGSTOP 17,18,23 STOP THE PROCESS
53#####
54set -e
55trap see_ya 0
[bbcdeab]56trap 'simple_error "${LINENO}" "$?" "${FUNCNAME}" "${BASH_SOURCE}"' ERR
[d505128]57trap 'echo -e "\n\n${RED}INTERRUPT${OFF} trapped\n" && exit 2' \
58 HUP INT QUIT TERM # STOP stops tterminal output and does not seem to
59 # execute the handler
[4da2512]60#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
61
[0e4ddfa]62simple_message() {
63 # Prevents having to check $VERBOSITY everywhere
64 if [ "$VERBOSITY" -ne 0 ] ; then
65 # shellcheck disable=SC2059
66 printf "$*"
67 fi
68}
69
70warning_message() {
71 simple_message "${YELLOW}\\nWARNING:${OFF} $*\\n\\n"
72}
73
74error_message() {
75 # Prints an error message and exits with LASTERR or 1
76 if [ -n "$LASTERR" ] ; then
77 LASTERR=$(printf '%d' "$LASTERR")
78 else
79 LASTERR=1
80 fi
81 # If +e then disable text output
82 if [[ "$-" =~ e ]]; then
83 printf '\n\n%bERROR:%b %s\n' "$RED" "$OFF" "$*" >&2
84 fi
85 exit "$LASTERR"
86}
87
88load_file() {
89 # source files in a consistent way with an optional message
90 file="$1"
91 shift
92 msg="Loading file ${file}..."
93 [ -z "$*" ] || msg="$*..."
94 simple_message "$msg"
95
96 # shellcheck disable=SC1090
97 source "$file" 2>/dev/null || error_message "$file did not load"
98 simple_message "OK\\n"
99}
100
[e5518fd]101git_commit=$(git log -1 --format=format:"%h %ad")
[4da2512]102version="
[e5518fd]103${BOLD} \"jhalfs\"${OFF} builder tool (development) $git_commit
[4da2512]104
[e5518fd]105 Copyright (C) 2005-2021, the jhalfs team:
[f596dde]106 Jeremy Huntwork
107 George Boudreau
108 Manuel Canales Esparcia
109 Thomas Pegg
110 Matthew Burgess
111 Pierre Labastie
[4da2512]112
[f596dde]113 Unless specified, all the files in this directory and its sub-directories
114 are subjected to the ${BOLD}MIT license${OFF}. See the ${BOLD}LICENSE${OFF} file.
[4da2512]115
[f596dde]116 The files in the ${BOLD}menu${OFF} directory are subjected to the ${BOLD}ISC License${OFF}.
117 See ${BOLD}LICENSE.txt${OFF} and ${BOLD}README${OFF} in that directory.
[4da2512]118"
119
[f596dde]120usage="${nl_}${tab_}${BOLD}${RED}This script cannot be called directly${OFF}
121${tab_}Type ${BOLD}make${OFF} to run the tool, or
122${tab_}Type ${BOLD}./jhalfs -v${OFF} to display version information."
123
[4da2512]124case $1 in
[909ee37]125 -v ) echo "$version" && exit ;;
[4da2512]126 run ) : ;;
[f596dde]127 * ) echo "$usage" && exit 1 ;;
[4da2512]128esac
129
[65c998b]130# If the user has not saved his configuration file, let's ask
131# if he or she really wants to run this stuff
[a22bfe1]132time_current=$(stat -c '%Y' configuration 2>/dev/null || date +%s)
[cf2f109]133time_old=$(stat -c '%Y' configuration.old 2>/dev/null || printf '%s' "$time_current")
[a22bfe1]134if [ "$(printf '%d' "$time_old")" -ge "$(printf '%d' "$time_current")" ] ; then
135 printf 'Do you want to run jhalfs? yes/no (yes): '
[0e4ddfa]136 read -r ANSWER
[a22bfe1]137 case ${ANSWER:0:1} in
138 n|N) printf "\nExiting gracefully.\n"; exit ;;
139 esac
[65c998b]140fi
141
142# Change this to 0 to suppress almost all messages
[4da2512]143VERBOSITY=1
144
[0e4ddfa]145load_file configuration "Loading config params from <configuration>"
[4da2512]146
147# These are boolean vars generated from Config.in.
[7072e1f]148# ISSUE: If a boolean parameter is not set to y(es) there
149# is no variable defined by the menu app. This can
150# cause a headache if you are not aware.
151# The following variables MUST exist. If they don't, the
152# default value is n(o).
[4da2512]153RUNMAKE=${RUNMAKE:-n}
154GETPKG=${GETPKG:-n}
155COMPARE=${COMPARE:-n}
156RUN_ICA=${RUN_ICA:-n}
[7072e1f]157PKGMNGT=${PKGMNGT:-n}
[945ccaa]158WRAP_INSTALL=${WRAP_INSTALL:-n}
[4da2512]159BOMB_TEST=${BOMB_TEST:-n}
160STRIP=${STRIP:=n}
161REPORT=${REPORT:=n}
[085435e]162NCURSES5=${NCURSES5:-n}
[dc7fd7b]163DEL_LA_FILES=${DEL_LA_FILES:-n}
[b339c94]164FULL_LOCALE=${FULL_LOCALE:-n}
[4da2512]165GRSECURITY_HOST=${GRSECURITY_HOST:-n}
[9a536f7]166CUSTOM_TOOLS=${CUSTOM_TOOLS:-n}
[a16f769]167REBUILD_MAKEFILE=${REBUILD_MAKEFILE:-n}
[93346ee]168INSTALL_LOG=${INSTALL_LOG:-n}
[486e9a7]169CLEAN=${CLEAN:=n}
[d035526]170SET_SSP=${SET_SSP:=n}
171SET_ASLR=${SET_ASLR:=n}
172SET_PAX=${SET_PAX:=n}
173SET_HARDENED_TMP=${SET_HARDENED_TMP:=n}
174SET_WARNINGS=${SET_WARNINGS:=n}
175SET_MISC=${SET_MISC:=n}
176SET_BLOWFISH=${SET_BLOWFISH:=n}
[945ccaa]177UNICODE=${UNICODE:=n}
[3b43e17b]178LOCAL=${LOCAL:=n}
[84a3fda]179REALSBU=${REALSBU:=n}
[f5ecc28]180SAVE_CH5=${SAVE_CH5:=n}
[4da2512]181
[75d6d1c]182if [[ "${NO_PROGRESS_BAR}" = "y" ]] ; then
[0e4ddfa]183# shellcheck disable=SC2034
184 NO_PROGRESS="#"
[75d6d1c]185fi
186
[38ae01f]187# Sanity check on the location of $BUILDDIR / $JHALFSDIR
[0e4ddfa]188CWD="$(cd "$(dirname "$0")" && pwd)"
189if [[ $JHALFSDIR == "$CWD" ]]; then
190 echo " The jhalfs source directory conflicts with the jhalfs build directory."
191 echo " Please move the source directory or change the build directory."
192 exit 2
[38ae01f]193fi
194
[0873ccc]195# Book sources envars
[4965fa8]196BRANCH_ID=${BRANCH_ID:=development}
197
198case $BRANCH_ID in
199 development )
[0fa52f2]200 TREE=trunk
[4965fa8]201 LFSVRS=development
202 ;;
203 *EDIT* ) echo " You forgot to set the branch or stable book version."
204 echo " Please rerun make and fix the configuration."
205 exit 2 ;;
206 branch-* )
[0fa52f2]207 LFSVRS=${BRANCH_ID}
208 TREE=${BRANCH_ID#branch-}
[4965fa8]209 ;;
210 * )
[0fa52f2]211 LFSVRS=${BRANCH_ID}
212 TREE=${BRANCH_ID}
[4965fa8]213 ;;
214esac
215
[4da2512]216# Set the document location...
[1cf621b]217BOOK=${BOOK:=$JHALFSDIR/$PROGNAME-$LFSVRS}
[4da2512]218
[4965fa8]219
[728955b]220#--- Envars not sourced from configuration
[0e4ddfa]221# shellcheck disable=SC2034
[9f89fae]222declare -r REPO=git://git.linuxfromscratch.org/lfs.git
[728955b]223declare -r LOG=000-masterscript.log
224
[4da2512]225# Set true internal variables
226COMMON_DIR="common"
[0e4ddfa]227PACKAGE_DIR=$(echo "$PROGNAME" | tr '[:lower:]' '[:upper:]')
[4da2512]228MODULE=$PACKAGE_DIR/master.sh
[7072e1f]229PKGMNGTDIR="pkgmngt"
230# The name packageManager.xml is hardcoded in *.xsl, so no variable.
[4da2512]231
[0e4ddfa]232for file in \
233 "$COMMON_DIR/common-functions" \
234 "$COMMON_DIR/libs/func_book_parser" \
235 "$COMMON_DIR/libs/func_download_pkgs" \
236 "$COMMON_DIR/libs/func_wrt_Makefile" \
237 "$MODULE" ; do
238 load_file "$file"
239done
[9a536f7]240
[0e4ddfa]241simple_message "${SD_BORDER}${nl_}"
[9a536f7]242
243
[0e4ddfa]244#*******************************************************************#
245LASTERR=2
246for file in \
247 "$COMMON_DIR/libs/func_check_version.sh" \
248 "$COMMON_DIR/libs/func_validate_configs.sh" \
249 "$COMMON_DIR/libs/func_custom_pkgs" ; do
250 load_file "$file"
251done
252unset LASTERR
253
254simple_message "${SD_BORDER}${nl_}"
[183cc33]255simple_message "Checking tools required for jhalfs${nl_}"
[6ed3dd7]256check_alfs_tools
[0e4ddfa]257simple_message "${SD_BORDER}${nl_}"
[4da2512]258
[e576789]259# blfs-tool envars
260BLFS_TOOL=${BLFS_TOOL:-n}
261if [[ "${BLFS_TOOL}" = "y" ]] ; then
[0870a7c]262#not needed now that the check is in alfs_tools
263# simple_message 'Checking supplementary tools for installing BLFS'
264# check_blfs_tools
[0e4ddfa]265 simple_message "${SD_BORDER}${nl_}"
[b3825c3]266 BLFS_GIT=${BLFS_GIT:-n}
[854854e]267 BLFS_WORKING_COPY=${BLFS_WORKING_COPY:-n}
268 BLFS_BRANCH=${BLFS_BRANCH:-n}
[b3825c3]269 if [[ "${BLFS_GIT}" = "y" ]]; then
[854854e]270 BLFS_BRANCH_ID=development
[b3825c3]271 BLFS_TREE=trunk
[854854e]272 elif [[ "${BLFS_WORKING_COPY}" = "y" ]]; then
[0e4ddfa]273 if [[ ! -d "$BLFS_WC_LOCATION/postlfs" ]] ; then
[854854e]274 echo " BLFS tools: This is not a working copy: $BLFS_WC_LOCATION."
275 echo " Please rerun make and fix the configuration."
276 exit 2
[0e4ddfa]277 fi
[b3825c3]278 BLFS_TREE=$(cd $BLFS_WC_LOCATION; git branch --show-current)
279 BLFS_BRANCH_ID=${BLFS_TREE/trunk/development}
[0ba80be]280 elif [[ "${BLFS_BRANCH}" = "y" ]] ; then
[854854e]281 case $BLFS_BRANCH_ID in
282 *EDIT* ) echo " You forgot to set the BLFS branch or stable book version."
283 echo " Please rerun make and fix the configuration."
284 exit 2 ;;
[b3825c3]285 * ) BLFS_TREE=${BLFS_BRANCH_ID#branch-}
[854854e]286 esac
287 fi
[0e4ddfa]288 load_file "${COMMON_DIR}/libs/func_install_blfs"
[e576789]289fi
[4da2512]290
291###################################
292### MAIN ###
293###################################
294
295
296validate_config
297echo "${SD_BORDER}${nl_}"
298echo -n "Are you happy with these settings? yes/no (no): "
[0e4ddfa]299read -r ANSWER
300if [ "x$ANSWER" != "xyes" ] ; then
[881c96f]301 echo "${nl_}Rerun make to fix the configuration options.${nl_}"
[d023a35]302 exit
[4da2512]303fi
304echo "${nl_}${SD_BORDER}${nl_}"
305
306# Load additional modules or configuration files based on global settings
307# compare module
308if [[ "$COMPARE" = "y" ]]; then
[0e4ddfa]309 load_file "${COMMON_DIR}/libs/func_compare.sh" 'Loading compare module'
[4da2512]310fi
311#
[f5ecc28]312# save module
313if [[ "$SAVE_CH5" = "y" ]]; then
314 load_file "${COMMON_DIR}/libs/func_save.sh" 'Loading save module'
315fi
316#
[4da2512]317# optimize module
318if [[ "$OPTIMIZE" != "0" ]]; then
[0e4ddfa]319 load_file optimize/optimize_functions 'Loading optimization module'
[4da2512]320 #
321 # optimize configurations
[0e4ddfa]322 load_file optimize/opt_config 'Loading optimization config'
[854854e]323 # The number of parallel jobs is taken from configuration now
[0e4ddfa]324 # shellcheck disable=SC2034
[9ef12f7]325 JH_MAKEFLAGS="-j${N_PARALLEL}"
[4da2512]326 # Validate optimize settings, if required
327 validate_opt_settings
328fi
329#
330
[a16f769]331if [[ "$REBUILD_MAKEFILE" = "n" ]] ; then
[4da2512]332
[200fbde]333# If requested, clean the build directory
[7b6ecc5]334 clean_builddir
[4da2512]335
[7b6ecc5]336 if [[ ! -d $JHALFSDIR ]]; then
[0e4ddfa]337 sudo mkdir -p "$JHALFSDIR"
[106157fd]338# Do not assume there is a group named as $USER, do not use
339# $USER:$USER...
340 sudo chown "$USER" "$JHALFSDIR"
[7b6ecc5]341 fi
[3e7ceed]342
[200fbde]343# Create $BUILDDIR/sources even though it could be created by get_sources()
[7b6ecc5]344 if [[ ! -d $BUILDDIR/sources ]]; then
[0e4ddfa]345 sudo mkdir -p "$BUILDDIR/sources"
346 sudo chmod a+wt "$BUILDDIR/sources"
[7b6ecc5]347 fi
[200fbde]348
349# Create the log directory
[7b6ecc5]350 if [[ ! -d $LOGDIR ]]; then
[0e4ddfa]351 mkdir "$LOGDIR"
[7b6ecc5]352 fi
[0e4ddfa]353 true >"$LOGDIR/$LOG"
[200fbde]354
355# Copy common helper files
[0e4ddfa]356 cp "$COMMON_DIR"/{makefile-functions,progress_bar.sh} "$JHALFSDIR/"
[200fbde]357
358# Copy needed stylesheets
[0e4ddfa]359 cp "$COMMON_DIR"/{packages.xsl,chroot.xsl,kernfs.xsl} "$JHALFSDIR/"
[c412a07]360 cp "$PACKAGE_DIR/$XSL" "$JHALFSDIR/"
[200fbde]361
[3e7ceed]362 export XSL=$JHALFSDIR/${XSL}
[7b6ecc5]363
[200fbde]364# Copy packageManager.xml, if needed
[3aa1acd]365 [[ "$PKGMNGT" = "y" ]] && [[ "$PROGNAME" = "lfs" ]] && {
[5a965ad]366 sed s@BOOK@"$BOOK"@ "$PKGMNGTDIR/packageManager.xml" > \
367 "$JHALFSDIR/"packageManager.xml
[0e4ddfa]368 cp "$PKGMNGTDIR/packInstall.sh" "$JHALFSDIR/"
[3aa1acd]369 }
[200fbde]370
371# Copy urls.xsl, if needed
[0e4ddfa]372 [[ "$GETPKG" = "y" ]] && cp "$COMMON_DIR/urls.xsl" "$JHALFSDIR/"
[200fbde]373
[c672fa8]374# Always create the test-log directory to allow user to "uncomment" test
375# instructions
[0e4ddfa]376 install -d -m 1777 "$TESTLOGDIR"
[200fbde]377
378# Create the installed-files directory, if needed
[0e4ddfa]379 [[ "$INSTALL_LOG" = "y" ]] && [[ ! -d $FILELOGDIR ]] && install -d -m 1777 "$FILELOGDIR"
[200fbde]380
381# Prepare report creation, if needed
[7b6ecc5]382 if [[ "$REPORT" = "y" ]]; then
[0e4ddfa]383 cp $COMMON_DIR/create-sbu_du-report.sh "$JHALFSDIR/"
[7072e1f]384 # After making sure that all looks sane, dump the settings to a file
[7b6ecc5]385 # This file will be used to create the REPORT header
[0e4ddfa]386 validate_config >"$JHALFSDIR/jhalfs.config"
[7b6ecc5]387 fi
[200fbde]388
389# Copy optimize files, if needed
[0e4ddfa]390 [[ "$OPTIMIZE" != "0" ]] && cp optimize/opt_override "$JHALFSDIR/"
[200fbde]391
392# Copy compare files, if needed
[3e7ceed]393 if [[ "$COMPARE" = "y" ]]; then
[0e4ddfa]394 mkdir -p "$JHALFSDIR/extras"
395 cp extras/* "$JHALFSDIR/extras"
[3e7ceed]396 fi
[200fbde]397
398# Copy custom tools config files, if requested
[3e7ceed]399 if [[ "${CUSTOM_TOOLS}" = "y" ]]; then
400 echo "Copying custom tool scripts to $JHALFSDIR"
[0e4ddfa]401 mkdir -p "$JHALFSDIR/custom-commands"
402 cp -f custom/config/* "$JHALFSDIR/custom-commands"
[3e7ceed]403 fi
[200fbde]404
[f733772]405# Download or updates the book source
406# Note that all customization to $JHALFSDIR have to be done before this.
407# But the LFS book is needed for BLFS tools.
408 get_book
409 extract_commands
410 echo "${SD_BORDER}${nl_}"
[0e4ddfa]411 cd "$CWD" # the functions above change directory
[f733772]412
[200fbde]413# Install blfs-tool, if requested.
[7b6ecc5]414 if [[ "${BLFS_TOOL}" = "y" ]] ; then
[6ed3dd7]415 echo Installing BLFS book and tools
[0e4ddfa]416 install_blfs_tools 2>&1 | tee -a "$LOGDIR/$LOG"
[bbcdeab]417 [[ ${PIPESTATUS[0]} != 0 ]] && exit 1
[7b6ecc5]418 fi
419
[4965fa8]420fi
421
[0e4ddfa]422# shellcheck disable=SC2034
[a16f769]423if [[ "$REBUILD_MAKEFILE" = "y" ]] ; then
[8b85dae]424# Sanity check: users tend to tick "rebuild Makefile"
425# without generating one first. Check we have one:
426 if [ ! -f $MKFILE ]; then
427 set -e
428 error_message "You cannot \"rebuild Makefile\" without first building one"
429 fi
430# When regenerating the Makefile, we need to know also the
431# canonical book version
[0fa52f2]432VERSION=$(grep 'echo.*lfs-release' "$JHALFSDIR/prbook.xml" | sed 's/.*echo[ ]*\([^ ]*\).*/\1/')
[a16f769]433fi
434
[4da2512]435build_Makefile
[3e7ceed]436
[4da2512]437echo "${SD_BORDER}${nl_}"
438
[1cf621b]439# Check for build prerequisites.
440 echo
[0e4ddfa]441 cd "$CWD"
[1cf621b]442 check_prerequisites
443 echo "${SD_BORDER}${nl_}"
444# All is well, run the build (if requested)
[4da2512]445run_make
Note: See TracBrowser for help on using the repository browser.