- Update to release 202:
+ 'systemctl list-jobs' got some polishing. '--type=' argument may now be passed more than once. 'systemctl list-sockets' has been added. + systemd gained a new unit 'systemd-static-nodes.service' that generates static device nodes earlier during boot, and can run in conjunction with udev. + systemd-nspawn now places all containers in the new /machine top-level cgroup directory in the name=systemd hierarchy. + bootchart can now store its data in the journal. + journactl can now take multiple --unit= and --user-unit= switches. + The cryptsetup logic now understands the "luks.key=" kernel command line switch. If a configured key file is missing, it will fallback to prompting the user. - Rebase some patches - Update handle-SYSTEMCTL_OPTIONS-environment-variable.patch to properly handle SYSTEMCTL_OPTIONS - Fix regression in the default for tmp auto-deletion (systemd-tmp-safe-defaults.patch, FATE#314974). - Add chromebook lid switch as a power switch to logind rule to enable suspend on lid close - Update to release 202: + 'systemctl list-jobs' got some polishing. '--type=' argument may now be passed more than once. 'systemctl list-sockets' has been added. + systemd gained a new unit 'systemd-static-nodes.service' OBS-URL: https://build.opensuse.org/package/show/Base:System/systemd?expand=0&rev=365
This commit is contained in:
parent
8c69048d77
commit
4ae8e483c0
@ -83,7 +83,7 @@ index 54c51ac..d2124ea 100644
|
||||
void udev_device_set_usec_initialized(struct udev_device *udev_device, usec_t usec_initialized);
|
||||
int udev_device_get_devlink_priority(struct udev_device *udev_device);
|
||||
diff --git a/src/udev/udevd.c b/src/udev/udevd.c
|
||||
index 2ad7388..5a90b60 100644
|
||||
index 7d13b4f..9be1931 100644
|
||||
--- a/src/udev/udevd.c
|
||||
+++ b/src/udev/udevd.c
|
||||
@@ -391,7 +391,7 @@ out:
|
||||
|
@ -8,10 +8,10 @@ udevd race for netlink events (bnc#774646)
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/src/udev/udevd.c b/src/udev/udevd.c
|
||||
index 5a90b60..2a0bf60 100644
|
||||
index 9be1931..d0c4c72 100644
|
||||
--- a/src/udev/udevd.c
|
||||
+++ b/src/udev/udevd.c
|
||||
@@ -1410,6 +1410,8 @@ int main(int argc, char *argv[])
|
||||
@@ -1414,6 +1414,8 @@ int main(int argc, char *argv[])
|
||||
dev = udev_monitor_receive_device(monitor);
|
||||
if (dev != NULL) {
|
||||
udev_device_set_usec_initialized(dev, now(CLOCK_MONOTONIC));
|
||||
|
@ -8,13 +8,13 @@ fix modules.devname path, it isn't in /usr.
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/udev/udevd.c b/src/udev/udevd.c
|
||||
index 2a0bf60..6c2c2c9 100644
|
||||
index d0c4c72..599cd3b 100644
|
||||
--- a/src/udev/udevd.c
|
||||
+++ b/src/udev/udevd.c
|
||||
@@ -827,7 +827,7 @@ static void static_dev_create_from_modules(struct udev *udev)
|
||||
FILE *f;
|
||||
@@ -831,7 +831,7 @@ static void static_dev_create_from_modules(struct udev *udev)
|
||||
return;
|
||||
}
|
||||
|
||||
uname(&kernel);
|
||||
- strscpyl(modules, sizeof(modules), ROOTPREFIX "/lib/modules/", kernel.release, "/modules.devname", NULL);
|
||||
+ strscpyl(modules, sizeof(modules), "/lib/modules/", kernel.release, "/modules.devname", NULL);
|
||||
f = fopen(modules, "re");
|
||||
|
@ -9,7 +9,7 @@ splash screen to verbose when a password is asked...
|
||||
1 file changed, 22 insertions(+)
|
||||
|
||||
diff --git a/src/shared/ask-password-api.c b/src/shared/ask-password-api.c
|
||||
index 8a0fb89..4bece69 100644
|
||||
index 4557155..3750f64 100644
|
||||
--- a/src/shared/ask-password-api.c
|
||||
+++ b/src/shared/ask-password-api.c
|
||||
@@ -63,6 +63,9 @@ int ask_password_tty(
|
||||
@ -42,7 +42,7 @@ index 8a0fb89..4bece69 100644
|
||||
}
|
||||
|
||||
zero(pollfd);
|
||||
@@ -240,6 +256,12 @@ finish:
|
||||
@@ -239,6 +255,12 @@ finish:
|
||||
close_nointr_nofail(ttyfd);
|
||||
}
|
||||
|
||||
|
@ -8,7 +8,7 @@ forward suspend/hibernation calls to pm-utils, if installed (bnc#790157)
|
||||
1 file changed, 24 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/sleep/sleep.c b/src/sleep/sleep.c
|
||||
index 0707625..91cbdf9 100644
|
||||
index f5e78c1..8d91117 100644
|
||||
--- a/src/sleep/sleep.c
|
||||
+++ b/src/sleep/sleep.c
|
||||
@@ -22,6 +22,7 @@
|
||||
@ -57,10 +57,10 @@ index 0707625..91cbdf9 100644
|
||||
/* Configure the hibernation mode */
|
||||
+ if (!delegate_to_pmutils) {
|
||||
if (streq(argv[1], "hibernate")) {
|
||||
if (write_one_line_file("/sys/power/disk", "platform") < 0)
|
||||
write_one_line_file("/sys/power/disk", "shutdown");
|
||||
if (write_string_file("/sys/power/disk", "platform") < 0)
|
||||
write_string_file("/sys/power/disk", "shutdown");
|
||||
@@ -65,13 +79,14 @@ int main(int argc, char *argv[]) {
|
||||
write_one_line_file("/sys/power/disk", "shutdown");
|
||||
write_string_file("/sys/power/disk", "shutdown");
|
||||
}
|
||||
|
||||
+
|
||||
|
@ -1,129 +0,0 @@
|
||||
From: Robert Milasan <rmilasan@suse.com>
|
||||
Date: Thu, 11 Apr 2013 15:39:39 +0200
|
||||
Subject: Reinstate TIMEOUT handling
|
||||
|
||||
Without treating events with timeouts specially some drivers would
|
||||
cause a 30 seconds stall on boot: .
|
||||
|
||||
I also received reports of some drivers not working at all, even
|
||||
after the timeout.
|
||||
|
||||
We will remove this patch when more drivers have been fixed in
|
||||
the kernel (3.4?).
|
||||
|
||||
This reverts 43d5c5f03645c4b842659f9b5bd0ae465e885e92 and
|
||||
57c6f8ae5f52a6e8ffc66a54966346f733dded39.
|
||||
---
|
||||
src/libudev/libudev-device.c | 19 +++++++++++++++++++
|
||||
src/libudev/libudev-private.h | 1 +
|
||||
src/udev/udevd.c | 13 ++++++++++---
|
||||
3 files changed, 30 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/libudev/libudev-device.c b/src/libudev/libudev-device.c
|
||||
index 6bb2e41..4fdd242 100644
|
||||
--- a/src/libudev/libudev-device.c
|
||||
+++ b/src/libudev/libudev-device.c
|
||||
@@ -78,6 +78,7 @@ struct udev_device {
|
||||
struct udev_list tags_list;
|
||||
unsigned long long int seqnum;
|
||||
usec_t usec_initialized;
|
||||
+ int timeout;
|
||||
int devlink_priority;
|
||||
int refcount;
|
||||
dev_t devnum;
|
||||
@@ -172,6 +173,21 @@ static int udev_device_set_devnum(struct udev_device *udev_device, dev_t devnum)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+int udev_device_get_timeout(struct udev_device *udev_device)
|
||||
+{
|
||||
+ return udev_device->timeout;
|
||||
+}
|
||||
+
|
||||
+static int udev_device_set_timeout(struct udev_device *udev_device, int timeout)
|
||||
+{
|
||||
+ char num[32];
|
||||
+
|
||||
+ udev_device->timeout = timeout;
|
||||
+ snprintf(num, sizeof(num), "%u", timeout);
|
||||
+ udev_device_add_property(udev_device, "TIMEOUT", num);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
const char *udev_device_get_devpath_old(struct udev_device *udev_device)
|
||||
{
|
||||
return udev_device->devpath_old;
|
||||
@@ -462,6 +478,8 @@ void udev_device_add_property_from_string_parse(struct udev_device *udev_device,
|
||||
udev_device_set_devpath_old(udev_device, &property[12]);
|
||||
} else if (startswith(property, "SEQNUM=")) {
|
||||
udev_device_set_seqnum(udev_device, strtoull(&property[7], NULL, 10));
|
||||
+ } else if (startswith(property, "TIMEOUT=")) {
|
||||
+ udev_device_set_timeout(udev_device, strtoull(&property[8], NULL, 10));
|
||||
} else if (startswith(property, "IFINDEX=")) {
|
||||
udev_device_set_ifindex(udev_device, strtoull(&property[8], NULL, 10));
|
||||
} else if (startswith(property, "DEVMODE=")) {
|
||||
@@ -653,6 +671,7 @@ struct udev_device *udev_device_new(struct udev *udev)
|
||||
udev_list_init(udev, &udev_device->sysattr_value_list, true);
|
||||
udev_list_init(udev, &udev_device->sysattr_list, false);
|
||||
udev_list_init(udev, &udev_device->tags_list, true);
|
||||
+ udev_device->timeout = -1;
|
||||
udev_device->watch_handle = -1;
|
||||
/* copy global properties */
|
||||
udev_list_entry_foreach(list_entry, udev_get_properties_list_entry(udev))
|
||||
diff --git a/src/libudev/libudev-private.h b/src/libudev/libudev-private.h
|
||||
index 54c51ac..d2124ea 100644
|
||||
--- a/src/libudev/libudev-private.h
|
||||
+++ b/src/libudev/libudev-private.h
|
||||
@@ -77,6 +77,7 @@ const char *udev_device_get_id_filename(struct udev_device *udev_device);
|
||||
void udev_device_set_is_initialized(struct udev_device *udev_device);
|
||||
int udev_device_add_tag(struct udev_device *udev_device, const char *tag);
|
||||
void udev_device_cleanup_tags_list(struct udev_device *udev_device);
|
||||
+int udev_device_get_timeout(struct udev_device *udev_device);
|
||||
usec_t udev_device_get_usec_initialized(struct udev_device *udev_device);
|
||||
void udev_device_set_usec_initialized(struct udev_device *udev_device, usec_t usec_initialized);
|
||||
int udev_device_get_devlink_priority(struct udev_device *udev_device);
|
||||
diff --git a/src/udev/udevd.c b/src/udev/udevd.c
|
||||
index 2ad7388..5a90b60 100644
|
||||
--- a/src/udev/udevd.c
|
||||
+++ b/src/udev/udevd.c
|
||||
@@ -391,7 +391,7 @@ out:
|
||||
}
|
||||
}
|
||||
|
||||
-static void event_run(struct event *event)
|
||||
+static void event_run(struct event *event, bool force)
|
||||
{
|
||||
struct udev_list_node *loop;
|
||||
|
||||
@@ -417,7 +417,7 @@ static void event_run(struct event *event)
|
||||
return;
|
||||
}
|
||||
|
||||
- if (children >= children_max) {
|
||||
+ if (!force && children >= children_max) {
|
||||
if (children_max > 1)
|
||||
log_debug("maximum number (%i) of children reached\n", children);
|
||||
return;
|
||||
@@ -455,6 +455,13 @@ static int event_queue_insert(struct udev_device *dev)
|
||||
|
||||
event->state = EVENT_QUEUED;
|
||||
udev_list_node_append(&event->node, &event_list);
|
||||
+
|
||||
+ /* run all events with a timeout set immediately */
|
||||
+ if (udev_device_get_timeout(dev) > 0) {
|
||||
+ event_run(event, true);
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -566,7 +573,7 @@ static void event_queue_start(struct udev *udev)
|
||||
if (is_devpath_busy(event))
|
||||
continue;
|
||||
|
||||
- event_run(event);
|
||||
+ event_run(event, false);
|
||||
}
|
||||
}
|
||||
|
@ -11,7 +11,7 @@ Conflicts:
|
||||
1 file changed, 46 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/src/core/service.c b/src/core/service.c
|
||||
index a1b2d93..da22e55 100644
|
||||
index c13ff35..0b39ec6 100644
|
||||
--- a/src/core/service.c
|
||||
+++ b/src/core/service.c
|
||||
@@ -51,7 +51,8 @@
|
||||
@ -108,7 +108,7 @@ index a1b2d93..da22e55 100644
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
@@ -3663,7 +3701,7 @@ static int service_enumerate(Manager *m) {
|
||||
@@ -3661,7 +3699,7 @@ static int service_enumerate(Manager *m) {
|
||||
|
||||
if (de->d_name[0] == 'S') {
|
||||
|
||||
@ -117,7 +117,7 @@ index a1b2d93..da22e55 100644
|
||||
SERVICE(service)->sysv_start_priority_from_rcnd =
|
||||
MAX(a*10 + b, SERVICE(service)->sysv_start_priority_from_rcnd);
|
||||
|
||||
@@ -3680,7 +3718,8 @@ static int service_enumerate(Manager *m) {
|
||||
@@ -3678,7 +3716,8 @@ static int service_enumerate(Manager *m) {
|
||||
goto finish;
|
||||
|
||||
} else if (de->d_name[0] == 'K' &&
|
||||
@ -127,7 +127,7 @@ index a1b2d93..da22e55 100644
|
||||
|
||||
r = set_ensure_allocated(&shutdown_services,
|
||||
trivial_hash_func, trivial_compare_func);
|
||||
@@ -3720,7 +3759,9 @@ static int service_enumerate(Manager *m) {
|
||||
@@ -3718,7 +3757,9 @@ static int service_enumerate(Manager *m) {
|
||||
* runlevels we assume the stop jobs will be implicitly added
|
||||
* by the core logic. Also, we don't really distinguish here
|
||||
* between the runlevels 0 and 6 and just add them to the
|
||||
|
@ -8,11 +8,11 @@ Subject: avoid assertion if invalid address familily is passed to
|
||||
1 file changed, 6 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/src/nss-myhostname/nss-myhostname.c b/src/nss-myhostname/nss-myhostname.c
|
||||
index b0fb832..b3aaca8 100644
|
||||
index 16ccb3e..884eb99 100644
|
||||
--- a/src/nss-myhostname/nss-myhostname.c
|
||||
+++ b/src/nss-myhostname/nss-myhostname.c
|
||||
@@ -384,6 +384,12 @@ enum nss_status _nss_myhostname_gethostbyaddr2_r(
|
||||
struct address *addresses = NULL, *a;
|
||||
@@ -383,6 +383,12 @@ enum nss_status _nss_myhostname_gethostbyaddr2_r(
|
||||
struct address *a;
|
||||
unsigned n_addresses = 0, n;
|
||||
|
||||
+ if (af != AF_INET && af != AF_INET6) {
|
||||
@ -24,7 +24,7 @@ index b0fb832..b3aaca8 100644
|
||||
if (len != PROTO_ADDRESS_SIZE(af)) {
|
||||
*errnop = EINVAL;
|
||||
*h_errnop = NO_RECOVERY;
|
||||
@@ -399,11 +405,6 @@ enum nss_status _nss_myhostname_gethostbyaddr2_r(
|
||||
@@ -398,11 +404,6 @@ enum nss_status _nss_myhostname_gethostbyaddr2_r(
|
||||
|
||||
if (memcmp(addr, LOCALADDRESS_IPV6, 16) == 0)
|
||||
goto found;
|
||||
|
@ -1,24 +0,0 @@
|
||||
From: Robert Milasan <rmilasan@suse.com>
|
||||
Date: Tue, 12 Feb 2013 09:16:23 +0000
|
||||
Subject: create default links for primary cd_dvd drive
|
||||
|
||||
cdrom_id: created links for the default cd/dvd drive (bnc#783054).
|
||||
---
|
||||
rules/60-cdrom_id.rules | 5 ++++-
|
||||
1 file changed, 4 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/rules/60-cdrom_id.rules b/rules/60-cdrom_id.rules
|
||||
index 6eaf76a..ec0b19a 100644
|
||||
--- a/rules/60-cdrom_id.rules
|
||||
+++ b/rules/60-cdrom_id.rules
|
||||
@@ -15,6 +15,9 @@ ENV{DISK_EJECT_REQUEST}=="?*", RUN+="cdrom_id --eject-media $devnode", GOTO="cdr
|
||||
# enable the receiving of media eject button events
|
||||
IMPORT{program}="cdrom_id --lock-media $devnode"
|
||||
|
||||
-KERNEL=="sr0", SYMLINK+="cdrom", OPTIONS+="link_priority=-100"
|
||||
+KERNEL=="sr0", ENV{ID_CDROM}=="1", SYMLINK+="cdrom", OPTIONS+="link_priority=-100"
|
||||
+KERNEL=="sr0", ENV{ID_CDROM_CD_RW}=="1", SYMLINK+="cdrw", OPTIONS+="link_priority=-100"
|
||||
+KERNEL=="sr0", ENV{ID_CDROM_DVD}=="1", SYMLINK+="dvd", OPTIONS+="link_priority=-100"
|
||||
+KERNEL=="sr0", ENV{ID_CDROM_DVD_RW}=="1", SYMLINK+="dvdrw", OPTIONS+="link_priority=-100"
|
||||
|
||||
LABEL="cdrom_end"
|
@ -8,16 +8,16 @@ Subject: delay fsck / cryptsetup after md / dmraid / lvm are started
|
||||
2 files changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/cryptsetup/cryptsetup-generator.c b/src/cryptsetup/cryptsetup-generator.c
|
||||
index bee8a36..6edc760 100644
|
||||
index 9b8e229..0949287 100644
|
||||
--- a/src/cryptsetup/cryptsetup-generator.c
|
||||
+++ b/src/cryptsetup/cryptsetup-generator.c
|
||||
@@ -162,6 +162,7 @@ static int create_disk(
|
||||
@@ -160,6 +160,7 @@ static int create_disk(
|
||||
"Conflicts=umount.target\n"
|
||||
"DefaultDependencies=no\n"
|
||||
"BindsTo=%s dev-mapper-%%i.device\n"
|
||||
"After=systemd-readahead-collect.service systemd-readahead-replay.service %s\n"
|
||||
"BindsTo=dev-mapper-%i.device\n"
|
||||
+ "After=md.service dmraid.service lvm.service\n"
|
||||
"Before=umount.target\n",
|
||||
d, d);
|
||||
"After=systemd-readahead-collect.service systemd-readahead-replay.service\n",
|
||||
f);
|
||||
|
||||
diff --git a/units/systemd-fsck@.service.in b/units/systemd-fsck@.service.in
|
||||
index b3c71eb..c66a411 100644
|
||||
|
@ -7,7 +7,7 @@ Subject: disable nss-myhostname warning (bnc#783841)
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/src/hostname/hostnamed.c b/src/hostname/hostnamed.c
|
||||
index 859b5a0..4aad17b 100644
|
||||
index 0437e33..c7f454c 100644
|
||||
--- a/src/hostname/hostnamed.c
|
||||
+++ b/src/hostname/hostnamed.c
|
||||
@@ -134,6 +134,7 @@ static int read_data(void) {
|
||||
|
@ -1,22 +0,0 @@
|
||||
From: Frederic Crozat <fcrozat@suse.com>
|
||||
Date: Wed, 5 Dec 2012 15:13:27 +0000
|
||||
Subject: fix devname prefix
|
||||
|
||||
fix modules.devname path, it isn't in /usr.
|
||||
---
|
||||
src/udev/udevd.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/udev/udevd.c b/src/udev/udevd.c
|
||||
index 2a0bf60..6c2c2c9 100644
|
||||
--- a/src/udev/udevd.c
|
||||
+++ b/src/udev/udevd.c
|
||||
@@ -827,7 +827,7 @@ static void static_dev_create_from_modules(struct udev *udev)
|
||||
FILE *f;
|
||||
|
||||
uname(&kernel);
|
||||
- strscpyl(modules, sizeof(modules), ROOTPREFIX "/lib/modules/", kernel.release, "/modules.devname", NULL);
|
||||
+ strscpyl(modules, sizeof(modules), "/lib/modules/", kernel.release, "/modules.devname", NULL);
|
||||
f = fopen(modules, "re");
|
||||
if (f == NULL)
|
||||
return;
|
@ -3,38 +3,40 @@ Date: Thu, 23 Aug 2012 11:08:25 +0200
|
||||
Subject: fix support for boot prefixed initscript (bnc#746506)
|
||||
|
||||
---
|
||||
src/systemctl/systemctl.c | 20 ++++++++++++++++++++
|
||||
1 file changed, 20 insertions(+)
|
||||
src/systemctl/systemctl.c | 22 +++++++++++++++++++++-
|
||||
1 file changed, 21 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
|
||||
index edd136a..36918f2 100644
|
||||
index c2b1749..84ce87c 100644
|
||||
--- a/src/systemctl/systemctl.c
|
||||
+++ b/src/systemctl/systemctl.c
|
||||
@@ -3642,7 +3642,27 @@ static int enable_sysv_units(char **args) {
|
||||
@@ -4060,8 +4060,28 @@ static int enable_sysv_units(char **args) {
|
||||
p[strlen(p) - sizeof(".service") + 1] = 0;
|
||||
found_sysv = access(p, F_OK) >= 0;
|
||||
|
||||
if (!found_sysv) {
|
||||
free(p);
|
||||
- if (!found_sysv)
|
||||
+ if (!found_sysv) {
|
||||
+#ifdef HAVE_SYSV_COMPAT
|
||||
+ free(p);
|
||||
+ p = NULL;
|
||||
+ if (!isempty(arg_root))
|
||||
+ asprintf(&p, "%s/" SYSTEM_SYSVINIT_PATH "/boot.%s", arg_root, name);
|
||||
+ else
|
||||
+ asprintf(&p, SYSTEM_SYSVINIT_PATH "/boot.%s", name);
|
||||
+ if (!p) {
|
||||
+ log_error("No memory");
|
||||
+ r = -ENOMEM;
|
||||
+ r = log_oom();
|
||||
+ goto finish;
|
||||
+ }
|
||||
+ p[strlen(p) - sizeof(".service") + 1] = 0;
|
||||
+ found_sysv = access(p, F_OK) >= 0;
|
||||
+
|
||||
+ if (!found_sysv) {
|
||||
+ free(p);
|
||||
+ continue;
|
||||
+ }
|
||||
+#else
|
||||
continue;
|
||||
+#endif
|
||||
}
|
||||
+ }
|
||||
|
||||
/* Mark this entry, so that we don't try enabling it as native unit */
|
||||
args[f] = (char*) "";
|
||||
|
@ -3,11 +3,11 @@ Date: Mon, 7 Nov 2011 18:04:20 +0100
|
||||
Subject: force lvm restart after cryptsetup target is reached
|
||||
|
||||
---
|
||||
src/cryptsetup/cryptsetup-generator.c | 58 ++++++++++++++++++++++++++++++++++-
|
||||
1 file changed, 57 insertions(+), 1 deletion(-)
|
||||
src/cryptsetup/cryptsetup-generator.c | 57 ++++++++++++++++++++++++++++++++++-
|
||||
1 file changed, 56 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/cryptsetup/cryptsetup-generator.c b/src/cryptsetup/cryptsetup-generator.c
|
||||
index 8959bf5..d386b60 100644
|
||||
index ac0ed58..9b8e229 100644
|
||||
--- a/src/cryptsetup/cryptsetup-generator.c
|
||||
+++ b/src/cryptsetup/cryptsetup-generator.c
|
||||
@@ -22,6 +22,7 @@
|
||||
@ -18,14 +18,13 @@ index 8959bf5..d386b60 100644
|
||||
|
||||
#include "log.h"
|
||||
#include "util.h"
|
||||
@@ -64,6 +65,55 @@ static bool has_option(const char *haystack, const char *needle) {
|
||||
@@ -64,6 +65,54 @@ static bool has_option(const char *haystack, const char *needle) {
|
||||
return false;
|
||||
}
|
||||
|
||||
+static int create_storage_after_cryptsetup (void) {
|
||||
+ int r;
|
||||
+ char _cleanup_free_ *to = NULL, *p = NULL;
|
||||
+ FILE _cleanup_fclose_ *f = NULL;
|
||||
+ _cleanup_free_ char *to = NULL, *p = NULL;
|
||||
+ _cleanup_fclose_ FILE *f = NULL;
|
||||
+
|
||||
+ if (asprintf(&p, "%s/storage-after-cryptsetup.service", arg_dest) < 0)
|
||||
+ return log_oom();
|
||||
@ -74,15 +73,15 @@ index 8959bf5..d386b60 100644
|
||||
static int create_disk(
|
||||
const char *name,
|
||||
const char *device,
|
||||
@@ -284,6 +334,7 @@ int main(int argc, char *argv[]) {
|
||||
FILE _cleanup_fclose_ *f = NULL;
|
||||
@@ -331,6 +380,7 @@ int main(int argc, char *argv[]) {
|
||||
_cleanup_fclose_ FILE *f = NULL;
|
||||
unsigned n = 0;
|
||||
int r = EXIT_SUCCESS;
|
||||
+ bool no_crypttab = false;
|
||||
char **i;
|
||||
char _cleanup_strv_free_ **arg_proc_cmdline_disks_done = NULL;
|
||||
char _cleanup_strv_free_ **arg_proc_cmdline_disks = NULL;
|
||||
@@ -312,8 +363,10 @@ int main(int argc, char *argv[]) {
|
||||
_cleanup_strv_free_ char **arg_proc_cmdline_disks_done = NULL;
|
||||
_cleanup_strv_free_ char **arg_proc_cmdline_disks = NULL;
|
||||
@@ -360,8 +410,10 @@ int main(int argc, char *argv[]) {
|
||||
f = fopen("/etc/crypttab", "re");
|
||||
|
||||
if (!f) {
|
||||
@ -94,7 +93,7 @@ index 8959bf5..d386b60 100644
|
||||
else {
|
||||
r = EXIT_FAILURE;
|
||||
log_error("Failed to open /etc/crypttab: %m");
|
||||
@@ -397,5 +450,8 @@ int main(int argc, char *argv[]) {
|
||||
@@ -445,5 +497,8 @@ int main(int argc, char *argv[]) {
|
||||
r = EXIT_FAILURE;
|
||||
}
|
||||
|
||||
|
@ -4,23 +4,25 @@ Subject: handle SYSTEMCTL_OPTIONS environment variable
|
||||
|
||||
(bnc#798620)
|
||||
---
|
||||
src/systemctl/systemctl.c | 20 ++++++++++++++++++++
|
||||
1 file changed, 20 insertions(+)
|
||||
src/systemctl/systemctl.c | 22 ++++++++++++++++++++++
|
||||
1 file changed, 22 insertions(+)
|
||||
|
||||
diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
|
||||
index 36918f2..28d6586 100644
|
||||
index 84ce87c..cceafc9 100644
|
||||
--- a/src/systemctl/systemctl.c
|
||||
+++ b/src/systemctl/systemctl.c
|
||||
@@ -4340,6 +4340,26 @@ static int systemctl_parse_argv(int argc, char *argv[]) {
|
||||
assert(argc >= 0);
|
||||
assert(argv);
|
||||
@@ -5926,6 +5926,28 @@ int main(int argc, char*argv[]) {
|
||||
log_parse_environment();
|
||||
log_open();
|
||||
|
||||
+ if (secure_getenv("SYSTEMCTL_OPTIONS")) {
|
||||
+ if (secure_getenv("SYSTEMCTL_OPTIONS") &&
|
||||
+ (!program_invocation_short_name ||
|
||||
+ (program_invocation_short_name && strstr(program_invocation_short_name, "systemctl")))) {
|
||||
+ char **parsed_systemctl_options = strv_split_quoted(getenv("SYSTEMCTL_OPTIONS"));
|
||||
+
|
||||
+ if (*parsed_systemctl_options && **parsed_systemctl_options) {
|
||||
+ char **k,**a;
|
||||
+ char _cleanup_strv_free_ **new_argv = new(char*, strv_length(argv) + strv_length(parsed_systemctl_options) + 1);
|
||||
+ _cleanup_strv_free_ char **new_argv = new(char*, strv_length(argv) + strv_length(parsed_systemctl_options) + 1);
|
||||
+ new_argv[0] = strdup(argv[0]);
|
||||
+ for (k = new_argv+1, a = parsed_systemctl_options; *a; k++, a++) {
|
||||
+ *k = strdup(*a);
|
||||
@ -35,6 +37,6 @@ index 36918f2..28d6586 100644
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
while ((c = getopt_long(argc, argv, "ht:p:aqfs:H:Pn:o:i", options, NULL)) >= 0) {
|
||||
|
||||
switch (c) {
|
||||
r = parse_argv(argc, argv);
|
||||
if (r < 0)
|
||||
goto finish;
|
||||
|
@ -8,7 +8,7 @@ Subject: handle disable_caplock and compose_table and kbd_rate
|
||||
1 file changed, 153 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/vconsole/vconsole-setup.c b/src/vconsole/vconsole-setup.c
|
||||
index c1f662b..5f3354e 100644
|
||||
index 1bbf737..384f936 100644
|
||||
--- a/src/vconsole/vconsole-setup.c
|
||||
+++ b/src/vconsole/vconsole-setup.c
|
||||
@@ -40,6 +40,7 @@
|
||||
@ -39,7 +39,7 @@ index c1f662b..5f3354e 100644
|
||||
args[i++] = NULL;
|
||||
|
||||
pid = fork();
|
||||
@@ -217,6 +220,101 @@ static void font_copy_to_all_vcs(int fd) {
|
||||
@@ -212,6 +215,101 @@ static void font_copy_to_all_vcs(int fd) {
|
||||
}
|
||||
}
|
||||
|
||||
@ -141,7 +141,7 @@ index c1f662b..5f3354e 100644
|
||||
int main(int argc, char **argv) {
|
||||
const char *vc;
|
||||
char *vc_keymap = NULL;
|
||||
@@ -224,8 +322,16 @@ int main(int argc, char **argv) {
|
||||
@@ -219,8 +317,16 @@ int main(int argc, char **argv) {
|
||||
char *vc_font = NULL;
|
||||
char *vc_font_map = NULL;
|
||||
char *vc_font_unimap = NULL;
|
||||
@ -158,8 +158,8 @@ index c1f662b..5f3354e 100644
|
||||
pid_t font_pid = 0, keymap_pid = 0;
|
||||
bool font_copy = false;
|
||||
int r = EXIT_FAILURE;
|
||||
@@ -286,13 +392,43 @@ int main(int argc, char **argv) {
|
||||
log_warning("Failed to read /etc/vconsole.conf: %s", strerror(-r));
|
||||
@@ -276,13 +382,43 @@ int main(int argc, char **argv) {
|
||||
log_warning("Failed to read /proc/cmdline: %s", strerror(-r));
|
||||
}
|
||||
|
||||
+ if (r <= 0) {
|
||||
@ -203,7 +203,7 @@ index c1f662b..5f3354e 100644
|
||||
font_load(vc, vc_font, vc_font_map, vc_font_unimap, &font_pid) >= 0)
|
||||
r = EXIT_SUCCESS;
|
||||
|
||||
@@ -300,6 +436,14 @@ finish:
|
||||
@@ -290,6 +426,14 @@ finish:
|
||||
if (keymap_pid > 0)
|
||||
wait_for_terminate_and_warn(KBD_LOADKEYS, keymap_pid);
|
||||
|
||||
@ -218,7 +218,7 @@ index c1f662b..5f3354e 100644
|
||||
if (font_pid > 0) {
|
||||
wait_for_terminate_and_warn(KBD_SETFONT, font_pid);
|
||||
if (font_copy)
|
||||
@@ -310,6 +454,12 @@ finish:
|
||||
@@ -300,6 +444,12 @@ finish:
|
||||
free(vc_font);
|
||||
free(vc_font_map);
|
||||
free(vc_font_unimap);
|
||||
|
@ -8,7 +8,7 @@ Subject: handle /etc/HOSTNAME
|
||||
1 file changed, 11 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/hostname/hostnamed.c b/src/hostname/hostnamed.c
|
||||
index 4aad17b..e7532f6 100644
|
||||
index c7f454c..cfbd706 100644
|
||||
--- a/src/hostname/hostnamed.c
|
||||
+++ b/src/hostname/hostnamed.c
|
||||
@@ -129,6 +129,10 @@ static int read_data(void) {
|
||||
@ -34,9 +34,9 @@ index 4aad17b..e7532f6 100644
|
||||
|
||||
return 0;
|
||||
}
|
||||
- return write_one_line_file_atomic_label("/etc/hostname", data[PROP_STATIC_HOSTNAME]);
|
||||
- return write_string_file_atomic_label("/etc/hostname", data[PROP_STATIC_HOSTNAME]);
|
||||
+
|
||||
+ r = write_one_line_file_atomic_label("/etc/hostname", data[PROP_STATIC_HOSTNAME]);
|
||||
+ r = write_string_file_atomic_label("/etc/hostname", data[PROP_STATIC_HOSTNAME]);
|
||||
+ if (!r) {
|
||||
+ r = symlink_atomic("/etc/hostname", "/etc/HOSTNAME");
|
||||
+ }
|
||||
|
@ -15,10 +15,10 @@ Subject: handle numlock value in /etc/sysconfig/keyboard
|
||||
create mode 100644 src/login/numlock-on.c
|
||||
|
||||
diff --git a/Makefile.am b/Makefile.am
|
||||
index e44b075..00905d0 100644
|
||||
index d594a3d..e82d092 100644
|
||||
--- a/Makefile.am
|
||||
+++ b/Makefile.am
|
||||
@@ -2113,6 +2113,19 @@ dist_udevrules_DATA += \
|
||||
@@ -2205,6 +2205,19 @@ dist_udevrules_DATA += \
|
||||
rules/61-accelerometer.rules
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
@ -39,10 +39,10 @@ index e44b075..00905d0 100644
|
||||
if ENABLE_GTK_DOC
|
||||
SUBDIRS += \
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 5421461..a2d8755 100644
|
||||
index e58d694..222ed22 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -787,6 +787,11 @@ AM_CONDITIONAL(ENABLE_MANPAGES, [test "x$have_manpages" = "xyes"])
|
||||
@@ -789,6 +789,11 @@ AM_CONDITIONAL(ENABLE_MANPAGES, [test "x$have_manpages" = "xyes"])
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
|
||||
@ -112,10 +112,10 @@ index 0000000..77a8368
|
||||
+ return execv(args[0], (char * const*) args);
|
||||
+}
|
||||
diff --git a/src/vconsole/vconsole-setup.c b/src/vconsole/vconsole-setup.c
|
||||
index 5f3354e..f5cafc1 100644
|
||||
index 384f936..e1f8868 100644
|
||||
--- a/src/vconsole/vconsole-setup.c
|
||||
+++ b/src/vconsole/vconsole-setup.c
|
||||
@@ -326,12 +326,14 @@ int main(int argc, char **argv) {
|
||||
@@ -321,12 +321,14 @@ int main(int argc, char **argv) {
|
||||
char *vc_kbd_delay = NULL;
|
||||
char *vc_kbd_rate = NULL;
|
||||
char *vc_kbd_disable_caps_lock = NULL;
|
||||
@ -130,7 +130,7 @@ index 5f3354e..f5cafc1 100644
|
||||
pid_t font_pid = 0, keymap_pid = 0;
|
||||
bool font_copy = false;
|
||||
int r = EXIT_FAILURE;
|
||||
@@ -399,6 +401,7 @@ int main(int argc, char **argv) {
|
||||
@@ -389,6 +391,7 @@ int main(int argc, char **argv) {
|
||||
"KBD_DELAY", &vc_kbd_delay,
|
||||
"KBD_RATE", &vc_kbd_rate,
|
||||
"KBD_DISABLE_CAPS_LOCK", &vc_kbd_disable_caps_lock,
|
||||
@ -138,7 +138,7 @@ index 5f3354e..f5cafc1 100644
|
||||
"COMPOSETABLE", &vc_compose_table,
|
||||
NULL);
|
||||
if (r < 0 && r != -ENOENT)
|
||||
@@ -413,6 +416,37 @@ int main(int argc, char **argv) {
|
||||
@@ -403,6 +406,37 @@ int main(int argc, char **argv) {
|
||||
log_warning("Failed to read /etc/sysconfig/console: %s", strerror(-r));
|
||||
|
||||
disable_capslock = vc_kbd_disable_caps_lock && strcasecmp(vc_kbd_disable_caps_lock, "YES") == 0;
|
||||
@ -176,7 +176,7 @@ index 5f3354e..f5cafc1 100644
|
||||
|
||||
#endif
|
||||
}
|
||||
@@ -435,6 +469,10 @@ int main(int argc, char **argv) {
|
||||
@@ -425,6 +459,10 @@ int main(int argc, char **argv) {
|
||||
finish:
|
||||
if (keymap_pid > 0)
|
||||
wait_for_terminate_and_warn(KBD_LOADKEYS, keymap_pid);
|
||||
|
@ -8,12 +8,12 @@ handle ROOT_USES_LANG=ctype (bnc#792182).
|
||||
1 file changed, 27 insertions(+)
|
||||
|
||||
diff --git a/src/core/locale-setup.c b/src/core/locale-setup.c
|
||||
index eefb256..d6cbea9 100644
|
||||
index d7113b9..b3fb603 100644
|
||||
--- a/src/core/locale-setup.c
|
||||
+++ b/src/core/locale-setup.c
|
||||
@@ -70,6 +70,11 @@ static const char * const variable_names[_VARIABLE_MAX] = {
|
||||
int locale_setup(void) {
|
||||
char *variables[_VARIABLE_MAX];
|
||||
char *variables[_VARIABLE_MAX] = {};
|
||||
int r = 0, i;
|
||||
+#ifdef HAVE_SYSV_COMPAT
|
||||
+ char _cleanup_free_ *root_uses_lang;
|
||||
@ -21,9 +21,9 @@ index eefb256..d6cbea9 100644
|
||||
+ zero(root_uses_lang);
|
||||
+#endif
|
||||
|
||||
zero(variables);
|
||||
|
||||
@@ -119,6 +124,28 @@ int locale_setup(void) {
|
||||
if (detect_container(NULL) <= 0) {
|
||||
r = parse_env_file("/proc/cmdline", WHITESPACE,
|
||||
@@ -117,6 +122,28 @@ int locale_setup(void) {
|
||||
log_warning("Failed to read /etc/locale.conf: %s", strerror(-r));
|
||||
}
|
||||
|
||||
|
@ -8,7 +8,7 @@ Subject: module-load: handle SUSE /etc/sysconfig/kernel module list
|
||||
2 files changed, 27 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/modules-load/modules-load.c b/src/modules-load/modules-load.c
|
||||
index 9ee2603..2b5b571 100644
|
||||
index 7b19ee0..36b1a68 100644
|
||||
--- a/src/modules-load/modules-load.c
|
||||
+++ b/src/modules-load/modules-load.c
|
||||
@@ -262,6 +262,9 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
|
@ -8,10 +8,10 @@ Subject: optionally warn if nss-myhostname is called
|
||||
2 files changed, 46 insertions(+)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 5e35613..5421461 100644
|
||||
index 5173783..e58d694 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -712,6 +712,17 @@ if test "x$enable_myhostname" != "xno"; then
|
||||
@@ -714,6 +714,17 @@ if test "x$enable_myhostname" != "xno"; then
|
||||
fi
|
||||
AM_CONDITIONAL(HAVE_MYHOSTNAME, [test "$have_myhostname" = "yes"])
|
||||
|
||||
@ -30,7 +30,7 @@ index 5e35613..5421461 100644
|
||||
AC_ARG_WITH(firmware-path,
|
||||
AS_HELP_STRING([--with-firmware-path=DIR[[[:DIR[...]]]]],
|
||||
diff --git a/src/nss-myhostname/nss-myhostname.c b/src/nss-myhostname/nss-myhostname.c
|
||||
index b3aaca8..043f279 100644
|
||||
index 884eb99..dbd9a2d 100644
|
||||
--- a/src/nss-myhostname/nss-myhostname.c
|
||||
+++ b/src/nss-myhostname/nss-myhostname.c
|
||||
@@ -30,6 +30,9 @@
|
||||
@ -42,10 +42,10 @@ index b3aaca8..043f279 100644
|
||||
+#endif
|
||||
|
||||
#include "ifconf.h"
|
||||
|
||||
#include "macro.h"
|
||||
@@ -44,6 +47,10 @@
|
||||
|
||||
#define ALIGN(a) (((a+sizeof(void*)-1)/sizeof(void*))*sizeof(void*))
|
||||
#define LOCALADDRESS_IPV6 &in6addr_loopback
|
||||
#define LOOPBACK_INTERFACE "lo"
|
||||
|
||||
+#ifdef LOG_NSS_MY_HOSTNAME_WARNING
|
||||
+static void warn(const char* hn);
|
||||
@ -54,7 +54,7 @@ index b3aaca8..043f279 100644
|
||||
enum nss_status _nss_myhostname_gethostbyname4_r(
|
||||
const char *name,
|
||||
struct gaih_addrtuple **pat,
|
||||
@@ -116,6 +123,10 @@ enum nss_status _nss_myhostname_gethostbyname4_r(
|
||||
@@ -115,6 +122,10 @@ enum nss_status _nss_myhostname_gethostbyname4_r(
|
||||
return NSS_STATUS_NOTFOUND;
|
||||
}
|
||||
|
||||
@ -65,7 +65,7 @@ index b3aaca8..043f279 100644
|
||||
/* If this fails, n_addresses is 0. Which is fine */
|
||||
ifconf_acquire_addresses(&addresses, &n_addresses);
|
||||
|
||||
@@ -336,6 +347,10 @@ enum nss_status _nss_myhostname_gethostbyname3_r(
|
||||
@@ -334,6 +345,10 @@ enum nss_status _nss_myhostname_gethostbyname3_r(
|
||||
return NSS_STATUS_NOTFOUND;
|
||||
}
|
||||
|
||||
@ -76,7 +76,7 @@ index b3aaca8..043f279 100644
|
||||
return fill_in_hostent(hn, af, host, buffer, buflen, errnop, h_errnop, ttlp, canonp);
|
||||
}
|
||||
|
||||
@@ -434,6 +449,10 @@ found:
|
||||
@@ -429,6 +444,10 @@ found:
|
||||
return NSS_STATUS_UNAVAIL;
|
||||
}
|
||||
|
||||
@ -87,7 +87,7 @@ index b3aaca8..043f279 100644
|
||||
return fill_in_hostent(hn, af, host, buffer, buflen, errnop, h_errnop, ttlp, NULL);
|
||||
|
||||
}
|
||||
@@ -453,3 +472,19 @@ enum nss_status _nss_myhostname_gethostbyaddr_r(
|
||||
@@ -448,3 +467,19 @@ enum nss_status _nss_myhostname_gethostbyaddr_r(
|
||||
errnop, h_errnop,
|
||||
NULL);
|
||||
}
|
||||
|
@ -8,7 +8,7 @@ Subject: parse /etc/insserv.conf and adds dependencies accordingly
|
||||
1 file changed, 101 insertions(+)
|
||||
|
||||
diff --git a/src/core/service.c b/src/core/service.c
|
||||
index 98266a5..8707cb5 100644
|
||||
index cf0bbe0..08fc97c 100644
|
||||
--- a/src/core/service.c
|
||||
+++ b/src/core/service.c
|
||||
@@ -3440,6 +3440,105 @@ static void service_notify_message(Unit *u, pid_t pid, char **tags) {
|
||||
@ -117,7 +117,7 @@ index 98266a5..8707cb5 100644
|
||||
|
||||
static int service_enumerate(Manager *m) {
|
||||
char **p;
|
||||
@@ -3602,6 +3701,8 @@ static int service_enumerate(Manager *m) {
|
||||
@@ -3600,6 +3699,8 @@ static int service_enumerate(Manager *m) {
|
||||
|
||||
r = 0;
|
||||
|
||||
|
@ -1,421 +0,0 @@
|
||||
From: Robert Milasan <rmilasan@suse.com>
|
||||
Date: Wed, 20 Mar 2013 10:14:59 +0000
|
||||
Subject: re-add persistent net
|
||||
|
||||
udev: re-add persistent network rules (bnc#809843).
|
||||
---
|
||||
Makefile.am | 10 +-
|
||||
.../75-persistent-net-generator.rules | 102 +++++++++++++++
|
||||
src/udev/rule_generator/rule_generator.functions | 113 ++++++++++++++++
|
||||
src/udev/rule_generator/write_net_rules | 145 +++++++++++++++++++++
|
||||
4 files changed, 369 insertions(+), 1 deletion(-)
|
||||
create mode 100644 src/udev/rule_generator/75-persistent-net-generator.rules
|
||||
create mode 100644 src/udev/rule_generator/rule_generator.functions
|
||||
create mode 100644 src/udev/rule_generator/write_net_rules
|
||||
|
||||
diff --git a/Makefile.am b/Makefile.am
|
||||
index 10609f3..f5e4159 100644
|
||||
--- a/Makefile.am
|
||||
+++ b/Makefile.am
|
||||
@@ -2287,6 +2287,14 @@ EXTRA_DIST += \
|
||||
src/gudev/seed-example.js
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
+dist_udevhome_SCRIPTS = \
|
||||
+ src/udev/rule_generator/rule_generator.functions \
|
||||
+ src/udev/rule_generator/write_net_rules
|
||||
+
|
||||
+dist_udevrules_DATA += \
|
||||
+ src/udev/rule_generator/75-persistent-net-generator.rules
|
||||
+
|
||||
+# ------------------------------------------------------------------------------
|
||||
if ENABLE_KEYMAP
|
||||
keymap_SOURCES = \
|
||||
src/udev/keymap/keymap.c
|
||||
@@ -2314,7 +2322,7 @@ dist_udevrules_DATA += \
|
||||
src/udev/keymap/95-keymap.rules \
|
||||
src/udev/keymap/95-keyboard-force-release.rules
|
||||
|
||||
-dist_udevhome_SCRIPTS = \
|
||||
+dist_udevhome_SCRIPTS += \
|
||||
src/udev/keymap/findkeyboards \
|
||||
src/udev/keymap/keyboard-force-release.sh
|
||||
|
||||
diff --git a/src/udev/rule_generator/75-persistent-net-generator.rules b/src/udev/rule_generator/75-persistent-net-generator.rules
|
||||
new file mode 100644
|
||||
index 0000000..4f80573
|
||||
--- /dev/null
|
||||
+++ b/src/udev/rule_generator/75-persistent-net-generator.rules
|
||||
@@ -0,0 +1,102 @@
|
||||
+# do not edit this file, it will be overwritten on update
|
||||
+
|
||||
+# these rules generate rules for persistent network device naming
|
||||
+#
|
||||
+# variables used to communicate:
|
||||
+# MATCHADDR MAC address used for the match
|
||||
+# MATCHID bus_id used for the match
|
||||
+# MATCHDRV driver name used for the match
|
||||
+# MATCHIFTYPE interface type match
|
||||
+# COMMENT comment to add to the generated rule
|
||||
+# INTERFACE_NAME requested name supplied by external tool
|
||||
+# INTERFACE_NEW new interface name returned by rule writer
|
||||
+
|
||||
+ACTION!="add", GOTO="persistent_net_generator_end"
|
||||
+SUBSYSTEM!="net", GOTO="persistent_net_generator_end"
|
||||
+
|
||||
+# ignore the interface if a name has already been set
|
||||
+NAME=="?*", GOTO="persistent_net_generator_end"
|
||||
+
|
||||
+# device name whitelist
|
||||
+KERNEL!="eth*|ath*|wlan*[0-9]|msh*|ra*|sta*|ctc*|lcs*|hsi*", GOTO="persistent_net_generator_end"
|
||||
+
|
||||
+# ignore Xen virtual interfaces
|
||||
+SUBSYSTEMS=="xen", GOTO="persistent_net_generator_end"
|
||||
+
|
||||
+# read MAC address
|
||||
+ENV{MATCHADDR}="$attr{address}"
|
||||
+
|
||||
+# match interface type
|
||||
+ENV{MATCHIFTYPE}="$attr{type}"
|
||||
+
|
||||
+# ignore KVM virtual interfaces
|
||||
+ENV{MATCHADDR}=="52:54:00:*", GOTO="persistent_net_generator_end"
|
||||
+# ignore VMWare virtual interfaces
|
||||
+ENV{MATCHADDR}=="00:0c:29:*|00:50:56:*", GOTO="persistent_net_generator_end"
|
||||
+# ignore Hyper-V virtual interfaces
|
||||
+ENV{MATCHADDR}=="00:15:5d:*", GOTO="persistent_net_generator_end"
|
||||
+
|
||||
+# These vendors are known to violate the local MAC address assignment scheme
|
||||
+# Interlan, DEC (UNIBUS or QBUS), Apollo, Cisco, Racal-Datacom
|
||||
+ENV{MATCHADDR}=="02:07:01:*", GOTO="globally_administered_whitelist"
|
||||
+# 3Com
|
||||
+ENV{MATCHADDR}=="02:60:60:*", GOTO="globally_administered_whitelist"
|
||||
+# 3Com IBM PC; Imagen; Valid; Cisco; Apple
|
||||
+ENV{MATCHADDR}=="02:60:8c:*", GOTO="globally_administered_whitelist"
|
||||
+# Intel
|
||||
+ENV{MATCHADDR}=="02:a0:c9:*", GOTO="globally_administered_whitelist"
|
||||
+# Olivetti
|
||||
+ENV{MATCHADDR}=="02:aa:3c:*", GOTO="globally_administered_whitelist"
|
||||
+# CMC Masscomp; Silicon Graphics; Prime EXL
|
||||
+ENV{MATCHADDR}=="02:cf:1f:*", GOTO="globally_administered_whitelist"
|
||||
+# Prominet Corporation Gigabit Ethernet Switch
|
||||
+ENV{MATCHADDR}=="02:e0:3b:*", GOTO="globally_administered_whitelist"
|
||||
+# BTI (Bus-Tech, Inc.) IBM Mainframes
|
||||
+ENV{MATCHADDR}=="02:e6:d3:*", GOTO="globally_administered_whitelist"
|
||||
+# Realtek
|
||||
+ENV{MATCHADDR}=="52:54:00:*", GOTO="globally_administered_whitelist"
|
||||
+# Novell 2000
|
||||
+ENV{MATCHADDR}=="52:54:4c:*", GOTO="globally_administered_whitelist"
|
||||
+# Realtec
|
||||
+ENV{MATCHADDR}=="52:54:ab:*", GOTO="globally_administered_whitelist"
|
||||
+# Kingston Technologies
|
||||
+ENV{MATCHADDR}=="e2:0c:0f:*", GOTO="globally_administered_whitelist"
|
||||
+# Xensource
|
||||
+ENV{MATCHADDR}=="00:16:3e:*", GOTO="globally_administered_whitelist"
|
||||
+
|
||||
+# match interface dev_id
|
||||
+ATTR{dev_id}=="?*", ENV{MATCHDEVID}="$attr{dev_id}"
|
||||
+
|
||||
+# do not use "locally administered" MAC address
|
||||
+ENV{MATCHADDR}=="?[2367abef]:*", ENV{MATCHADDR}=""
|
||||
+
|
||||
+# do not use empty address
|
||||
+ENV{MATCHADDR}=="00:00:00:00:00:00", ENV{MATCHADDR}=""
|
||||
+
|
||||
+LABEL="globally_administered_whitelist"
|
||||
+
|
||||
+# build comment line for generated rule:
|
||||
+SUBSYSTEMS=="pci", ENV{COMMENT}="PCI device $attr{vendor}:$attr{device} ($driver)"
|
||||
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="?*", ENV{COMMENT}="USB device 0x$attr{idVendor}:0x$attr{idProduct} ($driver)"
|
||||
+SUBSYSTEMS=="pcmcia", ENV{COMMENT}="PCMCIA device $attr{card_id}:$attr{manf_id} ($driver)"
|
||||
+SUBSYSTEMS=="ieee1394", ENV{COMMENT}="Firewire device $attr{host_id})"
|
||||
+
|
||||
+# ibmveth likes to use "locally administered" MAC addresses
|
||||
+DRIVERS=="ibmveth", ENV{MATCHADDR}="$attr{address}", ENV{COMMENT}="ibmveth ($id)"
|
||||
+
|
||||
+# S/390 uses id matches only, do not use MAC address match
|
||||
+SUBSYSTEMS=="ccwgroup", ENV{COMMENT}="S/390 $driver device at $id", ENV{MATCHID}="$id", ENV{MATCHDRV}="$driver", ENV{MATCHADDR}=""
|
||||
+
|
||||
+# see if we got enough data to create a rule
|
||||
+ENV{MATCHADDR}=="", ENV{MATCHID}=="", ENV{INTERFACE_NAME}=="", GOTO="persistent_net_generator_end"
|
||||
+
|
||||
+# default comment
|
||||
+ENV{COMMENT}=="", ENV{COMMENT}="net device ($attr{driver})"
|
||||
+
|
||||
+# write rule
|
||||
+DRIVERS=="?*", IMPORT{program}="write_net_rules"
|
||||
+
|
||||
+# rename interface if needed
|
||||
+ENV{INTERFACE_NEW}=="?*", NAME="$env{INTERFACE_NEW}"
|
||||
+
|
||||
+LABEL="persistent_net_generator_end"
|
||||
diff --git a/src/udev/rule_generator/rule_generator.functions b/src/udev/rule_generator/rule_generator.functions
|
||||
new file mode 100644
|
||||
index 0000000..087bc34
|
||||
--- /dev/null
|
||||
+++ b/src/udev/rule_generator/rule_generator.functions
|
||||
@@ -0,0 +1,113 @@
|
||||
+# functions used by the udev rule generator
|
||||
+
|
||||
+# Copyright (C) 2006 Marco d'Itri <md@Linux.IT>
|
||||
+
|
||||
+# This program 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.
|
||||
+
|
||||
+# This program is distributed in the hope that it will be useful,
|
||||
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+# GNU General Public License for more details.
|
||||
+
|
||||
+# You should have received a copy of the GNU General Public License
|
||||
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
+
|
||||
+PATH='/usr/bin:/bin:/usr/sbin:/sbin'
|
||||
+
|
||||
+# Read a single line from file $1 in the $DEVPATH directory.
|
||||
+# The function must not return an error even if the file does not exist.
|
||||
+sysread() {
|
||||
+ local file="$1"
|
||||
+ [ -e "/sys$DEVPATH/$file" ] || return 0
|
||||
+ local value
|
||||
+ read value < "/sys$DEVPATH/$file" || return 0
|
||||
+ echo "$value"
|
||||
+}
|
||||
+
|
||||
+sysreadlink() {
|
||||
+ local file="$1"
|
||||
+ [ -e "/sys$DEVPATH/$file" ] || return 0
|
||||
+ readlink -f /sys$DEVPATH/$file 2> /dev/null || true
|
||||
+}
|
||||
+
|
||||
+# Return true if a directory is writeable.
|
||||
+writeable() {
|
||||
+ if ln -s test-link $1/.is-writeable 2> /dev/null; then
|
||||
+ rm -f $1/.is-writeable
|
||||
+ return 0
|
||||
+ else
|
||||
+ return 1
|
||||
+ fi
|
||||
+}
|
||||
+
|
||||
+# Create a lock file for the current rules file.
|
||||
+lock_rules_file() {
|
||||
+ RUNDIR="/run/udev"
|
||||
+ [ -e "$RUNDIR" ] || return 0
|
||||
+
|
||||
+ RULES_LOCK="$RUNDIR/.lock-${RULES_FILE##*/}"
|
||||
+
|
||||
+ retry=30
|
||||
+ while ! mkdir $RULES_LOCK 2> /dev/null; do
|
||||
+ if [ $retry -eq 0 ]; then
|
||||
+ echo "Cannot lock $RULES_FILE!" >&2
|
||||
+ exit 2
|
||||
+ fi
|
||||
+ sleep 1
|
||||
+ retry=$(($retry - 1))
|
||||
+ done
|
||||
+}
|
||||
+
|
||||
+unlock_rules_file() {
|
||||
+ [ "$RULES_LOCK" ] || return 0
|
||||
+ rmdir $RULES_LOCK || true
|
||||
+}
|
||||
+
|
||||
+# Choose the real rules file if it is writeable or a temporary file if not.
|
||||
+# Both files should be checked later when looking for existing rules.
|
||||
+choose_rules_file() {
|
||||
+ RUNDIR="/run/udev"
|
||||
+ local tmp_rules_file="$RUNDIR/tmp-rules--${RULES_FILE##*/}"
|
||||
+ [ -e "$RULES_FILE" -o -e "$tmp_rules_file" ] || PRINT_HEADER=1
|
||||
+
|
||||
+ if writeable ${RULES_FILE%/*}; then
|
||||
+ RO_RULES_FILE='/dev/null'
|
||||
+ else
|
||||
+ RO_RULES_FILE=$RULES_FILE
|
||||
+ RULES_FILE=$tmp_rules_file
|
||||
+ fi
|
||||
+}
|
||||
+
|
||||
+# Return the name of the first free device.
|
||||
+raw_find_next_available() {
|
||||
+ local links="$1"
|
||||
+
|
||||
+ local basename=${links%%[ 0-9]*}
|
||||
+ local max=-1
|
||||
+ for name in $links; do
|
||||
+ local num=${name#$basename}
|
||||
+ [ "$num" ] || num=0
|
||||
+ [ $num -gt $max ] && max=$num
|
||||
+ done
|
||||
+
|
||||
+ local max=$(($max + 1))
|
||||
+ # "name0" actually is just "name"
|
||||
+ [ $max -eq 0 ] && return
|
||||
+ echo "$max"
|
||||
+}
|
||||
+
|
||||
+# Find all rules matching a key (with action) and a pattern.
|
||||
+find_all_rules() {
|
||||
+ local key="$1"
|
||||
+ local linkre="$2"
|
||||
+ local match="$3"
|
||||
+
|
||||
+ local search='.*[[:space:],]'"$key"'"('"$linkre"')".*'
|
||||
+ echo $(sed -n -r -e 's/^#.*//' -e "${match}s/${search}/\1/p" \
|
||||
+ $RO_RULES_FILE \
|
||||
+ $([ -e $RULES_FILE ] && echo $RULES_FILE) \
|
||||
+ 2>/dev/null)
|
||||
+}
|
||||
diff --git a/src/udev/rule_generator/write_net_rules b/src/udev/rule_generator/write_net_rules
|
||||
new file mode 100644
|
||||
index 0000000..fad1cc5
|
||||
--- /dev/null
|
||||
+++ b/src/udev/rule_generator/write_net_rules
|
||||
@@ -0,0 +1,145 @@
|
||||
+#!/bin/sh -e
|
||||
+
|
||||
+# This script is run to create persistent network device naming rules
|
||||
+# based on properties of the device.
|
||||
+# If the interface needs to be renamed, INTERFACE_NEW=<name> will be printed
|
||||
+# on stdout to allow udev to IMPORT it.
|
||||
+
|
||||
+# variables used to communicate:
|
||||
+# MATCHADDR MAC address used for the match
|
||||
+# MATCHID bus_id used for the match
|
||||
+# MATCHDEVID dev_id used for the match
|
||||
+# MATCHDRV driver name used for the match
|
||||
+# MATCHIFTYPE interface type match
|
||||
+# COMMENT comment to add to the generated rule
|
||||
+# INTERFACE_NAME requested name supplied by external tool
|
||||
+# INTERFACE_NEW new interface name returned by rule writer
|
||||
+
|
||||
+# Copyright (C) 2006 Marco d'Itri <md@Linux.IT>
|
||||
+# Copyright (C) 2007 Kay Sievers <kay.sievers@vrfy.org>
|
||||
+#
|
||||
+# This program 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.
|
||||
+#
|
||||
+# This program is distributed in the hope that it will be useful,
|
||||
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+# GNU General Public License for more details.
|
||||
+#
|
||||
+# You should have received a copy of the GNU General Public License
|
||||
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
+
|
||||
+# debug, if UDEV_LOG=<debug>
|
||||
+if [ -n "$UDEV_LOG" ]; then
|
||||
+ if [ "$UDEV_LOG" -ge 7 ]; then
|
||||
+ set -x
|
||||
+ fi
|
||||
+fi
|
||||
+
|
||||
+RULES_FILE='/etc/udev/rules.d/70-persistent-net.rules'
|
||||
+
|
||||
+if [ -e /usr/lib/udev/rule_generator.functions ]; then
|
||||
+ . /usr/lib/udev/rule_generator.functions
|
||||
+else
|
||||
+ . /lib/udev/rule_generator.functions
|
||||
+fi
|
||||
+
|
||||
+interface_name_taken() {
|
||||
+ local value="$(find_all_rules 'NAME=' $INTERFACE)"
|
||||
+ if [ "$value" ]; then
|
||||
+ return 0
|
||||
+ else
|
||||
+ return 1
|
||||
+ fi
|
||||
+}
|
||||
+
|
||||
+find_next_available() {
|
||||
+ raw_find_next_available "$(find_all_rules 'NAME=' "$1")"
|
||||
+}
|
||||
+
|
||||
+write_rule() {
|
||||
+ local match="$1"
|
||||
+ local name="$2"
|
||||
+ local comment="$3"
|
||||
+
|
||||
+ {
|
||||
+ if [ "$PRINT_HEADER" ]; then
|
||||
+ PRINT_HEADER=
|
||||
+ echo "# This file was automatically generated by the $0"
|
||||
+ echo "# program, run by the persistent-net-generator.rules rules file."
|
||||
+ echo "#"
|
||||
+ echo "# You can modify it, as long as you keep each rule on a single"
|
||||
+ echo "# line, and change only the value of the NAME= key."
|
||||
+ fi
|
||||
+
|
||||
+ echo ""
|
||||
+ [ "$comment" ] && echo "# $comment"
|
||||
+ echo "SUBSYSTEM==\"net\", ACTION==\"add\"$match, NAME=\"$name\""
|
||||
+ } >> $RULES_FILE
|
||||
+}
|
||||
+
|
||||
+if [ -z "$INTERFACE" ]; then
|
||||
+ echo "missing \$INTERFACE" >&2
|
||||
+ exit 1
|
||||
+fi
|
||||
+
|
||||
+# Prevent concurrent processes from modifying the file at the same time.
|
||||
+lock_rules_file
|
||||
+
|
||||
+# Check if the rules file is writeable.
|
||||
+choose_rules_file
|
||||
+
|
||||
+# the DRIVERS key is needed to not match bridges and VLAN sub-interfaces
|
||||
+if [ "$MATCHADDR" ]; then
|
||||
+ match="$match, DRIVERS==\"?*\", ATTR{address}==\"$MATCHADDR\""
|
||||
+fi
|
||||
+
|
||||
+if [ "$MATCHDRV" ]; then
|
||||
+ match="$match, DRIVERS==\"$MATCHDRV\""
|
||||
+fi
|
||||
+
|
||||
+if [ "$MATCHDEVID" ]; then
|
||||
+ match="$match, ATTR{dev_id}==\"$MATCHDEVID\""
|
||||
+fi
|
||||
+
|
||||
+if [ "$MATCHID" ]; then
|
||||
+ match="$match, KERNELS==\"$MATCHID\""
|
||||
+fi
|
||||
+
|
||||
+if [ "$MATCHIFTYPE" ]; then
|
||||
+ match="$match, ATTR{type}==\"$MATCHIFTYPE\""
|
||||
+fi
|
||||
+
|
||||
+if [ -z "$match" ]; then
|
||||
+ echo "missing valid match" >&2
|
||||
+ unlock_rules_file
|
||||
+ exit 1
|
||||
+fi
|
||||
+
|
||||
+basename=${INTERFACE%%[0-9]*}
|
||||
+match="$match, KERNEL==\"$basename*\""
|
||||
+
|
||||
+if [ "$INTERFACE_NAME" ]; then
|
||||
+ # external tools may request a custom name
|
||||
+ COMMENT="$COMMENT (custom name provided by external tool)"
|
||||
+ if [ "$INTERFACE_NAME" != "$INTERFACE" ]; then
|
||||
+ INTERFACE=$INTERFACE_NAME;
|
||||
+ echo "INTERFACE_NEW=$INTERFACE"
|
||||
+ fi
|
||||
+else
|
||||
+ # if a rule using the current name already exists, find a new name
|
||||
+ if interface_name_taken; then
|
||||
+ INTERFACE="$basename$(find_next_available "$basename[0-9]*")"
|
||||
+ # prevent INTERFACE from being "eth" instead of "eth0"
|
||||
+ [ "$INTERFACE" = "${INTERFACE%%[ \[\]0-9]*}" ] && INTERFACE=${INTERFACE}0
|
||||
+ echo "INTERFACE_NEW=$INTERFACE"
|
||||
+ fi
|
||||
+fi
|
||||
+
|
||||
+write_rule "$match" "$INTERFACE" "$COMMENT"
|
||||
+
|
||||
+unlock_rules_file
|
||||
+
|
||||
+exit 0
|
@ -1,120 +0,0 @@
|
||||
From: Robert Milasan <rmilasan@suse.com>
|
||||
Date: Thu, 12 Jul 2012 15:56:34 +0000
|
||||
Subject: re-enable by_path links for ata devices
|
||||
|
||||
Fix by-path links for ATA transport (bnc#770910)
|
||||
---
|
||||
src/udev/udev-builtin-path_id.c | 92 +++++++++++++++++++++++++++++++++++------
|
||||
1 file changed, 80 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/src/udev/udev-builtin-path_id.c b/src/udev/udev-builtin-path_id.c
|
||||
index da02731..a77d4e8 100644
|
||||
--- a/src/udev/udev-builtin-path_id.c
|
||||
+++ b/src/udev/udev-builtin-path_id.c
|
||||
@@ -338,6 +338,85 @@ static struct udev_device *handle_scsi_hyperv(struct udev_device *parent, char *
|
||||
return parent;
|
||||
}
|
||||
|
||||
+static struct udev_device *handle_ata(struct udev_device *parent, char **path)
|
||||
+{
|
||||
+ struct udev_device *hostdev;
|
||||
+ int host, bus, target, lun;
|
||||
+ const char *name;
|
||||
+ char *base;
|
||||
+ char *pos;
|
||||
+ DIR *dir;
|
||||
+ struct dirent *dent;
|
||||
+ int basenum, len;
|
||||
+
|
||||
+ hostdev = udev_device_get_parent_with_subsystem_devtype(parent, "scsi", "scsi_host");
|
||||
+ if (hostdev == NULL)
|
||||
+ return NULL;
|
||||
+
|
||||
+ name = udev_device_get_sysname(parent);
|
||||
+ if (sscanf(name, "%d:%d:%d:%d", &host, &bus, &target, &lun) != 4)
|
||||
+ return NULL;
|
||||
+
|
||||
+ /* rebase ata offset to get the local relative number */
|
||||
+ basenum = -1;
|
||||
+ base = strdup(udev_device_get_syspath(hostdev));
|
||||
+ if (base == NULL)
|
||||
+ return NULL;
|
||||
+ pos = strrchr(base, '/');
|
||||
+ if (pos == NULL) {
|
||||
+ parent = NULL;
|
||||
+ goto out;
|
||||
+ }
|
||||
+ pos[0] = '\0';
|
||||
+ len = strlen(base) - 5;
|
||||
+ if (len <= 0) {
|
||||
+ parent = NULL;
|
||||
+ goto out;
|
||||
+ }
|
||||
+ base[len] = '\0';
|
||||
+ dir = opendir(base);
|
||||
+ if (dir == NULL) {
|
||||
+ parent = NULL;
|
||||
+ goto out;
|
||||
+ }
|
||||
+ for (dent = readdir(dir); dent != NULL; dent = readdir(dir)) {
|
||||
+ char *rest;
|
||||
+ int i;
|
||||
+
|
||||
+ if (dent->d_name[0] == '.')
|
||||
+ continue;
|
||||
+ if (dent->d_type != DT_DIR && dent->d_type != DT_LNK)
|
||||
+ continue;
|
||||
+ if (strncmp(dent->d_name, "ata", 3) != 0)
|
||||
+ continue;
|
||||
+ i = strtoul(&dent->d_name[3], &rest, 10);
|
||||
+
|
||||
+ /* ata devices start with 1, so decrease by 1 if i is bigger then 0 */
|
||||
+ if (i > 0)
|
||||
+ i--;
|
||||
+ if (rest[0] != '\0')
|
||||
+ continue;
|
||||
+ /*
|
||||
+ * find the smallest number; the host really needs to export its
|
||||
+ * own instance number per parent device; relying on the global host
|
||||
+ * enumeration and plainly rebasing the numbers sounds unreliable
|
||||
+ */
|
||||
+ if (basenum == -1 || i < basenum)
|
||||
+ basenum = i;
|
||||
+ }
|
||||
+ closedir(dir);
|
||||
+ if (basenum == -1) {
|
||||
+ parent = NULL;
|
||||
+ goto out;
|
||||
+ }
|
||||
+ host -= basenum;
|
||||
+
|
||||
+ path_prepend(path, "scsi-%u:%u:%u:%u", host, bus, target, lun);
|
||||
+out:
|
||||
+ free(base);
|
||||
+ return hostdev;
|
||||
+}
|
||||
+
|
||||
static struct udev_device *handle_scsi(struct udev_device *parent, char **path)
|
||||
{
|
||||
const char *devtype;
|
||||
@@ -374,19 +453,8 @@ static struct udev_device *handle_scsi(struct udev_device *parent, char **path)
|
||||
goto out;
|
||||
}
|
||||
|
||||
- /*
|
||||
- * We do not support the ATA transport class, it uses global counters
|
||||
- * to name the ata devices which numbers spread across multiple
|
||||
- * controllers.
|
||||
- *
|
||||
- * The real link numbers are not exported. Also, possible chains of ports
|
||||
- * behind port multipliers cannot be composed that way.
|
||||
- *
|
||||
- * Until all that is solved at the kernel level, there are no by-path/
|
||||
- * links for ATA devices.
|
||||
- */
|
||||
if (strstr(name, "/ata") != NULL) {
|
||||
- parent = NULL;
|
||||
+ parent = handle_ata(parent, path);
|
||||
goto out;
|
||||
}
|
||||
|
@ -12,7 +12,7 @@ PIDFile: and X-Systemd-RemainAfterExit to control it.
|
||||
2 files changed, 33 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/core/service.c b/src/core/service.c
|
||||
index e34bcf1..a1b2d93 100644
|
||||
index 5118b06..c13ff35 100644
|
||||
--- a/src/core/service.c
|
||||
+++ b/src/core/service.c
|
||||
@@ -135,6 +135,7 @@ static void service_init(Unit *u) {
|
||||
|
@ -11,10 +11,10 @@ Subject: restore /var/run and /var/lock bind mount if they aren't symlink
|
||||
create mode 100644 units/var-run.mount
|
||||
|
||||
diff --git a/Makefile.am b/Makefile.am
|
||||
index 00905d0..10609f3 100644
|
||||
index e82d092..38309a9 100644
|
||||
--- a/Makefile.am
|
||||
+++ b/Makefile.am
|
||||
@@ -398,6 +398,12 @@ dist_systemunit_DATA = \
|
||||
@@ -406,6 +406,12 @@ dist_systemunit_DATA = \
|
||||
units/system-update.target \
|
||||
units/initrd-switch-root.target
|
||||
|
||||
@ -27,7 +27,7 @@ index 00905d0..10609f3 100644
|
||||
nodist_systemunit_DATA = \
|
||||
units/getty@.service \
|
||||
units/serial-getty@.service \
|
||||
@@ -3913,6 +3919,9 @@ RUNLEVEL4_TARGET_WANTS += \
|
||||
@@ -4018,6 +4024,9 @@ RUNLEVEL4_TARGET_WANTS += \
|
||||
systemd-update-utmp-runlevel.service
|
||||
RUNLEVEL5_TARGET_WANTS += \
|
||||
systemd-update-utmp-runlevel.service
|
||||
|
@ -1,8 +1,7 @@
|
||||
From fced3673ee1001dc905206f9a92ea2062f951d3c Mon Sep 17 00:00:00 2001
|
||||
From: Robert Schweikert <rjschwei@suse.com>
|
||||
Date: Fri, 12 Apr 2013 12:08:16 -0400
|
||||
Subject: [PATCH] rules: add lid switch of ARM based Chromebook as a power
|
||||
switch to logind
|
||||
Subject: rules: add lid switch of ARM based Chromebook as a power switch to
|
||||
logind
|
||||
|
||||
---
|
||||
src/login/70-power-switch.rules | 1 +
|
||||
@ -19,6 +18,3 @@ index 36fb827..d925ab7 100644
|
||||
+SUBSYSTEM=="input", KERNEL=="event*", KERNELS=="gpio-keys.8", TAG+="power-switch"
|
||||
|
||||
LABEL="power_switch_end"
|
||||
--
|
||||
1.8.1.4
|
||||
|
@ -1,24 +0,0 @@
|
||||
From: Robert Milasan <rmilasan@suse.com>
|
||||
Date: Wed, 27 Jun 2012 08:55:59 +0000
|
||||
Subject: rules create by id scsi links for ATA devices
|
||||
|
||||
Re-enable creation of by-id scsi links for ATA devices. (bnc#769002)
|
||||
---
|
||||
rules/60-persistent-storage.rules | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/rules/60-persistent-storage.rules b/rules/60-persistent-storage.rules
|
||||
index a4d009a..f720c7e 100644
|
||||
--- a/rules/60-persistent-storage.rules
|
||||
+++ b/rules/60-persistent-storage.rules
|
||||
@@ -42,6 +42,10 @@ KERNEL=="cciss*", ENV{DEVTYPE}=="disk", ENV{ID_SERIAL}!="?*", IMPORT{program}="s
|
||||
KERNEL=="sd*|sr*|cciss*", ENV{DEVTYPE}=="disk", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/$env{ID_BUS}-$env{ID_SERIAL}"
|
||||
KERNEL=="sd*|cciss*", ENV{DEVTYPE}=="partition", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/$env{ID_BUS}-$env{ID_SERIAL}-part%n"
|
||||
|
||||
+# scsi compat links for ATA devices
|
||||
+KERNEL=="sd*[!0-9]", ENV{ID_BUS}=="ata", PROGRAM="scsi_id --whitelisted --replace-whitespace -p0x80 -d $devnode", RESULT=="?*", ENV{ID_SCSI_COMPAT}="$result", SYMLINK+="disk/by-id/scsi-$env{ID_SCSI_COMPAT}"
|
||||
+KERNEL=="sd*[0-9]", ENV{ID_SCSI_COMPAT}=="?*", SYMLINK+="disk/by-id/scsi-$env{ID_SCSI_COMPAT}-part%n"
|
||||
+
|
||||
# firewire
|
||||
KERNEL=="sd*[!0-9]|sr*", ATTRS{ieee1394_id}=="?*", SYMLINK+="disk/by-id/ieee1394-$attr{ieee1394_id}"
|
||||
KERNEL=="sd*[0-9]", ATTRS{ieee1394_id}=="?*", SYMLINK+="disk/by-id/ieee1394-$attr{ieee1394_id}-part%n"
|
@ -13,7 +13,7 @@ Fixes https://bugzilla.novell.com/show_bug.cgi?id=721426
|
||||
1 file changed, 6 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/core/service.c b/src/core/service.c
|
||||
index 8707cb5..e34bcf1 100644
|
||||
index 08fc97c..5118b06 100644
|
||||
--- a/src/core/service.c
|
||||
+++ b/src/core/service.c
|
||||
@@ -2072,8 +2072,13 @@ static void service_enter_running(Service *s, ServiceResult f) {
|
||||
|
@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:9a08baa8fa5c48f0aab683b2f771e4be75c3c852afc45e5cb4df06428ac8c217
|
||||
size 2109864
|
3
systemd-202.tar.xz
Normal file
3
systemd-202.tar.xz
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:8c43073252a52eb9f9ab9bd698be0192bcb2175ba5daba6057250083dd64e059
|
||||
size 2149860
|
@ -1,3 +1,31 @@
|
||||
-------------------------------------------------------------------
|
||||
Fri Apr 19 16:40:17 UTC 2013 - fcrozat@suse.com
|
||||
|
||||
- Update to release 202:
|
||||
+ 'systemctl list-jobs' got some polishing. '--type=' argument
|
||||
may now be passed more than once. 'systemctl list-sockets' has
|
||||
been added.
|
||||
+ systemd gained a new unit 'systemd-static-nodes.service'
|
||||
that generates static device nodes earlier during boot, and
|
||||
can run in conjunction with udev.
|
||||
+ systemd-nspawn now places all containers in the new /machine
|
||||
top-level cgroup directory in the name=systemd hierarchy.
|
||||
+ bootchart can now store its data in the journal.
|
||||
+ journactl can now take multiple --unit= and --user-unit=
|
||||
switches.
|
||||
+ The cryptsetup logic now understands the "luks.key=" kernel
|
||||
command line switch. If a configured key file is missing, it
|
||||
will fallback to prompting the user.
|
||||
- Rebase some patches
|
||||
- Update handle-SYSTEMCTL_OPTIONS-environment-variable.patch to
|
||||
properly handle SYSTEMCTL_OPTIONS
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri Apr 19 12:47:13 UTC 2013 - max@suse.com
|
||||
|
||||
- Fix regression in the default for tmp auto-deletion
|
||||
(systemd-tmp-safe-defaults.patch, FATE#314974).
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri Apr 12 16:58:31 UTC 2013 - fcrozat@suse.com
|
||||
|
||||
@ -131,6 +159,12 @@ reset by assigning empty string to them, using drop-in.
|
||||
to systemd unit files.
|
||||
- Merge patches for nss-myhostname package to this package.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri Apr 12 16:17:04 UTC 2013 - rschweikert@suse.com
|
||||
|
||||
- Add chromebook lid switch as a power switch to logind rule to
|
||||
enable suspend on lid close
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Apr 8 14:51:47 CEST 2013 - fcrozat@suse.com
|
||||
|
||||
|
@ -25,7 +25,7 @@
|
||||
|
||||
Name: systemd-mini
|
||||
Url: http://www.freedesktop.org/wiki/Software/systemd
|
||||
Version: 200
|
||||
Version: 202
|
||||
Release: 0
|
||||
Summary: A System and Session Manager
|
||||
License: LGPL-2.1+
|
||||
@ -151,6 +151,8 @@ Patch26: ensure-systemd-udevd-is-started-before-local-fs-pre-for-lo.patch
|
||||
Patch27: apply-ACL-for-nvidia-device-nodes.patch
|
||||
# PATCH-FIX-OPENSUSE Revert-service-drop-support-for-SysV-scripts-for-the-early.patch fcrozat@suse.com -- handle boot.* initscripts
|
||||
Patch37: Revert-service-drop-support-for-SysV-scripts-for-the-early.patch
|
||||
# PATCH-FIX-OPENSUSE systemd-tmp-safe-defaults.patch -- FATE#314974 max@suse.de -- Return to SUSE's "safe defaults" policy on deleting files from tmp direcorie.
|
||||
Patch39: systemd-tmp-safe-defaults.patch
|
||||
|
||||
# Upstream First - Policy:
|
||||
# Never add any patches to this package without the upstream commit id
|
||||
@ -162,6 +164,8 @@ Patch23: disable-nss-myhostname-warning-bnc-783841.patch
|
||||
Patch24: handle-etc-HOSTNAME.patch
|
||||
# PATCH-FIX-OPENSUSE Forward-suspend-hibernate-calls-to-pm-utils.patch fcrozat@suse.com bnc#790157 -- forward to pm-utils
|
||||
Patch25: Forward-suspend-hibernate-calls-to-pm-utils.patch
|
||||
# PATCH-FIX-UPSTREAM rules-add-lid-switch-of-ARM-based-Chromebook-as-a-power-sw.patch rjschwei@suse.com -- add lid switch of ARM based Chromebook as a power switch to logind
|
||||
Patch38: rules-add-lid-switch-of-ARM-based-Chromebook-as-a-power-sw.patch
|
||||
|
||||
# udev patches
|
||||
# PATCH-FIX-OPENSUSE 1001-Reinstate-TIMEOUT-handling.patch
|
||||
@ -396,6 +400,8 @@ cp %{SOURCE7} m4/
|
||||
%patch26 -p1
|
||||
%patch27 -p1
|
||||
%patch37 -p1
|
||||
%patch38 -p1
|
||||
%patch39 -p1
|
||||
|
||||
%build
|
||||
autoreconf -fiv
|
||||
|
@ -1,17 +1,26 @@
|
||||
max@suse.de FATE#314974
|
||||
From: Reinhard Max <max@suse.de>
|
||||
Date: Fri, 19 Apr 2013 16:12:28 +0200
|
||||
Subject: systemd tmp safe defaults
|
||||
|
||||
Index: systemd-200/tmpfiles.d/tmp.conf
|
||||
===================================================================
|
||||
--- systemd-200.orig/tmpfiles.d/tmp.conf 2013-03-20 22:58:40.159281473 +0100
|
||||
+++ systemd-200/tmpfiles.d/tmp.conf 2013-04-19 14:37:47.500403658 +0200
|
||||
@@ -8,8 +8,8 @@
|
||||
Fix regression in the default for tmp auto-deletion (FATE#314974).
|
||||
SUSE policy is to not clean /tmp by default.
|
||||
---
|
||||
tmpfiles.d/tmp.conf | 5 +++--
|
||||
1 file changed, 3 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/tmpfiles.d/tmp.conf b/tmpfiles.d/tmp.conf
|
||||
index 3b534a1..99eb6f2 100644
|
||||
--- a/tmpfiles.d/tmp.conf
|
||||
+++ b/tmpfiles.d/tmp.conf
|
||||
@@ -8,8 +8,9 @@
|
||||
# See tmpfiles.d(5) for details
|
||||
|
||||
# Clear tmp directories separately, to make them easier to override
|
||||
-d /tmp 1777 root root 10d
|
||||
-d /var/tmp 1777 root root 30d
|
||||
+d /tmp 1777 root root
|
||||
+d /var/tmp 1777 root root
|
||||
+# SUSE policy: we don't clean those directories
|
||||
+d /tmp 1777 root root -
|
||||
+d /var/tmp 1777 root root -
|
||||
|
||||
# Exclude namespace mountpoints created with PrivateTmp=yes
|
||||
x /tmp/systemd-private-*
|
||||
|
@ -1,3 +1,25 @@
|
||||
-------------------------------------------------------------------
|
||||
Fri Apr 19 16:40:17 UTC 2013 - fcrozat@suse.com
|
||||
|
||||
- Update to release 202:
|
||||
+ 'systemctl list-jobs' got some polishing. '--type=' argument
|
||||
may now be passed more than once. 'systemctl list-sockets' has
|
||||
been added.
|
||||
+ systemd gained a new unit 'systemd-static-nodes.service'
|
||||
that generates static device nodes earlier during boot, and
|
||||
can run in conjunction with udev.
|
||||
+ systemd-nspawn now places all containers in the new /machine
|
||||
top-level cgroup directory in the name=systemd hierarchy.
|
||||
+ bootchart can now store its data in the journal.
|
||||
+ journactl can now take multiple --unit= and --user-unit=
|
||||
switches.
|
||||
+ The cryptsetup logic now understands the "luks.key=" kernel
|
||||
command line switch. If a configured key file is missing, it
|
||||
will fallback to prompting the user.
|
||||
- Rebase some patches
|
||||
- Update handle-SYSTEMCTL_OPTIONS-environment-variable.patch to
|
||||
properly handle SYSTEMCTL_OPTIONS
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri Apr 19 12:47:13 UTC 2013 - max@suse.com
|
||||
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
Name: systemd
|
||||
Url: http://www.freedesktop.org/wiki/Software/systemd
|
||||
Version: 200
|
||||
Version: 202
|
||||
Release: 0
|
||||
Summary: A System and Session Manager
|
||||
License: LGPL-2.1+
|
||||
@ -159,8 +159,8 @@ Patch23: disable-nss-myhostname-warning-bnc-783841.patch
|
||||
Patch24: handle-etc-HOSTNAME.patch
|
||||
# PATCH-FIX-OPENSUSE Forward-suspend-hibernate-calls-to-pm-utils.patch fcrozat@suse.com bnc#790157 -- forward to pm-utils
|
||||
Patch25: Forward-suspend-hibernate-calls-to-pm-utils.patch
|
||||
# PATCH-FIX-UPSTREAM lid-switch-chromebook.patch rjschwei@suse.com -- add lid switch of ARM based Chromebook as a power switch to logind
|
||||
Patch38: lid-switch-chromebook.patch
|
||||
# PATCH-FIX-UPSTREAM rules-add-lid-switch-of-ARM-based-Chromebook-as-a-power-sw.patch rjschwei@suse.com -- add lid switch of ARM based Chromebook as a power switch to logind
|
||||
Patch38: rules-add-lid-switch-of-ARM-based-Chromebook-as-a-power-sw.patch
|
||||
|
||||
# udev patches
|
||||
# PATCH-FIX-OPENSUSE 1001-Reinstate-TIMEOUT-handling.patch
|
||||
|
@ -7,10 +7,10 @@ Subject: timedate: add support for openSUSE version of /etc/sysconfig/clock
|
||||
1 file changed, 7 insertions(+)
|
||||
|
||||
diff --git a/src/timedate/timedated.c b/src/timedate/timedated.c
|
||||
index 16fffd0..b1b1859 100644
|
||||
index cdb6e5b..7246452 100644
|
||||
--- a/src/timedate/timedated.c
|
||||
+++ b/src/timedate/timedated.c
|
||||
@@ -180,6 +180,13 @@ static int read_data(void) {
|
||||
@@ -182,6 +182,13 @@ static int read_data(void) {
|
||||
goto have_timezone;
|
||||
}
|
||||
}
|
||||
|
@ -1,77 +0,0 @@
|
||||
From: Robert Milasan <rmilasan@suse.com>
|
||||
Date: Thu, 28 Mar 2013 09:24:43 +0000
|
||||
Subject: udev always rename network
|
||||
|
||||
udev: ensure that the network interfaces are renamed even if they exist
|
||||
(bnc#809843).
|
||||
---
|
||||
src/udev/udev-event.c | 46 +++++++++++++++++++++++++++++++++++++++++++---
|
||||
1 file changed, 43 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/udev/udev-event.c b/src/udev/udev-event.c
|
||||
index 3db2cb7..3ee9039 100644
|
||||
--- a/src/udev/udev-event.c
|
||||
+++ b/src/udev/udev-event.c
|
||||
@@ -750,6 +750,7 @@ static int rename_netif(struct udev_event *event)
|
||||
struct udev_device *dev = event->dev;
|
||||
int sk;
|
||||
struct ifreq ifr;
|
||||
+ int loop;
|
||||
int err;
|
||||
|
||||
log_debug("changing net interface name from '%s' to '%s'\n",
|
||||
@@ -766,12 +767,51 @@ static int rename_netif(struct udev_event *event)
|
||||
strscpy(ifr.ifr_name, IFNAMSIZ, udev_device_get_sysname(dev));
|
||||
strscpy(ifr.ifr_newname, IFNAMSIZ, event->name);
|
||||
err = ioctl(sk, SIOCSIFNAME, &ifr);
|
||||
- if (err >= 0) {
|
||||
+ if (err == 0) {
|
||||
print_kmsg("renamed network interface %s to %s\n", ifr.ifr_name, ifr.ifr_newname);
|
||||
- } else {
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
+ /* keep trying if the destination interface name already exists */
|
||||
+ err = -errno;
|
||||
+ if (err != -EEXIST) {
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
+ /* free our own name, another process may wait for us */
|
||||
+ snprintf(ifr.ifr_newname, IFNAMSIZ, "rename%u", udev_device_get_ifindex(dev));
|
||||
+ err = ioctl(sk, SIOCSIFNAME, &ifr);
|
||||
+ if (err < 0) {
|
||||
err = -errno;
|
||||
- log_error("error changing net interface name %s to %s: %m\n", ifr.ifr_name, ifr.ifr_newname);
|
||||
+ goto out;
|
||||
}
|
||||
+
|
||||
+ /* log temporary name */
|
||||
+ print_kmsg("renamed network interface %s to %s\n", ifr.ifr_name, ifr.ifr_newname);
|
||||
+
|
||||
+ /* wait a maximum of 90 seconds for our target to become available */
|
||||
+ strscpy(ifr.ifr_name, IFNAMSIZ, ifr.ifr_newname);
|
||||
+ strscpy(ifr.ifr_newname, IFNAMSIZ, event->name);
|
||||
+ loop = 90 * 20;
|
||||
+ while (loop--) {
|
||||
+ const struct timespec duration = { 0, 1000 * 1000 * 1000 / 20 };
|
||||
+
|
||||
+ log_debug("wait for netif '%s' to become free, loop=%i\n", event->name, (90 * 20) - loop);
|
||||
+ nanosleep(&duration, NULL);
|
||||
+
|
||||
+ err = ioctl(sk, SIOCSIFNAME, &ifr);
|
||||
+ if (err == 0) {
|
||||
+ print_kmsg("renamed network interface %s to %s\n", ifr.ifr_name, ifr.ifr_newname);
|
||||
+ break;
|
||||
+ }
|
||||
+ err = -errno;
|
||||
+ if (err != -EEXIST)
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+out:
|
||||
+ if (err < 0)
|
||||
+ log_error("error changing net interface name %s to %s: %m\n", ifr.ifr_name, ifr.ifr_newname);
|
||||
close(sk);
|
||||
return err;
|
||||
}
|
@ -1,22 +0,0 @@
|
||||
From: Robert Milasan <rmilasan@suse.com>
|
||||
Date: Tue, 7 Aug 2012 08:34:49 +0000
|
||||
Subject: udev fix sg autoload regression
|
||||
|
||||
Fix regression in udev where sg driver is no longer loaded for disc
|
||||
events. Will need a non-udev solution for 12.3 (bnc#761109).
|
||||
---
|
||||
rules/80-drivers.rules | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/rules/80-drivers.rules b/rules/80-drivers.rules
|
||||
index 50523e4..b863532 100644
|
||||
--- a/rules/80-drivers.rules
|
||||
+++ b/rules/80-drivers.rules
|
||||
@@ -7,6 +7,7 @@ SUBSYSTEM=="tifm", ENV{TIFM_CARD_TYPE}=="SD", RUN{builtin}="kmod load tifm_sd"
|
||||
SUBSYSTEM=="tifm", ENV{TIFM_CARD_TYPE}=="MS", RUN{builtin}="kmod load tifm_ms"
|
||||
SUBSYSTEM=="memstick", RUN{builtin}="kmod load ms_block mspro_block"
|
||||
SUBSYSTEM=="i2o", RUN{builtin}="kmod load i2o_block"
|
||||
+SUBSYSTEM=="scsi", ENV{DEVTYPE}=="scsi_device", TEST!="[module/sg]", IMPORT{builtin}="kmod load sg"
|
||||
SUBSYSTEM=="module", KERNEL=="parport_pc", RUN{builtin}="kmod load ppdev"
|
||||
KERNEL=="mtd*ro", ENV{MTD_FTL}=="smartmedia", RUN{builtin}="kmod load sm_ftl"
|
||||
|
@ -1,22 +0,0 @@
|
||||
From: Robert Milasan <rmilasan@suse.com>
|
||||
Date: Mon, 6 Aug 2012 13:35:34 +0000
|
||||
Subject: udev netlink null rules
|
||||
|
||||
udevd race for netlink events (bnc#774646)
|
||||
---
|
||||
src/udev/udevd.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/src/udev/udevd.c b/src/udev/udevd.c
|
||||
index 5a90b60..2a0bf60 100644
|
||||
--- a/src/udev/udevd.c
|
||||
+++ b/src/udev/udevd.c
|
||||
@@ -1410,6 +1410,8 @@ int main(int argc, char *argv[])
|
||||
dev = udev_monitor_receive_device(monitor);
|
||||
if (dev != NULL) {
|
||||
udev_device_set_usec_initialized(dev, now(CLOCK_MONOTONIC));
|
||||
+ if (rules == NULL)
|
||||
+ rules = udev_rules_new(udev, resolve_names);
|
||||
if (event_queue_insert(dev) < 0)
|
||||
udev_device_unref(dev);
|
||||
}
|
Loading…
Reference in New Issue
Block a user