diff --git a/Makefile b/Makefile index 7e111dc14..a39b727de 100644 --- a/Makefile +++ b/Makefile @@ -19,7 +19,7 @@ FRONTEND_DIAGNOSTIC_UI_SRC := $(shell find frontend/projects/diagnostic-ui) FRONTEND_INSTALL_WIZARD_SRC := $(shell find frontend/projects/install-wizard) PATCH_DB_CLIENT_SRC := $(shell find patch-db/client -not -path patch-db/client/dist) GZIP_BIN := $(shell which pigz || which gzip) -ALL_TARGETS := $(EMBASSY_BINS) system-images/compat/docker-images/aarch64.tar system-images/utils/docker-images/$(ARCH).tar system-images/binfmt/docker-images/$(ARCH).tar $(EMBASSY_SRC) $(ENVIRONMENT_FILE) $(GIT_HASH_FILE) $(VERSION_FILE) +ALL_TARGETS := $(EMBASSY_BINS) system-images/compat/docker-images/$(ARCH).tar system-images/utils/docker-images/$(ARCH).tar system-images/binfmt/docker-images/$(ARCH).tar $(EMBASSY_SRC) $(ENVIRONMENT_FILE) $(GIT_HASH_FILE) $(VERSION_FILE) ifeq ($(REMOTE),) mkdir = mkdir -p $1 @@ -105,7 +105,7 @@ install: $(ALL_TARGETS) $(call cp,libs/target/x86_64-unknown-linux-musl/release/embassy_container_init,$(DESTDIR)/usr/lib/embassy/container/embassy_container_init.amd64) $(call mkdir,$(DESTDIR)/usr/lib/embassy/system-images) - $(call cp,system-images/compat/docker-images/aarch64.tar,$(DESTDIR)/usr/lib/embassy/system-images/compat.tar) + $(call cp,system-images/compat/docker-images/$(ARCH).tar,$(DESTDIR)/usr/lib/embassy/system-images/compat.tar) $(call cp,system-images/utils/docker-images/$(ARCH).tar,$(DESTDIR)/usr/lib/embassy/system-images/utils.tar) $(call cp,system-images/binfmt/docker-images/$(ARCH).tar,$(DESTDIR)/usr/lib/embassy/system-images/binfmt.tar) @@ -138,7 +138,7 @@ emulate-reflash: $(MAKE) install REMOTE=$(REMOTE) DESTDIR=/media/embassy/next OS_ARCH=$(OS_ARCH) ssh $(REMOTE) "sudo touch /media/embassy/config/upgrade && sudo rm -f /media/embassy/config/disk.guid && sudo sync && sudo reboot" -system-images/compat/docker-images/aarch64.tar: $(COMPAT_SRC) +system-images/compat/docker-images/aarch64.tar system-images/compat/docker-images/x86_64.tar: $(COMPAT_SRC) cd system-images/compat && make system-images/utils/docker-images/aarch64.tar system-images/utils/docker-images/x86_64.tar: $(UTILS_SRC) diff --git a/backend/src/init.rs b/backend/src/init.rs index 9d12723fe..888baf301 100644 --- a/backend/src/init.rs +++ b/backend/src/init.rs @@ -21,7 +21,7 @@ use crate::middleware::auth::LOCAL_AUTH_COOKIE_PATH; use crate::sound::BEP; use crate::system::time; use crate::util::Invoke; -use crate::Error; +use crate::{Error, ARCH}; pub const SYSTEM_REBUILD_PATH: &str = "/media/embassy/config/system-rebuild"; pub const STANDBY_MODE_PATH: &str = "/media/embassy/config/standby"; @@ -277,7 +277,10 @@ pub async fn init(cfg: &RpcContextConfig) -> Result { } let should_rebuild = tokio::fs::metadata(SYSTEM_REBUILD_PATH).await.is_ok() - || &*receipts.server_version.get(&mut handle).await? < &emver::Version::new(0, 3, 2, 0); + || &*receipts.server_version.get(&mut handle).await? < &emver::Version::new(0, 3, 2, 0) + || (*ARCH == "x86_64" + && &*receipts.server_version.get(&mut handle).await? + < &emver::Version::new(0, 3, 4, 0)); let song = if should_rebuild { Some(NonDetachingJoinHandle::from(tokio::spawn(async { diff --git a/system-images/compat/Dockerfile b/system-images/compat/Dockerfile index 407f5d807..d48ac3402 100644 --- a/system-images/compat/Dockerfile +++ b/system-images/compat/Dockerfile @@ -1,6 +1,8 @@ FROM alpine:latest +ARG ARCH + RUN apk update && apk add duplicity curl -ADD ./target/aarch64-unknown-linux-musl/release/compat /usr/local/bin/compat +ADD ./target/$ARCH-unknown-linux-musl/release/compat /usr/local/bin/compat ENTRYPOINT ["compat"] diff --git a/system-images/compat/Makefile b/system-images/compat/Makefile index 39321b8fe..3dc8560b8 100644 --- a/system-images/compat/Makefile +++ b/system-images/compat/Makefile @@ -2,7 +2,7 @@ .DELETE_ON_ERROR: -all: docker-images/aarch64.tar +all: docker-images/aarch64.tar docker-images/x86_64.tar clean: cargo clean @@ -12,7 +12,10 @@ docker-images: mkdir docker-images docker-images/aarch64.tar: Dockerfile target/aarch64-unknown-linux-musl/release/compat docker-images - docker buildx build --tag start9/x_system/compat --platform=linux/arm64 -o type=docker,dest=docker-images/aarch64.tar . + docker buildx build --build-arg ARCH=aarch64 --tag start9/x_system/compat --platform=linux/arm64 -o type=docker,dest=docker-images/aarch64.tar . -target/aarch64-unknown-linux-musl/release/compat: $(COMPAT_SRC) +docker-images/x86_64.tar: Dockerfile target/x86_64-unknown-linux-musl/release/compat docker-images + docker buildx build --build-arg ARCH=aarch64 --tag start9/x_system/compat --platform=linux/amd64 -o type=docker,dest=docker-images/x86_64.tar . + +target/aarch64-unknown-linux-musl/release/compat target/x86_64-unknown-linux-musl/release/compat: $(COMPAT_SRC) ./build.sh diff --git a/system-images/compat/build.sh b/system-images/compat/build.sh index 752e3c05c..52f07475d 100755 --- a/system-images/compat/build.sh +++ b/system-images/compat/build.sh @@ -13,10 +13,12 @@ if tty -s; then USE_TTY="-it" fi -alias 'rust-musl-builder'='docker run $USE_TTY --rm -v "$HOME"/.cargo/registry:/root/.cargo/registry -v "$(pwd)":/home/rust/src start9/rust-musl-cross:aarch64-musl' +alias 'rust-arm64-musl-builder'='docker run $USE_TTY --rm -v "$HOME"/.cargo/registry:/root/.cargo/registry -v "$(pwd)":/home/rust/src messense/rust-musl-cross:aarch64-musl' +alias 'rust-x86_64-musl-builder'='docker run $USE_TTY --rm -v "$HOME"/.cargo/registry:/root/.cargo/registry -v "$(pwd)":/home/rust/src messense/rust-musl-cross:x86_64-musl' cd ../.. -rust-musl-builder sh -c "(git config --global --add safe.directory '*'; cd system-images/compat && cargo +beta build --release --target=aarch64-unknown-linux-musl --no-default-features)" +rust-arm64-musl-builder sh -c "(git config --global --add safe.directory '*'; cd system-images/compat && cargo build --release --target=aarch64-unknown-linux-musl --no-default-features)" +rust-x86_64-musl-builder sh -c "(git config --global --add safe.directory '*'; cd system-images/compat && cargo build --release --target=x86_64-unknown-linux-musl --no-default-features)" cd system-images/compat sudo chown -R $USER target