at 18.03-beta 130 lines 4.4 kB view raw
1diff --git a/Makefile b/Makefile 2index d82e30f..d231cf9 100644 3--- a/Makefile 4+++ b/Makefile 5@@ -51,6 +51,9 @@ endif 6 ifdef DEBIAN 7 CPPFLAGS += -DDEBIAN 8 endif 9+ifdef NIXOS 10+CPPFLAGS += -DNIXOS 11+endif 12 ifdef DEFAULT_OLD_METADATA 13 CPPFLAGS += -DDEFAULT_OLD_METADATA 14 DEFAULT_METADATA=0.90 15@@ -105,6 +108,7 @@ endif 16 INSTALL = /usr/bin/install 17 DESTDIR = 18 BINDIR = /sbin 19+INSTALL_BINDIR = ${BINDIR} 20 MANDIR = /usr/share/man 21 MAN4DIR = $(MANDIR)/man4 22 MAN5DIR = $(MANDIR)/man5 23@@ -259,20 +263,20 @@ sha1.o : sha1.c sha1.h md5.h 24 $(CC) $(CFLAGS) -DHAVE_STDINT_H -o sha1.o -c sha1.c 25 26 install : mdadm mdmon install-man install-udev 27- $(INSTALL) -D $(STRIP) -m 755 mdadm $(DESTDIR)$(BINDIR)/mdadm 28- $(INSTALL) -D $(STRIP) -m 755 mdmon $(DESTDIR)$(BINDIR)/mdmon 29+ $(INSTALL) -D $(STRIP) -m 755 mdadm $(DESTDIR)$(INSTALL_BINDIR)/mdadm 30+ $(INSTALL) -D $(STRIP) -m 755 mdmon $(DESTDIR)$(INSTALL_BINDIR)/mdmon 31 32 install-static : mdadm.static install-man 33- $(INSTALL) -D $(STRIP) -m 755 mdadm.static $(DESTDIR)$(BINDIR)/mdadm 34+ $(INSTALL) -D $(STRIP) -m 755 mdadm.static $(DESTDIR)$(INSTALL_BINDIR)/mdadm 35 36 install-tcc : mdadm.tcc install-man 37- $(INSTALL) -D $(STRIP) -m 755 mdadm.tcc $(DESTDIR)$(BINDIR)/mdadm 38+ $(INSTALL) -D $(STRIP) -m 755 mdadm.tcc $(DESTDIR)$(INSTALL_BINDIR)/mdadm 39 40 install-uclibc : mdadm.uclibc install-man 41- $(INSTALL) -D $(STRIP) -m 755 mdadm.uclibc $(DESTDIR)$(BINDIR)/mdadm 42+ $(INSTALL) -D $(STRIP) -m 755 mdadm.uclibc $(DESTDIR)$(INSTALL_BINDIR)/mdadm 43 44 install-klibc : mdadm.klibc install-man 45- $(INSTALL) -D $(STRIP) -m 755 mdadm.klibc $(DESTDIR)$(BINDIR)/mdadm 46+ $(INSTALL) -D $(STRIP) -m 755 mdadm.klibc $(DESTDIR)$(INSTALL_BINDIR)/mdadm 47 48 install-man: mdadm.8 md.4 mdadm.conf.5 mdmon.8 49 $(INSTALL) -D -m 644 mdadm.8 $(DESTDIR)$(MAN8DIR)/mdadm.8 50@@ -305,7 +309,7 @@ install-systemd: systemd/mdmon@.service 51 if [ -f /etc/SuSE-release -o -n "$(SUSE)" ] ;then $(INSTALL) -D -m 755 systemd/SUSE-mdadm_env.sh $(DESTDIR)$(SYSTEMD_DIR)/../scripts/mdadm_env.sh ;fi 52 53 uninstall: 54- rm -f $(DESTDIR)$(MAN8DIR)/mdadm.8 $(DESTDIR)$(MAN8DIR)/mdmon.8 $(DESTDIR)$(MAN4DIR)/md.4 $(DESTDIR)$(MAN5DIR)/mdadm.conf.5 $(DESTDIR)$(BINDIR)/mdadm 55+ rm -f $(DESTDIR)$(MAN8DIR)/mdadm.8 $(DESTDIR)$(MAN8DIR)/mdmon.8 $(DESTDIR)$(MAN4DIR)/md.4 $(DESTDIR)$(MAN5DIR)/mdadm.conf.5 $(DESTDIR)$(INSTALL_BINDIR)/mdadm 56 57 test: mdadm mdmon test_stripe swap_super raid6check 58 @echo "Please run './test' as root" 59diff --git a/policy.c b/policy.c 60index 064d349..6b2f2b1 100644 61--- a/policy.c 62+++ b/policy.c 63@@ -796,12 +796,39 @@ char *find_rule(struct rule *rule, char *rule_type) 64 #define UDEV_RULE_FORMAT \ 65 "ACTION==\"add\", SUBSYSTEM==\"block\", " \ 66 "ENV{DEVTYPE}==\"%s\", ENV{ID_PATH}==\"%s\", " \ 67-"RUN+=\"" BINDIR "/mdadm --incremental $env{DEVNAME}\"\n" 68+"RUN+=\"%s/mdadm --incremental $env{DEVNAME}\"\n" 69 70 #define UDEV_RULE_FORMAT_NOTYPE \ 71 "ACTION==\"add\", SUBSYSTEM==\"block\", " \ 72 "ENV{ID_PATH}==\"%s\", " \ 73-"RUN+=\"" BINDIR "/mdadm --incremental $env{DEVNAME}\"\n" 74+"RUN+=\"%s/mdadm --incremental $env{DEVNAME}\"\n" 75+ 76+#ifdef NIXOS 77+const char *get_mdadm_bindir(void) 78+{ 79+ static char *bindir = NULL; 80+ if (bindir != NULL) { 81+ return bindir; 82+ } else { 83+ int len; 84+ bindir = xmalloc(1025); 85+ len = readlink("/proc/self/exe", bindir, 1024); 86+ if (len > 0) { 87+ char *basename; 88+ if ((basename = strrchr(bindir, '/')) != NULL) 89+ *basename = '\0'; 90+ else 91+ *(bindir + len) = '\0'; 92+ } else { 93+ *bindir = '\0'; 94+ } 95+ return bindir; 96+ } 97+} 98+#define SELF get_mdadm_bindir() 99+#else 100+#define SELF BINDIR 101+#endif 102 103 /* Write rule in the rule file. Use format from UDEV_RULE_FORMAT */ 104 int write_rule(struct rule *rule, int fd, int force_part) 105@@ -815,9 +842,9 @@ int write_rule(struct rule *rule, int fd, int force_part) 106 if (force_part) 107 typ = type_part; 108 if (typ) 109- snprintf(line, sizeof(line) - 1, UDEV_RULE_FORMAT, typ, pth); 110+ snprintf(line, sizeof(line) - 1, UDEV_RULE_FORMAT, typ, pth, SELF); 111 else 112- snprintf(line, sizeof(line) - 1, UDEV_RULE_FORMAT_NOTYPE, pth); 113+ snprintf(line, sizeof(line) - 1, UDEV_RULE_FORMAT_NOTYPE, pth, SELF); 114 return write(fd, line, strlen(line)) == (int)strlen(line); 115 } 116 117diff --git a/util.c b/util.c 118index cc98d3b..1ada2f4 100644 119--- a/util.c 120+++ b/util.c 121@@ -1700,7 +1700,9 @@ int start_mdmon(char *devnm) 122 char pathbuf[1024]; 123 char *paths[4] = { 124 pathbuf, 125+#ifndef NIXOS 126 BINDIR "/mdmon", 127+#endif 128 "./mdmon", 129 NULL 130 };