pkgr 1.4.3 → 1.4.4

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: a4e3a70c418cef9f50841398e35eed52f1101f85
4
- data.tar.gz: 8820bd24da8af9c77431e512b4deeb275c4f8a65
3
+ metadata.gz: cff78ecb5e5e84c04eb9c36a903664cdfc4195c2
4
+ data.tar.gz: f09cd0f332a66eceee72cf9afd32dba516acf7ae
5
5
  SHA512:
6
- metadata.gz: acfb11a093245ef31b8f53e29014e229f8dd1befc90afb446e829f8e2ec0825ad0aa13e38c2901cb5b74dc0bc0f9196b9ac116e69aa244a9236e7dcb07465ffe
7
- data.tar.gz: a70f79e56a29d9523178e4907dff16d36996b3b725a04c269520fa61e94ed1f6a2daef33e72419fce743eb177943f8ab0f34d01540250fb42193a84dbea94766
6
+ metadata.gz: 1f620bd526031ff7a80fd21a6fdd745b6fa69578f11215addae6c1105f1670dff0037f504452350bbf9a0edbcc8bd24ca61461be81b7d083aaceb6407ae1eb50
7
+ data.tar.gz: 07443778726b8dbd8d703a4fd71b7677b3cc6414aa9d5a08156495bb26eb2efcfc2903c0496a9877728a83de56567d1aaa516d5026cdd93bd47a088244c3750e
data/README.md CHANGED
@@ -2,9 +2,9 @@
2
2
 
3
3
  ## Goal
4
4
 
5
- Make debian or rpm packages out of any app, including init script, logrotate, etc. Excellent way to distribute apps or command line tools without complicated installation instructions.
5
+ Make debian or rpm packages out of any app, including init script, crons, logrotate, etc. Excellent way to distribute apps or command line tools without complicated installation instructions.
6
6
 
7
- Hosted service available at <https://packager.io/>.
7
+ Hosted service available at <https://packager.io/>. Free for OpenSource apps.
8
8
 
9
9
  ## Officially supported languages
10
10
 
@@ -12,15 +12,19 @@ Hosted service available at <https://packager.io/>.
12
12
  * NodeJS
13
13
  * Go
14
14
 
15
- You can also point to other buildpacks ([doc](https://packager.io/documentation/reference/the-pkgryml-file.html#buildpack)). They may just work.
15
+ You can also point to other buildpacks ([doc](https://packager.io/documentation/customizing-the-build/#buildpack)). They may just work.
16
16
 
17
17
  ## Supported distributions (64bits only)
18
18
 
19
19
  * Ubuntu 14.04 ("trusty")
20
20
  * Ubuntu 12.04 ("precise")
21
+ * Debian 8 ("jessie")
21
22
  * Debian 7 ("wheezy")
22
- * Centos 6
23
+ * RHEL/CentOS 7
24
+ * RHEL/CentOS 6
25
+ * Suse Linux Enterprise Server 12
23
26
  * Fedora 20
27
+ * Amazon Linux AMI 2014
24
28
 
25
29
  ## Examples
26
30
 
@@ -146,6 +150,14 @@ If you get the following error `ERROR: While executing gem ... (ArgumentError)
146
150
  export LC_ALL=en_US.UTF-8
147
151
  sudo gem install pkgr
148
152
 
153
+ Looking for the init script? It is created the first time you run this command
154
+
155
+ sudo my-app scale web=1 worker=1
156
+
157
+ Issue getting nokogiri to compile? Try the following based on this [comment](https://github.com/crohr/pkgr/issues/60#issuecomment-96631181):
158
+
159
+ bundle config --local build.nokogiri "--use-system-libraries --with-xml2-include=/usr/include/libxml2"
160
+
149
161
  ## Authors
150
162
 
151
163
  * Cyril Rohr <cyril.rohr@gmail.com> - <http://crohr.me>, <https://packager.io>
@@ -0,0 +1,13 @@
1
+ default:
2
+ - curl
3
+ - gcc
4
+ - gcc-c++
5
+ - kernel-devel
6
+ - openssl-devel
7
+ - readline-devel
8
+ - libxml2-devel
9
+ - libxslt-devel
10
+ - libevent-devel
11
+ - postgresql-devel
12
+ - mysql-devel
13
+ - sqlite-devel
@@ -0,0 +1,3 @@
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
3
+ https://github.com/kr/heroku-buildpack-go.git
@@ -0,0 +1,3 @@
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
3
+ https://github.com/kr/heroku-buildpack-go.git
@@ -0,0 +1,3 @@
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
3
+ https://github.com/kr/heroku-buildpack-go.git
@@ -0,0 +1,3 @@
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
3
+ https://github.com/kr/heroku-buildpack-go.git
@@ -29,6 +29,7 @@ usage() {
29
29
  }
30
30
 
31
31
  DEFAULT_FILE=$(_p "/etc/default/${APP_NAME}")
32
+ SYSTEMD_DIR=$(_p "/etc/systemd/system")
32
33
 
33
34
  . ${DEFAULT_FILE}
34
35
 
@@ -86,6 +87,8 @@ current_number_of_processes() {
86
87
  PROCESS_NAME="$1"
87
88
  if [ "${APP_RUNNER_TYPE}" = "upstart" ]; then
88
89
  echo $(ls -rv1 $(_p /etc/init/)${APP_NAME}-${PROCESS_NAME}-*.conf 2>/dev/null | head -1 | sed -r 's/.*\-([0-9]+)\.conf/\1/g')
90
+ elif [ "${APP_RUNNER_TYPE}" = "systemd" ]; then
91
+ echo $(ls -rv1 $SYSTEMD_DIR/${APP_NAME}-${PROCESS_NAME}-*.service 2>/dev/null | head -1 | sed -r 's/.*\-([0-9]+)\.service/\1/g')
89
92
  else
90
93
  echo $(ls -rv1 $(_p /etc/init.d/)${APP_NAME}-${PROCESS_NAME}-* 2>/dev/null | head -1 | sed -r 's/.*\-([0-9]+)/\1/g')
91
94
  fi
@@ -114,6 +117,8 @@ sysv_enable() {
114
117
  $APP_RUNNER_CLI "$name" on
115
118
  elif [ "$APP_RUNNER_CLI" = "update-rc.d" ] ; then
116
119
  $APP_RUNNER_CLI "$name" defaults
120
+ elif [ "$APP_RUNNER_CLI" = "systemctl" ] ; then
121
+ $APP_RUNNER_CLI enable "$name"
117
122
  fi
118
123
  }
119
124
 
@@ -123,6 +128,8 @@ sysv_disable() {
123
128
  $APP_RUNNER_CLI "$name" off
124
129
  elif [ "$APP_RUNNER_CLI" = "update-rc.d" ] ; then
125
130
  $APP_RUNNER_CLI -f "$name" remove
131
+ elif [ "$APP_RUNNER_CLI" = "systemctl" ] ; then
132
+ $APP_RUNNER_CLI disable "$name"
126
133
  fi
127
134
  }
128
135
 
@@ -157,6 +164,30 @@ scale_up() {
157
164
 
158
165
  $APP_RUNNER_CLI start ${APP_NAME}-${PROCESS_NAME} || true
159
166
  $APP_RUNNER_CLI start ${APP_NAME} || true
167
+ 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
+ for i in $(seq ${SCALE_DELTA}); do
178
+ index=$((${i} + ${CURRENT_SCALE}))
179
+ PROCESS_ID="${APP_NAME}-${PROCESS_NAME}-${index}"
180
+ cp ${source}/${APP_NAME}-${PROCESS_NAME}-PROCESS_NUM.service $SYSTEMD_DIR/${PROCESS_ID}.service
181
+ port=$((${PORT} + ${index} - 1))
182
+
183
+ update_port $SYSTEMD_DIR/${PROCESS_ID}.service "${PROCESS_NAME}" $port $index
184
+
185
+ $APP_RUNNER_CLI enable "${PROCESS_ID}.service"
186
+ done
187
+
188
+ $APP_RUNNER_CLI daemon-reload
189
+ $APP_RUNNER_CLI start ${APP_NAME}-${PROCESS_NAME}.service
190
+ $APP_RUNNER_CLI start ${APP_NAME}.service
160
191
  else
161
192
  cp $(_p "${APP_HOME}/vendor/pkgr/scaling/sysv/${APP_NAME}") $(_p /etc/init.d/)
162
193
  chmod a+x $(_p "/etc/init.d/${APP_NAME}")
@@ -192,8 +223,12 @@ scale_down() {
192
223
  PROCESS_ID="${APP_NAME}-${PROCESS_NAME}-${index}"
193
224
 
194
225
  if [ "${APP_RUNNER_TYPE}" = "upstart" ]; then
195
- $APP_RUNNER_CLI stop "${PROCESS_ID}" || /bin/true # dont fail if server stopped differently
226
+ $APP_RUNNER_CLI stop "${PROCESS_ID}" || true # dont fail if server stopped differently
196
227
  rm -f $(_p "/etc/init/${PROCESS_ID}.conf")
228
+ elif [ "${APP_RUNNER_TYPE}" = "systemd" ]; then
229
+ $APP_RUNNER_CLI stop "${PROCESS_ID}.service" || true # dont fail if server stopped differently
230
+ $APP_RUNNER_CLI disable "${PROCESS_ID}.service" || true
231
+ rm -f $SYSTEMD_DIR/${PROCESS_ID}.service
197
232
  else
198
233
  $(_p "/etc/init.d/${PROCESS_ID}") stop
199
234
  sysv_disable ${PROCESS_ID}
@@ -231,18 +266,7 @@ configure() {
231
266
  }
232
267
 
233
268
  reconfigure() {
234
- if [ "$APP_ADDONS" = "" ] ; then
235
- configure --reconfigure
236
- else
237
- # only available for debian for now
238
- if which dpkg-reconfigure &>/dev/null ; then
239
- for addon in ${APP_ADDONS}; do
240
- dpkg-reconfigure "${APP_NAME}-${addon}"
241
- done
242
- # always reconfigure main package as well
243
- dpkg-reconfigure "${APP_NAME}"
244
- fi
245
- fi
269
+ configure --reconfigure
246
270
  }
247
271
 
248
272
  while : ; do
@@ -0,0 +1,9 @@
1
+ default:
2
+ - openssl
3
+ - readline
4
+ - libxml2
5
+ - libxslt
6
+ - libevent
7
+ - postgresql-libs
8
+ - mysql-libs
9
+ - sqlite
@@ -7,8 +7,6 @@ export APP_USER="<%= user %>"
7
7
  export APP_WIZARDS="<%= wizards.map{|wizard_group| wizard_group.map{|w| w.name}.join("|")}.join(",") %>"
8
8
  export APP_RUNNER_TYPE="<%= distribution.runner.type %>"
9
9
  export APP_RUNNER_CLI="<%= distribution.runner.cli %>"
10
- # Legacy addons
11
- export APP_ADDONS="<%= addons.map{|addon| addon.name}.join(" ") %>"
12
10
  export PORT=${PORT:=6000}
13
11
  <% if cli.is_a?(String) %>
14
12
  export HOME=${HOME:="/home/<%= user %>"}
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env bash
1
+ #!/bin/bash
2
2
 
3
3
  set -e
4
4
 
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env bash
1
+ #!/bin/bash
2
2
 
3
3
  set -e
4
4
 
@@ -8,7 +8,7 @@ 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 ] || [ -f /etc/SuSE-release ]; then
11
+ if [ -f /etc/redhat-release ] || [ -f /etc/system-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
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env bash
1
+ #!/bin/bash
2
2
 
3
3
  set -e
4
4
 
@@ -0,0 +1,9 @@
1
+ [Unit]
2
+ StopWhenUnneeded=true
3
+
4
+ [Service]
5
+ # this service is just a placeholder
6
+ ExecStart=/bin/sleep infinity
7
+
8
+ [Install]
9
+ WantedBy=multi-user.target
@@ -0,0 +1,15 @@
1
+ [Unit]
2
+ StopWhenUnneeded=true
3
+ Requires=<%= name %>-<%= process_name %>.service
4
+ After=<%= name %>-<%= process_name %>.service
5
+
6
+ [Service]
7
+ Environment=PORT=PORT_NUM
8
+ ExecStart=/usr/bin/<%= name %> run <%= process_name %>
9
+ Restart=always
10
+ StandardOutput=syslog
11
+ StandardError=syslog
12
+ SyslogIdentifier=%n
13
+
14
+ [Install]
15
+ WantedBy=<%= name %>-<%= process_name %>.service
@@ -0,0 +1,11 @@
1
+ [Unit]
2
+ StopWhenUnneeded=true
3
+ Requires=<%= name %>.service
4
+ After=<%= name %>.service
5
+
6
+ [Service]
7
+ # this service is just a placeholder
8
+ ExecStart=/bin/sleep infinity
9
+
10
+ [Install]
11
+ WantedBy=<%= name %>.service
@@ -1,6 +1,6 @@
1
1
  start on (started network-interface
2
2
  or started network-manager
3
- or started networking)
3
+ or started networking) and filesystem
4
4
 
5
5
  # The `networking` job is a task, which means it will be stopped after the network interfaces have been configured.
6
6
  # That's why we don't stop on "stopping networking".
@@ -1,110 +1,55 @@
1
+ require 'pathname'
2
+
1
3
  module Pkgr
2
4
  class Addon
3
- attr_reader :nickname, :addons_dir
4
- attr_reader :config
5
-
6
- def initialize(nickname, addons_dir, config)
5
+ def initialize(nickname)
7
6
  @nickname = nickname
8
- @addons_dir = addons_dir
9
- @config = config
10
7
  end
11
8
 
12
9
  def name
13
- File.basename(url_without_branch, ".git").sub("addon-", "")
10
+ File.basename(url).sub("addon-", "")
14
11
  end
15
12
 
16
- def url_without_branch
17
- nickname.split("#")[0].sub(/\.git$/,'')
13
+ def install!(dir, shell = Command.new(Pkgr.logger))
14
+ addon_dir = "#{dir}/#{name}"
15
+ FileUtils.mkdir_p addon_dir
16
+ puts "-----> [wizard] adding #{name} wizard (#{url}##{branch})"
17
+ if url.is_a?(Pathname)
18
+ shell.run! "cp -r #{url}/* #{addon_dir}"
19
+ else
20
+ shell.run! "curl -L --max-redirs 3 --retry 5 -s '#{tarball_url}' | tar xzf - --strip-components=1 -C '#{addon_dir}'"
21
+ end
18
22
  end
19
23
 
20
- def url
21
- if nickname.start_with?("http")
22
- url_without_branch
23
- else
24
- user, repo = nickname.split("/", 2)
25
- user, repo = "pkgr", user if repo.nil?
26
- repo = "addon-#{repo}" unless repo.start_with?("addon-")
24
+ private
27
25
 
28
- "https://github.com/#{user}/#{repo}"
26
+ def url
27
+ @url ||= begin
28
+ if @nickname.is_a?(Pathname)
29
+ @nickname
30
+ elsif @nickname.start_with?("http")
31
+ url_without_branch
32
+ else
33
+ user, repo = @nickname.split("/", 2)
34
+ user, repo = "pkgr", user if repo.nil?
35
+ repo = "addon-#{repo}" unless repo.start_with?("addon-")
36
+
37
+ "https://github.com/#{user}/#{repo}"
38
+ end
29
39
  end
30
40
  end
31
41
 
32
42
  def branch
33
- nickname.split("#")[1] || "master"
43
+ return if url.is_a?(Pathname)
44
+ @nickname.split("#")[1] || "master"
34
45
  end
35
46
 
36
47
  def tarball_url
37
48
  "#{url}/archive/#{branch}.tar.gz"
38
49
  end
39
50
 
40
- def debian_dependency_name
41
- [
42
- [config.name, name].join("-"),
43
- "(= #{config.version}-#{config.iteration})"
44
- ].join(" ")
45
- end
46
-
47
- def debtemplates
48
- debtemplates_file = File.join(dir, "debian", "templates")
49
- if File.exists?(debtemplates_file)
50
- File.new(debtemplates_file)
51
- else
52
- StringIO.new
53
- end
54
- end
55
-
56
- def debconfig
57
- debconfig_file = File.join(dir, "debian", "config")
58
- if File.exists?(debconfig_file)
59
- File.new(debconfig_file)
60
- else
61
- StringIO.new
62
- end
63
- end
64
-
65
- def install!(src_dir)
66
- install_addon = Mixlib::ShellOut.new %{curl -L --max-redirs 3 --retry 5 -s '#{tarball_url}' | tar xzf - --strip-components=1 -C '#{dir}'}
67
- install_addon.logger = Pkgr.logger
68
- install_addon.run_command
69
- install_addon.error!
70
-
71
- # TODO: remove args from command once all addons use env variables
72
- compile_addon = Mixlib::ShellOut.new(%{#{dir}/bin/compile '#{config.name}' '#{config.version}' '#{config.iteration}' '#{src_dir}' 2>&1}, {
73
- :environment => {
74
- "APP_NAME" => config.name,
75
- "APP_VERSION" => config.version,
76
- "APP_ITERATION" => config.iteration,
77
- "APP_SAFE_NAME" => config.name.gsub("-", "_"),
78
- "APP_USER" => config.user,
79
- "APP_GROUP" => config.group,
80
- "APP_WORKSPACE" => src_dir
81
- }
82
- })
83
- compile_addon.logger = Pkgr.logger
84
- compile_addon.live_stream = LiveStream.new(STDOUT)
85
- compile_addon.run_command
86
- compile_addon.error!
87
- end
88
-
89
- def dir
90
- @dir ||= begin
91
- directory = File.join(addons_dir, File.basename(name))
92
- FileUtils.mkdir_p(directory)
93
- directory
94
- end
95
- end
96
-
97
- class LiveStream
98
- attr_reader :stream
99
- def initialize(stream = STDOUT)
100
- @stream = stream
101
- end
102
-
103
- def <<(data)
104
- data.split("\n").each do |line|
105
- stream.puts " #{line}"
106
- end
107
- end
51
+ def url_without_branch
52
+ @nickname.split("#")[0].sub(/\.git$/,'')
108
53
  end
109
54
  end
110
55
  end
@@ -24,13 +24,7 @@ module Pkgr
24
24
  update_config
25
25
  check
26
26
  setup
27
-
28
- if config.installer
29
- setup_pipeline
30
- else
31
- setup_addons
32
- end
33
-
27
+ setup_pipeline
34
28
  compile
35
29
  write_env
36
30
  write_init
@@ -74,8 +68,6 @@ module Pkgr
74
68
  end
75
69
  end
76
70
  config.distribution = distribution
77
- # required to build proper Addon objects
78
- config.addons_dir = addons_dir
79
71
  # useful for templates that need to read files
80
72
  config.source_dir = source_dir
81
73
  config.build_dir = build_dir
@@ -112,17 +104,6 @@ module Pkgr
112
104
  end
113
105
  end
114
106
 
115
- # LEGACY, remove once openproject no longer needs it
116
- # If addons are declared in .pkgr.yml, add them
117
- def setup_addons
118
- config.addons.each do |addon|
119
- puts "-----> [addon] #{addon.name} (#{addon.url} @ #{addon.branch})"
120
- addon.install!(source_dir)
121
- dependency = distribution.add_addon(addon)
122
- config.dependencies.push(dependency) if dependency
123
- end
124
- end
125
-
126
107
  # Pass the app through the buildpack
127
108
  def compile
128
109
  if buildpack_for_app
@@ -263,10 +244,6 @@ module Pkgr
263
244
  File.join(source_dir, "vendor", "pkgr")
264
245
  end
265
246
 
266
- def addons_dir
267
- File.join(vendor_dir, "addons")
268
- end
269
-
270
247
  # Directory where binstubs will be created for the corresponding Procfile commands.
271
248
  def proc_dir
272
249
  File.join(vendor_dir, "processes")
@@ -9,7 +9,8 @@ module Pkgr
9
9
  "ubuntu-lucid" => "ubuntu-10.04",
10
10
  "ubuntu-precise" => "ubuntu-12.04",
11
11
  "debian-squeeze" => "debian-6",
12
- "debian-wheezy" => "debian-7"
12
+ "debian-wheezy" => "debian-7",
13
+ "debian-jessie" => "debian-8"
13
14
  }
14
15
 
15
16
  class << self
@@ -122,13 +123,6 @@ module Pkgr
122
123
  @errors ||= []
123
124
  end
124
125
 
125
- def addons
126
- # make proper Addon objects out of existing addon slugs
127
- (@table[:addons] || []).map do |addon_slug|
128
- Addon.new(addon_slug, addons_dir, self)
129
- end
130
- end
131
-
132
126
  def installer
133
127
  return nil if @table[:installer].nil? || @table[:installer] == false
134
128
  @table[:installer]
@@ -137,7 +131,11 @@ module Pkgr
137
131
  def wizards
138
132
  @wizards ||= (@table[:wizards] || []).map do |wizard_string|
139
133
  wizard_string.split(/\s*\|\s*/).map do |wizard|
140
- Addon.new(wizard, nil, nil)
134
+ if wizard.start_with?('.')
135
+ wizard = Pathname.new(source_dir).join(wizard).realpath
136
+ end
137
+
138
+ Addon.new(wizard)
141
139
  end
142
140
  end
143
141
  end
@@ -40,6 +40,11 @@ module Pkgr
40
40
  # Remove any non-digit characters that may be before the version number
41
41
  config.version ||= begin
42
42
  v = (Git.new(path).latest_tag || "").gsub(/^[^\d]+(\d.*)/, '\1')
43
+ # If it's not a Git archive, try to figure out svn revision number
44
+ begin
45
+ v = `cd #{path.to_s}&&svn info|grep Revision`.to_s.gsub!(/\D/, "") if (v !~ /^\d/)
46
+ rescue
47
+ end
43
48
  v = "0.0.0" if v !~ /^\d/
44
49
  v
45
50
  end
@@ -0,0 +1,6 @@
1
+ module Pkgr
2
+ module Distributions
3
+ class Amazon < Redhat
4
+ end
5
+ end
6
+ end
@@ -131,10 +131,6 @@ module Pkgr
131
131
  "etc/cron.d"
132
132
  end
133
133
 
134
- def add_addon(addon)
135
- nil
136
- end
137
-
138
134
  def preinstall_file
139
135
  @preinstall_file ||= generate_hook_file("preinstall.sh")
140
136
  @preinstall_file.path
@@ -1,20 +1,8 @@
1
- require "pkgr/distributions/fedora"
1
+ require "pkgr/distributions/redhat"
2
2
 
3
3
  module Pkgr
4
4
  module Distributions
5
- # Contains the various components required to make a packaged app integrate well with a CentOS system.
6
- class Centos < Fedora
7
- def runner
8
- # in truth it is 0.6.5, but it also works with 1.5 templates.
9
- # maybe adopt the same structure as pleaserun, with defaults, etc.
10
- @runner ||= Runner.new("upstart", "1.5", "initctl")
11
- end
12
-
13
- def templates
14
- list = super
15
- list.push Templates::DirTemplate.new("etc/init")
16
- list
17
- end
5
+ class Centos < Redhat
18
6
  end
19
7
  end
20
8
  end
@@ -13,7 +13,12 @@ module Pkgr
13
13
  end
14
14
 
15
15
  def runner
16
- @runner ||= Runner.new("sysv", "lsb-3.1", "update-rc.d")
16
+ @runner ||= case release
17
+ when /^8/
18
+ Runner.new("systemd", "default", "systemctl")
19
+ else
20
+ Runner.new("sysv", "lsb-3.1", "update-rc.d")
21
+ end
17
22
  end
18
23
 
19
24
  def package_test_command(package)
@@ -58,19 +63,6 @@ module Pkgr
58
63
  @debtemplates ||= Tempfile.new("debtemplates")
59
64
  end
60
65
 
61
- def add_addon(addon)
62
- # make a debian package out of the addon
63
- Dir.chdir(addon.dir) do
64
- make_package = Mixlib::ShellOut.new %{dpkg-buildpackage -b -d}
65
- make_package.logger = Pkgr.logger
66
- make_package.run_command
67
- make_package.error!
68
- end
69
- FileUtils.mv(Dir.glob(File.join(File.dirname(addon.dir), "*.deb")), Dir.pwd)
70
- # return name of the dependency
71
- addon.debian_dependency_name
72
- end
73
-
74
66
  class DebianFpmCommand < FpmCommand
75
67
  def args
76
68
  list = super
@@ -2,8 +2,27 @@ module Pkgr
2
2
  module Distributions
3
3
  class Redhat < Fedora
4
4
  def runner
5
- @runner ||= Runner.new("sysv", "lsb-3.1", "chkconfig")
5
+ @runner ||= case release
6
+ when /^6/
7
+ Runner.new("upstart", "1.5", "initctl")
8
+ else
9
+ # newer releases default to using systemd as the init system
10
+ Runner.new("systemd", "default", "systemctl")
11
+ end
6
12
  end
13
+
14
+ def templates
15
+ if ["centos-6", "redhat-6"].include?(slug)
16
+ list = super
17
+ list.push Templates::DirTemplate.new("etc/init")
18
+ list
19
+ else
20
+ super
21
+ end
22
+ end
23
+
7
24
  end
8
25
  end
9
26
  end
27
+
28
+ require 'pkgr/distributions/amazon'
@@ -9,6 +9,10 @@ module Pkgr
9
9
  type == "upstart"
10
10
  end
11
11
 
12
+ def systemd?
13
+ type == "systemd"
14
+ end
15
+
12
16
  def templates(process, app_name)
13
17
  send("templates_#{type}", process, app_name)
14
18
  end
@@ -31,6 +35,14 @@ module Pkgr
31
35
  ]
32
36
  end
33
37
 
38
+ def templates_systemd(process, app_name)
39
+ [
40
+ Templates::FileTemplate.new("systemd/#{app_name}.service", data_file("master.service.erb")),
41
+ Templates::FileTemplate.new("systemd/#{app_name}-#{process.name}.service", data_file("process_master.service.erb")),
42
+ Templates::FileTemplate.new("systemd/#{app_name}-#{process.name}-PROCESS_NUM.service", data_file("process.service.erb"))
43
+ ]
44
+ end
45
+
34
46
  def data_file(name)
35
47
  File.new(File.join(Pkgr.data_dir, "init", type, version, name))
36
48
  end
@@ -29,11 +29,7 @@ module Pkgr
29
29
  Dir.chdir(installer_tmp_dir) do
30
30
  config.wizards.each do |addon_group|
31
31
  addon_group.each do |addon|
32
- addon_dir = "addons/#{addon.name}"
33
- FileUtils.mkdir_p addon_dir
34
- puts "-----> [wizard] adding #{addon.name} wizard (#{addon.url}##{addon.branch})"
35
- shell.run!(
36
- "curl -L --max-redirs 3 --retry 5 -s '#{addon.tarball_url}' | tar xzf - --strip-components=1 -C '#{addon_dir}'")
32
+ addon.install! 'addons'
37
33
  end
38
34
  end
39
35
 
@@ -1,3 +1,3 @@
1
1
  module Pkgr
2
- VERSION = "1.4.3"
2
+ VERSION = "1.4.4"
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.3
4
+ version: 1.4.4
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-03-04 00:00:00.000000000 Z
11
+ date: 2015-05-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -122,20 +122,26 @@ files:
122
122
  - LICENSE
123
123
  - README.md
124
124
  - bin/pkgr
125
+ - data/build_dependencies/amazon.yml
125
126
  - data/build_dependencies/centos.yml
126
127
  - data/build_dependencies/debian.yml
127
128
  - data/build_dependencies/fedora.yml
128
129
  - data/build_dependencies/sles.yml
129
130
  - data/build_dependencies/ubuntu.yml
131
+ - data/buildpacks/amazon-2014
132
+ - data/buildpacks/amazon-2015
130
133
  - data/buildpacks/centos-6
134
+ - data/buildpacks/centos-7
131
135
  - data/buildpacks/debian-6
132
136
  - data/buildpacks/debian-7
137
+ - data/buildpacks/debian-8
133
138
  - data/buildpacks/fedora-20
134
139
  - data/buildpacks/sles-12
135
140
  - data/buildpacks/ubuntu-10.04
136
141
  - data/buildpacks/ubuntu-12.04
137
142
  - data/buildpacks/ubuntu-14.04
138
143
  - data/cli/cli.sh.erb
144
+ - data/dependencies/amazon.yml
139
145
  - data/dependencies/centos.yml
140
146
  - data/dependencies/debian.yml
141
147
  - data/dependencies/fedora.yml
@@ -146,6 +152,9 @@ files:
146
152
  - data/hooks/postuninstall.sh
147
153
  - data/hooks/preinstall.sh
148
154
  - data/hooks/preuninstall.sh
155
+ - data/init/systemd/default/master.service.erb
156
+ - data/init/systemd/default/process.service.erb
157
+ - data/init/systemd/default/process_master.service.erb
149
158
  - data/init/sysv/lsb-3.1/master.erb
150
159
  - data/init/sysv/lsb-3.1/process.erb
151
160
  - data/init/sysv/lsb-3.1/process_master.erb
@@ -164,6 +173,7 @@ files:
164
173
  - lib/pkgr/cron.rb
165
174
  - lib/pkgr/dispatcher.rb
166
175
  - lib/pkgr/distributions.rb
176
+ - lib/pkgr/distributions/amazon.rb
167
177
  - lib/pkgr/distributions/base.rb
168
178
  - lib/pkgr/distributions/centos.rb
169
179
  - lib/pkgr/distributions/debian.rb