From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id BE48E1FF15F for ; Mon, 18 Nov 2024 13:40:17 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 2B47FFB7D; Mon, 18 Nov 2024 13:40:14 +0100 (CET) From: Christoph Heiss To: pve-devel@lists.proxmox.com Date: Mon, 18 Nov 2024 13:38:37 +0100 Message-ID: <20241118123843.1090243-2-c.heiss@proxmox.com> X-Mailer: git-send-email 2.47.0 In-Reply-To: <20241118123843.1090243-1-c.heiss@proxmox.com> References: <20241118123843.1090243-1-c.heiss@proxmox.com> MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.029 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [pve-devel] [PATCH installer v2 1/5] fix #5579: first-boot: add initial service packaging X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox VE development discussion Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" While there is the `systemd-first-boot.service`, it uses the non-existence of `/etc/machine-id` as condition to run. As we already set up that file in the installer ourselves, we cannot use that. Instead our service depends on a custom flag file in /var/lib/proxmox-first-boot and will only run if that is present. Signed-off-by: Christoph Heiss --- Changes v1 -> v2: * changed to three separate services, of which the requested one gets enabled manually, as suggested by Thomas Makefile | 13 ++++++++++--- debian/control | 7 +++++++ debian/proxmox-first-boot.install | 3 +++ debian/rules | 5 +++++ proxmox-first-boot/Makefile | 10 ++++++++++ .../etc/proxmox-first-boot-multi-user.service | 15 +++++++++++++++ .../proxmox-first-boot-network-online.service | 17 +++++++++++++++++ .../etc/proxmox-first-boot-network-pre.service | 17 +++++++++++++++++ 8 files changed, 84 insertions(+), 3 deletions(-) create mode 100644 debian/proxmox-first-boot.install create mode 100644 proxmox-first-boot/Makefile create mode 100644 proxmox-first-boot/etc/proxmox-first-boot-multi-user.service create mode 100644 proxmox-first-boot/etc/proxmox-first-boot-network-online.service create mode 100644 proxmox-first-boot/etc/proxmox-first-boot-network-pre.service diff --git a/Makefile b/Makefile index d85347f..a17f6c5 100644 --- a/Makefile +++ b/Makefile @@ -5,6 +5,10 @@ BUILDDIR ?= $(PACKAGE)-$(DEB_VERSION_UPSTREAM) DEB=$(PACKAGE)_$(DEB_VERSION)_$(DEB_HOST_ARCH).deb ASSISTANT_DEB=proxmox-auto-install-assistant_$(DEB_VERSION)_$(DEB_HOST_ARCH).deb +FIRST_BOOT_DEB=proxmox-first-boot_$(DEB_VERSION)_$(DEB_HOST_ARCH).deb + +ALL_DEBS = $(DEB) $(ASSISTANT_DEB) $(FIRST_BOOT_DEB) + DSC=$(PACKAGE)_$(DEB_VERSION).dsc CARGO ?= cargo @@ -61,6 +65,7 @@ $(BUILDDIR): proxmox-tui-installer/ \ proxmox-installer-common/ \ proxmox-post-hook \ + proxmox-first-boot \ test/ \ $(SHELL_SCRIPTS) \ $@.tmp @@ -73,9 +78,10 @@ country.dat: country.pl deb: $(DEB) $(ASSISTANT_DEB): $(DEB) +$(FIRST_BOOT_DEB): $(DEB) $(DEB): $(BUILDDIR) cd $(BUILDDIR); dpkg-buildpackage -b -us -uc - lintian $(DEB) $(ASSISTANT_DEB) + lintian $(ALL_DEBS) test-$(DEB): $(INSTALLER_SOURCES) rsync --exclude='test*.img' --exclude='*.deb' --exclude='build' -a * build @@ -114,6 +120,7 @@ HTMLDIR=$(VARLIBDIR)/html/common install: $(INSTALLER_SOURCES) $(COMPILED_BINS) $(MAKE) -C banner install $(MAKE) -C Proxmox install + $(MAKE) -C proxmox-first-boot install install -D -m 644 interfaces $(DESTDIR)/etc/network/interfaces install -D -m 755 fake-start-stop-daemon $(VARLIBDIR)/fake-start-stop-daemon install -D -m 755 policy-disable-rc.d $(VARLIBDIR)/policy-disable-rc.d @@ -143,8 +150,8 @@ cargo-build: .PHONY: upload upload: UPLOAD_DIST ?= $(DEB_DISTRIBUTION) -upload: $(DEB) $(ASSISTANT_DEB) - tar cf - $(DEB) $(ASSISTANT_DEB) | ssh -X repoman@repo.proxmox.com -- upload --product pve,pmg,pbs --dist $(UPLOAD_DIST) +upload: $(ALL_DEBS) + tar cf - $(ALL_DEBS) | ssh -X repoman@repo.proxmox.com -- upload --product pve,pmg,pbs --dist $(UPLOAD_DIST) %.img: truncate -s 2G $@ diff --git a/debian/control b/debian/control index ff00cc2..fd0f4df 100644 --- a/debian/control +++ b/debian/control @@ -62,3 +62,10 @@ Description: Assistant to help with automated installations Provides a helper that can assist with creating an answer file for a automated installation of a Proxmox project, and preparing a official ISO image to use this answer file. + +Package: proxmox-first-boot +Architecture: any +Depends: ${misc:Depends}, +Description: Service which runs on the first system boot for additional setup + Provides a service which will run on the first boot if the a script was + configured through the auto-installer. diff --git a/debian/proxmox-first-boot.install b/debian/proxmox-first-boot.install new file mode 100644 index 0000000..715f11a --- /dev/null +++ b/debian/proxmox-first-boot.install @@ -0,0 +1,3 @@ +lib/systemd/system/proxmox-first-boot-network-pre.service +lib/systemd/system/proxmox-first-boot-network-online.service +lib/systemd/system/proxmox-first-boot-multi-user.service diff --git a/debian/rules b/debian/rules index 8a3f879..84d5943 100755 --- a/debian/rules +++ b/debian/rules @@ -19,3 +19,8 @@ override_dh_strip: -executable -type f); do \ debian/scripts/elf-strip-unused-dependencies.sh "$$exe" || true; \ done + +override_dh_installsystemd: + # disables all services by default, as we enable them ourselves in + # the installer + dh_installsystemd --no-stop-on-upgrade --no-start --no-enable diff --git a/proxmox-first-boot/Makefile b/proxmox-first-boot/Makefile new file mode 100644 index 0000000..d889c67 --- /dev/null +++ b/proxmox-first-boot/Makefile @@ -0,0 +1,10 @@ +all: + +DESTDIR = +LIBSYSTEMD_DIR = $(DESTDIR)/lib/systemd/system + +.PHONY: install +install: + install -D -m 644 etc/proxmox-first-boot-network-pre.service $(LIBSYSTEMD_DIR)/proxmox-first-boot-network-pre.service + install -D -m 644 etc/proxmox-first-boot-network-online.service $(LIBSYSTEMD_DIR)/proxmox-first-boot-network-online.service + install -D -m 644 etc/proxmox-first-boot-multi-user.service $(LIBSYSTEMD_DIR)/proxmox-first-boot-multi-user.service diff --git a/proxmox-first-boot/etc/proxmox-first-boot-multi-user.service b/proxmox-first-boot/etc/proxmox-first-boot-multi-user.service new file mode 100644 index 0000000..d3c798d --- /dev/null +++ b/proxmox-first-boot/etc/proxmox-first-boot-multi-user.service @@ -0,0 +1,15 @@ +[Unit] +Description=Proxmox First Boot Setup (Fully Booted) +After=systemd-remount-fs.service +ConditionPathExists=/var/lib/proxmox-first-boot/pending-first-boot-setup +ConditionPathIsReadWrite=/var/lib + +[Service] +Type=oneshot +RemainAfterExit=yes +ExecStart=/var/lib/proxmox-first-boot/proxmox-first-boot fully-up +ExecStartPost=/usr/bin/rm -v /var/lib/proxmox-first-boot/pending-first-boot-setup + +[Install] +Alias=proxmox-first-boot.service +WantedBy=multi-user.target diff --git a/proxmox-first-boot/etc/proxmox-first-boot-network-online.service b/proxmox-first-boot/etc/proxmox-first-boot-network-online.service new file mode 100644 index 0000000..8417747 --- /dev/null +++ b/proxmox-first-boot/etc/proxmox-first-boot-network-online.service @@ -0,0 +1,17 @@ +[Unit] +Description=Proxmox First Boot Setup (Network Online) +After=systemd-remount-fs.service +After=network-online.target +Wants=network-online.target +ConditionPathExists=/var/lib/proxmox-first-boot/pending-first-boot-setup +ConditionPathIsReadWrite=/var/lib + +[Service] +Type=oneshot +RemainAfterExit=yes +ExecStart=/var/lib/proxmox-first-boot/proxmox-first-boot network-online +ExecStartPost=/usr/bin/rm -v /var/lib/proxmox-first-boot/pending-first-boot-setup + +[Install] +Alias=proxmox-first-boot.service +WantedBy=multi-user.target diff --git a/proxmox-first-boot/etc/proxmox-first-boot-network-pre.service b/proxmox-first-boot/etc/proxmox-first-boot-network-pre.service new file mode 100644 index 0000000..1b4e396 --- /dev/null +++ b/proxmox-first-boot/etc/proxmox-first-boot-network-pre.service @@ -0,0 +1,17 @@ +[Unit] +Description=Proxmox First Boot Setup (Pre-Network) +After=systemd-remount-fs.service +Before=network-pre.target +Wants=network-pre.target +ConditionPathExists=/var/lib/proxmox-first-boot/pending-first-boot-setup +ConditionPathIsReadWrite=/var/lib + +[Service] +Type=oneshot +RemainAfterExit=yes +ExecStart=/var/lib/proxmox-first-boot/proxmox-first-boot before-network +ExecStartPost=/usr/bin/rm -v /var/lib/proxmox-first-boot/pending-first-boot-setup + +[Install] +Alias=proxmox-first-boot.service +WantedBy=network.target -- 2.47.0 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel