Set up a monotonic clock boot time offset in the VM
This commit is contained in:
parent
8c3878f117
commit
981393443b
2 changed files with 19 additions and 0 deletions
|
|
@ -8,6 +8,8 @@ const MS_NODEV: c_ulong = 0x04;
|
|||
const MS_RELATIME: c_ulong = 0x200000;
|
||||
const MS_STRICTATIME: c_ulong = 0x1000000;
|
||||
|
||||
const CLONE_NEWTIME: c_int = 0x80;
|
||||
|
||||
unsafe extern "C" {
|
||||
fn mount(
|
||||
src: *const c_char,
|
||||
|
|
@ -17,6 +19,7 @@ unsafe extern "C" {
|
|||
data: *const c_void,
|
||||
) -> c_int;
|
||||
fn getrandom(buf: *mut u8, buflen: usize, flags: u32) -> c_int;
|
||||
fn unshare(flags: c_int) -> c_int;
|
||||
}
|
||||
|
||||
fn gen_machine_id() -> String {
|
||||
|
|
@ -133,6 +136,17 @@ fn main() -> Result<(), std::io::Error> {
|
|||
);
|
||||
}
|
||||
|
||||
if let Ok(offset) = std::env::var("BOOT_TIME_OFFSET") {
|
||||
if unsafe { unshare(CLONE_NEWTIME) } != 0 {
|
||||
eprintln!("[micro-activate] Could not unshare time!");
|
||||
} else {
|
||||
std::fs::write(
|
||||
"/proc/self/timens_offsets",
|
||||
format!("monotonic {offset}\nboottime {offset}\n"),
|
||||
)?;
|
||||
}
|
||||
}
|
||||
|
||||
let mut args = std::env::args_os().skip(1);
|
||||
let cmd = args.next().unwrap();
|
||||
Err(std::process::Command::new(cmd).args(args).exec())
|
||||
|
|
|
|||
5
munix
5
munix
|
|
@ -204,6 +204,10 @@ if [ "$USING_PUBLISH" -eq 1 ]; then
|
|||
printf "\n\n\n\e[1mNote: due to a \e[31mBUG\e[39m with port publishing (-p) you have to send the first outgoing packet (e.g. ping -c1 8.8.8.8) before your ports start receiving traffic. Sorry for the inconvenience!\e[39;0m\n\n\n\n" >&2
|
||||
fi
|
||||
|
||||
# xxx: some time is lost to the starting process..
|
||||
[[ "$(</proc/uptime)" =~ ([0-9]+)\.([0-9]+) ]]
|
||||
BOOT_TIME_OFFSET="${BASH_REMATCH[1]} $(( ${BASH_REMATCH[2]} * 1000000 ))"
|
||||
|
||||
# do not 'exec' because of cleanup :)
|
||||
bwrap --unshare-all --share-net \
|
||||
--uid $MICROVM_UID --gid $MICROVM_GID \
|
||||
|
|
@ -233,6 +237,7 @@ bwrap --unshare-all --share-net \
|
|||
-e container=munix \
|
||||
-e MICROVM_CLOSURE="$MICROVM_CLOSURE" \
|
||||
-e MICROVM_UID="$MICROVM_UID" -e MICROVM_GID="$MICROVM_GID" \
|
||||
-e BOOT_TIME_OFFSET="$BOOT_TIME_OFFSET" \
|
||||
-i -t -- "${MICROVM_COMMAND[@]}" \
|
||||
13< /etc/resolv.conf \
|
||||
14< /etc/localtime
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue