Package: sysvinit
Version: 2.88dsf-13.11
Severity: wishlist
Tags: patch
User: [email protected]
Usertags: kfreebsd

Please consider moving /dev/initctl to /run/initctl.  Using /dev to store named
pipes is not portable and as a result a workaround to use /etc/.initctl on
GNU/kFreeBSD was introduced in 2004 (see #226939).

However, this option is far from ideal.  It creates a disparity that might
confuse users.  Using /etc for a FIFO is clearly not compliant with FHS.  It
does also seem to confuse some programs (see e.g. #637151).

Now that /run is available, I think it'd simplify things if this FIFO node was
moved to that directory.

-- System Information:
Debian Release: 6.0.2
  APT prefers stable-updates
  APT policy: (500, 'stable-updates'), (500, 'stable')
Architecture: kfreebsd-amd64 (x86_64)

Kernel: kFreeBSD 8.1-1-amd64
Locale: LANG=ca_AD.utf8, LC_CTYPE=ca_AD.utf8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
=== modified file 'debian/postinst'
--- debian/postinst     2011-08-16 15:06:26 +0000
+++ debian/postinst     2011-08-16 15:07:14 +0000
@@ -16,18 +16,10 @@ esac
 
 umask 022
 
-case "$(uname -s)" in
-  *FreeBSD)
-       INITCTL=/etc/.initctl
-       ;;
-  *)
-       INITCTL=/dev/initctl
-       ;;
-esac
-
 #
-# Check /dev/initctl
+# Check /run/initctl
 #
+INITCTL=/run/initctl
 if [ "$INITCTL" ] && [ ! -p "$INITCTL" ]
 then
        echo "sysvinit: creating $INITCTL"

=== modified file 'debian/src/initscripts/etc/init.d/mountall.sh'
--- debian/src/initscripts/etc/init.d/mountall.sh       2011-08-16 15:06:26 
+0000
+++ debian/src/initscripts/etc/init.d/mountall.sh       2011-08-16 15:11:46 
+0000
@@ -43,26 +43,6 @@ do_start() {
        fi
        post_mountall
 
-       case "$(uname -s)" in
-         *FreeBSD)
-               INITCTL=/etc/.initctl
-               ;;
-         *)
-               INITCTL=/dev/initctl
-               ;;
-       esac
-
-       #
-       # We might have mounted something over /dev, see if
-       # /dev/initctl is there.  Look for /usr/share/sysvinit/update-rc.d
-       # to verify that sysvinit (and not upstart) is installed).
-       #
-       if [ ! -p $INITCTL ] && [ -f /usr/share/sysvinit/update-rc.d ]; then
-               rm -f $INITCTL
-               mknod -m 600 $INITCTL p
-               kill -USR1 1
-       fi
-
        # Execute swapon command again, in case we want to swap to
        # a file on a now mounted filesystem.
        swaponagain 'swapfile'

=== modified file 'doc/Install'
--- doc/Install 2011-08-16 15:06:26 +0000
+++ doc/Install 2011-08-16 15:08:58 +0000
@@ -48,7 +48,7 @@ You might want to create a file called "
 manual page on shutdown to find out more about this.
 
 Running from a read-only file system (CDROM?):
-o All communication to init goes through the FIFO /dev/initctl.
+o All communication to init goes through the FIFO /run/initctl.
   There should be no problem using a read-only root file system
   IF you use a Linux kernel > 1.3.66. Older kernels don't allow
   writing to a FIFO on a read-only file system.

=== modified file 'man/init.8'
--- man/init.8  2011-08-16 15:06:26 +0000
+++ man/init.8  2011-08-16 15:09:32 +0000
@@ -130,7 +130,7 @@ letters \fBF\fP, \fBO\fP or \fBL\fP, ini
 the letter \fBF\fP.
 .PP
 Usage of \fBSIGPWR\fP and \fB/etc/powerstatus\fP is discouraged. Someone
-wanting to interact with \fBinit\fP should use the \fB/dev/initctl\fP
+wanting to interact with \fBinit\fP should use the \fB/run/initctl\fP
 control channel - see the source code of the \fBsysvinit\fP package
 for more documentation about this.
 .PP
@@ -234,7 +234,7 @@ can then manipulate the command line so
 the current runlevel.
 .PP
 .SH INTERFACE
-Init listens on a \fIfifo\fP in /dev, \fI/dev/initctl\fP, for messages.
+Init listens on a \fIfifo\fP in /dev, \fI/run/initctl\fP, for messages.
 \fBTelinit\fP uses this to communicate with init. The interface is not
 very well documented or finished. Those interested should study the
 \fIinitreq.h\fP file in the \fIsrc/\fP subdirectory of the \fBinit\fP
@@ -248,7 +248,7 @@ Has the same effect as \fBtelinit q\fP.
 .TP 0.5i
 .B SIGUSR1
 On receipt of this signals, init closes and re-opens its control fifo,
-\fB/dev/initctl\fP. Useful for bootscripts when /dev is remounted.
+\fB/run/initctl\fP. Useful for bootscripts when /dev is remounted.
 .TP 0.5i
 .B SIGINT
 Normally the kernel sends this signal to init when CTRL-ALT-DEL is
@@ -273,7 +273,7 @@ file in the directory \fI/etc/init.d\fP
 /dev/console
 /var/run/utmp
 /var/log/wtmp
-/dev/initctl
+/run/initctl
 .fi
 .\"}}}
 .\"{{{  Warnings

=== modified file 'src/Makefile'
--- src/Makefile        2011-08-16 15:06:26 +0000
+++ src/Makefile        2011-08-16 15:09:54 +0000
@@ -176,8 +176,8 @@ ifeq ($(ROOT),)
                #
                # This part is skipped on Debian systems, the
                # debian.preinst script takes care of it.
-               @if [ ! -p /dev/initctl ]; then \
-                echo "Creating /dev/initctl"; \
-                rm -f /dev/initctl; \
-                mknod -m 600 /dev/initctl p; fi
+               @if [ ! -p /run/initctl ]; then \
+                echo "Creating /run/initctl"; \
+                rm -f /run/initctl; \
+                mknod -m 600 /run/initctl p; fi
 endif

=== modified file 'src/init.c'
--- src/init.c  2011-08-16 15:06:26 +0000
+++ src/init.c  2011-08-16 15:11:00 +0000
@@ -133,7 +133,7 @@ char *argv0;                        /* First arguments; show
 int maxproclen;                        /* Maximal length of argv[0] with \0 */
 struct utmp utproto;           /* Only used for sizeof(utproto.ut_id) */
 char *console_dev;             /* Console device. */
-int pipe_fd = -1;              /* /dev/initctl */
+int pipe_fd = -1;              /* /run/initctl */
 int did_boot = 0;              /* Did we already do BOOT* stuff? */
 int main(int, char **);
 
@@ -2175,13 +2175,13 @@ void check_init_fifo(void)
   int                  quit = 0;
 
   /*
-   *   First, try to create /dev/initctl if not present.
+   *   First, try to create /run/initctl if not present.
    */
   if (stat(INIT_FIFO, &st2) < 0 && errno == ENOENT)
        (void)mkfifo(INIT_FIFO, 0600);
 
   /*
-   *   If /dev/initctl is open, stat the file to see if it
+   *   If /run/initctl is open, stat the file to see if it
    *   is still the _same_ inode.
    */
   if (pipe_fd >= 0) {
@@ -2195,7 +2195,7 @@ void check_init_fifo(void)
   }
 
   /*
-   *   Now finally try to open /dev/initctl
+   *   Now finally try to open /run/initctl
    */
   if (pipe_fd < 0) {
        if ((pipe_fd = open(INIT_FIFO, O_RDWR|O_NONBLOCK)) >= 0) {
@@ -2501,7 +2501,7 @@ void process_signals()
   }
   if (ISMEMBER(got_signals, SIGUSR1)) {
        /*
-        *      SIGUSR1 means close and reopen /dev/initctl
+        *      SIGUSR1 means close and reopen /run/initctl
         */
        INITDBG(L_VB, "got SIGUSR1");
        close(pipe_fd);
@@ -2737,7 +2737,7 @@ int telinit(char *progname, int argc, ch
        chdir("/");
 
        /* Open the fifo and write a command. */
-       /* Make sure we don't hang on opening /dev/initctl */
+       /* Make sure we don't hang on opening /run/initctl */
        SETSIG(sa, SIGALRM, signal_handler, 0);
        alarm(3);
        if ((fd = open(INIT_FIFO, O_WRONLY)) >= 0) {

=== modified file 'src/initreq.h'
--- src/initreq.h       2011-08-16 15:06:26 +0000
+++ src/initreq.h       2011-08-16 15:10:15 +0000
@@ -1,5 +1,5 @@
 /*
- * initreq.h   Interface to talk to init through /dev/initctl.
+ * initreq.h   Interface to talk to init through /run/initctl.
  *
  *             Copyright (C) 1995-2004 Miquel van Smoorenburg
  *
@@ -25,11 +25,7 @@
 
 #include <sys/param.h>
 
-#if defined(__FreeBSD_kernel__)
-#  define INIT_FIFO  "/etc/.initctl"
-#else
-#  define INIT_FIFO  "/dev/initctl"
-#endif
+#define INIT_FIFO  "/run/initctl"
 
 #define INIT_MAGIC 0x03091969
 #define INIT_CMD_START         0

=== modified file 'src/shutdown.c'
--- src/shutdown.c      2011-08-16 15:06:26 +0000
+++ src/shutdown.c      2011-08-16 15:10:34 +0000
@@ -173,7 +173,7 @@ int init_setenv(char *name, char *value)
 
         /*
         *      Open the fifo and write the command.
-         *     Make sure we don't hang on opening /dev/initctl
+         *     Make sure we don't hang on opening /run/initctl
         */
        memset(&sa, 0, sizeof(sa));
        sa.sa_handler = alrm_handler;

Reply via email to