/mandos/release

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

« back to all changes in this revision

Viewing changes to Makefile

  • Committer: Teddy Hogeborn
  • Date: 2014-07-25 22:44:20 UTC
  • mto: (237.7.272 trunk)
  • mto: This revision was merged to the branch mainline in revision 321.
  • Revision ID: teddy@recompile.se-20140725224420-4a5ct2ptt0hsc92z
Require Python 2.7.

This is in preparation for the eventual move to Python 3, which will
happen as soon as all Python modules required by Mandos are available.
The mandos-ctl and mandos-monitor programs are already portable
between Python 2.6 and Python 3 without changes; this change will
bring the requirement up to Python 2.7.

* INSTALL (Prerequisites/Libraries/Mandos Server): Document
                                                   requirement of
                                                   Python 2.7; remove
                                                   Python-argparse
                                                   which is in the
                                                   Python 2.7 standard
                                                   library.
* debian/control (Source: mandos/Build-Depends-Indep): Depend on
                                                       exactly the
                                                       python2.7
                                                       package and all
                                                       the Python 2.7
                                                       versions of the
                                                       python modules.
  (Package: mandos/Depends): - '' - but still depend on python (<=2.7)
                            and the generic versions of the Python
                            modules; this is for mandos-ctl and
                            mandos-monitor, both of which are
                            compatible with Python 3, and use
                            #!/usr/bin/python.
* mandos: Use #!/usr/bin/python2.7 instead of #!/usr/bin/python.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
WARN:=-O -Wall -Wextra -Wdouble-promotion -Wformat=2 -Winit-self \
 
1
WARN=-O -Wall -Wextra -Wdouble-promotion -Wformat=2 -Winit-self \
2
2
        -Wmissing-include-dirs -Wswitch-default -Wswitch-enum \
3
3
        -Wunused -Wuninitialized -Wstrict-overflow=5 \
4
4
        -Wsuggest-attribute=pure -Wsuggest-attribute=const \
10
10
        -Wmissing-format-attribute -Wnormalized=nfc -Wpacked \
11
11
        -Wredundant-decls -Wnested-externs -Winline -Wvla \
12
12
        -Wvolatile-register-var -Woverlength-strings
13
 
 
14
 
#DEBUG:=-ggdb3 -fsanitize=address $(SANITIZE)
15
 
## Check which sanitizing options can be used
16
 
#SANITIZE:=$(foreach option,$(ALL_SANITIZE_OPTIONS),$(shell \
17
 
#       echo 'int main(){}' | $(CC) --language=c $(option) \
18
 
#       /dev/stdin -o /dev/null >/dev/null 2>&1 && echo $(option)))
19
 
# <https://developerblog.redhat.com/2014/10/16/gcc-undefined-behavior-sanitizer-ubsan/>
20
 
ALL_SANITIZE_OPTIONS:=-fsanitize=leak -fsanitize=undefined \
21
 
        -fsanitize=shift -fsanitize=integer-divide-by-zero \
22
 
        -fsanitize=unreachable -fsanitize=vla-bound -fsanitize=null \
23
 
        -fsanitize=return -fsanitize=signed-integer-overflow \
24
 
        -fsanitize=bounds -fsanitize=alignment \
25
 
        -fsanitize=object-size -fsanitize=float-divide-by-zero \
26
 
        -fsanitize=float-cast-overflow -fsanitize=nonnull-attribute \
27
 
        -fsanitize=returns-nonnull-attribute -fsanitize=bool \
28
 
        -fsanitize=enum -fsanitize-address-use-after-scope
29
 
 
 
13
#DEBUG=-ggdb3
30
14
# For info about _FORTIFY_SOURCE, see feature_test_macros(7)
31
 
# and <https://gcc.gnu.org/ml/gcc-patches/2004-09/msg02055.html>.
32
 
FORTIFY:=-D_FORTIFY_SOURCE=2 -fstack-protector-all -fPIC
33
 
LINK_FORTIFY_LD:=-z relro -z now
34
 
LINK_FORTIFY:=
 
15
# and <http://gcc.gnu.org/ml/gcc-patches/2004-09/msg02055.html>.
 
16
FORTIFY=-D_FORTIFY_SOURCE=2 -fstack-protector-all -fPIC
 
17
LINK_FORTIFY_LD=-z relro -z now
 
18
LINK_FORTIFY=
35
19
 
36
20
# If BROKEN_PIE is set, do not build with -pie
37
21
ifndef BROKEN_PIE
39
23
LINK_FORTIFY += -pie
40
24
endif
41
25
#COVERAGE=--coverage
42
 
OPTIMIZE:=-Os -fno-strict-aliasing
43
 
LANGUAGE:=-std=gnu11
44
 
FEATURES:=-D_FILE_OFFSET_BITS=64
45
 
htmldir:=man
46
 
version:=1.8.12
47
 
SED:=sed
48
 
PKG_CONFIG?=pkg-config
49
 
 
50
 
USER:=$(firstword $(subst :, ,$(shell getent passwd _mandos \
51
 
        || getent passwd nobody || echo 65534)))
52
 
GROUP:=$(firstword $(subst :, ,$(shell getent group _mandos \
53
 
        || getent group nogroup || echo 65534)))
54
 
 
55
 
LINUXVERSION:=$(shell uname --kernel-release)
 
26
OPTIMIZE=-Os -fno-strict-aliasing
 
27
LANGUAGE=-std=gnu99
 
28
htmldir=man
 
29
version=1.6.7
 
30
SED=sed
 
31
 
 
32
USER=$(firstword $(subst :, ,$(shell getent passwd _mandos || getent passwd nobody || echo 65534)))
 
33
GROUP=$(firstword $(subst :, ,$(shell getent group _mandos || getent group nobody || echo 65534)))
56
34
 
57
35
## Use these settings for a traditional /usr/local install
58
 
# PREFIX:=$(DESTDIR)/usr/local
59
 
# CONFDIR:=$(DESTDIR)/etc/mandos
60
 
# KEYDIR:=$(DESTDIR)/etc/mandos/keys
61
 
# MANDIR:=$(PREFIX)/man
62
 
# INITRAMFSTOOLS:=$(DESTDIR)/etc/initramfs-tools
63
 
# DRACUTMODULE:=$(DESTDIR)/usr/lib/dracut/modules.d/90mandos
64
 
# STATEDIR:=$(DESTDIR)/var/lib/mandos
65
 
# LIBDIR:=$(PREFIX)/lib
 
36
# PREFIX=$(DESTDIR)/usr/local
 
37
# CONFDIR=$(DESTDIR)/etc/mandos
 
38
# KEYDIR=$(DESTDIR)/etc/mandos/keys
 
39
# MANDIR=$(PREFIX)/man
 
40
# INITRAMFSTOOLS=$(DESTDIR)/etc/initramfs-tools
 
41
# STATEDIR=$(DESTDIR)/var/lib/mandos
 
42
# LIBDIR=$(PREFIX)/lib
66
43
##
67
44
 
68
45
## These settings are for a package-type install
69
 
PREFIX:=$(DESTDIR)/usr
70
 
CONFDIR:=$(DESTDIR)/etc/mandos
71
 
KEYDIR:=$(DESTDIR)/etc/keys/mandos
72
 
MANDIR:=$(PREFIX)/share/man
73
 
INITRAMFSTOOLS:=$(DESTDIR)/usr/share/initramfs-tools
74
 
DRACUTMODULE:=$(DESTDIR)/usr/lib/dracut/modules.d/90mandos
75
 
STATEDIR:=$(DESTDIR)/var/lib/mandos
76
 
LIBDIR:=$(shell \
 
46
PREFIX=$(DESTDIR)/usr
 
47
CONFDIR=$(DESTDIR)/etc/mandos
 
48
KEYDIR=$(DESTDIR)/etc/keys/mandos
 
49
MANDIR=$(PREFIX)/share/man
 
50
INITRAMFSTOOLS=$(DESTDIR)/usr/share/initramfs-tools
 
51
STATEDIR=$(DESTDIR)/var/lib/mandos
 
52
LIBDIR=$(shell \
77
53
        for d in \
78
 
        "/usr/lib/`dpkg-architecture \
79
 
                        -qDEB_HOST_MULTIARCH 2>/dev/null`" \
 
54
        "/usr/lib/`dpkg-architecture -qDEB_HOST_MULTIARCH 2>/dev/null`" \
80
55
        "`rpm --eval='%{_libdir}' 2>/dev/null`" /usr/lib; do \
81
56
                if [ -d "$$d" -a "$$d" = "$${d%/}" ]; then \
82
57
                        echo "$(DESTDIR)$$d"; \
85
60
        done)
86
61
##
87
62
 
88
 
SYSTEMD:=$(DESTDIR)$(shell $(PKG_CONFIG) systemd \
89
 
                        --variable=systemdsystemunitdir)
90
 
TMPFILES:=$(DESTDIR)$(shell $(PKG_CONFIG) systemd \
91
 
                        --variable=tmpfilesdir)
92
 
SYSUSERS:=$(DESTDIR)$(shell $(PKG_CONFIG) systemd \
93
 
                        --variable=sysusersdir)
 
63
SYSTEMD=$(DESTDIR)$(shell pkg-config systemd --variable=systemdsystemunitdir)
94
64
 
95
 
GNUTLS_CFLAGS:=$(shell $(PKG_CONFIG) --cflags-only-I gnutls)
96
 
GNUTLS_LIBS:=$(shell $(PKG_CONFIG) --libs gnutls)
97
 
AVAHI_CFLAGS:=$(shell $(PKG_CONFIG) --cflags-only-I avahi-core)
98
 
AVAHI_LIBS:=$(shell $(PKG_CONFIG) --libs avahi-core)
99
 
GPGME_CFLAGS:=$(shell gpgme-config --cflags; getconf LFS_CFLAGS)
100
 
GPGME_LIBS:=$(shell gpgme-config --libs; getconf LFS_LIBS; \
 
65
GNUTLS_CFLAGS=$(shell pkg-config --cflags-only-I gnutls)
 
66
GNUTLS_LIBS=$(shell pkg-config --libs gnutls)
 
67
AVAHI_CFLAGS=$(shell pkg-config --cflags-only-I avahi-core)
 
68
AVAHI_LIBS=$(shell pkg-config --libs avahi-core)
 
69
GPGME_CFLAGS=$(shell gpgme-config --cflags; getconf LFS_CFLAGS)
 
70
GPGME_LIBS=$(shell gpgme-config --libs; getconf LFS_LIBS; \
101
71
        getconf LFS_LDFLAGS)
102
 
LIBNL3_CFLAGS:=$(shell $(PKG_CONFIG) --cflags-only-I libnl-route-3.0)
103
 
LIBNL3_LIBS:=$(shell $(PKG_CONFIG) --libs libnl-route-3.0)
104
 
GLIB_CFLAGS:=$(shell $(PKG_CONFIG) --cflags glib-2.0)
105
 
GLIB_LIBS:=$(shell $(PKG_CONFIG) --libs glib-2.0)
106
72
 
107
73
# Do not change these two
108
74
CFLAGS+=$(WARN) $(DEBUG) $(FORTIFY) $(COVERAGE) $(OPTIMIZE) \
109
 
        $(LANGUAGE) $(FEATURES) -DVERSION='"$(version)"'
110
 
LDFLAGS+=-Xlinker --as-needed $(COVERAGE) $(LINK_FORTIFY) $(strip \
111
 
        ) $(foreach flag,$(LINK_FORTIFY_LD),-Xlinker $(flag))
 
75
        $(LANGUAGE) $(GNUTLS_CFLAGS) $(AVAHI_CFLAGS) $(GPGME_CFLAGS) \
 
76
        -DVERSION='"$(version)"'
 
77
LDFLAGS+=-Xlinker --as-needed $(COVERAGE) $(LINK_FORTIFY) $(foreach flag,$(LINK_FORTIFY_LD),-Xlinker $(flag))
112
78
 
113
79
# Commands to format a DocBook <refentry> document into a manual page
114
80
DOCBOOKTOMAN=$(strip cd $(dir $<); xsltproc --nonet --xinclude \
120
86
        /usr/share/xml/docbook/stylesheet/nwalsh/manpages/docbook.xsl \
121
87
        $(notdir $<); \
122
88
        if locale --all 2>/dev/null | grep --regexp='^en_US\.utf8$$' \
123
 
        && command -v man >/dev/null; then LANG=en_US.UTF-8 \
124
 
        MANWIDTH=80 man --warnings --encoding=UTF-8 --local-file \
125
 
        $(notdir $@); fi >/dev/null)
 
89
        && type man 2>/dev/null; then LANG=en_US.UTF-8 MANWIDTH=80 \
 
90
        man --warnings --encoding=UTF-8 --local-file $(notdir $@); \
 
91
        fi >/dev/null)
126
92
 
127
93
DOCBOOKTOHTML=$(strip xsltproc --nonet --xinclude \
128
94
        --param make.year.ranges                1 \
134
100
        /usr/share/xml/docbook/stylesheet/nwalsh/xhtml/docbook.xsl \
135
101
        $<; $(HTMLPOST) $@)
136
102
# Fix citerefentry links
137
 
HTMLPOST:=$(SED) --in-place \
 
103
HTMLPOST=$(SED) --in-place \
138
104
        --expression='s/\(<a class="citerefentry" href="\)\("><span class="citerefentry"><span class="refentrytitle">\)\([^<]*\)\(<\/span>(\)\([^)]*\)\()<\/span><\/a>\)/\1\3.\5\2\3\4\5\6/g'
139
105
 
140
 
PLUGINS:=plugins.d/password-prompt plugins.d/mandos-client \
 
106
PLUGINS=plugins.d/password-prompt plugins.d/mandos-client \
141
107
        plugins.d/usplash plugins.d/splashy plugins.d/askpass-fifo \
142
108
        plugins.d/plymouth
143
 
PLUGIN_HELPERS:=plugin-helpers/mandos-client-iprouteadddel
144
 
CPROGS:=plugin-runner dracut-module/password-agent $(PLUGINS) \
145
 
        $(PLUGIN_HELPERS)
146
 
PROGS:=mandos mandos-keygen mandos-ctl mandos-monitor $(CPROGS)
147
 
DOCS:=mandos.8 mandos-keygen.8 mandos-monitor.8 mandos-ctl.8 \
 
109
CPROGS=plugin-runner $(PLUGINS)
 
110
PROGS=mandos mandos-keygen mandos-ctl mandos-monitor $(CPROGS)
 
111
DOCS=mandos.8 mandos-keygen.8 mandos-monitor.8 mandos-ctl.8 \
148
112
        mandos.conf.5 mandos-clients.conf.5 plugin-runner.8mandos \
149
 
        dracut-module/password-agent.8mandos \
150
113
        plugins.d/mandos-client.8mandos \
151
114
        plugins.d/password-prompt.8mandos plugins.d/usplash.8mandos \
152
115
        plugins.d/splashy.8mandos plugins.d/askpass-fifo.8mandos \
153
116
        plugins.d/plymouth.8mandos intro.8mandos
154
117
 
155
 
htmldocs:=$(addsuffix .xhtml,$(DOCS))
156
 
 
157
 
objects:=$(addsuffix .o,$(CPROGS))
158
 
 
159
 
.PHONY: all
 
118
htmldocs=$(addsuffix .xhtml,$(DOCS))
 
119
 
 
120
objects=$(addsuffix .o,$(CPROGS))
 
121
 
160
122
all: $(PROGS) mandos.lsm
161
123
 
162
 
.PHONY: doc
163
124
doc: $(DOCS)
164
125
 
165
 
.PHONY: html
166
126
html: $(htmldocs)
167
127
 
168
128
%.5: %.xml common.ent legalnotice.xml
227
187
                overview.xml legalnotice.xml
228
188
        $(DOCBOOKTOHTML)
229
189
 
230
 
dracut-module/password-agent.8mandos: \
231
 
                dracut-module/password-agent.xml common.ent \
232
 
                overview.xml legalnotice.xml
233
 
        $(DOCBOOKTOMAN)
234
 
dracut-module/password-agent.8mandos.xhtml: \
235
 
                dracut-module/password-agent.xml common.ent \
236
 
                overview.xml legalnotice.xml
237
 
        $(DOCBOOKTOHTML)
238
 
 
239
190
plugins.d/mandos-client.8mandos: plugins.d/mandos-client.xml \
240
191
                                        common.ent \
241
192
                                        mandos-options.xml \
284
235
                --expression='s/\(mandos_\)[0-9.]\+\(\.orig\.tar\.gz\)/\1$(version)\2/' \
285
236
                $@)
286
237
 
287
 
# Need to add the GnuTLS, Avahi and GPGME libraries
288
 
plugins.d/mandos-client: CFLAGS += $(GNUTLS_CFLAGS) $(strip \
289
 
        ) $(AVAHI_CFLAGS) $(GPGME_CFLAGS)
290
 
plugins.d/mandos-client: LDLIBS += $(GNUTLS_LIBS) $(strip \
291
 
        ) $(AVAHI_LIBS) $(GPGME_LIBS)
292
 
 
293
 
# Need to add the libnl-route library
294
 
plugin-helpers/mandos-client-iprouteadddel: CFLAGS += $(LIBNL3_CFLAGS)
295
 
plugin-helpers/mandos-client-iprouteadddel: LDLIBS += $(LIBNL3_LIBS)
296
 
 
297
 
# Need to add the GLib and pthread libraries
298
 
dracut-module/password-agent: CFLAGS += $(GLIB_CFLAGS)
299
 
dracut-module/password-agent: LDLIBS += $(GLIB_LIBS) -lpthread
300
 
 
301
 
.PHONY: clean
 
238
plugins.d/mandos-client: plugins.d/mandos-client.c
 
239
        $(LINK.c) $^ -lrt $(GNUTLS_LIBS) $(AVAHI_LIBS) $(strip\
 
240
                ) $(GPGME_LIBS) $(LOADLIBES) $(LDLIBS) -o $@
 
241
 
 
242
.PHONY : all doc html clean distclean mostlyclean maintainer-clean \
 
243
        check run-client run-server install install-html \
 
244
        install-server install-client-nokey install-client uninstall \
 
245
        uninstall-server uninstall-client purge purge-server \
 
246
        purge-client
 
247
 
302
248
clean:
303
249
        -rm --force $(CPROGS) $(objects) $(htmldocs) $(DOCS) core
304
250
 
305
 
.PHONY: distclean
306
251
distclean: clean
307
 
.PHONY: mostlyclean
308
252
mostlyclean: clean
309
 
.PHONY: maintainer-clean
310
253
maintainer-clean: clean
311
254
        -rm --force --recursive keydir confdir statedir
312
255
 
313
 
.PHONY: check
314
 
check: all
 
256
check:  all
315
257
        ./mandos --check
316
258
        ./mandos-ctl --check
317
 
        ./mandos-keygen --version
318
 
        ./plugin-runner --version
319
 
        ./plugin-helpers/mandos-client-iprouteadddel --version
320
 
        ./dracut-module/password-agent --test
321
259
 
322
260
# Run the client with a local config and key
323
 
.PHONY: run-client
324
 
run-client: all keydir/seckey.txt keydir/pubkey.txt \
325
 
                        keydir/tls-privkey.pem keydir/tls-pubkey.pem
326
 
        @echo '######################################################'
327
 
        @echo '# The following error messages are harmless and can  #'
328
 
        @echo '#  be safely ignored:                                #'
329
 
        @echo '## From plugin-runner:                               #'
330
 
        @echo '# setgid: Operation not permitted                    #'
331
 
        @echo '# setuid: Operation not permitted                    #'
332
 
        @echo '## From askpass-fifo:                                #'
333
 
        @echo '# mkfifo: Permission denied                          #'
334
 
        @echo '## From mandos-client:                               #'
335
 
        @echo '# Failed to raise privileges: Operation not permi... #'
336
 
        @echo '# Warning: network hook "*" exited with status *     #'
337
 
        @echo '# ioctl SIOCSIFFLAGS +IFF_UP: Operation not permi... #'
338
 
        @echo '# Failed to bring up interface "*": Operation not... #'
339
 
        @echo '#                                                    #'
340
 
        @echo '# (The messages are caused by not running as root,   #'
341
 
        @echo '# but you should NOT run "make run-client" as root   #'
342
 
        @echo '# unless you also unpacked and compiled Mandos as    #'
343
 
        @echo '# root, which is also NOT recommended.)              #'
344
 
        @echo '######################################################'
 
261
run-client: all keydir/seckey.txt keydir/pubkey.txt
 
262
        @echo "###################################################################"
 
263
        @echo "# The following error messages are harmless and can be safely     #"
 
264
        @echo "# ignored.  The messages are caused by not running as root, but   #"
 
265
        @echo "# you should NOT run \"make run-client\" as root unless you also    #"
 
266
        @echo "# unpacked and compiled Mandos as root, which is NOT recommended. #"
 
267
        @echo "# From plugin-runner: setgid: Operation not permitted             #"
 
268
        @echo "#                     setuid: Operation not permitted             #"
 
269
        @echo "# From askpass-fifo:  mkfifo: Permission denied                   #"
 
270
        @echo "# From mandos-client:                                             #"
 
271
        @echo "#             Failed to raise privileges: Operation not permitted #"
 
272
        @echo "#             Warning: network hook \"*\" exited with status *      #"
 
273
        @echo "###################################################################"
345
274
# We set GNOME_KEYRING_CONTROL to block pam_gnome_keyring
346
275
        ./plugin-runner --plugin-dir=plugins.d \
347
 
                --plugin-helper-dir=plugin-helpers \
348
276
                --config-file=plugin-runner.conf \
349
 
                --options-for=mandos-client:--seckey=keydir/seckey.txt,--pubkey=keydir/pubkey.txt,--tls-privkey=keydir/tls-privkey.pem,--tls-pubkey=keydir/tls-pubkey.pem,--network-hook-dir=network-hooks.d \
 
277
                --options-for=mandos-client:--seckey=keydir/seckey.txt,--pubkey=keydir/pubkey.txt,--network-hook-dir=network-hooks.d \
350
278
                --env-for=mandos-client:GNOME_KEYRING_CONTROL= \
351
279
                $(CLIENTARGS)
352
280
 
353
281
# Used by run-client
354
 
keydir/seckey.txt keydir/pubkey.txt keydir/tls-privkey.pem keydir/tls-pubkey.pem: mandos-keygen
 
282
keydir/seckey.txt keydir/pubkey.txt: mandos-keygen
355
283
        install --directory keydir
356
284
        ./mandos-keygen --dir keydir --force
357
 
        if ! [ -e keydir/tls-privkey.pem ]; then \
358
 
                install --mode=u=rw /dev/null keydir/tls-privkey.pem; \
359
 
        fi
360
 
        if ! [ -e keydir/tls-pubkey.pem ]; then \
361
 
                install --mode=u=rw /dev/null keydir/tls-pubkey.pem; \
362
 
        fi
363
285
 
364
286
# Run the server with a local config
365
 
.PHONY: run-server
366
287
run-server: confdir/mandos.conf confdir/clients.conf statedir
367
288
        ./mandos --debug --no-dbus --configdir=confdir \
368
289
                --statedir=statedir $(SERVERARGS)
371
292
confdir/mandos.conf: mandos.conf
372
293
        install --directory confdir
373
294
        install --mode=u=rw,go=r $^ $@
374
 
confdir/clients.conf: clients.conf keydir/seckey.txt keydir/tls-pubkey.pem
 
295
confdir/clients.conf: clients.conf keydir/seckey.txt
375
296
        install --directory confdir
376
297
        install --mode=u=rw $< $@
377
298
# Add a client password
379
300
statedir:
380
301
        install --directory statedir
381
302
 
382
 
.PHONY: install
383
303
install: install-server install-client-nokey
384
304
 
385
 
.PHONY: install-html
386
305
install-html: html
387
306
        install --directory $(htmldir)
388
307
        install --mode=u=rw,go=r --target-directory=$(htmldir) \
389
308
                $(htmldocs)
390
309
 
391
 
.PHONY: install-server
392
310
install-server: doc
393
311
        install --directory $(CONFDIR)
394
312
        if install --directory --mode=u=rwx --owner=$(USER) \
397
315
        elif install --directory --mode=u=rwx $(STATEDIR); then \
398
316
                chown -- $(USER):$(GROUP) $(STATEDIR) || :; \
399
317
        fi
400
 
        if [ "$(TMPFILES)" != "$(DESTDIR)" \
401
 
                        -a -d "$(TMPFILES)" ]; then \
402
 
                install --mode=u=rw,go=r tmpfiles.d-mandos.conf \
403
 
                        $(TMPFILES)/mandos.conf; \
404
 
        fi
405
 
        if [ "$(SYSUSERS)" != "$(DESTDIR)" \
406
 
                        -a -d "$(SYSUSERS)" ]; then \
407
 
                install --mode=u=rw,go=r sysusers.d-mandos.conf \
408
 
                        $(SYSUSERS)/mandos.conf; \
409
 
        fi
410
318
        install --mode=u=rwx,go=rx mandos $(PREFIX)/sbin/mandos
411
319
        install --mode=u=rwx,go=rx --target-directory=$(PREFIX)/sbin \
412
320
                mandos-ctl
441
349
        gzip --best --to-stdout intro.8mandos \
442
350
                > $(MANDIR)/man8/intro.8mandos.gz
443
351
 
444
 
.PHONY: install-client-nokey
445
352
install-client-nokey: all doc
446
353
        install --directory $(LIBDIR)/mandos $(CONFDIR)
447
354
        install --directory --mode=u=rwx $(KEYDIR) \
448
 
                $(LIBDIR)/mandos/plugins.d \
449
 
                $(LIBDIR)/mandos/plugin-helpers
450
 
        if [ "$(SYSUSERS)" != "$(DESTDIR)" \
451
 
                        -a -d "$(SYSUSERS)" ]; then \
452
 
                install --mode=u=rw,go=r sysusers.d-mandos.conf \
453
 
                        $(SYSUSERS)/mandos-client.conf; \
454
 
        fi
 
355
                $(LIBDIR)/mandos/plugins.d
455
356
        if [ "$(CONFDIR)" != "$(LIBDIR)/mandos" ]; then \
456
357
                install --mode=u=rwx \
457
 
                        --directory "$(CONFDIR)/plugins.d" \
458
 
                        "$(CONFDIR)/plugin-helpers"; \
 
358
                        --directory "$(CONFDIR)/plugins.d"; \
459
359
        fi
460
360
        install --mode=u=rwx,go=rx --directory \
461
361
                "$(CONFDIR)/network-hooks.d"
462
362
        install --mode=u=rwx,go=rx \
463
363
                --target-directory=$(LIBDIR)/mandos plugin-runner
464
 
        install --mode=u=rwx,go=rx \
465
 
                --target-directory=$(LIBDIR)/mandos \
466
 
                mandos-to-cryptroot-unlock
467
364
        install --mode=u=rwx,go=rx --target-directory=$(PREFIX)/sbin \
468
365
                mandos-keygen
469
366
        install --mode=u=rwx,go=rx \
484
381
        install --mode=u=rwxs,go=rx \
485
382
                --target-directory=$(LIBDIR)/mandos/plugins.d \
486
383
                plugins.d/plymouth
487
 
        install --mode=u=rwx,go=rx \
488
 
                --target-directory=$(LIBDIR)/mandos/plugin-helpers \
489
 
                plugin-helpers/mandos-client-iprouteadddel
490
384
        install initramfs-tools-hook \
491
385
                $(INITRAMFSTOOLS)/hooks/mandos
492
 
        install --mode=u=rw,go=r initramfs-tools-conf \
493
 
                $(INITRAMFSTOOLS)/conf.d/mandos-conf
494
 
        install --mode=u=rw,go=r initramfs-tools-conf-hook \
495
 
                $(INITRAMFSTOOLS)/conf-hooks.d/zz-mandos
 
386
        install --mode=u=rw,go=r initramfs-tools-hook-conf \
 
387
                $(INITRAMFSTOOLS)/conf-hooks.d/mandos
496
388
        install initramfs-tools-script \
497
389
                $(INITRAMFSTOOLS)/scripts/init-premount/mandos
498
 
        install initramfs-tools-script-stop \
499
 
                $(INITRAMFSTOOLS)/scripts/local-premount/mandos
500
 
        install --directory $(DRACUTMODULE)
501
 
        install --mode=u=rw,go=r --target-directory=$(DRACUTMODULE) \
502
 
                dracut-module/ask-password-mandos.path \
503
 
                dracut-module/ask-password-mandos.service
504
 
        install --mode=u=rwxs,go=rx \
505
 
                --target-directory=$(DRACUTMODULE) \
506
 
                dracut-module/module-setup.sh \
507
 
                dracut-module/cmdline-mandos.sh \
508
 
                dracut-module/password-agent
509
390
        install --mode=u=rw,go=r plugin-runner.conf $(CONFDIR)
510
391
        gzip --best --to-stdout mandos-keygen.8 \
511
392
                > $(MANDIR)/man8/mandos-keygen.8.gz
523
404
                > $(MANDIR)/man8/askpass-fifo.8mandos.gz
524
405
        gzip --best --to-stdout plugins.d/plymouth.8mandos \
525
406
                > $(MANDIR)/man8/plymouth.8mandos.gz
526
 
        gzip --best --to-stdout dracut-module/password-agent.8mandos \
527
 
                > $(MANDIR)/man8/password-agent.8mandos.gz
528
407
 
529
 
.PHONY: install-client
530
408
install-client: install-client-nokey
531
409
# Post-installation stuff
532
410
        -$(PREFIX)/sbin/mandos-keygen --dir "$(KEYDIR)"
533
 
        if command -v update-initramfs >/dev/null; then \
534
 
            update-initramfs -k all -u; \
535
 
        elif command -v dracut >/dev/null; then \
536
 
            for initrd in $(DESTDIR)/boot/initr*-$(LINUXVERSION); do \
537
 
                if [ -w "$$initrd" ]; then \
538
 
                    chmod go-r "$$initrd"; \
539
 
                    dracut --force "$$initrd"; \
540
 
                fi; \
541
 
            done; \
542
 
        fi
 
411
        update-initramfs -k all -u
543
412
        echo "Now run mandos-keygen --password --dir $(KEYDIR)"
544
413
 
545
 
.PHONY: uninstall
546
414
uninstall: uninstall-server uninstall-client
547
415
 
548
 
.PHONY: uninstall-server
549
416
uninstall-server:
550
417
        -rm --force $(PREFIX)/sbin/mandos \
551
418
                $(PREFIX)/sbin/mandos-ctl \
558
425
        update-rc.d -f mandos remove
559
426
        -rmdir $(CONFDIR)
560
427
 
561
 
.PHONY: uninstall-client
562
428
uninstall-client:
563
429
# Refuse to uninstall client if /etc/crypttab is explicitly configured
564
430
# to use it.
575
441
                $(INITRAMFSTOOLS)/hooks/mandos \
576
442
                $(INITRAMFSTOOLS)/conf-hooks.d/mandos \
577
443
                $(INITRAMFSTOOLS)/scripts/init-premount/mandos \
578
 
                $(INITRAMFSTOOLS)/scripts/local-premount/mandos \
579
 
                $(DRACUTMODULE)/ask-password-mandos.path \
580
 
                $(DRACUTMODULE)/ask-password-mandos.service \
581
 
                $(DRACUTMODULE)/module-setup.sh \
582
 
                $(DRACUTMODULE)/cmdline-mandos.sh \
583
 
                $(DRACUTMODULE)/password-agent \
584
444
                $(MANDIR)/man8/mandos-keygen.8.gz \
585
445
                $(MANDIR)/man8/plugin-runner.8mandos.gz \
586
446
                $(MANDIR)/man8/mandos-client.8mandos.gz
589
449
                $(MANDIR)/man8/splashy.8mandos.gz \
590
450
                $(MANDIR)/man8/askpass-fifo.8mandos.gz \
591
451
                $(MANDIR)/man8/plymouth.8mandos.gz \
592
 
                $(MANDIR)/man8/password-agent.8mandos.gz \
593
452
        -rmdir $(LIBDIR)/mandos/plugins.d $(CONFDIR)/plugins.d \
594
 
                 $(LIBDIR)/mandos $(CONFDIR) $(KEYDIR) $(DRACUTMODULE)
595
 
        if command -v update-initramfs >/dev/null; then \
596
 
            update-initramfs -k all -u; \
597
 
        elif command -v dracut >/dev/null; then \
598
 
            for initrd in $(DESTDIR)/boot/initr*-$(LINUXVERSION); do \
599
 
                test -w "$$initrd" && dracut --force "$$initrd"; \
600
 
            done; \
601
 
        fi
 
453
                 $(LIBDIR)/mandos $(CONFDIR) $(KEYDIR)
 
454
        update-initramfs -k all -u
602
455
 
603
 
.PHONY: purge
604
456
purge: purge-server purge-client
605
457
 
606
 
.PHONY: purge-server
607
458
purge-server: uninstall-server
608
459
        -rm --force $(CONFDIR)/mandos.conf $(CONFDIR)/clients.conf \
609
460
                $(DESTDIR)/etc/dbus-1/system.d/mandos.conf
614
465
                $(DESTDIR)/var/run/mandos.pid
615
466
        -rmdir $(CONFDIR)
616
467
 
617
 
.PHONY: purge-client
618
468
purge-client: uninstall-client
619
 
        -shred --remove $(KEYDIR)/seckey.txt $(KEYDIR)/tls-privkey.pem
 
469
        -shred --remove $(KEYDIR)/seckey.txt
620
470
        -rm --force $(CONFDIR)/plugin-runner.conf \
621
 
                $(KEYDIR)/pubkey.txt $(KEYDIR)/seckey.txt \
622
 
                $(KEYDIR)/tls-pubkey.txt $(KEYDIR)/tls-privkey.txt
 
471
                $(KEYDIR)/pubkey.txt $(KEYDIR)/seckey.txt
623
472
        -rmdir $(KEYDIR) $(CONFDIR)/plugins.d $(CONFDIR)