Archive

Archive for the ‘Kernel’ Category

Resolved:solaris patch panic – cannot start the system after patch

April 27th, 2011 No comments

Here goes the whole story:

Step 1. patch with PCA. after reboot — -r

Rebooting with command: boot -r

Boot device: /pci@1c,600000/scsi@2/disk@0,0:a  File and args: -r

SunOS Release 5.10 Version Generic_142900-13 64-bit

Copyright 1983-2010 Sun Microsystems, Inc.  All rights reserved.

Use is subject to license terms.

WARNING: mod_load: cannot load module ‘sharefs’

WARNING: Cannot mount /etc/dfs/sharetab

 

Hardware watchdog enabled

/kernel/drv/sparcv9/ip: undefined symbol ‘ddi_get_lbolt64′

WARNING: mod_load: cannot load module ‘ip’

/kernel/fs/sparcv9/sockfs: undefined symbol ‘sock_comm_create_function’

/kernel/fs/sparcv9/sockfs: undefined symbol ‘smod_lookup_byname’

/kernel/fs/sparcv9/sockfs: undefined symbol ‘sctp_disconnect’

/kernel/fs/sparcv9/sockfs: undefined symbol ‘sctp_getsockname’

/kernel/fs/sparcv9/sockfs: undefined symbol ‘nd_free’

/kernel/fs/sparcv9/sockfs: undefined symbol ‘nd_load’

/kernel/fs/sparcv9/sockfs: undefined symbol ‘UDP_WR’

 

Step 2. zfs Roll back

ok>boot -F failsafe

#zfs rollback rpool/ROOT/sol10_sparc@pre_patched.142900-13_04.03.2011

 

Step 3. Patch with PCA again, then “halt”, boot archive is not updated after patching, so we need remove the boot_archive

ok>boot -F failsafe

# mv /a/platform/`uname -i`/boot_archive /a/root/b_back

# /a/sbin/bootadm update-archive -R /a

# reboot

 

Step 4. Server is patched

root@solaris01~# uname -a

SunOS solaris01 5.10 Generic_144488-06 sun4u sparc SUNW,Sun-Fire-V240

Step 5. Restore the Zone

root@solaris01~# zoneadm -z solaris01sub01 halt

root@solaris01~# zoneadm -z solaris01sub01 detach

root@solaris01~# zoneadm -z solaris01sub01 attach -u

zoneadm: zone ‘solaris01sub01′: ERROR: attempt to downgrade package SUNWcsu, the source had patch 142053-03 which is not installed on this system

# SUNWcsu is the core package. we can’t live without it’s upgrade

 

root@solaris01~# zoneadm list -civ

ID NAME             STATUS     PATH                           BRAND    IP

0 global           running    /                              native   shared

- solaris01sub01   configured /export/zones/solaris01sub01   native   shared

 

root@solaris01~# showrev -a|grep 142053-03

Patch: 142053-03 Obsoletes: 142485-01 Requires: 127127-11, 139555-08 Incompatibles:  Packages: SUNWcslr, SUNWcsu

Patch: 143954-04 Obsoletes: 142053-03, 142485-01, 142487-01, 142535-03 Requires: 127127-11, 139555-08 Incompatibles:  Packages: SUNWcslr, SUNWcsr

 

root@solaris01~# zoneadm -z solaris01sub01 attach -u -F

root@solaris01~# zoneadm -z solaris01sub01 boot

 

root@solaris01~# zlogin solaris01sub01

Last login: Sat Mar 26 05:15:27 on pts/2

Sun Microsystems Inc.   SunOS 5.10    Generic   January 2005

# The zones doesn’t work

root@solaris01sub01/# svcs

STATE          STIME    FMRI

online          5:40:24 svc:/system/svc/restarter:default

offline         5:40:24 svc:/system/sysidtool:net

offline         5:40:25 svc:/network/nfs/status:default

offline         5:40:28 svc:/system/boot-archive-update:default

uninitialized   5:40:27 svc:/application/x11/xfs:default

uninitialized   5:40:28 svc:/network/rpc-100235_1/rpc_ticotsord:default

 

root@solaris01sub01/# zfs list

internal error: Unknown error

Abort (core dumped)

root@solaris01sub01/# logout

 

root@solaris01~# zoneadm list -civ

ID NAME             STATUS     PATH                           BRAND    IP

0 global           running    /                              native   shared

- solaris01sub01   configured /export/zones/solaris01sub01   native   shared

 

root@solaris01~# zfs rollback rpool/export/zones/solaris01sub01@id24_pre_AMpatch12

 

root@solaris01sub01/# showrev -a|grep  142053-03

Patch: 142053-03 Obsoletes: 142485-01 Requires: 127127-11, 139555-08 Incompatibles:  Packages: SUNWcslr, SUNWcsu

 

root@solaris01~# zlogin solaris01sub01

Last login: Sat Mar 26 05:55:32 on pts/2

Sun Microsystems Inc.   SunOS 5.10    Generic   January 2005

 

root@solaris01sub01/# unzip -q 143954-04.zip

root@solaris01sub01/# patchadd 143954-04

Validating patches…

 

Global patches.

 

0 Patch 143954-04 is for global zone only – cannot be installed on non-global zone.

 

No patches to install.

 

root@solaris01/datastore/Explorers/patches# showrev -a|grep 142053-03

Patch: 142053-03 Obsoletes: 142485-01 Requires: 127127-11, 139555-08 Incompatibles:  Packages: SUNWcslr, SUNWcsu

Patch: 143954-04 Obsoletes: 142053-03, 142485-01, 142487-01, 142535-03 Requires: 127127-11, 139555-08 Incompatibles:  Packages: SUNWcslr, SUNWcsr

 

root@solaris01/datastore/Explorers/patches# unzip -q 143954-04.zip

root@solaris01/datastore/Explorers/patches# patchadd 143954-04

Validating patches…

….

Patch packages installed:

SUNWcslr

SUNWcsr

SUNWcsu

 

Done!

root@solaris01/datastore/Explorers/patches# zlogin solaris01sub01

[Connected to zone 'solaris01sub01' pts/2]

Last login: Sat Mar 26 05:58:17 on pts/2

Sun Microsystems Inc.   SunOS 5.10    Generic   January 2005

 

# Now we have the new package

root@solaris01sub01/# showrev -a|grep  142053-03

Patch: 142053-03 Obsoletes: 142485-01 Requires: 127127-11, 139555-08 Incompatibles:  Packages: SUNWcslr, SUNWcsu

Patch: 143954-04 Obsoletes: 142053-03, 142485-01, 142487-01, 142535-03 Requires: 127127-11, 139555-08 Incompatibles:  Packages: SUNWcslr, SUNWcsr, SUNWcsu

 

root@solaris01/datastore/Explorers/patches# zoneadm -z solaris01sub01 halt

root@solaris01/datastore/Explorers/patches# zoneadm -z solaris01sub01 detach

 

# the upgrade goes very smooth

root@solaris01/datastore/Explorers/patches# zoneadm -z solaris01sub01 attach -u

Getting the list of files to remove

Removing 481 files

Remove 11 of 11 packages

Installing 11639 files

Add 190 of 190 packages

Updating editable files

The file </var/sadm/system/logs/update_log> within the zone contains a log of the zone update.

root@solaris01/datastore/Explorers/patches# zoneadm list -civ

ID NAME           STATUS     PATH                           BRAND    IP

0 global           running    /                              native   shared

- solaris01sub01   installed  /export/zones/solaris01sub01   native   shared

root@solaris01/datastore/Explorers/patches# zoneadm -z solaris01sub01 boot

root@solaris01~# zoneadm list -civ

ID NAME             STATUS     PATH                        BRAND    IP

0 global           running    /                              native   shared

31 solaris01sub01   running    /export/zones/solaris01sub01   native   shared

 

root@solaris01~# zlogin solaris01sub01

svc:/system/sysidtool:net failed.

root@solaris01~# zlogin -C solaris01sub01

# choose Term Type 3) VT100. then everything goes well.

Categories: Kernel, Unix Tags: ,

Resolved:[Load Manager Shared Memory]. Error is [28]: [No space left on device](for apache, pmserver etc. running on linux, solaris, unix)

April 23rd, 2011 No comments

This error may occur in pmserver, apache, oracle, rsync, up2date and many other services running on linux, solaris, unix, so it’s a widespread and a famous question if you try to search google the keyword:”[Load Manager Shared Memory].  Error is [28]: [No space left on device]“.
Now, let’s take pmserver running on solaris10 for example to demonstrate to you step by step on how to solve the annoying problem.
Firstly, from “[No space left on device]” and “Load Manager Shared Memory”, we firstly guessed that it’s caused by shortage of memory, but after checking, we can see that memory is enough to allocate:

1.check the total memory size:

# /usr/sbin/prtconf |grep -i mem
Memory size: 32640 Megabytes
memory (driver not attached)
virtual-memory (driver not attached)

2.check application project memory size:

# su – sbintprd #as you have guessed, pmserver is running by user sbintprd in the box
$ id -p
uid=71269(sbintprd) gid=70772(sbintprd) projid=3(default)

This means that pmserver is running inside ‘default’ project. Then let’s check the setting of “default” project:

# projects -l default
default
projid : 3
comment: “”
users  : (none)
groups : (none)
attribs: project.max-msg-ids=(privileged,256,deny)
project.max-shm-memory=(privileged,17179869184,deny)

# prctl -n project.max-shm-memory -i project default
project: 3: default
NAME    PRIVILEGE       VALUE    FLAG   ACTION                       RECIPIENT
project.max-shm-memory
privileged      16.0GB      -   deny                                 -
system          16.0EB    max   deny                                 -

16GB available to ‘default’ project. How come the shortage of memory then?

Let’s bump up the max-shm-memory size by 2 GB to see what happens:

#prctl -n project.max-shm-memory -r -v 18gb -i project default

After this, we tried to bounce the pmserver, but the problem is still there:

#tail -f pmserver.log
INFO : LM_36070 [Fri Apr 22 22:19:42 2011] : (25218|1) The server is running on a host with 32 logical processors.
INFO : LM_36039 [Fri Apr 22 22:19:42 2011] : (25218|1) The maximum number of sessions that can run simultaneously is [10].
FATAL ERROR : CMN_1011 [Fri Apr 22 22:19:42 2011] : (25218|1) Error allocating system shared memory of [2000000] bytes for [Load Manager Shared Memory].  Error is [28]: [No space left on device]
FATAL ERROR : SF_34004 [Fri Apr 22 22:19:42 2011] : (25218|1) Server initialization failed.
INFO : SF_34014 [Fri Apr 22 22:19:42 2011] : (25218|1) Server shut down.

OK, then, we should think in other ways.

As we know, linux use shared memory between processes. We can use ipcs to check the information about  active  shared  memory  segments:

# ipcs -m|grep sbintprd
m  671088691   0          –rw——- sbintprd sbintprd

#ipcs -mA|grep sbintprd|wc -l
92

And each of them use 20000 size:

IPC status from <running system> as of Sat Apr 23 03:29:51 BST 2011
T         ID      KEY        MODE        OWNER    GROUP  CREATOR   CGROUP NATTCH      SEGSZ  CPID  LPID   ATIME    DTIME    CTIME  ISMATTCH         PROJECT
Shared Memory:
m  671088691   0          –rw——- sbintprd sbintprd sbintprd sbintprd      1    2000000  7781 16109  3:28:35  3:28:50  2:01:43        0         default

Now, we can conclude that the sbintprd user has over allocated and is not freeing up the space. So let’s clear the shared memeory:

#for i in `ipcs -m | grep prd | awk ‘{print $2}’`; do ipcrm -m $i; done

After this step, the pmserver started successfully. From the log we can see:

NFO : LM_36070 [Sat Apr 23 01:51:17 2011]
: (5979|1) The server is running on a host with 32 logical processors.
INFO : LM_36039 [Sat Apr 23 01:51:18 2011] : (5979|1) The maximum number of sessions that
can run simultaneously is [10].
INFO : CMN_1010 [Sat Apr 23 01:51:18 2011] : (5979|1) Allocated system shared memory [id =
469762275] of [2000000] bytes for [Load Manager Shared Memory].
INFO : LM_36095 [Sat Apr 23 01:51:50 2011] : (5979|1) Persistent session cache file
cleanup is scheduled to run on [Sun Apr 24 01:51:50 2011].
INFO : SF_34003 [Sat Apr 23 01:51:50 2011] : (5979|1) Server initialization completed.

Problem resolved!

The result of rm -rf / on linux(debian)

April 20th, 2011 No comments

210169:/# rm -rf /
rm: cannot remove root directory `/’

Haven’t tested other distributions, maybe you can have a try? :D

Categories: Kernel, Linux Tags:

Install driver for rtl8111d of mother board GA-880GM-D2H on solaris10

April 17th, 2011 No comments

I’ve installed solaris10 on my DIY computer which has a mother board of GA-880GM-D2H. After installation, the server boot ok, but when I checked with ifconfig -a, it only showed lo0 – the loop NIC, this means that the system cannot detect the NIC of rtl8111d which is integrated into mother board of GA-880GM-D2H.

After searching a lot on google, I’ve found this url: http://homepage2.nifty.com/mrym3/taiyodo/eng/. Under “15. gani driver for Realtek rtl8169 rtl8110 rtl8168 rtl8101 PCI/PCI-Express GbE chipset” of that page, I downloaded gani-2.6.8.tar.gz which is for AMD64(you can use isainfo -n to check the platform of your cpu). Then it’s time to compile the package to solaris.

Firstly, unzip the file:

gunzip -cd gani-2.6.8.tar.gz | tar xf -

Make links to correct binary directory and Makefile according to yourconfiguration:

#cd gani-2.6.8

# rm obj Makefile

#ln -s Makefile.${KARCH}_${COMPILER} Makefile

# ln -s ${KARCH} obj

where ${KARCH} is the result of `isainfo -n`, and ${COMPILER} is ”gcc” or “suncc” which you want to use to make the driver.

Now, time to make and make install:

/usr/ccs/bin/make

Testing before installation:

#./adddrv.sh

#modload obj/gani

#devfsadm -i gani

#ifconfig gani0 plumb

#ifconfig -a #you will see an entry for gani0

/usr/ccs/bin/make install

OK, then, you need set ip address for your newly installed NIC gani0:

#vi /etc/hostname.gani0
doxer
#chmod 644 /etc/inet/netmasks
#vi /etc/inet/netmasks

192.168.0.11 255.255.255.0

#chmod 644 /etc/inet/hosts

#vi /etc/inet/hosts
192.168.0.11 doxer loghost
#chmod 644 /etc/inet/ipnodes
#vi /etc/inet/ipnodes
192.168.0.11 doxer loghost
#vi /etc/defaultrouter
192.168.0.1

#hostname doxer
After all the steps, reboot the system: init 6.

You should now see your NIC device:

#dladm show-link

If you want to set this through interactive mode, you can try to use sys-unconfig utility.

Solved:missing config file ifcfg-ifcfg-eth0 on centos linux

April 17th, 2011 5 comments

When I ping the gateway, it gave this alert:

vif0.0: received packet with own address as source address
And when I tried to restart network, using service network restart, there was error message like this:

missing config file ifcfg-ifcfg-eth0

Then, when I checked the address of eth0, the hwaddr was abnormal:

HWaddr FE:FF:FF:FF:FF:FF

Ok, something must be in wrong status.

NOTE: When you met error “received packet with own address as source address“, this article is suitable for you too.

Firstly, I backed up ifcfg-eth0 to ifcfg-eth0.bak

[root@user network-scripts]# cp ifcfg-eth0 ifcfg-eth0.bak
Then, set the hardware address for eth0(I’ve mapped eth0′s hwaddr to static ip address in router):

ifconfig ethX hw ether 1C:6F:65:D2:47:7B

After this, shoot setup command to add new NIC device for eth0:

[root@user network-scripts]# setup
On the prompt up window, select “Network Configuration”, “Run Tool”. Then select “Edit device”, “<New Device>”. On the next window, select and enter on “Ethernet”.

Name is eth0, device is eth0, select “Use DHCP”(click space button when focus on the brackets). Save and Quit.

When come back to shell environment, restart the network:

service network restart, then the server will send request to DHCP server to allow ip address to itself.

And issue solved. :D

Categories: Kernel, Linux Tags:

Difference between the block device and character device

April 17th, 2011 No comments

The /etc/vfstab contains entries for a single filesystem on a Solaris server:
For example:

/dev/dsk/c0t2d0s7 /dev/rdsk/c0t2d0s7 /opt ufs 3 yes -

The first 2 fields in the above entry, list the same disk device as both a block device (“dsk”) and character device (“rdsk”). The block device is used by mount when mounting the filesystem while the character device is used by fsck when checking the filesystem and newfs when creating the filesystem.Both fields must be present in /etc/vfstab.

Categories: Kernel Tags:

About swap file & swap space create/delete

April 17th, 2011 No comments

Best practice: The size of SWAP is usually set to twice the size of memory, but should not exceed 2G.

There are two ways to add space to SWAP:

Add swap partition using fdisk
Create swap file using mkswap

Let’s go through one by one.
1. Add swap partition using fdisk:
1)create a swap partition:
fdisk -l /dev/cciss/c0d0 (m—p —n –t (82)–w)(Result: /dev/cciss/c0d0p6)
2)Format the partition:
mkswap -c v1 /dev/cciss/c0d06;
3)Modify /etc/fstab, add a line:
/dev/cciss/c0d0p6 swap swap default 0 0
4)Activate swap partition:
swapon -a /dev/cciss/c0d0p6
5) Check the result:
swapon -s OR free -m OR cat /proc/swaps
2.Create swap file using mkswap

1)dd if=/dev/zero of=/tmp/tmp.swap bs=1M count =100( make a file of 100MB);
2)mkswap /tmp/tmp.swap(set up a Linux swap area)
3)swapon /tmp/tmp.swap;(Activate inux swap area)
4)Modify /etc/fstab, add a line below:
/tmp/tmp.swap swap swap defaults 0 0
5)Check the result:
swapon -s OR free -m OR cat /proc/swaps
3.Delete swap area or swap file
1) swapoff /dev/cciss/c0d0p6 #or delete swap file
2) modify /etc/fstab and comment out the line you just added.

Categories: Kernel, Linux, Unix Tags:

vmstat typical usage and simple explanation

April 17th, 2011 No comments

vmstat(Virtual Memory Statistics) is used to summarize and report information about system process, memory usage, swapping in/out page statistics, I/O usage and cpu usage of the linux/unix box.

When you type vmstat 2 5 (2 stands for every 2 seconds, 5 for 5 times) and return, the first line (count from line #3) the average usage of the system sources since the last boot. And the following 4 lines, each stands for the average usage of the system sources of the interval you specified in your command line.

Below are some typical usage and simple explanation:

To check the cpu usage of system:
1.Under Sun Solaris:

$ vmstat 2 5
kthr      memory            page            disk          faults      cpu
r b w   swap  free  re  mf pi po fr de sr s6 s9 s1 sd   in   sy   cs us sy id
0 0 0 2855040 381040 76 11 1186 1 1  0  0  0  0  0 16  756  427  219  3  1 96
0 0 0 2160984 201328 0   5 24  0  0  0  0  0  3  0  3  733   72  101  0  0 100
0 0 0 2160984 201328 0   0  0  0  0  0  0  0  0  0  3  719   48   81  0  0 100
0 0 0 2160984 201328 0   0  0  0  0  0  0  0  0  0  0  710   30   63  0  0 100
0 0 0 2160984 201328 0   0  0  0  0  0  0  0  1  0  3  721   41   85  0  0 100

Under linux:

$ vmstat 2 5
procs                      memory    swap          io     system         cpu
r  b  w   swpd   free   buff  cache  si  so    bi    bo   in    cs  us  sy  id
1  0  0  25324  20196 214720 1529664   0   0     0     0    0     0   1   0   1
1  0  0  25324  20196 214720 1529664   0   0     0    30  109   132   3  31  66
1  0  0  25324  20180 214728 1529672   0   0     0    40  107   135   3  35  62
1  0  0  25324  20168 214728 1529672   0   0     0    60  107   154   2  33  65
1  0  2  25324  20148 214740 1529680   0   0     4    86  116   164   4  30  66

Simple explanation:

r(running):This represents the count of running processes(running means these processes has obtain or waiting for the cpu time). In common circumstances, the system will run in bottleneck if this number exceeds the number of cpu number of your system. If your system is busy doing something, the value of 2 times of cpu count is considered normal. But when not, you should take care of that.

b(blocked):Processes that are blocked. 0 is the best status.

w(swapped):Processes that are swapped out.0 is the best status.

pi(Page swap in, under linux, it is called si):pi(si under linux) begins when ram resource is in a shortage. Pages are swapped out to swapping disk from ram(memory). Two much pi operations will slow down the server.

us(User occupied cpu percentage):Percentage of cpu time that serving user tasks.

sy(System occupied cpu percentage):Percentage of cpu time that serving system tasks.

id(Idle cpu time):Percentage of cpu time that in idle status.If this equals 0 all the time, or if cpu sy is two times of cpu us, then the system comes to the bottleneck of cpu resources.

If r(running) is bigger than the mount of cpu, then the system comes to the bottleneck of resources. So, how to find the cpu amount?
Under Solaris:

$ psrinfo -v|grep “Status of virtual processor”|wc -l

Under linux:

$ cat /proc/cpuinfo|grep processor|wc -l

How to solve the problem of cpu bottleneck? Here are some methods:
First, add more cpu to the machine.

Second, shedule the resource-needed batch jobs at the time of your system’s non-busy period, for example in the mid-night if your application is web-oriented.

Third, adjust the priority level of processes(nice value).

So, how to find the memory size of the system?

First method, using top command:

$ top
load averages:  0.89,  0.97,  0.76   16:01:24
60 processes:  58 sleeping, 2 on cpu
CPU states:     % idle,     % user,     % kernel,     % iowait,     % swap
Memory: 2048M real, 32M free, 1981M swap in use, 2101M swap free

Under Solaris:

$ prtconf|grep -i mem
Memory size: 2048 Megabytes
memory (driver not attached)
virtual-memory (driver not attached)

Under linux:

$ free
total       used       free     shared    buffers     cached
Mem:       2065204    2036376      28828          0     216248    1535020
-/+ buffers/cache:     285108    1780096
Swap:      2044056      25324    2018732

Categories: Kernel, Linux, Unix Tags:

Solaris coreadm:Method to record abnormally-terminating processes

April 17th, 2011 No comments

What is coreadm in Solaris?
According to man coreadm:”coreadm specifies the name and location of core  files  pro-duced by abnormally-terminating processes”
When you type coreadm in the shell without any parameters, it prints out the configuration in file /etc/coreadm.conf. Then, if you want to set the coreadm as the following:

global core file pattern: /var/core/core_%n_%f_%u_%g
global core file content: default
init core file pattern: /var/core/core_%n_%f_%u_%g
init core file content: default
global core dumps: enabled
per-process core dumps: disabled
global setid core dumps: enabled
per-process setid core dumps: disabled
global core dump logging: enabled

Then you will run the following command:(It is not allowed to edit /etc/coreadm.conf by hand)

coreadm -g /var/core/core_%n_%f_%u_%g -G default -i /var/core/core_%n_%f_%u_%g -I default -d proc-setid -d process -e global -e global-setid -e log

Besides, if you have many servers to do the coreadm change, consider using the following script:
coreadm.sh

#/bin/bash
#!/bin/bash
PATH=$PATH:/opt/csw/bin/
export PATH
CMD=”/usr/local/bin/sudo coreadm -g /var/core/core_%n_%f_%u_%g -G default -i /var/core/core_%n_%f_%u_%g -I default -d proc-setid -d process -e global -e global-setid -e log && finishthecoreadm”
#Note:If the result item appear “ksh: finishthecoreadm:  not found”, that is an indication of the successful running; else, is an indication unsuccessful
USERNAME=”root”
PASSWORD=”password”
for i in `cat /root/servers_coreadm`
do
echo ”>/root/.ssh/known_hosts
expect <

chmod +x coreadm.sh
sh -n ./if.sh #test grammar
sh -x ./if.sh #debug
./coreadm.sh &>coreadm_results
After this, you type coreadm in the shell, and you should get the result as it is required.

Enjoy!

Categories: Kernel, Unix Tags:

Solved:Cannot load /etc/httpd/modules/mod_auth_mysql.so into server: libmysqlclient.so.15: cannot open shared object file: No such file or directory

October 9th, 2010 2 comments

Today,when I use /etc/init.d/httpd restart to restart apache,it prints:
Starting httpd: httpd: Syntax error on line 209 of /etc/httpd/conf/httpd.conf: Syntax error on line 6 of /etc/httpd/conf.d/auth_mysql.conf: Cannot load /etc/httpd/modules/mod_auth_mysql.so into server: libmysqlclient.so.15: cannot open shared object file: No such file or directory
In general,this is because mysqlclient lib is absence for the needs of your apache mysql module.Here comes the solution:
wget -O /usr/lib/libmysqlclient.so.15 http://files.directadmin.com/services/es_5.0/libmysqlclient.so.15
After this,restart your apache server again.

PS:If your server is 64 bits,do the follow:
wget -O /usr/lib/libmysqlclient.so.15 http://files.directadmin.com/services/es_5.0_64/libmysqlclient.so.15

Categories: Kernel, Linux Tags: