====== Optum-specific Conventions ======
timbrado-${__time(yyyyMMddHHmmss)}
==== Storage Conventions ====
* Add disk to VM via Enterprise Service Catalog
* Rename new volume group to esosvg, or add new disk to existing esosvg volume group
* LV ''esosvg/home'' mounted at /home
* LV ''esosvg/mariadb'' mounted at /var/lib/mysql
* LV ''esosvg/opt'' mounted at /opt //(only if ''rootvg'' /opt isn't sufficient)//
* LV ''esosvg/arc'' mounted at /opt/arc
* **Alternative:** LV ''esosvg/home'' mounted at /home with all other locations sym-linked under /home
===== Bluejay Controller =====
==== Platform Installation Overview ====
* Update system with ''yum update''
* Lay out storage per conventions
* Install/enable EPEL: ''dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm''
* Install ''newterm''
* Create users
* Change ''/etc/sudoers'' to switch to ''NOPASSWD:'' wheel group entry
* Install basic packages
* yum install wget htop vim gvim git
* yum groupinstall “X Window System”
* yum install dejavu-sans-mono-fonts.noarch
* yum install xorg-x11-fonts-misc
* //Optional: ''yum groupinstall “Fonts”'' for all fonts //
* yum install tightvnc-server
* yum install tightvnc
* yum install xorg-x11-server-devel
* Install ...
* yum install java-1.8.0-openjdk-devel
* yum install mariadb-server
* yum install mariadb-devel
* yum install python-devel
* yum install MySQL-python
* yum install httpd
* yum install php
* yum install php-mysql
* yum install php-ldap
* yum install php-gd
* yum install gd-devel
* Install Maven
* Install InfluxDB (requires EPEL)
* Install Grafana
* Install Jenkins
==== Configure Jenkins for Bluejay ====
* Ensure SSH key and known_hosts are populated for self-connection
* Add plugins
* Add credentials, use "Git" provider (not "GitHub")
* Configure global tools section (maven, etc...)
* Add environment variables in Global properties
* ''M3_HOME'' = ''/usr/maven''
* ''PATH'' = ''/var/lib/jenkins/bin:/usr/maven/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin''
* **Optional:** ''JAVA_HOME'' = ''/usr/java''
* Addition packages:
* yum install python-pip
* pip install --upgrade pip
* pip install jenkinsapi
* Correct permissions, if necessary, at ''/usr/lib/python2.7/site-packages'' for:
* ''jenkinsapi''
* ''six''
* ''pytz''
===== Component Installation =====
==== MariaDB Installation ====
Previously-mentioned package install via ''yum'' installs the software \\
Configuration is in ''/etc/my.cnf'' and ''/etc/my.cnf.d'':
* Setting the ''datadir'' attribute to where database storage is to live is advisable, to separate it from ''/var/lib/mysql'', which is where the socket is created
* Trying to symbolic-link ''/var/lib/mysql'' to some other location causes permissions quirks
* For some reason, ''/var/run/mariadb'' is sometimes not created - to remediate:mkdir /var/run/mariadb
chown mysql:mysql /var/run/mariadb
chmod 775 /var/run/mariadb
chmod g+s /var/run/mariadb
cd /var/run/mariadb ; chcon -t var_run_t .
* Make sure ''/var/lib/mysql'' has ''mysqld_db_t'' type, in the directory: ''chcon -t mysqld_db_t .''
------
==== Apache Installation ====
Previously-mentioned package install via ''yum'' installs the software
Edit ''/etc/httpd/conf/httpd.conf'':
* Set ''DocumentRoot'' to suitable location, ensure location exists and resides in suitable storage
Open firewall for Apache:
firewall-cmd --permanent --zone=public --add-port=80/tcp
firewall-cmd --reload
Perform the typical ''systemctl enable httpd'' and ''service httpd start'' for startup
------
==== InfluxDB Installation ====
Resource [[https://influxdbcom.readthedocs.io/en/latest/content/docs/v0.9/guides/clustering|Clustering InfluxDB ...]] \\
Create the file ''/etc/yum.repos.d/influxdb.repo'' with this content:
[influxdb]
name = InfluxDB Repository - RHEL $releasever
baseurl = https://repos.influxdata.com/rhel/$releasever/$basearch/stable
enabled = 1
gpgcheck = 1
gpgkey = https://repos.influxdata.com/influxdb.key
... then, do a ''yum update'' and ''yum install influxdb'' \\
Open firewall for InfluxDB:
firewall-cmd --permanent --zone=public --add-port=8086/tcp
firewall-cmd --permanent --zone=public --add-port=8083/tcp
firewall-cmd --reload
Edit ''/etc/influxdb/influxdb.conf'' and:
* In the ''[http]'' section:
* Set ''enabled = true''
* Change the ''bind = :8086'' entry, if needed
* Set ''unix-socket-enabled = true''
* Change ''bind-socket = '' value to ''/var/run/influxdb/influxdb.sock''
* In the ''[udp]'' section:
* Set ''enabled = true''
* Change the ''bind = :8089'' entry, if needed
Ensure ''/var/run/influxdb'' and ''/var/lib/influxdb'' exist and are owned correctly \\
* For some reason, ''/var/run/influxdb'' is sometimes not created - to remediate:mkdir /var/run/influxdb
chown influxdb:influxdb /var/run/influxdb
chmod 775 /var/run/influxdb
chmod g+s /var/run/influxdb
cd /var/run/influxdb ; chcon -t var_run_t .
Remember to ''systemctl enable influxdb'' and ''service influxdb start'' \\
=== InfluxDB Auth ===
See: [[https://docs.influxdata.com/influxdb/v1.5/query_language/authentication_and_authorization|InfluxDB auth]] \\
create user admin with password 'somepassword' with all privileges;
create user jmeter with password 'somepassword';
create database jmeter;
grant [READ,WRITE,ALL] on "jmeter" TO "jmeter";
revoke [READ,WRITE,ALL] on "jmeter" from "jmeter";
------
==== Grafana Installation ====
Create the file ''/etc/yum.repos.d/grafana.repo'' with this content:
[grafana]
name=grafana
baseurl=https://packagecloud.io/grafana/stable/el/7/$basearch
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://packagecloud.io/gpg.key https://grafanarel.s3.amazonaws.com/RPM-GPG-KEY-grafana
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
... then, do a ''yum update'' and ''yum install grafana'' \\
Open firewall for Grafana:
firewall-cmd --permanent --zone=public --add-port=3000/tcp
firewall-cmd --reload
Remember to ''systemctl enable grafana-server'' and ''service grafana-server start'' \\
Log in (default login is ''admin'' with password ''admin'') and change password, add user(s) \\
Install the InfluxDB datasource plugin (find in plugins section, follow instructions)
==== LDAP for Grafana ====
Edit ''/etc/grafana/grafana.ini'':[auth.ldap]
enabled = true
config_file = /etc/grafana/ldap.toml
allow_sign_up = true
Edit ''/etc/grafana/ldap.toml'':
* Under ''servers.attributes'' section, make sure username is set to ''sAMAccountName'' for Active Directory
* Under ''servers.group_mappings'' section, group_dn should be ''cn=bluejay_adm,cn=Users,dc=ms,dc=ds,dc=uhc,dc=com''
* Editor role: ''cn=github_users,cn=Users,dc=ms,dc=ds,dc=uhc,dc=com''
* Host: ''"ADC21101.ms.ds.uhc.com"''
* ssl_skip_verify = true
* bind_dn: ''"oaptbot@ms.ds.uhc.com"''
* bind_password: '''BlueJay1!'''
* search_filter: ''"(sAMAccountName=%s)"''
* search_base_dns: ''["cn=Users,dc=ms,dc=ds,dc=uhc,dc=com"]''
*
------
==== Jenkins & Maven Installation ====
See [[tech:devops:jenkins:start|Jenkins Topics]] \\
------
===== Bluejay LG Node =====
* Ensure central repository at ''/var/www/html/pub/eptrepo/jmeter'' is populated, and create SSL cert
* Edit the ''create-rmi-keystore.sh'' script, changing the validity to ''99999'' and run to gen cert
* Ensure cert file ''rmi_keystore.jks'' has same ownership/permissions/seattr as other files
* On Jenkins slave, perform basic installation, update, and pkgs for: wget, htop, vim, git, and OpenJDK
* Populate /etc/hosts
* Create ''bluejay'' logingroupadd -g 39092 bluejay
useradd -u 441849 -g 39092 -d /home/bluejay -s /bin/bash -c "Bluejay" -m bluejay
passwd bluejay
chage -I -1 -m 0 -M 99999 -E -1 bluejay
* Extended storage setup:lvcreate -l 100%FREE -n bluejay rootvg
mkfs -t ext4 /dev/rootvg/bluejay
blkid /dev/rootvg/bluejay >> /etc/fstab
vi /etc/fstab
ls -lZd /home/bluejay/.
mkdir -p ~/tmp
mv /home/bluejay/.??* ~/tmp/
chmod 755 /home/bluejay
mount /home/bluejay
chown bluejay:bluejay /home/bluejay/.
chmod 775 /home/bluejay/.
chcon -u unconfined_u -t user_home_dir_t /home/bluejay/.
mv ~/tmp/.??* /home/bluejay/
* Populate ''bluejay'' login's ''~/.ssh'' directory:cd ~bluejay ; mkdir .ssh ; cd .ssh
ssh-keygen -t rsa -f id_rsa -C bluejay@hostname
cp -a id_rsa.pub authorized_keys
chown -R bluejay:bluejay .
chcon -R -u unconfined_u -t ssh_home_t .
chmod 700 . ; chmod 600 *
* Copy public key to central staging location:scp ./id_rsa.pub someone@somewhere:/home/someone/dot-ssh/bluejay_host.pub
* Create ''jenkins'' logingroupadd -g 822 jenkins
useradd -u 990 -g 822 -d /var/lib/jenkins -s /bin/bash -c "Jenkins" jenkins
usermod -a -G bluejay jenkins
usermod -a -G jenkins bluejay
chcon -u system_u -t var_lib_t /var/lib/jenkins/.
chmod 750 /var/lib/jenkins/.
* Populate ''jenkins'' login's ''~/.ssh'' directory:cd ~jenkins ; mkdir .ssh ; cd .ssh
ssh-keygen -t rsa -f id_rsa -C jenkins@hostname
cp -a id_rsa.pub authorized_keys
chown -R jenkins:jenkins .
chcon -R -u unconfined_u -t ssh_home_t .
chmod 700 . ; chmod 600 *
* Copy public key to central staging location, and make sure it gets populated into Bluejay web server's ''bluejay'' login ''~/.ssh/authorized_keys'' file:scp ./id_rsa.pub someone@somewhere:/home/someone/dot-ssh/jenkins_host.pub
* Create Jenkins agent workspace:cd ~bluejay ; mkdir -p jenkins
chown bluejay:jenkins ./jenkins/.
chmod 770 ./jenkins/.
chmod g+s ./jenkins/.
chcon -u system_u -t var_lib_t ./jenkins/.
* Populate Jenkins controller's ''jenkins'' login SSH key into ''bluejay'' login's ''authorized_keys''
* Populate jenkins ''known_hosts'' file on Jenkins host
\\
------
====== Trivia ======
===== Optum-specific Admin Concerns =====
==== UID/GID ====
* msamud1: uid=''7301''
* jenkins: uid=''990'', gid=''822''
* bluejay: uid=''441849'', gid=''39092''
* mosquito: uid=''263407'', gid=''28606''
* canary: uid=''783478'', gid=''31708''
* apache: uid=48, gid=1739
* mantis: uid=''17236'', gid=''?''
* wildfly: uid=''185'', gid=''185'' wildfly: uid=''282'', gid=''28202''
* thorium: gid=''34625''
* perfmgmt: gid=''4035''
==== EPEL ====
## RHEL/CentOS 7 64-Bit ##
# wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
# rpm -ivh epel-release-latest-7.noarch.rpm
''yum --enablerepo=epel info pkgname'' \\
''yum --enablerepo=epel install pkgname''
==== Re-sizing /opt ====
If ''/opt'' happens to be an XFS filesystem, resizing can be done "live". Otherwise, in order to unmount ''/opt'' to manipulate it, all processes holding files open on the filesystem have to be shut down, including:
/etc/init.d/opsware-agent stop
/etc/init.d/vasd stop
service postfix stop
service dbus stop
Edit ''/etc/nsswitch.conf'' to comment out lines with ''vas4'' in them, then ''kill -HUP ////'' \\
Perform the whole thing in reverse when ''/opt'' is resized \\
===== Some Problems/Resolutions =====
==== FIPS-compliant Venafi-generated SSL certs ====
This problem: [[http://openssl.6102.n7.nabble.com/DEK-info-FIPS-openssl-td23289.html]] \\
... is resolved by downloading cert from Venafi in ''PKCS#8'' format \\