mirror of
https://github.com/armbian/build
synced 2025-09-24 19:47:06 +07:00
armbian-next: artifacts: firmware/rootfs and actual usage of artifacts during image build
- artifacts: introduce `ARTIFACT_IGNORE_CACHE=yes` - artifacts: introduce `DONT_BUILD_ARTIFACTS`, list of artifacts that if not found cached, fail the build - kernel_package_source() is no more - a long dissertation about kernels, families, and the universe - artifacts: actually use rootfs artifact for image build - artifacts: detangle via artifact_base_dir - artifacts: rootfs: use folders in artifact_name; include cache_type - artifacts: some cleanups / validations - rootfs artifact; drop old rootfs cli - artifacts: new CLI shortcuts; remove old firmware CLI - artifacts: full firmware & usage - use firmware artifacts in image build and install its debs - kernel artifact sans legacy; use tmpdir for .deb target for all packages - legacy artifact versions is no more; pack/unpack now in common obtain; - artifacts: uboot: cleanup legacy renaming, use artifact version directly - artifacts: add firmware (small) artifact - deploy uboot to loop from artifact; allow tty to artifact; todos for cleaning - fixes, kernel dtb/headers conditional; remove `.git` from Makefile url; use mapfile for finding files to hash - completely remove KERNEL_HAS_WORKING_HEADERS_FULL_SOURCE and `kernel_package_callback_linux_headers_full_source()` - don't use realpath for artifact_file_relative - curb some warnings - fix: only install headers & dtbs if such exist - kernel .config hook modification hash versioning - OCI_TARGET_BASE vs per-artifact defaults; only deploy to remote from CLI with OTB - artifact revolver & installing into image - add artifact_map_packages and artifact_map_debs dicts - revolver accumulates all info - REPOSITORY_INSTALL is no more (for uboot/kernel, later others) - rename `VER` to `IMAGE_INSTALLED_KERNEL_VERSION`
This commit is contained in:
@@ -2,26 +2,29 @@
|
||||
|
||||
# This is an internal/core extension.
|
||||
function armbian_kernel_config__disable_module_compression() {
|
||||
display_alert "Disabling module compression and signing / debug / auto version" "armbian-kernel" "debug"
|
||||
# DONE: Disable: signing, and compression of modules, for speed.
|
||||
kernel_config_set_n CONFIG_MODULE_COMPRESS_XZ # No use double-compressing modules
|
||||
kernel_config_set_n CONFIG_MODULE_COMPRESS_ZSTD
|
||||
kernel_config_set_n CONFIG_MODULE_COMPRESS_GZIP
|
||||
kernel_config_set_y CONFIG_MODULE_COMPRESS_NONE
|
||||
kernel_config_modifying_hashes+=("CONFIG_MODULE_COMPRESS_NONE=y" "CONFIG_MODULE_SIG=n" "CONFIG_LOCALVERSION_AUTO=n" "DEBUG_INFO=n")
|
||||
if [[ -f .config ]]; then
|
||||
display_alert "Disabling module compression and signing / debug / auto version" "armbian-kernel" "debug"
|
||||
# DONE: Disable: signing, and compression of modules, for speed.
|
||||
kernel_config_set_n CONFIG_MODULE_COMPRESS_XZ # No use double-compressing modules
|
||||
kernel_config_set_n CONFIG_MODULE_COMPRESS_ZSTD
|
||||
kernel_config_set_n CONFIG_MODULE_COMPRESS_GZIP
|
||||
kernel_config_set_y CONFIG_MODULE_COMPRESS_NONE
|
||||
|
||||
kernel_config_set_n CONFIG_SECURITY_LOCKDOWN_LSM
|
||||
kernel_config_set_n CONFIG_MODULE_SIG # No use signing modules
|
||||
kernel_config_set_n CONFIG_SECURITY_LOCKDOWN_LSM
|
||||
kernel_config_set_n CONFIG_MODULE_SIG # No use signing modules
|
||||
|
||||
# DONE: Disable: version shenanigans
|
||||
kernel_config_set_n CONFIG_LOCALVERSION_AUTO # This causes a mismatch between what Armbian wants and what make produces.
|
||||
# DONE: Disable: version shenanigans
|
||||
kernel_config_set_n CONFIG_LOCALVERSION_AUTO # This causes a mismatch between what Armbian wants and what make produces.
|
||||
|
||||
# DONE: Disable: debug option
|
||||
kernel_config_set_n DEBUG_INFO # Armbian doesn't know how to package a debug kernel.
|
||||
# DONE: Disable: debug option
|
||||
kernel_config_set_n DEBUG_INFO # Armbian doesn't know how to package a debug kernel.
|
||||
|
||||
# @TODO: Enable the options for the extrawifi/drivers; so we don't need to worry about them when updating configs
|
||||
# @TODO: Enable the options for the extrawifi/drivers; so we don't need to worry about them when updating configs
|
||||
fi
|
||||
}
|
||||
|
||||
# Helpers for manipulating kernel config. @TODO: hash of changes made
|
||||
# Helpers for manipulating kernel config.
|
||||
function kernel_config_set_m() {
|
||||
declare module="$1"
|
||||
display_alert "Enabling kernel module" "${module}=m" "debug"
|
||||
|
||||
@@ -64,13 +64,20 @@ function kernel_config_initialize() {
|
||||
cd "${kernel_work_dir}" || exit_with_error "kernel_work_dir does not exist: ${kernel_work_dir}"
|
||||
run_kernel_make olddefconfig
|
||||
|
||||
# Call the extensions. This is _also_ done during the kernel artifact's prepare_version, for consistent caching.
|
||||
call_extensions_kernel_config
|
||||
|
||||
display_alert "Kernel configuration" "${LINUXCONFIG}" "info"
|
||||
}
|
||||
|
||||
function call_extensions_kernel_config() {
|
||||
# Run the core-armbian config modifications here, built-in extensions:
|
||||
# 1) Enable the options for the extrawifi/drivers; so we don't need to worry about them when updating configs
|
||||
# 2) Disable: debug, version shenanigans, signing, and compression of modules, to ensure sanity
|
||||
call_extension_method "armbian_kernel_config" <<- 'ARMBIAN_KERNEL_CONFIG'
|
||||
*Armbian-core default hook point for pre-olddefconfig Kernel config modifications*
|
||||
NOT for user consumption. Do NOT use this hook, this is internal to Armbian.
|
||||
Instead, use `custom_kernel_config` which runs later and can undo anything done by this step.
|
||||
Important: this hook might be run multiple times, and one of them might not have a .config in place.
|
||||
Either way, the hook _must_ add representative changes to the `kernel_config_modifying_hashes` array, for kernel config hashing.
|
||||
ARMBIAN_KERNEL_CONFIG
|
||||
|
||||
# Custom hooks receive a clean / updated config; depending on their modifications, they may need to run olddefconfig again.
|
||||
@@ -79,20 +86,12 @@ function kernel_config_initialize() {
|
||||
Called after ${LINUXCONFIG}.config is put in place (.config).
|
||||
A good place to customize the .config directly.
|
||||
Armbian default Kconfig modifications have already been applied and can be overriden.
|
||||
Important: this hook might be run multiple times, and one of them might not have a .config in place.
|
||||
Either way, the hook _must_ add representative changes to the `kernel_config_modifying_hashes` array, for kernel config hashing.
|
||||
CUSTOM_KERNEL_CONFIG
|
||||
|
||||
display_alert "Kernel configuration" "${LINUXCONFIG}" "info"
|
||||
|
||||
}
|
||||
|
||||
function kernel_config_finalize() {
|
||||
call_extension_method "custom_kernel_config_post_defconfig" <<- 'CUSTOM_KERNEL_CONFIG_POST_DEFCONFIG'
|
||||
*Kernel .config is in place, already processed by Armbian*
|
||||
Called after ${LINUXCONFIG}.config is put in place (.config).
|
||||
After all olddefconfig any Kconfig make is called.
|
||||
A good place to customize the .config last-minute.
|
||||
CUSTOM_KERNEL_CONFIG_POST_DEFCONFIG
|
||||
|
||||
# Now, compare the .config with the previous one, and if they are the same, restore the original date.
|
||||
# This way we avoid unnecessary recompilation of the kernel; even if the .config contents
|
||||
# have not changed, the date will be different, and Kbuild will at least re-link everything.
|
||||
|
||||
@@ -33,6 +33,9 @@ if_enabled_echo() {
|
||||
}
|
||||
|
||||
function prepare_kernel_packaging_debs() {
|
||||
: "${artifact_version:?artifact_version is not set}"
|
||||
: "${kernel_debs_temp_dir:?kernel_debs_temp_dir is not set}"
|
||||
|
||||
declare kernel_work_dir="${1}"
|
||||
declare kernel_dest_install_dir="${2}"
|
||||
declare kernel_version="${3}"
|
||||
@@ -43,16 +46,7 @@ function prepare_kernel_packaging_debs() {
|
||||
declare kernel_version_family="${kernel_version}-${LINUXFAMILY}"
|
||||
|
||||
# Package version. Affects users upgrading from repo!
|
||||
declare package_version="${REVISION}" # default, "classic" Armbian non-version.
|
||||
# If we're building an artifact, use the pre-determined artifact version.
|
||||
if [[ "${artifact_version:-""}" != "" ]]; then
|
||||
if [[ "${artifact_version}" == "undetermined" ]]; then
|
||||
exit_with_error "Undetermined artifact version during kernel deb packaging. This is a bug, report it."
|
||||
fi
|
||||
display_alert "Using artifact version for kernel package version" "${artifact_version}" "info"
|
||||
package_version="${artifact_version}"
|
||||
fi
|
||||
display_alert "Kernel .deb package version" "${package_version}" "info"
|
||||
display_alert "Kernel .deb package version" "${artifact_version}" "info"
|
||||
|
||||
# show incoming tree
|
||||
#display_alert "Kernel install dir" "incoming from KBUILD make" "debug"
|
||||
@@ -89,15 +83,13 @@ function prepare_kernel_packaging_debs() {
|
||||
if [[ "${KERNEL_HAS_WORKING_HEADERS}" == "yes" ]]; then
|
||||
display_alert "Packaging linux-headers" "${LINUXFAMILY} ${LINUXCONFIG}" "info"
|
||||
create_kernel_deb "linux-headers-${BRANCH}-${LINUXFAMILY}" "${debs_target_dir}" kernel_package_callback_linux_headers
|
||||
elif [[ "${KERNEL_HAS_WORKING_HEADERS_FULL_SOURCE}" == "yes" ]]; then
|
||||
display_alert "Packaging linux-headers (full source, experimental)" "${LINUXFAMILY} ${LINUXCONFIG}" "warn"
|
||||
create_kernel_deb "linux-headers-${BRANCH}-${LINUXFAMILY}" "${debs_target_dir}" kernel_package_callback_linux_headers_full_source
|
||||
else
|
||||
display_alert "Skipping linux-headers package" "for ${KERNEL_MAJOR_MINOR} kernel version" "warn"
|
||||
fi
|
||||
}
|
||||
|
||||
function create_kernel_deb() {
|
||||
: "${kernel_debs_temp_dir:?kernel_debs_temp_dir is not set}"
|
||||
declare package_name="${1}"
|
||||
declare deb_output_dir="${2}"
|
||||
declare callback_function="${3}"
|
||||
@@ -151,12 +143,7 @@ function create_kernel_deb() {
|
||||
#display_alert "Package dir" "for package ${package_name}" "debug"
|
||||
#run_host_command_logged tree -C -h -d --du "${package_directory}"
|
||||
|
||||
# Run shellcheck on the produced DEBIAN/xxx scripts
|
||||
dpkg_deb_run_shellcheck_on_scripts "${package_directory}"
|
||||
|
||||
# @TODO: hmm, why doesn't this use fakeroot_dpkg_deb_build() ?
|
||||
declare final_deb_filename="${deb_output_dir}/${package_name}_${REVISION}_${ARCH}.deb" # for compatibility with non-artifacts
|
||||
run_host_command_logged dpkg-deb ${DEB_COMPRESS:+-Z$DEB_COMPRESS} --build "${package_directory}" "${final_deb_filename}" # not KDEB compress, we're not under a Makefile
|
||||
fakeroot_dpkg_deb_build "${package_directory}" "${kernel_debs_temp_dir}/"
|
||||
|
||||
done_with_temp_dir "${cleanup_id}" # changes cwd to "${SRC}" and fires the cleanup function early
|
||||
}
|
||||
@@ -220,7 +207,7 @@ function kernel_package_callback_linux_image() {
|
||||
# Generate a control file
|
||||
cat <<- CONTROL_FILE > "${package_DEBIAN_dir}/control"
|
||||
Package: ${package_name}
|
||||
Version: ${package_version}
|
||||
Version: ${artifact_version}
|
||||
Source: linux-${kernel_version}
|
||||
Architecture: ${ARCH}
|
||||
Maintainer: ${MAINTAINER} <${MAINTAINERMAIL}>
|
||||
@@ -271,7 +258,7 @@ function kernel_package_callback_linux_dtb() {
|
||||
|
||||
# Generate a control file
|
||||
cat <<- CONTROL_FILE > "${package_DEBIAN_dir}/control"
|
||||
Version: ${package_version}
|
||||
Version: ${artifact_version}
|
||||
Maintainer: ${MAINTAINER} <${MAINTAINERMAIL}>
|
||||
Section: kernel
|
||||
Package: ${package_name}
|
||||
@@ -386,7 +373,7 @@ function kernel_package_callback_linux_headers() {
|
||||
# Generate a control file
|
||||
# TODO: libssl-dev is only required if we're signing modules, which is a kernel .config option.
|
||||
cat <<- CONTROL_FILE > "${package_DEBIAN_dir}/control"
|
||||
Version: ${package_version}
|
||||
Version: ${artifact_version}
|
||||
Maintainer: ${MAINTAINER} <${MAINTAINERMAIL}>
|
||||
Section: devel
|
||||
Package: ${package_name}
|
||||
@@ -433,78 +420,3 @@ function kernel_package_callback_linux_headers() {
|
||||
EOT_POSTINST
|
||||
)
|
||||
}
|
||||
|
||||
function kernel_package_callback_linux_headers_full_source() {
|
||||
display_alert "linux-headers packaging full source" "${package_directory}" "debug"
|
||||
|
||||
# targets.
|
||||
local headers_target_dir="${package_directory}/usr/src/linux-headers-${kernel_version_family}" # headers/tools etc
|
||||
local modules_target_dir="${package_directory}/lib/modules/${kernel_version_family}" # symlink to above later
|
||||
|
||||
mkdir -p "${headers_target_dir}" "${modules_target_dir}" # create both dirs
|
||||
run_host_command_logged ln -v -s "/usr/src/linux-headers-${kernel_version_family}" "${modules_target_dir}/build" # Symlink in modules so builds find the headers
|
||||
|
||||
# gather stuff from the linux source tree: ${kernel_work_dir} (NOT the make install destination)
|
||||
# those can be source files or object (binary/compiled) stuff
|
||||
# how to get SRCARCH? only from the makefile itself. ARCH=amd64 then SRCARCH=x86. How to we know? @TODO
|
||||
local SRC_ARCH="${ARCH}"
|
||||
[[ "${SRC_ARCH}" == "amd64" ]] && SRC_ARCH="x86"
|
||||
[[ "${SRC_ARCH}" == "armhf" ]] && SRC_ARCH="arm"
|
||||
|
||||
# Export git tree to the target directory.
|
||||
# @TODO: this is waay too heavy. add a zst tar ball, and extract during postinst.
|
||||
git -C "${kernel_work_dir}" archive --format=tar HEAD | tar -x -C "${headers_target_dir}"
|
||||
|
||||
# @TODO: add Module.symvers if exists
|
||||
|
||||
run_host_command_logged cp -vp "${kernel_work_dir}"/.config "${headers_target_dir}"/.config # copy .config manually to be where it's expected to be
|
||||
|
||||
# Generate a control file
|
||||
cat <<- CONTROL_FILE > "${package_DEBIAN_dir}/control"
|
||||
Version: ${package_version}
|
||||
Maintainer: ${MAINTAINER} <${MAINTAINERMAIL}>
|
||||
Section: devel
|
||||
Package: ${package_name}
|
||||
Architecture: ${ARCH}
|
||||
Provides: linux-headers, linux-headers-armbian, armbian-$BRANCH
|
||||
Depends: make, gcc, libc6-dev, bison, flex, libssl-dev, libelf-dev
|
||||
Description: Armbian Linux $BRANCH full-source headers ${artifact_version_reason:-"${kernel_version_family}"}
|
||||
This package provides kernel header files for ${kernel_version_family}
|
||||
.
|
||||
This is useful for DKMS and building of external modules.
|
||||
CONTROL_FILE
|
||||
|
||||
# Make sure the target dir is clean/not-existing before installing.
|
||||
kernel_package_hook_helper "preinst" <(
|
||||
cat <<- EOT_PREINST
|
||||
if [[ -d "/usr/src/linux-headers-${kernel_version_family}" ]]; then
|
||||
echo "Cleaning pre-existing directory /usr/src/linux-headers-${kernel_version_family} ..."
|
||||
rm -rf "/usr/src/linux-headers-${kernel_version_family}"
|
||||
fi
|
||||
EOT_PREINST
|
||||
)
|
||||
|
||||
# Make sure the target dir is removed before removing the package; that way we don't leave eventual compilation artifacts over there.
|
||||
kernel_package_hook_helper "prerm" <(
|
||||
cat <<- EOT_PRERM
|
||||
if [[ -d "/usr/src/linux-headers-${kernel_version_family}" ]]; then
|
||||
echo "Cleaning directory /usr/src/linux-headers-${kernel_version_family} ..."
|
||||
rm -rf "/usr/src/linux-headers-${kernel_version_family}"
|
||||
fi
|
||||
EOT_PRERM
|
||||
)
|
||||
|
||||
kernel_package_hook_helper "postinst" <(
|
||||
cat <<- EOT_POSTINST
|
||||
cd "/usr/src/linux-headers-${kernel_version_family}"
|
||||
NCPU=\$(grep -c 'processor' /proc/cpuinfo)
|
||||
echo "Compiling kernel-headers tools (${kernel_version_family}) using \$NCPU CPUs - please wait ..."
|
||||
yes "" | make ARCH="${SRC_ARCH}" oldconfig
|
||||
make ARCH="${SRC_ARCH}" -j\$NCPU scripts
|
||||
make ARCH="${SRC_ARCH}" -j\$NCPU M=scripts/mod/
|
||||
make ARCH="${SRC_ARCH}" -j\$NCPU tools/objtool || echo "objtool failed, but thats okay"
|
||||
# @TODO: modules_prepare -- should work with 4.19+
|
||||
echo "Done compiling kernel-headers tools (${kernel_version_family})."
|
||||
EOT_POSTINST
|
||||
)
|
||||
}
|
||||
|
||||
@@ -61,16 +61,11 @@ function compile_kernel() {
|
||||
|
||||
kernel_config # has it's own logging sections inside
|
||||
|
||||
# package the kernel-source .deb
|
||||
LOG_SECTION="kernel_package_source" do_with_logging do_with_hooks kernel_package_source
|
||||
|
||||
# build via make and package .debs; they're separate sub-steps
|
||||
kernel_prepare_build_and_package # has it's own logging sections inside
|
||||
|
||||
display_alert "Done with" "kernel compile" "debug"
|
||||
|
||||
LOG_SECTION="kernel_deploy_pkg" do_with_logging do_with_hooks kernel_deploy_pkg
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
@@ -86,59 +81,6 @@ function kernel_maybe_clean() {
|
||||
fi
|
||||
}
|
||||
|
||||
function kernel_package_source() {
|
||||
[[ "${BUILD_KSRC}" != "yes" ]] && return 0
|
||||
|
||||
display_alert "Creating kernel source package" "${LINUXCONFIG}" "info"
|
||||
|
||||
local ts=${SECONDS}
|
||||
local sources_pkg_dir tarball_size package_size
|
||||
declare cleanup_id="" tmp_src_dir=""
|
||||
prepare_temp_dir_in_workdir_and_schedule_cleanup "ksrc" cleanup_id tmp_src_dir # namerefs
|
||||
|
||||
sources_pkg_dir="${tmp_src_dir}/${CHOSEN_KSRC}_${REVISION}_all"
|
||||
|
||||
mkdir -p "${sources_pkg_dir}"/usr/src/ \
|
||||
"${sources_pkg_dir}/usr/share/doc/linux-source-${version}-${LINUXFAMILY}" \
|
||||
"${sources_pkg_dir}"/DEBIAN
|
||||
|
||||
run_host_command_logged cp -v "${SRC}/config/kernel/${LINUXCONFIG}.config" "${sources_pkg_dir}/usr/src/${LINUXCONFIG}_${version}_${REVISION}_config"
|
||||
run_host_command_logged cp -v COPYING "${sources_pkg_dir}/usr/share/doc/linux-source-${version}-${LINUXFAMILY}/LICENSE"
|
||||
|
||||
display_alert "Compressing sources for the linux-source package" "exporting from git" "info"
|
||||
cd "${kernel_work_dir}" || exit_with_error "Can't cd to kernel_work_dir: ${kernel_work_dir}"
|
||||
|
||||
local tar_prefix="${version}/"
|
||||
local output_tarball="${sources_pkg_dir}/usr/src/linux-source-${version}-${LINUXFAMILY}.tar.zst"
|
||||
|
||||
# export tar with `git archive`; we point it at HEAD, but could be anything else too
|
||||
run_host_command_logged git archive "--prefix=${tar_prefix}" --format=tar HEAD "| zstdmt > '${output_tarball}'"
|
||||
tarball_size="$(du -h -s "${output_tarball}" | awk '{print $1}')"
|
||||
|
||||
cat <<- EOF > "${sources_pkg_dir}"/DEBIAN/control
|
||||
Package: linux-source-${BRANCH}-${LINUXFAMILY}
|
||||
Version: ${version}-${BRANCH}-${LINUXFAMILY}+${REVISION}
|
||||
Architecture: all
|
||||
Maintainer: ${MAINTAINER} <${MAINTAINERMAIL}>
|
||||
Section: kernel
|
||||
Priority: optional
|
||||
Depends: binutils, coreutils
|
||||
Provides: linux-source, linux-source-${version}-${LINUXFAMILY}
|
||||
Recommends: gcc, make
|
||||
Description: This package provides the source code for the Linux kernel $version
|
||||
EOF
|
||||
|
||||
fakeroot_dpkg_deb_build -Znone -z0 "${sources_pkg_dir}" "${sources_pkg_dir}.deb" # do not compress .deb, it already contains a zstd compressed tarball! ignores ${KDEB_COMPRESS} on purpose
|
||||
|
||||
package_size="$(du -h -s "${sources_pkg_dir}.deb" | awk '{print $1}')"
|
||||
|
||||
run_host_command_logged rsync --remove-source-files -r "${sources_pkg_dir}.deb" "${DEB_STORAGE}/"
|
||||
|
||||
display_alert "$(basename "${sources_pkg_dir}.deb" ".deb") packaged" "$((SECONDS - ts)) seconds, ${tarball_size} tarball, ${package_size} .deb" "info"
|
||||
|
||||
done_with_temp_dir "${cleanup_id}" # changes cwd to "${SRC}" and fires the cleanup function early
|
||||
}
|
||||
|
||||
function kernel_prepare_build_and_package() {
|
||||
declare -a build_targets
|
||||
declare kernel_dest_install_dir
|
||||
@@ -175,9 +117,17 @@ function kernel_prepare_build_and_package() {
|
||||
# Fire off the build & package
|
||||
LOG_SECTION="kernel_build" do_with_logging do_with_hooks kernel_build
|
||||
|
||||
# prepare a target dir for the shared, produced kernel .debs, across image/dtb/headers
|
||||
declare cleanup_id_debs="" kernel_debs_temp_dir=""
|
||||
prepare_temp_dir_in_workdir_and_schedule_cleanup "kd" cleanup_id_debs kernel_debs_temp_dir # namerefs
|
||||
|
||||
LOG_SECTION="kernel_package" do_with_logging do_with_hooks kernel_package
|
||||
|
||||
done_with_temp_dir "${cleanup_id}" # changes cwd to "${SRC}" and fires the cleanup function early
|
||||
# This deploys to DEB_STORAGE...
|
||||
LOG_SECTION="kernel_deploy_pkg" do_with_logging do_with_hooks kernel_deploy_pkg
|
||||
|
||||
done_with_temp_dir "${cleanup_id_debs}" # changes cwd to "${SRC}" and fires the cleanup function early
|
||||
done_with_temp_dir "${cleanup_id}" # changes cwd to "${SRC}" and fires the cleanup function early
|
||||
}
|
||||
|
||||
function kernel_build() {
|
||||
@@ -194,6 +144,7 @@ function kernel_build() {
|
||||
|
||||
function kernel_package() {
|
||||
local ts=${SECONDS}
|
||||
cd "${kernel_debs_temp_dir}" || exit_with_error "Can't cd to kernel_debs_temp_dir: ${kernel_debs_temp_dir}"
|
||||
cd "${kernel_work_dir}" || exit_with_error "Can't cd to kernel_work_dir: ${kernel_work_dir}"
|
||||
display_alert "Packaging kernel" "${LINUXFAMILY} ${LINUXCONFIG}" "info"
|
||||
prepare_kernel_packaging_debs "${kernel_work_dir}" "${kernel_dest_install_dir}" "${version}" kernel_install_dirs
|
||||
@@ -201,11 +152,6 @@ function kernel_package() {
|
||||
}
|
||||
|
||||
function kernel_deploy_pkg() {
|
||||
cd "${kernel_work_dir}/.." || exit_with_error "Can't cd to kernel_work_dir: ${kernel_work_dir}"
|
||||
|
||||
# @TODO: rpardini: this is kept for historical reasons... wth?
|
||||
# remove firmware image packages here - easier than patching ~40 packaging scripts at once
|
||||
run_host_command_logged rm -fv "linux-firmware-image-*.deb"
|
||||
|
||||
run_host_command_logged rsync -v --remove-source-files -r ./*.deb "${DEB_STORAGE}/"
|
||||
: "${kernel_debs_temp_dir:?kernel_debs_temp_dir is not set}"
|
||||
run_host_command_logged rsync -v --remove-source-files -r "${kernel_debs_temp_dir}"/*.deb "${DEB_STORAGE}/"
|
||||
}
|
||||
|
||||
@@ -1,22 +1,6 @@
|
||||
function compile_firmware_light_and_possibly_full() {
|
||||
if [[ "${INSTALL_ARMBIAN_FIRMWARE:-yes}" == "yes" ]]; then # Build firmware by default.
|
||||
# Build the "light" version of firmware packages, with no conditions.
|
||||
FULL="" REPLACE="-full" LOG_SECTION="compile_firmware" do_with_logging compile_firmware
|
||||
|
||||
# Now, we'll build the "full" version of firmware packages, if:
|
||||
# 1) We've CI==true, or stdout is not a terminal, or
|
||||
# 2) We've been asked to install it for the board being built, BOARD_FIRMWARE_INSTALL="-full"
|
||||
if [[ "${CI}" == "true" || ! -t 1 || "${BOARD_FIRMWARE_INSTALL}" == "-full" ]]; then
|
||||
# Build the full version of firmware package
|
||||
FULL="-full" REPLACE="" LOG_SECTION="compile_firmware_full" do_with_logging compile_firmware
|
||||
else
|
||||
display_alert "Skipping full firmware package build" "" "info"
|
||||
fi
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
function compile_firmware() {
|
||||
: "${artifact_version:?artifact_version is not set}"
|
||||
|
||||
display_alert "Merging and packaging linux firmware" "@host --> firmware${FULL}" "info"
|
||||
|
||||
declare cleanup_id="" fw_temp_dir=""
|
||||
@@ -66,7 +50,7 @@ function compile_firmware() {
|
||||
# @TODO: rpardini: this needs Conflicts: with the standard Ubuntu/Debian linux-firmware packages and other firmware pkgs in Debian
|
||||
cat <<- END > DEBIAN/control
|
||||
Package: armbian-firmware${FULL}
|
||||
Version: $REVISION
|
||||
Version: ${artifact_version}
|
||||
Architecture: all
|
||||
Maintainer: $MAINTAINER <$MAINTAINERMAIL>
|
||||
Installed-Size: 1
|
||||
@@ -79,18 +63,9 @@ function compile_firmware() {
|
||||
|
||||
cd "${fw_temp_dir}" || exit_with_error "can't change directory"
|
||||
|
||||
# package
|
||||
run_host_command_logged mv -v "armbian-firmware${FULL}" "armbian-firmware${FULL}_${REVISION}_all"
|
||||
display_alert "Building firmware package" "armbian-firmware${FULL}_${REVISION}_all" "info"
|
||||
|
||||
if [[ -n $FULL ]]; then
|
||||
display_alert "Full firmware, very big, avoiding tmpfs" "armbian-firmware${FULL}_${REVISION}_all" "info"
|
||||
fakeroot_dpkg_deb_build "armbian-firmware${FULL}_${REVISION}_all" "${DEB_STORAGE}"
|
||||
else
|
||||
fakeroot_dpkg_deb_build "armbian-firmware${FULL}_${REVISION}_all"
|
||||
run_host_command_logged mv -v "armbian-firmware${FULL}_${REVISION}_all" "armbian-firmware${FULL}"
|
||||
run_host_command_logged rsync -rq "armbian-firmware${FULL}_${REVISION}_all.deb" "${DEB_STORAGE}/"
|
||||
fi
|
||||
# package, directly to DEB_STORAGE; full version might be very big for tmpfs.
|
||||
display_alert "Building firmware package" "armbian-firmware${FULL}" "info"
|
||||
fakeroot_dpkg_deb_build "armbian-firmware${FULL}" "${DEB_STORAGE}"
|
||||
|
||||
done_with_temp_dir "${cleanup_id}" # changes cwd to "${SRC}" and fires the cleanup function early
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@ function kernel_drivers_create_patches() {
|
||||
kernel_drivers_patch_hash="${hash_files}" # outer scope
|
||||
|
||||
if [[ "${hash_only:-"no"}" == "yes" ]]; then
|
||||
display_alert "Hash-only kernel driver requested" "$kernel_drivers_patch_hash - returning" "warn"
|
||||
display_alert "Hash-only kernel driver requested" "$kernel_drivers_patch_hash - returning" "debug"
|
||||
return 0
|
||||
fi
|
||||
|
||||
|
||||
@@ -230,6 +230,8 @@ function deploy_built_uboot_bins_for_one_target_to_packaging_area() {
|
||||
}
|
||||
|
||||
function compile_uboot() {
|
||||
: "${artifact_version:?artifact_version is not set}"
|
||||
|
||||
display_alert "Compiling u-boot" "BOOTSOURCE: ${BOOTSOURCE}" "debug"
|
||||
if [[ -n $BOOTSOURCE ]] && [[ "${BOOTSOURCE}" != "none" ]]; then
|
||||
display_alert "Extensions: fetch custom uboot" "fetch_custom_uboot" "debug"
|
||||
@@ -279,7 +281,7 @@ function compile_uboot() {
|
||||
display_alert "Compiler version" "${UBOOT_COMPILER}gcc '${gcc_version_main}'" "info"
|
||||
[[ -n $toolchain2 ]] && display_alert "Additional compiler version" "${toolchain2_type}gcc $(eval env PATH="${toolchain}:${toolchain2}:${PATH}" "${toolchain2_type}gcc" -dumpfullversion -dumpversion)" "info"
|
||||
|
||||
local uboot_name="${CHOSEN_UBOOT}_${REVISION}_${ARCH}"
|
||||
local uboot_name="${CHOSEN_UBOOT}_${REVISION}_${ARCH}" # @TODO: get rid of CHOSEN_UBOOT
|
||||
|
||||
# create directory structure for the .deb package
|
||||
declare cleanup_id="" uboottempdir=""
|
||||
@@ -338,22 +340,12 @@ function compile_uboot() {
|
||||
$(declare -f setup_write_uboot_platform || true)
|
||||
EOF
|
||||
|
||||
# Package version. Affects users upgrading from repo!
|
||||
declare package_version="${REVISION}" # default, "classic" Armbian non-version.
|
||||
# If we're building an artifact, use the pre-determined artifact version.
|
||||
if [[ "${artifact_version:-""}" != "" ]]; then
|
||||
if [[ "${artifact_version}" == "undetermined" ]]; then
|
||||
exit_with_error "Undetermined artifact version during u-boot deb packaging. This is a bug, report it."
|
||||
fi
|
||||
display_alert "Using artifact version for u-boot package version" "${artifact_version}" "info"
|
||||
package_version="${artifact_version}"
|
||||
fi
|
||||
display_alert "Das U-Boot .deb package version" "${package_version}" "info"
|
||||
display_alert "Das U-Boot .deb package version" "${artifact_version}" "info"
|
||||
|
||||
# set up control file
|
||||
cat <<- EOF > "$uboottempdir/${uboot_name}/DEBIAN/control"
|
||||
Package: linux-u-boot-${BOARD}-${BRANCH}
|
||||
Version: ${package_version}
|
||||
Version: ${artifact_version}
|
||||
Architecture: $ARCH
|
||||
Maintainer: $MAINTAINER <$MAINTAINERMAIL>
|
||||
Installed-Size: 1
|
||||
@@ -371,16 +363,10 @@ function compile_uboot() {
|
||||
[[ -f Licenses/README ]] && run_host_command_logged cp Licenses/README "$uboottempdir/${uboot_name}/usr/lib/u-boot/LICENSE"
|
||||
[[ -n $atftempdir && -f $atftempdir/license.md ]] && run_host_command_logged cp "${atftempdir}/license.md" "$uboottempdir/${uboot_name}/usr/lib/u-boot/LICENSE.atf"
|
||||
|
||||
# Important: this forces the deb to have a specific name, and not be version-dependent...
|
||||
# This is set to `uboot_name="${CHOSEN_UBOOT}_${REVISION}_${ARCH}"` in outer scope...
|
||||
display_alert "Building u-boot deb" "(version: ${package_version}) ${uboot_name}.deb"
|
||||
fakeroot_dpkg_deb_build "$uboottempdir/${uboot_name}" "$uboottempdir/${uboot_name}.deb"
|
||||
rm -rf "${uboottempdir:?}/${uboot_name:?}"
|
||||
[[ -n $atftempdir ]] && rm -rf "${atftempdir:?}"
|
||||
display_alert "Building u-boot deb" "(version: ${artifact_version})"
|
||||
fakeroot_dpkg_deb_build "$uboottempdir/${uboot_name}" "${DEB_STORAGE}"
|
||||
|
||||
[[ ! -f $uboottempdir/${uboot_name}.deb ]] && exit_with_error "Building u-boot package failed"
|
||||
|
||||
run_host_command_logged rsync --remove-source-files -r "$uboottempdir/${uboot_name}.deb" "${DEB_STORAGE}/"
|
||||
[[ -n $atftempdir ]] && rm -rf "${atftempdir:?}" # @TODO: intricate cleanup; u-boot's pkg uses ATF's tempdir...
|
||||
|
||||
done_with_temp_dir "${cleanup_id}" # changes cwd to "${SRC}" and fires the cleanup function early
|
||||
|
||||
|
||||
Reference in New Issue
Block a user