pkgr 1.4.0 → 1.4.1
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/data/build_dependencies/sles.yml +13 -0
- data/data/buildpacks/sles-12 +2 -0
- data/data/cli/cli.sh.erb +31 -53
- data/data/dependencies/sles.yml +10 -0
- data/data/environment/default.erb +7 -3
- data/data/hooks/preinstall.sh +2 -2
- data/lib/pkgr/builder.rb +7 -0
- data/lib/pkgr/cli.rb +8 -0
- data/lib/pkgr/config.rb +13 -4
- data/lib/pkgr/dispatcher.rb +3 -3
- data/lib/pkgr/distributions/base.rb +11 -5
- data/lib/pkgr/distributions/centos.rb +1 -1
- data/lib/pkgr/distributions/debian.rb +18 -39
- data/lib/pkgr/distributions/fedora.rb +12 -22
- data/lib/pkgr/distributions/redhat.rb +1 -1
- data/lib/pkgr/distributions/runner.rb +1 -1
- data/lib/pkgr/distributions/sles.rb +47 -0
- data/lib/pkgr/distributions/ubuntu.rb +1 -1
- data/lib/pkgr/fpm_command.rb +41 -0
- data/lib/pkgr/process.rb +0 -6
- data/lib/pkgr/version.rb +1 -1
- metadata +34 -30
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c4957e699c5faccb2beb397df7d38bbdc4bf0fb9
|
4
|
+
data.tar.gz: 8519e2b2f524e20c44a4df5353551c56f37f8e3f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 11d14b4e33696c5a7dbcafe08f65847a4524f153022829f5b29c37b21f2f8739fda1659b80fd4f0b51050be8a75e4c1028d004ac92304d7f0dbffcf3b80b1fc7
|
7
|
+
data.tar.gz: 99bb15a764f2716e7cddac6e5cd9ce852ff070c8b5237df322e762118110ce5ddf550c09b06057d361682483ff7992226fc2814753c98c9c67f5f0a8e71e23af
|
data/data/cli/cli.sh.erb
CHANGED
@@ -24,57 +24,35 @@ usage() {
|
|
24
24
|
echo " $APP_NAME logs [--tail|-n NUMBER]"
|
25
25
|
echo " $APP_NAME config:get VAR"
|
26
26
|
echo " $APP_NAME config:set VAR=VALUE"
|
27
|
+
echo " $APP_NAME configure"
|
27
28
|
echo " $APP_NAME reconfigure"
|
28
29
|
}
|
29
30
|
|
31
|
+
DEFAULT_FILE=$(_p "/etc/default/${APP_NAME}")
|
30
32
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
;;
|
42
|
-
esac
|
43
|
-
elif [ -f $(_p /etc/redhat-release) ]; then
|
44
|
-
case "$(cat $(_p /etc/redhat-release))" in
|
45
|
-
CentOS*)
|
46
|
-
APP_RUNNER="upstart"
|
47
|
-
;;
|
48
|
-
*)
|
49
|
-
APP_RUNNER="sysv"
|
50
|
-
SYSV_MANAGER="chkconfig"
|
51
|
-
;;
|
52
|
-
esac
|
53
|
-
fi
|
54
|
-
}
|
33
|
+
. ${DEFAULT_FILE}
|
34
|
+
|
35
|
+
for file in $(_p "${APP_HOME}/.profile.d")/*.sh; do
|
36
|
+
# .profile.d scripts assume HOME indicates the path to the app directory
|
37
|
+
if [ -f $file ]; then HOME=${APP_HOME} . $file; fi
|
38
|
+
done
|
39
|
+
|
40
|
+
if [ "$APP_CLI" != "" ] ; then
|
41
|
+
exec $APP_HOME/bin/$APP_CLI "$@"
|
42
|
+
fi
|
55
43
|
|
56
|
-
if [
|
44
|
+
if [ `id -u` -ne 0 ]; then
|
57
45
|
echo "You must be executing with root privileges to launch commands."
|
58
46
|
echo "Either log in as root, use sudo, or add sudo privileges for running ${APP_NAME} with your user."
|
59
47
|
exit 1
|
60
48
|
fi
|
61
49
|
|
62
|
-
setup_runner
|
63
|
-
DEFAULT_FILE=$(_p "/etc/default/${APP_NAME}")
|
64
|
-
|
65
50
|
# Source all environment variables for the app. This must be done as
|
66
51
|
# privileged user since the config variables are only readable by root.
|
67
|
-
. ${DEFAULT_FILE}
|
68
|
-
|
69
52
|
for file in $(_p "/etc/${APP_NAME}/conf.d")/*; do
|
70
53
|
if [ -f $file ]; then . $file; fi
|
71
54
|
done
|
72
55
|
|
73
|
-
for file in $(_p "${APP_HOME}/.profile.d")/*.sh; do
|
74
|
-
# .profile.d scripts assume HOME indicates the path to the app directory
|
75
|
-
if [ -f $file ]; then HOME=${APP_HOME} . $file; fi
|
76
|
-
done
|
77
|
-
|
78
56
|
# Return all the environment variables accessible to the app.
|
79
57
|
show_env() {
|
80
58
|
env -i ROOT_PATH=${ROOT_PATH} ${0} run env | sort
|
@@ -97,7 +75,7 @@ tail_logs() {
|
|
97
75
|
|
98
76
|
current_number_of_processes() {
|
99
77
|
PROCESS_NAME="$1"
|
100
|
-
if [ "${
|
78
|
+
if [ "${APP_RUNNER_TYPE}" = "upstart" ]; then
|
101
79
|
echo $(ls -rv1 $(_p /etc/init/)${APP_NAME}-${PROCESS_NAME}-*.conf 2>/dev/null | head -1 | sed -r 's/.*\-([0-9]+)\.conf/\1/g')
|
102
80
|
else
|
103
81
|
echo $(ls -rv1 $(_p /etc/init.d/)${APP_NAME}-${PROCESS_NAME}-* 2>/dev/null | head -1 | sed -r 's/.*\-([0-9]+)/\1/g')
|
@@ -123,19 +101,19 @@ update_port() {
|
|
123
101
|
|
124
102
|
sysv_enable() {
|
125
103
|
local name="$1"
|
126
|
-
if [ "$
|
127
|
-
$
|
128
|
-
elif [ "$
|
129
|
-
$
|
104
|
+
if [ "$APP_RUNNER_CLI" = "chkconfig" ] ; then
|
105
|
+
$APP_RUNNER_CLI "$name" on
|
106
|
+
elif [ "$APP_RUNNER_CLI" = "update-rc.d" ] ; then
|
107
|
+
$APP_RUNNER_CLI "$name" defaults
|
130
108
|
fi
|
131
109
|
}
|
132
110
|
|
133
111
|
sysv_disable() {
|
134
112
|
local name="$1"
|
135
|
-
if [ "$
|
136
|
-
$
|
137
|
-
elif [ "$
|
138
|
-
$
|
113
|
+
if [ "$APP_RUNNER_CLI" = "chkconfig" ] ; then
|
114
|
+
$APP_RUNNER_CLI "$name" off
|
115
|
+
elif [ "$APP_RUNNER_CLI" = "update-rc.d" ] ; then
|
116
|
+
$APP_RUNNER_CLI -f "$name" remove
|
139
117
|
fi
|
140
118
|
}
|
141
119
|
|
@@ -147,7 +125,7 @@ scale_up() {
|
|
147
125
|
|
148
126
|
echo "Scaling up..."
|
149
127
|
|
150
|
-
if [ "${
|
128
|
+
if [ "${APP_RUNNER_TYPE}" = "upstart" ]; then
|
151
129
|
# copy initd
|
152
130
|
cp $(_p "${APP_HOME}/vendor/pkgr/scaling/upstart/${APP_NAME}") $(_p "/etc/init.d/")
|
153
131
|
chmod 0755 $(_p "/etc/init.d/${APP_NAME}")
|
@@ -165,11 +143,11 @@ scale_up() {
|
|
165
143
|
update_port $(_p "/etc/init/${PROCESS_ID}.conf") "${PROCESS_NAME}" $port $index
|
166
144
|
|
167
145
|
# directly call initctl instead of service, otherwise CentOS 6.x does not understand.
|
168
|
-
|
146
|
+
$APP_RUNNER_CLI start "${PROCESS_ID}"
|
169
147
|
done
|
170
148
|
|
171
|
-
|
172
|
-
|
149
|
+
$APP_RUNNER_CLI start ${APP_NAME}-${PROCESS_NAME} || true
|
150
|
+
$APP_RUNNER_CLI start ${APP_NAME} || true
|
173
151
|
else
|
174
152
|
cp $(_p "${APP_HOME}/vendor/pkgr/scaling/sysv/${APP_NAME}") $(_p /etc/init.d/)
|
175
153
|
chmod a+x $(_p "/etc/init.d/${APP_NAME}")
|
@@ -204,8 +182,8 @@ scale_down() {
|
|
204
182
|
index=$((${i} + ${NEW_SCALE}))
|
205
183
|
PROCESS_ID="${APP_NAME}-${PROCESS_NAME}-${index}"
|
206
184
|
|
207
|
-
if [ "${
|
208
|
-
|
185
|
+
if [ "${APP_RUNNER_TYPE}" = "upstart" ]; then
|
186
|
+
$APP_RUNNER_CLI stop "${PROCESS_ID}"
|
209
187
|
rm -f $(_p "/etc/init/${PROCESS_ID}.conf")
|
210
188
|
else
|
211
189
|
$(_p "/etc/init.d/${PROCESS_ID}") stop
|
@@ -318,14 +296,14 @@ while : ; do
|
|
318
296
|
CONFIG=(${2//=/ })
|
319
297
|
|
320
298
|
VAR=${CONFIG[0]:?"Invalid variable name"}
|
321
|
-
VALUE
|
299
|
+
VALUE="${2:$((${#VAR} + 1))}"
|
322
300
|
|
323
301
|
CONFIG_FILE=$(_p "/etc/${APP_NAME}/conf.d/other")
|
324
302
|
touch ${CONFIG_FILE}
|
325
303
|
|
326
|
-
sed -i -r "s
|
304
|
+
sed -i -r "s/^\s*export\s+${VAR}.*$//g" $(_p "/etc/${APP_NAME}/conf.d")/*
|
327
305
|
|
328
|
-
echo "export ${VAR}
|
306
|
+
echo "export ${VAR}=\"${VALUE}\"" >> "${CONFIG_FILE}"
|
329
307
|
|
330
308
|
break;;
|
331
309
|
|
@@ -5,10 +5,14 @@ export APP_SAFE_NAME="<%= safe_name %>"
|
|
5
5
|
export APP_GROUP="<%= group %>"
|
6
6
|
export APP_USER="<%= user %>"
|
7
7
|
export APP_WIZARDS="<%= wizards.map{|wizard_group| wizard_group.map{|w| w.name}.join("|")}.join(",") %>"
|
8
|
+
export APP_RUNNER_TYPE="<%= distribution.runner.type %>"
|
9
|
+
export APP_RUNNER_CLI="<%= distribution.runner.cli %>"
|
8
10
|
# Legacy addons
|
9
11
|
export APP_ADDONS="<%= addons.map{|addon| addon.name}.join(" ") %>"
|
10
|
-
export HOME="/home/<%= user %>"
|
11
12
|
export PORT=${PORT:=6000}
|
12
|
-
<% if
|
13
|
-
export
|
13
|
+
<% if cli.is_a?(String) %>
|
14
|
+
export HOME=${HOME:="/home/<%= user %>"}
|
15
|
+
export APP_CLI="<%= cli %>"
|
16
|
+
<% else %>
|
17
|
+
export HOME="/home/<%= user %>"
|
14
18
|
<% end %>
|
data/data/hooks/preinstall.sh
CHANGED
@@ -8,11 +8,11 @@ export APP_GROUP="<%= group %>"
|
|
8
8
|
export APP_HOME="<%= home %>"
|
9
9
|
|
10
10
|
if ! getent passwd "${APP_USER}" > /dev/null; then
|
11
|
-
if [ -f /etc/redhat-release ]; then
|
11
|
+
if [ -f /etc/redhat-release ] || [ -f /etc/SuSE-release ]; then
|
12
12
|
if ! getent group "${APP_GROUP}" > /dev/null ; then
|
13
13
|
groupadd --system "${APP_GROUP}"
|
14
14
|
fi
|
15
|
-
|
15
|
+
useradd "${APP_USER}" -g "${APP_GROUP}" --system --create-home --shell /bin/bash
|
16
16
|
else
|
17
17
|
if ! getent group "${APP_GROUP}" > /dev/null; then
|
18
18
|
addgroup "${APP_GROUP}" --system --quiet
|
data/lib/pkgr/builder.rb
CHANGED
@@ -36,6 +36,7 @@ module Pkgr
|
|
36
36
|
write_init
|
37
37
|
setup_crons
|
38
38
|
package
|
39
|
+
verify
|
39
40
|
store_cache
|
40
41
|
ensure
|
41
42
|
teardown if config.clean
|
@@ -73,6 +74,7 @@ module Pkgr
|
|
73
74
|
distribution.runner = Distributions::Runner.new(type, version.join("-"))
|
74
75
|
end
|
75
76
|
end
|
77
|
+
config.distribution = distribution
|
76
78
|
# required to build proper Addon objects
|
77
79
|
config.addons_dir = addons_dir
|
78
80
|
# useful for templates that need to read files
|
@@ -193,6 +195,11 @@ module Pkgr
|
|
193
195
|
app_package.error!
|
194
196
|
end
|
195
197
|
|
198
|
+
def verify
|
199
|
+
return true unless config.verify
|
200
|
+
distribution.verify(Dir.pwd)
|
201
|
+
end
|
202
|
+
|
196
203
|
def store_cache
|
197
204
|
return true unless config.store_cache
|
198
205
|
generate_cache_tarball = Mixlib::ShellOut.new %{tar czf cache.tar.gz -C #{compile_cache_dir} .}
|
data/lib/pkgr/cli.rb
CHANGED
@@ -35,6 +35,10 @@ module Pkgr
|
|
35
35
|
method_option :maintainer,
|
36
36
|
:type => :string,
|
37
37
|
:desc => "Maintainer"
|
38
|
+
method_option :vendor,
|
39
|
+
:type => :string,
|
40
|
+
:desc => "Package vendor",
|
41
|
+
:default => "pkgr <https://github.com/crohr/pkgr>"
|
38
42
|
method_option :architecture,
|
39
43
|
:type => :string,
|
40
44
|
:default => "x86_64",
|
@@ -113,6 +117,10 @@ module Pkgr
|
|
113
117
|
method_option :store_cache,
|
114
118
|
:type => :boolean,
|
115
119
|
:desc => 'Output a tarball of the cache in the current directory (name: cache.tar.gz)'
|
120
|
+
method_option :verify,
|
121
|
+
:type => :boolean,
|
122
|
+
:default => true,
|
123
|
+
:desc => "Verifies output package"
|
116
124
|
|
117
125
|
def package(tarball)
|
118
126
|
Pkgr.level = Logger::INFO if options[:verbose]
|
data/lib/pkgr/config.rb
CHANGED
@@ -26,8 +26,11 @@ module Pkgr
|
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
-
|
30
|
-
|
29
|
+
distro_config = targets[distribution.to_s]
|
30
|
+
if distro_config.is_a?(Hash)
|
31
|
+
distro_config.each do |k,v|
|
32
|
+
config[k] = v
|
33
|
+
end
|
31
34
|
end
|
32
35
|
|
33
36
|
self.new(config)
|
@@ -68,8 +71,12 @@ module Pkgr
|
|
68
71
|
name.gsub("-", "_")
|
69
72
|
end
|
70
73
|
|
74
|
+
def cli?
|
75
|
+
@table.has_key?(:cli) ? @table[:cli] : true
|
76
|
+
end
|
77
|
+
|
71
78
|
def home
|
72
|
-
"/opt/#{name}"
|
79
|
+
@table[:home] || "/opt/#{name}"
|
73
80
|
end
|
74
81
|
|
75
82
|
def user
|
@@ -204,7 +211,8 @@ module Pkgr
|
|
204
211
|
"--homepage \"#{homepage}\"",
|
205
212
|
"--architecture \"#{architecture}\"",
|
206
213
|
"--description \"#{description}\"",
|
207
|
-
"--maintainer \"#{maintainer}\""
|
214
|
+
"--maintainer \"#{maintainer}\"",
|
215
|
+
"--vendor \"#{vendor}\""
|
208
216
|
]
|
209
217
|
args.push "--dependencies #{dependencies.map{|d| "\"#{d}\""}.join}" unless dependencies.nil? || dependencies.empty?
|
210
218
|
args.push "--build-dependencies #{build_dependencies.map{|d| "\"#{d}\""}.join}" unless build_dependencies.nil? || build_dependencies.empty?
|
@@ -226,6 +234,7 @@ module Pkgr
|
|
226
234
|
args.push "--verbose" if verbose
|
227
235
|
args.push "--store-cache" if store_cache
|
228
236
|
args.push "--debug" if debug
|
237
|
+
args.push "--verify" if verify
|
229
238
|
args.push "--no-clean" if !clean
|
230
239
|
args.push "--no-edge" if !edge
|
231
240
|
args
|
data/lib/pkgr/dispatcher.rb
CHANGED
@@ -7,7 +7,7 @@ module Pkgr
|
|
7
7
|
|
8
8
|
def initialize(path, opts = {})
|
9
9
|
opts = opts.dup
|
10
|
-
@path = File.expand_path(path)
|
10
|
+
@path = path == '-' ? path : File.expand_path(path)
|
11
11
|
@host = opts.delete(:host)
|
12
12
|
@config = Config.new(opts)
|
13
13
|
end
|
@@ -20,7 +20,7 @@ module Pkgr
|
|
20
20
|
setup
|
21
21
|
|
22
22
|
if remote?
|
23
|
-
command = %{ ( cat "#{path}" | ssh "#{host}" pkgr package - #{config.to_args.join(" ")} ) && rsync "#{host}"
|
23
|
+
command = %{ ( cat "#{path}" | ssh "#{host}" pkgr package - #{config.to_args.join(" ")} ) && rsync -av --include './' --include '*.deb' --include '*.rpm' --exclude '*' "#{host}":~/ .}
|
24
24
|
Pkgr.debug command
|
25
25
|
IO.popen(command) do |io|
|
26
26
|
until io.eof?
|
@@ -51,4 +51,4 @@ module Pkgr
|
|
51
51
|
!host.nil?
|
52
52
|
end
|
53
53
|
end
|
54
|
-
end
|
54
|
+
end
|
@@ -57,6 +57,11 @@ module Pkgr
|
|
57
57
|
end
|
58
58
|
end
|
59
59
|
|
60
|
+
# Verifies packages
|
61
|
+
def verify(output_dir)
|
62
|
+
true
|
63
|
+
end
|
64
|
+
|
60
65
|
# e.g. data/buildpacks/ubuntu/12.04
|
61
66
|
def default_buildpack_list
|
62
67
|
data_file(File.join("buildpacks", slug))
|
@@ -102,18 +107,18 @@ module Pkgr
|
|
102
107
|
list.push Templates::FileTemplate.new("etc/default/#{app_name}", data_file("environment", "default.erb"))
|
103
108
|
list.push Templates::FileTemplate.new("etc/logrotate.d/#{app_name}", data_file("logrotate", "logrotate.erb"))
|
104
109
|
|
105
|
-
|
106
|
-
|
110
|
+
if config.cli?
|
111
|
+
# Put cli in /usr/bin, as redhat based distros don't have /usr/local/bin in their sudo PATH.
|
112
|
+
list.push Templates::FileTemplate.new("usr/bin/#{app_name}", data_file("cli", "cli.sh.erb"), mode: 0755)
|
113
|
+
end
|
107
114
|
|
108
|
-
# NOTE: /etc/appname/conf.d/* files are no longer installed here, since we don't want to overwrite any pre-existing config.
|
109
|
-
# They're now installed in the postinstall script.
|
110
115
|
list
|
111
116
|
end
|
112
117
|
|
113
118
|
# Returns a list of <Process, FileTemplate> tuples.
|
114
119
|
def initializers_for(app_name, procfile_entries)
|
115
120
|
list = []
|
116
|
-
procfile_entries.
|
121
|
+
procfile_entries.each do |process|
|
117
122
|
Pkgr.debug "Adding #{process.inspect} to initialization scripts"
|
118
123
|
runner.templates(process, app_name).each do |template|
|
119
124
|
list.push [process, template]
|
@@ -185,3 +190,4 @@ end # module Pkgr
|
|
185
190
|
|
186
191
|
require 'pkgr/distributions/debian'
|
187
192
|
require 'pkgr/distributions/fedora'
|
193
|
+
require 'pkgr/distributions/sles'
|
@@ -7,7 +7,7 @@ module Pkgr
|
|
7
7
|
def runner
|
8
8
|
# in truth it is 0.6.5, but it also works with 1.5 templates.
|
9
9
|
# maybe adopt the same structure as pleaserun, with defaults, etc.
|
10
|
-
@runner ||= Runner.new("upstart", "1.5")
|
10
|
+
@runner ||= Runner.new("upstart", "1.5", "initctl")
|
11
11
|
end
|
12
12
|
|
13
13
|
def templates
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'pkgr/buildpack'
|
2
2
|
require 'pkgr/process'
|
3
3
|
require 'pkgr/distributions/base'
|
4
|
+
require 'pkgr/fpm_command'
|
4
5
|
|
5
6
|
module Pkgr
|
6
7
|
module Distributions
|
@@ -12,7 +13,7 @@ module Pkgr
|
|
12
13
|
end
|
13
14
|
|
14
15
|
def runner
|
15
|
-
@runner ||= Runner.new("sysv", "lsb-3.1")
|
16
|
+
@runner ||= Runner.new("sysv", "lsb-3.1", "update-rc.d")
|
16
17
|
end
|
17
18
|
|
18
19
|
def package_test_command(package)
|
@@ -28,7 +29,19 @@ module Pkgr
|
|
28
29
|
end
|
29
30
|
|
30
31
|
def fpm_command(build_dir)
|
31
|
-
|
32
|
+
DebianFpmCommand.new(self, build_dir).command
|
33
|
+
end
|
34
|
+
|
35
|
+
def verify(output_dir)
|
36
|
+
Dir.glob(File.join(output_dir, "*deb")).each do |package|
|
37
|
+
puts "-----> Verifying package #{File.basename(package)}"
|
38
|
+
Dir.mktmpdir do |dir|
|
39
|
+
verify_package = Mixlib::ShellOut.new %{dpkg-deb -x #{package} #{dir}}
|
40
|
+
verify_package.logger = Pkgr.logger
|
41
|
+
verify_package.run_command
|
42
|
+
verify_package.error!
|
43
|
+
end
|
44
|
+
end
|
32
45
|
end
|
33
46
|
|
34
47
|
def debconfig
|
@@ -58,47 +71,13 @@ module Pkgr
|
|
58
71
|
addon.debian_dependency_name
|
59
72
|
end
|
60
73
|
|
61
|
-
class
|
62
|
-
attr_reader :distribution, :build_dir, :config
|
63
|
-
|
64
|
-
def initialize(distribution, build_dir)
|
65
|
-
@distribution = distribution
|
66
|
-
@build_dir = build_dir
|
67
|
-
@config = distribution.config
|
68
|
-
end
|
69
|
-
|
70
|
-
def command
|
71
|
-
%{fpm #{args.join(" ")} .}
|
72
|
-
end
|
73
|
-
|
74
|
+
class DebianFpmCommand < FpmCommand
|
74
75
|
def args
|
75
|
-
list =
|
76
|
+
list = super
|
76
77
|
list << "-t deb"
|
77
|
-
list << "-s dir"
|
78
|
-
list << "--verbose"
|
79
|
-
list << "--force"
|
80
|
-
list << "--exclude '**/.git**'"
|
81
|
-
list << %{-C "#{build_dir}"}
|
82
|
-
list << %{-n "#{config.name}"}
|
83
|
-
list << %{--version "#{config.version}"}
|
84
|
-
list << %{--iteration "#{config.iteration}"}
|
85
|
-
list << %{--url "#{config.homepage}"}
|
86
|
-
list << %{--provides "#{config.name}"}
|
87
78
|
list << %{--deb-user "root"}
|
88
79
|
list << %{--deb-group "root"}
|
89
|
-
list
|
90
|
-
list << %{-a "#{config.architecture}"}
|
91
|
-
list << %{--description "#{config.description}"}
|
92
|
-
list << %{--maintainer "#{config.maintainer}"}
|
93
|
-
list << %{--template-scripts}
|
94
|
-
list << %{--deb-config #{distribution.debconfig.path}}
|
95
|
-
list << %{--deb-templates #{distribution.debtemplates.path}}
|
96
|
-
list << %{--before-install #{distribution.preinstall_file}}
|
97
|
-
list << %{--after-install #{distribution.postinstall_file}}
|
98
|
-
list << %{--before-remove #{distribution.preuninstall_file}}
|
99
|
-
list << %{--after-remove #{distribution.postuninstall_file}}
|
100
|
-
distribution.dependencies(config.dependencies).each{|d| list << "-d '#{d}'"}
|
101
|
-
list.compact
|
80
|
+
list
|
102
81
|
end
|
103
82
|
end
|
104
83
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'pkgr/buildpack'
|
2
2
|
require 'pkgr/process'
|
3
3
|
require 'pkgr/distributions/base'
|
4
|
+
require 'pkgr/fpm_command'
|
4
5
|
|
5
6
|
module Pkgr
|
6
7
|
module Distributions
|
@@ -12,7 +13,7 @@ module Pkgr
|
|
12
13
|
end
|
13
14
|
|
14
15
|
def runner
|
15
|
-
@runner ||= Runner.new("sysv", "lsb-3.1")
|
16
|
+
@runner ||= Runner.new("sysv", "lsb-3.1", "chkconfig")
|
16
17
|
end
|
17
18
|
|
18
19
|
def package_test_command(package)
|
@@ -28,28 +29,17 @@ module Pkgr
|
|
28
29
|
end
|
29
30
|
|
30
31
|
def fpm_command(build_dir)
|
31
|
-
|
32
|
-
fpm -t rpm -s dir --verbose --force \
|
33
|
-
-C "#{build_dir}" \
|
34
|
-
-n "#{config.name}" \
|
35
|
-
--version "#{config.version}" \
|
36
|
-
--iteration "#{config.iteration}" \
|
37
|
-
--url "#{config.homepage}" \
|
38
|
-
--provides "#{config.name}" \
|
39
|
-
--deb-user "root" \
|
40
|
-
--deb-group "root" \
|
41
|
-
-a "#{config.architecture}" \
|
42
|
-
--description "#{config.description}" \
|
43
|
-
--maintainer "#{config.maintainer}" \
|
44
|
-
--template-scripts \
|
45
|
-
--before-install #{preinstall_file} \
|
46
|
-
--after-install #{postinstall_file} \
|
47
|
-
--before-remove #{preuninstall_file} \
|
48
|
-
--after-remove #{postuninstall_file} \
|
49
|
-
#{dependencies(config.dependencies).map{|d| "-d '#{d}'"}.join(" ")} \
|
50
|
-
.
|
51
|
-
}
|
32
|
+
FedoraFpmCommand.new(self, build_dir).command
|
52
33
|
end
|
34
|
+
|
35
|
+
class FedoraFpmCommand < FpmCommand
|
36
|
+
def args
|
37
|
+
list = super
|
38
|
+
list << "-t rpm"
|
39
|
+
list
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
53
43
|
end
|
54
44
|
end
|
55
45
|
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'pkgr/buildpack'
|
2
|
+
require 'pkgr/process'
|
3
|
+
require 'pkgr/distributions/base'
|
4
|
+
require 'pkgr/fpm_command'
|
5
|
+
|
6
|
+
module Pkgr
|
7
|
+
module Distributions
|
8
|
+
# Contains the various components required to make a packaged app integrate well with a Debian system.
|
9
|
+
class Sles < Base
|
10
|
+
# Only keep major digits
|
11
|
+
def release
|
12
|
+
@release[/^[0-9]+/]
|
13
|
+
end
|
14
|
+
|
15
|
+
def runner
|
16
|
+
@runner ||= Runner.new("sysv", "lsb-3.1", "chkconfig")
|
17
|
+
end
|
18
|
+
|
19
|
+
def package_test_command(package)
|
20
|
+
"rpm -qa '#{package}' | grep '#{package}' > /dev/null 2>&1"
|
21
|
+
end
|
22
|
+
|
23
|
+
def package_install_command(packages)
|
24
|
+
"sudo zypper refresh ; sudo zypper install -y #{packages.map{|package| "\"#{package}\""}.join(" ")}"
|
25
|
+
end
|
26
|
+
|
27
|
+
def installer_dependencies
|
28
|
+
super.push("which").push("net-tools").uniq
|
29
|
+
end
|
30
|
+
|
31
|
+
def fpm_command(build_dir)
|
32
|
+
SlesFpmCommand.new(self, build_dir).command
|
33
|
+
end
|
34
|
+
|
35
|
+
class SlesFpmCommand < FpmCommand
|
36
|
+
def args
|
37
|
+
list = super
|
38
|
+
list << "-t rpm"
|
39
|
+
list
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
require 'pkgr/distributions/redhat'
|
47
|
+
require 'pkgr/distributions/centos'
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Pkgr
|
2
|
+
class FpmCommand
|
3
|
+
attr_reader :distribution, :build_dir, :config
|
4
|
+
|
5
|
+
def initialize(distribution, build_dir)
|
6
|
+
@distribution = distribution
|
7
|
+
@build_dir = build_dir
|
8
|
+
@config = distribution.config
|
9
|
+
end
|
10
|
+
|
11
|
+
def command
|
12
|
+
%{fpm #{args.join(" ")} .}
|
13
|
+
end
|
14
|
+
|
15
|
+
def args
|
16
|
+
list = []
|
17
|
+
list << "-s dir"
|
18
|
+
list << "--verbose"
|
19
|
+
list << "--force"
|
20
|
+
list << "--exclude '**/.git**'"
|
21
|
+
list << %{-C "#{build_dir}"}
|
22
|
+
list << %{-n "#{config.name}"}
|
23
|
+
list << %{--version "#{config.version}"}
|
24
|
+
list << %{--iteration "#{config.iteration}"}
|
25
|
+
list << %{--url "#{config.homepage}"}
|
26
|
+
list << %{--provides "#{config.name}"}
|
27
|
+
list << %{--license "#{config.license}"} unless config.license.nil?
|
28
|
+
list << %{-a "#{config.architecture}"}
|
29
|
+
list << %{--description "#{config.description}"}
|
30
|
+
list << %{--maintainer "#{config.maintainer}"}
|
31
|
+
list << %{--vendor "#{config.vendor}"}
|
32
|
+
list << %{--template-scripts}
|
33
|
+
list << %{--before-install #{distribution.preinstall_file}}
|
34
|
+
list << %{--after-install #{distribution.postinstall_file}}
|
35
|
+
list << %{--before-remove #{distribution.preuninstall_file}}
|
36
|
+
list << %{--after-remove #{distribution.postuninstall_file}}
|
37
|
+
distribution.dependencies(config.dependencies).each{|d| list << "-d '#{d}'"}
|
38
|
+
list.compact
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/lib/pkgr/process.rb
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
module Pkgr
|
2
2
|
class Process
|
3
|
-
DAEMON_PROCESSES = ["web", "worker"]
|
4
|
-
|
5
3
|
attr_reader :name, :command
|
6
4
|
attr_accessor :scale
|
7
5
|
|
@@ -10,9 +8,5 @@ module Pkgr
|
|
10
8
|
@command = command
|
11
9
|
@scale = scale || 1
|
12
10
|
end
|
13
|
-
|
14
|
-
def daemon?
|
15
|
-
DAEMON_PROCESSES.include?(name)
|
16
|
-
end
|
17
11
|
end
|
18
12
|
end
|
data/lib/pkgr/version.rb
CHANGED
metadata
CHANGED
@@ -1,99 +1,99 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pkgr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.4.
|
4
|
+
version: 1.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cyril Rohr
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-02-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '10.3'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '10.3'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: thor
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
33
|
+
version: '0.19'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '0'
|
40
|
+
version: '0.19'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: fpm
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '1.1'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '1.1'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: facter
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '2.1'
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '2.1'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: mixlib-log
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
75
|
+
version: '1.6'
|
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.6'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: mixlib-shellout
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - "
|
87
|
+
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
89
|
+
version: '1.4'
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- - "
|
94
|
+
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
96
|
+
version: '1.4'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: rspec
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -108,9 +108,8 @@ dependencies:
|
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '2'
|
111
|
-
description:
|
112
|
-
|
113
|
-
init scripts and more.
|
111
|
+
description: Simplify the deployment of your applications by automatically packaging
|
112
|
+
your application and its dependencies on multiple platforms.
|
114
113
|
email:
|
115
114
|
- cyril.rohr@gmail.com
|
116
115
|
executables:
|
@@ -126,11 +125,13 @@ files:
|
|
126
125
|
- data/build_dependencies/centos.yml
|
127
126
|
- data/build_dependencies/debian.yml
|
128
127
|
- data/build_dependencies/fedora.yml
|
128
|
+
- data/build_dependencies/sles.yml
|
129
129
|
- data/build_dependencies/ubuntu.yml
|
130
130
|
- data/buildpacks/centos-6
|
131
131
|
- data/buildpacks/debian-6
|
132
132
|
- data/buildpacks/debian-7
|
133
133
|
- data/buildpacks/fedora-20
|
134
|
+
- data/buildpacks/sles-12
|
134
135
|
- data/buildpacks/ubuntu-10.04
|
135
136
|
- data/buildpacks/ubuntu-12.04
|
136
137
|
- data/buildpacks/ubuntu-14.04
|
@@ -138,6 +139,7 @@ files:
|
|
138
139
|
- data/dependencies/centos.yml
|
139
140
|
- data/dependencies/debian.yml
|
140
141
|
- data/dependencies/fedora.yml
|
142
|
+
- data/dependencies/sles.yml
|
141
143
|
- data/dependencies/ubuntu.yml
|
142
144
|
- data/environment/default.erb
|
143
145
|
- data/hooks/postinstall.sh
|
@@ -168,8 +170,10 @@ files:
|
|
168
170
|
- lib/pkgr/distributions/fedora.rb
|
169
171
|
- lib/pkgr/distributions/redhat.rb
|
170
172
|
- lib/pkgr/distributions/runner.rb
|
173
|
+
- lib/pkgr/distributions/sles.rb
|
171
174
|
- lib/pkgr/distributions/ubuntu.rb
|
172
175
|
- lib/pkgr/env.rb
|
176
|
+
- lib/pkgr/fpm_command.rb
|
173
177
|
- lib/pkgr/git.rb
|
174
178
|
- lib/pkgr/installer.rb
|
175
179
|
- lib/pkgr/process.rb
|
@@ -200,6 +204,6 @@ rubyforge_project:
|
|
200
204
|
rubygems_version: 2.2.2
|
201
205
|
signing_key:
|
202
206
|
specification_version: 4
|
203
|
-
summary: Package any app as a
|
207
|
+
summary: Package any Ruby, NodeJS or Go app as a deb or rpm package
|
204
208
|
test_files: []
|
205
209
|
has_rdoc:
|