Skip to content

Instantly share code, notes, and snippets.

@jjamor
Forked from PowerWagon/graylog2-bootstrap.sh
Last active August 12, 2016 22:36
Show Gist options
  • Save jjamor/d539c55d8709d29d106a to your computer and use it in GitHub Desktop.
Save jjamor/d539c55d8709d29d106a to your computer and use it in GitHub Desktop.
#!/bin/bash
# Created Fri Mar 21 2014
# This is a fork of https://gist.github.com/SeonghoonKim/4378896
# This script will download, install and start
# the following items on CentOS 6.5:
# MongoDB
# OpenJDK 1.7.0
# ElasticSearch 0.90.1
# Graylog2 server 0.20.1
# Graylog2 web interface 0.20.1
#
# This script should be safe to run more than one time. YMMV
# You can change the password for graylog2-web-interface, here:
PASSWD="password"
# Change the root install dir for elasticsearch and graylog2, here:
APP_ROOT="/opt"
# If all goes well, nothing should need to be changed below here
ORIG_WKDIR=$(pwd)
MONGODB_REPO="/etc/yum.repos.d/10gen-mongodb.repo"
CENTOS_REPO="/etc/yum.repos.d/CentOS-Base.repo"
EPEL_REPO="/etc/yum.repos.d/epel.repo"
[ -f "$APP_ROOT" ] || mkdir -p $APP_ROOT
if [ -f ${MONGODB_REPO} ]; then
echo "$MONGODB_REPO found"
else
cat << 'EOF' > ${MONGODB_REPO}
[10gen]
name=10gen Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/$basearch
gpgcheck=0
EOF
fi
if [ -f ${CENTOS_REPO} ]; then
echo "$CENTOS_REPO found"
else
echo "Creating $CENTOS_REPO"
cat << 'EOF' > ${CENTOS_REPO}
# CentOS-Base.repo for RHEL6
[base]
name=CentOS-6 - Base
mirrorlist=http://mirrorlist.centos.org/?release=6&arch=$basearch&repo=os
#baseurl=http://mirror.centos.org/centos/6/os/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6
#released updates
[update]
name=CentOS-6 - Updates
mirrorlist=http://mirrorlist.centos.org/?release=6&arch=$basearch&repo=updates
#baseurl=http://mirror.centos.org/centos/6/updates/$basearch/
gpgcheck=1t
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6
EOF
fi
if [ -f ${EPEL_REPO} ]; then
echo "$EPEL_REPO found"
else
echo "Creating $EPEL_REPO"
cat << 'EOF' > ${EPEL_REPO}
[epel]
name=Extra Packages for Enterprise Linux 6 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=0
EOF
fi
echo "Stopping running services..."
service graylog2-server stop
service graylog2-web stop
service mongod stop
service elasticsearch stop
#killall java
MYRANDOM=$RANDOM
echo "Moving old files to $APP_ROOT/OLD_$MYRANDOM..."
mkdir $APP_ROOT/OLD_$MYRANDOM
mv $APP_ROOT/graylog2* $APP_ROOT/elasticsearch* $APP_ROOT/OLD_$MYRANDOM
rmdir $APP_ROOT/OLD_$MYRANDOM >/dev/null 2>&1
echo "Checking and/or getting files..."
if [ ! -d "$APP_ROOT/sources" ]; then mkdir "$APP_ROOT/sources"; fi
if [ ! -f "$APP_ROOT/sources/elasticsearch-0.90.10.noarch.rpm" ]; then
curl -L -o "$APP_ROOT/sources/elasticsearch-0.90.10.noarch.rpm" https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-0.90.10.noarch.rpm
fi
if [ ! -f "$APP_ROOT/sources/graylog2-server-0.20.1.tgz" ]; then
curl -L -o "$APP_ROOT/sources/graylog2-server-0.20.1.tgz" https://github.com/Graylog2/graylog2-server/releases/download/0.20.1/graylog2-server-0.20.1.tgz
fi
if [ ! -f "$APP_ROOT/sources/graylog2-web-interface-0.20.1.tgz" ]; then
curl -L -o "$APP_ROOT/sources/graylog2-web-interface-0.20.1.tgz" https://github.com/Graylog2/graylog2-web-interface/releases/download/0.20.1/graylog2-web-interface-0.20.1.tgz
fi
echo "installing openjdk 1.7.0 and Dev tools..."
yum -y install java-1.7.0-openjdk
#yum -y groupinstall "Development tools"
yum -y install pwgen
echo "Installing MongoDB..."
yum install -y mongo-10gen mongo-10gen-server
echo "Installing init script of MongoDB..."
chkconfig --level 2345 mongod on
echo "Starting MongoDB..."
service mongod start
echo "Installing ElasticSearch..."
yum -y localinstall "$APP_ROOT/sources/elasticsearch-0.90.10.noarch.rpm"
echo "Coniguring ElasticSearch for graylog2..."
sed -i -e 's|# cluster.name: elasticsearch|cluster.name: graylog2|' /etc/elasticsearch/elasticsearch.yml
sed -i '/# index.number_of_replicas: 0/a \
index.auto_expand_replicas: 0-all' /etc/elasticsearch/elasticsearch.yml
echo "Starting ElasticSearch..."
service elasticsearch start
echo "Installing graylog2-server..."
cd $APP_ROOT
tar -xzf "$APP_ROOT/sources/graylog2-server-0.20.1.tgz"
ln -sf graylog2-server-0.20.1 graylog2-server
cd graylog2-server
cp graylog2.conf.example graylog2.conf
cd /etc
if [ ! -L /etc/graylog2.conf ]; then
mv /etc/graylog2.conf $APP_ROOT/OLD_$MYRANDOM 2> /dev/null
ln -sf $APP_ROOT/graylog2-server/graylog2.conf /etc/graylog2.conf
fi
echo "Changing graylog2 mongo db auth..."
sed -i -e 's/\(mongodb_useauth\ =\ \)true/\1false/' /etc/graylog2.conf
echo "Setting graylog2 password secret..."
APP_SECRET=$(pwgen -s 96)
sed -i -e 's|password_secret\ =|password_secret\ =\ '$APP_SECRET'|' /etc/graylog2.conf
echo "Setting graylog2 app password..."
APP_PASSWD=$(echo -n $PASSWD | sha256sum |awk '{ print $1 }' )
sed -i -e 's|root_password_sha2\ =|root_password_sha2\ =\ '$APP_PASSWD'|' /etc/graylog2.conf
echo "Installing init script of graylog2-server..."
cat << 'EOF' > /etc/init.d/graylog2-server
#! /bin/sh
# chkconfig: 30 90 10
# description: Graylog2-server init script
# processname: graylog2-server
# config: /etc/graylog2.conf
# pidfile: /var/run/graylog2/graylog2-server.pid
## Source function library.
. /etc/init.d/functions
NAME="graylog2-server"
GRAYLOG2_HOME=
GRAYLOG2_JAR=$GRAYLOG2_HOME/graylog2-server.jar
GRAYLOG2_CONF="/etc/graylog2.conf"
GRAYLOG2_OUT="/var/log/graylog2.log"
PID_DIR="/var/run/graylog2"
PID_FILE="${PID_DIR}/${NAME}.pid"
LOCK_FILE="/var/lock/subsys/${NAME}"
JAVA="/usr/bin/java"
JAVA_OPTS="-server -Xms512m -Xmx512m"
RUN_AS_USER=root
if [ ! -d "$PID_DIR" ]; then
mkdir "$PID_DIR"
chown $RUN_AS_USER "$PID_DIR"
fi
if [ ! -r "$GRAYLOG2_JAR" ]; then
echo "Cannot find $GRAYLOG2_JAR"
echo "${GRAYLOG2_JAR} is absent or does not have read permission"
exit 1
fi
touch "$GRAYLOG2_OUT"
chown $RUN_AS_USER "$GRAYLOG2_OUT"
start() {
echo "Starting $NAME: "
COMMAND="$JAVA $JAVA_OPTS -jar $GRAYLOG2_JAR -f $GRAYLOG2_CONF -p $PID_FILE >> \"$GRAYLOG2_OUT\" 2>&1 &"
daemon --check=${NAME} --user=${RUN_AS_USER} --pidfile=${PID_FILE} ${COMMAND}
RETVAL=$?
[ $RETVAL -eq 0 ] && touch $LOCK_FILE
return $RETVAL
}
stop() {
echo "Stopping $NAME: "
killproc -p ${PID_FILE} -d 5 ${NAME}
RETVAL=$?
[ $RETVAL -eq 0 ] && rm -f $LOCK_FILE
return $RETVAL
}
restart() {
stop
sleep 1
start
}
dump() {
echo "Dumping $NAME: "
PID=`cat $PID_FILE`
kill -3 $PID
RETVAL=$?
[ $RETVAL -eq 0 ] && success $"Dumped $NAME." || failure $"Failed to dump $NAME."
return $RETVAL
}
rh_status() {
status -p ${PID_FILE} ${NAME}
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
rh_status_q && exit 0
start
;;
stop)
rh_status_q || exit 0
stop
;;
restart)
restart
;;
status)
rh_status
;;
dump)
rh_status_q || exit 0
dump
;;
condrestart|try-restart)
rh_status_q || exit 0
restart
;;
*)
echo "Usage: $0 {start|stop|status|restart|condrestart|try-restart|dump}"
exit 1
esac
exit $?
EOF
sed -i -e "s|GRAYLOG2_HOME=|GRAYLOG2_HOME=$APP_ROOT/graylog2-server|" /etc/init.d/graylog2-server
chmod u+x /etc/init.d/graylog2-server
chkconfig graylog2-server on
echo "Starting graylog2-server..."
service graylog2-server start
echo "Installing graylog2-web-interface..."
cd $APP_ROOT
tar -xf "$APP_ROOT/sources/graylog2-web-interface-0.20.1.tgz"
ln -s graylog2-web-interface-0.20.1 graylog2-web-interface
cd graylog2-web-interface
APP_SECRET=$(pwgen -s 96)
sed -i -e 's|application.secret=""|application.secret="'$APP_SECRET'"|' conf/graylog2-web-interface.conf
sed -i -e 's|graylog2-server.uris=""|graylog2-server.uris="http://127\.0\.0\.1:12900/"|' conf/graylog2-web-interface.conf
cat << 'EOF' > /etc/init.d/graylog2-web
#! /bin/sh
# chkconfig: 25 95 10
# description: Graylog2-web-interface init script
# processname: graylog2-web
## Source function library.
. /etc/init.d/functions
NAME="graylog2-web-interface"
GRAYLOG2_WEB_HOME=
GRAYLOG2_WEB=$GRAYLOG2_WEB_HOME/bin/graylog2-web-interface
GRAYLOG2_WEB_OUT="/var/log/graylog2-web.log"
PID_FILE="$GRAYLOG2_WEB_HOME/RUNNING_PID"
LOCK_FILE="/var/lock/subsys/${NAME}"
JAVA="/usr/bin/java"
JAVA_OPTS="-Xms${mem}m -Xmx${mem}m -XX:MaxPermSize=${perm}m -XX:ReservedCodeCacheSize=${codecache}m"
RUN_AS_USER=root
if [ ! -r "$GRAYLOG2_WEB" ]; then
echo "Cannot find $GRAYLOG2_WEB"
echo "${GRAYLOG2_WEB} is absent or does not have read permission"
exit 1
fi
touch "$GRAYLOG2_WEB_OUT"
chown $RUN_AS_USER "$GRAYLOG2_WEB_OUT"
start() {
echo "Starting $NAME: "
COMMAND="$GRAYLOG2_WEB >> \"$GRAYLOG2_WEB_OUT\" 2>&1 &"
daemon --check=${NAME} --user=${RUN_AS_USER} --pidfile=${PID_FILE} ${COMMAND}
RETVAL=$?
[ $RETVAL -eq 0 ] && touch $LOCK_FILE
return $RETVAL
}
stop() {
echo "Stopping $NAME: "
killproc -p ${PID_FILE} -d 5 ${NAME}
RETVAL=$?
[ $RETVAL -eq 0 ] && rm -f $LOCK_FILE
return $RETVAL
}
restart() {
stop
sleep 1
start
}
dump() {
echo "Dumping $NAME: "
PID=`cat $PID_FILE`
kill -3 $PID
RETVAL=$?
[ $RETVAL -eq 0 ] && success $"Dumped $NAME." || failure $"Failed to dump $NAME."
return $RETVAL
}
rh_status() {
status -p ${PID_FILE} ${NAME}
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
rh_status_q && exit 0
start
;;
stop)
rh_status_q || exit 0
stop
;;
restart)
restart
;;
status)
rh_status
;;
dump)
rh_status_q || exit 0
dump
;;
condrestart|try-restart)
rh_status_q || exit 0
restart
;;
*)
echo "Usage: $0 {start|stop|status|restart|condrestart|try-restart|dump}"
exit 1
esac
exit $?
EOF
sed -i -e "s|GRAYLOG2_WEB_HOME=|GRAYLOG2_WEB_HOME=$APP_ROOT/graylog2-web-interface|" /etc/init.d/graylog2-web
chmod u+x /etc/init.d/graylog2-web
echo "Starting graylog2-web..."
chkconfig graylog2-web on
service graylog2-web start
IP_ADDR=$(ip a |grep inet\ |grep -v 127.0.0.1 |awk '{ print $2 }'| cut -d/ -f1)
echo
echo "Now, log into http://$IP_ADDR:9000/"
echo "with user name: admin and password: $PASSWD"
echo "If there were any, your old files should be in $APP_ROOT/OLD_$MYRANDOM"
echo
echo "You can now use the service command on:"
echo "mongod, elasticsearch, graylog2-server and graylog2-web"
echo "e.g. service graylog2-web restart"
echo
cd $ORIG_WKDIR
@jjamor
Copy link
Author

jjamor commented Aug 14, 2014

I have fixed this scripts since curl options were incorrect. Initscripts are also now prepared for RHEL chkconfig style.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment