diff --git a/Dockerfile b/Dockerfile index 288ad8b5457..899654e6b81 100644 --- a/Dockerfile +++ b/Dockerfile @@ -55,15 +55,15 @@ RUN --mount=source=.cargo,target=/home/builder/.cargo \ --mount=source=workspaces,target=/home/builder/rpmbuild/BUILD/workspaces \ rpmbuild -ba --clean rpmbuild/SPECS/${PACKAGE}.spec -FROM scratch AS rpm +FROM scratch AS package COPY --from=rpmbuild /home/builder/rpmbuild/RPMS/*/*.rpm /output/ FROM sdk AS imgbuild ARG PACKAGES ARG ARCH ARG NOCACHE -ARG FLAVOR -ENV FLAVOR=${FLAVOR} +ARG VARIANT +ENV VARIANT=${VARIANT} WORKDIR /root USER root @@ -91,5 +91,5 @@ RUN --mount=target=/host \ --output-dir=/local/output \ && echo ${NOCACHE} -FROM scratch AS image +FROM scratch AS variant COPY --from=imgbuild /local/output/* /output/ diff --git a/Makefile.toml b/Makefile.toml index 3892ce0fbe9..473680eb085 100644 --- a/Makefile.toml +++ b/Makefile.toml @@ -9,6 +9,8 @@ BUILDSYS_TOOLS_DIR = "${BUILDSYS_ROOT_DIR}/tools" BUILDSYS_SOURCES_DIR = "${BUILDSYS_ROOT_DIR}/workspaces" BUILDSYS_TIMESTAMP = { script = ["date +%s"] } BUILDSYS_VERSION = { script = ["git describe --tag --dirty || date +%Y%m%d"] } +BUILDSYS_VARIANT = "aws-k8s" + CARGO_HOME = "${BUILDSYS_ROOT_DIR}/.cargo" CARGO_MAKE_CARGO_ARGS = "--jobs 8 --offline --locked" GO_MOD_CACHE = "${BUILDSYS_ROOT_DIR}/.gomodcache" @@ -16,7 +18,6 @@ GO_VERSION = "1.12.5" DOCKER_BUILDKIT = "1" [env.development] -IMAGE = "aws-k8s" # Defined here to allow us to override ${BUILDSYS_ARCH} on the command line. BUILDSYS_SDK_IMAGE = "thar/sdk-${BUILDSYS_ARCH}:0.0.1" # Permit pulling directly Upstream URLs when lookaside cache results in MISSes. @@ -69,7 +70,7 @@ fi dependencies = ["setup"] script = [ ''' -for ws in workspaces packages images tools/buildsys ; do +for ws in workspaces packages variants tools/buildsys ; do cargo fetch --locked --manifest-path ${ws}/Cargo.toml done chmod o+r -R ${CARGO_HOME} @@ -133,7 +134,7 @@ cargo build \ ''' ] -[tasks.build-images] +[tasks.build-variant] dependencies = ["build-packages"] script = [ ''' @@ -141,16 +142,16 @@ export PATH="${BUILDSYS_TOOLS_DIR}/bin:${PATH}" cargo build \ ${CARGO_BUILD_ARGS} \ ${CARGO_MAKE_CARGO_ARGS} \ - --manifest-path images/Cargo.toml \ - --package ${IMAGE} + --manifest-path variants/Cargo.toml \ + --package ${BUILDSYS_VARIANT} ''' ] [tasks.world-packages] alias = "build-packages" -[tasks.world-images] -alias = "build-images" +[tasks.world-variant] +alias = "build-variant" [tasks.check-licenses] dependencies = ["fetch"] @@ -165,37 +166,39 @@ script = [ dependencies = ["fetch"] script = [ ''' -for link in ${BUILDSYS_OUTPUT_DIR}/thar*.lz4; do - if [ -L "${link}" ]; then - rm ${link} - fi +PREFIX="thar-${BUILDSYS_ARCH}-${BUILDSYS_VARIANT}" +for link in ${BUILDSYS_OUTPUT_DIR}/${PREFIX}-*.lz4; do + if [ -L "${link}" ]; then + rm ${link} + fi done ''' ] -[tasks.link-images] +[tasks.link-variant] script = [ ''' -PREFIX="thar-${BUILDSYS_ARCH}-${IMAGE}-${BUILDSYS_VERSION}" -ln -s ${BUILDSYS_OUTPUT_DIR}/thar-${BUILDSYS_ARCH}.img.lz4 \ - ${BUILDSYS_OUTPUT_DIR}/${PREFIX}.img.lz4 -ln -s ${BUILDSYS_OUTPUT_DIR}/thar-${BUILDSYS_ARCH}-data.img.lz4 \ - ${BUILDSYS_OUTPUT_DIR}/${PREFIX}-data.img.lz4 -ln -s ${BUILDSYS_OUTPUT_DIR}/thar-${BUILDSYS_ARCH}-boot.ext4.lz4 \ - ${BUILDSYS_OUTPUT_DIR}/${PREFIX}-boot.ext4.lz4 -ln -s ${BUILDSYS_OUTPUT_DIR}/thar-${BUILDSYS_ARCH}-root.ext4.lz4 \ - ${BUILDSYS_OUTPUT_DIR}/${PREFIX}-root.ext4.lz4 -ln -s ${BUILDSYS_OUTPUT_DIR}/thar-${BUILDSYS_ARCH}-root.verity.lz4 \ - ${BUILDSYS_OUTPUT_DIR}/${PREFIX}-root.verity.lz4 +PREFIX="thar-${BUILDSYS_ARCH}-${BUILDSYS_VARIANT}" +VERSIONED="${PREFIX}-${BUILDSYS_VERSION}" +ln -snf ${BUILDSYS_OUTPUT_DIR}/${PREFIX}.img.lz4 \ + ${BUILDSYS_OUTPUT_DIR}/${VERSIONED}.img.lz4 +ln -snf ${BUILDSYS_OUTPUT_DIR}/${PREFIX}-data.img.lz4 \ + ${BUILDSYS_OUTPUT_DIR}/${VERSIONED}-data.img.lz4 +ln -snf ${BUILDSYS_OUTPUT_DIR}/${PREFIX}-boot.ext4.lz4 \ + ${BUILDSYS_OUTPUT_DIR}/${VERSIONED}-boot.ext4.lz4 +ln -snf ${BUILDSYS_OUTPUT_DIR}/${PREFIX}-root.ext4.lz4 \ + ${BUILDSYS_OUTPUT_DIR}/${VERSIONED}-root.ext4.lz4 +ln -snf ${BUILDSYS_OUTPUT_DIR}/${PREFIX}-root.verity.lz4 \ + ${BUILDSYS_OUTPUT_DIR}/${VERSIONED}-root.verity.lz4 ''' ] [tasks.build] dependencies = [ "link-clean", - "build-images", + "build-variant", "check-licenses", - "link-images", + "link-variant", ] [tasks.world] @@ -207,7 +210,7 @@ script = ['tools/gen-docs.sh'] [tasks.clean] script = [ ''' -for ws in workspaces packages images tools/buildsys ; do +for ws in workspaces packages variants tools/buildsys ; do cargo clean --manifest-path ${ws}/Cargo.toml done rm -f ${BUILDSYS_TOOLS_DIR}/bin/buildsys diff --git a/macros/shared b/macros/shared index 2e2a623bff2..4847306c586 100644 --- a/macros/shared +++ b/macros/shared @@ -37,6 +37,8 @@ %_cross_unitdir %{_cross_rootdir}%{_unitdir} %_cross_userunitdir %{_cross_rootdir}%{_userunitdir} %_cross_journalcatalogdir %{_cross_rootdir}%{_journalcatalogdir} +%_cross_systemdgeneratordir %{_cross_rootdir}%{_systemdgeneratordir} +%_cross_systemdusergeneratordir %{_cross_rootdir}%{_systemdusergeneratordir} %_cross_sysusersdir %{_cross_rootdir}%{_sysusersdir} %_cross_sysctldir %{_cross_rootdir}%{_sysctldir} %_cross_templatedir %{_cross_datadir}/templates diff --git a/packages/release/host-containerd-config.toml b/packages/host-ctr/host-containerd-config.toml similarity index 100% rename from packages/release/host-containerd-config.toml rename to packages/host-ctr/host-containerd-config.toml diff --git a/packages/host-ctr/host-containerd-tmpfiles.conf b/packages/host-ctr/host-containerd-tmpfiles.conf new file mode 100644 index 00000000000..51cfa4d7b7b --- /dev/null +++ b/packages/host-ctr/host-containerd-tmpfiles.conf @@ -0,0 +1 @@ +C /etc/host-containerd/config.toml - - - - diff --git a/packages/release/host-containerd.service b/packages/host-ctr/host-containerd.service similarity index 100% rename from packages/release/host-containerd.service rename to packages/host-ctr/host-containerd.service diff --git a/packages/host-ctr/host-ctr.spec b/packages/host-ctr/host-ctr.spec index 70ea191dfd8..63d3904b75f 100644 --- a/packages/host-ctr/host-ctr.spec +++ b/packages/host-ctr/host-ctr.spec @@ -1,5 +1,4 @@ %global workspace_name host-ctr -%global systemd_systemdir %{_cross_libdir}/systemd/system Name: %{_cross_os}%{workspace_name} Version: 0.0 @@ -7,6 +6,11 @@ Release: 0%{?dist} Summary: Thar host container runner License: FIXME BuildRequires: %{_cross_os}glibc-devel +Requires: %{_cross_os}containerd + +Source10: host-containerd.service +Source11: host-containerd-tmpfiles.conf +Source12: host-containerd-config.toml %description %{summary}. @@ -24,7 +28,19 @@ go build -buildmode=pie -tags="${BUILDTAGS}" -o host-ctr install -d %{buildroot}%{_cross_bindir} install -p -m 0755 host-ctr %{buildroot}%{_cross_bindir} +install -d %{buildroot}%{_cross_unitdir} +install -p -m 0644 %{S:10} %{buildroot}%{_cross_unitdir} + +install -d %{buildroot}%{_cross_tmpfilesdir} +install -p -m 0644 %{S:11} %{buildroot}%{_cross_tmpfilesdir}/host-containerd.conf + +install -d %{buildroot}%{_cross_factorydir}%{_cross_sysconfdir}/host-containerd +install -p -m 0644 %{S:12} %{buildroot}%{_cross_factorydir}%{_cross_sysconfdir}/host-containerd/config.toml + %files %{_cross_bindir}/host-ctr +%{_cross_unitdir}/host-containerd.service +%{_cross_tmpfilesdir}/host-containerd.conf +%{_cross_factorydir}%{_cross_sysconfdir}/host-containerd/config.toml %changelog diff --git a/packages/login/login b/packages/login/login new file mode 100755 index 00000000000..7a8789a7c79 --- /dev/null +++ b/packages/login/login @@ -0,0 +1,2 @@ +#!/bin/bash +exec bash --login diff --git a/packages/login/login.c b/packages/login/login.c deleted file mode 100644 index 1924d768a75..00000000000 --- a/packages/login/login.c +++ /dev/null @@ -1,6 +0,0 @@ -#include -int main() -{ - printf("Thar does not support console logins.\n"); - return 0; -} diff --git a/packages/login/login.spec b/packages/login/login.spec index f7bcdd82069..6948af2c5c5 100644 --- a/packages/login/login.spec +++ b/packages/login/login.spec @@ -1,13 +1,12 @@ Name: %{_cross_os}login Version: 0.0.1 Release: 1%{?dist} -Summary: A login that doesn't actually allow logins +Summary: A login helper License: FIXME -Source0: login.c +Source0: login BuildRequires: %{_cross_os}glibc-devel - -# This package should only be installed if there is no shell. -Conflicts: %{_cross_os}bash +Requires: %{_cross_os}bash +Requires: %{_cross_os}systemd-console %description %{summary}. @@ -15,12 +14,10 @@ Conflicts: %{_cross_os}bash %prep %build -%set_cross_build_flags -%{_cross_target}-gcc ${CFLAGS} ${LDFLAGS} -o login %{S:0} %install install -d %{buildroot}%{_cross_bindir} -install -p -m 0755 login %{buildroot}%{_cross_bindir}/login +install -p -m 0755 %{S:0} %{buildroot}%{_cross_bindir}/login %files %{_cross_bindir}/login diff --git a/packages/release/login b/packages/release/login deleted file mode 100755 index a5f1dae14cf..00000000000 --- a/packages/release/login +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash - -# FIXME: build from shadow-utils? -exec bash --login diff --git a/packages/release/release-tmpfiles.conf b/packages/release/release-tmpfiles.conf index 2c5e25af2e6..611d3763e08 100644 --- a/packages/release/release-tmpfiles.conf +++ b/packages/release/release-tmpfiles.conf @@ -1,4 +1,3 @@ C /etc/hosts - - - - C /etc/nsswitch.conf - - - - C /etc/wicked/ifconfig/eth0.xml - - - - -C /etc/host-containerd/config.toml - - - - diff --git a/packages/release/release.spec b/packages/release/release.spec index 8a188e64f8a..c341fb7c4e4 100644 --- a/packages/release/release.spec +++ b/packages/release/release.spec @@ -1,14 +1,9 @@ -# To include a shell in Thar, set this to bcond_without. -%bcond_with shell # without - Name: %{_cross_os}release Version: 0.1.6 Release: 1%{?dist} Summary: Thar release License: Public Domain -Source1: login - Source10: hosts Source11: nsswitch.conf Source98: release-sysctl.conf @@ -19,8 +14,6 @@ Source200: hostname.template Source1000: eth0.xml Source1002: configured.target -Source1003: host-containerd.service -Source1004: host-containerd-config.toml Source1006: prepare-local.service Source1007: var.mount Source1008: opt.mount @@ -30,9 +23,6 @@ BuildArch: noarch Requires: %{_cross_os}acpid Requires: %{_cross_os}apiclient Requires: %{_cross_os}apiserver -%if %{with shell} -Requires: %{_cross_os}bash -%endif Requires: %{_cross_os}ca-certificates Requires: %{_cross_os}chrony Requires: %{_cross_os}coreutils @@ -47,9 +37,6 @@ Requires: %{_cross_os}iproute Requires: %{_cross_os}kernel Requires: %{_cross_os}kernel-modules Requires: %{_cross_os}bork -%if %{without shell} -Requires: %{_cross_os}login -%endif Requires: %{_cross_os}moondog Requires: %{_cross_os}netdog Requires: %{_cross_os}signpost @@ -65,7 +52,6 @@ Requires: %{_cross_os}updog Requires: %{_cross_os}util-linux Requires: %{_cross_os}preinit Requires: %{_cross_os}wicked -Requires: %{_cross_os}host-ctr %description %{summary}. @@ -75,21 +61,12 @@ Requires: %{_cross_os}host-ctr %build %install - -%if %{with shell} -install -d %{buildroot}%{_cross_bindir} -install -p -m 0755 %{S:1} %{buildroot}%{_cross_bindir} -%endif - install -d %{buildroot}%{_cross_factorydir}%{_cross_sysconfdir} install -p -m 0644 %{S:10} %{S:11} %{buildroot}%{_cross_factorydir}%{_cross_sysconfdir} install -d %{buildroot}%{_cross_factorydir}%{_cross_sysconfdir}/wicked/ifconfig install -p -m 0644 %{S:1000} %{buildroot}%{_cross_factorydir}%{_cross_sysconfdir}/wicked/ifconfig -install -d %{buildroot}%{_cross_factorydir}%{_cross_sysconfdir}/host-containerd -install -p -m 0644 %{S:1004} %{buildroot}%{_cross_factorydir}%{_cross_sysconfdir}/host-containerd/config.toml - install -d %{buildroot}%{_cross_sysctldir} install -p -m 0644 %{S:98} %{buildroot}%{_cross_sysctldir}/80-release.conf @@ -104,24 +81,19 @@ VERSION_ID=%{version} EOF install -d %{buildroot}%{_cross_unitdir} -install -p -m 0644 %{S:1002} %{S:1003} %{S:1006} %{S:1007} %{S:1008} %{S:1010} %{buildroot}%{_cross_unitdir} +install -p -m 0644 %{S:1002} %{S:1006} %{S:1007} %{S:1008} %{S:1010} %{buildroot}%{_cross_unitdir} install -d %{buildroot}%{_cross_templatedir} install -p -m 0644 %{S:200} %{buildroot}%{_cross_templatedir}/hostname %files -%if %{with shell} -%{_cross_bindir}/login -%endif %{_cross_factorydir}%{_cross_sysconfdir}/hosts %{_cross_factorydir}%{_cross_sysconfdir}/nsswitch.conf %{_cross_factorydir}%{_cross_sysconfdir}/wicked/ifconfig/eth0.xml -%{_cross_factorydir}%{_cross_sysconfdir}/host-containerd/config.toml %{_cross_sysctldir}/80-release.conf %{_cross_tmpfilesdir}/release.conf %{_cross_libdir}/os-release %{_cross_unitdir}/configured.target -%{_cross_unitdir}/host-containerd.service %{_cross_unitdir}/prepare-local.service %{_cross_unitdir}/var.mount %{_cross_unitdir}/opt.mount diff --git a/packages/systemd/systemd.spec b/packages/systemd/systemd.spec index 1efca91180d..4556e94e63c 100644 --- a/packages/systemd/systemd.spec +++ b/packages/systemd/systemd.spec @@ -47,6 +47,12 @@ Requires: %{_cross_os}libxcrypt %description %{summary}. +%package console +Summary: Files for console login using the System and Service Manager + +%description console +%{summary}. + %package devel Summary: Files for development using the System and Service Manager Requires: %{name} @@ -250,6 +256,19 @@ rm -f %{buildroot}%{_cross_libdir}/systemd/network/* %exclude %{_cross_localstatedir}/log/README %exclude %{_cross_rundir} +%exclude %{_cross_systemdgeneratordir}/systemd-getty-generator +%exclude %{_cross_unitdir}/console-getty.service +%exclude %{_cross_unitdir}/container-getty@.service +%exclude %{_cross_unitdir}/getty@.service +%exclude %{_cross_unitdir}/serial-getty@.service + +%files console +%{_cross_systemdgeneratordir}/systemd-getty-generator +%{_cross_unitdir}/console-getty.service +%{_cross_unitdir}/container-getty@.service +%{_cross_unitdir}/getty@.service +%{_cross_unitdir}/serial-getty@.service + %files devel %{_cross_libdir}/libsystemd.so %{_cross_libdir}/libudev.so diff --git a/packages/workspaces/workspaces.spec b/packages/workspaces/workspaces.spec index 31aaaa39c79..9c77f1601e4 100644 --- a/packages/workspaces/workspaces.spec +++ b/packages/workspaces/workspaces.spec @@ -94,6 +94,7 @@ Requires: %{_cross_os}apiserver = %{version}-%{release} %package -n %{_cross_os}host-containers Summary: Manages system- and user-defined host containers Requires: %{_cross_os}apiserver = %{version}-%{release} +Requires: %{_cross_os}host-ctr %description -n %{_cross_os}host-containers %{summary}. diff --git a/tools/buildsys/src/builder.rs b/tools/buildsys/src/builder.rs index 0ec68a03823..f4de8e243f9 100644 --- a/tools/buildsys/src/builder.rs +++ b/tools/buildsys/src/builder.rs @@ -1,5 +1,5 @@ /*! -This module handles the calls to Docker needed to execute package and image +This module handles the calls to Docker needed to execute package and variant builds. The actual build steps and the expected parameters are defined in the repository's top-level Dockerfile. @@ -21,7 +21,7 @@ impl PackageBuilder { pub(crate) fn build(package: &str) -> Result<(Self)> { let arch = getenv("BUILDSYS_ARCH")?; - let target = "rpm"; + let target = "package"; let build_args = format!( "--build-arg PACKAGE={package} \ --build-arg ARCH={arch}", @@ -40,31 +40,31 @@ impl PackageBuilder { } } -pub(crate) struct ImageBuilder; +pub(crate) struct VariantBuilder; -impl ImageBuilder { - /// Build an image with the specified packages installed. +impl VariantBuilder { + /// Build a variant with the specified packages installed. pub(crate) fn build(packages: &[String]) -> Result<(Self)> { // We want PACKAGES to be a value that contains spaces, since that's // easier to work with in the shell than other forms of structured data. let packages = packages.join("|"); let arch = getenv("BUILDSYS_ARCH")?; - let name = getenv("IMAGE")?; + let variant = getenv("BUILDSYS_VARIANT")?; - // Always rebuild images since they are located in a different workspace, + // Always rebuild variants since they are located in a different workspace, // and don't directly track changes in the underlying packages. getenv("BUILDSYS_TIMESTAMP")?; - let target = "image"; + let target = "variant"; let build_args = format!( "--build-arg PACKAGES={packages} \ --build-arg ARCH={arch} \ - --build-arg FLAVOR={name}", + --build-arg VARIANT={variant}", packages = packages, arch = arch, - name = name, + variant = variant, ); - let tag = format!("buildsys-img-{name}-{arch}", name = name, arch = arch); + let tag = format!("buildsys-var-{variant}-{arch}", variant = variant, arch = arch); build(&target, &build_args, &tag)?; @@ -72,7 +72,7 @@ impl ImageBuilder { } } -/// Invoke a series of `docker` commands to drive a package or image build. +/// Invoke a series of `docker` commands to drive a package or variant build. fn build(target: &str, build_args: &str, tag: &str) -> Result<()> { // Our Dockerfile is in the top-level directory. let root = getenv("BUILDSYS_ROOT_DIR")?; diff --git a/tools/buildsys/src/main.rs b/tools/buildsys/src/main.rs index 8b624dc3490..8aacfc956a5 100644 --- a/tools/buildsys/src/main.rs +++ b/tools/buildsys/src/main.rs @@ -1,5 +1,5 @@ /*! -This tool carries out a package or image build using Docker. +This tool carries out a package or variant build using Docker. It is meant to be called by a Cargo build script. To keep those scripts simple, all of the configuration is taken from the environment, with the build type @@ -14,7 +14,7 @@ mod manifest; mod project; mod spec; -use builder::{ImageBuilder, PackageBuilder}; +use builder::{PackageBuilder, VariantBuilder}; use cache::LookasideCache; use manifest::ManifestInfo; use project::ProjectInfo; @@ -64,7 +64,7 @@ type Result = std::result::Result; #[serde(rename_all = "kebab-case")] enum Command { BuildPackage, - BuildImage, + BuildVariant, } fn usage() -> ! { @@ -75,7 +75,7 @@ USAGE: SUBCOMMANDS: build-package Build RPMs from a spec file and sources. - build-image Build filesystem and disk images from RPMs." + build-variant Build filesystem and disk images from RPMs." ); std::process::exit(1) } @@ -85,7 +85,7 @@ fn main() -> Result<()> { let command = serde_plain::from_str::(&command_str).unwrap_or_else(|_| usage()); match command { Command::BuildPackage => build_package()?, - Command::BuildImage => build_image()?, + Command::BuildVariant => build_variant()?, } Ok(()) } @@ -133,7 +133,7 @@ fn build_package() -> Result<()> { Ok(()) } -fn build_image() -> Result<()> { +fn build_variant() -> Result<()> { let manifest_dir: PathBuf = getenv("CARGO_MANIFEST_DIR")?.into(); let manifest_file = "Cargo.toml"; println!("cargo:rerun-if-changed={}", manifest_file); @@ -142,9 +142,9 @@ fn build_image() -> Result<()> { ManifestInfo::new(manifest_dir.join(manifest_file)).context(error::ManifestParse)?; if let Some(packages) = manifest.included_packages() { - ImageBuilder::build(&packages).context(error::BuildAttempt)?; + VariantBuilder::build(&packages).context(error::BuildAttempt)?; } else { - println!("cargo:warning=No included packages in manifest. Skipping image build."); + println!("cargo:warning=No included packages in manifest. Skipping variant build."); } Ok(()) diff --git a/tools/buildsys/src/manifest.rs b/tools/buildsys/src/manifest.rs index 5eaf0da50b6..deebbf5441a 100644 --- a/tools/buildsys/src/manifest.rs +++ b/tools/buildsys/src/manifest.rs @@ -29,9 +29,9 @@ url = "https://bar" sha512 = "123456" ``` -`included-packages` is a list of packages that should be included in an image. +`included-packages` is a list of packages that should be included in a variant. ``` -[package.metadata.build-image] +[package.metadata.build-variant] included-packages = ["release"] ``` */ @@ -72,7 +72,7 @@ impl ManifestInfo { /// Convenience method to return the list of included packages. pub(crate) fn included_packages(&self) -> Option<&Vec> { - self.build_image() + self.build_variant() .and_then(|b| b.included_packages.as_ref()) } @@ -84,11 +84,11 @@ impl ManifestInfo { .and_then(|m| m.build_package.as_ref()) } - fn build_image(&self) -> Option<&BuildImage> { + fn build_variant(&self) -> Option<&BuildVariant> { self.package .metadata .as_ref() - .and_then(|m| m.build_image.as_ref()) + .and_then(|m| m.build_variant.as_ref()) } } @@ -102,7 +102,7 @@ struct Package { #[serde(rename_all = "kebab-case")] struct Metadata { build_package: Option, - build_image: Option, + build_variant: Option, } #[derive(Deserialize, Debug)] @@ -114,7 +114,7 @@ pub(crate) struct BuildPackage { #[derive(Deserialize, Debug)] #[serde(rename_all = "kebab-case")] -pub(crate) struct BuildImage { +pub(crate) struct BuildVariant { pub(crate) included_packages: Option>, } diff --git a/tools/rpm2img b/tools/rpm2img index 446ed59adf1..4e1b6193a81 100755 --- a/tools/rpm2img +++ b/tools/rpm2img @@ -13,11 +13,11 @@ done mkdir -p "${OUTPUT_DIR}" -DISK_IMAGE_NAME="thar-${ARCH}.img.lz4" -BOOT_IMAGE_NAME="thar-${ARCH}-boot.ext4.lz4" -VERITY_IMAGE_NAME="thar-${ARCH}-root.verity.lz4" -ROOT_IMAGE_NAME="thar-${ARCH}-root.ext4.lz4" -DATA_IMAGE_NAME="thar-${ARCH}-data.img.lz4" +DISK_IMAGE_NAME="thar-${ARCH}-${VARIANT}.img.lz4" +BOOT_IMAGE_NAME="thar-${ARCH}-${VARIANT}-boot.ext4.lz4" +VERITY_IMAGE_NAME="thar-${ARCH}-${VARIANT}-root.verity.lz4" +ROOT_IMAGE_NAME="thar-${ARCH}-${VARIANT}-root.ext4.lz4" +DATA_IMAGE_NAME="thar-${ARCH}-${VARIANT}-data.img.lz4" DISK_IMAGE="$(mktemp)" BOOT_IMAGE="$(mktemp)" @@ -113,8 +113,8 @@ BOOT_MOUNT="/mnt/boot" mkdir "${BOOT_MOUNT}" mv "${ROOT_MOUNT}/boot"/* "${BOOT_MOUNT}" -# Set the Thar flavor -echo "VARIANT_ID=${FLAVOR}" >> ${ROOT_MOUNT}/${SYS_ROOT}/usr/lib/os-release +# Set the Thar variant +echo "VARIANT_ID=${VARIANT}" >> ${ROOT_MOUNT}/${SYS_ROOT}/usr/lib/os-release # THAR-ROOT-A mkfs.ext4 -O ^has_journal -b "${VERITY_DATA_BLOCK_SIZE}" -d "${ROOT_MOUNT}" "${ROOT_IMAGE}" 920M diff --git a/images/Cargo.lock b/variants/Cargo.lock similarity index 74% rename from images/Cargo.lock rename to variants/Cargo.lock index 892ed34d0c9..31858089db2 100644 --- a/images/Cargo.lock +++ b/variants/Cargo.lock @@ -1,5 +1,9 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. +[[package]] +name = "aws-dev" +version = "0.1.0" + [[package]] name = "aws-k8s" version = "0.1.0" diff --git a/images/Cargo.toml b/variants/Cargo.toml similarity index 85% rename from images/Cargo.toml rename to variants/Cargo.toml index c8a5607ee56..5c5acb1fd2e 100644 --- a/images/Cargo.toml +++ b/variants/Cargo.toml @@ -1,6 +1,7 @@ [workspace] members = [ "aws-k8s", + "aws-dev", ] [profile.dev] diff --git a/variants/aws-dev/Cargo.toml b/variants/aws-dev/Cargo.toml new file mode 100644 index 00000000000..ee98788f81e --- /dev/null +++ b/variants/aws-dev/Cargo.toml @@ -0,0 +1,27 @@ +[package] +name = "aws-dev" +version = "0.1.0" +edition = "2018" +publish = false +build = "build.rs" + +[package.metadata.build-variant] +included-packages = [ +# core + "release", +# docker + "docker-cli", + "docker-engine", + "docker-init", + "docker-proxy", +# tools + "findutils", + "login", + "iputils", + "procps", + "strace", + "tcpdump", +] + +[lib] +path = "lib.rs" diff --git a/images/aws-k8s/build.rs b/variants/aws-dev/build.rs similarity index 66% rename from images/aws-k8s/build.rs rename to variants/aws-dev/build.rs index 1bba8a6db0e..d6a90e4df44 100644 --- a/images/aws-k8s/build.rs +++ b/variants/aws-dev/build.rs @@ -1,7 +1,7 @@ use std::process::{exit, Command}; fn main() -> Result<(), std::io::Error> { - let ret = Command::new("buildsys").arg("build-image").status()?; + let ret = Command::new("buildsys").arg("build-variant").status()?; if !ret.success() { exit(1); } diff --git a/images/aws-k8s/img.rs b/variants/aws-dev/lib.rs similarity index 100% rename from images/aws-k8s/img.rs rename to variants/aws-dev/lib.rs diff --git a/images/aws-k8s/Cargo.toml b/variants/aws-k8s/Cargo.toml similarity index 81% rename from images/aws-k8s/Cargo.toml rename to variants/aws-k8s/Cargo.toml index 643f2fc8ff0..20f6edea038 100644 --- a/images/aws-k8s/Cargo.toml +++ b/variants/aws-k8s/Cargo.toml @@ -5,7 +5,7 @@ edition = "2018" publish = false build = "build.rs" -[package.metadata.build-image] +[package.metadata.build-variant] included-packages = [ "aws-iam-authenticator", "cni", @@ -15,4 +15,4 @@ included-packages = [ ] [lib] -path = "img.rs" +path = "lib.rs" diff --git a/variants/aws-k8s/build.rs b/variants/aws-k8s/build.rs new file mode 100644 index 00000000000..d6a90e4df44 --- /dev/null +++ b/variants/aws-k8s/build.rs @@ -0,0 +1,9 @@ +use std::process::{exit, Command}; + +fn main() -> Result<(), std::io::Error> { + let ret = Command::new("buildsys").arg("build-variant").status()?; + if !ret.success() { + exit(1); + } + Ok(()) +} diff --git a/variants/aws-k8s/lib.rs b/variants/aws-k8s/lib.rs new file mode 100644 index 00000000000..d799fb2d44c --- /dev/null +++ b/variants/aws-k8s/lib.rs @@ -0,0 +1 @@ +// not used diff --git a/workspaces/updater/README.md b/workspaces/updater/README.md index 91c59c71ee1..5bb51022370 100644 --- a/workspaces/updater/README.md +++ b/workspaces/updater/README.md @@ -32,10 +32,10 @@ Any file listed in the manifest is also a TUF 'target' listed in targets.json an ## Updog Updog is the client tool that interacts with a 'The Update Framework' (TUF) repository to download and write updates to a Thar partition. Updog will parse the manifest.json file from the TUF repository and will update to a new image if the following criteria are satisfied: -### Version & Flavor +### Version & Variant By default Updog only considers updates resulting in a version increase; downgrades are possible by using the `--image` option to force a specific version. Updog will respect the `max_version` field in the update manifest and refuse to update beyond it. -Updog also considers the Thar "flavor" of its current image and will not download updates for a different flavor. +Updog also considers the Thar "variant" of its current image and will not download updates for a different variant. ### Datastore version Each update image has an associated datastore version. If an update would cause a change in datastore version, Updog will ensure the appropriate migration files are available to safely transition between datastore versions. diff --git a/workspaces/updater/updog/README.md b/workspaces/updater/updog/README.md index 4df0fc53953..912fae45b5b 100644 --- a/workspaces/updater/updog/README.md +++ b/workspaces/updater/updog/README.md @@ -25,7 +25,7 @@ aws-k8s-0.1.1 (v0.0) ### Specify JSON output ``` # updog check-update --json -[{"flavor":"aws-k8s","arch":"x86_64","version":"0.1.4","max_version":"0.1.4","waves":{"512":"2019-10-03T20:45:52Z","1024":"2019-10-03T21:00:52Z","1536":"2019-10-03T22:00:52Z","2048":"2019-10-03T23:00:52Z"},"images":{"boot":"thar-x86_64-0.1.4-boot.ext4.lz4","root":"thar-x86_64-0.1.4-root.ext4.lz4","hash":"thar-x86_64-0.1.4-root.verity.lz4"}}] +[{"flavor":"aws-k8s","arch":"x86_64","version":"0.1.4","max_version":"0.1.4","waves":{"512":"2019-10-03T20:45:52Z","1024":"2019-10-03T21:00:52Z","1536":"2019-10-03T22:00:52Z","2048":"2019-10-03T23:00:52Z"},"images":{"boot":"thar-x86_64-aws-k8s-v0.1.4-boot.ext4.lz4","root":"thar-x86_64-aws-k8s-v0.1.4-root.ext4.lz4","hash":"thar-x86_64-aws-k8s-v0.1.4-root.verity.lz4"}}] ``` ### Try to update with wave information