passenger 4.0.53 → 4.0.55
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of passenger might be problematic. Click here for more details.
- checksums.yaml +8 -8
- checksums.yaml.gz.asc +7 -7
- data.tar.gz.asc +7 -7
- data/CHANGELOG +13 -0
- data/build/common_library.rb +12 -6
- data/build/documentation.rb +2 -1
- data/debian.template/rules.template +4 -1
- data/dev/ci/run_jenkins.sh +21 -1
- data/dev/ci/run_travis.sh +9 -6
- data/doc/CloudLicensingConfiguration.txt.md +194 -0
- data/doc/Users guide Apache.txt +1 -1
- data/doc/images/cloud_licensing_batch_job.png +0 -0
- data/doc/templates/bootstrap.config.json +388 -0
- data/doc/templates/bootstrap.min.css +8 -395
- data/doc/templates/markdown.html.erb +14 -2
- data/ext/common/Constants.h +1 -1
- data/ext/common/Utils.cpp +8 -4
- data/ext/common/Utils.h +4 -3
- data/ext/ruby/extconf.rb +2 -0
- data/ext/ruby/passenger_native_support.c +40 -13
- data/lib/phusion_passenger.rb +1 -1
- data/lib/phusion_passenger/packaging.rb +6 -5
- data/lib/phusion_passenger/platform_info/operating_system.rb +6 -6
- data/lib/phusion_passenger/utils.rb +1 -0
- data/test/integration_tests/native_packaging_spec.rb +5 -1
- metadata +6 -2
- metadata.gz.asc +7 -7
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
N2UzYzkxNTRiNjUxOTE2ODg4ZjE2NzcxNzU2ZGUyNTBjNmQ0OGUyZA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MDc2ZDYyNTIzN2Y0MGMyYWJiMDBjOTg1ZTc5NjI3ZmFhZTgzMDgxOQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ZGU5ZThlOGMxZmExYmFlZGVlZjhlMWI5MTA4ZjkwMDMwNWRmNzhkZjc5YmVl
|
10
|
+
N2QzZjgxNDI2Nzc1NjY2ZmJlYjZkMjIxYjQzMDg0MWQ1YmIxOWJhYjMzODNj
|
11
|
+
ZGMyNWRlNTkxNWFkZTExZGU5MDhlMjNjMGMyYzc1MTQwODY1ZWM=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NzJhYWYwYjA3YTFiMjcwNDhiOGEwYjY2NWU4MTI2ZGY3NmMyMzg0YTBlOThl
|
14
|
+
ZDdhMjk1MDI3YzExYzc4NDNiMzJhYjEzNzllNjY2MGM2YWM3MzZjMjI2YmQ4
|
15
|
+
NjM0MzJkMDdmYzVkM2EzOTQzODFlNzIzZDRjNjgwOTgyOWYzMTM=
|
checksums.yaml.gz.asc
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
Version: GnuPG/MacGPG2 v2.0.17 (Darwin)
|
3
3
|
Comment: GPGTools - http://gpgtools.org
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
=
|
5
|
+
iQEcBAABAgAGBQJUiwJyAAoJECrHRaUKISqMAsAIALMntU8zBAVLqJm3qOAV1NkC
|
6
|
+
PKc+2BaDSKQfLm81y5Yzsh0sCiq9aCqpITGh6fC6qUUup6o/1dOeZAQlTADm0XoS
|
7
|
+
b2ndeWob5zN+06AVB7awyffOjrn4kW3IZkfWa4iR5uSwoAOo3m9uGjE8nK5QIb7v
|
8
|
+
YzRm5uCKRa6LI2sbfblr1TrQU5ybVjbQV4ZIwz4CFnw3QgGbYIy6Mz+lVGaET9zv
|
9
|
+
CXH7DJYiPSSWveWtKA4l3wWXKTQQniOxFYq7EWo7Uh9YX0ZoI0pUPXNepwb9CuSN
|
10
|
+
HqKNR5tdJzXCR6EpQE/FtvsSEJFBuu6NaqcreFIJGBUr1YXVYRErA2H68tc4W3A=
|
11
|
+
=E9js
|
12
12
|
-----END PGP SIGNATURE-----
|
data.tar.gz.asc
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
Version: GnuPG/MacGPG2 v2.0.17 (Darwin)
|
3
3
|
Comment: GPGTools - http://gpgtools.org
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
=
|
5
|
+
iQEcBAABAgAGBQJUiwJyAAoJECrHRaUKISqMJiAH/0J2j3e4PfWQMqZUbBj64M7J
|
6
|
+
uEJqycYmBPBhVe2SyRuJnflnZwiIGFpFfDY32XUqAXEJl+lJmZ7Yu+eqfdhHKVMG
|
7
|
+
T0iEkBMSBCAOXkT9jEHwgph5uF4qh77TdO+YWS1lYKYUwsoK+rG2iLHieaFKyNzu
|
8
|
+
c6UhLKiz4j7xbnHv0SU6uxBWq8tuihKxvMGksuaBe7paegXYCEo/v2zl3EXlliEc
|
9
|
+
QVd97e2uxgxwCDc0zvlS8mznv+XVKRQz0fGs8oYYBe2Kv8Zi1S+QX3Cz6Btb0Ll6
|
10
|
+
nd0fEvNI4j8QvhrhOVKaN4RkYlMpGSx1xYu6jUe4kQ6+AIvR6yN315coCEKa5UY=
|
11
|
+
=keF3
|
12
12
|
-----END PGP SIGNATURE-----
|
data/CHANGELOG
CHANGED
@@ -1,3 +1,16 @@
|
|
1
|
+
Release 4.0.55
|
2
|
+
--------------
|
3
|
+
|
4
|
+
* Supports Ruby 2.2. Closes GH-1314.
|
5
|
+
* Fixed Linux OS name detection.
|
6
|
+
|
7
|
+
|
8
|
+
Release 4.0.54
|
9
|
+
--------------
|
10
|
+
|
11
|
+
* Contains a licensing-related hot fix for Enterprise customers.
|
12
|
+
|
13
|
+
|
1
14
|
Release 4.0.53
|
2
15
|
--------------
|
3
16
|
|
data/build/common_library.rb
CHANGED
@@ -139,13 +139,15 @@ if USE_VENDORED_LIBEV
|
|
139
139
|
|
140
140
|
libev_sources = Dir["ext/libev/{*.c,*.h}"]
|
141
141
|
file LIBEV_OUTPUT_DIR + ".libs/libev.a" => [LIBEV_OUTPUT_DIR + "Makefile"] + libev_sources do
|
142
|
-
sh "rm -f #{LIBEV_OUTPUT_DIR}
|
142
|
+
sh "rm -f #{LIBEV_OUTPUT_DIR}libev.la"
|
143
143
|
sh "cd #{LIBEV_OUTPUT_DIR} && make libev.la"
|
144
144
|
end
|
145
145
|
|
146
146
|
task 'libev:clean' do
|
147
|
-
|
148
|
-
|
147
|
+
patterns = %w(Makefile config.h config.log config.status libtool
|
148
|
+
stamp-h1 *.o *.lo *.la .libs .deps)
|
149
|
+
patterns.each do |pattern|
|
150
|
+
sh "rm -rf #{LIBEV_OUTPUT_DIR}#{pattern}"
|
149
151
|
end
|
150
152
|
end
|
151
153
|
|
@@ -196,11 +198,15 @@ if USE_VENDORED_LIBEIO
|
|
196
198
|
sh "cd #{LIBEIO_OUTPUT_DIR} && make libeio.la"
|
197
199
|
end
|
198
200
|
|
199
|
-
task :clean do
|
200
|
-
|
201
|
-
|
201
|
+
task 'libeio:clean' do
|
202
|
+
patterns = %w(Makefile config.h config.log config.status libtool
|
203
|
+
stamp-h1 *.o *.lo *.la .libs .deps)
|
204
|
+
patterns.each do |pattern|
|
205
|
+
sh "rm -rf #{LIBEIO_OUTPUT_DIR}#{pattern}"
|
202
206
|
end
|
203
207
|
end
|
208
|
+
|
209
|
+
task :clean => 'libeio:clean'
|
204
210
|
else
|
205
211
|
LIBEIO_CFLAGS = string_option('LIBEIO_CFLAGS', '-I/usr/include/libeio')
|
206
212
|
LIBEIO_LIBS = string_option('LIBEIO_LIBS', '-leio')
|
data/build/documentation.rb
CHANGED
@@ -69,7 +69,7 @@ def create_markdown_compilation_task(target)
|
|
69
69
|
puts "Creating #{target}"
|
70
70
|
require 'erb'
|
71
71
|
template = ERB.new(File.read('doc/templates/markdown.html.erb'))
|
72
|
-
title = File.basename(target, '.html')
|
72
|
+
title = File.basename(target, '.html').gsub(/([A-Z])/, ' \1').strip
|
73
73
|
content = File.read("#{target}.tmp")
|
74
74
|
css = File.read('doc/templates/bootstrap.min.css')
|
75
75
|
data = template.result(binding)
|
@@ -91,6 +91,7 @@ def create_markdown_compilation_task(target)
|
|
91
91
|
end
|
92
92
|
|
93
93
|
create_markdown_compilation_task('doc/Packaging.html')
|
94
|
+
create_markdown_compilation_task('doc/CloudLicensingConfiguration.html')
|
94
95
|
|
95
96
|
desc "Upload documentation to the Phusion web server"
|
96
97
|
task 'doc:rsync' => :doc do
|
@@ -7,6 +7,9 @@
|
|
7
7
|
|
8
8
|
#if ['1', 'true', 'on', 'yes'].include?(ENV['USE_CCACHE'])
|
9
9
|
export USE_CCACHE=1
|
10
|
+
NGINX_CONFIGURE_OPTIONS = CC=/usr/lib/ccache/cc CXX=/usr/lib/ccache/c++
|
11
|
+
#else
|
12
|
+
NGINX_CONFIGURE_OPTIONS =
|
10
13
|
#endif
|
11
14
|
|
12
15
|
# Speed up ccache (reduce I/O) by lightly compressing things.
|
@@ -34,7 +37,7 @@ override_dh_auto_build:
|
|
34
37
|
mv pkg/fakeroot pkg/fakeroot2.0
|
35
38
|
#endif
|
36
39
|
cd nginx-<%= PhusionPassenger::PREFERRED_NGINX_VERSION %> && \
|
37
|
-
./configure --prefix=/tmp \
|
40
|
+
env $(NGINX_CONFIGURE_OPTIONS) ./configure --prefix=/tmp \
|
38
41
|
<%= PhusionPassenger::STANDALONE_NGINX_CONFIGURE_OPTIONS %> \
|
39
42
|
--add-module=`pwd`/../ext/nginx && \
|
40
43
|
make && \
|
data/dev/ci/run_jenkins.sh
CHANGED
@@ -11,12 +11,31 @@ if [[ "$WORKSPACE" = "" ]]; then
|
|
11
11
|
exit 1
|
12
12
|
fi
|
13
13
|
|
14
|
-
JENKINS_CACHE_DIR="$WORKSPACE
|
14
|
+
JENKINS_CACHE_DIR="$WORKSPACE/.jenkins_cache"
|
15
15
|
mkdir -p "$JENKINS_CACHE_DIR"
|
16
16
|
if [[ "$TEST_RPM_BUILDING" != 0 ]]; then
|
17
17
|
rm -rf "$JENKINS_CACHE_DIR/passenger_rpm/output"
|
18
18
|
fi
|
19
19
|
|
20
|
+
# run_travis.sh defaults COMPILE_CONCURRENCY to 2, but
|
21
|
+
# Jenkins jobs are run on a single machine so we'll want
|
22
|
+
# a COMPILE_CONCURRENCY of 1.
|
23
|
+
COMPILE_CONCURRENCY=${COMPILE_CONCURRENCY:-1}
|
24
|
+
|
25
|
+
# Relax permissions. Necessary for unit tests which test permissions.
|
26
|
+
echo "Relaxing permissions"
|
27
|
+
umask u=rwx,g=rx,o=rx
|
28
|
+
(
|
29
|
+
set -x
|
30
|
+
chmod g+rx,o+rx .
|
31
|
+
find * -type f -print0 | xargs -0 -n 512 chmod g+r,o+r
|
32
|
+
find * -type d -print0 | xargs -0 -n 512 chmod g+rx,o+rx
|
33
|
+
|
34
|
+
# Create this file now because otherwise it would be owned by root,
|
35
|
+
# which Jenkins cannot remove.
|
36
|
+
touch test/test.log
|
37
|
+
)
|
38
|
+
|
20
39
|
function run_exec()
|
21
40
|
{
|
22
41
|
echo "$ $@"
|
@@ -37,6 +56,7 @@ run_exec docker run --rm \
|
|
37
56
|
-e "APP_UID=`id -u`" \
|
38
57
|
-e "APP_GID=`id -g`" \
|
39
58
|
-e "SUDO=$SUDO" \
|
59
|
+
-e "COMPILE_CONCURRENCY=$COMPILE_CONCURRENCY" \
|
40
60
|
-e "TEST_CXX=$TEST_CXX" \
|
41
61
|
-e "TEST_RUBY=$TEST_RUBY" \
|
42
62
|
-e "TEST_NODE=$TEST_NODE" \
|
data/dev/ci/run_travis.sh
CHANGED
@@ -18,6 +18,7 @@ export VERBOSE=1
|
|
18
18
|
export TRACE=1
|
19
19
|
export DEVDEPS_DEFAULT=no
|
20
20
|
export rvmsudo_secure_path=1
|
21
|
+
export LC_CTYPE=C.UTF-8
|
21
22
|
|
22
23
|
if [[ -e /etc/workaround-docker-2267/hosts ]]; then
|
23
24
|
HOSTS_FILE=/etc/workaround-docker-2267/hosts
|
@@ -111,10 +112,6 @@ function install_node_and_modules()
|
|
111
112
|
fi
|
112
113
|
}
|
113
114
|
|
114
|
-
if [[ "$MAGNUM" != "" ]]; then
|
115
|
-
run sudo sh -c "echo 127.0.0.1 magnum >> /etc/hosts"
|
116
|
-
fi
|
117
|
-
|
118
115
|
run uname -a
|
119
116
|
run lsb_release -a
|
120
117
|
run sudo tee /etc/dpkg/dpkg.cfg.d/02apt-speedup >/dev/null <<<"force-unsafe-io"
|
@@ -185,8 +182,14 @@ if [[ "$TEST_DEBIAN_PACKAGING" = 1 ]]; then
|
|
185
182
|
apt_get_update
|
186
183
|
run sudo apt-get install -y --no-install-recommends \
|
187
184
|
devscripts debhelper rake apache2-mpm-worker apache2-threaded-dev \
|
188
|
-
|
189
|
-
|
185
|
+
libev-dev gdebi-core source-highlight
|
186
|
+
if [[ `lsb_release -r -s` = 12.04 ]]; then
|
187
|
+
sudo apt-get install -y --no-install-recommends \
|
188
|
+
ruby1.8 ruby1.8-dev ruby1.9.1 ruby1.9.1-dev rubygems
|
189
|
+
else
|
190
|
+
sudo apt-get install -y --no-install-recommends \
|
191
|
+
ruby1.9.1 ruby1.9.1-dev ruby2.0 ruby2.0-dev
|
192
|
+
fi
|
190
193
|
install_test_deps_with_doctools
|
191
194
|
install_node_and_modules
|
192
195
|
run rake debian:dev debian:dev:reinstall
|
@@ -0,0 +1,194 @@
|
|
1
|
+
# Phusion Passenger Enterprise cloud licensing configuration
|
2
|
+
|
3
|
+
When using the [Phusion Passenger Enterprise](https://www.phusionpassenger.com/enterprise) cloud license, you are billed per server per hour. There is a mechanism which automatically reports usage to the Phusion licensing server. This is implemented by sending a certain HTTPS request to the Phusion Passenger website, https://www.phusionpassenger.com, every 15 minutes, on every server that Phusion Passenger Enterprise is running with a cloud license.
|
4
|
+
|
5
|
+
Sometimes, this manner of reporting usage data is not desirable, e.g. because of organizational security policies. For example, the servers that run Phusion Passenger Enterprise might block all outgoing traffic, or the network intrusion detection system might flag the usage reports as suspicious. To address these concerns, Phusion Passenger Enterprise 4.0.54 and later provide the ability to report usage through periodic batch jobs.
|
6
|
+
|
7
|
+
## Conceptual overview
|
8
|
+
|
9
|
+
The setup works as follows:
|
10
|
+
|
11
|
+
1. Phusion Passenger Enterprise stores usage data on the local disk, but does not send them to the Phusion licensing server.
|
12
|
+
2. On each server that runs Phusion Passenger Enterprise, a batch job A generates a package from the usage data that's stored on disk.
|
13
|
+
3. All these packages are copied to another machine (let's call this "Reporter"), e.g. through SCP, USB stick, etc. The reporter machine may be any machine that you choose, as long as it can access the Phusion licensing server. The method of copying does not matter.
|
14
|
+
4. On the reporter machine, a batch job B uploads all these packages to the Phusion licensing server.
|
15
|
+
|
16
|
+
![Conceptual overview](images/cloud_licensing_batch_job.png)
|
17
|
+
|
18
|
+
## Phase 1: setting up web servers
|
19
|
+
|
20
|
+
Follow these instructions on each server running Phusion Passenger Enterprise with a cloud license.
|
21
|
+
|
22
|
+
1. Login to the web server and open a superuser shell. For example:
|
23
|
+
|
24
|
+
bash$ sudo -H bash
|
25
|
+
|
26
|
+
Or, if you're an RVM user, use rvmsudo instead of sudo:
|
27
|
+
|
28
|
+
bash$ rvmsudo -H bash
|
29
|
+
|
30
|
+
2. Add the following configuration to your Apache or Nginx configuration file:
|
31
|
+
|
32
|
+
# Apache
|
33
|
+
PassengerCtl licensing_data_points_auto_send false
|
34
|
+
|
35
|
+
# Nginx
|
36
|
+
passenger_ctl licensing_data_points_auto_send false;
|
37
|
+
|
38
|
+
Then restart Apache/Nginx. This configuration tells Phusion Passenger Enterprise not to automatically send usage data to the Phusion licensing server.
|
39
|
+
|
40
|
+
3. Find out what user the PassengerHelperAgent process is running as.
|
41
|
+
|
42
|
+
First, look for the PID of the PassengerHelperAgent process.
|
43
|
+
|
44
|
+
bash# passenger-memory-stats
|
45
|
+
...
|
46
|
+
------ Passenger processes ------
|
47
|
+
PID VMSize Resident Name
|
48
|
+
---------------------------------
|
49
|
+
11243 2405.8 MB 2.7 MB PassengerHelperAgent
|
50
|
+
...
|
51
|
+
|
52
|
+
Then use `ps` to determine what user it's running as. Usually, it's running as root.
|
53
|
+
|
54
|
+
bash# ps -o pid,user -p 11243
|
55
|
+
PID USER
|
56
|
+
11245 root
|
57
|
+
|
58
|
+
4. Create a directory in which to store usage data packages. For example:
|
59
|
+
|
60
|
+
bash# mkdir /var/lib/passenger-enterprise-usage
|
61
|
+
|
62
|
+
Ensure that it's owned by the user that PassengerHelperAgent runs as, and make it owner-accessible only:
|
63
|
+
|
64
|
+
bash# chown root: /var/lib/passenger-enterprise-usage
|
65
|
+
bash# chmod 700 /var/lib/passenger-enterprise-usage
|
66
|
+
|
67
|
+
5. Create a script inside the previous directory for generating a usage data package, and for copying packages to the reporter machine. This script is part of batch job A.
|
68
|
+
|
69
|
+
bash# touch /var/lib/passenger-enterprise-usage/script
|
70
|
+
bash# chmod +x /var/lib/passenger-enterprise-usage/script
|
71
|
+
bash# editor /var/lib/passenger-enterprise-usage/script
|
72
|
+
|
73
|
+
The script should contain:
|
74
|
+
|
75
|
+
#!/bin/bash
|
76
|
+
set -e
|
77
|
+
|
78
|
+
REPORTER_MACHINE=foo@reporter-machine-host-name
|
79
|
+
HOSTNAME=`hostname`
|
80
|
+
DATE=`date +%s`
|
81
|
+
|
82
|
+
set -x
|
83
|
+
passenger-config package-cloud-usage /var/lib/passenger-enterprise-usage/$HOSTNAME-$DATE.tar.gz
|
84
|
+
scp /var/lib/passenger-enterprise-usage/*.tar.gz $REPORTER_MACHINE:passenger-enterprise-usage/
|
85
|
+
rm -f /var/lib/passenger-enterprise-usage/*.tar.gz
|
86
|
+
|
87
|
+
Here, `foo@reporter-machine-host-name` specifies which reporter machine you want to copy the package to, and which username you want to use to login to the reporter machine. Replace this with an appropriate value.
|
88
|
+
|
89
|
+
**Notes about SSH keys**: don't forget to setup SSH keys so that the script can scp to the reporter machine. The script will be run as the user that PassengerHelperAgent is running as.
|
90
|
+
|
91
|
+
**Notes about PATH**: the above script assumes that the `passenger-config` command is in PATH. This is always the case if you installed Passenger Enterprise using Debian or RPM packages, but may not be the case if you installed it using RubyGems or tarball. If it's not in PATH, or when in doubt, you should specify the full path to passenger-config. You can find out where passenger-config is using `which`. For example:
|
92
|
+
|
93
|
+
bash# which passenger-config
|
94
|
+
/opt/passenger-enterprise-x.x.x/bin/passenger-config
|
95
|
+
|
96
|
+
Then the script should call:
|
97
|
+
|
98
|
+
/opt/passenger-enterprise-x.x.x/bin/passenger-config package-cloud-usage ...
|
99
|
+
|
100
|
+
6. Open the crontab of the user that PassengerHelperAgent is running as. For example, if PassengerHelperAgent is running as root:
|
101
|
+
|
102
|
+
bash# sudo -u root -H crontab -e
|
103
|
+
|
104
|
+
7. Insert the following entry into the crontab, so that the script is invoked on the 1st of every month:
|
105
|
+
|
106
|
+
0 0 1 * * /var/lib/passenger-enterprise-usage/script
|
107
|
+
|
108
|
+
8. Ensure that `/var/lib/passenger-enterprise-usage/script` is run during system shutdown, as the user that PassengerHelperAgent is running as. On most Linux systems, this can be achieved by as follows:
|
109
|
+
|
110
|
+
bash# touch /etc/init.d/passenger-enterprise-cloud-license
|
111
|
+
bash# chmod +x /etc/init.d/passenger-enterprise-cloud-license
|
112
|
+
bash# ln -s /etc/init.d/passenger-enterprise-cloud-license /etc/rc0.d/K00passenger-enterprise-cloud-license
|
113
|
+
bash# ln -s /etc/init.d/passenger-enterprise-cloud-license /etc/rc6.d/K00passenger-enterprise-cloud-license
|
114
|
+
bash# editor /etc/init.d/passenger-enterprise-cloud-license
|
115
|
+
|
116
|
+
If PassengerHelperAgent is running as root, then `/etc/init.d/passenger-enterprise-cloud-license` should contain:
|
117
|
+
|
118
|
+
#!/bin/bash
|
119
|
+
set -e
|
120
|
+
exec /var/lib/passenger-enterprise-usage/script
|
121
|
+
|
122
|
+
If PassengerHelperAgent is not running as root, then it should contain:
|
123
|
+
|
124
|
+
#!/bin/bash
|
125
|
+
set -e
|
126
|
+
exec sudo -u PROPER_USERNAME_HERE -H /var/lib/passenger-enterprise-usage/script
|
127
|
+
|
128
|
+
Or, if you're an RVM user, use rvmsudo instead of sudo:
|
129
|
+
|
130
|
+
#!/bin/bash
|
131
|
+
set -e
|
132
|
+
exec rvmsudo -u PROPER_USERNAME_HERE -H /var/lib/passenger-enterprise-usage/script
|
133
|
+
|
134
|
+
**Note:** If your operating system does not respect /etc/rcX.d, please consult your operating system's manual to learn how to run `/var/lib/passenger-enterprise-usage/script` during system shutdown.
|
135
|
+
|
136
|
+
## Phase 2: setting up the "reporter" machine
|
137
|
+
|
138
|
+
In phase 1, you've setup web servers to scp usage data packages to the reporter machine, by logging into the reporter machine as a certain user. Let's call that user "foo".
|
139
|
+
|
140
|
+
1. Login to the reporter machine as user foo.
|
141
|
+
|
142
|
+
2. Create a directory that the web servers can scp into:
|
143
|
+
|
144
|
+
bash$ mkdir ~/passenger-enterprise-usage
|
145
|
+
bash$ chmod 700 ~/passenger-enterprise-usage
|
146
|
+
|
147
|
+
3. Install the [passenger-enterprise-bulk-send-cloud-usage](https://github.com/phusion/passenger-enterprise-bulk-send-cloud-usage) tool:
|
148
|
+
|
149
|
+
bash$ cd ~
|
150
|
+
bash$ curl -L -O https://github.com/phusion/passenger-enterprise-bulk-send-cloud-usage/archive/master.tar.gz
|
151
|
+
bash$ tar xzvf master.tar.gz && rm master.tar.gz
|
152
|
+
|
153
|
+
4. Open the crontab of user foo:
|
154
|
+
|
155
|
+
bash$ crontab -e
|
156
|
+
|
157
|
+
5. Insert the following entry into the crontab to upload usage data packages on the 1st of every month:
|
158
|
+
|
159
|
+
0 1 1 * * ~/passenger-enterprise-bulk-send-cloud-usage/passenger-enterprise-bulk-send-cloud-usage --delete ~/passenger-enterprise-usage-*.tar.gz
|
160
|
+
|
161
|
+
This crontab entry is batch job B as described in the conceptual overview.
|
162
|
+
|
163
|
+
Note that this command is run at 1 AM: 1 hour after the web servers have generated usage data packages and copied them over to the reporter machine. You *must* therefore ensure that the clocks on the web servers and the reporter machine are properly synchronized, and that they are set to the same time zone.
|
164
|
+
|
165
|
+
## Phase 3: testing
|
166
|
+
|
167
|
+
Once the web servers and the reporter machine are all setup, you can test whether the setup works correctly.
|
168
|
+
|
169
|
+
1. On each web server, run `/var/lib/passenger-enterprise-usage/script` as the user that PassengerHelperAgent runs as. For example, if PassengerHelperAgent is running as root:
|
170
|
+
|
171
|
+
sudo -u root -H /var/lib/passenger-enterprise-usage/script
|
172
|
+
|
173
|
+
Or, if you're an RVM user, use rvmsudo instead of sudo:
|
174
|
+
|
175
|
+
rvmsudo -u root -H /var/lib/passenger-enterprise-usage/script
|
176
|
+
|
177
|
+
You should see output like this:
|
178
|
+
|
179
|
+
+ passenger-config package-cloud-usage /var/lib/passenger-enterprise-usage/myhostname-1415377926.tar.gz
|
180
|
+
+ scp /var/lib/passenger-enterprise-usage/myhostname-1415377310.tar.gz hongli@localhost:passenger-enterprise-usage/
|
181
|
+
myhostname-1415377310.tar.gz 100% 605 0.6KB/s 00:00
|
182
|
+
+ rm -f /var/lib/passenger-enterprise-usage/myhostname-1415377310.tar.gz
|
183
|
+
|
184
|
+
2. Login to the reporter machine as the "foo" user (as described in phase 2) and run:
|
185
|
+
|
186
|
+
~/passenger-enterprise-bulk-send-cloud-usage-master/passenger-enterprise-bulk-send-cloud-usage --delete ~/passenger-enterprise-usage/*.tar.gz
|
187
|
+
|
188
|
+
You should see output like this:
|
189
|
+
|
190
|
+
---- Uploading ~/passenger-enterprise-usage/myhostname-1415377310.tar.gz -----
|
191
|
+
Success!
|
192
|
+
Deleting ~/passenger-enterprise-usage/myhostname-1415377310.tar.gz
|
193
|
+
|
194
|
+
3. Login to the [Phusion Passenger Enterprise Customer Area](https://www.phusionpassenger.com/orders). Under "Cloud subscription status", click "View usage details". Verify that usage has been properly registered.
|
data/doc/Users guide Apache.txt
CHANGED
@@ -1883,7 +1883,7 @@ Apache's version also buffers to memory only, making it problematic for large re
|
|
1883
1883
|
|
1884
1884
|
How does response buffering - whether it's done by Apache or by Phusion Passenger - exactly protect against slow clients?
|
1885
1885
|
Consider an HTTP client that's on a dial-up modem link, and your
|
1886
|
-
application process generates a 2 MB response. If the response is buffered
|
1886
|
+
application process generates a 2 MB response. If the response is not buffered
|
1887
1887
|
then your application process will be blocked until the entire 2 MB has been
|
1888
1888
|
sent out to the HTTP client. This disallows your application process to do any useful
|
1889
1889
|
work in the mean time. By buffering responses, Phusion Passenger or Apache will read
|
Binary file
|
@@ -0,0 +1,388 @@
|
|
1
|
+
{
|
2
|
+
"vars": {
|
3
|
+
"@gray-base": "#000",
|
4
|
+
"@gray-darker": "lighten(@gray-base, 13.5%)",
|
5
|
+
"@gray-dark": "lighten(@gray-base, 20%)",
|
6
|
+
"@gray": "lighten(@gray-base, 33.5%)",
|
7
|
+
"@gray-light": "lighten(@gray-base, 46.7%)",
|
8
|
+
"@gray-lighter": "lighten(@gray-base, 93.5%)",
|
9
|
+
"@brand-primary": "#428bca",
|
10
|
+
"@brand-success": "#5cb85c",
|
11
|
+
"@brand-info": "#5bc0de",
|
12
|
+
"@brand-warning": "#f0ad4e",
|
13
|
+
"@brand-danger": "#d9534f",
|
14
|
+
"@body-bg": "#fff",
|
15
|
+
"@text-color": "@gray-dark",
|
16
|
+
"@link-color": "@brand-primary",
|
17
|
+
"@link-hover-color": "darken(@link-color, 15%)",
|
18
|
+
"@link-hover-decoration": "underline",
|
19
|
+
"@font-family-sans-serif": "\"Helvetica Neue\", Helvetica, Arial, sans-serif",
|
20
|
+
"@font-family-serif": "Georgia, \"Times New Roman\", Times, serif",
|
21
|
+
"@font-family-monospace": "Menlo, Monaco, Consolas, \"Courier New\", monospace",
|
22
|
+
"@font-family-base": "@font-family-sans-serif",
|
23
|
+
"@font-size-base": "14px",
|
24
|
+
"@font-size-large": "ceil((@font-size-base * 1.25))",
|
25
|
+
"@font-size-small": "ceil((@font-size-base * 0.85))",
|
26
|
+
"@font-size-h1": "floor((@font-size-base * 2.6))",
|
27
|
+
"@font-size-h2": "floor((@font-size-base * 2.15))",
|
28
|
+
"@font-size-h3": "ceil((@font-size-base * 1.7))",
|
29
|
+
"@font-size-h4": "ceil((@font-size-base * 1.25))",
|
30
|
+
"@font-size-h5": "@font-size-base",
|
31
|
+
"@font-size-h6": "ceil((@font-size-base * 0.85))",
|
32
|
+
"@line-height-base": "1.428571429",
|
33
|
+
"@line-height-computed": "floor((@font-size-base * @line-height-base))",
|
34
|
+
"@headings-font-family": "inherit",
|
35
|
+
"@headings-font-weight": "500",
|
36
|
+
"@headings-line-height": "1.1",
|
37
|
+
"@headings-color": "inherit",
|
38
|
+
"@icon-font-path": "\"../fonts/\"",
|
39
|
+
"@icon-font-name": "\"glyphicons-halflings-regular\"",
|
40
|
+
"@icon-font-svg-id": "\"glyphicons_halflingsregular\"",
|
41
|
+
"@padding-base-vertical": "6px",
|
42
|
+
"@padding-base-horizontal": "12px",
|
43
|
+
"@padding-large-vertical": "10px",
|
44
|
+
"@padding-large-horizontal": "16px",
|
45
|
+
"@padding-small-vertical": "5px",
|
46
|
+
"@padding-small-horizontal": "10px",
|
47
|
+
"@padding-xs-vertical": "1px",
|
48
|
+
"@padding-xs-horizontal": "5px",
|
49
|
+
"@line-height-large": "1.33",
|
50
|
+
"@line-height-small": "1.5",
|
51
|
+
"@border-radius-base": "4px",
|
52
|
+
"@border-radius-large": "6px",
|
53
|
+
"@border-radius-small": "3px",
|
54
|
+
"@component-active-color": "#fff",
|
55
|
+
"@component-active-bg": "@brand-primary",
|
56
|
+
"@caret-width-base": "4px",
|
57
|
+
"@caret-width-large": "5px",
|
58
|
+
"@table-cell-padding": "8px",
|
59
|
+
"@table-condensed-cell-padding": "5px",
|
60
|
+
"@table-bg": "transparent",
|
61
|
+
"@table-bg-accent": "#f9f9f9",
|
62
|
+
"@table-bg-hover": "#f5f5f5",
|
63
|
+
"@table-bg-active": "@table-bg-hover",
|
64
|
+
"@table-border-color": "#ddd",
|
65
|
+
"@btn-font-weight": "normal",
|
66
|
+
"@btn-default-color": "#333",
|
67
|
+
"@btn-default-bg": "#fff",
|
68
|
+
"@btn-default-border": "#ccc",
|
69
|
+
"@btn-primary-color": "#fff",
|
70
|
+
"@btn-primary-bg": "@brand-primary",
|
71
|
+
"@btn-primary-border": "darken(@btn-primary-bg, 5%)",
|
72
|
+
"@btn-success-color": "#fff",
|
73
|
+
"@btn-success-bg": "@brand-success",
|
74
|
+
"@btn-success-border": "darken(@btn-success-bg, 5%)",
|
75
|
+
"@btn-info-color": "#fff",
|
76
|
+
"@btn-info-bg": "@brand-info",
|
77
|
+
"@btn-info-border": "darken(@btn-info-bg, 5%)",
|
78
|
+
"@btn-warning-color": "#fff",
|
79
|
+
"@btn-warning-bg": "@brand-warning",
|
80
|
+
"@btn-warning-border": "darken(@btn-warning-bg, 5%)",
|
81
|
+
"@btn-danger-color": "#fff",
|
82
|
+
"@btn-danger-bg": "@brand-danger",
|
83
|
+
"@btn-danger-border": "darken(@btn-danger-bg, 5%)",
|
84
|
+
"@btn-link-disabled-color": "@gray-light",
|
85
|
+
"@input-bg": "#fff",
|
86
|
+
"@input-bg-disabled": "@gray-lighter",
|
87
|
+
"@input-color": "@gray",
|
88
|
+
"@input-border": "#ccc",
|
89
|
+
"@input-border-radius": "@border-radius-base",
|
90
|
+
"@input-border-radius-large": "@border-radius-large",
|
91
|
+
"@input-border-radius-small": "@border-radius-small",
|
92
|
+
"@input-border-focus": "#66afe9",
|
93
|
+
"@input-color-placeholder": "#999",
|
94
|
+
"@input-height-base": "(@line-height-computed + (@padding-base-vertical * 2) + 2)",
|
95
|
+
"@input-height-large": "(ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2)",
|
96
|
+
"@input-height-small": "(floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2)",
|
97
|
+
"@legend-color": "@gray-dark",
|
98
|
+
"@legend-border-color": "#e5e5e5",
|
99
|
+
"@input-group-addon-bg": "@gray-lighter",
|
100
|
+
"@input-group-addon-border-color": "@input-border",
|
101
|
+
"@cursor-disabled": "not-allowed",
|
102
|
+
"@dropdown-bg": "#fff",
|
103
|
+
"@dropdown-border": "rgba(0,0,0,.15)",
|
104
|
+
"@dropdown-fallback-border": "#ccc",
|
105
|
+
"@dropdown-divider-bg": "#e5e5e5",
|
106
|
+
"@dropdown-link-color": "@gray-dark",
|
107
|
+
"@dropdown-link-hover-color": "darken(@gray-dark, 5%)",
|
108
|
+
"@dropdown-link-hover-bg": "#f5f5f5",
|
109
|
+
"@dropdown-link-active-color": "@component-active-color",
|
110
|
+
"@dropdown-link-active-bg": "@component-active-bg",
|
111
|
+
"@dropdown-link-disabled-color": "@gray-light",
|
112
|
+
"@dropdown-header-color": "@gray-light",
|
113
|
+
"@dropdown-caret-color": "#000",
|
114
|
+
"@screen-xs": "480px",
|
115
|
+
"@screen-xs-min": "@screen-xs",
|
116
|
+
"@screen-phone": "@screen-xs-min",
|
117
|
+
"@screen-sm": "768px",
|
118
|
+
"@screen-sm-min": "@screen-sm",
|
119
|
+
"@screen-tablet": "@screen-sm-min",
|
120
|
+
"@screen-md": "992px",
|
121
|
+
"@screen-md-min": "@screen-md",
|
122
|
+
"@screen-desktop": "@screen-md-min",
|
123
|
+
"@screen-lg": "1200px",
|
124
|
+
"@screen-lg-min": "@screen-lg",
|
125
|
+
"@screen-lg-desktop": "@screen-lg-min",
|
126
|
+
"@screen-xs-max": "(@screen-sm-min - 1)",
|
127
|
+
"@screen-sm-max": "(@screen-md-min - 1)",
|
128
|
+
"@screen-md-max": "(@screen-lg-min - 1)",
|
129
|
+
"@grid-columns": "12",
|
130
|
+
"@grid-gutter-width": "30px",
|
131
|
+
"@grid-float-breakpoint": "@screen-sm-min",
|
132
|
+
"@grid-float-breakpoint-max": "(@grid-float-breakpoint - 1)",
|
133
|
+
"@container-tablet": "(720px + @grid-gutter-width)",
|
134
|
+
"@container-sm": "@container-tablet",
|
135
|
+
"@container-desktop": "(940px + @grid-gutter-width)",
|
136
|
+
"@container-md": "@container-desktop",
|
137
|
+
"@container-large-desktop": "(1140px + @grid-gutter-width)",
|
138
|
+
"@container-lg": "@container-large-desktop",
|
139
|
+
"@navbar-height": "50px",
|
140
|
+
"@navbar-margin-bottom": "@line-height-computed",
|
141
|
+
"@navbar-border-radius": "@border-radius-base",
|
142
|
+
"@navbar-padding-horizontal": "floor((@grid-gutter-width / 2))",
|
143
|
+
"@navbar-padding-vertical": "((@navbar-height - @line-height-computed) / 2)",
|
144
|
+
"@navbar-collapse-max-height": "340px",
|
145
|
+
"@navbar-default-color": "#777",
|
146
|
+
"@navbar-default-bg": "#f8f8f8",
|
147
|
+
"@navbar-default-border": "darken(@navbar-default-bg, 6.5%)",
|
148
|
+
"@navbar-default-link-color": "#777",
|
149
|
+
"@navbar-default-link-hover-color": "#333",
|
150
|
+
"@navbar-default-link-hover-bg": "transparent",
|
151
|
+
"@navbar-default-link-active-color": "#555",
|
152
|
+
"@navbar-default-link-active-bg": "darken(@navbar-default-bg, 6.5%)",
|
153
|
+
"@navbar-default-link-disabled-color": "#ccc",
|
154
|
+
"@navbar-default-link-disabled-bg": "transparent",
|
155
|
+
"@navbar-default-brand-color": "@navbar-default-link-color",
|
156
|
+
"@navbar-default-brand-hover-color": "darken(@navbar-default-brand-color, 10%)",
|
157
|
+
"@navbar-default-brand-hover-bg": "transparent",
|
158
|
+
"@navbar-default-toggle-hover-bg": "#ddd",
|
159
|
+
"@navbar-default-toggle-icon-bar-bg": "#888",
|
160
|
+
"@navbar-default-toggle-border-color": "#ddd",
|
161
|
+
"@navbar-inverse-color": "lighten(@gray-light, 15%)",
|
162
|
+
"@navbar-inverse-bg": "#222",
|
163
|
+
"@navbar-inverse-border": "darken(@navbar-inverse-bg, 10%)",
|
164
|
+
"@navbar-inverse-link-color": "lighten(@gray-light, 15%)",
|
165
|
+
"@navbar-inverse-link-hover-color": "#fff",
|
166
|
+
"@navbar-inverse-link-hover-bg": "transparent",
|
167
|
+
"@navbar-inverse-link-active-color": "@navbar-inverse-link-hover-color",
|
168
|
+
"@navbar-inverse-link-active-bg": "darken(@navbar-inverse-bg, 10%)",
|
169
|
+
"@navbar-inverse-link-disabled-color": "#444",
|
170
|
+
"@navbar-inverse-link-disabled-bg": "transparent",
|
171
|
+
"@navbar-inverse-brand-color": "@navbar-inverse-link-color",
|
172
|
+
"@navbar-inverse-brand-hover-color": "#fff",
|
173
|
+
"@navbar-inverse-brand-hover-bg": "transparent",
|
174
|
+
"@navbar-inverse-toggle-hover-bg": "#333",
|
175
|
+
"@navbar-inverse-toggle-icon-bar-bg": "#fff",
|
176
|
+
"@navbar-inverse-toggle-border-color": "#333",
|
177
|
+
"@nav-link-padding": "10px 15px",
|
178
|
+
"@nav-link-hover-bg": "@gray-lighter",
|
179
|
+
"@nav-disabled-link-color": "@gray-light",
|
180
|
+
"@nav-disabled-link-hover-color": "@gray-light",
|
181
|
+
"@nav-tabs-border-color": "#ddd",
|
182
|
+
"@nav-tabs-link-hover-border-color": "@gray-lighter",
|
183
|
+
"@nav-tabs-active-link-hover-bg": "@body-bg",
|
184
|
+
"@nav-tabs-active-link-hover-color": "@gray",
|
185
|
+
"@nav-tabs-active-link-hover-border-color": "#ddd",
|
186
|
+
"@nav-tabs-justified-link-border-color": "#ddd",
|
187
|
+
"@nav-tabs-justified-active-link-border-color": "@body-bg",
|
188
|
+
"@nav-pills-border-radius": "@border-radius-base",
|
189
|
+
"@nav-pills-active-link-hover-bg": "@component-active-bg",
|
190
|
+
"@nav-pills-active-link-hover-color": "@component-active-color",
|
191
|
+
"@pagination-color": "@link-color",
|
192
|
+
"@pagination-bg": "#fff",
|
193
|
+
"@pagination-border": "#ddd",
|
194
|
+
"@pagination-hover-color": "@link-hover-color",
|
195
|
+
"@pagination-hover-bg": "@gray-lighter",
|
196
|
+
"@pagination-hover-border": "#ddd",
|
197
|
+
"@pagination-active-color": "#fff",
|
198
|
+
"@pagination-active-bg": "@brand-primary",
|
199
|
+
"@pagination-active-border": "@brand-primary",
|
200
|
+
"@pagination-disabled-color": "@gray-light",
|
201
|
+
"@pagination-disabled-bg": "#fff",
|
202
|
+
"@pagination-disabled-border": "#ddd",
|
203
|
+
"@pager-bg": "@pagination-bg",
|
204
|
+
"@pager-border": "@pagination-border",
|
205
|
+
"@pager-border-radius": "15px",
|
206
|
+
"@pager-hover-bg": "@pagination-hover-bg",
|
207
|
+
"@pager-active-bg": "@pagination-active-bg",
|
208
|
+
"@pager-active-color": "@pagination-active-color",
|
209
|
+
"@pager-disabled-color": "@pagination-disabled-color",
|
210
|
+
"@jumbotron-padding": "30px",
|
211
|
+
"@jumbotron-color": "inherit",
|
212
|
+
"@jumbotron-bg": "@gray-lighter",
|
213
|
+
"@jumbotron-heading-color": "inherit",
|
214
|
+
"@jumbotron-font-size": "ceil((@font-size-base * 1.5))",
|
215
|
+
"@state-success-text": "#3c763d",
|
216
|
+
"@state-success-bg": "#dff0d8",
|
217
|
+
"@state-success-border": "darken(spin(@state-success-bg, -10), 5%)",
|
218
|
+
"@state-info-text": "#31708f",
|
219
|
+
"@state-info-bg": "#d9edf7",
|
220
|
+
"@state-info-border": "darken(spin(@state-info-bg, -10), 7%)",
|
221
|
+
"@state-warning-text": "#8a6d3b",
|
222
|
+
"@state-warning-bg": "#fcf8e3",
|
223
|
+
"@state-warning-border": "darken(spin(@state-warning-bg, -10), 5%)",
|
224
|
+
"@state-danger-text": "#a94442",
|
225
|
+
"@state-danger-bg": "#f2dede",
|
226
|
+
"@state-danger-border": "darken(spin(@state-danger-bg, -10), 5%)",
|
227
|
+
"@tooltip-max-width": "200px",
|
228
|
+
"@tooltip-color": "#fff",
|
229
|
+
"@tooltip-bg": "#000",
|
230
|
+
"@tooltip-opacity": ".9",
|
231
|
+
"@tooltip-arrow-width": "5px",
|
232
|
+
"@tooltip-arrow-color": "@tooltip-bg",
|
233
|
+
"@popover-bg": "#fff",
|
234
|
+
"@popover-max-width": "276px",
|
235
|
+
"@popover-border-color": "rgba(0,0,0,.2)",
|
236
|
+
"@popover-fallback-border-color": "#ccc",
|
237
|
+
"@popover-title-bg": "darken(@popover-bg, 3%)",
|
238
|
+
"@popover-arrow-width": "10px",
|
239
|
+
"@popover-arrow-color": "@popover-bg",
|
240
|
+
"@popover-arrow-outer-width": "(@popover-arrow-width + 1)",
|
241
|
+
"@popover-arrow-outer-color": "fadein(@popover-border-color, 5%)",
|
242
|
+
"@popover-arrow-outer-fallback-color": "darken(@popover-fallback-border-color, 20%)",
|
243
|
+
"@label-default-bg": "@gray-light",
|
244
|
+
"@label-primary-bg": "@brand-primary",
|
245
|
+
"@label-success-bg": "@brand-success",
|
246
|
+
"@label-info-bg": "@brand-info",
|
247
|
+
"@label-warning-bg": "@brand-warning",
|
248
|
+
"@label-danger-bg": "@brand-danger",
|
249
|
+
"@label-color": "#fff",
|
250
|
+
"@label-link-hover-color": "#fff",
|
251
|
+
"@modal-inner-padding": "15px",
|
252
|
+
"@modal-title-padding": "15px",
|
253
|
+
"@modal-title-line-height": "@line-height-base",
|
254
|
+
"@modal-content-bg": "#fff",
|
255
|
+
"@modal-content-border-color": "rgba(0,0,0,.2)",
|
256
|
+
"@modal-content-fallback-border-color": "#999",
|
257
|
+
"@modal-backdrop-bg": "#000",
|
258
|
+
"@modal-backdrop-opacity": ".5",
|
259
|
+
"@modal-header-border-color": "#e5e5e5",
|
260
|
+
"@modal-footer-border-color": "@modal-header-border-color",
|
261
|
+
"@modal-lg": "900px",
|
262
|
+
"@modal-md": "600px",
|
263
|
+
"@modal-sm": "300px",
|
264
|
+
"@alert-padding": "15px",
|
265
|
+
"@alert-border-radius": "@border-radius-base",
|
266
|
+
"@alert-link-font-weight": "bold",
|
267
|
+
"@alert-success-bg": "@state-success-bg",
|
268
|
+
"@alert-success-text": "@state-success-text",
|
269
|
+
"@alert-success-border": "@state-success-border",
|
270
|
+
"@alert-info-bg": "@state-info-bg",
|
271
|
+
"@alert-info-text": "@state-info-text",
|
272
|
+
"@alert-info-border": "@state-info-border",
|
273
|
+
"@alert-warning-bg": "@state-warning-bg",
|
274
|
+
"@alert-warning-text": "@state-warning-text",
|
275
|
+
"@alert-warning-border": "@state-warning-border",
|
276
|
+
"@alert-danger-bg": "@state-danger-bg",
|
277
|
+
"@alert-danger-text": "@state-danger-text",
|
278
|
+
"@alert-danger-border": "@state-danger-border",
|
279
|
+
"@progress-bg": "#f5f5f5",
|
280
|
+
"@progress-bar-color": "#fff",
|
281
|
+
"@progress-border-radius": "@border-radius-base",
|
282
|
+
"@progress-bar-bg": "@brand-primary",
|
283
|
+
"@progress-bar-success-bg": "@brand-success",
|
284
|
+
"@progress-bar-warning-bg": "@brand-warning",
|
285
|
+
"@progress-bar-danger-bg": "@brand-danger",
|
286
|
+
"@progress-bar-info-bg": "@brand-info",
|
287
|
+
"@list-group-bg": "#fff",
|
288
|
+
"@list-group-border": "#ddd",
|
289
|
+
"@list-group-border-radius": "@border-radius-base",
|
290
|
+
"@list-group-hover-bg": "#f5f5f5",
|
291
|
+
"@list-group-active-color": "@component-active-color",
|
292
|
+
"@list-group-active-bg": "@component-active-bg",
|
293
|
+
"@list-group-active-border": "@list-group-active-bg",
|
294
|
+
"@list-group-active-text-color": "lighten(@list-group-active-bg, 40%)",
|
295
|
+
"@list-group-disabled-color": "@gray-light",
|
296
|
+
"@list-group-disabled-bg": "@gray-lighter",
|
297
|
+
"@list-group-disabled-text-color": "@list-group-disabled-color",
|
298
|
+
"@list-group-link-color": "#555",
|
299
|
+
"@list-group-link-hover-color": "@list-group-link-color",
|
300
|
+
"@list-group-link-heading-color": "#333",
|
301
|
+
"@panel-bg": "#fff",
|
302
|
+
"@panel-body-padding": "15px",
|
303
|
+
"@panel-heading-padding": "10px 15px",
|
304
|
+
"@panel-footer-padding": "@panel-heading-padding",
|
305
|
+
"@panel-border-radius": "@border-radius-base",
|
306
|
+
"@panel-inner-border": "#ddd",
|
307
|
+
"@panel-footer-bg": "#f5f5f5",
|
308
|
+
"@panel-default-text": "@gray-dark",
|
309
|
+
"@panel-default-border": "#ddd",
|
310
|
+
"@panel-default-heading-bg": "#f5f5f5",
|
311
|
+
"@panel-primary-text": "#fff",
|
312
|
+
"@panel-primary-border": "@brand-primary",
|
313
|
+
"@panel-primary-heading-bg": "@brand-primary",
|
314
|
+
"@panel-success-text": "@state-success-text",
|
315
|
+
"@panel-success-border": "@state-success-border",
|
316
|
+
"@panel-success-heading-bg": "@state-success-bg",
|
317
|
+
"@panel-info-text": "@state-info-text",
|
318
|
+
"@panel-info-border": "@state-info-border",
|
319
|
+
"@panel-info-heading-bg": "@state-info-bg",
|
320
|
+
"@panel-warning-text": "@state-warning-text",
|
321
|
+
"@panel-warning-border": "@state-warning-border",
|
322
|
+
"@panel-warning-heading-bg": "@state-warning-bg",
|
323
|
+
"@panel-danger-text": "@state-danger-text",
|
324
|
+
"@panel-danger-border": "@state-danger-border",
|
325
|
+
"@panel-danger-heading-bg": "@state-danger-bg",
|
326
|
+
"@thumbnail-padding": "4px",
|
327
|
+
"@thumbnail-bg": "@body-bg",
|
328
|
+
"@thumbnail-border": "#ddd",
|
329
|
+
"@thumbnail-border-radius": "@border-radius-base",
|
330
|
+
"@thumbnail-caption-color": "@text-color",
|
331
|
+
"@thumbnail-caption-padding": "9px",
|
332
|
+
"@well-bg": "#f5f5f5",
|
333
|
+
"@well-border": "darken(@well-bg, 7%)",
|
334
|
+
"@badge-color": "#fff",
|
335
|
+
"@badge-link-hover-color": "#fff",
|
336
|
+
"@badge-bg": "@gray-light",
|
337
|
+
"@badge-active-color": "@link-color",
|
338
|
+
"@badge-active-bg": "#fff",
|
339
|
+
"@badge-font-weight": "bold",
|
340
|
+
"@badge-line-height": "1",
|
341
|
+
"@badge-border-radius": "10px",
|
342
|
+
"@breadcrumb-padding-vertical": "8px",
|
343
|
+
"@breadcrumb-padding-horizontal": "15px",
|
344
|
+
"@breadcrumb-bg": "#f5f5f5",
|
345
|
+
"@breadcrumb-color": "#ccc",
|
346
|
+
"@breadcrumb-active-color": "@gray-light",
|
347
|
+
"@breadcrumb-separator": "\"/\"",
|
348
|
+
"@carousel-text-shadow": "0 1px 2px rgba(0,0,0,.6)",
|
349
|
+
"@carousel-control-color": "#fff",
|
350
|
+
"@carousel-control-width": "15%",
|
351
|
+
"@carousel-control-opacity": ".5",
|
352
|
+
"@carousel-control-font-size": "20px",
|
353
|
+
"@carousel-indicator-active-bg": "#fff",
|
354
|
+
"@carousel-indicator-border-color": "#fff",
|
355
|
+
"@carousel-caption-color": "#fff",
|
356
|
+
"@close-font-weight": "bold",
|
357
|
+
"@close-color": "#000",
|
358
|
+
"@close-text-shadow": "0 1px 0 #fff",
|
359
|
+
"@code-color": "#c7254e",
|
360
|
+
"@code-bg": "#f9f2f4",
|
361
|
+
"@kbd-color": "#fff",
|
362
|
+
"@kbd-bg": "#333",
|
363
|
+
"@pre-bg": "#f5f5f5",
|
364
|
+
"@pre-color": "@gray-dark",
|
365
|
+
"@pre-border-color": "#ccc",
|
366
|
+
"@pre-scrollable-max-height": "340px",
|
367
|
+
"@component-offset-horizontal": "180px",
|
368
|
+
"@text-muted": "@gray-light",
|
369
|
+
"@abbr-border-color": "@gray-light",
|
370
|
+
"@headings-small-color": "@gray-light",
|
371
|
+
"@blockquote-small-color": "@gray-light",
|
372
|
+
"@blockquote-font-size": "(@font-size-base * 1.25)",
|
373
|
+
"@blockquote-border-color": "@gray-lighter",
|
374
|
+
"@page-header-border-color": "@gray-lighter",
|
375
|
+
"@dl-horizontal-offset": "@component-offset-horizontal",
|
376
|
+
"@hr-border": "@gray-lighter"
|
377
|
+
},
|
378
|
+
"css": [
|
379
|
+
"print.less",
|
380
|
+
"type.less",
|
381
|
+
"code.less",
|
382
|
+
"tables.less",
|
383
|
+
"forms.less",
|
384
|
+
"buttons.less"
|
385
|
+
],
|
386
|
+
"js": [],
|
387
|
+
"customizerUrl": "http://getbootstrap.com/customize/?id=572bbf800700ea752a72"
|
388
|
+
}
|