Bugfix/mac build (#2726)

* fix mac build

* additional fixes

* handle arm64 from uname -m

* handle arm64 from uname -m in all builds

* gracefully handle rootless docker

* use cross-platform method of determining file uid
This commit is contained in:
Aiden McClelland
2024-08-26 16:52:23 -06:00
committed by GitHub
parent 9059855f2b
commit 571db5c0ee
15 changed files with 119 additions and 41 deletions

View File

@@ -109,20 +109,16 @@ pub fn handler<C: Context>() -> ParentHandler<C> {
ParentHandler::<C>::new()
.subcommand(
"launch",
from_fn_blocking(subcontainer::launch::<ContainerCliContext>).no_display(),
from_fn_blocking(subcontainer::launch).no_display(),
)
.subcommand(
"launch-init",
from_fn_blocking(subcontainer::launch_init::<ContainerCliContext>).no_display(),
)
.subcommand(
"exec",
from_fn_blocking(subcontainer::exec::<ContainerCliContext>).no_display(),
from_fn_blocking(subcontainer::launch_init).no_display(),
)
.subcommand("exec", from_fn_blocking(subcontainer::exec).no_display())
.subcommand(
"exec-command",
from_fn_blocking(subcontainer::exec_command::<ContainerCliContext>)
.no_display(),
from_fn_blocking(subcontainer::exec_command).no_display(),
)
.subcommand(
"create-fs",

View File

@@ -8,9 +8,15 @@ use crate::rpc_continuations::Guid;
use crate::service::effects::prelude::*;
use crate::util::Invoke;
#[cfg(feature = "container-runtime")]
mod sync;
#[cfg(not(feature = "container-runtime"))]
mod sync_dummy;
pub use sync::*;
#[cfg(not(feature = "container-runtime"))]
use sync_dummy as sync;
#[derive(Debug, Deserialize, Serialize, Parser, TS)]
#[serde(rename_all = "camelCase")]

View File

@@ -14,6 +14,7 @@ use tokio::sync::oneshot;
use unshare::Command as NSCommand;
use crate::service::effects::prelude::*;
use crate::service::effects::ContainerCliContext;
const FWD_SIGNALS: &[c_int] = &[
SIGABRT, SIGALRM, SIGCONT, SIGHUP, SIGINT, SIGIO, SIGPIPE, SIGPROF, SIGQUIT, SIGTERM, SIGTRAP,
@@ -130,8 +131,8 @@ impl ExecParams {
}
}
pub fn launch<C: Context>(
_: C,
pub fn launch(
_: ContainerCliContext,
ExecParams {
env,
workdir,
@@ -141,6 +142,8 @@ pub fn launch<C: Context>(
}: ExecParams,
) -> Result<(), Error> {
use unshare::{Namespace, Stdio};
use crate::service::cli::ContainerCliContext;
let mut sig = signal_hook::iterator::Signals::new(FWD_SIGNALS)?;
let mut cmd = NSCommand::new("/usr/bin/start-cli");
cmd.arg("subcontainer").arg("launch-init");
@@ -262,7 +265,7 @@ pub fn launch<C: Context>(
}
}
pub fn launch_init<C: Context>(_: C, params: ExecParams) -> Result<(), Error> {
pub fn launch_init(_: ContainerCliContext, params: ExecParams) -> Result<(), Error> {
nix::mount::mount(
Some("proc"),
&params.chroot.join("proc"),
@@ -281,8 +284,8 @@ pub fn launch_init<C: Context>(_: C, params: ExecParams) -> Result<(), Error> {
}
}
pub fn exec<C: Context>(
_: C,
pub fn exec(
_: ContainerCliContext,
ExecParams {
env,
workdir,
@@ -384,6 +387,6 @@ pub fn exec<C: Context>(
}
}
pub fn exec_command<C: Context>(_: C, params: ExecParams) -> Result<(), Error> {
pub fn exec_command(_: ContainerCliContext, params: ExecParams) -> Result<(), Error> {
params.exec()
}

View File

@@ -0,0 +1,30 @@
use crate::service::effects::prelude::*;
use crate::service::effects::ContainerCliContext;
pub fn launch(_: ContainerCliContext) -> Result<(), Error> {
Err(Error::new(
eyre!("requires feature container-runtime"),
ErrorKind::InvalidRequest,
))
}
pub fn launch_init(_: ContainerCliContext) -> Result<(), Error> {
Err(Error::new(
eyre!("requires feature container-runtime"),
ErrorKind::InvalidRequest,
))
}
pub fn exec(_: ContainerCliContext) -> Result<(), Error> {
Err(Error::new(
eyre!("requires feature container-runtime"),
ErrorKind::InvalidRequest,
))
}
pub fn exec_command(_: ContainerCliContext) -> Result<(), Error> {
Err(Error::new(
eyre!("requires feature container-runtime"),
ErrorKind::InvalidRequest,
))
}