pve-installer/Makefile
Christoph Heiss dc401eb3f0 country.pl: generate final structure as json at build time directly
Currently, we generate a custom-format `country.dat` at build time,
which we then ship with the installer. In the live environment, this
then gets parsed (via regexes) into another format and is finally
written out as JSON for e.g. the TUI and auto-installer to consume.

Instead, skip the intermediate format completely and just generate the
final data structure as JSON at build time.

Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
2024-12-10 18:00:24 +01:00

231 lines
7.1 KiB
Makefile

include /usr/share/dpkg/default.mk
PACKAGE = proxmox-installer
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
ifeq ($(BUILD_MODE), release)
CARGO_BUILD_ARGS += --release
CARGO_COMPILEDIR := target/release
else
CARGO_COMPILEDIR := target/debug
endif
INSTALLER_SOURCES=$(shell git ls-files) locale-info.json
PREFIX = /usr
BINDIR = $(PREFIX)/bin
USR_BIN := \
proxmox-chroot\
proxmox-tui-installer\
proxmox-fetch-answer\
proxmox-auto-install-assistant \
proxmox-auto-installer \
proxmox-post-hook
COMPILED_BINS := \
$(addprefix $(CARGO_COMPILEDIR)/,$(USR_BIN))
SHELL_SCRIPTS := \
fake-start-stop-daemon \
policy-disable-rc.d \
spice-vdagent.sh \
unconfigured.sh \
xinitrc
all:
$(BUILDDIR):
rm -rf $@ $@.tmp; mkdir $@.tmp
cp -a \
.cargo \
Cargo.toml \
Makefile \
Proxmox/ \
Xdefaults \
banner/ \
checktime \
country.pl \
html/ \
interfaces \
proxinstall \
proxmox-low-level-installer \
proxmox-auto-installer/ \
proxmox-auto-install-assistant/ \
proxmox-fetch-answer/ \
proxmox-chroot \
proxmox-tui-installer/ \
proxmox-installer-common/ \
proxmox-post-hook \
proxmox-first-boot \
test/ \
$(SHELL_SCRIPTS) \
$@.tmp
cp -a debian $@.tmp/
mv $@.tmp $@
locale-info.json: country.pl
./country.pl > $@.tmp
mv $@.tmp $@
deb: $(DEB)
$(ASSISTANT_DEB): $(DEB)
$(FIRST_BOOT_DEB): $(DEB)
$(DEB): $(BUILDDIR)
cd $(BUILDDIR); dpkg-buildpackage -b -us -uc
lintian $(ALL_DEBS)
test-$(DEB): $(INSTALLER_SOURCES)
rsync --exclude='test*.img' --exclude='*.deb' --exclude='build' -a * build
cd build; dpkg-buildpackage -b -us -uc -nc
mv $(DEB) test-$(DEB)
dsc: $(DSC)
$(MAKE) clean
$(MAKE) $(DSC)
lintian $(DSC)
$(DSC): $(BUILDDIR)
cd $(BUILDDIR); dpkg-buildpackage -S -us -uc -d
sbuild: $(DSC)
sbuild $(DSC)
.PHONY: prepare-test-env
prepare-test-env: cd-info.test locale-info.json test.img
rm -rf testdir
mkdir -p testdir/var/lib/proxmox-installer/
cp -v locale-info.json testdir/var/lib/proxmox-installer/
./proxmox-low-level-installer -t test.img dump-env
.PHONY: test
test: prepare-test-env
shellcheck $(SHELL_SCRIPTS)
$(MAKE) -C test check
$(CARGO) test --workspace $(CARGO_BUILD_ARGS)
DESTDIR=
VARLIBDIR=$(DESTDIR)/var/lib/proxmox-installer
HTMLDIR=$(VARLIBDIR)/html/common
.PHONY: install
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
install -D -m 644 locale-info.json $(VARLIBDIR)/locale-info.json
install -D -m 755 unconfigured.sh $(DESTDIR)/sbin/unconfigured.sh
install -D -m 755 proxinstall $(DESTDIR)/usr/bin/proxinstall
install -D -m 755 proxmox-low-level-installer $(DESTDIR)/$(BINDIR)/proxmox-low-level-installer
$(foreach i,$(USR_BIN), install -m755 $(CARGO_COMPILEDIR)/$(i) $(DESTDIR)$(BINDIR)/ ;)
install -D -m 755 checktime $(DESTDIR)/usr/bin/checktime
install -D -m 644 xinitrc $(DESTDIR)/.xinitrc
install -D -m 755 spice-vdagent.sh $(DESTDIR)/.spice-vdagent.sh
install -D -m 644 Xdefaults $(DESTDIR)/.Xdefaults
$(COMPILED_BINS): cargo-build
.PHONY: cargo-build
cargo-build:
$(CARGO) build --package proxmox-tui-installer --bin proxmox-tui-installer \
--package proxmox-auto-installer --bin proxmox-auto-installer \
--package proxmox-fetch-answer --bin proxmox-fetch-answer \
--package proxmox-auto-install-assistant --bin proxmox-auto-install-assistant \
--package proxmox-chroot --bin proxmox-chroot \
--package proxmox-post-hook --bin proxmox-post-hook \
$(CARGO_BUILD_ARGS)
%-banner.png: %-banner.svg
rsvg-convert -o $@ $<
.PHONY: upload
upload: UPLOAD_DIST ?= $(DEB_DISTRIBUTION)
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 $@
%.big.img:
truncate -s 8G $@
.PHONY: prepare-check-env
prepare-check-env: test-$(DEB)
rm -rf testdir
dpkg -X test-$(DEB) testdir
mkdir -p testdir/run/proxmox-installer/
cd-info.test: PRODUCT ?= pve
cd-info.test:
printf '%s\n' "PRODUCT='$(or $(PRODUCT), pve)'" >$@.tmp
printf '%s\n' "PRODUCTLONG='$(or $(PRODUCTLONG), Proxmox VE)'" >>$@.tmp
printf '%s\n' "RELEASE='$(or $(RELEASE), 42.1)'" >>$@.tmp
printf '%s\n' "ISORELEASE='$(or $(ISORELEASE), 1)'" >>$@.tmp
printf '%s\n' "ISONAME='$(or $(ISONAME), proxmox-ve)'" >>$@.tmp
mv $@.tmp $@
check-pve: prepare-check-env test.img
rm -f cd-info.test; $(MAKE) cd-info.test
./proxmox-low-level-installer dump-env -t test.img
G_SLICE=always-malloc perl -I testdir/usr/share/perl5 testdir/usr/bin/proxinstall -t test.img
check-pve-multidisks: prepare-check-env test.img test2.img test3.img test4.img test5.big.img
rm -f cd-info.test; $(MAKE) cd-info.test
./proxmox-low-level-installer dump-env -t test.img,test2.img,test3.img,test4.img,test5.big.img
G_SLICE=always-malloc perl -I testdir/usr/share/perl5 testdir/usr/bin/proxinstall -t test.img,test2.img,test3.img,test4.img,test5.big.img
check-pve-tui: prepare-check-env test.img
rm -f cd-info.test; $(MAKE) cd-info.test
./proxmox-low-level-installer dump-env -t test.img
testdir/usr/bin/proxmox-tui-installer -t test.img 2>testdir/run/stderr
check-pve-tui-multidisks: prepare-check-env test.img test2.img test3.img test4.img test5.big.img
rm -f cd-info.test; $(MAKE) cd-info.test
./proxmox-low-level-installer dump-env -t test.img,test2.img,test3.img,test4.img,test5.big.img
testdir/usr/bin/proxmox-tui-installer -t test.img,test2.img,test3.img,test4.img,test5.big.img
prepare-check-pmg: prepare-check-env test.img
rm -f cd-info.test; $(MAKE) \
PRODUCT=pmg \
PRODUCTLONG="Proxmox Mail Gateway" \
ISONAME='proxmox-mail-gateway' \
cd-info.test
./proxmox-low-level-installer dump-env -t test.img
check-pmg: prepare-check-pmg
G_SLICE=always-malloc perl -I testdir/usr/share/perl5 testdir/usr/bin/proxinstall -t test.img
check-pmg-tui: prepare-check-pmg
testdir/usr/bin/proxmox-tui-installer -t test.img 2>testdir/run/stderr
prepare-check-pbs: prepare-check-env test.img
rm -f cd-info.test; $(MAKE) \
PRODUCT='pbs' \
PRODUCTLONG='Proxmox Backup Server' \
ISONAME='proxmox-backup-server' \
cd-info.test
./proxmox-low-level-installer dump-env -t test.img
check-pbs: prepare-check-pbs
G_SLICE=always-malloc perl -I testdir/usr/share/perl5 testdir/usr/bin/proxinstall -t test.img
check-pbs-tui: prepare-check-pbs
testdir/usr/bin/proxmox-tui-installer -t test.img 2>testdir/run/stderr
.phony: clean
clean:
rm -rf target build $(PACKAGE)-[0-9]* testdir
rm -f $(PACKAGE)*.tar* *.deb packages packages.tmp *.build *.dsc *.buildinfo *.changes
rm -f test*.img pve-final.pkglist locale-info.json final.pkglist cd-info.test
find . -name '*~' -exec rm {} ';'