FastNetMon

Показаны сообщения с ярлыком Debian. Показать все сообщения
Показаны сообщения с ярлыком Debian. Показать все сообщения

четверг, 3 февраля 2011 г.

Установка Postfix на Debian

Удаляем старый почтовик:
apt-get remove exim4-*

apt-get install postfix -y

Далее: Postfix Configuration -> Ok. Internet Site -> Ok. Задаем hostname -> Ok.

Применяем настройки:
/etc/init.d/postfix restart

Ставим утилиту mail:
apt-get install mailx -y

Тестирум работу почты:
echo test | mail -s test test@domain.ru

Хм, странно, но у меня вот не заработало...

четверг, 6 января 2011 г.

Как сделать собственный Jabber сервер на FastVPS.ru на базе Debian 5 Lenny?

Разве Вам, как продвинутому айтишнику, никогда не хотелось иметь свой собственный Jabber сервер на своем домене? Уверен, нет человека, которому бы не хотелось иметь JID вида admin@domain.ru :) Что же, это довольно просто!

Для осуществления мини мечты нам понадобится:
1. Домен второго уровня domain.ru добавленный в панель управления DNS по адресу https://ns3.fastvps.ru/manager
2. VPS или выделенный сервер с ОС Debian на FastVPS.ru
3. Немного терпения и сноровки :)

Итак, поехали!

Создание SRV записи на DNS для Jabber

Предполагаем, что на домене domain.ru у нас уже работают сайты. Поэтому, логинимся в панель ns3, выбираем нужный нам домен, щелкаем по нему дважды и входим в меню поддоменов. Далее нам нужно создать запись, которая будет указывать расположение нашего Jabber сервиса, для этого щелкаем по зеленому плюсу в верхнем углу панели. Тип ставим в "A", имя jabber (тогда полный адрес нашего Jabber сервера будет jabebr.domain.ru), а в поле "адрес" вписываем IP нашего сервера. После этого создаем три записи типа "SRV (сетевой сервис)" со следующими именами и портами:
_jabber._tcp 5269
_xmpp-server._tcp 5269
_xmpp-client._tcp 5222

Поля "Приоритет" и "Условный вес SRV-записи" выставляем в 0, а в поле адрес вписываем "jabber".

В конфиге named это будет выглядеть как:
_jabber._tcp IN SRV 0 0 5269 jabber
_xmpp-server._tcp IN SRV 0 0 5269 jabber
_xmpp-client._tcp IN SRV 0 0 5222 jabber

Через некоторое время, когда DNS обновится можно опционально проверить работу указанных записей извне:
host -t SRV _jabber._tcp.domain.ru
host -t SRV _xmpp-server._tcp.domain.ru
host -t SRV _xmpp-client._tcp.domain.ru

Итак, с DNS закончили, переходим к настройке демонов.

Установка Jabber сервера

Устанавливаем корректный hostname сервера:
echo "domain.ru" > /etc/hostname
/etc/init.d/hostname.sh

В консоли выполняем следующие команды:

apt-get update;
apt-get install -y ejabberd;

После этого ejabber будет установлен, добавлен в автозапуск (будет загружаться автоматически при загрузке системы) и запущен.

Убеждаемся, что Ejabberd запустился и слушает нужные нам порты:
netstat -lnpt | grep beam
tcp 0 0 0.0.0.0:5280 0.0.0.0:* LISTEN 11754/beam
tcp 0 0 xx.xx.xx.xx:7777 0.0.0.0:* LISTEN 11754/beam
tcp 0 0 0.0.0.0:45858 0.0.0.0:* LISTEN 11754/beam
tcp 0 0 0.0.0.0:5222 0.0.0.0:* LISTEN 11754/beam
tcp 0 0 0.0.0.0:5269 0.0.0.0:* LISTEN 11754/beam



Конфигурация Jabber сервера

dpkg-reconfigure ejabberd

Указываем domain.ru, потом admin и дважды вводим пароль администратора.

В ответ система откликнется примерно следующим:
Stopping jabber server: ejabberd.
Replacing config file /etc/ejabberd/ejabberd.cfg with new version
Starting jabber server: ejabberd.
Waiting for ejabberd to register admin user.
Admin user "admin@domain.ru" is registered successfully.

Входим под учетной записью администратора

Теперь нам нужен клиент с поддержкой протокола Jabber. Добавляем учетную запись, выбираем ее тип "Jabber", в поле Jabber ID вводим "admin@domain.ru", указываем пароль и подключаемся, при этом будет выдано предложение подтвердить сертификат, соглашаемся и принимаем его. Все! Можно добавлять других контактов и общаться по Jabber со всем миром!

Веб-интерфейс управления

Для выполнения различных рутиных задачек есть интерфейс управления, доступный по адресу: http://jabber.domain.ru:5280/admin, в качестве логина указываем admin@domain.ru, а в качестве пароля - наш пароль на jabber.

Консоль управления

Позволяет выполнять огромное множество операций с Jabber сервером.
ejabberdctl
Usage: ejabberdctl [--node nodename] command [options]

Available commands in this ejabberd node:
status get ejabberd status
stop stop ejabberd
restart restart ejabberd
reopen-log reopen log file
register user server password register a user
unregister user server unregister a user
backup file store a database backup to file
restore file restore a database backup from file
install-fallback file install a database fallback from file
dump file dump a database to a text file
load file restore a database from a text file
import-file file import user data from jabberd 1.4 spool file
import-dir dir import user data from jabberd 1.4 spool directory
delete-expired-messages delete expired offline messages from database
delete-old-messages n delete offline messages older than n days from database
mnesia [info] show information of Mnesia system
vhost host ... execute host-specific commands
srg-list-groups host list the shared roster groups from host
delete-older-messages days delete offline messages older than 'days'
vcard-set user host data [data2] content set data to content on the vCard
incoming-s2s-number print number of incoming s2s connections on the node
vcard-get user host data [data2] get data from the vCard of the user
status-list status list the logged users with status
remove-node nodename remove an ejabberd node from the database
stats onlineusers number of logged users
stats registeredusers number of registered users
pushroster-all file push template roster in file to all those users
srg-get-info group host get info of a specific group on host
rosteritem-purge [options] Purge all rosteritems that match filtering options
add-rosteritem user1 server1 user2 server2 nick group subs Add user2@server2 to user1@server1's roster
srg-delete group host delete the group
stats uptime-seconds uptime of ejabberd node in seconds
outgoing-s2s-number print number of outgoing s2s connections on the node
killsession user server resource kill a user session
stats onlineusersnode number of logged users in the ejabberd node
pushroster file user server push template roster in file to user@server
load-config file load config from file
user-resources user server print user's connected resources
srg-create group host name description display create the group with options
get-cookie get the Erlang cookie of this node
export2odbc server output export Mnesia tables on server to files on output directory
connected-users-number print a number of established sessions
srg-user-add user server group host add user@server to group on host
set-password user server password set password to user@server
delete-older-users days delete users that have not logged in the last 'days'
rem-rosteritem user1 server1 user2 server2 Remove user2@server2 from user1@server1's roster
compile file recompile and reload file
status-num status number of logged users with status
push-alltoall server group adds all the users to all the users in Group
srg-user-del user server group host delete user@server from group on host
connected-users list all established sessions

Examples:
ejabberdctl restart
ejabberdctl --node ejabberd@host restart
ejabberdctl vhost jabber.example.org ...

Подключение JwChat

Осуществляется весьма легко: http://www.ejabberd.im/jwchat-localserver

Источники: http://www.jms1.net/jabberd2/srv.shtml и http://server-help.ru/?tag=ejabberd

среда, 22 декабря 2010 г.

Как добавить IP на Debian как алияс для eth0?

Легко!

Открываем конфиг сети:
vi /etc/network/interfaces

Добавляем там:
auto eth0:0
iface eth0:0 inet static
address xx.xx.xx.xx
netmask 255.255.255.255

Применяем:
/etc/init.d/networking restart

Через несколько мгновений адрес должен запинговаться.

понедельник, 13 декабря 2010 г.

Как включить логгирование cron задач в Debian 5 Lenny?

vi /etc/rsyslog.conf

И правим строку:
#cron.* /var/log/cron.log

На:
cron.* /var/log/cron.log

Применяем настройки:
/etc/init.d/rsyslog restart

После этого все cron задачи начнут записываться в лог-файл:
/var/log/cron.log

пятница, 10 декабря 2010 г.

Как заставить жить вместе apt-get / dpkg и /tmp, смонтированную как noexec?

Очень легко, открываем конфиг:
/etc/apt/apt.conf:

И добавляем там:
DPkg::Pre-Invoke{"mount -o remount,exec /tmp";};
DPkg::Post-Invoke {"mount -o remount /tmp";};

Но, обращаю внимание! /tmp уже до подключения этих команд должна быть смонтирована как noexec и с отдельного раздела!

Источник: http://www.debian-administration.org/articles/57

вторник, 7 декабря 2010 г.

Баг с source пакетом от Apache2 в Debian

Актуальная версия Apache в Debian сейчас lenny8, но исходники Апача упорно качаются от 7го:

# dpkg -l | grep 'apache2 '
ii apache2 2.2.9-10+lenny8 Apache HTTP Server metapackage

# apt-get clean
# apt-get source apache2
Reading package lists... Done
Building dependency tree
Reading state information... Done
Need to get 6546kB of source archives.
Get:1 http://security.debian.org lenny/updates/main apache2 2.2.9-10+lenny7 (dsc) [1682B]
Get:2 http://security.debian.org lenny/updates/main apache2 2.2.9-10+lenny7 (tar) [6397kB]
Get:3 http://security.debian.org lenny/updates/main apache2 2.2.9-10+lenny7 (diff) [147kB]
Fetched 6546kB in 6s (1012kB/s)
gpg: Signature made Sun 28 Mar 2010 10:07:07 PM MSD using DSA key ID AE3BE9AA
gpg: Can't check signature: public key not found
dpkg-source: extracting apache2 in apache2-2.2.9
dpkg-source: info: unpacking apache2_2.2.9.orig.tar.gz
dpkg-source: info: applying apache2_2.2.9-10+lenny7.diff.gz

sources.list (это этом не используется заpinивание пакаджей):
cat /etc/apt/sources.list
deb ftp://mirror.hetzner.de/debian/packages lenny main contrib non-free
deb ftp://mirror.hetzner.de/debian/security lenny/updates main contrib non-free

deb http://ftp.de.debian.org/debian lenny main non-free contrib
deb-src http://ftp.de.debian.org/debian lenny main non-free contrib

deb http://security.debian.org/ lenny/updates main contrib non-free
deb-src http://security.debian.org/ lenny/updates main contrib non-free

Бага / фича?

Update: видимо, какое-то из зеркал тупит, на другой машине не воспроизвелось и стянуло lenny8.

воскресенье, 5 декабря 2010 г.

Очень простое написание демонов на Perl с использованием Proc::Daemon (Debian)

Для сабжа есть прекрасный модуль:
http://search.cpan.org/~deti/Proc-Daemon-0.05/lib/Proc/Daemon.pod

Также для защиты от запуска нескольких экземпляров нам понадобится модуль Proc::PID::File.

Устанавливаем его и модуль Proc::PID::File:
apt-get install -y libproc-daemon-perl libproc-pid-file-perl

Начинаем использовать:
#!/usr/bin/perl

use strict;
use warnings;

use Proc::Daemon;
use Proc::PID::File;

# Daemonize
Proc::Daemon::Init();

# Если демон уже запущен, то просто выходим.
if (Proc::PID::File->running()) {
print "Already running\n";
exit 0;
}

# инициализируем демона

# Enter loop to do work
for (;;) {
# выполняем циклическую задачу
}

Вот и все :)

Предвкушая вопрос, почему проверяем демона на существование после демонизации:
Returns true when the process is already running. Please note that this call must be made *after* daemonisation i.e. subsequent to the call to fork(). If the verify flag was set during the instance creation, the process id is verified, alternatively the flag may be passed directly to this method.

По поводу защиты от запуска нескольких экземпляров - она работает прекрасно, pid файл создается в папке /var/run:
ls -la /var/run/ | grep pl
-rw-rw-rw- 1 root root 6 2010-12-05 21:21 mydaemon.pl.pid

Источник: http://www.perlmonks.org/index.pl?node_id=478839

Последовательность запуска задач в пределах заданного runlevel в Debian

С пониманием, когда запускается какой runlevel, обычно проблем нету, но есть проблемы с пониманием, как задачи упорядочиваются внутри конкретного runlevel. Рассмотрим на примере /etc/rcS.d/. В данной папке есть очень много файлов с именами вида SNNимя, где NN - двухзначное число:
ls
README S05keymap.sh S20module-init-tools S35quota S45mountnfs.sh S70x11-common
S01glibc.sh S07hdparm S25mdadm-raid S36mountall-bootclean.sh S46mountnfs-bootclean.sh S75sudo
S02hostname.sh S08hwclockfirst.sh S26lvm2 S36udev-mtab S47lm-sensors S99stop-bootlogd-single
S02mountkernfs.sh S10checkroot.sh S30checkfs.sh S37mountoverflowtmp S48console-screen.sh
S03udev S11hwclock.sh S30procps S39ifupdown S55bootmisc.sh
S04mountdevsubfs.sh S12mtab.sh S34fuse S40networking S55urandom
S05bootlogd S18ifupdown-clean S35mountall.sh S43portmap S70screen-cleanup

Последовательность тут очень простая: загрузка начинается со скриптов c меньшим номером и переходит к скриптам с большим номером.

Оригинал:
The two-digit number mm is used to determine the order in which to run the scripts: low-numbered links have their scripts run first. For example, the K20 scripts will be executed before the K30 scripts. This is used when a certain service must be started before another. For example, the name server bind might need to be started before the news server inn so that inn can set up its access lists. In this case, the script that starts bind would have a lower number than the script that starts inn so that it runs first:
/etc/rc2.d/S17bind
/etc/rc2.d/S70inn

Есть очень удобный способ просмотра последовательности запуска:
find /etc/rcS.d/ | sort -g
/etc/rcS.d/
/etc/rcS.d/README
/etc/rcS.d/S01glibc.sh
/etc/rcS.d/S02hostname.sh
/etc/rcS.d/S02mountkernfs.sh
/etc/rcS.d/S03udev
/etc/rcS.d/S04mountdevsubfs.sh
/etc/rcS.d/S05bootlogd
/etc/rcS.d/S05keymap.sh
/etc/rcS.d/S07hdparm
/etc/rcS.d/S08hwclockfirst.sh
/etc/rcS.d/S10checkroot.sh
/etc/rcS.d/S11hwclock.sh
/etc/rcS.d/S12mtab.sh
/etc/rcS.d/S18ifupdown-clean
/etc/rcS.d/S20module-init-tools
/etc/rcS.d/S25mdadm-raid
/etc/rcS.d/S26lvm2
/etc/rcS.d/S30checkfs.sh
/etc/rcS.d/S30procps
/etc/rcS.d/S34fuse
/etc/rcS.d/S35mountall.sh
/etc/rcS.d/S35quota
/etc/rcS.d/S36mountall-bootclean.sh
/etc/rcS.d/S36udev-mtab
/etc/rcS.d/S37mountoverflowtmp
/etc/rcS.d/S39ifupdown
/etc/rcS.d/S40networking
/etc/rcS.d/S43portmap
/etc/rcS.d/S45mountnfs.sh
/etc/rcS.d/S46mountnfs-bootclean.sh
/etc/rcS.d/S47lm-sensors
/etc/rcS.d/S48console-screen.sh
/etc/rcS.d/S55bootmisc.sh
/etc/rcS.d/S55urandom
/etc/rcS.d/S70screen-cleanup
/etc/rcS.d/S70x11-common
/etc/rcS.d/S75sudo
/etc/rcS.d/S99stop-bootlogd-single

Источник: http://www.debian.org/doc/debian-policy/ch-opersys.html#s-sysvinit

суббота, 27 ноября 2010 г.

Конвертирование DVD Video в формат flv на Debian 5 Linux

Ствим mencoder: http://phpsuxx.blogspot.com/2009/11/mencoder-debian5-lenny.html

Далее открываем наш DVD в файловом менеджере и идем в папку VIDEO_TS и ищем там файлик с расширением VOB большого размера, например:
ls -la
total 1711056
dr-xr-xr-x 8 nrg staff 272 24 июн 2008 .
drwxr-xr-x 4 nrg staff 136 16 ноя 13:08 ..
-r-xr-xr-x 1 nrg staff 14336 24 июн 2008 VIDEO_TS.BUP
-r-xr-xr-x 1 nrg staff 14336 24 июн 2008 VIDEO_TS.IFO
-r-xr-xr-x 1 nrg staff 294912 24 июн 2008 VIDEO_TS.VOB
-r-xr-xr-x 1 nrg staff 22528 24 июн 2008 VTS_01_0.BUP
-r-xr-xr-x 1 nrg staff 22528 24 июн 2008 VTS_01_0.IFO
-r-xr-xr-x 1 nrg staff 875681792 24 июн 2008 VTS_01_1.VOB

В этом случае это файл VTS_01_1.VOB, он нам и нужен. В общем случае таких файлов может быть несколько штук, но как быть в этом случае - я не знаю, возможно, придется склеивать. Итак, если работаете не на локальной машинке, как я, грузите файлик на сервер для последующей обработки.

Запускаем конвертацию:
mencoder VTS_01_1.VOB -of lavf -ovc lavc -lavcopts vcodec=flv:vbitrate=150 -ofps 25 -oac mp3lame -lameopts abr:br=32 -srate 22050 -vf scale=720 -o outputfile.flv

В процессе конвертации видим вот такие красоты:
MEncoder dev-SVN-r26940 (C) 2000-2008 MPlayer Team
CPU: Intel(R) Core(TM) i7 CPU X 980 @ 3.33GHz (Family: 6, Model: 44, Stepping: 2)
CPUflags: Type: 6 MMX: 1 MMX2: 1 3DNow: 0 3DNow2: 0 SSE: 1 SSE2: 1
Compiled with runtime CPU detection.
success: format: 0 data: 0x0 - 0x3431d800
MPEG-PS file format detected.
VIDEO: MPEG2 720x576 (aspect 2) 25.000 fps 9610.0 kbps (1201.2 kbyte/s)
[V] filefmt:2 fourcc:0x10000002 size:720x576 fps:25.000 ftime:=0.0400
==========================================================================
Opening audio decoder: [dvdpcm] Uncompressed DVD/VOB LPCM audio decoder
AUDIO: 48000 Hz, 2 ch, s16be, 1536.0 kbit/100.00% (ratio: 192000->192000)
Selected audio codec: [dvdpcm] afm: dvdpcm (Uncompressed DVD/VOB LPCM)
==========================================================================
** MUXER_LAVF *****************************************************************
REMEMBER: MEncoder's libavformat muxing is presently broken and can generate
INCORRECT files in the presence of B-frames. Moreover, due to bugs MPlayer
will play these INCORRECT files as if nothing were wrong!
*******************************************************************************
OK, exit.
Opening video filter: [expand osd=1]
Expand: -1 x -1, -1 ; -1, osd: 1, aspect: 0.000000, round: 1
Opening video filter: [scale w=720]
==========================================================================
Opening video decoder: [mpegpes] MPEG 1/2 Video passthrough
VDec: vo config request - 720 x 576 (preferred colorspace: Mpeg PES)
The selected video_out device is incompatible with this codec.
Try appending the scale filter to your filter list,
e.g. -vf spp,scale instead of -vf spp.
VDecoder init failed :(
Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family
Selected video codec: [ffmpeg2] vfm: ffmpeg (FFmpeg MPEG-2)
==========================================================================
MP3 audio selected.
VDec: vo config request - 720 x 576 (preferred colorspace: Planar YV12)
VDec: using Planar YV12 as output csp (no 0)
Movie-Aspect is 1.33:1 - prescaling to correct movie aspect.
[swscaler @ 0xa1e8d0]using unscaled yuv420p -> yuv420p special converter
videocodec: libavcodec (720x576 fourcc=31564c46 [FLV1])
New_Face failed. Maybe the font path is wrong.n 0mb A-V:0.000 [0:0]
Please supply the text font file (~/.mplayer/subfont.ttf).
subtitle font: load_sub_face failed.
New_Face failed. Maybe the font path is wrong.
Please supply the text font file (~/.mplayer/subfont.ttf).
subtitle font: load_sub_face failed.
VIDEO CODEC ID: 22
AUDIO CODEC ID: 15001, TAG: 0
Writing header...

1 duplicate frame(s)!
Pos: 0.9s 22f ( 0%) 0.00fps Trem: 1min 201mb A-V:0.084 [0:7]
Skipping frame!
Pos: 1.2s 32f ( 0%) 0.00fps Trem: 1min 279mb A-V:0.084 [2085:7]
Skipping frame!
Pos: 1.6s 42f ( 0%) 0.00fps Trem: 2min 363mb A-V:0.084 [2099:7]
Skipping frame!
Pos: 720.0s 18002f (99%) 194.66fps Trem: 0min 39mb A-V:0.081 [410:34]
Skipping frame!
Pos: 720.3s 18012f (99%) 194.70fps Trem: 0min 39mb A-V:0.081 [410:34]
Skipping frame!
Pos: 720.7s 18022f (99%) 194.75fps Trem: 0min 38mb A-V:0.081 [410:34]
Skipping frame!
Pos: 721.0s 18032f (99%) 194.81fps Trem: 0min 38mb A-V:0.081 [410:34]
Skipping frame!
Pos: 721.4s 18042f (99%) 194.85fps Trem: 0min 38mb A-V:0.081 [410:34]
Skipping frame!
Pos: 721.8s 18052f (99%) 194.91fps Trem: 0min 38mb A-V:0.081 [410:34]
Skipping frame!
Pos: 722.1s 18062f (99%) 194.96fps Trem: 0min 38mb A-V:0.081 [409:34]
Skipping frame!
Pos: 722.5s 18072f (100%) 195.00fps Trem: 0min 38mb A-V:0.081 [409:34]
Skipping frame!
Pos: 722.8s 18082f (100%) 195.07fps Trem: 0min 39mb A-V:0.081 [409:34]
Skipping frame!
Pos: 723.2s 18092f (100%) 195.13fps Trem: 0min 39mb A-V:0.081 [409:34]
Skipping frame!
Pos: 723.6s 18102f (100%) 195.20fps Trem: 0min 39mb A-V:0.081 [409:34]
Flushing video frames.
Writing index...

Video stream: 409.259 kbit/s (51157 B/s) size: 37015413 bytes 723.560 secs 18102 frames

Audio stream: 34.900 kbit/s (4362 B/s) size: 3152879 bytes 722.730 secs

И в итоге наш огромный 800 мегабайтный файл DVD Video превращается в аккуратные 40 мегабайт flv:
ls -lah outputfile.flv
-rw-r--r-- 1 root root 40M Nov 27 12:54 outputfile.fldvd

Но, к слову, полученный мною файл не читался даже плейером VLC, что странно. Но при заливке на YouTube все хорошо смотрелось и слушалось :)

Источник: http://wiki.soslug.org/wiki/vob_to_flv

пятница, 19 ноября 2010 г.

Установка PHP 5.3 на Debian 5 Lenny рядом с системным PHP 5.2.6

apt-get install -y mysql-client libmysqlclient15-dev

Ставим зависимости:
apt-get install -y libtidy-dev curl libcurl4-openssl-dev libcurl3 libcurl3-gnutls zlib1g zlib1g-dev libxslt1-dev libzip-dev libzip1 libxml2 libsnmp-base libsnmp15 libxml2-dev libsnmp-dev libjpeg62 libjpeg62-dev libpng12-0 libpng12-dev zlib1g zlib1g-dev libfreetype6 libfreetype6-dev libbz2-dev libxpm-dev libmcrypt-dev libmcrypt4 sqlite3 bzip2 build-essential libreadline5-dev libedit-dev libc-client2007b libc-client-dev krb5-kdc openssl

Компилируем:
cd /usr/src
wget http://de.php.net/distributions/php-5.3.3.tar.gz
tar -xf php-5.3.3.tar.gz
cd php-5.3.3
./configure -prefix=/opt/php53 -with-mysql=/usr -with-mysqli=/usr/bin/mysql_config -with-tidy=/usr -with-curl=/usr/bin -with-curlwrappers -with-openssl-dir=/usr -with-zlib-dir=/usr -enable-mbstring -with-xpm-dir=/usr -with-pdo-mysql=/usr -with-xsl=/usr -with-ldap -with-xmlrpc -with-iconv-dir=/usr -with-snmp=/usr -enable-exif -enable-calendar -with-bz2=/usr -with-mcrypt=/usr -with-gd -with-jpeg-dir=/usr -with-png-dir=/usr -with-zlib-dir=/usr -with-freetype-dir=/usr -enable-mbstring -enable-zip -with-pear -with-imap -with-kerberos -with-imap-ssl -with-imagick -with-readline -with-libedit
make install

Проверяем работспособность PHP cli:
/opt/php53/bin/php -v
PHP 5.3.3 (cli) (built: Nov 19 2010 17:49:19)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

Проверяем работу PHP cgi/fcgi:
/opt/php53/bin/php-cgi -v
PHP 5.3.3 (cgi-fcgi) (built: Nov 19 2010 17:49:13)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

Источник: http://www.howtoforge.com/install-php-5.3.0-lighttpd-on-debian-lenny-with-imap-mysql-sqlite3-and-imagemagick-support

четверг, 18 ноября 2010 г.

Как только скачать исходники пакета на Debian, но не распаковывать их?

Вот так:
apt-get source --download-only nginx

Как результат, в папке появится несколько файликов:
total 640
drwxrwsr-x 2 root src 4096 Nov 18 01:58 .
drwxr-xr-x 10 root root 4096 Nov 11 21:15 ..
-rw-r--r-- 1 root src 26140 Aug 17 01:05 nginx_0.7.67-3ubuntu1.debian.tar.gz
-rw-r--r-- 1 root src 2044 Aug 17 01:05 nginx_0.7.67-3ubuntu1.dsc
-rw-r--r-- 1 root src 608462 Jul 22 13:05 nginx_0.7.67.orig.tar.gz

Где nginx_0.7.67.orig.tar.gz - исходники программы (без патчей), nginx_0.7.67-3ubuntu1.dsc - файл описания пакета, nginx_0.7.67-3ubuntu1.debian.tar.gz - патчи Дистрибутива + служебные файлы пакета.

И их можно распаковать вручную, для этого ставим софт:
apt-get install -y dpkg-dev

Распаковываем:
dpkg-source -x nginx_0.7.67-3ubuntu1.dsc

После этого успешно наблюдаем, как накладываются патчики:
gpgv: keyblock resource `/root/.gnupg/trustedkeys.gpg': file open error
gpgv: Signature made Tue Aug 17 00:52:20 2010 MSD using RSA key ID EFC8774C
gpgv: Can't check signature: public key not found
dpkg-source: warning: failed to verify signature on ./nginx_0.7.67-3ubuntu1.dsc
dpkg-source: info: extracting nginx in nginx-0.7.67
dpkg-source: info: unpacking nginx_0.7.67.orig.tar.gz
dpkg-source: info: unpacking nginx_0.7.67-3ubuntu1.debian.tar.gz
dpkg-source: info: applying nginx-upstream-fair.diff
dpkg-source: info: applying dlopen.diff
dpkg-source: info: applying fix_reloading_ipv6.diff

И появляется папочка с распакованными исходниками и наложенными на код патчами:
ls -al
total 644
drwxrwsr-x 3 root src 4096 Nov 18 02:15 .
drwxr-xr-x 10 root root 4096 Nov 11 21:15 ..
drwxr-xr-x 10 root root 4096 Nov 18 02:15 nginx-0.7.67
-rw-r--r-- 1 root src 26140 Aug 17 01:05 nginx_0.7.67-3ubuntu1.debian.tar.gz
-rw-r--r-- 1 root src 2044 Aug 17 01:05 nginx_0.7.67-3ubuntu1.dsc
-rw-r--r-- 1 root src 608462 Jul 22 13:05 nginx_0.7.67.orig.tar.gz

четверг, 11 ноября 2010 г.

Установка MaxMind php5-geoip на Debian

Ставим:
apt-get install -y

Перезапускаем Апача:
/etc/init.d/apache2 restart

Ради теста проверяем путь к базе данных IP:
php -r 'print geoip_db_filename(GEOIP_COUNTRY_EDITION); echo "\n";'
/usr/share/GeoIP/GeoIP.dat

Ради теста получаем страну, где расположен сайт компании FastVPS (ага, все верно, Германия):
php -r 'print geoip_country_code_by_name("85.10.205.196"); echo "\n";'
DE


Вот мануал по обновлению MaxMind базы: http://www.electrictoolbox.com/update-geoip-dat-debian-5/

Источник: http://pecl.php.net/package/geoip

Установка Confluence WIki на Debian 5 Lenny

Что это: http://www.atlassian.com/software/confluence/

Вот официальная инструкция по установке: http://confluence.atlassian.com/display/DOC/Confluence+Installation+Guide

Ставить будем в режиме EAR/WAR + Tomcat. Для начала ставим Tomcat: http://phpsuxx.blogspot.com/2010/11/apache-tomcat-55-debian-5-lenny.html

Следом поставим MySQL http://phpsuxx.blogspot.com/2009/12/mysql-debian5-lenny.html и создадим в ней пользователя и базу confluence с неким паролем.

Обращаю внимание, что MySQL нужно переконфигурировать следующим образом (источник):
vi /etc/mysql/my.cnf

И в блок [mysqld] добавить строку:
default-character-set=utf8

И применить изменения:
/etc/init.d/mysql restart

После этого нужно затюнить Tomcat, иначе настройки безопасности не дадут confluence запуститься:
vi /etc/default/tomcat5.5

И в самом низу добавляем:
TOMCAT5_SECURITY=no

Если же забыть это сделать, то в логах получим такой вот ужас и неработающий confluence:
Nov 11 04:23:56 Debian-50-lenny-64-minimal jsvc.exec[24303]: Nov 11, 2010 4:23:56 AM org.apache.catalina.core.ApplicationContext log#012INFO: HTMLManager: start: Starting web application at '/confluence'
Nov 11 04:23:56 Debian-50-lenny-64-minimal jsvc.exec[24303]: Nov 11, 2010 4:23:56 AM org.apache.catalina.core.ApplicationContext log#012INFO: HTMLManager: start: Starting web application at '/confluence'
Nov 11 04:23:56 Debian-50-lenny-64-minimal jsvc.exec[24303]: 2010-11-11 04:23:56,819 INFO [http-8180-Processor25] [com.atlassian.confluence.lifecycle] contextInitialized Starting Confluence 3.4.1 (build #2030)
Nov 11 04:23:56 Debian-50-lenny-64-minimal jsvc.exec[24303]: 2010-11-11 04:23:56,924 INFO [http-8180-Processor25] [beans.factory.xml.XmlBeanDefinitionReader] loadBeanDefinitions Loading XML bean definitions from class path resource [bootstrapContext.xml]
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: 2010-11-11 04:23:57,380 INFO [http-8180-Processor25] [beans.factory.xml.XmlBeanDefinitionReader] loadBeanDefinitions Loading XML bean definitions from class path resource [setupContext.xml]
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: 2010-11-11 04:23:57,421 INFO [http-8180-Processor25] [beans.factory.xml.XmlBeanDefinitionReader] loadBeanDefinitions Loading XML bean definitions from class path resource [bootstrapCacheContext.xml]
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: 2010-11-11 04:23:57,517 ERROR [http-8180-Processor25] [atlassian.confluence.setup.ConfluenceConfigurationListener] contextInitialized An error was encountered while bootstrapping Confluence (see below): #012Error creating bean with name 'com.atlassian.confluence.plugin.PluginsClassLoaderConfigurationListener' defined in class path resource [bootstrapContext.xml]: Cannot resolve reference to bean 'uberClassLoader' while setting bean property 'delegationClassLoader'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'uberClassLoader' defined in class path resource [bootstrapContext.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.atlassian.confluence.util.ConfluenceUberClassLoader]: Constructor threw exception; nested exception is java.security.AccessControlException: access denied (java.lang.RuntimePermission createClassLoader)#012org.springframework.beans.facto
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: ry.BeanCreationException: Error creating bean with name 'com.atlassian.confluence.plugin.PluginsClassLoaderConfigurationListener' defined in class path resource [bootstrapContext.xml]: Cannot resolve reference to bean 'uberClassLoader' while setting bean property 'delegationClassLoader'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'uberClassLoader' defined in class path resource [bootstrapContext.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.atlassian.confluence.util.ConfluenceUberClassLoader]: Constructor threw exception; nested exception is java.security.AccessControlException: access denied (java.lang.RuntimePermission createClassLoader)#012Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'uberClassLoader' defined in class path resource [bootstrapContext.xml]: Instantiation of bean failed; nested e
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: xception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.atlassian.confluence.util.ConfluenceUberClassLoader]: Constructor threw exception; nested exception is java.security.AccessControlException: access denied (java.lang.RuntimePermission createClassLoader)#012Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.atlassian.confluence.util.ConfluenceUberClassLoader]: Constructor threw exception; nested exception is java.security.AccessControlException: access denied (java.lang.RuntimePermission createClassLoader)#012Caused by: java.security.AccessControlException: access denied (java.lang.RuntimePermission createClassLoader)#012#011at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)#012#011at java.security.AccessController.checkPermission(AccessController.java:546)#012#011at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)#012#011at java.lang.SecurityManager.checkCreateClassLoader(SecurityMa
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: nager.java:594)#012#011at java.lang.ClassLoader.checkCreateClassLoader(ClassLoader.java:178)#012#011at java.lang.ClassLoader.(ClassLoader.java:226)#012#011at com.atlassian.confluence.util.ConfluenceUberClassLoader.(ConfluenceUberClassLoader.java:20)#012#011at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)#012#011at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)#012#011at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)#012#011at java.lang.reflect.Constructor.newInstance(Constructor.java:513)#012#011at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:85)#012#011at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:61)#012#011at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:757)#012#011at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanIns
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: tance(AbstractAutowireCapableBeanFactory.java:722)#012#011at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:386)#012#011at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:249)#012#011at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:155)#012#011at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:246)#012#011at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)#012#011at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:267)#012#011at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:110)#012#011at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBea
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: nFactory.java:1100)#012#011at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:862)#012#011at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:423)#012#011at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:249)#012#011at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:155)#012#011at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:246)#012#011at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)#012#011at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:248)#012#011at org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:820)#012#011at org.springframework.context.support.
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: AbstractApplicationContext.registerListeners(AbstractApplicationContext.java:597)#012#011at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:349)#012#011at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:122)#012#011at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:76)#012#011at com.atlassian.confluence.setup.ConfluenceClassPathXmlApplicationContext.(ConfluenceClassPathXmlApplicationContext.java:26)#012#011at com.atlassian.confluence.setup.ConfluenceConfigurationListener.initialiseBootstrapContext(ConfluenceConfigurationListener.java:75)#012#011at com.atlassian.confluence.setup.ConfluenceConfigurationListener.contextInitialized(ConfluenceConfigurationListener.java:40)#012#011at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3764)#012#011at org.apache.catalina.core.StandardContext.start(StandardContext.java:4216)#012#011at org.apache.catalina.manager.M
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: anagerServlet.start(ManagerServlet.java:1173)#012#011at org.apache.catalina.manager.HTMLManagerServlet.start(HTMLManagerServlet.java:549)#012#011at org.apache.catalina.manager.HTMLManagerServlet.doGet(HTMLManagerServlet.java:105)#012#011at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)#012#011at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)#012#011at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)#012#011at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)#012#011at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)#012#011at java.lang.reflect.Method.invoke(Method.java:597)#012#011at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:244)#012#011at java.security.AccessController.doPrivileged(Native Method)#012#011at javax.security.auth.Subject.doAsPrivileged(Subject.java:517)#012#011at org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:276)#012#011at org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:162)#012#011at org.apache.catalina
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: .core.Ap
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: plicationFilterChain.internalDoFilter(ApplicationFilterChain.java:262)#012#011at org.apache.catalina.core.ApplicationFilterChain.access$0(ApplicationFilterChain.java:192)#012#011at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:171)#012#011at java.security.AccessController.doPrivileged(Native Method)#012#011at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:167)#012#011at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)#012#011at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)#012#011at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)#012#011at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)#012#011at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)#012#011at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)#012#011at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)#012#011at org.apach
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: e.coyote.http11.Http11Processor.process(Http11Processor.java:874)#012#011at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)#012#011at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)#012#011at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)#012#011at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)#012#011at java.lang.Thread.run(Thread.java:619)
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: 2010-11-11 04:23:57,525 WARN [http-8180-Processor25] [atlassian.config.util.BootstrapUtils] getBootstrapManager Attempting to retrieve bootstrap manager before it is set up: com.atlassian.config.bootstrap.BootstrappedContextLoaderListener.canInitialiseContainer(BootstrappedContextLoaderListener.java:26)
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: 2010-11-11 04:23:57,529 ERROR [http-8180-Processor25] [ContainerBase.[Catalina].[localhost].[/confluence]] listenerStart Exception sending context initialized event to listener instance of class com.atlassian.confluence.languages.ReloadBundlesContextListener#012java.security.AccessControlException: access denied (java.util.PropertyPermission confluence.i18n.reloadbundles read)#012#011at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)#012#011at java.security.AccessController.checkPermission(AccessController.java:546)#012#011at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)#012#011at java.lang.SecurityManager.checkPropertyAccess(SecurityManager.java:1285)#012#011at java.lang.System.getProperty(System.java:650)#012#011at java.lang.Boolean.getBoolean(Boolean.java:221)#012#011at com.atlassian.confluence.languages.ReloadBundlesContextListener.contextInitialized(ReloadBundlesContextListener.java:22)#012#011at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3764)#012#011at org.apache.catali
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: na.core.StandardContext.start(StandardContext.java:4216)#012#011at org.apache.catalina.manager.ManagerServlet.start(ManagerServlet.java:1173)#012#011at org.apache.catalina.manager.HTMLManagerServlet.start(HTMLManagerServlet.java:549)#012#011at org.apache.catalina.manager.HTMLManagerServlet.doGet(HTMLManagerServlet.java:105)#012#011at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)#012#011at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)#012#011at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)#012#011at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)#012#011at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)#012#011at java.lang.reflect.Method.invoke(Method.java:597)#012#011at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:244)#012#011at java.security.AccessController.doPrivileged(Native Method)#012#011at javax.security.auth.Subject.doAsPrivileged(Subject.java:517)#012#011at org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:276)#012#011at org.apache.c
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: atalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:162)#012#011at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:262)#012#011at org.apache.catalina.core.ApplicationFilterChain.access$0(ApplicationFilterChain.java:192)#012#011at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:171)#012#011at java.security.AccessController.doPrivileged(Native Method)#012#011at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:167)#012#011at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)#012#011at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)#012#011at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)#012#011at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)#012#011at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)#012#011at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: 108)#012#011at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)#012#011at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)#012#011at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)#012#011at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)#012#011at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)#012#011at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)#012#011at java.lang.Thread.run(Thread.java:619)
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: 2010-11-11 04:23:57,530 WARN [http-8180-Processor25] [atlassian.config.util.BootstrapUtils] getBootstrapManager Attempting to retrieve bootstrap manager before it is set up: com.atlassian.confluence.setup.ValidLicenseContextListener.shouldRunListener(ValidLicenseContextListener.java:48)
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: 2010-11-11 04:23:57,530 WARN [http-8180-Processor25] [atlassian.config.util.BootstrapUtils] getBootstrapManager Attempting to retrieve bootstrap manager before it is set up: com.atlassian.confluence.upgrade.UpgradeLauncherServletContextListener.contextInitialized(UpgradeLauncherServletContextListener.java:22)
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: Nov 11, 2010 4:23:57 AM org.apache.catalina.core.StandardContext start#012SEVERE: Error listenerStart
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: Nov 11, 2010 4:23:57 AM org.apache.catalina.core.StandardContext start#012SEVERE: Error listenerStart
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: Nov 11, 2010 4:23:57 AM org.apache.catalina.core.StandardContext start#012SEVERE: Context [/confluence] startup failed due to previous errors
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: Nov 11, 2010 4:23:57 AM org.apache.catalina.core.StandardContext start#012SEVERE: Context [/confluence] startup failed due to previous errors
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: 2010-11-11 04:23:57,532 INFO [http-8180-Processor25] [com.atlassian.confluence.lifecycle] contextDestroyed Stopping Confluence
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: Nov 11, 2010 4:23:57 AM org.apache.catalina.core.ApplicationContext log#012INFO: HTMLManager: list: Listing contexts for virtual host 'localhost'
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: Nov 11, 2010 4:23:57 AM org.apache.catalina.core.ApplicationContext log#012INFO: HTMLManager: list: Listing contexts for virtual host 'localhost'

Далее увеличиваем размер используемой памяти с 128 стандартных мегабайт до гигабайта (или как минимум 256 мегабайт):
vi /etc/default/tomcat5.5

JAVA_OPTS="-Djava.awt.headless=true -Xmx1024M -XX:MaxPermSize=192m"

Если же оставить стандартные 128, то confluence будет стопорится через раз с ошибкой "java.lang.OutOfMemoryError: Java heap space". Аналогично (офдокументация) с XX:MaxPermSize, у меня без указания явного выдавалась ошибка "jsvc.exec[27023]: Exception in thread "http-8180-Processor25" java.lang.OutOfMemoryError: PermGen space".

Теперь нужно скачать само приложение в формате EAR/WAR, открываем страницу http://www.atlassian.com/software/confluence/ConfluenceDownloadCenter.jspa, там выбираем Linux и щелкаем "Show all", из всего появившегося многообразия нам требуется "Confluence 3.4.1 - EAR/WAR (TAR.GZ Archive)", в данный момент прямая ссылка такая:
http://www.atlassian.com/software/confluence/downloads/binary/confluence-3.4.5.tar.gz

Скачиваем:
mkdir /opt/confluence_distrib
cd /opt/confluence_distrib
wget http://www.atlassian.com/software/confluence/downloads/binary/confluence-3.4.5.tar.gz
tar -xf confluence-3.4.5.tar.gz
cd confluence-3.4.5

Далее переходим к конфигурации:
vi /opt/confluence_distrib/confluence-3.4.5/confluence/WEB-INF/classes/confluence-init.properties

И добавляем там в самый низ:
confluence.home=/opt/confluence/

В этой папке confluence будет хранить все свои данные, не нужно указывать в ее качестве папку с дистрибутивом. Создаем ее:
mkdir /opt/confluence

Даем tomcat`у права на запись в нее:
chown tomcat55:root /opt/confluence

Теперь confluence нужно подключить к Tomcat, открываем конфиг:
vi /etc/tomcat5.5/Catalina/localhost/confluence.xml

И добавляем там следующее:
<Context path="/confluence" docBase="/opt/confluence_distrib/confluence-3.4.5/confluence" debug="0" reloadable="true">
</Context>

Если же Вы хотите, чтобы wiki была доступа по /, то прочтите следующее:
To run Confluence without a context path, change the path in the Context tag to an empty string (""). If not using a context path, your config will need to be saved as ROOT.xml rather than confluence.xml.

In Tomcat, a context path name follows the name of its xml file (except for ROOT.xml where no context path is used. Hence if you wish to change the context path to a different name, change both the context path and the name of the xml file. eg. "/wiki" context path should be saved in file wiki.xml.

То есть, если хотим, чтобы Confluence был доступен по /, то открываем файл:
vi /etc/tomcat5.5/Catalina/localhost/ROOT.xml

И добавляем в него:
<Context path="" docBase="/opt/confluence_distrib/confluence-3.4.5/confluence" debug="0" reloadable="true">
</Context>

Но при этом отвалится "Browse" - "Confluence Admin", это происходит из-за конфликта URL "/admin" админ-интерфейса Confluence c админкой TomCat:
HTTP Status 404 - /admin/console.action
type Status report
message /admin/console.action
description The requested resource (/admin/console.action) is not available.
Apache Tomcat/5.5

Пофиксить это можно отключением admin-интерфейса Tomcat:
mv /etc/tomcat5.5/Catalina/localhost/admin.xml /etc/tomcat5.5/Catalina/localhost/admin.old
/etc/init.d/tomcat5.5 restart

Открываем отладочный лог Tomcat:
tail -f /var/log/daemon.log

Перезапускаем Tomcat для применения настроек:
/etc/init.d/tomcat5.5 restart

Все, теперь заходим по адресу:
http://xx.xx.xx.xx:8180/confluence/

И там нас приветствует инсталлятор confluence и готовимся ввести регистрационные ключи. Далее выбираем "Production Install", External Database -> MySQL, далее выбираем тип соединения "Direct JDBC Connection". У нас язык русский, так что нам грозит использование UTF8, не забываем об этом при конфигурировании СУБД (также вписываем данные от ранее созданной базы):

Driver Class Name:
com.mysql.jdbc.Driver

Database URL:
jdbc:mysql://localhost/confluence?autoReconnect=true&sessionVariables=storage_engine%3DInnoDB&useUnicode=true&characterEncoding=utf8

После этого начинаем загрузку базы, далее выбираем "Example Site", чтобы забить вики тестовым контентом. Далее вписываем свои данные и начинаем разбираться во всей этой байде :)

Далее нужно немного разобраться с настройками. Указываем доменное имя: Browse, Confluence Admin, General Configuration, Edit и в поле "Server Base Url" вписываем доменное имя нашего сервера вместо IP.

Настройка почты. Browse, Confluence Admin, General Configuration, Mail Servers, Add a new SMTP mail server, SMTP Host Address: 127.0.0.1, from wiki@yourdomain.ru, Create.

Установка Apache Tomcat 5.5 в Debian 5 Lenny

Ставим Java

Итак, ставим Java: http://phpsuxx.blogspot.com/2009/12/java-6-jre-debian-5-lenny.html

Ставим Tomcat

Ставим сам Tomcat и админку для управления им:
apt-get install -y tomcat5.5 tomcat5.5-admin

Итого, я получил вот что:
Not creating home directory `/usr/share/tomcat5.5'.
no JDK found - please set JAVA_HOME failed!
invoke-rc.d: initscript tomcat5.5, action "start" failed.
dpkg: error processing tomcat5.5 (--configure):
subprocess post-installation script returned error exit status 1
dpkg: dependency problems prevent configuration of tomcat5.5-webapps:
tomcat5.5-webapps depends on tomcat5.5 (>= 5.5.26-5); however:
Package tomcat5.5 is not configured yet.
dpkg: error processing tomcat5.5-webapps (--configure):
dependency problems - leaving unconfigured
Errors were encountered while processing:
tomcat5.5
tomcat5.5-webapps
E: Sub-process /usr/bin/dpkg returned an error code (1)


Также руками tomcat не стартует:
/etc/init.d/tomcat5.5 start
no JDK found - please set JAVA_HOME failed!

Чтобы от этого избавится (спасибо ребятам) открываем конфиг:
vi /etc/default/tomcat5.5

И раскомментиурем там строчку:
JAVA_HOME=/usr/lib/jvm/java-6-sun

После этого tomcat запустится успешно:
/etc/init.d/tomcat5.5 start
Starting Tomcat servlet engine: tomcat5.5.

Убеждаемся, что все заработало корректно:
netstat -lnpt | grep jsvc
tcp 0 0 0.0.0.0:8009 0.0.0.0:* LISTEN 23177/jsvc
tcp 0 0 0.0.0.0:8180 0.0.0.0:* LISTEN 23177/jsvc

Что же это за интересные порты? Согласно файлу /etc/tomcat5.5/server.xml, на 8009 порту слушает некий "AJP 1.3 Connector", предназначение которого мне пока неведомо. А на 8180м порту слушает близкий нам "non-SSL HTTP/1.1 Connector", к которому можно достучаться браузером :)

После этого разрешаем проблему apt (теперь он сможет-таки сконфигурировать пакет):
apt-get install -f

Теперь просто попробуем открыть в браузере страницу:
http://xx.xx.xx.xx:8180/manager/html

В ответ должен появится запрос пароля. Теперь нам нужно создать пользователя, под которым мы будем входить.

Далее создаем пользователей с правами manager и admin:
vi /var/lib/tomcat5.5/conf/tomcat-users.xml

Там внутрь блока tomcat-users добавляем пользователя-админа и пользователя-менеджера:
<user username="mymanager" password="mypassword" roles="manager"/>
<user username="myadmin" password="mypassword" roles="admin"/>

Перезапускаем tomcat для применения изменений:
/etc/init.d/tomcat5.5 restart

Теперь можем войти админом (позволяет управлять пользователями и прочими низкоуровневыми настройками) по адресу:
http://xx.xx.xx.xx:8180/admin

Или менеджером (позволяет управлять приложениями):
http://xx.xx.xx..xx:8180/manager

По материалам: http://www.debianadmin.com/how-to-setup-apache-tomcat-55-on-debian-etch.html

воскресенье, 7 ноября 2010 г.

/etc/mysql/debian-start[xxx]: WARNING: mysql.user contains 2 root accounts without password!

Если Вы нашли нечто подобное в Debian, в daemon.log:
cat /var/log/daemon.log | grep mysql | grep WARNING

То все плохо :) То позаботьтесь о том, чтобы поставить всем своим рут пользователям пароли.

пятница, 5 ноября 2010 г.

Установка 64 битного ядра от Fedora 14 (2.6.35) на Debian 6 Squeeze

Пожалуйста, только не спрашивайте зачем это пригодилось :) Надо и все :)

Итак, для начала нам нужно найти собранный пакет от Fedora, поиски мы начнем со страницы: https://admin.fedoraproject.org/pkgdb/acls/name/kernel, там будет ссылка "Build Status", щелкаем по ней и попадаем на страницу http://koji.fedoraproject.org/koji/packageinfo?packageID=8, там находим нужное нам ядро по суффиксу (fc14) и версии kernel-2.6.35.xxx. В моем случае, ядро оказалось версии: kernel-2.6.35.6-50.fc14. Далее после щелчка по нужной версии ядра мы оказываемся на странице http://koji.fedoraproject.org/koji/buildinfo?buildID=202926, прокручиваем ее вниз до блока RPMS и ищем там "x86_64". Рядом с нужным нам ядром kernel-2.6.35.6-50.fc14.x86_64.rpm будет ссылка download, копируем ее и возвращаемся на машину с Дебияном.

cd /usr/src
wget http://kojipkgs.fedoraproject.org/packages/kernel/2.6.35.6/50.fc14/x86_64/kernel-2.6.35.6-50.fc14.x86_64.rpm

Теперь как вариант попробуем поставить rpm и воткнуть ядро:
apt-get install -y rpm

Для тестов нам нужен rpm новее версии 4.8, старый rpm пакетов от fc14 не поймет:
rpm --version
RPM version 4.8.1

Пробуем поставить:
rpm -Uhv kernel-2.6.35.6-50.fc14.x86_64.rpm
rpm: RPM should not be used directly install RPM packages, use Alien instead!
rpm: However assuming you know what you are doing...
error: Failed dependencies:
fileutils is needed by kernel-2.6.35.6-50.fc14.x86_64
module-init-tools is needed by kernel-2.6.35.6-50.fc14.x86_64
initscripts >= 8.11.1-1 is needed by kernel-2.6.35.6-50.fc14.x86_64
grubby >= 7.0.10-1 is needed by kernel-2.6.35.6-50.fc14.x86_64
dracut >= 001-7 is needed by kernel-2.6.35.6-50.fc14.x86_64
linux-firmware >= 20100806-2 is needed by kernel-2.6.35.6-50.fc14.x86_64
/sbin/new-kernel-pkg is needed by kernel-2.6.35.6-50.fc14.x86_64
/bin/sh is needed by kernel-2.6.35.6-50.fc14.x86_64

Ставим с отключением проверки зависимосей:
rpm -Uhv --nodeps kernel-2.6.35.6-50.fc14.x86_64.rpm
rpm: RPM should not be used directly install RPM packages, use Alien instead!
rpm: However assuming you know what you are doing...
Preparing... ########################################### [100%]
1:kernel ########################################### [100%]
[: 5: unknown: unexpected operator

Итак, вуаля, бинарик и конфиг ядра от Fedora упали в /boot:
test:/usr/src# ls -al /boot/vmlinuz-2.6.35.6-50.fc14.x86_64
-rwxr-xr-x 1 root root 3.7M Nov 2 05:21 /boot/vmlinuz-2.6.35.6-50.fc14.x86_64
test:/usr/src# ls -al /boot/config-2.6.35.6-50.fc14.x86_64
-rw-r--r-- 1 root root 108K Nov 2 05:21 /boot/config-2.6.35.6-50.fc14.x86_64

Но initrd не был сгенерирован и ядро не было добавлено в /boot/grub/grub.cfg.

Пробуем собрать initrd для всех ядер пачкой:
depmod -a 2.6.35.6-50.fc14.x86_64 # вроде, это не требуется
update-initramfs -v -u -k 2.6.35.6-50.fc14.x86_64 -t

После этого у нас появляется увесистый initrd:
ls -la /boot/initrd.img-2.6.35.6-50.fc14.x86_64
-rw-r--r-- 1 root root 9.5M Nov 5 17:34 /boot/initrd.img-2.6.35.6-50.fc14.x86_64

Теперь обновляем конфиг grub2:
update-grub

Теперь выбираем Fedora ядро стандартным:
vi /boot/grub/grub.cfg

Это делается директивой:
set default="4"

После этого ребутаем машину в надежде, что нигде не накосячили:
shutdown -r now

Мда, у меня не поднялось, жду квм :) Кстати, чуть выше rpm нам намекал, что там ставить не нужно и чтобы мы юзали alien.

Вариант для Lenny

Ставим на Lenny RPM 4.8: так

Вариант распаковки src rpm:
cd /usr/src
mkdir fedorakernel
cd fedorakernel
wget http://kojipkgs.fedoraproject.org/packages/kernel/2.6.35.6/50.fc14/src/kernel-2.6.35.6-50.fc14.src.rpm
/opt/rpm48/bin/rpm2cpio kernel-2.6.35.6-50.fc14.src.rpm | cpio -idmuv --no-absolute-filenames

воскресенье, 31 октября 2010 г.

Переключение Apache на Debian 5 Lenny в режим worker MPM

Итак, имеем Апача, работающего в режиме prefork с подключенным php5 как модулем Апача. Вариант миграции на Apache MPM worker только один - отказываться от php5 как модуля Апача и переходить на php5 как FastCGI (посредством mod_fcgid). Я рассмотрю лишь подключение Apache Worker, с mod_fcgid Вам придется разобраться самостоятельно.

Итак, имеем следующую конфигурацию Апача:
dpkg -l | grep prefork
ii apache2-mpm-prefork 2.2.9-10+lenny8 Apache HTTP Server - traditional non-threaded model

Итак, пробуем ставить Apache worker:
apt-get install apache2-mpm-worker

В ответ APT выдаст предупреждение о том, что в связи с конфликтом нужно удалить следующие пакеты: apache2-mpm-prefork и libapache2-mod-php5. Соглашаемся с этим. После этого APT сделает попытку перезапустить Апача, но, скорее всего, ему это не удастся, так как все было настроено для php5 как модуля Апача и в конфигурации много директив php_admin_value, которые уже некем обрабатывать (модуль-то Апача мы стерли):
Syntax error on line 7 of /etc/apache2/conf.d/phpmyadmin.conf:
Invalid command 'php_admin_value', perhaps misspelled or defined by a module not included in the server configuration
failed!

Удаляем эти конфиги / директивы и повторяем попытку перезапуска Апача:
/etc/init.d/apache2 restart

Все, после этого все должно заработать как нужно :)

Убеждаемся, что мы работаем на Worker MPM:
apache2ctl -M 2>&1| grep mpm
mpm_worker_module (static)

воскресенье, 17 октября 2010 г.

chroot: cannot run command `/bin/bash': No such file or directory

С такой проблемой столкнуться очень легко - достаточно удалить пару библиотек внутри системы или VPS. Бороться с напастью мы будем из Debian LiveCD.

Ставим спецовый баш, который не имеет зависимостей - он слинкован статически (и удаленные либы ему безразличны):
apt-get install -y bash-static

Данный пакетик несет в себе множество файлов:
dpkg -L bash-static
/.
/bin
/bin/bash-static
/usr
/usr/share
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/bash-static.1.gz
/usr/share/doc
/usr/share/doc/bash-static
/usr/share/doc/bash-static/copyright
/usr/share/doc/bash-static/changelog.Debian.gz

Но нам нужен лишь один - /bin/bash-static.

Итак, допустим сломанная система смонтирована как /mnt. Тогда нужно сделать следующее:
cp /bin/bash-static /mnt/bin
chroot /mnt /bin/bash-static

Вуаяля, чрут сработал :)