diff --git a/README.md b/README.md index 2d36c3232..c2e6b9662 100644 --- a/README.md +++ b/README.md @@ -74,11 +74,18 @@ Run build tools inside Docker container: ./compile.sh docker ``` -Build minimal CLI Debian buster based image for Odroid XU4. Use modern kernel and write image to the SD card: +Build minimal CLI Armbian Focal image for Orangepi Zero. Use modern kernel and write image to the SD card: ```text -./compile.sh BOARD="odroidxu4" BRANCH="current" RELEASE="buster" CARD_DEVICE="/dev/sda" \ -KERNEL_ONLY="no" KERNEL_CONFIGURE="no" BUILD_DESKTOP="yes" RELEASE="focal" BUILD_DESKTOP="yes" DESKTOP_ENVIRONMENT="xfce" DESKTOP_ENVIRONMENT_CONFIG_NAME="config_full" DESKTOP_APPGROUPS_SELECTED="browsers editors programming" +./compile.sh \ +BOARD=orangepizero \ +BRANCH=current \ +RELEASE=focal \ +BUILD_MINIMAL=yes \ +BUILD_DESKTOP=no \ +KERNEL_ONLY=no \ +KERNEL_CONFIGURE=no \ +CARD_DEVICE="/dev/sda" ``` [Build parameters, advanced build options, user defined configuration, build with Docker?](#additional-information) @@ -137,6 +144,9 @@ Armbian [releases](https://docs.armbian.com/Release_Changelog/) quarterly at the │   ├── boards Board configurations │   ├── bootenv Initial boot loaders environments per family │   ├── bootscripts Initial Boot loaders scripts per family +│   ├── cli CLI packages configurations per distribution +│   ├── desktop Desktop packages configurations per distribution +│   ├── distributions Distributions settings │   ├── kernel Kernel build configurations per family │   ├── sources Kernel and u-boot sources locations and scripts │   ├── templates User configuration templates which populate userpatches diff --git a/compile.sh b/compile.sh index 70530cc58..f3544c4ee 100755 --- a/compile.sh +++ b/compile.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright (c) 2015 Igor Pecovnik, igor.pecovnik@gma**.com +# Copyright (c) 2013-2021 Igor Pecovnik, igor.pecovnik@gma**.com # # This file is licensed under the terms of the GNU General Public # License version 2. This program is licensed "as is" without any @@ -21,18 +21,23 @@ grep -q "[[:space:]]" <<<"${SRC}" && { echo "\"${SRC}\" contains whitespace. Not cd "${SRC}" || exit if [[ -f "${SRC}"/lib/general.sh ]]; then + # shellcheck source=lib/general.sh source "${SRC}"/lib/general.sh + else + echo "Error: missing build directory structure" echo "Please clone the full repository https://github.com/armbian/build/" exit 255 + fi # Add the variables needed at the beginning of the path check_args () { - for p in "$@"; do + +for p in "$@"; do case "${p%=*}" in LIB_TAG) @@ -48,12 +53,16 @@ check_args () ;; esac - done +done + } + check_args "$@" + update_src() { + cd "${SRC}" || exit if [[ ! -f "${SRC}"/.ignore_changes ]]; then echo -e "[\e[0;32m o.k. \x1B[0m] This script will try to update" @@ -62,7 +71,8 @@ update_src() { if [[ -n "${CHANGED_FILES}" ]]; then echo -e "[\e[0;35m warn \x1B[0m] Can't update since you made changes to: \e[0;32m\n${CHANGED_FILES}\x1B[0m" while true; do - echo -e "Press \e[0;33m\x1B[0m or \e[0;33mexit\x1B[0m to abort compilation, \e[0;33m\x1B[0m to ignore and continue, \e[0;33mdiff\x1B[0m to display changes" + echo -e "Press \e[0;33m\x1B[0m or \e[0;33mexit\x1B[0m to abort compilation"\ + ", \e[0;33m\x1B[0m to ignore and continue, \e[0;33mdiff\x1B[0m to display changes" read -r if [[ "${REPLY}" == "diff" ]]; then git diff @@ -79,11 +89,14 @@ update_src() { git pull fi fi + } + TMPFILE=$(mktemp) chmod 644 "${TMPFILE}" { + echo SRC="$SRC" echo LIB_TAG="$LIB_TAG" declare -f update_src @@ -94,15 +107,19 @@ chmod 644 "${TMPFILE}" #do not update/checkout git with root privileges to messup files onwership. #due to in docker/VM, we can't su to a normal user, so do not update/checkout git. if [[ $(systemd-detect-virt) == 'none' ]]; then + if [[ "${EUID}" == "0" ]]; then su "$(stat --format=%U "${SRC}"/.git)" -c "bash ${TMPFILE}" else bash "${TMPFILE}" fi + fi + rm "${TMPFILE}" + if [[ "${EUID}" == "0" ]] || [[ "${1}" == "vagrant" ]]; then : elif [[ "${1}" == docker || "${1}" == dockerpurge || "${1}" == docker-shell ]] && grep -q "$(whoami)" <(getent group docker); then @@ -113,19 +130,23 @@ else exit $? fi -# Check for required packages for compiling + +# Check for required packages if [[ -z "$(command -v dialog)" ]]; then sudo apt-get update sudo apt-get install -y dialog fi + if [[ -z "$(command -v fuser)" ]]; then sudo apt-get update sudo apt-get install -y psmisc fi + if [[ -z "$(command -v getfacl)" ]]; then sudo apt-get update sudo apt-get install -y acl fi + if [[ -z "$(command -v uuidgen)" ]]; then sudo apt-get update sudo apt-get install -y uuid-runtime @@ -138,6 +159,7 @@ if [[ "${1}" == vagrant && -z "$(command -v vagrant)" ]]; then sudo apt-get install -y vagrant virtualbox fi +# Purge Armbian Docker images if [[ "${1}" == dockerpurge && -f /etc/debian_version ]]; then display_alert "Purging Armbian Docker containers" "" "wrn" docker container ls -a | grep armbian | awk '{print $1}' | xargs docker container rm &> /dev/null @@ -146,6 +168,7 @@ if [[ "${1}" == dockerpurge && -f /etc/debian_version ]]; then set -- "docker" "$@" fi +# Docker shell if [[ "${1}" == docker-shell ]]; then shift #shellcheck disable=SC2034 @@ -153,7 +176,7 @@ if [[ "${1}" == docker-shell ]]; then set -- "docker" "$@" fi -# Install Docker if not there but wanted. We cover only Debian based distro install. Else, manual Docker install is needed +# Install Docker if not there but wanted. We cover only Debian based distro install. On other distros, manual Docker install is needed if [[ "${1}" == docker && -f /etc/debian_version && -z "$(command -v docker)" ]]; then DOCKER_BINARY="docker-ce" @@ -185,11 +208,14 @@ if [[ "${1}" == docker && -f /etc/debian_version && -z "$(command -v docker)" ]] display_alert "Add yourself to docker group to avoid root privileges" "" "wrn" "${SRC}/compile.sh" "$@" exit $? + fi + # Create userpatches directory if not exists mkdir -p "${SRC}"/userpatches + # Create example configs if none found in userpatches if ! ls "${SRC}"/userpatches/{config-example.conf,config-docker.conf,config-vagrant.conf} 1> /dev/null 2>&1; then @@ -261,17 +287,23 @@ popd > /dev/null || exit # Script parameters handling while [[ "${1}" == *=* ]]; do - parameter=${1%%=*} - value=${1##*=} - shift - display_alert "Command line: setting $parameter to" "${value:-(empty)}" "info" - eval "$parameter=\"$value\"" + + parameter=${1%%=*} + value=${1##*=} + shift + display_alert "Command line: setting $parameter to" "${value:-(empty)}" "info" + eval "$parameter=\"$value\"" + done if [[ "${BUILD_ALL}" == "yes" || "${BUILD_ALL}" == "demo" ]]; then + # shellcheck source=lib/build-all-ng.sh source "${SRC}"/lib/build-all-ng.sh + else + # shellcheck source=lib/main.sh source "${SRC}"/lib/main.sh + fi diff --git a/config/sources/arm64.conf b/config/sources/arm64.conf index 7b84e4e1f..05ecff87a 100644 --- a/config/sources/arm64.conf +++ b/config/sources/arm64.conf @@ -1,3 +1,14 @@ +#!/bin/bash +# +# Copyright (c) 2013-2021 Igor Pecovnik, igor.pecovnik@gma**.com +# +# This file is licensed under the terms of the GNU General Public +# License version 2. This program is licensed "as is" without any +# warranty of any kind, whether express or implied. +# +# This file is a part of the Armbian build script +# https://github.com/armbian/build/ + NAME_KERNEL="Image" NAME_INITRD="uInitrd" MAIN_CMDLINE="rootflags=data=writeback rw no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0 bootsplash.bootfile=bootsplash.armbian" diff --git a/config/sources/armhf.conf b/config/sources/armhf.conf index 0124e3efc..750e2aceb 100644 --- a/config/sources/armhf.conf +++ b/config/sources/armhf.conf @@ -1,3 +1,14 @@ +#!/bin/bash +# +# Copyright (c) 2013-2021 Igor Pecovnik, igor.pecovnik@gma**.com +# +# This file is licensed under the terms of the GNU General Public +# License version 2. This program is licensed "as is" without any +# warranty of any kind, whether express or implied. +# +# This file is a part of the Armbian build script +# https://github.com/armbian/build/ + NAME_KERNEL="zImage" NAME_INITRD="uInitrd" MAIN_CMDLINE="rootflags=data=writeback rw no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0 bootsplash.bootfile=bootsplash.armbian" @@ -7,6 +18,7 @@ ARCHITECTURE=arm ARCH=armhf KERNEL_IMAGE_TYPE=Image CAN_BUILD_STRETCH=yes + if [ "$(uname -m)" = "aarch64" ]; then [[ -z $UBOOT_COMPILER ]] && UBOOT_COMPILER="arm-linux-gnueabihf-" else diff --git a/lib/build-all-ng.sh b/lib/build-all-ng.sh index 3b4c5ea39..848be3af4 100644 --- a/lib/build-all-ng.sh +++ b/lib/build-all-ng.sh @@ -1,18 +1,20 @@ #!/bin/bash # -# Copyright (c) Authors: https://www.armbian.com/authors +# Copyright (c) 2013-2021 Igor Pecovnik, igor.pecovnik@gma**.com # # This file is licensed under the terms of the GNU General Public # License version 2. This program is licensed "as is" without any # warranty of any kind, whether express or implied. - +# # This file is a part of the Armbian build script # https://github.com/armbian/build/ # Functions: +# unset_all # pack_upload # build_main # array_contains +# check_hash # build_all @@ -47,25 +49,22 @@ fi unset_all () { -unset LINUXFAMILY LINUXCONFIG KERNELDIR KERNELSOURCE KERNELBRANCH BOOTDIR BOOTSOURCE BOOTBRANCH ARCH UBOOT_USE_GCC \ - KERNEL_USE_GCC CPUMIN CPUMAX UBOOT_VER KERNEL_VER GOVERNOR BOOTSIZE BOOTFS_TYPE UBOOT_TOOLCHAIN KERNEL_TOOLCHAIN \ - DEBOOTSTRAP_LIST PACKAGE_LIST_EXCLUDE KERNEL_IMAGE_TYPE write_uboot_platform family_tweaks family_tweaks_bsp \ - setup_write_uboot_platform uboot_custom_postprocess atf_custom_postprocess family_tweaks_s BOOTSCRIPT \ - UBOOT_TARGET_MAP LOCALVERSION UBOOT_COMPILER KERNEL_COMPILER BOOTCONFIG BOOTCONFIG_VAR_NAME INITRD_ARCH BOOTENV_FILE BOOTDELAY \ - ATF_TOOLCHAIN2 MOUNT SDCARD BOOTPATCHDIR KERNELPATCHDIR RELEASE IMAGE_TYPE OVERLAY_PREFIX ASOUND_STATE ATF_COMPILER \ - ATF_USE_GCC ATFSOURCE ATFDIR ATFBRANCH ATFSOURCEDIR PACKAGE_LIST_RM NM_IGNORE_DEVICES DISPLAY_MANAGER \ - family_tweaks_bsp_s CRYPTROOT_ENABLE CRYPTROOT_PASSPHRASE CRYPTROOT_SSH_UNLOCK CRYPTROOT_SSH_UNLOCK_PORT \ - CRYPTROOT_SSH_UNLOCK_KEY_NAME ROOT_MAPPER NETWORK HDMI USB WIRELESS ARMBIANMONITOR FORCE_BOOTSCRIPT_UPDATE \ - UBOOT_TOOLCHAIN2 toolchain2 BUILD_REPOSITORY_URL BUILD_REPOSITORY_COMMIT BUILD_TARGET HOST BUILD_IMAGE \ - DEB_STORAGE REPO_STORAGE REPO_CONFIG REPOSITORY_UPDATE PACKAGE_LIST_RELEASE LOCAL_MIRROR COMPILE_ATF \ - PACKAGE_LIST_BOARD PACKAGE_LIST_FAMILY PACKAGE_LIST_DESKTOP_BOARD PACKAGE_LIST_DESKTOP_FAMILY ATF_COMPILE ATFPATCHDIR OFFSET BOOTSOURCEDIR BOOT_USE_BLOBS \ - BOOT_SOC DDR_BLOB MINILOADER_BLOB BL31_BLOB BOOT_RK3328_USE_AYUFAN_ATF BOOT_USE_BLOBS BOOT_RK3399_LEGACY_HYBRID \ - BOOT_USE_MAINLINE_ATF BOOT_USE_TPL_SPL_BLOB BOOT_SUPPORT_SPI OFFLINE_WORK IMAGE_PARTITION_TABLE BOOT_LOGO UPSTREM_VER FORCED_MONTH_OFFSET \ - PACKAGE_LIST_BOARD_REMOVE PACKAGE_LIST_FAMILY_REMOVE PACKAGE_LIST_DESKTOP_BOARD_REMOVE PACKAGE_LIST_DESKTOP_FAMILY_REMOVE BOOTCONFIG_EDGE \ - DESKTOP_ENVIRONMENT DESKTOP_ENVIRONMENT_CONFIG_NAME DESKTOP_APPGROUPS_SELECTED DESKTOP_APT_FLAGS_SELECTED \ - DESKTOP_ENVIRONMENT_DIRPATH DESKTOP_ENVIRONMENT_PACKAGE_LIST_DIRPATH DESKTOP_ENVIRONMENT_DIRPATH DESKTOP_ENVIRONMENT_PACKAGE_LIST_DIRPATH \ - DESKTOP_CONFIG_PREFIX DESKTOP_CONFIGS_DIR DESKTOP_APPGROUPS_DIR DEBIAN_RECOMMENDS USE_OVERLAYFS aggregated_content DEBOOTSTRAP_COMPONENTS \ - DEBOOTSTRAP_OPTION MAINTAINER MAINTAINERMAIL EXTRAWIFI +unset LINUXFAMILY LINUXCONFIG KERNELDIR KERNELSOURCE KERNELBRANCH BOOTDIR BOOTSOURCE BOOTBRANCH ARCH UBOOT_USE_GCC KERNEL_USE_GCC CPUMIN CPUMAX \ + UBOOT_VER KERNEL_VER GOVERNOR BOOTSIZE BOOTFS_TYPE UBOOT_TOOLCHAIN KERNEL_TOOLCHAIN DEBOOTSTRAP_LIST PACKAGE_LIST_EXCLUDE KERNEL_IMAGE_TYPE \ + write_uboot_platform family_tweaks family_tweaks_bsp setup_write_uboot_platform uboot_custom_postprocess atf_custom_postprocess family_tweaks_s \ + LOCALVERSION UBOOT_COMPILER KERNEL_COMPILER BOOTCONFIG BOOTCONFIG_VAR_NAME INITRD_ARCH BOOTENV_FILE BOOTDELAY ATF_TOOLCHAIN2 MOUNT SDCARD \ + BOOTPATCHDIR KERNELPATCHDIR RELEASE IMAGE_TYPE OVERLAY_PREFIX ASOUND_STATE ATF_COMPILER ATF_USE_GCC ATFSOURCE ATFDIR ATFBRANCH ATFSOURCEDIR \ + PACKAGE_LIST_RM NM_IGNORE_DEVICES DISPLAY_MANAGER family_tweaks_bsp_s CRYPTROOT_ENABLE CRYPTROOT_PASSPHRASE CRYPTROOT_SSH_UNLOCK \ + CRYPTROOT_SSH_UNLOCK_PORT CRYPTROOT_SSH_UNLOCK_KEY_NAME ROOT_MAPPER NETWORK HDMI USB WIRELESS ARMBIANMONITOR FORCE_BOOTSCRIPT_UPDATE \ + UBOOT_TOOLCHAIN2 toolchain2 BUILD_REPOSITORY_URL BUILD_REPOSITORY_COMMIT BUILD_TARGET HOST BUILD_IMAGE DEB_STORAGE REPO_STORAGE REPO_CONFIG \ + REPOSITORY_UPDATE PACKAGE_LIST_RELEASE LOCAL_MIRROR COMPILE_ATF PACKAGE_LIST_BOARD PACKAGE_LIST_FAMILY PACKAGE_LIST_DESKTOP_BOARD \ + PACKAGE_LIST_DESKTOP_FAMILY ATF_COMPILE ATFPATCHDIR OFFSET BOOTSOURCEDIR BOOT_USE_BLOBS BOOT_SOC DDR_BLOB MINILOADER_BLOB BL31_BLOB \ + BOOT_RK3328_USE_AYUFAN_ATF BOOT_USE_BLOBS BOOT_RK3399_LEGACY_HYBRID BOOT_USE_MAINLINE_ATF BOOT_USE_TPL_SPL_BLOB BOOT_SUPPORT_SPI OFFLINE_WORK \ + IMAGE_PARTITION_TABLE BOOT_LOGO UPSTREM_VER FORCED_MONTH_OFFSET PACKAGE_LIST_BOARD_REMOVE PACKAGE_LIST_FAMILY_REMOVE \ + PACKAGE_LIST_DESKTOP_BOARD_REMOVE PACKAGE_LIST_DESKTOP_FAMILY_REMOVE BOOTCONFIG_EDGE DESKTOP_ENVIRONMENT DESKTOP_ENVIRONMENT_CONFIG_NAME \ + DESKTOP_APPGROUPS_SELECTED DESKTOP_APT_FLAGS_SELECTED DESKTOP_ENVIRONMENT_DIRPATH DESKTOP_ENVIRONMENT_PACKAGE_LIST_DIRPATH UBOOT_TARGET_MAP \ + DESKTOP_ENVIRONMENT_DIRPATH DESKTOP_ENVIRONMENT_PACKAGE_LIST_DIRPATH DESKTOP_CONFIG_PREFIX DESKTOP_CONFIGS_DIR DESKTOP_APPGROUPS_DIR \ + DEBIAN_RECOMMENDS USE_OVERLAYFS aggregated_content DEBOOTSTRAP_COMPONENTS DEBOOTSTRAP_OPTION MAINTAINER MAINTAINERMAIL EXTRAWIFI BOOTSCRIPT } pack_upload () diff --git a/lib/chroot-buildpackages.sh b/lib/chroot-buildpackages.sh index eb680e083..82116e1aa 100644 --- a/lib/chroot-buildpackages.sh +++ b/lib/chroot-buildpackages.sh @@ -1,21 +1,25 @@ #!/bin/bash # -# Copyright (c) 2015 Igor Pecovnik, igor.pecovnik@gma**.com +# Copyright (c) 2013-2021 Igor Pecovnik, igor.pecovnik@gma**.com # # This file is licensed under the terms of the GNU General Public # License version 2. This program is licensed "as is" without any # warranty of any kind, whether express or implied. - +# # This file is a part of the Armbian build script # https://github.com/armbian/build/ # Functions: + # create_chroot # chroot_prepare_distccd # chroot_build_packages # chroot_installpackages_local # chroot_installpackages + + + # create_chroot # create_chroot() diff --git a/lib/compilation-prepare.sh b/lib/compilation-prepare.sh index 850c1fd76..4d275f3cf 100644 --- a/lib/compilation-prepare.sh +++ b/lib/compilation-prepare.sh @@ -1,17 +1,21 @@ - +#!/bin/bash # -# Copyright (c) 2015 Igor Pecovnik, igor.pecovnik@gma**.com +# Copyright (c) 2013-2021 Igor Pecovnik, igor.pecovnik@gma**.com # # This file is licensed under the terms of the GNU General Public # License version 2. This program is licensed "as is" without any # warranty of any kind, whether express or implied. - +# # This file is a part of the Armbian build script # https://github.com/armbian/build/ # Functions: + # compilation_prepare + + + compilation_prepare() { diff --git a/lib/compilation.sh b/lib/compilation.sh index 18cc6c1ed..472c633b6 100644 --- a/lib/compilation.sh +++ b/lib/compilation.sh @@ -1,15 +1,16 @@ #!/bin/bash # -# Copyright (c) 2015 Igor Pecovnik, igor.pecovnik@gma**.com +# Copyright (c) 2013-2021 Igor Pecovnik, igor.pecovnik@gma**.com # # This file is licensed under the terms of the GNU General Public # License version 2. This program is licensed "as is" without any # warranty of any kind, whether express or implied. - +# # This file is a part of the Armbian build script # https://github.com/armbian/build/ # Functions: + # compile_atf # compile_uboot # compile_kernel @@ -25,6 +26,9 @@ # userpatch_create # overlayfs_wrapper + + + compile_atf() { if [[ $CLEAN_LEVEL == *make* ]]; then diff --git a/lib/configuration.sh b/lib/configuration.sh index 5859d55ed..bbb547cce 100644 --- a/lib/configuration.sh +++ b/lib/configuration.sh @@ -1,11 +1,11 @@ #!/bin/bash # -# Copyright (c) 2015 Igor Pecovnik, igor.pecovnik@gma**.com +# Copyright (c) 2013-2021 Igor Pecovnik, igor.pecovnik@gma**.com # # This file is licensed under the terms of the GNU General Public # License version 2. This program is licensed "as is" without any # warranty of any kind, whether express or implied. - +# # This file is a part of the Armbian build script # https://github.com/armbian/build/ diff --git a/lib/debootstrap.sh b/lib/debootstrap.sh index 274fd247b..b3ba43a7a 100644 --- a/lib/debootstrap.sh +++ b/lib/debootstrap.sh @@ -1,19 +1,25 @@ -# Copyright (c) 2015 Igor Pecovnik, igor.pecovnik@gma**.com +#!/bin/bash +# +# Copyright (c) 2013-2021 Igor Pecovnik, igor.pecovnik@gma**.com # # This file is licensed under the terms of the GNU General Public # License version 2. This program is licensed "as is" without any # warranty of any kind, whether express or implied. - +# # This file is a part of the Armbian build script # https://github.com/armbian/build/ # Functions: + # debootstrap_ng # create_rootfs_cache # prepare_partitions # update_initramfs # create_image + + + # debootstrap_ng # debootstrap_ng() diff --git a/lib/desktop.sh b/lib/desktop.sh index 18016453a..4efba1f56 100644 --- a/lib/desktop.sh +++ b/lib/desktop.sh @@ -1,17 +1,17 @@ #!/bin/bash - -# Copyright (c) 2015 Igor Pecovnik, igor.pecovnik@gma**.com +# +# Copyright (c) 2013-2021 Igor Pecovnik, igor.pecovnik@gma**.com # # This file is licensed under the terms of the GNU General Public # License version 2. This program is licensed "as is" without any # warranty of any kind, whether express or implied. - +# # This file is a part of the Armbian build script # https://github.com/armbian/build/ # Functions: + # create_desktop_package -# run_on_sdcard # install_ppa_prerequisites # add_apt_sources # add_desktop_package_sources @@ -117,17 +117,6 @@ create_desktop_package () -run_on_sdcard() { - - # Myy : The lack of quotes is deliberate here - # This allows for redirections and pipes easily. - chroot "${SDCARD}" /bin/bash -c "${@}" >> "${DEST}"/debug/install.log - -} - - - - install_ppa_prerequisites() { # Myy : So... The whole idea is that, a good bunch of external sources @@ -143,6 +132,9 @@ install_ppa_prerequisites() { } + + + add_apt_sources() { local potential_paths="" @@ -211,14 +203,18 @@ desktop_postinstall () # disable display manager for the first run run_on_sdcard "systemctl --no-reload disable lightdm.service >/dev/null 2>&1" run_on_sdcard "systemctl --no-reload disable gdm3.service >/dev/null 2>&1" - run_on_sdcard "DEBIAN_FRONTEND=noninteractive apt-get update" >> "${DEST}"/debug/install.log + # update packages index + run_on_sdcard "DEBIAN_FRONTEND=noninteractive apt-get update >/dev/null 2>&1" + + # install per board packages if [[ -n ${PACKAGE_LIST_DESKTOP_BOARD} ]]; then run_on_sdcard "DEBIAN_FRONTEND=noninteractive apt-get -yqq --no-install-recommends install $PACKAGE_LIST_DESKTOP_BOARD" fi + # install per family packages if [[ -n ${PACKAGE_LIST_DESKTOP_FAMILY} ]]; then run_on_sdcard "DEBIAN_FRONTEND=noninteractive apt-get -yqq --no-install-recommends install $PACKAGE_LIST_DESKTOP_FAMILY" fi -} \ No newline at end of file +} diff --git a/lib/distributions.sh b/lib/distributions.sh index 4e670b329..b2acd6cc9 100644 --- a/lib/distributions.sh +++ b/lib/distributions.sh @@ -1,19 +1,24 @@ #!/bin/bash # -# Copyright (c) 2015 Igor Pecovnik, igor.pecovnik@gma**.com +# Copyright (c) 2013-2021 Igor Pecovnik, igor.pecovnik@gma**.com # # This file is licensed under the terms of the GNU General Public # License version 2. This program is licensed "as is" without any # warranty of any kind, whether express or implied. - +# # This file is a part of the Armbian build script # https://github.com/armbian/build/ + # Functions: + # install_common # install_rclocal # install_distribution_specific # post_debootstrap_tweaks + + + install_common() { display_alert "Applying common tweaks" "" "info" diff --git a/lib/image-helpers.sh b/lib/image-helpers.sh index c32cfaa8d..7f4ff1e88 100644 --- a/lib/image-helpers.sh +++ b/lib/image-helpers.sh @@ -1,15 +1,16 @@ #!/bin/bash # -# Copyright (c) 2015 Igor Pecovnik, igor.pecovnik@gma**.com +# Copyright (c) 2013-2021 Igor Pecovnik, igor.pecovnik@gma**.com # # This file is licensed under the terms of the GNU General Public # License version 2. This program is licensed "as is" without any # warranty of any kind, whether express or implied. - +# # This file is a part of the Armbian build script # https://github.com/armbian/build/ # Functions: + # mount_chroot # umount_chroot # unmount_on_exit @@ -18,6 +19,10 @@ # write_uboot # customize_image # install_deb_chroot +# run_on_sdcard + + + # mount_chroot # @@ -25,12 +30,17 @@ # mount_chroot() { + local target=$1 mount -t proc chproc "${target}"/proc mount -t sysfs chsys "${target}"/sys mount -t devtmpfs chdev "${target}"/dev || mount --bind /dev "${target}"/dev mount -t devpts chpts "${target}"/dev/pts -} ############################################################################# + +} + + + # umount_chroot # @@ -38,6 +48,7 @@ mount_chroot() # umount_chroot() { + local target=$1 display_alert "Unmounting" "$target" "info" while grep -Eq "${target}.*(dev|proc|sys)" /proc/mounts @@ -47,12 +58,17 @@ umount_chroot() umount -l "${target}"/sys >/dev/null 2>&1 sleep 5 done -} ############################################################################# + +} + + + # unmount_on_exit # unmount_on_exit() { + trap - INT TERM EXIT umount_chroot "${SDCARD}/" umount -l "${SDCARD}"/tmp >/dev/null 2>&1 @@ -63,12 +79,17 @@ unmount_on_exit() losetup -d "${LOOP}" >/dev/null 2>&1 rm -rf --one-file-system "${SDCARD}" exit_with_error "debootstrap-ng was interrupted" -} ############################################################################# + +} + + + # check_loop_device # check_loop_device() { + local device=$1 if [[ ! -b $device ]]; then if [[ $CONTAINER_COMPAT == yes && -b /tmp/$device ]]; then @@ -78,16 +99,17 @@ check_loop_device() exit_with_error "Device node $device does not exist" fi fi -} ############################################################################# + +} + + + # write_uboot # -# writes u-boot to loop device -# Parameters: -# loopdev: loop device with mounted rootfs image -# write_uboot() { + local loop=$1 revision display_alert "Writing U-boot bootloader" "$loop" "info" TEMP_DIR=$(mktemp -d || exit 1) @@ -105,10 +127,15 @@ write_uboot() write_uboot_platform "${TEMP_DIR}${DIR}" "$loop" [[ $? -ne 0 ]] && exit_with_error "U-boot bootloader failed to install" "@host" rm -rf ${TEMP_DIR} -} ############################################################################# + +} + + + customize_image() { + # for users that need to prepare files at host [[ -f $USERPATCHES_PATH/customize-image-host.sh ]] && source "$USERPATCHES_PATH"/customize-image-host.sh cp "$USERPATCHES_PATH"/customize-image.sh "${SDCARD}"/tmp/customize-image.sh @@ -124,10 +151,15 @@ customize_image() if [[ $CUSTOMIZE_IMAGE_RC != 0 ]]; then exit_with_error "customize-image.sh exited with error (rc: $CUSTOMIZE_IMAGE_RC)" fi -} ############################################################################# + +} + + + install_deb_chroot() { + local package=$1 local variant=$2 local transfer=$3 @@ -149,4 +181,14 @@ install_deb_chroot() chroot "${SDCARD}" /bin/bash -c "DEBIAN_FRONTEND=noninteractive apt-get -yqq $apt_extra --no-install-recommends install $name" >> "${DEST}"/debug/install.log 2>&1 [[ $? -ne 0 ]] && exit_with_error "Installation of $name failed" "${BOARD} ${RELEASE} ${BUILD_DESKTOP} ${LINUXFAMILY}" [[ ${variant} == remote && ${transfer} == yes ]] && rsync -rq "${SDCARD}"/var/cache/apt/archives/*.deb ${DEB_STORAGE}/ + +} + + +run_on_sdcard() +{ + + # Lack of quotes allows for redirections and pipes easily. + chroot "${SDCARD}" /bin/bash -c "${@}" >> "${DEST}"/debug/install.log + } diff --git a/lib/main.sh b/lib/main.sh index 8be02c663..da08ed2b6 100644 --- a/lib/main.sh +++ b/lib/main.sh @@ -1,25 +1,28 @@ #!/bin/bash - -# Copyright (c) 2015 Igor Pecovnik, igor.pecovnik@gma**.com +# +# Copyright (c) 2013-2021 Igor Pecovnik, igor.pecovnik@gma**.com # # This file is licensed under the terms of the GNU General Public # License version 2. This program is licensed "as is" without any # warranty of any kind, whether express or implied. - +# # This file is a part of the Armbian build script # https://github.com/armbian/build/ -# Main program -# + + cleanup_list() { - local varname="${1}" - local list_to_clean="${!varname}" - list_to_clean="${list_to_clean#"${list_to_clean%%[![:space:]]*}"}" - list_to_clean="${list_to_clean%"${list_to_clean##*[![:space:]]}"}" - echo ${list_to_clean} + local varname="${1}" + local list_to_clean="${!varname}" + list_to_clean="${list_to_clean#"${list_to_clean%%[![:space:]]*}"}" + list_to_clean="${list_to_clean%"${list_to_clean##*[![:space:]]}"}" + echo ${list_to_clean} } + + + if [[ $(basename "$0") == main.sh ]]; then echo "Please use compile.sh to start the build process" @@ -27,6 +30,9 @@ if [[ $(basename "$0") == main.sh ]]; then fi + + + # default umask for root is 022 so parent directories won't be group writeable without this # this is used instead of making the chmod in prepare_host() recursive umask 002 @@ -47,39 +53,40 @@ if [[ $BUILD_ALL != "yes" && -z $ROOT_FS_CREATE_ONLY ]]; then fi # We'll use this title on all menus -backtitle="Armbian building script, https://www.armbian.com | Author: Igor Pecovnik" +backtitle="Armbian building script, https://www.armbian.com | https://docs.armbian.com | (c) 2013-2021 Igor Pecovnik " -# if language not set, set to english -[[ -z $LANGUAGE ]] && export LANGUAGE="en_US:en" -# default console if not set -[[ -z $CONSOLE_CHAR ]] && export CONSOLE_CHAR="UTF-8" +# Warnings mitigation +[[ -z $LANGUAGE ]] && export LANGUAGE="en_US:en" # set to english if not set +[[ -z $CONSOLE_CHAR ]] && export CONSOLE_CHAR="UTF-8" # set console to UTF-8 if not set + +# Libraries include -# Load libraries # shellcheck source=debootstrap.sh -source "${SRC}"/lib/debootstrap.sh # system specific install +source "${SRC}"/lib/debootstrap.sh # system specific install # shellcheck source=image-helpers.sh -source "${SRC}"/lib/image-helpers.sh # helpers for OS image building +source "${SRC}"/lib/image-helpers.sh # helpers for OS image building # shellcheck source=distributions.sh -source "${SRC}"/lib/distributions.sh # system specific install +source "${SRC}"/lib/distributions.sh # system specific install # shellcheck source=desktop.sh -source "${SRC}"/lib/desktop.sh # desktop specific install +source "${SRC}"/lib/desktop.sh # desktop specific install # shellcheck source=compilation.sh -source "${SRC}"/lib/compilation.sh # patching and compilation of kernel, uboot, ATF +source "${SRC}"/lib/compilation.sh # patching and compilation of kernel, uboot, ATF # shellcheck source=compilation-prepare.sh -source "${SRC}"/lib/compilation-prepare.sh # kernel plugins - 3rd party drivers that are not upstreamed. Like WG, AUFS, various Wifi +source "${SRC}"/lib/compilation-prepare.sh # drivers that are not upstreamed # shellcheck source=makeboarddeb.sh -source "${SRC}"/lib/makeboarddeb.sh # create board support package +source "${SRC}"/lib/makeboarddeb.sh # board support package # shellcheck source=general.sh -source "${SRC}"/lib/general.sh # general functions +source "${SRC}"/lib/general.sh # general functions # shellcheck source=chroot-buildpackages.sh -source "${SRC}"/lib/chroot-buildpackages.sh # building packages in chroot +source "${SRC}"/lib/chroot-buildpackages.sh # chroot packages building # compress and remove old logs mkdir -p "${DEST}"/debug (cd "${DEST}"/debug && tar -czf logs-"$( /dev/null 2>&1 rm -f "${DEST}"/debug/*.log > /dev/null 2>&1 date +"%d_%m_%Y-%H_%M_%S" > "${DEST}"/debug/timestamp + # delete compressed logs older than 7 days (cd "${DEST}"/debug && find . -name '*.tgz' -mtime +7 -delete) > /dev/null @@ -95,8 +102,12 @@ fi if [[ $PROGRESS_LOG_TO_FILE != yes ]]; then unset PROGRESS_LOG_TO_FILE; fi + + SHOW_WARNING=yes + + if [[ $USE_CCACHE != no ]]; then CCACHE=ccache @@ -111,43 +122,56 @@ else fi + + + if [[ -n $REPOSITORY_UPDATE ]]; then - # select stable/beta configuration - if [[ $BETA == yes ]]; then - DEB_STORAGE=$DEST/debs-beta - REPO_STORAGE=$DEST/repository-beta - REPO_CONFIG="aptly-beta.conf" - else - DEB_STORAGE=$DEST/debs - REPO_STORAGE=$DEST/repository - REPO_CONFIG="aptly.conf" - fi + # select stable/beta configuration + if [[ $BETA == yes ]]; then + DEB_STORAGE=$DEST/debs-beta + REPO_STORAGE=$DEST/repository-beta + REPO_CONFIG="aptly-beta.conf" + else + DEB_STORAGE=$DEST/debs + REPO_STORAGE=$DEST/repository + REPO_CONFIG="aptly.conf" + fi - # For user override - if [[ -f "${USERPATCHES_PATH}"/lib.config ]]; then - display_alert "Using user configuration override" "userpatches/lib.config" "info" - source "${USERPATCHES_PATH}"/lib.config - fi + # For user override + if [[ -f "${USERPATCHES_PATH}"/lib.config ]]; then + display_alert "Using user configuration override" "userpatches/lib.config" "info" + source "${USERPATCHES_PATH}"/lib.config + fi - repo-manipulate "$REPOSITORY_UPDATE" - exit + repo-manipulate "$REPOSITORY_UPDATE" + exit fi + + + if [ "$OFFLINE_WORK" == "yes" ]; then + echo -e "\n" display_alert "* " "You are working offline." display_alert "* " "Sources, time and host will not be checked" echo -e "\n" sleep 3s + else + # we need dialog to display the menu in case not installed. Other stuff gets installed later prepare_host_basic + fi -# if KERNEL_ONLY, KERNEL_CONFIGURE, BOARD, BRANCH or RELEASE are not set, display selection menu + + + +# if KERNEL_ONLY, KERNEL_CONFIGURE, BOARD, BRANCH or RELEASE are not set, display selection menu if [[ -z $KERNEL_ONLY ]]; then options+=("yes" "U-boot and kernel packages") @@ -246,6 +270,9 @@ if [[ -z $BOARD ]]; then done fi + + + if [[ -f $SRC/config/boards/${BOARD}.conf ]]; then BOARD_TYPE='conf' elif [[ -f $SRC/config/boards/${BOARD}.csc ]]; then @@ -258,6 +285,9 @@ elif [[ -f $SRC/config/boards/${BOARD}.tvb ]]; then BOARD_TYPE='tvb' fi + + + # shellcheck source=/dev/null source "${SRC}/config/boards/${BOARD}.${BOARD_TYPE}" LINUXFAMILY="${BOARDFAMILY}" @@ -284,6 +314,7 @@ if [[ -z $BRANCH ]]; then [[ $BRANCH == dev && $SHOW_WARNING == yes ]] && show_developer_warning else + [[ $BRANCH == next ]] && KERNEL_TARGET="next" # next = new legacy. Should stay for backward compatibility, but be removed from menu above # or we left definitions in board configs and only remove menu @@ -291,6 +322,8 @@ else fi + + if [[ $KERNEL_ONLY != yes && -z $RELEASE ]]; then options=() @@ -359,7 +392,10 @@ fi [[ $BUILD_MINIMAL == yes ]] && EXTERNAL=no -[[ ${KERNEL_CONFIGURE} == prebuilt ]] && [[ -z ${REPOSITORY_INSTALL} ]] && REPOSITORY_INSTALL="u-boot,kernel,bsp,armbian-zsh,armbian-config,armbian-firmware${BUILD_DESKTOP:+,armbian-desktop}" + +[[ ${KERNEL_CONFIGURE} == prebuilt ]] && [[ -z ${REPOSITORY_INSTALL} ]] && \ +REPOSITORY_INSTALL="u-boot,kernel,bsp,armbian-zsh,armbian-config,armbian-firmware${BUILD_DESKTOP:+,armbian-desktop}" + #shellcheck source=configuration.sh source "${SRC}"/lib/configuration.sh @@ -490,21 +526,33 @@ fi overlayfs_wrapper "cleanup" + + + # create board support package [[ -n $RELEASE && ! -f ${DEB_STORAGE}/$RELEASE/${BSP_CLI_PACKAGE_FULLNAME}.deb ]] && create_board_package + + # create desktop package [[ -n $RELEASE && $DESKTOP_ENVIRONMENT && ! -f ${DEB_STORAGE}/$RELEASE/${CHOSEN_DESKTOP}_${REVISION}_all.deb ]] && create_desktop_package + + + # build additional packages [[ $EXTERNAL_NEW == compile ]] && chroot_build_packages if [[ $KERNEL_ONLY != yes ]]; then + [[ $BSP_BUILD != yes ]] && debootstrap_ng + else + display_alert "Kernel build done" "@host" "info" display_alert "Target directory" "${DEB_STORAGE}/" "info" display_alert "File name" "${CHOSEN_KERNEL}_${REVISION}_${ARCH}.deb" "info" + fi # hook for function to run after build, i.e. to change owner of $SRC diff --git a/lib/makeboarddeb.sh b/lib/makeboarddeb.sh index ec35f5122..bf6a46541 100644 --- a/lib/makeboarddeb.sh +++ b/lib/makeboarddeb.sh @@ -1,18 +1,21 @@ #!/bin/bash -# Copyright (c) 2015 Igor Pecovnik, igor.pecovnik@gma**.com +# +# Copyright (c) 2021 Igor Pecovnik, igor.pecovnik@gma**.com # # This file is licensed under the terms of the GNU General Public # License version 2. This program is licensed "as is" without any # warranty of any kind, whether express or implied. - +# # This file is a part of the Armbian build script # https://github.com/armbian/build/ -# Create board support packages # # Functions: # create_board_package + + + create_board_package() { display_alert "Creating board support package" "$BOARD $BRANCH" "info"