diff options
Diffstat (limited to 'nixpkgs/pkgs/os-specific/linux/mdadm/no-self-references.patch')
-rw-r--r-- | nixpkgs/pkgs/os-specific/linux/mdadm/no-self-references.patch | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/os-specific/linux/mdadm/no-self-references.patch b/nixpkgs/pkgs/os-specific/linux/mdadm/no-self-references.patch new file mode 100644 index 000000000000..3b3dc4d84609 --- /dev/null +++ b/nixpkgs/pkgs/os-specific/linux/mdadm/no-self-references.patch @@ -0,0 +1,124 @@ +diff --git a/Makefile b/Makefile +index 2a51d813..a31ac48a 100644 +--- a/Makefile ++++ b/Makefile +@@ -63,6 +63,9 @@ endif + ifdef DEBIAN + CPPFLAGS += -DDEBIAN + endif ++ifdef NIXOS ++CPPFLAGS += -DNIXOS ++endif + ifdef DEFAULT_OLD_METADATA + CPPFLAGS += -DDEFAULT_OLD_METADATA + DEFAULT_METADATA=0.90 +@@ -129,6 +132,7 @@ endif + INSTALL = /usr/bin/install + DESTDIR = + BINDIR = /sbin ++INSTALL_BINDIR = ${BINDIR} + MANDIR = /usr/share/man + MAN4DIR = $(MANDIR)/man4 + MAN5DIR = $(MANDIR)/man5 +@@ -253,16 +257,16 @@ sha1.o : sha1.c sha1.h md5.h + install : install-bin install-man install-udev + + install-static : mdadm.static install-man +- $(INSTALL) -D $(STRIP) -m 755 mdadm.static $(DESTDIR)$(BINDIR)/mdadm ++ $(INSTALL) -D $(STRIP) -m 755 mdadm.static $(DESTDIR)$(INSTALL_BINDIR)/mdadm + + install-tcc : mdadm.tcc install-man +- $(INSTALL) -D $(STRIP) -m 755 mdadm.tcc $(DESTDIR)$(BINDIR)/mdadm ++ $(INSTALL) -D $(STRIP) -m 755 mdadm.tcc $(DESTDIR)$(INSTALL_BINDIR)/mdadm + + install-uclibc : mdadm.uclibc install-man +- $(INSTALL) -D $(STRIP) -m 755 mdadm.uclibc $(DESTDIR)$(BINDIR)/mdadm ++ $(INSTALL) -D $(STRIP) -m 755 mdadm.uclibc $(DESTDIR)$(INSTALL_BINDIR)/mdadm + + install-klibc : mdadm.klibc install-man +- $(INSTALL) -D $(STRIP) -m 755 mdadm.klibc $(DESTDIR)$(BINDIR)/mdadm ++ $(INSTALL) -D $(STRIP) -m 755 mdadm.klibc $(DESTDIR)$(INSTALL_BINDIR)/mdadm + + install-man: mdadm.8 md.4 mdadm.conf.5 mdmon.8 + $(INSTALL) -D -m 644 mdadm.8 $(DESTDIR)$(MAN8DIR)/mdadm.8 +@@ -305,7 +309,7 @@ install-bin: mdadm mdmon + $(INSTALL) -D $(STRIP) -m 755 mdmon $(DESTDIR)$(BINDIR)/mdmon + + uninstall: +- rm -f $(DESTDIR)$(MAN8DIR)/mdadm.8 $(DESTDIR)$(MAN8DIR)/mdmon.8 $(DESTDIR)$(MAN4DIR)/md.4 $(DESTDIR)$(MAN5DIR)/mdadm.conf.5 $(DESTDIR)$(BINDIR)/mdadm ++ rm -f $(DESTDIR)$(MAN8DIR)/mdadm.8 $(DESTDIR)$(MAN8DIR)/mdmon.8 $(DESTDIR)$(MAN4DIR)/md.4 $(DESTDIR)$(MAN5DIR)/mdadm.conf.5 $(DESTDIR)$(INSTALL_BINDIR)/mdadm + + test: mdadm mdmon test_stripe swap_super raid6check + @echo "Please run './test' as root" +diff --git a/policy.c b/policy.c +index eee9ef63..9f916e9d 100644 +--- a/policy.c ++++ b/policy.c +@@ -817,12 +817,39 @@ char *find_rule(struct rule *rule, char *rule_type) + #define UDEV_RULE_FORMAT \ + "ACTION==\"add\", SUBSYSTEM==\"block\", " \ + "ENV{DEVTYPE}==\"%s\", ENV{ID_PATH}==\"%s\", " \ +-"RUN+=\"" BINDIR "/mdadm --incremental $env{DEVNAME}\"\n" ++"RUN+=\"%s/mdadm --incremental $env{DEVNAME}\"\n" + + #define UDEV_RULE_FORMAT_NOTYPE \ + "ACTION==\"add\", SUBSYSTEM==\"block\", " \ + "ENV{ID_PATH}==\"%s\", " \ +-"RUN+=\"" BINDIR "/mdadm --incremental $env{DEVNAME}\"\n" ++"RUN+=\"%s/mdadm --incremental $env{DEVNAME}\"\n" ++ ++#ifdef NIXOS ++const char *get_mdadm_bindir(void) ++{ ++ static char *bindir = NULL; ++ if (bindir != NULL) { ++ return bindir; ++ } else { ++ int len; ++ bindir = xmalloc(1025); ++ len = readlink("/proc/self/exe", bindir, 1024); ++ if (len > 0) { ++ char *basename; ++ if ((basename = strrchr(bindir, '/')) != NULL) ++ *basename = '\0'; ++ else ++ *(bindir + len) = '\0'; ++ } else { ++ *bindir = '\0'; ++ } ++ return bindir; ++ } ++} ++#define SELF get_mdadm_bindir() ++#else ++#define SELF BINDIR ++#endif + + /* Write rule in the rule file. Use format from UDEV_RULE_FORMAT */ + int write_rule(struct rule *rule, int fd, int force_part) +@@ -836,9 +863,9 @@ int write_rule(struct rule *rule, int fd, int force_part) + if (force_part) + typ = type_part; + if (typ) +- snprintf(line, sizeof(line) - 1, UDEV_RULE_FORMAT, typ, pth); ++ snprintf(line, sizeof(line) - 1, UDEV_RULE_FORMAT, typ, pth, SELF); + else +- snprintf(line, sizeof(line) - 1, UDEV_RULE_FORMAT_NOTYPE, pth); ++ snprintf(line, sizeof(line) - 1, UDEV_RULE_FORMAT_NOTYPE, pth, SELF); + return write(fd, line, strlen(line)) == (int)strlen(line); + } + +diff --git a/util.c b/util.c +index 3d05d074..e004a798 100644 +--- a/util.c ++++ b/util.c +@@ -1913,7 +1913,9 @@ int start_mdmon(char *devnm) + char pathbuf[1024]; + char *paths[4] = { + pathbuf, ++#ifndef NIXOS + BINDIR "/mdmon", ++#endif + "./mdmon", + NULL + }; |