From d4d36e6a87e79f8c18eb84d530ba957170edb8f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Thu, 8 Mar 2018 01:01:04 +0100 Subject: [PATCH] Two patches 2018-03-06 23:21:31,835 INFO pylorax.dnfhelper: Performing post-installation setup tasks 2018-03-06 23:22:41,901 WARNING pylorax.dnfhelper: Non-fatal POSTTRANS scriptlet failure in rpm package kernel-core warning: %posttrans(kernel-core-4.16.0-0.rc4.git0.1.fc29.x86_6 scriptlet failed, exit status 1 Please specify the kernel command line in /etc/kernel/cmdline! Could not determine the kernel command line parameters /usr/lib/kernel/install.d/90-loaderentry.install: line 53: /proc/cmdline: No such file or directory --- ...ip-fsync_directory_of_file-if-proc-s.patch | 97 +++++++++++++++++++ 20-grubby.install | 46 ++------- systemd.spec | 9 +- 3 files changed, 110 insertions(+), 42 deletions(-) create mode 100644 0002-basic-fs-util-skip-fsync_directory_of_file-if-proc-s.patch diff --git a/0002-basic-fs-util-skip-fsync_directory_of_file-if-proc-s.patch b/0002-basic-fs-util-skip-fsync_directory_of_file-if-proc-s.patch new file mode 100644 index 0000000..499e689 --- /dev/null +++ b/0002-basic-fs-util-skip-fsync_directory_of_file-if-proc-s.patch @@ -0,0 +1,97 @@ +From 83492cce79c0cda1ea634abe4ad6519aa69e2fdc Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Wed, 7 Mar 2018 23:36:44 +0100 +Subject: [PATCH] basic/fs-util: skip fsync_directory_of_file() if + /proc/self/fd/ is not available + +When systemd is running under lorax (in Fedora compose process), it'd think that +it failed to write /etc/machine-id, even though the write succeeded, because +fsync_directory_of_file() would fail, because /proc/self/fd/ is not available. +fsync_directory_of_file() is mostly an additional safety net, so I think it's best +to just silently ignore the error. + +Strace of pid1: +35791 stat("/etc", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 +35791 openat(AT_FDCWD, "/etc/machine-id", O_RDWR|O_CREAT|O_NOCTTY|O_CLOEXEC, 0444) = 3 +35791 umask(022) = 000 +35791 read(3, "", 38) = 0 +35791 openat(AT_FDCWD, "/var/lib/dbus/machine-id", O_RDONLY|O_NOCTTY|O_NOFOLLOW|O_CLOEXEC) = -1 ENOENT (No such file o +r directory) +35791 openat(AT_FDCWD, "/sys/class/dmi/id/product_name", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +35791 openat(AT_FDCWD, "/sys/class/dmi/id/sys_vendor", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +35791 openat(AT_FDCWD, "/sys/class/dmi/id/board_vendor", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +35791 openat(AT_FDCWD, "/sys/class/dmi/id/bios_vendor", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +35791 access("/proc/xen", F_OK) = -1 ENOENT (No such file or directory) +35791 openat(AT_FDCWD, "/sys/hypervisor/type", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +35791 openat(AT_FDCWD, "/proc/cpuinfo", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +35791 getrandom("\xb8\x82\xed\xd4\x35\x11\xd0\xeb\xa6\x79\xd7\x31\x6e\x7b\x99\xce", 16, GRND_NONBLOCK) = 16 +35791 writev(2, [{iov_base="Initializing machine ID from random generator.", iov_len=46}, {iov_base="\n", iov_len=1}], + 2) = 47 +35791 lseek(3, 0, SEEK_SET) = 0 +35791 ftruncate(3, 0) = 0 +35791 write(3, "b882edd4351140eba679d7316e7b99ce\n", 33) = 33 +35791 fsync(3) = 0 +35791 fstat(3, {st_mode=S_IFREG|0444, st_size=33, ...}) = 0 +35791 readlinkat(AT_FDCWD, "/proc/self/fd/3", 0x564df8c694c0, 99) = -1 ENOENT (No such file or directory) +35791 close(3) = 0 +35791 umask(022) = 022 +35791 openat(AT_FDCWD, "/run/machine-id", O_WRONLY|O_CREAT|O_NOCTTY|O_TRUNC|O_CLOEXEC, 0444) = 3 +35791 write(3, "b882edd4351140eba679d7316e7b99ce\n", 33) = 33 +35791 close(3) = 0 +35791 umask(022) = 022 +35791 mount("/run/machine-id", "/etc/machine-id", NULL, MS_BIND, NULL) = 0 +35791 writev(2, [{iov_base="Installed transient /etc/machine-id file.", iov_len=41}, {iov_base="\n", iov_len=1}], 2) = 42 +35791 mount(NULL, "/etc/machine-id", NULL, MS_RDONLY|MS_REMOUNT|MS_BIND, NULL) = 0 + +https://bugzilla.redhat.com/show_bug.cgi?id=1552843 +--- + src/basic/fd-util.c | 15 +++++++++++---- + src/basic/fs-util.c | 5 +++++ + 2 files changed, 16 insertions(+), 4 deletions(-) + +diff --git a/src/basic/fd-util.c b/src/basic/fd-util.c +index 678ab12bb8..bb74f6c58e 100644 +--- a/src/basic/fd-util.c ++++ b/src/basic/fd-util.c +@@ -361,14 +361,21 @@ bool fdname_is_valid(const char *s) { + } + + int fd_get_path(int fd, char **ret) { +- char procfs_path[STRLEN("/proc/self/fd/") + DECIMAL_STR_MAX(int)]; ++ _cleanup_close_ int dir = -1; ++ char fdname[DECIMAL_STR_MAX(int)]; + int r; + +- xsprintf(procfs_path, "/proc/self/fd/%i", fd); ++ dir = open("/proc/self/fd/", O_CLOEXEC | O_DIRECTORY | O_PATH); ++ if (dir < 0) ++ /* /proc is not available or not setup up properly, we're most likely ++ * in some chroot environment. */ ++ return -EOPNOTSUPP; + +- r = readlink_malloc(procfs_path, ret); ++ xsprintf(fdname, "%i", fd); + +- if (r == -ENOENT) /* If the file doesn't exist the fd is invalid */ ++ r = readlinkat_malloc(dir, fdname, ret); ++ if (r == -ENOENT) ++ /* If the file doesn't exist the fd is invalid */ + return -EBADF; + + return r; +diff --git a/src/basic/fs-util.c b/src/basic/fs-util.c +index 85c8070a1b..8d8d986082 100644 +--- a/src/basic/fs-util.c ++++ b/src/basic/fs-util.c +@@ -978,6 +978,11 @@ int fsync_directory_of_file(int fd) { + return r; + + r = fd_get_path(fd, &path); ++ if (r == -EOPNOTSUPP) ++ /* If /proc is not available, we're most likely running in some ++ * chroot environment, and syncing the directory is not very ++ * important in that case. Let's just silently do nothing. */ ++ return 0; + if (r < 0) + return r; + diff --git a/20-grubby.install b/20-grubby.install index 4e9797a..e059125 100755 --- a/20-grubby.install +++ b/20-grubby.install @@ -1,30 +1,15 @@ #!/bin/bash -if [[ ! -f /etc/default/grub ]]; then +if [[ ! -x /sbin/new-kernel-pkg ]]; then exit 0 fi -. /etc/default/grub - -[[ -f /etc/os-release ]] && . /etc/os-release - COMMAND="$1" KERNEL_VERSION="$2" BOOT_DIR_ABS="$3" KERNEL_IMAGE="$4" KERNEL_DIR="${KERNEL_IMAGE%/*}" - -MACHINE_ID=$KERNEL_INSTALL_MACHINE_ID - -# Remove it, since for grub2 the images are always installed in /boot -rm -rf "${BOOT_DIR_ABS%/*}" - -BLS_DIR="/boot/loader/entries" -if [ -d /sys/firmware/efi ]; then - BLS_DIR="/boot/efi/EFI/${ID}/loader/entries" -fi - [[ "$KERNEL_VERSION" == *\+* ]] && flavor=-"${KERNEL_VERSION##*+}" case "$COMMAND" in add) @@ -49,37 +34,18 @@ case "$COMMAND" in restorecon "/boot/.${KERNEL_IMAGE##*/}-${KERNEL_VERSION}.hmac" fi fi - - if [ "x${GRUB_ENABLE_BLSCFG}" = "xtrue" ]; then - [[ -d "$BLS_DIR" ]] || mkdir -p "$BLS_DIR" - cp -aT "${KERNEL_DIR}/bls.conf" "${BLS_DIR}/${MACHINE_ID}-${KERNEL_VERSION}.conf" || exit $? - exit 0 - fi - /sbin/new-kernel-pkg --package "kernel${flavor}" --install "$KERNEL_VERSION" || exit $? /sbin/new-kernel-pkg --package "kernel${flavor}" --mkinitrd --dracut --depmod --update "$KERNEL_VERSION" || exit $? /sbin/new-kernel-pkg --package "kernel${flavor}" --rpmposttrans "$KERNEL_VERSION" || exit $? - # If grubby is used there's no need to run other installation plugins - exit 77 ;; remove) - - if [ "x${GRUB_ENABLE_BLSCFG}" = "xtrue" ]; then - rm -f "${BLS_DIR}/${MACHINE_ID}-${KERNEL_VERSION}.conf" - - for i in vmlinuz System.map config zImage.stub dtb; do - rm -rf "/boot/${i}-${KERNEL_VERSION}" - done - # hmac is .vmlinuz-.hmac so needs a special treatment - rm -f "/boot/.vmlinuz-${KERNEL_VERSION}.hmac" - - exit 0 - fi - /sbin/new-kernel-pkg --package "kernel${flavor+-$flavor}" --rminitrd --rmmoddep --remove "$KERNEL_VERSION" || exit $? - # If grubby is used there's no need to run other installation plugins - exit 77 ;; *) ;; esac + +# skip other installation plugins, if we can't find a boot loader spec conforming setup +if ! [[ -d /boot/loader/entries || -L /boot/loader/entries ]]; then + exit 77 +fi diff --git a/systemd.spec b/systemd.spec index ec91ad9..f1a890d 100644 --- a/systemd.spec +++ b/systemd.spec @@ -13,7 +13,7 @@ Name: systemd Url: http://www.freedesktop.org/wiki/Software/systemd Version: 238 -Release: 2%{?gitcommit:.git%{gitcommitshort}}%{?dist} +Release: 3%{?gitcommit:.git%{gitcommitshort}}%{?dist} # For a breakdown of the licensing, see README License: LGPLv2+ and MIT and GPLv2+ Summary: System and Service Manager @@ -49,6 +49,7 @@ GIT_DIR=../../src/systemd/.git git diffab -M v233..master@{2017-06-15} -- hwdb/[ %endif Patch0001: 0001-test-cgroup-util-bail-out-when-running-under-mock.patch +Patch0002: 0002-basic-fs-util-skip-fsync_directory_of_file-if-proc-s.patch Patch0998: 0998-resolved-create-etc-resolv.conf-symlink-at-runtime.patch @@ -703,7 +704,11 @@ fi %files tests -f .file-list-tests %changelog -* Mon Mar 6 2018 Yu Watanabe - 238-2 +* Wed Mar 7 2018 Zbigniew Jędrzejewski-Szmek - 238-3 +- Revert the patches for GRUB BootLoaderSpec support +- Add patch for /etc/machine-id creation (#1552843) + +* Tue Mar 6 2018 Yu Watanabe - 238-2 - Fix transfiletrigger script (#1551793) * Mon Mar 5 2018 Zbigniew Jędrzejewski-Szmek - 238-1