Tuesday, January 1, 2019

How to count days since a specific date until today using Bash shell ?


The easiest way to perform days count since a specifics day is to first get a number of seconds
since epoch time ( 1970-01-01 ) for both dates. As an example let’s count number of days
since 28.12.1999 until today 8.1.2018. Consider a following example:
$ echo $((($(date +%s)-$(date +%s --date "1999-12-28"))/(3600*24))) days
6586 days

Let's add little bit of readability to the above command by using variables. First, we get
seconds since epoch time ( 1970-01-01 ) until now:

$ now=$(date +%s)

$ echo $now
1515370378

Next we do the same for the 28.12.1999 date:

past=$(date +%s --date "1999-12-28")
$ echo $past
946299600

Next, calculate the difference:

$ difference=$(($now-$past))
$ echo $difference
569070778

Lastly, convert the difference in seconds to days:
$ echo $(($difference/(3600*24)))
6586

All done. The same principle can be used to calculate days between any specific days.
For example let's count days between 1.1.2016 and 31.12.2016 dates:

$ echo $((($(date +%s --date "2016-12-31")-$(date +%s --date "2016-1-1"))/(3600*24))) days
365 days

Tuesday, December 25, 2018

How to configure static IP address on Ubuntu 18.04 ?

How to configure static IP address on Ubuntu 18.04 Bionic Beaver Linux



The objective is to configure static IP address on Ubuntu 18.04 Bionic Beaver Linux


configure static IP address using DHCP

Most likely your current Ubuntu system uses DHCP server to configure its networking settings.
Hence, the configuration of your IP address is dynamic. In many scenarios, simply configuring
your router or local DHCP server is a preferred way to set a static address to any host regardless
of the operating system in use. Check your router manual and assign the static IP address to
your host based on its MAC address using the DHCP service.

Configure static IP address using Netplan

Netplan network configuration had been first introduced to Ubuntu 18.04 LTS Bionic Beaver.
It is available to all new Ubuntu 18.04 installations.

Depending on your Ubuntu installation Netplan may not be avaiable on upgraded Ubuntu systems.
If this is your case you might attempt to configure a static IP address for your network interface
using /etc/network/interfaces file as described at the end of this document.

Ubuntu Server

To configure a static IP address on your Ubuntu 18.04 server you need to modify a relevant
netplan network configuration file within /etc/netplan/ directory.

For example you might find there a default netplan configuration file called 01-netcfg.yaml
or 50-cloud-init.yaml with a following content instructing the networkd deamon to configure
your network interface via DHCP:

# This file describes the network interfaces available on your system
# For more information, see netplan(5).
network:
 version: 2
 renderer: networkd
 ethernets:
   enp0s3:
     dhcp4: yes

To set your network interface enp0s3 to static IP address 192.168.1.220 with gateway 192.168.1.1
and DNS server as 8.8.8.8 and 8.8.4.4 replace the above configuration with the one below.

WARNING:
You must adhere to a correct code indent for each line of the block. In other words the prefix
number of spaces for each line is important. Othersiwe you may end up with an error message
similar to: Invalid YAML at //etc/netplan/01-netcfg.yaml line 7 column 6: did not find expected key

# This file describes the network interfaces available on your system
# For more information, see netplan(5).
network:
 version: 2
 renderer: networkd
 ethernets:
   enp0s3:
    dhcp4: no
    addresses: [192.168.1.220/24]
    gateway4: 192.168.1.1
    nameservers:
      addresses: [8.8.8.8,8.8.4.4]

Once ready apply changes with:

$ sudo netplan apply



In case you run into some issues execute:


$ sudo netplan --debug apply



How to Disable, Stop or Uninstall Apport Error Reporting ?

How do I enable or disable Apport?

Apport is an Error Reporting Service provided by Ubuntu to intercept and analyze crashes and bugs as and when they occur. Crashes and Bugs may sound like bad things, but actually most operating systems will have several a day, and it doesn't mean your computer is broken, nor does it necessarily stop working. As such, Apport can usually be safely disabled, as it doesn't fix anything, it just tells developers that something went wrong.

Apport intercepts Program crashes, collects debugging information about the crash and the operating system environment, and sends it to bug trackers in a standardized form. It also offers the user to report a bug about a package, with again collecting as much information about it as possible.

How to Disable Apport at Boot ?

You need to manually edit a file to Stop Apport Running at Boot (when you turn on your machine. Open the Terminal, and paste the following command with Ctrl+Shift+V, or type it in manually.

Change the line that says enabled=1 to enabled=0 to disable Apport. To re-enable, change it back.

How to Stop Apport ?
On ubuntu 14.04 LTS
You can stop the currently running Apport service with the following command.
sudo service apport stop
Note that unless you remove it or disable it at boot it will start again the next time you turn on your computer.

On Ubuntu 16.04

To stop the service

Sudo systemctl stop apport.service

The systemd commands to enable / disable apport are:
Disable
sudo systemctl disable apport.service
If that does not work, you would then need to mask the service
Sudo systemctl mask apport.service
To re-enable
Sudo systemctl unmask apport.service # if you masked it
sudo systemctl enable apport.service

How to Uninstall Apport ?
It is fairly simple to uninstall Apport, as you can open the Ubuntu Software Centre, search for apport, and simply click Remove.
A similar process can be used for the package apport in both Synaptic and the Terminal.

sudo apt-get remove apport

sudo apt-get purge apport


Thursday, December 13, 2018

How to test a zabbix item key using zabbix_agentd in linux ?

zabbix_agentd - Zabbix agent daemon

SYNOPSIS
      zabbix_agentd [-c config-file]
      zabbix_agentd [-c config-file] -p
      zabbix_agentd [-c config-file] -t item-key
      zabbix_agentd [-c config-file] -R runtime-option
      zabbix_agentd -h
      zabbix_agentd -V




DESCRIPTION
      zabbix_agentd is a daemon for monitoring of various server parameters.




OPTIONS
      -c, --config config-file
             Use the alternate config-file instead of the default one.  Absolute path should be specified.

      -f, --foreground
             Run Zabbix agent in foreground.

      -R, --runtime-control runtime-option
             Perform administrative functions according to runtime-option.

          Runtime control options
              log_level_increase[=target]
                  Increase log level, affects all processes if target is not specified

              log_level_decrease[=target]
                  Decrease log level, affects all processes if target is not specified

          Log level control targets
              pid Process identifier

              process-type
                  All processes of specified type (e.g., listener)

              process-type,N
                  Process type and number (e.g., listener,3)

      -p, --print
             Print known items and exit.  

          d Number with a decimal part.

          m Not supported.  This could be caused by querying an item that only works
in the active mode like a log monitoring item or an item that requires multiple collected  values.
              Permission issues or incorrect user parameters could also result in the not supported state.

          s Text. Maximum length not limited.

          t Text. Same as s.

          u Unsigned integer.

      -t, --test item-key
             Test single item and exit.  See --print for output description.

      -h, --help
             Display this help and exit.

      -V, --version
             Output version information and exit.






Examples:

How to test a item key using zabbix_agentd ?

Syntax:

zabbix_agentd -t  --test item-key




zabbix_agentd -t proc.mem[]
proc.mem[]                                    [u|3469561856]
 u give return data type from item was   Unsigned integer.




Proc.mem it give Memory used by process in bytes.




Above example it give all process total memory utilized in server .




zabbix_agentd -t system.hostname
system.hostname                               [s|linuxforfreshers.com]

Item returns data type was  s Text. Maximum length not limited.




How to find agent version ?




Syntax :

zabbix_agentd -V

Or

zabbix_agentd -t agent.version




Example:

zabbix_agentd -V
zabbix_agentd (daemon) (Zabbix) 3.0.22
Revision 84876 14 September 2018, compilation time: Sep 14 2018 07:36:14

zabbix_agentd -t agent.version
agent.version                                 [s|3.0.22]





Wednesday, October 3, 2018

What Is /dev/shm in linux?

What Is /dev/shm



Shared (Virtual) Memory (SHM)


Shared memory is a way to shared state between process.

Shared memory, as its name implies, is a method to “share” data between processes.
Both processes define the same memory area as “shared”, and they can then exchange
information simply by writing into it. This (used to be, and still is somewhat) faster than
the alternative of sending network or pipe-based messages between processes.

If you see the memory as a mean of storing data, a file on a file system can be seen as
shared memory (ie shared file).

It is difficult to account for shared memory. Does it belong to one process? Both? Neither?
If we naively sum the memory belonging to multiple processes, we grossly “over-count”.

As the name implies, the Shared (Virtual) Memory refers to virtual memory that are shared
by more than one process and then can be used by multiple programs simultaneously.

Although virtual memory allows processes to have separate (virtual) address spaces, there
are times when you need processes to share memory.

Shared memory (SHM) is another method of interprocess communication (IPC)
whereby several processes share a single chunk of memory to communicate.

Shared memory provides the fastest way for processes to pass large amounts of data
to one another.


/dev/shm is nothing but implementation of traditional shared memory concept. It is an
efficient means of passing data between programs. One program will create a memory
portion, which other processes (if permitted) can access. This will result into speeding up
things on Linux.


shm / shmfs is also known as tmpfs, which is a common name for a temporary file storage
facility on many Unix-like operating systems. It is intended to appear as a mounted
file system, but one which uses virtual memory instead of a persistent storage device.
If you type mount command you will see /dev/shm as a tempfs file system. Therefore,
it is a file system, which keeps all files in virtual memory. Everything in tmpfs is temporary
in the sense that no files will be created on your hard drive. If you unmount a tmpfs instance, everything stored therein is lost. By default almost all Linux distros configured to use /dev/shm.

Difference between tmpfs and swap

  • tmpfs uses memory while as swap uses persistent storage devices.
  • tmpfs can be viewed as file system in df output whereas swap dont
  • swap has general size recommendations, tmpsfs not. tmpfs size varies on system purpose.
  • tmpfs makes applications fasters on loaded systems. swap helps system breath in memory full situations.
  • swap full indicates system heavily loaded, degraded performance and may crash.
  •  tmpfs being full not necessarily means heavy load or prone to crash.
  • tmpfs is enhancement where as swap is must have feature!