]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
arpd: create /var/lib/arpd on first use
authorMax Gautier <mg@max.gautier.name>
Mon, 18 Mar 2024 15:49:13 +0000 (16:49 +0100)
committerStephen Hemminger <stephen@networkplumber.org>
Thu, 28 Mar 2024 20:35:52 +0000 (13:35 -0700)
The motivation is to build distributions packages without /var to go
towards stateless systems, see link below (TL;DR: provisionning anything
outside of /usr on boot).

We only try do create the database directory when it's in the default
location, and assume its parent (/var/lib in the usual case) exists.

Links: https://0pointer.net/blog/projects/stateless.html
Signed-off-by: Max Gautier <mg@max.gautier.name>
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Makefile
misc/arpd.c

index 8024d45ecbb0f3adc841485c5c181c0773ff9972..2b2c3dec927e7c87df392b127fa2a91db8fa3457 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -42,6 +42,7 @@ DEFINES+=-DCONF_USR_DIR=\"$(CONF_USR_DIR)\" \
          -DCONF_ETC_DIR=\"$(CONF_ETC_DIR)\" \
          -DNETNS_RUN_DIR=\"$(NETNS_RUN_DIR)\" \
          -DNETNS_ETC_DIR=\"$(NETNS_ETC_DIR)\" \
+         -DARPDDIR=\"$(ARPDDIR)\" \
          -DCONF_COLOR=$(CONF_COLOR)
 
 #options for AX.25
@@ -104,7 +105,6 @@ config.mk:
 install: all
        install -m 0755 -d $(DESTDIR)$(SBINDIR)
        install -m 0755 -d $(DESTDIR)$(CONF_USR_DIR)
-       install -m 0755 -d $(DESTDIR)$(ARPDDIR)
        install -m 0755 -d $(DESTDIR)$(HDRDIR)
        @for i in $(SUBDIRS);  do $(MAKE) -C $$i install; done
        install -m 0644 $(shell find etc/iproute2 -maxdepth 1 -type f) $(DESTDIR)$(CONF_USR_DIR)
index 1ef837c61581bed31c91fe3c53a451a574c3aeb4..65ac6a3828e60df4a528bd7aac5f3c08920b2b9a 100644 (file)
@@ -19,6 +19,7 @@
 #include <fcntl.h>
 #include <sys/uio.h>
 #include <sys/socket.h>
+#include <sys/stat.h>
 #include <sys/time.h>
 #include <time.h>
 #include <signal.h>
@@ -35,7 +36,8 @@
 #include "rt_names.h"
 
 DB     *dbase;
-char   *dbname = "/var/lib/arpd/arpd.db";
+char const     default_dbname[] = ARPDDIR "/arpd.db";
+char const     *dbname = default_dbname;
 
 int    ifnum;
 int    *ifvec;
@@ -668,6 +670,13 @@ int main(int argc, char **argv)
                }
        }
 
+       if (strcmp(default_dbname, dbname) == 0) {
+               if (mkdir(ARPDDIR, 0755) != 0 && errno != EEXIST) {
+                       perror("create_db_dir");
+                       exit(-1);
+               }
+       }
+
        dbase = dbopen(dbname, O_CREAT|O_RDWR, 0644, DB_HASH, NULL);
        if (dbase == NULL) {
                perror("db_open");