Thursday 11 June 2015

Kernel up-gradation on OpenSUSE(13.2) to latest kernel (4.1)

OpenSUSE 13.2 had it's kernel version 3.16.6-2, I have upgraded the latest kernel version 4.1.0-rc7-1. 

Below are the steps involved :

1. Make sure you retain multiple kernel configurations in /etc/zypp/zypp.conf which includes the oldest. 
2. Add kernel HEAD repository and perform distribution upgrade from kernel HEAD repository.
3. Reboot the system.

# tail -2 /etc/zypp/zypp.conf
multiversion = provides:multiversion(kernel)
multiversion.kernels = latest,latest-1,running,oldest
#

Adding repository 'kernel-repo' ..................................................................................................................................[done]
Repository 'kernel-repo' successfully added
Enabled: Yes
Autorefresh: Yes
GPG check: Yes
#

# zypper lr kernel-repo
Alias          : kernel-repo
Name           : kernel-repo
Enabled        : Yes
Priority       : 99
Auto-refresh   : On
Keep Packages  : Off
Type           : NONE
GPG Check      : On
GPG Key URI    :
Path Prefix    :
Parent Service :
Repo Info Path : /etc/zypp/repos.d/kernel-repo.repo
MD Cache Path  : /var/cache/zypp/raw/kernel-repo
#

# zypper dist-upgrade -r kernel-repo
Retrieving repository 'kernel-repo' metadata ------------------------------------------------------------------------------------------------------------------------[\]

New repository or package signing key received:

  Repository:       kernel-repo
  Key Name:         Kernel OBS Project <Kernel@build.opensuse.org>
  Key Fingerprint:  4529410A B52F94C4 03BAB484 ECEEF210 03579C1D
  Key Created:      Wed Apr 22 17:55:51 2015
  Key Expires:      Fri Jun 30 17:55:51 2017
  Rpm Name:         gpg-pubkey-03579c1d-5537934f


Do you want to reject the key, trust temporarily, or trust always? [r/t/a/? shows all options] (r): a
Retrieving repository 'kernel-repo' metadata .....................................................................................................................[done]
Building repository 'kernel-repo' cache ..........................................................................................................................[done]
Loading repository data...
Reading installed packages...
Computing distribution upgrade...

The following NEW package is going to be installed:
  kernel-desktop-4.1.rc7-1.1.gabe587d

1 new package to install.
Overall download size: 48.1 MiB. Already cached: 0 B  After the operation, additional 221.3 MiB will be used.
Continue? [y/n/? shows all options] (y): y
Retrieving package kernel-desktop-4.1.rc7-1.1.gabe587d.x86_64                                                                      (1/1),  48.1 MiB (221.3 MiB unpacked)
Retrieving: kernel-desktop-4.1.rc7-1.1.gabe587d.x86_64.rpm .........................................................................................[done (365.2 KiB/s)]
Checking for file conflicts: .....................................................................................................................................[done]
(1/1) Installing: kernel-desktop-4.1.rc7-1.1.gabe587d ............................................................................................................[done]
Additional rpm output:
Creating initrd: /boot/initrd-4.1.0-rc7-1.gabe587d-desktop
Executing: /usr/bin/dracut --logfile /var/log/YaST2/mkinitrd.log --force /boot/initrd-4.1.0-rc7-1.gabe587d-desktop 4.1.0-rc7-1.gabe587d-desktop
*** Including module: bash ***
*** Including module: warpclock ***
*** Including module: i18n ***
*** Including module: ifcfg ***
*** Including module: drm ***
*** Including module: plymouth ***
*** Including module: btrfs ***
*** Including module: kernel-modules ***
Omitting driver i2o_scsi
*** Including module: resume ***
*** Including module: rootfs-block ***
*** Including module: terminfo ***
*** Including module: udev-rules ***
Skipping udev rule: 91-permissions.rules
Skipping udev rule: 80-drivers-modprobe.rules
*** Including module: systemd ***
*** Including module: usrmount ***
*** Including module: base ***
*** Including module: fs-lib ***
*** Including module: shutdown ***
*** Including module: suse ***
*** Including modules done ***
*** Installing kernel module dependencies and firmware ***
*** Installing kernel module dependencies and firmware done ***
*** Resolving executable dependencies ***
*** Resolving executable dependencies done***
*** Hardlinking files ***
*** Hardlinking files done ***
*** Stripping files ***
*** Stripping files done ***
*** Generating early-microcode cpio image ***
*** Store current command line parameters ***
Stored kernel commandline:
 resume=UUID=963537e9-1bf1-49de-b90c-6227ade69572
root=UUID=940ff654-d7da-43f3-a4c6-ed18ecbb231f rootflags=rw,relatime,space_cache rootfstype=btrfs
*** Creating image file ***
*** Creating image file done ***
Update bootloader...
#
- Finally, reboot is required and you would boot up in the latest Linux Kernel 4.1.
# uname -r
4.1.0-rc7-1.gabe587d-desktop
#

Wednesday 10 June 2015

Glances - Max information in Minimum space #CentOS 7

Glances is a cross-platform curses-based system monitoring tool which aims to present a maximum of information in a minimum of space.It can adapt dynamically the displayed information depending on the terminal size.

Glances is written in Python and uses the psutil library to get information from your system.

Environment : CentOS 7
Installation 
Actually, package exists for CentOS in EPEL repository and install using your favorite package managers. 

#yum install epel-release
#yum install -y glances.noarch

I found this utility very useful as I don't have to type multiple commands to monitor the system, instead all data would be displayed in one single screen, 

CPU information (user, system, and idle programs )
Memory & Swap information 
CPU load for 1min, 5min, 15mins
Total number of process currently running 
Network download/uploads of network connections
Disk read/write speed
Disk usages
Date and time at the right bottom


You can press 'h' hot keys for fine tuning. 


If any one are more interested to know on this utility  here it is, http://glances.readthedocs.org/en/latest/

Simple utility to capture all the data in one screen.

Saturday 6 June 2015

script to build your local YUM repository - CentOS 7

If you had installed your CentOS 7 as Minimal installation and incase if you need to install, update security fixes now and then in your local network, it would be better if it's been configured as a YUM server, saving you internet bandwidth.

readers who would like to create local repository would only need to mount the installation image to the drive and provide the path which they think there is enough free space on the drive to build the repository.

how it works shortly,

checks for the installation image in the drive, if found mount and then copy the contents from installation media to the path where you wanted to build the repository. create the repository file in /etc/yum.repos.d and build the repository. query your repository and then safely unmount the device.

this can be downloaded from the 'github' as well
https://github.com/sunilka/bashrepo/blob/master/localcentosrepo7.sh

# chmod +x localcentosrepo7.sh
#./ localcentosrepo7.sh

code:
#!/bin/bash
#
# Description:
# If there are no requirement for you to pull packages from Internet to installing the packages,
# you can use this script to build your local repository at your desired localtion.

# Summary:
# You are required to mount the installation CD/DVD/ISO image in your drive.
# this script is designed so that it would check image is mounted and would then mount to the '/media' mount point.
# It would copy all the contents from the media to your desired folder where you wanted to build your repository
# YUM pointed also added to the repository mentioned which comes pre-defined in the script.
# creates and builds your repository.
# checks are you able to query your repository
# Finally, unmounts the your media which is mounted
# you can remove your CD/DVD/ISo from the drive.

# this script is designed and tested on CentOS7


# Author: sunlnx
# email : sunlnx@gmail.com
#
##################################################################################################################

LOCALREPO=localrepo
REPONAME=centos7
LOGFILE=/tmp/centosrepo_output.log

# Check your DVD is available in the drive
function check_drive {
blkid /dev/sr0 >/dev/null
if [ $? -eq 0 ]
then
return 0
else
return 1
fi
}

# mount your DVD to some temp mount point
function mount_drive {

#fucntion call to check_drive
check_drive

#getting the return status from the fucntion called.
DRIVESTAT=$?

#mount DVD/ISO to some mount point on successful

if [ $DRIVESTAT -eq 0 ]
then
echo "checking for /media as mount point"
if [ -d "/media" ]
then
echo "media exists && attempting to mounting image...."
mount /dev/sr0 /media 2>/dev/null
[ $? -eq 0 ] && echo "image mount successful!";echo || echo "image unable to mount";echo
else
echo "/media doesn't exist, creating and mounting image";echo
mkdir /media
mount /dev/sr0 /media >/dev/null;echo
fi

else
echo "Please insert the DVD/ISO image... exiting .."
exit
fi

}

#function call for mounting the media to mount point
mount_drive

#if you had installed minimal installation on the server, then you need to install the 'deps' package before
#creating the repository
echo --------------------------------
echo " Logs written @ $LOGFILE"
echo --------------------------------

echo;
echo "Installing the dependencies before creating reposiotry" 2>&1 | tee $LOGFILE
echo;
rpm -ivh /media/Packages/libxml2-python-2.9.1-5.el7.x86_64.rpm >>$LOGFILE 2>&1
rpm -ivh /media/Packages/deltarpm-3.6-3.el7.x86_64.rpm >>$LOGFILE 2>&1
rpm -ivh /media/Packages/python-deltarpm-3.6-3.el7.x86_64.rpm >>$LOGFILE 2>&1
rpm -ivh /media/Packages/createrepo-0.9.9-23.el7.noarch.rpm >>$LOGFILE 2>&1
echo;

#dump your packages from DVD to the folder which has capacity of 4.2GB in your hard disk space
echo "Enter your path to create your repository"
read DIR
echo

#on your mentioned path, creating directory localrepo in which all packages do exists
echo "creating folder '$LOCALREPO' in $DIR"
mkdir $DIR/$LOCALREPO
echo


#check capacity on the disk to store packages
read -n1 -p "$DIR has 4.2G of free space in the Disk or LV ?[y/n]:" ch
#echo "$DIR has 4.2G of free space in the Disk or LV ?:[y/n] "
#read ch
echo
case $ch in
y|Y) echo "copying packages to $DIR/$LOCALREPO"
cp -arvf /media/* $DIR/$LOCALREPO >>$LOGFILE 2>&1
[ $? -eq 0 ] && echo "copy completed" ;echo;
;;

n|N) echo "script aborted"
exit
;;

*)echo "Invalid option, re-run script"
exit
;;

esac

cat >/etc/yum.repos.d/$REPONAME.repo <>$LOGFILE 2>&1
echo;echo "repo build completed"

#cleaing the repository
echo "refreshing repository..";echo
yum clean all >>$LOGFILE 2>&1
echo "clean completed.." ;echo

#Listing repositories
echo "Listing repositories";echo
yum list all
yum grouplist

#unmount the mounted media
echo "umounting the /media";echo
umount /media
[ $? -eq 0 ] && echo "filesystem unmounted successfully !!" || echo "media unsuccessful"
echo;echo "it's safe to remove your installation image from the drive !"
echo;
echo "LOCAL YUM REPOSITORY CREATED & SUCCESSFUL !!! :) "

Thursday 4 June 2015

Monitor your disks/filesystems

Here is the script which will monitor the disk space and will generate alert once the file system usage has crossed WARING or CRITICAL threshold. 

I have re-directed the alert to the local domain and it can be configured to your inbox. 

script is self explanatory and can be found here :

#!/bin/bash
#this will monitor the disk uaage of the partitions and would generate an e-mail to the concerned. alert had been set to below 90 as WARNING and ABOVE 95 as CRITICAL

#Change your domain name according to your domain's & email's to the user account
ADMIN=root
WARNING=90
CRITICAL=95

#sda1 is the boot partition and /dev/sda2 being swap parition which I want to exclude
#you can also add other partitions if you don't want to monitor
EXCLHDD=/dev/sda1 /dev/sda2

function disk_monitoring()
{
while read output
do
#echo $output
usedpar=$(echo $output | awk '{print $1}' | cut -d'%' -f1)
tpar=$(echo $output | awk '{print $2}')
if ([ $usedpar -eq $WARNING ] && [ $usedpar -lt $CRITICAL ])
then
echo "WARNING|FILESYSTEM - $tpar|$usedpar%|$HOSTNAME" | \
mail -s "WARNING|ALERT|Housekeep the FileSystem" $ADMIN@
elif [ $usedpar -ge $CRITICAL ]
then
echo "CRITICAL|FILESYSTEM - $tpar|$usedpar%|$HOSTNAME" | \
mail -s "CRITICAL|ALERT|Filesystem running out of space" $ADMIN
fi
done
}
if [ "$EXCLHDD" != "" ]
then
df -H | grep -vE "^Filesystem|tmpfs|$EXCLHDD" | awk '{print $5 " " $6}' | disk_monitoring
else
df -H | grep -vE "^Filesystem|tmpfs"| awk '{print $5 " " $6}' | disk_monitoring
fi