Установка eAccelerator на CentOS

Сен 09

Приближается предел ресурсов на моем сервер. Висит там порядка 200 всевозможных сайтов + мои скрипты. Я этот предел, есстественно, стараюсь отдалить, потому как лень переносить сайты на новый| охота повозиться | не хочу покупать новый серв (ненужное потом зачеркну). Еще и пыхыпеЧувак его тут пиарит, ну как не установить )
Акселератор требует autoconf, automake, libtool, m4. Также весьма желателен пакет php-devel, а именно утилита phpize, дабы не пересобирать пхп руками.
Исходная ось – CentOS 5.3(Final)

# cat /etc/redhat-release
CentOS release 5.3 (Final)

Качаем сам акселератор:

 wget http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.tar.bz2

Доставляем необходимые пакет

yum install autoconf automake libtool php-devel

Далее по порядочку:

phpize
./configure --enable-eaccelerator=shared --with-php-config=/usr/bin/php-config
make
make install
vi /etc/php.ini

extension="eaccelerator.so"
eaccelerator.shm_size = "160"
eaccelerator.cache_dir = "/var/cache/php-eaccelerator"
eaccelerator.enable = "1"
eaccelerator.optimizer = "1"
eaccelerator.debug = 0
eaccelerator.log_file = "/var/log/httpd/eaccelerator_log"
eaccelerator.name_space = ""
eaccelerator.check_mtime = "1"
eaccelerator.filter = ""
eaccelerator.shm_max = "0"
eaccelerator.shm_ttl = "3600"
eaccelerator.shm_prune_period = "0"
eaccelerator.shm_only = "0"
eaccelerator.compress = "1"
eaccelerator.compress_level = "9"
eaccelerator.keys = "none"
eaccelerator.sessions = "none"
eaccelerator.content = "none"
eaccelerator.allowed_admin_path = ""

Создаются папки для временных файлов:

mkdir /var/cache/php-eaccelerator
chmod 777 /var/cache/php-eaccelerator

Все. Осталось только перезагрузить апача.

Если yum отказывается работать с родными репозиториями

Сен 08

И выдает вот такой бред

Traceback (most recent call last):
File "/usr/bin/yum", line 29, in ?
yummain.user_main(sys.argv[1:], exit_code=True)
File "/usr/share/yum-cli/yummain.py", line 229, in user_main
errcode = main(args)
File "/usr/share/yum-cli/yummain.py", line 145, in main
(result, resultmsgs) = base.buildTransaction()
File "/usr/lib/python2.4/site-packages/yum/__init__.py", line 647, in buildTransaction
(rescode, restring) = self.resolveDeps()
File "/usr/lib/python2.4/site-packages/yum/depsolve.py", line 704, in resolveDeps
for po, dep in self._checkFileRequires():
File "/usr/lib/python2.4/site-packages/yum/depsolve.py", line 939, in _checkFileRequires
if not self.tsInfo.getOldProvides(filename) and not self.tsInfo.getNewProvides(filename):
File "/usr/lib/python2.4/site-packages/yum/transactioninfo.py", line 414, in getNewProvides
for pkg, hits in self.pkgSack.getProvides(name, flag, version).iteritems():
File "/usr/lib/python2.4/site-packages/yum/packageSack.py", line 300, in getProvides
return self._computeAggregateDictResult("getProvides", name, flags, version)
File "/usr/lib/python2.4/site-packages/yum/packageSack.py", line 470, in _computeAggregateDictResult
sackResult = apply(method, args)
File "/usr/lib/python2.4/site-packages/yum/sqlitesack.py", line 861, in getProvides
return self._search("provides", name, flags, version)
File "/usr/lib/python2.4/site-packages/yum/sqlitesack.py", line 43, in newFunc
return func(*args, **kwargs)
File "/usr/lib/python2.4/site-packages/yum/sqlitesack.py", line 837, in _search
for pkg in self.searchFiles(name, strict=True):
File "/usr/lib/python2.4/site-packages/yum/sqlitesack.py", line 43, in newFunc
return func(*args, **kwargs)
File "/usr/lib/python2.4/site-packages/yum/sqlitesack.py", line 586, in searchFiles
self._sql_pkgKey2po(rep, cur, pkgs)
File "/usr/lib/python2.4/site-packages/yum/sqlitesack.py", line 470, in _sql_pkgKey2po
pkg = self._packageByKey(repo, ob['pkgKey'])
File "/usr/lib/python2.4/site-packages/yum/sqlitesack.py", line 413, in _packageByKey
po = self.pc(repo, cur.fetchone())
File "/usr/lib/python2.4/site-packages/yum/sqlitesack.py", line 68, in __init__
self._read_db_obj(db_obj)
File "/usr/lib/python2.4/site-packages/yum/sqlitesack.py", line 94, in _read_db_obj
setattr(self, item, _share_data(db_obj[item]))
TypeError: unsubscriptable object

помогает вот это заклинание:

yum clean all
rm -f /var/lib/rpm/__db*
rpm --rebuilddb
yum update

WordPress и memcache 2

Авг 09

Audio clip: Adobe Flash Player (version 9 or above) is required to play this audio clip. Download the latest version here. You also need to have JavaScript enabled in your browser.

Первая часть тут была.
Написал я тогда как сделать, а сам так и не сделал и результатов не посмотрел, насколько сильно помогает memcache для вп.
Кратко, для чего нужен memcache: при определенной нагрузке, вордпресс начинает генерить очень много запросов и завешивает базу. Меня когда одни редиски досили, первое, что отвалилось так это база. Не могу установить соединение с базой данных – частенько выдает вордпресс. Memcached кеширует запросы к базе, тем самым снимая ее с БД (и перекладывая на оперативку :) )
Также я изначально отказался от плагинов, например batcache. Как установить плагин итак все знают.
read all »

Пакеты для работы с imap для php

Апр 27

Fatal error: Call to undefined function imap_open() in

пакет для этой беды называется

php-imap под Centos

php5-imap под Debian

Python 2.5.1 и старше на Centos

Мар 03

Стала выводится на одном из серверов ошибочка, очень меня она не устраивала read all »

Настройка локали в Centos

Янв 20

Запарила кодировка en_US.UTF8, решил поменять на мою системную KOI8-R.

read all »

Организация бекапа на серверах

Янв 18

Расширенный ман по настройке резервного копирования на своих серваках в продолжении этой темы

read all »

Установка Squid на Centos

Дек 15

Загружается сам сквид

# yum install squid

Вот что-то типа этого выдается в ответ

Loading «fastestmirror» plugin
Loading mirror speeds from cached hostfile
* rpmforge: ftp-stud.fht-esslingen.de
* base: mirror.silyus.net
* updates: mirror.silyus.net
* addons: mirror.silyus.net
* extras: mirror.silyus.net
rpmforge 100% |=========================| 1.1 kB 00:00
base 100% |=========================| 1.1 kB 00:00
updates 100% |=========================| 951 B 00:00
addons 100% |=========================| 951 B 00:00
extras 100% |=========================| 1.1 kB 00:00
Setting up Install Process
Parsing package install arguments
Resolving Dependencies
–> Running transaction check
—> Package squid.i386 7:2.6.STABLE6-5.el5_1.3 set to be updated
–> Processing Dependency: perl(URI::URL) for package: squid
–> Running transaction check
—> Package perl-URI.noarch 0:1.35-3 set to be updated
–> Finished Dependency Resolution

Dependencies Resolved

=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
squid i386 7:2.6.STABLE6-5.el5_1.3 base 1.2 M
Installing for dependencies:
perl-URI noarch 1.35-3 base 116 k

Transaction Summary
=============================================================================
Install 2 Package(s)
Update 0 Package(s)
Remove 0 Package(s)

Total download size: 1.3 M
Is this ok [y/N]: y
Downloading Packages:
(1/2): perl-URI-1.35-3.no 100% |=========================| 116 kB 00:00
(2/2): squid-2.6.STABLE6- 100% |=========================| 1.2 MB 00:00
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing: perl-URI ######################### [1/2]
Installing: squid ######################### [2/2]

Installed: squid.i386 7:2.6.STABLE6-5.el5_1.3
Dependency Installed: perl-URI.noarch 0:1.35-3
Complete!

Далее конфигурим сам сквид.

# mcedit /etc/squid/squid.conf

Для начала нужно определить ACL (access control list) для работы со сквидом. Порт по умолчанию TCP 3128.

Пример добавления доступа отовсюду, есть в исходном конфиге.


acl all src 0.0.0.0/0.0.0.0

Первый раз сквид надо запускать с параметром -z для создания своп-директорий

# squid -z

2008/12/15 20:27:35| parseConfigFile: line 586 unrecognized: ‘ACL’
2008/12/15 20:27:35| Creating Swap Directories

После стартуем уже как надо

# /etc/init.d/squid start
Starting squid: ….. [ OK ]

Проверяем, открыт ли порт

# netstat -tulpn | grep 3128
tcp 0 0 0.0.0.0:3128 0.0.0.0:* LISTEN 26375/(squid)

Порт открыт.

Далее нужно закрыть доступ без пароля, например авторизацией через mysql.

Здесь лежит сама база юзеров, тут скрипт авторизации.

Сливаем

# wget http://www.kaba.org.ua/soft/squid/base.sql # wget http://www.kaba.org.ua/soft/squid/mysql_auth.tar.bz2

Импортируем базу

# mysql -u root -p mysql < base.sql

Скрипту нужен gcc, у меня не оказалось

#yum install gcc

Также нужна библиотека mysql-devel

# yum install mysql-devel

Находим пути библиотек и самого мускула в мейкфайле

# updatedb # locate mysql.h
/usr/include/mysql/mysql.h
# locate mysqlclient
/usr/lib/mysql/libmysqlclient.a
/usr/lib/mysql/libmysqlclient.so
/usr/lib/mysql/libmysqlclient.so.15
/usr/lib/mysql/libmysqlclient.so.15.0.0
/usr/lib/mysql/libmysqlclient_r.a
/usr/lib/mysql/libmysqlclient_r.so
/usr/lib/mysql/libmysqlclient_r.so.15
/usr/lib/mysql/libmysqlclient_r.so.15.0.0

Предварительно меняем переменные DBHOST,DBUSER,DB,DBPASSWORD в скрипте на свои и make, затем копируем в нужную директорию скомпиленные файлы. Далее прописываем в /etc/squid/squid.conf

auth_param basic program /usr/local/sbin/mysql_auth
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours

И перезагружаем сквид

Юзеры добавляются так

INSERT INTO proxy_users VALUES('','user',password('somepass'));