Yum hang strace

[ home ~ ] # strace -p 12085
Process 12085 attached – interrupt to quit
futex(0x9fcc7b8, FUTEX_WAIT, 1, NULL …>

OK, so it was really stuck. And it was stuck on a futex system call which probaly means that yum didn’t exit cleanly on previous run, although I don’t remember it failed recently. As a matter of fact, two weeks ago I rebooted my notebook for the first time in 70 days (what I am trying to say is that it works perfectly 🙂

Anyway, simple google search on futex and yum reveals more users with similar problem. It seems that the source of the problem is corruption of RPM databases in /var/lib/rpm folder. Problem can be resolved in two ways. Either remove all ‘__db.*’ files from /var/lib/rpm folder or run /usr/lib/rpm/rpmdb_recover.

How to configure remote logging on CentOS6

File log cực kì quan trọng, còn quan trọng như thế nào thì tôi không nói nữa. 😀 Nó giống như một camera giúp ta theo dõi hệ thống.
Hôm nay tôi xin giới thiệu tính năng remote logging trong rsyslog. Tính năng này giúp ta tập trung các syslog từ các client, để tiện theo dõi backup log.

Ta có mô hình như sau:
syslog remote (1)

Ở mô hình trên, server 192.168.1.10 làm nhiệm vụ như 1 logging server. Tất cả file log của các client 192.168.1.11, 192.168.1.12 sẽ được tập trung về logging server. Client ở đây có thể là web server, hoặc mail server.
rsyslog phiên bản mới nhất là v8. Hiện tại trên lab này tôi cấu hình trên v5.
Continue reading “How to configure remote logging on CentOS6”

Binary Search Using Bash Script

Chắc hẳn dân IT đều biết thuật toán tìm kiếm nhị phân rồi. Thay vì viết bằng C hay Python, tôi quyết định viết bằng bash cho nó máu 😀

#!/bin/bash

bsearch(){
    array=("$@")
    last_idx=$((${#array[@]} - 1))
    item=${array[last_idx]}
    unset array[last_idx]
    end=$((${#array[@]} - 1))
    _start=0
    mid=$(( (_start+end)/2  ))
    while [ $_start -le $end ];do
        if [ ${array[mid]} -eq $item ];then
            echo  $(( $mid+1 ))
            exit 1
        elif [ ${array[mid]} -gt $item  ];then
            end=$(( mid  - 1 ))
        else
            _start=$(( mid + 1 ))
        fi
        mid=$(( (_start+end)/2  ))
    done
    echo "-1"
}


arr=(1 4 6 8 9 10)
target=8
bsearch ${arr[@]} $target

Backup apache server via sftp using python

– Thư mục lưu các file cấu hình apache mặc định:
+ Ubuntu: /etc/apache2
+ CentOS: /etc/httpd
– Thư mục chứa source website:
+ /var/www
Trong đoạn script này tôi sẽ backup 2 thư mục trên, nén ở dạng file tar.gz. Sau đó gửi file được nén đến một File Server nào đó.
Trước tiên kiểm tra distro linux. Nếu như OS là ubuntu httpd_conf=’/etc/apache2′, còn nếu là CentOS httpd_conf=’/etc/httpd’

www = '/var/www'
linux_dist = platform.linux_distribution()[0]
if linux_dist == 'Ubuntu':
    httpd_conf = '/etc/apache2'
elif linux_dist == 'CentOS':
    httpd_conf = 'etc/httpd'

Continue reading “Backup apache server via sftp using python”