Initialize for systemd
This commit is contained in:
commit
2de24fe84c
43 changed files with 14931 additions and 0 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
systemd-v249.17+suse.218.g2cb4d40f1c.tar.xz
|
1
.systemd.metadata
Normal file
1
.systemd.metadata
Normal file
|
@ -0,0 +1 @@
|
|||
0c67d91505a6aa5709b3f51f6957c55b2b32113f999dcdf6c8effc6e17e970e9 systemd-v249.17+suse.218.g2cb4d40f1c.tar.xz
|
347
0001-conf-parser-introduce-early-drop-ins.patch
Normal file
347
0001-conf-parser-introduce-early-drop-ins.patch
Normal file
|
@ -0,0 +1,347 @@
|
|||
From 4ff82a9455d7b6672e79f2938728a3a8299c3158 Mon Sep 17 00:00:00 2001
|
||||
From: Franck Bui <fbui@suse.com>
|
||||
Date: Fri, 22 Jan 2021 14:57:08 +0100
|
||||
Subject: [PATCH 01/11] conf-parser: introduce 'early' drop-ins
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
As formerly known as "downstream conf file drop-ins should never override main
|
||||
user conf file".
|
||||
|
||||
Previously all drop-ins, including those shipped by downstream, shipped in
|
||||
/usr, could override user's main configuration file (located in /etc) because
|
||||
the main file was always parsed first.
|
||||
|
||||
This was problematic for downstreams because their customization should never
|
||||
override the users one in general. Therefore the only way to make this logic
|
||||
usable was by teaching users to never use the main conf files and to put all
|
||||
theirs settings in drop-ins with a higher priority than the one downsteam would
|
||||
use. However customizing the defaults through the main conf file is something
|
||||
very well established since a long time hence this is not something
|
||||
conceivable.
|
||||
|
||||
This patch reworks the way we parse configuration files by introducing "early"
|
||||
conf files (idea from Zbigniew Jędrzejewski-Szmek), which always have a
|
||||
priority lower than the main config file and hence other conf file drop-ins
|
||||
too.
|
||||
|
||||
Early conf files can be located in any locations where regular conf snippets
|
||||
can be installed and are sorted between them using the same sorting rules that
|
||||
apply to other conf files. A conf file is considered as an early one if its
|
||||
filename is prefixed with "__" (double underscore).
|
||||
|
||||
Hence for example, drop-in "/usr/lib/systemd/logind.conf.d/__99-foo.conf" will
|
||||
always be parsed before:
|
||||
|
||||
/etc/systemd/logind.conf
|
||||
/etc/systemd/logind.conf.d/00-foo.conf
|
||||
/usr/lib/systemd/logind.conf.d/00-foo.conf
|
||||
|
||||
This change isn't backwards-compatible, but the '__' prefix is something that
|
||||
is unlikely used. Hence the risk should be very low.
|
||||
|
||||
Unfortunately upstream is not seing this problem as a serious one and accept
|
||||
that vendors' configuration files can take precedence over the main
|
||||
configuration files (placed in /etc). See the following links for the
|
||||
related discussions:
|
||||
|
||||
https://github.com/systemd/systemd/issues/2121 (initial issue report)
|
||||
https://github.com/systemd/systemd/pull/17161 (first attempt to solve this issue)
|
||||
https://github.com/systemd/systemd/pull/18347 (introduction of early drop-in)
|
||||
|
||||
Since SUSE heavily relies on drop-ins to customize some of the upstream default
|
||||
settings, there was no other choice than to diverge from upstream in this
|
||||
regard.
|
||||
|
||||
But it should be noted that these early drop-ins are strictly reserved for SUSE
|
||||
own purpose only. IOW users should never use them and early drop-ins should
|
||||
never be created in /etc but only in /usr. We reserve the right to change or
|
||||
drop this feature at any time.
|
||||
|
||||
Fixes: #2121
|
||||
---
|
||||
src/shared/conf-parser.c | 48 ++++++++++--
|
||||
src/test/test-conf-parser.c | 152 ++++++++++++++++++++++++++++++++++++
|
||||
2 files changed, 195 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/src/shared/conf-parser.c b/src/shared/conf-parser.c
|
||||
index d0ac1b2660..cb453fa50d 100644
|
||||
--- a/src/shared/conf-parser.c
|
||||
+++ b/src/shared/conf-parser.c
|
||||
@@ -430,6 +430,7 @@ int config_parse(
|
||||
|
||||
static int config_parse_many_files(
|
||||
const char* const* conf_files,
|
||||
+ char **early_files,
|
||||
char **files,
|
||||
const char *sections,
|
||||
ConfigItemLookup lookup,
|
||||
@@ -442,6 +443,12 @@ static int config_parse_many_files(
|
||||
char **fn;
|
||||
int r;
|
||||
|
||||
+ STRV_FOREACH(fn, early_files) {
|
||||
+ r = config_parse(NULL, *fn, NULL, sections, lookup, table, flags, userdata, &mtime);
|
||||
+ if (r < 0)
|
||||
+ return r;
|
||||
+ }
|
||||
+
|
||||
/* First read the first found main config file. */
|
||||
STRV_FOREACH(fn, (char**) conf_files) {
|
||||
r = config_parse(NULL, *fn, NULL, sections, lookup, table, flags, userdata, &mtime);
|
||||
@@ -464,6 +471,28 @@ static int config_parse_many_files(
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static int config_parse_split_conf_files(char **files, char ***early_files, char ***late_files) {
|
||||
+ char **f;
|
||||
+
|
||||
+ assert(files);
|
||||
+ assert(early_files);
|
||||
+ assert(late_files);
|
||||
+
|
||||
+ STRV_FOREACH(f, files) {
|
||||
+ char ***s, *p;
|
||||
+
|
||||
+ p = strdup(*f);
|
||||
+ if (!p)
|
||||
+ return log_oom();
|
||||
+
|
||||
+ s = startswith(basename(*f), "__") ? early_files : late_files;
|
||||
+ if (strv_push(s, p) < 0)
|
||||
+ return log_oom();
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
/* Parse each config file in the directories specified as nulstr. */
|
||||
int config_parse_many_nulstr(
|
||||
const char *conf_file,
|
||||
@@ -475,15 +504,19 @@ int config_parse_many_nulstr(
|
||||
void *userdata,
|
||||
usec_t *ret_mtime) {
|
||||
|
||||
- _cleanup_strv_free_ char **files = NULL;
|
||||
+ _cleanup_strv_free_ char **files = NULL, **early_files = NULL, **late_files = NULL;
|
||||
int r;
|
||||
|
||||
r = conf_files_list_nulstr(&files, ".conf", NULL, 0, conf_file_dirs);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
- return config_parse_many_files(STRV_MAKE_CONST(conf_file),
|
||||
- files, sections, lookup, table, flags, userdata,
|
||||
+ r = config_parse_split_conf_files(files, &early_files, &late_files);
|
||||
+ if (r < 0)
|
||||
+ return r;
|
||||
+
|
||||
+ return config_parse_many_files(STRV_MAKE_CONST(conf_file), early_files, late_files,
|
||||
+ sections, lookup, table, flags, userdata,
|
||||
ret_mtime);
|
||||
}
|
||||
|
||||
@@ -499,8 +532,8 @@ int config_parse_many(
|
||||
void *userdata,
|
||||
usec_t *ret_mtime) {
|
||||
|
||||
+ _cleanup_strv_free_ char **files = NULL, **early_files = NULL, **late_files = NULL;
|
||||
_cleanup_strv_free_ char **dropin_dirs = NULL;
|
||||
- _cleanup_strv_free_ char **files = NULL;
|
||||
const char *suffix;
|
||||
int r;
|
||||
|
||||
@@ -513,7 +546,12 @@ int config_parse_many(
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
- return config_parse_many_files(conf_files, files, sections, lookup, table, flags, userdata, ret_mtime);
|
||||
+ r = config_parse_split_conf_files(files, &early_files, &late_files);
|
||||
+ if (r < 0)
|
||||
+ return r;
|
||||
+
|
||||
+ return config_parse_many_files(conf_files, early_files, late_files,
|
||||
+ sections, lookup, table, flags, userdata, ret_mtime);
|
||||
}
|
||||
|
||||
#define DEFINE_PARSER(type, vartype, conv_func) \
|
||||
diff --git a/src/test/test-conf-parser.c b/src/test/test-conf-parser.c
|
||||
index 5da864347e..77d9f28a79 100644
|
||||
--- a/src/test/test-conf-parser.c
|
||||
+++ b/src/test/test-conf-parser.c
|
||||
@@ -5,6 +5,9 @@
|
||||
#include "fs-util.h"
|
||||
#include "log.h"
|
||||
#include "macro.h"
|
||||
+#include "mkdir.h"
|
||||
+#include "path-util.h"
|
||||
+#include "rm-rf.h"
|
||||
#include "string-util.h"
|
||||
#include "strv.h"
|
||||
#include "tmpfile-util.h"
|
||||
@@ -385,6 +388,152 @@ static void test_config_parse(unsigned i, const char *s) {
|
||||
}
|
||||
}
|
||||
|
||||
+static void setup_conf_files(const char *root, bool is_main, char **conf_files, char ***ret_conf_dirs) {
|
||||
+ char **path;
|
||||
+
|
||||
+ /* If 'is_main' is true then 'conf_files' should only contain an entry
|
||||
+ * for the main conf file. */
|
||||
+ if (is_main)
|
||||
+ assert_se(strv_length(conf_files) <= 1);
|
||||
+
|
||||
+ STRV_FOREACH(path, conf_files) {
|
||||
+ _cleanup_free_ char *abspath = NULL;
|
||||
+ _cleanup_fclose_ FILE *f = NULL;
|
||||
+
|
||||
+ abspath = path_join(root, *path);
|
||||
+ assert_se(abspath);
|
||||
+
|
||||
+ (void) mkdir_parents(abspath, 0755);
|
||||
+
|
||||
+ f = fopen(abspath, "w");
|
||||
+ assert_se(f);
|
||||
+ fprintf(f,
|
||||
+ "[Section]\n"
|
||||
+ "name=%s\n",
|
||||
+ *path);
|
||||
+
|
||||
+ if (!is_main)
|
||||
+ fprintf(f,
|
||||
+ "%s=%s\n",
|
||||
+ startswith(basename(*path), "__") ? "early" : "late",
|
||||
+ *path);
|
||||
+
|
||||
+ if (ret_conf_dirs) {
|
||||
+ char *d;
|
||||
+
|
||||
+ assert_se((d = dirname_malloc(abspath)));
|
||||
+ assert_se(strv_push(ret_conf_dirs, d) == 0);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (ret_conf_dirs) {
|
||||
+ strv_uniq(*ret_conf_dirs);
|
||||
+ strv_sort(*ret_conf_dirs);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static void test_config_parse_many_one(bool nulstr, const char *main, char **conf_files,
|
||||
+ const char *name, const char *early, const char *late) {
|
||||
+
|
||||
+ _cleanup_free_ char *parsed_name = NULL, *parsed_early = NULL, *parsed_late = NULL;
|
||||
+ _cleanup_strv_free_ char **conf_dirs = NULL;
|
||||
+ _cleanup_free_ char *conf_dirs_nulstr = NULL;
|
||||
+ char *conf_file;
|
||||
+ char *tmp_dir;
|
||||
+ size_t size;
|
||||
+ int r;
|
||||
+
|
||||
+ const ConfigTableItem items[] = {
|
||||
+ { "Section", "name", config_parse_string, 0, &parsed_name},
|
||||
+ { "Section", "late", config_parse_string, 0, &parsed_late},
|
||||
+ { "Section", "early", config_parse_string, 0, &parsed_early},
|
||||
+ };
|
||||
+
|
||||
+ tmp_dir = strdupa("/tmp/test-conf-parser-XXXXXX");
|
||||
+ assert_se(mkdtemp(tmp_dir));
|
||||
+
|
||||
+ setup_conf_files(tmp_dir, true, STRV_MAKE(main), NULL);
|
||||
+ setup_conf_files(tmp_dir, false, conf_files, &conf_dirs);
|
||||
+
|
||||
+ conf_file = main ? strjoina(tmp_dir, "/", main) : NULL;
|
||||
+
|
||||
+ if (nulstr) {
|
||||
+ r = strv_make_nulstr(conf_dirs, &conf_dirs_nulstr, &size);
|
||||
+ assert_se(r == 0);
|
||||
+
|
||||
+ r = config_parse_many_nulstr(conf_file, conf_dirs_nulstr,
|
||||
+ "Section\0",
|
||||
+ config_item_table_lookup, items,
|
||||
+ CONFIG_PARSE_WARN,
|
||||
+ NULL,
|
||||
+ NULL);
|
||||
+ } else {
|
||||
+ r = config_parse_many(STRV_MAKE_CONST(conf_file),
|
||||
+ (const char * const*) conf_dirs, "",
|
||||
+ "Section\0",
|
||||
+ config_item_table_lookup, items,
|
||||
+ CONFIG_PARSE_WARN,
|
||||
+ NULL,
|
||||
+ NULL);
|
||||
+ }
|
||||
+
|
||||
+ assert_se(r == 0);
|
||||
+ assert_se((!name && !parsed_name) || streq(name, parsed_name));
|
||||
+ assert_se((!late && !parsed_late) || streq(late, parsed_late));
|
||||
+ assert_se((!early && !parsed_early) || streq(early, parsed_early));
|
||||
+
|
||||
+ assert_se(rm_rf(tmp_dir, REMOVE_ROOT|REMOVE_PHYSICAL) == 0);
|
||||
+}
|
||||
+
|
||||
+static void test_config_parse_many(bool nulstr) {
|
||||
+ log_info("== %s%s ==", __func__, nulstr ? "_nulstr" : "");
|
||||
+
|
||||
+ test_config_parse_many_one(nulstr, NULL, NULL, NULL, NULL, NULL);
|
||||
+
|
||||
+ test_config_parse_many_one(nulstr,
|
||||
+ "dir/main.conf", NULL,
|
||||
+ "dir/main.conf", NULL, NULL);
|
||||
+
|
||||
+ test_config_parse_many_one(nulstr,
|
||||
+ NULL, STRV_MAKE("dir1/50-foo.conf"),
|
||||
+ "dir1/50-foo.conf", NULL, "dir1/50-foo.conf");
|
||||
+
|
||||
+ test_config_parse_many_one(nulstr,
|
||||
+ NULL, STRV_MAKE("dir1/__50-foo.conf"),
|
||||
+ "dir1/__50-foo.conf", "dir1/__50-foo.conf", NULL);
|
||||
+
|
||||
+ test_config_parse_many_one(nulstr,
|
||||
+ NULL, STRV_MAKE("dir1/10-foo.conf", "dir1/50-bar.conf"),
|
||||
+ "dir1/50-bar.conf", NULL, "dir1/50-bar.conf");
|
||||
+
|
||||
+ test_config_parse_many_one(nulstr,
|
||||
+ NULL, STRV_MAKE("dir1/50-foo.conf", "dir2/10-bar.conf"),
|
||||
+ "dir1/50-foo.conf", NULL, "dir1/50-foo.conf");
|
||||
+
|
||||
+ test_config_parse_many_one(nulstr,
|
||||
+ NULL, STRV_MAKE("dir1/10-foo.conf", "dir2/10-foo.conf"),
|
||||
+ "dir1/10-foo.conf", NULL, "dir1/10-foo.conf");
|
||||
+
|
||||
+ /* Early conf files should never override the main one whatever their
|
||||
+ * priority/location. */
|
||||
+ test_config_parse_many_one(nulstr,
|
||||
+ "dir/10-main.conf",
|
||||
+ STRV_MAKE("dir1/__10-foo.conf", "dir2/__99-foo.conf"),
|
||||
+ "dir/10-main.conf", "dir2/__99-foo.conf", NULL);
|
||||
+
|
||||
+ /* Late conf files always take precendence over the early conf files
|
||||
+ * and the main one. */
|
||||
+ test_config_parse_many_one(nulstr,
|
||||
+ "dir/50-main.conf", STRV_MAKE("dir1/10-foo.conf"),
|
||||
+ "dir1/10-foo.conf", NULL, "dir1/10-foo.conf");
|
||||
+
|
||||
+ test_config_parse_many_one(nulstr,
|
||||
+ "dir/10-main.conf",
|
||||
+ STRV_MAKE("dir1/__10-foo.conf", "dir2/__99-foo.conf",
|
||||
+ "dir2/10-foo.conf"),
|
||||
+ "dir2/10-foo.conf", "dir2/__99-foo.conf", "dir2/10-foo.conf");
|
||||
+}
|
||||
+
|
||||
int main(int argc, char **argv) {
|
||||
unsigned i;
|
||||
|
||||
@@ -407,5 +556,8 @@ int main(int argc, char **argv) {
|
||||
for (i = 0; i < ELEMENTSOF(config_file); i++)
|
||||
test_config_parse(i, config_file[i]);
|
||||
|
||||
+ test_config_parse_many(true);
|
||||
+ test_config_parse_many(false);
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
--
|
||||
2.26.2
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
From ddf3a821b51fbd3064914eb00a03bbecce9ee361 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Blume <thomas.blume@suse.com>
|
||||
Date: Tue, 25 Mar 2014 13:08:56 +0000
|
||||
Subject: [PATCH 03/11] rc-local: fix ordering startup for
|
||||
/etc/init.d/boot.local
|
||||
|
||||
[tblume: fixes bnc#869142]
|
||||
---
|
||||
units/rc-local.service.in | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/units/rc-local.service.in b/units/rc-local.service.in
|
||||
index 55e83dfe00..8b20f8d1af 100644
|
||||
--- a/units/rc-local.service.in
|
||||
+++ b/units/rc-local.service.in
|
||||
@@ -13,7 +13,7 @@
|
||||
Description={{RC_LOCAL_PATH}} Compatibility
|
||||
Documentation=man:systemd-rc-local-generator(8)
|
||||
ConditionFileIsExecutable={{RC_LOCAL_PATH}}
|
||||
-After=network.target
|
||||
+After=basic.target
|
||||
|
||||
[Service]
|
||||
Type=forking
|
||||
--
|
||||
2.26.2
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
From 9e6a1f4b085b29abaf90ecd05859537b837b39fe Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Blume <Thomas.Blume@suse.com>
|
||||
Date: Wed, 4 May 2016 17:40:04 +0200
|
||||
Subject: [PATCH 8/8] sysv-generator: translate "Required-Start" into a "Wants"
|
||||
dependency
|
||||
|
||||
'Required-Start:' used to be supported by insserv but this functionality was
|
||||
dropped when insserv was rewritten into a compat perl wrapper (insserv-compat),
|
||||
which happened when systemd was introduced in SUSE, I guess.
|
||||
|
||||
It's been decided to add back the support in systemd instead of insserv-compat,
|
||||
see the comments in bsc#857204.
|
||||
|
||||
[tblume: Port of SLES12SP1 patch 0018-Make-LSB-Skripts-know-about-Required-and-Should.patch]
|
||||
|
||||
[wfink: fixes bsc#857204]
|
||||
---
|
||||
src/sysv-generator/sysv-generator.c | 7 ++++++-
|
||||
1 file changed, 6 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/sysv-generator/sysv-generator.c b/src/sysv-generator/sysv-generator.c
|
||||
index bf23c48662..c6e1953839 100644
|
||||
--- a/src/sysv-generator/sysv-generator.c
|
||||
+++ b/src/sysv-generator/sysv-generator.c
|
||||
@@ -409,8 +409,13 @@ static int handle_dependencies(SysvStub *s, unsigned line, const char *full_text
|
||||
return log_oom();
|
||||
|
||||
r = strv_extend(&s->wants, m);
|
||||
- } else
|
||||
+ } else {
|
||||
r = strv_extend(is_before ? &s->before : &s->after, m);
|
||||
+
|
||||
+ if (startswith_no_case(full_text, "Required-Start:"))
|
||||
+ r = strv_extend(&s->wants, m);
|
||||
+ }
|
||||
+
|
||||
if (r < 0)
|
||||
return log_oom();
|
||||
}
|
||||
--
|
||||
2.31.1
|
||||
|
|
@ -0,0 +1,60 @@
|
|||
From dedd52f920cf7ae718bb31ac7286d3f7314540c6 Mon Sep 17 00:00:00 2001
|
||||
From: Franck Bui <fbui@suse.com>
|
||||
Date: Fri, 10 Jun 2016 15:19:57 +0200
|
||||
Subject: [PATCH 09/11] pid1: handle console specificities/weirdness for s390
|
||||
arch
|
||||
|
||||
The 3270 console on S/390 can do color but not the 3215 console.
|
||||
|
||||
Partial forward port of
|
||||
0001-On_s390_con3270_disable_ANSI_colour_esc.patch from SLE12-SP1. A
|
||||
bunch of the previous code has been dropped since some changes
|
||||
imported from upsteam made them uneeded.
|
||||
|
||||
The remaining bits are probably hackish but at least they are now
|
||||
minimal.
|
||||
|
||||
It was an attempt to address bnc#860937. And yes turning the console
|
||||
color mode off by passing $TERM=dumb via the kernel command line would
|
||||
have been much more easier and enough.
|
||||
|
||||
This is actually implemented by recent systemd. There's also another
|
||||
command line option: systemd.log_color=off.
|
||||
|
||||
See also a short discussion which happened on @systemd-maintainers
|
||||
whose $subject is "[PATCH] support conmode setting on command line".
|
||||
|
||||
[fbui: fixes bsc#860937]
|
||||
---
|
||||
src/basic/terminal-util.c | 15 ++++++++++++++-
|
||||
1 file changed, 14 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/basic/terminal-util.c b/src/basic/terminal-util.c
|
||||
index d769423d6e..1a65391146 100644
|
||||
--- a/src/basic/terminal-util.c
|
||||
+++ b/src/basic/terminal-util.c
|
||||
@@ -779,7 +779,20 @@ bool tty_is_vc_resolve(const char *tty) {
|
||||
}
|
||||
|
||||
const char *default_term_for_tty(const char *tty) {
|
||||
- return tty && tty_is_vc_resolve(tty) ? "linux" : "vt220";
|
||||
+ if (tty && tty_is_vc_resolve(tty))
|
||||
+ return "linux";
|
||||
+
|
||||
+#if defined (__s390__) || defined (__s390x__)
|
||||
+ if (tty && tty_is_console(tty)) {
|
||||
+ _cleanup_free_ char *mode = NULL;
|
||||
+
|
||||
+ /* Simply return "dumb" in case of OOM. */
|
||||
+ (void) proc_cmdline_get_key("conmode", 0, &mode);
|
||||
+ (void) proc_cmdline_value_missing("conmode", mode);
|
||||
+ return streq_ptr(mode, "3270") ? "ibm327x" : "dumb";
|
||||
+ }
|
||||
+#endif
|
||||
+ return "vt220";
|
||||
}
|
||||
|
||||
int fd_columns(int fd) {
|
||||
--
|
||||
2.26.2
|
||||
|
510
1001-udev-use-lock-when-selecting-the-highest-priority-de.patch
Normal file
510
1001-udev-use-lock-when-selecting-the-highest-priority-de.patch
Normal file
|
@ -0,0 +1,510 @@
|
|||
From 212aa5e819ced67e152a4efc43e0fab38a3f60a0 Mon Sep 17 00:00:00 2001
|
||||
From: Franck Bui <fbui@suse.com>
|
||||
Date: Wed, 3 Mar 2021 17:34:39 +0100
|
||||
Subject: [PATCH 1001/1001] udev: use lock when selecting the highest priority
|
||||
devlink
|
||||
|
||||
Commit 30f6dce62cb3a738b20253f2192270607c31b55b introduced a lock-less
|
||||
algorithm, which is a kind of spinlock in userspace spinning on a heavy loop
|
||||
(!?!), that is supposed to fix the race that might happen when multiple
|
||||
workers/devices claim for the same symlink.
|
||||
|
||||
But the algorithm is boggus as every worker will prefer itself and will try to
|
||||
"steal" the link from another worker with the same priority.
|
||||
|
||||
Rather than trying to fix the algorithm and close all possible races, let's use
|
||||
a much simplest approach which consists in using a lock. This was originally
|
||||
implemented by Martin Wilck: https://github.com/systemd/systemd/pull/8667 but
|
||||
somehow upstream preferred the more complex lock-less algo without any proof of
|
||||
benefits (quite the opposite since there're only drawback AFAICS).
|
||||
|
||||
In fact the figures we collected so far tends to show that the lock approach is
|
||||
even faster than the racy version without any fix.
|
||||
|
||||
This patch basically drop the lock-less algo introduced by commit
|
||||
30f6dce62cb3a738b20253f2192270607c31b55b and reuses Martin's lock approach with
|
||||
some minor improvements.
|
||||
|
||||
Compare to the old implementation (before commit 30f6dce62cb3a738b20253f21), it
|
||||
changes the moment when the symlink are created: it's now done *after* udev DB
|
||||
has been updated, hence removing the risk for another worker to overwrite a
|
||||
just created symlink with a higher priority which has not yet been registed in
|
||||
the DB. Latest versions of upstream calls update_devnode() twice, see
|
||||
https://github.com/systemd/systemd/pull/19560#issuecomment-836693914 for the
|
||||
"rationale".
|
||||
|
||||
Update v2:
|
||||
----------
|
||||
v249.13 includes a bunch of reworks of this lock-less algorithm, which confirm
|
||||
how this design was a bad idea (upstream eventually got rid of it and replaced
|
||||
it with the lock approach since v252). This patch was rebased to drop these
|
||||
changes as they're useless when the link directories are protected with locks.
|
||||
|
||||
v249.13 also introduced a new format for the link directory entries. I'm not
|
||||
sure how relevant such changes are for a stable release but it increases the
|
||||
risk of regression significantly. So this part was also dropped.
|
||||
|
||||
[fbui: fixes bsc#1181192]
|
||||
|
||||
Update v3:
|
||||
---------
|
||||
|
||||
Optimize the case where hundred workers claim the same symlink with the same
|
||||
priority.
|
||||
|
||||
Each time a new device claimed a symlink, the worker searched for the device
|
||||
claiming the symlink with the highest prio by examining the prio of each device
|
||||
(including the new one) and recreate the symlink accordingly. However this can
|
||||
be improved by stopping the search as soon as it encounters a device with the
|
||||
same prio since in this case it can assume that the symlink is currently owned
|
||||
by a device with equal or greater prio.
|
||||
|
||||
[fbui: fixes bsc#1203141]
|
||||
---
|
||||
src/udev/udev-event.c | 9 +-
|
||||
src/udev/udev-node.c | 321 ++++++++++--------------------------------
|
||||
2 files changed, 82 insertions(+), 248 deletions(-)
|
||||
|
||||
diff --git a/src/udev/udev-event.c b/src/udev/udev-event.c
|
||||
index 2661ed7933..173cd37618 100644
|
||||
--- a/src/udev/udev-event.c
|
||||
+++ b/src/udev/udev-event.c
|
||||
@@ -1051,10 +1051,6 @@ int udev_event_execute_rules(
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
- r = update_devnode(event);
|
||||
- if (r < 0)
|
||||
- return r;
|
||||
-
|
||||
/* preserve old, or get new initialization timestamp */
|
||||
r = device_ensure_usec_initialized(dev, event->dev_db_clone);
|
||||
if (r < 0)
|
||||
@@ -1069,8 +1065,11 @@ int udev_event_execute_rules(
|
||||
if (r < 0)
|
||||
return log_device_debug_errno(dev, r, "Failed to update database under /run/udev/data/: %m");
|
||||
|
||||
- device_set_is_initialized(dev);
|
||||
+ r = update_devnode(event);
|
||||
+ if (r < 0)
|
||||
+ return r;
|
||||
|
||||
+ device_set_is_initialized(dev);
|
||||
return 0;
|
||||
}
|
||||
|
||||
diff --git a/src/udev/udev-node.c b/src/udev/udev-node.c
|
||||
index d9309efa25..7be933a90f 100644
|
||||
--- a/src/udev/udev-node.c
|
||||
+++ b/src/udev/udev-node.c
|
||||
@@ -17,26 +17,19 @@
|
||||
#include "format-util.h"
|
||||
#include "fs-util.h"
|
||||
#include "hexdecoct.h"
|
||||
+#include "lockfile-util.h"
|
||||
#include "mkdir.h"
|
||||
-#include "parse-util.h"
|
||||
#include "path-util.h"
|
||||
-#include "random-util.h"
|
||||
#include "selinux-util.h"
|
||||
#include "smack-util.h"
|
||||
#include "stat-util.h"
|
||||
#include "stdio-util.h"
|
||||
#include "string-util.h"
|
||||
#include "strxcpyx.h"
|
||||
-#include "time-util.h"
|
||||
#include "udev-node.h"
|
||||
#include "user-util.h"
|
||||
|
||||
#define CREATE_LINK_MAX_RETRIES 128
|
||||
-#define LINK_UPDATE_MAX_RETRIES 128
|
||||
-#define CREATE_STACK_LINK_MAX_RETRIES 128
|
||||
-#define UPDATE_TIMESTAMP_MAX_RETRIES 128
|
||||
-#define MAX_RANDOM_DELAY (250 * USEC_PER_MSEC)
|
||||
-#define MIN_RANDOM_DELAY ( 50 * USEC_PER_MSEC)
|
||||
#define UDEV_NODE_HASH_KEY SD_ID128_MAKE(b9,6a,f1,ce,40,31,44,1a,9e,19,ec,8b,ae,f3,e3,2f)
|
||||
|
||||
static int create_symlink(const char *target, const char *slink) {
|
||||
@@ -122,8 +115,14 @@ static int link_find_prioritized(sd_device *dev, bool add, const char *stackdir,
|
||||
assert(stackdir);
|
||||
assert(ret);
|
||||
|
||||
- /* Find device node of device with highest priority. This returns 1 if a device found, 0 if no
|
||||
- * device found, or a negative errno. */
|
||||
+ /* When 'add' is true, search for a device having the same or a higher prio. If such a device is
|
||||
+ * found, return 0 and 'ret' is unchanged. Otherwise return 1 and 'ret' contains the device node of
|
||||
+ * the passed device.
|
||||
+ *
|
||||
+ * When 'add' is false, find device node of device with highest priority. This returns 1 if a device
|
||||
+ * found 0 if no device found.
|
||||
+ *
|
||||
+ * In both cases it returns a negative errno in case of errors. */
|
||||
|
||||
if (add) {
|
||||
const char *devnode;
|
||||
@@ -139,6 +138,8 @@ static int link_find_prioritized(sd_device *dev, bool add, const char *stackdir,
|
||||
target = strdup(devnode);
|
||||
if (!target)
|
||||
return -ENOMEM;
|
||||
+
|
||||
+ log_device_debug(dev, "Attempting to claim '%s' with priority %i", stackdir, priority);
|
||||
}
|
||||
|
||||
dir = opendir(stackdir);
|
||||
@@ -157,67 +158,50 @@ static int link_find_prioritized(sd_device *dev, bool add, const char *stackdir,
|
||||
return r;
|
||||
|
||||
FOREACH_DIRENT_ALL(dent, dir, break) {
|
||||
- _cleanup_free_ char *path = NULL, *buf = NULL;
|
||||
- int tmp_prio;
|
||||
+ _cleanup_(sd_device_unrefp) sd_device *dev_db = NULL;
|
||||
+ const char *devnode;
|
||||
+ int db_prio = 0;
|
||||
|
||||
+ if (dent->d_name[0] == '\0')
|
||||
+ break;
|
||||
if (dent->d_name[0] == '.')
|
||||
continue;
|
||||
|
||||
- /* skip ourself */
|
||||
+ /* did we find ourself? */
|
||||
if (streq(dent->d_name, id))
|
||||
continue;
|
||||
|
||||
- path = path_join(stackdir, dent->d_name);
|
||||
- if (!path)
|
||||
- return -ENOMEM;
|
||||
-
|
||||
- if (readlink_malloc(path, &buf) >= 0) {
|
||||
- char *devnode;
|
||||
-
|
||||
- /* New format. The devnode and priority can be obtained from symlink. */
|
||||
-
|
||||
- devnode = strchr(buf, ':');
|
||||
- if (!devnode || devnode == buf)
|
||||
- continue;
|
||||
+ log_device_debug(dev, "Found '%s' claiming '%s'", dent->d_name, stackdir);
|
||||
|
||||
- *(devnode++) = '\0';
|
||||
- if (!path_startswith(devnode, "/dev"))
|
||||
- continue;
|
||||
-
|
||||
- if (safe_atoi(buf, &tmp_prio) < 0)
|
||||
- continue;
|
||||
-
|
||||
- if (target && tmp_prio <= priority)
|
||||
- continue;
|
||||
-
|
||||
- r = free_and_strdup(&target, devnode);
|
||||
- if (r < 0)
|
||||
- return r;
|
||||
- } else {
|
||||
- _cleanup_(sd_device_unrefp) sd_device *tmp_dev = NULL;
|
||||
- const char *devnode;
|
||||
+ if (sd_device_new_from_device_id(&dev_db, dent->d_name) < 0)
|
||||
+ continue;
|
||||
|
||||
- /* Old format. The devnode and priority must be obtained from uevent and
|
||||
- * udev database files. */
|
||||
+ if (sd_device_get_devname(dev_db, &devnode) < 0)
|
||||
+ continue;
|
||||
|
||||
- if (sd_device_new_from_device_id(&tmp_dev, dent->d_name) < 0)
|
||||
- continue;
|
||||
+ if (device_get_devlink_priority(dev_db, &db_prio) < 0)
|
||||
+ continue;
|
||||
|
||||
- if (device_get_devlink_priority(tmp_dev, &tmp_prio) < 0)
|
||||
- continue;
|
||||
+ if (target && db_prio < priority)
|
||||
+ continue;
|
||||
|
||||
- if (target && tmp_prio <= priority)
|
||||
- continue;
|
||||
+ if (add) {
|
||||
+ assert(target);
|
||||
+ /* Exit early as we found an existing device claiming the symlink with same or higher
|
||||
+ * prio. */
|
||||
+ log_device_debug(dev, "Giving up '%s' in favor of %s (prio=%i)", stackdir, dent->d_name, db_prio);
|
||||
+ return 0;
|
||||
+ }
|
||||
|
||||
- if (sd_device_get_devname(tmp_dev, &devnode) < 0)
|
||||
- continue;
|
||||
+ if (target && db_prio == priority)
|
||||
+ continue;
|
||||
|
||||
- r = free_and_strdup(&target, devnode);
|
||||
- if (r < 0)
|
||||
- return r;
|
||||
- }
|
||||
+ log_device_debug(dev_db, "Device claims priority %i for '%s'", db_prio, stackdir);
|
||||
|
||||
- priority = tmp_prio;
|
||||
+ r = free_and_strdup(&target, devnode);
|
||||
+ if (r < 0)
|
||||
+ return r;
|
||||
+ priority = db_prio;
|
||||
}
|
||||
|
||||
*ret = TAKE_PTR(target);
|
||||
@@ -266,160 +250,12 @@ toolong:
|
||||
return size - 1;
|
||||
}
|
||||
|
||||
-static int update_timestamp(sd_device *dev, const char *path, struct stat *prev) {
|
||||
- assert(path);
|
||||
- assert(prev);
|
||||
-
|
||||
- /* Even if a symlink in the stack directory is created/removed, the mtime of the directory may
|
||||
- * not be changed. Why? Let's consider the following situation. For simplicity, let's assume
|
||||
- * there exist two udev workers (A and B) and all of them calls link_update() for the same
|
||||
- * devlink simultaneously.
|
||||
- *
|
||||
- * 1. A creates/removes a symlink in the stack directory.
|
||||
- * 2. A calls the first stat() in the loop of link_update().
|
||||
- * 3. A calls link_find_prioritized().
|
||||
- * 4. B creates/removes another symlink in the stack directory, so the result of the step 3 is outdated.
|
||||
- * 5. B finishes link_update().
|
||||
- * 6. A creates/removes devlink according to the outdated result in the step 3.
|
||||
- * 7. A calls the second stat() in the loop of link_update().
|
||||
- *
|
||||
- * If these 7 steps are processed in this order within a short time period that kernel's timer
|
||||
- * does not increase, then even if the contents in the stack directory is changed, the results
|
||||
- * of two stat() called by A shows the same timestamp, and A cannot detect the change.
|
||||
- *
|
||||
- * By calling this function after creating/removing symlinks in the stack directory, the
|
||||
- * timestamp of the stack directory is always increased at least in the above step 5, so A can
|
||||
- * detect the update. */
|
||||
-
|
||||
- if ((prev->st_mode & S_IFMT) == 0)
|
||||
- return 0; /* Does not exist, or previous stat() failed. */
|
||||
-
|
||||
- for (unsigned i = 0; i < UPDATE_TIMESTAMP_MAX_RETRIES; i++) {
|
||||
- struct stat st;
|
||||
-
|
||||
- if (stat(path, &st) < 0)
|
||||
- return -errno;
|
||||
-
|
||||
- if (!stat_inode_unmodified(prev, &st))
|
||||
- return 0;
|
||||
-
|
||||
- log_device_debug(dev,
|
||||
- "%s is modified, but its timestamp is not changed, "
|
||||
- "updating timestamp after 10ms.",
|
||||
- path);
|
||||
-
|
||||
- (void) usleep(10 * USEC_PER_MSEC);
|
||||
- if (utimensat(AT_FDCWD, path, NULL, 0) < 0)
|
||||
- return -errno;
|
||||
- }
|
||||
-
|
||||
- return -ELOOP;
|
||||
-}
|
||||
-
|
||||
-static int update_stack_directory(sd_device *dev, const char *dirname, bool add) {
|
||||
- _cleanup_free_ char *filename = NULL, *data = NULL, *buf = NULL;
|
||||
- const char *devname, *id;
|
||||
- struct stat st = {};
|
||||
- int priority, r;
|
||||
-
|
||||
- assert(dev);
|
||||
- assert(dirname);
|
||||
-
|
||||
- r = device_get_device_id(dev, &id);
|
||||
- if (r < 0)
|
||||
- return log_device_debug_errno(dev, r, "Failed to get device id: %m");
|
||||
-
|
||||
- filename = path_join(dirname, id);
|
||||
- if (!filename)
|
||||
- return log_oom_debug();
|
||||
-
|
||||
- if (!add) {
|
||||
- int unlink_error = 0, stat_error = 0;
|
||||
-
|
||||
- if (stat(dirname, &st) < 0) {
|
||||
- if (errno == ENOENT)
|
||||
- return 0; /* The stack directory is already removed. That's OK. */
|
||||
- stat_error = -errno;
|
||||
- }
|
||||
-
|
||||
- if (unlink(filename) < 0)
|
||||
- unlink_error = -errno;
|
||||
-
|
||||
- if (rmdir(dirname) >= 0 || errno == ENOENT)
|
||||
- return 0;
|
||||
-
|
||||
- if (unlink_error < 0) {
|
||||
- if (unlink_error == -ENOENT)
|
||||
- return 0;
|
||||
-
|
||||
- /* If we failed to remove the symlink, then there is almost nothing we can do. */
|
||||
- return log_device_debug_errno(dev, unlink_error, "Failed to remove %s: %m", filename);
|
||||
- }
|
||||
-
|
||||
- if (stat_error < 0)
|
||||
- return log_device_debug_errno(dev, stat_error, "Failed to stat %s: %m", dirname);
|
||||
-
|
||||
- /* The symlink was removed. Check if the timestamp of directory is changed. */
|
||||
- r = update_timestamp(dev, dirname, &st);
|
||||
- if (r < 0 && r != -ENOENT)
|
||||
- return log_device_debug_errno(dev, r, "Failed to update timestamp of %s: %m", dirname);
|
||||
-
|
||||
- return 0;
|
||||
- }
|
||||
-
|
||||
- r = sd_device_get_devname(dev, &devname);
|
||||
- if (r < 0)
|
||||
- return log_device_debug_errno(dev, r, "Failed to get device node: %m");
|
||||
-
|
||||
- r = device_get_devlink_priority(dev, &priority);
|
||||
- if (r < 0)
|
||||
- return log_device_debug_errno(dev, r, "Failed to get priority of device node symlink: %m");
|
||||
-
|
||||
- if (asprintf(&data, "%i:%s", priority, devname) < 0)
|
||||
- return log_oom_debug();
|
||||
-
|
||||
- if (readlink_malloc(filename, &buf) >= 0 && streq(buf, data))
|
||||
- return 0;
|
||||
-
|
||||
- if (unlink(filename) < 0 && errno != ENOENT)
|
||||
- log_device_debug_errno(dev, errno, "Failed to remove %s, ignoring: %m", filename);
|
||||
-
|
||||
- for (unsigned j = 0; j < CREATE_STACK_LINK_MAX_RETRIES; j++) {
|
||||
- /* This may fail with -ENOENT when the parent directory is removed during
|
||||
- * creating the file by another udevd worker. */
|
||||
- r = mkdir_p(dirname, 0755);
|
||||
- if (r == -ENOENT)
|
||||
- continue;
|
||||
- if (r < 0)
|
||||
- return log_device_debug_errno(dev, r, "Failed to create directory %s: %m", dirname);
|
||||
-
|
||||
- if (stat(dirname, &st) < 0) {
|
||||
- if (errno == ENOENT)
|
||||
- continue;
|
||||
- return log_device_debug_errno(dev, errno, "Failed to stat %s: %m", dirname);
|
||||
- }
|
||||
-
|
||||
- if (symlink(data, filename) < 0) {
|
||||
- if (errno == ENOENT)
|
||||
- continue;
|
||||
- return log_device_debug_errno(dev, errno, "Failed to create symbolic link %s: %m", filename);
|
||||
- }
|
||||
-
|
||||
- /* The symlink was created. Check if the timestamp of directory is changed. */
|
||||
- r = update_timestamp(dev, dirname, &st);
|
||||
- if (r < 0)
|
||||
- return log_device_debug_errno(dev, r, "Failed to update timestamp of %s: %m", dirname);
|
||||
-
|
||||
- return 0;
|
||||
- }
|
||||
-
|
||||
- return log_device_debug_errno(dev, SYNTHETIC_ERRNO(ELOOP), "Failed to create symbolic link %s: %m", filename);
|
||||
-}
|
||||
-
|
||||
/* manage "stack of names" with possibly specified device priorities */
|
||||
static int link_update(sd_device *dev, const char *slink_in, bool add) {
|
||||
- _cleanup_free_ char *slink = NULL, *dirname = NULL;
|
||||
- const char *slink_name;
|
||||
+ _cleanup_(release_lock_file) LockFile lf = LOCK_FILE_INIT;
|
||||
+ _cleanup_free_ char *slink = NULL, *filename = NULL, *dirname = NULL;
|
||||
+ _cleanup_free_ char *target = NULL;
|
||||
+ const char *slink_name, *id;
|
||||
char name_enc[NAME_MAX+1];
|
||||
int r;
|
||||
|
||||
@@ -439,57 +275,56 @@ static int link_update(sd_device *dev, const char *slink_in, bool add) {
|
||||
return log_device_debug_errno(dev, SYNTHETIC_ERRNO(EINVAL),
|
||||
"Invalid symbolic link of device node: %s", slink);
|
||||
|
||||
+ r = device_get_device_id(dev, &id);
|
||||
+ if (r < 0)
|
||||
+ return log_device_debug_errno(dev, r, "Failed to get device id: %m");
|
||||
+
|
||||
(void) udev_node_escape_path(slink_name, name_enc, sizeof(name_enc));
|
||||
dirname = path_join("/run/udev/links", name_enc);
|
||||
if (!dirname)
|
||||
return log_oom_debug();
|
||||
|
||||
- r = update_stack_directory(dev, dirname, add);
|
||||
- if (r < 0)
|
||||
- return r;
|
||||
-
|
||||
- for (unsigned i = 0; i < LINK_UPDATE_MAX_RETRIES; i++) {
|
||||
- _cleanup_free_ char *target = NULL;
|
||||
- struct stat st1 = {}, st2 = {};
|
||||
-
|
||||
- if (i > 0) {
|
||||
- char buf[FORMAT_TIMESPAN_MAX];
|
||||
- usec_t delay = MIN_RANDOM_DELAY + random_u64_range(MAX_RANDOM_DELAY - MIN_RANDOM_DELAY);
|
||||
+ filename = path_join(dirname, id);
|
||||
+ if (!filename)
|
||||
+ return log_oom_debug();
|
||||
|
||||
- log_device_debug(dev, "Directory %s was updated, retrying to update devlink %s after %s.",
|
||||
- dirname, slink, format_timespan(buf, sizeof(buf), delay, USEC_PER_MSEC));
|
||||
- (void) usleep(delay);
|
||||
- }
|
||||
+ mkdir_parents(dirname, 0755);
|
||||
+ r = make_lock_file_for(dirname, LOCK_EX, &lf);
|
||||
+ if (r < 0)
|
||||
+ return log_error_errno(r, "failed to lock %s", dirname);
|
||||
|
||||
- if (stat(dirname, &st1) < 0 && errno != ENOENT)
|
||||
- return log_device_debug_errno(dev, errno, "Failed to stat %s: %m", dirname);
|
||||
+ if (!add) {
|
||||
+ if (unlink(filename) < 0 && errno != ENOENT)
|
||||
+ log_device_error_errno(dev, errno, "Failed to remove %s, ignoring: %m", filename);
|
||||
|
||||
- r = link_find_prioritized(dev, add, dirname, &target);
|
||||
+ (void) rmdir(dirname);
|
||||
+ } else {
|
||||
+ r = touch_file(filename, true, USEC_INFINITY, UID_INVALID, GID_INVALID, 0444);
|
||||
if (r < 0)
|
||||
- return log_device_debug_errno(dev, r, "Failed to determine device node with the highest priority for '%s': %m", slink);
|
||||
- if (r == 0) {
|
||||
+ return log_device_error_errno(dev, r, "Failed to create %s: %m", filename);
|
||||
+ }
|
||||
+
|
||||
+ r = link_find_prioritized(dev, add, dirname, &target);
|
||||
+ if (r < 0)
|
||||
+ return log_device_error_errno(dev, r, "Failed to find highest priority for symlink '%s': %m", slink);
|
||||
+ if (r == 0) {
|
||||
+ if (!add) {
|
||||
log_device_debug(dev, "No reference left for '%s', removing", slink);
|
||||
|
||||
- if (unlink(slink) < 0 && errno != ENOENT)
|
||||
- log_device_debug_errno(dev, errno, "Failed to remove '%s', ignoring: %m", slink);
|
||||
+ if (unlink(slink) < 0)
|
||||
+ return log_device_error_errno(dev, errno,
|
||||
+ "Failed to remove '%s', ignoring: %m", slink);
|
||||
|
||||
(void) rmdir_parents(slink, "/dev");
|
||||
- return 0;
|
||||
}
|
||||
-
|
||||
- r = node_symlink(dev, target, slink);
|
||||
- if (r < 0)
|
||||
- return r;
|
||||
-
|
||||
- if (stat(dirname, &st2) < 0 && errno != ENOENT)
|
||||
- return log_device_debug_errno(dev, errno, "Failed to stat %s: %m", dirname);
|
||||
-
|
||||
- if (((st1.st_mode & S_IFMT) == 0 && (st2.st_mode & S_IFMT) == 0) ||
|
||||
- stat_inode_unmodified(&st1, &st2))
|
||||
- return 0;
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
- return -ELOOP;
|
||||
+ r = node_symlink(dev, target, slink);
|
||||
+ if (r < 0)
|
||||
+ (void) unlink(filename);
|
||||
+
|
||||
+ return r;
|
||||
}
|
||||
|
||||
static int device_get_devpath_by_devnum(sd_device *dev, char **ret) {
|
||||
--
|
||||
2.35.3
|
||||
|
183
1002-udev-add-option-to-generate-old-buggy-SCSI-serials.patch
Normal file
183
1002-udev-add-option-to-generate-old-buggy-SCSI-serials.patch
Normal file
|
@ -0,0 +1,183 @@
|
|||
From 217b7855c3b95c1b20458c58f3e7ef756728d3d5 Mon Sep 17 00:00:00 2001
|
||||
From: Jeff Mahoney <jeffm@suse.com>
|
||||
Date: Sun, 27 Jul 2014 14:20:36 +0200
|
||||
Subject: [PATCH 1002/1007] udev: add option to generate old 'buggy' SCSI
|
||||
serials
|
||||
|
||||
Prior to udev 184, scsi_id would truncate the last character of the model
|
||||
string when generating the ID_SERIAL value. If a system was installed
|
||||
prior to that fix being available in udev, there may be configuration
|
||||
information that refers to the truncated link.
|
||||
|
||||
This patch adds a --truncated-serial option and a udev rule will created
|
||||
the old truncated links.
|
||||
|
||||
Signed-off-by: Jeff Mahoney <jeffm@suse.com>
|
||||
|
||||
[fbui: forward ported from commit b5dafd57359b6e92b35dd419df2b2dd503057ebc]
|
||||
[fbui: fix error detected by the rule syntax checker in 61-persistent-storage-compat.rules]
|
||||
[fbui: adjust context]
|
||||
[fbui: fixes bnc#886852]
|
||||
---
|
||||
rules.d/61-persistent-storage-compat.rules | 4 ++++
|
||||
src/udev/scsi_id/scsi_id.c | 13 ++++++++++++-
|
||||
src/udev/scsi_id/scsi_id.h | 1 +
|
||||
src/udev/scsi_id/scsi_serial.c | 17 +++++++++++------
|
||||
4 files changed, 28 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/rules.d/61-persistent-storage-compat.rules b/rules.d/61-persistent-storage-compat.rules
|
||||
index bd229f619b..a49e5e54eb 100644
|
||||
--- a/rules.d/61-persistent-storage-compat.rules
|
||||
+++ b/rules.d/61-persistent-storage-compat.rules
|
||||
@@ -126,6 +126,10 @@ ENV{DEVTYPE}=="disk", ENV{ID_BUS}=="ata|nvme|scsi", DEVPATH!="*/virtual/*", IMPO
|
||||
ENV{DEVTYPE}=="disk", ENV{ID_PATH_COMPAT2}=="?*", SYMLINK+="disk/by-path/$env{ID_PATH_COMPAT2}"
|
||||
ENV{DEVTYPE}=="partition", ENV{ID_PATH_COMPAT2}=="?*", SYMLINK+="disk/by-path/$env{ID_PATH_COMPAT2}-part%n"
|
||||
|
||||
+# scsi compat links for ATA devices (for compatibility with udev < 184) (bnc#886852)
|
||||
+KERNEL=="sd*[!0-9]", ENV{ID_BUS}=="ata", PROGRAM=="scsi_id --truncated-serial --whitelisted --replace-whitespace -p0x80 -d$tempnode", RESULT=="?*", ENV{ID_SCSI_COMPAT_TRUNCATED}="$result", SYMLINK+="disk/by-id/scsi-$env{ID_SCSI_COMPAT_TRUNCATED}"
|
||||
+KERNEL=="sd*[0-9]", ENV{ID_SCSI_COMPAT_TRUNCATED}=="?*", SYMLINK+="disk/by-id/scsi-$env{ID_SCSI_COMPAT_TRUNCATED}-part%n"
|
||||
+
|
||||
#
|
||||
# Generation #2
|
||||
#
|
||||
diff --git a/src/udev/scsi_id/scsi_id.c b/src/udev/scsi_id/scsi_id.c
|
||||
index b2d8154d86..a058880b8d 100644
|
||||
--- a/src/udev/scsi_id/scsi_id.c
|
||||
+++ b/src/udev/scsi_id/scsi_id.c
|
||||
@@ -37,6 +37,7 @@ static const struct option options[] = {
|
||||
{ "replace-whitespace", no_argument, NULL, 'u' },
|
||||
{ "sg-version", required_argument, NULL, 's' },
|
||||
{ "verbose", no_argument, NULL, 'v' },
|
||||
+ { "truncated-serial", no_argument, NULL, '9' },
|
||||
{ "version", no_argument, NULL, 'V' }, /* don't advertise -V */
|
||||
{ "export", no_argument, NULL, 'x' },
|
||||
{ "help", no_argument, NULL, 'h' },
|
||||
@@ -48,6 +49,7 @@ static bool dev_specified = false;
|
||||
static char config_file[MAX_PATH_LEN] = "/etc/scsi_id.config";
|
||||
static enum page_code default_page_code = PAGE_UNSPECIFIED;
|
||||
static int sg_version = 4;
|
||||
+static bool compat_truncated = false;
|
||||
static bool reformat_serial = false;
|
||||
static bool export = false;
|
||||
static char vendor_str[64];
|
||||
@@ -226,6 +228,7 @@ static void help(void) {
|
||||
" -g --whitelisted Treat device as whitelisted\n"
|
||||
" -u --replace-whitespace Replace all whitespace by underscores\n"
|
||||
" -v --verbose Verbose logging\n"
|
||||
+ " --truncated-serial truncated serial for compatibility with systems configured with by-id links created by udev < 184\n"
|
||||
" -x --export Print values as environment keys\n",
|
||||
program_invocation_short_name);
|
||||
}
|
||||
@@ -294,6 +297,10 @@ static int set_options(int argc, char **argv,
|
||||
log_open();
|
||||
break;
|
||||
|
||||
+ case '9':
|
||||
+ compat_truncated = true;
|
||||
+ break;
|
||||
+
|
||||
case 'V':
|
||||
printf("%s\n", GIT_VERSION);
|
||||
exit(EXIT_SUCCESS);
|
||||
@@ -430,6 +437,9 @@ static int scsi_id(char *maj_min_dev) {
|
||||
udev_replace_whitespace(dev_scsi.serial_short, serial_str, sizeof(serial_str)-1);
|
||||
udev_replace_chars(serial_str, NULL);
|
||||
printf("ID_SERIAL_SHORT=%s\n", serial_str);
|
||||
+ udev_replace_whitespace(dev_scsi.serial_compat, serial_str, sizeof(serial_str)-1);
|
||||
+ udev_replace_chars(serial_str, NULL);
|
||||
+ printf("ID_SERIAL_COMPAT=%s\n", serial_str);
|
||||
}
|
||||
if (dev_scsi.wwn[0] != '\0') {
|
||||
printf("ID_WWN=0x%s\n", dev_scsi.wwn);
|
||||
@@ -452,9 +462,10 @@ static int scsi_id(char *maj_min_dev) {
|
||||
}
|
||||
|
||||
if (reformat_serial) {
|
||||
+ char *p = compat_truncated ? dev_scsi.serial_compat : dev_scsi.serial;
|
||||
char serial_str[MAX_SERIAL_LEN];
|
||||
|
||||
- udev_replace_whitespace(dev_scsi.serial, serial_str, sizeof(serial_str)-1);
|
||||
+ udev_replace_whitespace(p, serial_str, sizeof(serial_str)-1);
|
||||
udev_replace_chars(serial_str, NULL);
|
||||
printf("%s\n", serial_str);
|
||||
goto out;
|
||||
diff --git a/src/udev/scsi_id/scsi_id.h b/src/udev/scsi_id/scsi_id.h
|
||||
index 9ab3341855..b8cb1e5e2e 100644
|
||||
--- a/src/udev/scsi_id/scsi_id.h
|
||||
+++ b/src/udev/scsi_id/scsi_id.h
|
||||
@@ -32,6 +32,7 @@ struct scsi_id_device {
|
||||
char kernel[64];
|
||||
char serial[MAX_SERIAL_LEN];
|
||||
char serial_short[MAX_SERIAL_LEN];
|
||||
+ char serial_compat[MAX_SERIAL_LEN];
|
||||
unsigned type;
|
||||
int use_sg;
|
||||
|
||||
diff --git a/src/udev/scsi_id/scsi_serial.c b/src/udev/scsi_id/scsi_serial.c
|
||||
index 489f5ad16a..04fc5f7cc9 100644
|
||||
--- a/src/udev/scsi_id/scsi_serial.c
|
||||
+++ b/src/udev/scsi_id/scsi_serial.c
|
||||
@@ -83,7 +83,7 @@ static const char hex_str[]="0123456789abcdef";
|
||||
#define SG_ERR_CAT_OTHER 99 /* Some other error/warning */
|
||||
|
||||
static int do_scsi_page80_inquiry(struct scsi_id_device *dev_scsi, int fd,
|
||||
- char *serial, char *serial_short, int max_len);
|
||||
+ char *serial, char *serial_short, char *serial_compat, int max_len);
|
||||
|
||||
static int sg_err_category_new(int scsi_status, int msg_status, int
|
||||
host_status, int driver_status, const
|
||||
@@ -557,7 +557,7 @@ static int do_scsi_page83_inquiry(struct scsi_id_device *dev_scsi, int fd,
|
||||
unsigned char page_83[SCSI_INQ_BUFF_LEN];
|
||||
|
||||
/* also pick up the page 80 serial number */
|
||||
- do_scsi_page80_inquiry(dev_scsi, fd, NULL, unit_serial_number, MAX_SERIAL_LEN);
|
||||
+ do_scsi_page80_inquiry(dev_scsi, fd, NULL, unit_serial_number, NULL, MAX_SERIAL_LEN);
|
||||
|
||||
memzero(page_83, SCSI_INQ_BUFF_LEN);
|
||||
retval = scsi_inquiry(dev_scsi, fd, 1, PAGE_83, page_83,
|
||||
@@ -697,7 +697,7 @@ static int do_scsi_page83_prespc3_inquiry(struct scsi_id_device *dev_scsi, int f
|
||||
|
||||
/* Get unit serial number VPD page */
|
||||
static int do_scsi_page80_inquiry(struct scsi_id_device *dev_scsi, int fd,
|
||||
- char *serial, char *serial_short, int max_len) {
|
||||
+ char *serial, char *serial_short, char *serial_compat, int max_len) {
|
||||
int retval;
|
||||
int ser_ind;
|
||||
int i;
|
||||
@@ -730,9 +730,14 @@ static int do_scsi_page80_inquiry(struct scsi_id_device *dev_scsi, int fd,
|
||||
ser_ind = append_vendor_model(dev_scsi, serial + 1);
|
||||
if (ser_ind < 0)
|
||||
return 1;
|
||||
+ if (serial_compat)
|
||||
+ strcpy(serial_compat, serial);
|
||||
ser_ind++; /* for the leading 'S' */
|
||||
- for (i = 4; i < len + 4; i++, ser_ind++)
|
||||
+ for (i = 4; i < len + 4; i++, ser_ind++) {
|
||||
serial[ser_ind] = buf[i];
|
||||
+ if (serial_compat)
|
||||
+ serial_compat[ser_ind - 1] = buf[i];
|
||||
+ }
|
||||
}
|
||||
if (serial_short) {
|
||||
memcpy(serial_short, buf + 4, len);
|
||||
@@ -804,7 +809,7 @@ int scsi_get_serial(struct scsi_id_device *dev_scsi, const char *devname,
|
||||
return 1;
|
||||
|
||||
if (page_code == PAGE_80) {
|
||||
- if (do_scsi_page80_inquiry(dev_scsi, fd, dev_scsi->serial, dev_scsi->serial_short, len)) {
|
||||
+ if (do_scsi_page80_inquiry(dev_scsi, fd, dev_scsi->serial, dev_scsi->serial_short, dev_scsi->serial_compat, len)) {
|
||||
retval = 1;
|
||||
goto completed;
|
||||
} else {
|
||||
@@ -878,7 +883,7 @@ int scsi_get_serial(struct scsi_id_device *dev_scsi, const char *devname,
|
||||
for (ind = 4; ind <= page0[3] + 3; ind++)
|
||||
if (page0[ind] == PAGE_80)
|
||||
if (!do_scsi_page80_inquiry(dev_scsi, fd,
|
||||
- dev_scsi->serial, dev_scsi->serial_short, len)) {
|
||||
+ dev_scsi->serial, dev_scsi->serial_short, dev_scsi->serial_compat, len)) {
|
||||
/*
|
||||
* Success
|
||||
*/
|
||||
--
|
||||
2.31.1
|
||||
|
113
1003-logind-store-a-timestamp-when-the-ACPI-power-button-.patch
Normal file
113
1003-logind-store-a-timestamp-when-the-ACPI-power-button-.patch
Normal file
|
@ -0,0 +1,113 @@
|
|||
From 95da8cb13e13d7a85ddcc810784900e71298de6e Mon Sep 17 00:00:00 2001
|
||||
From: Federico Mena Quintero <federico@gnome.org>
|
||||
Date: Thu, 16 Jun 2016 17:38:44 -0500
|
||||
Subject: [PATCH 1003/1007] logind: store a timestamp when the ACPI power
|
||||
button is pressed
|
||||
|
||||
When we get a D-Bus call to shutdown, we'll use the corresponding
|
||||
timestamp to see if this call is due to GDM responding to the ACPI
|
||||
power button itself, or just due to any random program calling the
|
||||
D-Bus shutdown method.
|
||||
|
||||
[federico: fixes bsc#981830]
|
||||
[federico: fixes bsc#888612]
|
||||
[fbui: fixes bsc#1072933]
|
||||
---
|
||||
src/basic/login-util.h | 3 ++-
|
||||
src/login/logind-action.c | 4 ++++
|
||||
src/login/logind-dbus.c | 19 +++++++++++++++++--
|
||||
3 files changed, 23 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/basic/login-util.h b/src/basic/login-util.h
|
||||
index 841fd324f1..2b606873e0 100644
|
||||
--- a/src/basic/login-util.h
|
||||
+++ b/src/basic/login-util.h
|
||||
@@ -8,10 +8,11 @@
|
||||
#define SD_LOGIND_REBOOT_VIA_KEXEC (UINT64_C(1) << 1)
|
||||
|
||||
/* For internal use only */
|
||||
+#define SD_LOGIND_SLEEP_VERB (UINT64_C(1) << 62)
|
||||
#define SD_LOGIND_INTERACTIVE (UINT64_C(1) << 63)
|
||||
|
||||
#define SD_LOGIND_SHUTDOWN_AND_SLEEP_FLAGS_PUBLIC (SD_LOGIND_ROOT_CHECK_INHIBITORS|SD_LOGIND_REBOOT_VIA_KEXEC)
|
||||
-#define SD_LOGIND_SHUTDOWN_AND_SLEEP_FLAGS_ALL (SD_LOGIND_SHUTDOWN_AND_SLEEP_FLAGS_PUBLIC|SD_LOGIND_INTERACTIVE)
|
||||
+#define SD_LOGIND_SHUTDOWN_AND_SLEEP_FLAGS_ALL (SD_LOGIND_SHUTDOWN_AND_SLEEP_FLAGS_PUBLIC|SD_LOGIND_INTERACTIVE|SD_LOGIND_SLEEP_VERB)
|
||||
|
||||
bool session_id_valid(const char *id);
|
||||
|
||||
diff --git a/src/login/logind-action.c b/src/login/logind-action.c
|
||||
index 8ed066c25e..bc6fffd075 100644
|
||||
--- a/src/login/logind-action.c
|
||||
+++ b/src/login/logind-action.c
|
||||
@@ -7,6 +7,7 @@
|
||||
#include "bus-util.h"
|
||||
#include "conf-parser.h"
|
||||
#include "format-util.h"
|
||||
+#include "fs-util.h"
|
||||
#include "logind-action.h"
|
||||
#include "logind-dbus.h"
|
||||
#include "logind-session-dbus.h"
|
||||
@@ -83,6 +84,9 @@ int manager_handle_action(
|
||||
|
||||
/* If the key handling is inhibited, don't do anything */
|
||||
if (inhibit_key > 0) {
|
||||
+ if (inhibit_key == INHIBIT_HANDLE_POWER_KEY)
|
||||
+ (void) touch("/run/systemd/acpi-shutdown");
|
||||
+
|
||||
if (manager_is_inhibited(m, inhibit_key, INHIBIT_BLOCK, NULL, true, false, 0, NULL)) {
|
||||
log_debug("Refusing %s operation, %s is inhibited.",
|
||||
handle_action_to_string(handle),
|
||||
diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c
|
||||
index 19c3f9bd6e..1f33740357 100644
|
||||
--- a/src/login/logind-dbus.c
|
||||
+++ b/src/login/logind-dbus.c
|
||||
@@ -1784,6 +1784,7 @@ static int verify_shutdown_creds(
|
||||
|
||||
_cleanup_(sd_bus_creds_unrefp) sd_bus_creds *creds = NULL;
|
||||
bool multiple_sessions, blocked, interactive;
|
||||
+ bool shutdown_through_acpi;
|
||||
uid_t uid;
|
||||
int r;
|
||||
|
||||
@@ -1808,7 +1809,19 @@ static int verify_shutdown_creds(
|
||||
blocked = manager_is_inhibited(m, w, INHIBIT_BLOCK, NULL, false, true, uid, NULL);
|
||||
interactive = flags & SD_LOGIND_INTERACTIVE;
|
||||
|
||||
- if (multiple_sessions && action_multiple_sessions) {
|
||||
+ shutdown_through_acpi = false;
|
||||
+ if (access("/run/systemd/acpi-shutdown", F_OK) == 0) {
|
||||
+ struct stat buf;
|
||||
+
|
||||
+ if (!(flags & SD_LOGIND_SLEEP_VERB) &&
|
||||
+ stat("/run/systemd/acpi-shutdown", &buf) == 0)
|
||||
+ /* FIXME: this is really ugly. */
|
||||
+ shutdown_through_acpi = (time(NULL) - buf.st_mtime) <= 65;
|
||||
+
|
||||
+ unlink("/run/systemd/acpi-shutdown");
|
||||
+ }
|
||||
+
|
||||
+ if (multiple_sessions && action_multiple_sessions && !shutdown_through_acpi) {
|
||||
r = bus_verify_polkit_async(message, CAP_SYS_BOOT, action_multiple_sessions, NULL, interactive, UID_INVALID, &m->polkit_registry, error);
|
||||
if (r < 0)
|
||||
return r;
|
||||
@@ -1831,7 +1844,7 @@ static int verify_shutdown_creds(
|
||||
}
|
||||
}
|
||||
|
||||
- if (!multiple_sessions && !blocked && action) {
|
||||
+ if (!multiple_sessions && !blocked && action && !shutdown_through_acpi) {
|
||||
r = bus_verify_polkit_async(message, CAP_SYS_BOOT, action, NULL, interactive, UID_INVALID, &m->polkit_registry, error);
|
||||
if (r < 0)
|
||||
return r;
|
||||
@@ -1903,6 +1916,8 @@ static int method_do_shutdown_or_sleep(
|
||||
"Sleep verb \"%s\" not supported", sleep_operation_to_string(sleep_operation));
|
||||
if (r < 0)
|
||||
return r;
|
||||
+
|
||||
+ flags |= SD_LOGIND_SLEEP_VERB;
|
||||
}
|
||||
|
||||
r = verify_shutdown_creds(m, message, w, action, action_multiple_sessions,
|
||||
--
|
||||
2.31.1
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
From 7f1527dfc0e606ddf41738c2d871058903ac5cb4 Mon Sep 17 00:00:00 2001
|
||||
From: Martin Wilck <mwilck@suse.com>
|
||||
Date: Mon, 16 Apr 2018 23:03:27 +0200
|
||||
Subject: [PATCH 1004/1007] udev: don't create by-partlabel/primary and
|
||||
.../logical symlinks
|
||||
|
||||
These links are created by libstorage / parted by default. They are ambiguous
|
||||
and may be present hundred- or thousandfold on large systems. They are
|
||||
meaningless for device identification and may slow down udev processing. They
|
||||
aren't used anywhere. Don't create them.
|
||||
|
||||
A service has been added to detect at boot cases that likely need to be fixed:
|
||||
a warning is thrown at both the console and syslog to encourage sysadmin to
|
||||
consult the relevant TID explaining how to permanently fix the issue.
|
||||
|
||||
[fbui: added the detection part]
|
||||
[fbui: fixes bsc#1089761]
|
||||
---
|
||||
rules.d/60-persistent-storage.rules | 2 +-
|
||||
units/detect-part-label-duplicates.service | 16 ++++++++++++++++
|
||||
units/meson.build | 2 ++
|
||||
3 files changed, 19 insertions(+), 1 deletion(-)
|
||||
create mode 100644 units/detect-part-label-duplicates.service
|
||||
|
||||
diff --git a/rules.d/60-persistent-storage.rules b/rules.d/60-persistent-storage.rules
|
||||
index 6ac17f2b64..450c271678 100644
|
||||
--- a/rules.d/60-persistent-storage.rules
|
||||
+++ b/rules.d/60-persistent-storage.rules
|
||||
@@ -119,6 +119,6 @@ ENV{DEVTYPE}=="partition", ENV{ID_WWN_WITH_EXTENSION}=="?*", SYMLINK+="disk/by-i
|
||||
|
||||
# by-partlabel/by-partuuid links (partition metadata)
|
||||
ENV{ID_PART_ENTRY_UUID}=="?*", SYMLINK+="disk/by-partuuid/$env{ID_PART_ENTRY_UUID}"
|
||||
-ENV{ID_PART_ENTRY_SCHEME}=="gpt", ENV{ID_PART_ENTRY_NAME}=="?*", SYMLINK+="disk/by-partlabel/$env{ID_PART_ENTRY_NAME}"
|
||||
+ENV{ID_PART_ENTRY_SCHEME}=="gpt", ENV{ID_PART_ENTRY_NAME}=="?*", ENV{ID_PART_ENTRY_NAME}!="primary|logical", SYMLINK+="disk/by-partlabel/$env{ID_PART_ENTRY_NAME}"
|
||||
|
||||
LABEL="persistent_storage_end"
|
||||
diff --git a/units/detect-part-label-duplicates.service b/units/detect-part-label-duplicates.service
|
||||
new file mode 100644
|
||||
index 0000000000..11a187c763
|
||||
--- /dev/null
|
||||
+++ b/units/detect-part-label-duplicates.service
|
||||
@@ -0,0 +1,16 @@
|
||||
+[Unit]
|
||||
+Description=Detect if the system suffers from bsc#1089761
|
||||
+ConditionDirectoryNotEmpty=/run/udev/data
|
||||
+
|
||||
+[Service]
|
||||
+RemainAfterExit=true
|
||||
+StandardOutput=journal+console
|
||||
+SyslogLevel=warning
|
||||
+ExecStart=/bin/sh -c " \
|
||||
+ if [ $(grep -r "E:ID_PART_ENTRY_NAME=primary" /run/udev/data | wc -l) -ge 100 ]; then \
|
||||
+ echo 'Warning: a high number of partitions uses \"primary\" or \"logical\" as'; \
|
||||
+ echo 'partition label name, which may cause slow-down in the boot process.'; \
|
||||
+ echo 'To prevent it, a workaround is temporarly in place but we recommend to'; \
|
||||
+ echo 'refer to TID #7023057 in order to permanently fix this issue (as the'; \
|
||||
+ echo 'workaround will be dropped in the future).'; \
|
||||
+ fi"
|
||||
diff --git a/units/meson.build b/units/meson.build
|
||||
index 17e9ead9c1..86e2f77b95 100644
|
||||
--- a/units/meson.build
|
||||
+++ b/units/meson.build
|
||||
@@ -13,6 +13,8 @@ units = [
|
||||
['veritysetup-pre.target', 'HAVE_LIBCRYPTSETUP'],
|
||||
['veritysetup.target', 'HAVE_LIBCRYPTSETUP',
|
||||
'sysinit.target.wants/'],
|
||||
+ ['detect-part-label-duplicates.service', '',
|
||||
+ 'sysinit.target.wants/'],
|
||||
['dev-hugepages.mount', '',
|
||||
'sysinit.target.wants/'],
|
||||
['dev-mqueue.mount', '',
|
||||
--
|
||||
2.31.1
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
From 6ec3bc08b0b5b37844e02c37caa72c15d27f98d6 Mon Sep 17 00:00:00 2001
|
||||
From: Franck Bui <fbui@suse.com>
|
||||
Date: Tue, 21 Aug 2018 16:21:53 +0200
|
||||
Subject: [PATCH 1005/1007] udev: optionally disable the generation of the
|
||||
'partlabel' symlinks
|
||||
|
||||
We already addressed bsc#1089761 to prevent the generation of
|
||||
"primary" or "logical".
|
||||
|
||||
But it wasn't enough: some users could also have used their own
|
||||
name other than "primary" and "logical" of course...
|
||||
|
||||
For them, we introduce "udev.no-partlabel-links" kernel command-line
|
||||
option to prevent the generation of all by-partlabel symlinks
|
||||
regardless of the name which was choosen.
|
||||
|
||||
This option should be *only* used to address performance issue related
|
||||
to bsc#1089761 because it will be removed as soon as the udev
|
||||
performance issue will be addressed.
|
||||
|
||||
[fbui: fixes bsc#1089761]
|
||||
---
|
||||
rules.d/60-persistent-storage.rules | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/rules.d/60-persistent-storage.rules b/rules.d/60-persistent-storage.rules
|
||||
index 450c271678..ffffbf7bcc 100644
|
||||
--- a/rules.d/60-persistent-storage.rules
|
||||
+++ b/rules.d/60-persistent-storage.rules
|
||||
@@ -119,6 +119,8 @@ ENV{DEVTYPE}=="partition", ENV{ID_WWN_WITH_EXTENSION}=="?*", SYMLINK+="disk/by-i
|
||||
|
||||
# by-partlabel/by-partuuid links (partition metadata)
|
||||
ENV{ID_PART_ENTRY_UUID}=="?*", SYMLINK+="disk/by-partuuid/$env{ID_PART_ENTRY_UUID}"
|
||||
-ENV{ID_PART_ENTRY_SCHEME}=="gpt", ENV{ID_PART_ENTRY_NAME}=="?*", ENV{ID_PART_ENTRY_NAME}!="primary|logical", SYMLINK+="disk/by-partlabel/$env{ID_PART_ENTRY_NAME}"
|
||||
+
|
||||
+IMPORT{cmdline}="udev.no-partlabel-links"
|
||||
+ENV{ID_PART_ENTRY_SCHEME}=="gpt", ENV{ID_PART_ENTRY_NAME}=="?*", ENV{ID_PART_ENTRY_NAME}!="primary|logical", ENV{udev.no-partlabel-links}!="?*", SYMLINK+="disk/by-partlabel/$env{ID_PART_ENTRY_NAME}"
|
||||
|
||||
LABEL="persistent_storage_end"
|
||||
--
|
||||
2.31.1
|
||||
|
200
1006-logind-keep-backward-compatibility-with-UserTasksMax.patch
Normal file
200
1006-logind-keep-backward-compatibility-with-UserTasksMax.patch
Normal file
|
@ -0,0 +1,200 @@
|
|||
From 296e3938b60610679e333ca5c0757d4ceeb23a87 Mon Sep 17 00:00:00 2001
|
||||
From: Franck Bui <fbui@suse.com>
|
||||
Date: Tue, 6 Nov 2018 11:51:26 +0100
|
||||
Subject: [PATCH 1006/1007] logind: keep backward compatibility with
|
||||
UserTasksMax= in logind.conf
|
||||
|
||||
Since commit 284149392755f086d0a71, UserTasksMax= support has been simply
|
||||
dropped.
|
||||
|
||||
A generator is used to automatically create an appropriate dropin that has the
|
||||
same effect. However since the snippet is generated in /run, sysadmin is
|
||||
encouraged to copy it in /etc to make it persistent.
|
||||
|
||||
The main advantages to use a generator are:
|
||||
|
||||
- sysadmin is aware of this backward incompatible change
|
||||
|
||||
- he will be the one who will fix logind.conf manually (to remove the use of
|
||||
UserTasksMax=)
|
||||
|
||||
- he will decide how to name the snippet and possibly merge it with an
|
||||
existing one
|
||||
|
||||
Expect this generator to be dropped in the future.
|
||||
---
|
||||
meson.build | 8 ++++
|
||||
src/login/compat-tasks-max-generator.c | 56 ++++++++++++++++++++++++++
|
||||
src/login/logind-core.c | 2 +
|
||||
src/login/logind-gperf.gperf | 2 +-
|
||||
src/login/logind-user.c | 16 +++++---
|
||||
src/login/logind.c | 2 +
|
||||
src/login/logind.h | 3 ++
|
||||
7 files changed, 82 insertions(+), 7 deletions(-)
|
||||
create mode 100644 src/login/compat-tasks-max-generator.c
|
||||
|
||||
diff --git a/meson.build b/meson.build
|
||||
index 0760a793ac..40885a81ae 100644
|
||||
--- a/meson.build
|
||||
+++ b/meson.build
|
||||
@@ -2132,6 +2132,14 @@ if conf.get('ENABLE_LOGIND') == 1
|
||||
install_rpath : rootlibexecdir,
|
||||
install : true,
|
||||
install_dir : rootlibexecdir)
|
||||
+
|
||||
+ executable('logind-compat-tasks-max-generator',
|
||||
+ 'src/login/compat-tasks-max-generator.c',
|
||||
+ include_directories : includes,
|
||||
+ link_with : [libshared, liblogind_core],
|
||||
+ install_rpath : rootlibexecdir,
|
||||
+ install : true,
|
||||
+ install_dir : systemgeneratordir)
|
||||
endif
|
||||
|
||||
if conf.get('HAVE_PAM') == 1
|
||||
diff --git a/src/login/compat-tasks-max-generator.c b/src/login/compat-tasks-max-generator.c
|
||||
new file mode 100644
|
||||
index 0000000000..2fe1c92ba7
|
||||
--- /dev/null
|
||||
+++ b/src/login/compat-tasks-max-generator.c
|
||||
@@ -0,0 +1,56 @@
|
||||
+#include <stdint.h>
|
||||
+#include <sys/types.h>
|
||||
+#include <sys/stat.h>
|
||||
+
|
||||
+#include "alloc-util.h"
|
||||
+#include "dropin.h"
|
||||
+#include "generator.h"
|
||||
+#include "logind.h"
|
||||
+#include "path-util.h"
|
||||
+
|
||||
+static int read_manager_configuration(char **user_tasks_max) {
|
||||
+ Manager m = {};
|
||||
+ int r;
|
||||
+
|
||||
+ manager_reset_config(&m);
|
||||
+ m.user_tasks_max = NULL;
|
||||
+
|
||||
+ r = manager_parse_config_file(&m);
|
||||
+ if (r < 0)
|
||||
+ return log_warning_errno(r, "Failed to parse logind.conf: %m");
|
||||
+
|
||||
+ if (!m.user_tasks_max)
|
||||
+ return 0;
|
||||
+
|
||||
+ *user_tasks_max = m.user_tasks_max;
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
+static int run(const char *dest, const char *dest_early, const char *dest_late) {
|
||||
+ _cleanup_free_ char *p = NULL;
|
||||
+ char *user_tasks_max;
|
||||
+ int r = 0;
|
||||
+
|
||||
+ umask(0022);
|
||||
+
|
||||
+ r = read_manager_configuration(&user_tasks_max);
|
||||
+ if (r == 0)
|
||||
+ return EXIT_SUCCESS;
|
||||
+ if (r < 0)
|
||||
+ return EXIT_FAILURE;
|
||||
+
|
||||
+ p = path_join(dest, "user-.slice.d", "50-limits.conf");
|
||||
+ if (!p)
|
||||
+ return EXIT_FAILURE;
|
||||
+
|
||||
+ log_warning("Creating %s to keep compatibility\n"
|
||||
+ "Please copy the snippet in /etc/systemd/system/user-.slice.d/ and remove any uses of UserTasksMax=\n", p);
|
||||
+
|
||||
+ r = write_drop_in_format(dest, "user-.slice", 50, "limits",
|
||||
+ "# Automatically generated by logind-compat-tasks-max-generator\n\n"
|
||||
+ "[Slice]\nTasksMax=%s", user_tasks_max);
|
||||
+
|
||||
+ return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
|
||||
+}
|
||||
+
|
||||
+DEFINE_MAIN_GENERATOR_FUNCTION(run);
|
||||
diff --git a/src/login/logind-core.c b/src/login/logind-core.c
|
||||
index 22031f485a..585971c738 100644
|
||||
--- a/src/login/logind-core.c
|
||||
+++ b/src/login/logind-core.c
|
||||
@@ -53,6 +53,8 @@ void manager_reset_config(Manager *m) {
|
||||
|
||||
m->holdoff_timeout_usec = 30 * USEC_PER_SEC;
|
||||
|
||||
+ m->user_tasks_max = mfree(m->user_tasks_max);
|
||||
+
|
||||
m->idle_action_usec = 30 * USEC_PER_MINUTE;
|
||||
m->idle_action = HANDLE_IGNORE;
|
||||
|
||||
diff --git a/src/login/logind-gperf.gperf b/src/login/logind-gperf.gperf
|
||||
index 25e429c5a3..0b99c9f58d 100644
|
||||
--- a/src/login/logind-gperf.gperf
|
||||
+++ b/src/login/logind-gperf.gperf
|
||||
@@ -45,4 +45,4 @@ Login.RuntimeDirectoryInodesMax, config_parse_uint64, 0, offse
|
||||
Login.RemoveIPC, config_parse_bool, 0, offsetof(Manager, remove_ipc)
|
||||
Login.InhibitorsMax, config_parse_uint64, 0, offsetof(Manager, inhibitors_max)
|
||||
Login.SessionsMax, config_parse_uint64, 0, offsetof(Manager, sessions_max)
|
||||
-Login.UserTasksMax, config_parse_compat_user_tasks_max, 0, 0
|
||||
+Login.UserTasksMax, config_parse_compat_user_tasks_max, 0, offsetof(Manager, user_tasks_max)
|
||||
diff --git a/src/login/logind-user.c b/src/login/logind-user.c
|
||||
index a2c468e8dd..4b753d8929 100644
|
||||
--- a/src/login/logind-user.c
|
||||
+++ b/src/login/logind-user.c
|
||||
@@ -942,16 +942,20 @@ int config_parse_compat_user_tasks_max(
|
||||
void *data,
|
||||
void *userdata) {
|
||||
|
||||
+ char **m = data;
|
||||
+ int r;
|
||||
+
|
||||
assert(filename);
|
||||
assert(lvalue);
|
||||
assert(rvalue);
|
||||
|
||||
- log_syntax(unit, LOG_NOTICE, filename, line, 0,
|
||||
- "Support for option %s= has been removed.",
|
||||
+ log_syntax(unit, LOG_WARNING, filename, line, 0,
|
||||
+ "Support for option %s= is deprecated and will be removed.",
|
||||
lvalue);
|
||||
- log_info("Hint: try creating /etc/systemd/system/user-.slice.d/50-limits.conf with:\n"
|
||||
- " [Slice]\n"
|
||||
- " TasksMax=%s",
|
||||
- rvalue);
|
||||
+
|
||||
+ r = free_and_strdup(m, rvalue);
|
||||
+ if (r < 0)
|
||||
+ return log_oom();
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
diff --git a/src/login/logind.c b/src/login/logind.c
|
||||
index ec52a57acb..2514e747cd 100644
|
||||
--- a/src/login/logind.c
|
||||
+++ b/src/login/logind.c
|
||||
@@ -164,6 +164,8 @@ static Manager* manager_unref(Manager *m) {
|
||||
strv_free(m->kill_only_users);
|
||||
strv_free(m->kill_exclude_users);
|
||||
|
||||
+ free(m->user_tasks_max);
|
||||
+
|
||||
free(m->scheduled_shutdown_type);
|
||||
free(m->scheduled_shutdown_tty);
|
||||
free(m->wall_message);
|
||||
diff --git a/src/login/logind.h b/src/login/logind.h
|
||||
index 761763a476..eefea7c227 100644
|
||||
--- a/src/login/logind.h
|
||||
+++ b/src/login/logind.h
|
||||
@@ -124,6 +124,9 @@ struct Manager {
|
||||
|
||||
uint64_t runtime_dir_size;
|
||||
uint64_t runtime_dir_inodes;
|
||||
+
|
||||
+ char *user_tasks_max;
|
||||
+
|
||||
uint64_t sessions_max;
|
||||
uint64_t inhibitors_max;
|
||||
|
||||
--
|
||||
2.31.1
|
||||
|
187
1007-sysv-restore-support-for-halt.local.patch
Normal file
187
1007-sysv-restore-support-for-halt.local.patch
Normal file
|
@ -0,0 +1,187 @@
|
|||
From 3e49abe2fbae626c61af73d163f6e74be54fed2b Mon Sep 17 00:00:00 2001
|
||||
From: Franck Bui <fbui@suse.com>
|
||||
Date: Wed, 30 Sep 2020 21:20:32 +0200
|
||||
Subject: [PATCH 1007/1007] sysv: restore support for halt.local
|
||||
|
||||
This patch basically reverts the following commits:
|
||||
|
||||
- commit 44508946534eee032927c263b79464832656dd6e.
|
||||
"Drop support for /usr/sbin/halt.local"
|
||||
|
||||
- commit c0d11245d2bdcf2a4333c3d49c973d83dfbe3791.
|
||||
"Drop no longer needed halt-local.service.in"
|
||||
|
||||
The paths of the scripts in man/systemd-rc-local-generator.xml have been
|
||||
changed to match those used by SUSE.
|
||||
|
||||
The use of halt.local is now deprecated and its usage is logged at notice
|
||||
level.
|
||||
---
|
||||
docs/DISTRO_PORTING.md | 1 +
|
||||
man/custom-entities.ent.in | 1 +
|
||||
man/systemd-rc-local-generator.xml | 17 +++++++++++++---
|
||||
meson.build | 2 ++
|
||||
meson_options.txt | 2 ++
|
||||
src/rc-local-generator/rc-local-generator.c | 8 ++++++++
|
||||
units/halt-local.service.in | 22 +++++++++++++++++++++
|
||||
units/meson.build | 1 +
|
||||
8 files changed, 51 insertions(+), 3 deletions(-)
|
||||
create mode 100644 units/halt-local.service.in
|
||||
|
||||
diff --git a/docs/DISTRO_PORTING.md b/docs/DISTRO_PORTING.md
|
||||
index 2e4782f401..8c2af4f82f 100644
|
||||
--- a/docs/DISTRO_PORTING.md
|
||||
+++ b/docs/DISTRO_PORTING.md
|
||||
@@ -17,6 +17,7 @@ distribution:
|
||||
* `-Dsysvinit-path=`
|
||||
* `-Dsysvrcnd-path=`
|
||||
* `-Drc-local=`
|
||||
+ * `-Dhalt-local=`
|
||||
* `-Dloadkeys-path=`
|
||||
* `-Dsetfont-path=`
|
||||
* `-Dtty-gid=`
|
||||
diff --git a/man/custom-entities.ent.in b/man/custom-entities.ent.in
|
||||
index 0e9a1b84e3..8da038c991 100644
|
||||
--- a/man/custom-entities.ent.in
|
||||
+++ b/man/custom-entities.ent.in
|
||||
@@ -11,6 +11,7 @@
|
||||
<!ENTITY KILL_USER_PROCESSES "{{ 'yes' if KILL_USER_PROCESSES else 'no' }}">
|
||||
<!ENTITY DEBUGTTY "{{DEBUGTTY}}">
|
||||
<!ENTITY RC_LOCAL_PATH "{{RC_LOCAL_PATH}}">
|
||||
+<!ENTITY RC_LOCAL_SCRIPT_PATH_STOP "{{RC_LOCAL_SCRIPT_PATH_STOP}}">
|
||||
<!ENTITY HIGH_RLIMIT_NOFILE "{{HIGH_RLIMIT_NOFILE}}">
|
||||
<!ENTITY DEFAULT_DNSSEC_MODE "{{DEFAULT_DNSSEC_MODE_STR}}">
|
||||
<!ENTITY DEFAULT_DNS_OVER_TLS_MODE "{{DEFAULT_DNS_OVER_TLS_MODE_STR}}">
|
||||
diff --git a/man/systemd-rc-local-generator.xml b/man/systemd-rc-local-generator.xml
|
||||
index f0e38ead47..39c1fc9340 100644
|
||||
--- a/man/systemd-rc-local-generator.xml
|
||||
+++ b/man/systemd-rc-local-generator.xml
|
||||
@@ -20,7 +20,7 @@
|
||||
<refnamediv>
|
||||
<refname>systemd-rc-local-generator</refname>
|
||||
<refname>rc-local.service</refname>
|
||||
- <refpurpose>Compatibility generator and service to start <filename>&RC_LOCAL_PATH;</filename> during boot</refpurpose>
|
||||
+ <refpurpose>Compatibility generator and service to start <filename>&RC_LOCAL_PATH;</filename> and <filename>&RC_LOCAL_SCRIPT_PATH_STOP;</filename> during boot and shutdown</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
@@ -53,11 +53,22 @@ Wants=network-online.target
|
||||
After=network-online.target
|
||||
</programlisting>
|
||||
|
||||
- <para>Support for <filename>&RC_LOCAL_PATH;</filename> is provided for compatibility with specific System
|
||||
- V systems only. However, it is strongly recommended to avoid making use of this script today, and instead
|
||||
+ <para><filename>systemd-rc-local-generator</filename> also checks whether
|
||||
+ <filename>&RC_LOCAL_SCRIPT_PATH_STOP;</filename> exists and is executable, and if it is pulls the
|
||||
+ <filename>halt-local.service</filename> unit into the shutdown process. This unit is responsible for
|
||||
+ running this script during later shutdown.</para>
|
||||
+
|
||||
+ <para>Support for <filename>&RC_LOCAL_PATH;</filename> and
|
||||
+ <filename>&RC_LOCAL_SCRIPT_PATH_STOP;</filename> is provided for compatibility with specific System V
|
||||
+ systems only. However, it is strongly recommended to avoid making use of this script today, and instead
|
||||
provide proper unit files with appropriate dependencies for any scripts to run during the boot process.
|
||||
Note that the path to the script is set at compile time and varies between distributions.</para>
|
||||
|
||||
+ <para>Please note that the support for <filename>&RC_LOCAL_SCRIPT_PATH_STOP;</filename> will be removed in
|
||||
+ the future. It is recommended to use the use the mechanism described in
|
||||
+ <citerefentry><refentrytitle>systemd-shutdown</refentrytitle><manvolnum>8</manvolnum></citerefentry>
|
||||
+ instead.</para>
|
||||
+
|
||||
<para><filename>systemd-rc-local-generator</filename> implements
|
||||
<citerefentry><refentrytitle>systemd.generator</refentrytitle><manvolnum>7</manvolnum></citerefentry>.</para>
|
||||
</refsect1>
|
||||
diff --git a/meson.build b/meson.build
|
||||
index 511024f28e..09f90c8bcf 100644
|
||||
--- a/meson.build
|
||||
+++ b/meson.build
|
||||
@@ -227,6 +227,7 @@ conf.set_quoted('PREFIX', prefixdir)
|
||||
conf.set_quoted('RANDOM_SEED', join_paths(randomseeddir, 'random-seed'))
|
||||
conf.set_quoted('RANDOM_SEED_DIR', randomseeddir)
|
||||
conf.set_quoted('RC_LOCAL_PATH', get_option('rc-local'))
|
||||
+conf.set_quoted('RC_LOCAL_SCRIPT_PATH_STOP', get_option('halt-local'))
|
||||
conf.set_quoted('ROOTBINDIR', rootbindir)
|
||||
conf.set_quoted('ROOTLIBDIR', rootlibdir)
|
||||
conf.set_quoted('ROOTLIBEXECDIR', rootlibexecdir)
|
||||
@@ -3758,6 +3759,7 @@ status = [
|
||||
'bash completions directory: @0@'.format(bashcompletiondir),
|
||||
'zsh completions directory: @0@'.format(zshcompletiondir),
|
||||
'extra start script: @0@'.format(get_option('rc-local')),
|
||||
+ 'extra stop script: @0@'.format(get_option('halt-local')),
|
||||
'debug shell: @0@ @ @1@'.format(get_option('debug-shell'),
|
||||
get_option('debug-tty')),
|
||||
'system UIDs: <=@0@ (alloc >=@1@)'.format(conf.get('SYSTEM_UID_MAX'),
|
||||
diff --git a/meson_options.txt b/meson_options.txt
|
||||
index cbefe7aa83..88fb91d5ec 100644
|
||||
--- a/meson_options.txt
|
||||
+++ b/meson_options.txt
|
||||
@@ -40,6 +40,8 @@ option('telinit-path', type : 'string', value : '/lib/sysvinit/telinit',
|
||||
description : 'path to telinit')
|
||||
option('rc-local', type : 'string',
|
||||
value : '/etc/rc.local')
|
||||
+option('halt-local', type : 'string',
|
||||
+ value : '/usr/sbin/halt.local')
|
||||
option('initrd', type : 'boolean',
|
||||
description : 'install services for use when running systemd in initrd')
|
||||
option('compat-mutable-uid-boundaries', type : 'boolean', value : 'false',
|
||||
diff --git a/src/rc-local-generator/rc-local-generator.c b/src/rc-local-generator/rc-local-generator.c
|
||||
index 99cffee3ec..96ee56854c 100644
|
||||
--- a/src/rc-local-generator/rc-local-generator.c
|
||||
+++ b/src/rc-local-generator/rc-local-generator.c
|
||||
@@ -65,6 +65,14 @@ static int run(const char *dest, const char *dest_early, const char *dest_late)
|
||||
r = add_symlink("rc-local.service", "multi-user.target");
|
||||
}
|
||||
|
||||
+ if (check_executable(RC_LOCAL_SCRIPT_PATH_STOP) >= 0) {
|
||||
+ log_debug("Automatically adding halt-local.service.");
|
||||
+ log_notice("Use of %s is deprecated, see systemd-shutdown(8) man page for an alternative.",
|
||||
+ RC_LOCAL_SCRIPT_PATH_STOP);
|
||||
+
|
||||
+ k = add_symlink("halt-local.service", "final.target");
|
||||
+ }
|
||||
+
|
||||
return r < 0 ? r : k;
|
||||
}
|
||||
|
||||
diff --git a/units/halt-local.service.in b/units/halt-local.service.in
|
||||
new file mode 100644
|
||||
index 0000000000..5fc78b5580
|
||||
--- /dev/null
|
||||
+++ b/units/halt-local.service.in
|
||||
@@ -0,0 +1,22 @@
|
||||
+# SPDX-License-Identifier: LGPL-2.1+
|
||||
+#
|
||||
+# This file is part of systemd.
|
||||
+#
|
||||
+# systemd is free software; you can redistribute it and/or modify it
|
||||
+# under the terms of the GNU Lesser General Public License as published by
|
||||
+# the Free Software Foundation; either version 2.1 of the License, or
|
||||
+# (at your option) any later version.
|
||||
+
|
||||
+[Unit]
|
||||
+Description={{RC_LOCAL_SCRIPT_PATH_STOP}} Compatibility
|
||||
+ConditionFileIsExecutable={{RC_LOCAL_SCRIPT_PATH_STOP}}
|
||||
+DefaultDependencies=no
|
||||
+After=shutdown.target
|
||||
+Before=final.target
|
||||
+
|
||||
+[Service]
|
||||
+Type=oneshot
|
||||
+ExecStart={{RC_LOCAL_SCRIPT_PATH_STOP}}
|
||||
+TimeoutSec=0
|
||||
+StandardOutput=tty
|
||||
+RemainAfterExit=yes
|
||||
diff --git a/units/meson.build b/units/meson.build
|
||||
index 72d9a48a60..c2364da948 100644
|
||||
--- a/units/meson.build
|
||||
+++ b/units/meson.build
|
||||
@@ -175,6 +175,7 @@ in_units = [
|
||||
'sysinit.target.wants/'],
|
||||
['quotaon.service', 'ENABLE_QUOTACHECK'],
|
||||
['rc-local.service', 'HAVE_SYSV_COMPAT'],
|
||||
+ ['halt-local.service', 'HAVE_SYSV_COMPAT'],
|
||||
['rescue.service', ''],
|
||||
['serial-getty@.service', ''],
|
||||
['systemd-backlight@.service', 'ENABLE_BACKLIGHT'],
|
||||
--
|
||||
2.31.1
|
||||
|
|
@ -0,0 +1,75 @@
|
|||
From 3a8fea22109e74e90307efa44fe103a266c9c90a Mon Sep 17 00:00:00 2001
|
||||
From: Franck Bui <fbui@suse.com>
|
||||
Date: Tue, 29 Jun 2021 16:54:56 +0200
|
||||
Subject: [PATCH 1008/1008] login: mark again framebuffer devices as
|
||||
master-of-seat devices
|
||||
|
||||
This reverts commit 6260d28b8a002a401eab7511f96fd62f471dccdb and all subsequent
|
||||
commits that addressed the regressions due to the initial change.
|
||||
|
||||
Upstream decided that frame-buffer devices were obsolete and DRM drivers
|
||||
should be used instead, see https://github.com/systemd/systemd/issues/10435.
|
||||
|
||||
However not all graphic chips have a DRM drivers currently and
|
||||
fallback to vesafb for example, which is graphic capable. There're
|
||||
probably more fallouts so this change seems a bit premature. It would
|
||||
still be possible to work around these cases by adding "nomodeset" to
|
||||
the kernel command line but the user-experience would be pretty bad.
|
||||
|
||||
Furthermore nobody has complained about the issue fixed by the switch
|
||||
to DRM driver so far. Only GDM reported a case where it doesn't handle
|
||||
the transition from frame-buffer to DRM during the boot process but
|
||||
GDM has been improved since then and the risk of introducing
|
||||
regressions through a distro minor update exists.
|
||||
|
||||
Hence let's keep the frame-buffer devices available a bit longer until
|
||||
simpledrm driver is out and drivers that don't export the DRM
|
||||
interface (such as nVidia, HyperV, vmware, ...) provide udev rules.
|
||||
|
||||
See bsc#1187154 for details.
|
||||
|
||||
[fbui: fixes bsc#1187154]
|
||||
---
|
||||
src/login/71-seat.rules.in | 21 +++++++++++++--------
|
||||
1 file changed, 13 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/src/login/71-seat.rules.in b/src/login/71-seat.rules.in
|
||||
index 25e4ee7e58..d9c173ec1b 100644
|
||||
--- a/src/login/71-seat.rules.in
|
||||
+++ b/src/login/71-seat.rules.in
|
||||
@@ -12,19 +12,24 @@ ACTION=="remove", GOTO="seat_end"
|
||||
TAG=="uaccess", SUBSYSTEM!="sound", TAG+="seat"
|
||||
SUBSYSTEM=="sound", KERNEL=="card*", TAG+="seat"
|
||||
SUBSYSTEM=="input", KERNEL=="input*", TAG+="seat"
|
||||
-SUBSYSTEM=="graphics", KERNEL=="fb[0-9]*", TAG+="seat"
|
||||
|
||||
# Assign keyboard and LCD backlights to the seat
|
||||
SUBSYSTEM=="leds", TAG+="seat"
|
||||
SUBSYSTEM=="backlight", TAG+="seat"
|
||||
|
||||
-# Allow efifb / uvesafb to be a master if KMS is disabled
|
||||
-SUBSYSTEM=="graphics", KERNEL=="fb[0-9]", IMPORT{cmdline}="nomodeset", TAG+="master-of-seat"
|
||||
-
|
||||
-# Allow any PCI graphics device to be a master and synthesize a seat if KMS
|
||||
-# is disabled and the kernel doesn't have a driver that would work with this device.
|
||||
-SUBSYSTEM=="pci", ENV{ID_PCI_CLASS_FROM_DATABASE}=="Display controller", \
|
||||
- ENV{DRIVER}=="", IMPORT{cmdline}="nomodeset", TAG+="seat", TAG+="master-of-seat"
|
||||
+# Upstream decided that frame-buffer devices were obsolete and DRM drivers
|
||||
+# should be used instead. However not all graphic chips have a DRM drivers
|
||||
+# currently and fallback to vesafb for example. There're probably more fallouts
|
||||
+# so this change seems a bit premature. It would still be possible to work
|
||||
+# around these cases by adding "nomodeset" to the kernel command line but the
|
||||
+# user-experience would be pretty bad.
|
||||
+#
|
||||
+# Hence let's keep the frame-buffer devices available a bit longer until
|
||||
+# simpledrm driver is out and drivers that don't export the DRM interface (such
|
||||
+# as nVidia, HyperV, vmware, ...) provide udev rules. See bsc#1187154 for
|
||||
+# details.
|
||||
+#
|
||||
+SUBSYSTEM=="graphics", KERNEL=="fb[0-9]*", TAG+="seat", TAG+="master-of-seat"
|
||||
|
||||
# Synthesize a seat for graphic devices without DRM and that fall back to fb
|
||||
# device instead. Such HWs are listed in hwdb.
|
||||
--
|
||||
2.31.1
|
||||
|
67
1009-Drop-or-soften-some-of-the-deprecation-warnings.patch
Normal file
67
1009-Drop-or-soften-some-of-the-deprecation-warnings.patch
Normal file
|
@ -0,0 +1,67 @@
|
|||
From f69b9903a941bfeafc879fda2a2988dcfe0dc17f Mon Sep 17 00:00:00 2001
|
||||
From: Franck Bui <fbui@suse.com>
|
||||
Date: Thu, 21 Oct 2021 11:29:31 +0200
|
||||
Subject: [PATCH 1009/1009] Drop or soften some of the deprecation warnings
|
||||
|
||||
- Don't taint systems using the hybrid hierarchy since it's the default on SLE.
|
||||
|
||||
- Reword the deprecation warning about KillMode=none (bsc#1193086)
|
||||
|
||||
- Decrease log level of messages about use of KillMode=none (jsc#PED-944)
|
||||
|
||||
[fbui: fixes bsc#1193086]
|
||||
[fbui: fixes jsc#PED-944]
|
||||
---
|
||||
src/core/load-fragment.c | 7 +++----
|
||||
src/core/manager.c | 2 +-
|
||||
src/core/unit.c | 2 +-
|
||||
3 files changed, 5 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c
|
||||
index cd07f3e60d..d73adc2e00 100644
|
||||
--- a/src/core/load-fragment.c
|
||||
+++ b/src/core/load-fragment.c
|
||||
@@ -665,11 +665,10 @@ int config_parse_kill_mode(
|
||||
}
|
||||
|
||||
if (m == KILL_NONE)
|
||||
- log_syntax(unit, LOG_WARNING, filename, line, 0,
|
||||
+ log_syntax(unit, LOG_DEBUG, filename, line, 0,
|
||||
"Unit configured to use KillMode=none. "
|
||||
- "This is unsafe, as it disables systemd's process lifecycle management for the service. "
|
||||
- "Please update your service to use a safer KillMode=, such as 'mixed' or 'control-group'. "
|
||||
- "Support for KillMode=none is deprecated and will eventually be removed.");
|
||||
+ "Support for KillMode=none is deprecated and will be eventually removed in future SLE versions. "
|
||||
+ "Please see SUSE TID https://www.suse.com/support/kb/doc/?id=000020394 for more details.");
|
||||
|
||||
*k = m;
|
||||
return 0;
|
||||
diff --git a/src/core/manager.c b/src/core/manager.c
|
||||
index 69ced2e3de..1625e76e21 100644
|
||||
--- a/src/core/manager.c
|
||||
+++ b/src/core/manager.c
|
||||
@@ -4838,7 +4838,7 @@ char *manager_taint_string(Manager *m) {
|
||||
if (access("/proc/cgroups", F_OK) < 0)
|
||||
e = stpcpy(e, "cgroups-missing:");
|
||||
|
||||
- if (cg_all_unified() == 0)
|
||||
+ if (cg_unified_controller(SYSTEMD_CGROUP_CONTROLLER) <= 0)
|
||||
e = stpcpy(e, "cgroupsv1:");
|
||||
|
||||
if (clock_is_localtime(NULL) > 0)
|
||||
diff --git a/src/core/unit.c b/src/core/unit.c
|
||||
index 0e8a01966a..96105a6fc1 100644
|
||||
--- a/src/core/unit.c
|
||||
+++ b/src/core/unit.c
|
||||
@@ -5448,7 +5448,7 @@ int unit_log_leftover_process_start(pid_t pid, int sig, void *userdata) {
|
||||
|
||||
/* During start we print a warning */
|
||||
|
||||
- log_unit_warning(userdata,
|
||||
+ log_unit_debug(userdata,
|
||||
"Found left-over process " PID_FMT " (%s) in control group while starting unit. Ignoring.\n"
|
||||
"This usually indicates unclean termination of a previous run, or service implementation deficiencies.",
|
||||
pid, strna(comm));
|
||||
--
|
||||
2.35.3
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
From 6f4d9d9688ad65bb46d09ac09f570c6ee4bc3671 Mon Sep 17 00:00:00 2001
|
||||
From: Franck Bui <fbui@suse.com>
|
||||
Date: Fri, 14 Jan 2022 08:17:38 +0100
|
||||
Subject: [PATCH 1010/1010] sysv: add back support for '$all' virtual facility
|
||||
and '+' facitity name prefix
|
||||
|
||||
'$all' was probably a Debian thing and has probably never been supported by RH,
|
||||
which explains why systemd upstream never supported it too. At least I couldn't
|
||||
find any reference of this facility name in
|
||||
http://refspecs.linux-foundation.org/LSB_4.0.0/LSB-Core-generic/LSB-Core-generic.html#FACILNAME. OTOH
|
||||
'$all' is described in https://wiki.debian.org/LSBInitScripts
|
||||
|
||||
Regarding the '+' prefix, I couldn't find any mention of it
|
||||
anywhere. Apparently it was equivalent to '$' in facility names.
|
||||
|
||||
[wfink: bsc#858864]
|
||||
---
|
||||
src/sysv-generator/sysv-generator.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/src/sysv-generator/sysv-generator.c b/src/sysv-generator/sysv-generator.c
|
||||
index c6e1953839..0aadb397ed 100644
|
||||
--- a/src/sysv-generator/sysv-generator.c
|
||||
+++ b/src/sysv-generator/sysv-generator.c
|
||||
@@ -243,6 +243,7 @@ static int sysv_translate_facility(SysvStub *s, unsigned line, const char *name,
|
||||
"remote_fs", SPECIAL_REMOTE_FS_TARGET,
|
||||
"syslog", NULL,
|
||||
"time", SPECIAL_TIME_SYNC_TARGET,
|
||||
+ "all", SPECIAL_DEFAULT_TARGET,
|
||||
};
|
||||
|
||||
const char *filename;
|
||||
@@ -257,6 +258,7 @@ static int sysv_translate_facility(SysvStub *s, unsigned line, const char *name,
|
||||
|
||||
filename = basename(s->path);
|
||||
|
||||
+ n = *name == '+' ? ++name : name;
|
||||
n = *name == '$' ? name + 1 : name;
|
||||
|
||||
for (i = 0; i < ELEMENTSOF(table); i += 2) {
|
||||
--
|
||||
2.31.1
|
||||
|
123
1011-sysv-generator-add-back-support-for-SysV-scripts-for.patch
Normal file
123
1011-sysv-generator-add-back-support-for-SysV-scripts-for.patch
Normal file
|
@ -0,0 +1,123 @@
|
|||
From 1bd48f23ea7750b354bfb94482f9f035bf8b7841 Mon Sep 17 00:00:00 2001
|
||||
From: Franck Bui <fbui@suse.com>
|
||||
Date: Thu, 26 May 2016 08:59:41 +0200
|
||||
Subject: [PATCH 06/11] sysv-generator: add (back) support for SysV scripts for
|
||||
the early boot
|
||||
|
||||
For the record, the upstream support was removed by commit
|
||||
3cdebc217c42c8529086f2965319b6a48eaaeabe.
|
||||
|
||||
The sysv-generator has some weirdos: for example a service at the rc0
|
||||
runlevel won't be started during shutdown since it will get both
|
||||
"WantedBy=poweroff.target" and "Conflicts=shutdown.target".
|
||||
|
||||
Anyways what's the current patch implements the following:
|
||||
|
||||
- a symlink /etc/init.d/boot.d/S??boot.foo will add
|
||||
"WantedBy/Before=sysinit.target" constraints and make sure that the
|
||||
default dependencies added by systemd are turned off.
|
||||
|
||||
- a symlink /etc/init.d/boot.d/K??boot.foo will add
|
||||
"Conflicts/Before=shutdown.target" so "foo" service will be stopped
|
||||
like any other regular services. If this symlink is not installed
|
||||
however, "foo" will be stopped lately during the systemd killing
|
||||
spree.
|
||||
|
||||
This is a forward-port of commit 29db8537e1ca10796797d9854d1 in SP1.
|
||||
|
||||
[Since v232]
|
||||
|
||||
Support for S* symlinks in runlevel 0 or 6 has been completely and silently
|
||||
removed by 788d2b088b13a2444b9eb2ea82c0cc57d9f0980f. Since it was already
|
||||
broken as pointed out above, this probably wasn't really used and therefore
|
||||
no one will really care. So let's drop it too.
|
||||
|
||||
However this has the side effect to make the support of early sysv scripts more
|
||||
difficult. To make things easy, the support of K* symlinks in boot.d/ has been
|
||||
removed too: this is probably not used (anymore) (at least intentionally).
|
||||
|
||||
The consequence is that early sysv services are stopped during shutdown at
|
||||
the same time as 'normal' services.
|
||||
---
|
||||
src/sysv-generator/sysv-generator.c | 23 +++++++++++++++++++++++
|
||||
1 file changed, 23 insertions(+)
|
||||
|
||||
diff --git a/src/sysv-generator/sysv-generator.c b/src/sysv-generator/sysv-generator.c
|
||||
index bf23c48662..fa5355c964 100644
|
||||
--- a/src/sysv-generator/sysv-generator.c
|
||||
+++ b/src/sysv-generator/sysv-generator.c
|
||||
@@ -31,6 +31,9 @@ static const struct {
|
||||
const char *path;
|
||||
const char *target;
|
||||
} rcnd_table[] = {
|
||||
+ /* SUSE style boot.d */
|
||||
+ { "boot.d", SPECIAL_SYSINIT_TARGET },
|
||||
+
|
||||
/* Standard SysV runlevels for start-up */
|
||||
{ "rc1.d", SPECIAL_RESCUE_TARGET },
|
||||
{ "rc2.d", SPECIAL_MULTI_USER_TARGET },
|
||||
@@ -57,6 +60,7 @@ typedef struct SysvStub {
|
||||
bool has_lsb;
|
||||
bool reload;
|
||||
bool loaded;
|
||||
+ bool early;
|
||||
} SysvStub;
|
||||
|
||||
static SysvStub* free_sysvstub(SysvStub *s) {
|
||||
@@ -146,6 +150,12 @@ static int generate_unit_file(SysvStub *s) {
|
||||
fprintf(f, "Description=%s\n", t);
|
||||
}
|
||||
|
||||
+ if (s->early) {
|
||||
+ fprintf(f, "DefaultDependencies=no\n");
|
||||
+ fprintf(f, "Conflicts=%s\n", SPECIAL_SHUTDOWN_TARGET);
|
||||
+ fprintf(f, "Before=%s\n", SPECIAL_SHUTDOWN_TARGET);
|
||||
+ }
|
||||
+
|
||||
STRV_FOREACH(p, s->before)
|
||||
fprintf(f, "Before=%s\n", *p);
|
||||
STRV_FOREACH(p, s->after)
|
||||
@@ -212,6 +222,10 @@ static char *sysv_translate_name(const char *name) {
|
||||
_cleanup_free_ char *c = NULL;
|
||||
char *res;
|
||||
|
||||
+ if (startswith(name, "boot."))
|
||||
+ /* Drop SuSE-style boot. prefix */
|
||||
+ name += 5;
|
||||
+
|
||||
c = strdup(name);
|
||||
if (!c)
|
||||
return NULL;
|
||||
@@ -288,6 +302,11 @@ static int sysv_translate_facility(SysvStub *s, unsigned line, const char *name,
|
||||
return 1;
|
||||
}
|
||||
|
||||
+ /* Strip "boot." prefix from file name for comparison (Suse specific) */
|
||||
+ e = startswith(filename, "boot.");
|
||||
+ if (e)
|
||||
+ filename += 5;
|
||||
+
|
||||
/* Strip ".sh" suffix from file name for comparison */
|
||||
filename_no_sh = strdupa(filename);
|
||||
e = endswith(filename_no_sh, ".sh");
|
||||
@@ -651,6 +670,9 @@ static int fix_order(SysvStub *s, Hashmap *all_services) {
|
||||
if (other->sysv_start_priority < 0)
|
||||
continue;
|
||||
|
||||
+ if (s->early != other->early)
|
||||
+ continue;
|
||||
+
|
||||
/* If both units have modern headers we don't care
|
||||
* about the priorities */
|
||||
if (s->has_lsb && other->has_lsb)
|
||||
@@ -775,6 +797,7 @@ static int enumerate_sysv(const LookupPaths *lp, Hashmap *all_services) {
|
||||
.sysv_start_priority = -1,
|
||||
.name = TAKE_PTR(name),
|
||||
.path = TAKE_PTR(fpath),
|
||||
+ .early = !!startswith(de->d_name, "boot."),
|
||||
};
|
||||
|
||||
r = hashmap_put(all_services, service->name, service);
|
||||
--
|
||||
2.26.2
|
||||
|
|
@ -0,0 +1,67 @@
|
|||
From b5e3ca17a2cee98d0fdae4cee0f285a9052c908c Mon Sep 17 00:00:00 2001
|
||||
From: Franck Bui <fbui@suse.com>
|
||||
Date: Mon, 10 Oct 2022 16:31:39 +0200
|
||||
Subject: [PATCH 1012/1012] man: describe the net naming schemes specific to
|
||||
SLE
|
||||
|
||||
Fixes: bsc#1204179
|
||||
---
|
||||
man/systemd.net-naming-scheme.xml | 42 +++++++++++++++++++++++++++++++
|
||||
1 file changed, 42 insertions(+)
|
||||
|
||||
diff --git a/man/systemd.net-naming-scheme.xml b/man/systemd.net-naming-scheme.xml
|
||||
index 6c14810a3e..9b94eff52e 100644
|
||||
--- a/man/systemd.net-naming-scheme.xml
|
||||
+++ b/man/systemd.net-naming-scheme.xml
|
||||
@@ -395,6 +395,48 @@
|
||||
particular version of systemd).</para>
|
||||
</refsect1>
|
||||
|
||||
+ <refsect1>
|
||||
+ <title>SLE History</title>
|
||||
+
|
||||
+ <para>Additionally, the following "naming schemes" have also been defined on SLE products:</para>
|
||||
+
|
||||
+ <variablelist>
|
||||
+ <varlistentry>
|
||||
+ <term><constant>sle15-sp3</constant></term>
|
||||
+
|
||||
+ <listitem><para>This naming scheme is available since <varname>SLE15-SP3</varname> and is based on
|
||||
+ the <constant>v238</constant> naming scheme described previously but also includes the following
|
||||
+ changes.</para>
|
||||
+
|
||||
+ <para>When a PCI slot is associated with a PCI bridge that has multiple child network
|
||||
+ controllers, the same value of the <varname>ID_NET_NAME_SLOT</varname> property might be derived
|
||||
+ for those controllers. This would cause a naming conflict if the property is selected as the device
|
||||
+ name. Now, we detect this situation and don't produce the <varname>ID_NET_NAME_SLOT</varname>
|
||||
+ property.</para></listitem>
|
||||
+ </varlistentry>
|
||||
+
|
||||
+ <varlistentry>
|
||||
+ <term><constant>sle15-sp4</constant></term>
|
||||
+
|
||||
+ <listitem><para>Available since <varname>SLE15-SP4</varname> and is based on the
|
||||
+ <constant>sle15-sp3</constant> naming scheme described previously but also includes the following
|
||||
+ change.</para>
|
||||
+
|
||||
+ <para>PCI hotplug slot names for the s390 PCI driver are a hexadecimal representation
|
||||
+ of the <filename>function_id</filename> device attribute. This attribute is now used to build the
|
||||
+ <varname>ID_NET_NAME_SLOT</varname>. Before that, all slot names were parsed as decimal
|
||||
+ numbers, which could either result in an incorrect value of the <varname>ID_NET_NAME_SLOT</varname>
|
||||
+ property or none at all.</para>
|
||||
+
|
||||
+ <para>Some firmware and hypervisor implementations report unreasonable high numbers for the onboard
|
||||
+ index. To prevent the generation of bogus onbard interface names, index numbers greater than 16381
|
||||
+ (2^14-1) were ignored. For s390 PCI devices index values up to 65535 (2^16-1) are valid. To account
|
||||
+ for that, the limit is increased to now 65535.</para></listitem>
|
||||
+ </varlistentry>
|
||||
+
|
||||
+ </variablelist>
|
||||
+ </refsect1>
|
||||
+
|
||||
<refsect1>
|
||||
<title>Examples</title>
|
||||
|
||||
--
|
||||
2.35.3
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
From c6ed74889adade0287ee609150611544d8d5c6d2 Mon Sep 17 00:00:00 2001
|
||||
From: Frederic Crozat <fcrozat@suse.com>
|
||||
Date: Tue, 28 May 2013 15:17:35 +0200
|
||||
Subject: [PATCH 04/11] strip the domain part from /etc/hostname when setting
|
||||
system host name
|
||||
|
||||
[fbui: fixes bnc#820213]
|
||||
[fbui: forwardported from bfd2462b8ddec591d953841ab22bb30bdc6f9085]
|
||||
[fbui: adjust context and make sure that strip of the domain name is
|
||||
only done when setting the system host name. Therefore it's
|
||||
still possible to pass an FQDN to hostnamectl]
|
||||
[fbui: I'm still not sure that it was the right thing to do. Other
|
||||
possibility was to fix the installer to create a correct
|
||||
/etc/hostname file. Need to investigate...]
|
||||
---
|
||||
src/shared/hostname-setup.c | 7 +++++++
|
||||
1 file changed, 7 insertions(+)
|
||||
|
||||
diff --git a/src/shared/hostname-setup.c b/src/shared/hostname-setup.c
|
||||
index 511aa7d031..351d0e761d 100644
|
||||
--- a/src/shared/hostname-setup.c
|
||||
+++ b/src/shared/hostname-setup.c
|
||||
@@ -189,6 +189,13 @@ int hostname_setup(bool really) {
|
||||
else
|
||||
log_warning_errno(r, "Failed to read configured hostname: %m");
|
||||
} else {
|
||||
+ char *domain;
|
||||
+
|
||||
+ /* SUSE: strip the domain name */
|
||||
+ domain = strchr(b, '.');
|
||||
+ if (domain)
|
||||
+ *domain = '\0';
|
||||
+
|
||||
hn = b;
|
||||
source = HOSTNAME_STATIC;
|
||||
}
|
||||
--
|
||||
2.26.2
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
From 0643276850f9d331da9f58eba80029ee7f28d6eb Mon Sep 17 00:00:00 2001
|
||||
From: Robert Milasan <rmilasan@suse.com>
|
||||
Date: Sat, 12 Jul 2014 14:20:36 +0200
|
||||
Subject: [PATCH 05/11] udev: create default symlinks for primary cd_dvd drive
|
||||
|
||||
Imported from SLE12-SP1, commit 4f8bacfbffd7049608b5076.
|
||||
|
||||
[fbui: updated for SLE15-SP4: since commit 38f3e20883ff658935aae5c9 (v248), the
|
||||
symlinks /dev/cdrw and /dev/dvdrw could no longer be created. Futhermore
|
||||
the rule added by this patch dealing with /dev/cdrom was redundant with
|
||||
the upstream one]
|
||||
|
||||
[rmilasan: fixes bnc#783054]
|
||||
---
|
||||
rules.d/60-cdrom_id.rules | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/rules.d/60-cdrom_id.rules b/rules.d/60-cdrom_id.rules
|
||||
index 288f8ce2f9..58e8ccb54b 100644
|
||||
--- a/rules.d/60-cdrom_id.rules
|
||||
+++ b/rules.d/60-cdrom_id.rules
|
||||
@@ -25,5 +25,6 @@ IMPORT{program}="cdrom_id --lock-media $devnode"
|
||||
ENV{DISK_MEDIA_CHANGE}=="?*", ENV{ID_CDROM_MEDIA}!="?*", ENV{SYSTEMD_READY}="0"
|
||||
|
||||
KERNEL=="sr0", SYMLINK+="cdrom", OPTIONS+="link_priority=-100"
|
||||
+KERNEL=="sr0", ENV{ID_CDROM_DVD}=="1", SYMLINK+="dvd", OPTIONS+="link_priority=-100"
|
||||
|
||||
LABEL="cdrom_end"
|
||||
--
|
||||
2.35.3
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
From 533a1b6996c3d99cf27ae05f0cd8131dcd9bbf30 Mon Sep 17 00:00:00 2001
|
||||
From: Pawel Wieczorkiewicz <pwieczorkiewicz@suse.de>
|
||||
Date: Tue, 2 Jun 2015 13:33:24 +0000
|
||||
Subject: [PATCH 07/11] networkd: make network.service an alias of
|
||||
systemd-networkd.service
|
||||
|
||||
NetworkManager and wicked does this already. This is needed by yast2
|
||||
and other parts of the system.
|
||||
|
||||
[fixes boo#933092]
|
||||
---
|
||||
units/systemd-networkd.service.in | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/units/systemd-networkd.service.in b/units/systemd-networkd.service.in
|
||||
index ffa45ba049..6a5d0dea3c 100644
|
||||
--- a/units/systemd-networkd.service.in
|
||||
+++ b/units/systemd-networkd.service.in
|
||||
@@ -53,6 +53,7 @@ User=systemd-network
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
+Alias=network.service
|
||||
Also=systemd-networkd.socket
|
||||
Alias=dbus-org.freedesktop.network1.service
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
From 67f3fa5aa2781d42c809da9303f81b28544824d8 Mon Sep 17 00:00:00 2001
|
||||
From: Franck Bui <fbui@suse.com>
|
||||
Date: Thu, 6 Jul 2017 15:48:10 +0200
|
||||
Subject: [PATCH 10/11] core: disable session keyring per system sevice
|
||||
entirely for now
|
||||
|
||||
Until PAM module "pam_keyinit" is fully integrated in SUSE's PAM stack, this
|
||||
feature has to be disabled.
|
||||
|
||||
openSUSE is still not ready for enabling the keyring stuff (see
|
||||
bsc#1081947). Some services got fixed (sshd, getty@.service) but some still
|
||||
haven't (xdm, login, ...)
|
||||
|
||||
So leave it disabled again otherwise different users might end up using the
|
||||
same session keyring - the one created for the service used for logging in
|
||||
(sshd, getty@.service, xdm, etc...)
|
||||
|
||||
The integration of pam_keyinit is tracked here:
|
||||
https://bugzilla.opensuse.org/show_bug.cgi?id=1081947
|
||||
|
||||
See also:
|
||||
https://github.com/systemd/systemd/pull/6286
|
||||
|
||||
[fbui: fixes boo#1045886]
|
||||
---
|
||||
src/core/execute.c | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/src/core/execute.c b/src/core/execute.c
|
||||
index 2a337b55a2..b5a1a3b6e5 100644
|
||||
--- a/src/core/execute.c
|
||||
+++ b/src/core/execute.c
|
||||
@@ -3356,6 +3356,9 @@ static int setup_keyring(
|
||||
assert(context);
|
||||
assert(p);
|
||||
|
||||
+ /* SUSE: pam_keyinit is still not fully integrated to SUSE's PAM stack... */
|
||||
+ return 0;
|
||||
+
|
||||
/* Let's set up a new per-service "session" kernel keyring for each system service. This has the benefit that
|
||||
* each service runs with its own keyring shared among all processes of the service, but with no hook-up beyond
|
||||
* that scope, and in particular no link to the per-UID keyring. If we don't do this the keyring will be
|
||||
--
|
||||
2.26.2
|
||||
|
|
@ -0,0 +1,80 @@
|
|||
From e78660b66efc6ab28b655ca584315504b76cb4dc Mon Sep 17 00:00:00 2001
|
||||
From: Frederic Crozat <fcrozat@suse.com>
|
||||
Date: Mon, 29 Oct 2012 13:01:20 +0000
|
||||
Subject: [PATCH 02/11] restore /var/run and /var/lock bind mount if they
|
||||
aren't symlink
|
||||
|
||||
---
|
||||
units/meson.build | 2 ++
|
||||
units/var-lock.mount | 19 +++++++++++++++++++
|
||||
units/var-run.mount | 19 +++++++++++++++++++
|
||||
3 files changed, 40 insertions(+)
|
||||
create mode 100644 units/var-lock.mount
|
||||
create mode 100644 units/var-run.mount
|
||||
|
||||
diff --git a/units/meson.build b/units/meson.build
|
||||
index 17e9ead9c1..7b926f9f91 100644
|
||||
--- a/units/meson.build
|
||||
+++ b/units/meson.build
|
||||
@@ -160,6 +160,8 @@ units = [
|
||||
['umount.target', ''],
|
||||
['usb-gadget.target', ''],
|
||||
['user.slice', ''],
|
||||
+ ['var-run.mount', 'HAVE_SYSV_COMPAT', 'local-fs.target.wants/'],
|
||||
+ ['var-lock.mount', 'HAVE_SYSV_COMPAT', 'local-fs.target.wants/'],
|
||||
['var-lib-machines.mount', 'ENABLE_MACHINED',
|
||||
'remote-fs.target.wants/ machines.target.wants/'],
|
||||
]
|
||||
diff --git a/units/var-lock.mount b/units/var-lock.mount
|
||||
new file mode 100644
|
||||
index 0000000000..07277adac3
|
||||
--- /dev/null
|
||||
+++ b/units/var-lock.mount
|
||||
@@ -0,0 +1,19 @@
|
||||
+# This file is part of systemd.
|
||||
+#
|
||||
+# systemd is free software; you can redistribute it and/or modify it
|
||||
+# under the terms of the GNU General Public License as published by
|
||||
+# the Free Software Foundation; either version 2 of the License, or
|
||||
+# (at your option) any later version.
|
||||
+
|
||||
+[Unit]
|
||||
+Description=Lock Directory
|
||||
+Before=local-fs.target
|
||||
+# skip mounting if the directory does not exist or is a symlink
|
||||
+ConditionPathIsDirectory=/var/lock
|
||||
+ConditionPathIsSymbolicLink=!/var/lock
|
||||
+
|
||||
+[Mount]
|
||||
+What=/run/lock
|
||||
+Where=/var/lock
|
||||
+Type=bind
|
||||
+Options=bind
|
||||
diff --git a/units/var-run.mount b/units/var-run.mount
|
||||
new file mode 100644
|
||||
index 0000000000..ab4da424c9
|
||||
--- /dev/null
|
||||
+++ b/units/var-run.mount
|
||||
@@ -0,0 +1,19 @@
|
||||
+# This file is part of systemd.
|
||||
+#
|
||||
+# systemd is free software; you can redistribute it and/or modify it
|
||||
+# under the terms of the GNU General Public License as published by
|
||||
+# the Free Software Foundation; either version 2 of the License, or
|
||||
+# (at your option) any later version.
|
||||
+
|
||||
+[Unit]
|
||||
+Description=Runtime Directory
|
||||
+Before=local-fs.target
|
||||
+# skip mounting if the directory does not exist or is a symlink
|
||||
+ConditionPathIsDirectory=/var/run
|
||||
+ConditionPathIsSymbolicLink=!/var/run
|
||||
+
|
||||
+[Mount]
|
||||
+What=/run
|
||||
+Where=/var/run
|
||||
+Type=bind
|
||||
+Options=bind
|
||||
--
|
||||
2.26.2
|
||||
|
|
@ -0,0 +1,83 @@
|
|||
From 9cbb486f8bbef5c7a51762af841e593cdf0cdc8c Mon Sep 17 00:00:00 2001
|
||||
From: Franck Bui <fbui@suse.com>
|
||||
Date: Wed, 26 Jul 2023 17:04:10 +0200
|
||||
Subject: [PATCH 5001/5001] sleep: don't init /sys/power/resume if 'resume='
|
||||
option is missing and EFI is disabled
|
||||
|
||||
Otherwise in such case a first `systemctl hibernate` would fail but would still
|
||||
initialize /sys/power/resume fooling a second `systemctl hibernate` into
|
||||
believing that 'resume=' is correctly set and can be used by the resume process
|
||||
to find the swap device to resume from.
|
||||
|
||||
Follow-up for #27330.
|
||||
|
||||
(cherry picked from commit f1f331a252d22c15f37d03524cce967664358c5c)
|
||||
|
||||
[fbui: fixes bsc#1186606]
|
||||
[fbui: this version is pretty different from the original commit as the support
|
||||
for specifying the hibernation location via an EFI variable has not been
|
||||
backported.]
|
||||
---
|
||||
src/sleep/sleep.c | 22 ++++++++++++++--------
|
||||
1 file changed, 14 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/src/sleep/sleep.c b/src/sleep/sleep.c
|
||||
index a3aeb24633..134d315658 100644
|
||||
--- a/src/sleep/sleep.c
|
||||
+++ b/src/sleep/sleep.c
|
||||
@@ -37,6 +37,7 @@
|
||||
|
||||
static SleepOperation arg_operation = _SLEEP_OPERATION_INVALID;
|
||||
|
||||
+#if 0
|
||||
static int write_hibernate_location_info(const HibernateLocation *hibernate_location) {
|
||||
char offset_str[DECIMAL_STR_MAX(uint64_t)];
|
||||
char resume_str[DECIMAL_STR_MAX(unsigned) * 2 + STRLEN(":")];
|
||||
@@ -82,6 +83,7 @@ static int write_hibernate_location_info(const HibernateLocation *hibernate_loca
|
||||
|
||||
return 0;
|
||||
}
|
||||
+#endif
|
||||
|
||||
static int write_mode(char **modes) {
|
||||
int r = 0;
|
||||
@@ -185,7 +187,6 @@ static int execute(
|
||||
NULL
|
||||
};
|
||||
|
||||
- _cleanup_(hibernate_location_freep) HibernateLocation *hibernate_location = NULL;
|
||||
_cleanup_fclose_ FILE *f = NULL;
|
||||
char **modes, **states;
|
||||
int r;
|
||||
@@ -213,16 +214,21 @@ static int execute(
|
||||
|
||||
/* Configure hibernation settings if we are supposed to hibernate */
|
||||
if (!strv_isempty(modes)) {
|
||||
+ _cleanup_(hibernate_location_freep) HibernateLocation *hibernate_location = NULL;
|
||||
+
|
||||
r = find_hibernate_location(&hibernate_location);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to find location to hibernate to: %m");
|
||||
- if (r == 0) { /* 0 means: no hibernation location was configured in the kernel so far, let's
|
||||
- * do it ourselves then. > 0 means: kernel already had a configured hibernation
|
||||
- * location which we shouldn't touch. */
|
||||
- r = write_hibernate_location_info(hibernate_location);
|
||||
- if (r < 0)
|
||||
- return log_error_errno(r, "Failed to prepare for hibernation: %m");
|
||||
- }
|
||||
+ if (r == 0)
|
||||
+ /* r == 0 means: no hibernation location was configured in the kernel, IOW "resume="
|
||||
+ * is missing or systemd-hibernate-resume-generator is not included in initrd. Either
|
||||
+ * case refuse to proceed as the resume process wouldn't find the swap device to work
|
||||
+ * with. */
|
||||
+ return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
|
||||
+ "resume= is wrong or missing (the resume generator might be missing in initrd), refusing.");
|
||||
+
|
||||
+ /* r > 0 means: kernel already had a configured hibernation location and it matches one of
|
||||
+ * the swap device we found. All is good. */
|
||||
|
||||
r = write_mode(modes);
|
||||
if (r < 0)
|
||||
--
|
||||
2.35.3
|
||||
|
17
after-local.service
Normal file
17
after-local.service
Normal file
|
@ -0,0 +1,17 @@
|
|||
# This file is part of systemd.
|
||||
#
|
||||
# systemd is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
[Unit]
|
||||
Description=/etc/init.d/after.local Compatibility
|
||||
ConditionFileIsExecutable=/etc/init.d/after.local
|
||||
After=getty.target
|
||||
|
||||
[Service]
|
||||
Type=idle
|
||||
ExecStart=/etc/init.d/after.local
|
||||
TimeoutSec=0
|
||||
RemainAfterExit=yes
|
11
baselibs.conf
Normal file
11
baselibs.conf
Normal file
|
@ -0,0 +1,11 @@
|
|||
#
|
||||
# https://en.opensuse.org/openSUSE:Build_Service_baselibs.conf#Quickstart
|
||||
#
|
||||
systemd
|
||||
supplements "packageand(systemd:pam-<targettype>)"
|
||||
-/lib/systemd/system/
|
||||
-/usr/lib/systemd/libsystemd-shared.*\.so
|
||||
post "<prefix>%{_sbindir}/pam-config -a --systemd || :"
|
||||
libsystemd0
|
||||
libudev1
|
||||
nss-myhostname
|
57
files.container
Normal file
57
files.container
Normal file
|
@ -0,0 +1,57 @@
|
|||
#
|
||||
# Please keep the list sorted (with `LC_ALL=C sort`).
|
||||
#
|
||||
%dir %{_sysconfdir}/systemd/nspawn
|
||||
%{_bindir}/systemd-nspawn
|
||||
%if ! %{bootstrap}
|
||||
%{_datadir}/bash-completion/completions/systemd-nspawn
|
||||
%{_datadir}/zsh/site-functions/_systemd-nspawn
|
||||
%{_mandir}/man1/systemd-nspawn.1.gz
|
||||
%{_mandir}/man5/systemd.nspawn.5.gz
|
||||
%{_mandir}/man8/libnss_mymachines.so.2.8.gz
|
||||
%{_mandir}/man8/nss-mymachines.8.gz
|
||||
%endif
|
||||
%{_unitdir}/systemd-nspawn@.service
|
||||
|
||||
%if %{with machined}
|
||||
%dir %{_unitdir}/machines.target.wants
|
||||
%{_bindir}/machinectl
|
||||
%{_datadir}/bash-completion/completions/machinectl
|
||||
%{_datadir}/dbus-1/system-services/org.freedesktop.machine1.service
|
||||
%{_datadir}/dbus-1/system.d/org.freedesktop.machine1.conf
|
||||
%{_datadir}/polkit-1/actions/org.freedesktop.machine1.policy
|
||||
%{_datadir}/zsh/site-functions/_machinectl
|
||||
%{_datadir}/zsh/site-functions/_sd_machines
|
||||
%{_libdir}/libnss_mymachines.so.2
|
||||
%{_mandir}/man1/machinectl.1.gz
|
||||
%{_mandir}/man5/org.freedesktop.machine1.5.gz
|
||||
%{_mandir}/man8/systemd-machined.8.gz
|
||||
%{_mandir}/man8/systemd-machined.service.8.gz
|
||||
%{_systemd_util_dir}/rpm/fixlet-container-post.sh
|
||||
%{_systemd_util_dir}/systemd-machined
|
||||
%{_tmpfilesdir}/systemd-nspawn.conf
|
||||
%{_unitdir}/dbus-org.freedesktop.machine1.service
|
||||
%{_unitdir}/machine.slice
|
||||
%{_unitdir}/machines.target
|
||||
%{_unitdir}/machines.target.wants/var-lib-machines.mount
|
||||
%{_unitdir}/remote-fs.target.wants/var-lib-machines.mount
|
||||
%{_unitdir}/systemd-machined.service
|
||||
%{_unitdir}/var-lib-machines.mount
|
||||
%endif
|
||||
|
||||
%if %{with importd}
|
||||
%{_datadir}/dbus-1/system-services/org.freedesktop.import1.service
|
||||
%{_datadir}/dbus-1/system.d/org.freedesktop.import1.conf
|
||||
%{_datadir}/polkit-1/actions/org.freedesktop.import1.policy
|
||||
%{_mandir}/man5/org.freedesktop.import1.5.gz
|
||||
%{_mandir}/man8/systemd-importd.8.gz
|
||||
%{_mandir}/man8/systemd-importd.service.8.gz
|
||||
%{_systemd_util_dir}/import-pubring.gpg
|
||||
%{_systemd_util_dir}/systemd-export
|
||||
%{_systemd_util_dir}/systemd-import
|
||||
%{_systemd_util_dir}/systemd-import-fs
|
||||
%{_systemd_util_dir}/systemd-importd
|
||||
%{_systemd_util_dir}/systemd-pull
|
||||
%{_unitdir}/dbus-org.freedesktop.import1.service
|
||||
%{_unitdir}/systemd-importd.service
|
||||
%endif
|
730
files.devel
Normal file
730
files.devel
Normal file
|
@ -0,0 +1,730 @@
|
|||
#
|
||||
# Please keep the list sorted (with `LC_ALL=C sort`).
|
||||
#
|
||||
%{_includedir}/libudev.h
|
||||
%{_includedir}/systemd/
|
||||
%{_libdir}/libsystemd.so
|
||||
%{_libdir}/libudev.so
|
||||
%{_libdir}/pkgconfig/libsystemd.pc
|
||||
%{_libdir}/pkgconfig/libudev.pc
|
||||
%if ! %{bootstrap}
|
||||
%{_mandir}/man3/SD_ALERT.3.gz
|
||||
%{_mandir}/man3/SD_BUS_ERROR_ACCESS_DENIED.3.gz
|
||||
%{_mandir}/man3/SD_BUS_ERROR_ADDRESS_IN_USE.3.gz
|
||||
%{_mandir}/man3/SD_BUS_ERROR_AUTH_FAILED.3.gz
|
||||
%{_mandir}/man3/SD_BUS_ERROR_BAD_ADDRESS.3.gz
|
||||
%{_mandir}/man3/SD_BUS_ERROR_DISCONNECTED.3.gz
|
||||
%{_mandir}/man3/SD_BUS_ERROR_END.3.gz
|
||||
%{_mandir}/man3/SD_BUS_ERROR_FAILED.3.gz
|
||||
%{_mandir}/man3/SD_BUS_ERROR_FILE_EXISTS.3.gz
|
||||
%{_mandir}/man3/SD_BUS_ERROR_FILE_NOT_FOUND.3.gz
|
||||
%{_mandir}/man3/SD_BUS_ERROR_INCONSISTENT_MESSAGE.3.gz
|
||||
%{_mandir}/man3/SD_BUS_ERROR_INTERACTIVE_AUTHORIZATION_REQUIRED.3.gz
|
||||
%{_mandir}/man3/SD_BUS_ERROR_INVALID_ARGS.3.gz
|
||||
%{_mandir}/man3/SD_BUS_ERROR_INVALID_SIGNATURE.3.gz
|
||||
%{_mandir}/man3/SD_BUS_ERROR_IO_ERROR.3.gz
|
||||
%{_mandir}/man3/SD_BUS_ERROR_LIMITS_EXCEEDED.3.gz
|
||||
%{_mandir}/man3/SD_BUS_ERROR_MAKE_CONST.3.gz
|
||||
%{_mandir}/man3/SD_BUS_ERROR_MAP.3.gz
|
||||
%{_mandir}/man3/SD_BUS_ERROR_MATCH_RULE_INVALID.3.gz
|
||||
%{_mandir}/man3/SD_BUS_ERROR_MATCH_RULE_NOT_FOUND.3.gz
|
||||
%{_mandir}/man3/SD_BUS_ERROR_NAME_HAS_NO_OWNER.3.gz
|
||||
%{_mandir}/man3/SD_BUS_ERROR_NOT_SUPPORTED.3.gz
|
||||
%{_mandir}/man3/SD_BUS_ERROR_NO_MEMORY.3.gz
|
||||
%{_mandir}/man3/SD_BUS_ERROR_NO_NETWORK.3.gz
|
||||
%{_mandir}/man3/SD_BUS_ERROR_NO_REPLY.3.gz
|
||||
%{_mandir}/man3/SD_BUS_ERROR_NO_SERVER.3.gz
|
||||
%{_mandir}/man3/SD_BUS_ERROR_NULL.3.gz
|
||||
%{_mandir}/man3/SD_BUS_ERROR_PROPERTY_READ_ONLY.3.gz
|
||||
%{_mandir}/man3/SD_BUS_ERROR_SERVICE_UNKNOWN.3.gz
|
||||
%{_mandir}/man3/SD_BUS_ERROR_TIMEOUT.3.gz
|
||||
%{_mandir}/man3/SD_BUS_ERROR_UNIX_PROCESS_ID_UNKNOWN.3.gz
|
||||
%{_mandir}/man3/SD_BUS_ERROR_UNKNOWN_INTERFACE.3.gz
|
||||
%{_mandir}/man3/SD_BUS_ERROR_UNKNOWN_METHOD.3.gz
|
||||
%{_mandir}/man3/SD_BUS_ERROR_UNKNOWN_OBJECT.3.gz
|
||||
%{_mandir}/man3/SD_BUS_ERROR_UNKNOWN_PROPERTY.3.gz
|
||||
%{_mandir}/man3/SD_BUS_MESSAGE_METHOD_CALL.3.gz
|
||||
%{_mandir}/man3/SD_BUS_MESSAGE_METHOD_ERROR.3.gz
|
||||
%{_mandir}/man3/SD_BUS_MESSAGE_METHOD_RETURN.3.gz
|
||||
%{_mandir}/man3/SD_BUS_MESSAGE_SIGNAL.3.gz
|
||||
%{_mandir}/man3/SD_BUS_METHOD.3.gz
|
||||
%{_mandir}/man3/SD_BUS_METHOD_WITH_NAMES.3.gz
|
||||
%{_mandir}/man3/SD_BUS_METHOD_WITH_NAMES_OFFSET.3.gz
|
||||
%{_mandir}/man3/SD_BUS_METHOD_WITH_OFFSET.3.gz
|
||||
%{_mandir}/man3/SD_BUS_PARAM.3.gz
|
||||
%{_mandir}/man3/SD_BUS_PROPERTY.3.gz
|
||||
%{_mandir}/man3/SD_BUS_SIGNAL.3.gz
|
||||
%{_mandir}/man3/SD_BUS_SIGNAL_WITH_NAMES.3.gz
|
||||
%{_mandir}/man3/SD_BUS_VTABLE_CAPABILITY.3.gz
|
||||
%{_mandir}/man3/SD_BUS_VTABLE_END.3.gz
|
||||
%{_mandir}/man3/SD_BUS_VTABLE_START.3.gz
|
||||
%{_mandir}/man3/SD_BUS_WRITABLE_PROPERTY.3.gz
|
||||
%{_mandir}/man3/SD_CRIT.3.gz
|
||||
%{_mandir}/man3/SD_DEBUG.3.gz
|
||||
%{_mandir}/man3/SD_EMERG.3.gz
|
||||
%{_mandir}/man3/SD_ERR.3.gz
|
||||
%{_mandir}/man3/SD_EVENT_ARMED.3.gz
|
||||
%{_mandir}/man3/SD_EVENT_EXITING.3.gz
|
||||
%{_mandir}/man3/SD_EVENT_FINISHED.3.gz
|
||||
%{_mandir}/man3/SD_EVENT_INITIAL.3.gz
|
||||
%{_mandir}/man3/SD_EVENT_OFF.3.gz
|
||||
%{_mandir}/man3/SD_EVENT_ON.3.gz
|
||||
%{_mandir}/man3/SD_EVENT_ONESHOT.3.gz
|
||||
%{_mandir}/man3/SD_EVENT_PENDING.3.gz
|
||||
%{_mandir}/man3/SD_EVENT_PREPARING.3.gz
|
||||
%{_mandir}/man3/SD_EVENT_PRIORITY_IDLE.3.gz
|
||||
%{_mandir}/man3/SD_EVENT_PRIORITY_IMPORTANT.3.gz
|
||||
%{_mandir}/man3/SD_EVENT_PRIORITY_NORMAL.3.gz
|
||||
%{_mandir}/man3/SD_EVENT_RUNNING.3.gz
|
||||
%{_mandir}/man3/SD_HWDB_FOREACH_PROPERTY.3.gz
|
||||
%{_mandir}/man3/SD_ID128_ALLF.3.gz
|
||||
%{_mandir}/man3/SD_ID128_CONST_STR.3.gz
|
||||
%{_mandir}/man3/SD_ID128_FORMAT_STR.3.gz
|
||||
%{_mandir}/man3/SD_ID128_FORMAT_VAL.3.gz
|
||||
%{_mandir}/man3/SD_ID128_MAKE.3.gz
|
||||
%{_mandir}/man3/SD_ID128_MAKE_STR.3.gz
|
||||
%{_mandir}/man3/SD_ID128_MAKE_UUID_STR.3.gz
|
||||
%{_mandir}/man3/SD_ID128_NULL.3.gz
|
||||
%{_mandir}/man3/SD_ID128_UUID_FORMAT_STR.3.gz
|
||||
%{_mandir}/man3/SD_INFO.3.gz
|
||||
%{_mandir}/man3/SD_JOURNAL_ALL_NAMESPACES.3.gz
|
||||
%{_mandir}/man3/SD_JOURNAL_APPEND.3.gz
|
||||
%{_mandir}/man3/SD_JOURNAL_CURRENT_USER.3.gz
|
||||
%{_mandir}/man3/SD_JOURNAL_FOREACH.3.gz
|
||||
%{_mandir}/man3/SD_JOURNAL_FOREACH_BACKWARDS.3.gz
|
||||
%{_mandir}/man3/SD_JOURNAL_FOREACH_DATA.3.gz
|
||||
%{_mandir}/man3/SD_JOURNAL_FOREACH_FIELD.3.gz
|
||||
%{_mandir}/man3/SD_JOURNAL_FOREACH_UNIQUE.3.gz
|
||||
%{_mandir}/man3/SD_JOURNAL_INCLUDE_DEFAULT_NAMESPACE.3.gz
|
||||
%{_mandir}/man3/SD_JOURNAL_INVALIDATE.3.gz
|
||||
%{_mandir}/man3/SD_JOURNAL_LOCAL_ONLY.3.gz
|
||||
%{_mandir}/man3/SD_JOURNAL_NOP.3.gz
|
||||
%{_mandir}/man3/SD_JOURNAL_OS_ROOT.3.gz
|
||||
%{_mandir}/man3/SD_JOURNAL_RUNTIME_ONLY.3.gz
|
||||
%{_mandir}/man3/SD_JOURNAL_SUPPRESS_LOCATION.3.gz
|
||||
%{_mandir}/man3/SD_JOURNAL_SYSTEM.3.gz
|
||||
%{_mandir}/man3/SD_LISTEN_FDS_START.3.gz
|
||||
%{_mandir}/man3/SD_NOTICE.3.gz
|
||||
%{_mandir}/man3/SD_WARNING.3.gz
|
||||
%{_mandir}/man3/libudev.3.gz
|
||||
%{_mandir}/man3/sd-bus-errors.3.gz
|
||||
%{_mandir}/man3/sd-bus.3.gz
|
||||
%{_mandir}/man3/sd-daemon.3.gz
|
||||
%{_mandir}/man3/sd-event.3.gz
|
||||
%{_mandir}/man3/sd-hwdb.3.gz
|
||||
%{_mandir}/man3/sd-id128.3.gz
|
||||
%{_mandir}/man3/sd-journal.3.gz
|
||||
%{_mandir}/man3/sd-login.3.gz
|
||||
%{_mandir}/man3/sd_booted.3.gz
|
||||
%{_mandir}/man3/sd_bus_add_fallback.3.gz
|
||||
%{_mandir}/man3/sd_bus_add_fallback_vtable.3.gz
|
||||
%{_mandir}/man3/sd_bus_add_filter.3.gz
|
||||
%{_mandir}/man3/sd_bus_add_match.3.gz
|
||||
%{_mandir}/man3/sd_bus_add_match_async.3.gz
|
||||
%{_mandir}/man3/sd_bus_add_node_enumerator.3.gz
|
||||
%{_mandir}/man3/sd_bus_add_object.3.gz
|
||||
%{_mandir}/man3/sd_bus_add_object_manager.3.gz
|
||||
%{_mandir}/man3/sd_bus_add_object_vtable.3.gz
|
||||
%{_mandir}/man3/sd_bus_attach_event.3.gz
|
||||
%{_mandir}/man3/sd_bus_call.3.gz
|
||||
%{_mandir}/man3/sd_bus_call_async.3.gz
|
||||
%{_mandir}/man3/sd_bus_call_method.3.gz
|
||||
%{_mandir}/man3/sd_bus_call_method_async.3.gz
|
||||
%{_mandir}/man3/sd_bus_call_method_asyncv.3.gz
|
||||
%{_mandir}/man3/sd_bus_call_methodv.3.gz
|
||||
%{_mandir}/man3/sd_bus_can_send.3.gz
|
||||
%{_mandir}/man3/sd_bus_close.3.gz
|
||||
%{_mandir}/man3/sd_bus_close_unref.3.gz
|
||||
%{_mandir}/man3/sd_bus_close_unrefp.3.gz
|
||||
%{_mandir}/man3/sd_bus_creds_get_audit_login_uid.3.gz
|
||||
%{_mandir}/man3/sd_bus_creds_get_audit_session_id.3.gz
|
||||
%{_mandir}/man3/sd_bus_creds_get_augmented_mask.3.gz
|
||||
%{_mandir}/man3/sd_bus_creds_get_cgroup.3.gz
|
||||
%{_mandir}/man3/sd_bus_creds_get_cmdline.3.gz
|
||||
%{_mandir}/man3/sd_bus_creds_get_comm.3.gz
|
||||
%{_mandir}/man3/sd_bus_creds_get_description.3.gz
|
||||
%{_mandir}/man3/sd_bus_creds_get_egid.3.gz
|
||||
%{_mandir}/man3/sd_bus_creds_get_euid.3.gz
|
||||
%{_mandir}/man3/sd_bus_creds_get_exe.3.gz
|
||||
%{_mandir}/man3/sd_bus_creds_get_fsgid.3.gz
|
||||
%{_mandir}/man3/sd_bus_creds_get_fsuid.3.gz
|
||||
%{_mandir}/man3/sd_bus_creds_get_gid.3.gz
|
||||
%{_mandir}/man3/sd_bus_creds_get_mask.3.gz
|
||||
%{_mandir}/man3/sd_bus_creds_get_owner_uid.3.gz
|
||||
%{_mandir}/man3/sd_bus_creds_get_pid.3.gz
|
||||
%{_mandir}/man3/sd_bus_creds_get_ppid.3.gz
|
||||
%{_mandir}/man3/sd_bus_creds_get_selinux_context.3.gz
|
||||
%{_mandir}/man3/sd_bus_creds_get_session.3.gz
|
||||
%{_mandir}/man3/sd_bus_creds_get_sgid.3.gz
|
||||
%{_mandir}/man3/sd_bus_creds_get_slice.3.gz
|
||||
%{_mandir}/man3/sd_bus_creds_get_suid.3.gz
|
||||
%{_mandir}/man3/sd_bus_creds_get_supplementary_gids.3.gz
|
||||
%{_mandir}/man3/sd_bus_creds_get_tid.3.gz
|
||||
%{_mandir}/man3/sd_bus_creds_get_tid_comm.3.gz
|
||||
%{_mandir}/man3/sd_bus_creds_get_tty.3.gz
|
||||
%{_mandir}/man3/sd_bus_creds_get_uid.3.gz
|
||||
%{_mandir}/man3/sd_bus_creds_get_unique_name.3.gz
|
||||
%{_mandir}/man3/sd_bus_creds_get_unit.3.gz
|
||||
%{_mandir}/man3/sd_bus_creds_get_user_slice.3.gz
|
||||
%{_mandir}/man3/sd_bus_creds_get_user_unit.3.gz
|
||||
%{_mandir}/man3/sd_bus_creds_get_well_known_names.3.gz
|
||||
%{_mandir}/man3/sd_bus_creds_has_bounding_cap.3.gz
|
||||
%{_mandir}/man3/sd_bus_creds_has_effective_cap.3.gz
|
||||
%{_mandir}/man3/sd_bus_creds_has_inheritable_cap.3.gz
|
||||
%{_mandir}/man3/sd_bus_creds_has_permitted_cap.3.gz
|
||||
%{_mandir}/man3/sd_bus_creds_new_from_pid.3.gz
|
||||
%{_mandir}/man3/sd_bus_creds_ref.3.gz
|
||||
%{_mandir}/man3/sd_bus_creds_unref.3.gz
|
||||
%{_mandir}/man3/sd_bus_creds_unrefp.3.gz
|
||||
%{_mandir}/man3/sd_bus_default.3.gz
|
||||
%{_mandir}/man3/sd_bus_default_flush_close.3.gz
|
||||
%{_mandir}/man3/sd_bus_default_system.3.gz
|
||||
%{_mandir}/man3/sd_bus_default_user.3.gz
|
||||
%{_mandir}/man3/sd_bus_destroy_t.3.gz
|
||||
%{_mandir}/man3/sd_bus_detach_event.3.gz
|
||||
%{_mandir}/man3/sd_bus_emit_interfaces_added.3.gz
|
||||
%{_mandir}/man3/sd_bus_emit_interfaces_added_strv.3.gz
|
||||
%{_mandir}/man3/sd_bus_emit_interfaces_removed.3.gz
|
||||
%{_mandir}/man3/sd_bus_emit_interfaces_removed_strv.3.gz
|
||||
%{_mandir}/man3/sd_bus_emit_object_added.3.gz
|
||||
%{_mandir}/man3/sd_bus_emit_object_removed.3.gz
|
||||
%{_mandir}/man3/sd_bus_emit_properties_changed.3.gz
|
||||
%{_mandir}/man3/sd_bus_emit_properties_changed_strv.3.gz
|
||||
%{_mandir}/man3/sd_bus_emit_signal.3.gz
|
||||
%{_mandir}/man3/sd_bus_emit_signalv.3.gz
|
||||
%{_mandir}/man3/sd_bus_enqueue_for_read.3.gz
|
||||
%{_mandir}/man3/sd_bus_error.3.gz
|
||||
%{_mandir}/man3/sd_bus_error_add_map.3.gz
|
||||
%{_mandir}/man3/sd_bus_error_copy.3.gz
|
||||
%{_mandir}/man3/sd_bus_error_free.3.gz
|
||||
%{_mandir}/man3/sd_bus_error_get_errno.3.gz
|
||||
%{_mandir}/man3/sd_bus_error_has_name.3.gz
|
||||
%{_mandir}/man3/sd_bus_error_has_names.3.gz
|
||||
%{_mandir}/man3/sd_bus_error_has_names_sentinel.3.gz
|
||||
%{_mandir}/man3/sd_bus_error_is_set.3.gz
|
||||
%{_mandir}/man3/sd_bus_error_map.3.gz
|
||||
%{_mandir}/man3/sd_bus_error_move.3.gz
|
||||
%{_mandir}/man3/sd_bus_error_set.3.gz
|
||||
%{_mandir}/man3/sd_bus_error_set_const.3.gz
|
||||
%{_mandir}/man3/sd_bus_error_set_errno.3.gz
|
||||
%{_mandir}/man3/sd_bus_error_set_errnof.3.gz
|
||||
%{_mandir}/man3/sd_bus_error_set_errnofv.3.gz
|
||||
%{_mandir}/man3/sd_bus_error_setf.3.gz
|
||||
%{_mandir}/man3/sd_bus_flush.3.gz
|
||||
%{_mandir}/man3/sd_bus_flush_close_unref.3.gz
|
||||
%{_mandir}/man3/sd_bus_flush_close_unrefp.3.gz
|
||||
%{_mandir}/man3/sd_bus_get_address.3.gz
|
||||
%{_mandir}/man3/sd_bus_get_allow_interactive_authorization.3.gz
|
||||
%{_mandir}/man3/sd_bus_get_bus_id.3.gz
|
||||
%{_mandir}/man3/sd_bus_get_close_on_exit.3.gz
|
||||
%{_mandir}/man3/sd_bus_get_connected_signal.3.gz
|
||||
%{_mandir}/man3/sd_bus_get_creds_mask.3.gz
|
||||
%{_mandir}/man3/sd_bus_get_current_handler.3.gz
|
||||
%{_mandir}/man3/sd_bus_get_current_message.3.gz
|
||||
%{_mandir}/man3/sd_bus_get_current_slot.3.gz
|
||||
%{_mandir}/man3/sd_bus_get_current_userdata.3.gz
|
||||
%{_mandir}/man3/sd_bus_get_description.3.gz
|
||||
%{_mandir}/man3/sd_bus_get_event.3.gz
|
||||
%{_mandir}/man3/sd_bus_get_events.3.gz
|
||||
%{_mandir}/man3/sd_bus_get_exit_on_disconnect.3.gz
|
||||
%{_mandir}/man3/sd_bus_get_fd.3.gz
|
||||
%{_mandir}/man3/sd_bus_get_method_call_timeout.3.gz
|
||||
%{_mandir}/man3/sd_bus_get_n_queued_read.3.gz
|
||||
%{_mandir}/man3/sd_bus_get_n_queued_write.3.gz
|
||||
%{_mandir}/man3/sd_bus_get_name_creds.3.gz
|
||||
%{_mandir}/man3/sd_bus_get_name_machine_id.3.gz
|
||||
%{_mandir}/man3/sd_bus_get_owner_creds.3.gz
|
||||
%{_mandir}/man3/sd_bus_get_property.3.gz
|
||||
%{_mandir}/man3/sd_bus_get_property_string.3.gz
|
||||
%{_mandir}/man3/sd_bus_get_property_strv.3.gz
|
||||
%{_mandir}/man3/sd_bus_get_property_trivial.3.gz
|
||||
%{_mandir}/man3/sd_bus_get_scope.3.gz
|
||||
%{_mandir}/man3/sd_bus_get_sender.3.gz
|
||||
%{_mandir}/man3/sd_bus_get_tid.3.gz
|
||||
%{_mandir}/man3/sd_bus_get_timeout.3.gz
|
||||
%{_mandir}/man3/sd_bus_get_unique_name.3.gz
|
||||
%{_mandir}/man3/sd_bus_get_watch_bind.3.gz
|
||||
%{_mandir}/man3/sd_bus_interface_name_is_valid.3.gz
|
||||
%{_mandir}/man3/sd_bus_is_anonymous.3.gz
|
||||
%{_mandir}/man3/sd_bus_is_bus_client.3.gz
|
||||
%{_mandir}/man3/sd_bus_is_monitor.3.gz
|
||||
%{_mandir}/man3/sd_bus_is_open.3.gz
|
||||
%{_mandir}/man3/sd_bus_is_ready.3.gz
|
||||
%{_mandir}/man3/sd_bus_is_server.3.gz
|
||||
%{_mandir}/man3/sd_bus_is_trusted.3.gz
|
||||
%{_mandir}/man3/sd_bus_list_names.3.gz
|
||||
%{_mandir}/man3/sd_bus_match_signal.3.gz
|
||||
%{_mandir}/man3/sd_bus_match_signal_async.3.gz
|
||||
%{_mandir}/man3/sd_bus_member_name_is_valid.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_append.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_append_array.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_append_array_iovec.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_append_array_memfd.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_append_array_space.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_append_basic.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_append_string_iovec.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_append_string_memfd.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_append_string_space.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_append_strv.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_appendv.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_at_end.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_close_container.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_copy.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_dump.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_enter_container.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_exit_container.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_get_allow_interactive_authorization.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_get_auto_start.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_get_bus.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_get_cookie.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_get_creds.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_get_destination.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_get_errno.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_get_error.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_get_expect_reply.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_get_interface.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_get_member.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_get_monotonic_usec.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_get_path.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_get_realtime_usec.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_get_reply_cookie.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_get_sender.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_get_seqnum.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_get_signature.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_get_type.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_has_signature.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_is_empty.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_is_method_call.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_is_method_error.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_is_signal.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_new.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_new_method_call.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_new_method_errno.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_new_method_errnof.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_new_method_error.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_new_method_errorf.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_new_method_return.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_new_signal.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_open_container.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_peek_type.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_read.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_read_array.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_read_basic.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_read_strv.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_readv.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_ref.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_rewind.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_seal.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_send.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_sensitive.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_set_allow_interactive_authorization.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_set_auto_start.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_set_destination.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_set_expect_reply.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_set_sender.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_skip.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_unref.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_unrefp.3.gz
|
||||
%{_mandir}/man3/sd_bus_message_verify_type.3.gz
|
||||
%{_mandir}/man3/sd_bus_negotiate_creds.3.gz
|
||||
%{_mandir}/man3/sd_bus_negotiate_fds.3.gz
|
||||
%{_mandir}/man3/sd_bus_negotiate_timestamp.3.gz
|
||||
%{_mandir}/man3/sd_bus_new.3.gz
|
||||
%{_mandir}/man3/sd_bus_object_path_is_valid.3.gz
|
||||
%{_mandir}/man3/sd_bus_open.3.gz
|
||||
%{_mandir}/man3/sd_bus_open_system.3.gz
|
||||
%{_mandir}/man3/sd_bus_open_system_machine.3.gz
|
||||
%{_mandir}/man3/sd_bus_open_system_remote.3.gz
|
||||
%{_mandir}/man3/sd_bus_open_system_with_description.3.gz
|
||||
%{_mandir}/man3/sd_bus_open_user.3.gz
|
||||
%{_mandir}/man3/sd_bus_open_user_machine.3.gz
|
||||
%{_mandir}/man3/sd_bus_open_user_with_description.3.gz
|
||||
%{_mandir}/man3/sd_bus_open_with_description.3.gz
|
||||
%{_mandir}/man3/sd_bus_path_decode.3.gz
|
||||
%{_mandir}/man3/sd_bus_path_decode_many.3.gz
|
||||
%{_mandir}/man3/sd_bus_path_encode.3.gz
|
||||
%{_mandir}/man3/sd_bus_path_encode_many.3.gz
|
||||
%{_mandir}/man3/sd_bus_process.3.gz
|
||||
%{_mandir}/man3/sd_bus_query_sender_creds.3.gz
|
||||
%{_mandir}/man3/sd_bus_query_sender_privilege.3.gz
|
||||
%{_mandir}/man3/sd_bus_ref.3.gz
|
||||
%{_mandir}/man3/sd_bus_release_name.3.gz
|
||||
%{_mandir}/man3/sd_bus_release_name_async.3.gz
|
||||
%{_mandir}/man3/sd_bus_reply_method_errno.3.gz
|
||||
%{_mandir}/man3/sd_bus_reply_method_errnof.3.gz
|
||||
%{_mandir}/man3/sd_bus_reply_method_errnofv.3.gz
|
||||
%{_mandir}/man3/sd_bus_reply_method_error.3.gz
|
||||
%{_mandir}/man3/sd_bus_reply_method_errorf.3.gz
|
||||
%{_mandir}/man3/sd_bus_reply_method_errorfv.3.gz
|
||||
%{_mandir}/man3/sd_bus_reply_method_return.3.gz
|
||||
%{_mandir}/man3/sd_bus_reply_method_returnv.3.gz
|
||||
%{_mandir}/man3/sd_bus_request_name.3.gz
|
||||
%{_mandir}/man3/sd_bus_request_name_async.3.gz
|
||||
%{_mandir}/man3/sd_bus_send.3.gz
|
||||
%{_mandir}/man3/sd_bus_send_to.3.gz
|
||||
%{_mandir}/man3/sd_bus_service_name_is_valid.3.gz
|
||||
%{_mandir}/man3/sd_bus_set_address.3.gz
|
||||
%{_mandir}/man3/sd_bus_set_allow_interactive_authorization.3.gz
|
||||
%{_mandir}/man3/sd_bus_set_anonymous.3.gz
|
||||
%{_mandir}/man3/sd_bus_set_bus_client.3.gz
|
||||
%{_mandir}/man3/sd_bus_set_close_on_exit.3.gz
|
||||
%{_mandir}/man3/sd_bus_set_connected_signal.3.gz
|
||||
%{_mandir}/man3/sd_bus_set_description.3.gz
|
||||
%{_mandir}/man3/sd_bus_set_exec.3.gz
|
||||
%{_mandir}/man3/sd_bus_set_exit_on_disconnect.3.gz
|
||||
%{_mandir}/man3/sd_bus_set_fd.3.gz
|
||||
%{_mandir}/man3/sd_bus_set_method_call_timeout.3.gz
|
||||
%{_mandir}/man3/sd_bus_set_monitor.3.gz
|
||||
%{_mandir}/man3/sd_bus_set_property.3.gz
|
||||
%{_mandir}/man3/sd_bus_set_propertyv.3.gz
|
||||
%{_mandir}/man3/sd_bus_set_sender.3.gz
|
||||
%{_mandir}/man3/sd_bus_set_server.3.gz
|
||||
%{_mandir}/man3/sd_bus_set_trusted.3.gz
|
||||
%{_mandir}/man3/sd_bus_set_watch_bind.3.gz
|
||||
%{_mandir}/man3/sd_bus_slot_get_bus.3.gz
|
||||
%{_mandir}/man3/sd_bus_slot_get_current_handler.3.gz
|
||||
%{_mandir}/man3/sd_bus_slot_get_current_message.3.gz
|
||||
%{_mandir}/man3/sd_bus_slot_get_current_userdata.3.gz
|
||||
%{_mandir}/man3/sd_bus_slot_get_description.3.gz
|
||||
%{_mandir}/man3/sd_bus_slot_get_destroy_callback.3.gz
|
||||
%{_mandir}/man3/sd_bus_slot_get_floating.3.gz
|
||||
%{_mandir}/man3/sd_bus_slot_get_userdata.3.gz
|
||||
%{_mandir}/man3/sd_bus_slot_ref.3.gz
|
||||
%{_mandir}/man3/sd_bus_slot_set_description.3.gz
|
||||
%{_mandir}/man3/sd_bus_slot_set_destroy_callback.3.gz
|
||||
%{_mandir}/man3/sd_bus_slot_set_floating.3.gz
|
||||
%{_mandir}/man3/sd_bus_slot_set_userdata.3.gz
|
||||
%{_mandir}/man3/sd_bus_slot_unref.3.gz
|
||||
%{_mandir}/man3/sd_bus_slot_unrefp.3.gz
|
||||
%{_mandir}/man3/sd_bus_start.3.gz
|
||||
%{_mandir}/man3/sd_bus_track_add_name.3.gz
|
||||
%{_mandir}/man3/sd_bus_track_add_sender.3.gz
|
||||
%{_mandir}/man3/sd_bus_track_contains.3.gz
|
||||
%{_mandir}/man3/sd_bus_track_count.3.gz
|
||||
%{_mandir}/man3/sd_bus_track_count_name.3.gz
|
||||
%{_mandir}/man3/sd_bus_track_count_sender.3.gz
|
||||
%{_mandir}/man3/sd_bus_track_first.3.gz
|
||||
%{_mandir}/man3/sd_bus_track_get_bus.3.gz
|
||||
%{_mandir}/man3/sd_bus_track_get_destroy_callback.3.gz
|
||||
%{_mandir}/man3/sd_bus_track_get_recursive.3.gz
|
||||
%{_mandir}/man3/sd_bus_track_get_userdata.3.gz
|
||||
%{_mandir}/man3/sd_bus_track_new.3.gz
|
||||
%{_mandir}/man3/sd_bus_track_next.3.gz
|
||||
%{_mandir}/man3/sd_bus_track_ref.3.gz
|
||||
%{_mandir}/man3/sd_bus_track_remove_name.3.gz
|
||||
%{_mandir}/man3/sd_bus_track_remove_sender.3.gz
|
||||
%{_mandir}/man3/sd_bus_track_set_destroy_callback.3.gz
|
||||
%{_mandir}/man3/sd_bus_track_set_recursive.3.gz
|
||||
%{_mandir}/man3/sd_bus_track_set_userdata.3.gz
|
||||
%{_mandir}/man3/sd_bus_track_unref.3.gz
|
||||
%{_mandir}/man3/sd_bus_track_unrefp.3.gz
|
||||
%{_mandir}/man3/sd_bus_unref.3.gz
|
||||
%{_mandir}/man3/sd_bus_unrefp.3.gz
|
||||
%{_mandir}/man3/sd_bus_wait.3.gz
|
||||
%{_mandir}/man3/sd_event.3.gz
|
||||
%{_mandir}/man3/sd_event_add_child.3.gz
|
||||
%{_mandir}/man3/sd_event_add_child_pidfd.3.gz
|
||||
%{_mandir}/man3/sd_event_add_defer.3.gz
|
||||
%{_mandir}/man3/sd_event_add_exit.3.gz
|
||||
%{_mandir}/man3/sd_event_add_inotify.3.gz
|
||||
%{_mandir}/man3/sd_event_add_io.3.gz
|
||||
%{_mandir}/man3/sd_event_add_post.3.gz
|
||||
%{_mandir}/man3/sd_event_add_signal.3.gz
|
||||
%{_mandir}/man3/sd_event_add_time.3.gz
|
||||
%{_mandir}/man3/sd_event_add_time_relative.3.gz
|
||||
%{_mandir}/man3/sd_event_child_handler_t.3.gz
|
||||
%{_mandir}/man3/sd_event_default.3.gz
|
||||
%{_mandir}/man3/sd_event_destroy_t.3.gz
|
||||
%{_mandir}/man3/sd_event_dispatch.3.gz
|
||||
%{_mandir}/man3/sd_event_exit.3.gz
|
||||
%{_mandir}/man3/sd_event_get_exit_code.3.gz
|
||||
%{_mandir}/man3/sd_event_get_fd.3.gz
|
||||
%{_mandir}/man3/sd_event_get_iteration.3.gz
|
||||
%{_mandir}/man3/sd_event_get_state.3.gz
|
||||
%{_mandir}/man3/sd_event_get_tid.3.gz
|
||||
%{_mandir}/man3/sd_event_get_watchdog.3.gz
|
||||
%{_mandir}/man3/sd_event_handler_t.3.gz
|
||||
%{_mandir}/man3/sd_event_inotify_handler_t.3.gz
|
||||
%{_mandir}/man3/sd_event_io_handler_t.3.gz
|
||||
%{_mandir}/man3/sd_event_loop.3.gz
|
||||
%{_mandir}/man3/sd_event_new.3.gz
|
||||
%{_mandir}/man3/sd_event_now.3.gz
|
||||
%{_mandir}/man3/sd_event_prepare.3.gz
|
||||
%{_mandir}/man3/sd_event_ref.3.gz
|
||||
%{_mandir}/man3/sd_event_run.3.gz
|
||||
%{_mandir}/man3/sd_event_set_watchdog.3.gz
|
||||
%{_mandir}/man3/sd_event_signal_handler_t.3.gz
|
||||
%{_mandir}/man3/sd_event_source.3.gz
|
||||
%{_mandir}/man3/sd_event_source_disable_unref.3.gz
|
||||
%{_mandir}/man3/sd_event_source_disable_unrefp.3.gz
|
||||
%{_mandir}/man3/sd_event_source_get_child_pid.3.gz
|
||||
%{_mandir}/man3/sd_event_source_get_child_pidfd.3.gz
|
||||
%{_mandir}/man3/sd_event_source_get_child_pidfd_own.3.gz
|
||||
%{_mandir}/man3/sd_event_source_get_child_process_own.3.gz
|
||||
%{_mandir}/man3/sd_event_source_get_description.3.gz
|
||||
%{_mandir}/man3/sd_event_source_get_destroy_callback.3.gz
|
||||
%{_mandir}/man3/sd_event_source_get_enabled.3.gz
|
||||
%{_mandir}/man3/sd_event_source_get_event.3.gz
|
||||
%{_mandir}/man3/sd_event_source_get_exit_on_failure.3.gz
|
||||
%{_mandir}/man3/sd_event_source_get_floating.3.gz
|
||||
%{_mandir}/man3/sd_event_source_get_inotify_mask.3.gz
|
||||
%{_mandir}/man3/sd_event_source_get_io_events.3.gz
|
||||
%{_mandir}/man3/sd_event_source_get_io_fd.3.gz
|
||||
%{_mandir}/man3/sd_event_source_get_io_fd_own.3.gz
|
||||
%{_mandir}/man3/sd_event_source_get_io_revents.3.gz
|
||||
%{_mandir}/man3/sd_event_source_get_pending.3.gz
|
||||
%{_mandir}/man3/sd_event_source_get_priority.3.gz
|
||||
%{_mandir}/man3/sd_event_source_get_ratelimit.3.gz
|
||||
%{_mandir}/man3/sd_event_source_get_signal.3.gz
|
||||
%{_mandir}/man3/sd_event_source_get_time.3.gz
|
||||
%{_mandir}/man3/sd_event_source_get_time_accuracy.3.gz
|
||||
%{_mandir}/man3/sd_event_source_get_time_clock.3.gz
|
||||
%{_mandir}/man3/sd_event_source_get_userdata.3.gz
|
||||
%{_mandir}/man3/sd_event_source_is_ratelimited.3.gz
|
||||
%{_mandir}/man3/sd_event_source_ref.3.gz
|
||||
%{_mandir}/man3/sd_event_source_send_child_signal.3.gz
|
||||
%{_mandir}/man3/sd_event_source_set_child_pidfd_own.3.gz
|
||||
%{_mandir}/man3/sd_event_source_set_child_process_own.3.gz
|
||||
%{_mandir}/man3/sd_event_source_set_description.3.gz
|
||||
%{_mandir}/man3/sd_event_source_set_destroy_callback.3.gz
|
||||
%{_mandir}/man3/sd_event_source_set_enabled.3.gz
|
||||
%{_mandir}/man3/sd_event_source_set_exit_on_failure.3.gz
|
||||
%{_mandir}/man3/sd_event_source_set_floating.3.gz
|
||||
%{_mandir}/man3/sd_event_source_set_io_events.3.gz
|
||||
%{_mandir}/man3/sd_event_source_set_io_fd.3.gz
|
||||
%{_mandir}/man3/sd_event_source_set_io_fd_own.3.gz
|
||||
%{_mandir}/man3/sd_event_source_set_prepare.3.gz
|
||||
%{_mandir}/man3/sd_event_source_set_priority.3.gz
|
||||
%{_mandir}/man3/sd_event_source_set_ratelimit.3.gz
|
||||
%{_mandir}/man3/sd_event_source_set_time.3.gz
|
||||
%{_mandir}/man3/sd_event_source_set_time_accuracy.3.gz
|
||||
%{_mandir}/man3/sd_event_source_set_time_relative.3.gz
|
||||
%{_mandir}/man3/sd_event_source_set_userdata.3.gz
|
||||
%{_mandir}/man3/sd_event_source_unref.3.gz
|
||||
%{_mandir}/man3/sd_event_source_unrefp.3.gz
|
||||
%{_mandir}/man3/sd_event_time_handler_t.3.gz
|
||||
%{_mandir}/man3/sd_event_unref.3.gz
|
||||
%{_mandir}/man3/sd_event_unrefp.3.gz
|
||||
%{_mandir}/man3/sd_event_wait.3.gz
|
||||
%{_mandir}/man3/sd_get_machine_names.3.gz
|
||||
%{_mandir}/man3/sd_get_seats.3.gz
|
||||
%{_mandir}/man3/sd_get_sessions.3.gz
|
||||
%{_mandir}/man3/sd_get_uids.3.gz
|
||||
%{_mandir}/man3/sd_hwdb_enumerate.3.gz
|
||||
%{_mandir}/man3/sd_hwdb_get.3.gz
|
||||
%{_mandir}/man3/sd_hwdb_new.3.gz
|
||||
%{_mandir}/man3/sd_hwdb_ref.3.gz
|
||||
%{_mandir}/man3/sd_hwdb_seek.3.gz
|
||||
%{_mandir}/man3/sd_hwdb_unref.3.gz
|
||||
%{_mandir}/man3/sd_id128_equal.3.gz
|
||||
%{_mandir}/man3/sd_id128_from_string.3.gz
|
||||
%{_mandir}/man3/sd_id128_get_boot.3.gz
|
||||
%{_mandir}/man3/sd_id128_get_boot_app_specific.3.gz
|
||||
%{_mandir}/man3/sd_id128_get_invocation.3.gz
|
||||
%{_mandir}/man3/sd_id128_get_machine.3.gz
|
||||
%{_mandir}/man3/sd_id128_get_machine_app_specific.3.gz
|
||||
%{_mandir}/man3/sd_id128_in_set.3.gz
|
||||
%{_mandir}/man3/sd_id128_in_set_sentinel.3.gz
|
||||
%{_mandir}/man3/sd_id128_in_setv.3.gz
|
||||
%{_mandir}/man3/sd_id128_is_allf.3.gz
|
||||
%{_mandir}/man3/sd_id128_is_null.3.gz
|
||||
%{_mandir}/man3/sd_id128_randomize.3.gz
|
||||
%{_mandir}/man3/sd_id128_t.3.gz
|
||||
%{_mandir}/man3/sd_id128_to_string.3.gz
|
||||
%{_mandir}/man3/sd_is_fifo.3.gz
|
||||
%{_mandir}/man3/sd_is_mq.3.gz
|
||||
%{_mandir}/man3/sd_is_socket.3.gz
|
||||
%{_mandir}/man3/sd_is_socket_inet.3.gz
|
||||
%{_mandir}/man3/sd_is_socket_sockaddr.3.gz
|
||||
%{_mandir}/man3/sd_is_socket_unix.3.gz
|
||||
%{_mandir}/man3/sd_is_special.3.gz
|
||||
%{_mandir}/man3/sd_journal.3.gz
|
||||
%{_mandir}/man3/sd_journal_add_conjunction.3.gz
|
||||
%{_mandir}/man3/sd_journal_add_disjunction.3.gz
|
||||
%{_mandir}/man3/sd_journal_add_match.3.gz
|
||||
%{_mandir}/man3/sd_journal_close.3.gz
|
||||
%{_mandir}/man3/sd_journal_enumerate_available_data.3.gz
|
||||
%{_mandir}/man3/sd_journal_enumerate_available_unique.3.gz
|
||||
%{_mandir}/man3/sd_journal_enumerate_data.3.gz
|
||||
%{_mandir}/man3/sd_journal_enumerate_fields.3.gz
|
||||
%{_mandir}/man3/sd_journal_enumerate_unique.3.gz
|
||||
%{_mandir}/man3/sd_journal_flush_matches.3.gz
|
||||
%{_mandir}/man3/sd_journal_get_catalog.3.gz
|
||||
%{_mandir}/man3/sd_journal_get_catalog_for_message_id.3.gz
|
||||
%{_mandir}/man3/sd_journal_get_cursor.3.gz
|
||||
%{_mandir}/man3/sd_journal_get_cutoff_monotonic_usec.3.gz
|
||||
%{_mandir}/man3/sd_journal_get_cutoff_realtime_usec.3.gz
|
||||
%{_mandir}/man3/sd_journal_get_data.3.gz
|
||||
%{_mandir}/man3/sd_journal_get_data_threshold.3.gz
|
||||
%{_mandir}/man3/sd_journal_get_events.3.gz
|
||||
%{_mandir}/man3/sd_journal_get_fd.3.gz
|
||||
%{_mandir}/man3/sd_journal_get_monotonic_usec.3.gz
|
||||
%{_mandir}/man3/sd_journal_get_realtime_usec.3.gz
|
||||
%{_mandir}/man3/sd_journal_get_timeout.3.gz
|
||||
%{_mandir}/man3/sd_journal_get_usage.3.gz
|
||||
%{_mandir}/man3/sd_journal_has_persistent_files.3.gz
|
||||
%{_mandir}/man3/sd_journal_has_runtime_files.3.gz
|
||||
%{_mandir}/man3/sd_journal_next.3.gz
|
||||
%{_mandir}/man3/sd_journal_next_skip.3.gz
|
||||
%{_mandir}/man3/sd_journal_open.3.gz
|
||||
%{_mandir}/man3/sd_journal_open_directory.3.gz
|
||||
%{_mandir}/man3/sd_journal_open_directory_fd.3.gz
|
||||
%{_mandir}/man3/sd_journal_open_files.3.gz
|
||||
%{_mandir}/man3/sd_journal_open_files_fd.3.gz
|
||||
%{_mandir}/man3/sd_journal_open_namespace.3.gz
|
||||
%{_mandir}/man3/sd_journal_perror.3.gz
|
||||
%{_mandir}/man3/sd_journal_perror_with_location.3.gz
|
||||
%{_mandir}/man3/sd_journal_previous.3.gz
|
||||
%{_mandir}/man3/sd_journal_previous_skip.3.gz
|
||||
%{_mandir}/man3/sd_journal_print.3.gz
|
||||
%{_mandir}/man3/sd_journal_print_with_location.3.gz
|
||||
%{_mandir}/man3/sd_journal_printv.3.gz
|
||||
%{_mandir}/man3/sd_journal_printv_with_location.3.gz
|
||||
%{_mandir}/man3/sd_journal_process.3.gz
|
||||
%{_mandir}/man3/sd_journal_query_unique.3.gz
|
||||
%{_mandir}/man3/sd_journal_reliable_fd.3.gz
|
||||
%{_mandir}/man3/sd_journal_restart_data.3.gz
|
||||
%{_mandir}/man3/sd_journal_restart_fields.3.gz
|
||||
%{_mandir}/man3/sd_journal_restart_unique.3.gz
|
||||
%{_mandir}/man3/sd_journal_seek_cursor.3.gz
|
||||
%{_mandir}/man3/sd_journal_seek_head.3.gz
|
||||
%{_mandir}/man3/sd_journal_seek_monotonic_usec.3.gz
|
||||
%{_mandir}/man3/sd_journal_seek_realtime_usec.3.gz
|
||||
%{_mandir}/man3/sd_journal_seek_tail.3.gz
|
||||
%{_mandir}/man3/sd_journal_send.3.gz
|
||||
%{_mandir}/man3/sd_journal_send_with_location.3.gz
|
||||
%{_mandir}/man3/sd_journal_sendv.3.gz
|
||||
%{_mandir}/man3/sd_journal_sendv_with_location.3.gz
|
||||
%{_mandir}/man3/sd_journal_set_data_threshold.3.gz
|
||||
%{_mandir}/man3/sd_journal_stream_fd.3.gz
|
||||
%{_mandir}/man3/sd_journal_test_cursor.3.gz
|
||||
%{_mandir}/man3/sd_journal_wait.3.gz
|
||||
%{_mandir}/man3/sd_listen_fds.3.gz
|
||||
%{_mandir}/man3/sd_listen_fds_with_names.3.gz
|
||||
%{_mandir}/man3/sd_login_monitor.3.gz
|
||||
%{_mandir}/man3/sd_login_monitor_flush.3.gz
|
||||
%{_mandir}/man3/sd_login_monitor_get_events.3.gz
|
||||
%{_mandir}/man3/sd_login_monitor_get_fd.3.gz
|
||||
%{_mandir}/man3/sd_login_monitor_get_timeout.3.gz
|
||||
%{_mandir}/man3/sd_login_monitor_new.3.gz
|
||||
%{_mandir}/man3/sd_login_monitor_unref.3.gz
|
||||
%{_mandir}/man3/sd_login_monitor_unrefp.3.gz
|
||||
%{_mandir}/man3/sd_machine_get_class.3.gz
|
||||
%{_mandir}/man3/sd_machine_get_ifindices.3.gz
|
||||
%{_mandir}/man3/sd_notify.3.gz
|
||||
%{_mandir}/man3/sd_notify_barrier.3.gz
|
||||
%{_mandir}/man3/sd_notifyf.3.gz
|
||||
%{_mandir}/man3/sd_path_lookup.3.gz
|
||||
%{_mandir}/man3/sd_path_lookup_strv.3.gz
|
||||
%{_mandir}/man3/sd_peer_get_cgroup.3.gz
|
||||
%{_mandir}/man3/sd_peer_get_machine_name.3.gz
|
||||
%{_mandir}/man3/sd_peer_get_owner_uid.3.gz
|
||||
%{_mandir}/man3/sd_peer_get_session.3.gz
|
||||
%{_mandir}/man3/sd_peer_get_slice.3.gz
|
||||
%{_mandir}/man3/sd_peer_get_unit.3.gz
|
||||
%{_mandir}/man3/sd_peer_get_user_slice.3.gz
|
||||
%{_mandir}/man3/sd_peer_get_user_unit.3.gz
|
||||
%{_mandir}/man3/sd_pid_get_cgroup.3.gz
|
||||
%{_mandir}/man3/sd_pid_get_machine_name.3.gz
|
||||
%{_mandir}/man3/sd_pid_get_owner_uid.3.gz
|
||||
%{_mandir}/man3/sd_pid_get_session.3.gz
|
||||
%{_mandir}/man3/sd_pid_get_slice.3.gz
|
||||
%{_mandir}/man3/sd_pid_get_unit.3.gz
|
||||
%{_mandir}/man3/sd_pid_get_user_slice.3.gz
|
||||
%{_mandir}/man3/sd_pid_get_user_unit.3.gz
|
||||
%{_mandir}/man3/sd_pid_notify.3.gz
|
||||
%{_mandir}/man3/sd_pid_notify_with_fds.3.gz
|
||||
%{_mandir}/man3/sd_pid_notifyf.3.gz
|
||||
%{_mandir}/man3/sd_seat_can_graphical.3.gz
|
||||
%{_mandir}/man3/sd_seat_can_tty.3.gz
|
||||
%{_mandir}/man3/sd_seat_get_active.3.gz
|
||||
%{_mandir}/man3/sd_seat_get_sessions.3.gz
|
||||
%{_mandir}/man3/sd_session_get_class.3.gz
|
||||
%{_mandir}/man3/sd_session_get_desktop.3.gz
|
||||
%{_mandir}/man3/sd_session_get_display.3.gz
|
||||
%{_mandir}/man3/sd_session_get_remote_host.3.gz
|
||||
%{_mandir}/man3/sd_session_get_remote_user.3.gz
|
||||
%{_mandir}/man3/sd_session_get_seat.3.gz
|
||||
%{_mandir}/man3/sd_session_get_service.3.gz
|
||||
%{_mandir}/man3/sd_session_get_state.3.gz
|
||||
%{_mandir}/man3/sd_session_get_tty.3.gz
|
||||
%{_mandir}/man3/sd_session_get_type.3.gz
|
||||
%{_mandir}/man3/sd_session_get_uid.3.gz
|
||||
%{_mandir}/man3/sd_session_get_vt.3.gz
|
||||
%{_mandir}/man3/sd_session_is_active.3.gz
|
||||
%{_mandir}/man3/sd_session_is_remote.3.gz
|
||||
%{_mandir}/man3/sd_uid_get_display.3.gz
|
||||
%{_mandir}/man3/sd_uid_get_seats.3.gz
|
||||
%{_mandir}/man3/sd_uid_get_sessions.3.gz
|
||||
%{_mandir}/man3/sd_uid_get_state.3.gz
|
||||
%{_mandir}/man3/sd_uid_is_on_seat.3.gz
|
||||
%{_mandir}/man3/sd_watchdog_enabled.3.gz
|
||||
%{_mandir}/man3/udev_device_get_action.3.gz
|
||||
%{_mandir}/man3/udev_device_get_current_tags_list_entry.3.gz
|
||||
%{_mandir}/man3/udev_device_get_devlinks_list_entry.3.gz
|
||||
%{_mandir}/man3/udev_device_get_devnode.3.gz
|
||||
%{_mandir}/man3/udev_device_get_devnum.3.gz
|
||||
%{_mandir}/man3/udev_device_get_devpath.3.gz
|
||||
%{_mandir}/man3/udev_device_get_devtype.3.gz
|
||||
%{_mandir}/man3/udev_device_get_driver.3.gz
|
||||
%{_mandir}/man3/udev_device_get_is_initialized.3.gz
|
||||
%{_mandir}/man3/udev_device_get_parent.3.gz
|
||||
%{_mandir}/man3/udev_device_get_parent_with_subsystem_devtype.3.gz
|
||||
%{_mandir}/man3/udev_device_get_properties_list_entry.3.gz
|
||||
%{_mandir}/man3/udev_device_get_property_value.3.gz
|
||||
%{_mandir}/man3/udev_device_get_subsystem.3.gz
|
||||
%{_mandir}/man3/udev_device_get_sysattr_list_entry.3.gz
|
||||
%{_mandir}/man3/udev_device_get_sysattr_value.3.gz
|
||||
%{_mandir}/man3/udev_device_get_sysname.3.gz
|
||||
%{_mandir}/man3/udev_device_get_sysnum.3.gz
|
||||
%{_mandir}/man3/udev_device_get_syspath.3.gz
|
||||
%{_mandir}/man3/udev_device_get_tags_list_entry.3.gz
|
||||
%{_mandir}/man3/udev_device_get_udev.3.gz
|
||||
%{_mandir}/man3/udev_device_has_current_tag.3.gz
|
||||
%{_mandir}/man3/udev_device_has_tag.3.gz
|
||||
%{_mandir}/man3/udev_device_new_from_device_id.3.gz
|
||||
%{_mandir}/man3/udev_device_new_from_devnum.3.gz
|
||||
%{_mandir}/man3/udev_device_new_from_environment.3.gz
|
||||
%{_mandir}/man3/udev_device_new_from_subsystem_sysname.3.gz
|
||||
%{_mandir}/man3/udev_device_new_from_syspath.3.gz
|
||||
%{_mandir}/man3/udev_device_ref.3.gz
|
||||
%{_mandir}/man3/udev_device_set_sysattr_value.3.gz
|
||||
%{_mandir}/man3/udev_device_unref.3.gz
|
||||
%{_mandir}/man3/udev_enumerate_add_match_is_initialized.3.gz
|
||||
%{_mandir}/man3/udev_enumerate_add_match_parent.3.gz
|
||||
%{_mandir}/man3/udev_enumerate_add_match_property.3.gz
|
||||
%{_mandir}/man3/udev_enumerate_add_match_subsystem.3.gz
|
||||
%{_mandir}/man3/udev_enumerate_add_match_sysattr.3.gz
|
||||
%{_mandir}/man3/udev_enumerate_add_match_sysname.3.gz
|
||||
%{_mandir}/man3/udev_enumerate_add_match_tag.3.gz
|
||||
%{_mandir}/man3/udev_enumerate_add_nomatch_subsystem.3.gz
|
||||
%{_mandir}/man3/udev_enumerate_add_nomatch_sysattr.3.gz
|
||||
%{_mandir}/man3/udev_enumerate_add_syspath.3.gz
|
||||
%{_mandir}/man3/udev_enumerate_get_list_entry.3.gz
|
||||
%{_mandir}/man3/udev_enumerate_get_udev.3.gz
|
||||
%{_mandir}/man3/udev_enumerate_new.3.gz
|
||||
%{_mandir}/man3/udev_enumerate_ref.3.gz
|
||||
%{_mandir}/man3/udev_enumerate_scan_devices.3.gz
|
||||
%{_mandir}/man3/udev_enumerate_scan_subsystems.3.gz
|
||||
%{_mandir}/man3/udev_enumerate_unref.3.gz
|
||||
%{_mandir}/man3/udev_list_entry.3.gz
|
||||
%{_mandir}/man3/udev_list_entry_get_by_name.3.gz
|
||||
%{_mandir}/man3/udev_list_entry_get_name.3.gz
|
||||
%{_mandir}/man3/udev_list_entry_get_next.3.gz
|
||||
%{_mandir}/man3/udev_list_entry_get_value.3.gz
|
||||
%{_mandir}/man3/udev_monitor_enable_receiving.3.gz
|
||||
%{_mandir}/man3/udev_monitor_filter_add_match_subsystem_devtype.3.gz
|
||||
%{_mandir}/man3/udev_monitor_filter_add_match_tag.3.gz
|
||||
%{_mandir}/man3/udev_monitor_filter_remove.3.gz
|
||||
%{_mandir}/man3/udev_monitor_filter_update.3.gz
|
||||
%{_mandir}/man3/udev_monitor_get_fd.3.gz
|
||||
%{_mandir}/man3/udev_monitor_get_udev.3.gz
|
||||
%{_mandir}/man3/udev_monitor_new_from_netlink.3.gz
|
||||
%{_mandir}/man3/udev_monitor_receive_device.3.gz
|
||||
%{_mandir}/man3/udev_monitor_ref.3.gz
|
||||
%{_mandir}/man3/udev_monitor_set_receive_buffer_size.3.gz
|
||||
%{_mandir}/man3/udev_monitor_unref.3.gz
|
||||
%{_mandir}/man3/udev_new.3.gz
|
||||
%{_mandir}/man3/udev_ref.3.gz
|
||||
%{_mandir}/man3/udev_unref.3.gz
|
||||
%endif
|
61
files.network
Normal file
61
files.network
Normal file
|
@ -0,0 +1,61 @@
|
|||
#
|
||||
# Please keep the list sorted (with `LC_ALL=C sort`).
|
||||
#
|
||||
%if %{with networkd}
|
||||
%config(noreplace) %{_sysconfdir}/systemd/networkd.conf
|
||||
%dir %{_sysconfdir}/systemd/network
|
||||
%dir %{_systemd_util_dir}/network
|
||||
%{_bindir}/networkctl
|
||||
%{_datadir}/bash-completion/completions/networkctl
|
||||
%{_datadir}/dbus-1/system-services/org.freedesktop.network1.service
|
||||
%{_datadir}/dbus-1/system.d/org.freedesktop.network1.conf
|
||||
%{_datadir}/polkit-1/actions/org.freedesktop.network1.policy
|
||||
%{_datadir}/polkit-1/rules.d/60-systemd-networkd.rules
|
||||
%{_datadir}/zsh/site-functions/_networkctl
|
||||
%{_mandir}/man1/networkctl.1.gz
|
||||
%{_mandir}/man5/networkd.conf.5.gz
|
||||
%{_mandir}/man5/networkd.conf.d.5.gz
|
||||
%{_mandir}/man5/systemd.network.5.gz
|
||||
%{_mandir}/man8/systemd-networkd-wait-online.8.gz
|
||||
%{_mandir}/man8/systemd-networkd-wait-online.service.8.gz
|
||||
%{_mandir}/man8/systemd-networkd.8.gz
|
||||
%{_mandir}/man8/systemd-networkd.service.8.gz
|
||||
%{_systemd_util_dir}/network/80-container-host0.network
|
||||
%{_systemd_util_dir}/network/80-container-ve.network
|
||||
%{_systemd_util_dir}/network/80-container-vz.network
|
||||
%{_systemd_util_dir}/network/80-vm-vt.network
|
||||
%{_systemd_util_dir}/network/80-wifi-adhoc.network
|
||||
%{_systemd_util_dir}/network/80-wifi-ap.network.example
|
||||
%{_systemd_util_dir}/network/80-wifi-station.network.example
|
||||
%{_systemd_util_dir}/systemd-networkd
|
||||
%{_systemd_util_dir}/systemd-networkd-wait-online
|
||||
%{_unitdir}/systemd-networkd-wait-online.service
|
||||
%{_unitdir}/systemd-networkd.service
|
||||
%{_unitdir}/systemd-networkd.socket
|
||||
%endif
|
||||
|
||||
%if %{with resolved}
|
||||
%config(noreplace) %{_sysconfdir}/systemd/resolved.conf
|
||||
%{_bindir}/resolvectl
|
||||
%{_bindir}/systemd-resolve
|
||||
%{_datadir}/bash-completion/completions/resolvectl
|
||||
%{_datadir}/bash-completion/completions/systemd-resolve
|
||||
%{_datadir}/dbus-1/system-services/org.freedesktop.resolve1.service
|
||||
%{_datadir}/dbus-1/system.d/org.freedesktop.resolve1.conf
|
||||
%{_datadir}/polkit-1/actions/org.freedesktop.resolve1.policy
|
||||
%{_datadir}/zsh/site-functions/_resolvectl
|
||||
%{_libdir}/libnss_resolve.so.2
|
||||
%{_mandir}/man1/resolvectl.1.gz
|
||||
%{_mandir}/man5/org.freedesktop.resolve1.5.gz
|
||||
%{_mandir}/man5/resolved.conf.5.gz
|
||||
%{_mandir}/man5/resolved.conf.d.5.gz
|
||||
%{_mandir}/man8/libnss_resolve.so.2.8.gz
|
||||
%{_mandir}/man8/nss-resolve.8.gz
|
||||
%{_mandir}/man8/systemd-resolved.8.gz
|
||||
%{_mandir}/man8/systemd-resolved.service.8.gz
|
||||
%{_systemd_util_dir}/resolv.conf
|
||||
%{_systemd_util_dir}/systemd-resolved
|
||||
%{_sysusersdir}/systemd-resolve.conf
|
||||
%{_tmpfilesdir}/systemd-resolve.conf
|
||||
%{_unitdir}/systemd-resolved.service
|
||||
%endif
|
794
files.systemd
Normal file
794
files.systemd
Normal file
|
@ -0,0 +1,794 @@
|
|||
#
|
||||
# Please keep the list sorted (with `LC_ALL=C sort`).
|
||||
#
|
||||
%config(noreplace) %{_sysconfdir}/pam.d/systemd-user
|
||||
%config(noreplace) %{_sysconfdir}/systemd/journald.conf
|
||||
%config(noreplace) %{_sysconfdir}/systemd/logind.conf
|
||||
%config(noreplace) %{_sysconfdir}/systemd/sleep.conf
|
||||
%config(noreplace) %{_sysconfdir}/systemd/system.conf
|
||||
%config(noreplace) %{_sysconfdir}/systemd/timesyncd.conf
|
||||
%config(noreplace) %{_sysconfdir}/systemd/user.conf
|
||||
%dir %{_binfmtdir}
|
||||
%if ! %{bootstrap}
|
||||
%dir %{_datadir}/bash-completion
|
||||
%dir %{_datadir}/bash-completion/completions
|
||||
%endif
|
||||
%dir %{_datadir}/dbus-1
|
||||
%dir %{_datadir}/dbus-1/services
|
||||
%dir %{_datadir}/dbus-1/system-services
|
||||
%dir %{_datadir}/dbus-1/system.d
|
||||
%dir %{_datadir}/factory
|
||||
%dir %{_datadir}/polkit-1
|
||||
%dir %{_datadir}/polkit-1/actions
|
||||
%dir %{_datadir}/systemd
|
||||
%if ! %{bootstrap}
|
||||
%dir %{_datadir}/zsh
|
||||
%dir %{_datadir}/zsh/site-functions
|
||||
%endif
|
||||
%dir %{_environmentdir}
|
||||
%dir %{_journalcatalogdir}
|
||||
%dir %{_localstatedir}/lib/systemd
|
||||
%dir %{_localstatedir}/lib/systemd/catalog
|
||||
%if %{with sysvcompat}
|
||||
%dir %{_localstatedir}/lib/systemd/migrated
|
||||
%endif
|
||||
%dir %{_localstatedir}/lib/systemd/rpm
|
||||
%if %{with sysvcompat}
|
||||
%dir %{_localstatedir}/lib/systemd/sysv-convert
|
||||
%endif
|
||||
%dir %{_modprobedir}
|
||||
%dir %{_sysconfdir}/X11/xorg.conf.d
|
||||
%dir %{_sysconfdir}/binfmt.d
|
||||
%dir %{_sysconfdir}/modules-load.d
|
||||
%dir %{_sysconfdir}/sysctl.d
|
||||
%dir %{_sysconfdir}/systemd
|
||||
%dir %{_sysconfdir}/systemd/system
|
||||
%dir %{_sysconfdir}/systemd/user
|
||||
%dir %{_sysconfdir}/tmpfiles.d
|
||||
%dir %{_sysconfdir}/xdg/systemd
|
||||
%dir %{_sysctldir}
|
||||
%dir %{_systemd_system_env_generator_dir}
|
||||
%dir %{_systemd_user_env_generator_dir}
|
||||
%dir %{_systemd_util_dir}
|
||||
%dir %{_systemd_util_dir}/ntp-units.d
|
||||
%dir %{_systemd_util_dir}/rpm
|
||||
%dir %{_systemd_util_dir}/system-preset
|
||||
%dir %{_systemd_util_dir}/system-shutdown
|
||||
%dir %{_systemd_util_dir}/system-sleep
|
||||
%dir %{_systemd_util_dir}/user
|
||||
%dir %{_systemd_util_dir}/user-generators
|
||||
%dir %{_systemd_util_dir}/user-preset
|
||||
%dir %{_systemdgeneratordir}
|
||||
%dir %{_systemdusergeneratordir}
|
||||
%dir %{_sysusersdir}
|
||||
%dir %{_tmpfilesdir}
|
||||
%dir %{_unitdir}
|
||||
%dir %{_unitdir}/basic.target.wants
|
||||
%dir %{_unitdir}/dbus.target.wants
|
||||
%dir %{_unitdir}/default.target.wants
|
||||
%dir %{_unitdir}/graphical.target.wants
|
||||
%dir %{_unitdir}/halt.target.wants
|
||||
%dir %{_unitdir}/initrd-root-device.target.wants
|
||||
%dir %{_unitdir}/initrd-root-fs.target.wants
|
||||
%dir %{_unitdir}/kexec.target.wants
|
||||
%dir %{_unitdir}/local-fs.target.wants
|
||||
%dir %{_unitdir}/multi-user.target.wants
|
||||
%dir %{_unitdir}/poweroff.target.wants
|
||||
%dir %{_unitdir}/reboot.target.wants
|
||||
%dir %{_unitdir}/remote-fs.target.wants
|
||||
%dir %{_unitdir}/rescue.target.wants
|
||||
%if %{with sysvcompat}
|
||||
%dir %{_unitdir}/runlevel1.target.wants
|
||||
%dir %{_unitdir}/runlevel2.target.wants
|
||||
%dir %{_unitdir}/runlevel3.target.wants
|
||||
%dir %{_unitdir}/runlevel4.target.wants
|
||||
%dir %{_unitdir}/runlevel5.target.wants
|
||||
%endif
|
||||
%dir %{_unitdir}/shutdown.target.wants
|
||||
%dir %{_unitdir}/sockets.target.wants
|
||||
%dir %{_unitdir}/sysinit.target.wants
|
||||
%dir %{_unitdir}/timers.target.wants
|
||||
%dir %{_unitdir}/user@.service.d
|
||||
%dir %{_unitdir}/user@0.service.d
|
||||
%dir %{xinitconfdir}
|
||||
%dir %{xinitconfdir}/xinitrc.d
|
||||
%doc %{_modprobedir}/README
|
||||
%doc %{_sysctldir}/README
|
||||
%doc %{_sysusersdir}/README
|
||||
%doc %{_tmpfilesdir}/README
|
||||
%ghost %attr(0444,root,root) %config(noreplace) %{_sysconfdir}/machine-id
|
||||
%ghost %attr(0600,root,root) %{_localstatedir}/lib/systemd/random-seed
|
||||
%ghost %config(noreplace) %{_sysconfdir}/X11/xorg.conf.d/00-keyboard.conf
|
||||
%ghost %config(noreplace) %{_sysconfdir}/locale.conf
|
||||
%ghost %config(noreplace) %{_sysconfdir}/machine-info
|
||||
%ghost %config(noreplace) %{_sysconfdir}/vconsole.conf
|
||||
%ghost %dir %attr(2755, root, systemd-journal) %{_localstatedir}/log/journal
|
||||
%ghost %{_localstatedir}/lib/systemd/backlight
|
||||
%ghost %{_localstatedir}/lib/systemd/catalog/database
|
||||
%license LICENSE.GPL2
|
||||
%license LICENSE.LGPL2.1
|
||||
%{_bindir}/busctl
|
||||
%{_bindir}/hostnamectl
|
||||
%{_bindir}/journalctl
|
||||
%{_bindir}/localectl
|
||||
%{_bindir}/loginctl
|
||||
%{_bindir}/systemctl
|
||||
%{_bindir}/systemd-analyze
|
||||
%{_bindir}/systemd-ask-password
|
||||
%{_bindir}/systemd-cat
|
||||
%{_bindir}/systemd-cgls
|
||||
%{_bindir}/systemd-cgtop
|
||||
%{_bindir}/systemd-delta
|
||||
%{_bindir}/systemd-detect-virt
|
||||
%{_bindir}/systemd-dissect
|
||||
%{_bindir}/systemd-escape
|
||||
%{_bindir}/systemd-firstboot
|
||||
%{_bindir}/systemd-id128
|
||||
%{_bindir}/systemd-inhibit
|
||||
%{_bindir}/systemd-machine-id-setup
|
||||
%{_bindir}/systemd-mount
|
||||
%{_bindir}/systemd-notify
|
||||
%{_bindir}/systemd-path
|
||||
%{_bindir}/systemd-run
|
||||
%{_bindir}/systemd-socket-activate
|
||||
%{_bindir}/systemd-stdio-bridge
|
||||
%{_bindir}/systemd-sysext
|
||||
%{_bindir}/systemd-sysusers
|
||||
%{_bindir}/systemd-tmpfiles
|
||||
%{_bindir}/systemd-tty-ask-password-agent
|
||||
%{_bindir}/systemd-umount
|
||||
%{_bindir}/timedatectl
|
||||
%if ! %{bootstrap}
|
||||
%{_datadir}/bash-completion/completions/busctl
|
||||
%{_datadir}/bash-completion/completions/hostnamectl
|
||||
%{_datadir}/bash-completion/completions/journalctl
|
||||
%{_datadir}/bash-completion/completions/localectl
|
||||
%{_datadir}/bash-completion/completions/loginctl
|
||||
%{_datadir}/bash-completion/completions/portablectl
|
||||
%{_datadir}/bash-completion/completions/systemctl
|
||||
%{_datadir}/bash-completion/completions/systemd-analyze
|
||||
%{_datadir}/bash-completion/completions/systemd-cat
|
||||
%{_datadir}/bash-completion/completions/systemd-cgls
|
||||
%{_datadir}/bash-completion/completions/systemd-cgtop
|
||||
%{_datadir}/bash-completion/completions/systemd-delta
|
||||
%{_datadir}/bash-completion/completions/systemd-detect-virt
|
||||
%{_datadir}/bash-completion/completions/systemd-id128
|
||||
%{_datadir}/bash-completion/completions/systemd-path
|
||||
%{_datadir}/bash-completion/completions/systemd-run
|
||||
%{_datadir}/bash-completion/completions/timedatectl
|
||||
%endif
|
||||
%{_datadir}/dbus-1/services/org.freedesktop.systemd1.service
|
||||
%{_datadir}/dbus-1/system-services/org.freedesktop.hostname1.service
|
||||
%{_datadir}/dbus-1/system-services/org.freedesktop.locale1.service
|
||||
%{_datadir}/dbus-1/system-services/org.freedesktop.login1.service
|
||||
%{_datadir}/dbus-1/system-services/org.freedesktop.systemd1.service
|
||||
%{_datadir}/dbus-1/system-services/org.freedesktop.timedate1.service
|
||||
%{_datadir}/dbus-1/system-services/org.freedesktop.timesync1.service
|
||||
%{_datadir}/dbus-1/system.d/org.freedesktop.hostname1.conf
|
||||
%{_datadir}/dbus-1/system.d/org.freedesktop.locale1.conf
|
||||
%{_datadir}/dbus-1/system.d/org.freedesktop.login1.conf
|
||||
%{_datadir}/dbus-1/system.d/org.freedesktop.systemd1.conf
|
||||
%{_datadir}/dbus-1/system.d/org.freedesktop.timedate1.conf
|
||||
%{_datadir}/dbus-1/system.d/org.freedesktop.timesync1.conf
|
||||
%{_datadir}/pkgconfig/systemd.pc
|
||||
%{_datadir}/polkit-1/actions/org.freedesktop.hostname1.policy
|
||||
%{_datadir}/polkit-1/actions/org.freedesktop.locale1.policy
|
||||
%{_datadir}/polkit-1/actions/org.freedesktop.login1.policy
|
||||
%{_datadir}/polkit-1/actions/org.freedesktop.systemd1.policy
|
||||
%{_datadir}/polkit-1/actions/org.freedesktop.timedate1.policy
|
||||
%{_datadir}/systemd/kbd-model-map
|
||||
%{_datadir}/systemd/language-fallback-map
|
||||
%{_datadir}/systemd/tmp.mount
|
||||
%if ! %{bootstrap}
|
||||
%{_datadir}/zsh/site-functions/_busctl
|
||||
%{_datadir}/zsh/site-functions/_hostnamectl
|
||||
%{_datadir}/zsh/site-functions/_journalctl
|
||||
%{_datadir}/zsh/site-functions/_localectl
|
||||
%{_datadir}/zsh/site-functions/_loginctl
|
||||
%{_datadir}/zsh/site-functions/_sd_hosts_or_user_at_host
|
||||
%{_datadir}/zsh/site-functions/_sd_outputmodes
|
||||
%{_datadir}/zsh/site-functions/_sd_unit_files
|
||||
%{_datadir}/zsh/site-functions/_systemctl
|
||||
%{_datadir}/zsh/site-functions/_systemd
|
||||
%{_datadir}/zsh/site-functions/_systemd-analyze
|
||||
%{_datadir}/zsh/site-functions/_systemd-delta
|
||||
%{_datadir}/zsh/site-functions/_systemd-inhibit
|
||||
%{_datadir}/zsh/site-functions/_systemd-path
|
||||
%{_datadir}/zsh/site-functions/_systemd-run
|
||||
%{_datadir}/zsh/site-functions/_systemd-tmpfiles
|
||||
%{_datadir}/zsh/site-functions/_timedatectl
|
||||
%endif
|
||||
%{_environmentdir}/99-environment.conf
|
||||
%{_journalcatalogdir}/systemd.be.catalog
|
||||
%{_journalcatalogdir}/systemd.be@latin.catalog
|
||||
%{_journalcatalogdir}/systemd.bg.catalog
|
||||
%{_journalcatalogdir}/systemd.catalog
|
||||
%{_journalcatalogdir}/systemd.de.catalog
|
||||
%{_journalcatalogdir}/systemd.fr.catalog
|
||||
%{_journalcatalogdir}/systemd.it.catalog
|
||||
%{_journalcatalogdir}/systemd.pl.catalog
|
||||
%{_journalcatalogdir}/systemd.pt_BR.catalog
|
||||
%{_journalcatalogdir}/systemd.ru.catalog
|
||||
%{_journalcatalogdir}/systemd.zh_CN.catalog
|
||||
%{_journalcatalogdir}/systemd.zh_TW.catalog
|
||||
%if ! 0%{bootstrap}
|
||||
%{_mandir}/man1/busctl.1.gz
|
||||
%{_mandir}/man1/hostnamectl.1.gz
|
||||
%{_mandir}/man1/journalctl.1.gz
|
||||
%{_mandir}/man1/localectl.1.gz
|
||||
%{_mandir}/man1/loginctl.1.gz
|
||||
%{_mandir}/man1/systemctl.1.gz
|
||||
%{_mandir}/man1/systemd-analyze.1.gz
|
||||
%{_mandir}/man1/systemd-ask-password.1.gz
|
||||
%{_mandir}/man1/systemd-cat.1.gz
|
||||
%{_mandir}/man1/systemd-cgls.1.gz
|
||||
%{_mandir}/man1/systemd-cgtop.1.gz
|
||||
%{_mandir}/man1/systemd-delta.1.gz
|
||||
%{_mandir}/man1/systemd-detect-virt.1.gz
|
||||
%{_mandir}/man1/systemd-dissect.1.gz
|
||||
%{_mandir}/man1/systemd-escape.1.gz
|
||||
%{_mandir}/man1/systemd-firstboot.1.gz
|
||||
%{_mandir}/man1/systemd-firstboot.service.1.gz
|
||||
%{_mandir}/man1/systemd-id128.1.gz
|
||||
%{_mandir}/man1/systemd-inhibit.1.gz
|
||||
%{_mandir}/man1/systemd-machine-id-setup.1.gz
|
||||
%{_mandir}/man1/systemd-mount.1.gz
|
||||
%{_mandir}/man1/systemd-notify.1.gz
|
||||
%{_mandir}/man1/systemd-path.1.gz
|
||||
%{_mandir}/man1/systemd-run.1.gz
|
||||
%{_mandir}/man1/systemd-socket-activate.1.gz
|
||||
%{_mandir}/man1/systemd-tty-ask-password-agent.1.gz
|
||||
%{_mandir}/man1/systemd-umount.1.gz
|
||||
%{_mandir}/man1/systemd.1.gz
|
||||
%{_mandir}/man1/timedatectl.1.gz
|
||||
%{_mandir}/man5/binfmt.d.5.gz
|
||||
%{_mandir}/man5/crypttab.5.gz
|
||||
%{_mandir}/man5/dnssec-trust-anchors.d.5.gz
|
||||
%{_mandir}/man5/environment.d.5.gz
|
||||
%{_mandir}/man5/hostname.5.gz
|
||||
%{_mandir}/man5/initrd-release.5.gz
|
||||
%{_mandir}/man5/journald.conf.5.gz
|
||||
%{_mandir}/man5/journald.conf.d.5.gz
|
||||
%{_mandir}/man5/journald@.conf.5.gz
|
||||
%{_mandir}/man5/locale.conf.5.gz
|
||||
%{_mandir}/man5/localtime.5.gz
|
||||
%{_mandir}/man5/logind.conf.5.gz
|
||||
%{_mandir}/man5/logind.conf.d.5.gz
|
||||
%{_mandir}/man5/machine-id.5.gz
|
||||
%{_mandir}/man5/machine-info.5.gz
|
||||
%{_mandir}/man5/modules-load.d.5.gz
|
||||
%{_mandir}/man5/org.freedesktop.LogControl1.5.gz
|
||||
%{_mandir}/man5/org.freedesktop.hostname1.5.gz
|
||||
%{_mandir}/man5/org.freedesktop.locale1.5.gz
|
||||
%{_mandir}/man5/org.freedesktop.login1.5.gz
|
||||
%{_mandir}/man5/org.freedesktop.portable1.5.gz
|
||||
%{_mandir}/man5/org.freedesktop.systemd1.5.gz
|
||||
%{_mandir}/man5/org.freedesktop.timedate1.5.gz
|
||||
%{_mandir}/man5/os-release.5.gz
|
||||
%{_mandir}/man5/sleep.conf.d.5.gz
|
||||
%{_mandir}/man5/sysctl.d.5.gz
|
||||
%{_mandir}/man5/system.conf.d.5.gz
|
||||
%{_mandir}/man5/systemd-sleep.conf.5.gz
|
||||
%{_mandir}/man5/systemd-system.conf.5.gz
|
||||
%{_mandir}/man5/systemd-user-runtime-dir.5.gz
|
||||
%{_mandir}/man5/systemd-user.conf.5.gz
|
||||
%{_mandir}/man5/systemd.automount.5.gz
|
||||
%{_mandir}/man5/systemd.device.5.gz
|
||||
%{_mandir}/man5/systemd.dnssd.5.gz
|
||||
%{_mandir}/man5/systemd.exec.5.gz
|
||||
%{_mandir}/man5/systemd.kill.5.gz
|
||||
%{_mandir}/man5/systemd.link.5.gz
|
||||
%{_mandir}/man5/systemd.mount.5.gz
|
||||
%{_mandir}/man5/systemd.negative.5.gz
|
||||
%{_mandir}/man5/systemd.netdev.5.gz
|
||||
%{_mandir}/man5/systemd.path.5.gz
|
||||
%{_mandir}/man5/systemd.positive.5.gz
|
||||
%{_mandir}/man5/systemd.preset.5.gz
|
||||
%{_mandir}/man5/systemd.resource-control.5.gz
|
||||
%{_mandir}/man5/systemd.scope.5.gz
|
||||
%{_mandir}/man5/systemd.service.5.gz
|
||||
%{_mandir}/man5/systemd.slice.5.gz
|
||||
%{_mandir}/man5/systemd.socket.5.gz
|
||||
%{_mandir}/man5/systemd.swap.5.gz
|
||||
%{_mandir}/man5/systemd.target.5.gz
|
||||
%{_mandir}/man5/systemd.timer.5.gz
|
||||
%{_mandir}/man5/systemd.unit.5.gz
|
||||
%{_mandir}/man5/sysusers.d.5.gz
|
||||
%{_mandir}/man5/timesyncd.conf.5.gz
|
||||
%{_mandir}/man5/timesyncd.conf.d.5.gz
|
||||
%{_mandir}/man5/tmpfiles.d.5.gz
|
||||
%{_mandir}/man5/user-runtime-dir@.service.5.gz
|
||||
%{_mandir}/man5/user.conf.d.5.gz
|
||||
%{_mandir}/man5/user@.service.5.gz
|
||||
%{_mandir}/man5/vconsole.conf.5.gz
|
||||
%{_mandir}/man5/veritytab.5.gz
|
||||
%{_mandir}/man7/bootup.7.gz
|
||||
%{_mandir}/man7/daemon.7.gz
|
||||
%{_mandir}/man7/file-hierarchy.7.gz
|
||||
%{_mandir}/man7/kernel-command-line.7.gz
|
||||
%{_mandir}/man7/systemd.directives.7.gz
|
||||
%{_mandir}/man7/systemd.environment-generator.7.gz
|
||||
%{_mandir}/man7/systemd.generator.7.gz
|
||||
%{_mandir}/man7/systemd.index.7.gz
|
||||
%{_mandir}/man7/systemd.journal-fields.7.gz
|
||||
%{_mandir}/man7/systemd.net-naming-scheme.7.gz
|
||||
%{_mandir}/man7/systemd.offline-updates.7.gz
|
||||
%{_mandir}/man7/systemd.special.7.gz
|
||||
%{_mandir}/man7/systemd.syntax.7.gz
|
||||
%{_mandir}/man7/systemd.time.7.gz
|
||||
%{_mandir}/man8/30-systemd-environment-d-generator.8.gz
|
||||
%{_mandir}/man8/pam_systemd.8.gz
|
||||
%{_mandir}/man8/rc-local.service.8.gz
|
||||
%{_mandir}/man8/systemd-ask-password-console.path.8.gz
|
||||
%{_mandir}/man8/systemd-ask-password-console.service.8.gz
|
||||
%{_mandir}/man8/systemd-ask-password-wall.path.8.gz
|
||||
%{_mandir}/man8/systemd-ask-password-wall.service.8.gz
|
||||
%{_mandir}/man8/systemd-backlight.8.gz
|
||||
%{_mandir}/man8/systemd-backlight@.service.8.gz
|
||||
%{_mandir}/man8/systemd-binfmt.8.gz
|
||||
%{_mandir}/man8/systemd-binfmt.service.8.gz
|
||||
%{_mandir}/man8/systemd-boot-check-no-failures.8.gz
|
||||
%{_mandir}/man8/systemd-boot-check-no-failures.service.8.gz
|
||||
%{_mandir}/man8/systemd-cryptsetup-generator.8.gz
|
||||
%{_mandir}/man8/systemd-cryptsetup.8.gz
|
||||
%{_mandir}/man8/systemd-cryptsetup@.service.8.gz
|
||||
%{_mandir}/man8/systemd-debug-generator.8.gz
|
||||
%{_mandir}/man8/systemd-environment-d-generator.8.gz
|
||||
%{_mandir}/man8/systemd-fsck-root.service.8.gz
|
||||
%{_mandir}/man8/systemd-fsck.8.gz
|
||||
%{_mandir}/man8/systemd-fsck@.service.8.gz
|
||||
%{_mandir}/man8/systemd-fstab-generator.8.gz
|
||||
%{_mandir}/man8/systemd-getty-generator.8.gz
|
||||
%{_mandir}/man8/systemd-gpt-auto-generator.8.gz
|
||||
%{_mandir}/man8/systemd-growfs.8.gz
|
||||
%{_mandir}/man8/systemd-growfs@.service.8.gz
|
||||
%{_mandir}/man8/systemd-halt.service.8.gz
|
||||
%{_mandir}/man8/systemd-hibernate-resume-generator.8.gz
|
||||
%{_mandir}/man8/systemd-hibernate-resume.8.gz
|
||||
%{_mandir}/man8/systemd-hibernate-resume@.service.8.gz
|
||||
%{_mandir}/man8/systemd-hibernate.service.8.gz
|
||||
%{_mandir}/man8/systemd-hostnamed.8.gz
|
||||
%{_mandir}/man8/systemd-hostnamed.service.8.gz
|
||||
%{_mandir}/man8/systemd-hybrid-sleep.service.8.gz
|
||||
%{_mandir}/man8/systemd-initctl.8.gz
|
||||
%{_mandir}/man8/systemd-initctl.service.8.gz
|
||||
%{_mandir}/man8/systemd-initctl.socket.8.gz
|
||||
%{_mandir}/man8/systemd-journald-audit.socket.8.gz
|
||||
%{_mandir}/man8/systemd-journald-dev-log.socket.8.gz
|
||||
%{_mandir}/man8/systemd-journald-varlink@.socket.8.gz
|
||||
%{_mandir}/man8/systemd-journald.8.gz
|
||||
%{_mandir}/man8/systemd-journald.service.8.gz
|
||||
%{_mandir}/man8/systemd-journald.socket.8.gz
|
||||
%{_mandir}/man8/systemd-journald@.service.8.gz
|
||||
%{_mandir}/man8/systemd-journald@.socket.8.gz
|
||||
%{_mandir}/man8/systemd-kexec.service.8.gz
|
||||
%{_mandir}/man8/systemd-localed.8.gz
|
||||
%{_mandir}/man8/systemd-localed.service.8.gz
|
||||
%{_mandir}/man8/systemd-logind.8.gz
|
||||
%{_mandir}/man8/systemd-logind.service.8.gz
|
||||
%{_mandir}/man8/systemd-machine-id-commit.service.8.gz
|
||||
%{_mandir}/man8/systemd-makefs.8.gz
|
||||
%{_mandir}/man8/systemd-makefs@.service.8.gz
|
||||
%{_mandir}/man8/systemd-mkswap@.service.8.gz
|
||||
%{_mandir}/man8/systemd-modules-load.8.gz
|
||||
%{_mandir}/man8/systemd-modules-load.service.8.gz
|
||||
%{_mandir}/man8/systemd-poweroff.service.8.gz
|
||||
%{_mandir}/man8/systemd-quotacheck.8.gz
|
||||
%{_mandir}/man8/systemd-quotacheck.service.8.gz
|
||||
%{_mandir}/man8/systemd-random-seed.8.gz
|
||||
%{_mandir}/man8/systemd-random-seed.service.8.gz
|
||||
%{_mandir}/man8/systemd-rc-local-generator.8.gz
|
||||
%{_mandir}/man8/systemd-reboot.service.8.gz
|
||||
%{_mandir}/man8/systemd-remount-fs.8.gz
|
||||
%{_mandir}/man8/systemd-remount-fs.service.8.gz
|
||||
%{_mandir}/man8/systemd-rfkill.8.gz
|
||||
%{_mandir}/man8/systemd-rfkill.service.8.gz
|
||||
%{_mandir}/man8/systemd-rfkill.socket.8.gz
|
||||
%{_mandir}/man8/systemd-run-generator.8.gz
|
||||
%{_mandir}/man8/systemd-shutdown.8.gz
|
||||
%{_mandir}/man8/systemd-sleep.8.gz
|
||||
%{_mandir}/man8/systemd-socket-proxyd.8.gz
|
||||
%{_mandir}/man8/systemd-suspend-then-hibernate.service.8.gz
|
||||
%{_mandir}/man8/systemd-suspend.service.8.gz
|
||||
%{_mandir}/man8/systemd-sysctl.8.gz
|
||||
%{_mandir}/man8/systemd-sysctl.service.8.gz
|
||||
%{_mandir}/man8/systemd-sysext.8.gz
|
||||
%{_mandir}/man8/systemd-sysext.service.8.gz
|
||||
%{_mandir}/man8/systemd-system-update-generator.8.gz
|
||||
%{_mandir}/man8/systemd-sysusers.8.gz
|
||||
%{_mandir}/man8/systemd-sysusers.service.8.gz
|
||||
%{_mandir}/man8/systemd-sysv-generator.8.gz
|
||||
%{_mandir}/man8/systemd-time-wait-sync.8.gz
|
||||
%{_mandir}/man8/systemd-time-wait-sync.service.8.gz
|
||||
%{_mandir}/man8/systemd-timedated.8.gz
|
||||
%{_mandir}/man8/systemd-timedated.service.8.gz
|
||||
%{_mandir}/man8/systemd-timesyncd.8.gz
|
||||
%{_mandir}/man8/systemd-timesyncd.service.8.gz
|
||||
%{_mandir}/man8/systemd-tmpfiles-clean.service.8.gz
|
||||
%{_mandir}/man8/systemd-tmpfiles-clean.timer.8.gz
|
||||
%{_mandir}/man8/systemd-tmpfiles-setup-dev.service.8.gz
|
||||
%{_mandir}/man8/systemd-tmpfiles-setup.service.8.gz
|
||||
%{_mandir}/man8/systemd-tmpfiles.8.gz
|
||||
%{_mandir}/man8/systemd-update-done.8.gz
|
||||
%{_mandir}/man8/systemd-update-done.service.8.gz
|
||||
%{_mandir}/man8/systemd-update-utmp-runlevel.service.8.gz
|
||||
%{_mandir}/man8/systemd-update-utmp.8.gz
|
||||
%{_mandir}/man8/systemd-update-utmp.service.8.gz
|
||||
%{_mandir}/man8/systemd-user-sessions.8.gz
|
||||
%{_mandir}/man8/systemd-user-sessions.service.8.gz
|
||||
%{_mandir}/man8/systemd-vconsole-setup.8.gz
|
||||
%{_mandir}/man8/systemd-vconsole-setup.service.8.gz
|
||||
%{_mandir}/man8/systemd-veritysetup-generator.8.gz
|
||||
%{_mandir}/man8/systemd-veritysetup.8.gz
|
||||
%{_mandir}/man8/systemd-veritysetup@.service.8.gz
|
||||
%{_mandir}/man8/systemd-volatile-root.8.gz
|
||||
%{_mandir}/man8/systemd-volatile-root.service.8.gz
|
||||
%{_mandir}/man8/systemd-xdg-autostart-generator.8.gz
|
||||
%endif
|
||||
%{_modprobedir}/systemd.conf
|
||||
%{_pam_moduledir}/pam_systemd.so
|
||||
%if %{with sysvcompat}
|
||||
%{_sbindir}/systemd-sysv-convert
|
||||
%endif
|
||||
%{_sysconfdir}/xdg/systemd/user
|
||||
%{_sysctldir}/99-sysctl.conf
|
||||
%{_systemd_user_env_generator_dir}/30-systemd-environment-d-generator
|
||||
%{_systemd_util_dir}/libsystemd-shared-249.so
|
||||
%{_systemd_util_dir}/ntp-units.d/80-systemd-timesync.list
|
||||
%{_systemd_util_dir}/rpm/fixlet-systemd-post.sh
|
||||
%{_systemd_util_dir}/system-preset/99-default.preset
|
||||
%{_systemd_util_dir}/systemd
|
||||
%{_systemd_util_dir}/systemd-ac-power
|
||||
%{_systemd_util_dir}/systemd-backlight
|
||||
%{_systemd_util_dir}/systemd-binfmt
|
||||
%{_systemd_util_dir}/systemd-boot-check-no-failures
|
||||
%{_systemd_util_dir}/systemd-cgroups-agent
|
||||
%if ! %{bootstrap}
|
||||
%{_systemd_util_dir}/systemd-cryptsetup
|
||||
%endif
|
||||
%{_systemd_util_dir}/systemd-fsck
|
||||
%{_systemd_util_dir}/systemd-growfs
|
||||
%{_systemd_util_dir}/systemd-hibernate-resume
|
||||
%{_systemd_util_dir}/systemd-hostnamed
|
||||
%if %{with sysvcompat}
|
||||
%{_systemd_util_dir}/systemd-initctl
|
||||
%endif
|
||||
%{_systemd_util_dir}/systemd-journald
|
||||
%{_systemd_util_dir}/systemd-localed
|
||||
%{_systemd_util_dir}/systemd-logind
|
||||
%{_systemd_util_dir}/systemd-makefs
|
||||
%{_systemd_util_dir}/systemd-modules-load
|
||||
%{_systemd_util_dir}/systemd-quotacheck
|
||||
%{_systemd_util_dir}/systemd-random-seed
|
||||
%{_systemd_util_dir}/systemd-remount-fs
|
||||
%{_systemd_util_dir}/systemd-reply-password
|
||||
%{_systemd_util_dir}/systemd-rfkill
|
||||
%{_systemd_util_dir}/systemd-shutdown
|
||||
%{_systemd_util_dir}/systemd-sleep
|
||||
%{_systemd_util_dir}/systemd-socket-proxyd
|
||||
%{_systemd_util_dir}/systemd-sulogin-shell
|
||||
%{_systemd_util_dir}/systemd-sysctl
|
||||
%if %{with sysvcompat}
|
||||
%{_systemd_util_dir}/systemd-sysv-install
|
||||
%endif
|
||||
%{_systemd_util_dir}/systemd-time-wait-sync
|
||||
%{_systemd_util_dir}/systemd-timedated
|
||||
%{_systemd_util_dir}/systemd-timesyncd
|
||||
%{_systemd_util_dir}/systemd-update-done
|
||||
%{_systemd_util_dir}/systemd-update-utmp
|
||||
%{_systemd_util_dir}/systemd-user-runtime-dir
|
||||
%{_systemd_util_dir}/systemd-user-sessions
|
||||
%{_systemd_util_dir}/systemd-vconsole-setup
|
||||
%if ! %{bootstrap}
|
||||
%{_systemd_util_dir}/systemd-veritysetup
|
||||
%endif
|
||||
%{_systemd_util_dir}/systemd-volatile-root
|
||||
%{_systemd_util_dir}/systemd-xdg-autostart-condition
|
||||
%{_systemd_util_dir}/user-generators/systemd-xdg-autostart-generator
|
||||
%{_systemd_util_dir}/user-preset/90-systemd.preset
|
||||
%{_systemd_util_dir}/user-preset/99-default.preset
|
||||
%{_systemd_util_dir}/user/app.slice
|
||||
%{_systemd_util_dir}/user/background.slice
|
||||
%{_systemd_util_dir}/user/basic.target
|
||||
%{_systemd_util_dir}/user/bluetooth.target
|
||||
%{_systemd_util_dir}/user/default.target
|
||||
%{_systemd_util_dir}/user/exit.target
|
||||
%{_systemd_util_dir}/user/graphical-session-pre.target
|
||||
%{_systemd_util_dir}/user/graphical-session.target
|
||||
%{_systemd_util_dir}/user/paths.target
|
||||
%{_systemd_util_dir}/user/printer.target
|
||||
%{_systemd_util_dir}/user/session.slice
|
||||
%{_systemd_util_dir}/user/shutdown.target
|
||||
%{_systemd_util_dir}/user/smartcard.target
|
||||
%{_systemd_util_dir}/user/sockets.target
|
||||
%{_systemd_util_dir}/user/sound.target
|
||||
%{_systemd_util_dir}/user/systemd-exit.service
|
||||
%{_systemd_util_dir}/user/systemd-tmpfiles-clean.service
|
||||
%{_systemd_util_dir}/user/systemd-tmpfiles-clean.timer
|
||||
%{_systemd_util_dir}/user/systemd-tmpfiles-setup.service
|
||||
%{_systemd_util_dir}/user/timers.target
|
||||
%{_systemd_util_dir}/user/xdg-desktop-autostart.target
|
||||
%{_systemdgeneratordir}/logind-compat-tasks-max-generator
|
||||
%if ! %{bootstrap}
|
||||
%{_systemdgeneratordir}/systemd-cryptsetup-generator
|
||||
%endif
|
||||
%{_systemdgeneratordir}/systemd-debug-generator
|
||||
%{_systemdgeneratordir}/systemd-fstab-generator
|
||||
%{_systemdgeneratordir}/systemd-getty-generator
|
||||
%{_systemdgeneratordir}/systemd-gpt-auto-generator
|
||||
%{_systemdgeneratordir}/systemd-hibernate-resume-generator
|
||||
%if %{with sysvcompat}
|
||||
%{_systemdgeneratordir}/systemd-rc-local-generator
|
||||
%endif
|
||||
%{_systemdgeneratordir}/systemd-run-generator
|
||||
%{_systemdgeneratordir}/systemd-system-update-generator
|
||||
%if %{with sysvcompat}
|
||||
%{_systemdgeneratordir}/systemd-sysv-generator
|
||||
%endif
|
||||
%if ! %{bootstrap}
|
||||
%{_systemdgeneratordir}/systemd-veritysetup-generator
|
||||
%endif
|
||||
%{_sysusersdir}/systemd-journal.conf
|
||||
%if %{with networkd}
|
||||
# Yes, systemd-network.conf really belongs here, see
|
||||
# https://github.com/systemd/systemd/pull/22416#issuecomment-1029828592
|
||||
%{_sysusersdir}/systemd-network.conf
|
||||
%endif
|
||||
%{_sysusersdir}/systemd-timesync.conf
|
||||
%{_tmpfilesdir}/journal-nocow.conf
|
||||
%{_tmpfilesdir}/suse.conf
|
||||
%{_tmpfilesdir}/systemd-nologin.conf
|
||||
%{_tmpfilesdir}/systemd-tmp.conf
|
||||
%{_tmpfilesdir}/systemd.conf
|
||||
%{_tmpfilesdir}/x11.conf
|
||||
%{_udevrulesdir}/70-uaccess.rules
|
||||
%{_udevrulesdir}/71-seat.rules
|
||||
%{_udevrulesdir}/73-seat-late.rules
|
||||
%{_udevrulesdir}/99-systemd.rules
|
||||
%{_unitdir}/after-local.service
|
||||
%{_unitdir}/autovt@.service
|
||||
%{_unitdir}/basic.target
|
||||
%{_unitdir}/blockdev@.target
|
||||
%{_unitdir}/bluetooth.target
|
||||
%{_unitdir}/boot-complete.target
|
||||
%{_unitdir}/console-getty.service
|
||||
%{_unitdir}/container-getty@.service
|
||||
%if ! %{bootstrap}
|
||||
%{_unitdir}/cryptsetup-pre.target
|
||||
%{_unitdir}/cryptsetup.target
|
||||
%endif
|
||||
%{_unitdir}/ctrl-alt-del.target
|
||||
%{_unitdir}/dbus-org.freedesktop.hostname1.service
|
||||
%{_unitdir}/dbus-org.freedesktop.locale1.service
|
||||
%{_unitdir}/dbus-org.freedesktop.login1.service
|
||||
%{_unitdir}/dbus-org.freedesktop.timedate1.service
|
||||
%{_unitdir}/debug-shell.service
|
||||
%{_unitdir}/default.target
|
||||
%{_unitdir}/detect-part-label-duplicates.service
|
||||
%{_unitdir}/dev-hugepages.mount
|
||||
%{_unitdir}/dev-mqueue.mount
|
||||
%{_unitdir}/emergency.service
|
||||
%{_unitdir}/emergency.target
|
||||
%{_unitdir}/exit.target
|
||||
%{_unitdir}/final.target
|
||||
%{_unitdir}/first-boot-complete.target
|
||||
%{_unitdir}/getty-pre.target
|
||||
%{_unitdir}/getty.target
|
||||
%{_unitdir}/getty@.service
|
||||
%{_unitdir}/graphical.target
|
||||
%if %{with sysvcompat}
|
||||
%{_unitdir}/graphical.target.wants/systemd-update-utmp-runlevel.service
|
||||
%{_unitdir}/halt-local.service
|
||||
%endif
|
||||
%{_unitdir}/halt.target
|
||||
%{_unitdir}/hibernate.target
|
||||
%{_unitdir}/hybrid-sleep.target
|
||||
%{_unitdir}/initrd-cleanup.service
|
||||
%{_unitdir}/initrd-fs.target
|
||||
%{_unitdir}/initrd-parse-etc.service
|
||||
%{_unitdir}/initrd-root-device.target
|
||||
%if ! %{bootstrap}
|
||||
%{_unitdir}/initrd-root-device.target.wants/remote-cryptsetup.target
|
||||
%{_unitdir}/initrd-root-device.target.wants/remote-veritysetup.target
|
||||
%endif
|
||||
%{_unitdir}/initrd-root-fs.target
|
||||
%{_unitdir}/initrd-switch-root.service
|
||||
%{_unitdir}/initrd-switch-root.target
|
||||
%{_unitdir}/initrd-usr-fs.target
|
||||
%{_unitdir}/initrd.target
|
||||
%{_unitdir}/kexec.target
|
||||
%{_unitdir}/local-fs-pre.target
|
||||
%{_unitdir}/local-fs.target
|
||||
%if %{with sysvcompat}
|
||||
%{_unitdir}/local-fs.target.wants/var-lock.mount
|
||||
%{_unitdir}/local-fs.target.wants/var-run.mount
|
||||
%endif
|
||||
%{_unitdir}/modprobe@.service
|
||||
%{_unitdir}/multi-user.target
|
||||
%{_unitdir}/multi-user.target.wants/after-local.service
|
||||
%{_unitdir}/multi-user.target.wants/getty.target
|
||||
%{_unitdir}/multi-user.target.wants/systemd-logind.service
|
||||
%if %{with sysvcompat}
|
||||
%{_unitdir}/multi-user.target.wants/systemd-update-utmp-runlevel.service
|
||||
%endif
|
||||
%{_unitdir}/multi-user.target.wants/systemd-user-sessions.service
|
||||
%{_unitdir}/network-online.target
|
||||
%{_unitdir}/network-pre.target
|
||||
%{_unitdir}/network.target
|
||||
%{_unitdir}/nss-lookup.target
|
||||
%{_unitdir}/nss-user-lookup.target
|
||||
%{_unitdir}/paths.target
|
||||
%{_unitdir}/poweroff.target
|
||||
%{_unitdir}/printer.target
|
||||
%{_unitdir}/proc-sys-fs-binfmt_misc.automount
|
||||
%{_unitdir}/proc-sys-fs-binfmt_misc.mount
|
||||
%{_unitdir}/quotaon.service
|
||||
%if %{with sysvcompat}
|
||||
%{_unitdir}/rc-local.service
|
||||
%endif
|
||||
%{_unitdir}/reboot.target
|
||||
%if ! %{bootstrap}
|
||||
%{_unitdir}/remote-cryptsetup.target
|
||||
%endif
|
||||
%{_unitdir}/remote-fs-pre.target
|
||||
%{_unitdir}/remote-fs.target
|
||||
%if ! %{bootstrap}
|
||||
%{_unitdir}/remote-veritysetup.target
|
||||
%endif
|
||||
%{_unitdir}/rescue.service
|
||||
%{_unitdir}/rescue.target
|
||||
%if %{with sysvcompat}
|
||||
%{_unitdir}/rescue.target.wants/systemd-update-utmp-runlevel.service
|
||||
%endif
|
||||
%{_unitdir}/rpcbind.target
|
||||
%if %{with sysvcompat}
|
||||
%{_unitdir}/runlevel0.target
|
||||
%{_unitdir}/runlevel1.target
|
||||
%{_unitdir}/runlevel2.target
|
||||
%{_unitdir}/runlevel3.target
|
||||
%{_unitdir}/runlevel4.target
|
||||
%{_unitdir}/runlevel5.target
|
||||
%{_unitdir}/runlevel6.target
|
||||
%endif
|
||||
%{_unitdir}/serial-getty@.service
|
||||
%{_unitdir}/shutdown.target
|
||||
%{_unitdir}/sigpwr.target
|
||||
%{_unitdir}/sleep.target
|
||||
%{_unitdir}/slices.target
|
||||
%{_unitdir}/smartcard.target
|
||||
%{_unitdir}/sockets.target
|
||||
%if %{with sysvcompat}
|
||||
%{_unitdir}/sockets.target.wants/systemd-initctl.socket
|
||||
%endif
|
||||
%{_unitdir}/sockets.target.wants/systemd-journald-dev-log.socket
|
||||
%{_unitdir}/sockets.target.wants/systemd-journald.socket
|
||||
%{_unitdir}/sound.target
|
||||
%{_unitdir}/suspend-then-hibernate.target
|
||||
%{_unitdir}/suspend.target
|
||||
%{_unitdir}/swap.target
|
||||
%{_unitdir}/sys-fs-fuse-connections.mount
|
||||
%{_unitdir}/sys-kernel-config.mount
|
||||
%{_unitdir}/sys-kernel-debug.mount
|
||||
%{_unitdir}/sys-kernel-tracing.mount
|
||||
%{_unitdir}/sysinit.target
|
||||
%if ! %{bootstrap}
|
||||
%{_unitdir}/sysinit.target.wants/cryptsetup.target
|
||||
%endif
|
||||
%{_unitdir}/sysinit.target.wants/detect-part-label-duplicates.service
|
||||
%{_unitdir}/sysinit.target.wants/dev-hugepages.mount
|
||||
%{_unitdir}/sysinit.target.wants/dev-mqueue.mount
|
||||
%{_unitdir}/sysinit.target.wants/proc-sys-fs-binfmt_misc.automount
|
||||
%{_unitdir}/sysinit.target.wants/sys-fs-fuse-connections.mount
|
||||
%{_unitdir}/sysinit.target.wants/sys-kernel-config.mount
|
||||
%{_unitdir}/sysinit.target.wants/sys-kernel-debug.mount
|
||||
%{_unitdir}/sysinit.target.wants/sys-kernel-tracing.mount
|
||||
%{_unitdir}/sysinit.target.wants/systemd-ask-password-console.path
|
||||
%{_unitdir}/sysinit.target.wants/systemd-binfmt.service
|
||||
%{_unitdir}/sysinit.target.wants/systemd-firstboot.service
|
||||
%{_unitdir}/sysinit.target.wants/systemd-journal-catalog-update.service
|
||||
%{_unitdir}/sysinit.target.wants/systemd-journal-flush.service
|
||||
%{_unitdir}/sysinit.target.wants/systemd-journald.service
|
||||
%{_unitdir}/sysinit.target.wants/systemd-machine-id-commit.service
|
||||
%{_unitdir}/sysinit.target.wants/systemd-modules-load.service
|
||||
%{_unitdir}/sysinit.target.wants/systemd-random-seed.service
|
||||
%{_unitdir}/sysinit.target.wants/systemd-sysctl.service
|
||||
%{_unitdir}/sysinit.target.wants/systemd-sysusers.service
|
||||
%{_unitdir}/sysinit.target.wants/systemd-tmpfiles-setup-dev.service
|
||||
%{_unitdir}/sysinit.target.wants/systemd-tmpfiles-setup.service
|
||||
%{_unitdir}/sysinit.target.wants/systemd-update-done.service
|
||||
%{_unitdir}/sysinit.target.wants/systemd-update-utmp.service
|
||||
%if ! %{bootstrap}
|
||||
%{_unitdir}/sysinit.target.wants/veritysetup.target
|
||||
%endif
|
||||
%{_unitdir}/syslog.socket
|
||||
%if ! %{bootstrap}
|
||||
%{_unitdir}/system-systemd\x2dcryptsetup.slice
|
||||
%endif
|
||||
%{_unitdir}/system-update-cleanup.service
|
||||
%{_unitdir}/system-update-pre.target
|
||||
%{_unitdir}/system-update.target
|
||||
%{_unitdir}/systemd-ask-password-console.path
|
||||
%{_unitdir}/systemd-ask-password-console.service
|
||||
%{_unitdir}/systemd-ask-password-wall.path
|
||||
%{_unitdir}/systemd-ask-password-wall.service
|
||||
%{_unitdir}/systemd-backlight@.service
|
||||
%{_unitdir}/systemd-binfmt.service
|
||||
%{_unitdir}/systemd-boot-check-no-failures.service
|
||||
%{_unitdir}/systemd-exit.service
|
||||
%{_unitdir}/systemd-firstboot.service
|
||||
%{_unitdir}/systemd-fsck-root.service
|
||||
%{_unitdir}/systemd-fsck@.service
|
||||
%{_unitdir}/systemd-halt.service
|
||||
%{_unitdir}/systemd-hibernate-resume@.service
|
||||
%{_unitdir}/systemd-hibernate.service
|
||||
%{_unitdir}/systemd-hostnamed.service
|
||||
%{_unitdir}/systemd-hybrid-sleep.service
|
||||
%if %{with sysvcompat}
|
||||
%{_unitdir}/systemd-initctl.service
|
||||
%{_unitdir}/systemd-initctl.socket
|
||||
%endif
|
||||
%{_unitdir}/systemd-journal-catalog-update.service
|
||||
%{_unitdir}/systemd-journal-flush.service
|
||||
%{_unitdir}/systemd-journald-dev-log.socket
|
||||
%{_unitdir}/systemd-journald-varlink@.socket
|
||||
%{_unitdir}/systemd-journald.service
|
||||
%{_unitdir}/systemd-journald.socket
|
||||
%{_unitdir}/systemd-journald@.service
|
||||
%{_unitdir}/systemd-journald@.socket
|
||||
%{_unitdir}/systemd-kexec.service
|
||||
%{_unitdir}/systemd-localed.service
|
||||
%{_unitdir}/systemd-logind.service
|
||||
%{_unitdir}/systemd-machine-id-commit.service
|
||||
%{_unitdir}/systemd-modules-load.service
|
||||
%{_unitdir}/systemd-poweroff.service
|
||||
%{_unitdir}/systemd-quotacheck.service
|
||||
%{_unitdir}/systemd-random-seed.service
|
||||
%{_unitdir}/systemd-reboot.service
|
||||
%{_unitdir}/systemd-remount-fs.service
|
||||
%{_unitdir}/systemd-rfkill.service
|
||||
%{_unitdir}/systemd-rfkill.socket
|
||||
%{_unitdir}/systemd-suspend-then-hibernate.service
|
||||
%{_unitdir}/systemd-suspend.service
|
||||
%{_unitdir}/systemd-sysctl.service
|
||||
%{_unitdir}/systemd-sysext.service
|
||||
%{_unitdir}/systemd-sysusers.service
|
||||
%{_unitdir}/systemd-time-wait-sync.service
|
||||
%{_unitdir}/systemd-timedated.service
|
||||
%{_unitdir}/systemd-timesyncd.service
|
||||
%{_unitdir}/systemd-tmpfiles-clean.service
|
||||
%{_unitdir}/systemd-tmpfiles-clean.timer
|
||||
%{_unitdir}/systemd-tmpfiles-setup-dev.service
|
||||
%{_unitdir}/systemd-tmpfiles-setup.service
|
||||
%{_unitdir}/systemd-update-done.service
|
||||
%if %{with sysvcompat}
|
||||
%{_unitdir}/systemd-update-utmp-runlevel.service
|
||||
%endif
|
||||
%{_unitdir}/systemd-update-utmp.service
|
||||
%{_unitdir}/systemd-user-sessions.service
|
||||
%{_unitdir}/systemd-vconsole-setup.service
|
||||
%{_unitdir}/systemd-volatile-root.service
|
||||
%{_unitdir}/time-set.target
|
||||
%{_unitdir}/time-sync.target
|
||||
%{_unitdir}/timers.target
|
||||
%{_unitdir}/timers.target.wants/systemd-tmpfiles-clean.timer
|
||||
%{_unitdir}/umount.target
|
||||
%{_unitdir}/usb-gadget.target
|
||||
%{_unitdir}/user-.slice.d
|
||||
%{_unitdir}/user-.slice.d/10-defaults.conf
|
||||
%{_unitdir}/user-runtime-dir@.service
|
||||
%{_unitdir}/user.slice
|
||||
%{_unitdir}/user@.service
|
||||
%{_unitdir}/user@.service.d/10-login-barrier.conf
|
||||
%{_unitdir}/user@0.service.d/10-login-barrier.conf
|
||||
%if %{with sysvcompat}
|
||||
%{_unitdir}/var-lock.mount
|
||||
%{_unitdir}/var-run.mount
|
||||
%endif
|
||||
%if ! %{bootstrap}
|
||||
%{_unitdir}/veritysetup-pre.target
|
||||
%{_unitdir}/veritysetup.target
|
||||
%endif
|
||||
%{xinitconfdir}/xinitrc.d/50-systemd-user.sh
|
||||
%if %{with split_usr}
|
||||
/bin/systemctl
|
||||
%endif
|
147
files.udev
Normal file
147
files.udev
Normal file
|
@ -0,0 +1,147 @@
|
|||
#
|
||||
# Please keep the list sorted (with `LC_ALL=C sort`).
|
||||
#
|
||||
%config(noreplace) %{_sysconfdir}/systemd/pstore.conf
|
||||
%config(noreplace) %{_sysconfdir}/udev/udev.conf
|
||||
%dir %{_prefix}/lib/udev
|
||||
%dir %{_sysconfdir}/systemd/network
|
||||
%dir %{_sysconfdir}/udev
|
||||
%dir %{_sysconfdir}/udev/rules.d
|
||||
%dir %{_systemd_util_dir}/network
|
||||
%dir %{_udevhwdbdir}
|
||||
%dir %{_udevrulesdir}
|
||||
%doc %{_udevhwdbdir}/README
|
||||
%doc %{_udevrulesdir}/README
|
||||
%ghost %attr(444, root, root) %{_sysconfdir}/udev/hwdb.bin
|
||||
%ghost %attr(644, root, root) %{_prefix}/lib/udev/compat-symlink-generation
|
||||
%if ! %{bootstrap}
|
||||
%{_bindir}/systemd-cryptenroll
|
||||
%endif
|
||||
%{_bindir}/systemd-hwdb
|
||||
%{_bindir}/udevadm
|
||||
%if ! %{bootstrap}
|
||||
%{_datadir}/bash-completion/completions/udevadm
|
||||
%endif
|
||||
%{_datadir}/pkgconfig/udev.pc
|
||||
%if ! %{bootstrap}
|
||||
%{_datadir}/zsh/site-functions/_udevadm
|
||||
%endif
|
||||
%if ! %{bootstrap}
|
||||
%{_mandir}/man1/systemd-cryptenroll.1.gz
|
||||
%{_mandir}/man5/pstore.conf.5.gz
|
||||
%{_mandir}/man5/pstore.conf.d.5.gz
|
||||
%{_mandir}/man5/udev.conf.5.gz
|
||||
%{_mandir}/man7/hwdb.7.gz
|
||||
%{_mandir}/man7/udev.7.gz
|
||||
%{_mandir}/man8/systemd-hwdb.8.gz
|
||||
%{_mandir}/man8/systemd-network-generator.8.gz
|
||||
%{_mandir}/man8/systemd-network-generator.service.8.gz
|
||||
%{_mandir}/man8/systemd-pstore.8.gz
|
||||
%{_mandir}/man8/systemd-pstore.service.8.gz
|
||||
%{_mandir}/man8/systemd-udev-settle.service.8.gz
|
||||
%{_mandir}/man8/systemd-udevd-control.socket.8.gz
|
||||
%{_mandir}/man8/systemd-udevd-kernel.socket.8.gz
|
||||
%{_mandir}/man8/systemd-udevd.8.gz
|
||||
%{_mandir}/man8/systemd-udevd.service.8.gz
|
||||
%{_mandir}/man8/udevadm.8.gz
|
||||
%endif
|
||||
%{_prefix}/lib/udev/ata_id
|
||||
%{_prefix}/lib/udev/cdrom_id
|
||||
# dmi_memory_id is only relevant on arches with DMI
|
||||
%ifarch %{arm} aarch64 %{ix86} x86_64 ia64 mips
|
||||
%{_prefix}/lib/udev/dmi_memory_id
|
||||
%endif
|
||||
%{_prefix}/lib/udev/fido_id
|
||||
%{_prefix}/lib/udev/mtd_probe
|
||||
%{_prefix}/lib/udev/path_id_compat
|
||||
%{_prefix}/lib/udev/rule_generator.functions
|
||||
%{_prefix}/lib/udev/scsi_id
|
||||
%{_prefix}/lib/udev/v4l_id
|
||||
%{_prefix}/lib/udev/write_net_rules
|
||||
%{_systemd_util_dir}/network/99-default.link
|
||||
%{_systemd_util_dir}/rpm/fixlet-udev-post.sh
|
||||
%{_systemd_util_dir}/systemd-network-generator
|
||||
%{_systemd_util_dir}/systemd-pstore
|
||||
%{_systemd_util_dir}/systemd-udevd
|
||||
%{_tmpfilesdir}/static-nodes-permissions.conf
|
||||
%{_tmpfilesdir}/systemd-pstore.conf
|
||||
%{_udevhwdbdir}/20-OUI.hwdb
|
||||
%{_udevhwdbdir}/20-acpi-vendor.hwdb
|
||||
%{_udevhwdbdir}/20-bluetooth-vendor-product.hwdb
|
||||
%{_udevhwdbdir}/20-dmi-id.hwdb
|
||||
%{_udevhwdbdir}/20-net-ifname.hwdb
|
||||
%{_udevhwdbdir}/20-pci-classes.hwdb
|
||||
%{_udevhwdbdir}/20-pci-vendor-model.hwdb
|
||||
%{_udevhwdbdir}/20-sdio-classes.hwdb
|
||||
%{_udevhwdbdir}/20-sdio-vendor-model.hwdb
|
||||
%{_udevhwdbdir}/20-usb-classes.hwdb
|
||||
%{_udevhwdbdir}/20-usb-vendor-model.hwdb
|
||||
%{_udevhwdbdir}/20-vmbus-class.hwdb
|
||||
%{_udevhwdbdir}/60-autosuspend-chromiumos.hwdb
|
||||
%{_udevhwdbdir}/60-autosuspend-fingerprint-reader.hwdb
|
||||
%{_udevhwdbdir}/60-autosuspend.hwdb
|
||||
%{_udevhwdbdir}/60-evdev.hwdb
|
||||
%{_udevhwdbdir}/60-input-id.hwdb
|
||||
%{_udevhwdbdir}/60-keyboard.hwdb
|
||||
%{_udevhwdbdir}/60-seat.hwdb
|
||||
%{_udevhwdbdir}/60-sensor.hwdb
|
||||
%{_udevhwdbdir}/70-analyzers.hwdb
|
||||
%{_udevhwdbdir}/70-av-production.hwdb
|
||||
%{_udevhwdbdir}/70-cameras.hwdb
|
||||
%{_udevhwdbdir}/70-joystick.hwdb
|
||||
%{_udevhwdbdir}/70-mouse.hwdb
|
||||
%{_udevhwdbdir}/70-pointingstick.hwdb
|
||||
%{_udevhwdbdir}/70-touchpad.hwdb
|
||||
%{_udevhwdbdir}/80-ieee1394-unit-function.hwdb
|
||||
%{_udevrulesdir}/50-udev-default.rules
|
||||
%{_udevrulesdir}/60-autosuspend.rules
|
||||
%{_udevrulesdir}/60-block.rules
|
||||
%{_udevrulesdir}/60-cdrom_id.rules
|
||||
%{_udevrulesdir}/60-drm.rules
|
||||
%{_udevrulesdir}/60-evdev.rules
|
||||
%{_udevrulesdir}/60-fido-id.rules
|
||||
%{_udevrulesdir}/60-input-id.rules
|
||||
%{_udevrulesdir}/60-persistent-alsa.rules
|
||||
%{_udevrulesdir}/60-persistent-input.rules
|
||||
%{_udevrulesdir}/60-persistent-storage-tape.rules
|
||||
%{_udevrulesdir}/60-persistent-storage.rules
|
||||
%{_udevrulesdir}/60-persistent-v4l.rules
|
||||
%{_udevrulesdir}/60-sensor.rules
|
||||
%{_udevrulesdir}/60-serial.rules
|
||||
%{_udevrulesdir}/61-persistent-storage-compat.rules
|
||||
%{_udevrulesdir}/64-btrfs.rules
|
||||
%{_udevrulesdir}/70-camera.rules
|
||||
%{_udevrulesdir}/70-joystick.rules
|
||||
%ifarch %{arm} aarch64 %{ix86} x86_64 ia64 mips
|
||||
%{_udevrulesdir}/70-memory.rules
|
||||
%endif
|
||||
%{_udevrulesdir}/70-mouse.rules
|
||||
%{_udevrulesdir}/70-power-switch.rules
|
||||
%{_udevrulesdir}/70-touchpad.rules
|
||||
%{_udevrulesdir}/75-net-description.rules
|
||||
%{_udevrulesdir}/75-persistent-net-generator.rules
|
||||
%{_udevrulesdir}/75-probe_mtd.rules
|
||||
%{_udevrulesdir}/78-sound-card.rules
|
||||
%{_udevrulesdir}/80-drivers.rules
|
||||
%{_udevrulesdir}/80-net-setup-link.rules
|
||||
%{_udevrulesdir}/81-net-dhcp.rules
|
||||
%{_udevrulesdir}/90-vconsole.rules
|
||||
%{_unitdir}/initrd-udevadm-cleanup-db.service
|
||||
%{_unitdir}/kmod-static-nodes.service
|
||||
%{_unitdir}/sockets.target.wants/systemd-udevd-control.socket
|
||||
%{_unitdir}/sockets.target.wants/systemd-udevd-kernel.socket
|
||||
%{_unitdir}/sysinit.target.wants/kmod-static-nodes.service
|
||||
%{_unitdir}/sysinit.target.wants/systemd-hwdb-update.service
|
||||
%{_unitdir}/sysinit.target.wants/systemd-udev-trigger.service
|
||||
%{_unitdir}/sysinit.target.wants/systemd-udevd.service
|
||||
%{_unitdir}/systemd-hwdb-update.service
|
||||
%{_unitdir}/systemd-network-generator.service
|
||||
%{_unitdir}/systemd-pstore.service
|
||||
%{_unitdir}/systemd-udev-settle.service
|
||||
%{_unitdir}/systemd-udev-trigger.service
|
||||
%{_unitdir}/systemd-udevd-control.socket
|
||||
%{_unitdir}/systemd-udevd-kernel.socket
|
||||
%{_unitdir}/systemd-udevd.service
|
||||
%if %{with split_usr}
|
||||
/sbin/udevadm
|
||||
%endif
|
38
files.uefi-boot
Normal file
38
files.uefi-boot
Normal file
|
@ -0,0 +1,38 @@
|
|||
#
|
||||
# Please keep the list sorted (with `LC_ALL=C sort`).
|
||||
#
|
||||
%if %{with sd_boot}
|
||||
%dir %{_prefix}/lib/kernel
|
||||
%dir %{_prefix}/lib/kernel/install.d
|
||||
%dir %{_systemd_util_dir}/boot
|
||||
%dir %{_systemd_util_dir}/boot/efi
|
||||
%{_bindir}/bootctl
|
||||
%{_bindir}/kernel-install
|
||||
%if %{without bootstrap}
|
||||
%{_datadir}/bash-completion/completions/bootctl
|
||||
%{_datadir}/bash-completion/completions/kernel-install
|
||||
%{_datadir}/zsh/site-functions/_bootctl
|
||||
%{_datadir}/zsh/site-functions/_kernel-install
|
||||
%{_mandir}/man1/bootctl.1.gz
|
||||
%{_mandir}/man5/loader.conf.5.gz
|
||||
%{_mandir}/man7/sd-boot.7.gz
|
||||
%{_mandir}/man7/systemd-boot.7.gz
|
||||
%{_mandir}/man8/kernel-install.8.gz
|
||||
%{_mandir}/man8/systemd-bless-boot-generator.8.gz
|
||||
%{_mandir}/man8/systemd-bless-boot.8.gz
|
||||
%{_mandir}/man8/systemd-bless-boot.service.8.gz
|
||||
%{_mandir}/man8/systemd-boot-system-token.service.8.gz
|
||||
%endif
|
||||
%{_prefix}/lib/kernel/install.d/00-entry-directory.install
|
||||
%{_prefix}/lib/kernel/install.d/50-depmod.install
|
||||
%{_prefix}/lib/kernel/install.d/90-loaderentry.install
|
||||
# These are the few exceptions where glob pattern is allowed.
|
||||
%{_systemd_util_dir}/boot/efi/linux*.efi.stub
|
||||
%{_systemd_util_dir}/boot/efi/linux*.elf.stub
|
||||
%{_systemd_util_dir}/boot/efi/systemd-boot*.efi
|
||||
%{_systemd_util_dir}/systemd-bless-boot
|
||||
%{_systemdgeneratordir}/systemd-bless-boot-generator
|
||||
%{_unitdir}/sysinit.target.wants/systemd-boot-system-token.service
|
||||
%{_unitdir}/systemd-bless-boot.service
|
||||
%{_unitdir}/systemd-boot-system-token.service
|
||||
%endif
|
146
fixlet-container-post.sh
Normal file
146
fixlet-container-post.sh
Normal file
|
@ -0,0 +1,146 @@
|
|||
#! /bin/bash
|
||||
#
|
||||
# This script contains all the fixups run when systemd-container package is
|
||||
# installed or updated.
|
||||
#
|
||||
|
||||
warn() {
|
||||
echo >&2 "warning: $@"
|
||||
}
|
||||
|
||||
is_btrfs_subvolume() {
|
||||
# On btrfs subvolumes always have the inode 256
|
||||
test $(stat --format=%i "$1") -eq 256
|
||||
}
|
||||
|
||||
# This assumes the directory/subvol is emptied by the caller.
|
||||
rm_subvolume_or_directory() {
|
||||
is_btrfs_subvolume "$1" && {
|
||||
btrfs subvolume delete "$1"
|
||||
return
|
||||
}
|
||||
rmdir "$1"
|
||||
}
|
||||
|
||||
# On systems using BTRFS, convert /var/lib/machines into a subvolume suitable
|
||||
# for snapper to perform snapshots, rollbacks.. in case it was not properly set
|
||||
# up, see bsc#992573. The installer has been fixed to properly initialize it at
|
||||
# installation time.
|
||||
#
|
||||
# The conversion might only be problematic for openSUSE distros (TW/Factory)
|
||||
# where the subvolume was created at the wrong place (via tmpfiles for example)
|
||||
# and it got populated before we had time to fix it. In this case we'll let the
|
||||
# user fix it manually.
|
||||
#
|
||||
# On SLE12 this subvolume was only introduced during the upgrade from v210 to
|
||||
# v228 (ie SLE12-SP[01] -> SLE12-SP2+ when we added this workaround hence no
|
||||
# user should had time to populate it. Note that the subvolume is still created
|
||||
# at the wrong place due to the call to tmpfiles_create macro in the %post
|
||||
# section however it's empty so again we shouldn't face any issue to convert it.
|
||||
#
|
||||
# In order to avoid ugly dependencies added in systemd package, this function
|
||||
# should only be called during package updates when mksubvolume(8) is
|
||||
# available. During installation, /var/lib/machines is supposed to be created by
|
||||
# the installer now.
|
||||
#
|
||||
# See bsc#992573
|
||||
#
|
||||
fix_machines_subvol() {
|
||||
local tagfile=/var/lib/systemd/rpm/container-machines_subvol
|
||||
|
||||
if [ -e $tagfile ]; then
|
||||
return 0
|
||||
fi
|
||||
touch $tagfile
|
||||
|
||||
#
|
||||
# If there's already an entry in fstab for /var/lib/machines, it
|
||||
# means that:
|
||||
#
|
||||
# - the installer initialized /var/lib/machines correctly (default)
|
||||
# - we already fixed it
|
||||
# - the sysadmin added it manually
|
||||
#
|
||||
# In any cases we should return.
|
||||
#
|
||||
# Note: we can't simply check if /var/lib/machines has been mounted
|
||||
# because an update through a chroot might be in progress (see
|
||||
# bsc#1030290).
|
||||
#
|
||||
if mount --fake /var/lib/machines 2>/dev/null; then
|
||||
return
|
||||
fi
|
||||
|
||||
#
|
||||
# If there is already an entry in fstab for /var, it means that:
|
||||
#
|
||||
# - the system has a seperate /var subvolume (default from Feb 2018)
|
||||
# - the system has a seperate /var partition
|
||||
#
|
||||
# In any case we should return.
|
||||
#
|
||||
if mount --fake /var 2>/dev/null; then
|
||||
return
|
||||
fi
|
||||
|
||||
#
|
||||
# If something is already mounted don't try to fix anything, it's been
|
||||
# done manually by the sysadmin.
|
||||
#
|
||||
if mountpoint -q /var/lib/machines; then
|
||||
return
|
||||
fi
|
||||
|
||||
#
|
||||
# Let's try to figure out if the current filesystem uses a Snapper
|
||||
# BTRFS specific layout. Note that TW uses a different layout than
|
||||
# SLE...
|
||||
#
|
||||
# FIXME: not sure if it's correct, reliable or optimal.
|
||||
#
|
||||
case $(findmnt -nr -t btrfs -o FSROOT / 2>/dev/null) in
|
||||
*.snapshots/*/snapshot*)
|
||||
;;
|
||||
*)
|
||||
return 0
|
||||
esac
|
||||
|
||||
if test -d /var/lib/machines; then
|
||||
#
|
||||
# Ok, we're on a system supporting rollbacks and
|
||||
# /var/lib/machines is not a subvolume remotely mounted so it
|
||||
# cannot be suitable for systems supporting rollback. Fix it.
|
||||
#
|
||||
echo "Making /var/lib/machines suitable for rollbacks..."
|
||||
|
||||
type mksubvolume >/dev/null 2>&1 || {
|
||||
warn "mksubvolume(8) is not installed, aborting."
|
||||
return 1
|
||||
}
|
||||
test "$(ls -A /var/lib/machines/)" && {
|
||||
warn "/var/lib/machines is not empty, aborting."
|
||||
return 1
|
||||
}
|
||||
|
||||
echo "Deleting empty /var/lib/machines directory/subvolume"
|
||||
rm_subvolume_or_directory /var/lib/machines || {
|
||||
warn "fail to delete /var/lib/machines"
|
||||
return 1
|
||||
}
|
||||
fi
|
||||
|
||||
# At this point /var/lib/machines shouldn't exist.
|
||||
echo "Creating /var/lib/machines subvolume suitable for rollbacks."
|
||||
mksubvolume /var/lib/machines
|
||||
}
|
||||
|
||||
r=0
|
||||
if [ $1 -gt 1 ]; then
|
||||
# During upgrade
|
||||
fix_machines_subvol || {
|
||||
warn "Please fix /var/lib/machines manually."
|
||||
r=1
|
||||
}
|
||||
fi
|
||||
|
||||
exit $r
|
250
fixlet-systemd-post.sh
Normal file
250
fixlet-systemd-post.sh
Normal file
|
@ -0,0 +1,250 @@
|
|||
#! /bin/bash
|
||||
#
|
||||
# This script contains all the fixups run when systemd package is installed or
|
||||
# updated.
|
||||
#
|
||||
|
||||
# /etc/sysconfig/console | /etc/vconsole.conf
|
||||
# -------------------------+---------------------
|
||||
# CONSOLE_FONT | FONT
|
||||
# CONSOLE_SCREENMAP | FONT_MAP
|
||||
# CONSOLE_UNICODEMAP | FONT_UNIMAP
|
||||
migrate_locale () {
|
||||
local migrated=""
|
||||
|
||||
if ! test -f /etc/sysconfig/console; then
|
||||
return
|
||||
fi
|
||||
source /etc/sysconfig/console || return
|
||||
|
||||
if test -f /etc/vconsole.conf; then
|
||||
source /etc/vconsole.conf || return
|
||||
fi
|
||||
|
||||
if test -n "$CONSOLE_FONT" && test -z "$FONT"; then
|
||||
echo "FONT=$CONSOLE_FONT" >>/etc/vconsole.conf
|
||||
migrated+="CONSOLE_FONT "
|
||||
fi
|
||||
if test -n "$CONSOLE_SCREENMAP" && test -z "$FONT_MAP"; then
|
||||
echo "FONT_MAP=$CONSOLE_SCREENMAP" >>/etc/vconsole.conf
|
||||
migrated+="CONSOLE_SCREENMAP "
|
||||
fi
|
||||
if test -n "$CONSOLE_UNICODEMAP" && test -z "$FONT_UNIMAP"; then
|
||||
echo "FONT_UNIMAP=$CONSOLE_UNICODEMAP" >>/etc/vconsole.conf
|
||||
migrated+="CONSOLE_UNICODEMAP "
|
||||
fi
|
||||
|
||||
if test -n "$migrated"; then
|
||||
echo >&2 "The following variables from /etc/sysconfig/console have been migrated"
|
||||
echo >&2 "into /etc/vconsole.conf:"
|
||||
echo >&2
|
||||
for v in $migrated; do echo " - $v=${!v}"; done
|
||||
echo >&2
|
||||
echo >&2 "Please edit /etc/vconsole.conf if you need to tune these settings"
|
||||
echo >&2 "as /etc/sysconfig/console won't be considered anymore."
|
||||
echo >&2
|
||||
fi
|
||||
}
|
||||
|
||||
# /etc/sysconfig/keyboard | /etc/vconsole.conf
|
||||
# -------------------------+---------------------
|
||||
# KEYTABLE | KEYMAP
|
||||
migrate_keyboard () {
|
||||
local migrated=""
|
||||
|
||||
if ! test -f /etc/sysconfig/keyboard; then
|
||||
return
|
||||
fi
|
||||
source /etc/sysconfig/keyboard || return
|
||||
|
||||
if test -f /etc/vconsole.conf; then
|
||||
source /etc/vconsole.conf || return
|
||||
fi
|
||||
|
||||
if test -n "$KEYTABLE" && test -z "$KEYMAP"; then
|
||||
echo "KEYMAP=$KEYTABLE" >>/etc/vconsole.conf
|
||||
migrated+="KEYTABLE "
|
||||
fi
|
||||
|
||||
if test -n "$migrated"; then
|
||||
echo >&2 "The following variables from /etc/sysconfig/keyboard have been migrated"
|
||||
echo >&2 "into /etc/vconsole.conf:"
|
||||
echo >&2
|
||||
for v in $migrated; do echo " - $v=${!v}"; done
|
||||
echo >&2
|
||||
echo >&2 "Please use localectl(1) if you need to tune these settings since"
|
||||
echo >&2 "/etc/sysconfig/keyboard won't be considered anymore."
|
||||
echo >&2
|
||||
fi
|
||||
}
|
||||
|
||||
# According to
|
||||
# https://www.suse.com/documentation/sles-12/book_sle_admin/data/sec_suse_l10n.html,
|
||||
# variables in /etc/sysconfig/language are supposed to be passed to the users'
|
||||
# shell *only*. However it seems that there has been some confusion and they
|
||||
# ended up configuring the system-wide locale as well. The logic followed by
|
||||
# systemd was implemented in commit 01c4b6f4f0d951d17f6873f68156ecd7763429c6,
|
||||
# which was reverted. The code below follows the same logic to migrate content
|
||||
# of /etc/sysconfig/language into locale.conf.
|
||||
migrate_language () {
|
||||
local lang=
|
||||
local migrated=false
|
||||
|
||||
if ! test -f /etc/sysconfig/language; then
|
||||
return
|
||||
fi
|
||||
source /etc/sysconfig/language || return
|
||||
|
||||
lang=$(grep ^LANG= /etc/locale.conf 2>/dev/null)
|
||||
lang=${lang#LANG=}
|
||||
|
||||
case "$ROOT_USES_LANG" in
|
||||
yes)
|
||||
if test -z "$lang" && test -n "$RC_LANG"; then
|
||||
echo "LANG=$RC_LANG" >>/etc/locale.conf
|
||||
migrated=true
|
||||
fi
|
||||
;;
|
||||
ctype)
|
||||
if ! grep -q ^LC_CTYPE= /etc/locale.conf 2>/dev/null; then
|
||||
|
||||
: ${lc_ctype:="$lang"}
|
||||
: ${lc_ctype:="$RC_LC_CTYPE"}
|
||||
: ${lc_ctype:="$RC_LANG"}
|
||||
|
||||
if test -n "$lc_ctype"; then
|
||||
echo "LC_CTYPE=$lc_ctype" >>/etc/locale.conf
|
||||
migrated=true
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if $migrated; then
|
||||
echo >&2 "The content of /etc/sysconfig/language has been migrated into"
|
||||
echo >&2 "/etc/locale.conf. The former file is now only used for setting"
|
||||
echo >&2 "the locale used by user's shells. The system-wide locale is"
|
||||
echo >&2 "only read from /etc/locale.conf since now."
|
||||
echo >&2
|
||||
echo >&2 "Please only use localectl(1) or YaST if you need to change the"
|
||||
echo >&2 "settings of the *system-wide* locale from now."
|
||||
fi
|
||||
}
|
||||
|
||||
# Migrate old i18n settings previously configured in /etc/sysconfig to the new
|
||||
# locations used by systemd (/etc/locale.conf, /etc/vconsole.conf, ...). Recent
|
||||
# versions of systemd parse the new locations only.
|
||||
#
|
||||
# This is needed both at package updates and package installations because we
|
||||
# might be upgrading from a system which was running SysV init (systemd package
|
||||
# is being installed).
|
||||
#
|
||||
# It's run only once.
|
||||
migrate_sysconfig_i18n() {
|
||||
local tagfile=/var/lib/systemd/rpm/systemd-i18n_migrated
|
||||
local -i rv=0
|
||||
|
||||
if [ -e $tagfile ]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
# The marker could have been incorrectly put in /usr/lib.
|
||||
mv /usr/lib/systemd/scripts/.migrate-sysconfig-i18n.sh~done $tagfile &>/dev/null
|
||||
# The tag files have been moved to /var/lib/systemd/rpm later.
|
||||
mv /var/lib/systemd/i18n-migrated $tagfile &>/dev/null
|
||||
|
||||
if [ -e $tagfile ]; then
|
||||
return 0
|
||||
fi
|
||||
touch $tagfile
|
||||
|
||||
migrate_locale; rv+=$?
|
||||
migrate_keyboard; rv+=$?
|
||||
migrate_language; rv+=$?
|
||||
|
||||
if [ $rv -gt 0 ]; then
|
||||
echo >&2 "Failed to migrate i18n settings from /etc/sysconfig, ignoring."
|
||||
fi
|
||||
|
||||
return $rv
|
||||
}
|
||||
|
||||
#
|
||||
# This function is supposed to be called from the %post section of the main
|
||||
# package. It contains all the fixups needed when the system was running a
|
||||
# version of systemd older than v210.
|
||||
#
|
||||
# All hacks can potentially break the admin settings since they work in /etc.
|
||||
#
|
||||
fix_pre_210() {
|
||||
local tagfile=/var/lib/systemd/rpm/systemd-pre_210_fixed
|
||||
|
||||
if [ -e $tagfile ]; then
|
||||
return 0
|
||||
fi
|
||||
touch $tagfile
|
||||
|
||||
#
|
||||
# During migration from sysvinit to systemd, we used to set the systemd
|
||||
# default target to one of the 'runlevel*.target' after reading the
|
||||
# default runlevel from /etc/inittab. We don't do that anymore because
|
||||
# in most cases using the graphical.target target, which is the default,
|
||||
# will do the right thing. Moreover the runlevel targets are considered
|
||||
# as deprecated, so we convert them into "true" systemd targets instead
|
||||
# here.
|
||||
#
|
||||
if target=$(readlink /etc/systemd/system/default.target); then
|
||||
target=$(basename $target)
|
||||
case "$target" in
|
||||
runlevel?.target)
|
||||
echo "Default target is '$target' but use of runlevels is deprecated, converting"
|
||||
systemctl --no-reload set-default $target
|
||||
esac
|
||||
fi
|
||||
|
||||
#
|
||||
# Migrate any symlink which may refer to the old path (ie /lib/systemd).
|
||||
#
|
||||
for f in $(find /etc/systemd/system -type l -xtype l); do
|
||||
new_target="/usr$(readlink $f)"
|
||||
[ -f "$new_target" ] && ln -s -f "$new_target" "$f"
|
||||
done
|
||||
}
|
||||
|
||||
#
|
||||
# /etc/machine-id might have been created writeable incorrectly (boo#1092269).
|
||||
#
|
||||
# Note: run at each package update.
|
||||
#
|
||||
fix_machine_id_perms() {
|
||||
if [ "$(stat -c%a /etc/machine-id)" != 444 ]; then
|
||||
echo "Incorrect file mode bits for /etc/machine-id which should be 0444, fixing..."
|
||||
chmod 444 /etc/machine-id
|
||||
fi
|
||||
}
|
||||
|
||||
#
|
||||
# v228 wrongly set world writable suid root permissions on timestamp files used
|
||||
# by permanent timers. Fix the timestamps that might have been created by the
|
||||
# affected versions of systemd (bsc#1020601).
|
||||
#
|
||||
# Note: run at each package update.
|
||||
#
|
||||
fix_bsc_1020601() {
|
||||
for stamp in $(ls /var/lib/systemd/timers/stamp-*.timer 2>/dev/null); do
|
||||
chmod 0644 $stamp
|
||||
done
|
||||
|
||||
# Same for user lingering created by logind.
|
||||
for username in $(ls /var/lib/systemd/linger/* 2>/dev/null); do
|
||||
chmod 0644 $username
|
||||
done
|
||||
}
|
||||
|
||||
r=0
|
||||
fix_machine_id_perms || r=1
|
||||
fix_pre_210 || r=1
|
||||
migrate_sysconfig_i18n || r=1
|
||||
fix_bsc_1020601 || r=1
|
||||
|
||||
exit $r
|
73
fixlet-udev-post.sh
Normal file
73
fixlet-udev-post.sh
Normal file
|
@ -0,0 +1,73 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Convert legacy collect based udev rules for s390x device initialization to the
|
||||
# new chzdev based scheme
|
||||
s390_migrate_collect_to_chzdev() {
|
||||
local tagfile=/var/lib/systemd/rpm/udev-s390_chzdev_migrated
|
||||
|
||||
[ -f /sbin/chzdev ] || return 0
|
||||
|
||||
if [ -e $tagfile ]; then
|
||||
return 0
|
||||
fi
|
||||
touch $tagfile
|
||||
|
||||
for rule in /etc/udev/rules.d/*.rules; do
|
||||
|
||||
# The rule files might contain several occurences of
|
||||
# IMPORT{program}="collect ..." but we're interested
|
||||
# only in the first occurence, the rest are ignored.
|
||||
|
||||
import_builtin_collect=$(grep --max-count=1 -F 'IMPORT{program}="collect' $rule) ||
|
||||
continue
|
||||
|
||||
echo "Migrating collect based udev rule $rule to new chzdev based scheme..."
|
||||
|
||||
CHANNEL=$(echo $import_builtin_collect | sed -n 's/.*collect \([[:graph:]]*\).*/\1/p')
|
||||
if [ -z "$CHANNEL" ]; then
|
||||
echo >&2 "Failed to retrieve CHANNEL info, skipping"
|
||||
continue
|
||||
fi
|
||||
|
||||
DEVICE=$(echo $import_builtin_collect | sed -n 's/.* //p')
|
||||
DEVICE="${DEVICE%\"}"
|
||||
|
||||
echo "Updating udev rule $rule for device '$DEVICE' channel '$CHANNEL'"
|
||||
|
||||
mv $rule $rule.legacy
|
||||
if [ "$DEVICE" == "dasd-eckd" ]; then
|
||||
echo "running: /sbin/chzdev -e -p $DEVICE --no-root-update $CHANNEL"
|
||||
/sbin/chzdev -e -p $DEVICE --no-root-update $CHANNEL
|
||||
else
|
||||
GROUP=$(sed -n '/SUBSYSTEM=="ccw"/s/.*group}=" *\([[:graph:]]*\),\([[:graph:]]*\),\([[:graph:]]*\)"/\1:\2:\3/p' $rule.legacy)
|
||||
LAYER2=$(sed -n 's/.*layer2}="\([[:digit:]]\)"/layer2=\1/p' $rule.legacy)
|
||||
PORTNO=$(chzdev --quiet --all $DEVICE --export - | grep portno)
|
||||
echo "running: /sbin/chzdev -e -p $DEVICE --no-root-update ${PORTNO:=portno=0} $LAYER2 $GROUP"
|
||||
/sbin/chzdev -e -p $DEVICE --no-root-update ${PORTNO:=portno=0} $LAYER2 $GROUP
|
||||
fi
|
||||
|
||||
if [ $? != 0 ]; then
|
||||
echo >&2 "Warning: Rule conversion failed, restoring original rule!"
|
||||
mv $rule.legacy $rule
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
fix_persistent_net_rules() {
|
||||
# add KERNEL name match to existing persistent net rules
|
||||
sed -ri '/KERNEL/ ! { s/NAME="(eth|wlan|ath)([0-9]+)"/KERNEL=="\1*", NAME="\1\2"/}' \
|
||||
/etc/udev/rules.d/70-persistent-net.rules 2>/dev/null || :
|
||||
}
|
||||
|
||||
cleanup_old_stuff() {
|
||||
# cleanup old stuff
|
||||
rm -f /etc/sysconfig/udev
|
||||
rm -f /etc/udev/rules.d/{20,55,65}-cdrom.rules
|
||||
}
|
||||
|
||||
r=0
|
||||
s390_migrate_collect_to_chzdev || r=1
|
||||
fix_persistent_net_rules || r=1
|
||||
cleanup_old_stuff || r=1
|
||||
|
||||
exit $r
|
14
kbd-model-map.legacy
Normal file
14
kbd-model-map.legacy
Normal file
|
@ -0,0 +1,14 @@
|
|||
# Additional layouts offered by YaST arabic and ir (Iran) have never had a
|
||||
# console layout, they are symlinks to 'us', but they are needed as YaST uses
|
||||
# the console layout as a primary key for picking the X11 layout. 'arabic' is
|
||||
# obsolete and 'ara' should be preferred but keep it until YaST switches to the
|
||||
# new name.
|
||||
|
||||
ara ara,us pc105 - terminate:ctrl_alt_bksp,grp:shift_toggle
|
||||
arabic ara,us pc105 - terminate:ctrl_alt_bksp,grp:shift_toggle
|
||||
ir ir pc105 - terminate:ctrl_alt_bksp
|
||||
|
||||
# ruwin_alt-UTF-8 is needed because the X11 russian layouts contain no Latin
|
||||
# letters and therefore the X->console conversion omits Russian entirely
|
||||
|
||||
ruwin_alt-UTF-8 us,ru pc105 ,winkeys terminate:ctrl_alt_bksp,grp:ctrl_shift_toggle,grp_led:scroll
|
30
systemd-rpmlintrc
Normal file
30
systemd-rpmlintrc
Normal file
|
@ -0,0 +1,30 @@
|
|||
addFilter("invalid-pkgconfig-file")
|
||||
addFilter(".*dangling-symlink /sbin/(halt|init|poweroff|telinit|shutdown|runlevel|reboot).*")
|
||||
addFilter(".*dangling-symlink .* /dev/null.*")
|
||||
addFilter(".*files-duplicate .*/reboot\.8.*")
|
||||
addFilter(".*files-duplicate .*/sd_is_socket\.3.*")
|
||||
addFilter("non-conffile-in-etc /etc/bash_completion.d/systemd-bash-completion\.sh")
|
||||
addFilter("non-conffile-in-etc /etc/rpm/macros\.systemd")
|
||||
addFilter(".*dbus-policy-allow-receive")
|
||||
addFilter(".*dangling-symlink /lib/udev/devices/std(in|out|err).*")
|
||||
addFilter(".*dangling-symlink /lib/udev/devices/core.*")
|
||||
addFilter(".*dangling-symlink /lib/udev/devices/fd.*")
|
||||
addFilter(".*incoherent-init-script-name boot\.udev.*")
|
||||
addFilter(".init-script-without-%stop_on_removal-preun /etc/init\.d/boot\.udev")
|
||||
addFilter(".init-script-without-%restart_on_update-postun /etc/init\.d/boot\.udev")
|
||||
addFilter(".*devel-file-in-non-devel-package.*udev.pc.*")
|
||||
addFilter(".*suse-filelist-forbidden-systemd-userdirs.*")
|
||||
addFilter("libudev-mini.*shlib-policy-name-error.*")
|
||||
addFilter("nss-systemd.*shlib-policy-name-error.*")
|
||||
addFilter("nss-myhostname.*shlib-policy-name-error.*")
|
||||
addFilter("systemd-container.*shlib-policy-name-error.*")
|
||||
addFilter("systemd-network.*shlib-policy-name-error.*")
|
||||
addFilter("devel-file-in-non-devel-package.*/usr/share/pkgconfig/(udev|systemd)\.pc.*")
|
||||
addFilter(".*script-without-shebang.*/usr/lib/udev/rule_generator.functions.*")
|
||||
addFilter(".*missing-call-to-setgroups-before-setuid.*")
|
||||
addFilter(".*missing-call-to-chdir-with-chroot.*")
|
||||
addFilter(".*systemd-service-without-service.*")
|
||||
addFilter(".*shlib-policy-missing-suffix.*")
|
||||
addFilter(".*suse-missing-rclink.*")
|
||||
addFilter("env-script-interpreter")
|
||||
addFilter(".*files-duplicate /usr/lib/systemd/tests/.*")
|
120
systemd-sysv-convert
Normal file
120
systemd-sysv-convert
Normal file
|
@ -0,0 +1,120 @@
|
|||
#!/bin/bash
|
||||
|
||||
info() {
|
||||
echo "$(basename $0): $*"
|
||||
}
|
||||
|
||||
warn() {
|
||||
echo >&2 "$(basename $0): warning, $*"
|
||||
}
|
||||
|
||||
usage() {
|
||||
echo >&2 "usage: $(basename $0) --apply <service> [<service> ...]"
|
||||
}
|
||||
|
||||
if [ "$UID" != "0" ]; then
|
||||
warn "need to be root, aborting"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ $# -lt 2 ]; then
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
database_lookup() {
|
||||
local service unused
|
||||
|
||||
# 'priority' field is not used but is kept for backward compat reason.
|
||||
while read service unused; do
|
||||
if [ $service == $1 ]; then
|
||||
return 0
|
||||
fi
|
||||
done </var/lib/systemd/sysv-convert/database
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
database_add() {
|
||||
# Write a dumb priority as it is not used.
|
||||
echo "$1 $2 50" >>/var/lib/systemd/sysv-convert/database
|
||||
}
|
||||
|
||||
# Initialize the database.
|
||||
if [ ! -e /var/lib/systemd/sysv-convert/database ]; then
|
||||
touch /var/lib/systemd/sysv-convert/database
|
||||
fi
|
||||
|
||||
case "$1" in
|
||||
--save)
|
||||
# --save is kept for backward compatibility.
|
||||
;;
|
||||
--apply)
|
||||
shift
|
||||
for service in $@; do
|
||||
# For backward compat we accept the name of the
|
||||
# service with or without the unit type suffix. If the
|
||||
# suffix is not there, assume .service type.
|
||||
case "$service" in
|
||||
*.*) initscript="${service%.*}" ;;
|
||||
*) initscript="$service"
|
||||
service="$service.service"
|
||||
esac
|
||||
|
||||
# Did we already migrate this service during a previous update ?
|
||||
database_lookup $initscript &&
|
||||
continue
|
||||
|
||||
# Sanity check.
|
||||
unit="/usr/lib/systemd/system/$service"
|
||||
if [ ! -f "$unit" ]; then
|
||||
warn "$unit not found, skipping"
|
||||
continue
|
||||
fi
|
||||
|
||||
# Mark the service as processed to make sure we will do the migration only
|
||||
# once. This is important especially for packages that keep their init
|
||||
# scripts around even if they're no more used. Since the saved info won't
|
||||
# be reused again we simply use an invalid runlevel and add the service
|
||||
# in the db only once.
|
||||
database_add $initscript -1
|
||||
|
||||
# Some services were renamed during the transition from SySV init to
|
||||
# systemd (bsc#1181788). Rather than letting packages fixing that
|
||||
# themselves by hacking our database directly, let's hard-code renames
|
||||
# here. Not really nice but that's the least worst solution.
|
||||
case $initscript in
|
||||
ntpd) initscript=ntp ;;
|
||||
esac
|
||||
|
||||
# The package is introducing new services and never has any sysv init
|
||||
# scripts (bsc#982303).
|
||||
if [ ! -r /etc/init.d/$initscript ] &&
|
||||
[ ! -r /etc/init.d/boot.$initscript ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
for rcnd in rc2.d rc3.d rc4.d rc5.d boot.d; do
|
||||
# Was the sysvinit script enabled ? (bsc#982211)
|
||||
case $rcnd in
|
||||
boot.d) [ -L /etc/rc.d/boot.d/S??boot.$initscript ] || continue ;;
|
||||
*) [ -L /etc/rc.d/$rcnd/S??$initscript ] || continue
|
||||
esac
|
||||
|
||||
case $rcnd in
|
||||
boot.d) runlevel=3 ;;
|
||||
*) runlevel=${rcnd:2:1}
|
||||
esac
|
||||
|
||||
target=runlevel$runlevel.target
|
||||
info "enabling $unit (wanted by $target)..."
|
||||
|
||||
mkdir -p "/etc/systemd/system/$target.wants"
|
||||
ln -sf $unit /etc/systemd/system/$target.wants/$service
|
||||
done
|
||||
done
|
||||
;;
|
||||
*)
|
||||
usage
|
||||
exit 1
|
||||
esac
|
148
systemd-sysv-install
Normal file
148
systemd-sysv-install
Normal file
|
@ -0,0 +1,148 @@
|
|||
#!/bin/bash
|
||||
|
||||
# This script is called by "systemctl enable/disable" when the given unit is a
|
||||
# SysV init.d script. It needs to call the distribution's mechanism for
|
||||
# enabling/disabling those, such as chkconfig, update-rc.d, or similar. This
|
||||
# can optionally take a --root argument for enabling a SysV init script
|
||||
# in a chroot or similar.
|
||||
#
|
||||
# chkconfig(8) and insserv(8) are no more available hence let's do the
|
||||
# bare minimum and create/remote the symlinks for the well known
|
||||
# runlevels and nothing more. Note that we don't take care of
|
||||
# enabling/disabling the service dependencies as the sysv-generator
|
||||
# will take care of them for us (openSUSE specific).
|
||||
#
|
||||
|
||||
set -e
|
||||
|
||||
usage() {
|
||||
echo >&2 "Usage: $0 [--quiet] [--root=path] enable|disable|is-enabled <sysv script name>"
|
||||
exit 1
|
||||
}
|
||||
|
||||
info() {
|
||||
$quiet || echo "$*"
|
||||
}
|
||||
|
||||
die() {
|
||||
echo >&2 "error: $*, aborting."
|
||||
exit 1
|
||||
}
|
||||
|
||||
declare -A lsb_header
|
||||
|
||||
check_runlevels() {
|
||||
for l in $*; do
|
||||
# Sanity check
|
||||
case $l in
|
||||
0|1|2|3|4|5|6) continue ;;
|
||||
*) return 1
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
load_initscript() {
|
||||
local found_lsb_start_marker=false
|
||||
local found_lsb_end_marker=false
|
||||
|
||||
[ -r $1 ] || die "initscript /etc/init.d/$1 can't be read"
|
||||
|
||||
lsb_header=()
|
||||
|
||||
while read line; do
|
||||
# skip anything that is not a comment
|
||||
[[ "$line" =~ ^# ]] || continue
|
||||
|
||||
if ! $found_lsb_start_marker; then
|
||||
[ "$line" == "### BEGIN INIT INFO" ] &&
|
||||
found_lsb_start_marker=true
|
||||
continue
|
||||
fi
|
||||
|
||||
line=$(echo ${line:1})
|
||||
|
||||
case "$line" in
|
||||
Default-Start:*)
|
||||
levels=$(echo ${line:14})
|
||||
|
||||
check_runlevels $levels ||
|
||||
die "Invalid runlevels specified in $line"
|
||||
|
||||
lsb_header[Default-Start]=$levels
|
||||
;;
|
||||
"## END INIT INFO")
|
||||
found_lsb_end_marker=true
|
||||
break ;;
|
||||
esac
|
||||
done <$1
|
||||
|
||||
$found_lsb_end_marker ||
|
||||
die "malformated LSB header in $1: missing LSB end marker"
|
||||
}
|
||||
|
||||
enable_initscript() {
|
||||
load_initscript $1
|
||||
|
||||
for l in ${lsb_header[Default-Start]}; do
|
||||
symlink="$(pwd)/rc${l}.d/S50$1"
|
||||
|
||||
info "ln -sf ../$1 $symlink"
|
||||
ln -sf ../$1 "$symlink"
|
||||
done
|
||||
}
|
||||
|
||||
disable_initscript() {
|
||||
for symlink in rc*.d/[SK]*; do
|
||||
if [ -L $symlink ] && [ $(readlink $symlink) = "../$1" ]; then
|
||||
info "rm $(pwd)/$symlink"
|
||||
rm $symlink
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
is_initscript_enabled() {
|
||||
for symlink in rc*.d/S*; do
|
||||
[ -L $symlink ] && [ $(readlink $symlink) = "../$1" ] &&
|
||||
return 0
|
||||
done
|
||||
return 1
|
||||
}
|
||||
|
||||
root=
|
||||
quiet=false
|
||||
|
||||
# parse options
|
||||
eval set -- "$(getopt --name $(basename $0) -o hqr: --long help,quiet,root: -- "$@")"
|
||||
while true; do
|
||||
case "$1" in
|
||||
-h|--help)
|
||||
usage ;;
|
||||
-r|--root)
|
||||
shift
|
||||
root=$1 ;;
|
||||
-q|--quiet)
|
||||
quiet=true ;;
|
||||
--)
|
||||
shift
|
||||
break ;;
|
||||
*)
|
||||
usage ;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
[ $# -eq 2 ] || usage
|
||||
action=$1
|
||||
name=$2
|
||||
|
||||
sysvinit_path=$(realpath -q -e $root/etc/init.d) ||
|
||||
die "$root/etc/init.d: no such file or directory"
|
||||
|
||||
cd $sysvinit_path
|
||||
|
||||
case "$action" in
|
||||
enable) enable_initscript $name ;;
|
||||
disable) disable_initscript $name ;;
|
||||
is-enabled) is_initscript_enabled $name ;;
|
||||
*) usage
|
||||
esac
|
25
systemd-user
Normal file
25
systemd-user
Normal file
|
@ -0,0 +1,25 @@
|
|||
# This file is part of systemd.
|
||||
#
|
||||
# Used by systemd --user instances.
|
||||
|
||||
# Override the default behavior of the "auth" PAM stack and don't throw a
|
||||
# warning each time a user instance is started, which is the default behavior of
|
||||
# the PAM stack when no auth is defined. Indeed PID1 calls pam_setcred() when
|
||||
# the user instance is about to be started to allow some user services, such as
|
||||
# gnome-terminal, to extend theirs credentials similar to the ones received by a
|
||||
# user when he logs in (and the full PAM authentication stack is run). For some
|
||||
# details, see:
|
||||
#
|
||||
# https://gitlab.gnome.org/GNOME/gdm/-/issues/393
|
||||
# https://github.com/systemd/systemd/issues/11198
|
||||
# https://bugzilla.suse.com/show_bug.cgi?id=1190515
|
||||
#
|
||||
auth required pam_deny.so
|
||||
|
||||
account include common-account
|
||||
|
||||
session required pam_selinux.so close
|
||||
session required pam_selinux.so nottys open
|
||||
session required pam_loginuid.so
|
||||
session optional pam_keyinit.so force revoke
|
||||
session include common-session
|
8375
systemd.changes
Normal file
8375
systemd.changes
Normal file
File diff suppressed because it is too large
Load diff
1407
systemd.spec
Normal file
1407
systemd.spec
Normal file
File diff suppressed because it is too large
Load diff
19
tmpfiles-suse.conf
Normal file
19
tmpfiles-suse.conf
Normal file
|
@ -0,0 +1,19 @@
|
|||
#
|
||||
# See tmpfiles.d(5) for details
|
||||
#
|
||||
# Type Path Mode User Group Age Argument
|
||||
|
||||
# Legacy symlink. Maybe should be owned by util-linux ?
|
||||
L+ /etc/mtab - - - - ../proc/self/mounts
|
||||
|
||||
# FIXME: Might be moved to lockded.
|
||||
d /run/lock 0775 root lock -
|
||||
|
||||
# /run/lock/subsys is used for serializing SysV service execution, and
|
||||
# hence without use on SysV-less systems.
|
||||
d /run/lock/subsys 0755 root root -
|
||||
|
||||
# FIXME: Should these one be moved to shadow ?
|
||||
f /var/log/wtmp 0664 root utmp -
|
||||
f /var/log/btmp 0660 root utmp -
|
||||
f /var/log/lastlog 0664 root utmp -
|
Loading…
Add table
Reference in a new issue