/mandos/trunk

To get this branch, use:
bzr branch http://bzr.recompile.se/loggerhead/mandos/trunk

« back to all changes in this revision

Viewing changes to Makefile

  • Committer: Teddy Hogeborn
  • Date: 2024-11-17 18:43:11 UTC
  • Revision ID: teddy@recompile.se-20241117184311-ox25kvngy62h209g
Debian package: Avoid suggesting a C compiler unnecessarily

The list of suggested packages, meant to enable the "mandos" program
to find the correct value of SO_BINDTODEVICE by using a C compiler,
are not necessary when Python 3.3 or later is used, since it has the
SO_BINDTODEVICE constant defined in the "socket" module.  Also, Python
2.6 or older has the same constant in the old "IN" module.  Therefore,
we should suggest these Python versions as alternatives to a C
compiler, so that a C compiler is not installed unnecessarily.

debian/control (Package: mandos/Suggests): Add "python3 (>= 3.3)" and
"python (<= 2.6)" as alternatives to "libc6-dev | libc-dev" and
"c-compiler".

Show diffs side-by-side

added added

removed removed

Lines of Context:
29
29
 
30
30
# For info about _FORTIFY_SOURCE, see feature_test_macros(7)
31
31
# and <https://gcc.gnu.org/ml/gcc-patches/2004-09/msg02055.html>.
32
 
FORTIFY:=-D_FORTIFY_SOURCE=2 -fstack-protector-all -fPIC
 
32
FORTIFY:=-fstack-protector-all -fPIC
 
33
CPPFLAGS+=-D_FORTIFY_SOURCE=3
33
34
LINK_FORTIFY_LD:=-z relro -z now
34
35
LINK_FORTIFY:=
35
36
 
41
42
#COVERAGE=--coverage
42
43
OPTIMIZE:=-Os -fno-strict-aliasing
43
44
LANGUAGE:=-std=gnu11
 
45
CPPFLAGS+=-D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64
44
46
htmldir:=man
45
 
version:=1.8.4
 
47
version:=1.8.17
46
48
SED:=sed
 
49
PKG_CONFIG?=pkg-config
47
50
 
48
51
USER:=$(firstword $(subst :, ,$(shell getent passwd _mandos \
49
52
        || getent passwd nobody || echo 65534)))
50
53
GROUP:=$(firstword $(subst :, ,$(shell getent group _mandos \
51
54
        || getent group nogroup || echo 65534)))
52
55
 
 
56
LINUXVERSION:=$(shell uname --kernel-release)
 
57
 
53
58
## Use these settings for a traditional /usr/local install
54
59
# PREFIX:=$(DESTDIR)/usr/local
 
60
# BINDIR:=$(PREFIX)/sbin
55
61
# CONFDIR:=$(DESTDIR)/etc/mandos
56
62
# KEYDIR:=$(DESTDIR)/etc/mandos/keys
57
63
# MANDIR:=$(PREFIX)/man
58
64
# INITRAMFSTOOLS:=$(DESTDIR)/etc/initramfs-tools
 
65
# DRACUTMODULE:=$(DESTDIR)/usr/lib/dracut/modules.d/90mandos
59
66
# STATEDIR:=$(DESTDIR)/var/lib/mandos
60
67
# LIBDIR:=$(PREFIX)/lib
 
68
# DBUSPOLICYDIR:=$(DESTDIR)/etc/dbus-1/system.d
61
69
##
62
70
 
63
71
## These settings are for a package-type install
64
72
PREFIX:=$(DESTDIR)/usr
 
73
BINDIR:=$(PREFIX)/sbin
65
74
CONFDIR:=$(DESTDIR)/etc/mandos
66
75
KEYDIR:=$(DESTDIR)/etc/keys/mandos
67
76
MANDIR:=$(PREFIX)/share/man
68
77
INITRAMFSTOOLS:=$(DESTDIR)/usr/share/initramfs-tools
 
78
DRACUTMODULE:=$(DESTDIR)/usr/lib/dracut/modules.d/90mandos
69
79
STATEDIR:=$(DESTDIR)/var/lib/mandos
70
80
LIBDIR:=$(shell \
71
81
        for d in \
72
 
        "/usr/lib/`dpkg-architecture -qDEB_HOST_MULTIARCH 2>/dev/null`" \
 
82
        "/usr/lib/`dpkg-architecture \
 
83
                        -qDEB_HOST_MULTIARCH 2>/dev/null`" \
73
84
        "`rpm --eval='%{_libdir}' 2>/dev/null`" /usr/lib; do \
74
85
                if [ -d "$$d" -a "$$d" = "$${d%/}" ]; then \
75
86
                        echo "$(DESTDIR)$$d"; \
76
87
                        break; \
77
88
                fi; \
78
89
        done)
 
90
DBUSPOLICYDIR:=$(DESTDIR)/usr/share/dbus-1/system.d
79
91
##
80
92
 
81
 
SYSTEMD:=$(DESTDIR)$(shell pkg-config systemd --variable=systemdsystemunitdir)
82
 
TMPFILES:=$(DESTDIR)$(shell pkg-config systemd --variable=tmpfilesdir)
 
93
SYSTEMD:=$(DESTDIR)$(shell $(PKG_CONFIG) systemd \
 
94
                        --variable=systemdsystemunitdir)
 
95
TMPFILES:=$(DESTDIR)$(shell $(PKG_CONFIG) systemd \
 
96
                        --variable=tmpfilesdir)
 
97
SYSUSERS:=$(DESTDIR)$(shell $(PKG_CONFIG) systemd \
 
98
                        --variable=sysusersdir)
83
99
 
84
 
GNUTLS_CFLAGS:=$(shell pkg-config --cflags-only-I gnutls)
85
 
GNUTLS_LIBS:=$(shell pkg-config --libs gnutls)
86
 
AVAHI_CFLAGS:=$(shell pkg-config --cflags-only-I avahi-core)
87
 
AVAHI_LIBS:=$(shell pkg-config --libs avahi-core)
88
 
GPGME_CFLAGS:=$(shell gpgme-config --cflags; getconf LFS_CFLAGS)
89
 
GPGME_LIBS:=$(shell gpgme-config --libs; getconf LFS_LIBS; \
 
100
GNUTLS_CFLAGS:=$(shell $(PKG_CONFIG) --cflags-only-I gnutls)
 
101
GNUTLS_LIBS:=$(shell $(PKG_CONFIG) --libs gnutls)
 
102
AVAHI_CFLAGS:=$(shell $(PKG_CONFIG) --cflags-only-I avahi-core)
 
103
AVAHI_LIBS:=$(shell $(PKG_CONFIG) --libs avahi-core)
 
104
GPGME_CFLAGS:=$(shell $(PKG_CONFIG) --cflags-only-I gpgme 2>/dev/null \
 
105
        || gpgme-config --cflags; getconf LFS_CFLAGS)
 
106
GPGME_LIBS:=$(shell $(PKG_CONFIG) --libs gpgme 2>/dev/null \
 
107
        || gpgme-config --libs; getconf LFS_LIBS; \
90
108
        getconf LFS_LDFLAGS)
91
 
LIBNL3_CFLAGS:=$(shell pkg-config --cflags-only-I libnl-route-3.0)
92
 
LIBNL3_LIBS:=$(shell pkg-config --libs libnl-route-3.0)
 
109
LIBNL3_CFLAGS:=$(shell $(PKG_CONFIG) --cflags-only-I libnl-route-3.0)
 
110
LIBNL3_LIBS:=$(shell $(PKG_CONFIG) --libs libnl-route-3.0)
 
111
GLIB_CFLAGS:=$(shell $(PKG_CONFIG) --cflags glib-2.0)
 
112
GLIB_LIBS:=$(shell $(PKG_CONFIG) --libs glib-2.0)
93
113
 
94
114
# Do not change these two
95
 
CFLAGS+=$(WARN) $(DEBUG) $(FORTIFY) $(COVERAGE) \
96
 
        $(OPTIMIZE) $(LANGUAGE) -DVERSION='"$(version)"'
 
115
CFLAGS+=$(WARN) $(DEBUG) $(FORTIFY) $(COVERAGE) $(OPTIMIZE) \
 
116
        $(LANGUAGE) -DVERSION='"$(version)"'
97
117
LDFLAGS+=-Xlinker --as-needed $(COVERAGE) $(LINK_FORTIFY) $(strip \
98
118
        ) $(foreach flag,$(LINK_FORTIFY_LD),-Xlinker $(flag))
99
119
 
107
127
        /usr/share/xml/docbook/stylesheet/nwalsh/manpages/docbook.xsl \
108
128
        $(notdir $<); \
109
129
        if locale --all 2>/dev/null | grep --regexp='^en_US\.utf8$$' \
110
 
        && type man 2>/dev/null; then LANG=en_US.UTF-8 MANWIDTH=80 \
111
 
        man --warnings --encoding=UTF-8 --local-file $(notdir $@); \
112
 
        fi >/dev/null)
 
130
        && command -v man >/dev/null; then LANG=en_US.UTF-8 \
 
131
        MANWIDTH=80 man --warnings --encoding=UTF-8 --local-file \
 
132
        $(notdir $@); fi >/dev/null)
113
133
 
114
134
DOCBOOKTOHTML=$(strip xsltproc --nonet --xinclude \
115
135
        --param make.year.ranges                1 \
128
148
        plugins.d/usplash plugins.d/splashy plugins.d/askpass-fifo \
129
149
        plugins.d/plymouth
130
150
PLUGIN_HELPERS:=plugin-helpers/mandos-client-iprouteadddel
131
 
CPROGS:=plugin-runner $(PLUGINS) $(PLUGIN_HELPERS)
 
151
CPROGS:=plugin-runner dracut-module/password-agent $(PLUGINS) \
 
152
        $(PLUGIN_HELPERS)
132
153
PROGS:=mandos mandos-keygen mandos-ctl mandos-monitor $(CPROGS)
133
154
DOCS:=mandos.8 mandos-keygen.8 mandos-monitor.8 mandos-ctl.8 \
134
155
        mandos.conf.5 mandos-clients.conf.5 plugin-runner.8mandos \
 
156
        dracut-module/password-agent.8mandos \
135
157
        plugins.d/mandos-client.8mandos \
136
158
        plugins.d/password-prompt.8mandos plugins.d/usplash.8mandos \
137
159
        plugins.d/splashy.8mandos plugins.d/askpass-fifo.8mandos \
141
163
 
142
164
objects:=$(addsuffix .o,$(CPROGS))
143
165
 
 
166
.PHONY: all
144
167
all: $(PROGS) mandos.lsm
145
168
 
 
169
.PHONY: doc
146
170
doc: $(DOCS)
147
171
 
 
172
.PHONY: html
148
173
html: $(htmldocs)
149
174
 
150
175
%.5: %.xml common.ent legalnotice.xml
209
234
                overview.xml legalnotice.xml
210
235
        $(DOCBOOKTOHTML)
211
236
 
 
237
dracut-module/password-agent.8mandos: \
 
238
                dracut-module/password-agent.xml common.ent \
 
239
                overview.xml legalnotice.xml
 
240
        $(DOCBOOKTOMAN)
 
241
dracut-module/password-agent.8mandos.xhtml: \
 
242
                dracut-module/password-agent.xml common.ent \
 
243
                overview.xml legalnotice.xml
 
244
        $(DOCBOOKTOHTML)
 
245
 
212
246
plugins.d/mandos-client.8mandos: plugins.d/mandos-client.xml \
213
247
                                        common.ent \
214
248
                                        mandos-options.xml \
257
291
                --expression='s/\(mandos_\)[0-9.]\+\(\.orig\.tar\.gz\)/\1$(version)\2/' \
258
292
                $@)
259
293
 
 
294
# Does the linker support the --no-warn-execstack option?
 
295
ifeq ($(shell echo 'int main(){}'|$(CC) --language=c /dev/stdin -o /dev/null -Xlinker --no-warn-execstack >/dev/null 2>&1 && echo yes),yes)
 
296
# These programs use nested functions, which uses an executable stack
 
297
plugin-runner: LDFLAGS += -Xlinker --no-warn-execstack
 
298
dracut-module/password-agent: LDFLAGS += -Xlinker --no-warn-execstack
 
299
plugins.d/password-prompt: LDFLAGS += -Xlinker --no-warn-execstack
 
300
plugins.d/mandos-client: LDFLAGS += -Xlinker --no-warn-execstack
 
301
plugins.d/plymouth: LDFLAGS += -Xlinker --no-warn-execstack
 
302
endif
 
303
 
260
304
# Need to add the GnuTLS, Avahi and GPGME libraries
261
 
plugins.d/mandos-client: plugins.d/mandos-client.c
262
 
        $(LINK.c) $^ $(GNUTLS_CFLAGS) $(AVAHI_CFLAGS) $(strip\
263
 
                ) $(GPGME_CFLAGS) $(GNUTLS_LIBS) $(strip\
264
 
                ) $(AVAHI_LIBS) $(GPGME_LIBS) $(LOADLIBES) $(strip\
265
 
                ) $(LDLIBS) -o $@
 
305
plugins.d/mandos-client: CFLAGS += $(GNUTLS_CFLAGS) $(strip \
 
306
        ) $(AVAHI_CFLAGS) $(GPGME_CFLAGS)
 
307
plugins.d/mandos-client: LDLIBS += $(GNUTLS_LIBS) $(strip \
 
308
        ) $(AVAHI_LIBS) $(GPGME_LIBS)
266
309
 
267
310
# Need to add the libnl-route library
268
 
plugin-helpers/mandos-client-iprouteadddel: plugin-helpers/mandos-client-iprouteadddel.c
269
 
        $(LINK.c) $(LIBNL3_CFLAGS) $^ $(LIBNL3_LIBS) $(strip\
270
 
                ) $(LOADLIBES) $(LDLIBS) -o $@
271
 
 
272
 
.PHONY : all doc html clean distclean mostlyclean maintainer-clean \
273
 
        check run-client run-server install install-html \
274
 
        install-server install-client-nokey install-client uninstall \
275
 
        uninstall-server uninstall-client purge purge-server \
276
 
        purge-client
277
 
 
 
311
plugin-helpers/mandos-client-iprouteadddel: CFLAGS += $(LIBNL3_CFLAGS)
 
312
plugin-helpers/mandos-client-iprouteadddel: LDLIBS += $(LIBNL3_LIBS)
 
313
 
 
314
# Need to add the GLib and pthread libraries
 
315
dracut-module/password-agent: CFLAGS += $(GLIB_CFLAGS)
 
316
# Note: -lpthread is unnecessary with the GNU C library 2.34 or later
 
317
dracut-module/password-agent: LDLIBS += $(GLIB_LIBS) -lpthread
 
318
 
 
319
.PHONY: clean
278
320
clean:
279
321
        -rm --force $(CPROGS) $(objects) $(htmldocs) $(DOCS) core
280
322
 
 
323
.PHONY: distclean
281
324
distclean: clean
 
325
.PHONY: mostlyclean
282
326
mostlyclean: clean
 
327
.PHONY: maintainer-clean
283
328
maintainer-clean: clean
284
329
        -rm --force --recursive keydir confdir statedir
285
330
 
 
331
.PHONY: check
286
332
check: all
287
333
        ./mandos --check
288
334
        ./mandos-ctl --check
289
335
        ./mandos-keygen --version
290
336
        ./plugin-runner --version
291
337
        ./plugin-helpers/mandos-client-iprouteadddel --version
 
338
        ./dracut-module/password-agent --test
292
339
 
293
340
# Run the client with a local config and key
294
 
run-client: all keydir/seckey.txt keydir/pubkey.txt keydir/tls-privkey.pem keydir/tls-pubkey.pem
295
 
        @echo "###################################################################"
296
 
        @echo "# The following error messages are harmless and can be safely     #"
297
 
        @echo "# ignored:                                                        #"
298
 
        @echo "# From plugin-runner: setgid: Operation not permitted             #"
299
 
        @echo "#                     setuid: Operation not permitted             #"
300
 
        @echo "# From askpass-fifo:  mkfifo: Permission denied                   #"
301
 
        @echo "# From mandos-client:                                             #"
302
 
        @echo "#             Failed to raise privileges: Operation not permitted #"
303
 
        @echo "#             Warning: network hook \"*\" exited with status *      #"
304
 
        @echo "#                                                                 #"
305
 
        @echo "# (The messages are caused by not running as root, but you should #"
306
 
        @echo "# NOT run \"make run-client\" as root unless you also unpacked and  #"
307
 
        @echo "# compiled Mandos as root, which is also NOT recommended.)        #"
308
 
        @echo "###################################################################"
 
341
.PHONY: run-client
 
342
run-client: all keydir/seckey.txt keydir/pubkey.txt \
 
343
                        keydir/tls-privkey.pem keydir/tls-pubkey.pem
 
344
        @echo '######################################################'
 
345
        @echo '# The following error messages are harmless and can  #'
 
346
        @echo '#  be safely ignored:                                #'
 
347
        @echo '## From plugin-runner:                               #'
 
348
        @echo '# setgid: Operation not permitted                    #'
 
349
        @echo '# setuid: Operation not permitted                    #'
 
350
        @echo '## From askpass-fifo:                                #'
 
351
        @echo '# mkfifo: Permission denied                          #'
 
352
        @echo '## From mandos-client:                               #'
 
353
        @echo '# Failed to raise privileges: Operation not permi... #'
 
354
        @echo '# Warning: network hook "*" exited with status *     #'
 
355
        @echo '# ioctl SIOCSIFFLAGS +IFF_UP: Operation not permi... #'
 
356
        @echo '# Failed to bring up interface "*": Operation not... #'
 
357
        @echo '#                                                    #'
 
358
        @echo '# (The messages are caused by not running as root,   #'
 
359
        @echo '# but you should NOT run "make run-client" as root   #'
 
360
        @echo '# unless you also unpacked and compiled Mandos as    #'
 
361
        @echo '# root, which is also NOT recommended.)              #'
 
362
        @echo '######################################################'
309
363
# We set GNOME_KEYRING_CONTROL to block pam_gnome_keyring
310
364
        ./plugin-runner --plugin-dir=plugins.d \
311
365
                --plugin-helper-dir=plugin-helpers \
318
372
keydir/seckey.txt keydir/pubkey.txt keydir/tls-privkey.pem keydir/tls-pubkey.pem: mandos-keygen
319
373
        install --directory keydir
320
374
        ./mandos-keygen --dir keydir --force
 
375
        if ! [ -e keydir/tls-privkey.pem ]; then \
 
376
                install --mode=u=rw /dev/null keydir/tls-privkey.pem; \
 
377
        fi
 
378
        if ! [ -e keydir/tls-pubkey.pem ]; then \
 
379
                install --mode=u=rw /dev/null keydir/tls-pubkey.pem; \
 
380
        fi
321
381
 
322
382
# Run the server with a local config
 
383
.PHONY: run-server
323
384
run-server: confdir/mandos.conf confdir/clients.conf statedir
324
385
        ./mandos --debug --no-dbus --configdir=confdir \
325
386
                --statedir=statedir $(SERVERARGS)
326
387
 
327
388
# Used by run-server
328
389
confdir/mandos.conf: mandos.conf
329
 
        install --directory confdir
330
 
        install --mode=u=rw,go=r $^ $@
 
390
        install -D --mode=u=rw,go=r $^ $@
331
391
confdir/clients.conf: clients.conf keydir/seckey.txt keydir/tls-pubkey.pem
332
 
        install --directory confdir
333
 
        install --mode=u=rw $< $@
 
392
        install -D --mode=u=rw $< $@
334
393
# Add a client password
335
394
        ./mandos-keygen --dir keydir --password --no-ssh >> $@
336
395
statedir:
337
396
        install --directory statedir
338
397
 
 
398
.PHONY: install
339
399
install: install-server install-client-nokey
340
400
 
 
401
.PHONY: install-html
341
402
install-html: html
342
 
        install --directory $(htmldir)
343
 
        install --mode=u=rw,go=r --target-directory=$(htmldir) \
 
403
        install -D --mode=u=rw,go=r --target-directory=$(htmldir) \
344
404
                $(htmldocs)
345
405
 
 
406
.PHONY: install-server
346
407
install-server: doc
347
 
        install --directory $(CONFDIR)
348
408
        if install --directory --mode=u=rwx --owner=$(USER) \
349
409
                --group=$(GROUP) $(STATEDIR); then \
350
410
                :; \
351
411
        elif install --directory --mode=u=rwx $(STATEDIR); then \
352
412
                chown -- $(USER):$(GROUP) $(STATEDIR) || :; \
353
413
        fi
354
 
        if [ "$(TMPFILES)" != "$(DESTDIR)" -a -d "$(TMPFILES)" ]; then \
355
 
                install --mode=u=rw,go=r tmpfiles.d-mandos.conf \
 
414
        if [ "$(TMPFILES)" != "$(DESTDIR)" ]; then \
 
415
                install -D --mode=u=rw,go=r tmpfiles.d-mandos.conf \
356
416
                        $(TMPFILES)/mandos.conf; \
357
417
        fi
358
 
        install --mode=u=rwx,go=rx mandos $(PREFIX)/sbin/mandos
359
 
        install --mode=u=rwx,go=rx --target-directory=$(PREFIX)/sbin \
 
418
        if [ "$(SYSUSERS)" != "$(DESTDIR)" ]; then \
 
419
                install -D --mode=u=rw,go=r sysusers.d-mandos.conf \
 
420
                        $(SYSUSERS)/mandos.conf; \
 
421
        fi
 
422
        install --directory $(BINDIR)
 
423
        install --mode=u=rwx,go=rx --target-directory=$(BINDIR) mandos
 
424
        install --mode=u=rwx,go=rx --target-directory=$(BINDIR) \
360
425
                mandos-ctl
361
 
        install --mode=u=rwx,go=rx --target-directory=$(PREFIX)/sbin \
 
426
        install --mode=u=rwx,go=rx --target-directory=$(BINDIR) \
362
427
                mandos-monitor
 
428
        install --directory $(CONFDIR)
363
429
        install --mode=u=rw,go=r --target-directory=$(CONFDIR) \
364
430
                mandos.conf
365
431
        install --mode=u=rw --target-directory=$(CONFDIR) \
366
432
                clients.conf
367
 
        install --mode=u=rw,go=r dbus-mandos.conf \
368
 
                $(DESTDIR)/etc/dbus-1/system.d/mandos.conf
369
 
        install --mode=u=rwx,go=rx init.d-mandos \
 
433
        install -D --mode=u=rw,go=r dbus-mandos.conf \
 
434
                $(DBUSPOLICYDIR)/mandos.conf
 
435
        install -D --mode=u=rwx,go=rx init.d-mandos \
370
436
                $(DESTDIR)/etc/init.d/mandos
371
 
        if [ "$(SYSTEMD)" != "$(DESTDIR)" -a -d "$(SYSTEMD)" ]; then \
372
 
                install --mode=u=rw,go=r mandos.service $(SYSTEMD); \
 
437
        if [ "$(SYSTEMD)" != "$(DESTDIR)" ]; then \
 
438
                install -D --mode=u=rw,go=r mandos.service \
 
439
                        $(SYSTEMD); \
373
440
        fi
374
 
        install --mode=u=rw,go=r default-mandos \
 
441
        install -D --mode=u=rw,go=r default-mandos \
375
442
                $(DESTDIR)/etc/default/mandos
376
443
        if [ -z $(DESTDIR) ]; then \
377
444
                update-rc.d mandos defaults 25 15;\
378
445
        fi
 
446
        install --directory $(MANDIR)/man8 $(MANDIR)/man5
379
447
        gzip --best --to-stdout mandos.8 \
380
448
                > $(MANDIR)/man8/mandos.8.gz
381
449
        gzip --best --to-stdout mandos-monitor.8 \
389
457
        gzip --best --to-stdout intro.8mandos \
390
458
                > $(MANDIR)/man8/intro.8mandos.gz
391
459
 
 
460
.PHONY: install-client-nokey
392
461
install-client-nokey: all doc
393
 
        install --directory $(LIBDIR)/mandos $(CONFDIR)
394
462
        install --directory --mode=u=rwx $(KEYDIR) \
395
463
                $(LIBDIR)/mandos/plugins.d \
396
464
                $(LIBDIR)/mandos/plugin-helpers
 
465
        if [ "$(SYSUSERS)" != "$(DESTDIR)" ]; then \
 
466
                install -D --mode=u=rw,go=r sysusers.d-mandos.conf \
 
467
                        $(SYSUSERS)/mandos-client.conf; \
 
468
        fi
397
469
        if [ "$(CONFDIR)" != "$(LIBDIR)/mandos" ]; then \
398
 
                install --mode=u=rwx \
399
 
                        --directory "$(CONFDIR)/plugins.d" \
 
470
                install --directory \
 
471
                        --mode=u=rwx "$(CONFDIR)/plugins.d" \
400
472
                        "$(CONFDIR)/plugin-helpers"; \
401
473
        fi
402
 
        install --mode=u=rwx,go=rx --directory \
 
474
        install --directory --mode=u=rwx,go=rx \
403
475
                "$(CONFDIR)/network-hooks.d"
404
476
        install --mode=u=rwx,go=rx \
405
477
                --target-directory=$(LIBDIR)/mandos plugin-runner
406
478
        install --mode=u=rwx,go=rx \
407
 
                --target-directory=$(LIBDIR)/mandos mandos-to-cryptroot-unlock
408
 
        install --mode=u=rwx,go=rx --target-directory=$(PREFIX)/sbin \
 
479
                --target-directory=$(LIBDIR)/mandos \
 
480
                mandos-to-cryptroot-unlock
 
481
        install --directory $(BINDIR)
 
482
        install --mode=u=rwx,go=rx --target-directory=$(BINDIR) \
409
483
                mandos-keygen
410
484
        install --mode=u=rwx,go=rx \
411
485
                --target-directory=$(LIBDIR)/mandos/plugins.d \
428
502
        install --mode=u=rwx,go=rx \
429
503
                --target-directory=$(LIBDIR)/mandos/plugin-helpers \
430
504
                plugin-helpers/mandos-client-iprouteadddel
431
 
        install initramfs-tools-hook \
 
505
        install -D initramfs-tools-hook \
432
506
                $(INITRAMFSTOOLS)/hooks/mandos
433
 
        install --mode=u=rw,go=r initramfs-tools-conf \
 
507
        install -D --mode=u=rw,go=r initramfs-tools-conf \
434
508
                $(INITRAMFSTOOLS)/conf.d/mandos-conf
435
 
        install --mode=u=rw,go=r initramfs-tools-conf-hook \
 
509
        install -D --mode=u=rw,go=r initramfs-tools-conf-hook \
436
510
                $(INITRAMFSTOOLS)/conf-hooks.d/zz-mandos
437
 
        install initramfs-tools-script \
 
511
        install -D initramfs-tools-script \
438
512
                $(INITRAMFSTOOLS)/scripts/init-premount/mandos
439
 
        install initramfs-tools-script-stop \
 
513
        install -D initramfs-tools-script-stop \
440
514
                $(INITRAMFSTOOLS)/scripts/local-premount/mandos
 
515
        install -D --mode=u=rw,go=r \
 
516
                --target-directory=$(DRACUTMODULE) \
 
517
                dracut-module/ask-password-mandos.path \
 
518
                dracut-module/ask-password-mandos.service
 
519
        install --mode=u=rwxs,go=rx \
 
520
                --target-directory=$(DRACUTMODULE) \
 
521
                dracut-module/module-setup.sh \
 
522
                dracut-module/cmdline-mandos.sh \
 
523
                dracut-module/password-agent
441
524
        install --mode=u=rw,go=r plugin-runner.conf $(CONFDIR)
 
525
        install --directory $(MANDIR)/man8
442
526
        gzip --best --to-stdout mandos-keygen.8 \
443
527
                > $(MANDIR)/man8/mandos-keygen.8.gz
444
528
        gzip --best --to-stdout plugin-runner.8mandos \
455
539
                > $(MANDIR)/man8/askpass-fifo.8mandos.gz
456
540
        gzip --best --to-stdout plugins.d/plymouth.8mandos \
457
541
                > $(MANDIR)/man8/plymouth.8mandos.gz
 
542
        gzip --best --to-stdout dracut-module/password-agent.8mandos \
 
543
                > $(MANDIR)/man8/password-agent.8mandos.gz
458
544
 
 
545
.PHONY: install-client
459
546
install-client: install-client-nokey
460
547
# Post-installation stuff
461
 
        -$(PREFIX)/sbin/mandos-keygen --dir "$(KEYDIR)"
462
 
        update-initramfs -k all -u
 
548
        -$(BINDIR)/mandos-keygen --dir "$(KEYDIR)"
 
549
        if command -v update-initramfs >/dev/null; then \
 
550
            update-initramfs -k all -u; \
 
551
        elif command -v dracut >/dev/null; then \
 
552
            for initrd in $(DESTDIR)/boot/initr*-$(LINUXVERSION); do \
 
553
                if [ -w "$$initrd" ]; then \
 
554
                    chmod go-r "$$initrd"; \
 
555
                    dracut --force "$$initrd"; \
 
556
                fi; \
 
557
            done; \
 
558
        fi
463
559
        echo "Now run mandos-keygen --password --dir $(KEYDIR)"
464
560
 
 
561
.PHONY: uninstall
465
562
uninstall: uninstall-server uninstall-client
466
563
 
 
564
.PHONY: uninstall-server
467
565
uninstall-server:
468
 
        -rm --force $(PREFIX)/sbin/mandos \
469
 
                $(PREFIX)/sbin/mandos-ctl \
470
 
                $(PREFIX)/sbin/mandos-monitor \
 
566
        -rm --force $(BINDIR)/mandos \
 
567
                $(BINDIR)/mandos-ctl \
 
568
                $(BINDIR)/mandos-monitor \
471
569
                $(MANDIR)/man8/mandos.8.gz \
472
570
                $(MANDIR)/man8/mandos-monitor.8.gz \
473
571
                $(MANDIR)/man8/mandos-ctl.8.gz \
476
574
        update-rc.d -f mandos remove
477
575
        -rmdir $(CONFDIR)
478
576
 
 
577
.PHONY: uninstall-client
479
578
uninstall-client:
480
579
# Refuse to uninstall client if /etc/crypttab is explicitly configured
481
580
# to use it.
482
581
        ! grep --regexp='^ *[^ #].*keyscript=[^,=]*/mandos/' \
483
582
                $(DESTDIR)/etc/crypttab
484
 
        -rm --force $(PREFIX)/sbin/mandos-keygen \
 
583
        -rm --force $(BINDIR)/mandos-keygen \
485
584
                $(LIBDIR)/mandos/plugin-runner \
486
585
                $(LIBDIR)/mandos/plugins.d/password-prompt \
487
586
                $(LIBDIR)/mandos/plugins.d/mandos-client \
492
591
                $(INITRAMFSTOOLS)/hooks/mandos \
493
592
                $(INITRAMFSTOOLS)/conf-hooks.d/mandos \
494
593
                $(INITRAMFSTOOLS)/scripts/init-premount/mandos \
 
594
                $(INITRAMFSTOOLS)/scripts/local-premount/mandos \
 
595
                $(DRACUTMODULE)/ask-password-mandos.path \
 
596
                $(DRACUTMODULE)/ask-password-mandos.service \
 
597
                $(DRACUTMODULE)/module-setup.sh \
 
598
                $(DRACUTMODULE)/cmdline-mandos.sh \
 
599
                $(DRACUTMODULE)/password-agent \
495
600
                $(MANDIR)/man8/mandos-keygen.8.gz \
496
601
                $(MANDIR)/man8/plugin-runner.8mandos.gz \
497
602
                $(MANDIR)/man8/mandos-client.8mandos.gz
500
605
                $(MANDIR)/man8/splashy.8mandos.gz \
501
606
                $(MANDIR)/man8/askpass-fifo.8mandos.gz \
502
607
                $(MANDIR)/man8/plymouth.8mandos.gz \
 
608
                $(MANDIR)/man8/password-agent.8mandos.gz \
503
609
        -rmdir $(LIBDIR)/mandos/plugins.d $(CONFDIR)/plugins.d \
504
 
                 $(LIBDIR)/mandos $(CONFDIR) $(KEYDIR)
505
 
        update-initramfs -k all -u
 
610
                 $(LIBDIR)/mandos $(CONFDIR) $(KEYDIR) $(DRACUTMODULE)
 
611
        if command -v update-initramfs >/dev/null; then \
 
612
            update-initramfs -k all -u; \
 
613
        elif command -v dracut >/dev/null; then \
 
614
            for initrd in $(DESTDIR)/boot/initr*-$(LINUXVERSION); do \
 
615
                test -w "$$initrd" && dracut --force "$$initrd"; \
 
616
            done; \
 
617
        fi
506
618
 
 
619
.PHONY: purge
507
620
purge: purge-server purge-client
508
621
 
 
622
.PHONY: purge-server
509
623
purge-server: uninstall-server
510
624
        -rm --force $(CONFDIR)/mandos.conf $(CONFDIR)/clients.conf \
511
625
                $(DESTDIR)/etc/dbus-1/system.d/mandos.conf
512
626
                $(DESTDIR)/etc/default/mandos \
513
627
                $(DESTDIR)/etc/init.d/mandos \
514
 
                $(SYSTEMD)/mandos.service \
515
628
                $(DESTDIR)/run/mandos.pid \
516
629
                $(DESTDIR)/var/run/mandos.pid
 
630
        if [ "$(SYSTEMD)" != "$(DESTDIR)" -a -d "$(SYSTEMD)" ]; then \
 
631
                -rm --force -- $(SYSTEMD)/mandos.service; \
 
632
        fi
517
633
        -rmdir $(CONFDIR)
518
634
 
 
635
.PHONY: purge-client
519
636
purge-client: uninstall-client
520
637
        -shred --remove $(KEYDIR)/seckey.txt $(KEYDIR)/tls-privkey.pem
521
638
        -rm --force $(CONFDIR)/plugin-runner.conf \