pkgr 1.5.1 → 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/LICENSE +2 -2
- data/README.md +20 -9
- data/data/build_dependencies/debian.yml +12 -2
- data/data/buildpacks/amazon-2014 +2 -2
- data/data/buildpacks/amazon-2015 +2 -2
- data/data/buildpacks/centos-6 +2 -2
- data/data/buildpacks/centos-7 +2 -2
- data/data/buildpacks/debian-6 +1 -1
- data/data/buildpacks/debian-7 +2 -2
- data/data/buildpacks/debian-8 +2 -2
- data/data/buildpacks/debian-9 +4 -0
- data/data/buildpacks/fedora-20 +2 -2
- data/data/buildpacks/sles-11 +2 -2
- data/data/buildpacks/sles-12 +2 -2
- data/data/buildpacks/ubuntu-10.04 +1 -1
- data/data/buildpacks/ubuntu-12.04 +2 -2
- data/data/buildpacks/ubuntu-14.04 +2 -2
- data/data/buildpacks/ubuntu-16.04 +2 -2
- data/data/cli/cli.sh.erb +176 -57
- data/data/dependencies/debian.yml +15 -4
- data/data/dependencies/sles.yml +1 -1
- data/data/hooks/postinstall.sh +2 -1
- data/data/hooks/postuninstall.sh +1 -1
- data/data/hooks/preinstall.sh +1 -1
- data/data/hooks/preuninstall.sh +1 -1
- data/data/init/systemd/default/process.service.erb +1 -1
- data/data/init/sysv/lsb-3.1/process.erb +3 -4
- data/data/init/upstart/1.5/process.conf.erb +1 -1
- data/lib/pkgr/builder.rb +31 -22
- data/lib/pkgr/buildpack.rb +17 -5
- data/lib/pkgr/cli.rb +7 -3
- data/lib/pkgr/config.rb +10 -0
- data/lib/pkgr/distributions/amazon.rb +38 -1
- data/lib/pkgr/distributions/base.rb +9 -9
- data/lib/pkgr/distributions/debian.rb +1 -1
- data/lib/pkgr/distributions/redhat.rb +0 -2
- data/lib/pkgr/env.rb +10 -4
- data/lib/pkgr/env_value.rb +55 -0
- data/lib/pkgr/version.rb +1 -1
- metadata +10 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 88515b775ce0780722e7b2cf547a055eb389d2b1
|
4
|
+
data.tar.gz: 90ea8f15d716c46d2a2ae12a0cfaa77b1ecd5d9c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8574750422452b0efe2a75d4be2703ccac4a8c33c8936c0b781928d25092a1dced9e07f6eb7fc8e92765292043fa30dbb5a59ea3e60658c67573c9b64ac5be0d
|
7
|
+
data.tar.gz: 1d730a9380f3c66a79f4e596e623028fd0e7637bb559da47b22d35b81f9fea2a184c2cb98878198b6b07e32cfcfafbc91afb5fccc45950844a2ceb215a2ed89e
|
data/LICENSE
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
Copyright (c) 2012 Cyril Rohr
|
1
|
+
Copyright (c) 2012-2017 Cyril Rohr
|
2
2
|
|
3
3
|
Permission is hereby granted, free of charge, to any person obtaining
|
4
4
|
a copy of this software and associated documentation files (the
|
@@ -17,4 +17,4 @@ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
17
17
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
18
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
19
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
CHANGED
@@ -1,12 +1,16 @@
|
|
1
1
|
# pkgr
|
2
2
|
|
3
|
+
[](https://travis-ci.org/crohr/pkgr)
|
4
|
+
|
3
5
|
## Goal
|
4
6
|
|
5
7
|
Make debian or rpm packages out of any app, including init script, crons,
|
6
8
|
logrotate, etc. Excellent way to distribute apps or command line tools without
|
7
9
|
complicated installation instructions.
|
8
10
|
|
9
|
-
Hosted service available at
|
11
|
+
Hosted service available at [Packager.io][packager-io]. Free for OpenSource apps.
|
12
|
+
|
13
|
+
[packager-io]: https://packager.io/
|
10
14
|
|
11
15
|
## Officially supported languages
|
12
16
|
|
@@ -15,8 +19,9 @@ Hosted service available at <https://packager.io/>. Free for OpenSource apps.
|
|
15
19
|
* Python
|
16
20
|
* Go
|
17
21
|
|
18
|
-
|
19
|
-
|
22
|
+
In beta:
|
23
|
+
|
24
|
+
* PHP, using the following buildpack: `https://github.com/pkgr/heroku-buildpack-php#buildcurl`
|
20
25
|
|
21
26
|
You can also point to other buildpacks
|
22
27
|
([doc](https://packager.io/documentation/customizing-the-build/#buildpack)).
|
@@ -27,6 +32,7 @@ They may just work.
|
|
27
32
|
* Ubuntu 16.04 ("xenial")
|
28
33
|
* Ubuntu 14.04 ("trusty")
|
29
34
|
* Ubuntu 12.04 ("precise")
|
35
|
+
* Debian 9 ("stretch")
|
30
36
|
* Debian 8 ("jessie")
|
31
37
|
* Debian 7 ("wheezy")
|
32
38
|
* RHEL/CentOS 7
|
@@ -38,7 +44,7 @@ They may just work.
|
|
38
44
|
|
39
45
|
## Examples
|
40
46
|
|
41
|
-
See
|
47
|
+
See [Packager.io][packager-io] for examples of apps packaged with `pkgr` (Gitlab, OpenProject, Discourse, etc.).
|
42
48
|
|
43
49
|
## Installation
|
44
50
|
|
@@ -54,11 +60,11 @@ Or, installing as a gem, on debian-based machines:
|
|
54
60
|
|
55
61
|
## Usage
|
56
62
|
|
57
|
-
To package your app,
|
63
|
+
To package your app, execute `pkgr` against your app's repository:
|
58
64
|
|
59
65
|
pkgr package path/to/app/repo
|
60
66
|
|
61
|
-
The resulting
|
67
|
+
The resulting `.deb` or `.rpm` package will be in your current working directory. That is, you need to run `pkgr` on the target distribution for which you want to generate a package.
|
62
68
|
|
63
69
|
Full command line options are given below:
|
64
70
|
|
@@ -75,7 +81,8 @@ Full command line options are given below:
|
|
75
81
|
[--architecture=ARCHITECTURE] # Target architecture for the package
|
76
82
|
# Default: x86_64
|
77
83
|
[--runner=RUNNER] # Force a specific runner (e.g. upstart-1.5, sysv-lsb-1.3)
|
78
|
-
[--homepage=HOMEPAGE] # Project homepage
|
84
|
+
[--homepage=HOMEPAGE] # Project homepage (e.g. "https://pkgr.example.org")
|
85
|
+
[--home=HOME] # Project home (e.g. "/usr/share/PACKAGE_HOME")
|
79
86
|
[--description=DESCRIPTION] # Project description
|
80
87
|
[--category=CATEGORY] # Category this package belongs to
|
81
88
|
# Default: none
|
@@ -147,11 +154,13 @@ Finally, it's a great way to share your open source software with your users and
|
|
147
154
|
|
148
155
|
* Your app will reside in `/opt/app-name`.
|
149
156
|
|
150
|
-
* You'll also get upstart
|
157
|
+
* You'll also get upstart, systemd, or sysvinit initialization scripts (depending on your distribution) that you can use directly:
|
151
158
|
|
152
159
|
service my-app start/stop/restart/status
|
153
160
|
|
154
|
-
|
161
|
+
Note: init scripts are generated only after you've done a `scale` command for the process type, e.g. `my-app scale web=1`.
|
162
|
+
|
163
|
+
* Logs will be stored in `/var/log/app-name/`, with a proper logrotate config automatically added. For systemd-based distributions, you will find the logs in the systemd journal.
|
155
164
|
|
156
165
|
* Config files can be added in `/etc/app-name/`
|
157
166
|
|
@@ -189,3 +198,5 @@ Issue getting nokogiri to compile? Try the following based on this [comment](htt
|
|
189
198
|
## Copyright
|
190
199
|
|
191
200
|
See LICENSE (MIT)
|
201
|
+
|
202
|
+
|
@@ -1,15 +1,25 @@
|
|
1
1
|
default:
|
2
2
|
- curl
|
3
|
-
- libmysqlclient-dev
|
4
3
|
- libpq-dev
|
5
4
|
- libsqlite3-0
|
6
5
|
- libevent-dev
|
7
|
-
- libssl-dev
|
8
6
|
- libxml2-dev
|
9
7
|
- libxslt1-dev
|
10
8
|
- libreadline-dev
|
11
9
|
- build-essential
|
12
10
|
debian-6:
|
13
11
|
- libssl0.9.8
|
12
|
+
- libssl-dev
|
13
|
+
- libmysqlclient-dev
|
14
14
|
debian-7:
|
15
15
|
- libssl1.0.0
|
16
|
+
- libssl-dev
|
17
|
+
- libmysqlclient-dev
|
18
|
+
debian-8:
|
19
|
+
- libssl1.0.0
|
20
|
+
- libssl-dev
|
21
|
+
- libmysqlclient-dev
|
22
|
+
debian-9:
|
23
|
+
- libssl1.0.2
|
24
|
+
- libssl1.0-dev
|
25
|
+
- default-libmysqlclient-dev
|
data/data/buildpacks/amazon-2014
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
https://github.com/pkgr/heroku-buildpack-ruby.git#
|
1
|
+
https://github.com/pkgr/heroku-buildpack-ruby.git#v164-1,BUILDPACK_NODE_VERSION="0.6.8"
|
2
2
|
https://github.com/pkgr/heroku-buildpack-python.git#buildcurl
|
3
|
-
https://github.com/heroku/heroku-buildpack-nodejs.git#
|
3
|
+
https://github.com/heroku/heroku-buildpack-nodejs.git#v106
|
4
4
|
https://github.com/kr/heroku-buildpack-go.git
|
data/data/buildpacks/amazon-2015
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
https://github.com/pkgr/heroku-buildpack-ruby.git#
|
1
|
+
https://github.com/pkgr/heroku-buildpack-ruby.git#v164-1,BUILDPACK_NODE_VERSION="0.6.8"
|
2
2
|
https://github.com/pkgr/heroku-buildpack-python.git#buildcurl
|
3
|
-
https://github.com/heroku/heroku-buildpack-nodejs.git#
|
3
|
+
https://github.com/heroku/heroku-buildpack-nodejs.git#v106
|
4
4
|
https://github.com/kr/heroku-buildpack-go.git
|
data/data/buildpacks/centos-6
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
https://github.com/pkgr/heroku-buildpack-ruby.git#
|
1
|
+
https://github.com/pkgr/heroku-buildpack-ruby.git#v164-1,BUILDPACK_NODE_VERSION="0.6.8"
|
2
2
|
https://github.com/pkgr/heroku-buildpack-python.git#buildcurl
|
3
|
-
https://github.com/heroku/heroku-buildpack-nodejs.git#
|
3
|
+
https://github.com/heroku/heroku-buildpack-nodejs.git#v106
|
4
4
|
https://github.com/kr/heroku-buildpack-go.git
|
data/data/buildpacks/centos-7
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
https://github.com/pkgr/heroku-buildpack-ruby.git#
|
1
|
+
https://github.com/pkgr/heroku-buildpack-ruby.git#v164-1,BUILDPACK_NODE_VERSION="0.6.8"
|
2
2
|
https://github.com/pkgr/heroku-buildpack-python.git#buildcurl
|
3
|
-
https://github.com/heroku/heroku-buildpack-nodejs.git#
|
3
|
+
https://github.com/heroku/heroku-buildpack-nodejs.git#v106
|
4
4
|
https://github.com/kr/heroku-buildpack-go.git
|
data/data/buildpacks/debian-6
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
https://github.com/pkgr/heroku-buildpack-ruby.git#
|
1
|
+
https://github.com/pkgr/heroku-buildpack-ruby.git#v164-1,BUILDPACK_NODE_VERSION="0.6.8"
|
2
2
|
https://github.com/pkgr/heroku-buildpack-python.git#buildcurl
|
3
3
|
https://github.com/heroku/heroku-buildpack-ruby.git,CURL_CONNECT_TIMEOUT=60,CURL_TIMEOUT=300
|
data/data/buildpacks/debian-7
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
https://github.com/pkgr/heroku-buildpack-ruby.git#
|
1
|
+
https://github.com/pkgr/heroku-buildpack-ruby.git#v164-1,BUILDPACK_NODE_VERSION="0.6.8"
|
2
2
|
https://github.com/pkgr/heroku-buildpack-python.git#buildcurl
|
3
|
-
https://github.com/heroku/heroku-buildpack-nodejs.git#
|
3
|
+
https://github.com/heroku/heroku-buildpack-nodejs.git#v106
|
4
4
|
https://github.com/kr/heroku-buildpack-go.git
|
data/data/buildpacks/debian-8
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
https://github.com/pkgr/heroku-buildpack-ruby.git#
|
1
|
+
https://github.com/pkgr/heroku-buildpack-ruby.git#v164-1,BUILDPACK_NODE_VERSION="0.6.8"
|
2
2
|
https://github.com/pkgr/heroku-buildpack-python.git#buildcurl
|
3
|
-
https://github.com/heroku/heroku-buildpack-nodejs.git#
|
3
|
+
https://github.com/heroku/heroku-buildpack-nodejs.git#v106
|
4
4
|
https://github.com/kr/heroku-buildpack-go.git
|
data/data/buildpacks/fedora-20
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
https://github.com/pkgr/heroku-buildpack-ruby.git#
|
1
|
+
https://github.com/pkgr/heroku-buildpack-ruby.git#v164-1,BUILDPACK_NODE_VERSION="0.6.8"
|
2
2
|
https://github.com/pkgr/heroku-buildpack-python.git#buildcurl
|
3
|
-
https://github.com/heroku/heroku-buildpack-nodejs.git#
|
3
|
+
https://github.com/heroku/heroku-buildpack-nodejs.git#v106
|
data/data/buildpacks/sles-11
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
https://github.com/pkgr/heroku-buildpack-ruby.git#
|
1
|
+
https://github.com/pkgr/heroku-buildpack-ruby.git#v164-1,BUILDPACK_NODE_VERSION="0.6.8"
|
2
2
|
https://github.com/pkgr/heroku-buildpack-python.git#buildcurl
|
3
|
-
https://github.com/heroku/heroku-buildpack-nodejs.git#
|
3
|
+
https://github.com/heroku/heroku-buildpack-nodejs.git#v106
|
data/data/buildpacks/sles-12
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
https://github.com/pkgr/heroku-buildpack-ruby.git#
|
1
|
+
https://github.com/pkgr/heroku-buildpack-ruby.git#v164-1,BUILDPACK_NODE_VERSION="0.6.8"
|
2
2
|
https://github.com/pkgr/heroku-buildpack-python.git#buildcurl
|
3
|
-
https://github.com/heroku/heroku-buildpack-nodejs.git#
|
3
|
+
https://github.com/heroku/heroku-buildpack-nodejs.git#v106
|
@@ -1,3 +1,3 @@
|
|
1
|
-
https://github.com/pkgr/heroku-buildpack-ruby.git#
|
1
|
+
https://github.com/pkgr/heroku-buildpack-ruby.git#v164-1,BUILDPACK_NODE_VERSION="0.6.8"
|
2
2
|
https://github.com/pkgr/heroku-buildpack-python.git#buildcurl
|
3
3
|
https://github.com/heroku/heroku-buildpack-nodejs.git
|
@@ -1,4 +1,4 @@
|
|
1
|
-
https://github.com/pkgr/heroku-buildpack-ruby.git#
|
1
|
+
https://github.com/pkgr/heroku-buildpack-ruby.git#v164-1,BUILDPACK_NODE_VERSION="0.6.8"
|
2
2
|
https://github.com/pkgr/heroku-buildpack-python.git#buildcurl
|
3
|
-
https://github.com/heroku/heroku-buildpack-nodejs.git#
|
3
|
+
https://github.com/heroku/heroku-buildpack-nodejs.git#v106
|
4
4
|
https://github.com/kr/heroku-buildpack-go.git
|
@@ -1,4 +1,4 @@
|
|
1
|
-
https://github.com/pkgr/heroku-buildpack-ruby.git#
|
1
|
+
https://github.com/pkgr/heroku-buildpack-ruby.git#v164-1,BUILDPACK_NODE_VERSION="0.6.8"
|
2
2
|
https://github.com/pkgr/heroku-buildpack-python.git#buildcurl
|
3
|
-
https://github.com/heroku/heroku-buildpack-nodejs.git#
|
3
|
+
https://github.com/heroku/heroku-buildpack-nodejs.git#v106
|
4
4
|
https://github.com/kr/heroku-buildpack-go.git
|
@@ -1,4 +1,4 @@
|
|
1
|
-
https://github.com/pkgr/heroku-buildpack-ruby.git#
|
1
|
+
https://github.com/pkgr/heroku-buildpack-ruby.git#v164-1,BUILDPACK_NODE_VERSION="0.6.8"
|
2
2
|
https://github.com/pkgr/heroku-buildpack-python.git#buildcurl
|
3
|
-
https://github.com/heroku/heroku-buildpack-nodejs.git#
|
3
|
+
https://github.com/heroku/heroku-buildpack-nodejs.git#v106
|
4
4
|
https://github.com/kr/heroku-buildpack-go.git
|
data/data/cli/cli.sh.erb
CHANGED
@@ -12,6 +12,10 @@ export ORIGINAL_PWD=$(pwd)
|
|
12
12
|
# required for chroot on fedora
|
13
13
|
PATH="$PATH:/usr/sbin"
|
14
14
|
|
15
|
+
if [ -n "$PORT" ]; then
|
16
|
+
BASE_PORT=$PORT
|
17
|
+
fi
|
18
|
+
|
15
19
|
# Helper function that returns the real path, based on the given ROOT_PATH
|
16
20
|
_p() {
|
17
21
|
echo "${ROOT_PATH%%/}${1}"
|
@@ -26,6 +30,22 @@ usage() {
|
|
26
30
|
echo " $APP_NAME config:set VAR=VALUE"
|
27
31
|
echo " $APP_NAME configure"
|
28
32
|
echo " $APP_NAME reconfigure"
|
33
|
+
echo " $APP_NAME restart"
|
34
|
+
echo ""
|
35
|
+
echo "Details:"
|
36
|
+
echo " $APP_NAME configure [-f FILE|-]"
|
37
|
+
echo " * If using an installer:"
|
38
|
+
echo " This command will launch the installer wizard."
|
39
|
+
echo " You can pass the installer seed file as argument or on STDIN."
|
40
|
+
echo " * Without installer:"
|
41
|
+
echo " This will execute the configure script at $APP_HOME/packaging/scripts/configure (if any)."
|
42
|
+
echo " A file containing environment variables can be given as argument or on STDIN (-f -), and will be saved in the /etc/$APP_NAME/conf.d folder."
|
43
|
+
echo ""
|
44
|
+
echo " $APP_NAME reconfigure"
|
45
|
+
echo " This command allows to reconfigure the application. Only useful if using an installer."
|
46
|
+
echo ""
|
47
|
+
echo " $APP_NAME restart [process]"
|
48
|
+
echo " This will restart the application (or the given process), in a distribution-independent manner."
|
29
49
|
}
|
30
50
|
|
31
51
|
DEFAULT_FILE=$(_p "/etc/default/${APP_NAME}")
|
@@ -50,11 +70,18 @@ fi
|
|
50
70
|
|
51
71
|
# Source all environment variables for the app. This must be done as
|
52
72
|
# privileged user since the config variables are only readable by root.
|
53
|
-
PORT_WAS=$PORT
|
54
73
|
for file in $(_p "/etc/${APP_NAME}/conf.d")/*; do
|
55
74
|
if [ -f $file ]; then . $file; fi
|
56
75
|
done
|
57
76
|
|
77
|
+
if [ -z "$BASE_PORT" ]; then
|
78
|
+
BASE_PORT=$PORT
|
79
|
+
fi
|
80
|
+
|
81
|
+
if [ -z "$BASE_PORT" ]; then
|
82
|
+
BASE_PORT=6000
|
83
|
+
fi
|
84
|
+
|
58
85
|
# Some actions require root privileges
|
59
86
|
ensure_root() {
|
60
87
|
if [ $(id -u) -ne 0 ]; then
|
@@ -69,20 +96,44 @@ show_env() {
|
|
69
96
|
env -i ROOT_PATH=${ROOT_PATH} ${0} run env | sort
|
70
97
|
}
|
71
98
|
|
72
|
-
|
73
|
-
if [ "$1"
|
99
|
+
logs_opt() {
|
100
|
+
if [ "$1" == "" ]; then
|
74
101
|
for file in $(_p "/var/log/${APP_NAME}")/*.log ; do
|
75
102
|
echo "==> ${file} <=="
|
76
103
|
cat "${file}"
|
77
104
|
done
|
78
105
|
else
|
79
|
-
tail $(_p "/var/log/${APP_NAME}")/*.log $@
|
106
|
+
tail $(_p "/var/log/${APP_NAME}")/*.log "$@"
|
80
107
|
fi
|
81
108
|
}
|
109
|
+
logs_systemd() {
|
110
|
+
journalctl -u "$APP_NAME-*" -e "$@"
|
111
|
+
}
|
82
112
|
|
83
|
-
|
113
|
+
logs() {
|
114
|
+
if [ "${APP_RUNNER_TYPE}" == "systemd" ]; then
|
115
|
+
# combine output of both opt and systemd logs
|
116
|
+
# no options given to log_opt since we want to use newer options of journalctl
|
117
|
+
{ logs_opt & logs_systemd "$@" ; }
|
118
|
+
else
|
119
|
+
logs_opt "$@"
|
120
|
+
fi
|
121
|
+
}
|
122
|
+
|
123
|
+
tail_logs_opt() {
|
84
124
|
tail -f $(_p "/var/log/${APP_NAME}")/*.log
|
85
125
|
}
|
126
|
+
tail_logs_systemd() {
|
127
|
+
journalctl -u "$APP_NAME-*" -f "$@"
|
128
|
+
}
|
129
|
+
tail_logs() {
|
130
|
+
if [ "${APP_RUNNER_TYPE}" == "systemd" ]; then
|
131
|
+
# combine output of both opt and systemd logs
|
132
|
+
{ tail_logs_opt & tail_logs_systemd "$@" ; }
|
133
|
+
else
|
134
|
+
tail_logs_opt
|
135
|
+
fi
|
136
|
+
}
|
86
137
|
|
87
138
|
current_number_of_processes() {
|
88
139
|
PROCESS_NAME="$1"
|
@@ -97,19 +148,47 @@ current_number_of_processes() {
|
|
97
148
|
return 0
|
98
149
|
}
|
99
150
|
|
100
|
-
|
101
|
-
|
102
|
-
process_name="$
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
sed -i "s/PROCESS_NUM/${index}/g" "${file}"
|
107
|
-
if [ "${process_name}" = "web" ]; then
|
108
|
-
sed -i "s/PORT_NUM/${port}/g" "${file}"
|
151
|
+
# Return the process index in the Procfile, ignoring any comment lines.
|
152
|
+
process_index() {
|
153
|
+
process_name="$1"
|
154
|
+
if [ -f "$(_p "${APP_HOME}/Procfile")" ]; then
|
155
|
+
index="$(cat "$(_p "${APP_HOME}/Procfile")" | grep -ve '^#' | grep -n "$process_name:" | cut -f 1 -d ':')"
|
109
156
|
else
|
110
|
-
|
111
|
-
sed -i "s/^export PORT=PORT_NUM$//g" "${file}"
|
157
|
+
index=0
|
112
158
|
fi
|
159
|
+
echo $(($index - 1))
|
160
|
+
}
|
161
|
+
|
162
|
+
# Returns whether a custom PORT has been set for this process.
|
163
|
+
is_custom_port() {
|
164
|
+
test "$PORT" != "$BASE_PORT"
|
165
|
+
}
|
166
|
+
|
167
|
+
# Returns the port to be used by the process.
|
168
|
+
process_port() {
|
169
|
+
local process_name="$1"
|
170
|
+
local process_scale_index="$2"
|
171
|
+
if [ "$process_scale_index" == "" ]; then
|
172
|
+
process_scale_index=1
|
173
|
+
fi
|
174
|
+
if is_custom_port; then
|
175
|
+
# legacy: port was set in init files, not touching
|
176
|
+
echo "$BASE_PORT"
|
177
|
+
else
|
178
|
+
local process_offset=$(process_index "$process_name")
|
179
|
+
local port_with_offset=$(($PORT + $process_offset * 100 + $process_scale_index - 1))
|
180
|
+
echo "$port_with_offset"
|
181
|
+
fi
|
182
|
+
}
|
183
|
+
|
184
|
+
# Writes the process index in the init file, so that the right PORT can be set
|
185
|
+
# when running the process.
|
186
|
+
update_port() {
|
187
|
+
local file="$1"
|
188
|
+
local process_name="$2"
|
189
|
+
local index="$3"
|
190
|
+
local port_with_offset=$(process_port "$process_name" "$index")
|
191
|
+
sed -i "s/__PROCESS_INDEX__/${index}/g" "${file}"
|
113
192
|
}
|
114
193
|
|
115
194
|
sysv_enable() {
|
@@ -147,68 +226,66 @@ scale_up() {
|
|
147
226
|
index=$((${i} + ${CURRENT_SCALE}))
|
148
227
|
PROCESS_ID="${APP_NAME}-${PROCESS_NAME}-${index}"
|
149
228
|
cp $(_p "${APP_HOME}/vendor/pkgr/scaling/upstart/${APP_NAME}-${PROCESS_NAME}-PROCESS_NUM.conf") $(_p "/etc/init/${PROCESS_ID}.conf")
|
150
|
-
port=$((${PORT} + ${index} - 1))
|
151
229
|
|
152
|
-
update_port $(_p "/etc/init/${PROCESS_ID}.conf") "${PROCESS_NAME}" $
|
230
|
+
update_port $(_p "/etc/init/${PROCESS_ID}.conf") "${PROCESS_NAME}" $index
|
153
231
|
|
154
232
|
# directly call initctl instead of service, otherwise CentOS 6.x does not understand.
|
155
|
-
|
233
|
+
control_process start "${PROCESS_NAME}-${index}"
|
156
234
|
done
|
157
235
|
|
158
|
-
|
159
|
-
|
236
|
+
control_process start "${PROCESS_NAME}" || true
|
237
|
+
control_process start || true
|
160
238
|
elif [ "$APP_RUNNER_TYPE" = "systemd" ]; then
|
161
239
|
for i in $(seq ${SCALE_DELTA}); do
|
162
240
|
index=$((${i} + ${CURRENT_SCALE}))
|
163
241
|
PROCESS_ID="${APP_NAME}-${PROCESS_NAME}-${index}"
|
164
242
|
cp ${source}/${APP_NAME}-${PROCESS_NAME}-PROCESS_NUM.service $SYSTEMD_DIR/${PROCESS_ID}.service
|
165
|
-
port=$((${PORT} + ${index} - 1))
|
166
243
|
|
167
|
-
update_port $SYSTEMD_DIR/${PROCESS_ID}.service "${PROCESS_NAME}" $
|
244
|
+
update_port $SYSTEMD_DIR/${PROCESS_ID}.service "${PROCESS_NAME}" $index
|
168
245
|
|
169
246
|
$APP_RUNNER_CLI enable "${PROCESS_ID}.service"
|
170
247
|
done
|
171
248
|
|
172
249
|
$APP_RUNNER_CLI daemon-reload
|
173
|
-
|
174
|
-
|
250
|
+
control_process start "${PROCESS_NAME}"
|
251
|
+
control_process start
|
175
252
|
else
|
176
253
|
for i in $(seq ${SCALE_DELTA}); do
|
177
254
|
index=$((${i} + ${CURRENT_SCALE}))
|
178
255
|
PROCESS_ID="${APP_NAME}-${PROCESS_NAME}-${index}"
|
179
256
|
cp $(_p "${APP_HOME}/vendor/pkgr/scaling/sysv/${APP_NAME}-${PROCESS_NAME}-PROCESS_NUM") $(_p "/etc/init.d/${PROCESS_ID}")
|
180
|
-
port=$((${PORT} + ${index} - 1))
|
181
257
|
|
182
|
-
update_port $(_p "/etc/init.d/${PROCESS_ID}") "${PROCESS_NAME}" $
|
258
|
+
update_port $(_p "/etc/init.d/${PROCESS_ID}") "${PROCESS_NAME}" $index
|
183
259
|
|
184
260
|
chmod a+x $(_p "/etc/init.d/${PROCESS_ID}")
|
185
|
-
sysv_enable ${PROCESS_ID}
|
186
|
-
|
261
|
+
sysv_enable "${PROCESS_ID}"
|
262
|
+
control_process start "${PROCESS_NAME}-${index}"
|
187
263
|
done
|
188
264
|
fi
|
189
265
|
echo "--> done."
|
190
266
|
}
|
191
267
|
|
192
268
|
scale_down() {
|
193
|
-
PROCESS_NAME="${1}"
|
194
|
-
CURRENT_SCALE=${2}
|
195
|
-
NEW_SCALE=${3}
|
196
|
-
SCALE_DELTA=${4}
|
269
|
+
local PROCESS_NAME="${1}"
|
270
|
+
local CURRENT_SCALE=${2}
|
271
|
+
local NEW_SCALE=${3}
|
272
|
+
local SCALE_DELTA=${4}
|
273
|
+
local index
|
274
|
+
local PROCESS_ID
|
197
275
|
|
198
276
|
echo "Scaling down..."
|
199
277
|
for i in $(seq $(($SCALE_DELTA * -1))); do
|
200
278
|
index=$((${i} + ${NEW_SCALE}))
|
201
279
|
PROCESS_ID="${APP_NAME}-${PROCESS_NAME}-${index}"
|
202
280
|
|
281
|
+
control_process stop "${PROCESS_NAME}-${index}" || true # dont fail if server stopped differently
|
282
|
+
|
203
283
|
if [ "${APP_RUNNER_TYPE}" = "upstart" ]; then
|
204
|
-
$APP_RUNNER_CLI stop "${PROCESS_ID}" || true # dont fail if server stopped differently
|
205
284
|
rm -f $(_p "/etc/init/${PROCESS_ID}.conf")
|
206
285
|
elif [ "${APP_RUNNER_TYPE}" = "systemd" ]; then
|
207
|
-
$APP_RUNNER_CLI stop "${PROCESS_ID}.service" || true # dont fail if server stopped differently
|
208
286
|
$APP_RUNNER_CLI disable "${PROCESS_ID}.service" || true
|
209
287
|
rm -f $SYSTEMD_DIR/${PROCESS_ID}.service
|
210
288
|
else
|
211
|
-
$(_p "/etc/init.d/${PROCESS_ID}") stop
|
212
289
|
sysv_disable ${PROCESS_ID}
|
213
290
|
rm -f $(_p "/etc/init.d/${PROCESS_ID}")
|
214
291
|
fi
|
@@ -262,10 +339,27 @@ scale() {
|
|
262
339
|
|
263
340
|
configure() {
|
264
341
|
local installer_dir="$(_p "/usr/share/${APP_NAME}/installer")"
|
342
|
+
local configure_script="$(_p "$APP_HOME/packaging/scripts/configure")"
|
343
|
+
local file=""
|
344
|
+
if [ "$1" == "-f" ]; then
|
345
|
+
file="$2"
|
346
|
+
shift 2
|
347
|
+
fi
|
348
|
+
|
265
349
|
if [ -d "$installer_dir" ] ; then
|
266
|
-
$
|
350
|
+
if [ "$file" != "" ]; then
|
351
|
+
cat "$file" > $(_p "/etc/$APP_NAME/installer.dat")
|
352
|
+
fi
|
353
|
+
exec ${installer_dir}/bin/run "$@"
|
267
354
|
else
|
268
|
-
|
355
|
+
if [ "$file" != "" ]; then
|
356
|
+
cat "$file" | grep -v '^#' | while read -r line ; do
|
357
|
+
config_set "$line"
|
358
|
+
done
|
359
|
+
fi
|
360
|
+
if [ -f "$configure_script" -a -x "$configure_script" ] ; then
|
361
|
+
exec $0 run "$configure_script" "$@"
|
362
|
+
fi
|
269
363
|
fi
|
270
364
|
}
|
271
365
|
|
@@ -273,6 +367,36 @@ reconfigure() {
|
|
273
367
|
configure --reconfigure
|
274
368
|
}
|
275
369
|
|
370
|
+
config_set() {
|
371
|
+
# http://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_06_02
|
372
|
+
local key="${1%%=*}"
|
373
|
+
local value="${1#*=}"
|
374
|
+
local file=$(_p "/etc/${APP_NAME}/conf.d/other")
|
375
|
+
touch "$file"
|
376
|
+
sed -i -r "s/^\s*export\s+${key}.*$//g" $(_p "/etc/${APP_NAME}/conf.d")/*
|
377
|
+
echo "export ${key}=\"${value}\"" >> "${file}"
|
378
|
+
sed -i '/^\s*$/d' "$file"
|
379
|
+
}
|
380
|
+
|
381
|
+
# Executes the given command (start, stop, restart, status, etc.) on the given
|
382
|
+
# process, abstracting away the differences between init systems.
|
383
|
+
control_process() {
|
384
|
+
local cmd="$1"
|
385
|
+
local process="$2"
|
386
|
+
local service="$APP_NAME"
|
387
|
+
if [ "$process" != "" ]; then
|
388
|
+
service="$service-$process"
|
389
|
+
fi
|
390
|
+
|
391
|
+
if [ "${APP_RUNNER_TYPE}" == "upstart" ]; then
|
392
|
+
$APP_RUNNER_CLI "$cmd" "${service}"
|
393
|
+
elif [ "$APP_RUNNER_TYPE" = "systemd" ]; then
|
394
|
+
$APP_RUNNER_CLI "$cmd" "${service}.service"
|
395
|
+
else
|
396
|
+
$(_p "/etc/init.d/${service}") "$cmd"
|
397
|
+
fi
|
398
|
+
}
|
399
|
+
|
276
400
|
while : ; do
|
277
401
|
case "$1" in
|
278
402
|
run)
|
@@ -283,6 +407,7 @@ while : ; do
|
|
283
407
|
runnable=$(echo -n "exec")
|
284
408
|
|
285
409
|
if [ -f $(_p "${APP_HOME}/vendor/pkgr/processes/${COMMAND}") ]; then
|
410
|
+
export PORT=$(process_port "$COMMAND" "$APP_PROCESS_INDEX")
|
286
411
|
# Command alias defined in Procfile
|
287
412
|
runnable="${runnable}$(printf " %q" $(_p "${APP_HOME}/vendor/pkgr/processes/${COMMAND}") "$@")"
|
288
413
|
else
|
@@ -294,9 +419,6 @@ while : ; do
|
|
294
419
|
runnable="${runnable}$(printf " %q" ${COMMAND} "$@")"
|
295
420
|
fi
|
296
421
|
|
297
|
-
# fix port
|
298
|
-
export PORT=$PORT_WAS
|
299
|
-
|
300
422
|
# Do not use su, to avoid creating a new process. Note: chroot version
|
301
423
|
# is too old on Ubuntu Lucid, so this will fail. It works on Debian
|
302
424
|
# Squeeze though (and later).
|
@@ -325,12 +447,18 @@ while : ; do
|
|
325
447
|
done
|
326
448
|
break ;;
|
327
449
|
|
450
|
+
restart)
|
451
|
+
shift
|
452
|
+
control_process "restart" "$@"
|
453
|
+
break;;
|
454
|
+
|
328
455
|
logs)
|
329
456
|
shift
|
330
|
-
if [ "$1"
|
457
|
+
if [ "$1" == "--tail" -o "$1" == "-f" ]; then
|
458
|
+
shift
|
331
459
|
tail_logs
|
332
460
|
else
|
333
|
-
logs ${@}
|
461
|
+
logs "${@}"
|
334
462
|
fi
|
335
463
|
break;;
|
336
464
|
|
@@ -340,18 +468,7 @@ while : ; do
|
|
340
468
|
|
341
469
|
config:set)
|
342
470
|
[ $# -lt 2 ] && usage
|
343
|
-
|
344
|
-
CONFIG=(${2//=/ })
|
345
|
-
|
346
|
-
VAR=${CONFIG[0]:?"Invalid variable name"}
|
347
|
-
VALUE="${2:$((${#VAR} + 1))}"
|
348
|
-
|
349
|
-
CONFIG_FILE=$(_p "/etc/${APP_NAME}/conf.d/other")
|
350
|
-
touch ${CONFIG_FILE}
|
351
|
-
|
352
|
-
sed -i -r "s/^\s*export\s+${VAR}.*$//g" $(_p "/etc/${APP_NAME}/conf.d")/*
|
353
|
-
|
354
|
-
echo "export ${VAR}=\"${VALUE}\"" >> "${CONFIG_FILE}"
|
471
|
+
config_set "$2"
|
355
472
|
|
356
473
|
break;;
|
357
474
|
|
@@ -362,14 +479,16 @@ while : ; do
|
|
362
479
|
|
363
480
|
configure)
|
364
481
|
ensure_root
|
482
|
+
shift
|
365
483
|
|
366
|
-
configure $@
|
484
|
+
configure "$@"
|
367
485
|
break;;
|
368
486
|
|
369
487
|
reconfigure)
|
370
488
|
ensure_root
|
489
|
+
shift
|
371
490
|
|
372
|
-
reconfigure $@
|
491
|
+
reconfigure "$@"
|
373
492
|
break;;
|
374
493
|
|
375
494
|
*)
|