My work involves installing & managing a lot of Linux servers. At times I have to do same work on numerous servers. One such task is installing Tomcat. In these posts I showed you how to install Apache Tomcat & how to check its version on Linux servers.
In this post, I will show you how you can automate the installation process across any number of servers using a shell script 🙂
My approach is to : –
- Setup password-less SSH on all servers from one jumpbox machine. Jumpbox is a server from which you will execute this script.
- Create a list of servers in a text file. All servers are typed line by line.
- Copy Java & Tomcat installers to all servers in one go from this jumpbox.
- And finally execute the script.
Below are the commands & script through which I accomplished this. All of these are self-explanatory 😉
for hst in `cat /home/shashank/hosts.txt`; do scp ~shashank/jdk-8u25-linux-x64.tar.gz $hst:/home/shashank; done
for hst in `cat /home/shashank/hosts.txt`; do scp ~shashank/apache-tomcat-8.0.15.tar.gz $hst:/home/shashank; done
What it does above? For loop reads the contents of text file (server IPs) line by line & copies tarballs there.
for hst in `cat /home/shashank/hosts.txt`; do ssh $hst -t 'bash -s' < ~shashank/tomcat_installer.sh; done
The trick above is to use ‘bash -s’. It will accept the script as an argument & execute it. After execution, it will move to next server. Below is my installer script.
Do let me know if it was helpful or not 🙂 I will come up with some more posts soon 🙂
#Apache Tomcat Installer Script #Author : Shashank Srivastava #set -x echo "Logged into `hostname`. Installing here." #Checking if installer tarballs are present or not. If they are not found, script will print error message & quit. if [ -f /home/shashank/jdk-8u25-linux-x64.tar.gz ] && [ -f /home/shashank/apache-tomcat-8.0.15.tar.gz ] then echo "Unpacking Java installer tarball......."; sleep 2s #waiting for 2 seconds to show you what is being done. sudo tar -xzvf /home/shashank/jdk-8u25-linux-x64.tar.gz; echo "" echo "Java tarball unpacked."; echo "" echo "Unpacking Tomcat installer tarball......."; sleep 2s; sudo tar -xzvf /home/shashank/apache-tomcat-8.0.15.tar.gz; echo "" echo "Tomcat tarball unpacked."; echo "" echo "Installing Java & Tomcat to /opt/app directory...."; sudo cp -rp /home/shashank/jdk1.8.0_25 /opt/app; sudo cp -rp /home/shashank/apache-tomcat-8.0.15 /opt/app; echo "" echo "Exporting necessary variables......"; export JAVA_HOME=/opt/app/jdk1.8.0_25; export PATH=$PATH:/opt/app/jdk1.8.0_25/bin:$PATH; export CATALINA_HOME=/opt/app/apache-tomcat-8.0.15; echo "Variables exported."; echo "" echo $JAVA_HOME; echo "" echo $PATH; echo "" echo $CATALINA_HOME; sleep 2s; echo "" echo "Checking Java & Tomcat versions."; echo "" echo "Java is installed at `which java` Directory"; echo "" java -version; echo "" java -cp $CATALINA_HOME/lib/catalina.jar org.apache.catalina.util.ServerInfo; echo "" echo "Starting Tomcat server" echo "" cd $CATALINA_HOME/bin ./startup.sh echo "' echo "Removing unpacked tarballs from PWD."; sudo rm -rf /home/shashank/jdk1.8.0_25; sudo rm -rf /home/shashank/apache-tomcat-8.0.15; else echo "Installer tarballs not found in /home/shashank. Please make sure they exist there. Exiting installation process now." exit fi