fpm 1.9.3 → 1.12.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/CHANGELOG.rst +53 -1
- data/bin/fpm +0 -1
- data/lib/fpm.rb +1 -0
- data/lib/fpm/package.rb +8 -4
- data/lib/fpm/package/apk.rb +4 -4
- data/lib/fpm/package/cpan.rb +6 -6
- data/lib/fpm/package/deb.rb +126 -19
- data/lib/fpm/package/dir.rb +3 -3
- data/lib/fpm/package/empty.rb +1 -1
- data/lib/fpm/package/freebsd.rb +1 -1
- data/lib/fpm/package/gem.rb +39 -12
- data/lib/fpm/package/pacman.rb +22 -10
- data/lib/fpm/package/pyfpm/get_metadata.py +5 -0
- data/lib/fpm/package/python.rb +31 -4
- data/lib/fpm/package/rpm.rb +26 -6
- data/lib/fpm/package/sh.rb +1 -1
- data/lib/fpm/package/snap.rb +130 -0
- data/lib/fpm/package/tar.rb +1 -1
- data/lib/fpm/package/virtualenv.rb +1 -2
- data/lib/fpm/package/zip.rb +1 -1
- data/lib/fpm/util/tar_writer.rb +1 -1
- data/lib/fpm/version.rb +1 -1
- data/templates/deb.erb +1 -1
- data/templates/deb/deb.changes.erb +30 -0
- data/templates/deb/postinst_upgrade.sh.erb +29 -8
- data/templates/deb/postrm_upgrade.sh.erb +5 -0
- data/templates/deb/preinst_upgrade.sh.erb +5 -0
- data/templates/deb/prerm_upgrade.sh.erb +12 -4
- data/templates/rpm.erb +12 -9
- data/templates/sh.erb +6 -1
- metadata +40 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 28f939bd20768768cb05026a39c8a270596368c654ec5606a43a0e75afa845ad
|
4
|
+
data.tar.gz: 0d7eea7108832e79994ba3ee9511c3715b384906f7ef3a2ab5e907cfc764609a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 555edd6cd5d4b0098e075011e48db96e52c454b8557735a51202307dcaeb4920a5efe93bb6d99cedf9d3ff95ff445c37059e1fc308e0602482977587d532e4b1
|
7
|
+
data.tar.gz: 2803ea8cb3af495d5fd20e75bee0eba11dc262ac59b86e63b75ef3cef7417440e88e1fec9172f7a1ea5cf0705e2ce36bc65e7b9c1c5469eb0e78b292ac822716
|
data/CHANGELOG.rst
CHANGED
@@ -1,6 +1,58 @@
|
|
1
1
|
Release Notes and Change Log
|
2
2
|
============================
|
3
3
|
|
4
|
+
1.12.0 (January 19, 2021)
|
5
|
+
^^^^^^^^^^^^^^^^^^^^^^^^^
|
6
|
+
|
7
|
+
* Pin ffi dependency to ruby ffi 1.12.x to try keeping fpm compatible with older/abandoned rubies like 2.0 and 2.1. (`#1709`_; Matt Patterson)
|
8
|
+
* deb: New flag to add 'set -e' to all scripts. `--deb-maintainerscripts-force-errorchecks` which defaults to off. (`#1697`_; Andreas Ulm)
|
9
|
+
* deb: Fix bug when converting rubygems to debs where certain constraints like `~>1` would generate a deb dependency that couldn't be satisfied. (`#1699`_; Vlastimil Holer)
|
10
|
+
* deb: Fix error 'uninitialized constant FPM::Package::Deb::Zlib' (`#1739`_, `#1740`_; Federico Lancerin)
|
11
|
+
* python: Prepend to PYTHONPATH instead of replacing it. This should help on platforms that rely heavily on PYTHONPATH, such as NixOSX (`#1711`_, `#1710`_; anarg)
|
12
|
+
* python: Add `--python-trusted-host` flag which passes `--trusted-host` flag to `pip` (`#1737`_; Vladimir Ponarevsky)
|
13
|
+
* Documentation improvements (`#1724`_, `#1738`_, `#1667`_, `#1636`_)
|
14
|
+
* Dockerfile updated to Alpine 3.12 (`#1745`_; Cameron Nemo)
|
15
|
+
* Remove the 'backports' deprecation warning (`#1727`_; Jose Galvez)
|
16
|
+
* sh: Performance improvement when printing package metadata (`#1729`_; James Logsdon, Ed Healy)
|
17
|
+
* rpm: Add support for `xzmt` compression (multithreaded xz compressor) to help when creating very large packages (several gigabytes). (`#1447`_, `#1419`_; amnobc)
|
18
|
+
* rpm: Add `--rpm-macro-expansion` flag to enable macro expansion in scripts during rpmbuild. See https://rpm.org/user_doc/scriptlet_expansion.html for more details. (`#1642`_; juliantrzeciak)
|
19
|
+
* deb: use correct control.tar filename (`#1668`_; Mike Perham)
|
20
|
+
|
21
|
+
1.11.0 (January 30, 2019)
|
22
|
+
^^^^^^^^^^^^^^^^^^^^^^^^^
|
23
|
+
|
24
|
+
* snap: Snap packages can now be created! (`#1490`_; kyrofa)
|
25
|
+
* Fix an installation problem where a dependency (childprocess) fails to install correctly. (#1592; Jordan Sissel)
|
26
|
+
|
27
|
+
1.10.2 (July 3, 2018)
|
28
|
+
^^^^^^^^^^^^^^^^^^^^^
|
29
|
+
|
30
|
+
* cpan: Fix a crash where fpm would crash trying to parse a perl version string (`#1515`_, `#1514`; Jordan Sissel, William N. Braswell, Jr)
|
31
|
+
|
32
|
+
1.10.1 (July 3, 2018)
|
33
|
+
^^^^^^^^^^^^^^^^^^^^^
|
34
|
+
|
35
|
+
* cpan: Fixes some package building by setting PERL5LIB correctly (`#1509`_, `#1511`_; William N. Braswell, Jr)
|
36
|
+
* cpan: Adds `--[no-]cpan-verbose` flag which, when set, runs `cpanm` with the `--verbose` flag (`#1511`_; William N. Braswell, Jr)
|
37
|
+
|
38
|
+
1.10.0 (May 21, 2018)
|
39
|
+
^^^^^^^^^^^^^^^^^^^^
|
40
|
+
|
41
|
+
* Pin `ruby-xz` dependency to one which allows Ruby versions older than 2.3.0 (`#1494`_; Marat Sharafutdinov)
|
42
|
+
* Documentation improvements: `#1488`_; Arthur Burkart. `#1384`_; Justin Kolberg. `#1452`_; Anatoli Babenia.
|
43
|
+
* python: Improve support for the `~=` dependency comparison. (`#1482`_; Roman Vasilyev)
|
44
|
+
* deb: Add `--deb-generate-changes` flag to have fpm output a `.changes` file (`#1492`_; Spida)
|
45
|
+
* deb: Add `--deb-dist` flag to set the target distribution (similar to `--rpm-dist`). (`#1492`_; Spida)
|
46
|
+
* apk: Make --before-install, --before-upgrade, and --after-upgrade work correctly. (`#1422`_; Charles R. Portwood II)
|
47
|
+
* rpm: add `xzmt` for multithreaded xz compression (Amnon BC)
|
48
|
+
* rpm: fix shell function name `install` conflicting with `install` program. In
|
49
|
+
postinst (after-install), the function is now called `_install` to avoid
|
50
|
+
conflicting with `/usr/bin/install` (`#1434`_; Torsten Schmidt)
|
51
|
+
* rpm: Allow binary "arch dependent" files in noarch rpms (Jordan Sissel)
|
52
|
+
* - deb: --config-files ? (`#1440`_, `#1443`_; NoBodyCam)
|
53
|
+
* FPM source repo now contains a Brewfile for use with Homebrew.
|
54
|
+
* FPM source repo has a Dockerfile for invoking fpm with docker. (`#1484`_, ;Allan Lewis
|
55
|
+
|
4
56
|
1.9.3 (September 11, 2017)
|
5
57
|
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
6
58
|
|
@@ -19,7 +71,7 @@ Release Notes and Change Log
|
|
19
71
|
* Fix bug so fpm can now copy symlinks correctly (`#1348`_; ServiusHack)
|
20
72
|
* apk: Improve performance (`#1358`_; Jan Delgado)
|
21
73
|
* cpan: Fix crash when CPAN query returns a version value that was a number and fpm was expecting a string. (`#1344`_, `#1343`_; liger1978)
|
22
|
-
* cpan: Fix MetaCPAN searches to use v1 of MetaCPAN's API. The v0 API is no longer provided by MetaCPAN. (`#1341`_, `#1339
|
74
|
+
* cpan: Fix MetaCPAN searches to use v1 of MetaCPAN's API. The v0 API is no longer provided by MetaCPAN. (`#1341`_, `#1339`_; Bob Bell)
|
23
75
|
* cpan: Have perl modules implicitly "provide" (`--provides`) capabilities. (`#1340`_; Bob Bell. `#1345`_; liger1978)
|
24
76
|
* cpan: Now transforms perl version values like "5.008001" to "5.8.1" (`#1342`_; Bob Bell)
|
25
77
|
* cpan: Use `>=` ("this version or newer") for package dependencies instead of `=` ("exactly this version"). (`#1338`_; Bob Bell)
|
data/bin/fpm
CHANGED
data/lib/fpm.rb
CHANGED
data/lib/fpm/package.rb
CHANGED
@@ -3,7 +3,8 @@ require "fpm/util" # local
|
|
3
3
|
require "pathname" # stdlib
|
4
4
|
require "find"
|
5
5
|
require "tmpdir" # stdlib
|
6
|
-
require "
|
6
|
+
require "ostruct"
|
7
|
+
require "backports/latest"
|
7
8
|
require "socket" # stdlib, for Socket.gethostname
|
8
9
|
require "shellwords" # stdlib, for Shellwords.escape
|
9
10
|
require "erb" # stdlib, for template processing
|
@@ -118,7 +119,10 @@ class FPM::Package
|
|
118
119
|
|
119
120
|
def initialize
|
120
121
|
# Attributes for this specific package
|
121
|
-
@attributes = {
|
122
|
+
@attributes = {
|
123
|
+
# Default work location
|
124
|
+
:workdir => ::Dir.tmpdir
|
125
|
+
}
|
122
126
|
|
123
127
|
# Reference
|
124
128
|
# http://www.debian.org/doc/manuals/maint-guide/first.en.html
|
@@ -312,7 +316,7 @@ class FPM::Package
|
|
312
316
|
# the path before returning.
|
313
317
|
#
|
314
318
|
# Wrapping Find.find in an Enumerator is required for sane operation in ruby 1.8.7,
|
315
|
-
# but requires the 'backports' gem (which is used in other places in fpm)
|
319
|
+
# but requires the 'backports/latest' gem (which is used in other places in fpm)
|
316
320
|
return Enumerator.new { |y| Find.find(staging_path) { |path| y << path } } \
|
317
321
|
.select { |path| path != staging_path } \
|
318
322
|
.select { |path| is_leaf.call(path) } \
|
@@ -507,7 +511,7 @@ class FPM::Package
|
|
507
511
|
end
|
508
512
|
end
|
509
513
|
end
|
510
|
-
|
514
|
+
|
511
515
|
# Get the contents of the script by a given name.
|
512
516
|
#
|
513
517
|
# If template_scripts? is set in attributes (often by the --template-scripts
|
data/lib/fpm/package/apk.rb
CHANGED
@@ -3,7 +3,7 @@ require "fpm/namespace"
|
|
3
3
|
require "fpm/package"
|
4
4
|
require "fpm/errors"
|
5
5
|
require "fpm/util"
|
6
|
-
require "backports"
|
6
|
+
require "backports/latest"
|
7
7
|
require "fileutils"
|
8
8
|
require "digest"
|
9
9
|
require 'digest/sha1'
|
@@ -144,9 +144,9 @@ class FPM::Package::APK< FPM::Package
|
|
144
144
|
scripts = {}
|
145
145
|
|
146
146
|
scripts = register_script('post-install', :after_install, scripts)
|
147
|
-
scripts = register_script('
|
148
|
-
scripts = register_script('
|
149
|
-
scripts = register_script('post-
|
147
|
+
scripts = register_script('pre-install', :before_install, scripts)
|
148
|
+
scripts = register_script('pre-upgrade', :before_upgrade, scripts)
|
149
|
+
scripts = register_script('post-upgrade', :after_upgrade, scripts)
|
150
150
|
scripts = register_script('pre-deinstall', :before_remove, scripts)
|
151
151
|
scripts = register_script('post-deinstall', :after_remove, scripts)
|
152
152
|
|
data/lib/fpm/package/cpan.rb
CHANGED
@@ -25,6 +25,9 @@ class FPM::Package::CPAN < FPM::Package
|
|
25
25
|
option "--test", :flag,
|
26
26
|
"Run the tests before packaging?", :default => true
|
27
27
|
|
28
|
+
option "--verbose", :flag,
|
29
|
+
"Produce verbose output from cpanm?", :default => false
|
30
|
+
|
28
31
|
option "--perl-lib-path", "PERL_LIB_PATH",
|
29
32
|
"Path of target Perl Libraries"
|
30
33
|
|
@@ -137,6 +140,7 @@ class FPM::Package::CPAN < FPM::Package
|
|
137
140
|
cpanm_flags += ["--mirror", "#{attributes[:cpan_mirror]}"] if !attributes[:cpan_mirror].nil?
|
138
141
|
cpanm_flags += ["--mirror-only"] if attributes[:cpan_mirror_only?] && !attributes[:cpan_mirror].nil?
|
139
142
|
cpanm_flags += ["--force"] if attributes[:cpan_cpanm_force?]
|
143
|
+
cpanm_flags += ["--verbose"] if attributes[:cpan_verbose?]
|
140
144
|
|
141
145
|
safesystem(attributes[:cpan_cpanm_bin], *cpanm_flags)
|
142
146
|
|
@@ -156,7 +160,7 @@ class FPM::Package::CPAN < FPM::Package
|
|
156
160
|
found_dependencies.each do |dep_name, version|
|
157
161
|
# Special case for representing perl core as a version.
|
158
162
|
if dep_name == "perl"
|
159
|
-
m = version.match(/^(\d)\.(\d{3})(\d{3})$/)
|
163
|
+
m = version.to_s.match(/^(\d)\.(\d{3})(\d{3})$/)
|
160
164
|
if m
|
161
165
|
version = m[1] + '.' + m[2].sub(/^0*/, '') + '.' + m[3].sub(/^0*/, '')
|
162
166
|
end
|
@@ -241,11 +245,7 @@ class FPM::Package::CPAN < FPM::Package
|
|
241
245
|
# Empty install_base to avoid local::lib being used.
|
242
246
|
"INSTALL_BASE=")
|
243
247
|
end
|
244
|
-
|
245
|
-
make = [ "env", "PERL5LIB=#{build_path("cpan/lib/perl5")}", "make" ]
|
246
|
-
else
|
247
|
-
make = [ "make" ]
|
248
|
-
end
|
248
|
+
make = [ "env", "PERL5LIB=#{build_path("cpan/lib/perl5")}", "make" ]
|
249
249
|
safesystem(*make)
|
250
250
|
safesystem(*(make + ["test"])) if attributes[:cpan_test?]
|
251
251
|
safesystem(*(make + ["DESTDIR=#{staging_path}", "install"]))
|
data/lib/fpm/package/deb.rb
CHANGED
@@ -3,9 +3,10 @@ require "fpm/namespace"
|
|
3
3
|
require "fpm/package"
|
4
4
|
require "fpm/errors"
|
5
5
|
require "fpm/util"
|
6
|
-
require "backports"
|
6
|
+
require "backports/latest"
|
7
7
|
require "fileutils"
|
8
8
|
require "digest"
|
9
|
+
require "zlib"
|
9
10
|
|
10
11
|
# Support for debian packages (.deb files)
|
11
12
|
#
|
@@ -22,7 +23,7 @@ class FPM::Package::Deb < FPM::Package
|
|
22
23
|
} unless defined?(SCRIPT_MAP)
|
23
24
|
|
24
25
|
# The list of supported compression types. Default is gz (gzip)
|
25
|
-
COMPRESSION_TYPES = [ "gz", "bzip2", "xz" ]
|
26
|
+
COMPRESSION_TYPES = [ "gz", "bzip2", "xz", "none" ]
|
26
27
|
|
27
28
|
option "--ignore-iteration-in-dependencies", :flag,
|
28
29
|
"For '=' (equal) dependencies, allow iterations on the specified " \
|
@@ -50,6 +51,8 @@ class FPM::Package::Deb < FPM::Package
|
|
50
51
|
value
|
51
52
|
end
|
52
53
|
|
54
|
+
option "--dist", "DIST-TAG", "Set the deb distribution.", :default => "unstable"
|
55
|
+
|
53
56
|
# Take care about the case when we want custom control file but still use fpm ...
|
54
57
|
option "--custom-control", "FILEPATH",
|
55
58
|
"Custom version of the Debian control file." do |control|
|
@@ -88,6 +91,10 @@ class FPM::Package::Deb < FPM::Package
|
|
88
91
|
File.expand_path(file)
|
89
92
|
end
|
90
93
|
|
94
|
+
option "--generate-changes", :flag,
|
95
|
+
"Generate PACKAGENAME.changes file.",
|
96
|
+
:default => false
|
97
|
+
|
91
98
|
option "--upstream-changelog", "FILEPATH", "Add FILEPATH as upstream changelog" do |file|
|
92
99
|
File.expand_path(file)
|
93
100
|
end
|
@@ -175,6 +182,10 @@ class FPM::Package::Deb < FPM::Package
|
|
175
182
|
next File.expand_path(file)
|
176
183
|
end
|
177
184
|
|
185
|
+
option "--systemd-enable", :flag , "Enable service on install or upgrade", :default => false
|
186
|
+
|
187
|
+
option "--systemd-auto-start", :flag , "Start service after install or upgrade", :default => false
|
188
|
+
|
178
189
|
option "--systemd-restart-after-upgrade", :flag , "Restart service after upgrade", :default => true
|
179
190
|
|
180
191
|
option "--after-purge", "FILE",
|
@@ -183,6 +194,11 @@ class FPM::Package::Deb < FPM::Package
|
|
183
194
|
File.expand_path(val) # Get the full path to the script
|
184
195
|
end # --after-purge
|
185
196
|
|
197
|
+
option "--maintainerscripts-force-errorchecks", :flag ,
|
198
|
+
"Activate errexit shell option according to lintian. " \
|
199
|
+
"https://lintian.debian.org/tags/maintainer-script-ignores-errors.html",
|
200
|
+
:default => false
|
201
|
+
|
186
202
|
def initialize(*args)
|
187
203
|
super(*args)
|
188
204
|
attributes[:deb_priority] = "extra"
|
@@ -259,10 +275,32 @@ class FPM::Package::Deb < FPM::Package
|
|
259
275
|
end # def input
|
260
276
|
|
261
277
|
def extract_info(package)
|
278
|
+
compression = `#{ar_cmd[0]} t #{package}`.split("\n").grep(/control.tar/).first.split(".").last
|
279
|
+
case compression
|
280
|
+
when "gz"
|
281
|
+
controltar = "control.tar.gz"
|
282
|
+
compression = "-z"
|
283
|
+
when "bzip2","bz2"
|
284
|
+
controltar = "control.tar.bz2"
|
285
|
+
compression = "-j"
|
286
|
+
when "xz"
|
287
|
+
controltar = "control.tar.xz"
|
288
|
+
compression = "-J"
|
289
|
+
when 'tar'
|
290
|
+
controltar = "control.tar"
|
291
|
+
compression = ""
|
292
|
+
when nil
|
293
|
+
raise FPM::InvalidPackageConfiguration, "Missing control.tar in deb source package #{package}"
|
294
|
+
else
|
295
|
+
raise FPM::InvalidPackageConfiguration,
|
296
|
+
"Unknown compression type '#{compression}' for control.tar in deb source package #{package}"
|
297
|
+
end
|
298
|
+
|
262
299
|
build_path("control").tap do |path|
|
263
300
|
FileUtils.mkdir(path) if !File.directory?(path)
|
301
|
+
# unpack the control.tar.{,gz,bz2,xz} from the deb package into staging_path
|
264
302
|
# Unpack the control tarball
|
265
|
-
safesystem(ar_cmd[0] + " p #{package}
|
303
|
+
safesystem(ar_cmd[0] + " p #{package} #{controltar} | tar #{compression} -xf - -C #{path}")
|
266
304
|
|
267
305
|
control = File.read(File.join(path, "control"))
|
268
306
|
|
@@ -370,15 +408,18 @@ class FPM::Package::Deb < FPM::Package
|
|
370
408
|
when "xz"
|
371
409
|
datatar = "data.tar.xz"
|
372
410
|
compression = "-J"
|
411
|
+
when 'tar'
|
412
|
+
datatar = "data.tar"
|
413
|
+
compression = ""
|
414
|
+
when nil
|
415
|
+
raise FPM::InvalidPackageConfiguration, "Missing data.tar in deb source package #{package}"
|
373
416
|
else
|
374
417
|
raise FPM::InvalidPackageConfiguration,
|
375
|
-
"Unknown compression type '#{
|
376
|
-
"in deb source package #{package}"
|
418
|
+
"Unknown compression type '#{compression}' for data.tar in deb source package #{package}"
|
377
419
|
end
|
378
420
|
|
379
421
|
# unpack the data.tar.{gz,bz2,xz} from the deb package into staging_path
|
380
|
-
safesystem(ar_cmd[0] + " p #{package} #{datatar} "
|
381
|
-
"| tar #{compression} -xf - -C #{staging_path}")
|
422
|
+
safesystem(ar_cmd[0] + " p #{package} #{datatar} | tar #{compression} -xf - -C #{staging_path}")
|
382
423
|
end # def extract_files
|
383
424
|
|
384
425
|
def output(output_path)
|
@@ -422,6 +463,7 @@ class FPM::Package::Deb < FPM::Package
|
|
422
463
|
raise "#{name}: tar is insufficient to support source_date_epoch."
|
423
464
|
end
|
424
465
|
|
466
|
+
attributes[:deb_systemd] = []
|
425
467
|
attributes.fetch(:deb_systemd_list, []).each do |systemd|
|
426
468
|
name = File.basename(systemd, ".service")
|
427
469
|
dest_systemd = staging_path("lib/systemd/system/#{name}.service")
|
@@ -429,19 +471,19 @@ class FPM::Package::Deb < FPM::Package
|
|
429
471
|
FileUtils.cp(systemd, dest_systemd)
|
430
472
|
File.chmod(0644, dest_systemd)
|
431
473
|
|
432
|
-
#
|
433
|
-
attributes[:deb_systemd]
|
474
|
+
# add systemd service name to attribute
|
475
|
+
attributes[:deb_systemd] << name
|
434
476
|
end
|
435
477
|
|
436
|
-
if script?(:before_upgrade) or script?(:after_upgrade) or attributes[:deb_systemd]
|
478
|
+
if script?(:before_upgrade) or script?(:after_upgrade) or attributes[:deb_systemd].any?
|
437
479
|
puts "Adding action files"
|
438
480
|
if script?(:before_install) or script?(:before_upgrade)
|
439
481
|
scripts[:before_install] = template("deb/preinst_upgrade.sh.erb").result(binding)
|
440
482
|
end
|
441
|
-
if script?(:before_remove) or attributes[:deb_systemd]
|
483
|
+
if script?(:before_remove) or not attributes[:deb_systemd].empty?
|
442
484
|
scripts[:before_remove] = template("deb/prerm_upgrade.sh.erb").result(binding)
|
443
485
|
end
|
444
|
-
if script?(:after_install) or script?(:after_upgrade) or attributes[:deb_systemd]
|
486
|
+
if script?(:after_install) or script?(:after_upgrade) or attributes[:deb_systemd].any?
|
445
487
|
scripts[:after_install] = template("deb/postinst_upgrade.sh.erb").result(binding)
|
446
488
|
end
|
447
489
|
if script?(:after_remove)
|
@@ -553,6 +595,9 @@ class FPM::Package::Deb < FPM::Package
|
|
553
595
|
when "xz"
|
554
596
|
datatar = build_path("data.tar.xz")
|
555
597
|
compression = "-J"
|
598
|
+
when "none"
|
599
|
+
datatar = build_path("data.tar")
|
600
|
+
compression = ""
|
556
601
|
else
|
557
602
|
raise FPM::InvalidPackageConfiguration,
|
558
603
|
"Unknown compression type '#{self.attributes[:deb_compression]}'"
|
@@ -574,6 +619,30 @@ class FPM::Package::Deb < FPM::Package
|
|
574
619
|
safesystem(*ar_cmd, output_path, "debian-binary", "control.tar.gz", datatar)
|
575
620
|
end
|
576
621
|
end
|
622
|
+
|
623
|
+
# if a PACKAGENAME.changes file is to be created
|
624
|
+
if self.attributes[:deb_generate_changes?]
|
625
|
+
distribution = self.attributes[:deb_dist]
|
626
|
+
|
627
|
+
# gather information about the files to distribute
|
628
|
+
files = [ output_path ]
|
629
|
+
changes_files = []
|
630
|
+
files.each do |path|
|
631
|
+
changes_files.push({
|
632
|
+
:name => path,
|
633
|
+
:size => File.size?(path),
|
634
|
+
:md5sum => Digest::MD5.file(path).hexdigest,
|
635
|
+
:sha1sum => Digest::SHA1.file(path).hexdigest,
|
636
|
+
:sha256sum => Digest::SHA2.file(path).hexdigest,
|
637
|
+
})
|
638
|
+
end
|
639
|
+
|
640
|
+
# write change infos to .changes file
|
641
|
+
changes_path = File.basename(output_path, '.deb') + '.changes'
|
642
|
+
changes_data = template("deb/deb.changes.erb").result(binding)
|
643
|
+
File.write(changes_path, changes_data)
|
644
|
+
logger.log("Created changes", :path => changes_path)
|
645
|
+
end # if deb_generate_changes
|
577
646
|
end # def output
|
578
647
|
|
579
648
|
def converted_from(origin)
|
@@ -652,8 +721,13 @@ class FPM::Package::Deb < FPM::Package
|
|
652
721
|
name, version = dep.gsub(/[()~>]/, "").split(/ +/)[0..1]
|
653
722
|
nextversion = version.split(".").collect { |v| v.to_i }
|
654
723
|
l = nextversion.length
|
655
|
-
|
656
|
-
|
724
|
+
if l > 1
|
725
|
+
nextversion[l-2] += 1
|
726
|
+
nextversion[l-1] = 0
|
727
|
+
else
|
728
|
+
# Single component versions ~> 1
|
729
|
+
nextversion[l-1] += 1
|
730
|
+
end
|
657
731
|
nextversion = nextversion.join(".")
|
658
732
|
return ["#{name} (>= #{version})", "#{name} (<< #{nextversion})"]
|
659
733
|
elsif (m = dep.match(/(\S+)\s+\(!= (.+)\)/))
|
@@ -719,11 +793,30 @@ class FPM::Package::Deb < FPM::Package
|
|
719
793
|
write_triggers # write trigger config to 'triggers' file
|
720
794
|
write_md5sums # write the md5sums file
|
721
795
|
|
796
|
+
# Tar up the staging_path into control.tar.{compression type}
|
797
|
+
case self.attributes[:deb_compression]
|
798
|
+
when "gz", nil
|
799
|
+
controltar = "control.tar.gz"
|
800
|
+
compression = "-z"
|
801
|
+
when "bzip2"
|
802
|
+
controltar = "control.tar.bz2"
|
803
|
+
compression = "-j"
|
804
|
+
when "xz"
|
805
|
+
controltar = "control.tar.xz"
|
806
|
+
compression = "-J"
|
807
|
+
when "none"
|
808
|
+
controltar = "control.tar"
|
809
|
+
compression = ""
|
810
|
+
else
|
811
|
+
raise FPM::InvalidPackageConfiguration,
|
812
|
+
"Unknown compression type '#{self.attributes[:deb_compression]}'"
|
813
|
+
end
|
814
|
+
|
722
815
|
# Make the control.tar.gz
|
723
|
-
build_path(
|
816
|
+
build_path(controltar).tap do |controltar|
|
724
817
|
logger.info("Creating", :path => controltar, :from => control_path)
|
725
818
|
|
726
|
-
args = [ tar_cmd, "-C", control_path, "-
|
819
|
+
args = [ tar_cmd, "-C", control_path, compression, "-cf", controltar,
|
727
820
|
"--owner=0", "--group=0", "--numeric-owner", "." ]
|
728
821
|
if tar_cmd_supports_sort_names_and_set_mtime? and not attributes[:source_date_epoch].nil?
|
729
822
|
# Force deterministic file order and timestamp
|
@@ -827,11 +920,25 @@ class FPM::Package::Deb < FPM::Package
|
|
827
920
|
|
828
921
|
# scan all conf file paths for files and add them
|
829
922
|
config_files.each do |path|
|
923
|
+
logger.debug("Checking if #{path} exists")
|
924
|
+
cfe = File.exist?("#{path}")
|
925
|
+
logger.debug("Check result #{cfe}")
|
830
926
|
begin
|
831
927
|
add_path(path, allconfigs)
|
832
928
|
rescue Errno::ENOENT
|
833
|
-
|
834
|
-
|
929
|
+
if !cfe
|
930
|
+
raise FPM::InvalidPackageConfiguration,
|
931
|
+
"Error trying to use '#{path}' as a config file in the package. Does it exist?"
|
932
|
+
else
|
933
|
+
dcl = File.join(staging_path, path)
|
934
|
+
if !File.exist?("#{dcl}")
|
935
|
+
logger.debug("Adding config file #{path} to Staging area #{staging_path}")
|
936
|
+
FileUtils.mkdir_p(File.dirname(dcl))
|
937
|
+
FileUtils.cp_r path, dcl
|
938
|
+
else
|
939
|
+
logger.debug("Config file aready exists in staging area.")
|
940
|
+
end
|
941
|
+
end
|
835
942
|
end
|
836
943
|
end
|
837
944
|
|
@@ -887,7 +994,7 @@ class FPM::Package::Deb < FPM::Package
|
|
887
994
|
|
888
995
|
if attributes[:deb_templates]
|
889
996
|
FileUtils.cp(attributes[:deb_templates], control_path("templates"))
|
890
|
-
File.chmod(
|
997
|
+
File.chmod(0644, control_path("templates"))
|
891
998
|
end
|
892
999
|
end # def write_debconf
|
893
1000
|
|