Last active
September 29, 2019 10:49
-
-
Save fairchild/4367544 to your computer and use it in GitHub Desktop.
functions usefull in user-data deploy scrips.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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