-
Fixes
- Targets documentation URL was outdated
- Simplify searching for SSH keys in the
nerves.new
generated config
-
Updates
- Changes to new Elixir slack URL in template README.md
- Adds Discord to template README.md
- Fixes
- Nerves.Bootstrap would fail to start in some cases where the dependencies
had not been fetched and Nerves.Bootstrap would try to warn about the
:nerves
version requirement. This check has been moved todeps.precompile
which happens after dependencies are fetched and also helps halt the build process if the:nerves
version requirement is not
- Nerves.Bootstrap would fail to start in some cases where the dependencies
had not been fetched and Nerves.Bootstrap would try to warn about the
-
Potentially breaking changes
:nerves >= 1.8.0
is now required to use this version ofnerves_bootstrap
. If you keep up-to-date, then this won't be an issue for you.
-
Updates
- Removed legacy tasks (tooling now maintained in
:nerves
)
- Removed legacy tasks (tooling now maintained in
-
New project generator updates
- Default to regulatory domain (
00
) for WiFi- For US users, this means 5GHz won't work anymore since it's disabled in
00
(NO-IR = no initiating radiation) until you update your config to useUS
- For US users, this means 5GHz won't work anymore since it's disabled in
- Bumped all Nerves systems to latest
- Default to regulatory domain (
-
Updates
- Support Elixir 1.15/OTP 26
-
New project generator updates
- Adjust
vm.args.eex
based on Elixir version - Fix typo in templates/new/config/host.exs
- Run formatting as part of
mix nerves.new
- Adjust
:nerves_runtime
to be available on host - Add
nerves_system_mangopi_mq_pro
system :ring_logger
0.10.0
- Adjust
- Updates
- Use Nerves v1.10.0 in new projects
- Default to adding
-code_path_choice strict
to new projects to skip a few unnecessary path searches for archives - Default to moving the clock forward in erlinit. This reduces the time jump on boot for RTC-less devices.
- Updates
- Allow Nerves v1.9.0 to be used in new projects
- Use console logger by default in host mode. This is more like the default Elixir configuration.
- Updates
- Remove references to
:build_embedded
since that option is planned for removal in Elixir 1.15 and it wasn't needed.
- Remove references to
- Fixes
- Fixed backwards compatibility issue with building Nerves systems with Nerves 1.7.x.
-
Potentially breaking changes
- Elixir 1.11 or later is now required
- Move the core
mix
tooling to:nerves
- This is part of a bigger reorganization and adjustment to the bootstrap
tooling in order to reduce it's footprint. However, these changes have
been tested and are considered backwards compatible and most should not
see any impact from it. If you were using
Nerves.Bootstrap.Aliases
module directly, you may notice adjusted aliases listed.
- This is part of a bigger reorganization and adjustment to the bootstrap
tooling in order to reduce it's footprint. However, these changes have
been tested and are considered backwards compatible and most should not
see any impact from it. If you were using
-
Enhancements
- Add GRiSP2 to officially supported Nerves devices
- Improve message when unknown target is selected
- Add
--no-nerves-pack
to nerves.new options doc
-
New project generator updates
- Remove
system_registry
option from generator - toolshed 0.2.26
- shoehorn 0.9.1
- nerves_runtime 0.13.0
- ring_logger 0.8.5
- Remove
- New project generator updates
- Update deprecated config option to MDNSLite
- Update references to
mix burn
in new project comments - Update dependency versions to latest
- New project generator updates
- Remove old reference to Mix.Config.
- New project generator updates
- Update dependency versions to latest
- New project generator updates
- Update dependency versions to latest
- Add NervesMOTD to the
iex.exs
- Add more comments to commonly edited locations in the
mix.exs
- New project generator updates
-
Strip everything but docs with
MIX_ENV=dev
Since most users don't use debug symbols, strip them out of the beams even for dev builds. This keeps docs, though. Here's are some firmware sizes to see the effect:
circuits_quickstart_unstripped.fw 43597619 circuits_quickstart_docs.fw 33595640 circuits_quickstart_stripped.fw 33016963
As you can see, this saves ~10 MB and retains docs.
-
- New project generator updates
- Add
config/host.exs
so that there's a more obvious location for host-only configuration - Add
rootfs_overlay/etc/iex.exs
to the list of files to format withmix format
- Add
- New project generator updates
- Added
osd32mp1
to default targets in new project generator. See nerves_system_osd32mp1 for system information. - Update formatting to more closely match Elixir 1.11's new project generator
- Simplify the Nerves/Mix integration (now only an update to
config.exs
) - Bump Nerves to
~> 1.7.0
- Bump Shoehorn to
~> 0.7.0
- Disable busy waiting in the BEAM by default.
- Added
- New project generator updates
- Bump NervesPack to 0.4
which drops
:nerves_firwmare_ssh
in favor of:nerves_ssh
and:ssh_subsystem_fwup
for access and updates. - Bump Nerves to
~> 1.6.3
- Bump NervesRuntime to
~> 0.11.3
- Bump RingLogger to
~> 0.8.1
- Bump NervesPack to 0.4
which drops
- New project generator updates
- Update systems to latest versions.
- Add an example for overriding erlinit options using Mix config.
- New project generator updates
- Bump Nerves to 1.6 and update systems.
- Default to use
--nerves-pack
. - Remove options for
--init-gadget
.
- Enhancements
- Updated Elixir 1.10 deprecated function calls.
- Enhancements
-
Improved support for reproducible builds in new projects by setting
source_date_epoch
. Existing projects can add this to the:nerves
config.For example:
config :nerves, source_date_epoch: "1577467691"
-
Added support for generating new projects using
nerves_pack
instead ofnerves_init_gadget
. See nerves_pack for more information.For example:
mix nerves.new my_app --nerves-pack
-
- Enhancements
- Don't allow projects to be named
nerves
. Those won't work anyway.
- Don't allow projects to be named
- Enhancements
- Synchronize new project files to better match the versions from
mix new
- Synchronize new project files to better match the versions from
-
Enhancements
- Added
rpi4
to default targets in new project generator. See nerves_system_rpi4 for system information. - Update release config to only strip beams for
:prod
firmware.
- Added
-
Bug fixes
- Fix
--cookie
in new project generator for overriding the cookie.
- Fix
- Enhancements
- Updated new project generator to use Elixir ~> 1.9
- Bug fixes
- Change distillery to ~> 2.0 in the new project generator.
- Bug fixes
- Add distillery ~> 2.1 to the new project generator.
- Lock down the
nerves
dependency to ~> 1.4.5 in new projects.
- Bug fixes
- Compile distillery before nerves when included as an optional dependency.
- Enhancements
- New projects include nerves_init_gadget by default.
If you want a minimal project that does not include
nerves_init_gadget
, pass--no-init-gadget
.
- New projects include nerves_init_gadget by default.
If you want a minimal project that does not include
- Enhancements
- Create mix.exs files with
build_embedded: true
so that build products aren't stored in the source tree. This helps fix a source of confusion when switching targets and C/C++ build products don't get rebuilt. - Improve the missing ssh key error message in config.exs
- Create mix.exs files with
- Enhancements
- Added rpi3a to default supported targets list. See nerves_system_rpi3a.
- Bumped the minimum versions from 1.5 to 1.6.
- Improved error message when trying to create new projects that support Elixir ~> 1.8 while running a version that is < 1.8.
- Set required bootstrap archive version to ~> major.minor of the version of
nerves_bootstrap
that generated the new project.
- Bug fixes
- Configure nerves_bootstrap to support Elixir ~> 1.7. Use ~> 1.8 for new projects.
Version v1.4.0 adds support for Elixir 1.8's new built-in support for mix
targets. In Nerves, the MIX_TARGET
was used to select the appropriate set of
dependencies for a device. This lets you switch between building for different
boards and your host. Elixir 1.8 pulls this support into mix
and lets you
annotate dependencies for which targets they should be used.
See the project update guide to learn how to migrate your project.
- Enhancements
- New projects are generated for Elixir 1.8.
- Support non-RSA SSH keys in new projects.
- New project generator fixes
- Enable
multi_time_warp
mode by default. This fixes an issue where the Erlang system clock wouldn't get updated after the clock was set.
- Enable
- New project generator enhancements
- Update
ring_logger
to~> 0.6
. - Add
toolshed
~> 0.2
and updaterootfs_overlay/etc/iex.exs
- Enable Erlang Distribution when
Mix.env() != :prod
- Remove
ev3
from default supported target list - Update
bbb
system version requirement to~> 2.0
- Update all other system version requirements to
~> 1.5
- Update
-
Enhancements
- Updated docs for
mix nerves.new
.
- Updated docs for
-
Bug fixes
- Invoke Nerves environment when calling
deps.compile
. - Display warning instead of raising when calling
mix run
.
- Invoke Nerves environment when calling
- Enhancements
- Use
:dhcpd
instead of:linklocal
fornerves_init_gadget
defaults.
- Use
- New features
- Enable
heart
in the new project generator. This engages both a software-based watchdog (Erlang'sheart
feature) and a hardware-based one on systems that support it. If the Erlang VM becomes unresponsive, one of the watchdogs will reboot the processor. See the Erlangheart
documentation for changing timeouts and adding callbacks to your application. - Enable
build_embedded
. This ensures that C build products are separated based on target and prevents many causes of x86 build products ending up on ARM targets unintentionally.
- Enable
- Bug fixes
- Add RingLogger to all deps in new project generator.
This fixes an issue that causes new projects generated with
--init-gadget
to crash on boot running on the host.
- Add RingLogger to all deps in new project generator.
This fixes an issue that causes new projects generated with
Add support for generating new projects with nerves_init_gadget
.
To generate a new project with nerves_init_gadget
included,
pass --init-gadget
to mix nerves.new
For example:
mix nerves.new my_app --init-gadget
This release updates the new project generator to create projects that will work with Elixir 1.7 and Distillery 2.0.
- Enhancements
- Update new project generator to support
shoehorn
v0.4. - Bump minimum deps to latest versions.
- Update new project generator to support
- Enhancements
- Update new project generator to target 1.0 systems
- Bug Fixes
- Rename
provider
tobuild_runner
. Fixes issues with runningmix nerves.system.shell
andmix nerves.env --info
- Rename
- Updates
- New project generator no longer conditionally defines
application/0
inmix.exs
depending on target. It is recommended to conditionally choose the main supervisors children instead. - New project generator moves the dependency
shoehorn
to be included for bothhost
andtarget
environments.
- New project generator no longer conditionally defines
- Updates
- Various new project generator code format updates. Include
:runtime_tools
in:extra_applications
.
- Various new project generator code format updates. Include
- Bug fixes
- Only display Nerves environment helper text when the Nerves environment
is loaded. Fixes issues with running mix commands like
mix format -
that require the I/O to remain clean.
- Only display Nerves environment helper text when the Nerves environment
is loaded. Fixes issues with running mix commands like
- Updates
- Remove
build_embedded
from the mix.exs since it was unnecessary - Fix update check in
mix local.nerves
- Various changes to align new project generator with the one in Elixir 1.6.
- Add rootfs_overlay directory and populate it with an iex.exs to load the nerves_runtime IEX helpers. This replaces a common manual process of doing this or something similar afterwards.
- Add a commented out reference for enabling Erlang's heartbeat monitor
- Remove
- Bug fixes
- Various
mix format
updates to the template - Update template so that projects use v1.0.0-rc system releases so that they compile
- Fix archive update check logic
- Various
Nerves no longer automatically compiles any nerves_package
that is missing
it's pre-compiled artifact. This turned out to rarely be desired and caused
unexpectedly long compilation times when things like the Linux kernel or gcc
got compiled.
When a pre-compiled artifact is missing, Nerves will now tell you what your
options are to resolve this. It could be retrying mix deps.get
to download it
again. If you want to force compilation to happen, add a :nerves
option for
the desired package in your top level project:
{:nerves_system_rpi0, "~> 1.0-rc", nerves: [compile: true]}
- Bug Fixes
deps.get
anddeps.update
aliases should always be added to the project regardless of target.
The v0.7.x and earlier releases only required two aliases in your mix.exs
to
pull in the Nerves enhancements to mix.exs
. This releases adds more aliases.
Rather than requiring your mix.exs
file to be updated if the Nerves alias
hooks change in the future, we recommend updating your mix.exs
as follows:
# mix.exs
def project do
[
# ...
aliases: ["loadconfig": [&bootstrap/1]],
]
end
# Starting nerves_bootstrap pulls in the Nerves hooks to mix, but only
# if the MIX_TARGET environment variable is set.
defp bootstrap(args) do
Application.start(:nerves_bootstrap)
Mix.Task.run("loadconfig", args)
end
This release has the following changes:
- Enhancements
precompile
will compile all Nerves packages instead of only the system and its children.- Calling
run
whileMIX_TARGET
is set will raise an exception for trying to run cross compiled code on the host. Application.start(:nerves_bootstrap)
will attempt to add aliases to the mix project on the top of the stack ifMIX_TARGET
is set.
- Enhancements
- Added alias for
deps.update
to appendnerves.deps.get
to fetch artifacts.
- Added alias for
- Enhancements
-
Added Mix task
nerves.deps.get
-
nerves_bootstrap
will check for updates whennerves.deps.get
is called. -
Added
Nerves.Bootstrap.add_aliases/1
This helper function ensures that your project has the required Nerves mix aliases defined and in the correct execution order. The function takes the existing aliases as a keyword list and injects the required Nerves aliases. You will need to update yourmix.exs
target aliases to use this version ofnerves_bootstrap
like this:defp aliases(_target) do [ # Add custom mix aliases here ] |> Nerves.Bootstrap.add_aliases() end
You should also update your required dependency for nerves to
{:nerves, "~> 0.9", runtime: false}
-
- Bug Fixes
- disable precompiler when calling
mix nerves.clean
to prevent having to build the package so we can clean it. - Fixes issue where project dependencies that contain calls to
System.get_env
in their config or mix file or rebar deps that haverebar-config.script
overrides that makeos:getenv
calls were not being configured for the cross compile environment.
- disable precompiler when calling
- Enhancements
- Changed update location from Github to hex.pm
- Fixed compiler warning
- Synchronize new project template with Elixir 1.6 updates (includes formatter)
- Enhancements
- Removed unsupported systems from default targets and added x86_64.
- Moved to independent hex package.
- Enhancements
- [mix nerves.new] Use the new
rootfs_overlay
option rather than the deprecatedrootfs_additions
option and also recommend placing the relevant files in a top-levelrootfs_overlay
directory in the project root rather than inconfig/rootfs_additions
. - [mix nerves.new] system dependencies are appended as a list so there is a clear location for where system specific dependencies are added.
- [mix nerves.new] moved the config for bootloader above so that it is configured before importing target specific configuration.
- [mix nerves.new] Use the new
- Enhancements
- Improved error messages in
nerves.system.shell
Mix task. In particular, it now reminds you to setMIX_TARGET
.
- Improved error messages in
- Bug Fixes
- The
nerves.env
Mix task (used internally by Nerves) now checks that your deps have been fetched before trying to load. - Fix extraneous whitespace in
mix.exs
generated bymix nerves.new
- The
- Enhancements
- New
nerves.system.shell
Mix task, which provides a consistent way to configure a Buildroot-based Nerves system on both OSX and Linux. This replaces thenerves.shell
Mix task that was provided by thenerves
dependency, which had not been fully implemented. - Add an optional
--disabled
flag to thenerves.env
Mix task, which allows the Nerves environment to be compiled and loaded in a disabled state so that it doesn't try to actually cross-compile all the dependencies at load time. This is primarily used so that Mix tasks likenerves.system.shell
can run on the host without having to wait for dependencies to compile when they won't even be used. - Related to the previous change, the
nerves.precompile
task does not try to compile the toolchain and system whenNerves.Env
is loaded in a disabled state.
- New
- Bug Fixes
- System dependencies were not being built in order when system is the parent project
- Enhancements
- Pass +Bc in vm.args to avoid accidental CTRL+C
- Update deps and loosen version requirements
- Include
bootloader
in new projects
- Bug Fixes
- Choose the right compiler when parent project is a Nerves system package
- Enhancements
- nerves.new
- lock files are split by target
- Target dependencies are explicitly broken out in mix.exs through passing
--target
to the generator. Defaults to declaring all officially supported Nerves Targets. - A default cookie is generated and placed in the vm.args. the cookie can
be set by passing
--cookie
- nerves.new
- Bug Fixes
- Added support for OTP 20: Fixes issue with RegEx producing false positives.
- Enhancements
- nerves.new
- defaults to Host target env
- includes nerves_runtime
- prompt to install deps and run nerves.release.init
- unset MIX_TARGET when generating a new project
- nerves.new
- Bug Fixes
- removed rel/.gitignore from new project generator
- Enhancements
- Added
mix local.nerves
for updating the bootstrap archive
- Added
- Bug Fixes
- update nerves dep in new project generator to 0.4.0
- Enhancements
- Additional debug output when setting
NERVES_DEBUG=1
- Ability to output information about the loaded Nerves env via
mix nerves.env --info
- Additional debug output when setting
- Enhancements
- Support for nerves_package compiler
- Bug Fixes
- Do not warn on import Supervisor.Spec
- Silence alias location messages unless NERVES_DEBUG=1
- Enhancements
- Support for Elixir 1.3.2
- Enhancements
- Support for elixir ~> 1.3.0-rc.0