systemd-202-2
- nspawn create empty /etc/resolv.conf if necessary - python wrapper: add sd_journal_add_conjunction() - fix s390 booting Resolves: rhbz#953217
This commit is contained in:
		
							parent
							
								
									14f69d384b
								
							
						
					
					
						commit
						a72a35790d
					
				
							
								
								
									
										58
									
								
								0001-nspawn-create-empty-etc-resolv.conf-if-necessary.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								0001-nspawn-create-empty-etc-resolv.conf-if-necessary.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,58 @@ | |||||||
|  | From f333fbb1efc2f32527f78cbdb003d59bae01aa07 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl> | ||||||
|  | Date: Wed, 17 Apr 2013 14:13:09 -0400 | ||||||
|  | Subject: [PATCH] nspawn: create empty /etc/resolv.conf if necessary | ||||||
|  | 
 | ||||||
|  | nspawn will overmount resolv.conf if it exists. Since e.g. | ||||||
|  | default install with yum doesn't create /etc/resolv.conf, | ||||||
|  | a container created with yum will not have network. This | ||||||
|  | seems undesirable, and since we overmount the file anyway, | ||||||
|  | let's create it too. | ||||||
|  | 
 | ||||||
|  | Also, mounting a read-write /etc/resolv.conf in the container | ||||||
|  | is treated as a failure, since it makes it possible to | ||||||
|  | modify hosts /etc/resolv.conf from inside the container. | ||||||
|  | ---
 | ||||||
|  |  src/nspawn/nspawn.c | 17 ++++++++++++----- | ||||||
|  |  1 file changed, 12 insertions(+), 5 deletions(-) | ||||||
|  | 
 | ||||||
|  | diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
 | ||||||
|  | index f57c75f..5a43d5e 100644
 | ||||||
|  | --- a/src/nspawn/nspawn.c
 | ||||||
|  | +++ b/src/nspawn/nspawn.c
 | ||||||
|  | @@ -492,7 +492,8 @@ static int setup_timezone(const char *dest) {
 | ||||||
|  |  } | ||||||
|  |   | ||||||
|  |  static int setup_resolv_conf(const char *dest) { | ||||||
|  | -        char *where;
 | ||||||
|  | +        char _cleanup_free_ *where = NULL;
 | ||||||
|  | +        _cleanup_close_ int fd = -1;
 | ||||||
|  |   | ||||||
|  |          assert(dest); | ||||||
|  |   | ||||||
|  | @@ -504,12 +505,18 @@ static int setup_resolv_conf(const char *dest) {
 | ||||||
|  |          if (!where) | ||||||
|  |                  return log_oom(); | ||||||
|  |   | ||||||
|  | +        fd = open(where, O_WRONLY|O_CREAT|O_EXCL|O_CLOEXEC|O_NOCTTY|O_NOFOLLOW, 0644);
 | ||||||
|  | +
 | ||||||
|  |          /* We don't really care for the results of this really. If it | ||||||
|  |           * fails, it fails, but meh... */ | ||||||
|  | -        if (mount("/etc/resolv.conf", where, "bind", MS_BIND, NULL) >= 0)
 | ||||||
|  | -                mount("/etc/resolv.conf", where, "bind", MS_BIND|MS_REMOUNT|MS_RDONLY, NULL);
 | ||||||
|  | -
 | ||||||
|  | -        free(where);
 | ||||||
|  | +        if (mount("/etc/resolv.conf", where, "bind", MS_BIND, NULL) < 0)
 | ||||||
|  | +                log_warning("Failed to bind mount /etc/resolv.conf: %m");
 | ||||||
|  | +        else
 | ||||||
|  | +                if (mount("/etc/resolv.conf", where, "bind",
 | ||||||
|  | +                          MS_BIND|MS_REMOUNT|MS_RDONLY, NULL) < 0) {
 | ||||||
|  | +                        log_error("Failed to remount /etc/resolv.conf readonly: %m");
 | ||||||
|  | +                        return -errno;
 | ||||||
|  | +                }
 | ||||||
|  |   | ||||||
|  |          return 0; | ||||||
|  |  } | ||||||
|  | -- 
 | ||||||
|  | 1.8.2 | ||||||
|  | 
 | ||||||
							
								
								
									
										60
									
								
								0002-systemd-python-wrap-sd_journal_add_conjunction.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								0002-systemd-python-wrap-sd_journal_add_conjunction.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,60 @@ | |||||||
|  | From 7f876bc4281145e6c74e98de07c6648a5b51ed90 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl> | ||||||
|  | Date: Thu, 18 Apr 2013 19:37:26 -0400 | ||||||
|  | Subject: [PATCH] systemd-python: wrap sd_journal_add_conjunction | ||||||
|  | 
 | ||||||
|  | ---
 | ||||||
|  |  src/python-systemd/_reader.c | 23 ++++++++++++++++++++++- | ||||||
|  |  1 file changed, 22 insertions(+), 1 deletion(-) | ||||||
|  | 
 | ||||||
|  | diff --git a/src/python-systemd/_reader.c b/src/python-systemd/_reader.c
 | ||||||
|  | index 05993b3..b836597 100644
 | ||||||
|  | --- a/src/python-systemd/_reader.c
 | ||||||
|  | +++ b/src/python-systemd/_reader.c
 | ||||||
|  | @@ -567,7 +567,10 @@ static PyObject* Reader_add_match(Reader *self, PyObject *args, PyObject *keywds
 | ||||||
|  |   | ||||||
|  |  PyDoc_STRVAR(Reader_add_disjunction__doc__, | ||||||
|  |               "add_disjunction() -> None\n\n" | ||||||
|  | -             "Inserts a logical OR between matches added before and afterwards.");
 | ||||||
|  | +             "Inserts a logical OR between matches added since previous\n"
 | ||||||
|  | +             "add_disjunction() or add_conjunction() and the next\n"
 | ||||||
|  | +             "add_disjunction() or add_conjunction().\n\n"
 | ||||||
|  | +             "See man:sd_journal_add_disjunction(3) for explanation.");
 | ||||||
|  |  static PyObject* Reader_add_disjunction(Reader *self, PyObject *args) | ||||||
|  |  { | ||||||
|  |      int r; | ||||||
|  | @@ -579,6 +582,23 @@ static PyObject* Reader_add_disjunction(Reader *self, PyObject *args)
 | ||||||
|  |  } | ||||||
|  |   | ||||||
|  |   | ||||||
|  | +PyDoc_STRVAR(Reader_add_conjunction__doc__,
 | ||||||
|  | +             "add_conjunction() -> None\n\n"
 | ||||||
|  | +             "Inserts a logical AND between matches added since previous\n"
 | ||||||
|  | +             "add_disjunction() or add_conjunction() and the next\n"
 | ||||||
|  | +             "add_disjunction() or add_conjunction().\n\n"
 | ||||||
|  | +             "See man:sd_journal_add_disjunction(3) for explanation.");
 | ||||||
|  | +static PyObject* Reader_add_conjunction(Reader *self, PyObject *args)
 | ||||||
|  | +{
 | ||||||
|  | +    int r;
 | ||||||
|  | +    r = sd_journal_add_conjunction(self->j);
 | ||||||
|  | +    set_error(r, NULL, NULL);
 | ||||||
|  | +    if (r < 0)
 | ||||||
|  | +        return NULL;
 | ||||||
|  | +    Py_RETURN_NONE;
 | ||||||
|  | +}
 | ||||||
|  | +
 | ||||||
|  | +
 | ||||||
|  |  PyDoc_STRVAR(Reader_flush_matches__doc__, | ||||||
|  |               "flush_matches() -> None\n\n" | ||||||
|  |               "Clear all current match filters."); | ||||||
|  | @@ -980,6 +1000,7 @@ static PyMethodDef Reader_methods[] = {
 | ||||||
|  |      {"_get_monotonic",  (PyCFunction) Reader_get_monotonic, METH_NOARGS, Reader_get_monotonic__doc__}, | ||||||
|  |      {"add_match",       (PyCFunction) Reader_add_match, METH_VARARGS|METH_KEYWORDS, Reader_add_match__doc__}, | ||||||
|  |      {"add_disjunction", (PyCFunction) Reader_add_disjunction, METH_NOARGS, Reader_add_disjunction__doc__}, | ||||||
|  | +    {"add_conjunction", (PyCFunction) Reader_add_conjunction, METH_NOARGS, Reader_add_conjunction__doc__},
 | ||||||
|  |      {"flush_matches",   (PyCFunction) Reader_flush_matches, METH_NOARGS, Reader_flush_matches__doc__}, | ||||||
|  |      {"seek_head",       (PyCFunction) Reader_seek_head, METH_NOARGS, Reader_seek_head__doc__}, | ||||||
|  |      {"seek_tail",       (PyCFunction) Reader_seek_tail, METH_NOARGS, Reader_seek_tail__doc__}, | ||||||
|  | -- 
 | ||||||
|  | 1.8.2 | ||||||
|  | 
 | ||||||
							
								
								
									
										30
									
								
								0003-Update-NEWS.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								0003-Update-NEWS.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,30 @@ | |||||||
|  | From cbeabcfbc5a5fa27385e5794780e8f034e090606 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl> | ||||||
|  | Date: Thu, 18 Apr 2013 19:59:12 -0400 | ||||||
|  | Subject: [PATCH] Update NEWS | ||||||
|  | 
 | ||||||
|  | ---
 | ||||||
|  |  NEWS | 7 +++++++ | ||||||
|  |  1 file changed, 7 insertions(+) | ||||||
|  | 
 | ||||||
|  | diff --git a/NEWS b/NEWS
 | ||||||
|  | index 2b46246..afaadf3 100644
 | ||||||
|  | --- a/NEWS
 | ||||||
|  | +++ b/NEWS
 | ||||||
|  | @@ -53,6 +53,13 @@ CHANGES WITH 202:
 | ||||||
|  |            found the tool will now automatically fall back to prompting | ||||||
|  |            the user. | ||||||
|  |   | ||||||
|  | +        * Python systemd.journal module was updated to wrap recently
 | ||||||
|  | +          added functions from libsystemd-journal. The interface was
 | ||||||
|  | +          changed to bring the low level interface in s.j._Reader
 | ||||||
|  | +          closer to the C API, and the high level interface in
 | ||||||
|  | +          s.j.Reader was updated to wrap and convert all data about
 | ||||||
|  | +          an entry.
 | ||||||
|  | +
 | ||||||
|  |          Contributions from: Anatol Pomozov, Auke Kok, Harald Hoyer, | ||||||
|  |          Henrik Grindal Bakken, Josh Triplett, Kay Sievers, Lennart | ||||||
|  |          Poettering, Lukas Nykryn, Mantas Mikulėnas Marius Vollmer, | ||||||
|  | -- 
 | ||||||
|  | 1.8.2 | ||||||
|  | 
 | ||||||
							
								
								
									
										118
									
								
								0004-Reintroduce-f_type-comparison-macro.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										118
									
								
								0004-Reintroduce-f_type-comparison-macro.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,118 @@ | |||||||
|  | From bdd29249a882e599e5e365536372d08dee398cd4 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Harald Hoyer <harald@redhat.com> | ||||||
|  | Date: Fri, 19 Apr 2013 13:44:56 +0200 | ||||||
|  | Subject: [PATCH] Reintroduce f_type comparison macro | ||||||
|  | 
 | ||||||
|  | This reverts commit 4826f0b7b5c0aefa08b8cc7ef64d69027f84da2c. | ||||||
|  | 
 | ||||||
|  | Because statfs.t_type can be int on some architecures, we have to cast | ||||||
|  | the const magic to the type, otherwise the compiler warns about | ||||||
|  | signed/unsigned comparison, because the magic can be 32 bit unsigned. | ||||||
|  | 
 | ||||||
|  | statfs(2) man page is also wrong on some systems, because | ||||||
|  | f_type is not __SWORD_TYPE on some architecures. | ||||||
|  | 
 | ||||||
|  | The following program: | ||||||
|  | 
 | ||||||
|  | int main(int argc, char**argv) | ||||||
|  | { | ||||||
|  |         struct statfs s; | ||||||
|  |         statfs(argv[1], &s); | ||||||
|  | 
 | ||||||
|  | 	printf("sizeof(f_type) = %d\n", sizeof(s.f_type)); | ||||||
|  | 	printf("sizeof(__SWORD_TYPE) = %d\n", sizeof(__SWORD_TYPE)); | ||||||
|  | 	printf("sizeof(long) = %d\n", sizeof(long)); | ||||||
|  | 	printf("sizeof(int) = %d\n", sizeof(int)); | ||||||
|  | 	if (sizeof(s.f_type) == sizeof(int)) { | ||||||
|  | 		printf("f_type = 0x%x\n", s.f_type); | ||||||
|  | 	} else { | ||||||
|  |                 printf("f_type = 0x%lx\n", s.f_type); | ||||||
|  | 	} | ||||||
|  |         return 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | executed on s390x gives for a btrfs: | ||||||
|  | 
 | ||||||
|  | sizeof(f_type) = 4 | ||||||
|  | sizeof(__SWORD_TYPE) = 8 | ||||||
|  | sizeof(long) = 8 | ||||||
|  | sizeof(int) = 4 | ||||||
|  | f_type = 0x9123683e | ||||||
|  | ---
 | ||||||
|  |  src/journal/sd-journal.c          | 10 +++++----- | ||||||
|  |  src/readahead/readahead-collect.c |  2 +- | ||||||
|  |  src/shared/macro.h                |  7 +++++++ | ||||||
|  |  src/shared/util.c                 |  5 +++-- | ||||||
|  |  4 files changed, 16 insertions(+), 8 deletions(-) | ||||||
|  | 
 | ||||||
|  | diff --git a/src/journal/sd-journal.c b/src/journal/sd-journal.c
 | ||||||
|  | index e021d98..15239b5 100644
 | ||||||
|  | --- a/src/journal/sd-journal.c
 | ||||||
|  | +++ b/src/journal/sd-journal.c
 | ||||||
|  | @@ -1251,11 +1251,11 @@ static void check_network(sd_journal *j, int fd) {
 | ||||||
|  |                  return; | ||||||
|  |   | ||||||
|  |          j->on_network = | ||||||
|  | -                sfs.f_type == (__SWORD_TYPE) CIFS_MAGIC_NUMBER ||
 | ||||||
|  | -                sfs.f_type == (__SWORD_TYPE) CODA_SUPER_MAGIC ||
 | ||||||
|  | -                sfs.f_type == (__SWORD_TYPE) NCP_SUPER_MAGIC ||
 | ||||||
|  | -                sfs.f_type == (__SWORD_TYPE) NFS_SUPER_MAGIC ||
 | ||||||
|  | -                sfs.f_type == (__SWORD_TYPE) SMB_SUPER_MAGIC;
 | ||||||
|  | +                F_TYPE_CMP(sfs.f_type, CIFS_MAGIC_NUMBER) ||
 | ||||||
|  | +                F_TYPE_CMP(sfs.f_type, CODA_SUPER_MAGIC) ||
 | ||||||
|  | +                F_TYPE_CMP(sfs.f_type, NCP_SUPER_MAGIC) ||
 | ||||||
|  | +                F_TYPE_CMP(sfs.f_type, NFS_SUPER_MAGIC) ||
 | ||||||
|  | +                F_TYPE_CMP(sfs.f_type, SMB_SUPER_MAGIC);
 | ||||||
|  |  } | ||||||
|  |   | ||||||
|  |  static int add_file(sd_journal *j, const char *prefix, const char *filename) { | ||||||
|  | diff --git a/src/readahead/readahead-collect.c b/src/readahead/readahead-collect.c
 | ||||||
|  | index 02ecbe5..75ec5b7 100644
 | ||||||
|  | --- a/src/readahead/readahead-collect.c
 | ||||||
|  | +++ b/src/readahead/readahead-collect.c
 | ||||||
|  | @@ -505,7 +505,7 @@ done:
 | ||||||
|  |          on_ssd = fs_on_ssd(root) > 0; | ||||||
|  |          log_debug("On SSD: %s", yes_no(on_ssd)); | ||||||
|  |   | ||||||
|  | -        on_btrfs = statfs(root, &sfs) >= 0 && sfs.f_type == (__SWORD_TYPE) BTRFS_SUPER_MAGIC;
 | ||||||
|  | +        on_btrfs = statfs(root, &sfs) >= 0 && F_TYPE_CMP(sfs.f_type, BTRFS_SUPER_MAGIC);
 | ||||||
|  |          log_debug("On btrfs: %s", yes_no(on_btrfs)); | ||||||
|  |   | ||||||
|  |          if (asprintf(&pack_fn_new, "%s/.readahead.new", root) < 0) { | ||||||
|  | diff --git a/src/shared/macro.h b/src/shared/macro.h
 | ||||||
|  | index 9bf81dc..ac61b49 100644
 | ||||||
|  | --- a/src/shared/macro.h
 | ||||||
|  | +++ b/src/shared/macro.h
 | ||||||
|  | @@ -264,6 +264,13 @@ do {                                                                    \
 | ||||||
|  |          }                                                               \ | ||||||
|  |  } while(false) | ||||||
|  |   | ||||||
|  | + /* Because statfs.t_type can be int on some architecures, we have to cast
 | ||||||
|  | +  * the const magic to the type, otherwise the compiler warns about
 | ||||||
|  | +  * signed/unsigned comparison, because the magic can be 32 bit unsigned.
 | ||||||
|  | + */
 | ||||||
|  | +#define F_TYPE_CMP(a, b) (a == (typeof(a)) b)
 | ||||||
|  | +
 | ||||||
|  | +
 | ||||||
|  |  /* Returns the number of chars needed to format variables of the | ||||||
|  |   * specified type as a decimal string. Adds in extra space for a | ||||||
|  |   * negative '-' prefix. */ | ||||||
|  | diff --git a/src/shared/util.c b/src/shared/util.c
 | ||||||
|  | index 5d03272..1fc6c5a 100644
 | ||||||
|  | --- a/src/shared/util.c
 | ||||||
|  | +++ b/src/shared/util.c
 | ||||||
|  | @@ -2779,8 +2779,9 @@ int rm_rf_children_dangerous(int fd, bool only_dirs, bool honour_sticky, struct
 | ||||||
|  |   | ||||||
|  |  static int is_temporary_fs(struct statfs *s) { | ||||||
|  |          assert(s); | ||||||
|  | -        return s->f_type == (__SWORD_TYPE) TMPFS_MAGIC ||
 | ||||||
|  | -                s->f_type == (__SWORD_TYPE) RAMFS_MAGIC;
 | ||||||
|  | +        return
 | ||||||
|  | +                F_TYPE_CMP(s->f_type, TMPFS_MAGIC) ||
 | ||||||
|  | +                F_TYPE_CMP(s->f_type, RAMFS_MAGIC);
 | ||||||
|  |  } | ||||||
|  |   | ||||||
|  |  int rm_rf_children(int fd, bool only_dirs, bool honour_sticky, struct stat *root_dev) { | ||||||
|  | -- 
 | ||||||
|  | 1.8.2 | ||||||
|  | 
 | ||||||
							
								
								
									
										15
									
								
								systemd.spec
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								systemd.spec
									
									
									
									
									
								
							| @ -13,7 +13,7 @@ | |||||||
| Name:           systemd | Name:           systemd | ||||||
| Url:            http://www.freedesktop.org/wiki/Software/systemd | Url:            http://www.freedesktop.org/wiki/Software/systemd | ||||||
| Version:        202 | Version:        202 | ||||||
| Release:        1%{?gitcommit:.git%{gitcommit}}%{?dist} | Release:        2%{?gitcommit:.git%{gitcommit}}%{?dist} | ||||||
| # For a breakdown of the licensing, see README | # For a breakdown of the licensing, see README | ||||||
| License:        LGPLv2+ and MIT and GPLv2+ | License:        LGPLv2+ and MIT and GPLv2+ | ||||||
| Summary:        A System and Service Manager | Summary:        A System and Service Manager | ||||||
| @ -34,6 +34,11 @@ Source4:        listen.conf | |||||||
| # Prevent accidental removal of the systemd package | # Prevent accidental removal of the systemd package | ||||||
| Source6:        yum-protect-systemd.conf | Source6:        yum-protect-systemd.conf | ||||||
| 
 | 
 | ||||||
|  | Patch1:         0001-nspawn-create-empty-etc-resolv.conf-if-necessary.patch | ||||||
|  | Patch2:         0002-systemd-python-wrap-sd_journal_add_conjunction.patch | ||||||
|  | Patch3:         0003-Update-NEWS.patch | ||||||
|  | Patch4:         0004-Reintroduce-f_type-comparison-macro.patch | ||||||
|  | 
 | ||||||
| # kernel-install patch for grubby, drop if grubby is obsolete | # kernel-install patch for grubby, drop if grubby is obsolete | ||||||
| Patch1000:      kernel-install-grubby.patch | Patch1000:      kernel-install-grubby.patch | ||||||
| 
 | 
 | ||||||
| @ -749,6 +754,12 @@ fi | |||||||
| %{_libdir}/pkgconfig/gudev-1.0* | %{_libdir}/pkgconfig/gudev-1.0* | ||||||
| 
 | 
 | ||||||
| %changelog | %changelog | ||||||
|  | * Fri Apr 19 2013 Harald Hoyer <harald@redhat.com> 202-2 | ||||||
|  | - nspawn create empty /etc/resolv.conf if necessary | ||||||
|  | - python wrapper: add sd_journal_add_conjunction() | ||||||
|  | - fix s390 booting | ||||||
|  | Resolves: rhbz#953217 | ||||||
|  | 
 | ||||||
| * Thu Apr 18 2013 Lennart Poettering <lpoetter@redhat.com> - 202-1 | * Thu Apr 18 2013 Lennart Poettering <lpoetter@redhat.com> - 202-1 | ||||||
| - New upstream release | - New upstream release | ||||||
| 
 | 
 | ||||||
| @ -1393,7 +1404,7 @@ fi | |||||||
| * Mon Jun 14 2010 Rahul Sundaram <sundaram@fedoraproject.org> - 0-0.4.20100614git393024 | * Mon Jun 14 2010 Rahul Sundaram <sundaram@fedoraproject.org> - 0-0.4.20100614git393024 | ||||||
| - Pull the latest snapshot that fixes a segfault. Resolves rhbz#603231 | - Pull the latest snapshot that fixes a segfault. Resolves rhbz#603231 | ||||||
| 
 | 
 | ||||||
| * Thu Jun 11 2010 Rahul Sundaram <sundaram@fedoraproject.org> - 0-0.3.20100610git2f198e | * Fri Jun 11 2010 Rahul Sundaram <sundaram@fedoraproject.org> - 0-0.3.20100610git2f198e | ||||||
| - More minor fixes as per review | - More minor fixes as per review | ||||||
| 
 | 
 | ||||||
| * Thu Jun 10 2010 Rahul Sundaram <sundaram@fedoraproject.org> - 0-0.2.20100610git2f198e | * Thu Jun 10 2010 Rahul Sundaram <sundaram@fedoraproject.org> - 0-0.2.20100610git2f198e | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user