From a521b5fc8c6bedc44c5fd87eb5be5fa10039d9ef Mon Sep 17 00:00:00 2001 From: Wildan M Date: Thu, 4 Sep 2025 23:37:38 +0700 Subject: [PATCH] Add push recipe to existing image --- mk/config.mk | 1 + mk/disk.mk | 26 +++++++++++++------------- mk/repo.mk | 28 ++++++++++++++++++++++++++++ 3 files changed, 42 insertions(+), 13 deletions(-) diff --git a/mk/config.mk b/mk/config.mk index 121e80577..e625b1a57 100644 --- a/mk/config.mk +++ b/mk/config.mk @@ -109,6 +109,7 @@ else export GNU_TARGET=$(TARGET) endif BUILD=build/$(ARCH)/$(CONFIG_NAME) +MOUNT_DIR=$(BUILD)/filesystem HOST_FSTOOLS=build/fstools INSTALLER=$(HOST_FSTOOLS)/bin/redox_installer INSTALLER_OPTS= diff --git a/mk/disk.mk b/mk/disk.mk index c26d9a6cb..268c7809c 100644 --- a/mk/disk.mk +++ b/mk/disk.mk @@ -27,8 +27,8 @@ $(BUILD)/redox-live.iso: $(HOST_FSTOOLS) $(REPO_TAG) redox.ipxe $(BUILD)/filesystem.img: $(HOST_FSTOOLS) $(REPO_TAG) mkdir -p $(BUILD) - -$(FUMOUNT) $(BUILD)/filesystem/ || true - rm -rf $@ $@.partial $(BUILD)/filesystem/ + -$(FUMOUNT) $(MOUNT_DIR) || true + rm -rf $@ $@.partial $(MOUNT_DIR) -$(FUMOUNT) /tmp/redox_installer || true FILESYSTEM_SIZE=$(FILESYSTEM_SIZE) && \ if [ -z "$$FILESYSTEM_SIZE" ] ; then \ @@ -36,30 +36,30 @@ $(BUILD)/filesystem.img: $(HOST_FSTOOLS) $(REPO_TAG) fi && \ truncate -s "$$FILESYSTEM_SIZE"m $@.partial $(REDOXFS_MKFS) $(REDOXFS_MKFS_FLAGS) $@.partial - mkdir -p $(BUILD)/filesystem/ - $(REDOXFS) $@.partial $(BUILD)/filesystem/ + mkdir -p $(MOUNT_DIR) + $(REDOXFS) $@.partial $(MOUNT_DIR) sleep 1 pgrep redoxfs - umask 002 && $(INSTALLER) $(INSTALLER_OPTS) -c $(FILESYSTEM_CONFIG) $(BUILD)/filesystem/ + umask 002 && $(INSTALLER) $(INSTALLER_OPTS) -c $(FILESYSTEM_CONFIG) $(MOUNT_DIR) sync - -$(FUMOUNT) $(BUILD)/filesystem/ || true - rm -rf $(BUILD)/filesystem/ + -$(FUMOUNT) $(MOUNT_DIR) || true + rm -rf $(MOUNT_DIR) mv $@.partial $@ mount: $(HOST_FSTOOLS) FORCE - mkdir -p $(BUILD)/filesystem/ - $(REDOXFS) $(BUILD)/harddrive.img $(BUILD)/filesystem/ + mkdir -p $(MOUNT_DIR) + $(REDOXFS) $(BUILD)/harddrive.img $(MOUNT_DIR) sleep 2 pgrep redoxfs mount_extra: $(HOST_FSTOOLS) FORCE - mkdir -p $(BUILD)/filesystem/ - $(REDOXFS) $(BUILD)/extra.img $(BUILD)/filesystem/ + mkdir -p $(MOUNT_DIR) + $(REDOXFS) $(BUILD)/extra.img $(MOUNT_DIR) sleep 2 pgrep redoxfs unmount: FORCE sync - -$(FUMOUNT) $(BUILD)/filesystem/ || true - rm -rf $(BUILD)/filesystem/ + -$(FUMOUNT) $(MOUNT_DIR) || true + rm -rf $(MOUNT_DIR) -$(FUMOUNT) /tmp/redox_installer || true diff --git a/mk/repo.mk b/mk/repo.mk index d8f232d81..dedf72bbe 100644 --- a/mk/repo.mk +++ b/mk/repo.mk @@ -87,6 +87,34 @@ else fi endif +MOUNTED_TAG=$(MOUNT_DIR)~ + +# Push compiled package into existing image +# DO NOT RUN THIS WHILE QEMU ALIVE, THE DISK MIGHT CORRUPT IN DOING SO +p.%: $(FSTOOLS_TAG) FORCE + @rm -f $(MOUNTED_TAG) + @if [ ! -d "$(MOUNT_DIR)" ]; then \ + $(MAKE) mount; \ + touch $(MOUNTED_TAG); \ + fi +ifeq ($(PODMAN_BUILD),1) + $(PODMAN_RUN) make $@ +else + @if echo "$*" | grep -q ','; then \ + $(MAKE) $(foreach f,$(subst $(comma), ,$*),p.$(f)); \ + else \ + export RECIPE_PATH=cookbook/$(shell make find.$* | grep ^recipes) && \ + export RECIPE_STAGE=$$RECIPE_PATH/target/$(TARGET)/stage.pkgar && \ + ./cookbook/pkgar/target/release/pkgar extract $(MOUNT_DIR)/ --archive $$RECIPE_STAGE \ + --pkey ./cookbook/build/id_ed25519.pub.toml && \ + echo "extracted $$RECIPE_PATH"; \ + fi +endif + @if [ -f $(MOUNTED_TAG) ]; then \ + $(MAKE) unmount; && rm -f $(MOUNTED_TAG); \ + else echo "Not unmounting by ourself, don't forget to do it"; \ + fi + # Invoke unfetch.sh for one or more targets separated by comma u.%: $(FSTOOLS_TAG) FORCE ifeq ($(PODMAN_BUILD),1)