Packages
nerves
1.6.3
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/nerves/distillery.ex
if Code.ensure_loaded?(Distillery.Releases.Plugin) do
defmodule Nerves.Distillery do
use Distillery.Releases.Plugin
alias Distillery.Releases.{Release, Shell}
def before_assembly(release, _opts) do
if Nerves.Env.loaded?() do
vm_args = Map.get(release.profile, :vm_args) || "rel/vm.args"
plugins = order_plugins(release.profile.plugins)
profile =
release.profile
|> Map.put(:dev_mode, false)
|> Map.put(:include_src, false)
|> Map.put(:include_erts, System.get_env("ERL_LIB_DIR"))
|> Map.put(:vm_args, vm_args)
|> Map.put(:plugins, plugins)
%{release | profile: profile}
else
release
end
end
# After assembling the release, generate a file that sets the filesystem order
# priority
def after_assembly(%Release{} = release, _opts) do
if Nerves.Env.loaded?() do
bootfile_name = Application.get_env(:nerves, :firmware)[:bootfile] || "shoehorn.boot"
bootfile_path =
Path.join([release.profile.output_dir, "releases", release.version, bootfile_name])
case File.read(bootfile_path) do
{:ok, bootfile} ->
Nerves.Release.write_rootfs_priorities(
release.applications,
release.profile.output_dir,
bootfile
)
_ ->
Shell.warn("""
Unable to load bootfile: #{inspect(bootfile_path)}
Skipping rootfs priority file generation
""")
end
end
release
end
def before_package(%Release{} = release, _opts) do
release
end
def after_package(%Release{} = release, _opts) do
release
end
def after_cleanup(_args, _opts) do
:noop
end
# Make sure the Shoehorn plugin executes before the Nerves plugin
defp order_plugins(plugins) do
if Enum.find(plugins, &shoehorn_plugin/1) != nil do
shoehorn_idx = Enum.find_index(plugins, &shoehorn_plugin/1)
nerves_idx = Enum.find_index(plugins, &nerves_plugin/1)
if nerves_idx < shoehorn_idx do
plugins
|> List.replace_at(nerves_idx, Enum.find(plugins, &shoehorn_plugin/1))
|> List.replace_at(shoehorn_idx, Enum.find(plugins, &nerves_plugin/1))
else
plugins
end
else
plugins
end
end
defp shoehorn_plugin({Shoehorn, _}), do: true
defp shoehorn_plugin({_, _}), do: false
defp nerves_plugin({Nerves, _}), do: true
defp nerves_plugin({_, _}), do: false
end
end