]> git.proxmox.com Git - pve-installer.git/blobdiff - Makefile
install module: getters: correctly use plural in error messages
[pve-installer.git] / Makefile
index 8f156da46e001009931c0491ec070d46dc6c6bf6..e96a0f2166e46405d38033c7ce3086892c337155 100644 (file)
--- a/Makefile
+++ b/Makefile
-PKGVER=5.0
-PKGREL=17
+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
+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) country.dat
+
+PREFIX = /usr
+BINDIR = $(PREFIX)/bin
+USR_BIN := \
+          proxmox-chroot\
+          proxmox-tui-installer\
+          proxmox-fetch-answer\
+          proxmox-auto-install-assistant \
+          proxmox-auto-installer
+
+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/ \
+         test/ \
+         $(SHELL_SCRIPTS) \
+         $@.tmp
+       cp -a debian $@.tmp/
+       mv $@.tmp $@
 
-PVE_DEB=pve-installer_${PKGVER}-${PKGREL}_all.deb
-PMG_DEB=pmg-installer_${PKGVER}-${PKGREL}_all.deb
+country.dat: country.pl
+       ./country.pl > country.dat.tmp
+       mv country.dat.tmp country.dat
 
-DEBS = ${PVE_DEB} ${PMG_DEB}
+deb: $(DEB)
+$(ASSISTANT_DEB): $(DEB)
+$(DEB): $(BUILDDIR)
+       cd $(BUILDDIR); dpkg-buildpackage -b -us -uc
+       lintian $(DEB)
 
-INSTALLER_SOURCES=             \
-       unconfigured.sh         \
-       fake-start-stop-daemon  \
-       policy-disable-rc.d     \
-       interfaces              \
-       pmg-banner.png          \
-       pve-banner.png          \
-       checktime               \
-       xinitrc                 \
-       Xdefaults               \
-       country.dat             \
-       proxinstall
+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)
 
-HTML_SOURCES=$(wildcard html/*.htm)
-HTML_COMMON_SOURCES=$(wildcard html-common/*.htm) $(wildcard html-common/*.css) $(wildcard html-common/*.png)
+dsc: $(DSC)
+       $(MAKE) clean
+       $(MAKE) $(DSC)
+       lintian $(DSC)
 
-all: ${INSTALLER_SOURCES} ${HTML_COMMON_SOURCES} ${HTML_SOURCES}
+$(DSC): $(BUILDDIR)
+       cd $(BUILDDIR); dpkg-buildpackage -S -us -uc -d
 
-country.dat: country.pl
-       ./country.pl > country.dat
-
-deb: ${DEBS} 
-${DEBS}: ${INSTALLER_SOURCES} ${HTML_COMMON_SOURCES} ${HTML_SOURCES}
-       rsync -a * build
-       cd build; dpkg-buildpackage -b -us -uc
-       lintian -X man ${PVE_DEB}
-       lintian -X man ${PMG_DEB}
-
-.phony: install
-install: ${INSTALLER_SOURCES} ${HTML_COMMON_SOURCES} ${HTML_SOURCES}
-       make -C html-common install
-       install -D -m 644 interfaces ${DESTDIR}/etc/network/interfaces
-       mkdir -p ${DESTDIR}/var/lib/dhcp3/
-       ln -s /tmp/resolv.conf.dhclient-new ${DESTDIR}/etc/resolv.conf
-       ln -s /tmp/resolv.conf.dhclient-new ${DESTDIR}/etc/resolv.conf.dhclient-new
-       install -D -m 755 fake-start-stop-daemon ${DESTDIR}/var/lib/pve-installer/fake-start-stop-daemon
-       install -D -m 755 policy-disable-rc.d ${DESTDIR}/var/lib/pve-installer/policy-disable-rc.d
-       install -D -m 644 country.dat ${DESTDIR}/var/lib/pve-installer/country.dat
-       install -D -m 755 unconfigured.sh ${DESTDIR}/sbin/unconfigured.sh
-       install -D -m 755 proxinstall ${DESTDIR}/usr/bin/proxinstall
-       install -D -m 755 checktime ${DESTDIR}/usr/bin/checktime
-       install -D -m 644 xinitrc ${DESTDIR}/.xinitrc
-       install -D -m 644 Xdefaults ${DESTDIR}/.Xdefaults
-
-pmg-banner.png: pmg-banner.svg
-       inkscape $< --export-png=$@
-
-pve-banner.png: pve-banner.svg
-       inkscape $< --export-png=$@
-
-.phony: upload-pmg
-upload-pmg: ${PMG_DEB}
-       tar cf - ${PMG_DEB} | ssh -X repoman@repo.proxmox.com -- upload --product pmg --dist stretch
-
-.phony: upload-pve
-upload-pve: ${PVE_DEB}
-       tar cf - ${PVE_DEB} | ssh -X repoman@repo.proxmox.com -- upload --product pve --dist stretch
-
-test.img:
-       dd if=/dev/zero of=test.img bs=2048 count=1M
-
-check-pve: ${PVE_DEB} test.img
+sbuild: $(DSC)
+       sbuild $(DSC)
+
+.PHONY: prepare-test-env
+prepare-test-env: cd-info.test country.dat test.img
        rm -rf testdir
-       dpkg -X ${PVE_DEB} testdir
+       mkdir -p testdir/var/lib/proxmox-installer/
+       cp -v country.dat 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
+       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 country.dat $(VARLIBDIR)/country.dat
+       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 $(CARGO_BUILD_ARGS)
+
+%-banner.png: %-banner.svg
+       rsvg-convert -o $@ $<
+
+.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)
+
+%.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-pmg: ${PMG_DEB} test.img
-       rm -rf testdir
-       dpkg -X ${PMG_DEB} testdir
+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:
-       make -C html-common clean
-       rm -rf *~ *.deb target build packages packages.tmp testdir test.img pve-final.pkglist *.buildinfo *.changes country.dat
+       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 country.dat final.pkglist cd-info.test
        find . -name '*~' -exec rm {} ';'