Category Archives: sadmin

sadmin

Конфигуриране, компилиране и инсталиране на mysql 5.1.40

За да компилирате първо трябва да изтеглите Mysql 5.1.40  от ТУК (21.1 MB)
wget http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.40.tar.gz/from/http://mysql.online.bg/

Разархивирате  и конфигурирате mysql 5.1.40:

./configure --prefix=/usr/local/mysql \
--enable-thread-safe-client --enable-local-infile \
--with-pic --with-fast-mutexes --disable-shared \
--with-big-tables --with-readline --with-plugins=innobase \
--with-mysqld-user=mysql --with-extra-charsets=all

Компилирате и инсталирате mysql 5.1.40:
make && make install

За по- добра сигурност на mysql 5.1.40 да се изпълнява mysql потребител:

sudo groupadd mysql
sudo useradd -g mysql mysql

Проблеми които възникнаха при конфигурирането, компилирането,  инсталирането и стартирането на mysql 5.1.40:

Проблем при конфигурирането:
/bin/rm: cannot remove `libtoolT': No such file or directory
config.status: executing default commands
Решение (проблема не е особено сериозен(за мен няма такъв проблем, но така да го кажа)- Проблемът си е проблем) по- долу:

Проблем: При изпълнение на "libtoolize --force"
Using `AC_PROG_RANLIB' is rendered obsolete by `AC_PROG_LIBTOOL'

Решение:
Редактиране на configure.in (в директорията на mysql-5.1) коментирате 230 ред (#AC_PROG_RANLIB) .
Пример на configure.in:

# Still need ranlib for readline; local static use only so no libtool.
#AC_PROG_RANLIB
# We use libtool
#AC_LIBTOOL_WIN32_DLL
AC_PROG_LIBTOOL

Проблем: При изпълнение на "libtoolize --force"
изникна грешка: "You should update your `aclocal.m4' by running aclocal."
Решение: aclocal

Проблем: При изпълнение на aclocal
/usr/share/aclocal/libmcrypt.m4:17: warning: underquoted definition of AM_PATH_LIBMCRYPT
run info '(automake)Extending aclocal'
or see http://sources.redhat.com/automake/automake.html#Extending-aclocal

Решение:
Проблемът е във файл "libmcrypt.m4" или "/usr/share/aclocal/libmcrypt.m4" , ред 17:
AC_DEFUN(AM_PATH_LIBMCRYPT,

За да поправим проблема редактираме 17-ти ред по следния начин:
AC_DEFUN([AM_PATH_LIBMCRYPT],

Проблем: При ./configure
/tmp/mysql-5.1.40/missing: line 54: automake-1.10: command not found
WARNING: `automake-1.10' is missing on your system.  You should only need it if
you modified `Makefile.am', `acinclude.m4' or `configure.in'.
You might want to install the `Automake' and `Perl' packages.
Grab them from any GNU archive site.

Решение: apt-get install automake

Проблем: При стартиране на Mysqld със: /usr/local/mysql/libexec/mysqld --user=mysql &
се получава следната грешка:
[ERROR] Can't find messagefile '/usr/share/mysql/english/errmsg.sys'
Решение: ln -s /usr/local/mysql/share/mysql/ /usr/share/mysql

alpha:~# /usr/local/mysql/bin/mysqld_safe --user=mysql
091026 18:16:16 mysqld_safe Logging to '/usr/local/mysql/var/alpha.err'.
touch: cannot touch `/usr/local/mysql/var/alpha.err': No such file or directory
chown: cannot access `/usr/local/mysql/var/alpha.err': No such file or directory
091026 18:16:16 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var
/usr/local/mysql/bin/mysqld_safe: line 100: /usr/local/mysql/var/alpha.err: No such file or directory
/usr/local/mysql/bin/mysqld_safe: line 137: /usr/local/mysql/var/alpha.err: No such file or directory
091026 18:16:16 mysqld_safe mysqld from pid file /usr/local/mysql/var/alpha.pid ended
/usr/local/mysql/bin/mysqld_safe: line 100: /usr/local/mysql/var/alpha.err: No such file or directory

Решение:
mkdir /usr/local/mysql/var/;
chown mysql.mysql /usr/local/mysql/var/;

Проблем при стартиране на mysqld_safe:
091026 18:46:17 [Warning] The syntax '--log' is deprecated and will be removed in MySQL 7.0. Please use

'--general_log'/'--general_log_file' instead.
091026 18:46:17 [Warning] The syntax '--log_slow_queries' is deprecated and will be removed in MySQL 7.0. Please use

'--slow_query_log'/'--slow_query_log_file' instead.

Решение: В /etc/mysql/my.cnf заменяме "log" със "general_log" и "log-slow-queries" със "slow_query_log"

Друг проблем: 091026 18:50:05 [ERROR] /usr/local/mysql/libexec/mysqld: unknown option '--skip-bdb'

Решение: премахвате просто skip-bdb

Стартиране на mysql 5.1.40:
/usr/local/mysql/bin/mysqld_safe --user=mysql &

Спиране на mysql 5.1.40:
/usr/local/mysql//bin/mysqladmin shutdown

Примерен конфигурационен файл my.cnf
(Поставям го в /etc/mysql/my.cnf (Допада ми Debian layoute -a). Може да се добави и в /etc/my.cnf . Когато се стартира mysqld_safe той автоматично проверява на тези места за конфигурационен файл и ако го намери го зарежда).:

# The MySQL server 5.1.40. My.cnf generated by amri, Mon Oct 26 19:07:30 EET 2009

[mysqld]
port            = 3306
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock

# Try number of CPU's*2 for thread_concurrency
thread_concurrency = 2

# Section Logging
general_log=/var/log/mysql/mysql.log
log-bin=/var/log/mysql/mysql-bin.log
slow_query_log=/var/log/mysql/mysql_slow.log
long_query_time=10

#Section Skip
skip-locking

#Server ID
server-id       = 1

# Optimized
key_buffer = 512M
key_buffer_size = 384M

wait_timeout=360

max_allowed_packet = 16M

read_buffer_size = 2M
sort_buffer_size = 2M
net_buffer_length = 8K
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 64M

max_connections = 600

join_buffer_size = 1M
read_buffer_size = 1M
sort_buffer_size = 2M
table_cache = 1024
table_open_cache = 512
thread_cache_size = 64

query_cache_limit = 1M
query_cache_size = 32M
query_cache_type = 1

set-variable = max_connections=1400
set-variable = max_connect_errors=150

[client]
port    = 3306
socket=/var/run/mysqld/mysqld.sock

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates

[myisamchk]
key_buffer_size = 256M
sort_buffer_size = 256M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout

Стойностите които са в този конфигурационен файл са използвани за тестове. Не мога да ги препоръчам за стабилен mysql.

Примерен mysql.server.sh :

#!/bin/sh
# Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
# This file is public domain and comes with NO WARRANTY of any kind

# MySQL daemon start/stop script.

# Usually this is put in /etc/init.d (at least on machines SYSV R4 based
# systems) and linked to /etc/rc3.d/S99mysql and /etc/rc0.d/K01mysql.
# When this is done the mysql server will be started when the machine is
# started and shut down when the systems goes down.

# Comments to support chkconfig on RedHat Linux
# chkconfig: 2345 64 36
# description: A very fast and reliable SQL database engine.

# Comments to support LSB init script conventions
### BEGIN INIT INFO
# Provides: mysql
# Required-Start: $local_fs $network $remote_fs
# Should-Start: ypbind nscd ldap ntpd xntpd
# Required-Stop: $local_fs $network $remote_fs
# Default-Start:  2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: start and stop MySQL
# Description: MySQL is a very fast and reliable SQL database engine.
### END INIT INFO

# If you install MySQL on some other places than @prefix@, then you
# have to do one of the following things for this script to work:
#
# -- Run this script from within the MySQL installation directory
# -- Create a /etc/my.cnf file with the following information:
#   [mysqld]
#   basedir=<path-to-mysql-installation-directory>
# -- Add the above to any other configuration file (for example ~/.my.ini)
#   and copy my_print_defaults to /usr/bin
# -- Add the path to the mysql-installation-directory to the basedir variable
#   below.
#
# If you want to affect other MySQL variables, you should make your changes
# in the /etc/my.cnf, ~/.my.cnf or other MySQL configuration files.

# If you change base dir, you must also change datadir. These may get
# overwritten by settings in the MySQL configuration files.

basedir="/usr/local/mysql";
datadir="/var/lib/mysql";

# Default value, in seconds, afterwhich the script should timeout waiting
# for server start.
# Value here is overriden by value in my.cnf.
# 0 means don't wait at all
# Negative numbers mean to wait indefinitely
service_startup_timeout=900

# The following variables are only set for letting mysql.server find things.

# Set some defaults
pid_file="/var/run/mysqld/mysqld.pid";
server_pid_file="/var/run/mysqld/mysqld.pid";

use_mysqld_safe=1
user=@MYSQLD_USER@
if test -z "$basedir"
then
basedir=@prefix@
bindir=@bindir@
if test -z "$datadir"
then
datadir=@localstatedir@
fi
sbindir=@sbindir@
libexecdir=@libexecdir@
else
bindir="$basedir/bin"
if test -z "$datadir"
then
datadir="$basedir/data"
fi
sbindir="$basedir/sbin"
libexecdir="$basedir/libexec"
fi

# datadir_set is used to determine if datadir was set (and so should be
# *not* set inside of the --basedir= handler.)
datadir_set=

#
# Use LSB init script functions for printing messages, if possible
#
lsb_functions="/lib/lsb/init-functions"
if test -f $lsb_functions ; then
. $lsb_functions
else
log_success_msg()
{
echo " SUCCESS! $@"
}
log_failure_msg()
{
echo " ERROR! $@"
}
fi

PATH=/sbin:/usr/sbin:/bin:/usr/bin:$basedir/bin
export PATH

mode=$1    # start or stop
shift
other_args="$*"   # uncommon, but needed when called from an RPM upgrade action
# Expected: "--skip-networking --skip-grant-tables"
# They are not checked here, intentionally, as it is the resposibility
# of the "spec" file author to give correct arguments only.

case `echo "testing\c"`,`echo -n testing` in
*c*,-n*) echo_n=   echo_c=     ;;
*c*,*)   echo_n=-n echo_c=     ;;
*)       echo_n=   echo_c='\c' ;;
esac

parse_server_arguments() {
for arg do
case "$arg" in
--basedir=*)  basedir=`echo "$arg" | sed -e 's/^[^=]*=//'`
bindir="$basedir/bin"
if test -z "$datadir_set"; then
datadir="$basedir/data"
fi
sbindir="$basedir/sbin"
libexecdir="$basedir/libexec"
;;
--datadir=*)  datadir=`echo "$arg" | sed -e 's/^[^=]*=//'`
datadir_set=1
;;
--user=*)  user=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
--pid-file=*) server_pid_file=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
--service-startup-timeout=*) service_startup_timeout=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
--use-mysqld_safe) use_mysqld_safe=1;;
--use-manager)     use_mysqld_safe=0;;
esac
done
}

parse_manager_arguments() {
for arg do
case "$arg" in
--pid-file=*) pid_file=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
--user=*)  user=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
esac
done
}

wait_for_pid () {
verb="$1"
manager_pid="$2"  # process ID of the program operating on the pid-file
i=0
avoid_race_condition="by checking again"
while test $i -ne $service_startup_timeout ; do

case "$verb" in
'created')
# wait for a PID-file to pop into existence.
test -s $pid_file && i=" && break
;;
'removed')
# wait for this PID-file to disappear
test ! -s $pid_file && i=" && break
;;
*)
echo "wait_for_pid () usage: wait_for_pid created|removed manager_pid"
exit 1
;;
esac

# if manager isn't running, then pid-file will never be updated
if test -n "$manager_pid"; then
if kill -0 "$manager_pid" 2>/dev/null; then
:  # the manager still runs
else
# The manager may have exited between the last pid-file check and now.
if test -n "$avoid_race_condition"; then
avoid_race_condition=""
continue  # Check again.
fi

# there's nothing that will affect the file.
log_failure_msg "Manager of pid-file quit without updating file."
return 1  # not waiting any more.
fi
fi

echo $echo_n ".$echo_c"
i=`expr $i + 1`
sleep 1
done

if test -z "$i" ; then
log_success_msg
return 0
else
log_failure_msg
return 1
fi
}

# Get arguments from the my.cnf file,
# the only group, which is read from now on is [mysqld]
if test -x ./bin/my_print_defaults
then
print_defaults="./bin/my_print_defaults"
elif test -x $bindir/my_print_defaults
then
print_defaults="$bindir/my_print_defaults"
elif test -x $bindir/mysql_print_defaults
then
print_defaults="$bindir/mysql_print_defaults"
else
# Try to find basedir in /etc/my.cnf
conf=/etc/my.cnf
print_defaults=
if test -r $conf
then
subpat='^[^=]*basedir[^=]*=\(.*\)$'
dirs=`sed -e "/$subpat/!d" -e 's//\1/' $conf`
for d in $dirs
do
d=`echo $d | sed -e 's/[  ]//g'`
if test -x "$d/bin/my_print_defaults"
then
print_defaults="$d/bin/my_print_defaults"
break
fi
if test -x "$d/bin/mysql_print_defaults"
then
print_defaults="$d/bin/mysql_print_defaults"
break
fi
done
fi

# Hope it's in the PATH … but I doubt it
test -z "$print_defaults" && print_defaults="my_print_defaults"
fi

#
# Read defaults file from 'basedir'.   If there is no defaults file there
# check if it's in the old (depricated) place (datadir) and read it from there
#

extra_args=""
if test -r "$basedir/my.cnf"
then
extra_args="-e $basedir/my.cnf"
else
if test -r "$datadir/my.cnf"
then
extra_args="-e $datadir/my.cnf"
fi
fi

parse_server_arguments `$print_defaults $extra_args mysqld server mysql_server mysql.server`

# Look for the pidfile
parse_manager_arguments `$print_defaults $extra_args manager`

#
# Set pid file if not given
#
if test -z "$pid_file"
then
pid_file=$datadir/mysqlmanager-`@HOSTNAME@`.pid
else
case "$pid_file" in
/* ) ;;
* )  pid_file="$datadir/$pid_file" ;;
esac
fi
if test -z "$server_pid_file"
then
server_pid_file=$datadir/`@HOSTNAME@`.pid
else
case "$server_pid_file" in
/* ) ;;
* )  server_pid_file="$datadir/$server_pid_file" ;;
esac
fi

case "$mode" in
'start')
# Start daemon

# Safeguard (relative paths, core dumps..)
cd $basedir

manager=$bindir/mysqlmanager
if test -x $libexecdir/mysqlmanager
then
manager=$libexecdir/mysqlmanager
elif test -x $sbindir/mysqlmanager
then
manager=$sbindir/mysqlmanager
fi

echo $echo_n "Starting MySQL"
if test -x $manager -a "$use_mysqld_safe" = "0"
then
if test -n "$other_args"
then
log_failure_msg "MySQL manager does not support options '$other_args'"
exit 1
fi
# Give extra arguments to mysqld with the my.cnf file. This script may
# be overwritten at next upgrade.
"$manager" \
--mysqld-safe-compatible \
--user="$user" \
--pid-file="$pid_file" >/dev/null 2>&1 &
wait_for_pid created $!; return_value=$?

# Make lock for RedHat / SuSE
if test -w /var/lock/subsys
then
touch /var/lock/subsys/mysqlmanager
fi
exit $return_value
elif test -x $bindir/mysqld_safe
then
# Give extra arguments to mysqld with the my.cnf file. This script
# may be overwritten at next upgrade.
pid_file=$server_pid_file
$bindir/mysqld_safe --datadir=$datadir --pid-file=$server_pid_file $other_args >/dev/null 2>&1 &
wait_for_pid created $!; return_value=$?

# Make lock for RedHat / SuSE
if test -w /var/lock/subsys
then
touch /var/lock/subsys/mysql
fi
exit $return_value
else
log_failure_msg "Couldn't find MySQL manager ($manager) or server ($bindir/mysqld_safe)"
fi
;;

'stop')
# Stop daemon. We use a signal here to avoid having to know the
# root password.

# The RedHat / SuSE lock directory to remove
lock_dir=/var/lock/subsys/mysqlmanager

# If the manager pid_file doesn't exist, try the server's
if test ! -s "$pid_file"
then
pid_file=$server_pid_file
lock_dir=/var/lock/subsys/mysql
fi

if test -s "$pid_file"
then
mysqlmanager_pid=`cat $pid_file`

if (kill -0 $mysqlmanager_pid 2>/dev/null)
then
echo $echo_n "Shutting down MySQL"
kill $mysqlmanager_pid
# mysqlmanager should remove the pid_file when it exits, so wait for it.
wait_for_pid removed "$mysqlmanager_pid"; return_value=$?
else
log_failure_msg "MySQL manager or server process #$mysqlmanager_pid is not running!"
rm $pid_file
fi

# delete lock for RedHat / SuSE
if test -f $lock_dir
then
rm -f $lock_dir
fi
exit $return_value
else
log_failure_msg "MySQL manager or server PID file could not be found!"
fi
;;

'restart')
# Stop the service and regardless of whether it was
# running or not, start it again.
if $0 stop  $other_args; then
$0 start $other_args
else
log_failure_msg "Failed to stop running server, so refusing to try to start."
exit 1
fi
;;

'reload'|'force-reload')
if test -s "$server_pid_file" ; then
read mysqld_pid <  $server_pid_file
kill -HUP $mysqld_pid && log_success_msg "Reloading service MySQL"
touch $server_pid_file
else
log_failure_msg "MySQL PID file could not be found!"
exit 1
fi
;;
'status')
# First, check to see if pid file exists
if test -s "$server_pid_file" ; then
read mysqld_pid < $server_pid_file
if kill -0 $mysqld_pid 2>/dev/null ; then
log_success_msg "MySQL running ($mysqld_pid)"
exit 0
else
log_failure_msg "MySQL is not running, but PID file exists"
exit 1
fi
else
# Try to find appropriate mysqld process
mysqld_pid=`pidof $libexecdir/mysqld`
if test -z $mysqld_pid ; then
if test "$use_mysqld_safe" = "0" ; then
lockfile=/var/lock/subsys/mysqlmanager
else
lockfile=/var/lock/subsys/mysql
fi
if test -f $lockfile ; then
log_failure_msg "MySQL is not running, but lock exists"
exit 2
fi
log_failure_msg "MySQL is not running"
exit 3
else
log_failure_msg "MySQL is running but PID file could not be found"
exit 4
fi
fi
;;
*)
# usage
echo "Usage: $0  {start|stop|restart|reload|force-reload|status}  [ MySQL server options ]"
exit 1
;;
esac

exit 0

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Upgrade От Debian Etch до Debian Lenny

Ще бъдат кратък, че "много е сложно":
apt-get update && apt-get dist-upgrade

#Заменяте etch със lenny
vim /etc/apt/sources.list
:%s/etch/lenny

apt-get update && apt-get dist-upgrade && reboot

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Upgrade на WordPress от shell.

Вместо да обяснявам ред по ред предоставям простo  sh скриптче което прави всичко:

#!/bin/sh
mysqldb="vashata_baza";
mysqluser="vashiqt_user";
mysqlpass="vashata_parola";
wp_dir="/var/yourblog.com/public_html/";
cd /tmp/
echo "Backup your WordPress DB: $mysqldb";
mysqldump -u$mysqluser -p$mysqlpass $mysqldb > /tmp/wordpress_blog.sql
echo "Backup your Old WordPress";
#cp -Rp $wp_dir /tmp/wordpress_blog_backup/
echo "Download new WordPress";
wget -q http://wordpress.org/latest.zip
unzip /tmp/latest.zip
echo "Replace old WordPress files";
cp -avr /tmp/wordpress/* $wp_dir
echo "Delete temp files";
rm -fr /tmp/latest.zip /tmp/wordpress/
echo "Visit http://yourblog.com/wp-admin/upgrade.php"
echo "Click: Upgrade WordPress Database";
echo "Your WordPress is updated successfully"

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Проблем при php.ini с таговете определящи вашия php код

Случвало ли ви се е да направите php файл с тагове

<?
echo "asd";
?>

и този същия файл да не се изпълнява като php, а като html. Причината е, че в настройките на php е указано да се ползва само тагa "<?php
, а не краткия вариант "<?".

За да се предостави възможност да ползваме отварящи тагове "<?php" и "<?" трябва да редактираме php.ini и да направим следната промяна:

; This directive determines whether or not PHP will recognize code between
; <? and ?> tags as PHP source which should be processed as such. It's been
; recommended for several years that you not use the short tag "short cut" and
; instead to use the full <?php and ?> tag combination. With the wide spread use
; of XML and use of these tags by other languages, the server can become easily
; confused and end up parsing the wrong code in the wrong context. But because
; this short cut has been a feature for such a long time, it's currently still
; supported for backwards compatibility, but we recommend you don't use them.
; Default Value: On
; Development Value: Off
; Production Value: Off
; http://php.net/short-open-tag
short_open_tag = On

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Немърливост в база данни с InnoDB таблици

Няма да конкретизирам проект или сървър, но ще кажа, че таблицата tablicaX беше локната. За целта реших да проверя каква е MyISAM или InnoDB:

mysql> show create table tablicaX;
ERROR 1033 (HY000): Incorrect information in file: './bazaX/tablicaX.frm'

Не става ясно каква е таблицата. Добре. Реших да предположа, че е масовия енжин MyISAM и направих следното:

myisamchk -r '/var/lib/mysql/bazaX/tablicaXs.frm';
myisamchk: error: '/var/lib/mysql/bazaX/tablicaX.frm' is not a MyISAM-table

На практика нещо определено не е в час,  но какво ?!

Отговорът отново е прост: В my.cnf открих skip-innodb .

Просто си активирате InnoDB енжина и всичко е наред. Кофти е, че MySQL не алармира за спирането на InnoDB engine, но той все пак не е пророк :)

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Компилиране и инсталиране на PHP 5.3 на Debian Lenny

Не е необходимо системата да бъде Debian Lenny просто тази в момента е такава(както и да е). Освен, че системата е на Debian Lenny, apache- 2.2 и mysql 5.1 . Преминавам по същество как да инсталираме php  5.3 :) :

Според моите изисквания отностно конфигурацията на PHP споделям следните options:

./configure --prefix=/usr --with-apxs2=/usr/sbin/apxs \
--with-mysql=/usr/local/mysql51/ \
--with-tidy=/usr \
--with-curl=/usr/bin \
--with-curlwrappers \
--with-openssl-dir=/usr \
--with-zlib-dir=/usr \
--with-xpm-dir=/usr \
--with-pdo-mysql=/usr \
--with-xsl=/usr \
--with-ldap \
--with-xmlrpc \
--with-iconv-dir=/usr \
--with-bz2=/usr \
--with-mcrypt=/usr \
--with-gd \
--with-jpeg-dir=/usr \
--with-png-dir=/usr \
--with-zlib-dir=/usr \
--with-freetype-dir=/usr \
--with-pear \
--with-imap \
--with-kerberos \
--with-imap-ssl \
--with-libedit \
-enable-exif \
-enable-mbstring \
-enable-calendar \
-enable-zip

При конфигурирането излязоха следните грешки, но хубавото, че това не са грешки, а зависимости които трябва да бъдат спазени. Следващото хубаво нещо е, че по- долу не само ще изброя зависимостите, а и как да бъдат изпълнени правилно:

Проблем: configure: error: xml2-config not found. Please check your libxml2 installation.
Решение: apt-get install libxml2-dev

Проблем: configure: warning: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.
Решение: apt-get install re2c

Проблем: configure: error: Please reinstall the BZip2 distribution
Решение: apt-get install libbz2-dev

Проблем: configure: error: Please reinstall the libcurl distribution -- easy.h should be in <curl-dir>/include/curl/
Решение: Инсталиране на Curl от тук

Проблем: configure: error: libjpeg.(a|so) not found.
Решение: apt-get install libjpeg62-dev

Проблем: configure: error: libpng.(a|so) not found.
Решение: apt-get install libpng12-dev

Проблем: configure: error: libXpm.(a|so) not found.
Решение: apt-get install libxpm-dev

Проблем: configure: error: freetype.h not found.
Решение: apt-get install libfreetype6-dev

Проблем: configure: error: utf8_mime2text() has new signature, but U8T_CANONICAL is missing. This should not happen. Check config.log for additional information.
Решение: apt-get install libc-client-dev

Проблем: configure: error: Cannot find ldap.h
Решение: apt-get install libldap2-dev

Проблем: configure: error: mcrypt.h not found. Please reinstall libmcrypt.
Решение: apt-get install libmcrypt-dev

Проблем: configure: error: edit library required by readline not found
Решение: apt-get install libedit-dev

Проблем: configure: error: SNMP sanity check failed. Please check config.log for more information.
Решение: apt-get install libsnmp-dev

Проблем: configure: error: Cannot find libtidy
Решение: apt-get install libtidy-dev

Проблем: configure: error: xslt-config not found. Please reinstall the libxslt >= 1.1.0 distribution
Решение: apt-get install libxslt1-dev

Проблем: checking for mcrypt support… yes
configure: error: mcrypt.h not found. Please reinstall libmcrypt.
Решение: apt-get install libmcrypt-dev

След това се изпълнява:

make && make install

Препоръчително е да изпълните преди "make install" "make test"

Voila: Thank you for using PHP.

Необходимо е да активирате php5 модула в Apache 2.2 по- следния метод:

a2enmod php5
Enabling module php5.
Run '/etc/init.d/apache2 restart' to activate new configuration!

/etc/init.d/apache2 restart

За малко да забравим да копираме php.ini в неговата директория :)

cp /tmp/php-5.3.0/php.ini-production /usr/lib/php.ini

Сега ще сетнем и подразбираща времева зона:

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone =Europe/Sofia

Идеята е, че ако времевата зона на машината не е сетната правилно и от PHP извикате функция Date() ше ви изведе следната грешка:

Warning: date() [function.date]: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Europe/Sofia' for 'EEST/3.0/DST' instead in /var/www/test1.php on line 2
2009-10-21

Рестартираме (не reload, а restart !) Apache2 за да влязат новите промени в действие.

Това е всичко. Вече имате последна стабилна версия на PHP 5.3

Други проблеми:

Проблем: Зареждате модула php и всичко се очаква да е наред, но Apache все още не php файловете не се изпълняват.
Решение: Трябва да се добави в конф. файл как да се употребяват *.php файловете /etc/apache2/httpd.conf :

<IfModule mime_module>
AddType application/x-httpd-php .php .phtml .php3
AddType application/x-httpd-php-source .phps

</IfModule>

Проблем: При php.ini с таговете определящи вашия php код.
Решение натиснете ТУК

PS: Много внимавайте при конфигурацията на PHP с използването на -enable , --with . Забележете, че "enable" е с една чертичка отпред, а "with" с две черти. Ако напишете "--enable" (enable с две чертички) то това ще ви донесе неприятности в къщи :)

<IfModule mime_module>
AddType application/x-httpd-php .php .phtml .php3
AddType application/x-httpd-php-source .phps
</IfModule>
VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Как да сетнем wait_timeout na постоянна връзка към mysql- pconnect

По поздразбиране времето за затваряне на persistent connection в MySQL е доста секунди, но аз искам да променя това време на по- малко, примерно 15 секунди. Това може да се направи от my.cnf,  но ще бъде сетване на всички Persistent connections (постоянни връзки), а аз искам само на текущата. Все пак за инфо как се сетва wait_timout в my.cnf

Файл: /etc/mysq/my.cnf
wait_timeout = 1800
/etc/init.d/mysqd restart
Има и друг вариант да сетнете от Mysql, wait_timeout за глобално ползване или чрез: mysql> set global wait_timeout=60 . Но този вариант няма да е така дълготраен колкото по- горния

Тук идеята обаче не е тази. Решението разбира се е както обикновенно доста простично. След като се напарави постоянна връзка се изпълнява сетването на wait_timeout. Ето пример за това:

mysql> set @@session.wait_timeout=360;

След като сетнахме секундите които трябва да изтекат преди да се затвори постоянната връзка сега можем да проверим дали всичко е наред:

mysql> select @@session.wait_timeout,@@global.wait_timeout;
+---------------------------------------+------------------------------+
| @@session.wait_timeout             | @@global.wait_timeout |
+---------------------------------------+-------------------------------+
|                                                    28800 |                                 360 |
+-----------------------------9--------+-------------------------------+
1 row in set (0.00 sec)

Очевидно всеки си е задал въпроса: Защо му е да ограничава persistent connection на 15 секунди след като може да използва обикновенна връзка mysql_connect с възможност за затваряне веднага след изпълнение на скрипта (mysql_close)? Отговорът е защото заявките които се изпълняват са в рамките на 15 секунди т.е. за 15 секунди могат да се изпълнят 20 заявки в случаен интервал т.е. не е ясно кога трябва да се затвори връзката и кога не. За целта използвам pconnect с времеви прозорец 15 секунди и абсолютно всичко работи прекрасно.

PS: Това може да бъде решение на въпроса "mysql_connect има възможност за затваряне след изпълнение mysql_close, но mysql_pconnect няма mysql_pclose" Като се окаже малко време на практика това ще бъде неформално mysql_pclose.

VN:F [1.9.22_1171]
Rating: 0.0/5 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Инсталиране на Curl

Тази статия има за цел да я предостави информация как се инсталира Curl версия 7.19.6:

wget http://curl.haxx.se/download/curl-7.19.6.tar.gz
tar zxvf curl-7.19.6.tar.gz
cd curl-7.19.6

./configure --with-ssl \
--with-gnutls \
--disable-libssh2 \
--disable-ldaps \
--disable-ldap \
--disable-sspi \
--disable-libidn \
--disable-ares \
--disable-spnego \
--disable-gssapi \
--disable-krb4

make && make install

Проблем при изпълнението на ./configure:

configure: WARNING: SSL disabled, you will not be able to use HTTPS, FTPS, NTLM and more.
configure: WARNING: Use --with-ssl, --with-gnutls or --with-nss to address this.
Решение: apt-get install libssl-dev

Промени в последната версия 7.19.6:

Changes:

* CURLOPT_FTPPORT (and curl's -P/--ftpport) support port ranges
* Added CURLOPT_SSH_KNOWNHOSTS, CURLOPT_SSH_KEYFUNCTION, CURLOPT_SSH_KEYDATA
* CURLOPT_QUOTE, CURLOPT_POSTQUOTE and CURLOPT_PREQUOTE can be told to ignore error responses when used with FTP

Bugfixes:

* crash on bad socket close with FTP
* leaking cookie memory when duplicate domains or paths were used
* build fix for Symbian
* CURLOPT_USERPWD set to NULL clears auth credentials
* libcurl-NSS build fixes
* configure script fixed for VMS
* set Content-Length: with POST and PUT failed with NTLM auth
* allow building libcurl for VxWorks
* curl tool exit codes fixed for VMS
* --no-buffer treated correctly
* djgpp build fix
* configure detection of GnuTLS now based on pkg-config as well
* libcurl-NSS client cert handling segfaults
* curl uploading from stdin/pipes now works in non-blocking way so that it continues the downloading even when the read stalls
* ftp credentials are added to the url if needed for http proxies
* curl -o -- sends data to stdout using binary mode on windows
* fixed the separators for "array" style string that CURLINFO_CERTINFO returns
* auth problem over several hosts with re-used connection
* improved the support for client certificates in libcurl+NSS
* fix leak in gtls code
* missing algorithms in libcurl+OpenSSL
* with noproxy set you could still get a proxy if a proxy env was set
* rand seeding on libcurl on windows built with OpenSSL was not thread-safe
* fixed the zero byte inserted in cert name flaw in libcurl+OpenSSL
* don't try SNI with SSLv2 or SSLv3 (OpenSSL and GnuTLS builds)
* libcurl+OpenSSL would wrongly acknowledge a cert if CN matched but subjectAltName didn't
* TFTP upload sent illegal TSIZE packets

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Fatal error: Call to undefined function xmlrpc_encode_request()

Лошава грешка. Очевидно които е ползва xmlrpc знае за какво иде реч, но все пак за тези които не са просветлени. Повече информация за функцията може да намерите тук: php.net .
Проблемът с xmlrpc_encode_request се решава като се инсталира модула за xmlrpc, а именно при Debian:

apt-get install php5-xmlrpc

Това е всичко сега вече функцията xmlrpc_encode_request работи страхотно.

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Спиране на SYN Flood чрез sysctl и iptables

На една машина нямаше правила за спиране на syn flood и трябваше да добавя такива. Понеже се сетих, че преди много години това беше сериозен проблем реших да напиша тази кратка публикация която обяснява как се спира съответния syn flood. Ако искате да тествате дали вашата машина е подвластна на syn flood може да тествате със hping3 или по- конкретно:

hping3 --faster -S  example.com
#Ако искате да конкретизирате порт, ето така:
hping3 --faster -S  example.com -p 80

Ако машината ви замръзне или се случи натоварване то определено имате проблем :).

Ето решение на проблема чрез използване на sysctl + iptables :

Файл: Sysctl.conf

net.ipv4.tcp_syn_retries = 3
net.ipv4.tcp_syncookies = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.tcp_max_syn_backlog = 2048

Записване и презареждане на sysctl:

sysctl -p

Промени в iptables(създаване на верига syn-flood) :

iptables -N syn-flood
iptables -A INPUT -p tcp --syn -j syn-flood
iptables -A syn-flood -m limit --limit 100/s --limit-burst 150 -j RETURN
iptables -A syn-flood -j DROP

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)