summaryrefslogtreecommitdiff
path: root/Makefile
blob: 5596f5d6f03e01c92ba73ccc2d674e2d8ee4eff6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
prefix?=/usr/local

cc_files=wait_for_files samizdat-pinentry
cpp_files=dynmenu

compiled_programs=${cc_files} ${cpp_files}

CC=gcc -std=gnu99
CFLAGS=-Os

SUBMODULES = fsmgr kiki openssh

all: samizdat-paths.sh ${compiled_programs} ${SUBMODULES}

dynmenu: src/dynmenu.cpp
	$(CXX) $(CFLAGS) $< -o $@ -lcurses
samizdat-pinentry: src/samizdat-pinentry.c
	$(CC) $(CFLAGS)  $< -o $@ -lcurses
wait_for_files: src/wait_for_files.c
	$(CC) $(CFLAGS)  $< -o $@

bin_programs=$(addprefix src/, xorriso-usb.sh btrfs-functions.sh btrfs-receive-root.sh btrfs-send-root.sh var.sh grub-efi.sh keygen.sh initrd.sh qemu.sh dnsmasq-dhcp-script.sh samizdat-password-agent samizdat-gpg-agent publish-ip.sh selfstrap samizdat-daily-snapshot-root samizdat-diff-root) samizdat-paths.sh ${cc_files} ${btrfs_utils}

btrfs_utils=$(addprefix src/btrfs-utils/, btarfs btrfs-shrink with-btrfs-seed)

initrd_files:=$(wildcard src/initrd/*) dynmenu samizdat-pinentry wait_for_files
initramfs_conf_files:=$(wildcard initramfs-tools/*)

isolinux_files:=$(wildcard isolinux/*)

clean:
	rm -f samizdat-paths.sh ${compiled_programs}

.PHONY: all clean
samizdat-paths.sh: src/samizdat-paths.in
	@sed -e "s?PREFIX?$(prefix)?g" $< > $@
include samizdat-paths.sh

install-nested-kvm: conf/kvm.conf
	install -m0644 conf/kvm.conf ${instdir}/etc/modprobe.d/
	modprobe -r kvm-intel kvm-amd kvm; modprobe kvm; modprobe kvm-intel; modprobe kvm-amd; true

install-configuration:
ifndef instdir
	$(error "You must specify instdir, for safety.")
else
	install  -p  -m0644  -DT  conf/dnsmasq.conf              ${instdir}/etc/dnsmasq.conf
	install  -p  -m0644  -DT  conf/interfaces.d_eth0         ${instdir}/etc/network/interfaces.d/eth0
	install  -p  -m0644  -DT  conf/network_if-up.d_samizdat  ${instdir}/etc/network/if-up.d/samizdat
	install  -p  -m0644  -DT  conf/postfix_main.cf           ${instdir}/etc/postfix/main.cf
	install  -p  -m0644  -DT  conf/torrc                     ${instdir}/etc/tor/torrc
	install  -p  -m0644  -DT  conf/nbd-server                ${instdir}/etc/nbd-server/conf.d/samizdat.conf
	ln -sf /var/cache/kiki/config/tor/hostname  ${instdir}/etc/mailname
	ln -sf /var/cache/kiki/config/tor/hostname  ${instdir}/etc/hostname
endif

include user.mk

.PHONY: submodule $(SUBMODULES)
$(SUBMODULES):
	[ -e $@/Makefile ] || git submodule update --init
	$(MAKE) -C $@ $(cmd)

install-submodules: cmd=install
install-submodules: $(SUBMODULES)

.PHONY: rootfs
rootfs:
	[ -e install-submodules-stamp ] || make install-submodules-stamp
	[ -e install-stamp ] || sudo make install-stamp
	$(MAKE) -C rootfs
	sudo mkdir -p /srv/nbd
	sudo ln -sf "$$PWD"/rootfs/samizdat.btrfs /srv/nbd/samizdat.btrfs

define get_kernel_version
egrep '^ii  linux-image-(amd64|686)' rootfs/_build/samizdat.pkgs.txt  | \
	(read _ pkg ver _; apt-cache show $$pkg=$$ver) | \
	grep Depends | \
	(read _ a; echo $${a#linux-image-})
endef

boot: rootfs
	sudo kernel_version=$$($(get_kernel_version)) qemu.sh

reuse_child := $(shell 2>/dev/null read child < reused-child && echo --reuse_child=$$child; true)

isotest: install
	initrd.sh
	xorriso-usb.sh $(reuse_child) --bootloader --out samizdat.iso
	USE_ISO=y SLOW_BOOT=y qemu.sh

isotest-nonet: install
	initrd.sh
	xorriso-usb.sh $(reuse_child) --out samizdat-nonet.iso
	USE_ISO=y SLOW_BOOT=y NO_NET=y qemu.sh samizdat-nonet.iso

.PHONY: install
install:
	[ -e install-submodules-stamp ] || make install-submodules-stamp
	sudo make install-stamp

install-submodules-stamp: install-submodules
	touch $@

install-bin-programs: ${bin_programs}
	install -p ${bin_programs} ${instdir}${samizdat_bindir}

CP=cp --preserve=timestamps -r

install-stamp: install-bin-programs samizdat-paths.sh ${compiled_programs}
	mkdir -p ${instdir}${samizdat_initrd_files_dir}
	mkdir -p ${instdir}${samizdat_child_dir}
	mkdir -p ${instdir}${samizdat_grub_efi_dir}
	mkdir -p ${instdir}${samizdat_initramfs_conf_dir}
	mkdir -p ${instdir}${samizdat_isolinux_dir}
	mkdir -p ${instdir}${samizdat_linux_dir}
	$(CP) ${initrd_files} ${instdir}${samizdat_initrd_files_dir}
	$(CP) ${initramfs_conf_files} ${instdir}${samizdat_initramfs_conf_dir}
	$(CP) ${isolinux_files} ${instdir}${samizdat_isolinux_dir}
	touch $@