Packages
nerves
1.7.7
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/nerves/preflight.ex
defmodule Mix.Nerves.Preflight do
alias Nerves.Utils.WSL
@fwup_semver "~> 1.8"
def check! do
:os.type()
|> case do
{_, :linux} -> if WSL.running_on_wsl?(), do: :wsl, else: :linux
{_, type} -> type
end
|> check_platform!()
Mix.Task.run("nerves.loadpaths")
end
# OSX
defp check_platform!(:darwin) do
ensure_fwup_version!()
ensure_available!("mksquashfs", package: "squashfs")
ensure_available!("gstat", package: "gstat (coreutils)")
end
# NOTE: We currently require fwup to be installed both in WSL and in Windows
# because the fwup.exe in Windows is used when burning firmware to a physical
# memory card, and fwup in WSL is used for most other operations.
#
# WSL 2 adds some new lower-level integrations that may eliminate the need
# for this in the future, but we'll need to do some more research.
defp check_platform!(:wsl) do
ensure_fwup_version!()
ensure_fwup_version!("fwup.exe")
ensure_available!("mksquashfs", package: "squashfs")
end
# Non-WSL Linux
defp check_platform!(_) do
ensure_fwup_version!()
ensure_available!("mksquashfs", package: "squashfs")
end
def ensure_fwup_version!(fwup_bin \\ "fwup", vsn_requirement \\ @fwup_semver) do
ensure_available!(fwup_bin)
with {vsn, 0} <- Nerves.Port.cmd(fwup_bin, ["--version"]),
vsn = String.trim(vsn),
{:ok, req} = Version.parse_requirement(vsn_requirement),
true <- Version.match?(vsn, req) do
:ok
else
false ->
{vsn, 0} = Nerves.Port.cmd(fwup_bin, ["--version"])
Mix.raise("""
#{fwup_bin} #{vsn_requirement} is required for Nerves.
You are running #{vsn}.
Please see https://hexdocs.pm/nerves/installation.html#fwup
for installation instructions
""")
error ->
Mix.raise("""
Nerves encountered an error while checking host requirements for fwup
#{inspect(error)}
Please open a bug report for this issue on github.com/nerves-project/nerves
""")
end
end
def ensure_available!(executable, opts \\ []) do
if System.find_executable(executable) do
:ok
else
package = opts[:package] || executable
Mix.raise(missing_package_message(package))
end
end
defp missing_package_message(package) do
"""
#{package} is required by the Nerves tooling.
Please see https://hexdocs.pm/nerves/installation.html for installation
instructions.
"""
end
end