How to install FFmpeg and ffmpeg-php on CentOS Easily

FFmpeg is an amazing collection of open-source tools that can record and stream video and audio. However, it can also transcode video and audio (convert the files to different formats), and that is what has me so excited. There’s also a great PHP package called ffmpeg-phpthat allows for easy use of FFmpeg from inside PHP scripts. Today, I’m going to see if I can’t help you get both of these set up on your system.

Admittedly, it’s been a while since I’ve tried to install FFmpeg, about two years. I recently thought up some ideas on how I’d like to use FFmpeg, so I thought it was time to give it a try yet again. Today, I’m proud to say that installing FFmpeg is so much easier to install compared to the past, that I dare say it’s simple.

Here is my experience with installing FFmpeg on my server and how to fix the pitfalls that I encountered.


Note that I did all the following steps on a CentOS server. The specific version is CentOS x64 6.7.

These instructions can work for other distros with little or no modifications, but some distros will be completely different. For example, theDAG RPM Repository that I’m using (more info below) has support for the following distros: Red Hat Enterprise Linux, Fedora Core, Yellow Dog Linux, Aurora Linux, CentOS, Scientific Linux (they really need to get a verified SSL cert), TaoLinux, WhiteBox Linux, Lineox, andBLAG. Other distros will need to use a different repository.

If you successfully get FFmpeg running on another distro, please comment your changes here and I’ll update the post (and make sure you get credit of course).

Also note that I experienced some bumps in the road while installing everything. While many of you may not experience these issues, I found it important to document these problems and how I fixed them in case you encounter them.


The first thing that you need to do is set up the DAG repository. This repository is an actively-maintained repository that provides a staggering number of packages with current or near current builds. Adding this repository is a great way to run the latest offerings of many packages.

Adding the DAG repository is simple. I’m using yum, so I did the following to add the repository:

  1. Create and open a new file called /etc/yum.repos.d/dag.repo. I ran “vi /etc/yum.repos.d/dag.repo“.
  2. Add the following text to the file:
    name=DAG RPM Repository
  3. Finally, save and close the file.

In order to successfully use the DAG repository with tools such as yum, you need to add DAG’s GPG key. Failure to do so will result in an error like the following:

warning: rpmts_HdrFromFdno: Header V3 DSA signature: NOKEY, key ID 6b8d79e6
Public key for faac.x86_64.1.26-1.el5.rf.rpm is not installed

In order to add the GPG key for DAG, run the following:

rpm --import

The DAG: Frequently Asked Questions page has additional instructions on how to get the repository loaded and working on your distro.

Now that DAG is setup, it’s a good idea to update all your packages.

yum update

Depending on the packages you currently have installed, this could potentially upgrade, install, or replace numerous packages that may or may not be very important to you. Make sure you carefully look through that list and do any necessary preparations before telling yum that it can go ahead.

For example, yum told me that it was going to replace my current MySQL interface library for Perl with a new one. I added to my check list a note to verify that my Perl code functioned correctly after the install.

I ran into another hitch when I told yum to go ahead with the update. It informed me that my current version of Subversion conflicted with the new version it wanted to install. When this happens, you need to remove the old package before proceeding. This time, I made backups of all of my repositories and my /etc/sysconfig/svnserve file before proceeding just in case. I then removed Subversion “yum remove subversion“, ran the update process “yum update“, and installed Subversion again “yum install subversion“.

Installing – FFmpeg

Now you are ready to install FFmpeg with yum. I wanted to install all the available FFmpeg packages, so I first asked yum what was available.

yum search ffmpeg

Searching through the results, I found that three packages need to be installed: ffmpeg, ffmpeg-devel, and ffmpeg-libpostproc.

yum install ffmpeg ffmpeg-devel ffmpeg-libpostproc

Note: If you install ffmpeg-libpostproc, the entire FFmpeg software library changes from the LGPL license to the GPL license.

After a couple of minutes, the packages and the packages that they depend on were installed.

I simply ran “ffmpeg” from the command line, and I took the lack of threatening error or warning messages as a good sign that things were working.

Preparing for ffmpeg-php

I often work with programs through command line calls in code, but I wanted something more robust this time, so I looked around and foundffmpeg-php. Based on the API, it looks to be a great tool to interface PHP and FFmpeg.

There are four things that are required to successfully install and run ffmpeg-php; they are:

  • ffmpeg-0.4.9_pre1 or higher
  • php-4.3.0 or higher
  • gd-2.0 or higher
  • php-devel

PHP and FFmpeg should be good to go since at the time of this writing, DAG has PHP version 5.1.6 and FFmpeg version 0.4.9. GD and php-devel can be easily installed by running the following yum command:

yum install php-gd php-devel

In case you are wondering what php-devel is for, it installs the phpize program which is used to install ffmpeg-php.

Installing ffmpeg-php

Now we are ready to install ffmpeg-php. This can be done in six easy steps:

  1. Download the latest ffmpeg-php release
  2. Extract the archive:
    tar -xjf ffmpeg-php-X.x.x.tbz2
  3. cd ffmpeg-php-X.x.x/
  4. phpize
  5. ./configure && make
  6. sudo make install

Finishing Thoughts

This may seem like a lot of work when I earlier described this process as “simple,” but trust me that this is a thousand times easier than when I first tried installing FFmpeg. I think I spent three hours working on installing FFmpeg just to find out that it didn’t work the first time I tried.

Time and time again, package management has proven to be an extremely powerful tool. While I know the value of manually configuring and compiling code, the ease of simply using a package manager can reduce the time needed to install and manage software from hours or days to minutes.

I’m glad to see that FFmpeg has benefited from the use of these package managers and great repositories like the DAG RPM Repository.

Install Transmission Client to RHEL / CentOS 6

Torrent Guide – Install Transmission Client to RHEL / CentOS 6


Transmission Bittorrent Client

Transmission is an open source and extremely lightweight Bittorrent client. It is available for any OS and comes with it’s own GUI interface.

Although Transmission is not as popular as rTorrent/ruTorrent for seedboxes, it is still a strong solid choice as it does not require a web server to be deployed on the OS and has a light memory footprint allowing for it to run in very-low ram VPS environments.

Installing Transmission-BT to CentOS 6

For this guide I will be using CentOS 6, but any RHEL distro should work with similar commands.

Transmission can be installed quite easily through the repositories, however it is not part of the default Red Hat repositories. First we will need to install the EPEL repository to our server:

You can find the lastest EPEL repositories here:

For simplicity sake you can always just following my guide with version as of time of this writing, as it will be updated when you do an upgrade anyways.

rpm -Uvh epel-release-6-8.noarch.rpm

Now with this repository added we can install Transmission via yum

yum -y update
yum -y install transmission transmission-daemon

Then start the process:

service transmission-daemon start

Test Transmission

Transmission uses port 9091 by default, try it now using your server’s IP or FQDN.

You will either see Transmission load, or you will see an error like this:


The reason for this error is because Transmission is setup by default to only accept connections from localhost. If you get this error proceed to the next step…

Configure Transmission For Remote Access

Before we modify the configuration we’ll want to stop the service. This is important!! Transmission will write it’s setting files on shutdown, so if we edit the settings now and “restart” Transmission then our changes just get overwritten.

service transmission-daemon stop

Now we can make changes to the settings.json file. Transmission will automatically write it’s config to the user’s home directory. By default the daemon process will be using “Transmission” user which is set to /var/lib/transmission rather then using the /home folders.

If you have trouble finding your settings.json you can always use the findcommand:

find / -name settings.json

Edit the settings.json file once you’ve located it:

nano /var/lib/transmission/.config/transmission/settings.json

Find the following lines:

    "rpc-whitelist": "",
    "rpc-whitelist-enabled": true,

Change this according to your preferences. When a “White List” is set it means only those IP addresses can access the software. If you want to use the White List then set the appropriate IP addresses here. Otherwise we can just set the whitelist to false like so:

    "rpc-whitelist": "",
    "rpc-whitelist-enabled": false,

Start our service back up:

service transmission-daemon start

And test:



How to install ffmpeg, ffmpeg-php on CentOS 6/7 (Cpanel Server)


For EL6:

rpm -Uvh
rpm -Uvh

Install FFMpeg from ATRPMS Repository:

yum -y install ffmpeg ffmpeg-devel

How to check if FFMPEG is working?

Verify the ffmpeg version:

ffmpeg -version
[root@centos:~]ffmpeg -version
ffmpeg version 2.2.1
built on Apr 13 2014 13:00:18 with gcc 4.4.6 (GCC) 20120305 (Red Hat 4.4.6-4)
configuration: --prefix=/usr --libdir=/usr/lib64 --shlibdir=/usr/lib64 --mandir=/usr/share/man --enable-shared --enable-runtime-cpudetect --enable-gpl --enable-version3 --enable-postproc --enable-avfilter --enable-pthreads --enable-x11grab --enable-vdpau --disable-avisynth --enable-frei0r --enable-libopencv --enable-libdc1394 --enable-libgsm --enable-libmp3lame --enable-libnut --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --extra-cflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fPIC' --disable-stripping
libavutil      52. 66.100 / 52. 66.100
libavcodec     55. 52.102 / 55. 52.102
libavformat    55. 33.100 / 55. 33.100
libavdevice    55. 10.100 / 55. 10.100
libavfilter     4.  2.100 /  4.  2.100
libswscale      2.  5.102 /  2.  5.102
libswresample   0. 18.100 /  0. 18.100
libpostproc    52.  3.100 / 52.  3.100

Check the supported formats:

ffmpeg -formats

Test converting videos. Here’s an example from mp4 to h264:

cd /usr/local/src
ffmpeg -i Woodstock_Festival_Trailer.avi -vcodec libx264 Woodstock_Festival_Trailer-H264.avi

After done, you should see the new H264 file:

-rw-r--r-- 1 root root 20M May 4 2006 Woodstock_Festival_Trailer.avi
-rw-r--r-- 1 root root 15M Jan 30 10:01 Woodstock_Festival_Trailer-H264.avi

How can I work with ffmpeg using PHP?

Simple.  Just install php-ffmpeg extension. First, install REMI repo in order to get your php-ffmpeg package as below:

Let’s download the RPM file for CentOS 5.x and CentOS 6.x:

EPEL repo for  Centos 5.x

rpm -Uvh epel-release-5*.rpm

EPEL repo for Centos 6.x

rpm -Uvh  epel-release-6*.rpm

EPEL repo for Centos 7.x

rpm -Uvh  epel-release-6*.rpm

That command will install the EPEL repo inside your /etc/yum.repos.d directory.


Manually, install FFmpeg-Php
        cd /usr/local/src
        tar jxvf ffmpeg-php-0.6.0.tbz2
        cd ffmpeg-php-0.6.0
If you get (error make: *** [ffmpeg_frame.lo] Error 1) do this commands.
sed -i 's/PIX_FMT_RGBA32/PIX_FMT_RGB32/g' ffmpeg_frame.c
 vi ffmpeg_frame.c
Then rerun "./configure && make" and if all went fine make install make install If no error skil to step 5. Step 5. Now adding to php.ini echo '' >> /usr/local/lib/php.ini Step 6. Now test php with ffmpeg php -r 'phpinfo();' | grep ffmpeg

-i | grep ffmpeg -i

ffmpeg-php version => 0.7.0
ffmpeg-php built on => Jan  1 2013 09:50:55
ffmpeg-php gd support  => enabled
ffmpeg libavcodec version => Lavc53.61.100
ffmpeg libavcodec license => GPL version 3 or later
ffmpeg libavformat version => Lavf53.32.100
ffmpeg libavformat license => GPL version 3 or later
ffmpeg swscaler version => SwS2.1.100
ffmpeg swscaler license => GPL version 3 or later

When you run command ./configure if you get error: configure: error: ffmpeg headers not found. Make sure ffmpeg is compiled as shared libraries using the –enable-shared option. Check some library with command:

rpm -ql ffmpeg-devel

In On CentOS 6/7 with nux-dextop installed ffmpeg-devel

locate avio.h avformat.h avcodec.h

Now  do command:

[root@centos ffmpeg-php-0.6.0]# strace -f -o /ffmpeg-strace ./configure --with-php-config=/usr/bin/php-config --with-ffmpeg=/usr --includedir=/usr/include/ffmpeg


cat /ffmpeg-strace | egrep 'avio.h|avformat.h|avcodec.h'

Looks like ffmpeg-devel installed headers at

  • /usr/include/ffmpeg/libavcodec/avcodec.h
  • /usr/include/ffmpeg/libavfilter/avcodec.h
  • /usr/include/ffmpeg/libavformat/libavformat.h
  • /usr/include/ffmpeg/libavformat/avio.h

Problem is specific to avcodec.h, avformat.h, avio.h and swscale.h – so what about symlinking them

ln -s /usr/include/ffmpeg/libavcodec/avcodec.h /usr/include/ffmpeg/avcodec.h
ln -s /usr/include/ffmpeg/libavformat/libavformat.h /usr/include/ffmpeg/libavformat.h
ln -s /usr/include/ffmpeg/libavformat/libavformat.h /usr/include/ffmpeg/libavformat.h
ln -s /usr/include/ffmpeg/libswscale/swscale.h /usr/include/ffmpeg/swscale.h

Then configure and make again:

./configure && make

How To Install And Run VLC On CentOS 6/7 As Root

VLC media player (commonly known as VLC) is a portable, free and open-source, cross-platform media player and streaming media server written by the VideoLAN project. VLC media player supports many audio and video compression methods and file formats, including DVD-Video, video CD and streaming protocols. It is able to stream media over computer networks and to transcode multimedia files.

The default distribution of VLC includes a large number of free decoding and encoding libraries, avoiding the need for finding/calibrating proprietary plugins. Many of VLC’s codecs are provided by the libavcodec library from the FFmpeg project, but it uses mainly its own muxer and demuxers and its own protocols implementations. It also gained distinction as the first player to support playback of encrypted DVDs on Linux and OS X by using the libdvdcss DVD decryption library.

For EL7:

Install  EPEL   from
rpm -Uvh

For EL6:

rpm -Uvh
rpm -Uvh


yum update
yum  install vlc


There are not so many ways to make VLC Player work as root, and I have found this way is very easy and fast to make VLC Player Work as root.

Let me make one thing more clear that VLC is not only media player it can do so many things and Running VLC as root is very very risky. So think many times before you run VLC as root.

I have only tested that VLC can open using root user, have not tested other features. So take a note of this.


Before starting it let me tell you that please take a backup of original VLC file so you can recover if anything worst.

Perform following steps to Run VLC Player as root



1) Install Hexedit Package for your System

[root@vps ~]# yum install hexedit

2) Now Execute Following command take backup of Original VLC Command :-

[root@vps ~]# cp -p /usr/bin/vlc /usr/bin/vlc_original_bin

3) Now Open /usr/bin/vlc into hexeditor, Execute Following command :-

[root@vps ~]# hexedit /usr/bin/vlc

4) Now Press “TAB” Key.

5) Now Press “CTRL + s” to search ASCII String.

6) In Search Box, Now Type “geteuid” and Replace it with “getppid”

7) Now Press “CTRL + x” to Save the file.

8) That’s it. Now You can Open VLC using Command and From Menu too.


How to Install the latest version of s3cmd tool on Linux

Please install the required packages before installing the s3cmd tool and download the source zip from github:

sudo yum install unzip python-pip


Unzip the downloaded source zip file and move to the unzipped directory:

cd s3cmd-master/


Once you have moved to the unzipped directory then just run this command:

sudo python install


Install the dateutil module, which is powerful extensions to the datetime module that is available in the Python standard library:

sudo pip install python-dateutil


Check the installed version of s3cmd tool:

s3cmd --version

s3cmd version

After installation, run the following command in order to configure the s3cmd tools using your AMAZON ACCESS KEY and SECRET KEY.

s3cmd --configure



Initial Settings after installing the CentOS 7

1) To change the hostname permanently, edit the following file:

sudo vi /etc/hostname


Here you can simply put the name of your system (in my case, I have assigned it CentOS-7):

centos7 (1)

After that, edit the hosts file:

sudo vi /etc/hosts

centos7 (2)

Here add the same name, that you have added in the /etc/hostname file, after

centos7 (3)

After reboot, it will display the new hostname.

2) After login to the CentOS7 server(minimal installation), you will notice that the system doesn’t have ifconfig command :

centos7 (4)

Install the net-tools package which will include ifconfig:

sudo yum install net-tools

centos7 (5)

Try the ifconfig command once again:

centos7 (6)

3) Change the default network interface name to “eth0″

CentOS7 has a default nic name as “en016…..”, as we can see in above screenshoot. To change it back to the default network device name like “ethX”, edit the grub file:

sudo vi /etc/default/grub

centos7 (7)

Search for the line “GRUB_CMDLINE_LINUX” and append the following: “net.ifnames=0 biosdevname=0

Will look like this:

GRUB_CMDLINE_LINUX=" crashkernel=auto vconsole.font=latarcyrheb-sun16 rhgb 
quiet net.ifnames=0 biosdevname=0"

centos7 (8)

Create a new configuration based on the currently running system using grub2-mkconfig command:

sudo grub2-mkconfig -o /boot/grub2/grub.cfg

centos7 (9)

Rename the interface files by renaming the file “/etc/sysconfig/network-scripts/ifcfg-en01…

sudo mv /etc/sysconfig/network-scripts/ifcfg-eno16777736 /etc/sysconfig/network-scripts/ifcfg-eth0

centos7 (10)

Reboot the system:

centos7 (11)

After reboot, check the interface name:

centos7 (12)

4) Configure the static ip on the server:

Edit the interface file under /etc/sysconfig/network-scripts/ directory:

sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0

centos7 (13)

Here is my ifcfg-eth0 file as a sample, please change it according to your requirement:


centos7 (14)

Stop and disable the NetworkManager service, because we don’t need it on the server:

sudo systemctl stop NetworkManager 
sudo systemctl disable NetworkManager

centos7 (15)

Restart the network service(Be careful, if you are connecting remotely, because you will be disconnected after issue this command):

sudo service network restart

centos7 (16)

Check the newly assigned static ip:

centos7 (17)

5) Disable IPv6:

First check that IPv6 is enabled or not:

lsmod | grep -i ipv6

centos7 (18)

Edit the grub file:

sudo vi /etc/default/grub

centos7 (19)

Search for the line “GRUB_CMDLINE_LINUX” and add the following at the beginning: “ipv6.disable=1

Will look like this:


centos7 (20)

Create a new configuration based on the currently running system using grub2-mkconfig command:

sudo grub2-mkconfig -o /boot/grub2/grub.cfg

centos7 (21)

Reboot the system:

centos7 (22)

Once again, check the IPv6 on the system:

centos7 (23)

6) EPEL repository on Centos 7

To install the EPEL repository, issue the following command:

sudo rpm -Uvh

centos7 (24)

List your new repos:

sudo yum repolist

centos7 (25)

7) Enable iptables services(instead of firewalld):

When you will try to start/restart the iptables on newly install server, will get this error:

centos7 (26)

To fix this error, install the iptables-services package:

sudo yum install iptables-services

centos7 (27)

Re-run the command to restart the iptables:

sudo service iptables restart

centos7 (28)

Hope this will help you!

How to Install the latest LEMP Stack on CentOS 6.5

In this tutorial,we’ll learn that how we can install the latest LEMP (Nginx, MySQL & PHP) Stack and it’s initial configuration on CentOS 6.5, because Base and EPEL repo are containing really old version of LEMP Stack.

Please add the required repos by using the following commands:

sudo rpm --import
sudo rpm -ivh
sudo rpm -Uvh
sudo yum repolist


We’ll have mysql55-libs conflicts with mysql-libs error, if we’ll proceed like this. To resolve this conflict, we need to issue these commands:

sudo yum install yum-plugin-replace
sudo yum replace mysql-libs --replace-with mysql55w-libs


Now, we can safely issue this command to install the latest version of Nginx, MySQL and PHP with PHP-Fpm:

sudo yum install nginx16 mysql55w mysql55w-server php55w php55w-opcache php55w-fpm


Enable Nginx, MySQL and PHP-FPM to automatically begin when the server boot:

sudo chkconfig nginx on
sudo chkconfig mysqld on
sudo chkconfig php-fpm on


Secure the PHP by editing the php.ini file:

sudo vi /etc/php.ini


Uncomment the cgi.fix_pathinfo and change it from 1 to 0:



Edit the  /etc/php-fpm.d/www.conf  file:

sudo vi /etc/php-fpm.d/www.conf


Change the user and group:

user = nginx
group = nginx


Next we need to do some modification in default nginx.conf file:

sudo vi /etc/nginx/nginx.conf


Increase the worker processes from 1 to 4:


Also delete the default server config block to make the file more concise:


Move to the /etc/nginx/conf.d/ directory:

cd /etc/nginx/conf.d/


Next, we’ll create the virtual host file for our domain (In my case it’s rbgeek.conf):

sudo vi rbgeek.conf


This is a basic virtual host config file:

server {
       listen 80;

       access_log /var/log/nginx/rbgeek_access.log main;
       error_log /var/log/nginx/rbgeek_error.log;
   location / {
       root /var/www/rbgeek;
       index index.php index.html index.htm;
   # pass the PHP scripts to FastCGI server listening on

   location ~ .php$ {
       root /var/www/rbgeek;
       fastcgi_index index.php;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       include fastcgi_params;
       fastcgi_intercept_errors on;


Finally, restart the Nginx and PHP-FPM services:

sudo service nginx restart
sudo service php-fpm restart


Create a directory structure for the website under /var/www/.If you have another preference, please update the config files accordingly:

sudo mkdir -p /var/www/rbgeek


Adjust the permission:

sudo chgrp -R nginx /var/www/rbgeek
sudo chmod g+s /var/www/rbgeek


Create a phpinfo page to verify that the php is working correctly with Nginx:

sudo vi /var/www/rbgeek/info.php


Add the following code in it:



Navigate to the site in web browser and verify that the php information is returned:


(Optional) Verify that all the packages are updated by using the code in your index page:


Hope this will help you!

Site-to-Site VPN between AWS VPC and Customer Site using Linux

In this tutorial, we will use the previous scenario on AWS side for the creation of site-to-site vpn between AWS VPC and Local site. On Amazon side, we’ll use Ubuntu 14.04 LTS, which will act as gateway for private subnet(s) plus the vpn gateway, while on the Local site, we’ll use the CentOS 6.5, which will perform the same tasks as of Ubuntu on AWS side (gateway for LAN plus vpn gateway).

modify vpc

Note: Please don’t waste your time in hacking, all these public devices and IP(s) are Temporary, I have destroyed them after finished this tutorial.

VPN Configuration on AWS VPC:

Please add the udp ports 500 & 4500 on NAT instance security group:


Also allow the ICMP packet on internal subnet security group from the remote LAN for testing purpose:


Now, install the desired package(s) for ipsec:

apt-get install iptables openswan


Edit the sysctl.conf file:

vi /etc/sysctl.conf


Add the following parameters inside it:


net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0

net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.ipv4.conf.default.log_martians = 0
net.ipv4.conf.all.log_martians = 0

net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0

net.ipv4.neigh.default.gc_thresh1 = 1024
net.ipv4.neigh.default.gc_thresh2 = 2048
net.ipv4.neigh.default.gc_thresh3 = 4096


Modify the rc.local file:

vi /etc/rc.local


Modify the MASQUERADE rule that we had added in the previous tutorial (Please adjust it according to your scenario):

iptables -t nat  -A POSTROUTING -s ! -d -o eth0 -j MASQUERADE

5Note: Please Reboot your machine once, so that changes will take effect.

Edit the ipsec.conf file:

vi /etc/ipsec.conf


Here is mine working ipsec.conf file, please adjust your’s as per your requirement:

version 2.0

config setup

conn AWS2LocalConnection


Edit the shared secret file:

vi /etc/ipsec.secrets


Mine ipsec.secrets file as an example:


VPN Configuration on Local Site:

Before beginning the configuration, please verify that the selinux is disabled:



Install the openswan on CentOS, along with the desired packages:

yum install wget bind-utils openswan lsof


Configure the Openswan to start at boot time:

chkconfig ipsec on


Edit the sysctl.conf file on CentOS:

vi /etc/sysctl.conf


Add/Edit the following parameters:

net.ipv4.ip_forward = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0


Edit the iptables rule file:

vi /etc/sysconfig/iptables


Modify your iptables file according to your scenario, here are the desired iptables rules, please adjust them accordingly:

-A POSTROUTING -s ! -d -o eth0 -j MASQUERADE
-A INPUT -i eth1 -p udp -m udp --sport 67:68 --dport 67:68 -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p udp -m udp --dport 500 -j ACCEPT
-A INPUT -p udp -m udp --dport 4500 -j ACCEPT
-A INPUT -i eth0 -p esp -j ACCEPT
-A INPUT -p tcp -m tcp --dport 4500 -j ACCEPT
-A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth1 -o eth0 -j ACCEPT

8Note: Please Reboot your machine once, so that changes will take effect.

Edit the ipsec.conf file:

vi /etc/ipsec.conf


Here is mine working ipsec.conf file on Local site, please adjust your’s as per your requirement:

version 2.0

config setup

conn Local2AWSConnection


Edit the shared secret file:

vi /etc/ipsec.secrets


Mine ipsec.secrets file as an example on Local Site:


Restart the IPSec Service & verify its status on both Sides:

Restart the IPSec service on Ubuntu at AWS VPC:

service ipsec restart


Restart the IPSec service on CentOS at Local Site:

service ipsec restart


Verify the status of IPSec service on Ubuntu at AWS VPC:

service ipsec status


Verify the status of IPSec service on CentOS at Local Site:

service ipsec status


Verify the IPSec Tunnel status on both servers:

ipsec whack --status | grep -i established 


14aNote: established means that tunnel is up and traffic will traverse through it

Verify the Route Table on both servers:

route -n



Verify that the Traffic is passing through the Tunnel:

Ping from the AWS vpn gateway to the machine on Local LAN (I have Win XP machine on local LAN with an ip


Ping from AWS VPC private Subnet to Local LAN for verification:


Ping from the Local vpn gateway to the machine on VPC Private subnet (I have Webserver on private subnet with an ip


Ping from Local LAN  to AWS VPC private Subnet for verification:


Testing Without Ping (Using the following reference)

If you don’t have a box to target that should respond to ping, you can try running a port scan to see if you can at least reach the machine.

# nmap -PN <something_on_right_subnet>

Monitoring traffic

While you’re running your ping or nmap, you can view the traffic with tcpdump.

# tcpdump -n host <RIGHT_PUBLIC_IP>

If you don’t see ESP packets in tcpdump, then they aren’t being tunneled. Try:

# tcpdump -n host <something_on_right_subnet>

If that shows ICMP (or other if using nmap) packets, then you’re sending packets around the tunnel.

VERY Useful Tip:

If the Tunnel didn’t come up after the configuration, just restart the server and also start the ping from your LAN host to other side LAN host.

Please Remember me in your prayers!

Enjoy 🙂



Xây dựng hệ thống Raid hoàn chỉnh

Xây dựng hệ thống raid cho Server là một trong những công việc rất quan trọng của những IT quản trị các hệ thống mạng máy tính. Tùy vào quy mô và ứng dụng của mỗi Server mà ta xây dựng hệ thống Raid cho phù hợp và ổn định dựa trên các yếu tố tốc độ, an toàn dữ liệu, tính linh hoạt trong thay thế bảo trì….
Tôi đã đọc qua rất nhiều các bài viết của nhiều diễn đàn diễn giải về hệ thống RAID tuy nhiên tôi cảm thấy rất khó hiểu cho các bạn mới vào nghề quản trị, trong bài viết này tôi sẽ cố gắng dùng những từ ngữ thật đơn giản cho các bạn hiểu đầy đũ hơn.

1. Phân biệt RAID:

Lúc tôi còn là sinh viên, vì cơ sở vật chất nhà trường còn ” khiêm tốn ” nên các bài LAB thường làm trên máy ảo và chỉ làm Raid ” mềm ” trên WinDows, vô cùng đơn giản vì máy ảo muốn tạo bao nhiêu ổ cứng mà chẳng được. Từ đó tôi có hai suy nghĩ thế nào là Raid cứng và thế nào là Raid mềm mà các tài liệu hay đọc họ thường nói đến. Vậy là tôi suy nghĩ liền Raid mềm là Raid thông qua hệ điều hành hoặc phần mềm chạy raid, còn Raid cứng là có thiết bị phần cứng hỗ trợ -> điều này đúng hay sai ?????

Xin thưa: hoàn toàn sai …….. tôi vẫn chưa nhận ra điều này cho đến khi thực sự nghiên cứu về raid.

Raid đươc viết tắc từ: Redundant Array of Independent Disks

Raid cứng là Raid dùng phần cứng điều khiển và ta có thể vào giao diện giao diện phần mềm của card Riad để tạo các mảng Raid mà không phải dùng bất kỳ phần mềm nào như Windows , Linux ,……

Raid Onboard cũng là Raid cứng nếu nó dùng chip điều khiển Raid, Raid CPU ( chíp )tích hợp trên mainboard, nó là một tùy chọn rẻ tiền kiểu add- in . Nó có những tính năng như những card raid. Tuy nhiên, những Card Raid chuyên dụng cung cấp nhiều tính năng nâng cao, mở rộng cao hơn nhiều so với Raid onboard, cung cấp chia mảng cực lớn hàng trăm TB, vận hành tốt hơn rất nhiều.

Tóm lại :

Raid cứng phải hội tụ các yếu tố sau :
– on-board I / O cho bộ vi xử lý (CPU)
– on-board XOR off-load engine
– Cache memory

Ngoài ra, nó còn có chức năng cấu hình Raid, bảo vệ dữ liệu khi boot hệ thống.
Một số Card Raid cứng rẻ tiền sử dụng Cache Memory hệ thống ( không dùng trên Card ) vẫn gọi là Raid cứng.

Raid Mềm: là các trường hợp còn lại của raid cứng, với một thông tin duy nhất ” nếu card raid đó hoặc mainboard đó hỗ trợ raid nhưng lại không có CPU riêng để xử lý raid thì nó là raid mềm “.

Giải thích cho câu nói trên là chúng ta có những card raid gắn rời, hoặc hỗ trợ trên mainboard nhưng lấy CPU và RAM của PC/Server đó để điều khiển hệ thống thì vẫn gọi là RAID mềm.

Các thành phần trên Mainboard của Server .


Các card raid mẫu ( cứng hay mềm thì các bạn tự phân biệt nhé :lol: )

2. Các dạng raid:

HOST RAID: là các dạng raid mà thiết bị hỗ trợ, ta sẽ tìm hiểu Host raid như sau:

Raid 0:

– Đây là dạng RAID cơ bản nhất, dữ liệu được ghi xen kẽ với mục đích để tăng cường tốc độ truy cập dữ liệu trong ổ cứng . Nó làm việc bằng cách chia những file ghi trên đĩa thành nhiều mẩu ( gọi là xen kẽ ) và ghi những mẫu này trên những ổ cứng khác nhau . Ví dụ nếu bạn có file với dung lượng 200KB và 02 ổ đĩa cứng , nó sẽ cắt thành hai mẩu 100KB mỗi một mẩu ghi trên ổ cứng khác nhau. Bạn hãy so sánh khi chép 2 GB dữ liệu lên 1 ổ cứng và 2 gb dữ liệu lên 2 ổ cứng thì thời gian sẽ như thế nào ? từ đó hình dung cho 2 TB.

– Dung lượng tổng cộng của ổ cứng trong hệ thống raid 0 bằng tổng dung lượng của hai ổ đĩa . Nếu chúng ta dùng 02 ổ cứng 80GB thì hệ thống đĩa của chúng ta là 160GB . Do đó nếu bạn muốn tăng hiệu suất làm việc của hệ thống thì bạn có thể xem xét việc mua 02 ổ cứng dung lượng nhỏ và thiết lập cấu hình hệ thống dùng RAID0 thay thế cho việc mua 01 ổ cứng có dung lượng lớn .

Raid 1 :

– Đây cũng là dạng RAID cơ bản nhất có khả năng đảm bảo an toàn dữ liệu. RAID 1 đòi hỏi ít nhất hai đĩa cứng để làm việc. Dữ liệu được ghi vào 2 ổ giống hệt nhau (Mirroring). Trong trường hợp một ổ bị trục trặc, ổ còn lại sẽ tiếp tục hoạt động bình thường. Bạn có thể thay thế ổ đĩa bị hỏng mà không phải lo lắng đến vấn đề thông tin thất lạc.

– Đối với RAID 1, hiệu năng không phải là yếu tố hàng đầu như raid 0. Tuy nhiên đối với quản trị mạng hoặc những ai phải quản lý nhiều thông tin quan trọng thì hệ thống RAID 1 là thứ không thể thiếu. Dung lượng cuối cùng của hệ thống RAID 1 bằng dung lượng của ổ đơn (hai ổ 250GB chạy RAID 1 sẽ cho hệ thống nhìn thấy duy nhất một ổ RAID 250GB).

Các dạng Raid khác:

– Khi các bạn hiểu rõ hai dạng raid 0 và raid 1 rồi thì các dạng khác cũng tương tự trên nguyên lý này nhưng có sự thay đổi ở đây là ghi và lưu trên nhiều ổ đĩa, tôi giả dụ raid 5 với 4 ổ đĩa sẽ được ghi và lưu theo nguyên lý sau:

Theo hình chúng ta thấy hai vấn đề là ghi dữ liệu lên nhiều ổ cứng và lưu chúng vào 1 nơi và luân phiên diễn ra liên tục.

3.Hướng dẫn xây dựng hệ thống RAID:

Để có hệ thống RAID trong máy tính , ta cần hai điều :

– Có phần điều khiển RAID .
– Ít nhất hai ổ cứng trở lên.

Phần Điều khiển RAID (Raid Controller):

Đầu tiên chúng ta kiểm tra xem trên Mainboard có tích hợp phần điều khiển RAID hay không . Để làm được điều này tốt hơn hết chúng ta nên đọc sách hướng dẫn đi kèm theo Maiboard . Hoặc cũng có thể xem Chipset của Mainboard – loại South Bridge ( hay được gọi là ICH , I/O Controller Hub đối với Chipset của Intel ) có chữ R thì có nghĩa là hỗ trợ RAID . Ví dụ Chip ICH7 thì không có nhưng ICH7R thì có tính năng này . Tương tự như thế đối với những nhà sản xuất khác . Ví dụ VIA VT8237R thì có RAID , những VT8237 thì không có.

Có một vài nhà sản xuất gọi RAID theo tên gọi do họ đặt ra như “Intel Matrix Storage” hoặc “nVidia MediaShield Storage” hoặc đại loại như vậy .

Nhiều Mainboard có những Chip thêm vào cung cấp nhiều cổng dùng cho ổ cứng của các hãng như : SiliconImage, JMicron, Marvell, Promise và HighPoint . Thông thường những Chip thêm vào này có tích hợp với phần điều khiển RAID . Do đó nếu những Chipset của Mainboard không hỗ trợ RAID nhưng những Chip thêm vào thì lại có , lúc đó thì bạn phải cài ổ cứng vào cổng gắn với Chip này mà không dùng cổng ổ cứng từ Chipset South Bridge.

Chúng ta xem chi tiết Mainboard Intel D975XBX2, Mainboard này có 08 cổng SATA II trong đó : 04 cổng được điều khiển bởi Chipset (Intel 975XBX, dùng ICH7R SouthBridge) và 04 cổng được điều khiển bởi Chip Marvell 88SE6145 . Cả hai Chip này đều có tích hợp điều khiển RAID , nhưng nếu Chipset dùng loại SouthBridge khác ( ví dụ ICH7 ) thì chúng ta dùng RAID ở 04 cổng SATA II phụ từ Marvell 88SE6145 .

Trong tình huống trên chúng ta có 02 Chip cho phép dùng RAID nên những ổ cứng phải được lắp theo nhóm cổng . Intel dùng màu đen trên cổng SATA nối với Chipset và màu xanh nước biển trên cổng SATA nối với Chip thêm vào . Do đó 02 ổ cứng của chúng ta phải cắm trên cổng cùng một màu . Đối với Mainboard mà Chipset có sẵn RAID thì chúng ta hay thích sử dụng những cổng này để nối với ổ cứng ( trong hình trên là cổng màu đen ) .

Lắp đặt phần cứng

Quá trình lắp cài đặt RAID được chia thành 03 phần :

– Lắp đặt phần cứng , lúc đó chúng ta cắm ổ cứng vào máy tính của mình vào những chỗ mà sẽ hỗ trợ cho hệ thống RAID .
– Cấu hình RAID chúng ta thiết lập hệ thống để dùng 02, hoặc nhiều ổ cứng như là một mảng RAID .
– Cài đặt hệ điều hành , chúng ta cần hệ điều hành tải Driver riêng biệt để nhận ra mảng RAID.

Một điều cần chú ý , nếu có dữ liệu quan trọng trên ổ đĩa thì phải Backup trước vì trong quá trình cài đặt hệ thống RAID mọi dữ liệu trên ổ cứng trước kia sẽ bị xoá hoàn toàn .

Việc cắm ổ cứng là điều vô cùng đơn giản : cài ổ cứng vào máy , nối dây nguồn vào mỗi ổ cứng , cắm cable tín hiệu của ổ cứng vào cổng ổ cứng tương ứng trên Mainboard ( nếu Mainboard không hỗ trợ RAID thì phải mua Card điều khiển RAID và nối cable tín hiệu ổ cứng vào Card đó ) . Tất nhiên tất cả công việc trên thực hiện trong lúc máy tính tắt.

Một điều quan trọng để dùng những cổng mà có thể mang lại hiệu quả cao nhất là ổ cứng của chúng ta cũng phải đạt được đúng tính năng kỹ thuật của nó . Có hai chuẩn ổ cứng chính hiện nay là PATA ( hay còn gọi là IDE ) và SATA . Cổng PATA ngày nay ít được sử dụng và cổng SATA là chuẩn đang được thông dụng . Nếu lắp ráp hệ thống mới chúng ta không nên dùng ổ đĩa chuẩn PATA .

PATA có thể còn hai tốc độ ATA100 và ATA133 . Hiển nhiên tốt nhất chúng ta nếu dùng loại ổ cứng này thì dùng ổ ATA133 cùng với cổng ATA133 . Để tăng hiệu suất cao nhất không nên hai ổ cứng dùng chung một Cable ở chế độ Master và Slave và nên mỗi ổ dùng Cable riêng với chế độ Master . Thật không may mắn những Mainboard mới không có nhiều hơn hai kênh IDE trên Mainboard nên việc lựa chọn dùng những ổ cứng PATA là điều bất khả kháng.

Chúng ta cũng không nên quên rằng cổng PATA cũng có thể hỗ trợ RAID

Ở hình trên cổng PATA không được điều khiển bằng Chipset mà được điều khiển bởi Chip thêm vào để hỗ trợ RAID là GigaRAID.

Do PATA dần dần bị loại bỏ khỏi hệ thống nên chúng ta tập trung và SATA .

SATA có thể có hai tốc độ : SATA I ( 1.5Gbps) và SATA II ( 3 Gbps) . Tốt nhất là ổ cứng SATA II nối với cổng SATA II trên Mainboard .

Việc cài đặt rất dễ dàng . Nối một Cable SATA, cable nguồn SATA và ổ cứng.

Đầu còn lại của Cable SATA cắm tới cổng SATA trên Mainboard . Cách tổ chức tốt nhất là dùng những cổng có số nhỏ trước . Ví dụ nếu cổng trên Mainboard dùng Chipset SouthBridge ICH6 có ghi SATA0, SATA1, SATA2 và SATA3 . Chúng ta sẽ dùng cổng SATA0 và SATA1 . Nên nhớ rằng bạn phải cắm Cable vào cổng mà hỗ trợ RAID trên Mainboard ( hoặc trên Card điều khiển RAID cắm thêm )

Cấu hình RAID

Nếu dùng những cổng điều khiển ổ cứng bằng Chipset hỗ trợ RAID , đầu tiên chúng ta vào Setup của Mainboard và cấu hình chúng thành RAID để thay thế IDE .
Đối với cấu hình khi chọn IDE thì chúng làm việc như cổng IDE thông thường , nếu chọn cấu hình là RAID là cho phép chúng làm việc như kiểu hệ thống RAID.
Trên thực tế nếu chúng ta không thay đổi cấu hình thành RAID thì hệ thống của chúng ta không xuất hiện cấu hình RAID này trong quá trình POST , bởi vì ngăn chặn chúng ta thiết lập cấu hình lung tung trong hệ thống .

Do đó vào Setup của Mainboard ( bằng cách bấm phím Del sau khi bật máy tính ) để thay đổi sự lựa chọn này . Trong lựa chọn của Mainboard chọn Advanced , Drive Configuration, “Configure SATA As” . Phần lựa chọn này tuỳ thuộc vào nhà sản xuất.

Sau khi thay đổi cấu hình này , bạn cần lưu lại sự thay đổi và thoát ra ngoài

Cấu hình RAID bằng cách bấm phím trong quá trình POST (Power-On Self Test) . Dùng tổ hợp phím nào để vào phần đặt cấu hình cho RAID sẽ xuất hiện trên màn hình trong quá trình POST và phụ thuộc tuỳ theo nhà sản xuất Chip như :
Marvell là Control – M,
SiliconImage là Control – S,
JMicron là Control – J
Trong trường hợp Mainboard dùng 02 Chip để hỗ trợ RAID sẽ có hai ví dụ như một RAID dùng cho Chipset và một RAID khác dùng Chip Marvell 88SE6145 , thì sẽ xuất hiện hai hiển thị cho việc lựa chọn này .
Khi nối hai ổ cứng với phần điều khiển RAID bằng Chipset theo hình dưới đây và bấm Ctrl-I để vào cấu hình hệ thống RAID

Trên màn hình sẽ xuất hiện khác nếu khi cắm ổ cứng vào Chip Marvell để điều khiển RAID , để vào cấu hình hệ thống RAID bấm Ctrl-M

Đối với hệ thống RAID dùng Chipset Intel sau khi bấm Ctrl-I trên màn hình sẽ xuất hiện như sau

M��i tiện ích rất đơn giản và dễ sử dụng . Trong ví dụ của chúng ta trên màn hình xuất hiện những thông tin về những ổ cứng cắm trong máy tính .

Đầu tiên chọn Create RAID Volume , để thiết lập hệ thống RAID theo hình dưới đây

Ở đây chúng ta sẽ phải cấu hình như sau :

Volume Name : hệ điều hành sẽ truy cập vào RAID thông qua tên này .
RAID Level : kiểu RAID mà bạn muốn , RAID0 , RAID1 , hoặc những kiểu RAID khác phụ thuộc vào Chip điều khiển RAID .
Disks : chọn những đĩa mà bạn muốn trong mảng RAID
Strip size : kích thước của mẩu dữ liệu mà hệ thống RAID sẽ sử dụng .
Capacity : có thể cấu hình dung lượng thấp hơn nếu như chúng ta tạo nhiều RAID Volume ( giống như khái niệm “partition”trong mảng RAID , có nghĩa là có thể tạo hai hoặc nhiều ổ RAID ) .

Ví dụ nếu mảng có dung lượng 160GB , chúng ta cấu hình 100GB cho RAID còn 60GB còn lại làm việc như một ổ cứng độc lập tách rời .
Sau khi bấm “Create Volume” , trên màn hình xuất hiện hỏi việc khẳng định cho công việc này và thông báo dữ liệu trên ổ cứng sẽ bị xoá . Bấm “Y” và RAID được thiết lập

Sau đó trên màn hình xuất hiện về việc tạo xong hệ thống RAID

Cài đặt hệ điều hành

Bây giờ bạn cần cài hệ điều hành sau khi khai báo xong cấu hình RAID của phần cứng . Chúng ta sẽ cài hệ điều hành Windows XP.

Cho đĩa CD cài đặt Windows XP vào ổ CDROM , khởi động máy tính cho phép ổ CD khởi động trước. Có một vấn đề là Windows XP không tự động nhận ra hệ thống RAID , do đó nó nghĩ rằng máy tính không có ổ cứng cài đặt như thông báo theo hình dưới đây

Lúc này bạn cần phải có đĩa mềm mà chứa phần Driver của RAID . Phần Driver của RAID được chứa trong đĩa CD-ROM đi kèm theo Mainboard khi mua , hoặc theo Card kèm thêm điều khiển RAID . Ứng dụng này được nằm theo thư mục gọi là RAID hoặc tương tự như vậy .

Thông thường thì chúng là file nén nên chúng ta phải giải nén và chạy File có phần mở rộng là .exe , nó sẽ yêu cầu chèn đĩa mềm trắng vào ổ mềm và tạo thành đĩa cần thiết để sử dụng .

Nếu bạn không có đĩa CD này thì cần tải trên trang Web của nhà sản xuất Mainboard hoặc Chipset .

Khi Windows XP bắt đầu khởi động việc cài đặt, quá trình LOAD bắt đầu xảy ra, chúng ta sẽ theo dõi khi có dòng thông báo “Press F6 if you need to install a third party SCSI or RAID driver…” thì bấm ngay phím F6 và chèn đĩa mềm vừa tạo vào ổ mềm .

Tự bản thân Windows không xác định được vị trí của Driver RAID như hình dưới đây

Khi màn hình xuất hiện như trên bạn bấm phím “S” để chọn từ ổ mềm Driver mà Windows sẽ tải, như hình dưới :

Trong trường hợp ví dụ trên , hãy chọn “Intel (R) 82801GR/GH SATA RAID Controller (Desktop ICH7R/DH)” – do chúng ta dùng Chip ICH7R.

Sau khi chọn Driver trên màn hình sẽ hiển thị Driver sẽ được cài đặt như hình dưới

Từ bây giờ Windows sẽ nhận ra mảng RAID chính xác của nó . Chúng ta dùng hệ thống RAID0 với 02 ổ cứng 80 GB và Windows sẽ nhận dạng 160 GB như hình dưới đây

Chúng ta nên lưu ý số hiển thị trên màn hình nhiều khi sẽ thấp hơn một chút . Ví dụ ổ cứng dung lượng 80GB thông thường nhận 74.53GB , đó là nguyên nhân tại sao nhìn thấy 150GB mà không phải là 160GB .

Bây giờ cho phép quá trình cài đặt Windows như bình thường , cài đặt các Driver phần cứng đi kèm theo và cài những chương trình phần mềm ứng dụng cần thiết để sử dụng .

Như tôi đã nói ở trên phần mềm điều khiển RAID đi kèm với thiết bị nên có thể cài chương trình theo dõi hệ thống RAID.

Phần mềm quản lý của tôi có tên là Intel Matrix Storage Manager, nó cho phép bạn xem tổng quát hệ thống RAID và kiểm tra trạng thái RAID nếu chúng ta dùng nhiều ổ cứng trong hệ thống

Chúc các bạn thành công với hệ thống RAID của mình.

Bài viết được tổng hợp từ nhiều nguồn thông tin và chỉnh sửa theo ý kiến chủ quan của tác giả

Nguyễn Thượng Triều

How to map Google Drive on CentOS

I am learning around with grive, a third party Google Drive client.  It’s pretty cool, but the instructions are based on an Ubuntu install.  I had an interesting time setting it up on CentOS 6.3 64bit, so I decided to share what I learned.

First, get connected EPEL and all repositories,

#yum update
#yum install json-c* expat* curl* 
# rpm -i
# git clone git://
# cd grive
# cmake .
# make

If there are errors, just install new Boost version follow:

after that you give build again:

#cd ./grive  # grive repo is already checked out here
#git clean -fdx  
#cmake .
[root@mrcool]# cp ./grive/grive /home/mrcool/GoogleDrive/
[root@mrcool]# cd /home/mrcool/GoogleDrive/
[root@mrcool GoogleDrive]# ./grive -a

Please go to this URL and get an authentication code:……..

Please input the authentication code here: 
Reading local directories
Synchronizing folders
Reading remote server file list
Synchronizing files
sync ./grive doesn't exist in server, uploading