summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorK900 <me@0upti.me>2022-12-14 23:08:45 +0300
committerGitHub <noreply@github.com>2022-12-14 23:08:45 +0300
commit76286bf034c6bcef68c7f76126e9b9671ab1ae7a (patch)
tree1199928978d2778f90240bfb8a1207b91b132489 /scripts
parent9bde770148c091133794fc5748d67330b19ada4b (diff)
parenteb4b4b54682d76c72063542efe60af6478771f8e (diff)
Merge pull request #178 from K900/mountage
Mount propagation fixes (and also oomd)
Diffstat (limited to 'scripts')
-rw-r--r--scripts/native-systemd-shim/src/main.rs34
1 files changed, 33 insertions, 1 deletions
diff --git a/scripts/native-systemd-shim/src/main.rs b/scripts/native-systemd-shim/src/main.rs
index f0e9e40..2f809d3 100644
--- a/scripts/native-systemd-shim/src/main.rs
+++ b/scripts/native-systemd-shim/src/main.rs
@@ -4,12 +4,44 @@ use nix::mount::{mount, MsFlags};
use nix::sys::wait::{waitid, Id, WaitPidFlag};
use nix::unistd::Pid;
use std::env;
-use std::fs::OpenOptions;
+use std::fs::{create_dir, remove_file, OpenOptions};
use std::os::unix::io::{FromRawFd, IntoRawFd};
use std::os::unix::process::CommandExt;
use std::process::{Command, Stdio};
fn real_main() -> anyhow::Result<()> {
+ log::trace!("Unscrewing /dev/shm...");
+
+ remove_file("/dev/shm").context("When removing old /dev/shm")?;
+ create_dir("/dev/shm").context("When creating new /dev/shm")?;
+ mount(
+ Some("/run/shm"),
+ "/dev/shm",
+ None::<&str>,
+ MsFlags::MS_MOVE,
+ None::<&str>,
+ )
+ .context("When relocating /dev/shm")?;
+ mount(
+ Some("/dev/shm"),
+ "/run/shm",
+ None::<&str>,
+ MsFlags::MS_BIND,
+ None::<&str>,
+ )
+ .context("When bind mounting /run/shm to /dev/shm")?;
+
+ log::trace!("Remounting / shared...");
+
+ mount(
+ None::<&str>,
+ "/",
+ None::<&str>,
+ MsFlags::MS_REC | MsFlags::MS_SHARED,
+ None::<&str>,
+ )
+ .context("When remounting /")?;
+
log::trace!("Remounting /nix/store read-only...");
mount(