From 840d6a1d2770e765db63c4e1114f2b8adaa2029e Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Sat, 17 May 2025 11:54:14 +0100 Subject: get.sh: FURTHER simplify nuke() this is getting almost comical now Signed-off-by: Leah Rowe --- include/get.sh | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/include/get.sh b/include/get.sh index c6c6b75b..3448a668 100644 --- a/include/get.sh +++ b/include/get.sh @@ -15,7 +15,7 @@ fetch_targets() printf "Creating %s tree %s\n" "$project" "$tree" git_prep "$url" "$bkup_url" "$xbmkpwd/$configdir/$tree/patches" \ "src/$project/$tree" with_submodules - ( fx_ nuke find "$xbmkpwd/config" -type f -name "nuke.list" ) || exit 1 + ( fx_ nuke find config -type f -name "nuke.list" ) || err; : } fetch_project() @@ -31,7 +31,7 @@ fetch_project() x_ ./mk -f $d done clone_project - ( fx_ nuke find "$xbmkpwd/config" -type f -name "nuke.list" ) || exit 1 + ( fx_ nuke find config -type f -name "nuke.list" ) || err; : } clone_project() @@ -170,7 +170,6 @@ tmpclone() nuke() { - rdir="${1#"$xbmkpwd/config/"}" && [ -d "$xbmkpwd/src/${rdir%/*}" ] && \ - x_ cd "$xbmkpwd/src/${rdir%/*}" && \ - dx_ "eval [ -L \"\$fx\" ] || x_ rm -Rf" "$1"; : + r="${1#config/}" && r="$xbmkpwd/src/${r%/*}" && [ -d "$r" ] && x_ cd \ + "$r" && dx_ "eval [ -L \"\$fx\" ] || x_ rm -Rf" "$xbmkpwd/$1"; : } -- cgit v1.2.1 From dbe109d7b541af4c218620dee7c3523bad6ed1fc Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Sat, 17 May 2025 12:43:25 +0100 Subject: release.sh: don't move src/docs/ otherwise, ./mk -b (without argument) will fail, on release archives. also, perhaps i should add an mkhelper to build it? Signed-off-by: Leah Rowe --- include/release.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/include/release.sh b/include/release.sh index f0799f17..7a7b96fd 100644 --- a/include/release.sh +++ b/include/release.sh @@ -54,7 +54,6 @@ prep_release_src() x_ ./mk -f fx_ "x_ rm -Rf" x_ find . -name ".git" fx_ "x_ rm -Rf" x_ find . -name ".gitmodules" - x_ mv src/docs docs } prep_release_tarball() -- cgit v1.2.1 From 136bd66c2809dcdb1b9475687101332f2d91d4cb Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Sat, 17 May 2025 13:00:17 +0100 Subject: mrc.sh: merge extract_mrc with extract_shellball Signed-off-by: Leah Rowe --- include/mrc.sh | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/include/mrc.sh b/include/mrc.sh index a132f574..775831f8 100644 --- a/include/mrc.sh +++ b/include/mrc.sh @@ -6,16 +6,9 @@ eval "`setvars "" MRC_url MRC_url_bkup MRC_hash MRC_board SHELLBALL`" -extract_mrc() -{ - extract_shellball - x_ "$cbfstool" "$appdir/"bios.bin extract -n mrc.bin \ - -f "$_pre_dest" -r RO_SECTION -} - extract_refcode() { - extract_shellball + extract_mrc # cbfstool after coreboot 4.13 changed the stage file attribute scheme, # and refcode is extracted from an image using the old scheme. we use @@ -33,7 +26,7 @@ extract_refcode() x_ mv "$appdir/ref" "$_pre_dest" } -extract_shellball() +extract_mrc() { chkvars "MRC_board" "CONFIG_MRC_FILE" SHELLBALL="chromeos-firmwareupdate-$MRC_board" @@ -42,7 +35,10 @@ extract_shellball() x_ cd "$appdir" extract_partition "${MRC_url##*/}" extract_archive "$SHELLBALL" . - ) || err "mrc download/extract failure"; : + ) || err "mrc download/extract failure" + + x_ "$cbfstool" "$appdir/"bios.bin extract -n mrc.bin \ + -f "${_pre_dest%/*}/mrc.bin" -r RO_SECTION } extract_partition() -- cgit v1.2.1 From 587d245cafa630ff252a45297760371ef07a7f15 Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Sat, 17 May 2025 13:17:09 +0100 Subject: release.sh: simplify prep_release_bin() Signed-off-by: Leah Rowe --- include/release.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/include/release.sh b/include/release.sh index 7a7b96fd..618ad633 100644 --- a/include/release.sh +++ b/include/release.sh @@ -30,7 +30,7 @@ release() prep_release src prep_release tarball - prep_release bin + [ "$relmode" = "src" ] || prep_release bin x_ rm -Rf "$relsrcdir" x_ mkdir -p "$reldir" @@ -70,7 +70,6 @@ prep_release_tarball() prep_release_bin() { - [ "$relmode" = "src" ] && return 0 x_ ./mk -d coreboot fx_ "x_ ./mk -b" printf \ "coreboot\npico-serprog\nstm32-vserprog\npcsx-redux\n" -- cgit v1.2.1 From 05c07f7401bf79e6eeb34e12a19ce6d2cabab2ab Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Sat, 17 May 2025 15:20:02 +0100 Subject: get.sh: move nuke() to release.sh we really only need it there, because the context is for release archives. normal use of the git repository doesn't matter in the context of deletions, because that will not be distributed. only the result of ./mk release will be distributed. the builds produced will not change as a result of this, for people using the normal git repository, because the files in question are never used anyway, in our configs. this is being done to make working on local repos easier. Signed-off-by: Leah Rowe --- include/get.sh | 8 -------- include/release.sh | 29 ++++++++++++++++++----------- 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/include/get.sh b/include/get.sh index 3448a668..244eb1bb 100644 --- a/include/get.sh +++ b/include/get.sh @@ -15,7 +15,6 @@ fetch_targets() printf "Creating %s tree %s\n" "$project" "$tree" git_prep "$url" "$bkup_url" "$xbmkpwd/$configdir/$tree/patches" \ "src/$project/$tree" with_submodules - ( fx_ nuke find config -type f -name "nuke.list" ) || err; : } fetch_project() @@ -31,7 +30,6 @@ fetch_project() x_ ./mk -f $d done clone_project - ( fx_ nuke find config -type f -name "nuke.list" ) || err; : } clone_project() @@ -167,9 +165,3 @@ tmpclone() ( x_ git -C "$2" reset --hard "$3" ) || return 1 ( fx_ "eval x_ git -C \"$2\" am" find "$4" -type f ) || return 1; : } - -nuke() -{ - r="${1#config/}" && r="$xbmkpwd/src/${r%/*}" && [ -d "$r" ] && x_ cd \ - "$r" && dx_ "eval [ -L \"\$fx\" ] || x_ rm -Rf" "$xbmkpwd/$1"; : -} diff --git a/include/release.sh b/include/release.sh index 618ad633..1eec8fa9 100644 --- a/include/release.sh +++ b/include/release.sh @@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-3.0-or-later # Copyright (c) 2023-2025 Leah Rowe -eval "`setvars "" reldir reldest vdir relsrcdir relmode`" +eval "`setvars "" reldir reldest vdir relsrc relmode`" release() { @@ -23,15 +23,15 @@ release() err "already exists: \"$reldest\"" vdir="$XBMK_CACHE/relpwd/${xbmktmp##*/}/$version" - relsrcdir="$vdir/${relname}_src" + relsrc="$vdir/${relname}_src" remkdir "$vdir" - x_ git clone . "$relsrcdir" + x_ git clone . "$relsrc" prep_release src prep_release tarball [ "$relmode" = "src" ] || prep_release bin - x_ rm -Rf "$relsrcdir" + x_ rm -Rf "$relsrc" x_ mkdir -p "$reldir" x_ mv "$vdir" "$reldir" @@ -42,9 +42,9 @@ release() prep_release() { - x_ touch "$relsrcdir/lock" + x_ touch "$relsrc/lock" ( - [ "$1" = "tarball" ] || x_ cd "$relsrcdir" + [ "$1" = "tarball" ] || x_ cd "$relsrc" prep_release_$1 ) || err "can't prep release $1" } @@ -54,17 +54,24 @@ prep_release_src() x_ ./mk -f fx_ "x_ rm -Rf" x_ find . -name ".git" fx_ "x_ rm -Rf" x_ find . -name ".gitmodules" + ( fx_ nuke find config -type f -name "nuke.list" ) || err; : +} + +nuke() +{ + r="${1#config/}" && r="$relsrc/src/${r%/*}" && [ -d "$r" ] && x_ cd \ + "$r" && dx_ "eval [ -L \"\$fx\" ] || x_ rm -Rf" "$relsrc/$1"; : } prep_release_tarball() { git log --graph --pretty=format:'%Cred%h%Creset %s %Creset' \ - --abbrev-commit > "$relsrcdir/CHANGELOG" || err "!log $relsrcdir" - x_ rm -f "$relsrcdir/lock" - x_ rm -Rf "$relsrcdir/cache" "$relsrcdir/tmp" + --abbrev-commit > "$relsrc/CHANGELOG" || err "!log $relsrc" + x_ rm -f "$relsrc/lock" + x_ rm -Rf "$relsrc/cache" "$relsrc/tmp" ( - x_ cd "${relsrcdir%/*}" - x_ mktarball "${relsrcdir##*/}" "${relsrcdir##*/}.tar.xz" + x_ cd "${relsrc%/*}" + x_ mktarball "${relsrc##*/}" "${relsrc##*/}.tar.xz" ) || err "can't create src tarball"; : } -- cgit v1.2.1 From 6dc71cc02468a0fce6d5edbc9c9077c09808acf0 Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Sat, 17 May 2025 15:38:20 +0100 Subject: release.sh: simplify nuke() EVEN MORE Signed-off-by: Leah Rowe --- include/release.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/release.sh b/include/release.sh index 1eec8fa9..729ae4e6 100644 --- a/include/release.sh +++ b/include/release.sh @@ -59,8 +59,8 @@ prep_release_src() nuke() { - r="${1#config/}" && r="$relsrc/src/${r%/*}" && [ -d "$r" ] && x_ cd \ - "$r" && dx_ "eval [ -L \"\$fx\" ] || x_ rm -Rf" "$relsrc/$1"; : + r="${1#config/}"; r="$relsrc/src/${r%/*}"; [ -d "$r" ] && x_ cd "$r" \ + && dx_ "eval [ -L \"\$fx\" ] || x_ rm -Rf" "$relsrc/$1"; : } prep_release_tarball() -- cgit v1.2.1 From 47a3982bbeabd46623e7874ab9e139eb59474388 Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Sat, 17 May 2025 15:49:24 +0100 Subject: release.sh: use x_ on find command for nuke() Signed-off-by: Leah Rowe --- include/release.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/release.sh b/include/release.sh index 729ae4e6..528156b7 100644 --- a/include/release.sh +++ b/include/release.sh @@ -54,7 +54,7 @@ prep_release_src() x_ ./mk -f fx_ "x_ rm -Rf" x_ find . -name ".git" fx_ "x_ rm -Rf" x_ find . -name ".gitmodules" - ( fx_ nuke find config -type f -name "nuke.list" ) || err; : + ( fx_ nuke x_ find config -type f -name "nuke.list" ) || err; : } nuke() -- cgit v1.2.1 From 4ca57943d7031c4a38d9dbd565fd58adf2a7c2c2 Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Sat, 17 May 2025 16:03:08 +0100 Subject: release.sh: simplify nuke() EVEN MORE, yet again Signed-off-by: Leah Rowe --- include/release.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/release.sh b/include/release.sh index 528156b7..de8551d6 100644 --- a/include/release.sh +++ b/include/release.sh @@ -59,8 +59,8 @@ prep_release_src() nuke() { - r="${1#config/}"; r="$relsrc/src/${r%/*}"; [ -d "$r" ] && x_ cd "$r" \ - && dx_ "eval [ -L \"\$fx\" ] || x_ rm -Rf" "$relsrc/$1"; : + r="$relsrc/src/${1#config/}"; [ -d "${r%/*}" ] && x_ cd "${r%/*}" && \ + dx_ "eval [ -L \"\$fx\" ] || x_ rm -Rf" "$relsrc/$1"; : } prep_release_tarball() -- cgit v1.2.1 From 01a0217c1e39ef8f665b5499e210fac7d0221416 Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Sat, 17 May 2025 16:51:12 +0100 Subject: get.sh: simplify bad_checksum() Signed-off-by: Leah Rowe --- include/get.sh | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/include/get.sh b/include/get.sh index 244eb1bb..b83449b7 100644 --- a/include/get.sh +++ b/include/get.sh @@ -148,14 +148,10 @@ try_git() bad_checksum() { - [ ! -f "$2" ] && printf "File '%s' missing (sha512sum '%s')\n" \ - "$2" "$1" 1>&2 && return 0 - fchksum="$(x_ sha512sum "$2" | awk '{print $1}')" || \ - err "Can't get sha512sum on '$2' (checking for sha512sum '$1')" - [ "$fchksum" != "$1" ] || return 1 - printf "WARNING: BAD checksum for '%s' - expected '%s', got '%s'\n" \ - "$2" "$1" "$fchksum" 1>&2 - x_ rm -f "$2" + [ ! -f "$2" ] && printf "'%s' missing, %s\n" "$2" "$1" 1>&2 && return 0 + csum="$(x_ sha512sum "$2" | awk '{print $1}')" || err "!sha512 '$2' $1" + [ "$csum" != "$1" ] && printf "BAD SHA512, '%s'; need '%s', got %s\n" \ + "$2" "$1" "$csum" 1>&2 && x_ rm -f "$2" && return 0; return 1 } tmpclone() -- cgit v1.2.1 From 3c58181f69ee28c954a8844613dee9d4d576ea2c Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Sat, 17 May 2025 16:52:32 +0100 Subject: get.sh: remove useless message the user doesn't care where the temporary git repo is git shows that information anyway, in the git clone command Signed-off-by: Leah Rowe --- include/get.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/include/get.sh b/include/get.sh index b83449b7..667ab398 100644 --- a/include/get.sh +++ b/include/get.sh @@ -156,7 +156,6 @@ bad_checksum() tmpclone() { - printf "Creating git clone '%s' from '%s'\n" "$2" "$1" ( x_ git clone "$1" "$2" ) || return 1 ( x_ git -C "$2" reset --hard "$3" ) || return 1 ( fx_ "eval x_ git -C \"$2\" am" find "$4" -type f ) || return 1; : -- cgit v1.2.1 From 44df3b2bff864e7eb42e370d7ac9182799a59fdf Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Sun, 18 May 2025 10:33:23 +0100 Subject: release.sh: tidy up nuke() i wasn't ok having that variable initialisation and then the commands on the same line. it looks messy. having the commands on a separate line makes the code nice to read, so let's separate them. Signed-off-by: Leah Rowe --- include/release.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/include/release.sh b/include/release.sh index de8551d6..77281009 100644 --- a/include/release.sh +++ b/include/release.sh @@ -59,8 +59,9 @@ prep_release_src() nuke() { - r="$relsrc/src/${1#config/}"; [ -d "${r%/*}" ] && x_ cd "${r%/*}" && \ - dx_ "eval [ -L \"\$fx\" ] || x_ rm -Rf" "$relsrc/$1"; : + r="$relsrc/src/${1#config/}" + [ -d "${r%/*}" ] && x_ cd "${r%/*}" && \ + dx_ "eval [ -L \"\$fx\" ] || x_ rm -Rf" "$relsrc/$1" } prep_release_tarball() -- cgit v1.2.1 From a3e1ed9823d4750d8e7c5610eecc811e841a35d4 Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Sun, 18 May 2025 10:51:03 +0100 Subject: release.sh: rename relsrc to rsrc Signed-off-by: Leah Rowe --- include/release.sh | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/include/release.sh b/include/release.sh index 77281009..5d6da466 100644 --- a/include/release.sh +++ b/include/release.sh @@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-3.0-or-later # Copyright (c) 2023-2025 Leah Rowe -eval "`setvars "" reldir reldest vdir relsrc relmode`" +eval "`setvars "" reldir reldest vdir rsrc relmode`" release() { @@ -23,15 +23,15 @@ release() err "already exists: \"$reldest\"" vdir="$XBMK_CACHE/relpwd/${xbmktmp##*/}/$version" - relsrc="$vdir/${relname}_src" + rsrc="$vdir/${relname}_src" remkdir "$vdir" - x_ git clone . "$relsrc" + x_ git clone . "$rsrc" prep_release src prep_release tarball [ "$relmode" = "src" ] || prep_release bin - x_ rm -Rf "$relsrc" + x_ rm -Rf "$rsrc" x_ mkdir -p "$reldir" x_ mv "$vdir" "$reldir" @@ -42,9 +42,9 @@ release() prep_release() { - x_ touch "$relsrc/lock" + x_ touch "$rsrc/lock" ( - [ "$1" = "tarball" ] || x_ cd "$relsrc" + [ "$1" = "tarball" ] || x_ cd "$rsrc" prep_release_$1 ) || err "can't prep release $1" } @@ -59,20 +59,20 @@ prep_release_src() nuke() { - r="$relsrc/src/${1#config/}" + r="$rsrc/src/${1#config/}" [ -d "${r%/*}" ] && x_ cd "${r%/*}" && \ - dx_ "eval [ -L \"\$fx\" ] || x_ rm -Rf" "$relsrc/$1" + dx_ "eval [ -L \"\$fx\" ] || x_ rm -Rf" "$rsrc/$1"; : } prep_release_tarball() { git log --graph --pretty=format:'%Cred%h%Creset %s %Creset' \ - --abbrev-commit > "$relsrc/CHANGELOG" || err "!log $relsrc" - x_ rm -f "$relsrc/lock" - x_ rm -Rf "$relsrc/cache" "$relsrc/tmp" + --abbrev-commit > "$rsrc/CHANGELOG" || err "!log $rsrc" + x_ rm -f "$rsrc/lock" + x_ rm -Rf "$rsrc/cache" "$rsrc/tmp" ( - x_ cd "${relsrc%/*}" - x_ mktarball "${relsrc##*/}" "${relsrc##*/}.tar.xz" + x_ cd "${rsrc%/*}" + x_ mktarball "${rsrc##*/}" "${rsrc##*/}.tar.xz" ) || err "can't create src tarball"; : } -- cgit v1.2.1 From ac609d5aae4907f15dcfe21a2d49d9fefe73946f Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Sun, 18 May 2025 10:59:16 +0100 Subject: vendor.sh: Remove _dest if it's bad Also, provide more ample warning to the user Signed-off-by: Leah Rowe --- include/vendor.sh | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/include/vendor.sh b/include/vendor.sh index 5d7ea82b..add5b052 100644 --- a/include/vendor.sh +++ b/include/vendor.sh @@ -136,8 +136,11 @@ fetch() printf "'%s', '%s': checksum undefined. Check files in '%s'\n" \ "$board" "$_dest" "${_pre_dest%/*}" 1>&2 e "$_dest" f not && err "missing file '$_dest', !extract_$dl_type"; : - e "$_dest" f && printf "WARNING: '%s' exists but has bad checksum" \ - "$_dest" + e "$_dest" f && printf "WARNING: '%s' made with bad hash (will rm)\n" \ + "$_dest" 1>&2 + [ -L "$_dest" ] && printf "WARNING: '%s' is a link. Please delete!\n" \ + "$_dest" 1>&2 + [ -L "$_dest" ] || x_ rm -f "$_dest" err "Could not safely extract '$_dest', for board '$board'" } -- cgit v1.2.1 From b48eb161e49d0e40c50c9885072fdb00204230c3 Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Sun, 18 May 2025 11:10:57 +0100 Subject: vendor.sh: simplify mksha512sum() Signed-off-by: Leah Rowe --- include/vendor.sh | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/include/vendor.sh b/include/vendor.sh index add5b052..12ae68c0 100644 --- a/include/vendor.sh +++ b/include/vendor.sh @@ -314,7 +314,7 @@ prep() _xrom="$_xromnew" fi - [ "$nukemode" = "nuke" ] && mksha512sum "$_xrom" "vendorhashes" + [ "$nukemode" != "nuke" ] || ( mksha512 "$_xrom" "vendorhashes" ) || err add_vfiles "$_xrom" || return 1 # if break return, can still change MAC [ "$nukemode" != "nuke" ] && return 0 @@ -324,12 +324,10 @@ prep() x_ rm -f "$_xrom" } -mksha512sum() +mksha512() { - ( [ "${1%/*}" != "$1" ] && x_ cd "${1%/*}" sha512sum ./"${1##*/}" >> "$2" || err "!sha512sum \"$1\" > \"$2\"" - ) || err "failed to create tarball checksum" } add_vfiles() -- cgit v1.2.1 From 7ec9ee42283f3722a5c3bfd0050dd32b00a32973 Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Sun, 18 May 2025 11:12:20 +0100 Subject: inject.sh: shorten the nukemode variable name just call it "nuke". this is what tells whether to remove vendor files from an archive. Signed-off-by: Leah Rowe --- include/inject.sh | 6 +++--- include/vendor.sh | 24 ++++++++++++------------ 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/include/inject.sh b/include/inject.sh index d4d20568..74f688a1 100644 --- a/include/inject.sh +++ b/include/inject.sh @@ -21,7 +21,7 @@ inject() set +u +e [ $# -lt 1 ] && err "No options specified" - eval "`setvars "" nukemode new_mac xchanged`" + eval "`setvars "" nuke new_mac xchanged`" archive="$1"; new_mac="xx:xx:xx:xx:xx:xx" @@ -29,7 +29,7 @@ inject() [ $# -gt 1 ] && case "$2" in nuke) new_mac="" - nukemode="nuke" ;; + nuke="nuke" ;; setmac) [ $# -gt 2 ] && new_mac="$3" && \ [ -z "$new_mac" ] && err "Empty MAC address specified" ;; @@ -83,7 +83,7 @@ check_target() patch_release() { - [ "$nukemode" = "nuke" ] || x_ ./mk download "$board" + [ "$nuke" = "nuke" ] || x_ ./mk download "$board" has_hashes="n" tmpromdir="$tmpromdel/bin/$board" diff --git a/include/vendor.sh b/include/vendor.sh index 12ae68c0..2732eade 100644 --- a/include/vendor.sh +++ b/include/vendor.sh @@ -38,7 +38,7 @@ eval "`setvars "" has_hashes EC_hash DL_hash DL_url_bkup MRC_refcode_gbe vcfg \ E6400_VGA_DL_hash E6400_VGA_DL_url E6400_VGA_DL_url_bkup E6400_VGA_offset \ E6400_VGA_romname SCH5545EC_DL_url_bkup SCH5545EC_DL_hash _dest mecleaner \ kbc1126_ec_dump MRC_refcode_cbtree _dl SCH5545EC_DL_url EC_url rom DL_url \ - nukemode cbfstoolref FSPFD_hash _7ztest ME11bootguard ME11delta xromsize \ + nuke cbfstoolref FSPFD_hash _7ztest ME11bootguard ME11delta xromsize \ ME11version ME11sku ME11pch _me _metmp mfs TBFW_url_bkup TBFW_url cbdir \ TBFW_hash TBFW_size hashfile EC_url_bkup FSPM_bin_hash FSPS_bin_hash \ EC_FW1_hash EC_FW2_hash ME_bin_hash MRC_bin_hash REF_bin_hash _dl_bin \ @@ -297,13 +297,13 @@ prep() _xrom="$1" _xromname="${1##*/}" _xromnew="${_xrom%/*}/${_xromname#"$vfix"}" - [ "$nukemode" = "nuke" ] && _xromnew="${_xrom%/*}/$vfix${_xrom##*/}" + [ "$nuke" = "nuke" ] && _xromnew="${_xrom%/*}/$vfix${_xrom##*/}" e "$_xrom" f missing && return 0 [ -z "${_xromname#"$vfix"}" ] && err "$_xromname / $vfix: name match" # Remove the prefix and 1-byte pad - if [ "$nukemode" != "nuke" ] && \ + if [ "$nuke" != "nuke" ] && \ [ "${_xromname#"$vfix"}" != "$_xromname" ]; then xromsize="$(expr $(stat -c '%s' "$_xrom") - 1)" || err "!int" [ $xromsize -lt 524288 ] && err "too small, $xromsize: $_xrom" @@ -314,10 +314,10 @@ prep() _xrom="$_xromnew" fi - [ "$nukemode" != "nuke" ] || ( mksha512 "$_xrom" "vendorhashes" ) || err + [ "$nuke" != "nuke" ] || ( mksha512 "$_xrom" "vendorhashes" ) || err add_vfiles "$_xrom" || return 1 # if break return, can still change MAC - [ "$nukemode" != "nuke" ] && return 0 + [ "$nuke" != "nuke" ] && return 0 # Rename the file, prefixing a warning saying not to flash cat "$_xrom" config/data/coreboot/0 > "$_xromnew" || err "!pad $_xrom" @@ -334,10 +334,10 @@ add_vfiles() { rom="$1" - if [ "$has_hashes" != "y" ] && [ "$nukemode" != "nuke" ]; then + if [ "$has_hashes" != "y" ] && [ "$nuke" != "nuke" ]; then printf "'%s' has no hash file. Skipping.\n" "$archive" 1>&2 return 1 - elif [ "$has_hashes" = "y" ] && [ "$nukemode" = "nuke" ]; then + elif [ "$has_hashes" = "y" ] && [ "$nuke" = "nuke" ]; then printf "'%s' has a hash file. Skipping nuke.\n" "$archive" 1>&2 return 1 fi @@ -383,14 +383,14 @@ vfile() err "vfile $*, $rom: offset given but empty (undefined)" fi - [ "$nukemode" = "nuke" ] || x_ e "$_dest" f + [ "$nuke" = "nuke" ] || x_ e "$_dest" f if [ "$cbfsname" = "IFD" ]; then - [ "$nukemode" = "nuke" ] || x_ "$ifdtool" $ifdprefix -i \ + [ "$nuke" = "nuke" ] || x_ "$ifdtool" $ifdprefix -i \ $_t:$_dest "$rom" -O "$rom" - [ "$nukemode" != "nuke" ] || x_ "$ifdtool" $ifdprefix --nuke \ + [ "$nuke" != "nuke" ] || x_ "$ifdtool" $ifdprefix --nuke \ $_t "$rom" -O "$rom" - elif [ "$nukemode" = "nuke" ]; then + elif [ "$nuke" = "nuke" ]; then x_ "$cbfstool" "$rom" remove -n "$cbfsname" elif [ "$_t" = "stage" ]; then # the only stage we handle is refcode x_ rm -f "$xbmklocal/refcode" @@ -407,7 +407,7 @@ vfile() check_vendor_hashes() { x_ cd "$tmpromdir" - [ "$has_hashes" = "n" ] || [ "$nukemode" = "nuke" ] || sha512sum \ + [ "$has_hashes" = "n" ] || [ "$nuke" = "nuke" ] || sha512sum \ --status -c "$hashfile" || x_ sha1sum --status -c "$hashfile" x_ rm -f "$hashfile" } -- cgit v1.2.1 From cde3b7051e4c9276a35f608e7709e3a7e480b01e Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Sun, 18 May 2025 11:18:45 +0100 Subject: init.sh: return from child in set_env instead This is earlier than the current check, thus preventing the initialisation of a git repository and/or the recreation of xbmktmp and xbmklocal by erroneous parent executions of lbmk while another parent is running - the latter of which could have caused a massively unpredictable build failure, so this is also a pre-emptive bug fix, fixing all kinds of weird bugs. Signed-off-by: Leah Rowe --- include/init.sh | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/include/init.sh b/include/init.sh index 2dd9e88f..60dd3dd9 100644 --- a/include/init.sh +++ b/include/init.sh @@ -146,6 +146,17 @@ xbmk_set_env() [ -z "${XBMK_THREADS+x}" ] && export XBMK_THREADS=1 expr "X$XBMK_THREADS" : "X-\{0,1\}[0123456789][0123456789]*$" \ 1>/dev/null 2>/dev/null || export XBMK_THREADS=1; : + + # unify all temporary files/directories in a single TMPDIR + [ -z "${TMPDIR+x}" ] || [ "${TMPDIR%_*}" = "/tmp/xbmk" ] || \ + unset TMPDIR + [ -n "${TMPDIR+x}" ] && export TMPDIR="$TMPDIR" && xbmktmp="$TMPDIR" + [ -z "${TMPDIR+x}" ] || return 1 # child instance, so return + + # parent instance of xbmk, so don't return. set up TMPDIR + export TMPDIR="/tmp" + export TMPDIR="$(mktemp -d -t xbmk_XXXXXXXX)" + xbmktmp="$TMPDIR" } xbmk_git_init() @@ -171,17 +182,6 @@ xbmk_create_tmpdir() { x_ mkdir -p "$xbmklocal" - # unify all temporary files/directories in a single TMPDIR - [ -z "${TMPDIR+x}" ] || [ "${TMPDIR%_*}" = "/tmp/xbmk" ] || \ - unset TMPDIR - [ -n "${TMPDIR+x}" ] && export TMPDIR="$TMPDIR" && xbmktmp="$TMPDIR" - [ -z "${TMPDIR+x}" ] || return 1 # child instance, so return - - # parent instance of xbmk, so don't return. set up TMPDIR - export TMPDIR="/tmp" - export TMPDIR="$(mktemp -d -t xbmk_XXXXXXXX)" - xbmktmp="$TMPDIR" - # /tmp might be a tmpfs, so for large files we use ./tmp, # not to be confused with xbmktmp (xbmktmp points to /tmp) remkdir "$xbmktmp" "$xbmklocal" -- cgit v1.2.1 From e05a18d35131acd2007afc56aa07a321f6f2dfdb Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Sun, 18 May 2025 11:21:30 +0100 Subject: init.sh: check the lock file BEFORE git init this way, initialisation will not be performed erroneously while another parent instance of lbmk is running. Signed-off-by: Leah Rowe --- include/init.sh | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/include/init.sh b/include/init.sh index 60dd3dd9..807174a8 100644 --- a/include/init.sh +++ b/include/init.sh @@ -31,8 +31,8 @@ xbmk_init() id -u 1>/dev/null 2>/dev/null || err "suid check failed (id -u)" [ "$(id -u)" != "0" ] || err "this command as root is not permitted" - for init_cmd in set_pyver set_version set_env git_init create_tmpdir \ - lock create_pathdirs child_exec; do + for init_cmd in set_pyver set_version set_env lock git_init \ + create_tmpdir create_pathdirs child_exec; do xbmk_$init_cmd "$@" || break done } @@ -159,6 +159,12 @@ xbmk_set_env() xbmktmp="$TMPDIR" } +xbmk_lock() +{ + [ -f "$xbmklock" ] && err "'$xbmklock' exists. Is a build running?" + touch "$xbmklock" || err "cannot create '$xbmklock'"; : +} + xbmk_git_init() { for gitarg in "--global user.name" "--global user.email"; do @@ -187,12 +193,6 @@ xbmk_create_tmpdir() remkdir "$xbmktmp" "$xbmklocal" } -xbmk_lock() -{ - [ -f "$xbmklock" ] && err "'$xbmklock' exists. Is a build running?" - touch "$xbmklock" || err "cannot create '$xbmklock'"; : -} - xbmk_create_pathdirs() { remkdir "$XBMK_CACHE/gnupath" "$XBMK_CACHE/xbmkpath" -- cgit v1.2.1 From 253aa81a3f991b8951c964e62859573b7a971440 Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Sun, 18 May 2025 11:25:35 +0100 Subject: init.sh: move PATH init to set_env we must only set this in the parent instance, not child instances. this prevents the variable from being over-populated with repeated entries. Signed-off-by: Leah Rowe --- include/init.sh | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/include/init.sh b/include/init.sh index 807174a8..2c65d0b6 100644 --- a/include/init.sh +++ b/include/init.sh @@ -12,11 +12,10 @@ projectsite="https://libreboot.org/" [ -z "${PATH+x}" ] && \ export PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games" -xbmkpath="$PATH" eval "`setvars "" _nogit board reinstall versiondate aur_notice configdir \ datadir version xbmkpwd relname xbmkpwd xbmktmp python pyver xbmklocal \ - xbmklock cvxbmk cvchk`" + xbmklock cvxbmk cvchk xbmkpath`" xbmk_init() { @@ -123,6 +122,7 @@ xbmk_set_version() xbmk_set_env() { + xbmkpath="$PATH" export LOCALVERSION="-$projectname-${version%%-*}" # XBMK_CACHE is a directory, for caching downloads and git repon @@ -157,6 +157,9 @@ xbmk_set_env() export TMPDIR="/tmp" export TMPDIR="$(mktemp -d -t xbmk_XXXXXXXX)" xbmktmp="$TMPDIR" + + export PATH="$XBMK_CACHE/xbmkpath:$XBMK_CACHE/gnupath:$PATH" + xbmkpath="$PATH" } xbmk_lock() @@ -196,7 +199,6 @@ xbmk_create_tmpdir() xbmk_create_pathdirs() { remkdir "$XBMK_CACHE/gnupath" "$XBMK_CACHE/xbmkpath" - export PATH="$XBMK_CACHE/xbmkpath:$XBMK_CACHE/gnupath:$PATH" ( # set up python v3.x in PATH, in case it's not set up correctly. # see code above that detected the correct python3 command. -- cgit v1.2.1 From c75bc0449d01a3a1495e75998b27fbc2a624a2ce Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Sun, 18 May 2025 11:28:15 +0100 Subject: init.sh: move gnupath creation to create_tmpdir Signed-off-by: Leah Rowe --- include/init.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/init.sh b/include/init.sh index 2c65d0b6..ed11dfd3 100644 --- a/include/init.sh +++ b/include/init.sh @@ -194,11 +194,11 @@ xbmk_create_tmpdir() # /tmp might be a tmpfs, so for large files we use ./tmp, # not to be confused with xbmktmp (xbmktmp points to /tmp) remkdir "$xbmktmp" "$xbmklocal" + remkdir "$XBMK_CACHE/gnupath" "$XBMK_CACHE/xbmkpath" } xbmk_create_pathdirs() { - remkdir "$XBMK_CACHE/gnupath" "$XBMK_CACHE/xbmkpath" ( # set up python v3.x in PATH, in case it's not set up correctly. # see code above that detected the correct python3 command. -- cgit v1.2.1 From 0343081d9050ca62d188face7d6fb401f43ac883 Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Sun, 18 May 2025 11:28:57 +0100 Subject: init.sh: xbmk_create_tmpdir to xbmk_mkdirs this function now simply creates directories that lbmk will use, rather than creating specific directories. Signed-off-by: Leah Rowe --- include/init.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/init.sh b/include/init.sh index ed11dfd3..a49879d9 100644 --- a/include/init.sh +++ b/include/init.sh @@ -31,7 +31,7 @@ xbmk_init() [ "$(id -u)" != "0" ] || err "this command as root is not permitted" for init_cmd in set_pyver set_version set_env lock git_init \ - create_tmpdir create_pathdirs child_exec; do + mkdirs create_pathdirs child_exec; do xbmk_$init_cmd "$@" || break done } @@ -187,7 +187,7 @@ xbmk_git_init() 2>/dev/null; : } -xbmk_create_tmpdir() +xbmk_mkdirs() { x_ mkdir -p "$xbmklocal" -- cgit v1.2.1 From 36ffe6ef501e170d52a54f70713dba8bf88ba5d2 Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Sun, 18 May 2025 11:29:54 +0100 Subject: init.sh: remove useless comment Signed-off-by: Leah Rowe --- include/init.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/include/init.sh b/include/init.sh index a49879d9..b41ca872 100644 --- a/include/init.sh +++ b/include/init.sh @@ -191,8 +191,6 @@ xbmk_mkdirs() { x_ mkdir -p "$xbmklocal" - # /tmp might be a tmpfs, so for large files we use ./tmp, - # not to be confused with xbmktmp (xbmktmp points to /tmp) remkdir "$xbmktmp" "$xbmklocal" remkdir "$XBMK_CACHE/gnupath" "$XBMK_CACHE/xbmkpath" } -- cgit v1.2.1 From 4aa69a7d1f02733d3776e7c18ec081ff8182a75e Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Sun, 18 May 2025 11:30:11 +0100 Subject: init.sh: remove useless command we mkdir -p xbmklocal, only to remkdir it immediately afterward, which is the intended behaviour; on parent instances, xbmklocal is to be re-created fresh. Signed-off-by: Leah Rowe --- include/init.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/include/init.sh b/include/init.sh index b41ca872..ccbad2b5 100644 --- a/include/init.sh +++ b/include/init.sh @@ -189,8 +189,6 @@ xbmk_git_init() xbmk_mkdirs() { - x_ mkdir -p "$xbmklocal" - remkdir "$xbmktmp" "$xbmklocal" remkdir "$XBMK_CACHE/gnupath" "$XBMK_CACHE/xbmkpath" } -- cgit v1.2.1 From d0bee6b4ebba914b0ac2f16689bc23c5f6cbf866 Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Sun, 18 May 2025 11:38:11 +0100 Subject: init.sh: Set python version only on parent Do it after the creation of xbmkpath. This avoids performing an unnecessary check, since PATH will have already been corrected for child instances; Python will already be correct there. Signed-off-by: Leah Rowe --- include/init.sh | 96 ++++++++++++++++++++++++++++----------------------------- 1 file changed, 48 insertions(+), 48 deletions(-) diff --git a/include/init.sh b/include/init.sh index ccbad2b5..6c45b44d 100644 --- a/include/init.sh +++ b/include/init.sh @@ -30,8 +30,8 @@ xbmk_init() id -u 1>/dev/null 2>/dev/null || err "suid check failed (id -u)" [ "$(id -u)" != "0" ] || err "this command as root is not permitted" - for init_cmd in set_pyver set_version set_env lock git_init \ - mkdirs create_pathdirs child_exec; do + for init_cmd in set_version set_env lock git_init \ + mkdirs set_pyver create_pathdirs child_exec; do xbmk_$init_cmd "$@" || break done } @@ -50,52 +50,6 @@ xbmkpkg() printf "You need AUR packages: %s\n" "$aur_notice" 1>&2; : } -xbmk_set_pyver() -{ - pyv="import sys; print(sys.version_info[:])" - python="python3" - pybin python3 1>/dev/null || python="python" - pyver="2" && [ "$python" = "python3" ] && pyver="3" - pybin "$python" 1>/dev/null || pyver="" - [ -z "$pyver" ] || "`pybin "$python"`" -c "$pyv" 1>/dev/null \ - 2>/dev/null || err "Cannot detect host Python version." - [ -n "$pyver" ] && \ - pyver="$("$(pybin "$python")" -c "$pyv" | awk '{print $1}')" && \ - pyver="${pyver#(}" && pyver="${pyver%,}" - [ "${pyver%%.*}" = "3" ] || err "Bad python version (must by 3.x)"; : -} - -# Use direct path, to prevent a hang if Python is using a virtual environment, -# not command -v, to prevent a hang when checking python's version -# See: https://docs.python.org/3/library/venv.html#how-venvs-work -pybin() -{ - py="import sys; quit(1) if sys.prefix == sys.base_prefix else quit(0)" - - venv=1 - command -v "$1" 1>/dev/null 2>/dev/null || venv=0 - [ $venv -lt 1 ] || "$1" -c "$py" 1>/dev/null 2>/dev/null || venv=0 - - # ideally, don't rely on PATH or hardcoded paths if python venv. - # use the *real*, direct executable linked to by the venv symlink - if [ $venv -gt 0 ] && [ -L "`command -v "$1" 2>/dev/null`" ]; then - pypath="$(findpath \ - "$(command -v "$1" 2>/dev/null)" 2>/dev/null || :)" - [ -e "$pypath" ] && [ ! -d "$pypath" ] && \ - [ -x "$pypath" ] && printf "%s\n" "$pypath" && return 0; : - fi - - # if python venv: fall back to common PATH directories for checking - [ $venv -gt 0 ] && for pypath in "/usr/local/bin" "/usr/bin"; do - [ -e "$pypath/$1" ] && [ ! -d "$pypath/$1" ] && \ - [ -x "$pypath/$1" ] && printf "%s/%s\n" "$pypath" "$1" && \ - return 0 - done && return 1 - - # Defer to normal command -v if not a venv - command -v "$1" 2>/dev/null || return 1 -} - xbmk_set_version() { [ ! -f ".version" ] || read -r version < ".version" || :; : @@ -193,6 +147,52 @@ xbmk_mkdirs() remkdir "$XBMK_CACHE/gnupath" "$XBMK_CACHE/xbmkpath" } +xbmk_set_pyver() +{ + pyv="import sys; print(sys.version_info[:])" + python="python3" + pybin python3 1>/dev/null || python="python" + pyver="2" && [ "$python" = "python3" ] && pyver="3" + pybin "$python" 1>/dev/null || pyver="" + [ -z "$pyver" ] || "`pybin "$python"`" -c "$pyv" 1>/dev/null \ + 2>/dev/null || err "Cannot detect host Python version." + [ -n "$pyver" ] && \ + pyver="$("$(pybin "$python")" -c "$pyv" | awk '{print $1}')" && \ + pyver="${pyver#(}" && pyver="${pyver%,}" + [ "${pyver%%.*}" = "3" ] || err "Bad python version (must by 3.x)"; : +} + +# Use direct path, to prevent a hang if Python is using a virtual environment, +# not command -v, to prevent a hang when checking python's version +# See: https://docs.python.org/3/library/venv.html#how-venvs-work +pybin() +{ + py="import sys; quit(1) if sys.prefix == sys.base_prefix else quit(0)" + + venv=1 + command -v "$1" 1>/dev/null 2>/dev/null || venv=0 + [ $venv -lt 1 ] || "$1" -c "$py" 1>/dev/null 2>/dev/null || venv=0 + + # ideally, don't rely on PATH or hardcoded paths if python venv. + # use the *real*, direct executable linked to by the venv symlink + if [ $venv -gt 0 ] && [ -L "`command -v "$1" 2>/dev/null`" ]; then + pypath="$(findpath \ + "$(command -v "$1" 2>/dev/null)" 2>/dev/null || :)" + [ -e "$pypath" ] && [ ! -d "$pypath" ] && \ + [ -x "$pypath" ] && printf "%s\n" "$pypath" && return 0; : + fi + + # if python venv: fall back to common PATH directories for checking + [ $venv -gt 0 ] && for pypath in "/usr/local/bin" "/usr/bin"; do + [ -e "$pypath/$1" ] && [ ! -d "$pypath/$1" ] && \ + [ -x "$pypath/$1" ] && printf "%s/%s\n" "$pypath" "$1" && \ + return 0 + done && return 1 + + # Defer to normal command -v if not a venv + command -v "$1" 2>/dev/null || return 1 +} + xbmk_create_pathdirs() { ( -- cgit v1.2.1 From 484afcb91969b9325c448a6a77ad97a4813f7bfb Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Sun, 18 May 2025 11:40:28 +0100 Subject: init.sh: merge create_pathdirs with set_pyver all this function does now is create the python symlink, based on work that was already performed in set_pyver Signed-off-by: Leah Rowe --- include/init.sh | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/include/init.sh b/include/init.sh index 6c45b44d..13592d83 100644 --- a/include/init.sh +++ b/include/init.sh @@ -31,7 +31,7 @@ xbmk_init() [ "$(id -u)" != "0" ] || err "this command as root is not permitted" for init_cmd in set_version set_env lock git_init \ - mkdirs set_pyver create_pathdirs child_exec; do + mkdirs set_pyver child_exec; do xbmk_$init_cmd "$@" || break done } @@ -159,7 +159,14 @@ xbmk_set_pyver() [ -n "$pyver" ] && \ pyver="$("$(pybin "$python")" -c "$pyv" | awk '{print $1}')" && \ pyver="${pyver#(}" && pyver="${pyver%,}" - [ "${pyver%%.*}" = "3" ] || err "Bad python version (must by 3.x)"; : + [ "${pyver%%.*}" = "3" ] || err "Bad python version (must by 3.x)" + + ( + # set up python v3.x in PATH, in case it's not set up correctly. + # see code above that detected the correct python3 command. + x_ cd "$XBMK_CACHE/xbmkpath" + x_ ln -s "`pybin "$python"`" python + ) || err "Can't set up python symlink in $XBMK_CACHE/xbmkpath"; : } # Use direct path, to prevent a hang if Python is using a virtual environment, @@ -193,16 +200,6 @@ pybin() command -v "$1" 2>/dev/null || return 1 } -xbmk_create_pathdirs() -{ - ( - # set up python v3.x in PATH, in case it's not set up correctly. - # see code above that detected the correct python3 command. - x_ cd "$XBMK_CACHE/xbmkpath" - x_ ln -s "`pybin "$python"`" python - ) || err "Can't set up python symlink in $XBMK_CACHE/xbmkpath"; : -} - xbmk_child_exec() { xbmk_rval=0 -- cgit v1.2.1 From ac36ea7f950a88e56be82e046004c9780c9e0803 Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Sun, 18 May 2025 11:54:51 +0100 Subject: init.sh: initialise variables AFTER path That way, unnecessary work is avoided on child instances. Of course, the current check assumes that TMPDIR wasn't already set by a wily user before running lbmk, but then those sorts of users probably know what they're doing. If they don't know, they will soon find out. Therefore, I have added additional checks on child instances, preventing the build system from running if XBMK_CACHE is not set; if it isn't, then that could very easy lead to certain system files being overwritten. The user must never know what happens if XBMK_CACHE is unset. We simply will not allow it. Signed-off-by: Leah Rowe --- include/init.sh | 37 +++++++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/include/init.sh b/include/init.sh index 13592d83..363f0b18 100644 --- a/include/init.sh +++ b/include/init.sh @@ -76,9 +76,29 @@ xbmk_set_version() xbmk_set_env() { + is_child="n" + xbmkpath="$PATH" export LOCALVERSION="-$projectname-${version%%-*}" + # unify all temporary files/directories in a single TMPDIR + [ -z "${TMPDIR+x}" ] || [ "${TMPDIR%_*}" = "/tmp/xbmk" ] || \ + unset TMPDIR + [ -n "${TMPDIR+x}" ] && export TMPDIR="$TMPDIR" && xbmktmp="$TMPDIR" + [ -z "${TMPDIR+x}" ] || is_child="y" # child instance, so return + + if [ "$is_child" = "y" ]; then + [ -z "${XBMK_CACHE+x}" ] && err "XBMK_CACHE unset on child" + [ -z "${XBMK_THREADS+x}" ] && err "XBMK_THREADS unset on child" + e "lock" f missing && err "lock file absent on child" + return 1 + fi + + # parent instance of xbmk, so don't return. set up TMPDIR + export TMPDIR="/tmp" + export TMPDIR="$(mktemp -d -t xbmk_XXXXXXXX)" + xbmktmp="$TMPDIR" + # XBMK_CACHE is a directory, for caching downloads and git repon [ -z "${XBMK_CACHE+x}" ] && export XBMK_CACHE="$xbmkpwd/cache" [ -z "$XBMK_CACHE" ] && export XBMK_CACHE="$xbmkpwd/cache" @@ -91,6 +111,9 @@ xbmk_set_env() [ ! -e "$XBMK_CACHE" ] || \ [ -d "$XBMK_CACHE" ] || err "cachedir '$XBMK_CACHE' is a file"; : + export PATH="$XBMK_CACHE/xbmkpath:$XBMK_CACHE/gnupath:$PATH" + xbmkpath="$PATH" + # if "y": a coreboot target won't be built if target.cfg says release="n" # (this is used to exclude certain build targets from releases) [ -z "${XBMK_RELEASE+x}" ] && export XBMK_RELEASE="n" @@ -100,20 +123,6 @@ xbmk_set_env() [ -z "${XBMK_THREADS+x}" ] && export XBMK_THREADS=1 expr "X$XBMK_THREADS" : "X-\{0,1\}[0123456789][0123456789]*$" \ 1>/dev/null 2>/dev/null || export XBMK_THREADS=1; : - - # unify all temporary files/directories in a single TMPDIR - [ -z "${TMPDIR+x}" ] || [ "${TMPDIR%_*}" = "/tmp/xbmk" ] || \ - unset TMPDIR - [ -n "${TMPDIR+x}" ] && export TMPDIR="$TMPDIR" && xbmktmp="$TMPDIR" - [ -z "${TMPDIR+x}" ] || return 1 # child instance, so return - - # parent instance of xbmk, so don't return. set up TMPDIR - export TMPDIR="/tmp" - export TMPDIR="$(mktemp -d -t xbmk_XXXXXXXX)" - xbmktmp="$TMPDIR" - - export PATH="$XBMK_CACHE/xbmkpath:$XBMK_CACHE/gnupath:$PATH" - xbmkpath="$PATH" } xbmk_lock() -- cgit v1.2.1 From 6b603b9fbf45f6f391f84ecc8ced7896722f6b02 Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Sun, 18 May 2025 12:07:10 +0100 Subject: init.sh: only set xbmk version on parent instance On child instances, we need only read. Apply the principle of least privilege. Signed-off-by: Leah Rowe --- include/init.sh | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/include/init.sh b/include/init.sh index 363f0b18..e94157f0 100644 --- a/include/init.sh +++ b/include/init.sh @@ -30,7 +30,7 @@ xbmk_init() id -u 1>/dev/null 2>/dev/null || err "suid check failed (id -u)" [ "$(id -u)" != "0" ] || err "this command as root is not permitted" - for init_cmd in set_version set_env lock git_init \ + for init_cmd in get_version set_env lock set_version git_init \ mkdirs set_pyver child_exec; do xbmk_$init_cmd "$@" || break done @@ -50,7 +50,7 @@ xbmkpkg() printf "You need AUR packages: %s\n" "$aur_notice" 1>&2; : } -xbmk_set_version() +xbmk_get_version() { [ ! -f ".version" ] || read -r version < ".version" || :; : [ ! -f ".versiondate" ] || read -r versiondate < ".versiondate" || :; : @@ -68,9 +68,6 @@ xbmk_set_version() --pretty='%ct' HEAD)" || versiondate="$versiondate_" chkvars version versiondate - printf "%s\n" "$version" > ".version" || err "can't save version" - printf "%s\n" "$versiondate" > ".versiondate" || err "can't save date" - relname="$projectname-$version" } @@ -131,6 +128,12 @@ xbmk_lock() touch "$xbmklock" || err "cannot create '$xbmklock'"; : } +xbmk_set_version() +{ + printf "%s\n" "$version" > ".version" || err "can't save version" + printf "%s\n" "$versiondate" > ".versiondate" || err "can't save date" +} + xbmk_git_init() { for gitarg in "--global user.name" "--global user.email"; do -- cgit v1.2.1 From 94437278dc7c3635e760f8781e9e151575845cad Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Sun, 18 May 2025 12:51:56 +0100 Subject: init.sh: simplify unknown version creation we don't need to read or write a file at all, in that case. we only then need to generate one if running ./mk release. the scenario in which no .git and no version files exist is when someone grabs the build system from a snapshot generated by e.g. forgejo instances. it's ill advised, so we advise against it, but it is mitigated in code. Signed-off-by: Leah Rowe --- include/init.sh | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/include/init.sh b/include/init.sh index e94157f0..20d63068 100644 --- a/include/init.sh +++ b/include/init.sh @@ -55,10 +55,8 @@ xbmk_get_version() [ ! -f ".version" ] || read -r version < ".version" || :; : [ ! -f ".versiondate" ] || read -r versiondate < ".versiondate" || :; : - [ -e ".git" ] || [ -f ".version" ] || printf "unknown\n" > ".version" \ - || err "Cannot generate unknown .version file" - [ -e ".git" ] || [ -f ".versiondate" ] || printf "1716415872\n" > \ - ".versiondate" || err "Can't generate unknown versiondate file"; : + [ ! -e ".git" ] && [ ! -f ".version" ] && version="unknown" + [ ! -e ".git" ] && [ ! -f ".versiondate" ] && versiondate="1716415872" version_="$version" [ ! -e ".git" ] || version="$(git describe --tags HEAD 2>&1)" || \ -- cgit v1.2.1 From 99f09f25ef34c6836f0d13cae2ad071504715ddf Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Sun, 18 May 2025 12:58:42 +0100 Subject: init.sh: only update version files on parent don't update them on child instances, since it's a waste of time; the lock file prevents further execution, so we are just wasting time writing to disk. Signed-off-by: Leah Rowe --- include/init.sh | 31 +++++++++++++++++-------------- include/lib.sh | 10 +++++++--- 2 files changed, 24 insertions(+), 17 deletions(-) diff --git a/include/init.sh b/include/init.sh index 20d63068..cd290ebe 100644 --- a/include/init.sh +++ b/include/init.sh @@ -30,7 +30,7 @@ xbmk_init() id -u 1>/dev/null 2>/dev/null || err "suid check failed (id -u)" [ "$(id -u)" != "0" ] || err "this command as root is not permitted" - for init_cmd in get_version set_env lock set_version git_init \ + for init_cmd in get_version set_env lock git_init \ mkdirs set_pyver child_exec; do xbmk_$init_cmd "$@" || break done @@ -58,15 +58,7 @@ xbmk_get_version() [ ! -e ".git" ] && [ ! -f ".version" ] && version="unknown" [ ! -e ".git" ] && [ ! -f ".versiondate" ] && versiondate="1716415872" - version_="$version" - [ ! -e ".git" ] || version="$(git describe --tags HEAD 2>&1)" || \ - version="git-$(git rev-parse HEAD 2>&1)" || version="$version_" - versiondate_="$versiondate" - [ ! -e ".git" ] || versiondate="$(git show --no-patch --no-notes \ - --pretty='%ct' HEAD)" || versiondate="$versiondate_" - - chkvars version versiondate - relname="$projectname-$version" + [ -n "$version" ] && relname="$projectname-$version"; : } xbmk_set_env() @@ -74,7 +66,6 @@ xbmk_set_env() is_child="n" xbmkpath="$PATH" - export LOCALVERSION="-$projectname-${version%%-*}" # unify all temporary files/directories in a single TMPDIR [ -z "${TMPDIR+x}" ] || [ "${TMPDIR%_*}" = "/tmp/xbmk" ] || \ @@ -117,7 +108,10 @@ xbmk_set_env() [ -z "${XBMK_THREADS+x}" ] && export XBMK_THREADS=1 expr "X$XBMK_THREADS" : "X-\{0,1\}[0123456789][0123456789]*$" \ - 1>/dev/null 2>/dev/null || export XBMK_THREADS=1; : + 1>/dev/null 2>/dev/null || export XBMK_THREADS=1 + + xbmk_set_version + export LOCALVERSION="-$projectname-${version%%-*}" } xbmk_lock() @@ -128,8 +122,17 @@ xbmk_lock() xbmk_set_version() { - printf "%s\n" "$version" > ".version" || err "can't save version" - printf "%s\n" "$versiondate" > ".versiondate" || err "can't save date" + version_="$version" + [ ! -e ".git" ] || version="$(git describe --tags HEAD 2>&1)" || \ + version="git-$(git rev-parse HEAD 2>&1)" || version="$version_" + versiondate_="$versiondate" + [ ! -e ".git" ] || versiondate="$(git show --no-patch --no-notes \ + --pretty='%ct' HEAD)" || versiondate="$versiondate_" + + chkvars version versiondate + update_xbmkver "." + + relname="$projectname-$version" } xbmk_git_init() diff --git a/include/lib.sh b/include/lib.sh index 75de7512..6c831795 100644 --- a/include/lib.sh +++ b/include/lib.sh @@ -15,13 +15,17 @@ remkdir() mkrom_tarball() { - printf "%s\n" "$version" > "$1/.version" || err "$1 !version" - printf "%s\n" "$versiondate" > "$1/.versiondate" || err "$1 !vdate" - + update_xbmkver "$1" mktarball "$1" "${1%/*}/${relname}_${1##*/}.tar.xz" x_ rm -Rf "$1" } +update_xbmkver() +{ + printf "%s\n" "$version" > "$1/.version" || err "$1 !version"; : + printf "%s\n" "$versiondate" > "$1/.versiondate" || err "$1 !vdate"; : +} + mktarball() { printf "Creating tar archive '%s' from directory '%s'\n" "$2" "$1" -- cgit v1.2.1 From 485a60e2f6ab0c4eb7b08fd07a2e7be5d0c40402 Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Sun, 18 May 2025 13:08:49 +0100 Subject: init.sh: error if version not read we no longer rely on the .git version being read by child instances, so we MUST ensure that it is being read. Signed-off-by: Leah Rowe --- include/init.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/init.sh b/include/init.sh index cd290ebe..117a1818 100644 --- a/include/init.sh +++ b/include/init.sh @@ -52,8 +52,8 @@ xbmkpkg() xbmk_get_version() { - [ ! -f ".version" ] || read -r version < ".version" || :; : - [ ! -f ".versiondate" ] || read -r versiondate < ".versiondate" || :; : + [ ! -f ".version" ] || read -r version < ".version" || err + [ ! -f ".versiondate" ] || read -r versiondate < ".versiondate" || err [ ! -e ".git" ] && [ ! -f ".version" ] && version="unknown" [ ! -e ".git" ] && [ ! -f ".versiondate" ] && versiondate="1716415872" -- cgit v1.2.1 From 5f022acbf47724adead781136d866e8220a83e6d Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Sun, 18 May 2025 13:10:22 +0100 Subject: init.sh: check version/versiondate once read once again, we are being stricter in child instances. we must ensure that these variables are set by xbmk. Signed-off-by: Leah Rowe --- include/init.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/init.sh b/include/init.sh index 117a1818..ac145f56 100644 --- a/include/init.sh +++ b/include/init.sh @@ -54,6 +54,8 @@ xbmk_get_version() { [ ! -f ".version" ] || read -r version < ".version" || err [ ! -f ".versiondate" ] || read -r versiondate < ".versiondate" || err + [ ! -f ".version" ] || chkvars version + [ ! -f ".versiondate" ] || chkvars versiondate [ ! -e ".git" ] && [ ! -f ".version" ] && version="unknown" [ ! -e ".git" ] && [ ! -f ".versiondate" ] && versiondate="1716415872" -- cgit v1.2.1 From 158c56072c075231eec3422b653f01ddaa451ab6 Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Sun, 18 May 2025 13:25:37 +0100 Subject: init.sh: merge xbmk_mkdirs with set_env it's just two lines, and they relate. Signed-off-by: Leah Rowe --- include/init.sh | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/include/init.sh b/include/init.sh index ac145f56..1791ef78 100644 --- a/include/init.sh +++ b/include/init.sh @@ -30,8 +30,8 @@ xbmk_init() id -u 1>/dev/null 2>/dev/null || err "suid check failed (id -u)" [ "$(id -u)" != "0" ] || err "this command as root is not permitted" - for init_cmd in get_version set_env lock git_init \ - mkdirs set_pyver child_exec; do + for init_cmd in get_version set_env lock git_init set_pyver child_exec + do xbmk_$init_cmd "$@" || break done } @@ -114,6 +114,9 @@ xbmk_set_env() xbmk_set_version export LOCALVERSION="-$projectname-${version%%-*}" + + remkdir "$xbmktmp" "$xbmklocal" + remkdir "$XBMK_CACHE/gnupath" "$XBMK_CACHE/xbmkpath" } xbmk_lock() @@ -156,12 +159,6 @@ xbmk_git_init() 2>/dev/null; : } -xbmk_mkdirs() -{ - remkdir "$xbmktmp" "$xbmklocal" - remkdir "$XBMK_CACHE/gnupath" "$XBMK_CACHE/xbmkpath" -} - xbmk_set_pyver() { pyv="import sys; print(sys.version_info[:])" -- cgit v1.2.1 From 962902a1c4a0b3b9ce942980f42311528d4a4398 Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Sun, 18 May 2025 13:28:31 +0100 Subject: init.sh: set pyver from set_env it's related to this function, no point calling from main Signed-off-by: Leah Rowe --- include/init.sh | 82 +++++++++++++++++++++++++++++---------------------------- 1 file changed, 42 insertions(+), 40 deletions(-) diff --git a/include/init.sh b/include/init.sh index 1791ef78..49193f0f 100644 --- a/include/init.sh +++ b/include/init.sh @@ -30,7 +30,7 @@ xbmk_init() id -u 1>/dev/null 2>/dev/null || err "suid check failed (id -u)" [ "$(id -u)" != "0" ] || err "this command as root is not permitted" - for init_cmd in get_version set_env lock git_init set_pyver child_exec + for init_cmd in get_version set_env lock git_init child_exec do xbmk_$init_cmd "$@" || break done @@ -117,46 +117,8 @@ xbmk_set_env() remkdir "$xbmktmp" "$xbmklocal" remkdir "$XBMK_CACHE/gnupath" "$XBMK_CACHE/xbmkpath" -} - -xbmk_lock() -{ - [ -f "$xbmklock" ] && err "'$xbmklock' exists. Is a build running?" - touch "$xbmklock" || err "cannot create '$xbmklock'"; : -} - -xbmk_set_version() -{ - version_="$version" - [ ! -e ".git" ] || version="$(git describe --tags HEAD 2>&1)" || \ - version="git-$(git rev-parse HEAD 2>&1)" || version="$version_" - versiondate_="$versiondate" - [ ! -e ".git" ] || versiondate="$(git show --no-patch --no-notes \ - --pretty='%ct' HEAD)" || versiondate="$versiondate_" - - chkvars version versiondate - update_xbmkver "." - - relname="$projectname-$version" -} - -xbmk_git_init() -{ - for gitarg in "--global user.name" "--global user.email"; do - gitcmd="git config $gitarg"; $gitcmd 1>/dev/null 2>/dev/null \ - || err "Run this first: $gitcmd \"your ${gitcmd##*.}\"" - done - - [ -L ".git" ] && return 1 - [ -e ".git" ] && return 0 - eval "`setvars "$(date -Rud @$versiondate)" cdate _nogit`" - x_ git init 1>/dev/null 2>/dev/null - x_ git add -A . 1>/dev/null 2>/dev/null - x_ git commit -m "$projectname $version" --date "$cdate" \ - --author="xbmk " 1>/dev/null 2>/dev/null - x_ git tag -a "$version" -m "$projectname $version" 1>/dev/null \ - 2>/dev/null; : + xbmk_set_pyver } xbmk_set_pyver() @@ -212,6 +174,46 @@ pybin() command -v "$1" 2>/dev/null || return 1 } +xbmk_lock() +{ + [ -f "$xbmklock" ] && err "'$xbmklock' exists. Is a build running?" + touch "$xbmklock" || err "cannot create '$xbmklock'"; : +} + +xbmk_set_version() +{ + version_="$version" + [ ! -e ".git" ] || version="$(git describe --tags HEAD 2>&1)" || \ + version="git-$(git rev-parse HEAD 2>&1)" || version="$version_" + versiondate_="$versiondate" + [ ! -e ".git" ] || versiondate="$(git show --no-patch --no-notes \ + --pretty='%ct' HEAD)" || versiondate="$versiondate_" + + chkvars version versiondate + update_xbmkver "." + + relname="$projectname-$version" +} + +xbmk_git_init() +{ + for gitarg in "--global user.name" "--global user.email"; do + gitcmd="git config $gitarg"; $gitcmd 1>/dev/null 2>/dev/null \ + || err "Run this first: $gitcmd \"your ${gitcmd##*.}\"" + done + + [ -L ".git" ] && return 1 + [ -e ".git" ] && return 0 + eval "`setvars "$(date -Rud @$versiondate)" cdate _nogit`" + + x_ git init 1>/dev/null 2>/dev/null + x_ git add -A . 1>/dev/null 2>/dev/null + x_ git commit -m "$projectname $version" --date "$cdate" \ + --author="xbmk " 1>/dev/null 2>/dev/null + x_ git tag -a "$version" -m "$projectname $version" 1>/dev/null \ + 2>/dev/null; : +} + xbmk_child_exec() { xbmk_rval=0 -- cgit v1.2.1 From fc4006ce877231f63a941eca903c0af9416e8ab8 Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Sun, 18 May 2025 13:29:51 +0100 Subject: init.sh: move xbmk_set_version it's called before set_pyver, so move it above that Signed-off-by: Leah Rowe --- include/init.sh | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/include/init.sh b/include/init.sh index 49193f0f..35512469 100644 --- a/include/init.sh +++ b/include/init.sh @@ -121,6 +121,21 @@ xbmk_set_env() xbmk_set_pyver } +xbmk_set_version() +{ + version_="$version" + [ ! -e ".git" ] || version="$(git describe --tags HEAD 2>&1)" || \ + version="git-$(git rev-parse HEAD 2>&1)" || version="$version_" + versiondate_="$versiondate" + [ ! -e ".git" ] || versiondate="$(git show --no-patch --no-notes \ + --pretty='%ct' HEAD)" || versiondate="$versiondate_" + + chkvars version versiondate + update_xbmkver "." + + relname="$projectname-$version" +} + xbmk_set_pyver() { pyv="import sys; print(sys.version_info[:])" @@ -180,21 +195,6 @@ xbmk_lock() touch "$xbmklock" || err "cannot create '$xbmklock'"; : } -xbmk_set_version() -{ - version_="$version" - [ ! -e ".git" ] || version="$(git describe --tags HEAD 2>&1)" || \ - version="git-$(git rev-parse HEAD 2>&1)" || version="$version_" - versiondate_="$versiondate" - [ ! -e ".git" ] || versiondate="$(git show --no-patch --no-notes \ - --pretty='%ct' HEAD)" || versiondate="$versiondate_" - - chkvars version versiondate - update_xbmkver "." - - relname="$projectname-$version" -} - xbmk_git_init() { for gitarg in "--global user.name" "--global user.email"; do -- cgit v1.2.1 From 2702a43a86d51aba2123d620ce2f383d8fc41311 Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Sun, 18 May 2025 13:32:24 +0100 Subject: init.sh: merge xbmk_lock() with xbmk_set_env() it's just two lines, and we want much more granular control of where the lock is enforced. it should be JUST after confirming that the instance is a parent. it is at this moment that we should bail if a lock file exists, because this signals that another instance of xbmk is running. Signed-off-by: Leah Rowe --- include/init.sh | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/include/init.sh b/include/init.sh index 35512469..ee19c398 100644 --- a/include/init.sh +++ b/include/init.sh @@ -30,8 +30,7 @@ xbmk_init() id -u 1>/dev/null 2>/dev/null || err "suid check failed (id -u)" [ "$(id -u)" != "0" ] || err "this command as root is not permitted" - for init_cmd in get_version set_env lock git_init child_exec - do + for init_cmd in get_version set_env git_init child_exec; do xbmk_$init_cmd "$@" || break done } @@ -82,6 +81,9 @@ xbmk_set_env() return 1 fi + [ -f "$xbmklock" ] && err "'$xbmklock' exists. Is a build running?" + touch "$xbmklock" || err "cannot create '$xbmklock'"; : + # parent instance of xbmk, so don't return. set up TMPDIR export TMPDIR="/tmp" export TMPDIR="$(mktemp -d -t xbmk_XXXXXXXX)" @@ -189,12 +191,6 @@ pybin() command -v "$1" 2>/dev/null || return 1 } -xbmk_lock() -{ - [ -f "$xbmklock" ] && err "'$xbmklock' exists. Is a build running?" - touch "$xbmklock" || err "cannot create '$xbmklock'"; : -} - xbmk_git_init() { for gitarg in "--global user.name" "--global user.email"; do -- cgit v1.2.1