Adds in two new options to enable/disable and autostart systemd services
--[no-]deb-systemd-enable to enable the systemd service after install
--[no-]deb-systemd-auto-start to auto start the service after install
Additionally, any service start/stop/restart will use deb-systemd-invoke
wrapper if installed on the system
[Snaps][1] are self-contained squashfs images. Add basic support for
using them as inputs and outputs.
Typically Snapcraft is used to create snaps, but #1149 indicated a
desire to not use Snapcraft, so the snap is created natively, using
mksquashfs at the end to actually create the squashfs image. This may
not work for all use-cases (e.g. when the source doesn't already have
its dependencies bundled).
[1]: https://snapcraft.io/Resolve#1181
Signed-off-by: Kyle Fazzari <kyrofa@ubuntu.com>
If "--deb-templates" is used, fpm uses the wrong mode for this file. Since it is not an executable file, it should
not have the executable bits set. The lintian tool complains (with an error) that the mode is incorrect, and that
it should not be executable. Changing the mode to 0644 resolves this.
On input, the compression type is detected automatically. For output, the compression type is determined by the `--deb-compression` flag.
Fixesjordansissel/fpm#1540
Perl modules have both META.json and META.yml. In the JSON, the perl
dependency appears as a string `"5.004"`, but in YAML it appears as a
number `5.004`! This may cause fpm to fail when trying to convert the
perl version into a dependency, so we now always treat the perl version
as a string.
Fixes#1514
This will generate .changes file for Debian packages. Some Debian
repository management tools use .changes files for importing packages.
The command line option --(no-)deb-generate-changes allows to select to
generate the .changes file, the option --deb-dist allows to set a
distribution (like sid) for the package.
This fixes a bug where rpm output passes an rpm build macro `_tmppath`
that is empty, and on Fedora 27 this causes rpmbuild to fail.
The test suite catches this by making most all RPM specs fail, and with
this change, most of them now pass.
Alpine Linux describes the available control scripts at https://wiki.alpinelinux.org/wiki/Creating_an_Alpine_package.
This patch fixes an issue where `post-install` was registered multiple times, preventing `:after_install`, `:before_install`, `:before_upgrade`, and `:after_upgrade` from running the correct script.
While I am not a ruby programer, I was able to come up with a solution to
the issue I was running into when attempting to create a .deb package when
using the --config-files option.
PR #1253, while fixed the bug where `source.link=dest/source.link`
resulted in `source.link=dest/source.link/source.link` introduced a bug
where `source=dest/` syntax stopped working for symlinks (it is ok for
files). This is now fixed, as the symlink source now behaves the same as
it would with a single file input. Test case testing this behaviour is
also added.
Fixes#1395
PR #1379/#860 introduced a new behavior for --config-files that fetches
config files from the local filesystem. The prior behavior was to
require these files to be provided by the source package (`--source`
flag).
This patch makes a hybrid solution which does, for any given
`--config-files foo` flag:
* does the path `foo` already exist in the staging area? Do nothing.
This means the package source (`-s gem` for example) provided this file.
* or, does the path `foo` exist in the local filesystem? If so, copy it
into the staging area.
* otherwise, consider this to be an error that the --config-files
setting cannot find the file, and fpm will fail with an error.
Previously, if the symlink is included into the package and specified
with
my-sym-link.so=/usr/lib/my-sym-link.so
fpm would create directory, and put the
symlink inside `/usr/lib/my-sym-link.so/my-sym-link.so
which is very surprising and it doesn't follow the same
pattern as file copying is doing.
Fixes#1135
* Add test for copying symlinks
The test explicitly sets `preserve=true` and `remove_destination=true`
to show the currently broken behavior.
* Fix copy_entry for symlinks
The fourth argument to FileUtils.copy_entry is dereference_root to
which the value of remove_destination was passed.
The fix now passes the parameters in the required position.
* Add option --source-date-epoch-default and implement for deb output.
This is the first step towards supporting bit-for-bit identical
output files given identical inputs.
Alas, Apple's ar is not too good at reading gnu ar archives,
so always use ar_cmd to find ar.
* deb: remove lines duplicated in a tragic merge conflict
Probably introduced by 62d0060178 and not removed by 500f0c052f
* Add options --source-date-epoch-from-changelog and --gem-stagingdir to support bit-for-bit reproducible gem -> deb conversion
In those cases where we can get the release date out of the changelog,
use it; otherwise fall back to the value given by SOURCE_DATE_EPOCH aka --source-date-epoch-default.
--gem-stagingdir is a bit of a kludge, only needed because no
compiler supports https://reproducible-builds.org/specs/build-path-prefix-map/ yet.
Could have been global option, but not sure any other package handler
invokes compilers? Could hoist it up later.
Also:
- Defer initializing staging_path so subclasses can sneak in new value
- gem: remove build files
* gem: handle a few more gem changelog variants
* gem: also remove mkmf.log; lets ffi, kgio, raindrops, and ruby-ldap build reproducibly.
* deb: don't expect diffoscope to be installed in /usr/bin. Lets it be found on mac.
* gem: document new options
"pip install" in addition to the --index-url and --extra-index-url
flags, offers the `--find-links` flag, which tells pip to parse
an html index document looking for wheel/egg/source files without
expecting the "simple" pypi layout or to look in a local directory
for package files.
one common use-case for a virtualenv requirements.txt source
is to distribute ones software and the dependencies in one
debian file. unfortunately the current implementation doesn't
get one all the way to that goal. Starting with a local checkout
of a python package (containing one's own software, setup.py and
requirements.txt) fpm can create a package that contains the
software dependencies, but not the software itself.
this commit adds an option to also run the package setup.py
after populating the virtualenv, thus giving a means to
package one's own application *and* the dependencies in
one step
A bug pointed out by #1162 showed that `fpm --version` would fail when
a .fpm file was loaded.
Moving the short `fpm --version` handling to the `run` method lets us do
this check before we load FPMOPTS env or .fpm files.
Updated the tests to only try calling with a lone `-v` or `--version`
flag to verify this works with and without a .fpm file.
Fixes#1162 and #1125. Original work by @drwl!
The flags for chdir, input, and output aren't immediately intuitive
as to what they're short for. This commit adds long versions and a
spec stub for chdir. Resolves#1187.