propro 0.1.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.
Files changed (51) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +3 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE +339 -0
  5. data/README.md +134 -0
  6. data/Rakefile +9 -0
  7. data/bin/propro +6 -0
  8. data/examples/vagrant.propro +41 -0
  9. data/examples/vps_webserver.propro +51 -0
  10. data/ext/bash/app/nginx.sh +9 -0
  11. data/ext/bash/app/node.sh +5 -0
  12. data/ext/bash/app/pg.sh +5 -0
  13. data/ext/bash/app/puma/nginx.sh +58 -0
  14. data/ext/bash/app/puma.sh +64 -0
  15. data/ext/bash/app/rvm.sh +7 -0
  16. data/ext/bash/app/sidekiq.sh +69 -0
  17. data/ext/bash/app.sh +75 -0
  18. data/ext/bash/db/pg.sh +47 -0
  19. data/ext/bash/db/redis.sh +20 -0
  20. data/ext/bash/lib/extras.sh +11 -0
  21. data/ext/bash/lib/nginx.sh +233 -0
  22. data/ext/bash/lib/node.sh +28 -0
  23. data/ext/bash/lib/pg.sh +44 -0
  24. data/ext/bash/lib/propro.sh +104 -0
  25. data/ext/bash/lib/redis.sh +59 -0
  26. data/ext/bash/lib/rvm.sh +21 -0
  27. data/ext/bash/lib/system.sh +57 -0
  28. data/ext/bash/lib/ubuntu.sh +175 -0
  29. data/ext/bash/vagrant/nginx.sh +31 -0
  30. data/ext/bash/vagrant/node.sh +5 -0
  31. data/ext/bash/vagrant/pg.sh +12 -0
  32. data/ext/bash/vagrant/redis.sh +5 -0
  33. data/ext/bash/vagrant/rvm.sh +6 -0
  34. data/ext/bash/vagrant/system.sh +26 -0
  35. data/ext/bash/vagrant.sh +3 -0
  36. data/ext/bash/vps/system.sh +156 -0
  37. data/lib/propro/cli/templates/init.tt +21 -0
  38. data/lib/propro/cli.rb +125 -0
  39. data/lib/propro/command.rb +17 -0
  40. data/lib/propro/export.rb +119 -0
  41. data/lib/propro/option.rb +36 -0
  42. data/lib/propro/package.rb +68 -0
  43. data/lib/propro/script.rb +95 -0
  44. data/lib/propro/source.rb +86 -0
  45. data/lib/propro/version.rb +3 -0
  46. data/lib/propro.rb +57 -0
  47. data/propro.gemspec +27 -0
  48. data/test/export_spec.rb +88 -0
  49. data/test/minitest_helper.rb +6 -0
  50. data/test/option_spec.rb +34 -0
  51. metadata +167 -0
@@ -0,0 +1,104 @@
1
+ #!/usr/bin/env bash
2
+
3
+ set -e
4
+ set -u
5
+
6
+ export PROPRO_LOG_FILE="/root/provision.log"
7
+ export PROPRO_FULL_LOG_FILE="/root/full_provision.log"
8
+ export PROPRO_LOG_USE_COLOR="yes"
9
+ export PROPRO_DISABLE_LOG="no"
10
+
11
+ >$PROPRO_FULL_LOG_FILE
12
+ exec > >(tee $PROPRO_FULL_LOG_FILE)
13
+ exec 2>&1
14
+
15
+ function log {
16
+ echo -e "$1"
17
+
18
+ if is-yes $PROPRO_DISABLE_LOG; then
19
+ return 0
20
+ fi
21
+
22
+ if [ $PROPRO_LOG_FILE ]; then
23
+ touch $PROPRO_LOG_FILE
24
+ echo -e "$1" >> $PROPRO_LOG_FILE
25
+ fi
26
+ }
27
+
28
+ # $1 text
29
+ function section {
30
+ local msg="#### $1"
31
+ log ""
32
+ if is-yes $PROPRO_LOG_USE_COLOR; then
33
+ log "\e[32m\e[1m$msg\e[0m"
34
+ else
35
+ log "$msg"
36
+ fi
37
+ }
38
+
39
+ # $1 text
40
+ function announce {
41
+ if is-yes $PROPRO_LOG_USE_COLOR; then
42
+ log "\e[34m\e[1m--->\e[0m $1"
43
+ else
44
+ log "---> $1"
45
+ fi
46
+ }
47
+
48
+ # $1 text
49
+ function announce-item {
50
+ if is-yes $PROPRO_LOG_USE_COLOR; then
51
+ log " - \e[36m$1\e[0m"
52
+ else
53
+ log " - $1"
54
+ fi
55
+ }
56
+
57
+ function finished {
58
+ if is-yes $PROPRO_LOG_USE_COLOR; then
59
+ log "\e[35m\e[1m Fin.\e[0m"
60
+ else
61
+ log " Fin."
62
+ fi
63
+ log ""
64
+ }
65
+
66
+ function get-tmp-dir {
67
+ mktemp -d
68
+ }
69
+
70
+ # $1 "yes" or "no"
71
+ function is-yes {
72
+ if [ $1 == "yes" ]; then
73
+ return 0
74
+ else
75
+ return 1
76
+ fi
77
+ }
78
+
79
+ # $1 "yes" or "no"
80
+ function is-no {
81
+ if [ $1 == "no" ]; then
82
+ return 0
83
+ else
84
+ return 1
85
+ fi
86
+ }
87
+
88
+ # $1 comma separated list
89
+ #
90
+ # example:
91
+ # > $ csl-to-wsl "item1,item2,item3"
92
+ # > item1 item2 item3
93
+ function csl-to-wsl {
94
+ echo "$1" | sed 's/,/ /g'
95
+ }
96
+
97
+ # $1 path or relative uri
98
+ #
99
+ # example:
100
+ # > $ path-to-id example.com/neat/stuff
101
+ # > example_com_neat_stuff
102
+ function path-to-id {
103
+ echo "$1" | sed -r 's/[-\.:\/\]/_/g'
104
+ }
@@ -0,0 +1,59 @@
1
+ #!/usr/bin/env bash
2
+ export REDIS_VERSION="2.8.4" # @specify
3
+ export REDIS_USER="redis"
4
+ export REDIS_CONF_FILE="/etc/redis.conf"
5
+ export REDIS_DATA_DIR="/var/lib/redis"
6
+ export REDIS_FORCE_64BIT="no" # @specify Force 64bit build even if available memory is lte 4GiB
7
+ REDIS_URL="http://download.redis.io/releases/redis-$REDIS_VERSION.tar.gz"
8
+
9
+ function redis-install {
10
+ local tmpdir=$(get-tmp-dir)
11
+ cd "$tmpdir"
12
+
13
+ announce "Download $REDIS_VERSION"
14
+ download $REDIS_URL
15
+
16
+ announce "Extract"
17
+ extract redis-$REDIS_VERSION.tar.gz
18
+ cd redis-$REDIS_VERSION
19
+
20
+ if [ $(get-ram-bytes) -gt 4294967296 ] || is-yes $REDIS_FORCE_64BIT; then
21
+ announce "Compile"
22
+ make
23
+ else
24
+ announce "Compile (32bit, available memory <= 4GiB)"
25
+ install-packages libc6-dev-i386
26
+ make 32bit
27
+ fi
28
+
29
+ announce "Install $REDIS_VERSION"
30
+ make install
31
+
32
+ announce "Add Redis user: $REDIS_USER"
33
+ useradd -r $REDIS_USER
34
+
35
+ announce "Create Redis directories"
36
+ as-user-mkdir $REDIS_USER $REDIS_DATA_DIR
37
+
38
+ announce "Copy Redis config to $REDIS_CONF_FILE"
39
+ cp ./redis.conf $REDIS_CONF_FILE
40
+
41
+ cd ~/
42
+ rm -rf "$tmpdir"
43
+
44
+ announce "Update Redis config"
45
+ tee -a $REDIS_CONF_FILE <<EOT
46
+ syslog-enabled yes
47
+ syslog-ident redis
48
+ dir $REDIS_DATA_DIR
49
+ EOT
50
+
51
+ announce "Create upstart for Redis"
52
+ tee /etc/init/redis.conf <<EOT
53
+ description "Redis"
54
+ start on runlevel [23]
55
+ stop on shutdown
56
+ exec sudo -u $REDIS_USER /usr/local/bin/redis-server $REDIS_CONF_FILE
57
+ respawn
58
+ EOT
59
+ }
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env bash
2
+ # requires app.sh
3
+ export RVM_CHANNEL="stable"
4
+ RVM_REQUIRED_PACKAGES="curl gawk g++ gcc make libc6-dev libreadline6-dev zlib1g-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 autoconf libgdbm-dev libncurses5-dev automake libtool bison pkg-config libffi-dev"
5
+
6
+ # $1 unix user
7
+ # $2 ruby version
8
+ function rvm-install-for-user {
9
+ section "RVM"
10
+ install-packages $RVM_REQUIRED_PACKAGES
11
+
12
+ announce "Install RVM for user $1"
13
+ su - $1 -c "curl -L https://get.rvm.io | bash -s $RVM_CHANNEL"
14
+ su - $1 -c "rvm autolibs read-fail"
15
+
16
+ announce "Install Ruby $2 for user $1"
17
+ su - $1 -c "rvm install $2"
18
+
19
+ announce "Set Ruby $2 as default for user $1"
20
+ su - $1 -c "rvm --default use $2"
21
+ }
@@ -0,0 +1,57 @@
1
+ #!/usr/bin/env bash
2
+ export SYSTEM_SHMALL_PERCENT="0.75" # @specify
3
+ export SYSTEM_SHMMAX_PERCENT="0.5" # @specify
4
+ export SYSTEM_BASE_PACKAGES="curl vim-nox less htop build-essential openssl git tree python-software-properties"
5
+ export SYSTEM_TIMEZONE="Etc/UTC" # @specify
6
+ export SYSTEM_LOCALE="en_US.UTF-8" # @specify
7
+ export SYSTEM_SOURCES_PG_KEY_URL="http://apt.postgresql.org/pub/repos/apt/ACCC4CF8.asc"
8
+
9
+ function system-configure-shared-memory {
10
+ announce "Configuring shared memory"
11
+ install-packages bc
12
+
13
+ local shmall=$(get-kernel-shmall $SYSTEM_SHMALL_PERCENT)
14
+ local shmmax=$(get-kernel-shmmax $SYSTEM_SHMMAX_PERCENT)
15
+
16
+ sysctl -w kernel.shmall=$shmall
17
+ sysctl -w kernel.shmmax=$shmmax
18
+ tee -a /etc/sysctl.conf <<EOT
19
+
20
+ kernel.shmall = $shmall
21
+ kernel.shmmax = $shmmax
22
+ EOT
23
+ }
24
+
25
+ function system-install-packages {
26
+ install-packages $SYSTEM_BASE_PACKAGES
27
+ }
28
+
29
+ function system-configure-timezone {
30
+ announce "Set timezone to $SYSTEM_TIMEZONE"
31
+ set-timezone $SYSTEM_TIMEZONE
32
+ }
33
+
34
+ function system-configure-locale {
35
+ announce "Set locale to $SYSTEM_LOCALE"
36
+ set-locale $SYSTEM_LOCALE
37
+ }
38
+
39
+ function system-upgrade {
40
+ announce "Update and upgrade system packages"
41
+ upgrade-system
42
+ }
43
+
44
+ function system-add-pg-source {
45
+ announce "Add PostgreSQL sources:"
46
+ tee /etc/apt/sources.list.d/pgdg.list <<EOT
47
+ deb http://apt.postgresql.org/pub/repos/apt/ $(release-codename)-pgdg main
48
+ EOT
49
+
50
+ announce-item "apt.postgresql.org"
51
+ add-source-key $SYSTEM_SOURCES_PG_KEY_URL
52
+ update-sources
53
+ }
54
+
55
+ function system-install-sources {
56
+ system-add-pg-source
57
+ }
@@ -0,0 +1,175 @@
1
+ #!/usr/bin/env bash
2
+ function get-processor-count {
3
+ nproc
4
+ }
5
+
6
+ function release-codename {
7
+ lsb_release -c -s
8
+ }
9
+
10
+ # $@ package names
11
+ function install-packages {
12
+ announce "Installing packages:"
13
+ for package in $@; do
14
+ announce-item "$package"
15
+ done
16
+ aptitude -q -y -o Dpkg::Options::="--force-confnew" install $@
17
+ }
18
+
19
+ function get-archtype {
20
+ if [ $(getconf LONG_BIT) == 32 ]; then
21
+ echo 'x86'
22
+ else
23
+ echo 'x64'
24
+ fi
25
+ }
26
+
27
+ function update-sources {
28
+ apt-get -qq -y update
29
+ }
30
+
31
+ function add-repository {
32
+ add-apt-repository -y $1
33
+ }
34
+
35
+ # $1 unix user
36
+ # $2 service name
37
+ # $3 service args
38
+ function add-sudoers-entries {
39
+ for event in start status stop reload restart; do
40
+ if [ $3 ]; then
41
+ tee -a /etc/sudoers.d/$2.entries <<EOT
42
+ $1 ALL=NOPASSWD: /sbin/$event $2 $3
43
+ EOT
44
+ else
45
+ tee -a /etc/sudoers.d/$2.entries <<EOT
46
+ $1 ALL=NOPASSWD: /sbin/$event $2
47
+ EOT
48
+ fi
49
+ done
50
+ }
51
+
52
+ function reboot-system {
53
+ shutdown -r now
54
+ }
55
+
56
+ # $1 package name
57
+ function reconfigure-package {
58
+ dpkg-reconfigure -f noninteractive $1
59
+ }
60
+
61
+ # $1 key URL
62
+ function add-source-key {
63
+ wget --quiet -O - $1 | apt-key add -
64
+ }
65
+
66
+ # $@ files to extract
67
+ function extract {
68
+ tar xzf $@
69
+ }
70
+
71
+ # $1 URL to download
72
+ function download {
73
+ wget -nv $1
74
+ }
75
+
76
+ function get-ram-bytes {
77
+ free -m -b | awk '/^Mem:/{print $2}'
78
+ }
79
+
80
+ function get-page-size {
81
+ getconf PAGE_SIZE
82
+ }
83
+
84
+ function get-ram-pages {
85
+ echo "$(get-ram-bytes) / $(get-page-size)" | bc
86
+ }
87
+
88
+ # $1 shmall percent
89
+ function get-kernel-shmall {
90
+ echo "($(get-ram-pages) * $1) / 1" | bc
91
+ }
92
+
93
+ # $1 shmmax percent
94
+ function get-kernel-shmmax {
95
+ echo "($(get-ram-bytes) * $1) / 1" | bc
96
+ }
97
+
98
+ # $1 unix user
99
+ # $2 path
100
+ function as-user-mkdir {
101
+ mkdir -p $2
102
+ chown $1:$1 $2
103
+ }
104
+
105
+ function upgrade-system {
106
+ update-sources
107
+ apt-get -qq -y install aptitude
108
+ aptitude -q -y -o Dpkg::Options::="--force-confnew" full-upgrade
109
+ }
110
+
111
+ # $1 timezone
112
+ function set-timezone {
113
+ echo $1 > /etc/timezone
114
+ reconfigure-package tzdata
115
+ }
116
+
117
+ # $1 locale eg: en_US.UTF-8
118
+ function set-locale {
119
+ export LANGUAGE=$1
120
+ export LANG=$1
121
+ export LC_ALL=$1
122
+ locale-gen $1
123
+ reconfigure-package locales
124
+ update-locale
125
+ }
126
+
127
+ # $1 hostname
128
+ function set-hostname {
129
+ echo $1 > /etc/hostname
130
+ hostname -F /etc/hostname
131
+ }
132
+
133
+ # $1 unix user
134
+ # $2 unix group
135
+ # $3 password
136
+ function add-user {
137
+ if [ $2 ]; then
138
+ announce "Adding $1 user to group $2"
139
+ useradd -m -s /bin/bash -g $2 $1
140
+ else
141
+ announce "Adding $1 user"
142
+ useradd -m -s /bin/bash $1
143
+ fi
144
+
145
+ if [ $3 ]; then
146
+ announce "Setting password for $1 user"
147
+ echo "$1:$3" | chpasswd
148
+ fi
149
+ }
150
+
151
+ # $1 unix user
152
+ # $2 github usernames for public keys
153
+ function add-pubkeys-from-github {
154
+ announce "Installing public keys for $1 from GitHub users:"
155
+
156
+ local ssh_dir="/home/$1/.ssh"
157
+ local keys_file="$ssh_dir/authorized_keys"
158
+
159
+ mkdir -p $ssh_dir
160
+ touch $keys_file
161
+
162
+ for user in $2; do
163
+ announce-item "$user"
164
+ local url="https://github.com/$user.keys"
165
+ tee -a $keys_file <<EOT
166
+ # $url
167
+ $(wget -qO- $url)
168
+
169
+ EOT
170
+ done
171
+
172
+ chmod 700 $ssh_dir
173
+ chmod 600 $keys_file
174
+ chown -R $1 $ssh_dir
175
+ }
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env bash
2
+ function provision-vagrant-nginx {
3
+ section "Nginx"
4
+ nginx-install
5
+ nginx-configure
6
+ nginx-conf-add-gzip
7
+ nginx-conf-add-mimetypes
8
+
9
+ announce "Adding Nginx config for Vagrant"
10
+ tee "$NGINX_SITES_DIR/vagrant.conf" <<EOT
11
+ upstream rack_app {
12
+ server 127.0.0.1:3000 fail_timeout=0;
13
+ }
14
+
15
+ server {
16
+ root $VAGRANT_DATA_DIR/public;
17
+
18
+ access_log /dev/null;
19
+ error_log /dev/null;
20
+
21
+ try_files \$uri/index.html \$uri.html \$uri @upstream_app;
22
+
23
+ location @upstream_app {
24
+ proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
25
+ proxy_set_header Host \$http_host;
26
+ proxy_redirect off;
27
+ proxy_pass http://rack_app;
28
+ }
29
+ }
30
+ EOT
31
+ }
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env bash
2
+ function provision-vagrant-node {
3
+ section "Node.js"
4
+ node-install
5
+ }
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env bash
2
+ function vagrant-pg-create-user {
3
+ announce "Create database user: $VAGRANT_USER"
4
+ su - $PG_USER -c "createuser -s $VAGRANT_USER"
5
+ }
6
+
7
+ function provision-vagrant-pg {
8
+ section "PostgreSQL Server"
9
+ pg-install-packages
10
+ pg-tune
11
+ vagrant-pg-create-user
12
+ }
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env bash
2
+ function provision-vagrant-redis {
3
+ section "Redis"
4
+ redis-install
5
+ }
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env bash
2
+ export VAGRANT_RVM_RUBY_VERSION="2.0.0" # @specify
3
+
4
+ function provision-vagrant-rvm {
5
+ rvm-install-for-user $VAGRANT_USER $VAGRANT_RVM_RUBY_VERSION
6
+ }
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env bash
2
+ function vagrant-system-install-user-aliases {
3
+ announce "Installing helper aliases for user: $VAGRANT_USER"
4
+ tee -a /home/$VAGRANT_USER/.profile <<EOT
5
+ alias be="bundle exec"
6
+ alias r="bin/rails"
7
+ alias v="cd $VAGRANT_DATA_DIR"
8
+ cd $VAGRANT_DATA_DIR
9
+ EOT
10
+ }
11
+
12
+ function vagrant-system-purge-grub-menu-config {
13
+ ucf --purge /boot/grub/menu.lst
14
+ }
15
+
16
+ function provision-vagrant-system {
17
+ section "Vagrant System"
18
+ vagrant-system-purge-grub-menu-config
19
+ system-upgrade
20
+ system-configure-timezone
21
+ system-configure-locale
22
+ system-install-packages
23
+ system-configure-shared-memory
24
+ system-install-sources
25
+ vagrant-system-install-user-aliases
26
+ }
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env bash
2
+ export VAGRANT_USER="vagrant"
3
+ export VAGRANT_DATA_DIR="/vagrant"
@@ -0,0 +1,156 @@
1
+ #!/usr/bin/env bash
2
+ export VPS_SYSTEM_HOSTNAME="" # @require
3
+ export VPS_SYSTEM_FQDN="" # @require
4
+ export VPS_SYSTEM_ADMIN_AUTHORIZED_GITHUB_USERS="" # @require
5
+ export VPS_SYSTEM_ADMIN_SUDO_PASSWORD="" # @require
6
+ export VPS_SYSTEM_PRIVATE_IP="" # @specify
7
+ export VPS_SYSTEM_ADMIN_USER="admin" # @specify
8
+ export VPS_SYSTEM_PRIVATE_NETMASK="255.255.128.0"
9
+ export VPS_SYSTEM_ALLOW_PORTS="www 443 ssh"
10
+ export VPS_SYSTEM_LIMIT_PORTS="ssh"
11
+ export VPS_SYSTEM_ALLOW_PRIVATE_IPS="" # @specify
12
+ export VPS_SYSTEM_ALLOW_PRIVATE_PORTS="5432 6379" # Postgres & Redis
13
+ export VPS_SYSTEM_GET_PUBLIC_IP_SERVICE_URL="http://ipecho.net/plain"
14
+
15
+ function get-vps-system-public-ip {
16
+ wget -qO- $VPS_SYSTEM_GET_PUBLIC_IP_SERVICE_URL
17
+ }
18
+
19
+ function get-vps-system-default-gateway {
20
+ ip route | awk '/default/ { print $3 }'
21
+ }
22
+
23
+ function vps-system-configure-hostname {
24
+ announce "Set hostname to $VPS_SYSTEM_HOSTNAME"
25
+ set-hostname $VPS_SYSTEM_HOSTNAME
26
+ }
27
+
28
+ function vps-system-configure-sshd {
29
+ announce "Configure sshd:"
30
+ announce-item "disable root login"
31
+ announce-item "disable password auth"
32
+ tee /etc/ssh/sshd_config <<EOT
33
+ Port 22
34
+ Protocol 2
35
+ HostKey /etc/ssh/ssh_host_rsa_key
36
+ HostKey /etc/ssh/ssh_host_dsa_key
37
+ HostKey /etc/ssh/ssh_host_ecdsa_key
38
+ UsePrivilegeSeparation yes
39
+ KeyRegenerationInterval 3600
40
+ ServerKeyBits 768
41
+ SyslogFacility AUTH
42
+ LogLevel INFO
43
+ LoginGraceTime 120
44
+ PermitRootLogin no
45
+ StrictModes yes
46
+ RSAAuthentication yes
47
+ PubkeyAuthentication yes
48
+ IgnoreRhosts yes
49
+ RhostsRSAAuthentication no
50
+ HostbasedAuthentication no
51
+ PermitEmptyPasswords no
52
+ ChallengeResponseAuthentication no
53
+ PasswordAuthentication no
54
+ X11Forwarding yes
55
+ X11DisplayOffset 10
56
+ PrintMotd no
57
+ PrintLastLog yes
58
+ TCPKeepAlive yes
59
+ AcceptEnv LANG LC_*
60
+ Subsystem sftp /usr/lib/openssh/sftp-server
61
+ UsePAM yes
62
+ EOT
63
+
64
+ announce "Restart sshd"
65
+ service ssh restart
66
+ }
67
+
68
+ function vps-system-configure-firewall {
69
+ section "Firewall"
70
+ install-packages ufw
71
+
72
+ announce "Configuring firewall:"
73
+ ufw default deny
74
+ ufw logging on
75
+
76
+ for port in $VPS_SYSTEM_ALLOW_PORTS; do
77
+ announce-item "allow $port"
78
+ ufw allow $port
79
+ done
80
+
81
+ for port in $VPS_SYSTEM_LIMIT_PORTS; do
82
+ announce-item "limit $port"
83
+ ufw limit $port
84
+ done
85
+
86
+ for local_ip in $VPS_SYSTEM_ALLOW_PRIVATE_IPS; do
87
+ for port in $VPS_SYSTEM_ALLOW_PRIVATE_PORTS; do
88
+ announce-item "allow $port from $local_ip"
89
+ ufw allow $port from $local_ip
90
+ done
91
+ done
92
+
93
+ echo 'y' | ufw enable
94
+ }
95
+
96
+ function vps-system-configure-admin-user {
97
+ announce "Adding admin user: $VPS_SYSTEM_ADMIN_USER"
98
+ add-user $VPS_SYSTEM_ADMIN_USER sudo $VPS_SYSTEM_ADMIN_SUDO_PASSWORD
99
+ add-pubkeys-from-github $VPS_SYSTEM_ADMIN_USER "$VPS_SYSTEM_ADMIN_AUTHORIZED_GITHUB_USERS"
100
+ }
101
+
102
+ function vps-system-configure-interfaces {
103
+ announce "Resolving extenal IP address"
104
+
105
+ local ip_addr=$(get-vps-system-public-ip)
106
+ local gateway=$(get-vps-system-default-gateway)
107
+ local fqdn="$ip_addr $VPS_SYSTEM_HOSTNAME $VPS_SYSTEM_FQDN"
108
+
109
+ announce "Setting FQDN: $fqdn"
110
+ echo "$fqdn" >> /etc/hosts
111
+
112
+ announce "Writing /etc/network/interfaces"
113
+ tee /etc/network/interfaces <<EOT
114
+ auto lo
115
+ iface lo inet loopback
116
+
117
+ auto eth0 eth0:0 eth0:1
118
+
119
+ # Public interface
120
+ iface eth0 inet static
121
+ address $ip_addr
122
+ netmask 255.255.255.0
123
+ gateway $gateway
124
+ EOT
125
+
126
+ if [ $VPS_SYSTEM_PRIVATE_IP ]; then
127
+ tee -a /etc/network/interfaces <<EOT
128
+
129
+ # Private interface
130
+ iface eth0:1 inet static
131
+ address $VPS_SYSTEM_PRIVATE_IP
132
+ netmask $VPS_SYSTEM_PRIVATE_NETMASK
133
+ EOT
134
+ fi
135
+
136
+ announce "Restart networking"
137
+ /etc/init.d/networking restart
138
+
139
+ announce "Removing DHCP"
140
+ aptitude -q -y remove isc-dhcp-client dhcp3-client dhcpcd
141
+ }
142
+
143
+ function provision-vps-system {
144
+ section "VPS System"
145
+ system-upgrade
146
+ system-configure-timezone
147
+ vps-system-configure-hostname
148
+ system-configure-locale
149
+ system-install-packages
150
+ system-configure-shared-memory
151
+ system-install-sources
152
+ vps-system-configure-admin-user
153
+ vps-system-configure-interfaces
154
+ vps-system-configure-sshd
155
+ vps-system-configure-firewall
156
+ }
@@ -0,0 +1,21 @@
1
+ <%= Propro.comment_banner %>
2
+ #
3
+ # Example provisioner for <%= @desc %>
4
+ #
5
+
6
+ <%- @paths.each do |path| -%>
7
+ source :<%= path %>
8
+ <%- end -%>
9
+
10
+ <%- @sources.each do |source| -%>
11
+ <%- has_no_exports = source.specified_exports.empty? -%>
12
+ <%- next if has_no_exports && !source.can_provision? -%>
13
+ # <%= source.name %>
14
+ <%- source.specified_exports.each do |export| -%>
15
+ <%= export.to_ruby %>
16
+ <%- end -%>
17
+ <%- if source.can_provision? -%>
18
+ provision "<%= source.provisioner %>"
19
+ <%- end -%>
20
+
21
+ <%- end -%>