Installing Zabbix Server on Centos6

Zabbix as stated on official website is an “enterprise-level software designed for monitoring availability and performance of IT infrastructure components”.
It’s handy if you need to monitor a handful of servers and supports most major linux distributions, Windows, VMware and Java Applications. It’s also fairly easy to setup and understand with a short learning curve offering many built in “scenarios” and fancy graphs. I personally prefer it over other similar solutions like Nagios.
So let’s go through installing and configuring. There are two options, you can either use the official guide where you’ll have to go through all the steps and manually setup things or use a fancy ansible script and do things automagically! We’ll use the ansible script to make our lives easier.
Ansible is an automation tool that is able to deploy and configure software on multiple hosts simultaneously. Comparing it to other similar tools (chef, puppet, etc.) i find it much easier to read, write and maintain, has a big set of premade scripts that are expanding all the time at ansible galaxy and is agentless. All you need is ssh access to your machines. So let’s go through installing ansible and running our playbook.
You can install ansible on any machine you’d like and we’ll run the playbooks from there. On Fedora you can install it through the official repos with

sudo yum install ansible -y

We’ll use a premade playbook that i’ve found on ansible galaxy that installs zabbix server and agent on a Centos 6 system with MySQL and apache. First fetch the playbook.

sudo ansible-galaxy install akamine.c6-zabbix

Then edit the default configuration here /etc/ansible/roles/akamine.c6-zabbix/defaults/main.yml and follow the below steps.

 mkdir zabbix-ansible
cd zabbix-ansible
vi hosts
vi zabbix.yml
ansible-playbook -i hosts zabbix.yml

On the hosts file you’ll put the hosts you wish the playbook to run.
An example is as follows


And on zabbix.yml

- hosts: all
  - akamine.c6-zabbix

When playing the book you should see it output what is doing similar to this:

akis@localhost ansible$ ansible-playbook -i zabbix.yml 

PLAY [all] ******************************************************************** 

GATHERING FACTS *************************************************************** 
ok: []

TASK: [akamine.c6-zabbix | install libselinux-python] ************************* 
changed: []

TASK: [akamine.c6-zabbix | install MySQL-python] ****************************** 
changed: []

TASK: [akamine.c6-zabbix | change selinux mode to permissive] ***************** 
changed: []

TASK: [akamine.c6-zabbix | disable iptables] ********************************** 
changed: []

TASK: [akamine.c6-zabbix | install ntp] *************************************** 
changed: []

TASK: [akamine.c6-zabbix | Start and enable ntp service] ********************** 
changed: []

TASK: [akamine.c6-zabbix | install epel repo rpm key] ************************* 
changed: []

TASK: [akamine.c6-zabbix | setup epel repo] *********************************** 
changed: []

TASK: [akamine.c6-zabbix | install htop] ************************************** 
changed: []

TASK: [akamine.c6-zabbix | install tmux] ************************************** 
changed: []

TASK: [akamine.c6-zabbix | install mysql server] ****************************** 
changed: []

TASK: [akamine.c6-zabbix | enable mysql server] ******************************* 
changed: []

TASK: [akamine.c6-zabbix | set innodb_buffer_size in /etc/my.cnf] ************* 
changed: []

TASK: [akamine.c6-zabbix | enable event_scheduler in /etc/my.cnf] ************* 
changed: []

TASK: [akamine.c6-zabbix | install zabbix rpm key] **************************** 
changed: []

TASK: [akamine.c6-zabbix | setup zabbix repo] ********************************* 
changed: []

TASK: [akamine.c6-zabbix | install zabbix-server-mysql] *********************** 
changed: []

TASK: [akamine.c6-zabbix | install zabbix-web-mysql] ************************** 
changed: []

TASK: [akamine.c6-zabbix | install zabbix-agent] ****************************** 
changed: []

TASK: [akamine.c6-zabbix | create database zabbix] **************************** 
changed: []

TASK: [akamine.c6-zabbix | ensure mysqld is running] ************************** 
ok: []

TASK: [akamine.c6-zabbix | initialize zabbix database] ************************ 
changed: [] => (item=schema.sql)
changed: [] => (item=images.sql)
changed: [] => (item=data.sql)

TASK: [akamine.c6-zabbix | copy sql scripts for database partitioning] ******** 
changed: [] => (item=alter_table_indexes.sql)
changed: [] => (item=stored_procedures.sql)
changed: [] => (item=event_schedule.sql)

TASK: [akamine.c6-zabbix | alter table indexes] ******************************* 
changed: []

TASK: [akamine.c6-zabbix | add stored procedures for partitioning] ************ 
changed: []

TASK: [akamine.c6-zabbix | add partitioning event to schedule] **************** 
changed: []

TASK: [akamine.c6-zabbix | create mysql user] ********************************* 
changed: []

TASK: [akamine.c6-zabbix | modify /etc/zabbix/zabbix_server.conf] ************* 
changed: []

TASK: [akamine.c6-zabbix | modify /etc/httpd/conf.d/zabbix.conf] ************** 
changed: []

TASK: [akamine.c6-zabbix | add e-mail sending script to /usr/lib/zabbix/alertscripts] *** 
changed: []

TASK: [akamine.c6-zabbix | enable httpd] ************************************** 
changed: []

TASK: [akamine.c6-zabbix | enable zabbix server] ****************************** 
changed: []

TASK: [akamine.c6-zabbix | enable and start zabbix agent] ********************* 
changed: []

NOTIFIED: [akamine.c6-zabbix | restart zabbix server] ************************* 
changed: []

NOTIFIED: [akamine.c6-zabbix | restart httpd] ********************************* 
changed: []

NOTIFIED: [akamine.c6-zabbix | restart mysqld] ******************************** 
changed: []

PLAY RECAP ********************************************************************    : ok=37   changed=35   unreachable=0    failed=0

Next all you need to do is login to your new zabbix server instance on with username Admin and pass zabbix.
Will go through configuring the server and installing agents in a later post.
Happy playing around with zabbix!

PS: Some quick notes..
The ansible playbook installs mysql-server with default options, meaning no root password.
You can go further editing the playbook adding these to zabbix-database-init.yml

- name: Update mysql root password for all root accounts
  mysql_user: name=root host={{ item }} password=huhu
  with_items: [ '{{ ansible_hostname }}', '', '::1', 'localhost' ]

- name: Delete anonymous mysql user
  mysql_user: user="" host={{ item }} state=absent
  with_items: [ '{{ ansible_hostname }}', 'localhost' ]

- name: Remove test database
  mysql_db: db=test state=absent

This will setup a password for root account and remove test database.
I’ll probably do a fork of the repo and add some bits and pieces to it and update this post but for the time being this should do.


#alternative, #centos, #linux, #monitor, #monitoring, #nagios, #server, #zabbix

Enabling automatic updates on Centos6.

First install package yum-cron.

sudo yum -y install yum-cron

Then edit /etc/sysconfig/yum-cron if needed. The options are self-explanatory.
Finally to start the service and enable it to auto start on boot issue the following commands.

sudo service yum cron-start
sudo chkconfig yum-cron on

Updates will be run daily.

#centos, #linux, #updates

Bash: Script to monitor hard disk health and send an e-mail on error.

Here is a simple script to test for reallocated sector count and report through mail if it finds any.
Reallocated sectors means your disk has sectors where it can’t read/write thus it uses a reserved space to reallocate those sectors.
In general reallocated sectors are bad news for your disk and you should consider a backup and send to warranty.
The script reads the smart value and reports. It should be self explanatory to use it just type ./ nameofthehost. Afterwards set a cron to run daily.
Credits to Thorsten Rhau for the base script.

# This script checks the health of disks

#Define a friendly name for this machine

#Location to temporary store the error log
#Set default for not sendig mails

# Disks to check

# Setting up path

# variable containing all needed commands
needed_commands="smartctl awk mail"

# Checking if all needed programs are available on system
for command in $needed_commands
  if ! hash "$command" > /dev/null 2>&1
    echo "$command not found on system" 1>&2
    exit 1

# Checking disk
for disk in $disks
  # Creating a array with results
  declare -a status=(`smartctl -a -d ata $disk | awk '/Reallocated_Sector_Ct/ || /Seek_Error_Rate/ { print $2" "$NF }'`)
  # Checking that we do not have any Reallocated Sectors
  if [ "${status[1]}" -ne 0 ]
    echo "$mname Warning: Disk $disk has errors! ${status[0]} ${status[1]} ${status[2]} ${status[3]}. Following complete smartctl output." >> diskerror.log
    smartctl -a -d ata $disk >> $logloc/diskerror.log
    failed=("${failed[@]}" "$disk")

#Send an e-mail if needed containing the failed diks (fdisks) info.
if [ $sendm == 1 ]; then
  mail -s "$mname Disks $fdisks are about to fail." user@localhost < $logloc/diskerror.log
  rm -rf $logloc/diskerror.log

#bash-2, #disk, #hard-disk, #health, #mail-2, #s-m-a-r-t, #script, #sda, #smart, #smartctl

Bash: A very basic folder and MySQL bash backup script.

Here is a basic bash script to backup a folder and a MySQL database.

#Backup script for www and mysql.

DATE=`date +%-Y%-m%-d`

# The function to actually do the backup.
function dobackup {
	echo "Starting backup for" $user
	echo "Backing up" $backup_source
	tar -cvzPf $backup_path$DATE-$user.tar.gz $backup_source
	echo "Backing up MySQL database.."
	mysqldump --user=$user --password=$password --host=$host $db_name > $backup_path/$db_name-$date.sql
	gzip $backup_path/$db_name-$date.sql
	echo "Backup done"

# Script should be run with arguement dobackup if we want to backup or delete if we want to delete todays backup.
if [ $1 = "dobackup" ] ; then
elif [ $1 = "delete" ] ; then
	rm -f $backup_path$DATE-$user.tar.gz
  	echo "Deleted old backup"

Then we crontab this accordingly.

Alternatively you could add something like this to delete files older than 2 days on the backup path.

#Delete files older than 2 days
find $backup_path/* -mtime +2 -exec rm {} \;

#backup, #bash-2, #mysql, #script

[Ubuntu] WARNING: gnome-keyring:: couldn’t connect to: /tmp/keyring-*****/pkcs11


sudo gedit /etc/xdg/autostart/gnome-keyring-pkcs11.desktop





#gnome, #keyring, #linux, #openbox, #ubuntu

/usr/bin/ld: cannot find -lz when compiling android source

You are probably on a 64bit system. Just do:

sudo apt-get install lib32z1-dev

#android, #cyanogenmod

“device/htc/ace/” does not exist. Stop. Cyanogenmod

Assuming you get this error here is an easy fix.

Goto /yourcmdir/vendor/cyanogen/products and edit It should look something like this


Remove all the device .mk you don’t need and keep only the one you are compiling and already have the device tree.


. build/


make -j4

Et voila!