diff --git a/lib/chroot-buildpackages.sh b/lib/chroot-buildpackages.sh index 4318c2c7f..a664ca35c 100644 --- a/lib/chroot-buildpackages.sh +++ b/lib/chroot-buildpackages.sh @@ -301,13 +301,13 @@ chroot_installpackages_local() local conf="${SRC}"/config/aptly-temp.conf rm -rf /tmp/aptly-temp/ mkdir -p /tmp/aptly-temp/ - aptly -config="${conf}" repo create temp + aptly -config="${conf}" repo create temp >> "${DEST}"/debug/install.log # NOTE: this works recursively - aptly -config="${conf}" repo add temp "${DEB_STORAGE}/extra/${RELEASE}-desktop/" - aptly -config="${conf}" repo add temp "${DEB_STORAGE}/extra/${RELEASE}-utils/" + aptly -config="${conf}" repo add temp "${DEB_STORAGE}/extra/${RELEASE}-desktop/" >> "${DEST}"/debug/install.log + aptly -config="${conf}" repo add temp "${DEB_STORAGE}/extra/${RELEASE}-utils/" >> "${DEST}"/debug/install.log # -gpg-key="925644A6" aptly -keyring="${SRC}/packages/extras-buildpkgs/buildpkg-public.gpg" -secret-keyring="${SRC}/packages/extras-buildpkgs/buildpkg.gpg" -batch=true -config="${conf}" \ - -gpg-key="925644A6" -passphrase="testkey1234" -component=temp -distribution="${RELEASE}" publish repo temp + -gpg-key="925644A6" -passphrase="testkey1234" -component=temp -distribution="${RELEASE}" publish repo temp >> "${DEST}"/debug/install.log aptly -config="${conf}" -listen=":8189" serve & local aptly_pid=$! cp "${SRC}"/packages/extras-buildpkgs/buildpkg.key "${SDCARD}"/tmp/buildpkg.key @@ -329,7 +329,6 @@ chroot_installpackages() { local remote_only=$1 local install_list="" - display_alert "Installing additional packages" "EXTERNAL_NEW" for plugin in "${SRC}"/packages/extras-buildpkgs/*.conf; do source "${plugin}" if [[ $(type -t package_checkinstall) == function ]] && package_checkinstall; then @@ -337,6 +336,12 @@ chroot_installpackages() fi unset package_install_target package_checkinstall done + if [[ -n $PACKAGE_LIST_RM ]]; then + install_list=$(sed -r "s/\W($(tr ' ' '|' <<< ${PACKAGE_LIST_RM}))\W/ /g" <<< " ${install_list} ") + install_list="$(echo ${install_list})" + fi + display_alert "Installing extras-buildpkgs" "$install_list" + [[ $NO_APT_CACHER != yes ]] && local apt_extra="-o Acquire::http::Proxy=\"http://${APT_PROXY_ADDR:-localhost:3142}\" -o Acquire::http::Proxy::localhost=\"DIRECT\"" cat <<-EOF > "${SDCARD}"/tmp/install.sh #!/bin/bash @@ -359,5 +364,5 @@ chroot_installpackages() rm -- "\$0" EOF chmod +x "${SDCARD}"/tmp/install.sh - chroot "${SDCARD}" /bin/bash -c "/tmp/install.sh" + chroot "${SDCARD}" /bin/bash -c "/tmp/install.sh" >> "${DEST}"/debug/install.log 2>&1 } ############################################################################# diff --git a/lib/compilation.sh b/lib/compilation.sh index d443d6f01..ca0c94b40 100644 --- a/lib/compilation.sh +++ b/lib/compilation.sh @@ -189,7 +189,7 @@ compile_uboot() rm -rf "${atftempdir}" fi - echo -e "\n\t== u-boot ==\n" >> "${DEST}"/debug/compilation.log + echo -e "\n\t== u-boot make $BOOTCONFIG ==\n" >> "${DEST}"/debug/compilation.log eval CCACHE_BASEDIR="$(pwd)" env PATH="${toolchain}:${toolchain2}:${PATH}" \ 'make $CTHREADS $BOOTCONFIG \ CROSS_COMPILE="$CCACHE $UBOOT_COMPILER"' 2>> "${DEST}"/debug/compilation.log \ @@ -225,6 +225,7 @@ compile_uboot() cross_compile="CROSS_COMPILE=$CCACHE $UBOOT_COMPILER"; [[ -n $UBOOT_TOOLCHAIN2 ]] && cross_compile="ARMBIAN=foe"; # empty parameter is not allowed + echo -e "\n\t== u-boot make $target_make ==\n" >> "${DEST}"/debug/compilation.log eval CCACHE_BASEDIR="$(pwd)" env PATH="${toolchain}:${toolchain2}:${PATH}" \ 'make $target_make $CTHREADS \ "${cross_compile}"' 2>>"${DEST}"/debug/compilation.log \ diff --git a/lib/configuration.sh b/lib/configuration.sh index 06fda8775..9db61b7c2 100644 --- a/lib/configuration.sh +++ b/lib/configuration.sh @@ -311,17 +311,18 @@ fi # Write to variables : # - aggregated_content aggregate_content() { - echo -e "Potential paths : ${potential_paths}\n" >> "${DEST}"/debug/output.log + echo -e "Potential paths : ${potential_paths}" >> "${DEST}"/debug/output.log for filepath in ${potential_paths}; do if [[ -f "${filepath}" ]]; then - echo -e "${filepath/"$SRC"\//} yes\n" >> "${DEST}"/debug/output.log + echo -e "${filepath/"$SRC"\//} yes" >> "${DEST}"/debug/output.log aggregated_content+=$(cat "${filepath}") aggregated_content+="${separator}" - else - echo -e "${filepath/"$SRC"\//} no\n" >> "${DEST}"/debug/output.log +# else +# echo -e "${filepath/"$SRC"\//} no\n" >> "${DEST}"/debug/output.log fi done + echo "" >> "${DEST}"/debug/output.log } # set unique mounting directory @@ -366,6 +367,7 @@ ${SRC}/config/optional/_any_board/_configs ${SRC}/config/optional/architectures/${ARCH}/_config ${SRC}/config/optional/families/${LINUXFAMILY}/_config ${SRC}/config/optional/boards/${BOARD}/_config +${USERPATCHES_PATH} " DEBOOTSTRAP_SEARCH_RELATIVE_DIRS=" diff --git a/lib/debootstrap.sh b/lib/debootstrap.sh index c0b7ea86b..2cca802ff 100644 --- a/lib/debootstrap.sh +++ b/lib/debootstrap.sh @@ -53,10 +53,10 @@ debootstrap_ng() install_common # install locally built packages - [[ $EXTERNAL_NEW == compile ]] && chroot_installpackages_local >> "${DEST}"/debug/install.log 2>&1 + [[ $EXTERNAL_NEW == compile ]] && chroot_installpackages_local # install from apt.armbian.com - [[ $EXTERNAL_NEW == prebuilt ]] && chroot_installpackages "yes" >> "${DEST}"/debug/install.log 2>&1 + [[ $EXTERNAL_NEW == prebuilt ]] && chroot_installpackages "yes" # stage: user customization script # NOTE: installing too many packages may fill tmpfs mount @@ -169,7 +169,7 @@ create_rootfs_cache() display_alert "Installing base system" "Stage 1/2" "info" eval 'debootstrap --variant=minbase --include=${DEBOOTSTRAP_LIST// /,} ${PACKAGE_LIST_EXCLUDE:+ --exclude=${PACKAGE_LIST_EXCLUDE// /,}} \ - --arch=$ARCH --components=${DEBOOTSTRAP_COMPONENTS} --foreign $RELEASE $SDCARD/ $apt_mirror' \ + --arch=$ARCH --components=${DEBOOTSTRAP_COMPONENTS} $DEBOOTSTRAP_OPTION --foreign $RELEASE $SDCARD/ $apt_mirror' \ ${PROGRESS_LOG_TO_FILE:+' | tee -a $DEST/debug/debootstrap.log'} \ ${OUTPUT_DIALOG:+' | dialog --backtitle "$backtitle" --progressbox "Debootstrap (stage 1/2)..." $TTY_Y $TTY_X'} \ ${OUTPUT_VERYSILENT:+' >/dev/null 2>/dev/null'} diff --git a/lib/distributions.sh b/lib/distributions.sh index 3ce512694..d6bb1e9aa 100644 --- a/lib/distributions.sh +++ b/lib/distributions.sh @@ -178,7 +178,11 @@ install_common() else - cp "${SRC}/config/bootscripts/${bootscript_src}" "${SDCARD}/boot/${bootscript_dst}" + if [ -f "${USERPATCHES_PATH}/bootscripts/${bootscript_src}" ]; then + cp "${USERPATCHES_PATH}/bootscripts/${bootscript_src}" "${SDCARD}/boot/${bootscript_dst}" + else + cp "${SRC}/config/bootscripts/${bootscript_src}" "${SDCARD}/boot/${bootscript_dst}" + fi if [[ -n $BOOTENV_FILE ]]; then if [[ -f $USERPATCHES_PATH/bootenv/$BOOTENV_FILE ]]; then @@ -450,7 +454,7 @@ install_common() cp "${SDCARD}"/etc/armbian-release "${SDCARD}"/etc/armbian-image-release # DNS fix. package resolvconf is not available everywhere - if [ -d /etc/resolvconf/resolv.conf.d ]; then + if [ -d /etc/resolvconf/resolv.conf.d ] && [ -n "$NAMESERVER" ]; then echo "nameserver $NAMESERVER" > "${SDCARD}"/etc/resolvconf/resolv.conf.d/head fi @@ -460,14 +464,54 @@ install_common() # enable PubkeyAuthentication sed -i 's/#\?PubkeyAuthentication .*/PubkeyAuthentication yes/' "${SDCARD}"/etc/ssh/sshd_config - # configure network manager - sed "s/managed=\(.*\)/managed=true/g" -i "${SDCARD}"/etc/NetworkManager/NetworkManager.conf + if [ -f "${SDCARD}"/etc/NetworkManager/NetworkManager.conf ]; then + # configure network manager + sed "s/managed=\(.*\)/managed=true/g" -i "${SDCARD}"/etc/NetworkManager/NetworkManager.conf - # remove network manager defaults to handle eth by default - rm -f "${SDCARD}"/usr/lib/NetworkManager/conf.d/10-globally-managed-devices.conf + # remove network manager defaults to handle eth by default + rm -f "${SDCARD}"/usr/lib/NetworkManager/conf.d/10-globally-managed-devices.conf - # most likely we don't need to wait for nm to get online - chroot "${SDCARD}" /bin/bash -c "systemctl disable NetworkManager-wait-online.service" >> "${DEST}"/debug/install.log 2>&1 + # most likely we don't need to wait for nm to get online + chroot "${SDCARD}" /bin/bash -c "systemctl disable NetworkManager-wait-online.service" >> "${DEST}"/debug/install.log 2>&1 + + # Just regular DNS and maintain /etc/resolv.conf as a file + sed "/dns/d" -i "${SDCARD}"/etc/NetworkManager/NetworkManager.conf + sed "s/\[main\]/\[main\]\ndns=default\nrc-manager=file/g" -i "${SDCARD}"/etc/NetworkManager/NetworkManager.conf + if [[ -n $NM_IGNORE_DEVICES ]]; then + mkdir -p "${SDCARD}"/etc/NetworkManager/conf.d/ + cat <<-EOF > "${SDCARD}"/etc/NetworkManager/conf.d/10-ignore-interfaces.conf + [keyfile] + unmanaged-devices=$NM_IGNORE_DEVICES + EOF + fi + + elif [ -d "${SDCARD}"/etc/systemd/network ]; then + # configure networkd + rm "${SDCARD}"/etc/resolv.conf + ln -s /run/systemd/resolve/resolv.conf "${SDCARD}"/etc/resolv.conf + + # enable services + chroot "${SDCARD}" /bin/bash -c "systemctl enable systemd-networkd.service systemd-resolved.service" >> "${DEST}"/debug/install.log 2>&1 + + if [ -e /etc/systemd/timesyncd.conf ]; then + chroot "${SDCARD}" /bin/bash -c "systemctl enable systemd-timesyncd.service" >> "${DEST}"/debug/install.log 2>&1 + fi + umask 022 + cat > "${SDCARD}"/etc/systemd/network/eth0.network <<- __EOF__ + [Match] + Name=eth0 + + [Network] + DHCP=ipv4 + LinkLocalAddressing=ipv4 + #Address=192.168.1.100/24 + #Gateway=192.168.1.1 + #DNS=192.168.1.1 + #Domains=example.com + NTP=0.pool.ntp.org 1.pool.ntp.org + __EOF__ + + fi # avahi daemon defaults if exists [[ -f "${SDCARD}"/usr/share/doc/avahi-daemon/examples/sftp-ssh.service ]] && \ @@ -475,17 +519,6 @@ install_common() [[ -f "${SDCARD}"/usr/share/doc/avahi-daemon/examples/ssh.service ]] && \ cp "${SDCARD}"/usr/share/doc/avahi-daemon/examples/ssh.service "${SDCARD}"/etc/avahi/services/ - # Just regular DNS and maintain /etc/resolv.conf as a file - sed "/dns/d" -i "${SDCARD}"/etc/NetworkManager/NetworkManager.conf - sed "s/\[main\]/\[main\]\ndns=default\nrc-manager=file/g" -i "${SDCARD}"/etc/NetworkManager/NetworkManager.conf - if [[ -n $NM_IGNORE_DEVICES ]]; then - mkdir -p "${SDCARD}"/etc/NetworkManager/conf.d/ - cat <<-EOF > "${SDCARD}"/etc/NetworkManager/conf.d/10-ignore-interfaces.conf - [keyfile] - unmanaged-devices=$NM_IGNORE_DEVICES - EOF - fi - # nsswitch settings for sane DNS behavior: remove resolve, assure libnss-myhostname support sed "s/hosts\:.*/hosts: files mymachines dns myhostname/g" -i "${SDCARD}"/etc/nsswitch.conf @@ -584,15 +617,23 @@ install_distribution_specific() # rc.local is not existing but one might need it install_rclocal - # Basic Netplan config. Let NetworkManager manage all devices on this system + if [ -d "${SDCARD}"/etc/NetworkManager ]; then + local RENDERER=NetworkManager + else + local RENDERER=networkd + fi + + # Basic Netplan config. Let NetworkManager/networkd manage all devices on this system [[ -d "${SDCARD}"/etc/netplan ]] && cat <<-EOF > "${SDCARD}"/etc/netplan/armbian-default.yaml network: version: 2 - renderer: NetworkManager + renderer: $RENDERER EOF # DNS fix - sed -i "s/#DNS=.*/DNS=$NAMESERVER/g" "${SDCARD}"/etc/systemd/resolved.conf + if [ -n "$NAMESERVER" ]; then + sed -i "s/#DNS=.*/DNS=$NAMESERVER/g" "${SDCARD}"/etc/systemd/resolved.conf + fi # Journal service adjustements sed -i "s/#Storage=.*/Storage=volatile/g" "${SDCARD}"/etc/systemd/journald.conf diff --git a/lib/general.sh b/lib/general.sh index e5a6a0899..819443c90 100644 --- a/lib/general.sh +++ b/lib/general.sh @@ -1000,7 +1000,7 @@ prepare_host() parted pkg-config libncurses5-dev whiptail debian-keyring debian-archive-keyring f2fs-tools libfile-fcntllock-perl rsync libssl-dev \ nfs-kernel-server btrfs-progs ncurses-term p7zip-full kmod dosfstools libc6-dev-armhf-cross imagemagick \ curl patchutils liblz4-tool libpython2.7-dev linux-base swig aptly acl python3-dev python3-distutils \ - locales ncurses-base pixz dialog systemd-container udev lib32stdc++6 libc6-i386 lib32ncurses5 lib32tinfo5 \ + locales ncurses-base pixz dialog systemd-container udev libfdt-dev lib32stdc++6 libc6-i386 lib32ncurses5 lib32tinfo5 \ bison libbison-dev flex libfl-dev cryptsetup gpg gnupg1 cpio aria2 pigz dirmngr python3-distutils jq" # build aarch64 @@ -1020,7 +1020,7 @@ prepare_host() local codename=$(lsb_release -sc) # Add support for Ubuntu 20.04, 21.04 and Mint Ulyana - if [[ $codename =~ ^(focal|groovy|hirsute|ulyana)$ ]]; then + if [[ $codename =~ ^(focal|groovy|hirsute|ulyana|bullseye)$ ]]; then hostdeps+=" python2 python3" ln -fs /usr/bin/python2.7 /usr/bin/python2 ln -fs /usr/bin/python2.7 /usr/bin/python @@ -1035,7 +1035,7 @@ prepare_host() # # NO_HOST_RELEASE_CHECK overrides the check for a supported host system # Disable host OS check at your own risk. Any issues reported with unsupported releases will be closed without discussion - if [[ -z $codename || "buster groovy focal hirsute debbie tricia ulyana" != *"$codename"* ]]; then + if [[ -z $codename || "buster bullseye groovy focal hirsute debbie tricia ulyana" != *"$codename"* ]]; then if [[ $NO_HOST_RELEASE_CHECK == yes ]]; then display_alert "You are running on an unsupported system" "${codename:-(unknown)}" "wrn" display_alert "Do not report any errors, warnings or other issues encountered beyond this point" "" "wrn" @@ -1051,7 +1051,7 @@ prepare_host() # build aarch64 if [[ $(dpkg --print-architecture) == amd64 ]]; then - if [[ -z $codename || $codename =~ ^(focal|groovy|debbie|buster|hirsute|ulyana)$ ]]; then + if [[ -z $codename || $codename =~ ^(focal|groovy|debbie|buster|bullseye|hirsute|ulyana)$ ]]; then hostdeps="${hostdeps/lib32ncurses5 lib32tinfo5/lib32ncurses6 lib32tinfo6}" fi diff --git a/lib/main.sh b/lib/main.sh index 8915b6769..c7fb48532 100644 --- a/lib/main.sh +++ b/lib/main.sh @@ -32,7 +32,11 @@ fi umask 002 # destination -DEST="${SRC}"/output +if [ -d "$CONFIG_PATH/output" ]; then + DEST="${CONFIG_PATH}"/output +else + DEST="${SRC}"/output +fi if [[ $BUILD_ALL != "yes" && -z $ROOT_FS_CREATE_ONLY ]]; then # override stty size diff --git a/lib/makeboarddeb.sh b/lib/makeboarddeb.sh index e9ccf2486..f18234f12 100644 --- a/lib/makeboarddeb.sh +++ b/lib/makeboarddeb.sh @@ -28,7 +28,11 @@ create_board_package() local bootscript_src=${BOOTSCRIPT%%:*} local bootscript_dst=${BOOTSCRIPT##*:} mkdir -p "${destination}"/usr/share/armbian/ - cp "${SRC}/config/bootscripts/${bootscript_src}" "${destination}/usr/share/armbian/${bootscript_dst}" + if [ -f "${USERPATCHES_PATH}/bootscripts/${bootscript_src}" ]; then + cp "${USERPATCHES_PATH}/bootscripts/${bootscript_src}" "${destination}/usr/share/armbian/${bootscript_dst}" + else + cp "${SRC}/config/bootscripts/${bootscript_src}" "${destination}/usr/share/armbian/${bootscript_dst}" + fi [[ -n $BOOTENV_FILE && -f $SRC/config/bootenv/$BOOTENV_FILE ]] && \ cp "${SRC}/config/bootenv/${BOOTENV_FILE}" "${destination}"/usr/share/armbian/armbianEnv.txt @@ -294,7 +298,7 @@ fi DESKTOP=$DESKTOP_ENVIRONMENT EOF fi - + # this is required for NFS boot to prevent deconfiguring the network on shutdown sed -i 's/#no-auto-down/no-auto-down/g' "${destination}"/etc/network/interfaces.default