Saturday, August 31, 2019

Apache Maven installation on Linux

How to install Maven on CentOS/RHEL/Fedora?

Hello dear DevOps Hunter! In this exciting post we will discuss on the most popular build tool 'Maven'. Maven is an Open source project under the Apache Licence. It is one of the best speeding software project management tool.

Maven 3 installation on CentOS RHEL Fedora


Using Apache Maven we can do the following tasks:
  • extract source code
  • build the package
  • deploy to target
  • test the application basic sanity
The trending build tool for Java enterprise level Projects, it works based on 'pom.xml' file a Project Object Model (POM). The greatest advantage of Maven is plugin support for libraries. 

Install Maven

There are two basic distributions of Maven installers: binary and source archives. If you need the installation should be done quick then use the binary installer, where you need simple extraction of archives. On the other hand, source archives will take time and three steps you need to follow: configure, make and make install. So here I am selecting the first method - binary archive installation.

Tip: Always visit the maven official site where you can find the latest version archives.

Prerequisites:

  • Your machine must have archiving tools to extract the maven installers. There are 4 downloads choices for maven. 
  • Any JRE (Oracle JRE/OpenJRE) must be installed

Steps-by-Step Maven 3 installation 

Step 1: First download in /tmp, Then, navigate where you want to install the maven build tool.

cd /tmp
wget http://mirrors.estointernet.in/apache/maven/maven-3/3.6.1/binaries/apache-maven-3.6.1-bin.tar.gz

Step 2: Now installation directory

[root@mydev tmp]# cd /opt
[root@mydev opt]# tar -zxvf /tmp/apache-maven-3.6.1-bin.tar.gz
ln -s apache-maven-3.6.1 maven

Best Practice: To make more easy to use the maven installation path soft link created and the same will be used in the environment setup. Step 3: Set the Environment variables in the common profile location

vi /etc/profile.d/maven.sh

#Maven environment setting
export M3_HOME=/opt/maven
export PATH=$M3_HOME/bin:$PATH

Save this Maven environment setting file.

Verify the installation


Step 4: Verify the Maven installation in different users:

 mvn --version

This will give you the four things: Maven Path, Java vendor, JRE Path, Default locale, OS related full details.

First root user, where Open JRE in use

mvn run from root user

 Next switch to 'oracle' user where Oracle JRE in use.

mvn detecting Oracle JRE
References:

Wednesday, August 28, 2019

Jenkins Installation on CentOS7/RHEL/Fedora and Ubuntu

Hello DevOps enthusiast, I'm here with another interesting article on one more DevOps automation tool that is Jenkins CI, where I've explored all possible new learnings which will be used by DevOps.

Jenkins installation on CentOS or RHEL or Fedora

Simple instructions I've made for reference, which I've used.

What are the Pre-requisites for the Jenkins installation

  • Good speed of Internet
  • Either of the platforms will be working:
    • Vagrant installed VirtualBox installed to pull CentOS7 box
    • AWS RHEL instance up and running 

Bring up the CentOS/7 box (optional)

Note: Ignore this section if you have a Cloud instance ready.

Step 1: Create your own CentOS7 vagrant box with the following DSL Vagrantfile:

Vagrant.configure(2) do |config|
  config.vm.box = "centos/7"
  config.vm.boot_timeout=600
  config.vm.host_name = "mydev.devopshunter.com"
  config.vm.network "private_network", ip: "192.168.33.100"
  config.vm.synced_folder "C:/Softwares", "/u01/app/software"
  config.vm.provider "virtualbox" do |vb|
    vb.cpus = "2"
    vb.memory = "2048"
  end
end

Now based on the above Vagrantfile, bring up the vagrant CentOS box:

vagrant up

Now all set to go, Connect to the vagrant box using PuTTY, SSH-> Auth -> centos.ppk file. Create an aws instance and connect it with the putty or git bash client.

Step 2: Switch to root user, download the Jenkins installer using wget, you can find the stable and latest version of Jenkins RPM File here you can see the latest at the bottom of the page. and the installation with rpm command as:
sudo -s
#install wget if not installed on cloud instances
yum install wget epel-release daemonize -y

# Latest version of Jenkins requires daemonize package dependency
wget https://pkg.jenkins.io/redhat/jenkins-2.192-1.1.noarch.rpm
rpm -ivh jenkins-2*.rpm
Jenkins installation using rpm option

Jenkins installation on Ubuntu

Note: This section added in the year July 2022.
Recent changes in the Ubuntu publick key authentication on the debain package manager.
sudo apt update
sudo apt install default-jre
curl -fsSL https://pkg.jenkins.io/debian/jenkins.io.key | sudo tee   /usr/share/keyrings/jenkins-keyring.asc > /dev/null
echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc]   https://pkg.jenkins.io/debian binary/ | sudo tee   /etc/apt/sources.list.d/jenkins.list > /dev/null
sudo apt-get update
sudo apt-get install jenkins
systemctl status jenkins

How to install Open JDK on CentOS?


Once the Jenkins installation completed we need to run with JRE, We have two choices - Open JRE, or Oracle JRE to run Jenkins CI. JRE is part of JDK so let's install Open JDK. Using `yum` repo we can install the OpenJDK which also includes Open JRE.

yum install -y java 
#Check Java installation successful
java -version

Now we are done with the installation part move to bring up the Jenkins CI service.

Starting your Jenkins CI master on CentOS7

Every RHEL flavor Linux versions support service command to run the service in the background and will be executed when a software added to the system, systemctl will help us to control it for start or stop or restart and to check the status of the service.

service jenkins start
chkconfig jenkins on


Let's check the status of the Jenkins service:

service jenkins status -l

Check the Jenkins service status

How to accessing your Jenkins CI URL?


By default Jenkins runs on the 8080 port combination with the IP address as shown:

http://<jenkins ip> :8080/

On my Vagrant box I can access the Jenkins URL as an example:
http://192.168.33.100:8080/


Jenkins first-time UI
Wow!! Lovely, We are ready to operate on Jenkins now you can set the value present Password in the given path and copy it and reset the user profile and password values which will be overrides the default/one time password.

How to create First Admin user on Jenkins?

Here is the sample user profile setting details:

  • User name: ci_admin
  • Password : welcome1 [you can provide much stronger one for your CI project]
  • Confirm Password : welcome1
  • Full name : Continuous Integration admin
  • Email:  ignore [optional]
Create First Admin User sample


Click on the '   Save and Continue  ' button then it navigates to 'Instance Configuration' page, shows Jenkins URL.

How to configure Remote Agent using WebSocket?

1. Please enter the "Name" that uniquely identifies an agent in the Jenkins domain.
2. Enter Remote root directory such as /workspace
3. Enter the "Label" value this is the hook to run remotely any build.
4. Under Launching method 
Launch agent by connecting it to the controller

choose -> Use WebSocket tic the checkbox.

Jenkins Slave WebSocket Configuration


Save the configuration by hitting "save" button.

Slave configuration you can use the following shell script:
#!/bin/bash

# Ensure JDK installed on the agent box
AGENT_CMD='java -jar agent.jar -jnlpUrl http://mstr:8080/computer/node1/jenkins-agent.jnlp -secret 5650304d6aae3ebf424479e20978a7cd1408e3f539e243cbd309abbccd88a3 -workDir "/tmp/jenkins"'
nohup $AGENT_CMD > node1-vt-agent.out 2>&1 &

# print the log output
tailf node1-vt-agent.out
  

Executed on node1 example screenshot
Enjoy the Continuous integration fun with Jenkins!!

Saturday, August 24, 2019

Git Installation on CentOS RHEL Oracle Linux

Hey! DevOps engineer, In this blog post I would like to share my discussion target as 'Git for Beginners'. Here I would like to start the Git Installation and configuration on CentOS 7 or Oracle Linux or RHEL all looks like the same process. The configuration steps you can also run on the Windows Git Bash as well.

Git Installation on CentOS
This is a Very Simple process, let's do the experiment now. The pre-requisite is VM or Cloud instance ready to connect. The following experiment executed on the CentOS7 Virtual Box configured on the Vagrantfile.

1. Git Installation in RHEL/CentOS/Oracle Linux 

Install Git from Source Select the latest stable version from the Download location: https://mirrors.edge.kernel.org/pub/software/scm/git/ 

Before you begin, first you need to install required software dependencies from the default repositories, along with the utilities that needed to build a binary from source:
 yum groupinstall -y 'Development Tools';
 yum install -y autoconf curl-devel expat-devel gettext-devel openssl-devel \
 	perl-CPAN zlib-devel gcc make perl-ExtUtils-MakeMaker cpio perl-CPAN vim

Next: After you have installed required software dependencies, go to the official Git release page and grab the latest version and compile it from source using following series of command: Note here on the cloud such as AWS free-tier RHEL 8 instance we don't have 'wget' command installed so lets install it. This is like the commandline browser and download tool.
yum install -y wget 

2. Download & Extract the git source code

We can use the Unix download manager - wget command for download the git source code to pull as:
wget https://www.kernel.org/pub/software/scm/git/git-2.23.0.tar.gz 

Extract the downloaded file:
tar zxf git-2.23.0.tar.gz 

3. Compile and make install

Now the installation of the Git on your Linux: configure the git source code from the folder
cd git-2.23.0
./configure
make # Compile the source code
make install prefix=/usr install

4. Verify the git installation

Once all the above steps are executed, run the git version command to verify whether the Git application is successfully installed or not.

git --version

Hope you enjoyed this post, You may also wish to visit the 'Uninstall Git from CentOS/RHEL/OL'.
Next learning - Git Configurations

Try trick on your Git bash or git client see the change! Hope you enjoyed this learning don't keep it with you share it to your friends!

Thursday, August 22, 2019

HOWTO uninstall GIT old version?

HOW to uninstall GIT old version on CentOS7?

Hello everyone!! This is a common requirement of every GitOps engineer task.  After a while the older version you may not feel to continue once you see the latest version same way for Git.

Uninstall Git from CentOS

Assuming that you have Linux box already Git installed and want to remove it due to:

  1. Git long back on a CentOS7. 
  2. The installed version with yum command might be pulled older version due to repo not sync with the latest Git changes 
First you need to check your git version using

git --version

Let see this Example:
[vagrant@mydev ~]$ git --version
git version 1.8.3.1

Here to uninstall you need root access, switch to root user
sudo -i

Sample
 [vagrant@mydev ~]$ sudo -i [root@mydev ~]#

 If you installed git by using yum package manager then same will be used to remove it. yum remove git

[root@mydev ~]# yum remove git
Loaded plugins: fastestmirror
Resolving Dependencies
--> Running transaction check
---> Package git.x86_64 0:1.8.3.1-20.el7 will be erased
...
Dependency Removed:
  perl-Git.noarch 0:1.8.3.1-20.el7

Complete!

Confirm this by running once again version command.
[root@mydev ~]# git --version
-bash: git: command not found
You might be also interested to learn more on Git

  1. Installation of Latest Git on CentOS7
  2. Git Commands
  3. Git Branches
  4. Git Merge

 Questions:
1. What if the Git version changes do that repositories also gone?
2. How do we migrate the Git repo from Git's older version to new version?
3. How do we migrate Git repo to GitLab/any other SCM tool?

Thursday, August 1, 2019

Installation of Docker CE for Docker Host and Docker Client on Ubuntu 19.04

In this blog-post, I would like to discuss the detailed steps that involved for install the latest version of  Docker as Learning Lab on your own laptop or desktop. The same set of exercise can be done on any cloud instance as well.

Here is the ideology for setting up a lab in your laptop both docker server and docker client in different VirtualBox. Hope this picture gives more details!

Docker Host and Docker Client setup in a Laptop

Docker Installation prerequisites

The list of the prerequisites are :

  • Ubuntu 19.04 64bit OS [ 16.xx above recommended ] 
  • User with sudo privileges vagrant by default 
  • Vagrant Installed
  • Oracle VirtualBox Installed 
  • Good speed internet 

Let's get started now with the following sequence of steps that could carry out to build Two Docker server and Docker Client on the Ubuntu 19.04 on VirtualBox. Docker Host runs on 192.168.33.250 and the Docker client runs on the 192.168.33.251 IP address.

Knowing the IP Address in Linux 

Step 1: Creating Ubuntu Disco VirtualBoxes with Vagrant

Create the Vagrant VirtualBoxes for Docker Host and Docker Client with the following lines in Vagrantfile:

# Ubuntu
Vagrant.configure("2") do |config|
  config.vm.provision "shell", inline: "echo Docker host, client vm creation script"
  config.vm.provider "virtualbox" do |vb|
    vb.memory = "4096"
   end

  config.vm.define "dockerhost" do |dockerhost|
    dockerhost.vm.box = "roboxes/ubuntu1904"
    dockerhost.vm.network "private_network", ip: "192.168.33.250"
    dockerhost.vm.hostname = "dockerhost.test.com"
  end

  config.vm.define "dockerclient1" do |dockerclient1|
    dockerclient1.vm.box = "roboxes/ubuntu1904"
    dockerclient1.vm.network "private_network", ip: "192.168.33.251"
    dockerclient1.vm.hostname = "dockerclient1.test.com"
  end
end
You can bring up the vagrant boxes by running the:
vagrant up

Now connect with the PuTTY with the two IP addresses which are defined in the Vagrantfile.
Login with 'vagrant' user, Check the operating system version in Ubuntu we can get it by lsb_release COMMAND

lsb_release -a

After confirming the OS version we can proceed to install the docker. In regular Ubuntu, you can proceed for update the Software Repositories
  • As usual, it’s a good idea to update the local database of software to make sure you’ve got access to the latest revisions.
  • Therefore, open a terminal window and type:
sudo apt-get update
  • Allow the operation to complete.



Step 2: Uninstall Old Versions of Docker if exists

Use the following command to remove the existing docker from the Ubuntu:

sudo apt-get remove docker docker-engine docker.io


Next, it’s recommended to uninstall any old Docker software before proceeding.

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

To get the latest repo for Debian packages, as Ubuntu uses the deb kernel

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu  $(lsb_release -cs)  stable"


Step 3: Install Docker

Here we have two different options, To install Docker on Ubuntu, in the terminal window enter the command:

 sudo apt install docker.io -y

Above command will install the older version because it was updated for Ubuntu once in a year. alternatively, you can use the following command to install Docker CE latest version for the current Ubuntu suitable version.

sudo apt-get install docker-ce -y

Validate the docker version installation with the following command:

sudo docker --version

To more details about server and client versions of docker-engine
sudo docker version

The following execution output:

Docker CE installation on Ubuntu 19.04

Test the Docker installation

The following basic docker container commands help us to understand everything is working fine on this container engine.
docker run hello-world
docker image ls  #lost the image that was downloaded
docker container ls -all # list the containers
docker container --help

Execution output as follows:

docker container commands

 Step 4: Start and Automate Docker

The Docker service needs to be set up to run at startup. To do so, type in each command followed by entering:

sudo systemctl start docker
sudo systemctl enable docker

The list of commands used on the two terminals(docker host and docker client) to install docker on the Ubuntu are:

sudo apt-get remove docker docker-engine docker.io
apt-get update
apt-get install apt-transport-https ca-certificates curl software-properties-common -y
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu  $(lsb_release -cs)  stable"
apt-get update
apt-get install docker-ce
docker --version
docker version

Dedicated user for docker operations

Everytime when you run the docker command you need to use the 'sudo' before it. To avoid this, we can configure a Unix user dedicated for docker operations then, the user must be a member of  'docker ' group. This might be a bit tricky but useful, it gives more flexibility to run the docker related commands.

Step 1: Switch to super user make a directory that could be used as home directory, add user and execute the following commands
 sudo -i
 mkdir /u01/docker
 useradd -s /bin/bash -d /u01/docker -g docker docker
 passwd docker
 chown docker:docker /u01/docker

The trouble with failure in name resolution

This could be strange, but when we tried to run the docker container on the DockerHost or on DockerClient got the same message as :
root@dockerhost:~# ERRO[2019-08-02T23:43:48.602072101-07:00] Not continuing with pull after error: error pulling image configuration:                                   Get https://production.cloudflare.docker.com/registry-v2/docker/registry/v2/blobs/sha256/fc/fce289e99eb9bca977dae136fbe2a82b6b7d4c3724                                  74c9235adc1741675f587e/data?verify=1564817623-vxb615oMpsW7Kmp%2BJgQ8lfIOSmI%3D: dial tcp: lookup production.cloudflare.docker.com: Tem                                  porary failure in name resolution


After brainstorming, looking into the multiple communities, git pages, and StackOverflow answers finally reached to a fix as updating the resolve.conf file with following:

  1. the search line include docker.com because the docker pull uses this domain name
  2. include 8.8.8.8 nameserver to have name resolving capability to the VM
  3. include nameserver as per the IP address used for Docker Host

First, temporarily add a known DNS server to your system.
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf > /dev/null
apt -y install openresolv
mkdir -p /etc/resolvconf/resolv.conf.d
echo nameserver 8.8.8.8 >> /etc/resolvconf/resolv.conf.d/head
echo 'search docker.com' | sudo tee -a /etc/resolvconf/resolv.conf.d/head
echo 'nameserver 192.168.1.XXX' | sudo tee -a /etc/resolvconf/resolv.conf.d/head
resolvconf --enable-updates
resolvconf -u

Command execution changes
After resolved you can proceed to play with Docker Client.

Playing within Docker Client on Ubuntu 19.04


You can run a docker command with referring to DockerHost using -H option.
docker -H tcp://192.168.33.250:2375 images

You can try to get the images it will show nothing docker client when you do not mention -H option or DOCKER_HOST undefined

docker images

First, determine that docker deamon running in the Docker Host. In the Docker client, defining the DOCKER_HOST to tell the docker CLI we will use the remote Docker Host by specifying tcp://[docker host ip]:[deamon port]
export DOCKER_HOST=tcp://192.168.33.250:2375

Now all set to run docker commands in Docker Client VM, we can able to check the images list without -H option now.
docker images

We can run a container but actually, it will connect to the Docker Host, instead of running in Docker Client.
docker run alpine

Verify this with listing images, on both will show the same list because actual image downloaded in the DockerHost VM.
docker images

Play within Docker Client on Ubuntu 19.04

Docker CE installation on CentOS7


Here we have snippet of instructions to install Docker-ce on CentOS 7.
sudo -E yum-config-manager --add-repo "$DOCKERURL/centos/docker-ce.repo"
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum-config-manager --enable docker-ce-edge
yum-config-manager --enable docker-ce-test
yum install -y docker-ce
docker -v
usermod -aG docker vagrant
systemctl start docker
systemctl enable docker
systemctl status docker
docker info
docker run hello-world

Takeaways from this experiment

Two important takeaways from this experiment are:
1> Docker deamon will be running with 'dockerd' not as 'docker deamon'
.ps aux | grep "docker daemon" # OLD 
2> Docker default port 2376 earlier, new one is 2375 3> If docker.com is not in searchable dns then manually need to add in the resolv.conf file by updating head file.

You might be intrested to read similar article for CentOS, We have already have a full article on 'How to install docker on CentOS7 box'. Official Reference guide:

https://docs.docker.com/v17.09/get-started/

Categories

Kubernetes (24) Docker (20) git (13) Jenkins (12) AWS (7) Jenkins CI (5) Vagrant (5) K8s (4) VirtualBox (4) CentOS7 (3) docker registry (3) docker-ee (3) ucp (3) Jenkins Automation (2) Jenkins Master Slave (2) Jenkins Project (2) containers (2) docker EE (2) docker private registry (2) dockers (2) dtr (2) kubeadm (2) kubectl (2) kubelet (2) openssl (2) Alert Manager CLI (1) AlertManager (1) Apache Maven (1) Best DevOps interview questions (1) CentOS (1) Container as a Service (1) DevOps Interview Questions (1) Docker 19 CE on Ubuntu 19.04 (1) Docker Tutorial (1) Docker UCP (1) Docker installation on Ubunutu (1) Docker interview questions (1) Docker on PowerShell (1) Docker on Windows (1) Docker version (1) Docker-ee installation on CentOS (1) DockerHub (1) Features of DTR (1) Fedora (1) Freestyle Project (1) Git Install on CentOS (1) Git Install on Oracle Linux (1) Git Install on RHEL (1) Git Source based installation (1) Git line ending setup (1) Git migration (1) Grafana on Windows (1) Install DTR (1) Install Docker on Windows Server (1) Install Maven on CentOS (1) Issues (1) Jenkins CI server on AWS instance (1) Jenkins First Job (1) Jenkins Installation on CentOS7 (1) Jenkins Master (1) Jenkins automatic build (1) Jenkins installation on Ubuntu 18.04 (1) Jenkins integration with GitHub server (1) Jenkins on AWS Ubuntu (1) Kubernetes Cluster provisioning (1) Kubernetes interview questions (1) Kuberntes Installation (1) Maven (1) Maven installation on Unix (1) Operations interview Questions (1) Oracle Linux (1) Personal access tokens on GitHub (1) Problem in Docker (1) Prometheus (1) Prometheus CLI (1) RHEL (1) SCM (1) SCM Poll (1) SRE interview questions (1) Troubleshooting (1) Uninstall Git (1) Uninstall Git on CentOS7 (1) Universal Control Plane (1) Vagrantfile (1) amtool (1) aws IAM Role (1) aws policy (1) caas (1) chef installation (1) create deployment (1) create organization on UCP (1) create team on UCP (1) docker CE (1) docker UCP console (1) docker command line (1) docker commands (1) docker community edition (1) docker container (1) docker editions (1) docker enterprise edition (1) docker enterprise edition deep dive (1) docker for windows (1) docker hub (1) docker installation (1) docker node (1) docker releases (1) docker secure registry (1) docker service (1) docker swarm init (1) docker swarm join (1) docker trusted registry (1) elasticBeanStalk (1) global configurations (1) helm installation issue (1) mvn (1) namespaces (1) promtool (1) service creation (1) slack (1)