Skip to content

Instantly share code, notes, and snippets.

@pclose
Last active June 14, 2018 19:56
Show Gist options
  • Select an option

  • Save pclose/c24ac269d0513ae424cebcf11866b4ad to your computer and use it in GitHub Desktop.

Select an option

Save pclose/c24ac269d0513ae424cebcf11866b4ad to your computer and use it in GitHub Desktop.
Generates commands to install Moogsoft on a linux machine
#!/bin/bash
# Generates commands to install Moogsoft on a linux machine -pete 2018-01-23
host="${1-localhost}"
moog_tar="moog6.3.tgz"
license="123"
java_archive="server-jre-8u172-linux-x64.tar.gz"
java_basedir="jdk1.8.0_172"
if [[ $2 == "" ]]; then
cat - <<END
# Copy over SSH key from local machine
cat ~/.ssh/id_rsa.pub | ssh root@$host 'mkdir -p ~/.ssh && cat - > .ssh/authorized_keys && chmod 0600 .ssh/authorized_keys'
# Copy binaries to server
scp "$moog_tar" root@$host:/root/
# Install dependencies on $host
yum -y install epel-release
# MySQL
yum -y install http://repo.mysql.com/mysql57-community-release-el7.rpm
yum -y install mysql-community-client mysql-community-common mysql-community-libs mysql-community-libs-compat mysql-community-server
# erlang
yum -y install https://github.com/rabbitmq/erlang-rpm/releases/download/v20.1.4/erlang-20.1.4-1.el7.centos.x86_64.rpm
# RabbitMQ
curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh | sudo bash
yum -y install rabbitmq-server
# ElasticSearch
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
cat - <<OHCE > /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-5.x]
name=Elasticsearch repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
OHCE
yum -y install elasticsearch
# nginx
cat - <<OHCE > /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/\\\$basearch/
gpgcheck=0
enabled=1
OHCE
yum -y install nginx
# apache-tomcat
yum -y install tomcat-native
# Java, or try tar archives from http://www.oracle.com/technetwork/java/javase/downloads/index.html
yum -y install java-1.8.0-openjdk
# unarchive and install java from oracle
scp $java_archive root@$host:/root/
mkdir /usr/java
tar xvf $java_archive -C /usr/java
cd /usr/java/ && ln -s $java_basedir/ latest && ln -s latest 1.8.0_152
update-alternatives --install /usr/bin/java java /usr/java/latest/bin/java 1
#sed -i 's!export JAVA_HOME=/usr/java/jre1.8.0_152!export JAVA_HOME=/usr/java/latest!' /etc/rc.d/init.d/apache-tomcat
# Untar Moogsoft
files="\$(tar tvf $moog_tar |grep tgz | perl -ne 's/\n//;s/\r//;@a=split(/\s+/);\$r="";foreach (@a[5..\$#a]) {\$r.=\$_;} print \$r . "\n";')"
for e in \$files; do
tar zxf "$moog_tar" \$e --to-stdout | tar zxfv - -C /
done
# Setup users and environment, cause we don't have packages so no postinstall scripts
getent group moogsoft > /dev/null || groupadd -r moogsoft
getent passwd moogsoft > /dev/null || useradd -r -g moogsoft moogsoft
getent passwd moogadmin > /dev/null || useradd -g moogsoft moogadmin
usermod -G nginx moogadmin
getent group tomcat > /dev/null || groupadd -r tomcat
getent passwd tomcat > /dev/null || useradd -g tomcat tomcat
useradd -g moogsoft moogtoolrunner
echo moogtoolrunner:moogtoolrunner | chpasswd
echo "export JAVA_HOME=/usr/java/latest" >> /home/moogtoolrunner/.bashrc
echo "export MOOGSOFT_HOME=/usr/share/moogsoft" >> /home/moogtoolrunner/.bashrc
# Disabled selinux
sed -i s/SELINUX=enforcing/SELINUX=disabled/ /etc/sysconfig/selinux
# Run installation
cat - <<OHCE >> \$HOME/.bashrc
export MOOGSOFT_HOME=/usr/share/moogsoft
export JAVA_HOME=/usr/java/latest
export APPSERVER_HOME=/usr/share/apache-tomcat
export PATH=\\\$PATH:\\\$MOOGSOFT_HOME/bin:\\\$MOOGSOFT_HOME/bin/utils
OHCE
source \$HOME/.bashrc
\$MOOGSOFT_HOME/bin/utils/moog_init.sh -I $host -u root
# Update license key
printf 'insert into licence_info values ("$license");' | mysql -Dmoogdb
# Cleanup dirs
chown -R moogsoft:moogsoft /usr/share/moogsoft /var/log/moogsoft /var/run/moogsoft
chown -R tomcat:tomcat /usr/share/apache-tomcat
mkdir -p /var/run/apache-tomcat && chown -R tomcat:tomcat /var/run/apache-tomcat
chown -R moogsoft:moogsoft /var/log/moogsoft/
chown -R moogsoft:moogsoft /var/run/moogsoft/
END
fi
if [[ $2 == "dl-from-moogsoft" ]]; then
secgroup="${3-msoft1}"
aws_ssh_key="${4-your-key}"
cat - <<END
# Search for AWS instance with binaries
aws ec2 describe-images --filters Name=description,Values="Moogsoft*" --query 'Images[*].{ID:ImageId}'
_imageid = "<id from last step>"
# Start AWS intance
aws ec2 create-security-group --group-name $secgroup --description moogsoft # Create security group
aws ec2 describe-security-groups --filters Name=group-name,Values="$secgroup" --query 'SecurityGroups[*].{Name:GroupId}'
_secgid = "<id from last step>"
aws ec2 authorize-security-group-ingress --group-id "\$_secgid" --protocol tcp --port 22 --cidr 0.0.0.0/0 # Add port to rule
aws ec2 run-instances --image-id "\$_imageid" --instance-type t2.large --security-group-ids "\$_secgid" --key-name "$aws_ssh_key"
aws ec2 describe-instances --filters Name=image-id,Values="\$_imageid" --query 'Reservations[*].Instances[*].{ip_address:PublicIpAddress,instance_id:InstanceId,volume_ids:BlockDeviceMappings[*].Ebs.VolumeId}
_ipaddr = "<ip from last step>"
_instid = "<id from last step>"
_volumeid = "<volume id from last step>"
ssh -i ~/.ssh/$aws_ssh_key.pem centos@\$_ipaddr
# Tar all moogsoft binaries
mkdir -p msoft
for e in `rpm -qa |grep moog`; do
rpm -ql \$e | xargs tar zcvf msoft/\$e.tgz;
rpm -q --scripts \$e > msoft/\$e.sh;
rpm -q --requires \$e > msoft/\$e.dep.txt;
done
# Extract temp license key from database
printf 'select raw_licence from licence_info;' | mysql -Dmoogdb > msoft/licence.txt
# Tar it all up again
tar czvf $moog_tar msoft/
# Remove AWS instance
aws ec2 terminate-instances --instance-ids \$_instid
aws ec2 delete-volume --volume-id \$_volumeid
END
fi
if [[ $2 == "expand-disk" ]]; then
disk_file="${3-/var/lib/libvirt/images/centos1.qcow2}"
temp_host="${4-centos2}"
temp_label="${5-vdc}"
cat - <<END
# Extend existing qcow2 disk image and attach it to another guest
qemu-img resize $disk_file +10G
virsh attach-disk $temp_host $disk_file $temp_label --targetbus virtio --driver qemu --subdriver qcow2
# SSH to guest
ssh $temp_host
# Remove all LVM
dmsetup remove_all
# Resize device
# manually with fdisk: https://www.howtoforge.com/linux_resizing_ext3_partitions_p2
#fdisk /dev/vdc
# automatic with sfdisk: https://superuser.com/a/1132834/154998
sfdisk -d /dev/$temp_label | perl -e '@a=();while(<STDIN>){push @a, \$_;} \$a[\$#a] =~ s/, size=\s*\d+//; print join "", @a;' | sfdisk /dev/$temp_label
# Extend LVM
pvresize /dev/$temp_label
lvextend -l +100%FREE /dev/mapper/centos-root
# Mount and extend drive
mount /dev/mapper/centos-root /mnt
xfs_growfs /dev/mapper/centos-root
# Unmount and sync
umount /mnt
sync;sync;
dmsetup remove_all
# Detach disk
virsh detach-disk $temp_host $temp_label
END
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment