Tuesday, December 28, 2010

Linux: Check For Memory Leaks In Programs

Linux: Check For Memory Leaks In Programs

How do I check my C programs under Linux operating systems for memory leaks? How do I debug and profiling Linux executables?

You need to use a tool called Valgrind. It is memory debugging, memory leak detection, and profiling tool for Linux and Mac OS X operating systems. Valgrind is a flexible program for debugging and profiling Linux executables. From the official website:
The Valgrind distribution currently includes six production-quality tools: a memory error detector, two thread error detectors, a cache and branch-prediction profiler, a call-graph generating cache profiler, and a heap profiler. It also includes two experimental tools: a heap/stack/global array overrun detector, and a SimPoint basic block vector generator. It runs on the following platforms: X86/Linux, AMD64/Linux, PPC32/Linux, PPC64/Linux, and X86/Darwin (Mac OS X).

How Do I Install Valgrind?

Type the following command under CentOS / Redhat / RHEL Linux:
# yum install valgrind
Type the following command under Debian / Ubuntu Linux:
# apt-get install valgrind

How Do I use Valgrind?

If you normally run your program like this:
./a.out arg1 arg2
OR
/path/to/myapp arg1 arg2
Use this command line to turn on the detailed memory leak detector:
valgrind --leak-check=yes ./a.out arg1 arg2
valgrind --leak-check=yes /path/to/myapp arg1 arg2

You can also set logfile:
valgrind --log-file=output.file --leak-check=yes --tool=memcheck ./a.out arg1 arg2
Most error messages look like the following:
cat output.file
Sample outputs:
==43284== Memcheck, a memory error detector
==43284== Copyright (C) 2002-2009, and GNU GPL'd, by Julian Seward et al.
==43284== Using Valgrind-3.5.0 and LibVEX; rerun with -h for copyright info
==43284== Command: ./a.out
==43284== Parent PID: 39695
==43284==
==43284== Invalid write of size 4
==43284==    at 0x4004B6: f (in /tmp/a.out)
==43284==    by 0x4004C6: main (in /tmp/a.out)
==43284==  Address 0x4c1c068 is 0 bytes after a block of size 40 alloc'd
==43284==    at 0x4A05E1C: malloc (vg_replace_malloc.c:195)
==43284==    by 0x4004A9: f (in /tmp/a.out)
==43284==    by 0x4004C6: main (in /tmp/a.out)
==43284==
==43284==
==43284== HEAP SUMMARY:
==43284==     in use at exit: 40 bytes in 1 blocks
==43284==   total heap usage: 1 allocs, 0 frees, 40 bytes allocated
==43284==
==43284== 40 bytes in 1 blocks are definitely lost in loss record 1 of 1
==43284==    at 0x4A05E1C: malloc (vg_replace_malloc.c:195)
==43284==    by 0x4004A9: f (in /tmp/a.out)
==43284==    by 0x4004C6: main (in /tmp/a.out)
==43284==
==43284== LEAK SUMMARY:
==43284==    definitely lost: 40 bytes in 1 blocks
==43284==    indirectly lost: 0 bytes in 0 blocks
==43284==      possibly lost: 0 bytes in 0 blocks
==43284==    still reachable: 0 bytes in 0 blocks
==43284==         suppressed: 0 bytes in 0 blocks
==43284==
==43284== For counts of detected and suppressed errors, rerun with: -v
==43284== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 4 from 4)

Sample C Program

Create test.c:
 
#include 
 
  void f(void)
  {
     int* x = malloc(10 * sizeof(int));
     x[10] = 0;        // problem 1: heap block overrun
  }                    // problem 2: memory leak -- x not freed
 
  int main(void)
  {
     f();
     return 0;
  }
 
You can compile and run it as follows to detect problems:
gcc test.c
valgrind --log-file=output.file --leak-check=yes --tool=memcheck ./a.out
vi output.file

References:

  • See valgrind project web site and the valgrind man page for more information:
man valgrind

All About YUM

up2date command was part of RHEL v4.x or older version. You need to use yum command to update and patch the system using RHN or Internet. Use yum command to install critical and non-critical security updates as well as binary packages. Login as the root user to install and update the system.

Task: Register my system with RHN

To register your system with RHN type the following command and just follow on screen instructions (CentOS user skip to next step):
# rhn_register
WARNING! These examples only works with RHEL / CentOS Linux version 5.x or above. For RHEL 4.x and older version use up2date command.

Task: Display list of updated software (security fix)

Type the following command at shell prompt:
# yum list updates

Task: Patch up system by applying all updates

To download and install all updates type the following command:
# yum update

Task: List all installed packages

List all installed packages, enter:
# rpm -qa
# yum list installed

Find out if httpd package installed or not, enter:
# rpm -qa | grep httpd*
# yum list installed httpd

Task: Check for and update specified packages

# yum update {package-name-1}
To check for and update httpd package, enter:
# yum update httpd

Task: Search for packages by name

Search httpd and all matching perl packages, enter:
# yum list {package-name}
# yum list {regex}
# yum list httpd
# yum list perl*

Sample output:
Loading "installonlyn" plugin
Loading "security" plugin
Setting up repositories
Reading repository metadata in from local files
Installed Packages
perl.i386                                4:5.8.8-10.el5_0.2     installed
perl-Archive-Tar.noarch                  1.30-1.fc6             installed
perl-BSD-Resource.i386                   1.28-1.fc6.1           installed
perl-Compress-Zlib.i386                  1.42-1.fc6             installed
perl-DBD-MySQL.i386                      3.0007-1.fc6           installed
perl-DBI.i386                            1.52-1.fc6             installed
perl-Digest-HMAC.noarch                  1.01-15                installed
perl-Digest-SHA1.i386                    2.11-1.2.1             installed
perl-HTML-Parser.i386                    3.55-1.fc6             installed
.....
.......
..
perl-libxml-perl.noarch                  0.08-1.2.1             base
perl-suidperl.i386                       4:5.8.8-10.el5_0.2     updates 

Task: Install the specified packages [ RPM(s) ]

Install package called httpd:
# yum install {package-name-1} {package-name-2}
# yum install httpd

Task: Remove / Uninstall the specified packages [ RPM(s) ]

Remove package called httpd, enter:
# yum remove {package-name-1} {package-name-2}
# yum remove httpd

Task: Display the list of available packages

# yum list all

Task: Display list of group software

Type the following command:
# yum grouplist
Output:
Installed Groups:
   Engineering and Scientific
   MySQL Database
   Editors
   System Tools
   Text-based Internet
   Legacy Network Server
   DNS Name Server
   Dialup Networking Support
   FTP Server
   Network Servers
   Legacy Software Development
   Legacy Software Support
   Development Libraries
   Graphics
   Web Server
   Ruby
   Printing Support
   Mail Server
   Server Configuration Tools
   PostgreSQL Database
Available Groups:
   Office/Productivity
   Administration Tools
   Beagle
   Development Tools
   GNOME Software Development
   X Software Development
   Virtualization
   GNOME Desktop Environment
   Authoring and Publishing
   Mono
   Games and Entertainment
   XFCE-4.4
   Tomboy
   Java
   Java Development
   Emacs
   X Window System
   Windows File Server
   KDE Software Development
   KDE (K Desktop Environment)
   Horde
   Sound and Video
   FreeNX and NX
   News Server
   Yum Utilities
   Graphical Internet
Done

Task: Install all the default packages by group

Install all 'Development Tools' group packages, enter:
# yum groupinstall "Development Tools"

Task: Update all the default packages by group

Update all 'Development Tools' group packages, enter:
# yum groupupdate "Development Tools"

Task: Remove all packages in a group

Remove all 'Development Tools' group packages, enter:
# yum groupremove "Development Tools"

Task: Install particular architecture package

If you are using 64 bit RHEL version it is possible to install 32 packages:
# yum install {package-name}.{architecture}
# yum install mysql.i386

Task: Display packages not installed via official RHN subscribed repos

Show all packages not available via subscribed channels or repositories i.e show packages installed via other repos:
# yum list extras
Sample output:
Loading "installonlyn" plugin
Loading "security" plugin
Setting up repositories
Reading repository metadata in from local files
Extra Packages
DenyHosts.noarch                         2.6-python2.4          installed
VMwareTools.i386                         6532-44356             installed
john.i386                                1.7.0.2-3.el5.rf       installed
kernel.i686                              2.6.18-8.1.15.el5      installed
kernel-devel.i686                        2.6.18-8.1.15.el5      installed
lighttpd.i386                            1.4.18-1.el5.rf        installed
lighttpd-fastcgi.i386                    1.4.18-1.el5.rf        installed
psad.i386                                2.1-1                  installed
rssh.i386                                2.3.2-1.2.el5.rf       installed

Task: Display what package provides the file

You can easily find out what RPM package provides the file. For example find out what provides the /etc/passwd file:
# yum whatprovides /etc/passwd
Sample output:
Loading "installonlyn" plugin
Loading "security" plugin
Setting up repositories
Reading repository metadata in from local files

setup.noarch                             2.5.58-1.el5           base
Matched from:
/etc/passwd

setup.noarch                             2.5.58-1.el5           installed
Matched from:
/etc/passwd
You can use same command to list packages that satisfy dependencies:
# yum whatprovides {dependency-1} {dependency-2}
Refer yum command man page for more information:
# man yum

LightSpeed WebServer (Standard Free)

wget http://www.litespeedtech.com/packages/4.0/lsws-4.0.15-std-i386-linux.tar.gz
tar -xvf lsws-4.0.15-std-i386-linux.tar.gz
cd lsws-4.0.15
./install.sh

Configure the settings & it will install it fully.

INSTALLALLING THE CPANEL PLUGIN
cd /usr/src
wget http://www.litespeedtech.com/packages/cpanel/lsws_whm_plugin_install.sh
chmod 700 lsws_whm_plugin_install.sh
./lsws_whm_plugin_install.sh
rm -f lsws_whm_plugin_install.sh

TightVNC Desktop

1. Installing the required packages


The server package is called 'vnc-server'. Run the command rpm -q vnc-server.
The result will be either package vnc-server is not installed or something like vnc-server-4.0-11.el4.
If the server is not installed, install it with the command: yum install vnc-server.
The client program is 'vnc'. You can use the command yum install vnc to install the client if rpm -q vnc shows that it is not already installed.
Make sure to install a window manager in order to get a normal GUI desktop. You can use the command yum groupinstall "GNOME Desktop Environment" to install the Gnome Desktop and requirements, for example. Other popular desktop environments are "KDE" and "XFCE-4.4". XFCE is more light-weight than Gnome or KDE and available from the "extras" repository.


2. Configuring un-encrypted VNC


We will be setting up VNC for 3 users. These will be 'larry', 'moe', and 'curly'.
You will perform the following steps to configure your VNC server:
  1. Create your VNC users.
  2. Set your users' VNC passwords.
  3. Edit the server configuration.
  4. Create and customize xstartup scripts.
  5. Start the VNC service.
  6. Test each VNC user.
  7. Setup the VNC service to start on reboot.
  8. Additional optional enhancements

2.1. Create your VNC users


As root:

$ su -
# useradd larry
# useradd moe
# useradd curly
# passwd larry
# passwd moe
# passwd curly


2.2. Set your users' VNC passwords


Login to each user, and run vncpasswd. This will create a .vnc directory.

[~]$ cd .vnc
[.vnc]$ ls
passwd


2.3. Edit the server configuration


Edit /etc/sysconfig/vncservers, and add the following to the end of the file.

VNCSERVERS="1:larry 2:moe 3:curly"
VNCSERVERARGS[1]="-geometry 640x480"
VNCSERVERARGS[2]="-geometry 640x480"
VNCSERVERARGS[3]="-geometry 800x600"

Larry will have a 640 by 480 screen, as will Moe. Curly will have an 800 by 600 screen.

2.4. Create xstartup scripts


We will create the xstartup scripts by starting and stopping the vncserver as root.

# /sbin/service vncserver start
# /sbin/service vncserver stop

Login to each user and edit the xstartup script. To use Larry as an example, first login as larry

[~]$ cd .vnc
[.vnc] ls
mymachine.localnet:1.log  passwd  xstartup

Edit xstartup. The original should look like:

#!/bin/sh
# Uncomment the following two lines for normal desktop:
# unset SESSION_MANAGER
# exec /etc/X11/xinit/xinitrc
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
twm &

Add the line indicated below to assure that an xterm is always present, and uncomment the two lines as directed if you wish to run the user's normal desktop window manager in the VNC. Note that in the likely reduced resolution and color depth of a VNC window the full desktop will be rather cramped and a look bit odd. If you do not uncomment the two lines you will get a gray speckled background to the VNC window.

#!/bin/sh
# Add the following line to ensure you always have an xterm available.
( while true ; do xterm ; done ) &
# Uncomment the following two lines for normal desktop:
unset SESSION_MANAGER
exec /etc/X11/xinit/xinitrc
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
twm &


2.5. Start the VNC server


Start the vncserver as root.

# /sbin/service vncserver start


2.6. Test each VNC user



2.6.1. Testing with a java enabled browser


Let us assume that mymachine has an IP address of 192.168.0.10. The URL to connect to each of the users will be:

Larry is http://192.168.0.10:5801
Moe   is http://192.168.0.10:5802
Curly is http://192.168.0.10:5803

Connect to http://192.168.0.10:5801. A java applet window will pop-up showing a connection to your machine at port 1. Click the [ok] button. Enter larry's VNC password, and a 640x480 window should open using the default window manager selected for larry . The above ports  5801, 5802 and 5803  must be open in the firewall {iptables) for the source IP addresses or subnets of a given client.

2.6.2. Testing with a vnc client



For Larry: vncviewer 192.168.0.10:1
For   Moe: vncviewer 192.168.0.10:2
For Curly: vncviewer 192.168.0.10:3

To test larry using vncviewer, vncviewer 192.168.0.10:1. Enter Larry's VNC password, and a 640x480 window should open using Larry's default window manager. The vncviewer client will connect to port 590X where X is an offset of 1,2,3 for Larry, Moe, and Curly respectively, so these ports must be open in the firewall for the IP addresses or subnets of the clients.

2.6.3. Starting vncserver at boot


To start vncserver at boot, enter the command /sbin/chkconfig vncserver on.
For basic VNC configuration the procedure is now complete. The following sections are optional refinements to enhance security and functionality.

3. VNC encrypted through an ssh tunnel


You will be connecting through an ssh tunnel. You will need to be able to ssh to a user on the machine. For this example, the user on the vncserver machine is Larry.
  1. Edit /etc/sysconfig/vncservers, and add the option -localhost.
    VNCSERVERS="1:larry 2:moe 3:curly"
    VNCSERVERARGS[1]="-geometry 640x480 -localhost"
    VNCSERVERARGS[2]="-geometry 640x480 -localhost"
    VNCSERVERARGS[1]="-geometry 800x600 -localhost"
  2. /sbin/service vncserver restart
  3. Go to another machine with vncserver and test the VNC.
    1. vncviewer -via larry@192.168.0.10 localhost:1
    2. vncviewer -via moe@192.168.0.10 localhost:2
    3. vncviewer -via curly@192.168.0.10 localhost:3
By default, many vncviewers will disable compression options for what it thinks is a "local" connection. Make sure to check with the vncviewer man page to enable/force compression. If not, performance may be very poor!

4. Recovery from a logout


If you logout of your desktop manager, it is gone!
  • We added a line to xstartup to give us an xterm where we can restart our window manager.
    • For gnome, enter gnome-session.
    • For kde, enter startkde.

5. Remote login with vnc-ltsp-config


To allow remote login access via a vnc-client to the Centos system, the RPM packages named vnc-ltsp-config and xinetd can be installed. When a vnc-client connects to one of the configured ports, the user will be given a login screen. The sessions will *not* be persistent. When a user logs out, the session is gone.
The rpm package vnc-ltsp-config is easily installed via the EPEL repository noted in Available Repositories
Note: There are no major dependencies for the package so the vnc-ltsp-config*.rpm could easily be downloaded and installed without the need for enabling the EPEL repository.
Install, as root via:

# yum install xinetd vnc-ltsp-config
# /sbin/chkconfig xinetd on
# /sbin/chkconfig vncts on
# /sbin/service xinetd restart

Next, as root edit the file "/etc/gdm/custom.conf".
  • To the next blank line below the "[security]" section add "DisallowTCP=false"
  • To the next blank line below the "[xdmcp]" section add "Enable=true"
  • Make sure you are in a position to either run "gdm-restart" for default Gnome installs or just reboot the CentOS box.
This will add the ability to get the following default vnc-client based session connections:
resolution
color-depth
port
1024x768
16
5900/tcp
800x600
16
5901/tcp
640x480
16
5902/tcp
1024x768
8
5903/tcp
800x600
8
5904/tcp
640x480
8
5905/tcp

A major advantage of using the vnc-ltsp-config setup is the reduction of system resource utilization compared to the standard "per-user setup". No user processes will be started or memory consumed until a user actually logs into the system. Also, no pre-thought for user setup is needed (eg skip all of the manual individual user setup for vnc-server). The downside to the vnc-ltsp-config setup is that *any* user with the ability to login will likely have the ability to log into the system via a vnc-client with full gui unless steps are taken to limit that type of access. Also, there is no session persistance! Once the vnc-client closes, the vnc-ltsp-config session will terminate (by default) and all running processes will be killed.
This option can be combined with ssh tunnelling using a slightly modified version of the "vncviewer -via" command noted above:

vncviewer -via remoteUser@remoteHost localhost:vncSinglePortNumber

For the default vnc-ltsp-config install, the "vncSinglePortNumber" is the last digit only of the port number. Port 5900 (1024x768 16bit) would just be "0", for example.
Note: you will need to be aware of possible interaction issues if you enable either selinux or iptables.

6. VNC-Server for an already logged in GUI console session - 2 options


Often you will need remote access to an already logged in GUI session on a "real" console. Or you will need to help another user remotely with an GUI or visual issue. You will need either "vnc-server" or "x11vnc". The vnc-server option will be a module added to X11 for "allways on" vnc support, while x11vnc will allow for adhoc vnc support.
vnc-server install will require no third party repos or source building.
x11vnc is a way to view remotely and interact with real X displays (i.e. a display corresponding to a physical monitor, keyboard, and mouse) with any VNC viewer. In this way it plays the role for Unix/X11 that WinVNC plays for Windows.

6.1. x11vnc adhoc option


Karl Runge has generously provide a exceptional amount of information at http://www.karlrunge.com/x11vnc/ for x11vnc. There is info on securing the connection and also an "Enhanced TightVNC Viewer (ssvnc)". To make it easy, follow these steps:
1. Download the latest rpm install from http://dag.wieers.com/rpm/packages/x11vnc/ to the host you want the vnc-client to connect to:

wget http://dag.wieers.com/rpm/packages/x11vnc/x11vnc-0.9.3-1.el5.rf.i386.rpm

2. Install, as root, via the yum or rpm programs on the host you want the vnc-client to connect to:

yum install x11vnc-0.9.3-1.el5.rf.i386.rpm

3. Start the x11vnc process on the host you want the vnc-client to connect to. Please take a long look at the possible options from the x11vnc website. A very simple/insecure example for a trusted network setup (local network or VPN) is to have the user with the GUI console issue the command:

[user@helpme_host ~$] x11vnc -nopw -display :0.0

Then connect (without password) via a vnc-client to the IP/hostname and port noted by the x11vnc command. By default, x11vnc will allow connections from all interfaces. Host based firewall settings may need to be modified.
You can combine this with ssh tunneling:

ssh -C -t -L 5900:localhost:5900 [remote ip] 'x11vnc -usepw -localhost -display :0'

Note that the -C flag is for compression, so may not be required

6.2. vnc-server X11 "always on" option


1. On the the system you want to run vnc-server, install vnc-server as noted above.
2. Edit /etc/X11/xorg.conf, as root, and add/create a 'Module' Section and add 'Load "vnc"':

Section "Module"
  Load "vnc"
EndSection

3. For standard vnc authentication, edit /etc/X11/xorg.conf, as root, and add to the 'Screen' Section:

Option "SecurityTypes" "VncAuth"
  Option "UserPasswdVerifier" "VncAuth"
  Option "PasswordFile" "/root/.vnc/passwd"

4. As root, run 'vncpasswd" to create the password noted above.
5. Restart X11 (++ will work if on the console already)
6. You should be able to connect with a vncviewer client as normal.

Installing cPanel Web Server

To begin your installation, use the following commands:

  1. cd /home — Opens the directory /home.
  2. wget -N http://layer1.cpanel.net/latest — Fetches the latest installation file from the cPanel servers.
  3. sh latest — Opens and runs the installation files.
  4. /usr/local/cpanel/cpkeyclt — Activates your license after installation


(This will automatically give you an 15-Day cPanel Trial License, If you need a purchased license you may do so by choosing upgrade/downgrade options your virtual server or dedicated server).

Kloxo DNS

With Kloxo you can chose to run your own nameservers, which enable you to have custom DNS records like "ns1 and ns2.mydomain.com" or you can use the DNS servers we provide for VPS customers.
  • The main benefits to using Kloxo's built in DNS options is you can manage all DNS settings through Kloxo and create custom nameservers. This allows easy management of all domains you create in Kloxo. The downsides are setup can be a bit confusing and troubleshooting is more difficult if you run into DNS issues.
  • If you do not use Kloxo's DNS option you will need to create zone files through HyperVM once you add a domain through Kloxo. The HyperVM option requires no additional setup through Kloxo and "just works". You may find that although this method adds a bit of overhead to domain management it may be the easier choice in the long run.
If you want to stick with the HyperVM option please see the DNS instructions in the following document:
The remainder of these instructions are related to Kloxo's DNS offering.
To get started click on the "DNS Templates" icon from the home screen.

Then click the "Add DNS Template" tab and you will be presented with the following screen:

Fill in the information as defined above. ns1 and ns2.yourdomain.tld should be replaced with the domain you want to use for your name servers
Click the "Add" button when you are done. You will be returned to the main DNS Templates screen. From here you can edit your templates by clicking on the name in the list. In order for these nameservers to work you will now need to register your nameservers at your domain registrar.

Registering Your Nameservers

  1. Login To Your Domain Registrar Account
  2. Locate the domain registration field (we have provided an example below)

  3. image
  4. Under the "Domain Utilities" heading click the 'Register Name Server' option. A box like the one below will appear to the right.
  5. Enter the name server information and the IP address(es) associated with your VPS. You will have to do this step twice, once for each nameserver.
ns1 should be the primary IP address of your VPS that was included in your welcome e-mail and the secondary can either be the same as the first, if your registrar allows, or the second IP.

Changing your Nameservers

Now that your name servers are registered you will need to associate your domain with those name servers. While still logged into your billing account, click "Change DNS" under the 'Domain Utility' heading. The following should appear:

In the fields labled 1) and 2) enter the name servers you just registered in the previous step and then click the "Submit Changes" button below the box.
This step concludes setting up your name servers. These changes can take up to 24 hours to propagate, although they are usually updated within 30 minutes. When a ping of your name servers returns the IP addresses you registered your nameservers are ready.
NOTE: As previously mentioned, if your domains are registered with another provider you will need to register your name servers and update your DNS settings in the same manner at your respective registrar.

Setting up VPN for CentOS

First, You will need to open up a ticket with our support desk and ask for TUN/TAP to be enabled after that has been completed you can login to your virtual server and do the following.

wget http://123systems.net/scripts/install-openvpn.sh
chmod +x install-openvpn.sh
./install-openvpn.sh


You will be prompted to enter values for your server and client certificate, feel free to accept (hit enter) the default values. Its not recommended to setup a password for your server certificate as you will have to type in the password each time you wish to start/restart the openvpn daemon.
You can however set a password for your client’s certificate since it offers extra level of protection in case your certificate and key files are compromised. You will be prompted for that password each time you connect on your VPS’s VPN.
After the script finished installing openvpn (should be very quick) the client keys and the openvpn client configuration file will be archived in /root/keys.tgz
You may use a sftp/scp client such as winscp or filezilla to download the archive on your computer.
If you already haven’t installed openvpn for windows you may do so now.
You may use winrar or 7zip to extract the content of keys.tgz in C:\Program Files\OpenVPN\config\VPN (create a folder named VPN there)
After you have extracted the files from keys.tgz in the above folder, you may start openvpn-gui from the start menu, right click the tray icon, go to VPN and click connect. After the icon turns green all your traffic will be forwarded through your VPS, no extra configuration on your browser/IM client/email client is required.

Saturday, December 25, 2010

สร้าง Virtual Host ใน Apache WebServer

This summary is not available. Please click here to view the post.

หนังสือคู่มือติดตั้ง CentOS ภาษาไทย (E-book)

ชื่อหนังสือ: การติดตั้งและใช้งาน CentOS ลีนุกซ์เซิร์ฟเวอร์
เขียนโดย: โสทร รอดคงที่
เนื้อหาในเล่ม

บทที่ 1 โครงสร้าง ฮาร์ดดิสก์และการเรียกชื่อฮาร์ดดิสก์
บทที่ 2 หลักการติดตั้งลีนุกซ์
บทที่ 3 ตัวอย่างการติดตั้ง CentOS
บทที่ 4 กระบวนการบูทของลีนุกซ์
บทที่ 5 การเปิดปิด Service
บทที่ 6 โครงสร้างของไดเรกทอรีของลีนุกซ์
บทที่ 7 การใช้งาน Vi
บทที่ 8 การใช้คำสั่ง RPM และ Yum จัดการแพ็กเก็จ
บทที่ 9 การบริหารจัดการบัญชีรายชื่อผู้ใช้ระบบ User / Group Accounts
บทที่ 10 Permission ของไฟล์ และ Directory
บทที่ 11 การใช้งาน System Config ต่าง ๆ
บทที่ 12การ mount ไฟล์ system อื่นๆ
บทที่ 13 การใช้โปรแกรมบีบอัดไฟล์เพื่อBackup ข้อมูล
บทที่ 14 คำสั่งที่เกี่ยวข้องกับการดูแลเซิร์ฟเวอร์
บทที่ 15 การใช้งานcrontab ตั้งเวลาทำงาน
บทที่ 16 การเพิ่มพาร์ติชันหรือเพิ่มฮาร์ดดิสก์
บทที่ 17 การทำ Disk Quota
บทที่ 18 DNS (Domain Name System)
บทที่ 19 Apache เวบเซิร์ฟเวอร์ และ Virtual Host
บทที่ 20 ติดตั้ง อัพเกรด และใช้งานMySQL
บทที่ 21 การติดตั้ง Apache+PHP
บทที่ 22 Postfix Mail Server
บทที่ 23 การควบคุมเซิร์ฟเวอร์ลีนุกซ์จากระยะไกลด้วย SSH และส่งไฟล์ ด้วย SFTP
บทที่ 24 NFS Server
บทที่ 25 รักษาความปลอดภัย Server ด้วย Arno’s Script
บทที่ 26 แชร์ไฟล์ระหว่างลีนุกซ์และวินโดว์ด้วยSAMBA
บทที่ 27การใช้งาน linux rescue

การติดตั้งและใช้งาน CentOS ลีนุกซ์เซิร์ฟเวอร์
Download : http://linux.sothorn.org/download/CentOS_book.pdf
Mirror : http://linux.sothorn.org/node/558

VirtualHost ง่ายๆ สไตล์ Windows ด้วย Apache

VirtualHost ง่ายๆ สไตล์ Windows ด้วย Apache

     การติดตั้ง VirtualHost นี้อยู่บนพื้นฐานการติดตั้งบน WindowsXP ส่วนตัว Windows อื่นๆ ผู้อ่านต้องศึกษาเพิ่มเติมเอง และสำหรับตระกูล Linux ขอติดไว้ก่อนเพราะตอนนี้เครื่องผมยังไม่ได้ลง Linux และไม่ได้เล่นมาหลายเดือนแล้ว และอยู่บนพื้นฐานการติดตั้งเพื่อใช้งานในเครื่องเดียว (เพื่อเป็นแนวทางในการทำ VirtualHost) และจะมีหัวข้อ Advanch,FreeHost ซึ่งจะเป็นการทำในการใช้งานจริงซึ่งท่านจะต้องมีความรู้หลายอย่างเพิ่มเติม เช่น DNS,Apache,NameBaseVirtualHost) อีกอย่างอยู่บนพื่นฐานของ AppServ ครับ ท่านต้องติดตั้ง AppServ เรียบร้อยเสียก่อนครับ

สิ่งที่ต้องมี :
  • คอมพิวเตอร์
  • WindowsXP *
  • AppServ
  • Card Lan *
  • ความรู้เรื่อง TCP/IP *
* Windows ที่ไม่มีปัญหาคือ WindowsXP ส่วนเวอร์ชั่นอื่นๆ ต้องศึกษาข้อมูลเพิ่มเติมว่าต้อง Set อะไรเพิ่ม หรือจะเจอปัญหาอะไร เช่น XP,2000 อาจจะต้อง Config apache เพิ่ม หรือแก้ไขบางอย่าง
* Card Lan ไม่รู้เกี่ยวหรือป่าว เพราะเครื่องผมมี Cardlan ทุกเครื่อง และ สำหรับ Win XP,2000 อาจจะเจอปัญหาว่า มี Card Lan แต่ไม่ได้ Plug สายแลน ระบบ หรือ service TCP/IP จะไม่ทำงาน (อันนี้เป็น ปัญหาหรือ Bugs ของ windows ให้ศึกษาหรือหาทางแก้เอง) และเคยเห็นกระทู้ที่ว่า ไม่มี CardLan ไม่สามารถติดตั้ง Apache ได้ เพราะ Apache ทำงานบน TCP/IP Port 80
* ความรู้เรื่อง TCP/IP ขี้นอยู่กับว่าท่านจะนำไปทำในระดับไหน ยิ่งเพิ่มระดับยิ่งต้องมีความรู้เพิ่มเติมดังต่อไปนี้
ระดับผู้สนใจ
  • พื้นฐาน (ผู้ที่ติดตั้ง CMS ได้แล้วแต่ต้องการทำ หลายไซต์)
  • Advance (ใช้งานในระบบ LAN)
  • FreeHost (ใช้งานเป็น FreeHost เล่นๆ ได้เลย)
เริ่มกันเลย
1. เปิด Notepad แล้วพิมพ์ ดังนี้
โค้ด:

#ชื่อไซต์อะไรก็ได้ในที่นี้สมมุติว่าชื่อไซต์ soda1.com กะ soda2.com
#ชื่อไซต์ต้องไม่มีอยู่จริงเพราะถ้ามีอยู่จริง ท่านจะไม่สามารถเข้าไปในไซต์จริงได้
#เพราะว่ามันจะวนกลับมาหาเครื่องท่าน เช่นถ้าท่านตั้งชื่อว่า
http://www.yahoo.com/ เวลาที่ท่าน
#ต้องการเข้า net
http://www.yahoo.com/ มันจะวิ่งกลับมาที่เครื่องของท่านนะเอง แทนที่จะไปไซต์
#Yahoo จริง
# สามารถเพิ่มได้ไม่จำกัดขึ้นอยู่กับว่าท่านจะทำ VirtualHost กี่ไซต์
127.0.0.1       localhost
127.0.0.1       soda1.com
127.0.0.1       soda2.com
เสร็จแล้ว Save เป็นชื่อไฟล์ HOSTS ไว้ใน C:\WINDOWS\system32\drivers\etc ครับ ระวัง Notepad จะเติม HOSTS.TXT ให้โดยอัตโนมัติ ให้ rename เป็น HOSTS เฉยๆ

2.ทดสอบโดย ping
http://www.soda1.com/ และ http://www.soda2.com/ จะต้องได้ผลดังนี้ครับ
โค้ด:

 C:\>ping www.soda1.com
Pinging www.soda1.com [127.0.0.1] with 32 bytes
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128

Ping statistics for 127.0.0.1:
    Packets: Sent = 4, Received = 4, Lost = 0 (0
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 0ms, Average = 0ms


C:\>ping www.soda2.com

Pinging www.soda2.com [127.0.0.1] with 32 bytes
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128

Ping statistics for 127.0.0.1:
    Packets: Sent = 4, Received = 4, Lost = 0 (0
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 0ms, Average = 0ms

ถ้าไม่ได้ ให้ตรวจสอบให้ดีว่า มี ไฟล์ HOST อยู่หรือป่าว

3.แก้ไข ไฟล์ httpd.conf (โดยไปที่ Start -> Programs -> AppServ -> Apache Configure Server -> Edit the Apache httpd.conf Configuration File)
ให้เพิ่ม Code นี้เข้าไป ที่ท้ายสุดของไฟล์
โค้ด:

 NameVirtualHost *

  <VirtualHost *>
    ServerName localhost
    DocumentRoot "C:\AppServ\www"
</VirtualHost>

<VirtualHost *>
    ServerName soda1.com
    DocumentRoot "C:\AppServ\www\soda1"
</VirtualHost>

<VirtualHost *>
    ServerName soda2com
    DocumentRoot "C:\AppServ\www\soda2"
</VirtualHost>

Save ไฟล์
*ตรง ServerName นั้นให้สัมพันธ์กับการตั้งชื่อในไฟล์ HOSTS ส่วน DocumentRoot นั้นก็แล้วแต่ท่านว่า Site ไหน เก็บใน Folder ไหน ให้จำไว้ให้ดี เพราะจะใช้ในข้อต่อไป

4.ไปที่ Folder C:\AppServ\www สร้าง folder ขี้นมาให้สัมพันธ์กันกับข้างต้น
สร้างโฟล์เดอร์ soda1 ใน C:\AppServ\www
สร้างโฟล์เดอร์ soda2 ใน C:\AppServ\www

5.กลับ ไปที่ AppServ ทดสอบ Apache โดยไปที่ Start -> Programs -> AppServ -> Apache Configure Server -> Test the Apache httpd.conf Configuration File )
จะต้องได้ผลดังนี้( ไม่มี Error ) Syntax OK
โค้ด:

c:/appserv/apache/conf/httpd.conf: Syntax OK
Note the errors or messages above, and press the <ESC> key to exit. 18...
6.ทดสอบ Apache อีกครั้ง
ใช้ notepad สร้าง html เช่น
โค้ด:

<html> My Name's SODA1 </html>  โดยทำการบันทึกเก็บไว้ที่  "C:\AppServ\www\soda1\index.html"
และ
<html> My Name's SODA2 </html>  โดยทำการบันทึกเก็บไว้ที่  "C:\AppServ\www\soda2\index.html"

7. ทดสอบโดย
เปิด IE พิมพ์ url
www.soda1.com/ จะต้องได้ My Name's SODA1
   และ พิมพ์ url
www.soda2.com/ จะต้องได้ My Name's SODA2
เสร็จ แล้วครับ เห็นไหมครับ ง่ายนิดเดียว ความจริงอธิบายยาวไปแค่นั้นเองครับ เผื่อคนที่ไม่ค่อยมีความรู้เรื่อง DNS,VirtualHost และอื่นๆ
ถ้าจะสรุปจริงๆ คือ
     1.แก้ไขไฟล์ HOSTS
     2.แก้ไขไฟล์ httpd.conf
     3.สร้าง Folder ให้ตรงกันเสร็จแล้วครับ VirtualHost
     4.และการทำ Nuke ก็แค่ Dup Folder Nuke ทั้งตัว html และ ตัวฐานข้อมูลไป แต่ละไซต์และแก้ config ให้ตรงกันเท่านั้นเอง

** หลังจากแก้ไข httpd.conf แล้วอย่าลืม restart apache ด้วยครับ
ไปที่ Start -> Programs -> AppServ -> Apache Control Server -> Restart
                                                 

CentOS - Apache Virtual Hosts #1

Now we have Apache installed and running, we can configure it to serve multiple domains using Virtual Hosts.
Do note the layout used in these articles is explained here - feel free to use the directories of your choice.

Create the Directory Layout

In this example we'll be creating two domains, domain1.com and domain2.com
As the default permissions only allow us, the 'demo' user, to browse our home folder, let's start off by giving Apache access to this folder as well:
chmod 755 /home/demo
OK, now we need to create the directory structure for our sites.
In your home directory create a 'public_html' folder:
cd ~
mkdir public_html
Now, for each domain we want to host, create a folder with a standard set of sub-folders:
mkdir -p public_html/domain1.com/{public,private,log,cgi-bin,backup}
and
mkdir -p public_html/domain2.com/{public,private,log,cgi-bin,backup}
That will create the folders public, private, log, cgi-bin and backup for each of our domains (domain1.com and domain2.com).

index.html

The content of the public folder is, entirely, up to you but for this example I am going to use a very simple HTML file so we can check that the virtual hosts work correctly:
For each domain let's create the index.html file:
nano public_html/domain1.com/public/index.html
add the following to the file:
<html>
  <head>
    <title>domain1.com</title>
  </head>
  <body>
    <h1>domain1.com</h1>
  </body>
</html>
Repeat the process so you have a similar file for domain2.com (simply replace all instances of 'domain1.com' with 'domain2.com).
Now that we have a basic structure for our two domains we can look at defining the two virtual hosts.

NameVirtualHosts

With the virtual hosts, one thing to note that often catches people off guard is the NameVirtualHost setting.
For each port that Apache listens to, we need to define a NameVirtualHost. The issue that people sometimes overlook lies in the fact that you can only define it once per port.
Be careful that you do not add the same NameVirtualHost twice as adding another one will cause warnings and errors.
Let's go ahead and uncomment the generic NameVirtualHost in the Apache configuration.
Navigate to the /etc/httpd/conf directory and open the main Apache configuration file (httpd.conf):
sudo nano httpd.conf
Towards the bottom of this file you will want to uncomment out the generic NameVirtualHost as follows:
# Use name-based virtual hosting.
#
NameVirtualHost *:80
#
# NOTE: NameVirtualHost cannot be used without a port specifier
# (e.g. :80) if mod_ssl is being used, due to the nature of the
# SSL protocol.
Now we can restart Apache to initiate the changes:
sudo /etc/init.d/httpd restart
The following warning will be displayed as we still need to add our VirtualHosts
Stopping httpd:                                            [  OK  ]
Starting httpd: [Thu Dec 11 02:06:13 2008] [warn] NameVirtualHost *:80 has no VirtualHosts
                                                           [  OK  ]
Please keep in mind that this is only a warning and will not appear once we complete the following section.
Let's move on.

Custom Virtual Hosts

We've setup the basics and now we're ready to add our own virtual hosts so that we can start to serve our domains.
Let's create the vhost for domain1:
sudo nano /etc/httpd/conf/httpd.conf
At the bottom of the httpd.conf file, we need to add the following:
# Place any notes or comments you have here
# It will make any customization easier to understand in the weeks to come

# domain: domain1.com
# public: /home/demo/public_html/domain1.com/

<VirtualHost *:80>

  # Admin email, Server Name (domain name) and any aliases
  ServerAdmin webmaster@domain1.com
  ServerName  domain1.com
  ServerAlias www.domain1.com


  # Index file and Document Root (where the public files are located)
  DirectoryIndex index.html
  DocumentRoot /home/demo/public_html/domain1.com/public


  # Custom log file locations
  LogLevel warn
  ErrorLog  /home/demo/public_html/domain1.com/log/error.log
  CustomLog /home/demo/public_html/domain1.com/log/access.log combined

</VirtualHost>
OK good, now we need to reload Apache:
sudo /etc/init.d/httpd reload

Navigate

Now navigate to your site:
http://domain1.com
You should now see the contents of public/index.html being shown:
Domain1 Home Page

ServerAlias

Note that in the vhost file, we set a ServerAlias. Providing you have the DNS set up correctly you can also use that address:
http://www.domain1.com

Repeat as necessary

To create and enable domain2.com simply go through the process again:
sudo nano /etc/httpd/conf/httpd.conf
...
# Enter the details for domain2.com as per the example shown above
Then reload Apache:
sudo /etc/init.d/httpd reload
Finally, navigate to your second domain:
http://domain2.com
or
http://www.domain2.com
All being well, you will see the 'domain2.com' index file.

Log Files

As defined in your vhost in the Apache configuration, each domain has its own log files, lets take a quick look:
ls /home/demo/public_html/domain1.com/log/
The output is exactly as expected:
access.log  error.log
This makes for much easier analysis as each set of logs is self contained.

Default Vhost

Remember that although we created a vhost for domain1.com and domain2.com, if someone enters the IP address of the Slice they are served the contents of the domain1.com vhosts.
Why are they served from that vhost?
Apache searches the enabled vhosts from the top down. Therefore, once it finds a matching vhost for the IP address entered, the contents of that domain are displayed. As we setup domain1.com initially in this example, the contents for this domain will be shown if you enter your slice's IP address in a browser.
This is something to keep in mind when planning your websites. Do you want a particular domain to be the default? Do you want the IP address to have completely different content?
If you want the IP address to have separate content than your domains, you will need to create an additional vhost and use the IP of your slice as the ServerName.

ประสพการณ์การตั้ง VirtualHost ด้วย Apache2

ปัญหาที่พบ

ได้ตั้ง Webserver ให้รองรับหลายๆโดเมนที่เรียกว่า Virtual Host ด้วย Apache2 โดยมี Domain สมมุติว่าตั้งชื่อว่า
Domain1.com กับ Domain2.com
โดยใช้ Domain1.com เป็นโดเมนหลัก สมมุติของเซิร์ฟเวอร์ชื่อว่า server ดังนั้นจะมีรูปแบบว่า server.domain1.com config file อยู่ที่ /etc/Apache2/sites-enables/000-default โดยตั้ง config file ดังนี้
NameVirtualHost *:80
<VirtualHost *>
ServerAdmin webmaster@localhost
ServerName domain1.com
DocumentRoot /home/www/hosts/domain1.com/docs
<Directory>
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /home/www/host/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
# Uncomment this directive if you want to see apache2's
# default start page (in /apache2-default) when you go to / #RedirectMatch ^/$ /apache2-default/
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
</Directory "/usr/lib/cgi-bin/">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg. LogLevel warn CustomLog /var/log/apache2/access.log combined ServerSignature On
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews
FollowSymLinks AllowOverride None
Order deny,allow Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>
Domain2.com มี config file อยู่ที่ /etc/Apache2/sites-enabled/domain2.com.conf
<VirtualHost *>
DocumentRoot "/home/www/hosts/domain2.com/docs"
ServerName domain2.com
<Directory /home/www/host/domain2.com/docs
allow from all
Options +Indexes
</Directory>
</VirtualHost> 

ปัญหาพบว่า พอเรียกเวบในชื่อของ domain2.com จะได้หน้าเวบของ domain1.com ซึ่งทำหน้าที่เป็นเซิร์ฟเวอร์หลักมาขึ้นแทนทั้งหมด
แสดงว่า Web server ที่ต้องการตั้งแบบVirtual Host ไม่ทำงาน


สาเหตุปัญหา

หลังจากได้ลอง และทดสอบจนแน่ใจแล้ว พบว่าปัญหานี้เกิดจาก การเอาconfigไปไว้ ตามคำแนะนำของ Apache2 คือที่ /etc/apache2/site-available/....


การแก้ปัญหา

ต้องเอาค่าที่ตั้ง(config) สำหรับการตั้งแบบ virtual hostไปไว้ที่ apache2.conf หรือ httpd.conf ก็ได้ ตำแหน่งไฟล์อยู่ที่นี่
/etc/apache2/apache2.conf
และ แบบดั้งเดิมก็ที่ httpd.conf ตรงตำแหน่ง
/etc/apache2/httpd.conf
หรือลงเพิ่มได้ทั้ง ๒ ที่ดังข้างบนตามใจชอบ ซึ่งก็เป็นวิธีการตั้ง Subdomain นั่นเอง โดยSubdomain ที่ตั้งต้องไม่ซ้ำกัน โดยแสดงตัวอย่างให้เห็นอย่างชัดเจนว่า
Subdomain พื้นฐานที่ตั้งให้ domain1.com คือ
www.domain1.com กับ domain1.com
Subdomain พื้นฐานที่ตั้งให้ domain2.com คือ
www.domain2.com กับ domain2.com
ถือว่าไม่ซ้ำกัน และจะมีการตั้ง Subdomain ที่ต้องตั้งให้แต่ละโดเมนรวม ๒ แบบ
การตั้งค่าโดเมนตามวิธีนี้ ยังสามารถแก้ปัญหา การเรียกชื่อเว็บที่เรียกได้อย่างใดอย่างหนึ่งด้วย โดยไม่ว่าจะเรียก www.domain.com หรือ domain.com ก็สามารถเรียกได้ครอบคลุมทั้งหมด


จาก
http://wiki.opentle.org/%E0%B8%9B%E0%B8%A3%E0%B8%B0%E0%B8%AA%E0%B8%9E%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%93%E0%B9%8C%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%95%E0%B8%B1%E0%B9%89%E0%B8%87_VirtualHost_%E0%B8%94%E0%B9%89%E0%B8%A7%E0%B8%A2_Apache2

Home ปวดหัวกับ VPS (เจ๊ง) 5 วันเต็มๆ

รู้สึกว่าห่างหายไปพอสมควร กับการอัพบล๊อก เนื่องจาก VPS เสียครับ และครั้งนี้เป็นประสบการณ์อันล้ำค่าเหมือนกันในบทของการจัดการ VPS ส่วนตัว ถ้าเป็นวิชาเรียนก็เรียกได้ว่าเป็น วิชา VPS101 เลยทีเดียว
VPS ที่ผมใช้ก็ที่นี่ครับ PhotonVPS เป็นแบบ semi-managed ซึ่งแปลว่า เค้าจัดการให้ได้บางส่วน เช่น ติดตั้ง OS เบื้องต้น ลง Control panel ให้ แต่หลังจากนั้น เราต้องตั้งค่าและปรับแต่งของเราเอง และถ้าเกิดเสีย ทาง support ของ photonvps อาจจะดูให้ แต่ถ้าแก้ไม่ได้เค้าจะลง OS ใหม่ให้ (ซึ่งเราสามารถลงเองก็ได้ ผ่านทาง SolusVPM กดคลิกเดียว สะดวกรวดเร็ว)
วันนี้เลยอยากจะมาเล่าประสบการณ์ และการแก้ปัญหาให้ฟังครับ
เรื่องก็เริ่มมาจาก ผมมีโปรเจคใหม่ที่จะทำ blog ขึ้นมาอีกชุดนึง เลยทำการ add domain และ subdomain จำนวนหนึ่ง พอทำเสร็จเรียบร้อย ก็ทิ้งไว้เฉยๆ ก่อน เพราะว่ามีงานอื่นที่ต้องสะสาง แต่….. เรื่องก็เกิดจนได้ ผมกลับมาเช็คอีกที apache (httpd) ถูกปิดครับ อยู่ๆ ก็ปิดโดยไม่บอกกล่าวกันเลย ผมเลยแจ้ง support ว่า start apache ผ่านคำสั่ง
# service httpd restart ไม่ได้
ก็รอๆ ทาง support เค้าแก้ ปรากฎเค้าสามารถ start httpd ได้แล้ว แต่… เว็บผมทั้งหมดขึ้นเป็นหน้า apache test page หมดเลย ซะงั้น ผมก็เลยแจ้งเค้าไป ซึ่งเค้าตอบกลับมาว่า zone file มันมั่วมากตอนนี้ เค้าใช้คำว่า messy ถ้าจะแก้ไข มีความจำเป็นต้อง rebuild VPS ใหม่หมด ข้อมูลจะหาย!!
โอ้ววววว ผมต้องทำใหม่หมดหรือนี่ แต่ก็ต้องยอมจำนวน เพราะหลังจากหาวิธีผ่าน พี่ Google แล้ว ลองทำดู ยิ่งทำ มันยิ่งมั่ว
หลังจาก rebuild VPS ใหม่ ก็สบายใจนึกว่าเรื่องจบ อิอิ (Rebuild VPS เหมือนกับลง windows ใหม่นั่นแหละ)
แต่ ไม่จบครับ หลังจากผมทำ restore ด้วยมือล้วนๆๆ TT อัพไฟล์ อัพ DB, add domain, sub domain เข้าไปใหม่หมด (ใช้ Kloxo เป็นตัวจัดการ เนื่องจากฟรี) แต่แล้ว เรื่องก็เกิดอีกจนได้ ผมลองไป # service httpd restart งานเข้าครับ ไม่สามารถ start ได้อีกแล้ว ผมเริ่มอารมณ์เสีย
เลยติดต่อ support เค้าก็ลองแก้ๆๆๆ ปรากฎต้อง rebuild VPS ใหม่อีกรอบ เฮ้อ!! ผมลองใช้คำสั่ง
# last | head
เพื่อดูว่าเค้าเข้ามาดูให้ผมจริงหรือไม่ (มันเป็นคำสั่งดูประวัติการ login ผ่าน SSH) พบว่า support เค้าเข้ามาดูให้ 7 ชั่วโมงแหนะ ก็เลยคิดว่า มันคงไม่ได้จริงๆ ผมก็เลยให้เค้าลง OS ใหม่อีกรอบ บวกลง kloxo ให้ด้วย
และผมก็ทำเหมือนเดิม อัพไฟล์ อัพ DB, add domain, sub domain เข้าไปใหม่หมด แล้วลองมา restart httpd โอ้ว เป็นอีกแล้วครับ อาการเดิมเลย ผมจะบ้าตายยย วันที่ 3 แล้วนะครับ ยังไม่เส็ดซักที คราวนี้ผมตัดสินใจ ไม่ถาม support แล้วครับ หาวิธีเอง ลองไปเยอะมาก (เพราะคิดว่า ไหนๆ มันเจ๊งแล้ว ขอเอาไว้ลองวิชาหน่อย) ลองไป ลองมา ผมพบเค้าลางของปัญหา โดยไปดูไฟล์ httpd.conf จาก
# nano -w /etc/httpd/conf/httpd.conf
สิ่งที่เจอคือ มัน include ตัว kloxo.conf ไว้ด้วย ก็เลยลองสืบต่อไป ปรากฎมันไป include ไฟล์ virtualhost.conf อีกที ซึ่งในนี้จะเป็นไฟล์ที่สร้าง virtual host ของแต่ละเว็บที่เรา add domain หรือ subdomain เข้าไป (ผมไม่ค่อยเข้าใจคำว่า VirtualHost เท่าไหร่ เข้าใจคร่าวๆ ว่า ถ้าจะให้โฮสนึง IP นึง แต่ใช้ได้หลายเว็บ เราต้องระบุไฟล์นี้ไว้ ไม่รู้เข้าใจถูกหรือเปล่า กรุณาอย่าเอาไปอ้างอิงนะครับ 55)
ผมเลยจัดการด้วยวิธีเกรียนๆ เอา include ออกเลย ไม่ต้องไปใช้ kloxo.conf แล้ว ปรากฎว่า start httpd ได้แล้วครับ ดีใจมาก นึกว่าเรื่องจะจบแล้ว 55 แต่พอลองเข้าเว็บดู เจอ apache test page อีกแล้วครับท่าน!!! เลยคิดไปว่า สงสัยตอนแรก support มันทำงี้แน่เลย อาการเดียวกันเลย เลยหาวิธีต่อไปครับ ก็ไม่ได้ซักที เลยตัดสินใจ เอาวะ ลงใหม่อีกรอบ (รอบที่ 3 แล้ว) แต่คราวนี้ไม่อยากพึ่ง support แล้วครับ เลยไปจัดการลองลง CentOS ผ่าน SolusVPM แบบคลิกเดียวจบ แล้วรอประมา ครึ่งชั่วโมง ให้ระบบมันรัน แล้วผมก็ลง kloxo ผ่านทาง SSH ลงเสร็จ ทีนี้เลยลอง ค่อยๆ add domain และ subdomain เพื่อจะลองไปเรื่อยๆ ว่า ตรงไหนมีปัญหา และนึกขึ้นได้ว่า ตอนผม add subdomain ด้วย Imacro มันมีอยู่ 2 อันที่อ่านจาก csv แล้วมันแปลกๆ คือแทนที่มันจะเป็น abcdefg มันกลับเปน ” abcdefg ” คือมันมีเครื่องหมายคำพูด และมีช่องว่างด้วย เลยเดาในขั้นแรกว่า น่าจะเกิดจากอันนี้ด้วย เวลา add ไปมันอาจจะทำให้ไปสร้างไฟล์ VirtualHost ผิดพลาด เป้นผลทำให้ start apache ไม่ขึ้น
ผมเลยค่อยๆ ลอง add subdomain ที่มีปัญหาด้วยมือ และอันอื่นด้วย imacro เหมือนเดิม (แต่คราวนี้ นั่งเฝ้าเลย กันพลาด) พอ เพิ่มไปซัก 50 อัน ก็มาลอง restart httpd ทีนึง ปรากฎมันก็ได้ ไม่มีปัญหา แสดงว่าผมมาถูกทางแล้ว
ผมเลย add ไปเรื่อยๆ จนถึงจำนวนนึงปรากฎมันเริ่มจะ start ไม่ได้ และไม่ได้เกี่ยวกับปัญหาด้านบนด้วย เลยลองไปเข้าเว็บดู ปรากฎ งานเข้าอีกแล้วครับ เข้าเว็บไม่ได้เลยทีนี้ มันโหลดค้างไปเลย ลอง # top ดูโหลดก็ไม่ได้ทำงานหนักอะไรเลย 0.00% เลยลอง ping เว็บดูครับ ปรากฏ มัน ping ได้ ไม่ช้า เลยยิ่งงงเข้าไปใหญ่เลยครับ หาวิธีจาก Google (อีกแล้ว) ลองไปลองมา ก็ไม่ได้ ปิด Firewall มั่ง ดู port มั่ง มั่วๆ ไปเรื่อยๆ ก็ยังไม่ได้ เลยลองไปดู error log ผ่านทางคำสั่ง
# tail -f /var/log/httpd/error_log
ซึ่งเป็นการดู error ของ httpd ว่ามีอะไรบ้าง แล้วก็เจอ (24)Too many open files: apr_socket_accept: (client socket) https เต็มเลยครับ ไม่รู้ทำไง เลยไปหาใน google แล้วเค้าบอกให้เพิ่ม ulimit ไม่รู้ว่าคือไรเหมือนกัน 55 แต่ก็เพิ่มไปด้วยคำสั่ง
# ulimit -n 4096
เหมือนเป็นการเพิ่ม limit ให้เปิดไฟล์ได้เยอะๆ ค่า default มันอยู่ที่ 1024 คงไม่พอ และแล้ว…. ก็หายทันทีครับ เข้าเว็บได้แล้ว ก็ครบ 5 วันพอดีครับ กว่าจะดึงเว็บมา online ได้ แต่ไม่รู้จะเกิดปัญหาอะไรอีกรึเปล่า อย่าให้มีเล้ยย สาธุ!!
ปล. ปัญหานี้ ไม่รู้เกี่ยวกับ ssl รึเปล่า รบกวนผู้รู้ทีครับ เห็น error เกี่ยวกับ SSL ใน log เยอะมาก
ปล2. หวังว่าบทความนี้จะเป็นประโยชน์แก่ผู้ที่เริ่มต้นจะเช่า vps นะครับ อาจจะเกิดปัญหาเดียวกับผมก็ได้ 55
ปล3. ไม่รู้ผมแก้ถูกหลักรึเปล่า แต่เว็บออนไลน์ได้แล้ว รบกวนผู้รู้ ชี้แนะด้วยครับ

จาก

http://zidit.me/%E0%B8%9B%E0%B8%A7%E0%B8%94%E0%B8%AB%E0%B8%B1%E0%B8%A7%E0%B8%81%E0%B8%B1%E0%B8%9A-vps-%E0%B9%80%E0%B8%88%E0%B9%8A%E0%B8%87-5-%E0%B8%A7%E0%B8%B1%E0%B8%99%E0%B9%80%E0%B8%95%E0%B9%87%E0%B8%A1%E0%B9%86/

Friday, December 24, 2010

วิธีลง kloxo สําหรับ VPS OS centos 5 32 bit


OS centos 5 32 bit
ไปใช้ kloxo
ลงก็
โค๊ด:
wget http://download.lxlabs.com/download/kloxo/production/kloxo-install-master.sh
sh ./kloxo-install-master.sh
พิมแค่นี้ เรียบร้อย วิธีเข้าก็ http://ip:7778
user pass admin
เข้าไปตอนแรก ก็เข้าไปที่ dns เทมเพต ตั้งค่า ns ของเรา
ต่อไป ก็ add domain แค่นี้เอง
แล้วก็รีสตาทเครื่อง 1 ที ใช้คําสั่ง reboot


Rebuild DirectAdmin

ทับไปได้เลย ไม่ต้อง Remove ของเก่าออกก่อน การอับเดต ^^
แก้ที่ Dorectadmin Config ก่อนว่าจะเอาอะไร Version ไหน
/usr/local/directadmin/custombuild/options.conf
ReBuild All

cd /usr/local/directadmin/custombuild
./build clean
./build clean_old_webapps
./build update
./build update_script
./build update_data
./build all d

Repair MySQL Database ผ่าน ssh แบบง่าย

myisamchk -r /var/lib/mysql/*/*.MYI

วิธีติดตั้ง Munin ในโฮสติ้งที่ใช้ DirectAdmin และ CentOS

เอาใจสาวก CentOS หน่อยค่ะ หลังจากที่ลงบทความเดียวกันนี้แต่เป็นสำหรับ Debian ในคราวนี้ใช้ CentOS 5.4 ใหม่ล่าสุดในการทดสอบ ก็ผ่านฉลุยค่ะ เรียง step ตามไปเลยค่ะ
wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.1-1.el5.rf.i386.rpm
rpm -Uvh rpmforge-release-0.5.1-1.el5.rf.i386.rpm
(เช็ค version ล่าสุดจาก https://rpmrepo.org/RPMforge/Using)
yum install munin munin-node
chkconfig –levels 235 munin-node on
/etc/init.d/munin-node start
chown -R munin:munin /var/www/munin
ln -s /var/www/munin /var/www/html/munin
service httpd restart && service crond restart
ต่อไปเราจะมาเพิ่มการ monitor apache กับ mysql กัน
ln -s /usr/share/munin/plugins/apache_* /etc/munin/plugins/
nano /etc/httpd/conf/extra/httpd-info.conf
แก้ไขไฟล์ดังนี้

SetHandler server-status
#Order deny,allow
#Deny from all
#Allow from .example.com
ExtendedStatus On
เซฟให้เรียบร้อย
*** ปล. ถ้าเปิดตามด้านบนนี้สามารถเช็ค status ของ apache ได้ด้วยว่าเว็บไหนใช้งานเยอะโดยการพิมพ์ http://ip/server-status
ln -s /usr/share/munin/plugins/mysql_* /etc/munin/plugins/
*สำหรับผู้ที่ลง squid แล้วต้องการ monitor*
ln -s /usr/share/munin/plugins/apache_* /etc/munin/plugins/
nano /etc/munin/plugin-conf.d/munin-node
แก้ไขดังนี้
[mysql*]
env.mysqlopts -u [ใส่ user อาจจะเป็น root] – p[ใส่ password] !!! ระวังอย่างเว้นวรรคหลัง -p (แต่หลัง -u ต้องเว้นวรรค)
หากไม่ทราบว่า password mysql root เป็นอะไรให้ cat /usr/local/directadmin/scripts/setup.txt ออกมาดู
*สำหรับผู้ที่ลง squid แล้วต้องการ monitor ให้เพิ่มด้านล่างเข้าไปในไฟล์นี้ด้วย*
[squid*]
user root
env.squidport 8080
/etc/init.d/httpd restart
/etc/init.d/mysqld stop
/etc/init.d/mysqld start
/etc/init.d/munin-node restart
เสร็จแล้วค่ะ รอสัก 5 นาที เหมือนเดิม ให้กราฟขึ้น จากนั้นก็ลองเข้า http://server ip/munin ก็เป็นอันสมบูรณ์
แถมทิ้งท้ายด้วยการทำ .htaccess กันคนมาเปิดดู status server ของเรา
nano /var/www/html/munin/.htaccess
เขียนไฟล์ดังนี้
AuthType Basic
AuthName “Members Only”
AuthUserFile /var/www/munin/.htpasswd
require valid-user เซฟซะ
htpasswd -c /var/www/munin/.htpasswd admin
แล้วกรอก password (ของ user ชื่อ admin)
- จบแล้วจ้า -

block IP ต่างประเทศ ไม่ให้ FTP/SSH เข้ามาได้

#************************************************
#สั่งเคลีย Firewall ก่อน
iptables -F
#สั่งเคลีย Firewall ก่อน
iptables -X
##ส่วนนี้ใช้สำหรับlist ip ของ FTP มาจาก iplist ท่าน icez
iptables -N ftp_pass
for i in `wget -qO – http://www.icez.net/files/thaiiplist`; do
iptables -A ftp_pass -s $i -j ACCEPT
done
## ในส่วนนี้ทำไว้สำหรับ Block IP ในกรณีฉุกเฉินเช่นตอนโดนยิง
## วิธี Block ก็ iptables -A block_ip -s xx.xx.xx.xx -j DROP
iptables -N block_ip
iptables -A INPUT -j block_ip
## ในส่วนนี้ทำไว้สำหรับ Block Email ดึงข้อมูลจาก www.spamhaus.org
iptables -N block_email
iptables -A INPUT -p tcp –dport 25 -j block_email
curl -s http://www.spamhaus….drop/drop.lasso |grep ^[1-9]|cut -f 1 -d ‘ ‘ | xargs -iX -n 1 /sbin/iptables -A block_email -s X -j DROP
#ป้องกัน scan Port หรือเปล่านะ
iptables -A INPUT -p tcp ! –syn -m state –state NEW -j DROP
#ตรวจเช็ค State Full
iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
#เฉพาะ FTP เท่านั้นที่เราจะกรอง ก็สั่งให้กระโดดไป ftp_pass
iptables -A INPUT -p tcp –dport 21 -j ftp_pass
iptables -A INPUT -p tcp –dport 20 -j ACCEPT
#เปิด ให้เข้ามา access เฉพาะ Port ที่ต้องการ
iptables -A INPUT -p tcp –dport 22 -j ACCEPT
iptables -A INPUT -p tcp –dport 25 -j ACCEPT
iptables -A INPUT -p tcp –dport 110 -j ACCEPT
iptables -A INPUT -p tcp –dport 80 -j ACCEPT
iptables -A INPUT -p tcp –dport 443 -j ACCEPT
iptables -A INPUT -p tcp –dport 2222 -j ACCEPT
iptables -A INPUT -p udp –dport 53 -j ACCEPT
#ส่วนนี้ให้ดูจาก proftpd คือว่าเราเปิด port 21 ใช้ในการเชือมต่อ แต่ตอนรับส่งข้อมูลจะใช้ port 35000-35999
iptables -A INPUT -p tcp –dport 35000:35999 -j ACCEPT
# icmp ก็รับด้วยเดี่ยว ping ไม่เจอ
iptables -A INPUT -p icmp -j ACCEPT
#นอก เหนือจาก port ที่เราเปิด ก็ Block ซ่ะ (*** ระวังคำสั่งนี้ให้ดีครับ ถ้าทำบรรทัดนี้แล้วอาจจะ ssh ไม่ได้ ถ้าไม่มั่นใจให้เปิดเฉพาะ IP ตัวเองก่อน)
iptables -A INPUT -j DROP
#****************************************

 

 

Thursday, December 23, 2010

How to setup DNS with kloxo

If you dont know about how to install kloxo you may read this article first- http://www.ruchirablog.com/setup-vps-dedicated-server-kloxo-admin-panel/

Configuring DNS is nasty job if you are newbie for linux. Installing Nginx is more easy than configuring DNS and other type of records like MX records for mail and C name records.
If you are newbie best thing is to install a nice control panel to manage your websites. In kloxo its very easy to setup DNS but lot of readers asked me to write about configuring DNS in kloxo. So this is it.
If you use kloxo for the first time and trying to add a domain in the kloxo panel you will get a massage like that regarding to add a DNS template first.
kloxo dns setup How to setup DNS with kloxo


To add a DNS template click the link  and go to kloxo DNS templates page, Otherwise you can view DNS template page by navigating on the home page there is a Icon “DNS templates” How ever just open the DNS templates page which looks like this.
Kloxo DNS templates How to setup DNS with kloxo

So here is sample of my DNS setup (Replace with your own domain name)
  • my domain is www.yourdomain.com (Replace with your own domain name)
  • And I want to add 2 name servers, As NS1.YOURDOMAIN.COM and NS2.YOURDOMAIN.COM
  • You must setup name servers on your domain registrar first! And my domain registrar is godaddy and I have setup those 2 name servers on my godaddy control panel ( If your registrar is godaddy , all you need to add Host Names like this,
  • http://www.ruchirablog.com/how-to-setup-name-servers-with-godaddy/

  • So i presume you have setup name servers with your registrar! So just add settings like this in your DNS template box on kloxo. You dont need to change that “web ipaddress”setting. Just edit YOURDOMAIN.COM with your own domain.
Add DNS in kloxo How to setup DNS with kloxo

yes its simple like that! And you can add domains to the system after adding this DNS template’s and it will work! Kloxo is simple like that!

Wednesday, December 22, 2010

คำสั่ง linux พื้นฐานที่ต้องใช้

1. ls ใช้ list ดูว่ามีไฟล์และ directory ใดบ้าง ( แต่ผมชอบใช้ ll มากกว่า )
ตัวอย่างการใช้ #ls -lah
ความหมายคือแสดงไฟล์ทั้งหมดใน directory นี้แบบมีรายละเอียดและอ่านง่าย
2. pwd ใช้ดูว่าขณะนี้อยู่ใน directory ใด
ตัวอย่างการใช้ #pwd
3. cd เปลี่ยนไปยัง directory ที่ต้องการ
ตัวอย่างการใช้ #cd root
ความหมายคือเข้าไป directory ที่ชื่อ root
4. mv ใช้ย้ายและเปลี่ยนชื่อไฟล์และ directory
ตัวอย่างการใช้ #mv name1.log name2.log
ความหมายคือเปลี่ยนชื่อไฟล์ name1.log เป็น name2.log
5. mkdir ใช้สร้าง directory
ตัวอย่างการใช้ #mkdir name1
ความหมายคือให้สร้าง directory ชื่อ name1 ใน directory ปัจจุบัน
6. rm ใช้ลบไฟล์และ directory
ตัวอย่างการใช้ #rm name1.log
ความหมายคือให้ลบไฟล์ name1.log ใน directory ปัจจุบัน
7. ps ใช้ดู process ที่กำลัง run อยู่
ตัวอย่างการใช้ #ps -ef
ความหมายคือให้แสดง process ที่ run อยู่ พร้อมทั้งรายละเอียด
8. top ใช้ดู status ของ cpu , process , ram
ตัวอย่างการใช้ #top
9. cat ใช้ print ข้อมูลของไฟล์ออกมาดู
ตัวอย่างการใช้ #cat name1.log
ความหมายคือให้แสดงข้อมูลในไฟล์ name1.log ออกมา
10. touch ใช้สร้างไฟล์ใหม่
ตัวอย่างการใช้ #touch name2.log
ความหมายคือให้สร้างไฟล์ใหม่ชื่อ name2.log

install Centos 5.3 with Virtualmin

This should keep from screwing anything up you have from the CentOS 5 possibly other OS's. You can skip down if not installing from scratch to already installed.

*** START HERE IF INSTALLING FROM SCRATCH ***

Freshly installed OS
remove cd
reboot

Disable SELINUX
no firewall

>login root

# shutdown -r now

---------install virtualmin-------------
>Login root

cd /tmp

# wget http://software.virtualmin.com/gpl/scripts/install.sh

# /bin/sh install.sh
-----------------------------------------

https://x.x.x.x:10000
>login as root

follow steps

update via virtualmin cp

-----------------------------------------

*** Start here if your ALREADY INSTALLED ***


SSH into server or login locally as root

# yum install yum-protectbase

# vi /etc/yum/pluginconf.d/protectbase.conf

add if not there already there

Quote:
[main]
enabled = 1
# cd /etc/yum.repos.d/

vi all repos

# vi CentOS-Base.repo
# vi CentOS-Media.repo
# vi virtualmin.repo


:::note::: (to each line below each gpgkey=*) for all repos to be protected from 3rd party repos (protect=0 will not protect each repo) (protect=1 can update other protect=1 repos)

add

protect=1

I would protect all Centos and virtualmin repos and any others you might have.But to each their own.

example:

vi CentOS-Base.repo
Quote:
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos
enabled=1
protect=1

#released updates
[update]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos
enabled=1
protect=1

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos
enabled=1 ::Note this could also be a 0 if I didn't want to use anything in it.
protect=0 ::Note this could be a 1 if I didn't want anything overwritten from other protect=0 repos
# vi /etc/yum.repos.d/dag.repo

add

Quote:
[dag]
name=Dag RPM Repository for Red Hat Enterprise Linux
baseurl=http://apt.sw.be/redhat/el$releasever/en/$basearch/dag
gpgcheck=1
gpgkey=http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt
enabled=1
protect=0
DO NOT PROTECT=1 on dag.repo or your asking for trouble as it will overwrite other repos if newer.

# cd /tmp

# wget http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt
# rpm --import RPM-GPG-KEY.dag.txt

# yum install ffmpeg ffmpeg-devel re2c php-devel php-xml

# ffmpeg

should see this.

Quote:
FFmpeg version 0.5, Copyright (c) 2000-2009 Fabrice Bellard, et al.
configuration: --prefix=/usr --libdir=/usr/lib --shlibdir=/usr/lib --mandir=/usr/share/man --incdir=/usr/include --enable-libamr-nb --enable-libamr-wb --enable-libdirac --enable-libfaac --enable-libfaad --enable-libmp3lame --enable-libtheora --enable-libx264 --enable-gpl --enable-nonfree --enable-postproc --enable-pthreads --enable-shared --enable-swscale --enable-x11grab
libavutil 49.15. 0 / 49.15. 0
libavcodec 52.20. 0 / 52.20. 0
libavformat 52.31. 0 / 52.31. 0
libavdevice 52. 1. 0 / 52. 1. 0
libswscale 0. 7. 1 / 0. 7. 1
libpostproc 51. 2. 0 / 51. 2. 0
built on Jul 24 2009 01:48:17, gcc: 4.1.2 20080704 (Red Hat 4.1.2-44)
At least one output file must be specified

*** Time to get FFMPEG-PHP going ***

# wget http://downloads.sourceforge.net/pro...php-0.6.0.tbz2

# tar -xjf ffmpeg-php-0.6.0.tbz2

# cd ffmpeg-php-0.6.0/

# phpize

# ./configure

# make

# make install

some of the output
Installing shared extensions: /usr/lib/php/modules/

# cd ..

# rm -rf ffmpeg*
# rm RPM-GPG-KEY.dag.txt

# vi /etc/php.d/ffmpeg.ini

add
Quote:
;ffmpeg-php extension
extension=ffmpeg.so
# /etc/init.d/httpd restart

# php -i | grep ffmpeg

You should see this..

Quote:
/etc/php.d/ffmpeg.ini,
ffmpeg
ffmpeg-php version => 0.6.0-svn
ffmpeg-php built on => Aug 31 2009 01:04:04
ffmpeg-php gd support => enabled
ffmpeg libavcodec version => Lavc52.20.0
ffmpeg libavformat version => Lavf52.31.0
ffmpeg swscaler version => SwS0.7.1
ffmpeg.allow_persistent => 0 => 0
ffmpeg.show_warnings => 0 => 0
Note: Please feel free to share any input you have.

__________________
eeeeeeeeeeeeeeeewwwww it's broke

Configuring a Centos VPS for Drupal

Introduction

Target of this writeup is keeping track how to set up a VPS. It's for absolute beginners, so experts please comment.
Base OS: Centos 5
Target setup:
  • Apache 2.2, with mod_ssl and mod_ruid
  • PHP 5.2, with APC and Uploadprogress
  • Mysql 5
  • Proftp
  • Webmin
Tools used:
Putty, SSH client

Install Utter Ramblings Yum repository

CentOS 5 comes standard with PHP 5.1, some other repositories come standard with 5.3, which will either limit functionality or provide errors. So I will use the Utter Ramblings Yum Repository.
Login to your server as root with Putty, speedup Yum a little and update your server:

yum install yum-fastestmirror
yum update
Now for installing that repository:
I personally like to use the simplest of editors: vi. Open or create a file as above, start editing with "i", stop editing with help button "F1", save the file with "ZZ" and exit with ":q!".

vi /etc/yum.repos.d/utterramblings.repo
and paste (right mouse button in Putty) the following in it after clicking "i":

[utterramblings]
name=Jason's Utter Ramblings Repo
baseurl=http://www.jasonlitka.com/media/EL$releasever/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka

Read more: http://www.jasonlitka.com/yum-repository/#ixzz0iK46UmBx

Press "F1" and "ZZ" to save and exit. Run update again:

yum update

Install Apache and PHP

Installing Apache, with development tools, mod_ssl and mod_php:

yum install httpd httpd-devel mod_ssl mod_php

You could be running into problems here when packages cannot be found. Some setups of Centos protect against certain updates to make sure the system keeps on working. If so, check:
vi /etc/yum.conf

and look for a line that start with "exclude". If it's there, comment it out with "#" after pressing "i". Press "F1" and save with "ZZ". Repeat the yum command before. Point your browser to your domain or ip-address and see something working there.
Make a info.php file to check if PHP is working and it's configuration.

vi /var/www/html/info.php
and copy, paste (use i) and save the following in it.

<?php
phpinfo
();?>

Point your browser to www.yourdomain.com/info.php or 123.123.123.123/info.php. You should now see the text above appearing in your browser. Since we just installed PHP, Apache is not booted with PHP. So we just have to restart it:
service httpd restart

And we reload the browser to see the PHPinfo page. As you should be able to see, PHP needs some more goodies to be really useful.

Dressing up PHP

Installing APC (a cache, which should work?) and uploadprogress (to get rid of those annoying status report errors).

yum install php-pear php-devel

Install a C++ compiler:
yum install gcc gcc-c++ autoconf automake

Then:
pecl install apc uploadprogress

Include in php
echo "extension=apc.so" > /etc/php.d/apc.ini

Which will make a small file in /etc/php.d/ containing "extension=apc.so", and so telling PHP that it should be included. Drupal will warn you that the standard APC memory of 30mb is not enough. To up it a little, edit:

vi /etc/php.d/apc.ini

and add:
apc.shm_size=48

Same for upload progress:
echo "extension=uploadprogress.so" > /etc/php.d/uploadprogress.ini

And restart apache
service httpd restart

Check info.php and find both APC and uploadprogress installed now. Now for some graphics. Let's install GD2

yum install gd php-gd

and Imagemagick
yum install ImageMagick ImageMagick-perl ImageMagick-devel

Then:
pecl install imagick

Add the ini file
echo "extension=imagick.so" > /etc/php.d/imagick.ini

Install the php mbstring module Drupal needs and php-xml for Drupal 7 (dom).
yum install php-mbstring php-xml

Restart Apache to see the changes:
service httpd restart

And see in info.php (Thanks!)

Installing Webmin

Webmin is a web-based interface for system administration for Unix. Using any modern web browser, you can setup user accounts, Apache, DNS, file sharing and much more. Webmin removes the need to manually edit Unix configuration files like /etc/passwd, and lets you manage a system from the console or remotely.
Making the Webmin repository:

vi /etc/yum.repos.d/webmin.repo

and paste there:
[Webmin]
name=Webmin Distribution Neutral
baseurl=http://download.webmin.com/download/yum
enabled=1
gpgkey=http://www.webmin.com/jcameron-key.asc

Then just do
yum install webmin

Now point your web browser to www.mydomain.com:10000 and login as root. (More info)
You could now surf to Others, PHP Configuration, Resource Limits and change the Maximum memory allocation to 128M. Safe and check your info.php and see the memory_limit has changed to 128M.

Installing ProFTPD

ProFTP is probably the easiest FTP server on Centos, which is not shipped with Centos, so we will install another repository first.

vi /etc/yum.repos.d/dag.repo

And add
[dag]
name=DAG RPM Repository
baseurl=http://apt.sw.be/redhat/el$releasever/en/$basearch/dag
gpgcheck=1
enabled=1
gpgkey=http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt

Update the system and install Proftpd
yum update
yum install proftpd

Done! (More info) Make Proftpd start at startup and start now:

chkconfig --levels 235 proftpd on
service proftpd start
Open Webmin again (www.yoursite.com:10000) and go to System - Users and Groups - Create a new user.
Username = "username"
Home directory = Automatic
Shell = bin/bash
Password = "password"
Primary group = New group with same name as user
Create home directory? = Yes
Copy template files to home directory? = Yes
Create user in other modules? = Yes
Startup your ftp program and connect to your web server using the username and password above. Make a new directory public_html and another one in there public_html/drupal6 and upload all Drupal files to that directory. (More info)

Compile mod_ruid

Mod_ruid makes Apache change username and group to the files it uses at the moment. So if it's working in the home directory of drupaluser, it will behave like it is drupaluser, opening and writing files like it is you and limiting itself to drupalusers home directory. Another option would be SuPHP, but that's considered slow.
Development of mod_ruid seemed to have stopped a few years ago. Luckily somebody picked it up and continued the effort on Sourceforge with a list of new releases. Check for the latest release, for now mod_ruid2-0.9.tar.bz2.
Install dependencies:

yum install libcap libcap-devel
Download to /tmp and unpack

cd /tmp/
wget http://sourceforge.net/projects/mod-ruid/files/mod_ruid2/mod_ruid2-0.9.tar.bz2

tar -xvwf mod_ruid2-0.9.tar.bz2
Compile mod_ruid2 and restart Apache

cd /tmp/mod_ruid2-0.9/
apxs -a -i -l cap -c mod_ruid2.c
service httpd restart

Careful! If you update Apache to a newer version, you might have to do the step above again.
(Thanks!)

Installing Mysql

Install MySQL and dependencies as follows:

yum install mysql-server mysql php-mysql php-pdo
Boot on startup and boot now

chkconfig --levels 235 mysqld on
service mysqld start
Make your configuration safe.

/usr/bin/mysql_secure_installation
You will be asked some questions, answer them like this

Enter current password for root (enter for none): "enter"
Set root password? [Y/n] "y"
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] y
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y
Login to Webmin and make a database for your Drupal installation
Click on MySQL Database Server under servers. If it is not there, you might need to do a "Refresh Modules" on the left below.
Tell Webmin the root user (root) and your new password.
Create a new database for your Drupal website.
-> Create a new database.
Name: anything you like
Character set: utf8
Collation order: default
Initial table: none
Now make a new user
-> User Permissions
-> Create new user.
Username: drupal
Password: anything you like
Hosts: localhost
Permissions:
Select table data
Insert table data
Update table data
Delete table data
Create tables
Drop tables
Manage indexes
Alter tables
Create temp tables
Lock tables
Restart Mysql and Apache

service mysqld restart
service httpd restart

(More info)

Finalize

Make a new virtual host for your domain.
In Webmin: Servers > Apache Webserver > Create virtual host
Handle connections to address = Specific address = your domain name
Document Root = path to your installation of Drupal
Copy directives from = Nowhere
Safe and "Apply Changes" in the upper right.
Open your new virtual server
Edit Directives and add
AllowOverride All
just above ""
Safe and "Apply Changes" in the upper right.
And your server should be working.

 
Design by GURU