mirror of
https://github.com/Start9Labs/start-os.git
synced 2026-03-26 02:11:53 +00:00
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:
@@ -18,7 +18,7 @@ if [ -z "$ARCH" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
DOCKER_PLATFORM="linux/${ARCH}"
|
DOCKER_PLATFORM="linux/${ARCH}"
|
||||||
if [ "$ARCH" = aarch64 ]; then
|
if [ "$ARCH" = aarch64 ] || [ "$ARCH" = arm64 ]; then
|
||||||
DOCKER_PLATFORM="linux/arm64"
|
DOCKER_PLATFORM="linux/arm64"
|
||||||
elif [ "$ARCH" = x86_64 ]; then
|
elif [ "$ARCH" = x86_64 ]; then
|
||||||
DOCKER_PLATFORM="linux/amd64"
|
DOCKER_PLATFORM="linux/amd64"
|
||||||
|
|||||||
@@ -2,13 +2,17 @@
|
|||||||
|
|
||||||
cd "$(dirname "${BASH_SOURCE[0]}")"
|
cd "$(dirname "${BASH_SOURCE[0]}")"
|
||||||
|
|
||||||
set -e
|
set -ea
|
||||||
shopt -s expand_aliases
|
shopt -s expand_aliases
|
||||||
|
|
||||||
if [ -z "$ARCH" ]; then
|
if [ -z "$ARCH" ]; then
|
||||||
ARCH=$(uname -m)
|
ARCH=$(uname -m)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ "$ARCH" = "arm64" ]; then
|
||||||
|
ARCH="aarch64"
|
||||||
|
fi
|
||||||
|
|
||||||
USE_TTY=
|
USE_TTY=
|
||||||
if tty -s; then
|
if tty -s; then
|
||||||
USE_TTY="-it"
|
USE_TTY="-it"
|
||||||
@@ -26,4 +30,7 @@ alias 'rust-musl-builder'='docker run $USE_TTY --rm -e "RUSTFLAGS=$RUSTFLAGS" -v
|
|||||||
|
|
||||||
echo "FEATURES=\"$FEATURES\""
|
echo "FEATURES=\"$FEATURES\""
|
||||||
echo "RUSTFLAGS=\"$RUSTFLAGS\""
|
echo "RUSTFLAGS=\"$RUSTFLAGS\""
|
||||||
rust-musl-builder sh -c "cd core && cargo build --release --no-default-features --features container-runtime,$FEATURES --locked --bin containerbox --target=$ARCH-unknown-linux-musl && chown -R $UID:$UID target && chown -R $UID:$UID /root/.cargo"
|
rust-musl-builder sh -c "cd core && cargo build --release --no-default-features --features container-runtime,$FEATURES --locked --bin containerbox --target=$ARCH-unknown-linux-musl"
|
||||||
|
if [ "$(ls -nd core/target/$ARCH-unknown-linux-musl/release/containerbox | awk '{ print $3 }')" != "$UID" ]; then
|
||||||
|
rust-musl-builder sh -c "cd core && chown -R $UID:$UID target && chown -R $UID:$UID /root/.cargo"
|
||||||
|
fi
|
||||||
@@ -2,13 +2,17 @@
|
|||||||
|
|
||||||
cd "$(dirname "${BASH_SOURCE[0]}")"
|
cd "$(dirname "${BASH_SOURCE[0]}")"
|
||||||
|
|
||||||
set -e
|
set -ea
|
||||||
shopt -s expand_aliases
|
shopt -s expand_aliases
|
||||||
|
|
||||||
if [ -z "$ARCH" ]; then
|
if [ -z "$ARCH" ]; then
|
||||||
ARCH=$(uname -m)
|
ARCH=$(uname -m)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ "$ARCH" = "arm64" ]; then
|
||||||
|
ARCH="aarch64"
|
||||||
|
fi
|
||||||
|
|
||||||
USE_TTY=
|
USE_TTY=
|
||||||
if tty -s; then
|
if tty -s; then
|
||||||
USE_TTY="-it"
|
USE_TTY="-it"
|
||||||
@@ -26,4 +30,7 @@ alias 'rust-musl-builder'='docker run $USE_TTY --rm -e "RUSTFLAGS=$RUSTFLAGS" -v
|
|||||||
|
|
||||||
echo "FEATURES=\"$FEATURES\""
|
echo "FEATURES=\"$FEATURES\""
|
||||||
echo "RUSTFLAGS=\"$RUSTFLAGS\""
|
echo "RUSTFLAGS=\"$RUSTFLAGS\""
|
||||||
rust-musl-builder sh -c "cd core && cargo build --release --no-default-features --features cli,registry,$FEATURES --locked --bin registrybox --target=$ARCH-unknown-linux-musl && chown -R $UID:$UID target && chown -R $UID:$UID /root/.cargo"
|
rust-musl-builder sh -c "cd core && cargo build --release --no-default-features --features cli,registry,$FEATURES --locked --bin registrybox --target=$ARCH-unknown-linux-musl"
|
||||||
|
if [ "$(ls -nd core/target/$ARCH-unknown-linux-musl/release/registrybox | awk '{ print $3 }')" != "$UID" ]; then
|
||||||
|
rust-musl-builder sh -c "cd core && chown -R $UID:$UID target && chown -R $UID:$UID /root/.cargo"
|
||||||
|
fi
|
||||||
|
|||||||
@@ -2,13 +2,17 @@
|
|||||||
|
|
||||||
cd "$(dirname "${BASH_SOURCE[0]}")"
|
cd "$(dirname "${BASH_SOURCE[0]}")"
|
||||||
|
|
||||||
set -e
|
set -ea
|
||||||
shopt -s expand_aliases
|
shopt -s expand_aliases
|
||||||
|
|
||||||
if [ -z "$ARCH" ]; then
|
if [ -z "$ARCH" ]; then
|
||||||
ARCH=$(uname -m)
|
ARCH=$(uname -m)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ "$ARCH" = "arm64" ]; then
|
||||||
|
ARCH="aarch64"
|
||||||
|
fi
|
||||||
|
|
||||||
USE_TTY=
|
USE_TTY=
|
||||||
if tty -s; then
|
if tty -s; then
|
||||||
USE_TTY="-it"
|
USE_TTY="-it"
|
||||||
@@ -26,4 +30,7 @@ alias 'rust-musl-builder'='docker run $USE_TTY --rm -e "RUSTFLAGS=$RUSTFLAGS" -v
|
|||||||
|
|
||||||
echo "FEATURES=\"$FEATURES\""
|
echo "FEATURES=\"$FEATURES\""
|
||||||
echo "RUSTFLAGS=\"$RUSTFLAGS\""
|
echo "RUSTFLAGS=\"$RUSTFLAGS\""
|
||||||
rust-musl-builder sh -c "cd core && cargo build --release --no-default-features --features cli,daemon,$FEATURES --locked --bin startbox --target=$ARCH-unknown-linux-musl && chown -R $UID:$UID target && chown -R $UID:$UID /root/.cargo"
|
rust-musl-builder sh -c "cd core && cargo build --release --no-default-features --features cli,daemon,$FEATURES --locked --bin startbox --target=$ARCH-unknown-linux-musl"
|
||||||
|
if [ "$(ls -nd core/target/$ARCH-unknown-linux-musl/release/startbox | awk '{ print $3 }')" != "$UID" ]; then
|
||||||
|
rust-musl-builder sh -c "cd core && chown -R $UID:$UID target && chown -R $UID:$UID /root/.cargo"
|
||||||
|
fi
|
||||||
@@ -2,13 +2,17 @@
|
|||||||
|
|
||||||
cd "$(dirname "${BASH_SOURCE[0]}")"
|
cd "$(dirname "${BASH_SOURCE[0]}")"
|
||||||
|
|
||||||
set -e
|
set -ea
|
||||||
shopt -s expand_aliases
|
shopt -s expand_aliases
|
||||||
|
|
||||||
if [ -z "$ARCH" ]; then
|
if [ -z "$ARCH" ]; then
|
||||||
ARCH=$(uname -m)
|
ARCH=$(uname -m)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ "$ARCH" = "arm64" ]; then
|
||||||
|
ARCH="aarch64"
|
||||||
|
fi
|
||||||
|
|
||||||
USE_TTY=
|
USE_TTY=
|
||||||
if tty -s; then
|
if tty -s; then
|
||||||
USE_TTY="-it"
|
USE_TTY="-it"
|
||||||
@@ -26,4 +30,7 @@ alias 'rust-musl-builder'='docker run $USE_TTY --rm -e "RUSTFLAGS=$RUSTFLAGS" -v
|
|||||||
|
|
||||||
echo "FEATURES=\"$FEATURES\""
|
echo "FEATURES=\"$FEATURES\""
|
||||||
echo "RUSTFLAGS=\"$RUSTFLAGS\""
|
echo "RUSTFLAGS=\"$RUSTFLAGS\""
|
||||||
rust-musl-builder sh -c "cd core && cargo test --release --features=test,$FEATURES 'export_bindings_' && chown -R $UID:$UID startos/bindings && chown -R $UID:$UID target && chown -R $UID:$UID /root/.cargo"
|
rust-musl-builder sh -c "cd core && cargo test --release --features=test,$FEATURES 'export_bindings_' && chown \$UID:\$UID startos/bindings"
|
||||||
|
if [ "$(ls -nd core/startos/bindings | awk '{ print $3 }')" != "$UID" ]; then
|
||||||
|
rust-musl-builder sh -c "cd core && chown -R $UID:$UID startos/bindings && chown -R $UID:$UID target && chown -R $UID:$UID /root/.cargo"
|
||||||
|
fi
|
||||||
@@ -2,14 +2,18 @@
|
|||||||
|
|
||||||
cd "$(dirname "${BASH_SOURCE[0]}")"
|
cd "$(dirname "${BASH_SOURCE[0]}")"
|
||||||
|
|
||||||
set -e
|
set -ea
|
||||||
shopt -s expand_aliases
|
shopt -s expand_aliases
|
||||||
|
|
||||||
web="../web/dist/static"
|
web="../web/dist/static"
|
||||||
[ -d "$web" ] || mkdir -p "$web"
|
[ -d "$web" ] || mkdir -p "$web"
|
||||||
|
|
||||||
if [ -z "$PLATFORM" ]; then
|
if [ -z "$PLATFORM" ]; then
|
||||||
export PLATFORM=$(uname -m)
|
PLATFORM=$(uname -m)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$PLATFORM" = "arm64" ]; then
|
||||||
|
PLATFORM="aarch64"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cargo install --path=./startos --no-default-features --features=cli,docker,registry --bin start-cli --locked
|
cargo install --path=./startos --no-default-features --features=cli,docker,registry --bin start-cli --locked
|
||||||
|
|||||||
@@ -2,13 +2,17 @@
|
|||||||
|
|
||||||
cd "$(dirname "${BASH_SOURCE[0]}")"
|
cd "$(dirname "${BASH_SOURCE[0]}")"
|
||||||
|
|
||||||
set -e
|
set -ea
|
||||||
shopt -s expand_aliases
|
shopt -s expand_aliases
|
||||||
|
|
||||||
if [ -z "$ARCH" ]; then
|
if [ -z "$ARCH" ]; then
|
||||||
ARCH=$(uname -m)
|
ARCH=$(uname -m)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ "$ARCH" = "arm64" ]; then
|
||||||
|
ARCH="aarch64"
|
||||||
|
fi
|
||||||
|
|
||||||
USE_TTY=
|
USE_TTY=
|
||||||
if tty -s; then
|
if tty -s; then
|
||||||
USE_TTY="-it"
|
USE_TTY="-it"
|
||||||
@@ -26,4 +30,7 @@ alias 'rust-musl-builder'='docker run $USE_TTY --rm -e "RUSTFLAGS=$RUSTFLAGS" -v
|
|||||||
|
|
||||||
echo "FEATURES=\"$FEATURES\""
|
echo "FEATURES=\"$FEATURES\""
|
||||||
echo "RUSTFLAGS=\"$RUSTFLAGS\""
|
echo "RUSTFLAGS=\"$RUSTFLAGS\""
|
||||||
rust-musl-builder sh -c "apt-get update && apt-get install -y rsync && cd core && cargo test --release --features=test,$FEATURES --workspace --locked --target=$ARCH-unknown-linux-musl -- --skip export_bindings_ && chown -R $UID:$UID target && chown -R $UID:$UID /root/.cargo"
|
rust-musl-builder sh -c "apt-get update && apt-get install -y rsync && cd core && cargo test --release --features=test,$FEATURES --workspace --locked --target=$ARCH-unknown-linux-musl -- --skip export_bindings_ && chown \$UID:\$UID target"
|
||||||
|
if [ "$(ls -nd core/target | awk '{ print $3 }')" != "$UID" ]; then
|
||||||
|
rust-musl-builder sh -c "cd core && chown -R $UID:$UID target && chown -R $UID:$UID /root/.cargo"
|
||||||
|
fi
|
||||||
@@ -39,7 +39,7 @@ path = "src/main.rs"
|
|||||||
|
|
||||||
[features]
|
[features]
|
||||||
cli = []
|
cli = []
|
||||||
container-runtime = []
|
container-runtime = ["procfs", "unshare"]
|
||||||
daemon = []
|
daemon = []
|
||||||
registry = []
|
registry = []
|
||||||
default = ["cli", "daemon"]
|
default = ["cli", "daemon"]
|
||||||
@@ -153,7 +153,7 @@ pbkdf2 = "0.12.2"
|
|||||||
pin-project = "1.1.3"
|
pin-project = "1.1.3"
|
||||||
pkcs8 = { version = "0.10.2", features = ["std"] }
|
pkcs8 = { version = "0.10.2", features = ["std"] }
|
||||||
prettytable-rs = "0.10.0"
|
prettytable-rs = "0.10.0"
|
||||||
procfs = "0.16.0"
|
procfs = { version = "0.16.0", optional = true }
|
||||||
proptest = "1.3.1"
|
proptest = "1.3.1"
|
||||||
proptest-derive = "0.5.0"
|
proptest-derive = "0.5.0"
|
||||||
rand = { version = "0.8.5", features = ["std"] }
|
rand = { version = "0.8.5", features = ["std"] }
|
||||||
@@ -208,7 +208,7 @@ ts-rs = { git = "https://github.com/dr-bonez/ts-rs.git", branch = "feature/top-l
|
|||||||
typed-builder = "0.18.0"
|
typed-builder = "0.18.0"
|
||||||
which = "6.0.3"
|
which = "6.0.3"
|
||||||
unix-named-pipe = "0.2.0"
|
unix-named-pipe = "0.2.0"
|
||||||
unshare = "0.7.0"
|
unshare = { version = "0.7.0", optional = true }
|
||||||
url = { version = "2.4.1", features = ["serde"] }
|
url = { version = "2.4.1", features = ["serde"] }
|
||||||
urlencoding = "2.1.3"
|
urlencoding = "2.1.3"
|
||||||
uuid = { version = "1.4.1", features = ["v4"] }
|
uuid = { version = "1.4.1", features = ["v4"] }
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ pub struct Manifest {
|
|||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub git_hash: Option<GitHash>,
|
pub git_hash: Option<GitHash>,
|
||||||
pub title: String,
|
pub title: String,
|
||||||
pub version: exver::emver::Version,
|
pub version: String,
|
||||||
pub description: Description,
|
pub description: Description,
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub assets: Assets,
|
pub assets: Assets,
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
use std::collections::{BTreeMap, BTreeSet};
|
use std::collections::{BTreeMap, BTreeSet};
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
|
use std::str::FromStr;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
use exver::{ExtendedVersion, VersionRange};
|
use exver::{ExtendedVersion, VersionRange};
|
||||||
@@ -44,9 +45,9 @@ impl S9pk<TmpSource<PackSource>> {
|
|||||||
// manifest.json
|
// manifest.json
|
||||||
let manifest_raw = reader.manifest().await?;
|
let manifest_raw = reader.manifest().await?;
|
||||||
let manifest = from_value::<ManifestV1>(manifest_raw.clone())?;
|
let manifest = from_value::<ManifestV1>(manifest_raw.clone())?;
|
||||||
let mut new_manifest = Manifest::from(manifest.clone());
|
let mut new_manifest = Manifest::try_from(manifest.clone())?;
|
||||||
|
|
||||||
let images: BTreeMap<ImageId, bool> = manifest
|
let images: BTreeSet<(ImageId, bool)> = manifest
|
||||||
.package_procedures()
|
.package_procedures()
|
||||||
.filter_map(|p| {
|
.filter_map(|p| {
|
||||||
if let PackageProcedure::Docker(p) = p {
|
if let PackageProcedure::Docker(p) = p {
|
||||||
@@ -89,8 +90,6 @@ impl S9pk<TmpSource<PackSource>> {
|
|||||||
|
|
||||||
// images
|
// images
|
||||||
for arch in reader.docker_arches().await? {
|
for arch in reader.docker_arches().await? {
|
||||||
let images_dir = tmp_dir.join("images").join(&arch);
|
|
||||||
tokio::fs::create_dir_all(&images_dir).await?;
|
|
||||||
Command::new(CONTAINER_TOOL)
|
Command::new(CONTAINER_TOOL)
|
||||||
.arg("load")
|
.arg("load")
|
||||||
.input(Some(&mut reader.docker_images(&arch).await?))
|
.input(Some(&mut reader.docker_images(&arch).await?))
|
||||||
@@ -194,13 +193,18 @@ impl S9pk<TmpSource<PackSource>> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<ManifestV1> for Manifest {
|
impl TryFrom<ManifestV1> for Manifest {
|
||||||
fn from(value: ManifestV1) -> Self {
|
type Error = Error;
|
||||||
|
fn try_from(value: ManifestV1) -> Result<Self, Self::Error> {
|
||||||
let default_url = value.upstream_repo.clone();
|
let default_url = value.upstream_repo.clone();
|
||||||
Self {
|
Ok(Self {
|
||||||
id: value.id,
|
id: value.id,
|
||||||
title: value.title.into(),
|
title: value.title.into(),
|
||||||
version: ExtendedVersion::from(value.version).into(),
|
version: ExtendedVersion::from(
|
||||||
|
exver::emver::Version::from_str(&value.version)
|
||||||
|
.with_kind(ErrorKind::Deserialization)?,
|
||||||
|
)
|
||||||
|
.into(),
|
||||||
satisfies: BTreeSet::new(),
|
satisfies: BTreeSet::new(),
|
||||||
release_notes: value.release_notes,
|
release_notes: value.release_notes,
|
||||||
can_migrate_from: VersionRange::any(),
|
can_migrate_from: VersionRange::any(),
|
||||||
@@ -246,6 +250,6 @@ impl From<ManifestV1> for Manifest {
|
|||||||
git_hash: value.git_hash,
|
git_hash: value.git_hash,
|
||||||
os_version: value.eos_version,
|
os_version: value.eos_version,
|
||||||
has_config: value.config.is_some(),
|
has_config: value.config.is_some(),
|
||||||
}
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -109,20 +109,16 @@ pub fn handler<C: Context>() -> ParentHandler<C> {
|
|||||||
ParentHandler::<C>::new()
|
ParentHandler::<C>::new()
|
||||||
.subcommand(
|
.subcommand(
|
||||||
"launch",
|
"launch",
|
||||||
from_fn_blocking(subcontainer::launch::<ContainerCliContext>).no_display(),
|
from_fn_blocking(subcontainer::launch).no_display(),
|
||||||
)
|
)
|
||||||
.subcommand(
|
.subcommand(
|
||||||
"launch-init",
|
"launch-init",
|
||||||
from_fn_blocking(subcontainer::launch_init::<ContainerCliContext>).no_display(),
|
from_fn_blocking(subcontainer::launch_init).no_display(),
|
||||||
)
|
|
||||||
.subcommand(
|
|
||||||
"exec",
|
|
||||||
from_fn_blocking(subcontainer::exec::<ContainerCliContext>).no_display(),
|
|
||||||
)
|
)
|
||||||
|
.subcommand("exec", from_fn_blocking(subcontainer::exec).no_display())
|
||||||
.subcommand(
|
.subcommand(
|
||||||
"exec-command",
|
"exec-command",
|
||||||
from_fn_blocking(subcontainer::exec_command::<ContainerCliContext>)
|
from_fn_blocking(subcontainer::exec_command).no_display(),
|
||||||
.no_display(),
|
|
||||||
)
|
)
|
||||||
.subcommand(
|
.subcommand(
|
||||||
"create-fs",
|
"create-fs",
|
||||||
|
|||||||
@@ -8,9 +8,15 @@ use crate::rpc_continuations::Guid;
|
|||||||
use crate::service::effects::prelude::*;
|
use crate::service::effects::prelude::*;
|
||||||
use crate::util::Invoke;
|
use crate::util::Invoke;
|
||||||
|
|
||||||
|
#[cfg(feature = "container-runtime")]
|
||||||
mod sync;
|
mod sync;
|
||||||
|
|
||||||
|
#[cfg(not(feature = "container-runtime"))]
|
||||||
|
mod sync_dummy;
|
||||||
|
|
||||||
pub use sync::*;
|
pub use sync::*;
|
||||||
|
#[cfg(not(feature = "container-runtime"))]
|
||||||
|
use sync_dummy as sync;
|
||||||
|
|
||||||
#[derive(Debug, Deserialize, Serialize, Parser, TS)]
|
#[derive(Debug, Deserialize, Serialize, Parser, TS)]
|
||||||
#[serde(rename_all = "camelCase")]
|
#[serde(rename_all = "camelCase")]
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ use tokio::sync::oneshot;
|
|||||||
use unshare::Command as NSCommand;
|
use unshare::Command as NSCommand;
|
||||||
|
|
||||||
use crate::service::effects::prelude::*;
|
use crate::service::effects::prelude::*;
|
||||||
|
use crate::service::effects::ContainerCliContext;
|
||||||
|
|
||||||
const FWD_SIGNALS: &[c_int] = &[
|
const FWD_SIGNALS: &[c_int] = &[
|
||||||
SIGABRT, SIGALRM, SIGCONT, SIGHUP, SIGINT, SIGIO, SIGPIPE, SIGPROF, SIGQUIT, SIGTERM, SIGTRAP,
|
SIGABRT, SIGALRM, SIGCONT, SIGHUP, SIGINT, SIGIO, SIGPIPE, SIGPROF, SIGQUIT, SIGTERM, SIGTRAP,
|
||||||
@@ -130,8 +131,8 @@ impl ExecParams {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn launch<C: Context>(
|
pub fn launch(
|
||||||
_: C,
|
_: ContainerCliContext,
|
||||||
ExecParams {
|
ExecParams {
|
||||||
env,
|
env,
|
||||||
workdir,
|
workdir,
|
||||||
@@ -141,6 +142,8 @@ pub fn launch<C: Context>(
|
|||||||
}: ExecParams,
|
}: ExecParams,
|
||||||
) -> Result<(), Error> {
|
) -> Result<(), Error> {
|
||||||
use unshare::{Namespace, Stdio};
|
use unshare::{Namespace, Stdio};
|
||||||
|
|
||||||
|
use crate::service::cli::ContainerCliContext;
|
||||||
let mut sig = signal_hook::iterator::Signals::new(FWD_SIGNALS)?;
|
let mut sig = signal_hook::iterator::Signals::new(FWD_SIGNALS)?;
|
||||||
let mut cmd = NSCommand::new("/usr/bin/start-cli");
|
let mut cmd = NSCommand::new("/usr/bin/start-cli");
|
||||||
cmd.arg("subcontainer").arg("launch-init");
|
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(
|
nix::mount::mount(
|
||||||
Some("proc"),
|
Some("proc"),
|
||||||
¶ms.chroot.join("proc"),
|
¶ms.chroot.join("proc"),
|
||||||
@@ -281,8 +284,8 @@ pub fn launch_init<C: Context>(_: C, params: ExecParams) -> Result<(), Error> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn exec<C: Context>(
|
pub fn exec(
|
||||||
_: C,
|
_: ContainerCliContext,
|
||||||
ExecParams {
|
ExecParams {
|
||||||
env,
|
env,
|
||||||
workdir,
|
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()
|
params.exec()
|
||||||
}
|
}
|
||||||
|
|||||||
30
core/startos/src/service/effects/subcontainer/sync_dummy.rs
Normal file
30
core/startos/src/service/effects/subcontainer/sync_dummy.rs
Normal 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,
|
||||||
|
))
|
||||||
|
}
|
||||||
@@ -21,5 +21,5 @@
|
|||||||
"ackInstructions": {},
|
"ackInstructions": {},
|
||||||
"theme": "Dark",
|
"theme": "Dark",
|
||||||
"widgets": [],
|
"widgets": [],
|
||||||
"ack-welcome": "0.3.6-alpha.4"
|
"ack-welcome": "0.3.6-alpha.5"
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user