mirror of
https://github.com/troglobit/finit.git
synced 2026-10-21 11:29:42 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d38c333e04 | ||
|
|
095f6b645c | ||
|
|
b4d10cbade | ||
|
|
5d703fd39e | ||
|
|
eaaf8d862e | ||
|
|
2468f11cd8 | ||
|
|
f8a6a119ac | ||
|
|
1889b88aab | ||
|
|
0d70023bfe | ||
|
|
41648a073b | ||
|
|
33cee0ba5f | ||
|
|
2235fb8352 | ||
|
|
eb9e94935e | ||
|
|
fb230f2137 | ||
|
|
6aa48a8b32 |
No files matched your search
@@ -23,11 +23,16 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
ver=${GITHUB_REF#refs/tags/}
|
ver=${GITHUB_REF#refs/tags/}
|
||||||
echo "ver=${ver}" >> $GITHUB_OUTPUT
|
echo "ver=${ver}" >> $GITHUB_OUTPUT
|
||||||
if echo $ver | grep -qE '[0-9.]+(-alpha|-beta|-rc)[0-9]*'; then
|
if echo $ver | grep -qE '^[0-9]+\.[0-9]+(\.[0-9]+)?(-alpha|-beta|-rc)[0-9]*$'; then
|
||||||
echo "pre=true" >> $GITHUB_OUTPUT
|
echo "pre=true" >> $GITHUB_OUTPUT
|
||||||
else
|
else
|
||||||
echo "pre=false" >> $GITHUB_OUTPUT
|
echo "pre=false" >> $GITHUB_OUTPUT
|
||||||
fi
|
fi
|
||||||
|
if echo $ver | grep -qE '^[0-9.]+\.[0-9.]+(\.[0-9]+)?$'; then
|
||||||
|
echo "latest=true" >> $GITHUB_OUTPUT
|
||||||
|
else
|
||||||
|
echo "latest=false" >> $GITHUB_OUTPUT
|
||||||
|
fi
|
||||||
- name: Creating Makefiles ...
|
- name: Creating Makefiles ...
|
||||||
run: |
|
run: |
|
||||||
./autogen.sh
|
./autogen.sh
|
||||||
@@ -48,6 +53,7 @@ jobs:
|
|||||||
- uses: ncipollo/release-action@v1
|
- uses: ncipollo/release-action@v1
|
||||||
with:
|
with:
|
||||||
name: Finit v${{ github.ref_name }}
|
name: Finit v${{ github.ref_name }}
|
||||||
prerelease: ${{ needs.build.outputs.pre }}
|
prerelease: ${{ steps.build.outputs.pre }}
|
||||||
|
makeLatest: ${{ steps.build.outputs.latest }}
|
||||||
bodyFile: "release.md"
|
bodyFile: "release.md"
|
||||||
artifacts: "artifacts/*"
|
artifacts: "artifacts/*"
|
||||||
+16
-1
@@ -4,7 +4,7 @@ Change Log
|
|||||||
All relevant changes are documented in this file.
|
All relevant changes are documented in this file.
|
||||||
|
|
||||||
|
|
||||||
[4.5][] - 2023-10-03
|
[4.5][] - 2023-10-04
|
||||||
--------------------
|
--------------------
|
||||||
|
|
||||||
### Changes
|
### Changes
|
||||||
@@ -37,6 +37,12 @@ All relevant changes are documented in this file.
|
|||||||
a task only `if:<run/foo/failure>` (here the run task 'foo' failed)
|
a task only `if:<run/foo/failure>` (here the run task 'foo' failed)
|
||||||
- Document new `if:`, `conflict:`, `nowarn` options for run/task/service
|
- Document new `if:`, `conflict:`, `nowarn` options for run/task/service
|
||||||
first introduced in v4.4
|
first introduced in v4.4
|
||||||
|
- Failure to open fstab should log to console, not just log to `/dev/kmsg`
|
||||||
|
- Rename `/lib/finit/system/*.conf`, added numbered prefix to ensure
|
||||||
|
proper execution order, e.g., `udevd` should always run first
|
||||||
|
- Plugins and bundled services: dbus, keventd, watchdogd, and runparts,
|
||||||
|
are now loaded *after* all services in `/lib/finit/system/`. A new
|
||||||
|
runtime-only path (for inspection) in `/run/finit/system/` is used
|
||||||
|
|
||||||
### Fixes
|
### Fixes
|
||||||
- Fix #227: believed to have been fixed in v4.3, the root cause was
|
- Fix #227: believed to have been fixed in v4.3, the root cause was
|
||||||
@@ -52,6 +58,15 @@ All relevant changes are documented in this file.
|
|||||||
- Fix #366: document `fsck.*` kernel command line options and simplify
|
- Fix #366: document `fsck.*` kernel command line options and simplify
|
||||||
the configure flags `--enable-fsckfix` and `--enable-fastboot` to
|
the configure flags `--enable-fsckfix` and `--enable-fastboot` to
|
||||||
only adjust the default values for the `fsck.*` options.
|
only adjust the default values for the `fsck.*` options.
|
||||||
|
- Fix #371: swap load order of `/lib/finit/system/*` vs `/etc/finit.d/*`
|
||||||
|
We must run `10-hotplug.conf` first to ensure devices and modules are
|
||||||
|
up and loaded before the user's run/task/services are called. The order
|
||||||
|
at bootstrap is now saved in `/run/finit/conf.order` for inspection,
|
||||||
|
`/run/finit/exec.order` shows the start order of each process
|
||||||
|
- Fix #372: lost `udevadm` calls due to overloading
|
||||||
|
- Fixed dbus plugin, the function that located `<pidfile> ...` in the
|
||||||
|
`dbus/system.conf` caused spurious line breaks which led to the
|
||||||
|
service not being loaded properly
|
||||||
- The `runparts` executor now skips backup files (`foo~`)
|
- The `runparts` executor now skips backup files (`foo~`)
|
||||||
- The `runparts` stanza now properly appends ` start` to scripts that
|
- The `runparts` stanza now properly appends ` start` to scripts that
|
||||||
start with `S[0-9]+`. This has been broken for a very long time.
|
start with `S[0-9]+`. This has been broken for a very long time.
|
||||||
|
|||||||
+4
-3
@@ -1,4 +1,4 @@
|
|||||||
AC_INIT([Finit], [4.5-rc4], [https://github.com/troglobit/finit/issues],
|
AC_INIT([Finit], [4.5-rc5], [https://github.com/troglobit/finit/issues],
|
||||||
[finit], [https://troglobit.com/projects/finit/])
|
[finit], [https://troglobit.com/projects/finit/])
|
||||||
AC_CONFIG_AUX_DIR(aux)
|
AC_CONFIG_AUX_DIR(aux)
|
||||||
AM_INIT_AUTOMAKE([1.11 foreign dist-xz subdir-objects])
|
AM_INIT_AUTOMAKE([1.11 foreign dist-xz subdir-objects])
|
||||||
@@ -298,6 +298,7 @@ pkglibdir=$libdir/finit
|
|||||||
AC_SUBST(pkglibexecdir)
|
AC_SUBST(pkglibexecdir)
|
||||||
AC_EXPAND_DIR(pkglibexecdir, "$libexecdir/finit")
|
AC_EXPAND_DIR(pkglibexecdir, "$libexecdir/finit")
|
||||||
AC_DEFINE_UNQUOTED(FINIT_EXECPATH_, "$pkglibexecdir", [Finit libexec path])
|
AC_DEFINE_UNQUOTED(FINIT_EXECPATH_, "$pkglibexecdir", [Finit libexec path])
|
||||||
|
AC_DEFINE_UNQUOTED(FINIT_RUNPATH_, "/run/finit/system", [Finit runtime dynamic system services])
|
||||||
|
|
||||||
AC_EXPAND_DIR(plugin_path, "$pkglibdir/plugins")
|
AC_EXPAND_DIR(plugin_path, "$pkglibdir/plugins")
|
||||||
AC_SUBST(plugin_path)
|
AC_SUBST(plugin_path)
|
||||||
@@ -305,7 +306,7 @@ AC_DEFINE_UNQUOTED(PLUGIN_PATH, "$plugin_path", [Finit plugin path])
|
|||||||
|
|
||||||
AC_EXPAND_DIR(tmpfiles_path, "$libdir/tmpfiles.d")
|
AC_EXPAND_DIR(tmpfiles_path, "$libdir/tmpfiles.d")
|
||||||
AC_SUBST(tmpfiles_path)
|
AC_SUBST(tmpfiles_path)
|
||||||
AC_DEFINE_UNQUOTED(TMPFILES_PATH, "$tmpfiles_path", [Main tmpfiles.d/, override in /etc])
|
AC_DEFINE_UNQUOTED(TMPFILES_PATH_, "$tmpfiles_path", [Main tmpfiles.d/, override in /etc])
|
||||||
|
|
||||||
AC_EXPAND_DIR(finit_tmpfiles, "$pkglibdir/tmpfiles.d")
|
AC_EXPAND_DIR(finit_tmpfiles, "$pkglibdir/tmpfiles.d")
|
||||||
AC_SUBST(finit_tmpfiles)
|
AC_SUBST(finit_tmpfiles)
|
||||||
@@ -313,7 +314,7 @@ AC_DEFINE_UNQUOTED(FINIT_TMPFILES, "$finit_tmpfiles", [Finit tmpfiles.d/ .conf p
|
|||||||
|
|
||||||
AC_EXPAND_DIR(system_path, "$pkglibdir/system")
|
AC_EXPAND_DIR(system_path, "$pkglibdir/system")
|
||||||
AC_SUBST(system_path)
|
AC_SUBST(system_path)
|
||||||
AC_DEFINE_UNQUOTED(FINIT_SYSPATH, "$system_path", [Static services, previously generated at runtime by plugins])
|
AC_DEFINE_UNQUOTED(FINIT_SYSPATH_, "$system_path", [Static services, previously generated at runtime by plugins])
|
||||||
|
|
||||||
AC_EXPAND_DIR(rescue_conf, "$pkglibdir/rescue.conf")
|
AC_EXPAND_DIR(rescue_conf, "$pkglibdir/rescue.conf")
|
||||||
AC_DEFINE_UNQUOTED(RESCUE_CONF, "$rescue_conf", [Finit rescue mode .conf])
|
AC_DEFINE_UNQUOTED(RESCUE_CONF, "$rescue_conf", [Finit rescue mode .conf])
|
||||||
|
|||||||
+66
-18
@@ -52,21 +52,51 @@ PID file monitoring, or [conditions](conditions.md).
|
|||||||
|
|
||||||
### Configuration Files
|
### Configuration Files
|
||||||
|
|
||||||
Originally Finit was configured using a single file, `/etc/finit.conf`.
|
Originally Finit was configured using a single file, `/etc/finit.conf`,
|
||||||
Although still possible to use this single configuration file, today the
|
and although still possible to use a single configuration file, today
|
||||||
following familiar layout is recommended:
|
the following layout is recommended:
|
||||||
|
|
||||||
/etc/
|
/
|
||||||
|- finit.d/
|
|- etc/
|
||||||
| |- available/
|
| |- finit.d/
|
||||||
| | `- my-service.conf
|
| | |- available/
|
||||||
: |- enabled/
|
| | | `- my-service.conf
|
||||||
: | `- my-service.conf -> ../available/my-service.conf
|
| : |- enabled/
|
||||||
: :
|
| : | `- my-service.conf -> ../available/my-service.conf
|
||||||
: |- static-service.conf
|
| : :
|
||||||
: `- another-static.conf
|
| : |- static-service.conf
|
||||||
:
|
| : `- another-static.conf
|
||||||
`- finit.conf
|
| :
|
||||||
|
| `- finit.conf
|
||||||
|
|- lib
|
||||||
|
| `- finit/
|
||||||
|
| `- system/
|
||||||
|
| |- 10-hotplug.conf
|
||||||
|
| `- ...
|
||||||
|
`- run/
|
||||||
|
`- finit/
|
||||||
|
`- system/
|
||||||
|
|- dbus.conf
|
||||||
|
|- keventd.conf
|
||||||
|
|- runparts.conf
|
||||||
|
|- watchdogd.conf
|
||||||
|
`- ...
|
||||||
|
|
||||||
|
Configuration files in `/etc` are provided by the user, or projects like
|
||||||
|
[finit-skel](https://github.com/troglobit/finit-skel) and extended by
|
||||||
|
the user.
|
||||||
|
|
||||||
|
The files in `/lib/finit/system/*.conf` are system critical services and
|
||||||
|
setup provided by Finit, e.g. udev/mdev that must run very early at system
|
||||||
|
bootstrap. This system directory was introduced in Finit v4.4 to replace
|
||||||
|
the hard-coded services provided by plugins before. All .conf files in this
|
||||||
|
directory be either replaced by a system administrator or overridden by a
|
||||||
|
file with the same name in `/etc/finit.d/`.
|
||||||
|
|
||||||
|
The files in `/run/finit/system/*.conf` are created by plugins and Finit
|
||||||
|
bundled services like runparts, the [watchdog](#watchdog), and `keventd`
|
||||||
|
if they are enabled. Like `/lib/finit/system/*.conf`, these files can
|
||||||
|
be overridden by file with the same name in `/etc/finit.d/`.
|
||||||
|
|
||||||
Services in the `available/` and `enabled/` sub-directories are called
|
Services in the `available/` and `enabled/` sub-directories are called
|
||||||
dynamic services, in contrast to static services -- the only difference
|
dynamic services, in contrast to static services -- the only difference
|
||||||
@@ -75,9 +105,27 @@ with the `enable` and `disable` commands. An administrator can always
|
|||||||
create files and symlinks manually.
|
create files and symlinks manually.
|
||||||
|
|
||||||
At bootstrap, and `initctl reload`, all .conf files are read, starting
|
At bootstrap, and `initctl reload`, all .conf files are read, starting
|
||||||
with `finit.conf`, then, in alphabetical order, all `finit.d/*.conf`
|
with `finit.conf`, then `/lib/finit/system/*.conf`, `finit.d/*.conf`,
|
||||||
files, and finally (still in alphabetical order) all `enabled/*.conf`
|
and finally all `finit.d/enabled/*.conf` files. Each directory is a
|
||||||
files.
|
unique group, where files within each group are sorted alphabetically.
|
||||||
|
|
||||||
|
**Example:**
|
||||||
|
|
||||||
|
/lib/finit/system/10-hotplug.conf
|
||||||
|
/lib/finit/system/90-testserv.conf
|
||||||
|
/run/finit/system/dbus.conf
|
||||||
|
/run/finit/system/runparts.conf
|
||||||
|
/etc/finit.d/10-abc.conf
|
||||||
|
/etc/finit.d/20-abc.conf
|
||||||
|
/etc/finit.d/enabled/1-aaa.conf
|
||||||
|
/etc/finit.d/enabled/1-abc.conf
|
||||||
|
|
||||||
|
The resulting combined configuration is read line by line, each `run`,
|
||||||
|
`task`, and `service` added to an ordered list that ensures they are
|
||||||
|
started in the same order. This is important because of the blocking
|
||||||
|
properties of the `run` statement. For an example on the relation of
|
||||||
|
`service` and `run` statements, and dependency handling between them,
|
||||||
|
see [Conditional Loading](#conditional-loading), below.
|
||||||
|
|
||||||
> **Note:** the `finit.conf` and `finit.d/` names are only defaults.
|
> **Note:** the `finit.conf` and `finit.d/` names are only defaults.
|
||||||
> They can be changed at compile-time with two `configure` options:
|
> They can be changed at compile-time with two `configure` options:
|
||||||
@@ -860,7 +908,7 @@ if that is not found Finit automatically logs a warning. The `nowarn`
|
|||||||
option disables this warning so that the second line can be evaluated,
|
option disables this warning so that the second line can be evaluated,
|
||||||
which also provides a service named `udevd`.
|
which also provides a service named `udevd`.
|
||||||
|
|
||||||
run nowarn if:udevd <pid/udevd> udevadm settle -t 0
|
run nowarn if:udevd <pid/udevd> :1 udevadm settle -t 0
|
||||||
|
|
||||||
This line is only loaded if we know of a service named `udevd`. Again,
|
This line is only loaded if we know of a service named `udevd`. Again,
|
||||||
we do not warn if `udevadm` is not found, Execution will also stop here
|
we do not warn if `udevadm` is not found, Execution will also stop here
|
||||||
|
|||||||
+2
-3
@@ -83,6 +83,7 @@ static char *dbus_pidfn(void)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
*pos = 0;
|
*pos = 0;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
@@ -156,9 +157,7 @@ static void setup(void *arg)
|
|||||||
snprintf(line, sizeof(line), "[S123456789] cgroup.system name:dbus %s %s -- %s",
|
snprintf(line, sizeof(line), "[S123456789] cgroup.system name:dbus %s %s -- %s",
|
||||||
cmd, DBUS_ARGS, DBUS_DESC);
|
cmd, DBUS_ARGS, DBUS_DESC);
|
||||||
|
|
||||||
if (service_register(SVC_TYPE_SERVICE, line, global_rlimit, NULL))
|
conf_save_service(SVC_TYPE_SERVICE, line, "dbus.conf");
|
||||||
err(1, "Failed registering %s", DBUS_DAEMON);
|
|
||||||
|
|
||||||
free(cmd);
|
free(cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+116
-8
@@ -414,6 +414,79 @@ void conf_saverc(void)
|
|||||||
fclose(fp);
|
fclose(fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Called at bootstrap to log execution order (for debug)
|
||||||
|
*/
|
||||||
|
void conf_save_exec_order(svc_t *svc, char *cmdline, int result)
|
||||||
|
{
|
||||||
|
const char *fn = _PATH_VARRUN "finit/exec.order";
|
||||||
|
const char *ststr = !result ? "[ OK ]" : "[FAIL]";
|
||||||
|
static char *prepared = NULL;
|
||||||
|
int first = !fexist(fn);
|
||||||
|
FILE *fp;
|
||||||
|
|
||||||
|
fp = fopen(fn, "a+");
|
||||||
|
if (!fp) {
|
||||||
|
err(1, "failed writing to %s", fn);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (first) {
|
||||||
|
fprintf(fp, "# Execution order of run/task/services at bootstrap\n");
|
||||||
|
fprintf(fp, "# ST TYPE COMMAND LINE (DESC)\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (result == -1) {
|
||||||
|
int len;
|
||||||
|
|
||||||
|
len = snprintf(NULL, 0, " %-7s %-64s (%s)", svc_typestr(svc), cmdline, svc->desc);
|
||||||
|
if (len > 0) {
|
||||||
|
if (prepared)
|
||||||
|
free(prepared);
|
||||||
|
prepared = malloc(++len);
|
||||||
|
if (!prepared)
|
||||||
|
return;
|
||||||
|
snprintf(prepared, len, " %-7s %-64s (%s)", svc_typestr(svc), cmdline, svc->desc);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (prepared) {
|
||||||
|
memcpy(prepared, ststr, strlen(ststr));
|
||||||
|
fprintf(fp, "%s\n", prepared);
|
||||||
|
free(prepared);
|
||||||
|
prepared = NULL;
|
||||||
|
} else {
|
||||||
|
fprintf(fp, "%s %-7s %-64s (%s)\n", ststr, svc_typestr(svc), cmdline, svc->desc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(fp);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Called by plugins and similar that dynamically generate system services
|
||||||
|
*/
|
||||||
|
void conf_save_service(int type, char *cfg, char *file)
|
||||||
|
{
|
||||||
|
char fn[256];
|
||||||
|
svc_t foo;
|
||||||
|
FILE *fp;
|
||||||
|
|
||||||
|
mkpath(FINIT_RUNPATH_, 0755);
|
||||||
|
snprintf(fn, sizeof(fn), "%s/%s", FINIT_RUNPATH_, file);
|
||||||
|
if (fexist(fn))
|
||||||
|
warn("File %s already exists, overwriting.", fn);
|
||||||
|
fp = fopen(fn, "w");
|
||||||
|
if (!fp) {
|
||||||
|
err(1, "Failed creating %s", fn);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
foo.type = type;
|
||||||
|
fprintf(fp, "# Generated by finit:%s()\n", __func__);
|
||||||
|
fprintf(fp, "%s %s\n", svc_typestr(&foo), cfg);
|
||||||
|
fclose(fp);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Sets, and makes a note of, all KEY=VALUE lines in a given .conf line
|
* Sets, and makes a note of, all KEY=VALUE lines in a given .conf line
|
||||||
* from finit.conf, or other .conf file. Note, PATH is always reset in
|
* from finit.conf, or other .conf file. Note, PATH is always reset in
|
||||||
@@ -1152,20 +1225,51 @@ int conf_reload(void)
|
|||||||
* but are now regular files that can be overridden by files in
|
* but are now regular files that can be overridden by files in
|
||||||
* /etc/finit.d -- similar to how tmfiles.d(5) work. E.g., add
|
* /etc/finit.d -- similar to how tmfiles.d(5) work. E.g., add
|
||||||
* an override .conf, or an ignore by symlinking to /dev/null
|
* an override .conf, or an ignore by symlinking to /dev/null
|
||||||
|
*
|
||||||
|
* The .conf files (and run/task/service stanzas) are parsed and
|
||||||
|
* started in order. Each directory is sorted alphanumerically
|
||||||
|
* and then the result is appended to the overall order:
|
||||||
|
*
|
||||||
|
* /lib/finit/system/10-hotplug.conf
|
||||||
|
* /lib/finit/system/90-testserv.conf
|
||||||
|
* /run/finit/system/dbus.conf
|
||||||
|
* /run/finit/system/tty.conf
|
||||||
|
* /etc/finit.d/10-abc.conf
|
||||||
|
* /etc/finit.d/20-abc.conf
|
||||||
|
* /etc/finit.d/enabled/1-aaa.conf
|
||||||
|
* /etc/finit.d/enabled/1-abc.conf
|
||||||
|
* /etc/finit.d/enabled/2-aaa.conf
|
||||||
*/
|
*/
|
||||||
glob_append(&gl, 0, "%s/*.conf", finit_rcsd);
|
glob_append(&gl, 0, "%s/*.conf", FINIT_SYSPATH_);
|
||||||
glob_append(&gl, 1, "%s/*.conf", FINIT_SYSPATH);
|
glob_append(&gl, 1, "%s/*.conf", FINIT_RUNPATH_);
|
||||||
|
glob_append(&gl, 1, "%s/*.conf", finit_rcsd);
|
||||||
glob_append(&gl, 1, "%s/enabled/*.conf", finit_rcsd);
|
glob_append(&gl, 1, "%s/enabled/*.conf", finit_rcsd);
|
||||||
|
|
||||||
|
if (bootstrap) {
|
||||||
|
const char *fn = _PATH_VARRUN "finit/conf.order";
|
||||||
|
FILE *fp;
|
||||||
|
|
||||||
|
fp = fopen(fn, "w");
|
||||||
|
if (!fp) {
|
||||||
|
err(1, "failed creating %s", fn);
|
||||||
|
} else {
|
||||||
|
fprintf(fp, "# Evaluation & execution order of .conf files\n");
|
||||||
|
for (i = 0; i < gl.gl_pathc; i++)
|
||||||
|
fprintf(fp, "%s\n", gl.gl_pathv[i]);
|
||||||
|
fclose(fp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < gl.gl_pathc; i++) {
|
for (i = 0; i < gl.gl_pathc; i++) {
|
||||||
char *path = gl.gl_pathv[i];
|
char *path = gl.gl_pathv[i];
|
||||||
char *rp = NULL;
|
char *rp = NULL;
|
||||||
struct stat st;
|
struct stat st;
|
||||||
size_t j, len;
|
size_t j, len;
|
||||||
|
|
||||||
/* check for FINIT_SYSPATH overrides */
|
/* check for FINIT_SYSPATH_ or FINIT_RUNPATH_ overrides */
|
||||||
for (j = i + 1; j < gl.gl_pathc; j++) {
|
for (j = i + 1; j < gl.gl_pathc; j++) {
|
||||||
if (strncmp(path, FINIT_SYSPATH, strlen(FINIT_SYSPATH)))
|
if (strncmp(path, FINIT_SYSPATH_, strlen(FINIT_SYSPATH_)) &&
|
||||||
|
strncmp(path, FINIT_RUNPATH_, strlen(FINIT_RUNPATH_)))
|
||||||
continue;
|
continue;
|
||||||
if (strcmp(basename(path), basename(gl.gl_pathv[j])))
|
if (strcmp(basename(path), basename(gl.gl_pathv[j])))
|
||||||
continue;
|
continue;
|
||||||
@@ -1225,6 +1329,9 @@ done:
|
|||||||
/* Drop record of all .conf changes */
|
/* Drop record of all .conf changes */
|
||||||
drop_changes();
|
drop_changes();
|
||||||
|
|
||||||
|
if (bootstrap)
|
||||||
|
wdog = svc_find("watchdog", "finit");
|
||||||
|
|
||||||
/* Override configured runlevel, user said 'S' on /proc/cmdline */
|
/* Override configured runlevel, user said 'S' on /proc/cmdline */
|
||||||
if (BOOTSTRAP && single)
|
if (BOOTSTRAP && single)
|
||||||
cfglevel = 1;
|
cfglevel = 1;
|
||||||
@@ -1461,15 +1568,16 @@ int conf_init(uev_ctx_t *ctx)
|
|||||||
*/
|
*/
|
||||||
#ifdef WDT_DEVNODE
|
#ifdef WDT_DEVNODE
|
||||||
if (whichp(FINIT_EXECPATH_ "/watchdogd") && fexist(WDT_DEVNODE)) {
|
if (whichp(FINIT_EXECPATH_ "/watchdogd") && fexist(WDT_DEVNODE)) {
|
||||||
service_register(SVC_TYPE_SERVICE, "[S0123456789] cgroup.init name:watchdog :finit " FINIT_EXECPATH_ "/watchdogd -- Finit watchdog daemon", global_rlimit, NULL);
|
conf_save_service(SVC_TYPE_SERVICE, "[S0123456789] cgroup.init name:watchdog :finit "
|
||||||
wdog = svc_find("watchdog", "finit");
|
FINIT_EXECPATH_ "/watchdogd -- Finit watchdog daemon", "watchdogd.conf");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
/*
|
/*
|
||||||
* Start kernel event daemon as soon as possible, if enabled
|
* Start kernel event daemon as soon as possible, if enabled
|
||||||
*/
|
*/
|
||||||
if (whichp(FINIT_EXECPATH_ "/keventd"))
|
if (whichp(FINIT_EXECPATH_ "/keventd"))
|
||||||
service_register(SVC_TYPE_SERVICE, "[S0123456789] cgroup.init " FINIT_EXECPATH_ "/keventd -- Finit kernel event daemon", global_rlimit, NULL);
|
conf_save_service(SVC_TYPE_SERVICE, "[S0123456789] cgroup.init "
|
||||||
|
FINIT_EXECPATH_ "/keventd -- Finit kernel event daemon", "keventd.conf");
|
||||||
|
|
||||||
dbg("Allow plugins to register early runlevel 1 run/task/services ...");
|
dbg("Allow plugins to register early runlevel 1 run/task/services ...");
|
||||||
plugin_run_hooks(HOOK_SVC_PLUGIN);
|
plugin_run_hooks(HOOK_SVC_PLUGIN);
|
||||||
@@ -1505,7 +1613,7 @@ int conf_init(uev_ctx_t *ctx)
|
|||||||
snprintf(conf, sizeof(conf), "[S] <int/bootstrap> log:console %s %s %s"
|
snprintf(conf, sizeof(conf), "[S] <int/bootstrap> log:console %s %s %s"
|
||||||
" -- Calling runparts %s in the background",
|
" -- Calling runparts %s in the background",
|
||||||
_PATH_RUNPARTS, args, runparts, runparts);
|
_PATH_RUNPARTS, args, runparts, runparts);
|
||||||
service_register(SVC_TYPE_TASK, conf, global_rlimit, NULL);
|
conf_save_service(SVC_TYPE_TASK, conf, "runparts.conf");
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -44,6 +44,8 @@ int conf_monitor (void);
|
|||||||
|
|
||||||
void conf_reset_env (void);
|
void conf_reset_env (void);
|
||||||
void conf_saverc (void);
|
void conf_saverc (void);
|
||||||
|
void conf_save_exec_order (svc_t *svc, char *cmdline, int result);
|
||||||
|
void conf_save_service (int type, char *cfg, char *file);
|
||||||
void conf_parse_cmdline (int argc, char *argv[]);
|
void conf_parse_cmdline (int argc, char *argv[]);
|
||||||
int conf_parse_runlevels (char *runlevels);
|
int conf_parse_runlevels (char *runlevels);
|
||||||
void conf_parse_cond (svc_t *svc, char *cond);
|
void conf_parse_cond (svc_t *svc, char *cond);
|
||||||
|
|||||||
+1
-1
@@ -204,7 +204,7 @@ static int fsck(int pass)
|
|||||||
|
|
||||||
fp = setmntent(fstab, "r");
|
fp = setmntent(fstab, "r");
|
||||||
if (!fp) {
|
if (!fp) {
|
||||||
err(1, "Failed opening fstab: %s", fstab);
|
logit(LOG_CONSOLE | LOG_ALERT, "Failed opening fstab: %s", fstab);
|
||||||
sulogin(1);
|
sulogin(1);
|
||||||
}
|
}
|
||||||
dbg("Opened %s, pass %d", fstab, pass);
|
dbg("Opened %s, pass %d", fstab, pass);
|
||||||
|
|||||||
+10
-1
@@ -629,6 +629,9 @@ static int service_start(svc_t *svc)
|
|||||||
}
|
}
|
||||||
|
|
||||||
compose_cmdline(svc, cmdline, sizeof(cmdline));
|
compose_cmdline(svc, cmdline, sizeof(cmdline));
|
||||||
|
if (bootstrap)
|
||||||
|
conf_save_exec_order(svc, cmdline, -1);
|
||||||
|
|
||||||
if (svc_is_sysv(svc))
|
if (svc_is_sysv(svc))
|
||||||
logit(LOG_CONSOLE | LOG_NOTICE, "Calling '%s start' ...", cmdline);
|
logit(LOG_CONSOLE | LOG_NOTICE, "Calling '%s start' ...", cmdline);
|
||||||
|
|
||||||
@@ -838,6 +841,8 @@ fail:
|
|||||||
sigprocmask(SIG_SETMASK, &omask, NULL);
|
sigprocmask(SIG_SETMASK, &omask, NULL);
|
||||||
if (do_progress && !run_block_pid)
|
if (do_progress && !run_block_pid)
|
||||||
print_result(result);
|
print_result(result);
|
||||||
|
if (bootstrap && !run_block_pid)
|
||||||
|
conf_save_exec_order(svc, NULL, result);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -1896,10 +1901,14 @@ done:
|
|||||||
svc->start_time = svc->pid = 0;
|
svc->start_time = svc->pid = 0;
|
||||||
cont:
|
cont:
|
||||||
if (lost == run_block_pid) {
|
if (lost == run_block_pid) {
|
||||||
|
int result = WIFEXITED(status) ? WEXITSTATUS(status) : 1;
|
||||||
|
|
||||||
svc_mark_clean(svc); /* done, regardless of exit status */
|
svc_mark_clean(svc); /* done, regardless of exit status */
|
||||||
run_block_pid = 0;
|
run_block_pid = 0;
|
||||||
if (svc->desc[0])
|
if (svc->desc[0])
|
||||||
print_result(WIFEXITED(status) ? WEXITSTATUS(status) : 1);
|
print_result(result);
|
||||||
|
if (bootstrap)
|
||||||
|
conf_save_exec_order(svc, NULL, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!service_step(svc)) {
|
if (!service_step(svc)) {
|
||||||
|
|||||||
+1
-1
@@ -471,7 +471,7 @@ void tmpfilesd(void)
|
|||||||
/* in priority order */
|
/* in priority order */
|
||||||
char *dir[] = {
|
char *dir[] = {
|
||||||
FINIT_TMPFILES "/*.conf",
|
FINIT_TMPFILES "/*.conf",
|
||||||
TMPFILES_PATH "/*.conf",
|
TMPFILES_PATH_ "/*.conf",
|
||||||
"/usr/lib/tmpfiles.d/*.conf",
|
"/usr/lib/tmpfiles.d/*.conf",
|
||||||
"/run/tmpfiles.d/*.conf",
|
"/run/tmpfiles.d/*.conf",
|
||||||
"/etc/tmpfiles.d/*.conf", /* local admin overrides */
|
"/etc/tmpfiles.d/*.conf", /* local admin overrides */
|
||||||
|
|||||||
@@ -7,11 +7,11 @@ service nowarn [S12345789] cgroup.system name:udevd pid:udevd log /lib/systemd/s
|
|||||||
service nowarn [S12345789] cgroup.system name:udevd pid:udevd log udevd -- Device event managing daemon
|
service nowarn [S12345789] cgroup.system name:udevd pid:udevd log udevd -- Device event managing daemon
|
||||||
|
|
||||||
# Wait for udevd to start, then wait a couple of seconds for it to become ready
|
# Wait for udevd to start, then wait a couple of seconds for it to become ready
|
||||||
run nowarn if:udevd cgroup.init [S] <pid/udevd> udevadm settle -t 0 --
|
run nowarn if:udevd cgroup.init :1 [S] <pid/udevd> log udevadm settle -t 0 --
|
||||||
run nowarn if:udevd cgroup.init [S] <pid/udevd> log udevadm control --reload
|
run nowarn if:udevd cgroup.init :2 [S] <pid/udevd> log udevadm control --reload --
|
||||||
run nowarn if:udevd cgroup.init :1 [S] <pid/udevd> log udevadm trigger -c add -t devices -- Requesting device events
|
run nowarn if:udevd cgroup.init :3 [S] <pid/udevd> log udevadm trigger -c add -t devices -- Requesting device events
|
||||||
run nowarn if:udevd cgroup.init :2 [S] <pid/udevd> log udevadm trigger -c add -t subsystems -- Requesting subsystem events
|
run nowarn if:udevd cgroup.init :4 [S] <pid/udevd> log udevadm trigger -c add -t subsystems -- Requesting subsystem events
|
||||||
run nowarn if:udevd cgroup.init [S] <pid/udevd> log udevadm settle -t 5 -- Waiting for udev to finish
|
run nowarn if:udevd cgroup.init :5 [S] <pid/udevd> log udevadm settle -t 5 -- Waiting for udev to finish
|
||||||
|
|
||||||
# If udevd is not available, try mdev
|
# If udevd is not available, try mdev
|
||||||
run nowarn conflict:udevd [S] mdev -s -- Populating device tree
|
run nowarn conflict:udevd [S] mdev -s -- Populating device tree
|
||||||
File renamed without changes.
+2
-2
@@ -2,9 +2,9 @@ systemdir = $(system_path)
|
|||||||
dist_system_DATA =
|
dist_system_DATA =
|
||||||
|
|
||||||
if BUILD_HOTPLUG_PLUGIN
|
if BUILD_HOTPLUG_PLUGIN
|
||||||
dist_system_DATA += hotplug.conf
|
dist_system_DATA += 10-hotplug.conf
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if BUILD_TESTSERV_PLUGIN
|
if BUILD_TESTSERV_PLUGIN
|
||||||
dist_system_DATA += testserv.conf
|
dist_system_DATA += 90-testserv.conf
|
||||||
endif
|
endif
|
||||||
@@ -11,4 +11,4 @@ d /run/finit/cond 0755 - - -
|
|||||||
d /run/finit/cond/pid 0755 - - -
|
d /run/finit/cond/pid 0755 - - -
|
||||||
d /run/finit/cond/sys 0755 - - -
|
d /run/finit/cond/sys 0755 - - -
|
||||||
d /run/finit/cond/usr 0755 - - -
|
d /run/finit/cond/usr 0755 - - -
|
||||||
|
d /run/finit/system 0755 - - -
|
||||||
Reference in new issue
Block a user