Packages
autonomic_linux
0.1.0
Linux isolation execution domain backend for the Autonomic Kernel architecture, providing cgroup v2, namespaces, seccomp filtering, and overlayfs sandboxing.
Current section
Files
Jump to
Current section
Files
autonomic_linux
mix.exs
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