Packages

Linux isolation execution domain backend for the Autonomic Kernel architecture, providing cgroup v2, namespaces, seccomp filtering, and overlayfs sandboxing.

Current section

Files

Jump to
Raw

mix.exs

defmodule Autonomic.Linux.MixProject do
use Mix.Project
@version "0.1.0"
@source_url "https://github.com/nshkrdotcom/autonomic"
@homepage_url "https://hex.pm/packages/autonomic_linux"
@docs_url "https://hexdocs.pm/autonomic_linux"
def project do
[
app: :autonomic_linux,
version: @version,
elixir: "~> 1.20",
start_permanent: Mix.env() == :prod,
deps: deps(),
aliases: aliases(),
description: description(),
package: package(),
docs: docs(),
name: "Autonomic Linux",
source_url: @source_url,
homepage_url: @homepage_url,
elixirc_paths: elixirc_paths(Mix.env())
]
end
def application do
[
extra_applications: [:logger, :crypto, :ssl],
mod: {Autonomic.Linux.Application, []}
]
end
defp elixirc_paths(:test), do: ["lib", "test/support"]
defp elixirc_paths(_), do: ["lib"]
defp deps do
[
autonomic_dependency(),
{:ex_doc, "~> 0.40", only: :dev, runtime: false},
{:credo, "~> 1.7", only: [:dev, :test], runtime: false},
{:dialyxir, "~> 1.4", only: [:dev, :test], runtime: false}
]
end
defp autonomic_dependency, do: {:autonomic, "~> 0.1.0"}
defp aliases do
[
"compile.native": &compile_native/1,
compile: ["compile.native", "compile"]
]
end
defp compile_native(_) do
manifest = Path.expand("native/autonomic_launcher/Cargo.toml", __DIR__)
priv_dir = Path.expand("priv", __DIR__)
File.mkdir_p!(priv_dir)
cargo =
System.find_executable("cargo") ||
Mix.raise("Rust/Cargo is required to build autonomic_linux")
target_dir = Path.expand("native/autonomic_launcher/target", __DIR__)
unless File.regular?(manifest), do: Mix.raise("Missing native launcher sources: #{manifest}")
case System.cmd(
cargo,
[
"build",
"--locked",
"--release",
"--manifest-path",
manifest,
"--target-dir",
target_dir
],
stderr_to_stdout: true
) do
{_, 0} ->
built_binary = Path.join(target_dir, "release/autonomic_launcher")
dest = Path.join(priv_dir, "autonomic_launcher")
File.cp!(built_binary, dest)
File.chmod!(dest, 0o755)
{output, status} ->
Mix.raise("Native launcher build failed (exit #{status}):\n#{output}")
end
end
defp description do
"""
Linux isolation execution domain backend for the Autonomic Kernel architecture,
providing cgroup v2, namespaces, seccomp filtering, and overlayfs sandboxing.
"""
end
defp package do
[
name: "autonomic_linux",
description: description(),
readme: "README.md",
files: ~w(
lib
native/autonomic_launcher/src
native/autonomic_launcher/Cargo.toml
native/autonomic_launcher/Cargo.lock
config
assets
guides
.formatter.exs
CHANGELOG.md
LICENSE
README.md
mix.exs
),
licenses: ["MIT"],
links: %{
"GitHub" => @source_url,
"HexDocs" => @docs_url,
"Changelog" => "#{@source_url}/blob/main/packages/autonomic_linux/CHANGELOG.md",
"License" => "#{@source_url}/blob/main/packages/autonomic_linux/LICENSE"
},
maintainers: ["nshkrdotcom"]
]
end
defp docs do
[
main: "readme",
name: "Autonomic Linux",
source_ref: "v#{@version}-autonomic_linux",
source_url: @source_url,
homepage_url: @docs_url,
assets: %{"assets" => "assets"},
logo: "assets/autonomic_linux.svg",
extras: [
"README.md": [filename: "readme", title: "Overview"],
"CHANGELOG.md": [title: "Changelog"],
LICENSE: [title: "License"],
"guides/01-linux-isolation.md": [title: "Linux Isolation"],
"guides/02-launcher-protocol.md": [title: "Launcher Protocol"],
"guides/03-host-provisioning.md": [title: "Host Provisioning"],
"guides/04-trust-boundary-and-control-plane.md": [title: "Trust Boundary & Control Plane"]
],
groups_for_extras: [
Overview: ["README.md", "CHANGELOG.md", "LICENSE"],
Guides: [
"guides/01-linux-isolation.md",
"guides/02-launcher-protocol.md",
"guides/03-host-provisioning.md",
"guides/04-trust-boundary-and-control-plane.md"
]
],
groups_for_modules: [
"Linux Backend": [
Autonomic.Linux.Application,
Autonomic.Linux.Backend,
Autonomic.Linux.Launcher,
Autonomic.Linux.Preflight
]
]
]
end
end