Merge pull request #2186 from jlebon/pr/etc-rw

Fix read-only /etc when using sysroot=readonly and a separate /var mount
This commit is contained in:
OpenShift Merge Robot 2020-08-28 14:52:24 -04:00 committed by GitHub
commit 75376bae4c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 12 additions and 1 deletions

View File

@ -72,6 +72,12 @@ parallel fcos: {
tar -C insttree -xzvf insttree.tar.gz tar -C insttree -xzvf insttree.tar.gz
rsync -rlv insttree/ / rsync -rlv insttree/ /
coreos-assembler init --force https://github.com/coreos/fedora-coreos-config coreos-assembler init --force https://github.com/coreos/fedora-coreos-config
# XXX: We temporarily add these tests until they get merged into FCOS proper
(mkdir -p tests/kola/var-mount
cd tests/kola/var-mount
curl -L --remote-name-all \
https://raw.githubusercontent.com/jlebon/fedora-coreos-config/pr/var-mount/tests/kola/var-mount/{config.ign,test.sh}
chmod a+x test.sh)
mkdir -p overrides/rootfs mkdir -p overrides/rootfs
mv insttree/* overrides/rootfs/ mv insttree/* overrides/rootfs/
rmdir insttree rmdir insttree

View File

@ -251,7 +251,7 @@ main(int argc, char *argv[])
* sysroot, we still need a writable /etc. And to avoid race conditions * sysroot, we still need a writable /etc. And to avoid race conditions
* we ensure it's writable in the initramfs, before we switchroot at all. * we ensure it's writable in the initramfs, before we switchroot at all.
*/ */
if (mount ("/etc", "/etc", NULL, MS_BIND, NULL) < 0) if (mount ("etc", "etc", NULL, MS_BIND, NULL) < 0)
err (EXIT_FAILURE, "failed to make /etc a bind mount"); err (EXIT_FAILURE, "failed to make /etc a bind mount");
/* Pass on the fact that we discovered a readonly sysroot to ostree-remount.service */ /* Pass on the fact that we discovered a readonly sysroot to ostree-remount.service */
int fd = open (_OSTREE_SYSROOT_READONLY_STAMP, O_WRONLY | O_CREAT | O_CLOEXEC, 0644); int fd = open (_OSTREE_SYSROOT_READONLY_STAMP, O_WRONLY | O_CREAT | O_CLOEXEC, 0644);

View File

@ -112,6 +112,11 @@ main(int argc, char *argv[])
bool sysroot_configured_readonly = unlink (_OSTREE_SYSROOT_READONLY_STAMP) == 0; bool sysroot_configured_readonly = unlink (_OSTREE_SYSROOT_READONLY_STAMP) == 0;
do_remount ("/sysroot", !sysroot_configured_readonly); do_remount ("/sysroot", !sysroot_configured_readonly);
/* And also make sure to make /etc rw again. We make this conditional on
* sysroot_configured_readonly because only in that case is it a bind-mount. */
if (sysroot_configured_readonly)
do_remount ("/etc", true);
/* If /var was created as as an OSTree default bind mount (instead of being a separate filesystem) /* If /var was created as as an OSTree default bind mount (instead of being a separate filesystem)
* then remounting the root mount read-only also remounted it. * then remounting the root mount read-only also remounted it.
* So just like /etc, we need to make it read-write by default. * So just like /etc, we need to make it read-write by default.