Elixir Release Manager DEB generator
Adds simple [Debian Package][1] (DEB) generation to the exrm package manager.
Functionality list
-
Able to build debian packages:
- [x] With changelog
- [x] With control file
- Ability to add in pre/post install/remove scripts
-
Automatically builds init scripts:
- [x] Upstart
- [x] Systemd
- [ ] SysV
- Validates configuration before completing the build
- Add ability for you to replace file templates with your own
- Handle functionality for Hot Upgrades
- Merge debian to-be-deployed files with your own structure
External dependencies
Before using exrm-deb, you'll need the following commands installed and in your path:
tar(orgtarif you're on mac - you canbrew install gnu-tarif you don't already have it)aruname
Configuration
Exrm-deb relies on the following data in the mix.exs file being set:
defmodule Testapp.Mixfile do
use Mix.Project
def project do
[app: :testapp,
version: "0.0.1",
elixir: "~> 1.0",
+ description: "Create a deb for your elixir release with ease",
build_embedded: Mix.env == :prod,
start_permanent: Mix.env == :prod,
- deps: deps]
+ deps: deps,
+ package: package]
end
The package function must be set as per the [hex guidelines][2], but with some extra lines:
def package do
[
+ external_dependencies: [],
+ license_file: "LICENSE",
files: [ "lib", "mix.exs", "README*", "LICENSE"],
maintainers: ["John Hamelink <john@example.com>"],
licenses: ["MIT"],
vendor: "John Hamelink",
links: %{
"GitHub" => "https://github.com/johnhamelink/testapp",
"Docs" => "hexdocs.pm/testapp",
+ "Homepage" => "https://github.com/johnhamelink/testapp"
}
]
end
A list of configuration options you can add to package/0:
licenses- Array of strings
-
Can be something like
["Copyright <date> <company_name>"]if you are building private packages.
maintainers- Array of Strings
-
Should be in the format
name <email>
external_dependencies- Array of Strings
-
Should be in the format of
package-name (operator version_number)where operator is either<<,<=,=,>=, or>>- [read more about this here.][4]
maintainer_scripts- A keyword list of Strings
-
The keyword should be one of:
:pre_install,:post_install,:pre_uninstall, or:post_uninstall - The keyword should point to the path of a script you want to run at the moment in question.
vendor- String
- The distribution vendor that's creating the debian package. I normally just put my name or company name.
owner- A keyword list of Strings
-
If set, requires both
userandgroupkeys to be set. - This is used when building the archive to set the correct user and group
- Defaults to root for user & group.
Usage
You can build a deb at the same time as building a release by adding the --deb option to release.
mix release --deb
This task first constructs the release using exrm, then generates a deb file
for the release. The deb is built from scratch, retrieving default values such
as the name, version, etc using the mix.exs file.
The _build/deb directory tree, along with the rest of the release can be removed with mix release.clean
Please visit [exrm][3] for additional information.
Installation
The package can be installed as:
Add exrm_deb to your list of dependencies in
mix.exs:def deps do
[{:exrm_deb, "~> 0.0.1"}]end
Ensure exrm_deb is started before your application:
def application do
[applications: [:exrm_deb]]end
[1]:https://en.wikipedia.org/wiki/Deb_(file_format) [2]:https://hex.pm/docs/publish [3]:https://github.com/bitwalker/exrm [4]:https://www.debian.org/doc/manuals/maint-guide/dreq.en.html#control