fpm 1.10.2 → 1.11.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 +7 -0
- data/lib/fpm.rb +1 -0
- data/lib/fpm/package/deb.rb +55 -8
- data/lib/fpm/package/rpm.rb +2 -1
- data/lib/fpm/package/snap.rb +130 -0
- data/lib/fpm/package/virtualenv.rb +1 -2
- data/lib/fpm/version.rb +1 -1
- data/templates/deb.erb +1 -1
- data/templates/deb/deb.changes.erb +2 -3
- metadata +8 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 24a4dd08de1d4ad02888c110b88ab0d6fd590d4d913aba61ec459d126fb84d40
|
4
|
+
data.tar.gz: d8c7e7867cff9198ee1d170a17534946a8cb82c1217ddb09d316f061e3be86d2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: df2cbe11e18c252ef87d75f724abb3de218be2b9050e8d1918c6d323ab49e02b84793a4de327f522f04eca2fa56d90d5ba50a56f49fb36f6d5e976f10a6b4e56
|
7
|
+
data.tar.gz: 3b93a0208cb451ee13c4cdc65adec6e68c46e2619f2d54114cfa6e4745be52d28ba12223701fc496866c4878b914f896232a389b0f37f07667c80224f6724933
|
data/CHANGELOG.rst
CHANGED
@@ -1,6 +1,12 @@
|
|
1
1
|
Release Notes and Change Log
|
2
2
|
============================
|
3
3
|
|
4
|
+
1.11.0 (January 30, 2019)
|
5
|
+
^^^^^^^^^^^^^^^^^^^^^^^^^
|
6
|
+
|
7
|
+
* snap: Snap packages can now be created! (`#1490`_; kyrofa)
|
8
|
+
* Fix an installation problem where a dependency (childprocess) fails to install correctly. (#1592; Jordan Sissel)
|
9
|
+
|
4
10
|
1.10.2 (July 3, 2018)
|
5
11
|
^^^^^^^^^^^^^^^^^^^^^
|
6
12
|
|
@@ -25,6 +31,7 @@ Release Notes and Change Log
|
|
25
31
|
* rpm: fix shell function name `install` conflicting with `install` program. In
|
26
32
|
postinst (after-install), the function is now called `_install` to avoid
|
27
33
|
conflicting with `/usr/bin/install` (`#1434`_; Torsten Schmidt)
|
34
|
+
* rpm: Allow binary "arch dependent" files in noarch rpms (Jordan Sissel)
|
28
35
|
* - deb: --config-files ? (`#1440`_, `#1443`_; NoBodyCam)
|
29
36
|
* FPM source repo now contains a Brewfile for use with Homebrew.
|
30
37
|
* FPM source repo has a Dockerfile for invoking fpm with docker. (`#1484`_, ;Allan Lewis
|
data/lib/fpm.rb
CHANGED
data/lib/fpm/package/deb.rb
CHANGED
@@ -22,7 +22,7 @@ class FPM::Package::Deb < FPM::Package
|
|
22
22
|
} unless defined?(SCRIPT_MAP)
|
23
23
|
|
24
24
|
# The list of supported compression types. Default is gz (gzip)
|
25
|
-
COMPRESSION_TYPES = [ "gz", "bzip2", "xz" ]
|
25
|
+
COMPRESSION_TYPES = [ "gz", "bzip2", "xz", "none" ]
|
26
26
|
|
27
27
|
option "--ignore-iteration-in-dependencies", :flag,
|
28
28
|
"For '=' (equal) dependencies, allow iterations on the specified " \
|
@@ -265,10 +265,32 @@ class FPM::Package::Deb < FPM::Package
|
|
265
265
|
end # def input
|
266
266
|
|
267
267
|
def extract_info(package)
|
268
|
+
compression = `#{ar_cmd[0]} t #{package}`.split("\n").grep(/control.tar/).first.split(".").last
|
269
|
+
case compression
|
270
|
+
when "gz"
|
271
|
+
controltar = "control.tar.gz"
|
272
|
+
compression = "-z"
|
273
|
+
when "bzip2","bz2"
|
274
|
+
controltar = "control.tar.bz2"
|
275
|
+
compression = "-j"
|
276
|
+
when "xz"
|
277
|
+
controltar = "control.tar.xz"
|
278
|
+
compression = "-J"
|
279
|
+
when 'tar'
|
280
|
+
controltar = "control.tar"
|
281
|
+
compression = ""
|
282
|
+
when nil
|
283
|
+
raise FPM::InvalidPackageConfiguration, "Missing control.tar in deb source package #{package}"
|
284
|
+
else
|
285
|
+
raise FPM::InvalidPackageConfiguration,
|
286
|
+
"Unknown compression type '#{compression}' for control.tar in deb source package #{package}"
|
287
|
+
end
|
288
|
+
|
268
289
|
build_path("control").tap do |path|
|
269
290
|
FileUtils.mkdir(path) if !File.directory?(path)
|
291
|
+
# unpack the control.tar.{,gz,bz2,xz} from the deb package into staging_path
|
270
292
|
# Unpack the control tarball
|
271
|
-
safesystem(ar_cmd[0] + " p #{package}
|
293
|
+
safesystem(ar_cmd[0] + " p #{package} #{controltar} | tar #{compression} -xf - -C #{path}")
|
272
294
|
|
273
295
|
control = File.read(File.join(path, "control"))
|
274
296
|
|
@@ -376,15 +398,18 @@ class FPM::Package::Deb < FPM::Package
|
|
376
398
|
when "xz"
|
377
399
|
datatar = "data.tar.xz"
|
378
400
|
compression = "-J"
|
401
|
+
when 'tar'
|
402
|
+
datatar = "data.tar"
|
403
|
+
compression = ""
|
404
|
+
when nil
|
405
|
+
raise FPM::InvalidPackageConfiguration, "Missing data.tar in deb source package #{package}"
|
379
406
|
else
|
380
407
|
raise FPM::InvalidPackageConfiguration,
|
381
|
-
"Unknown compression type '#{
|
382
|
-
"in deb source package #{package}"
|
408
|
+
"Unknown compression type '#{compression}' for data.tar in deb source package #{package}"
|
383
409
|
end
|
384
410
|
|
385
411
|
# unpack the data.tar.{gz,bz2,xz} from the deb package into staging_path
|
386
|
-
safesystem(ar_cmd[0] + " p #{package} #{datatar} "
|
387
|
-
"| tar #{compression} -xf - -C #{staging_path}")
|
412
|
+
safesystem(ar_cmd[0] + " p #{package} #{datatar} | tar #{compression} -xf - -C #{staging_path}")
|
388
413
|
end # def extract_files
|
389
414
|
|
390
415
|
def output(output_path)
|
@@ -559,6 +584,9 @@ class FPM::Package::Deb < FPM::Package
|
|
559
584
|
when "xz"
|
560
585
|
datatar = build_path("data.tar.xz")
|
561
586
|
compression = "-J"
|
587
|
+
when "none"
|
588
|
+
datatar = build_path("data.tar")
|
589
|
+
compression = ""
|
562
590
|
else
|
563
591
|
raise FPM::InvalidPackageConfiguration,
|
564
592
|
"Unknown compression type '#{self.attributes[:deb_compression]}'"
|
@@ -749,11 +777,30 @@ class FPM::Package::Deb < FPM::Package
|
|
749
777
|
write_triggers # write trigger config to 'triggers' file
|
750
778
|
write_md5sums # write the md5sums file
|
751
779
|
|
780
|
+
# Tar up the staging_path into control.tar.{compression type}
|
781
|
+
case self.attributes[:deb_compression]
|
782
|
+
when "gz", nil
|
783
|
+
controltar = build_path("control.tar.gz")
|
784
|
+
compression = "-z"
|
785
|
+
when "bzip2"
|
786
|
+
controltar = build_path("control.tar.bz2")
|
787
|
+
compression = "-j"
|
788
|
+
when "xz"
|
789
|
+
controltar = build_path("control.tar.xz")
|
790
|
+
compression = "-J"
|
791
|
+
when "none"
|
792
|
+
controltar = build_path("control.tar")
|
793
|
+
compression = ""
|
794
|
+
else
|
795
|
+
raise FPM::InvalidPackageConfiguration,
|
796
|
+
"Unknown compression type '#{self.attributes[:deb_compression]}'"
|
797
|
+
end
|
798
|
+
|
752
799
|
# Make the control.tar.gz
|
753
800
|
build_path("control.tar.gz").tap do |controltar|
|
754
801
|
logger.info("Creating", :path => controltar, :from => control_path)
|
755
802
|
|
756
|
-
args = [ tar_cmd, "-C", control_path, "-
|
803
|
+
args = [ tar_cmd, "-C", control_path, compression, "-cf", controltar,
|
757
804
|
"--owner=0", "--group=0", "--numeric-owner", "." ]
|
758
805
|
if tar_cmd_supports_sort_names_and_set_mtime? and not attributes[:source_date_epoch].nil?
|
759
806
|
# Force deterministic file order and timestamp
|
@@ -931,7 +978,7 @@ class FPM::Package::Deb < FPM::Package
|
|
931
978
|
|
932
979
|
if attributes[:deb_templates]
|
933
980
|
FileUtils.cp(attributes[:deb_templates], control_path("templates"))
|
934
|
-
File.chmod(
|
981
|
+
File.chmod(0644, control_path("templates"))
|
935
982
|
end
|
936
983
|
end # def write_debconf
|
937
984
|
|
data/lib/fpm/package/rpm.rb
CHANGED
@@ -516,10 +516,11 @@ class FPM::Package::RPM < FPM::Package
|
|
516
516
|
end
|
517
517
|
|
518
518
|
# copy all files from staging to BUILD dir
|
519
|
+
# [#1538] Be sure to preserve the original timestamps.
|
519
520
|
Find.find(staging_path) do |path|
|
520
521
|
src = path.gsub(/^#{staging_path}/, '')
|
521
522
|
dst = File.join(build_path, build_sub_dir, src)
|
522
|
-
copy_entry(path, dst)
|
523
|
+
copy_entry(path, dst, preserve=true)
|
523
524
|
end
|
524
525
|
|
525
526
|
rpmspec = template("rpm.erb").result(binding)
|
@@ -0,0 +1,130 @@
|
|
1
|
+
require "yaml"
|
2
|
+
|
3
|
+
require "fpm/package"
|
4
|
+
require "fpm/util"
|
5
|
+
require "fileutils"
|
6
|
+
require "fpm/package/dir"
|
7
|
+
|
8
|
+
# Support for snaps (.snap files).
|
9
|
+
#
|
10
|
+
# This supports the input and output of snaps.
|
11
|
+
class FPM::Package::Snap < FPM::Package
|
12
|
+
|
13
|
+
option "--yaml", "FILEPATH",
|
14
|
+
"Custom version of the snap.yaml file." do | snap_yaml |
|
15
|
+
File.expand_path(snap_yaml)
|
16
|
+
end
|
17
|
+
|
18
|
+
option "--confinement", "CONFINEMENT",
|
19
|
+
"Type of confinement to use for this snap.",
|
20
|
+
default: "devmode" do | confinement |
|
21
|
+
if ['strict', 'devmode', 'classic'].include? confinement
|
22
|
+
confinement
|
23
|
+
else
|
24
|
+
raise "Unsupported confinement type '#{confinement}'"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
option "--grade", "GRADE", "Grade of this snap.",
|
29
|
+
default: "devel" do | grade |
|
30
|
+
if ['stable', 'devel'].include? grade
|
31
|
+
grade
|
32
|
+
else
|
33
|
+
raise "Unsupported grade type '#{grade}'"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
# Input a snap
|
38
|
+
def input(input_snap)
|
39
|
+
extract_snap_to_staging input_snap
|
40
|
+
extract_snap_metadata_from_staging
|
41
|
+
end # def input
|
42
|
+
|
43
|
+
# Output a snap.
|
44
|
+
def output(output_snap)
|
45
|
+
output_check(output_snap)
|
46
|
+
|
47
|
+
write_snap_yaml
|
48
|
+
|
49
|
+
# Create the snap from the staging path
|
50
|
+
safesystem("mksquashfs", staging_path, output_snap, "-noappend", "-comp",
|
51
|
+
"xz", "-no-xattrs", "-no-fragments", "-all-root")
|
52
|
+
end # def output
|
53
|
+
|
54
|
+
def to_s(format=nil)
|
55
|
+
# Default format if nil
|
56
|
+
# name_version_arch.snap
|
57
|
+
return super(format.nil? ? "NAME_FULLVERSION_ARCH.EXTENSION" : format)
|
58
|
+
end # def to_s
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
def extract_snap_to_staging(snap_path)
|
63
|
+
safesystem("unsquashfs", "-f", "-d", staging_path, snap_path)
|
64
|
+
end
|
65
|
+
|
66
|
+
def extract_snap_metadata_from_staging
|
67
|
+
metadata = YAML.safe_load(File.read(
|
68
|
+
staging_path(File.join("meta", "snap.yaml"))))
|
69
|
+
|
70
|
+
self.name = metadata["name"]
|
71
|
+
self.version = metadata["version"]
|
72
|
+
self.description = metadata["summary"] + "\n" + metadata["description"]
|
73
|
+
self.architecture = metadata["architectures"][0]
|
74
|
+
self.attributes[:snap_confinement] = metadata["confinement"]
|
75
|
+
self.attributes[:snap_grade] = metadata["grade"]
|
76
|
+
|
77
|
+
if metadata["apps"].nil?
|
78
|
+
attributes[:snap_apps] = []
|
79
|
+
else
|
80
|
+
attributes[:snap_apps] = metadata["apps"]
|
81
|
+
end
|
82
|
+
|
83
|
+
if metadata["hooks"].nil?
|
84
|
+
attributes[:snap_hooks] = []
|
85
|
+
else
|
86
|
+
attributes[:snap_hooks] = metadata["hooks"]
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def write_snap_yaml
|
91
|
+
# Write the snap.yaml
|
92
|
+
if attributes[:snap_yaml]
|
93
|
+
logger.debug("Using '#{attributes[:snap_yaml]}' as the snap.yaml")
|
94
|
+
yaml_data = File.read(attributes[:snap_yaml])
|
95
|
+
else
|
96
|
+
summary, *remainder = (self.description or "no summary given").split("\n")
|
97
|
+
description = "no description given"
|
98
|
+
if remainder.any?
|
99
|
+
description = remainder.join("\n")
|
100
|
+
end
|
101
|
+
|
102
|
+
yaml_data = {
|
103
|
+
"name" => self.name,
|
104
|
+
"version" => self.version,
|
105
|
+
"summary" => summary,
|
106
|
+
"description" => description,
|
107
|
+
"architectures" => [self.architecture],
|
108
|
+
"confinement" => self.attributes[:snap_confinement],
|
109
|
+
"grade" => self.attributes[:snap_grade],
|
110
|
+
}
|
111
|
+
|
112
|
+
unless attributes[:snap_apps].nil? or attributes[:snap_apps].empty?
|
113
|
+
yaml_data["apps"] = attributes[:snap_apps]
|
114
|
+
end
|
115
|
+
|
116
|
+
unless attributes[:snap_hooks].nil? or attributes[:snap_hooks].empty?
|
117
|
+
yaml_data["hooks"] = attributes[:snap_hooks]
|
118
|
+
end
|
119
|
+
|
120
|
+
yaml_data = yaml_data.to_yaml
|
121
|
+
end
|
122
|
+
|
123
|
+
FileUtils.mkdir_p(staging_path("meta"))
|
124
|
+
snap_yaml_path = staging_path(File.join("meta", "snap.yaml"))
|
125
|
+
logger.debug("Writing snap.yaml", :path => snap_yaml_path)
|
126
|
+
File.write(snap_yaml_path, yaml_data)
|
127
|
+
File.chmod(0644, snap_yaml_path)
|
128
|
+
edit_file(snap_yaml_path) if attributes[:edit?]
|
129
|
+
end # def write_snap_yaml
|
130
|
+
end # class FPM::Package::Snap
|
@@ -111,8 +111,7 @@ class FPM::Package::Virtualenv < FPM::Package
|
|
111
111
|
# Why is this hack here? It looks important, so I'll keep it in.
|
112
112
|
safesystem(python_exe, pip_exe, "install", "-U", "-i",
|
113
113
|
attributes[:virtualenv_pypi],
|
114
|
-
"pip"
|
115
|
-
safesystem(python_exe, pip_exe, "uninstall", "-y", "distribute")
|
114
|
+
"pip")
|
116
115
|
|
117
116
|
extra_index_url_args = []
|
118
117
|
if attributes[:virtualenv_pypi_extra_index_urls]
|
data/lib/fpm/version.rb
CHANGED
data/templates/deb.erb
CHANGED
@@ -28,7 +28,7 @@ Build-Depends: <%= attributes[:deb_build_depends].collect { |d| fix_dependency(d
|
|
28
28
|
Provides: <%= provides.map {|p| p.split(" ").first}.join ", " %>
|
29
29
|
<% end -%>
|
30
30
|
<% if !replaces.empty? -%>
|
31
|
-
Replaces: <%= replaces.join(", ") %>
|
31
|
+
Replaces: <%= replaces.collect { |d| fix_dependency(d) }.flatten.join(", ") %>
|
32
32
|
<% end -%>
|
33
33
|
<% if attributes[:deb_recommends] and !attributes[:deb_recommends].empty? -%>
|
34
34
|
Recommends: <%= attributes[:deb_recommends].collect { |d| fix_dependency(d) }.flatten.join(", ") %>
|
@@ -14,9 +14,8 @@ Description: <%= firstline %>
|
|
14
14
|
<%= remainder.collect { |l| l =~ /^ *$/ ? " ." : " #{l}" }.join("\n") %>
|
15
15
|
<% end -%>
|
16
16
|
Changes:
|
17
|
-
<%= name %> (<%= "#{epoch}:" if epoch %><%= version %><%= "-" + iteration.to_s if iteration %>) whatever; urgency=medium
|
18
|
-
.
|
19
|
-
* Package created with FPM.
|
17
|
+
<%= name %> (<%= "#{epoch}:" if epoch %><%= version %><%= "-" + iteration.to_s if iteration %>) whatever; urgency=medium
|
18
|
+
* Package created with FPM.
|
20
19
|
Checksums-Sha1:
|
21
20
|
<% changes_files.each do |file| -%>
|
22
21
|
<%= file[:sha1sum] %> <%= file[:size] %> <%= file[:name] %>
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fpm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jordan Sissel
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-01-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
@@ -90,16 +90,16 @@ dependencies:
|
|
90
90
|
name: childprocess
|
91
91
|
requirement: !ruby/object:Gem::Requirement
|
92
92
|
requirements:
|
93
|
-
- -
|
93
|
+
- - '='
|
94
94
|
- !ruby/object:Gem::Version
|
95
|
-
version:
|
95
|
+
version: 0.9.0
|
96
96
|
type: :runtime
|
97
97
|
prerelease: false
|
98
98
|
version_requirements: !ruby/object:Gem::Requirement
|
99
99
|
requirements:
|
100
|
-
- -
|
100
|
+
- - '='
|
101
101
|
- !ruby/object:Gem::Version
|
102
|
-
version:
|
102
|
+
version: 0.9.0
|
103
103
|
- !ruby/object:Gem::Dependency
|
104
104
|
name: ffi
|
105
105
|
requirement: !ruby/object:Gem::Requirement
|
@@ -250,6 +250,7 @@ files:
|
|
250
250
|
- lib/fpm/package/python.rb
|
251
251
|
- lib/fpm/package/rpm.rb
|
252
252
|
- lib/fpm/package/sh.rb
|
253
|
+
- lib/fpm/package/snap.rb
|
253
254
|
- lib/fpm/package/solaris.rb
|
254
255
|
- lib/fpm/package/tar.rb
|
255
256
|
- lib/fpm/package/virtualenv.rb
|
@@ -301,8 +302,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
301
302
|
- !ruby/object:Gem::Version
|
302
303
|
version: '0'
|
303
304
|
requirements: []
|
304
|
-
|
305
|
-
rubygems_version: 2.6.11
|
305
|
+
rubygems_version: 3.0.1
|
306
306
|
signing_key:
|
307
307
|
specification_version: 4
|
308
308
|
summary: fpm - package building and mangling
|