Packages
nerves
1.14.1
1.15.0
1.14.3
1.14.2
1.14.1
1.14.0
1.13.2
1.13.1
1.13.0
1.12.0
1.11.3
1.11.2
1.11.1
1.11.0
1.10.5
1.10.4
1.10.3
1.10.2
1.10.1
1.10.0
1.9.3
1.9.2
retired
1.9.1
1.9.0
1.8.0
1.7.17
1.7.16
1.7.15
1.7.14
retired
1.7.13
1.7.12
1.7.11
1.7.10
1.7.9
1.7.8
1.7.7
1.7.6
1.7.5
1.7.4
1.7.3
1.7.2
retired
1.7.1
retired
1.7.0
retired
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.5.5
1.5.4
1.5.3
1.5.2
1.5.1
1.5.0
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.4
1.3.3
1.3.2
1.3.1
1.3.0
1.2.1
1.2.0
1.1.1
1.1.0
1.0.1
1.0.0
1.0.0-rc.2
1.0.0-rc.1
1.0.0-rc.0
0.11.0
0.10.1
0.10.0
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.3
0.8.2
0.8.1
0.8.0
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.4.0-rc.0
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.0
Craft and deploy bulletproof embedded software
Current section
Files
Jump to
Current section
Files
lib/mix/tasks/nerves.system.shell.ex
# SPDX-FileCopyrightText: 2022 Jon Carstens
#
# SPDX-License-Identifier: Apache-2.0
#
defmodule Mix.Tasks.Nerves.System.Shell do
@shortdoc "Enter a shell to configure a custom system"
@moduledoc """
Open a shell in a system's build directory.
In order to make the experience as similar as possible, we attach to a Docker
container on non-Linux platforms and run a sub-shell on Linux.
## Examples
Configure the system for the current project's target:
mix nerves.system.shell
"""
use Mix.Task
@standard_error_message """
Make sure you run this task from a Nerves-based project or the source directory of a custom Nerves system.
Also, set the MIX_TARGET environment variable to allow mix.exs to know which custom system dependency to use.
"""
@no_nerves_dep_error """
Nerves dependency not found in current Mix project.
#{@standard_error_message}
"""
@no_system_pkg_error """
Unable to locate a relevant Nerves system package.
#{@standard_error_message}
"""
@no_mix_target_error """
MIX_TARGET environment variable not set or set to "host".
#{@standard_error_message}
"""
@doc false
@spec run([String.t()]) :: :ok
def run(_argv) do
# Start disabled so that we can configure the system before building it
# for the first time.
try do
Mix.Task.run("nerves.env", ["--disable"])
rescue
e ->
case e do
%Mix.Error{message: "Unknown dependency nerves for environment " <> _env} ->
Mix.raise(@no_nerves_dep_error)
_ ->
reraise(e, __STACKTRACE__)
end
end
pkg = Nerves.Env.system()
if is_nil(pkg) do
case Mix.target() do
:host -> Mix.raise(@no_mix_target_error)
_ -> Mix.raise(@no_system_pkg_error)
end
end
{build_runner, _opts} = pkg.build_runner
build_runner.system_shell(pkg)
:ok
end
end