source: bootstrapper/bootstrap.sh @ 38

Last change on this file since 38 was 38, checked in by alloc, 8 years ago

Bootstrapper

File size: 6.9 KB
Line 
1#!/bin/bash
2# Version 1
3
4if [ `id -u` -ne 0 ]; then
5        echo "This script has to be run as root!"
6        exit 1
7fi
8
9
10ADDCRONJOBS=0
11RUNINSTALL=0
12INSTALLOPTIONALDEPS=0
13
14DEPENDENCIES="gcc wget tr rsync xmlstarlet"
15
16if [ -n "$(command -v apt-get)" ]; then
17        ISDEBIAN=1
18else
19        ISDEBIAN=0
20fi
21
22if [ $(uname -m) == 'x86_64' ]; then
23        IS64BIT=1
24else
25        IS64BIT=0
26fi
27
28if [ $IS64BIT -eq 1 ]; then
29        DEPENDENCIES="$DEPENDENCIES lib32gcc1"
30fi
31
32showHelp() {
33        echo "Usage: ./bootstrap.sh [-h] [-c] -i"
34        echo "Parameters:"
35        echo "  -h   Print this help screen and exit"
36#       echo "  -o   Install optional dependencies ($OPTDEPENDENCIES)"
37        echo "  -c   Enable cron job for automatic backups"
38        echo "  -i   Required to actually start the installation"
39}
40
41intro() {
42        echo
43        echo "7DtD Linux dedicated server bootstrapper"
44        echo
45        echo "This will install a 7DtD server according to the information"
46        echo "given on:"
47        echo "   https://7dtd.illy.bz/"
48        echo
49        read -p "Press enter to continue"
50        echo -e "\n=============================================================\n\n"
51}
52
53nonDebianWarning() {
54        if [ $ISDEBIAN -eq 0 ]; then
55                echo "NOTE: It seems like this system is not based on Debian."
56                echo "Although installation of the scripts and SteamCMD/7dtd"
57                echo "will work the installed management scripts will probably"
58                echo "fail because of missing dependencies. Make sure you check"
59                echo "the website regarding the prerequisites"
60                echo "(https://7dtd.illy.bz)."
61                echo
62                echo "Also make sure you have the 32 Bit version of libgcc installed!"
63                echo
64                echo "Do you want to continue anyway?"
65                select yn in "Yes" "No"; do
66                        case $yn in
67                                Yes)
68                                        echo "Continuing..."
69                                        break;;
70                                No)
71                                        echo "Aborting."
72                                        exit 0
73                                        ;;
74                        esac
75                done
76                echo -e "\n=============================================================\n\n"
77        fi
78}
79
80installAptDeps() {
81        echo -e "Installing dependencies\n"
82        if [ $IS64BIT -eq 1 ]; then
83                dpkg --add-architecture i386
84        fi
85        apt-get update
86        apt-get install $DEPENDENCIES
87        echo -e "\n=============================================================\n\n"
88}
89
90installOptionalDeps() {
91        echo -e "Installing optional dependencies\n"
92        apt-get install $OPTDEPENDENCIES
93        echo -e "\n=============================================================\n\n"
94}
95
96checkSetupDeps() {
97        which gcc > /dev/null
98        if [ $? -ne 0 ]; then
99                echo "'gcc' not installed. Please install it and run this script again."
100                exit 1
101        fi
102
103        which wget > /dev/null
104        if [ $? -ne 0 ]; then
105                echo "'wget' not installed. Please install it and run this script again."
106                exit 1
107        fi
108
109        which tr > /dev/null
110        if [ $? -ne 0 ]; then
111                echo "'tr' not installed. Please install it and run this script again."
112                exit 1
113        fi
114       
115        ldconfig -p | grep gcc | grep -v 64 > /dev/null
116        if [ $? -ne 0 ]; then
117                echo "There probably is no 32 Bit version of libgcc installed."
118                echo "Do you want to continue?"
119                select yn in "Yes" "No"; do
120                        case $yn in
121                                Yes)
122                                        break;;
123                                No)
124                                        echo "Aborting."
125                                        exit 1
126                                        ;;
127                        esac
128                done
129        fi
130}
131
132setupUser() {
133        echo -e "Setting up user and group \"sdtd\"\n"
134        useradd -d /home/sdtd -m -r -s /bin/bash -U sdtd
135        echo -e "\n=============================================================\n\n"
136}
137
138installManagementScripts() {
139        echo -e "Downloading and installing management scripts\n"
140        wget -nv http://illy.bz/fi/7dtd/management_scripts.tar.gz -O /tmp/management_scripts.tar.gz
141        tar --touch -xzf /tmp/management_scripts.tar.gz -C /
142
143        chown root.root /etc/7dtd.conf
144        chmod 0600 /etc/7dtd.conf
145
146        chown sdtd.sdtd /home/sdtd -R
147
148        chown root.root /etc/init.d/7dtd.sh
149        chown root.root /etc/bash_completion.d/7dtd
150        chown root.root /usr/local/bin/7dtd.sh
151        chown root.root /usr/local/lib/7dtd -R
152        chmod 0755 /etc/init.d/7dtd.sh
153        chmod 0755 /etc/bash_completion.d/7dtd
154        chmod 0755 /usr/local/bin/7dtd.sh
155        chmod 0755 /usr/local/lib/7dtd -R
156
157        if [ $ISDEBIAN -eq 1 ]; then
158                update-rc.d 7dtd.sh defaults
159        fi
160       
161        echo
162        echo "Compiling start-stop-daemon"
163        cd /usr/local/lib/7dtd/start-stop-daemon
164
165        gcc -Wall -Wextra -Wno-return-type -o start-stop-daemon start-stop-daemon.c
166        chown root.root start-stop-daemon
167        chmod 0755 start-stop-daemon
168
169        echo -e "\n=============================================================\n\n"
170}
171
172installLinuxEngine() {
173        echo -e "Downloading and installing Linux engine\n"
174        wget -nv http://illy.bz/fi/7dtd/linux_files.tar.gz -O /tmp/linux_files.tar.gz
175        tar --touch -xzf /tmp/linux_files.tar.gz -C /home/sdtd/
176
177        chown sdtd.sdtd -R /home/sdtd/linux_files
178        chmod 0644 -R /home/sdtd/linux_files
179        find /home/sdtd/linux_files -type d -exec chmod 0755 {} \;
180        chmod 0755 /home/sdtd/linux_files/engine/7DaysToDie.x86
181
182        echo -e "\n=============================================================\n\n"
183}
184
185setSteamLoginData() {
186        echo -e "Steam account data\n"
187        echo "Please enter your Steam login data for SteamCMD to get the 7dtd-server files:"
188        read -p "Steam username: " username
189        read -s -p "Steam password: " password
190        sed -i "s/export STEAM_USER=/export STEAM_USER=$username/" /etc/7dtd.conf
191        sed -i "s/export STEAM_PASS=/export STEAM_PASS=$password/" /etc/7dtd.conf
192        echo -e "\n=============================================================\n\n"
193}
194
195installSteamCmdAndSDTD() {
196        echo -e "Installing SteamCMD and 7DtD\n"
197        7dtd.sh updateengine
198        echo -e "\n=============================================================\n\n"
199}
200
201addCronJobs() {
202        echo -e "Enabling backup cron job\n"
203
204        echo -e "By default a backup of the save folder will be created once"
205        echo -e "  per hour. This can be changed in /etc/cron.d/7dtd-backup."
206       
207        cat /etc/cron.d/7dtd-backup | tr -d '#' > /tmp/7dtd-backup
208        cp /tmp/7dtd-backup /etc/cron.d
209
210        echo -e "\n=============================================================\n\n"
211}
212
213finish() {
214        if [ $ISDEBIAN -eq 0 ]; then
215                echo
216                echo "You are not running a Debian based distribution."
217                echo "The following things should manually be checked:"
218                echo " - Existence of prerequsities"
219                echo " - Running the init-script on boot"
220        else
221                echo -e "\n ALL DONE"
222        fi
223
224        echo
225        echo -e "You can now continue setting up instances as explained on the website:"
226        echo -e "  https://7dtd.illy.bz/wiki/Instance%20management"
227        echo
228        echo -e "You might also need to manually enable bash auto completion, refer to:"
229        echo -e "  https://7dtd.illy.bz/wiki/Installation#Bashcompletion"
230        echo
231        echo -e "For further configuration options check:"
232        echo -e "  /etc/7dtd.conf"
233        echo
234        echo -e "For feedback, suggestions, problems please visit the bugtracker:"
235        echo -e "  https://7dtd.illy.bz/"
236        echo
237}
238
239main() {
240        intro
241        nonDebianWarning
242
243        if [ $ISDEBIAN -eq 1 ]; then
244                installAptDeps
245                if [ $INSTALLOPTIONALDEPS -eq 1 ]; then
246#                       installOptionalDeps
247                        echo
248                fi
249        else
250                checkSetupDeps
251        fi
252        setupUser
253        installManagementScripts
254        installLinuxEngine
255        setSteamLoginData
256        installSteamCmdAndSDTD
257        if [ $ADDCRONJOBS -eq 1 ]; then
258                addCronJobs
259        fi
260        finish
261}
262
263if [ -z $1 ]; then
264        showHelp
265        exit 0
266fi
267while getopts "hcoi" opt; do
268        case "$opt" in
269                h)
270                        showHelp
271                        exit 0
272                        ;;
273                c)
274                        ADDCRONJOBS=1
275                        ;;
276                o)
277                        INSTALLOPTIONALDEPS=1
278                        ;;
279                i)
280                        RUNINSTALL=1
281                        ;;
282        esac
283done
284if [ $RUNINSTALL -eq 1 ]; then
285        main
286fi
287
Note: See TracBrowser for help on using the repository browser.