From 354e9bd187694d2b98289c29f05b31732177aed8 Mon Sep 17 00:00:00 2001 From: Denis 'GNUtoo' Carikli Date: Wed, 16 Feb 2022 12:44:10 +0100 Subject: [PATCH 1/9] u-boot-stable-src-release: follow u-boot and linux-libre naming conventions Many people using FSDG compliant distributions or wanting to use one are already familiar with linux-libre. This change renames the resulting tarball to u-boot-libre to make it easier for people to understand the goal of this tarball. In addition we also rename the version from v2021.07 (which is the git tag corresponding to the release) to 2021.07 as u-boot upstream tarballs use that. The revision wasn't bumped as we didn't have any releases of u-boot-libre yet. Signed-off-by: Denis 'GNUtoo' Carikli --- resources/scripts/build/release/u-boot-stable-src-release | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/scripts/build/release/u-boot-stable-src-release b/resources/scripts/build/release/u-boot-stable-src-release index 357338cf..97a97628 100755 --- a/resources/scripts/build/release/u-boot-stable-src-release +++ b/resources/scripts/build/release/u-boot-stable-src-release @@ -23,11 +23,11 @@ [ "x${DEBUG+set}" = 'xset' ] && set -v set -u -e -version="v2021.07" +version="2021.07" revision="r1" topdir="$(realpath $(dirname $(realpath $0))/../../../../)" -tmpdir="${topdir}/release/u-boot/u-boot-${version}-${revision}" +tmpdir="${topdir}/release/u-boot-libre/${version}-${revision}/u-boot-libre-${version}-${revision}" tarball="${tmpdir}.tar" printf "Building source code archive, version %s revision %s\n" "${version}" "${revision}" From f955248044767504fb7c6c0e67e545b84cb1008c Mon Sep 17 00:00:00 2001 From: Denis 'GNUtoo' Carikli Date: Wed, 16 Feb 2022 17:58:43 +0100 Subject: [PATCH 2/9] u-boot-stable-src-release: rename to u-boot-libre If the script is named u-boot-stable-src-release and that users see an u-boot-libre tarball they will not make the link between both unless we rename the script. Signed-off-by: Denis 'GNUtoo' Carikli --- .../build/release/{u-boot-stable-src-release => u-boot-libre} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename resources/scripts/build/release/{u-boot-stable-src-release => u-boot-libre} (100%) diff --git a/resources/scripts/build/release/u-boot-stable-src-release b/resources/scripts/build/release/u-boot-libre similarity index 100% rename from resources/scripts/build/release/u-boot-stable-src-release rename to resources/scripts/build/release/u-boot-libre From 4b2d426a206e6182f4e6676b3d6018f05d6e4d98 Mon Sep 17 00:00:00 2001 From: Denis 'GNUtoo' Carikli Date: Wed, 16 Feb 2022 13:35:47 +0100 Subject: [PATCH 3/9] scripts: download: u-boot: Add help and support for multiple revisions Signed-off-by: Denis 'GNUtoo' Carikli --- resources/scripts/download/u-boot | 88 +++++++++++++++++++++++++------ 1 file changed, 73 insertions(+), 15 deletions(-) diff --git a/resources/scripts/download/u-boot b/resources/scripts/download/u-boot index 704d1c3a..ca7883ca 100755 --- a/resources/scripts/download/u-boot +++ b/resources/scripts/download/u-boot @@ -32,6 +32,12 @@ deleteblobs="true" # This script handles the internet, and Git. Both are inherently unreliable. [[ -f build_error ]] && rm -f build_error +# Make sure that older revision are first as code uses that order to +# find the latest supported revision. +supported_uboot_revisions=" \ + v2021.07 \ +" + downloadfor() { uboot_revision="v2021.07" uboot_dir="u-boot/u-boot" @@ -99,25 +105,77 @@ strip_comments() sed '/^$/d' } -printf "Downloading u-boot and (if exist in build system) applying patches\n" -downloadfor +usage() +{ + progname="./download u-boot" -rm -f "build_error" -printf "\n\n" + printf "Usage:\n" + printf "\t%s # %s\n" \ + "${progname}" \ + "Download latest u-boot git revision and deblob it" + printf "\t%s [revision] # %s\n" \ + "${progname}" \ + "Download given u-boot git revision and deblob it" + printf "\t%s --list-revisions # %s\n" \ + "${progname}" \ + "List supported u-boot revisions" + printf "\t%s --help # %s\n" \ + "${progname}" \ + "Prints this help" +} -if [ "${deleteblobs}" = "true" ]; then - bloblist="resources/u-boot/default/blobs.list" +download_uboot_revision() +{ + git_revision="$1" - for blob_path in $(strip_comments "${bloblist}"); do - if echo "${blob_path}" | grep '/$' 2>&1 >/dev/null ; then - printf "Deleting blob directory: '%s/%s'\n" \ - "${uboot_dir}" "${blob_path}" - rm -rf "${uboot_dir}/${blob_path}" - else - printf "Deleting blob file: '%s/%s'\n" \ - "${uboot_dir}" "${blob_path}" - rm -f "${uboot_dir}/${blob_path}" + printf "Downloading u-boot " + printf "and (if exist in build system) applying patches\n" + downloadfor "${git_revision}" + + rm -f "build_error" + printf "\n\n" + + if [ "${deleteblobs}" = "true" ]; then + bloblist="resources/u-boot/default/blobs.list" + for blob_path in $(strip_comments "${bloblist}"); do + if echo "${blob_path}" | \ + grep '/$' 2>&1 >/dev/null ; then + printf "Deleting blob directory: '%s/%s'\n" \ + "${uboot_dir}" "${blob_path}" + rm -rf "${uboot_dir}/${blob_path}" + else + printf "Deleting blob file: '%s/%s'\n" \ + "${uboot_dir}" "${blob_path}" + rm -f "${uboot_dir}/${blob_path}" + fi + done + fi +} + +if [ $# -eq 0 ] ; then + latest_revision="$(echo ${supported_uboot_revisions} | tail -n1)" + download_uboot_revision "${latest_revision}" + exit 0 +elif [ $# -eq 1 -a "$1" == "--help" ] ; then + usage + exit 0 +elif [ $# -eq 1 -a "$1" == "--list-revisions" ] ; then + for revision in ${supported_uboot_revisions} ; do + printf "${revision}\n" + done + exit 0 +elif [ $# -eq 1 ] ; then + found=0 + for revision in ${supported_uboot_revisions} ; do + if [ "${revision}" = "$1" ] ; then + download_uboot_revision "$1" + exit 0 fi done + + printf "Error: Revision '${1}' is not supported\n" + + exit 1 fi + exit 0 From 2bb805e2e07a7d3e1268a09d720ecd13e26af418 Mon Sep 17 00:00:00 2001 From: Denis 'GNUtoo' Carikli Date: Wed, 16 Feb 2022 14:04:16 +0100 Subject: [PATCH 4/9] download: Add --help in the individual download scripts This doesn't change the existing usage of the scripts: - For the Coreboot script, before this change, all arguments that were passed were considered as board to download the Coreboot source code for. Here we added the '--help' and '--list-boards' arguments, so it should not be an issue as it is extremely unlikely that a board would be called '--help' or '--list-boards'. - All the other scripts don't use any arguments so passing --help should not conflict with the existing usage. Signed-off-by: Denis 'GNUtoo' Carikli --- download | 3 ++ resources/scripts/download/coreboot | 36 ++++++++++++++++++++++++ resources/scripts/download/flashrom | 17 +++++++++++ resources/scripts/download/grub | 17 +++++++++++ resources/scripts/download/ich9utils | 17 +++++++++++ resources/scripts/download/memtest86plus | 17 +++++++++++ resources/scripts/download/seabios | 17 +++++++++++ 7 files changed, 124 insertions(+) diff --git a/download b/download index 7d32a353..8de5e225 100755 --- a/download +++ b/download @@ -60,6 +60,9 @@ help() { coreboot trees by default, but './download coreboot x60' will only download the coreboot tree required for the target: x60 + Each program download script should also accept the --help paramater to + display the usage of the script. + Refer to the documentation for more information. EOF } diff --git a/resources/scripts/download/coreboot b/resources/scripts/download/coreboot index 6d0aa353..b94b1bc9 100755 --- a/resources/scripts/download/coreboot +++ b/resources/scripts/download/coreboot @@ -21,6 +21,42 @@ [ "x${DEBUG+set}" = 'xset' ] && set -v set -u -e +list_supported_boards() +{ + for board in resources/coreboot/*; do + echo $board | sed 's#resources/coreboot/##' + done +} + +usage() +{ + progname="./download coreboot" + printf "Usage:\n" + printf "\t%s # %s\n" \ + "${progname}" \ + "Download and deblob Coreboot for all the boards" + printf "\t%s [board [board] ...] # %s\n" \ + "${progname}" \ + "Download and deblob Coreboot for the given boards" + printf "\t%s --list-boards # %s\n" \ + "${progname}" \ + "Prints this help" + printf "\t%s --help # %s\n" \ + "${progname}" \ + "List supported boards" + printf "\t%s --help # %s\n" \ + "${progname}" \ + "Prints this help" +} + +if [ $# -eq 1 -a "$1" == "--help" ] ; then + usage + exit 0 +elif [ $# -eq 1 -a "$1" == "--list-boards" ] ; then + list_supported_boards + exit 0 +fi + # set this when you want to modify each coreboot tree # for example, you want to test custom patches # NODELETE= ./download coreboot diff --git a/resources/scripts/download/flashrom b/resources/scripts/download/flashrom index a22f22f2..c5ff4bac 100755 --- a/resources/scripts/download/flashrom +++ b/resources/scripts/download/flashrom @@ -21,6 +21,23 @@ [ "x${DEBUG+set}" = 'xset' ] && set -v set -u -e +usage() +{ + progname="./download flashrom" + printf "Usage:\n" + printf "\t%s # %s\n" \ + "${progname}" \ + "Download flashrom" + printf "\t%s --help # %s\n" \ + "${progname}" \ + "Prints this help" +} + +if [ $# -ne 0 ] ; then + usage + exit 0 +fi + # Get flashrom at the last previously tested revision # Remove the old version that may still exist: diff --git a/resources/scripts/download/grub b/resources/scripts/download/grub index 47c75bc1..97bae1ed 100755 --- a/resources/scripts/download/grub +++ b/resources/scripts/download/grub @@ -21,6 +21,23 @@ [ "x${DEBUG+set}" = 'xset' ] && set -v set -u -e +usage() +{ + progname="./download grub" + printf "Usage:\n" + printf "\t%s # %s\n" \ + "${progname}" \ + "Download GRUB" + printf "\t%s --help # %s\n" \ + "${progname}" \ + "Prints this help" +} + +if [ $# -ne 0 ] ; then + usage + exit 0 +fi + # Remove the old version that may still exist # ------------------------------------------------------------------------------ diff --git a/resources/scripts/download/ich9utils b/resources/scripts/download/ich9utils index a00f27dd..d8232b03 100755 --- a/resources/scripts/download/ich9utils +++ b/resources/scripts/download/ich9utils @@ -21,6 +21,23 @@ [ "x${DEBUG+set}" = 'xset' ] && set -v set -u -e +usage() +{ + progname="./download ich9utils" + printf "Usage:\n" + printf "\t%s # %s\n" \ + "${progname}" \ + "Download ich9utils" + printf "\t%s --help # %s\n" \ + "${progname}" \ + "Prints this help" +} + +if [ $# -ne 0 ] ; then + usage + exit 0 +fi + printf "Downloading ich9utils\n" if [ -d ich9utils ]; then diff --git a/resources/scripts/download/memtest86plus b/resources/scripts/download/memtest86plus index 1b3da822..c0897c80 100755 --- a/resources/scripts/download/memtest86plus +++ b/resources/scripts/download/memtest86plus @@ -23,6 +23,23 @@ [ "x${DEBUG+set}" = 'xset' ] && set -v set -u -e +usage() +{ + progname="./download memtest86plus" + printf "Usage:\n" + printf "\t%s # %s\n" \ + "${progname}" \ + "Download MemTest86+" + printf "\t%s --help # %s\n" \ + "${progname}" \ + "Prints this help" +} + +if [ $# -ne 0 ] ; then + usage + exit 0 +fi + # Get the last version of MemTest86+ used, apply patches, build it. # Remove the old version that may exist diff --git a/resources/scripts/download/seabios b/resources/scripts/download/seabios index 58ea2bb8..a7c4ab5e 100755 --- a/resources/scripts/download/seabios +++ b/resources/scripts/download/seabios @@ -19,6 +19,23 @@ [ "x${DEBUG+set}" = 'xset' ] && set -v set -u -e +usage() +{ + progname="./download seabios" + printf "Usage:\n" + printf "\t%s # %s\n" \ + "${progname}" \ + "Download SeaBIOS" + printf "\t%s --help # %s\n" \ + "${progname}" \ + "Prints this help" +} + +if [ $# -ne 0 ] ; then + usage + exit 0 +fi + # Get SeaBIOS, revert to commit last used and apply patches. # Remove the old version that may still exist From 1afdbaad1af3376b64cf7e9f7264db8da7070046 Mon Sep 17 00:00:00 2001 From: Denis 'GNUtoo' Carikli Date: Wed, 16 Feb 2022 14:56:13 +0100 Subject: [PATCH 5/9] u-boot-libre: Add reproducible builds and tests The tar options come from the tutorial to remove archives metadata at reproducible-builds.org[1]. [1]https://reproducible-builds.org/docs/archives/ Signed-off-by: Denis 'GNUtoo' Carikli --- Makefile | 9 ++++-- resources/scripts/build/release/u-boot-libre | 8 +++++- tests/u-boot-libre | 29 ++++++++++++++++++++ tests/u-boot-libre.sha512 | 3 ++ 4 files changed, 45 insertions(+), 4 deletions(-) create mode 100755 tests/u-boot-libre create mode 100644 tests/u-boot-libre.sha512 diff --git a/Makefile b/Makefile index 5749c974..2fcb7553 100644 --- a/Makefile +++ b/Makefile @@ -20,9 +20,10 @@ # along with this program. If not, see . # -.PHONY: all download modules ich9m-descriptors payloads roms release clean \ - crossgcc-clean install-dependencies-ubuntu install-dependencies-debian \ - install-dependencies-arch install-dependencies-void +.PHONY: all check download modules ich9m-descriptors payloads roms release \ + clean crossgcc-clean install-dependencies-ubuntu \ + install-dependencies-debian install-dependencies-arch \ + install-dependencies-void all: roms @@ -69,3 +70,5 @@ install-dependencies-arch: install-dependencies-void: ./build dependencies void +check: + ./tests/u-boot-libre diff --git a/resources/scripts/build/release/u-boot-libre b/resources/scripts/build/release/u-boot-libre index 97a97628..0f492421 100755 --- a/resources/scripts/build/release/u-boot-libre +++ b/resources/scripts/build/release/u-boot-libre @@ -48,7 +48,13 @@ rm -rf ${tmpdir}/.git ${tmpdir}/.gitignore make -C ${tmpdir} distclean prefix="$(dirname ${tmpdir} | sed 's#^/*##')/" -tar cf "${tarball}" "${tmpdir}" --transform="s#${prefix}##" +tar cf "${tarball}" "${tmpdir}" \ + --transform="s#${prefix}##" \ + --format=gnu \ + --sort=name \ + --owner=0 --group=0 --numeric-owner \ + --mtime="1970-01-01" \ + lzip -9 --keep -vv "${tarball}" xz -9 --keep -vv "${tarball}" diff --git a/tests/u-boot-libre b/tests/u-boot-libre new file mode 100755 index 00000000..de234024 --- /dev/null +++ b/tests/u-boot-libre @@ -0,0 +1,29 @@ +#!/usr/bin/env bash + +# +# tests for resources/scripts/build/release/u-boot-stable-src-release +# +# Copyright (C) 2022 Denis 'GNUtoo' Carikli +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +[ "x${DEBUG+set}" = 'xset' ] && set -v +set -u -e + +topdir="$(realpath $(dirname $(realpath $0))/../)" +progname="$(basename $(realpath $0))" + +"${topdir}/resources/scripts/build/release/u-boot-libre" +sha512sum -c "${topdir}/tests/${progname}.sha512" diff --git a/tests/u-boot-libre.sha512 b/tests/u-boot-libre.sha512 new file mode 100644 index 00000000..2254c000 --- /dev/null +++ b/tests/u-boot-libre.sha512 @@ -0,0 +1,3 @@ +1684a70273e177cdc4f94da7214198cde5e86bebf76ff29a8e7a7ed8c2470bd392eb4b1ec7eda55ee95335e76123dc28429e90b2015453734f07c28f83358bf2 release/u-boot-libre/2021.07-r1/u-boot-libre-2021.07-r1.tar +3e26aa796759dd5af01795963cc35b1ae9c9e93844c73f22a4881bae30e98f68f8d1695983da76ab5fb8aa9785b0c37d3b8a1186ed5d64b11758a4ae2b146e2c release/u-boot-libre/2021.07-r1/u-boot-libre-2021.07-r1.tar.lz +d6bbd0c311fa7d73a018d2195618a9cff9984502624e83097e94c310557eb47da85f43a9e06bb3bc15828b050d9af0799fbaa828aff0a73e7f0592cccc4a2f47 release/u-boot-libre/2021.07-r1/u-boot-libre-2021.07-r1.tar.xz From 414aa562875477e58684d40d9472cd2b94c3e9b4 Mon Sep 17 00:00:00 2001 From: Denis 'GNUtoo' Carikli Date: Wed, 16 Feb 2022 15:16:33 +0100 Subject: [PATCH 6/9] u-boot-libre: Add help and support for multiple versions Signed-off-by: Denis 'GNUtoo' Carikli --- resources/scripts/build/release/u-boot-libre | 118 ++++++++++++++----- 1 file changed, 88 insertions(+), 30 deletions(-) diff --git a/resources/scripts/build/release/u-boot-libre b/resources/scripts/build/release/u-boot-libre index 0f492421..7aaff3bf 100755 --- a/resources/scripts/build/release/u-boot-libre +++ b/resources/scripts/build/release/u-boot-libre @@ -23,44 +23,102 @@ [ "x${DEBUG+set}" = 'xset' ] && set -v set -u -e -version="2021.07" revision="r1" -topdir="$(realpath $(dirname $(realpath $0))/../../../../)" -tmpdir="${topdir}/release/u-boot-libre/${version}-${revision}/u-boot-libre-${version}-${revision}" -tarball="${tmpdir}.tar" +supported_uboot_versions=" \ + 2021.07 \ +" -printf "Building source code archive, version %s revision %s\n" "${version}" "${revision}" +usage() +{ + progname="resources/scripts/build/release/u-boot-libre" -cd "${topdir}" -"${topdir}/download" u-boot + printf "Usage:\n" + printf "\t%s # %s\n" \ + "${progname}" \ + "Release deblobbed u-boot tarballs for all supported versions" + printf "\t%s [version] # %s\n" \ + "${progname}" \ + "Release deblobbed u-boot tarballs for the given versions" + printf "\t%s --list-versions # %s\n" \ + "${progname}" \ + "List supported u-boot versions" + printf "\t%s --help # %s\n" \ + "${progname}" \ + "Prints this help" +} -rm -rf \ - "${tmpdir}/" \ - "${tarball}" \ - "${tarball}.lz" \ - "${tarball}.xz" +release_deblobbed_uboot() +{ + version="$1" -mkdir -p "$(dirname ${tmpdir})" -cp -R "u-boot/u-boot/" "${tmpdir}" + topdir="$(realpath $(dirname $(realpath $0))/../../../../)" + versiondir="${topdir}/release/u-boot-libre/${version}-${revision}" + tmpdir="${versiondir}/u-boot-libre-${version}-${revision}" + tarball="${tmpdir}.tar" -rm -rf ${tmpdir}/.git ${tmpdir}/.gitignore -make -C ${tmpdir} distclean + printf "Building source code archive, version %s revision %s\n" \ + "${version}" "${revision}" -prefix="$(dirname ${tmpdir} | sed 's#^/*##')/" -tar cf "${tarball}" "${tmpdir}" \ - --transform="s#${prefix}##" \ - --format=gnu \ - --sort=name \ - --owner=0 --group=0 --numeric-owner \ - --mtime="1970-01-01" \ + cd "${topdir}" + "${topdir}/download" u-boot "v${version}" -lzip -9 --keep -vv "${tarball}" -xz -9 --keep -vv "${tarball}" + rm -rf \ + "${tmpdir}/" \ + "${tarball}" \ + "${tarball}.lz" \ + "${tarball}.xz" -rm -rf "${tmpdir}/" + mkdir -p "$(dirname ${tmpdir})" + cp -R "u-boot/u-boot/" "${tmpdir}" -printf "Source code archives available at:\n\t%s\n\t%s\n\t%s\n" \ - "${tarball}" \ - "${tarball}.lz" \ - "${tarball}.xz" + rm -rf ${tmpdir}/.git ${tmpdir}/.gitignore + make -C ${tmpdir} distclean + + prefix="$(dirname ${tmpdir} | sed 's#^/*##')/" + tar cf "${tarball}" "${tmpdir}" \ + --transform="s#${prefix}##" \ + --format=gnu \ + --sort=name \ + --owner=0 --group=0 --numeric-owner \ + --mtime="1970-01-01" \ + + lzip -9 --keep -vv "${tarball}" + xz -9 --keep -vv "${tarball}" + + rm -rf "${tmpdir}/" + + printf "Source code archives available at:\n\t%s\n\t%s\n\t%s\n" \ + "${tarball}" \ + "${tarball}.lz" \ + "${tarball}.xz" +} + +if [ $# -eq 0 ] ; then + for version in ${supported_uboot_versions} ; do + release_deblobbed_uboot "${version}" + done + exit 0 +elif [ $# -eq 1 -a "$1" == "--help" ] ; then + usage + exit 0 +elif [ $# -eq 1 -a "$1" == "--list-versions" ] ; then + for version in ${supported_uboot_versions} ; do + printf "${version}\n" + done + exit 0 +elif [ $# -eq 1 ] ; then + found=0 + for revision in ${supported_uboot_revisions} ; do + if [ "${revision}" = "$1" ] ; then + release_deblobbed_uboot "$1" + exit 0 + fi + done + + printf "Error: Version '${1}' is not supported\n" + + exit 1 +fi + +exit 0 From ee2731af4493e0e9510e1a5f9bb48bb91feaddcc Mon Sep 17 00:00:00 2001 From: Denis 'GNUtoo' Carikli Date: Wed, 16 Feb 2022 15:31:08 +0100 Subject: [PATCH 7/9] boot-libre: ship the blob list too This should enable various distributions and build system to reuse that blob to deblob u-boot releases themselves. Signed-off-by: Denis 'GNUtoo' Carikli --- resources/scripts/build/release/u-boot-libre | 66 ++++++++++++++++++-- resources/scripts/download/u-boot | 39 ++++++++++-- tests/u-boot-libre.sha512 | 3 + 3 files changed, 98 insertions(+), 10 deletions(-) diff --git a/resources/scripts/build/release/u-boot-libre b/resources/scripts/build/release/u-boot-libre index 7aaff3bf..30c5a0ab 100755 --- a/resources/scripts/build/release/u-boot-libre +++ b/resources/scripts/build/release/u-boot-libre @@ -29,6 +29,11 @@ supported_uboot_versions=" \ 2021.07 \ " +topdir="$(realpath $(dirname $(realpath $0))/../../../../)" +uboot_release_topdir="${topdir}/release/u-boot-libre" + +release_files="" + usage() { progname="resources/scripts/build/release/u-boot-libre" @@ -48,13 +53,36 @@ usage() "Prints this help" } +append_release_file() +{ + if [ -z "${release_files}" ] ; then + release_files="${release_files}$1" + else + release_files="${release_files} $1" + fi +} + +append_release_files() +{ + for file in "$@" ; do + append_release_file "${file}" + done +} + +print_release_files() +{ + printf "Source code archives available at:\n" + for file in "${release_files}" ; do + printf "\t${file}\n" + done +} + release_deblobbed_uboot() { version="$1" - topdir="$(realpath $(dirname $(realpath $0))/../../../../)" - versiondir="${topdir}/release/u-boot-libre/${version}-${revision}" - tmpdir="${versiondir}/u-boot-libre-${version}-${revision}" + release_version_dir="${uboot_release_topdir}/${version}-${revision}" + tmpdir="${release_version_dir}/u-boot-libre-${version}-${revision}" tarball="${tmpdir}.tar" printf "Building source code archive, version %s revision %s\n" \ @@ -88,15 +116,44 @@ release_deblobbed_uboot() rm -rf "${tmpdir}/" - printf "Source code archives available at:\n\t%s\n\t%s\n\t%s\n" \ + append_release_files \ "${tarball}" \ "${tarball}.lz" \ "${tarball}.xz" } +release_uboot_blobs_list() +{ + version="$1" + + blobs_list="$(${topdir}/download u-boot --blobs-list v${version})" + + release_version_dir="${uboot_release_topdir}/${version}-${revision}" + destination="${release_version_dir}/blobs-${version}-${revision}.list" + + cd "${topdir}" + + rm -rf \ + "${destination}" \ + "${destination}.lz" \ + "${destination}.xz" + + install -m 755 -d "${release_version_dir}" + install -m 644 -T "${blobs_list}" "${destination}" + + lzip -9 --keep -vv "${destination}" + xz -9 --keep -vv "${destination}" + + append_release_files \ + "${destination}" \ + "${destination}.lz" \ + "${destination}.xz" +} + if [ $# -eq 0 ] ; then for version in ${supported_uboot_versions} ; do release_deblobbed_uboot "${version}" + release_uboot_blobs_list "${version}" done exit 0 elif [ $# -eq 1 -a "$1" == "--help" ] ; then @@ -112,6 +169,7 @@ elif [ $# -eq 1 ] ; then for revision in ${supported_uboot_revisions} ; do if [ "${revision}" = "$1" ] ; then release_deblobbed_uboot "$1" + release_uboot_blobs_list "$1" exit 0 fi done diff --git a/resources/scripts/download/u-boot b/resources/scripts/download/u-boot index ca7883ca..b67d6bd0 100755 --- a/resources/scripts/download/u-boot +++ b/resources/scripts/download/u-boot @@ -110,16 +110,22 @@ usage() progname="./download u-boot" printf "Usage:\n" - printf "\t%s # %s\n" \ + printf "\t%s # %s\n" \ "${progname}" \ "Download latest u-boot git revision and deblob it" - printf "\t%s [revision] # %s\n" \ + printf "\t%s [revision] # %s\n" \ "${progname}" \ "Download given u-boot git revision and deblob it" - printf "\t%s --list-revisions # %s\n" \ + printf "\t%s --blobs-list # %s\n" \ + "${progname}" \ + "Print the path of the blobs.list file for the latest supported u-boot revision" + printf "\t%s --blobs-list [revision] # %s\n" \ + "${progname}" \ + "Print the path of the blobs.list file for the given u-boot revision" + printf "\t%s --list-revisions # %s\n" \ "${progname}" \ "List supported u-boot revisions" - printf "\t%s --help # %s\n" \ + printf "\t%s --help # %s\n" \ "${progname}" \ "Prints this help" } @@ -136,8 +142,8 @@ download_uboot_revision() printf "\n\n" if [ "${deleteblobs}" = "true" ]; then - bloblist="resources/u-boot/default/blobs.list" - for blob_path in $(strip_comments "${bloblist}"); do + blobslist="resources/u-boot/default/blobs.list" + for blob_path in $(strip_comments "${blobslist}"); do if echo "${blob_path}" | \ grep '/$' 2>&1 >/dev/null ; then printf "Deleting blob directory: '%s/%s'\n" \ @@ -152,6 +158,11 @@ download_uboot_revision() fi } +print_blobs_list_path() +{ + printf "resources/u-boot/default/blobs.list\n" +} + if [ $# -eq 0 ] ; then latest_revision="$(echo ${supported_uboot_revisions} | tail -n1)" download_uboot_revision "${latest_revision}" @@ -164,6 +175,22 @@ elif [ $# -eq 1 -a "$1" == "--list-revisions" ] ; then printf "${revision}\n" done exit 0 +elif [ $# -eq 1 -a "$1" == "--blobs-list" ] ; then + latest_revision="$(echo ${supported_uboot_revisions} | tail -n1)" + print_blobs_list_path "${latest_revision}" + exit 0 +elif [ $# -eq 2 -a "$1" == "--blobs-list" ] ; then + found=0 + for revision in ${supported_uboot_revisions} ; do + if [ "${revision}" = "$2" ] ; then + print_blobs_list_path "$2" + exit 0 + fi + done + + printf "Error: Revision '${1}' is not supported\n" + + exit 1 elif [ $# -eq 1 ] ; then found=0 for revision in ${supported_uboot_revisions} ; do diff --git a/tests/u-boot-libre.sha512 b/tests/u-boot-libre.sha512 index 2254c000..8977dac4 100644 --- a/tests/u-boot-libre.sha512 +++ b/tests/u-boot-libre.sha512 @@ -1,3 +1,6 @@ 1684a70273e177cdc4f94da7214198cde5e86bebf76ff29a8e7a7ed8c2470bd392eb4b1ec7eda55ee95335e76123dc28429e90b2015453734f07c28f83358bf2 release/u-boot-libre/2021.07-r1/u-boot-libre-2021.07-r1.tar 3e26aa796759dd5af01795963cc35b1ae9c9e93844c73f22a4881bae30e98f68f8d1695983da76ab5fb8aa9785b0c37d3b8a1186ed5d64b11758a4ae2b146e2c release/u-boot-libre/2021.07-r1/u-boot-libre-2021.07-r1.tar.lz d6bbd0c311fa7d73a018d2195618a9cff9984502624e83097e94c310557eb47da85f43a9e06bb3bc15828b050d9af0799fbaa828aff0a73e7f0592cccc4a2f47 release/u-boot-libre/2021.07-r1/u-boot-libre-2021.07-r1.tar.xz +007968618d182bb26eb13f25720a06f28a59b0a67e5b0e66ae2f7c1246c82139091606e61f780d60496866b31cb037a5a41f207d1b00e293280bcfc17cba8317 release/u-boot-libre/2021.07-r1/blobs-2021.07-r1.list +cc338a69266cc94d3a283a2f0e14660a649573eaf70f11254db00c190a85da5892f9ca78d2d44633d46f90c857297b954ba41d3d9e076a94433326a161f73b61 release/u-boot-libre/2021.07-r1/blobs-2021.07-r1.list.lz +174726b4505a9af850fb15cbfba73c6ea2eeb669352f37e577f37c225c8407f8c0da63f43d0d2285fdd6123fab4ac59233c8bd01bc863ba0e338c8469df10c1c release/u-boot-libre/2021.07-r1/blobs-2021.07-r1.list.xz From 425162db93c50033df08ada44f3a08142bf1ed12 Mon Sep 17 00:00:00 2001 From: Denis 'GNUtoo' Carikli Date: Wed, 16 Feb 2022 17:37:26 +0100 Subject: [PATCH 8/9] boot-libre: add --gen-blob-script to generate a deblob script This should enable various distributions and build system to reuse the generated script to deblob u-boot releases themselves. Signed-off-by: Denis 'GNUtoo' Carikli --- resources/scripts/build/release/u-boot-libre | 39 +++++++- resources/scripts/download/u-boot | 93 ++++++++++++++++++-- tests/u-boot-libre.sha512 | 3 + 3 files changed, 127 insertions(+), 8 deletions(-) diff --git a/resources/scripts/build/release/u-boot-libre b/resources/scripts/build/release/u-boot-libre index 30c5a0ab..a871aab7 100755 --- a/resources/scripts/build/release/u-boot-libre +++ b/resources/scripts/build/release/u-boot-libre @@ -71,8 +71,11 @@ append_release_files() print_release_files() { - printf "Source code archives available at:\n" - for file in "${release_files}" ; do + version="$1" + printf "Source code archives for u-boot-libre-%s-%s available at:\n" \ + "${version}" "${revision}" + + for file in ${release_files} ; do printf "\t${file}\n" done } @@ -150,10 +153,40 @@ release_uboot_blobs_list() "${destination}.xz" } +release_uboot_deblob_script() +{ + version="$1" + + deblob_script="$(${topdir}/download u-boot --gen-deblob-script v${version})" + + release_version_dir="${uboot_release_topdir}/${version}-${revision}" + destination="${release_version_dir}/deblob-${version}-${revision}.sh" + + cd "${topdir}" + + rm -rf \ + "${destination}" \ + "${destination}.lz" \ + "${destination}.xz" + + install -m 755 -d "${release_version_dir}" + install -m 644 -T "${blobs_list}" "${destination}" + + lzip -9 --keep -vv "${destination}" + xz -9 --keep -vv "${destination}" + + append_release_files \ + "${destination}" \ + "${destination}.lz" \ + "${destination}.xz" +} + if [ $# -eq 0 ] ; then for version in ${supported_uboot_versions} ; do release_deblobbed_uboot "${version}" release_uboot_blobs_list "${version}" + release_uboot_deblob_script "${version}" + print_release_files "${version}" done exit 0 elif [ $# -eq 1 -a "$1" == "--help" ] ; then @@ -170,6 +203,8 @@ elif [ $# -eq 1 ] ; then if [ "${revision}" = "$1" ] ; then release_deblobbed_uboot "$1" release_uboot_blobs_list "$1" + release_uboot_deblob_script "$1" + print_release_files "$1" exit 0 fi done diff --git a/resources/scripts/download/u-boot b/resources/scripts/download/u-boot index b67d6bd0..8c94d338 100755 --- a/resources/scripts/download/u-boot +++ b/resources/scripts/download/u-boot @@ -105,27 +105,83 @@ strip_comments() sed '/^$/d' } +generate_deblob_script() +{ + blob_list_file="$1" + output="$2" + + # Add sheebang and copyright headers from this file + awk '{ + if ($0 !~ /^#/ && NF > 0) { + stop=1; + } + if (stop !=1) { + printf("%s\n", $0); + } + }' $0 >> ${output} + + # Add rm -rf before directories and rm -f before files + awk \ + '{ + }{ + if (NF == 0) { + printf("\n"); + } else { + if ($0 !~ /#/ && $NF ~ /\/$/) { + printf("rm -rf %s\n", $0); + } else if ($0 !~ /#/) { + printf("rm -f %s\n", $0); + } else { + # We have comments, try to see if they are + # still valid paths before the comments + comments_found=0 + last_field=0 + for(i=1; i<=NF; i++) { + if($i ~ /#/) { + comments_found=1; + } else if(comments_found != 1) { + last_field=i; + } + } + if (last_field == 0) { + printf("%s\n", $0); + } else if ($last_field ~ /\/$/) { + printf("rm -rf %s\n", $0); + } else { + printf("rm -f %s\n", $0); + } + } + } + }' "${blob_list_file}" >> "${output}" +} + usage() { progname="./download u-boot" printf "Usage:\n" - printf "\t%s # %s\n" \ + printf "\t%s # %s\n" \ "${progname}" \ "Download latest u-boot git revision and deblob it" - printf "\t%s [revision] # %s\n" \ + printf "\t%s [revision] # %s\n" \ "${progname}" \ "Download given u-boot git revision and deblob it" - printf "\t%s --blobs-list # %s\n" \ + printf "\t%s --blobs-list # %s\n" \ "${progname}" \ "Print the path of the blobs.list file for the latest supported u-boot revision" - printf "\t%s --blobs-list [revision] # %s\n" \ + printf "\t%s --blobs-list [revision] # %s\n" \ "${progname}" \ "Print the path of the blobs.list file for the given u-boot revision" - printf "\t%s --list-revisions # %s\n" \ + printf "\t%s --gen-deblob-script # %s\n" \ + "${progname}" \ + "Print the path of the generated deblob script for the latest supported u-boot revision" + printf "\t%s --gen-deblob-script [revision] # %s\n" \ + "${progname}" \ + "Print the path of the generated deblob script for the given u-boot revision" + printf "\t%s --list-revisions # %s\n" \ "${progname}" \ "List supported u-boot revisions" - printf "\t%s --help # %s\n" \ + printf "\t%s --help # %s\n" \ "${progname}" \ "Prints this help" } @@ -163,6 +219,15 @@ print_blobs_list_path() printf "resources/u-boot/default/blobs.list\n" } +print_deblob_script_path() +{ + version="$1" + path="$(mktemp)" + + generate_deblob_script "$(print_blobs_list_path ${version})" "${path}" + printf "%s\n" ${path} +} + if [ $# -eq 0 ] ; then latest_revision="$(echo ${supported_uboot_revisions} | tail -n1)" download_uboot_revision "${latest_revision}" @@ -190,6 +255,22 @@ elif [ $# -eq 2 -a "$1" == "--blobs-list" ] ; then printf "Error: Revision '${1}' is not supported\n" + exit 1 +elif [ $# -eq 1 -a "$1" == "--gen-deblob-script" ] ; then + latest_revision="$(echo ${supported_uboot_revisions} | tail -n1)" + print_deblob_script_path "${latest_revision}" + exit 0 +elif [ $# -eq 2 -a "$1" == "--gen-deblob-script" ] ; then + found=0 + for revision in ${supported_uboot_revisions} ; do + if [ "${revision}" = "$2" ] ; then + print_deblob_script_path "$2" + exit 0 + fi + done + + printf "Error: Revision '${1}' is not supported\n" + exit 1 elif [ $# -eq 1 ] ; then found=0 diff --git a/tests/u-boot-libre.sha512 b/tests/u-boot-libre.sha512 index 8977dac4..4439175b 100644 --- a/tests/u-boot-libre.sha512 +++ b/tests/u-boot-libre.sha512 @@ -4,3 +4,6 @@ d6bbd0c311fa7d73a018d2195618a9cff9984502624e83097e94c310557eb47da85f43a9e06bb3bc 007968618d182bb26eb13f25720a06f28a59b0a67e5b0e66ae2f7c1246c82139091606e61f780d60496866b31cb037a5a41f207d1b00e293280bcfc17cba8317 release/u-boot-libre/2021.07-r1/blobs-2021.07-r1.list cc338a69266cc94d3a283a2f0e14660a649573eaf70f11254db00c190a85da5892f9ca78d2d44633d46f90c857297b954ba41d3d9e076a94433326a161f73b61 release/u-boot-libre/2021.07-r1/blobs-2021.07-r1.list.lz 174726b4505a9af850fb15cbfba73c6ea2eeb669352f37e577f37c225c8407f8c0da63f43d0d2285fdd6123fab4ac59233c8bd01bc863ba0e338c8469df10c1c release/u-boot-libre/2021.07-r1/blobs-2021.07-r1.list.xz +007968618d182bb26eb13f25720a06f28a59b0a67e5b0e66ae2f7c1246c82139091606e61f780d60496866b31cb037a5a41f207d1b00e293280bcfc17cba8317 release/u-boot-libre/2021.07-r1/deblob-2021.07-r1.sh +cc338a69266cc94d3a283a2f0e14660a649573eaf70f11254db00c190a85da5892f9ca78d2d44633d46f90c857297b954ba41d3d9e076a94433326a161f73b61 release/u-boot-libre/2021.07-r1/deblob-2021.07-r1.sh.lz +174726b4505a9af850fb15cbfba73c6ea2eeb669352f37e577f37c225c8407f8c0da63f43d0d2285fdd6123fab4ac59233c8bd01bc863ba0e338c8469df10c1c release/u-boot-libre/2021.07-r1/deblob-2021.07-r1.sh.xz From 8833be159bfff1c417a7459dec323384bcbcb4d0 Mon Sep 17 00:00:00 2001 From: Denis 'GNUtoo' Carikli Date: Wed, 16 Feb 2022 19:33:07 +0100 Subject: [PATCH 9/9] scripts: download: u-boot: fix u-boot repository URL Without that fix we have the following warning during the download: Cloning into 'u-boot/u-boot'... warning: redirecting to https://source.denx.de/u-boot/u-boot.git/ Signed-off-by: Denis 'GNUtoo' Carikli --- resources/scripts/download/u-boot | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/scripts/download/u-boot b/resources/scripts/download/u-boot index 8c94d338..bd0258c0 100755 --- a/resources/scripts/download/u-boot +++ b/resources/scripts/download/u-boot @@ -65,7 +65,7 @@ downloadfor() { if [ ! -d "${uboot_dir}" ]; then printf "Download u-boot from upstream:\n" - git clone https://source.denx.de/u-boot/u-boot \ + git clone https://source.denx.de/u-boot/u-boot.git \ "${uboot_dir}" || \ rm -Rf "${uboot_dir}" if [ ! -d "${uboot_dir}" ]; then