mirror of
https://github.com/troglobit/finit.git
synced 2026-11-06 15:51:03 +00:00
Drop parsing of /proc/cmdline by default, instead use argc + argv[]
For most use-cases the kernel will give Finit its arguments as proper command line args in argc + argv[], like any other program. However, for some users, most notably Alpine Linux, there is a slightly broken initramfs that cannot forward more than one argument using init_args, for such systems you can re-enable the old behavior with a configure switch --enable-kernel-cmdline -- it's not ideal but what can you do. The main reason for removing this feature by default is to support use-cases where Finit runs as the init for container apps that can read /proc -- we do not want them to use the init args from the host. Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
This commit is contained in:
1 parent
55e9cb2f58
commit
cc6ffa35fc
4 files changed
+43
-11
No files matched your search
@@ -52,6 +52,10 @@ AC_ARG_ENABLE(auto_reload,
|
|||||||
AS_HELP_STRING([--enable-auto-reload], [Automatic reload on any .conf change]),,[
|
AS_HELP_STRING([--enable-auto-reload], [Automatic reload on any .conf change]),,[
|
||||||
enable_auto_reload=no])
|
enable_auto_reload=no])
|
||||||
|
|
||||||
|
AC_ARG_ENABLE(kernel_cmdline,
|
||||||
|
AS_HELP_STRING([--enable-kernel-cmdline], [Parse init args from /proc/cmdline (don't use!)]),,[
|
||||||
|
enable_kernel_cmdline=no])
|
||||||
|
|
||||||
AC_ARG_ENABLE(redirect,
|
AC_ARG_ENABLE(redirect,
|
||||||
AS_HELP_STRING([--disable-redirect], [Disable redirection of service output to /dev/null]),,[
|
AS_HELP_STRING([--disable-redirect], [Disable redirection of service output to /dev/null]),,[
|
||||||
enable_redirect=yes])
|
enable_redirect=yes])
|
||||||
@@ -124,6 +128,9 @@ AC_ARG_WITH(watchdog,
|
|||||||
AS_IF([test "x$enable_auto_reload" = "xyes"], [
|
AS_IF([test "x$enable_auto_reload" = "xyes"], [
|
||||||
AC_DEFINE(AUTO_RELOAD, 1, [Finit automatically does `initctl reload` on any .conf change])])
|
AC_DEFINE(AUTO_RELOAD, 1, [Finit automatically does `initctl reload` on any .conf change])])
|
||||||
|
|
||||||
|
AS_IF([test "x$enable_kernel_cmdline" = "xyes"], [
|
||||||
|
AC_DEFINE(KERNEL_CMDLINE, 1, [Dumpster diving after init args from /proc/cmdline])])
|
||||||
|
|
||||||
AS_IF([test "x$enable_redirect" = "xyes"], [
|
AS_IF([test "x$enable_redirect" = "xyes"], [
|
||||||
AC_DEFINE(REDIRECT_OUTPUT, 1, [Enable redirection of service output to /dev/null])])
|
AC_DEFINE(REDIRECT_OUTPUT, 1, [Enable redirection of service output to /dev/null])])
|
||||||
|
|
||||||
|
|||||||
@@ -53,6 +53,10 @@ Below are a few of the main switches to configure:
|
|||||||
built-ins (.o files) and all external libraries, except the C library
|
built-ins (.o files) and all external libraries, except the C library
|
||||||
will be linked statically.
|
will be linked statically.
|
||||||
|
|
||||||
|
* `--enable-kernel-cmdline`: Enable Finit pre-4.1 parsing of init args from
|
||||||
|
`/proc/cmdline`, this is not recommended since Finit may be running as the
|
||||||
|
init for container apps that can see the host's `/proc` filesystem
|
||||||
|
|
||||||
* `--enable-alsa-utils-plugin`: Enable the optional `alsa-utils.so` sound plugin.
|
* `--enable-alsa-utils-plugin`: Enable the optional `alsa-utils.so` sound plugin.
|
||||||
|
|
||||||
* `--enable-dbus-plugin`: Enable the optional D-Bus `dbus.so` plugin.
|
* `--enable-dbus-plugin`: Enable the optional D-Bus `dbus.so` plugin.
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ passed on the Linux kernel command line. Not limited to Finit.
|
|||||||
|
|
||||||
The `bool` setting is one of `on, off, true false, 1, 0`.
|
The `bool` setting is one of `on, off, true false, 1, 0`.
|
||||||
|
|
||||||
|
> **NOTE:** remember to use `--` to separate kernel parameters from
|
||||||
|
> parameters to init. E.g., `init=/sbin/finit -- finit.debug rescue`
|
||||||
|
|
||||||
* `debug`: Enable kernel debug. Debug messages are printed to the
|
* `debug`: Enable kernel debug. Debug messages are printed to the
|
||||||
console until Finit starts up.
|
console until Finit starts up.
|
||||||
|
|||||||
+30
-11
@@ -145,24 +145,27 @@ static void parse_arg(char *arg)
|
|||||||
single = 1;
|
single = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void conf_parse_cmdline(int argc, char *argv[])
|
#ifdef KERNEL_CMDLINE
|
||||||
|
/*
|
||||||
|
* Parse /proc/cmdline to find args for init. Don't use this!
|
||||||
|
*
|
||||||
|
* Instead, rely on the kernel to give Finit its arguments as
|
||||||
|
* regular argc + argv[]. Only use this if the system you run
|
||||||
|
* on has a broken initramfs system that cannot forward args
|
||||||
|
* to Finit properly.
|
||||||
|
*/
|
||||||
|
static void parse_kernel_cmdline(void)
|
||||||
{
|
{
|
||||||
int dbg = 0;
|
|
||||||
FILE *fp;
|
|
||||||
char line[LINE_SIZE], *cmdline, *tok;
|
char line[LINE_SIZE], *cmdline, *tok;
|
||||||
|
FILE *fp;
|
||||||
for (int i = 1; i < argc; i++)
|
|
||||||
parse_arg(argv[i]);
|
|
||||||
|
|
||||||
hide_args(argc, argv);
|
|
||||||
|
|
||||||
fp = fopen("/proc/cmdline", "r");
|
fp = fopen("/proc/cmdline", "r");
|
||||||
if (!fp)
|
if (!fp)
|
||||||
goto done;
|
return;
|
||||||
|
|
||||||
if (!fgets(line, sizeof(line), fp)) {
|
if (!fgets(line, sizeof(line), fp)) {
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
goto done;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
cmdline = chomp(line);
|
cmdline = chomp(line);
|
||||||
@@ -173,8 +176,24 @@ void conf_parse_cmdline(int argc, char *argv[])
|
|||||||
parse_arg(tok);
|
parse_arg(tok);
|
||||||
}
|
}
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#define parse_kernel_cmdline()
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Kernel gives us all non-kernel options on our cmdline
|
||||||
|
*/
|
||||||
|
void conf_parse_cmdline(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
int dbg = 0;
|
||||||
|
|
||||||
|
for (int i = 1; i < argc; i++)
|
||||||
|
parse_arg(argv[i]);
|
||||||
|
|
||||||
|
hide_args(argc, argv);
|
||||||
|
parse_kernel_cmdline();
|
||||||
|
|
||||||
done:
|
|
||||||
log_init(dbg);
|
log_init(dbg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user