User Tools

Site Tools


Sidebar


Tags Cloud
start

Last updates

Патч для oops-1.5.23, решающий проблему компиляции под CentOS

oops-1.5.24-pthread-rwlock.patch
diff -Nru oops-1.5.23.orig/src/lib/rwlock/rwlock.c oops-1.5.23/src/lib/rwlock/rwlock.c
--- oops-1.5.23.orig/src/lib/rwlock/rwlock.c    2000-11-29 19:03:35.000000000 +0200
+++ oops-1.5.23/src/lib/rwlock/rwlock.c 2006-09-06 00:30:36.000000000 +0300
@@ -53,6 +53,8 @@
 #include <pthread.h>
 #include "rwlock.h"
 
+#if defined(OOPS_IMPLEMENT_RWLOCK)
+
 /* maximum number of times a read lock may be obtained */
 #define        MAX_READ_LOCKS          (INT_MAX - 1)
 
@@ -375,4 +377,6 @@
        return(0);
 }
 
+#endif /* defined(OOPS_IMPLEMENT_RWLOCK) */
+
 #endif /* _THREAD_SAFE || _PTHREADS || _REENTRANT */
diff -Nru oops-1.5.23.orig/src/lib/rwlock/rwlock.h oops-1.5.23/src/lib/rwlock/rwlock.h
--- oops-1.5.23.orig/src/lib/rwlock/rwlock.h    2003-10-06 17:15:40.000000000 +0300
+++ oops-1.5.23/src/lib/rwlock/rwlock.h 2006-09-06 00:29:46.000000000 +0300
@@ -53,6 +53,7 @@
 
 #if    !defined(PTHREAD_RWLOCK_INITIALIZER)
 #define        PTHREAD_RWLOCK_INITIALIZER      NULL
+#define OOPS_IMPLEMENT_RWLOCK 1
 
 struct pthread_rwlock {
        pthread_mutex_t lock;           /* monitor lock */
2010/04/29 10:40

Добавление вхоста в apache+nginx

FIXME Переписать этот ужас.

Только Debian. Пользователь, которому принадлежат сайты, должен быть предварительно создан.

#!/bin/bash

function read_domain
{
    if [[ -z $domain ]]; then
        echo -n "Provide domain to add: "
        read domain
    fi
}

function read_user
{
    if [[ -z $user ]]; then
        echo -n "Provide domain's owner login: "
        read user
    fi
}

function read_logs
{
    if [[ -z $logs ]]; then
        echo -n "Enable access/error logs? [y/N]: "
        read logs
    fi

    case $logs in
        y*|Y*)
            LOGS=1
        ;;
        *)
            unset $logs
        ;;
    esac
}

function init_vars
{
    #### BASE SETTINGS ####
    CLIENTS_HOME="/home/clients"
    DOMAIN_DIR="/home/clients/$user/domains/$domain"
    DOCROOT="$DOMAIN_DIR/html"
    LOGSDIR="$DOMAIN_DIR/logs"
    TMPCONFDIR="/opt/scripts/www_configs"

    # can be set as IP='111.111.111.111'
    IP=`ip route get 8.8.8.8 | head -1 | awk '{print $NF}'`

    if [[ ! -d $TMPCONFDIR ]]; then
        mkdir -p $TMPCONFDIR
    fi

    if [[ -z `id $user` ]]; then
        echo "You need to create user '$user' first!"
        exit 1
    fi

    if [[ ! -d $DOCROOT ]]; then
        mkdir -p $DOCROOT
        chown -R $user:$user $DOCROOT
    fi

		if [[ ! -d $LOGSDIR ]]; then
			mkdir -p $LOGSDIR
		fi
}

function generate_apache_vhost
{
    if [[ $logs ]]; then
        local log_block="LogLevel warn
    ErrorLog $LOGSDIR/apache_error_log
    CustomLog $LOGSDIR/apache_access_log combined"
    fi

    if [[ $domain ]] && [[ $user ]]; then

        cat > $TMPCONFDIR/apache.$domain << EOF
<VirtualHost 127.0.0.1:82>
    <IfModule mpm_itk_module>
        AssignUserId $user $user
    </IfModule>

    ServerName $domain
    ServerAlias www.$domain

    ServerAdmin $user@$domain
    DocumentRoot $DOCROOT
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>

    <Directory $DOCROOT>
        Options -Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>

    ScriptAlias /cgi-bin/ $DOCROOT/cgi-bin/
    <Directory "$DOCROOT/cgi-bin/">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>

    $log_block
</VirtualHost>

EOF
    fi
}

function generate_nginx_vhost
{
    if [[ $logs ]]; then
        local log_block="access_log $LOGSDIR/nginx_access_log;
      error_log $LOGSDIR/nginx_error_log;"
    fi

    if [[ $domain ]] && [[ $user ]]; then
        cat > $TMPCONFDIR/nginx.$domain << EOF
  server {
      listen      80;
      server_name $domain www.$domain;
      root $DOCROOT;
      location / {
          proxy_pass         http://127.0.0.1:82/;
          proxy_redirect     off;
          proxy_set_header   Host             \$host;
          proxy_set_header   X-Real-IP        \$remote_addr;
          proxy_set_header   X-Forwarded-For  \$proxy_add_x_forwarded_for;
          proxy_max_temp_file_size  0;
          client_max_body_size       10m;
          client_body_buffer_size    128k;
          proxy_connect_timeout      90;
          proxy_send_timeout         90;
          proxy_read_timeout         90;
          proxy_buffer_size          4k;
          proxy_buffers              4 32k;
          proxy_busy_buffers_size    64k;
          proxy_temp_file_write_size 64k;
      }

      location ~* ^.+.(jpg|gif|png|avi|mpg|zip|exe)$ {
        root $DOCROOT;
      }

      $log_block
   }
EOF
    fi
}

function generate_named_vhost
{
	serial=`/bin/date +"%Y%m%d%k"`

	cat >$TMPCONFDIR/named.$domain<< EOF
\$TTL 10800
@ IN SOA ns1.$domain. root.$domain. (
    $serial     ; serial
    10800       ; refresh
    3600        ; retry
    604800      ; expire
    3600 )      ; minimum
; NS
    IN  NS  ns1.$domain.
    IN  NS  ns2.$domain.
; MX
    IN  MX  10  mx1.$domain.
; records
ns1         IN  A   $IP
ns2         IN  A   $IP
mx1         IN  A   $IP
www         IN  A   $IP
$domain.    IN  A   $IP

EOF
}

function enable_apache_vhost
{
    if [[ -f "/etc/apache2/sites-available/${domain}.conf" ]]; then
        echo "Domain $domain already exists in /etc/apache2/sites-available/${domain}.conf"
        exit 1
    else
        cp $TMPCONFDIR/apache.$domain /etc/apache2/sites-available/${domain}.conf
        a2ensite $domain
        if [[ -z `apache2ctl configtest` ]]; then
            /etc/init.d/apache2 reload
            echo "$domain enabled!"
        else
            echo "Errors detected, please solve it manually!"
            exit 1
        fi

    fi
}

function enable_nginx_vhost
{
    if [[ -f "/etc/nginx/sites-available/$domain" ]]; then
        echo "Domain $domain already exists in /etc/nginx/sites-available/$domain"
        exit 1
    else
        cp $TMPCONFDIR/nginx.$domain /etc/nginx/sites-available/$domain
        ln -s /etc/nginx/sites-available/$domain /etc/nginx/sites-enabled/$domain
        if [[ -z `nginx -t` ]]; then
            /etc/init.d/nginx reload
            echo "$domain enabled!"
        else
            echo "Errors detected, please solve it manually!"
            exit 1
        fi

    fi
}

function enable_named_vhost
{
	[[ -d "/etc/bind/zones" ]] || mkdir -p "/etc/bind/zones"

	if [[ -f "/etc/bind/zones/$domain.conf" ]]; then
		echo "Zone $domain already exists in /etc/bind/zones/$domain.conf"
		exit 1
  else
		cp $TMPCONFDIR/named.$domain /etc/bind/zones/$domain.conf
		
		cat >>/etc/bind/named.conf.local<< EOF
zone "$domain" {
    type master;
    file "/etc/bind/zones/$domain.conf";
};

EOF

		if [[ -z `/usr/sbin/named-checkconf` && -z `/usr/sbin/named-checkzone -q $domain /etc/bind/zones/$domain.conf` ]] ; then
			/usr/sbin/rndc reload
			echo "bind9: $domain enabled"
		else
			echo "Errors detected, please solve it manually!"
			exit 1
		fi
	fi
}

function enable_logrotate
{
    if [[ ! -d "/etc/logrotate.d/vhosts" ]]; then
        mkdir -p /etc/logrotate.d/vhosts
    fi

        cat > $TMPCONFDIR/logrotate.$domain << EOF
$LOGSDIR/*_log {
    daily
    missingok
    rotate 52
    compress
    delaycompress
    notifempty
    create 0644 root root
    sharedscripts
    prerotate
        if [ -d /etc/logrotate.d/httpd-prerotate ]; then \\
            run-parts /etc/logrotate.d/httpd-prerotate; \\
        fi; \\
    endscript
    postrotate
        /etc/init.d/apache2 reload > /dev/null
        [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
    endscript
}
EOF

    if [[ $logs ]]; then
        # install logrotate
        if [[ -f "/etc/logrotate.d/vhosts/$domain" ]]; then
            echo "Domain $domain already exists in /etc/logrotate.d/vhosts/$domain"
            exit 1
        else
            cp $TMPCONFDIR/logrotate.$domain /etc/logrotate.d/vhosts/$domain
        fi
    fi
}


read_domain
read_user
read_logs

init_vars

generate_apache_vhost
generate_nginx_vhost
generate_named_vhost

enable_apache_vhost
enable_nginx_vhost
enable_named_vhost

enable_logrotate

Простейший скрипт для добавления виртхоста и днс-записи на сервер с Debian, если отсутствует панель управления. (2009 год, возможно устарело)

Необходимо предварительно создать пользователя http

#!/bin/bash

echo -n "Введите имя сайта: "
read domain

# СОЗДАНИЕ ДИРЕКТОРИИ
mkdir -p /home/http/domains/$domain/html/cgi-bin
chown -R http:http /home/http/domains/$domain/html

# СОЗДАНИЕ КОНФИГА ВИРТХОСТА ДЛЯ АПАЧА
cat >/etc/apache2/sites-available/$domain << EOF
<VirtualHost *:80>
    ServerName $domain
    ServerAlias www.$domain
    DocumentRoot /home/http/domains/$domain/html
    ErrorLog /dev/null

    ScriptAlias /cgi-bin/ "/home/http/domains/$domain/html/cgi-bin/"

    <Directory "/cgi-bin/">
        AllowOverride None
        Options None +FollowSymLinks ExecCGI
        DirectoryIndex index.pl
    </Directory>

    <Directory />
        Options All -Indexes
        AllowOverride All
    </Directory>
</VirtualHost>
EOF

# ВКЛЮЧЕНИЕ ВИРТХОСТА
/usr/sbin/a2ensite $domain
/etc/init.d/apache2 reload

# СОЗДАНИЕ ФАЙЛА ДНС-ЗОНЫ
serial=`/bin/date +"%Y%m%d%k"`
cat >/etc/bind/zones/$domain<< EOF
\$TTL 10800
@ IN SOA ns1.$domain. root.$domain. (
    $serial     ; serial
    10800       ; refresh
    3600        ; retry
    604800      ; expire
    3600 )      ; minimum
; NS
    IN  NS  ns1.$domain.
    IN  NS  ns2.$domain.
; MX
    IN  MX  10  mx1.$domain.
; records
ns1         IN  A   95.169.190.217
ns2         IN  A   95.169.191.217
www         IN  A   95.169.191.217
$domain.    IN  A   95.169.191.217
EOF

# СОЗДАНИЕ ЗАПИСИ О ДНС-ЗОНЕ
cat >>/etc/bind/named.conf.local<< EOF
zone "$domain" {
    type master;
    file "/etc/bind/zones/$domain";
};
EOF

# ВКЛЮЧЕНИЕ ЗОНЫ
/usr/sbin/rndc reload
2009/12/04 15:19

Скрипт автоподъема apache

Костыль проверяет количество чайлдов апача, если это количество меньше значения директивы MinSpareServers, то прибивает все процессы вебсервера через kill -9, чистит семафоры и стартует апач. Добавить в крон на каждую минуту.

* * * * * /opt/scripts/apache/apache_checker.sh check
# mkdir /opt/scripts/apache
#!/bin/sh

ALERTEMAIL="[email protected]"
APACHECTL=/usr/sbin/apache2ctl
SCRIPT_DIR=/opt/scripts/apache
RUNNING_PROCESSES=`ps auxww | grep -c bin/apache`;
APACHEUSER="www-data"
MinSpareServers="24"

######## [DO NOT MODIFY] ###

LOG_FILE=${SCRIPT_DIR}/status.log
DATE=`date '+%Y-%m-%d %T'`


apache_start()
{
    $APACHECTL start;
}

apache_stop()
{
    $APACHECTL stop;
    sleep 1;
    killall -9 apache httpd apache2 >/dev/null 2>&1;
}

apache_restart()
{
    apache_stop;
    sleep 1;
    apache_semclear;
    apache_start;
}

# if not running - start
apache_check()
{
    if
        [[ ${RUNNING_PROCESSES} -le $MinSpareServers ]]; then
        apache_restart;
        echo "${DATE} ALERT: `hostname -f` - apache was restarted" >> ${LOG_FILE};
        echo "${DATE} ALERT: `hostname -f` - apache was restarted" | /usr/sbin/sendmail $ALERTEMAIL;
    fi
}

# clear semaphores
apache_semclear()
{
    for i in `ipcs | grep $APACHEUSER | awk -F ' ' '{ print $2}'`
    do
        ipcrm -s $i;
    done
}

case $1 in
    start)
        apache_start;
    ;;
    stop)
        apache_stop;
    ;;
    restart)
        apache_restart;
    ;;
    check)
        apache_check;
    ;;
    semclear)
        apache_semclear;
    ;;
    *)
    echo "Script usage: $0 start | stop | restart | check | semclear";
esac
2009/05/08 12:17

Скрипт для проверки доступности вебсервера (с SMS)

Работает под debian.

# mkdir -p /opt/scripts/monitoring/active_alerts

Скрипт ложить в /opt/scripts/monitoring/checker.sh

#!/bin/bash

SCRIPT_DIR=/opt/scripts/monitoring
LOG_FILE=${SCRIPT_DIR}/status.log
PHONES="80501234567 80507654321"
CURDATE=`/bin/date +"%s"`;

function alert
{
    for i in $PHONES;
    do  
        echo "$1 $2 $3" | /usr/sbin/sendmail -fmonitoring@monitoring ${i}@sms.mysmsgate.com;
    done
}

function check
{
    cat $SCRIPT_DIR/targets |  while read ip server;
    do  
        /usr/bin/wget -T 5 --tries=3 -q -O - http://${ip}/.do_not_remove.php | grep SUCCESS >/dev/null;
        if [[ $? == 0 ]]; then
            if [[ -e $SCRIPT_DIR/active_alerts/$server ]]; then
                cat $SCRIPT_DIR/active_alerts/$server | while read startdate;
                do  
                    DATE=`/bin/date +"%F %T"`;
                    let "i =  $CURDATE - $startdate";
                    lenght=`/bin/date -u +"%T" --date=@${i}`;
                    alert "$DATE" $server "is UP, downtime is $lenght";
                    echo "$DATE" $server "is UP, downtime is $lenght" > $LOG_FILE
                    rm -f $SCRIPT_DIR/active_alerts/$server
                done
            fi
        else
            if [[ -e $SCRIPT_DIR/active_alerts/$server ]]; then
                MINUTE=`/bin/date +"%M"`
                if [[ $MINUTE == 00 ]]; then
                    cat $SCRIPT_DIR/active_alerts/$server | while read startdate;
                do  
                    DATE=`/bin/date +"%F %T"`;
                    let "i =  $CURDATE - $startdate";
                    lenght=`/bin/date -u +"%T" --date=@${i}`;
                    alert "$DATE" $server "down for $lenght";
                done
                fi
            else
                echo $CURDATE > $SCRIPT_DIR/active_alerts/$server;
                DATE=`/bin/date +"%F %T"`;
                alert "$DATE" $server "is DOWN";
                echo "$DATE" $server "is UP, downtime is $lenght" > $LOG_FILE
            
            fi
        fi
    done
}

check
2009/05/06 14:07

Парольная аутентификация в openvpn

Server Config

local <HOST IP>
port 1194
proto tcp
dev tun
ca /usr/local/etc/openvpn/ca.crt
cert /usr/local/etc/openvpn/server.crt
key /usr/local/etc/openvpn/server.key
dh /usr/local/etc/openvpn/dh1024.pem
server 192.168.78.0 255.255.255.0
ifconfig-pool-persist /usr/local/etc/openvpn/ips
push "redirect-gateway"
auth-user-pass-verify /usr/local/etc/openvpn/auth.pl via-env
client-cert-not-required
username-as-common-name
keepalive 100 120
comp-lzo
client-config-dir /usr/local/etc/openvpn/ccd
max-clients 250
persist-key
persist-tun
status /usr/local/etc/openvpn/openvpn-status.log
verb 3

Скрипт /usr/local/etc/openvpn/auth.pl

#!/usr/bin/perl

use strict;

my $passwdfile = "/usr/local/etc/openvpn/users";
my $isValidUser = 0;
my $username;
my $password;
my $thisUsername = $ENV{'username'};
my $thisPassword = $ENV{'password'};

open (PASSWORDS,"$passwdfile") or die "can't find file: $passwdfile : $!\n";

while (<PASSWORDS>) {
    ($username,$password)= split (/:/, $_);
    chomp $username;
    chomp $password;
    if ($username eq $thisUsername && $password eq $thisPassword) {
        $isValidUser = 1;
        last;
    }
}
close PASSWORDS;

if ($isValidUser == 1) {
    print "ERR\n";
    exit 1;
} else {
    print "OK\n";
    exit 0;
}

Client Config

client
dev tun
proto tcp
remote <HOST IP> 1194
resolv-retry infinite
nobind
persist-key
persist-tun
pull
auth-user-pass
ca ca.crt
comp-lzo
verb 3

Формат файла /usr/local/etc/openvpn/users

login:password

Формат файлов в директории /usr/local/etc/openvpn/ccd

Имя файла должно полностью совпадать с login. Для нормальной работы openvpn-клиента под windows - IP шлюза и серый IP клиента должны быть из одной /30 подсети. Под linux/BSD таких ограничений нет.

ifconfig-push 192.168.78.CIENT_IP 192.168.78.VPN_GATEWAY
2008/03/18 12:29

Установка программ и FreeBSD 6.x для безошибочно верной инсталляции Dedikit

Операционная система должна быть свежеустановленной, без векового барахла. Настоятельно рекомендую обновить древо портов перед началом работ на сервере:

# portsnap fetch && portsnap extract

Стадия 1

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

# make install clean -C /usr/ports/textproc/libxml2 && make install clean -C /usr/ports/ftp/curl && make install clean -C /usr/ports/mail/cclient && make install clean -C /usr/ports/security/mcrypt && \
make install clean -C /usr/ports/databases/mysql50-server && make install clean -C /usr/ports/www/nginx && make install clean -C /usr/ports/ftp/vsftpd && make install clean -C /usr/ports/graphics/jpeg && \
make install clean -C /usr/ports/graphics/png && make install clean -C /usr/ports/www/oops && make install clean -C /usr/ports/net-mgmt/net-snmp && make install clean -C /usr/ports/devel/libltdl15 && \
make install clean -C /usr/ports/ftp/wget && make install clean -C /usr/ports/net/mpd && make install clean -C /usr/ports/devel/zziplib && make install clean -C /usr/ports/textproc/libxslt && \
make install clean -C /usr/ports/textproc/sablotron && make install clean -C /usr/ports/net/cvsup

Стадия 2

Всяческие рулезы

# mkdir -p /home/mysql && chown mysql\: /home/mysql
# wget http://kyxap.crimea.ua/rc/vimrc -O ~/.vimrc
# wget http://kyxap.crimea.ua/rc/screenrc -O ~/.screenrc
# mkdir -p /opt/etc/php5 && mkdir -p /opt/etc/php4

Предварительно стягиваем последнее древо исходных кодов FreeBSD:

# cat > /root/standart.cvsup << EOF
*default host=cvsup13.us.FreeBSD.org
*default base=/var/db
*default prefix=/usr
*default release=cvs tag=RELENG_6_2
*default delete use-rel-suffix
*default compress
src-all
EOF
# cvsup -g -L 2 /root/standart.cvsup

Включаем поддержку SASL2 по доке Аутентификация SMTP: штатный sendmail + SASL. Для установки дедикита надо выполнить п.1, п.2, п.3, п.5, п.7, п.8.

Если нам необходимо использовать apache-2.2.6, то в файл /boot/loader.conf нам необходимо добавить строчку accf_http_load="YES".
Загружаем модуль:

# kldload accf_http

Включаем форвардинг пакетов:

# sysctl -w net.inet.ip.forwarding=1

Добавляем дефолтные опции для сервера в /etc/make.conf

# cat > /etc/make.conf << EOF
BATCH=yes
WITHOUT_X11=yes
WITHOUT_FONTCONFIG=yes
EOF

Стадия 3

Добавление установленных демонов в список загружаемых сервисов + настройка демонов
Прописываем в /etc/rc.conf флаги для автозапуска нужных нам сервисов.

gateway_enable="YES"
named_enable="YES"
mysql_enable="YES"
mysql_dbdir="/home/mysql"
mysql_args="--skip-locking --skip-name-resolve -O max_connect_errors=500000 -O max_connections=1000"
sendmail_enable="YES"
vsftpd_enable="YES"
mpd_enable="YES"
oops_enable="YES"

В файле /usr/local/etc/vsftpd.conf должны содержаться следующие записи:

anonymous_enable=NO
background=YES
listen=YES
local_enable=YES
write_enable=YES
local_umask=022
chroot_local_user=YES

Создаем дефолтные конфиги для mpd:

cd /usr/local/etc/mpd; cp mpd.conf.sample mpd.conf; cp mpd.links.sample mpd.links; cp mpd.script.sample mpd.script; cp mpd.secret.sample mpd.secret;

В файле /etc/namedb/named.conf ищем строку listen-on { 127.0.0.1; }; и комментируем ее.

Стадия 4

Установка APACHE из исходных кодов
Стягиваем в /opt/src необходимую версию apache отсюда: http://www.apache.org/dist/httpd/
Распаковываем, заходим в директорию с исходными кодами, создаем файл MyConfig.sh, в который записываем следующие строки:
Для apache-1.3.x

#!/bin/sh
OPTIM="-D_FILE_OFFSET_BITS=64 -DDEFAULT_LISTENBACKLOG=1024 -DHARD_SERVER_LIMIT=1024"  ./configure --prefix=/opt/<apache-1.3.x>  --enable-module=so --enable-module=rewrite --enable-module=ssl

Для apache-2.x

#!/bin/sh
OPTIM="-D_FILE_OFFSET_BITS=64 -DDEFAULT_LISTENBACKLOG=1024 -DHARD_SERVER_LIMIT=1024"  ./configure --prefix=/opt/<apache-2.x> --enable-so --enable-cgi --enable-rewrite --with-mpm=worker --with-expat=builtin

Компилируем, устанавливаем и создаем симлинку:

# sh MyConfig.sh
# make
# make install
# ln -s /opt/apache-x.x.x /usr/local/apache

Установка PHP из исходных кодов
Стягиваем в /opt/src необходимую версию php отсюда: http://museum.php.net/
Распаковываем, заходим в директорию с исходными кодами, создаем файл MyConfig.sh, в который записываем следующие строки:
(Для версии apache-1.x ключ –with-apxs, для версии apache-2.x ключ –with-apxs2)
Для php-4.x

#!/bin/sh
CFLAGS="-DEAPI -O2" ./configure  --prefix=/opt/php-4.x \
  --with-apxs=/usr/local/apache/bin/apxs \
  --with-config-file-path=/opt/etc/php4 \
  --enable-calendar \
  --enable-sysvsem \
  --enable-sysvshm \                                                                                                                                                                 
  --enable-sysvmsg \
  --enable-ftp \
  --enable-track-vars \
  --with-zip \
  --with-mysql=/usr \
  --enable-bcmath \
  --with-bz2 \ 
  --with-gd \
  --with-jpeg-dir \
  --with-zlib-dir \
  --with-curl \
  --enable-sockets \
  --with-iconv \
  --enable-mbstring \
  --enable-mbregex \
  --enable-ctype \
  --enable-shmop \
  --enable-wddx \
  --with-imap \
  --with-kerberos \
  --with-freetype-dir \
  --with-dom \
  --with-dom-xslt \
  --with-dom-exslt \
  --with-xmlrpc \
  --enable-xslt \
  --with-xslt-sablot \
  --with-expat-dir=/usr \
  --enable-dbase \
  --with-mime-magic \
  --with-mhash \
  --with-openssl \
  --with-mcrypt \
  --with-imap-ssl \
  --enable-memory-limit

Для php-5.x

#!/bin/sh
CFLAGS="-O2" ./configure  --prefix=/opt/php-5.х \
  --with-apxs2=/usr/local/apache/bin/apxs\
  --enable-calendar \
  --enable-sysvsem \
  --enable-sysvshm \
  --enable-sysvmsg \
  --enable-ftp \
  --with-mcrypt \
  --with-mysql \
  --with-mysqli \
  --enable-bcmath \
  --with-bz2 \
  --with-gd \
  --with-jpeg-dir \
  --with-zlib-dir \
  --with-curl \
  --enable-sockets \
  --with-iconv \
  --enable-mbstring \
  --enable-mbregex \
  --enable-ctype \
  --enable-shmop \
  --enable-wddx \
  --with-imap \
  --with-freetype-dir \
  --with-xmlrpc \
  --enable-dbase \
  --with-mime-magic \
  --with-mhash \
  --with-gettext \
  --with-imap-ssl \
  --with-pear \
  --with-openssl \
  --with-config-file-path=/opt/etc/php5

Компилируем, устанавливаем и создаем симлинку:

# sh MyConfig.sh
# make
# make install
# ln -s /opt/php-x.x.x /usr/local/php

Если при make install ругается что

cp: libs/libphp5.so: No such file or directory

то делаем:

1. run your configure script as it is
2. Open the libtool file that is created in the php source directory
3. find the variable definition: deplibs_check_method=
4. edit it to read: deplibs_check_method="pass_all"
5. run make

В зависимости от версии php, делаем:

# cp /opt/src/php-x.x.x/php.ini-dist в /opt/etc/phpX

Стадия 5

Запуск сервисов

# /etc/rc.d/sendmail restart
# /etc/rc.d/named start
# /usr/local/etc/rc.d/mysq-server start
# /usr/local/etc/rc.d/oops start
# /usr/local/etc/rc.d/vsftpd start
# /usr/local/etc/rc.d/mpd start
# /usr/local/apache/bin/apachectl start
Приложение к Стадии 4

Установка Zend Optimizer
Тянем архив:

# make fetch -C /usr/ports/devel/ZendOptimizer/ && mv /usr/ports/distfiles/ZendOptimizer-* /opt/src

Распаковываем, заходим в директорию и запускаем install-tty.
Следуем инструкциям инсталлятора, в пути к рнр.ini указываем значение переменной –with-config-file-path из файла MyConfig.sh.

2008/02/12 15:45

Аутентификация SMTP: штатный sendmail + SASL

Часто возникает ситуация, когда для пользователей, разъезжающих по командировкам, нужно организовать почтовый релэй.

Проблема в том, что штатный для FreeBSD sendmail настраивается на прием почты только от доверенных IP-адресов (или IP-сетей), и заранее неизвестно, с какого IP-адреса пользователь будет отправлять почту.

Как одно из решений - выдать такому пользователю логин/пароль и настроить sendmail на прием почты, основываясь на этих данных, независимо от IP-адреса, с которого пришел пользователь. Собственно рецепт настройки sendmail'a я и привожу здесь.

Благодарность за рецепт уходит Victor Prylipko <Victor.Prylipko АТ f4.n4635.z2.fidonet.org> из фидо-конференции ru.unix.bsd

Дано:
FreeBSD 4.8 STABLE; sendmail - штатный.

Требуется:
настроить авторизацию клиента использующего Outlook Express при приеме почты от него, нужно для возможности принимать почту от клиента, если он отправляет почту с "чужих" IP-адресов.

1. Ставим из портов cyrus-sasl2 и cyrus-sasl2-saslauthd

# portinstall cyrus-sasl2
# portinstall cyrus-sasl2-saslauthd

2. Из /etc/defaults/make.conf копируем строки в /etc/make.conf

SENDMAIL_CFLAGS=-I/usr/local/include -DSASL=2
SENDMAIL_LDFLAGS=-L/usr/local/lib
SENDMAIL_LDADD=-lsasl2

3. Пересобираем sendmail

# cd /usr/src/lib/libsm
# make clean && make obj && make depend && make
# cd /usr/src/lib/libsmutil
# make clean && make obj && make depend && make
# cd /usr/src/usr.sbin/sendmail
# make clean && make obj && make depend && make && make install

4. Добавляем строку в /etc/rc.conf

sasl_saslauthd_flags="-a sasldb"

5. Запускаем демон SASL-а

# /usr/local/etc/rc.d/saslauthd.sh start

Этот пункт рецепта спонсирован Slava Vovk aka vovk АТ km.ua

6. Создаем Sendmail.conf

# echo pwcheck_method: saslauthd > /usr/local/lib/sasl2/Sendmail.conf

Там же можно указать, где лежит srvtab:

# echo srvtab: /etc/srvtab >> /usr/local/lib/sasl2/Sendmail.conf

7. Добавляем сроки в ваш .mc файл

TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5 PLAIN LOGIN')dnl
define(`confAUTH_MECHANISMS', `DIGEST-MD5 CRAM-MD5 PLAIN LOGIN')dnl

В принципе можно ограничится только одним методом LOGIN, если нужно только для Outlook Express (других клиентов я не пробовал).

TRUST_AUTH_MECH(`LOGIN')dnl
define(`confAUTH_MECHANISMS', `LOGIN')dnl

8. Генерим sendmail.cf и устанавливаем его

# cd /etc/mail
# make install restart

9. Заводим пользователя в базу SASL

# saslpasswd2 -a sendmail newuser

проверка, что пользователь добавлен:

# sasldblistusers2

выдаст список пользователей в базе.

10. Создаем пустой файл /etc/srvtab чтобы sendmail в логах не ругался, хотя можно этого и не делать. :-)

11. В настройках Outlook Express - Tools | Accounts… | нужный аккаунт | Properties | Servers | ставим "галочку" My server requires authentication и жмем кнопку Settings… вводим Account name и Password которые занесли в базу в 8-м пункте.

Все, почта от пользователя принимается невзирая на /etc/mail/access.db

2008/02/12 15:38
start.txt · Last modified: 2016/09/22 01:27 by kyxap