Skip to content

Instantly share code, notes, and snippets.

@gerzhan
Forked from RichardBronosky/aws-userdata.sh
Created March 2, 2018 18:16
Show Gist options
  • Select an option

  • Save gerzhan/49b168c49c268b10d82f1ad652d23e36 to your computer and use it in GitHub Desktop.

Select an option

Save gerzhan/49b168c49c268b10d82f1ad652d23e36 to your computer and use it in GitHub Desktop.
#!/bin/bash
url="https://gist.github.com/RichardBronosky/2d04c7c2e9a5bea67cd9760a35415a3f/raw/install_mongo.sh"
script="/tmp/userdata.sh"
echo "Running userdata script as $(whoami) from $(pwd)"
# Log commands to stdout and vicariously /var/log/cloud-init-output.log
set -o xtrace
# Exit on error
set -o errexit
# Exit on use of unset variables
set -o nounset
# Exit and report on pipe failure
set -o pipefail
# Fetch setup script
curl -L "$url" > $script
# Make setup script executable
chmod +x $script
# Execute setup script
$script
#!/bin/bash
# Log commands to stdout and vicariously /var/log/cloud-init-output.log
set -o xtrace
# Exit on error
set -o errexit
# Exit on use of unset variables
set -o nounset
# Exit and report on pipe failure
set -o pipefail
# If not running as root, rerun via sudo
if [[ $EUID > 0 ]]; then
exec sudo "$0" "$@"
fi
# Let apt know not to error due to lack of Dialog
export DEBIAN_FRONTEND=noninteractive
# Add Mongo repo to sources
tee /etc/apt/sources.list.d/mongodb-org-3.4.list <<EOF
deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse
EOF
# Install packages
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6
apt-get update
for package in docker.io mongodb-org linux-image-extra-$(uname -r) linux-image-extra-virtual; do
apt-get install -y $package
done
# Package specific actions
# add user:ubuntu to group:docker
usermod -aG docker ubuntu
# create mongodb data dir
mkdir -p /data/db/dump
chown ubuntu:ubuntu /data/db/dump
# Enable and start services
for service in mongod; do
systemctl status $service || true # will return code 3 the first time, but gives good log info
systemctl unmask $service
systemctl enable $service
systemctl start $service
systemctl status $service
done
# Reboot to make docker changes take effect
reboot
#!/bin/bash
# Log commands to stdout
set -o xtrace
# Exit on error
set -o errexit
# Exit on use of unset variables
set -o nounset
# Exit and report on pipe failure
set -o pipefail
cd /data/db
mongodump -h prodmongo12.ies
# Get major versions from https://hub.docker.com/r/library/mongo/tags/
step=0
for major_version in 2.6.12 3.0.14 3.2.11 3.4.1; do
sudo docker stop some-mongo ||:
sudo docker rm some-mongo ||:
sudo docker run --name some-mongo -v /data/db:/data/db -d mongo:$major_version
set +o errexit
false; while [[ $? > 0 ]]; do
sleep 0.5
sudo docker exec -it some-mongo mongo --eval 'printjson((new Mongo()).getDBNames())'
done
set -o errexit
if (( $step == 0 )); then
sudo docker exec -it some-mongo mongorestore /data/db/dump
fi
((step += 1))
done
# Finish up with docker
sudo rm -rf /data/db/dump/*
sudo docker exec -it some-mongo bash -c 'cd /data/db; mongodump'
sudo docker stop some-mongo
sudo docker rm some-mongo
# Load upgraded data into latest version of MongoDB (WiredTiger storage engine will be used)
mongorestore /data/db/dump
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment