Abstracted install.sh and implemented Debian and Red Hat installs.

This commit is contained in:
Matt Sicker 2012-09-02 12:45:09 -05:00
parent 138ef441ab
commit c191a0cc2d
7 changed files with 205 additions and 32 deletions

2
install-debian.sh Normal file
View File

@ -0,0 +1,2 @@
cd installers
bash install.sh debian.sh

2
install-redhat.sh Normal file
View File

@ -0,0 +1,2 @@
cd installers
bash install.sh redhat.sh

126
installers/common.sh Normal file
View File

@ -0,0 +1,126 @@
if [ -f defaults.conf ]; then
source defaults.conf
fi
msm_dir="${MSM_DIRECTORY:-/opt/msm}"
msm_user="${MSM_USERNAME:-minecraft}"
dl_dir="$(mktemp -t msm)"
# Outputs an MSM INSTALL log line
function install_log() {
echo -e "\n\033[1;32mMSM INSTALL: $*\033[m"
}
# Outputs an MSM INSTALL ERROR log line and exits with status code 1
function install_error() {
echo -e "\n\033[1;37;41mMSM INSTALL ERROR: $*\033[m"
exit 1
}
### NOTE: all the below functions are overloadable for system-specific installs
### NOTE: some of the below functions MUST be overloaded due to system-specific installs
# Runs a system software update to make sure we're using all fresh packages
function update_system_packages() {
# OVERLOAD THIS
install_error "No function definition for update_system_packages"
}
# Installs additional dependencies (screen, rsync, zip, wget) using system package manager
function install_dependencies() {
# OVERLOAD THIS
install_error "No function definition for install_dependencies"
}
# Verifies existence of or adds user for Minecraft server (default "minecraft")
function add_minecraft_user() {
install_log "Creating default user '$msm_user'"
useradd --system $msm_user
}
# Verifies existence and permissions of msm server directory (default /opt/msm)
function create_msm_directories() {
install_log "Creating MSM directories"
if [ ! -d "$msm_dir" ]; then
mkdir -p "$msm_dir" || install_error "Couldn't create directory '$msm_dir'"
fi
chown -R $msm_user:$msm_user "$msm_dir" || install_error "Couldn't change file ownership for '$msm_dir'"
}
# Fetches latest msm.conf, cron job, and init script
function download_latest_files() {
if [ ! -d "$dl_dir" ]; then
install_error "Temporary download directory was not created properly"
fi
install_log "Downloading latest MSM configuration file"
wget https://raw.github.com/marcuswhybrow/minecraft-server-manager/latest/msm.conf \
-O "$dl_dir/msm.conf.orig" || install_error "Couldn't download configuration file"
install_log "Downloading latest MSM cron file"
wget https://raw.github.com/marcuswhybrow/minecraft-server-manager/latest/cron/msm \
-O "$dl_dir/msm.cron.orig" || install_error "Couldn't download cron file"
install_log "Downloading latest MSM version"
wget https://raw.github.com/marcuswhybrow/minecraft-server-manager/latest/init/msm \
-O "$dl_dir/msm.init.orig" || install_error "Couldn't download init file"
}
# Patches msm.conf and cron job to use specified username and directory
function patch_latest_files() {
# patch config file
install_log "Patching MSM configuration file"
sed 's#USERNAME="minecraft"#USERNAME="'$msm_user'"#g' "$dl_dir/msm.conf.orig" | \
sed "s#/opt/msm#$msm_dir#g" >"$dl_dir/msm.conf"
# patch cron file
install_log "Patching MSM cron file"
awk '{ if ($0 !~ /^#/) sub(/minecraft/, "'$msm_user'"); print }' \
"$dl_dir/msm.cron.orig" >"$dl_dir/msm.cron"
}
# Installs msm.conf into /etc
function install_config() {
install_log "Installing MSM configuration file"
install -b -m0644 "$dl_dir/msm.conf" /etc/msm.conf
if [ ! -e /etc/msm.conf ]; then
install_error "Couldn't install configuration file"
fi
}
# Installs msm.cron into /etc/cron.d
function install_cron() {
install_log "Installing MSM cron file"
install "$dl_dir/msm.cron" /etc/cron.d/msm || install_error "Couldn't install cron file"
}
# Reloads cron service (if necessary)
function reload_cron() {
# OVERLOAD THIS
install_error "No function defined for reload_cron"
}
# Installs init script into /etc/init.d
function install_init() {
install_log "Installing MSM init file"
install -b "$dl_dir/msm.init" /etc/init.d/msm || install_error "Couldn't install init file"
install_log "Making MSM accessible as the command 'msm'"
ln -s /etc/init.d/msm /usr/local/bin/msm
}
# Enables init script in default runlevels
function enable_init() {
# OVERLOAD THIS
install_error "No function defined for enable_init"
}
# Updates rest of MSM using init script updater
function update_msm() {
install_log "Asking MSM to update itself"
/etc/init.d/msm update --noinput
}
function install_complete() {
install_log "Done. Type 'msm help' to get started. Have fun!"
}

View File

@ -1,36 +1,26 @@
echo "\033[1;32mMSM INSTALL: Updating sources\033[m"
apt-get update
source common.sh
echo "\n\033[1;32mMSM INSTALL: Installing required packages\033[m"
apt-get install screen rsync zip
function update_system_packages() {
install_log "Updating sources"
apt-get update || install_error "Couldn't update package list"
apt-get upgrade || install_error "Couldn't upgrade packages"
}
echo "\n\033[1;32mMSM INSTALL: Creating default user \"minecraft\"\033[m"
adduser --system minecraft
function install_dependencies() {
install_log "Installing required packages"
apt-get install screen rsync zip || install_error "Couldn't install dependencies"
}
echo "\n\033[1;32mMSM INSTALL: Creating MSM directories\033[m"
mkdir -p /opt/msm
chown minecraft:minecraft /opt/msm
echo "\n\033[1;32mMSM INSTALL: Downloading latest MSM configuration file\033[m"
wget https://raw.github.com/marcuswhybrow/minecraft-server-manager/latest/msm.conf -O /etc/msm.conf
echo "\n\033[1;32mMSM INSTALL: Downloading latest MSM cron file\033[m"
wget https://raw.github.com/marcuswhybrow/minecraft-server-manager/latest/cron/msm -O /etc/cron.d/msm
function reload_cron() {
install_log "Reloading cron service"
if [ -x $(which service) ]; then
service cron reload
else
/etc/init.d/cron reload
fi
}
echo "\n\033[1;32mMSM INSTALL: Downloading latest MSM version\033[m"
wget https://raw.github.com/marcuswhybrow/minecraft-server-manager/latest/init/msm -O /etc/init.d/msm
echo "\n\033[1;32mMSM INSTALL: Giving it the necessary permissions\033[m"
chmod 755 /etc/init.d/msm
echo "\n\033[1;32mMSM INSTALL: Enabling automatic startup and shutdown\033[m"
function enable_init() {
install_log "Enabling automatic startup and shutdown"
update-rc.d msm defaults
echo "\n\033[1;32mMSM INSTALL: Making MSM accessible as the command \"msm\"\033[m"
ln -s /etc/init.d/msm /usr/local/bin/msm
echo "\n\033[1;32mMSM INSTALL: Asking MSM to update itself\033[m"
/etc/init.d/msm update --noinput
echo "\n\033[1;32mMSM INSTALL: Done. Type \"msm help\" to get started. Have fun!\033[m"
}

4
installers/defaults.conf Normal file
View File

@ -0,0 +1,4 @@
# vim:syn=sh:
# Configure default MSM username and server directory
MSM_USERNAME="minecraft"
MSM_DIRECTORY="/opt/msm"

28
installers/install.sh Normal file
View File

@ -0,0 +1,28 @@
echo "This script requires superuser access to install files to /etc."
echo "You will be prompted for your password by sudo."
# Clear existing sudo credentials
sudo -k
# Get platform-specific install functions from command arguments
install_file="${1:-debian.sh}"
# run script as sudo
sudo sh <<SCRIPT
source "$install_file"
update_system_packages
install_dependencies
add_minecraft_user
create_msm_directories
download_latest_files
patch_latest_files
install_config
install_cron
reload_cron
install_init
enable_init
update_msm
install_complete
SCRIPT

21
installers/redhat.sh Normal file
View File

@ -0,0 +1,21 @@
source common.sh
function update_system_packages() {
install_log "Updating sources"
yum update || install_error "Couldn't update packages"
}
function install_dependencies() {
install_log "Installing required packages"
yum install screen rsync zip || install_error "Couldn't install dependencies"
}
function reload_cron() {
install_log "Reloading cron service"
service crond reload
}
function enable_init() {
install_log "Enabling automatic startup and shutdown"
chkconfig --add msm
}