From 4d3ee2eee260c8ee5df014674f22442b4baf74a7 Mon Sep 17 00:00:00 2001 From: Holger Friedrich Date: Thu, 18 Jun 2020 22:04:43 +0200 Subject: [PATCH] Caching essential packages for offline install, #984. * initial functionality added to build.bash * directory prefix for java_zulu_fetch * use apt of target system to fetch deb packages * verify signature of download images using key from raspberrypi.org website * first-boot to install cached packages * silence install_zram_code warnings Signed-off-by: Holger Friedrich --- build-image/apt.conf | 286 ++++++++++++++++++++++++++++++++++++ build-image/first-boot.bash | 8 + build.bash | 58 +++++++- functions/java-jre.bash | 6 +- functions/zram.bash | 5 +- 5 files changed, 353 insertions(+), 10 deletions(-) create mode 100644 build-image/apt.conf diff --git a/build-image/apt.conf b/build-image/apt.conf new file mode 100644 index 000000000..eaea82ee6 --- /dev/null +++ b/build-image/apt.conf @@ -0,0 +1,286 @@ +APT ""; +APT::Architecture "armhf"; +APT::Build-Essential ""; +APT::Build-Essential:: "build-essential"; +APT::Install-Recommends "1"; +APT::Install-Suggests "0"; +APT::Sandbox ""; +APT::Sandbox::User "_apt"; +APT::NeverAutoRemove ""; +APT::NeverAutoRemove:: "^firmware-linux.*"; +APT::NeverAutoRemove:: "^linux-firmware$"; +APT::NeverAutoRemove:: "^linux-image-[a-z0-9]*$"; +APT::NeverAutoRemove:: "^linux-image-[a-z0-9]*-[a-z0-9]*$"; +APT::NeverAutoRemove:: "^linux-image-4\.19\.118-v8\+$"; +APT::NeverAutoRemove:: "^linux-image-4\.19\.97-v7l\+$"; +APT::NeverAutoRemove:: "^linux-headers-4\.19\.118-v8\+$"; +APT::NeverAutoRemove:: "^linux-headers-4\.19\.97-v7l\+$"; +APT::NeverAutoRemove:: "^linux-image-extra-4\.19\.118-v8\+$"; +APT::NeverAutoRemove:: "^linux-image-extra-4\.19\.97-v7l\+$"; +APT::NeverAutoRemove:: "^linux-modules-4\.19\.118-v8\+$"; +APT::NeverAutoRemove:: "^linux-modules-4\.19\.97-v7l\+$"; +APT::NeverAutoRemove:: "^linux-modules-extra-4\.19\.118-v8\+$"; +APT::NeverAutoRemove:: "^linux-modules-extra-4\.19\.97-v7l\+$"; +APT::NeverAutoRemove:: "^linux-signed-image-4\.19\.118-v8\+$"; +APT::NeverAutoRemove:: "^linux-signed-image-4\.19\.97-v7l\+$"; +APT::NeverAutoRemove:: "^linux-image-unsigned-4\.19\.118-v8\+$"; +APT::NeverAutoRemove:: "^linux-image-unsigned-4\.19\.97-v7l\+$"; +APT::NeverAutoRemove:: "^kfreebsd-image-4\.19\.118-v8\+$"; +APT::NeverAutoRemove:: "^kfreebsd-image-4\.19\.97-v7l\+$"; +APT::NeverAutoRemove:: "^kfreebsd-headers-4\.19\.118-v8\+$"; +APT::NeverAutoRemove:: "^kfreebsd-headers-4\.19\.97-v7l\+$"; +APT::NeverAutoRemove:: "^gnumach-image-4\.19\.118-v8\+$"; +APT::NeverAutoRemove:: "^gnumach-image-4\.19\.97-v7l\+$"; +APT::NeverAutoRemove:: "^.*-modules-4\.19\.118-v8\+$"; +APT::NeverAutoRemove:: "^.*-modules-4\.19\.97-v7l\+$"; +APT::NeverAutoRemove:: "^.*-kernel-4\.19\.118-v8\+$"; +APT::NeverAutoRemove:: "^.*-kernel-4\.19\.97-v7l\+$"; +APT::NeverAutoRemove:: "^linux-backports-modules-.*-4\.19\.118-v8\+$"; +APT::NeverAutoRemove:: "^linux-backports-modules-.*-4\.19\.97-v7l\+$"; +APT::NeverAutoRemove:: "^linux-modules-.*-4\.19\.118-v8\+$"; +APT::NeverAutoRemove:: "^linux-modules-.*-4\.19\.97-v7l\+$"; +APT::NeverAutoRemove:: "^linux-tools-4\.19\.118-v8\+$"; +APT::NeverAutoRemove:: "^linux-tools-4\.19\.97-v7l\+$"; +APT::NeverAutoRemove:: "^linux-cloud-tools-4\.19\.118-v8\+$"; +APT::NeverAutoRemove:: "^linux-cloud-tools-4\.19\.97-v7l\+$"; +APT::NeverAutoRemove:: "^linux-buildinfo-4\.19\.118-v8\+$"; +APT::NeverAutoRemove:: "^linux-buildinfo-4\.19\.97-v7l\+$"; +APT::NeverAutoRemove:: "^linux-source-4\.19\.118-v8\+$"; +APT::NeverAutoRemove:: "^linux-source-4\.19\.97-v7l\+$"; +APT::VersionedKernelPackages ""; +APT::VersionedKernelPackages:: "linux-image"; +APT::VersionedKernelPackages:: "linux-headers"; +APT::VersionedKernelPackages:: "linux-image-extra"; +APT::VersionedKernelPackages:: "linux-modules"; +APT::VersionedKernelPackages:: "linux-modules-extra"; +APT::VersionedKernelPackages:: "linux-signed-image"; +APT::VersionedKernelPackages:: "linux-image-unsigned"; +APT::VersionedKernelPackages:: "kfreebsd-image"; +APT::VersionedKernelPackages:: "kfreebsd-headers"; +APT::VersionedKernelPackages:: "gnumach-image"; +APT::VersionedKernelPackages:: ".*-modules"; +APT::VersionedKernelPackages:: ".*-kernel"; +APT::VersionedKernelPackages:: "linux-backports-modules-.*"; +APT::VersionedKernelPackages:: "linux-modules-.*"; +APT::VersionedKernelPackages:: "linux-tools"; +APT::VersionedKernelPackages:: "linux-cloud-tools"; +APT::VersionedKernelPackages:: "linux-buildinfo"; +APT::VersionedKernelPackages:: "linux-source"; +APT::Never-MarkAuto-Sections ""; +APT::Never-MarkAuto-Sections:: "metapackages"; +APT::Never-MarkAuto-Sections:: "contrib/metapackages"; +APT::Never-MarkAuto-Sections:: "non-free/metapackages"; +APT::Never-MarkAuto-Sections:: "restricted/metapackages"; +APT::Never-MarkAuto-Sections:: "universe/metapackages"; +APT::Never-MarkAuto-Sections:: "multiverse/metapackages"; +APT::Move-Autobit-Sections ""; +APT::Move-Autobit-Sections:: "oldlibs"; +APT::Move-Autobit-Sections:: "contrib/oldlibs"; +APT::Move-Autobit-Sections:: "non-free/oldlibs"; +APT::Move-Autobit-Sections:: "restricted/oldlibs"; +APT::Move-Autobit-Sections:: "universe/oldlibs"; +APT::Move-Autobit-Sections:: "multiverse/oldlibs"; +APT::Periodic ""; +APT::Periodic::Update-Package-Lists "1"; +APT::Periodic::Unattended-Upgrade "1"; +APT::Update ""; +APT::Update::Post-Invoke-Success ""; +#APT::Update::Post-Invoke-Success:: "/usr/bin/test -e /usr/share/dbus-1/system-services/org.freedesktop.PackageKit.service && /usr/bin/test -S /var/run/dbus/system_bus_socket && /usr/bin/gdbus call --system --dest org.freedesktop.PackageKit --object-path /org/freedesktop/PackageKit --timeout 4 --method org.freedesktop.PackageKit.StateHasChanged cache-update > /dev/null; /bin/echo > /dev/null"; +APT::Architectures ""; +APT::Architectures:: "armhf"; +APT::Compressor ""; +APT::Compressor::. ""; +APT::Compressor::.::Name "."; +APT::Compressor::.::Extension ""; +APT::Compressor::.::Binary ""; +APT::Compressor::.::Cost "0"; +APT::Compressor::zstd ""; +APT::Compressor::zstd::Name "zstd"; +APT::Compressor::zstd::Extension ".zst"; +APT::Compressor::zstd::Binary "false"; +APT::Compressor::zstd::Cost "60"; +APT::Compressor::lz4 ""; +APT::Compressor::lz4::Name "lz4"; +APT::Compressor::lz4::Extension ".lz4"; +APT::Compressor::lz4::Binary "false"; +APT::Compressor::lz4::Cost "50"; +APT::Compressor::gzip ""; +APT::Compressor::gzip::Name "gzip"; +APT::Compressor::gzip::Extension ".gz"; +APT::Compressor::gzip::Binary "gzip"; +APT::Compressor::gzip::Cost "100"; +APT::Compressor::gzip::CompressArg ""; +APT::Compressor::gzip::CompressArg:: "-6n"; +APT::Compressor::gzip::UncompressArg ""; +APT::Compressor::gzip::UncompressArg:: "-d"; +APT::Compressor::xz ""; +APT::Compressor::xz::Name "xz"; +APT::Compressor::xz::Extension ".xz"; +APT::Compressor::xz::Binary "xz"; +APT::Compressor::xz::Cost "200"; +APT::Compressor::xz::CompressArg ""; +APT::Compressor::xz::CompressArg:: "-6"; +APT::Compressor::xz::UncompressArg ""; +APT::Compressor::xz::UncompressArg:: "-d"; +APT::Compressor::bzip2 ""; +APT::Compressor::bzip2::Name "bzip2"; +APT::Compressor::bzip2::Extension ".bz2"; +APT::Compressor::bzip2::Binary "bzip2"; +APT::Compressor::bzip2::Cost "300"; +APT::Compressor::bzip2::CompressArg ""; +APT::Compressor::bzip2::CompressArg:: "-6"; +APT::Compressor::bzip2::UncompressArg ""; +APT::Compressor::bzip2::UncompressArg:: "-d"; +APT::Compressor::lzma ""; +APT::Compressor::lzma::Name "lzma"; +APT::Compressor::lzma::Extension ".lzma"; +APT::Compressor::lzma::Binary "xz"; +APT::Compressor::lzma::Cost "400"; +APT::Compressor::lzma::CompressArg ""; +APT::Compressor::lzma::CompressArg:: "--format=lzma"; +APT::Compressor::lzma::CompressArg:: "-6"; +APT::Compressor::lzma::UncompressArg ""; +APT::Compressor::lzma::UncompressArg:: "--format=lzma"; +APT::Compressor::lzma::UncompressArg:: "-d"; +Dir "###BUILDFOLDER###"; +Dir::State "var/lib/apt"; +Dir::State::lists "lists/"; +Dir::State::cdroms "cdroms.list"; +Dir::State::extended_states "extended_states"; +Dir::State::status "/var/lib/dpkg/status"; +Dir::Cache "var/cache/apt"; +Dir::Cache::archives "archives/"; +Dir::Cache::srcpkgcache "srcpkgcache.bin"; +Dir::Cache::pkgcache "pkgcache.bin"; +Dir::Etc "etc/apt"; +Dir::Etc::sourcelist "sources.list"; +Dir::Etc::sourceparts "sources.list.d"; +Dir::Etc::main "apt.conf"; +Dir::Etc::netrc "auth.conf"; +Dir::Etc::netrcparts "auth.conf.d"; +Dir::Etc::parts "apt.conf.d"; +Dir::Etc::preferences "preferences"; +Dir::Etc::preferencesparts "preferences.d"; +Dir::Etc::trusted "trusted.gpg"; +Dir::Etc::trustedparts "trusted.gpg.d"; +Dir::Bin ""; +Dir::Bin::methods "/usr/lib/apt/methods"; +Dir::Bin::solvers ""; +Dir::Bin::solvers:: "/usr/lib/apt/solvers"; +Dir::Bin::planners ""; +Dir::Bin::planners:: "/usr/lib/apt/planners"; +Dir::Bin::dpkg "/usr/bin/dpkg"; +Dir::Bin::gzip "/bin/gzip"; +Dir::Bin::bzip2 "/bin/bzip2"; +Dir::Bin::xz "/usr/bin/xz"; +Dir::Bin::lz4 "/usr/bin/lz4"; +Dir::Bin::zstd "/usr/bin/zstd"; +Dir::Bin::lzma "/usr/bin/xz"; +Dir::Media ""; +Dir::Media::MountPath "/media/apt"; +Dir::Log "var/log/apt"; +Dir::Log::Terminal "term.log"; +Dir::Log::History "history.log"; +Dir::Log::Planner "eipp.log.xz"; +Dir::Ignore-Files-Silently ""; +Dir::Ignore-Files-Silently:: "~$"; +Dir::Ignore-Files-Silently:: "\.disabled$"; +Dir::Ignore-Files-Silently:: "\.bak$"; +Dir::Ignore-Files-Silently:: "\.dpkg-[a-z]+$"; +Dir::Ignore-Files-Silently:: "\.ucf-[a-z]+$"; +Dir::Ignore-Files-Silently:: "\.save$"; +Dir::Ignore-Files-Silently:: "\.orig$"; +Dir::Ignore-Files-Silently:: "\.distUpgrade$"; +Acquire ""; +Acquire::AllowInsecureRepositories "0"; +Acquire::AllowWeakRepositories "0"; +Acquire::AllowDowngradeToInsecureRepositories "0"; +Acquire::cdrom ""; +Acquire::cdrom::mount "/media/cdrom/"; +Acquire::IndexTargets ""; +Acquire::IndexTargets::deb ""; +Acquire::IndexTargets::deb::Packages ""; +Acquire::IndexTargets::deb::Packages::MetaKey "$(COMPONENT)/binary-$(ARCHITECTURE)/Packages"; +Acquire::IndexTargets::deb::Packages::flatMetaKey "Packages"; +Acquire::IndexTargets::deb::Packages::ShortDescription "Packages"; +Acquire::IndexTargets::deb::Packages::Description "$(RELEASE)/$(COMPONENT) $(ARCHITECTURE) Packages"; +Acquire::IndexTargets::deb::Packages::flatDescription "$(RELEASE) Packages"; +Acquire::IndexTargets::deb::Packages::Optional "0"; +Acquire::IndexTargets::deb::Translations ""; +Acquire::IndexTargets::deb::Translations::MetaKey "$(COMPONENT)/i18n/Translation-$(LANGUAGE)"; +Acquire::IndexTargets::deb::Translations::flatMetaKey "$(LANGUAGE)"; +Acquire::IndexTargets::deb::Translations::ShortDescription "Translation-$(LANGUAGE)"; +Acquire::IndexTargets::deb::Translations::Description "$(RELEASE)/$(COMPONENT) Translation-$(LANGUAGE)"; +Acquire::IndexTargets::deb::Translations::flatDescription "$(RELEASE) Translation-$(LANGUAGE)"; +Acquire::IndexTargets::deb-src ""; +Acquire::IndexTargets::deb-src::Sources ""; +Acquire::IndexTargets::deb-src::Sources::MetaKey "$(COMPONENT)/source/Sources"; +Acquire::IndexTargets::deb-src::Sources::flatMetaKey "Sources"; +Acquire::IndexTargets::deb-src::Sources::ShortDescription "Sources"; +Acquire::IndexTargets::deb-src::Sources::Description "$(RELEASE)/$(COMPONENT) Sources"; +Acquire::IndexTargets::deb-src::Sources::flatDescription "$(RELEASE) Sources"; +Acquire::IndexTargets::deb-src::Sources::Optional "0"; +Acquire::Changelogs ""; +Acquire::Changelogs::URI ""; +Acquire::Changelogs::URI::Origin ""; +Acquire::Changelogs::URI::Origin::Debian "https://metadata.ftp-master.debian.org/changelogs/@CHANGEPATH@_changelog"; +Acquire::Changelogs::URI::Origin::Ubuntu "https://changelogs.ubuntu.com/changelogs/pool/@CHANGEPATH@/changelog"; +Acquire::Changelogs::AlwaysOnline ""; +Acquire::Changelogs::AlwaysOnline::Origin ""; +Acquire::Changelogs::AlwaysOnline::Origin::Ubuntu "1"; +Acquire::http ""; +Acquire::http::User-Agent "Debian APT-HTTP/1.3 openHABian"; +Acquire::PDiffs "0"; +Acquire::Languages ""; +Acquire::Languages:: "en_US"; +Acquire::Languages:: "en"; +Acquire::Languages:: "en_US.UTF-8"; +Acquire::Languages:: "none"; +Acquire::CompressionTypes ""; +Acquire::CompressionTypes::xz "xz"; +Acquire::CompressionTypes::bz2 "bzip2"; +Acquire::CompressionTypes::lzma "lzma"; +Acquire::CompressionTypes::gz "gzip"; +Acquire::CompressionTypes::lz4 "lz4"; +Acquire::CompressionTypes::zst "zstd"; +DPkg ""; +DPkg::Path "/usr/sbin:/usr/bin:/sbin:/bin"; +DPkg::Post-Invoke ""; +#DPkg::Post-Invoke:: "if [ -x /usr/local/bin/FireMotD ]; then echo -n 'Updating FireMotD available updates count ... '; /bin/bash /usr/local/bin/FireMotD --skiprepoupdate -S; echo ''; fi"; +#DPkg::Post-Invoke:: "/usr/bin/test -e /usr/share/dbus-1/system-services/org.freedesktop.PackageKit.service && /usr/bin/test -S /var/run/dbus/system_bus_socket && /usr/bin/gdbus call --system --dest org.freedesktop.PackageKit --object-path /org/freedesktop/PackageKit --timeout 4 --method org.freedesktop.PackageKit.StateHasChanged cache-update > /dev/null; /bin/echo > /dev/null"; +DPkg::Pre-Install-Pkgs ""; +#DPkg::Pre-Install-Pkgs:: "/usr/bin/apt-listchanges --apt || test $? -lt 10"; +#DPkg::Pre-Install-Pkgs:: "/usr/sbin/dpkg-preconfigure --apt || true"; +DPkg::Tools ""; +DPkg::Tools::Options ""; +DPkg::Tools::Options::/usr/bin/apt-listchanges ""; +DPkg::Tools::Options::/usr/bin/apt-listchanges::Version "2"; +DPkg::Tools::Options::/usr/bin/apt-listchanges::InfoFD "20"; +Unattended-Upgrade ""; +Unattended-Upgrade::Origins-Pattern ""; +Unattended-Upgrade::Origins-Pattern:: "origin=Debian,codename=${distro_codename},label=Debian"; +Unattended-Upgrade::Origins-Pattern:: "origin=Debian,codename=${distro_codename},label=Debian-Security"; +Binary "apt-config"; +Binary::apt ""; +Binary::apt::APT ""; +Binary::apt::APT::Color "1"; +Binary::apt::APT::Cache ""; +Binary::apt::APT::Cache::Show ""; +Binary::apt::APT::Cache::Show::Version "2"; +Binary::apt::APT::Cache::AllVersions "0"; +Binary::apt::APT::Cache::ShowVirtuals "1"; +Binary::apt::APT::Cache::Search ""; +Binary::apt::APT::Cache::Search::Version "2"; +Binary::apt::APT::Cache::ShowDependencyType "1"; +Binary::apt::APT::Cache::ShowVersion "1"; +Binary::apt::APT::Get ""; +Binary::apt::APT::Get::Upgrade-Allow-New "1"; +Binary::apt::APT::Get::Update ""; +Binary::apt::APT::Get::Update::InteractiveReleaseInfoChanges "1"; +Binary::apt::APT::Cmd ""; +Binary::apt::APT::Cmd::Show-Update-Stats "1"; +Binary::apt::APT::Keep-Downloaded-Packages "0"; +Binary::apt::DPkg ""; +Binary::apt::DPkg::Progress-Fancy "1"; +CommandLine ""; +CommandLine::AsString "apt-config dump"; diff --git a/build-image/first-boot.bash b/build-image/first-boot.bash index a0acf031a..13a01474b 100755 --- a/build-image/first-boot.bash +++ b/build-image/first-boot.bash @@ -2,6 +2,7 @@ # shellcheck source=/etc/openhabian.conf disable=SC1091 CONFIGFILE=/etc/openhabian.conf +PKGCACHEDIR=/opt/openhabian-package-cache # apt/dpkg commands will not try interactive dialogs export DEBIAN_FRONTEND=noninteractive @@ -175,6 +176,13 @@ type openhabian_update &> /dev/null && if ! openhabian_update &> /dev/null; then echo "FAILED" echo "$(timestamp) [openHABian] The git repository on the public internet is not reachable." echo "$(timestamp) [openHABian] We will continue trying to get your system installed, but this is not guaranteed to work." + + if ls "$PKGCACHEDIR" >/dev/null 2>&1; then + echo "$(timestamp) [openHABian] Trying to install bootstrap packages from cache..." + ( + cd "$PKGCACHEDIR" && dpkg -i -- *.deb + ) + fi else echo "OK" fi diff --git a/build.bash b/build.bash index c3cf31fb7..546c504bc 100755 --- a/build.bash +++ b/build.bash @@ -10,8 +10,12 @@ usage() { ########################## #### Load help method #### ########################## -# shellcheck disable=SC1090 +# shellcheck source=functions/helpers.bash source "$(dirname "$0")"/functions/helpers.bash +# shellcheck source=functions/java-jre.bash +source "$(dirname "$0")"/functions/java-jre.bash +# shellcheck source=functions/zram.bash +source "$(dirname "$0")"/functions/zram.bash ## This function formats log messages ## @@ -222,7 +226,8 @@ if [[ $hw_platform == "pi-raspios32" ]] || [[ $hw_platform == "pi-raspios64beta" baseurl="https://downloads.raspberrypi.org/raspios_lite_armhf_latest" bits="32" fi - zipfile="$(basename "$(curl "$baseurl" -s -L -I -o /dev/null -w '%{url_effective}')")" + zipurl="$(curl "$baseurl" -s -L -I -o /dev/null -w '%{url_effective}')" + zipfile="$(basename "$zipurl")" # Prerequisites echo_process "Checking prerequisites... " @@ -246,13 +251,21 @@ if [[ $hw_platform == "pi-raspios32" ]] || [[ $hw_platform == "pi-raspios64beta" if [[ -f $zipfile ]]; then - echo_process "Using local copy of Raspberry Pi OS ($bits-bit) Lite image... " + echo_process "Using local copy of Raspberry Pi OS ($bits-bit) image... " cp "$zipfile" "$buildfolder/$zipfile" else - echo_process "Downloading latest Raspberry Pi OS ($bits-bit) Lite image (no local copy found)... " + echo_process "Downloading latest Raspberry Pi OS ($bits-bit) image (no local copy of $zipfile found)... " curl -L "$baseurl" -o "$zipfile" cp "$zipfile" "$buildfolder/$zipfile" fi + + echo_process "Verifying signature of downloaded image... " + curl -s "$zipurl".sig -o "$buildfolder"/"$zipfile".sig + # verify signature + curl -s -o "$buildfolder"/raspberrypi_downloads.gpg.key https://www.raspberrypi.org/raspberrypi_downloads.gpg.key + gpg -q --no-default-keyring --keyring "$buildfolder"/raspberrypiorg_downloads.keyring --import "$buildfolder"/raspberrypi_downloads.gpg.key 2>/dev/null || true + gpg -q --trust-model always --no-default-keyring --keyring "$buildfolder"/raspberrypiorg_downloads.keyring --verify "$buildfolder/$zipfile".sig "$buildfolder/$zipfile" || exit 1 + echo_process "Unpacking image... " unzip -q "$buildfolder/$zipfile" -d $buildfolder mv $buildfolder/*-raspios-*.img $imagefile @@ -285,13 +298,48 @@ if [[ $hw_platform == "pi-raspios32" ]] || [[ $hw_platform == "pi-raspios64beta" git -C $buildfolder/root/opt/openhabian checkout "${clonebranch:-stable}" &> /dev/null fi touch $buildfolder/root/opt/openHABian-install-inprogress + + # caching essential components for install + # - ZRAM + echo_process "Downloading ZRAM codebase..." + install_zram_code $buildfolder/root/opt/zram + # - JAVA + ( + echo_process "Downloading Java..." + # source config to set java correctly, not it will break when someone uses != Zulu + # shellcheck source=build-image/openhabian.pi-raspios32.conf + . $sourcefolder/openhabian.$hw_platform.conf + java_zulu_fetch "${java_opt:-Zulu8-32}" $buildfolder/root + ) + # caching essential deb packages for install w/o internet connection + mkdir -p $buildfolder/opt/openhabian-package-cache + # TODO #984: wget essential deb packages to be cached for install w/o internet connection + # + ( + # use apt tool of target system to fetch packages for offline install + # apt.conf has been extracted from working install using "apt-config dump" + echo_process "Downloading essential packages..." + cp "$sourcefolder"/apt.conf "$buildfolder" + sed -i "s|###BUILDFOLDER###|$buildfolder/root|" "$buildfolder"/apt.conf + if [ "$bits" == "64" ]; then sed -i "s|armhf|arm64|" "$buildfolder"/apt.conf; fi + export APT_CONFIG="$buildfolder"/apt.conf + cd $buildfolder/opt/openhabian-package-cache + apt-get update + # package list for raspbian lite is provided in .info file, e.g. + # https://downloads.raspberrypi.org/raspbian_lite/images/raspbian_lite-2020-02-14/2020-02-13-raspbian-buster-lite.info + apt-get download git git-man libattr1-dev zlib1g libc6 libstdc++6 + ) + # maybe we should use a trap to get this done in case of error umount_image_file_root "$imagefile" "$buildfolder" echo_process "Reactivating SSH... " mount_image_file_boot "$imagefile" "$buildfolder" touch $buildfolder/boot/ssh - cp $sourcefolder/first-boot.bash $buildfolder/boot/first-boot.bash + cp $sourcefolder/first-boot.bash $buildfolder/boot/ + cp functions/helpers.bash $buildfolder/boot/ + cp functions/openhabian.bash $buildfolder/boot/ + #sed -i -e '1r functions/helpers.bash' $buildfolder/boot/first-boot.bash # Add platform identification touch $buildfolder/boot/first-boot.log unix2dos -q -n $sourcefolder/openhabian.${hw_platform}.conf $buildfolder/boot/openhabian.conf cp $sourcefolder/webif.bash $buildfolder/boot/webif.bash diff --git a/functions/java-jre.bash b/functions/java-jre.bash index 6bb38ec4e..ad9cd85a7 100644 --- a/functions/java-jre.bash +++ b/functions/java-jre.bash @@ -233,14 +233,14 @@ java_zulu_install() { ## Fetch Java Zulu 8 directly from Azul API v1 ## Valid arguments: "Zulu8-32", "Zulu8-64", "Zulu11-32", or "Zulu11-64" ## -## java_zulu_fetch(String type) +## java_zulu_fetch(String arch, String folderPrefix) ## java_zulu_fetch() { local downloadLink local jdkInstallLocation local link - jdkInstallLocation="/opt/jdk" + jdkInstallLocation="$2/opt/jdk" link="https://api.azul.com/zulu/download/community/v1.0/bundles/latest/binary/?os=linux&ext=tar.gz&javafx=false" if [[ $1 == "Zulu8-32" ]]; then @@ -274,7 +274,7 @@ java_zulu_fetch() { fi if [[ -z $downloadLink ]]; then echo "FAILED (download link)"; return 1; fi - if ! mkdir -p $jdkInstallLocation; then echo "FAILED (create directory)"; return 1; fi + if ! mkdir -p "${jdkInstallLocation:?}"; then echo "FAILED (create directory)"; return 1; fi if ! rm -rf "${jdkInstallLocation:?}"/*; then echo "FAILED (clean directory)"; return 1; fi if ! cond_redirect wget -qO "$jdkInstallLocation"/zulu.tar.gz "$downloadLink"; then echo "FAILED (download)"; rm -rf "${jdkInstallLocation:?}"/*; return 1; fi if ! tar -xpzf "$jdkInstallLocation"/zulu.tar.gz -C "$jdkInstallLocation"; then echo "FAILED (extract)"; rm -rf "${jdkInstallLocation:?}"/*; return 1; fi diff --git a/functions/zram.bash b/functions/zram.bash index 4c3cc21b1..e6ab28ec8 100644 --- a/functions/zram.bash +++ b/functions/zram.bash @@ -10,11 +10,11 @@ install_zram_code() { local ZRAMGIT=https://github.com/mstormi/openhabian-zram local OVERLAYFSGIT=https://github.com/kmxz/overlayfs-tools local TAG=openhabian_v1.6 - cond_redirect apt-get install -y -q --no-install-recommends make libattr1-dev + #cond_redirect apt-get install -y -q --no-install-recommends make libattr1-dev mkdir -p "$1" git clone -q "$OVERLAYFSGIT" "$1"/overlayfs-tools - git clone -q --branch "$TAG" "$ZRAMGIT" "$1"/openhabian-zram + git clone -c advice.detachedHead=false -q --branch "$TAG" "$ZRAMGIT" "$1"/openhabian-zram } init_zram_mounts() { @@ -33,6 +33,7 @@ init_zram_mounts() { fi ZRamInstallLocation=/opt/zram + cond_redirect apt-get install -y -q --no-install-recommends make libattr1-dev install_zram_code "$ZRamInstallLocation" cd "$ZRamInstallLocation"/overlayfs-tools || return 1