Skip to content

Instantly share code, notes, and snippets.

@fairchild
Last active September 29, 2019 10:49
Show Gist options
  • Star 5 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fairchild/4367544 to your computer and use it in GitHub Desktop.
Save fairchild/4367544 to your computer and use it in GitHub Desktop.
functions usefull in user-data deploy scrips.
fake_fuse () {
echo "hello faker fuse"
apt-get -y install libfuse2
cd /tmp ; apt-get download fuse
cd /tmp ; dpkg-deb -x fuse_* .
cd /tmp ; dpkg-deb -e fuse_*
cd /tmp ; rm fuse_*.deb
cd /tmp ; echo -en '#!/bin/bash\nexit 0\n' > DEBIAN/postinst
cd /tmp ; dpkg-deb -b . /fuse.deb
cd /tmp ; dpkg -i /fuse.deb
}
move_home_to_ephemeral_drive() {
sudo rsync -a /home /mnt
sudo mv /home /home.bak
sudo ln -s /mnt/home /home
}
dist_upgrade () {
echo "$FUNCNAME now executing."
# echo "deb http://packages.dotdeb.org stable all
# deb-src http://packages.dotdeb.org stable all" > /etc/apt/sources.list.d/dotdeb.org.list
# wget http://www.dotdeb.org/dotdeb.gpg
# sudo apt-key add dotdeb.gpg
sudo apt-get -y update
sudo DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade
}
install_common_tools () {
echo "$FUNCNAME now executing."
# install some tools I like to have
sudo apt-get -y install sudo net-tools pwgen nmap wget curl tree lsof vim mosh unzip git git-core
# links subversion
}
build_tools () {
echo "$FUNCNAME now executing."
# install some build and runtime needs
sudo apt-get -y install build-essential automake libtool bison autoconf patch libreadline-dev openssl libreadline6 libreadline6-dev zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt-dev libc6-dev ncurses-dev imagemagick libmagickcore-dev libmagick++-dev libpq-dev tcl libgdbm-dev libffi-dev software-properties-common python-software-properties gawk libleveldb-dev
}
install_docker(){
# uncomment lines if running on unbackported wheezy
echo "==> Installing Docker"
export DEBIAN_FRONTEND=noninteractive
# # fetch backports so that an upgraded kernel supporting aufs can be installed
# echo "deb http://http.debian.net/debian wheezy-backports main" > /etc/apt/sources.list.d/backports.list
# apt-get -q update
# # echo "q\n" > apt-get install -t wheezy-backports linux-image-amd64
curl -sSL https://get.docker.io/ | sh
#echo "NOTE: enabling remote api, and using external dns. your docker daemon will be reachable on the network"
#sed -i.bak "/DOCKER_OPTS=.*/c\DOCKER_OPTS=\" --dns 8.8.8.8 --dns 8.8.4.4 -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock\"" /etc/default/docker
sudo service docker restart
}
install_firefox(){
echo "deb http://packages.linuxmint.com debian import">/etc/apt/sources.list.d/firefox.list
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3EE67F3D0FF405B2
apt-get -y install firefox
}
setup_for_protractor () {
echo "$FUNCNAME now executing."
#TODO: find a way to not need to answer the ncurses config question about what keyboard to use.
apt-get -y install x11vnc
apt-get -y install xvfb x11-xkb-utils xfonts-100dpi xfonts-75dpi xfonts-cyrillic x11-xkb-utils xfonts-100dpi xfonts-75dpi xfonts-scalable xserver-xorg-core dbus-x11
apt-get -y install libxss1 libappindicator1 libindicator7
apt-get -y install libfontconfig1-dev
apt-get -y install chromium-browser
apt-get -y install iceweasel
npm install -g phantomjs
npm install -g chromedriver
apt-get -y install imagemagick
}
install_java () {
echo "\n Installing Java.."
sudo apt-get -y install g++ openjdk-7-jre-headless ant openjdk-7-jdk
# comment above, and uncomment below to use the sun java7 binary install
# sudo add-apt-repository ppa:webupd8team/java
# sudo apt-get install oracle-java7-installer
}
install_oracle_java () {
sudo add-apt-repository -y ppa:webupd8team/java
sudo apt-get update
echo debconf shared/accepted-oracle-license-v1-1 select true | sudo debconf-set-selections
echo debconf shared/accepted-oracle-license-v1-1 seen true | sudo debconf-set-selections
# sudo echo oracle-java7-installer shared/accepted-oracle-license-v1-1 select true | sudo /usr/bin/debconf-set-selections
sudo apt-get -y install oracle-java7-installer
sudo apt-get install oracle-java7-set-default
sudo update-java-alternatives -s java-7-oracle
java -version
}
install_python () {
sudo apt-get -y install python-pip python-dev
}
install_redis () {
echo "\n\n ---> $FUNCNAME now executing."
sudo apt-get -y install redis-server
}
install_node_with_debs(){
apt-get install curl
curl -sL https://deb.nodesource.com/setup | bash -
apt-get install -y nodejs nodejs-legacy
# setup to be able to use testing repo
#http://serverfault.com/questions/22414/how-can-i-run-debian-stable-but-install-some-packages-from-testing
echo "Explanation: Uninstall or do not install any Debian-originated
Explanation: package versions other than those in the stable distro
Package: *
Pin: release a=stable
Pin-Priority: 900
Package: *
Pin: release o=Debian
Pin-Priority: -10">/etc/apt/prefrences.d/stable
echo "deb http://http.debian.net/debian jessie main">>/etc/apt/sources.list
apt-get update -y -q
apt-get -y -t testing install libc6-dev
}
install_nodejs () {
sudo apt-get -y install libc-ares2 nodejs-dev npm
#nodejs npm
if [ -d /home/${USERNAME}/.nvm ]; then
cd /home/${USERNAME}/.nvm && git pull && cd -
else
git clone https://github.com/creationix/nvm.git /home/${USERNAME}/.nvm
fi
echo "# NVM" >> /home/${USERNAME}/.bash_profile
echo "" >> /home/${USERNAME}/.bash_profile
echo ". /home/${USERNAME}/.nvm/nvm.sh" >> /home/${USERNAME}/.bash_profile
echo "" >> /home/${USERNAME}/.bash_profile
chown -R ${USERNAME} /home/${USERNAME}/.nvm
. /home/${USERNAME}/.nvm/nvm.sh
nvm install v${NODE_VERSION}
nvm alias default v${NODE_VERSION}
npm install forever -g
}
setup_deploy_user () {
# USERNAME=${1:-$USER}
# AUTHORIZED_KEYS=${2:-$AUTHORIZED_KEYS}
echo " ----> $FUNCNAME now executing. <----"
sudo useradd -c 'The user used to deploy apps' -s '/bin/bash' -d /home/${USERNAME} -m ${USERNAME}
sudo touch /etc/sudoers.d/91-${USERNAME}
sudo chmod 0440 /etc/sudoers.d/91-${USERNAME}
echo "echo \"${USERNAME} ALL=(ALL) NOPASSWD:ALL\" > /etc/sudoers.d/91-${USERNAME}" | sudo bash
sudo mkdir -p /home/${USERNAME}/.ssh
echo "${AUTHORIZED_KEYS}" > /tmp/authorized_keys
sudo mv /tmp/authorized_keys /home/${USERNAME}/.ssh/authorized_keys
sudo chown -R ${USERNAME} /home/${USERNAME}/.ssh
# sudo -u ${USERNAME} 'ssh-keygen -b 4096 -t rsa -f /home/${USERNAME}/.ssh/id_rsa -P ""'
echo "export RAILS_ENV=production">>/home/${USERNAME}/.bashrc
echo "export RACK_ENV=production">>/home/${USERNAME}/.bashrc
echo "if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi">>/home/${USERNAME}/.bash_profile
sudo chown -R ${USERNAME}:${USERNAME} /home/${USERNAME}
}
install_riak () {
wget http://downloads.basho.com.s3-website-us-east-1.amazonaws.com/riak/1.2/1.2.1/ubuntu/precise/riak_1.2.1-1_amd64.deb
sudo dpkg -i riak_1.2.1-1_amd64.deb
sudo rm riak_1.2.1-1_amd64.deb
# curl http://apt.basho.com/gpg/basho.apt.key | sudo apt-key add -
# sudo bash -c "echo deb http://apt.basho.com lsb_release -sc main > /etc/apt/sources.list.d/basho.list"
# sudo apt-get update
# sudo apt-get install riak
}
setup_normal_sudo_user () {
USERNAME=${1:-APPNAME}
# AUTHORIZED_KEYS=${2:-$AUTHORIZED_KEYS}
echo "\n\n ---> $FUNCNAME now executing."
sudo useradd -c 'The user used to deploy apps' -s '/bin/bash' -d /home/${USERNAME} -m ${USERNAME}
sudo touch /etc/sudoers.d/92-${USERNAME}
sudo chmod 0440 /etc/sudoers.d/91-${USERNAME}
echo "echo \"${USERNAME} ALL=(ALL) NOPASSWD:ALL\" > /etc/sudoers.d/92-${USERNAME}" | sudo bash
sudo mkdir -p /home/${USERNAME}/.ssh
echo "${AUTHORIZED_KEYS}" > /tmp/authorized_keys
sudo mv /tmp/authorized_keys /home/${USERNAME}/.ssh/authorized_keys
# sudo -u ${USERNAME} 'ssh-keygen -b 4096 -t rsa -f /home/${USERNAME}/.ssh/id_rsa -P ""'
git clone git@github.com:${USERNAME}/dotfiles.git /home/${USERNAME}/.dotfiles
sudo chown -R ${USERNAME}:${USERNAME} /home/${USERNAME}
}
setup_postgres_9.1 () {
echo "\n\n ---> $FUNCNAME now executing."
sudo apt-get install -y postgresql-9.3 libpq-dev postgresql-server-dev-9.3 postgresql-contrib
# createuser --echo --superuser deploy
echo "CREATE USER ${USERNAME} WITH PASSWORD 'secret4${USERNAME}';
ALTER USER ${USERNAME} WITH SUPERUSER;
CREATE DATABASE ${APPNAME}_production;
CREATE DATABASE ${APPNAME}_staging;
CREATE DATABASE ${APPNAME}_test;">/tmp/pguser.psql
sudo -u postgres sh -c "psql -f /tmp/pguser.psql"
rm /tmp/pguser.psql
sudo sh -c "echo 'localhost:5432:*:${USERNAME}:secret4${USERNAME}'>/home/${USERNAME}/.pgpass"
sudo chown ${USERNAME}:${USERNAME} /home/${USERNAME}/.pgpass
sudo chmod 0600 /home/${USERNAME}/.pgpass
}
setup_postgres_9.3 () {
echo "\n\n ---> $FUNCNAME now executing."
# uncomment below to use non standard repo
# echo "deb http://apt.postgresql.org/pub/repos/apt/ wheezy-pgdg main">/etc/apt/sources.list.d/pgdg.list
# wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
# sudo apt-get update
sudo apt-get install -y postgresql-9.3 libpq-dev postgresql-client-9.3 postgresql-contrib-9.3 postgis*
# createuser --echo --superuser deploy
echo "CREATE USER ${USERNAME} WITH PASSWORD 'secret4${USERNAME}';
ALTER USER ${USERNAME} WITH SUPERUSER;
CREATE DATABASE ${APPNAME}_production;
CREATE DATABASE ${APPNAME}_staging;
CREATE DATABASE ${APPNAME}_test;">/tmp/pguser.psql
sudo -u postgres sh -c "psql -f /tmp/pguser.psql"
rm /tmp/pguser.psql
sudo sh -c "echo 'localhost:5432:*:${USERNAME}:secret4${USERNAME}'>/home/${USERNAME}/.pgpass"
sudo chown ${USERNAME}:${USERNAME} /home/${USERNAME}/.pgpass
sudo chmod 0600 /home/${USERNAME}/.pgpass
}
setup_postgres_9.4 () {
echo "\n\n ---> $FUNCNAME now executing."
echo "deb http://apt.postgresql.org/pub/repos/apt/ trusty-pgdg main
">/etc/apt/sources.list.d/pgdg.list
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get install -y postgresql-9.4 libpq-dev postgresql-client-9.4 postgresql-contrib-9.4
sudo apt-get install postgresql-9.4-postgis-2.1 postgresql-9.4-postgis-scripts
# createuser --echo --superuser deploy
echo "CREATE USER ${USERNAME} WITH PASSWORD 'secret4${USERNAME}';
ALTER USER ${USERNAME} WITH SUPERUSER;
CREATE DATABASE ${APPNAME}_production;
CREATE DATABASE ${APPNAME}_staging;
CREATE DATABASE ${APPNAME}_test;">/tmp/pguser.psql
sudo -u postgres sh -c "psql -f /tmp/pguser.psql"
rm /tmp/pguser.psql
sudo sh -c "echo 'localhost:5432:*:${USERNAME}:secret4${USERNAME}'>/home/${USERNAME}/.pgpass"
sudo chown ${USERNAME}:${USERNAME} /home/${USERNAME}/.pgpass
sudo chmod 0600 /home/${USERNAME}/.pgpass
}
install_ruby () {
echo "\n\n ---> $FUNCNAME now executing."
sudo sh -c "echo 'gem: --no-ri --no-rdoc'>/etc/gemrc"
sudo apt-add-repository -y ppa:brightbox/ruby-ng
sudo apt-get update -qq
sudo apt-get install -y ruby2.2 ruby2.2-dev ruby-bundler ruby-switch
sudo ruby-switch --set ruby2.2
sudo gem install bundler fog json foreman taps backup capistrano oj pg nokogiri rails
}
setup_newrelic_server_monitoring () {
echo "\n\n ---> $FUNCNAME now executing."
echo deb http://apt.newrelic.com/debian/ newrelic non-free >> /etc/apt/sources.list.d/newrelic.list
wget -O- https://download.newrelic.com/548C16BF.gpg | apt-key add -
apt-get update -qq
apt-get install -y newrelic-sysmond
nrsysmond-config --set license_key=$NEW_RELIC_LICENSE_KEY
/etc/init.d/newrelic-sysmond start
}
setup_www () {
echo "\n\n ---> $FUNCNAME now executing."
sudo apt-get -y install nginx-full
sudo mkdir -p /var/www/apps
sudo usermod --groups www-data ${USERNAME}
sudo chown -R ${USERNAME}:www-data /var/www
}
setup_ssl () {
echo "TODO: setup ssl"
}
setup_apt_cache () {
if [[ $APT_PORT_3142_TCP_ADDR && ${APT_PORT_3142_TCP_ADDR-x} ]];then
echo "Acquire::http { Proxy \"http://${APT_PORT_3142_TCP_ADDR}:3142\"; };"| tee /etc/apt/apt.conf.d/01proxy
else
echo "No APT_PORT_3142_TCP_ADDR set"
fi
}
setup_landscape () {
sudo apt-get install landscape-client
sudo landscape-config --computer-title "${APPNAME}" --account-name michaelf --script-users=ubuntu,deploy --tags server --ok-no-register
}
setup_elastic_search () {
echo "\n\n ---> $FUNCNAME now executing."
mkdir -p mkdir -p /tmp/setup_elastic_search
cd /tmp/setup_elastic_search
wget http://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-0.19.10.deb
sudo dpkg -i elasticsearch-0.19.10.deb
}
setup_log_shipping () {
sudo mkdir -p /etc/logstash
LOG_SERVER = ${1:-'logs.i.att.io'}
echo "echo $LOG_SERVER logserver>>/etc/hosts" | sudo bash
echo "echo $LOG_SERVER elasticsearch-server>>/etc/hosts" | sudo bash
echo " *.* @${LOG_SERVER}:514">/tmp/10-logstash
sudo mv /tmp/10-logstash /etc/rsyslog.d/10-logstash
sudo service rsyslog restart
sudo curl -o /opt/logstash-1.1.5-monolithic.jar http://semicomplete.com/files/logstash/logstash-1.1.5-monolithic.jar
sudo mkdir -p /etc/logstash
sudo curl -o /etc/logstash/shipper.conf https://gist.github.com/raw/3030472/78cce12a52710d53fabcb7a710eef155bf7d2fa1/logstash_shipper.conf
# java -jar /opt/logstash-1.1.5-monolithic.jar agent -f /etc/logstash/shipper.conf
}
setup_logstash_indexer () {
sudo mkdir -p /etc/logstash
sudo curl -o /opt/logstash-1.1.5-monolithic.jar http://semicomplete.com/files/logstash/logstash-1.1.5-monolithic.jar
sudo curl -o /etc/logstash/indexer.conf https://gist.github.com/raw/3030472/6f666bcf5f6912c2822c3688e8a9d9ae320a8fcb/logstash_indexer.conf
# java -jar /opt/logstash-1.1.5-monolithic.jar indexer -f /etc/logstash/indexer.conf
# java -jar /opt/logstash-1.1.5-monolithic.jar web #--backend elasticsearch://127.0.0.1/ #backend is only needed if multicast discovery fails
}
setup_monitoring () {
sudo apt-get install -y ganglia-monitor
sudo apt-get install -y collectd libvirt0 collectd-dev
}
install_capybara_dependencies () {
sudo apt-get install -y libqt4-dev libqtwebkit-dev
}
setup_rvm () {
# depends on build_tools
echo "\n\n ---> $FUNCNAME now executing."
sudo -i -u ${USERNAME} bash -c "echo \"gem: --no-rdoc --no-ri\" > ~/.gemrc"
curl -sSL https://get.rvm.io -o /tmp/rvm_installer.sh
sudo chown $USERNAME /tmp/rvm_installer.sh
sudo chmod u+x /tmp/rvm_installer.sh
sudo -i -u ${USERNAME} bash -c "/tmp/rvm_installer.sh"
sudo -i -u ${USERNAME} bash -c "/tmp/rvm_installer.sh"
# sudo -i -u ${USERNAME} bash -c "curl https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer | bash"
sudo -i -u ${USERNAME} bash -c "echo \"source ~/.rvm/scripts/rvm\">>~/.bashrc"
sudo -i -u ${USERNAME} bash -c "source ~/.rvm/scripts/rvm"
sudo -i -u ${USERNAME} bash -c "source ~/.rvm/scripts/rvm && rvm install $RUBY_VERSION"
sudo -i -u ${USERNAME} bash -c "source ~/.rvm/scripts/rvm && rvm --default use $RUBY_VERSION"
sudo -i -u ${USERNAME} bash -c "source ~/.rvm/scripts/rvm && rvm rubygems current"
sudo -i -u ${USERNAME} bash -c "source ~/.rvm/scripts/rvm && gem install capistrano foreman pg pry awesome_print nokogiri oj multi_json faraday thin puma backup"
}
install_mosh () {
sudo apt-get install -y python-software-properties
sudo add-apt-repository -y ppa:keithw/mosh
sudo apt-get update
sudo apt-get install mosh
}
known_hosts () {
ssh-keyscan github.com| sudo tee -a /etc/ssh/known_hosts
ssh-keyscan bitbucket.org| sudo tee -a /etc/ssh/known_hosts
cp /etc/ssh/known_hosts /home/${USERNAME}/.ssh/known_hosts
chown ${USERNAME}:${USERNAME} /home/${USERNAME}/.ssh/known_hosts
}
haproxy_setup () {
sudo useradd haproxy
wget http://haproxy.1wt.eu/download/1.5/src/devel/haproxy-1.5-dev15.tar.gz
tar xzf haproxy-1.5-dev15.tar.gz
cd haproxy-1.5-dev15/
make TARGET=linux2628 USE_STATIC_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1
sudo make PREFIX=/opt/haproxy-ssl install
/opt/haproxy-ssl/sbin/haproxy -v
}
# #install postfix
# install_postfix () {
# debconf-set-selections <<< "postfix postfix/mailname string ${APPNAME}.${DOMAIN}"
# debconf-set-selections <<< "postfix postfix/main_mailer_type string 'Internet Site'"
# apt-get install -y postfix
# }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment