pkgr 1.4.4 → 1.5.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cff78ecb5e5e84c04eb9c36a903664cdfc4195c2
4
- data.tar.gz: f09cd0f332a66eceee72cf9afd32dba516acf7ae
3
+ metadata.gz: 06310dd9deefd66e4d67362d37d7dccdcdf0c67a
4
+ data.tar.gz: 3510327310565582d099096ca2a1f5d1d45c0a8a
5
5
  SHA512:
6
- metadata.gz: 1f620bd526031ff7a80fd21a6fdd745b6fa69578f11215addae6c1105f1670dff0037f504452350bbf9a0edbcc8bd24ca61461be81b7d083aaceb6407ae1eb50
7
- data.tar.gz: 07443778726b8dbd8d703a4fd71b7677b3cc6414aa9d5a08156495bb26eb2efcfc2903c0496a9877728a83de56567d1aaa516d5026cdd93bd47a088244c3750e
6
+ metadata.gz: aef9f329e3ae1f861d301d93ebb57b09e694220cc67ff981b1c626f37b903d656236a4d2eeef63c27209b876cd95a98e508995c3265c1df2942fbe51d3207413
7
+ data.tar.gz: 846f1f6ae5c13d848cae05bed22b896e608a7160c455c9836246cb95a7872c41c3712f4281921291fe8794f3758011fb335cc91bdd895df1daa40455ca9101d0
data/README.md CHANGED
@@ -32,7 +32,11 @@ See <https://packager.io/> for examples of apps packaged with `pkgr` (Gitlab, Op
32
32
 
33
33
  ## Installation
34
34
 
35
- On a debian based build machine:
35
+ You can find DEB and RPM packages for a wide range of distributions on Packager.io:
36
+
37
+ <https://packager.io/gh/crohr/pkgr>
38
+
39
+ Or, installing as a gem, on debian-based machines:
36
40
 
37
41
  sudo apt-get update
38
42
  sudo apt-get install -y build-essential ruby1.9.1-full rubygems1.9.1
@@ -57,11 +61,14 @@ Full command line options are given below:
57
61
  [--buildpack-list=BUILDPACK_LIST] # Specify a file containing a list of buildpacks to use (--buildpack takes precedence if given)
58
62
  [--changelog=CHANGELOG] # Changelog
59
63
  [--maintainer=MAINTAINER] # Maintainer
64
+ [--vendor=VENDOR] # Package vendor
60
65
  [--architecture=ARCHITECTURE] # Target architecture for the package
61
66
  # Default: x86_64
62
67
  [--runner=RUNNER] # Force a specific runner (e.g. upstart-1.5, sysv-lsb-1.3)
63
68
  [--homepage=HOMEPAGE] # Project homepage
64
69
  [--description=DESCRIPTION] # Project description
70
+ [--category=CATEGORY] # Category this package belongs to
71
+ # Default: none
65
72
  [--version=VERSION] # Package version (if git directory given, it will use the latest git tag available)
66
73
  [--iteration=ITERATION] # Package iteration (you should keep the default here)
67
74
  # Default: 20141015024539
@@ -73,6 +80,8 @@ Full command line options are given below:
73
80
  [--after-precompile=AFTER_PRECOMPILE] # Provide a script to run just after the buildpack compilation, on the build machine. Path will be resolved from the temporary code repository folder, so use absolute paths if needed.
74
81
  [--before-install=BEFORE_INSTALL] # Provide a script to run just before a package gets installated or updated, on the target machine.
75
82
  [--after-install=AFTER_INSTALL] # Provide a script to run just after a package gets installated or updated, on the target machine.
83
+ [--before-remove=BEFORE_REMOVE] # Provide a script to run just before a package gets uninstallated, on the target machine.
84
+ [--after-remove=AFTER_REMOVE] # Provide a script to run just after a package gets uninstallated, on the target machine.
76
85
  [--dependencies=one two three] # Specific system dependencies that you want to install with the package
77
86
  [--build-dependencies=one two three] # Specific system dependencies that must be present before building
78
87
  [--host=HOST] # Remote host to build on (default: local machine)
@@ -84,6 +93,11 @@ Full command line options are given below:
84
93
  [--env=one two three] # Specify environment variables for buildpack (--env "CURL_TIMEOUT=2" "BUNDLE_WITHOUT=development test")
85
94
  [--force-os=FORCE_OS] # Force a specific distribution to build for (e.g. --force-os "ubuntu-12.04"). This may result in a broken package.
86
95
  [--store-cache], [--no-store-cache] # Output a tarball of the cache in the current directory (name: cache.tar.gz)
96
+ [--verify], [--no-verify] # Verifies output package
97
+ # Default: true
98
+ [--data-dir=DATA_DIR] # Custom path to data directory. Can be used for overriding default templates, hooks(pre-, post- scripts), configs (buildpacks, distro dependencies), environments, etc.
99
+ # Default: ./pkgr/data
100
+ [--directories=DIRECTORIES] # Recursively mark a directory as being owned by the package
87
101
  [--verbose], [--no-verbose] # Run verbosely
88
102
  [--debug], [--no-debug] # Run very verbosely
89
103
  [--name=NAME] # Application name (if directory given, it will default to the directory name)
@@ -92,7 +106,7 @@ Full command line options are given below:
92
106
 
93
107
  ## Why?
94
108
 
95
- Tools such as [Capistrano](http://capify.org/) are great for deploying
109
+ Tools such as [Capistrano](http://capistranorb.com/) are great for deploying
96
110
  applications, but the deployment recipe can quickly become a mess, and scaling
97
111
  the deployment to more than a few servers can prove to be difficult. Plus, if
98
112
  you're already using automation tools such as
@@ -2,12 +2,17 @@ default:
2
2
  - curl
3
3
  - gcc
4
4
  - gcc-c++
5
- - kernel-devel
6
5
  - libopenssl-devel
7
6
  - readline-devel
8
7
  - libxml2-devel
9
8
  - libxslt-devel
10
9
  - libevent-devel
11
- - postgresql-devel
12
10
  - libmysqlclient-devel
13
11
  - sqlite3-devel
12
+ - timezone
13
+ sles-11:
14
+ - kernel-default-devel
15
+ - postgresql94-devel
16
+ sles-12:
17
+ - kernel-devel
18
+ - postgresql-devel
@@ -13,3 +13,5 @@ ubuntu-10.04:
13
13
  - libssl0.9.8
14
14
  ubuntu-12.04:
15
15
  - libssl1.0.0
16
+ ubuntu-16.04:
17
+ - libssl1.0.0
@@ -0,0 +1,2 @@
1
+ https://github.com/pkgr/heroku-buildpack-ruby.git#universal,BUILDPACK_NODE_VERSION="0.6.8",CURL_CONNECT_TIMEOUT=60,CURL_TIMEOUT=300
2
+ https://github.com/heroku/heroku-buildpack-nodejs.git#v58
@@ -1,2 +1,2 @@
1
- https://github.com/pkgr/heroku-buildpack-ruby.git#universal-staging,BUILDPACK_NODE_VERSION="0.6.8",CURL_CONNECT_TIMEOUT=60,CURL_TIMEOUT=300
1
+ https://github.com/pkgr/heroku-buildpack-ruby.git#universal,BUILDPACK_NODE_VERSION="0.6.8",CURL_CONNECT_TIMEOUT=60,CURL_TIMEOUT=300
2
2
  https://github.com/heroku/heroku-buildpack-nodejs.git#v58
@@ -0,0 +1,3 @@
1
+ https://github.com/pkgr/heroku-buildpack-ruby.git,CURL_CONNECT_TIMEOUT=60,CURL_TIMEOUT=300
2
+ https://github.com/heroku/heroku-buildpack-nodejs.git#v58
3
+ https://github.com/kr/heroku-buildpack-go.git
@@ -50,6 +50,7 @@ fi
50
50
 
51
51
  # Source all environment variables for the app. This must be done as
52
52
  # privileged user since the config variables are only readable by root.
53
+ PORT_WAS=$PORT
53
54
  for file in $(_p "/etc/${APP_NAME}/conf.d")/*; do
54
55
  if [ -f $file ]; then . $file; fi
55
56
  done
@@ -142,14 +143,6 @@ scale_up() {
142
143
  echo "Scaling up..."
143
144
 
144
145
  if [ "${APP_RUNNER_TYPE}" = "upstart" ]; then
145
- # copy initd
146
- cp $(_p "${APP_HOME}/vendor/pkgr/scaling/upstart/${APP_NAME}") $(_p "/etc/init.d/")
147
- chmod 0755 $(_p "/etc/init.d/${APP_NAME}")
148
- # copy master
149
- cp $(_p "${APP_HOME}/vendor/pkgr/scaling/upstart/${APP_NAME}.conf") $(_p "/etc/init/")
150
- # copy master process
151
- cp $(_p "${APP_HOME}/vendor/pkgr/scaling/upstart/${APP_NAME}-${PROCESS_NAME}.conf") $(_p "/etc/init/")
152
-
153
146
  for i in $(seq ${SCALE_DELTA}); do
154
147
  index=$((${i} + ${CURRENT_SCALE}))
155
148
  PROCESS_ID="${APP_NAME}-${PROCESS_NAME}-${index}"
@@ -165,15 +158,6 @@ scale_up() {
165
158
  $APP_RUNNER_CLI start ${APP_NAME}-${PROCESS_NAME} || true
166
159
  $APP_RUNNER_CLI start ${APP_NAME} || true
167
160
  elif [ "$APP_RUNNER_TYPE" = "systemd" ]; then
168
- local source=$(_p "${APP_HOME}/vendor/pkgr/scaling/systemd")
169
- # copy master
170
- cp ${source}/${APP_NAME}.service $SYSTEMD_DIR
171
- # copy master process
172
- cp ${source}/${APP_NAME}-${PROCESS_NAME}.service $SYSTEMD_DIR
173
-
174
- $APP_RUNNER_CLI enable ${APP_NAME}.service || true
175
- $APP_RUNNER_CLI enable ${APP_NAME}-${PROCESS_NAME}.service || true
176
-
177
161
  for i in $(seq ${SCALE_DELTA}); do
178
162
  index=$((${i} + ${CURRENT_SCALE}))
179
163
  PROCESS_ID="${APP_NAME}-${PROCESS_NAME}-${index}"
@@ -189,12 +173,6 @@ scale_up() {
189
173
  $APP_RUNNER_CLI start ${APP_NAME}-${PROCESS_NAME}.service
190
174
  $APP_RUNNER_CLI start ${APP_NAME}.service
191
175
  else
192
- cp $(_p "${APP_HOME}/vendor/pkgr/scaling/sysv/${APP_NAME}") $(_p /etc/init.d/)
193
- chmod a+x $(_p "/etc/init.d/${APP_NAME}")
194
- sysv_enable ${APP_NAME}
195
- cp $(_p "${APP_HOME}/vendor/pkgr/scaling/sysv/${APP_NAME}-${PROCESS_NAME}") $(_p /etc/init.d/)
196
- chmod a+x $(_p "/etc/init.d/${APP_NAME}-${PROCESS_NAME}")
197
- sysv_enable ${APP_NAME}-${PROCESS_NAME}
198
176
  for i in $(seq ${SCALE_DELTA}); do
199
177
  index=$((${i} + ${CURRENT_SCALE}))
200
178
  PROCESS_ID="${APP_NAME}-${PROCESS_NAME}-${index}"
@@ -247,6 +225,32 @@ scale() {
247
225
  CURRENT_SCALE=${CURRENT_SCALE:="0"}
248
226
  SCALE_DELTA=$((${NEW_SCALE} - ${CURRENT_SCALE}))
249
227
 
228
+ if [ "${APP_RUNNER_TYPE}" = "upstart" ]; then
229
+ # copy initd
230
+ cp $(_p "${APP_HOME}/vendor/pkgr/scaling/upstart/${APP_NAME}") $(_p "/etc/init.d/")
231
+ chmod 0755 $(_p "/etc/init.d/${APP_NAME}")
232
+ # copy master
233
+ cp $(_p "${APP_HOME}/vendor/pkgr/scaling/upstart/${APP_NAME}.conf") $(_p "/etc/init/")
234
+ # copy master process
235
+ cp $(_p "${APP_HOME}/vendor/pkgr/scaling/upstart/${APP_NAME}-${PROCESS_NAME}.conf") $(_p "/etc/init/")
236
+ elif [ "$APP_RUNNER_TYPE" = "systemd" ]; then
237
+ local source=$(_p "${APP_HOME}/vendor/pkgr/scaling/systemd")
238
+ # copy master
239
+ cp ${source}/${APP_NAME}.service $SYSTEMD_DIR
240
+ # copy master process
241
+ cp ${source}/${APP_NAME}-${PROCESS_NAME}.service $SYSTEMD_DIR
242
+
243
+ $APP_RUNNER_CLI enable ${APP_NAME}.service || true
244
+ $APP_RUNNER_CLI enable ${APP_NAME}-${PROCESS_NAME}.service || true
245
+ else
246
+ cp $(_p "${APP_HOME}/vendor/pkgr/scaling/sysv/${APP_NAME}") $(_p /etc/init.d/)
247
+ chmod a+x $(_p "/etc/init.d/${APP_NAME}")
248
+ sysv_enable ${APP_NAME}
249
+ cp $(_p "${APP_HOME}/vendor/pkgr/scaling/sysv/${APP_NAME}-${PROCESS_NAME}") $(_p /etc/init.d/)
250
+ chmod a+x $(_p "/etc/init.d/${APP_NAME}-${PROCESS_NAME}")
251
+ sysv_enable ${APP_NAME}-${PROCESS_NAME}
252
+ fi
253
+
250
254
  if [ $SCALE_DELTA -gt 0 ]; then
251
255
  scale_up "${PROCESS_NAME}" $CURRENT_SCALE $NEW_SCALE $SCALE_DELTA
252
256
  elif [ $SCALE_DELTA -lt 0 ]; then
@@ -290,6 +294,9 @@ while : ; do
290
294
  runnable="${runnable}$(printf " %q" ${COMMAND} "$@")"
291
295
  fi
292
296
 
297
+ # fix port
298
+ export PORT=$PORT_WAS
299
+
293
300
  # Do not use su, to avoid creating a new process. Note: chroot version
294
301
  # is too old on Ubuntu Lucid, so this will fail. It works on Debian
295
302
  # Squeeze though (and later).
@@ -297,7 +304,8 @@ while : ; do
297
304
  if [ $(id -u) = $(id -u ${APP_USER}) ]; then
298
305
  exec sh -c "cd $(_p ${APP_HOME}) && $runnable"
299
306
  else
300
- exec chroot --userspec ${APP_USER}:${APP_GROUP} "/" sh -c "cd $(_p ${APP_HOME}) && $runnable"
307
+ additional_groups="$(id -Gn ${APP_USER} | tr ' ' ',')"
308
+ exec chroot --userspec ${APP_USER}:${APP_GROUP} --groups="${additional_groups}" "/" sh -c "cd $(_p ${APP_HOME}) && $runnable"
301
309
  fi
302
310
 
303
311
  break ;;
@@ -19,3 +19,9 @@ debian-7:
19
19
  - libevent-2.0-5
20
20
  - libevent-core-2.0-5
21
21
  - libevent-extra-2.0-5
22
+ ubuntu-16.04:
23
+ - libssl1.0.0
24
+ - libmysqlclient20
25
+ - libevent-2.0-5
26
+ - libevent-core-2.0-5
27
+ - libevent-extra-2.0-5
@@ -4,7 +4,12 @@ default:
4
4
  - libxml2
5
5
  - libxslt
6
6
  - libevent
7
- - postgresql93
8
- - libmysqlclient18
9
7
  - sqlite3
10
8
  - shadow
9
+ sles-11:
10
+ - libmysqlclient15
11
+ - libmysqlclient_r15
12
+ - postgresql
13
+ sles-12:
14
+ - libmysqlclient18
15
+ - postgresql93
@@ -19,3 +19,9 @@ ubuntu-12.04:
19
19
  - libevent-2.0-5
20
20
  - libevent-core-2.0-5
21
21
  - libevent-extra-2.0-5
22
+ ubuntu-16.04:
23
+ - libssl1.0.0
24
+ - libmysqlclient20
25
+ - libevent-2.0-5
26
+ - libevent-core-2.0-5
27
+ - libevent-extra-2.0-5
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env bash
1
+ #!/bin/bash
2
2
 
3
3
  set -e
4
4
 
@@ -1,8 +1,2 @@
1
- start on (started network-interface
2
- or started network-manager
3
- or started networking) and filesystem
4
-
5
- # The `networking` job is a task, which means it will be stopped after the network interfaces have been configured.
6
- # That's why we don't stop on "stopping networking".
7
- # See <https://github.com/ddollar/foreman/issues/263>
8
- stop on runlevel [!2345]
1
+ start on runlevel [2345]
2
+ stop on runlevel [06]
@@ -13,8 +13,13 @@ module Pkgr
13
13
  class ConfigurationInvalid < Base; end
14
14
  end
15
15
 
16
+ def data_dir=(path)
17
+ @data_dir = path
18
+ end
19
+ module_function :data_dir=
20
+
16
21
  def data_dir
17
- File.expand_path("../../data", __FILE__)
22
+ @data_dir ||= File.expand_path("../../data", __FILE__)
18
23
  end
19
24
  module_function :data_dir
20
25
  end
@@ -68,6 +68,7 @@ module Pkgr
68
68
  end
69
69
  end
70
70
  config.distribution = distribution
71
+ config.env.variables.push("TARGET=#{distribution.target}")
71
72
  # useful for templates that need to read files
72
73
  config.source_dir = source_dir
73
74
  config.build_dir = build_dir
@@ -109,11 +110,17 @@ module Pkgr
109
110
  if buildpack_for_app
110
111
  puts "-----> #{buildpack_for_app.banner} app"
111
112
 
113
+ begin
114
+ FileUtils.mkdir_p(app_home_dir)
115
+ rescue Errno::EACCES => e
116
+ Pkgr.logger.warn "Can't create #{app_home_dir.inspect}, which may be needed by some buildpacks."
117
+ end
112
118
  FileUtils.mkdir_p(compile_cache_dir)
119
+ FileUtils.mkdir_p(compile_env_dir)
113
120
 
114
121
  run_hook config.before_hook
115
- buildpack_for_app.compile(source_dir, compile_cache_dir)
116
- buildpack_for_app.release(source_dir, compile_cache_dir)
122
+ buildpack_for_app.compile(source_dir, compile_cache_dir, compile_env_dir)
123
+ buildpack_for_app.release(source_dir)
117
124
  run_hook config.after_hook
118
125
  else
119
126
  raise Errors::UnknownAppType, "Can't find a buildpack for your app"
@@ -258,11 +265,21 @@ module Pkgr
258
265
  File.join(source_dir, "Procfile")
259
266
  end
260
267
 
268
+ # Some buildpacks may need the target home dir to exist
269
+ def app_home_dir
270
+ config.home
271
+ end
272
+
261
273
  # Directory where the buildpacks can store stuff.
262
274
  def compile_cache_dir
263
275
  config.compile_cache_dir || File.join(source_dir, ".git/cache")
264
276
  end
265
277
 
278
+ # Directory where the buildpacks can store config envs.
279
+ def compile_env_dir
280
+ config.compile_env_dir ||= Dir.mktmpdir
281
+ end
282
+
266
283
  # Returns the current distribution we're packaging for.
267
284
  def distribution
268
285
  @distribution ||= Distributions.current(config)
@@ -35,8 +35,8 @@ module Pkgr
35
35
  buildpack_detect.exitstatus == 0
36
36
  end
37
37
 
38
- def compile(path, compile_cache_dir)
39
- cmd = %{env -i PATH="$PATH"#{env} #{dir}/bin/compile "#{path}" "#{compile_cache_dir}" }
38
+ def compile(path, compile_cache_dir, compile_env_dir)
39
+ cmd = %{env -i PATH="$PATH"#{env} #{dir}/bin/compile "#{path}" "#{compile_cache_dir}" "#{compile_env_dir}" }
40
40
  Pkgr.debug "Running #{cmd.inspect}"
41
41
 
42
42
  Dir.chdir(path) do
@@ -52,8 +52,8 @@ module Pkgr
52
52
  true
53
53
  end
54
54
 
55
- def release(path, compile_cache_dir)
56
- buildpack_release = Mixlib::ShellOut.new("#{dir}/bin/release \"#{path}\" \"#{compile_cache_dir}\" > #{path}/.release")
55
+ def release(path)
56
+ buildpack_release = Mixlib::ShellOut.new("#{dir}/bin/release \"#{path}\" > #{path}/.release")
57
57
  buildpack_release.logger = Pkgr.logger
58
58
  buildpack_release.run_command
59
59
  buildpack_release.exitstatus == 0
@@ -75,7 +75,7 @@ module Pkgr
75
75
  def refresh(edge = true)
76
76
  return if !edge
77
77
  Dir.chdir(dir) do
78
- buildpack_refresh = Mixlib::ShellOut.new("git fetch origin && git reset --hard $(git describe 'origin/#{branch}' || git describe '#{branch}')")
78
+ buildpack_refresh = Mixlib::ShellOut.new("git fetch origin && ( git reset --hard #{branch} || git reset --hard origin/#{branch} )")
79
79
  buildpack_refresh.logger = Pkgr.logger
80
80
  buildpack_refresh.run_command
81
81
  buildpack_refresh.error!
@@ -83,20 +83,22 @@ module Pkgr
83
83
  end
84
84
 
85
85
  def install
86
- FileUtils.mkdir_p(buildpack_cache_dir)
87
- Dir.chdir(buildpack_cache_dir) do
88
- puts "-----> Fetching buildpack #{url} at #{branch}"
89
- buildpack_install = Mixlib::ShellOut.new("git clone \"#{url}\"")
90
- buildpack_install.logger = Pkgr.logger
91
- buildpack_install.run_command
92
- buildpack_install.error!
86
+ unless exists?
87
+ FileUtils.mkdir_p(buildpack_cache_dir)
88
+ Dir.chdir(buildpack_cache_dir) do
89
+ puts "-----> Fetching buildpack #{url} at #{branch}"
90
+ buildpack_install = Mixlib::ShellOut.new("git clone '#{url}'")
91
+ buildpack_install.logger = Pkgr.logger
92
+ buildpack_install.run_command
93
+ buildpack_install.error!
94
+ end
93
95
  end
94
96
  refresh(true)
95
97
  end
96
98
 
97
99
  def replace_app_with_app_home(app_home)
98
100
  Dir.chdir(dir) do
99
- buildpack_replace = Mixlib::ShellOut.new("find . -type f -print0 | xargs -0 perl -pi -e s,/app,#{app_home},g")
101
+ buildpack_replace = Mixlib::ShellOut.new("find . -type f -not -path '*/.git/*' -print0 | xargs -0 perl -pi -e s,/app/,#{app_home}/,g")
100
102
  buildpack_replace.logger = Pkgr.logger
101
103
  buildpack_replace.run_command
102
104
  buildpack_replace.error!
@@ -5,6 +5,12 @@ require 'pkgr/env'
5
5
 
6
6
  module Pkgr
7
7
  class CLI < Thor
8
+ no_tasks do
9
+ def self.default_data_dir
10
+ File.expand_path("../../../data", __FILE__)
11
+ end
12
+ end
13
+
8
14
  class_option :verbose,
9
15
  :type => :boolean,
10
16
  :default => false,
@@ -37,8 +43,7 @@ module Pkgr
37
43
  :desc => "Maintainer"
38
44
  method_option :vendor,
39
45
  :type => :string,
40
- :desc => "Package vendor",
41
- :default => "pkgr <https://github.com/crohr/pkgr>"
46
+ :desc => "Package vendor"
42
47
  method_option :architecture,
43
48
  :type => :string,
44
49
  :default => "x86_64",
@@ -52,6 +57,10 @@ module Pkgr
52
57
  method_option :description,
53
58
  :type => :string,
54
59
  :desc => "Project description"
60
+ method_option :category,
61
+ :type => :string,
62
+ :default => "none",
63
+ :desc => "Category this package belongs to"
55
64
  method_option :version,
56
65
  :type => :string,
57
66
  :desc => "Package version (if git directory given, it will use the latest git tag available)"
@@ -100,6 +109,10 @@ module Pkgr
100
109
  :type => :array,
101
110
  :default => [],
102
111
  :desc => "Specific system dependencies that must be present before building"
112
+ method_option :disable_default_dependencies,
113
+ :type => :boolean,
114
+ :default => false,
115
+ :desc => "Disable default dependencies"
103
116
  method_option :host,
104
117
  :type => :string,
105
118
  :desc => "Remote host to build on (default: local machine)"
@@ -129,10 +142,23 @@ module Pkgr
129
142
  :type => :boolean,
130
143
  :default => true,
131
144
  :desc => "Verifies output package"
145
+ method_option :data_dir,
146
+ :type => :string,
147
+ :default => default_data_dir,
148
+ :desc => "Custom path to data directory. Can be used for overriding default templates, hooks(pre-, post- scripts), configs (buildpacks, distro dependencies), environments, etc."
149
+ method_option :directories,
150
+ :type => :string,
151
+ :default => nil,
152
+ :desc => "Recursively mark a directory as being owned by the package"
153
+ method_option :disable_cli,
154
+ :type => :boolean,
155
+ :default => false,
156
+ :desc => "Disable installing CLI"
132
157
 
133
158
  def package(tarball)
134
159
  Pkgr.level = Logger::INFO if options[:verbose]
135
160
  Pkgr.level = Logger::DEBUG if options[:debug]
161
+ Pkgr.data_dir = options[:data_dir]
136
162
 
137
163
  Pkgr::Buildpack.buildpacks_cache_dir = options[:buildpacks_cache_dir] if options[:buildpacks_cache_dir]
138
164
 
@@ -73,7 +73,19 @@ module Pkgr
73
73
  end
74
74
 
75
75
  def cli?
76
- @table.has_key?(:cli) ? @table[:cli] : true
76
+ if disable_cli.nil?
77
+ @table.has_key?(:cli) ? @table[:cli] : true
78
+ else
79
+ !disable_cli
80
+ end
81
+ end
82
+
83
+ def skip_default_dependencies?
84
+ if disable_default_dependencies.nil?
85
+ @table[:default_dependencies] === false
86
+ else
87
+ disable_default_dependencies == true
88
+ end
77
89
  end
78
90
 
79
91
  def home
@@ -104,6 +116,10 @@ module Pkgr
104
116
  @table[:maintainer] || "<someone@pkgr>"
105
117
  end
106
118
 
119
+ def vendor
120
+ @table[:vendor] || "pkgr <https://github.com/crohr/pkgr>"
121
+ end
122
+
107
123
  def env
108
124
  @table[:env].is_a?(Pkgr::Env) ? @table[:env] : Pkgr::Env.new(@table[:env])
109
125
  end
@@ -27,6 +27,13 @@ module Pkgr
27
27
  [os, release].join("-")
28
28
  end # def slug
29
29
 
30
+ def target
31
+ {
32
+ "centos-6" => "el:6",
33
+ "centos-7" => "el:7"
34
+ }.fetch(slug, slug.sub("-", ":"))
35
+ end
36
+
30
37
  def package_test_command(package)
31
38
  raise NotImplementedError, "package_test_command must be implemented"
32
39
  end
@@ -80,6 +87,7 @@ module Pkgr
80
87
 
81
88
  def dependencies(other_dependencies = nil)
82
89
  deps = YAML.load_file(data_file("dependencies", "#{os}.yml"))
90
+ deps = {} if config.skip_default_dependencies?
83
91
  (deps["default"] || []) | (deps[slug] || []) | (other_dependencies || [])
84
92
  end # def dependencies
85
93
 
@@ -5,7 +5,6 @@ require 'pkgr/fpm_command'
5
5
 
6
6
  module Pkgr
7
7
  module Distributions
8
- # Contains the various components required to make a packaged app integrate well with a Debian system.
9
8
  class Sles < Base
10
9
  # Only keep major digits
11
10
  def release
@@ -25,7 +24,12 @@ module Pkgr
25
24
  end
26
25
 
27
26
  def installer_dependencies
28
- super.push("which").push("net-tools").uniq
27
+ if release.to_i > 11
28
+ super.push("which").push("net-tools").uniq
29
+ else
30
+ # sles-11 already has which installed
31
+ super.push("net-tools").uniq
32
+ end
29
33
  end
30
34
 
31
35
  def fpm_command(build_dir)
@@ -42,6 +46,3 @@ module Pkgr
42
46
  end
43
47
  end
44
48
  end
45
-
46
- require 'pkgr/distributions/redhat'
47
- require 'pkgr/distributions/centos'
@@ -10,7 +10,12 @@ module Pkgr
10
10
  end
11
11
 
12
12
  def runner
13
- @runner ||= Runner.new("upstart", "1.5", "initctl")
13
+ @runner ||= case release
14
+ when /^16.04/
15
+ Runner.new("systemd", "default", "systemctl")
16
+ else
17
+ Runner.new("upstart", "1.5", "initctl")
18
+ end
14
19
  end
15
20
 
16
21
  def templates
@@ -31,11 +31,13 @@ module Pkgr
31
31
  list << "--description" << config.description
32
32
  list << "--maintainer" << config.maintainer
33
33
  list << "--vendor" << config.vendor
34
- list << %{--template-scripts}
34
+ list << "--category" << config.category
35
+ list << "--template-scripts"
35
36
  list << "--before-install" << distribution.preinstall_file
36
37
  list << "--after-install" << distribution.postinstall_file
37
38
  list << "--before-remove" << distribution.preuninstall_file
38
39
  list << "--after-remove" << distribution.postuninstall_file
40
+ list << "--directories" << config.directories unless config.directories.nil?
39
41
  distribution.dependencies(config.dependencies).each{|d| list << "-d" << d}
40
42
  list.compact
41
43
  end
@@ -1,3 +1,3 @@
1
1
  module Pkgr
2
- VERSION = "1.4.4"
2
+ VERSION = "1.5.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pkgr
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.4
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cyril Rohr
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-12 00:00:00.000000000 Z
11
+ date: 2016-09-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -136,10 +136,12 @@ files:
136
136
  - data/buildpacks/debian-7
137
137
  - data/buildpacks/debian-8
138
138
  - data/buildpacks/fedora-20
139
+ - data/buildpacks/sles-11
139
140
  - data/buildpacks/sles-12
140
141
  - data/buildpacks/ubuntu-10.04
141
142
  - data/buildpacks/ubuntu-12.04
142
143
  - data/buildpacks/ubuntu-14.04
144
+ - data/buildpacks/ubuntu-16.04
143
145
  - data/cli/cli.sh.erb
144
146
  - data/dependencies/amazon.yml
145
147
  - data/dependencies/centos.yml