Nixpkgs
Packer {#sec-packer}
Packer {#sec-packer}
Packer is a tool for creating identical machine images for multiple platforms from a single source configuration.
Using Packer with plugins {#sec-packer-with-plugins}
Packer's functionality is extended through
plugins. Rather than
letting Packer download plugins at runtime, you can build a Packer wrapper that
bundles the plugins you need with packer.withPlugins.
packer.withPlugins takes a function that receives the set of available plugins
and returns the list of plugins to include:
packer.withPlugins (ps: [ ps.docker ])
This produces a packer executable wrapped with the PACKER_PLUGIN_PATH
environment variable set, so the selected plugins are available without a
separate packer plugins install step.
For example, to get a development shell with Packer and the Docker plugin:
{
pkgs ? import <nixpkgs> { },
}:
pkgs.mkShell {
packages = [
(pkgs.packer.withPlugins (ps: [ ps.docker ]))
];
}
Multiple plugins can be selected at once:
packer.withPlugins (ps: [
ps.docker
ps.qemu
])
Listing available plugins {#sec-packer-list-plugins}
The packaged plugins are exposed as the packer.plugins attribute set. To list
every plugin available in your version of Nixpkgs, query its attribute names:
$ nix eval nixpkgs#packer.plugins --apply builtins.attrNames
[ "docker" "qemu" ]
Without flakes:
$ nix-env -f '<nixpkgs>' -qaP -A packer.plugins
packer.plugins.docker packer-plugin-docker-1.1.2
packer.plugins.qemu packer-plugin-qemu-1.1.4
The attribute name (for example docker or qemu) is what you pass to
packer.withPlugins.
Notes:
mkPackerPlugincurrently only supportsfetchFromGitHubas the fetcher.