Useful shortcuts for vi editor

Thursday, 1 November 2018

How to change timezone?

-> Determine your timezone
# cd /usr/share/zoneinfo
# tzselect
e.g.
Europe/Istanbul

-> Remove current localtime soft link
# rm /etc/localtime 

-> Define your localtime soft link as new
# ln -s /usr/share/zoneinfo/Europe/Istanbul /etc/localtime

-> Check your latest timezone setting
# timedatectl

Wednesday, 31 October 2018

How to connect into local VM via SSH?

* Set a new Port Forwarding Rule in Network Settings

Step 1: Settings -> Network -> Adapter 1 -> Advanced -> Adapter Type -> "Paravirtualized network adapter (virtio-net)" -> OK

Step 2: Settings -> Network -> Adapter 1 -> Advanced -> Keep it as "NAT" -> Click "Port Forwarding" -> Define a Rule -> OK
e.g.
Name Protocol Host Port Guest Port
SSH TCP      1022 22

SSH Connection Host/Port Settings:
Host: 127.0.0.1
Port: 1022

WSREP "Failed to open channel" solution

Error
ERROR WSREP "Failed to open channel 'my_mariadb_cluster'"

Detailed Error
WSREP: gcs/src/gcs.cpp:gcs_open():1458: Failed to open channel 'my_mariadb_cluster' at 'gcomm://10.10.10.10,10.10.10.11': -110 (Connection timed out)

Solution
On the first node: (e.g. node-1)
-> Stop mariadb service if it hangs
# systemctl stop mariadb.service

-> Make sure "safe_to_bootstrap" value is "1"
# cat /var/lib/mysql/grastate.dat
safe_to_bootstrap: 1

-> Run following command for starting cluster as new
# galera_new_cluster

-> mariadb service should be started automatically
# systemctl status mariadb.service

-> note wsrep_last_committed number by looking system table
# mysql -u root -p
> show status like 'wsrep_%';

-> note uuid number
# cat /var/lib/mysql/grastate.dat

On the second node: (e.g. node-2)
-> Stop mariadb service if it hangs
# systemctl stop mariadb.service

-> uuid and seqno (wsrep_last_committed) should be same with node-1
# vi /var/lib/mysql/grastate.dat
uuid: 0000
seqno: 100

-> start mariadb service
# systemctl start mariadb.service

Monday, 8 October 2018

How to find/follow postgresql server logs?

-> Check log level from config file
# cat /var/lib/pgsql/data/postgresql.conf
e.g.
log_min_messages= 'ERROR' (default value)
(options; DEBUG5, DEBUG4, DEBUG3, DEBUG2, DEBUG1, INFO, NOTICE, WARNING, ERROR, LOG, FATAL, and PANIC)

-> Determine log directory name (via postgres user)
$ psql
postgres=# show log_directory;
e.g. pg_log

-> Determine data directory name (via postgres user)
$ psql
postgres=# show data_directory;
e.g. /var/lib/pgsql/data

-> Determine log file name (via postgres user)
$ psql
postgres=# show log_filename;
e.g. postgresql-%a.log (%a will be "day" of the week)
e.g. postgresql-%a-%H.log (%H will be "hour" of the day)

-> Check log rotation age of the log files
postgres=# show log_rotation_age;
e.g. 1d (1d means one day)
* The database system generate log files daily
e.g. 1h (1h means one hour)
* The database system generate log files hourly

Eventually, the log path could be like this;
e.g. 
# ls /var/lib/pgsql/data/pg_log/postgresql-Mon.log
# ls /var/lib/pgsql/data/pg_log/postgresql-Mon-07.log

-> To follow the logs by tail
e.g.
# tail -100f /var/lib/pgsql/data/pg_log/postgresql-Mon.log
# tail -100f /var/lib/pgsql/data/pg_log/postgresql-Mon-07.log

Ref: https://www.postgresql.org/docs/9.5/static/runtime-config-logging.html

Thursday, 4 October 2018

How to setup/configure/use mailx for Office365 account?

-> Update the OS
# yum -y update
or (y -> yes)
# yum update

-> Install mailx
# yum install -y mailx

-> Define soft link to use "email" the command
# ln -s /bin/mailx /bin/email

-> Prepare config file
# vi /etc/mail.rc
set smtp=outlook.office365.com
set smtp-auth-user=alper@alper.com
set smtp-auth-password=alper123
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/
set smtp-use-starttls
set from="alper@alper.com(Alper Ozsoyler)"

-> Try to send an email to yourself
# echo "Your message is my message!" | email -v -s "Message Subject is Bla Bla" alper@alper.com

Ref: https://gist.github.com/ilkereroglu/aa6c868153d1c5d57cd8

How to solve "restarting/pending pod repeatedly" problem?

-> Check the pods status
e.g.
# kubectl get pods --all-namespaces
NAMESPACE     NAME                            READY     STATUS
kube-system   coredns-78fcdf6894-6ggkk        0/1       Pending
kube-system   coredns-78fcdf6894-tm52r        0/1       Pending 

-> Check the deployments
# kubectl get deployment --all-namespaces
NAMESPACE     NAME      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE
kube-system   coredns   2         2         2            0

-> Needs to remove the deployments related to pod and service
e.g.
# kubectl delete deployment coredns -n kube-system
deployment.extensions "coredns" deleted

Tuesday, 2 October 2018

How to enable Hyper-V in Windows 10?

Press Windows key -> Type "Turn Windows features on or off" then click it -> Select "Hyper-V" check box then click "OK" -> Restart PC -> Done!

Tuesday, 18 September 2018

How to install/configure/enable NTP service?

-> Install ntp service
# yum install ntp

-> Once NTP server pool zones are taking
e.g. check from https://www.pool.ntp.org/zone/europe

-> Add specific pool zones into config file if they are not existed
# vi /etc/ntp.conf
server 0.europe.pool.ntp.org

-> Enable service
# systemctl enable ntpd

-> Run service
# systemctl start ntpd 

-> Lastly, check the service and the settings
# timedatectl 

Thursday, 9 August 2018

How to check linux operating system info?

-> show kernel version and other info
# uname -a

-> show machine info
hostnamectl

-> show specific release version
# rpm --query centos-release 

How to check available yum packages?

e.g. install/update ansible by yum

-> Go to repo path

# cd /etc/yum.repos.d/

-> Add source paths into repo file to be able to install ansible

# vi epel.repo
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch
metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

[epel-debuginfo]

name=Extra Packages for Enterprise Linux 7 - $basearch - Debug
#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch/debug
metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-7&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=1

[epel-source]

name=Extra Packages for Enterprise Linux 7 - $basearch - Source
#baseurl=http://download.fedoraproject.org/pub/epel/7/SRPMS
metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-source-7&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=1

-> Search yum package
yum search ansible

-> Check available yum package
# yum list available | grep ansible

-> Check available all yum packages with its duplicates
yum list available --showduplicates | grep ansible

-> Install ansible 
# yum install ansible

-> Download only yum package
yum install ansible --downloadonly --downloaddir=/root

-> Check available yum packages for upgrade
yum check-updates | grep ansible

-> Update ansible

yum update ansible

-> Check yum history
yum history list

How to install/configure/run ansible?

-> Set hostname
# hostnamectl set-hostname ansible_host

-> Add remote hosts into /etc/hosts file
# vi /etc/hosts
10.10.10.2 remote_host_2
10.10.10.3 remote_host_3

-> Generate ssh key without passphase
# ssh-keygen

-> Install ssh key into remote servers
# ssh-copy-id remote_host_2
# ssh-copy-id remote_host_3

-> Install ansible rpm packages
# yum install ansible

-> Add remote hosts as nodes into /etc/ansible/hosts file
# vi /etc/ansible/hosts
[remote_hosts]
remote_host_2
remote_host_3

-> Prepare an ansible playbook in /etc/ansible/
# vi my_very_first_playbook.yml
# example playbook
- name: Run the role for me 
  hosts: remote_hosts
  roles:
  - example-role

-> Prepare a role for the playbook in /etc/ansible/roles/example-role/
# vi main.yml
- name: checking Command Scheduler service
  service: 
   name=crond.service
   state=started

-> Run the playbook in /etc/ansible/
# ansible-playbook my_very_first_playbook.yml
or
# ansible-playbook -i hosts my_very_first_playbook.yml
(i -> inventory, its default location is /etc/ansible/hosts)

-> To check the ansible logs
# tail -f /var/log/ansible.log

Tuesday, 7 August 2018

usage of "run_once: true" option

If you want to run only once a specific task during all playbook execution, you may add "run_once: true" option into your task to do this.

e.g. example task
- name: prompt for directory name
  run_once: true
  pause:
   prompt: "Please enter directory name: "
  register: input_dir_name

- name: show input
  debug: 
   msg="{{ input_dir_name.user_input }}"

Monday, 30 July 2018

How to know last login info on the system?

-> show all records
$ last

-> show all records page by page
$ last | more

-> show first 10 records
$ last | head

-> show first 100 records
$ last | head -100

-> show last 10 records
$ last | tail -10

-> show last 100 records
$ last | tail -100

Wednesday, 18 July 2018

How to change service name?

e.g.
current service name: postgresql.service
desired service name: postgresql-9.1.service

Run following commands to change service name;

Step 1: Stop current service
# systemctl stop postgresql.service
# systemctl daemon-reload

Step 2: Change service name
# cd /usr/lib/systemd/system
# mv postgresql.service postgresql-9.1.service

Step 3: Start and enable new service
# systemctl start postgresql-9.1.service
# systemctl enable postgresql-9.1.service

Step 4: Check service status:
# systemctl status postgresql-9.1.service

Step 5: Make sure that service runs properly
# journalctl -u postgresql-9.1.service

Friday, 13 July 2018

How to solve remote connection error cause of iptables/firewalld service?

Case
Machine A(192.168.1.2) wants to connect on Machine B(192.168.1.5) by database port.

Action
In Machine A;
# su - postgres
$ psql -h 192.168.1.5 -d alper -U alper -p 5433

Error
psql: could not connect to server: No route to host
        Is the server running on host "192.168.1.5" and accepting
        TCP/IP connections on port 5433?

Solution
In Machine B;
For iptables service:
# iptables -I INPUT -p tcp --dport 5433 -j ACCEPT
# iptables-save

For firewalld service:
# firewall-cmd --zone=public --add-port=5433/tcp --permanent
# firewall-cmd --reload

Check
In Machine A;
nc -vz 192.168.1.5 5433
Ncat: Connected to 192.168.1.5:5433

How to solve database module error?

Action
# ansible-playbook -i myhosts example.yml -v

Error
TASK [example role : example task] *******************
fatal: [local]: FAILED! => {"changed": false, "msg": "The MySQL-python module is required."} 

Solution
# yum install MySQL-python

The other solutions related to database tasks:
# yum install python-redis (Redisdb)
# yum install python-psycopg2 (PostgreSQL)

Check it for up to date list of database modules:
https://docs.ansible.com/ansible/latest/modules/list_of_database_modules.html

Friday, 6 July 2018

How to prevent sleep mode on laptop when lid closes?

Press Window Key then type "Power Options" and click on it -> Click "Choose what closing the lid does" -> Set "When I close the lid" to "Do nothing" -> Click "Save changes" -> Done!

Friday, 29 June 2018

How to run a SQL query/statement in a task?

You are able to run a SQL query/statement with "echo" command by shell module for the ansible task.

# an example task for sql query/statement
- name: set default schema for user
  shell: echo "ALTER ROLE alper SET SEARCH_PATH TO myschema" | psql
  become: yes
  become_user: postgres

benefit of "gather_facts: no" setting

If you do not need any facts for your variables, you can run your playbook more fast via gather_facts setting.

For this, just add following setting in your playbook:

# example playbook
- name: Run the role for me 
  hosts: my_nodes
  gather_facts: no
  roles:
  - example-role

Friday, 18 May 2018

"database "example" is being accessed by other users" solution

Action
postgres=# drop database example;

Error
ERROR:  database "example" is being accessed by other users
DETAIL:  There is 1 other session using the database.

Solution
Run following sql code;

postgres=# 
SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = 'example' AND pid <> pg_backend_pid();

All sessions should be terminated where belong to "example" database except backend sessions.

Lastly, try to drop it again.