--- ./src/shutdown.c.orig 2019-06-15 12:02:34.000000000 -0500 +++ ./src/shutdown.c 2019-06-16 22:04:35.734002893 -0500 @@ -192,7 +192,7 @@ /* * Open the fifo and write the command. - * Make sure we don't hang on opening /run/initctl + * Make sure we don't hang on opening /dev/initctl */ memset(&sa, 0, sizeof(sa)); sa.sa_handler = alrm_handler; --- ./src/Makefile.orig 2019-06-15 12:02:34.000000000 -0500 +++ ./src/Makefile 2019-06-16 22:04:35.736002893 -0500 @@ -231,8 +231,8 @@ # # This part is skipped on Debian systems, the # debian.preinst script takes care of it. - @if [ ! -p /run/initctl ]; then \ - echo "Creating /run/initctl"; \ - rm -f /run/initctl; \ - mknod -m 600 /run/initctl p; fi + @if [ ! -p /dev/initctl ]; then \ + echo "Creating /dev/initctl"; \ + rm -f /dev/initctl; \ + mknod -m 600 /dev/initctl p; fi endif --- ./src/initreq.h.orig 2019-06-15 12:02:34.000000000 -0500 +++ ./src/initreq.h 2019-06-16 22:04:35.737002893 -0500 @@ -1,5 +1,5 @@ /* - * initreq.h Interface to talk to init through /run/initctl. + * initreq.h Interface to talk to init through /dev/initctl. * * Copyright (C) 1995-2004 Miquel van Smoorenburg * @@ -26,7 +26,7 @@ #include #ifndef INIT_FIFO -#define INIT_FIFO "/run/initctl" +#define INIT_FIFO "/dev/initctl" #endif #define INIT_MAGIC 0x03091969 --- ./src/init.c.orig 2019-06-15 12:02:35.000000000 -0500 +++ ./src/init.c 2019-06-16 22:04:35.742002893 -0500 @@ -146,7 +146,7 @@ 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; /* /run/initctl */ +int pipe_fd = -1; /* /dev/initctl */ int did_boot = 0; /* Did we already do BOOT* stuff? */ int main(int, char **); @@ -2386,13 +2386,13 @@ int quit = 0; /* - * First, try to create /run/initctl if not present. + * First, try to create /dev/initctl if not present. */ if (stat(INIT_FIFO, &st2) < 0 && errno == ENOENT) (void)mkfifo(INIT_FIFO, 0600); /* - * If /run/initctl is open, stat the file to see if it + * If /dev/initctl is open, stat the file to see if it * is still the _same_ inode. */ if (pipe_fd >= 0) { @@ -2406,7 +2406,7 @@ } /* - * Now finally try to open /run/initctl if pipe_fd is -1 + * Now finally try to open /dev/initctl if pipe_fd is -1 * if it is -2, then we leave it closed */ if (pipe_fd == -1) { @@ -2715,7 +2715,7 @@ } if (ISMEMBER(got_signals, SIGUSR1)) { /* - * SIGUSR1 means close and reopen /run/initctl + * SIGUSR1 means close and reopen /dev/initctl */ INITDBG(L_VB, "got SIGUSR1"); if (pipe_fd) @@ -2963,7 +2963,7 @@ strerror(errno)); /* Open the fifo and write a command. */ - /* Make sure we don't hang on opening /run/initctl */ + /* Make sure we don't hang on opening /dev/initctl */ SETSIG(sa, SIGALRM, signal_handler, 0); alarm(3); if ((fd = open(INIT_FIFO, O_WRONLY)) >= 0) { --- ./doc/initctl.orig 2019-06-15 12:02:34.000000000 -0500 +++ ./doc/initctl 2019-06-16 22:04:35.743002893 -0500 @@ -1,5 +1,5 @@ This document describes the communiction pipe set up by SysV init -at /run/initctl. This named pipe allows programs with the proper +at /dev/initctl. This named pipe allows programs with the proper permissions (typically programs run by root have read+write access to the pipe) to send signals to the init program (PID 1). @@ -58,13 +58,13 @@ might need to process our request. For example, when setting environment variables. -When setting an environment variable through init's /run/initctl pipe, +When setting an environment variable through init's /dev/initctl pipe, the data variable should have the format VARIABLE=VALUE. The string should be terminated with a NULL '\0' character. The following C code example shows how to send a set environment variable -request to the init process using the /run/initctl pipe. This example +request to the init process using the /dev/initctl pipe. This example is simplified and skips the error checking. A more comlpete example can be found in the shutdown.c program's init_setnv() function. @@ -86,7 +86,7 @@ -Usually the /run/initctl pipe would only be used by low-level programs to +Usually the /dev/initctl pipe would only be used by low-level programs to request a power-related shutdown or change the runlevel, like telinit would do. Most of the time there is no need to talk to init directly, but this gives us an extenable approach so init can be taught how to learn --- ./doc/Install.orig 2019-06-15 12:02:34.000000000 -0500 +++ ./doc/Install 2019-06-16 22:04:35.743002893 -0500 @@ -66,7 +66,7 @@ manual page on shutdown to find out more about this. Running from a read-only file system (CDROM?): -* All communication to init goes through the FIFO /run/initctl. +* All communication to init goes through the FIFO /dev/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. --- ./man/init.8.orig 2019-06-15 12:02:34.000000000 -0500 +++ ./man/init.8 2019-06-16 22:04:35.744002893 -0500 @@ -147,7 +147,7 @@ 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/run/initctl\fP +wanting to interact with \fBinit\fP should use the \fB/dev/initctl\fP control channel - see the initctl manual page for more documentation about this. .PP @@ -258,7 +258,7 @@ immediately exits with a return code of zero. .PP .SH INTERFACE -Init listens on a \fIfifo\fP in /dev, \fI/run/initctl\fP, for messages. +Init listens on a \fIfifo\fP in /dev, \fI/dev/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 @@ -272,11 +272,11 @@ .TP 0.5i .B SIGUSR1 On receipt of this signals, init closes and re-opens its control fifo, -\fB/run/initctl\fP. Useful for bootscripts when /dev is remounted. +\fB/dev/initctl\fP. Useful for bootscripts when /dev is remounted. .TP 0.5i .B SIGUSR2 When init receives SIGUSR2, init closes and leaves the control fifo, -\fB/run/initctl\fP, closed. This may be used to make sure init is not +\fB/dev/initctl\fP, closed. This may be used to make sure init is not holding open any files. However, it also prevents init from switching runlevels. Which means commands like shutdown no longer work. The fifo can be re-opened by sending init the SIGUSR1 signal. @@ -304,7 +304,7 @@ /dev/console /var/run/utmp /var/log/wtmp -/run/initctl +/dev/initctl .fi .\"}}} .\"{{{ Warnings --- ./man/initctl.5.orig 2019-06-15 12:02:34.000000000 -0500 +++ ./man/initctl.5 2019-06-16 22:05:29.658002895 -0500 @@ -16,13 +16,13 @@ .\" .TH INITCTL 5 "April 13, 2018" "" "Linux System Administrator's Manual" .SH NAME -initctl \- /run/initctl is a named pipe which passes commands to SysV init. +initctl \- /dev/initctl is a named pipe which passes commands to SysV init. .SH SYNOPSIS -/run/initctl +/dev/initctl .SH DESCRIPTION This document describes the communiction pipe set up by SysV init -at /run/initctl. This named pipe allows programs with the proper +at /dev/initctl. This named pipe allows programs with the proper permissions (typically programs run by root have read+write access to the pipe) to send signals to the init program (PID 1). @@ -86,14 +86,14 @@ might need to process our request. For example, when setting environment variables. -When setting an environment variable through init's /run/initctl pipe, +When setting an environment variable through init's /dev/initctl pipe, the data variable should have the format VARIABLE=VALUE. The string should be terminated with a NULL character. .SH EXAMPLES The following C code example shows how to send a set environment variable -request to the init process using the /run/initctl pipe. This example +request to the init process using the /dev/initctl pipe. This example is simplified and skips the error checking. A more comlpete example can be found in the shutdown.c program's init_setnv() function. @@ -117,18 +117,18 @@ .sp .SH NOTES -Usually the /run/initctl pipe would only be used by low-level programs to +Usually the /dev/initctl pipe would only be used by low-level programs to request a power-related shutdown or change the runlevel, like telinit would do. Most of the time there is no need to talk to init directly, but this gives us an extenable approach so init can be taught how to learn more commands. .PP -The commands passed through the /run/initctl pipe must be sent in a specific +The commands passed through the /dev/initctl pipe must be sent in a specific binary format and be of a specific length. Larger data structures or ones not using the proper format will be ignored. Typically, only root has the ability to write to the initctl pipe for security reasons. .PP -The /run/initctl pipe can be closed by sending init (PID 1) the SIGUSR2 +The /dev/initctl pipe can be closed by sending init (PID 1) the SIGUSR2 signal. This closes the pipe and leaves it closed. This may be useful for making sure init is not keeping any files open. However, when the pipe is closed, init no longer receives signals, such as those sent by @@ -136,11 +136,11 @@ change its runlevel directly. The pipe may be re-opened by sending init (PID 1) the SIGUSR1 signal. .PP -If the /run/initctl pipe is closed then it may still be possible to bring +If the /dev/initctl pipe is closed then it may still be possible to bring down the system using the shutdown command's -n flag, but this is not always clean and not recommended. .SH FILES -/run/initctl +/dev/initctl /sbin/init .SH AUTHOR Jesse Smith