fpm 1.5.0 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELIST +10 -0
- data/LICENSE +1 -1
- data/lib/fpm/command.rb +14 -8
- data/lib/fpm/package.rb +25 -11
- data/lib/fpm/package/apk.rb +510 -0
- data/lib/fpm/package/cpan.rb +1 -1
- data/lib/fpm/package/deb.rb +3 -3
- data/lib/fpm/package/dir.rb +14 -0
- data/lib/fpm/package/freebsd.rb +15 -36
- data/lib/fpm/package/gem.rb +1 -1
- data/lib/fpm/package/osxpkg.rb +3 -2
- data/lib/fpm/package/pacman.rb +4 -3
- data/lib/fpm/package/pleaserun.rb +63 -0
- data/lib/fpm/package/python.rb +2 -1
- data/lib/fpm/package/rpm.rb +10 -3
- data/lib/fpm/package/tar.rb +12 -0
- data/lib/fpm/package/virtualenv.rb +1 -1
- data/lib/fpm/rake_task.rb +2 -1
- data/lib/fpm/util.rb +143 -38
- data/lib/fpm/util/tar_writer.rb +80 -0
- data/lib/fpm/version.rb +1 -1
- data/templates/pleaserun/generate-cleanup.sh +17 -0
- data/templates/pleaserun/install-path.sh +17 -0
- data/templates/pleaserun/install.sh +117 -0
- data/templates/pleaserun/scripts/after-install.sh +4 -0
- data/templates/pleaserun/scripts/before-remove.sh +12 -0
- metadata +15 -7
@@ -0,0 +1,80 @@
|
|
1
|
+
require 'rubygems/package'
|
2
|
+
|
3
|
+
module FPM
|
4
|
+
module Issues
|
5
|
+
module TarWriter
|
6
|
+
# See https://github.com/rubygems/rubygems/issues/1608
|
7
|
+
def self.has_issue_1608?
|
8
|
+
name, prefix = nil,nil
|
9
|
+
io = StringIO.new
|
10
|
+
::Gem::Package::TarWriter.new(io) do |tw|
|
11
|
+
name, prefix = tw.split_name('/123456789'*9 + '/1234567890') # abs name 101 chars long
|
12
|
+
end
|
13
|
+
return prefix.empty?
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.has_issues_with_split_name?
|
17
|
+
return false unless ::Gem::Package::TarWriter.method_defined?(:split_name)
|
18
|
+
return has_issue_1608?
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.has_issues_with_add_symlink?
|
22
|
+
return !::Gem::Package::TarWriter.public_instance_methods.include?(:add_symlink)
|
23
|
+
end
|
24
|
+
end # module TarWriter
|
25
|
+
end # module Issues
|
26
|
+
end # module FPM
|
27
|
+
|
28
|
+
module FPM; module Util; end; end
|
29
|
+
|
30
|
+
# Like the ::Gem::Package::TarWriter but contains some backports and bug fixes
|
31
|
+
class FPM::Util::TarWriter < ::Gem::Package::TarWriter
|
32
|
+
if FPM::Issues::TarWriter.has_issues_with_split_name?
|
33
|
+
def split_name(name)
|
34
|
+
if name.bytesize > 256 then
|
35
|
+
raise ::Gem::Package::TooLongFileName.new("File \"#{name}\" has a too long path (should be 256 or less)")
|
36
|
+
end
|
37
|
+
|
38
|
+
prefix = ''
|
39
|
+
if name.bytesize > 100 then
|
40
|
+
parts = name.split('/', -1) # parts are never empty here
|
41
|
+
name = parts.pop # initially empty for names with a trailing slash ("foo/.../bar/")
|
42
|
+
prefix = parts.join('/') # if empty, then it's impossible to split (parts is empty too)
|
43
|
+
while !parts.empty? && (prefix.bytesize > 155 || name.empty?)
|
44
|
+
name = parts.pop + '/' + name
|
45
|
+
prefix = parts.join('/')
|
46
|
+
end
|
47
|
+
|
48
|
+
if name.bytesize > 100 or prefix.empty? then
|
49
|
+
raise ::Gem::Package::TooLongFileName.new("File \"#{prefix}/#{name}\" has a too long name (should be 100 or less)")
|
50
|
+
end
|
51
|
+
|
52
|
+
if prefix.bytesize > 155 then
|
53
|
+
raise ::Gem::Package::TooLongFileName.new("File \"#{prefix}/#{name}\" has a too long base path (should be 155 or less)")
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
return name, prefix
|
58
|
+
end
|
59
|
+
end # if FPM::Issues::TarWriter.spit_name_has_issues?
|
60
|
+
|
61
|
+
if FPM::Issues::TarWriter.has_issues_with_add_symlink?
|
62
|
+
# Backport Symlink Support to TarWriter
|
63
|
+
# https://github.com/rubygems/rubygems/blob/4a778c9c2489745e37bcc2d0a8f12c601a9c517f/lib/rubygems/package/tar_writer.rb#L239-L253
|
64
|
+
def add_symlink(name, target, mode)
|
65
|
+
check_closed
|
66
|
+
|
67
|
+
name, prefix = split_name name
|
68
|
+
|
69
|
+
header = ::Gem::Package::TarHeader.new(:name => name, :mode => mode,
|
70
|
+
:size => 0, :typeflag => "2",
|
71
|
+
:linkname => target,
|
72
|
+
:prefix => prefix,
|
73
|
+
:mtime => Time.now).to_s
|
74
|
+
|
75
|
+
@io.write header
|
76
|
+
|
77
|
+
self
|
78
|
+
end # def add_symlink
|
79
|
+
end
|
80
|
+
end
|
data/lib/fpm/version.rb
CHANGED
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
|
3
|
+
show_cleanup_step() {
|
4
|
+
d="${1##.}"
|
5
|
+
if [ ! -z "$d" ] ; then
|
6
|
+
if [ -d "$1" -a ! -d "$d" ] ; then
|
7
|
+
echo "rmdir \"$d\""
|
8
|
+
fi
|
9
|
+
if [ -f "$1" ] ; then
|
10
|
+
echo "rm \"$d\""
|
11
|
+
fi
|
12
|
+
fi
|
13
|
+
}
|
14
|
+
|
15
|
+
for i in "$@" ; do
|
16
|
+
show_cleanup_step "$i"
|
17
|
+
done
|
@@ -0,0 +1,117 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
|
3
|
+
source="<%= attributes[:prefix] %>"
|
4
|
+
|
5
|
+
cleanup_script="$source/cleanup.sh"
|
6
|
+
|
7
|
+
silent() {
|
8
|
+
"$@" > /dev/null 2>&1
|
9
|
+
}
|
10
|
+
|
11
|
+
install_files() {
|
12
|
+
# TODO(sissel): Need to know what prefix the files exist at
|
13
|
+
platform="$1"
|
14
|
+
version="$(version_${platform})"
|
15
|
+
|
16
|
+
(
|
17
|
+
# TODO(sissel): Should I just rely on rsync for this stuff?
|
18
|
+
cd "${source}/${platform}/${version}/files/" || exit 1
|
19
|
+
|
20
|
+
# Write a cleanup script
|
21
|
+
find . -print0 | xargs -r0 -n1 "$source/generate-cleanup.sh" > "$cleanup_script"
|
22
|
+
|
23
|
+
# Actually do the installation
|
24
|
+
find . -print0 | xargs -r0 -n1 "$source/install-path.sh"
|
25
|
+
)
|
26
|
+
}
|
27
|
+
|
28
|
+
install_actions() {
|
29
|
+
# TODO(sissel): Need to know what prefix the files exist at
|
30
|
+
platform="$1"
|
31
|
+
version="$(version_${platform})"
|
32
|
+
|
33
|
+
|
34
|
+
actions="${source}/${platform}/${version}/install_actions.sh"
|
35
|
+
if [ -f "$actions" ] ; then
|
36
|
+
. "$actions"
|
37
|
+
fi
|
38
|
+
}
|
39
|
+
|
40
|
+
version_systemd() {
|
41
|
+
# Treat all systemd versions the same
|
42
|
+
echo default
|
43
|
+
}
|
44
|
+
|
45
|
+
version_launchd() {
|
46
|
+
# Treat all launchd versions the same
|
47
|
+
echo 10.9
|
48
|
+
}
|
49
|
+
|
50
|
+
version_upstart() {
|
51
|
+
# Treat all upstart versions the same
|
52
|
+
# TODO(sissel): Upstart 0.6.5 needs to be handled specially.
|
53
|
+
version="$(initctl --version | head -1 | tr -d '()' | awk '{print $NF}')"
|
54
|
+
|
55
|
+
case $version in
|
56
|
+
0.6.5) echo $version ;;
|
57
|
+
*) echo "1.5" ;; # default modern assumption
|
58
|
+
esac
|
59
|
+
}
|
60
|
+
|
61
|
+
version_sysv() {
|
62
|
+
# TODO(sissel): Once pleaserun supports multiple sysv implementations, maybe
|
63
|
+
# we inspect the OS to find out what we should target.
|
64
|
+
echo lsb-3.1
|
65
|
+
}
|
66
|
+
|
67
|
+
has_systemd() {
|
68
|
+
# Some OS vendors put systemd in ... different places ...
|
69
|
+
[ -d "/lib/systemd/system/" -o -d "/usr/lib/systemd/system" ] && silent which systemctl
|
70
|
+
}
|
71
|
+
|
72
|
+
has_upstart() {
|
73
|
+
[ -d "/etc/init" ] && silent which initctl
|
74
|
+
}
|
75
|
+
|
76
|
+
has_sysv() {
|
77
|
+
[ -d "/etc/init.d" ]
|
78
|
+
}
|
79
|
+
|
80
|
+
#has_freebsd_rcng() {
|
81
|
+
#[ -d "/etc/rc.d" ] && silent which rcorder
|
82
|
+
#}
|
83
|
+
|
84
|
+
has_daemontools() {
|
85
|
+
[ -d "/service" ] && silent which sv
|
86
|
+
}
|
87
|
+
|
88
|
+
has_launchd() {
|
89
|
+
[ -d "/Library/LaunchDaemons" ] && silent which launchtl
|
90
|
+
}
|
91
|
+
|
92
|
+
install_help() {
|
93
|
+
case $platform in
|
94
|
+
systemd) echo "To start this service, use: systemctl start <%= attributes[:pleaserun_name] %>" ;;
|
95
|
+
upstart) echo "To start this service, use: initctl start <%= attributes[:pleaserun_name] %>" ;;
|
96
|
+
launchd) echo "To start this service, use: launchctl start <%= attributes[:pleaserun_name] %>" ;;
|
97
|
+
sysv) echo "To start this service, use: /etc/init.d/<%= attributes[:pleaserun_name] %> start" ;;
|
98
|
+
esac
|
99
|
+
}
|
100
|
+
|
101
|
+
platforms="systemd upstart launchd sysv"
|
102
|
+
installed=0
|
103
|
+
for platform in $platforms ; do
|
104
|
+
if has_$platform ; then
|
105
|
+
version="$(version_$platform)"
|
106
|
+
echo "Platform $platform ($version) detected. Installing service."
|
107
|
+
install_files $platform
|
108
|
+
install_actions $platform
|
109
|
+
install_help $platform
|
110
|
+
installed=1
|
111
|
+
break
|
112
|
+
fi
|
113
|
+
done
|
114
|
+
|
115
|
+
if [ "$installed" -eq 0 ] ; then
|
116
|
+
echo "Failed to detect any service platform, so no service was installed. Files are available in ${source} if you need them."
|
117
|
+
fi
|
@@ -0,0 +1,12 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
|
3
|
+
source="<%= attributes[:prefix] %>"
|
4
|
+
|
5
|
+
if [ -f "$source/cleanup.sh" ] ; then
|
6
|
+
echo "Running cleanup to remove service for package <%= attributes[:name] %>"
|
7
|
+
set -e
|
8
|
+
sh "$source/cleanup.sh"
|
9
|
+
|
10
|
+
# Remove the script also since the package installation generated it.
|
11
|
+
rm "$source/cleanup.sh"
|
12
|
+
fi
|
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.6.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: 2016-
|
11
|
+
date: 2016-05-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
@@ -72,14 +72,14 @@ dependencies:
|
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
75
|
+
version: 1.0.0
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
82
|
+
version: 1.0.0
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: childprocess
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -151,19 +151,19 @@ dependencies:
|
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: '0'
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
|
-
name:
|
154
|
+
name: pleaserun
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
156
156
|
requirements:
|
157
157
|
- - "~>"
|
158
158
|
- !ruby/object:Gem::Version
|
159
|
-
version:
|
159
|
+
version: 0.0.24
|
160
160
|
type: :runtime
|
161
161
|
prerelease: false
|
162
162
|
version_requirements: !ruby/object:Gem::Requirement
|
163
163
|
requirements:
|
164
164
|
- - "~>"
|
165
165
|
- !ruby/object:Gem::Version
|
166
|
-
version:
|
166
|
+
version: 0.0.24
|
167
167
|
- !ruby/object:Gem::Dependency
|
168
168
|
name: rspec
|
169
169
|
requirement: !ruby/object:Gem::Requirement
|
@@ -238,6 +238,7 @@ files:
|
|
238
238
|
- lib/fpm/errors.rb
|
239
239
|
- lib/fpm/namespace.rb
|
240
240
|
- lib/fpm/package.rb
|
241
|
+
- lib/fpm/package/apk.rb
|
241
242
|
- lib/fpm/package/cpan.rb
|
242
243
|
- lib/fpm/package/deb.rb
|
243
244
|
- lib/fpm/package/dir.rb
|
@@ -250,6 +251,7 @@ files:
|
|
250
251
|
- lib/fpm/package/pacman.rb
|
251
252
|
- lib/fpm/package/pear.rb
|
252
253
|
- lib/fpm/package/pkgin.rb
|
254
|
+
- lib/fpm/package/pleaserun.rb
|
253
255
|
- lib/fpm/package/puppet.rb
|
254
256
|
- lib/fpm/package/pyfpm/__init__.py
|
255
257
|
- lib/fpm/package/pyfpm/__init__.pyc
|
@@ -264,6 +266,7 @@ files:
|
|
264
266
|
- lib/fpm/package/zip.rb
|
265
267
|
- lib/fpm/rake_task.rb
|
266
268
|
- lib/fpm/util.rb
|
269
|
+
- lib/fpm/util/tar_writer.rb
|
267
270
|
- lib/fpm/version.rb
|
268
271
|
- templates/deb.erb
|
269
272
|
- templates/deb/changelog.erb
|
@@ -276,6 +279,11 @@ files:
|
|
276
279
|
- templates/p5p_metadata.erb
|
277
280
|
- templates/pacman.erb
|
278
281
|
- templates/pacman/INSTALL.erb
|
282
|
+
- templates/pleaserun/generate-cleanup.sh
|
283
|
+
- templates/pleaserun/install-path.sh
|
284
|
+
- templates/pleaserun/install.sh
|
285
|
+
- templates/pleaserun/scripts/after-install.sh
|
286
|
+
- templates/pleaserun/scripts/before-remove.sh
|
279
287
|
- templates/puppet/package.pp.erb
|
280
288
|
- templates/puppet/package/remove.pp.erb
|
281
289
|
- templates/rpm.erb
|