суботу, вересня 10, 2005

Сервер дозвона на Linux

Ці дві статейки я написав давно, це навіть не статті, а лист в форум, відповідь на запитання "Як організувати дозвон в Linux". Чесно кажучи, в них давно потрібно було б дещо змінити, або взагалі переробити, але наразі нехай буде так як є. Подано на російській мові.


-------------------------------------------------------------




(C) 2002 Sergij Marchenko, MakarSoftware, mailto:makar@ua.fm
GPL

Имеем следующее:
RED HAT 7 (или любой совместимый, например ASPLinux 7.X)
Сетка 172.16.0.0/24, выделенка на ttyS0, MOXA с портами cum0 - cum7
Провайдер (FreeBSD) дает на выделенку автоматически IP, DNS; логин и пароль не проверяет.

Хотим:
провайдить локалу и удаленных клиентов.

Решение:

Инсталлируем mgetty. Допустим, у нас есть
mgetty-1.1.25-2.asp.i386.rpm, тогда делаем rpm -ivh
mgetty-1.1.25-2.asp.i386.rpm

Редактируем /etc/mgetty+sendfax/login.config
Тут должны быть только 2 строчки:
/AutoPPP/ - - /etc/ppp/ppplogin
* - - /bin/login @


В /etc/inittab пишем:

# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6

# Это добавить:

7:2345:respawn:/sbin/mgetty cum0
8:2345:respawn:/sbin/mgetty cum1
9:2345:respawn:/sbin/mgetty cum2
10:2345:respawn:/sbin/mgetty cum3
11:2345:respawn:/sbin/mgetty cum4
12:2345:respawn:/sbin/mgetty cum5
13:2345:respawn:/sbin/mgetty cum6
14:2345:respawn:/sbin/mgetty cum7


В /etc/hosts пишем:

172.16.0.100 hus0
172.16.0.101 ppphost0

172.16.0.102 hus1
172.16.0.103 ppphost1

172.16.0.104 hus2
172.16.0.105 ppphost2

172.16.0.106 hus3
172.16.0.107 ppphost3

172.16.0.108 hus4
172.16.0.109 ppphost4

172.16.0.110 hus5
172.16.0.111 ppphost5

172.16.0.112 hus6
172.16.0.113 ppphost6

172.16.0.114 hus7
172.16.0.115 ppphost7


В /etc/ppp/options пишем:

modem
crtscts
asyncmap 0


Создаем /etc/ppp/options.cum0

passive
172.16.0.1:172.16.0.101
proxyarp
ms-dns 195.5.62.1
ms-dns 195.5.62.3
debug

ms-dns нужны только для Windows-клиентов (других, наверно и не будет :-) Это наши ДНС-сервера нашего провайдера.

Создаем /etc/ppp/options.cum1 и дальше по аналогии до /etc/ppp/options.cum7

passive
172.16.0.1:172.16.0.103 потом 105, потом 107...
proxyarp
ms-dns 195.5.62.1
ms-dns 195.5.62.3
debug



В /etc/ppp/pap-secrets пишем:

# Secrets for authentication using PAP
# clientserversecretIP addresses
makar*парольмакара172.16.0.101
user*парольюсера172.16.0.102
makarj*парольмакаровогобратана172.16.0.103
shmit*парольхакерашмита172.16.0.104

IP-адреса будут ввыдаваться персонально каждому юсеру. Чтобы они дозванивались, после добавления юсера в систему нужно его добавить в /etc/ppp/pap-secrets Таким образом, мы избавляемся от т.н. "Сиамских близнецов"


Создаем /etc/ppp/ppplogin

#!/bin/sh

mesg n
tty
/usr/sbin/pppd noauth noccp -chap +pap kdebug 4 login

и делаем его исполняемым


Создаем /etc/ppp/resolv.conf

195.5.62.1
195.5.62.3

Это наши ДНС. Не знаю, может это и не нужно. Я просто у провайдера спросил.

Вот и все, что нам нужно, чтобы к нам звонили. На клиентских машинах создаем дозвон, оставляем только TCP-IP, остальное оставляем по умолчанию. В свойствах IP-протокола указываем шлюз на наш сервер 172.16.0.1


Теперь нам нужно, чтоб наша выделенка автоматически звонила провайдеру:

ppp-on, ppp-off, ppp-on-dialer берем с /usr/share/doc/ppp-2.4.0/scripts и катаем в /etc/ppp

Правим ppp-on:
#!/bin/sh
#
# Script to initiate a ppp connection. This is the first part of the
# pair of scripts. This is not a secure pair of scripts as the codes
# are visible with the 'ps' command. However, it is simple.
#
/bin/masq #Эту байду нужно добавить, потом объясню зачем


# These are the parameters. Change as needed.
TELEPHONE=1# The telephone number for the connection
ACCOUNT=""# The account name for logon (as in 'George Burns')
PASSWORD=""# The password for this account (and 'Gracie Allen')
LOCAL_IP=0.0.0.0# Local IP address if known. Dynamic = 0.0.0.0
REMOTE_IP=0.0.0.0# Remote IP address if desired. Normally 0.0.0.0
#NETMASK=0.0.0.0# The proper netmask if needed
#
# Export them so that they will be available at 'ppp-on-dialer' time.


export TELEPHONE #ACCOUNT PASSWORD - у меня мой провайдер паролей не спрашивает. Если у Вас спрашивает - надо раскомментировать

DIALER_SCRIPT=/etc/ppp/ppp-on-dialer

exec /usr/sbin/pppd debug lock modem crtscts /dev/ttyS0 38400 asyncmap 20A0000 escape FF kdebug 0 $LOCAL_IP:$REMOTE_IP noipdefault persist holdoff 5 defaultroute connect $DIALER_SCRIPT

/bin/masq #Эту байду нужно добавить, потом объясню зачем


Правим ppp-on-dialer:
#!/bin/sh
#
# This is part 2 of the ppp-on script. It will perform the connection
# protocol for the desired connection.
#
exec chat -vTIMEOUT3ABORT'\nBUSY\r'ABORT'\nNO ANSWER\r'ABORT'\nRINGING\r\n\r\nRINGING\r'''\rAT'OK-+++\c-OK'ATH0TIMEOUT30''ATA\ # У меня ATA, потому, что мой модем не звонит, а берет трубку
CONNECT''#ogin:--ogin:$ACCOUNT#assword:$PASSWORD Я же говорил, что меня провайдер пароль не спрашивает


ppp-off оставляем без изменений


Правим /etc/rc.d/rc.local
Последнюю строчку ставим:
sh /etc/ppp/ppp-on

Создаем файл /bin/masq
#!/bin/bash

echo 1 > /proc/sys/net/ipv4/ip_forward
/sbin/ipchains -A forward -i ppp0 -s 172.16.0.0/24 -d ! 172.16.0.0/24 -j MASQ

и делаем его исполняемым. Эта штука будет нам маскарадить клиентов в интернет


Для съема статистики рекомендую getstatd - http://www.opennet.ru/getstatd/
Очень крутая, но простая в использовании штука. Дает пользователю возможность через веб-интерфейс узнать статистику за любой период, а администратору - статистику на всех юсеров.


Может чего и упустил, в случае чего мыльте. В качестве оплаты принимаю виртуальное пиво ;-)






-------------------------------------------------------------





(C) 2003 Sergij Marchenko, MakarSoftware, mailto:makar@ua.fm
GPL

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



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

Допустим, на сервере стоит модем на com1

Инсталлируем mgetty. Допустим, у нас есть
mgetty-1.1.25-2.asp.i386.rpm, тогда делаем rpm -ivh
mgetty-1.1.25-2.asp.i386.rpm

Редактируем /etc/mgetty+sendfax/login.config
Тут должны быть только 2 строчки:
/AutoPPP/ - - /etc/ppp/ppplogin
* - - /bin/login @


В /etc/inittab пишем:

# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6

# Это добавить:

7:2345:respawn:/sbin/mgetty ttyS0


В /etc/hosts пишем:

172.16.0.100 hus0 - это типа сервер
172.16.0.101 ppphost0 - это типа клиент


В /etc/ppp/options пишем:

modem
crtscts
asyncmap 0


Создаем /etc/ppp/options.ttyS0

passive
172.16.0.100:172.16.0.101
proxyarp
ms-dns 172.16.0.100
ms-dns 172.16.0.100
debug


В /etc/ppp/pap-secrets пишем:

# Secrets for authentication using PAP
# client server secret IP addresses
user * парольюсера 172.16.0.101


Создаем /etc/ppp/ppplogin

#!/bin/sh

mesg n
tty
/usr/sbin/pppd noauth noccp -chap +pap kdebug 4 login

и делаем его исполняемым


Создаем /etc/ppp/resolv.conf

172.16.0.100
172.16.0.100


Теперь после kill -1 1 или после перезагрузки твой модем дожен брать
трубку после первого звонка. Он полностью готов к работе как настоящий
сервер дозвона.

Чтобы кидаться файлами, лучше всего использовать FTP. Самый простой
способ - проинсталлировать wu-ftpd. Например, если у нас есть
wu-ftpd-2.6.1-12.0.asp.i386.rpm, то делаем rpm -ivh
wu-ftpd-2.6.1-12.0.asp.i386.rpm
Редактируем /etc/xinetd.d/wu-ftpd Он должен иметь такой вид:

# default: on
# description: The wu-ftpd FTP server serves FTP connections. It uses # normal, unencrypted usernames and passwords for authentication.
service ftp
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.ftpd
server_args = -l -a
log_on_success += DURATION USERID
log_on_failure += USERID
nice = 10
# disable = yes
}


После этого делаем /etc/rc.d/init.d/xinetd restart


Сервер готов. На клиенте работаем с ним точно так же, как с
интернетом. Делаем дозвон, запускаем ftp сессию и расслабляемся.

Літо

Вобщем так. Приїхав я вчора з Криму, з Судака. А перед цим був на Шацьких Озерах. Вражень - МОРЕ! Бабок потратив ще більше...



Є куча фоток, з озер - на цілий компакт диск, з моря - 5 пльонок. Десь на днях виберу найкращі і викладу в галерею. А може прямо в блог.

PHP + Apache + MySQL + Linux

Цю доку я написав ще в травні 2005 року, давно хотів викласти, але не находив підходящого формату і навіть часу. Напевно, комусь пригодиться, може навіть мені. Покрокова настройка сервера PHP + Apache + MySQL + Linux!
УВАГА! В тексті присутні матюки (мені сподобався оригінал, я писав не задумуючись, по ходу настройки і вирішив нічого не міняти).



-------------------------------------------------




Спочатку треба поставити mysql i mysqladministrator (вони все одно бінарні якогось хрена). Потім Apache-1 (обов'язково з ісходніків, інакше модуль для ПХП для Апача не скомпілюється). Апач-2 не рекомендується (модуль ПХП для нього експериментальний). Крім того, я вичитав, що він не є продовженням Апача-1, він є повністю окремою віткою Апача (багато нового взнав, ніколи би не догадався).



Вичерпна інструкція по установці MySQL, можна сказати, покрокова ;-)

---------------------------------------------------------------------------
shell> groupadd mysql
shell> useradd -g mysql mysql
shell> cd /usr/local
shell> gunzip < /PATH/TO/MYSQL-VERSION-OS.tar.gz | tar xvf -
shell> ln -s FULL-PATH-TO-MYSQL-VERSION-OS mysql
shell> cd mysql
shell> scripts/mysql_install_db --user=mysql

---------------------------------------------------------------------------
[root@szl mysql]# scripts/mysql_install_db --user=mysql
Installing all prepared tables
Fill help tables

To start mysqld at boot time you have to copy support-files/mysql.server
to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
./bin/mysqladmin -u root password 'new-password'
./bin/mysqladmin -u root -h szl.if.ukrtel.net password 'new-password'
See the manual for more instructions.

NOTE: If you are upgrading from a MySQL <= 3.22.10 you should run
the ./bin/mysql_fix_privilege_tables. Otherwise you will not be
able to use the new GRANT command!

You can start the MySQL daemon with:
cd . ; ./bin/mysqld_safe &

You can test the MySQL daemon with the benchmarks in the 'sql-bench' directory:
cd sql-bench ; perl run-all-tests

Please report any problems with the ./bin/mysqlbug script!

The latest information about MySQL is available on the web at
http://www.mysql.com
Support MySQL by buying support/licenses at https://order.mysql.com
[root@szl mysql]#
---------------------------------------------------------------------------




shell> chown -R root .
shell> chown -R mysql data
shell> chgrp -R mysql .
shell> bin/mysqld_safe --user=mysql &
---------------------------------------------------------------------------

Запуск MySQL:
/usr/local/mysql/bin/mysqld --user=mysql &

Запуск консольного клієнта:
/usr/local/mysql/bin/mysql -u root -p

Конфігурування Apache:
./configure --enable-module=so


Запуск Апача:
/usr/local/apache/bin/apachectl start

Конфігураційний файл Апача:
/usr/local/apache/conf/httpd.conf

Домашній каталог Апача:
/usr/local/apache/htdocs


Конфігурування PHP:
./configure --with-mysql=/usr/local/mysql --with-apxs=/usr/local/apache/bin/apxs --with-mbstring --enable-mbstring

Дома під ASP_Linux v.10 все пройшло нормально, на роботі під ASP-Linux 9.0 захотіло:
checking libxml2 install dir... no
configure: error: libxml2 version 2.5.10 or greater required.

В такому випадку потрібно скачати і установити:
ftp://ftp.gnome.org/mirror/gnome.org/sources/libxml2/2.6/libxml2-2.6.19.tar.gz




Зробити ссилки (може і без цього може робити, але РедХат не знає шляху на /usr/local/bin. Не знаю, добре це чи погано, але кумарить)
/usr/local/bin
php
php-config
phpextdist
phpize
в каталог /usr/bin


Виправляєм /usr/local/apache/conf/httpd.conf
---------------------------------------------------------------------------
Внутри блока
AddType application/x-httpd-php .php
В строке DirectoryIndex пропишите index.php:
DirectoryIndex index.php index.html
---------------------------------------------------------------------------

також можна поміняти порт на 80 (по замовчуванню 8080)

І перезапускаєм Apache:
/usr/local/apache/bin/apachectl restart


ГОТОВО



---------------------------------------------------------------------------
РОБОЧІ ЗАМІТКИ


---------------------------------------------------------------------------
---------------------------------------------------------------------------


Так треба ставити PHP, щоб скомпілювалися модулі для mysql i Apache
./configure --with-mysql=/usr/local/mysql --with-apache=/usr/local/apache/include


БЛЯДЬ!!! ТАК ЯКОГОСЬ ХУЯ НЕ РОБИТЬ!!!
Каже шо нема там Апача...
Блядь модуль mod-php5.so не створюється. ВООБЩЕ!!!! Як я лиш не пробував!
Будем искать...


Зара буду пробувати таке:

---------------------------------------------------------------------------
В любом случае, понадобится параметр --with-apxs=/путь/к/apxs – это необходимо для сборки модуля Апача mod_php. Например, если Apache установлен в /usr/local, то параметр будет выглядеть следующим образом: --with-apxs=/usr/local/sbin/apxs.
---------------------------------------------------------------------------

Хуй там! Нема такого каталога! Навіть sbin нема. Блядь!
Але є bin!!!

Попробуєм так:
./configure --with-mysql=/usr/local/mysql --with-apxs=/usr/local/apache/bin/apxs


Ага... Видає такий матюк:
---------------------------------------------------------------------------
checking for Apache 1.x module support via DSO through APXS...

Sorry, I was not able to successfully run APXS. Possible reasons:

1. Perl is not installed;
2. Apache was not compiled with DSO support (--enable-module=so);
3. 'apxs' is not in your path. Try to use --with-apxs=/path/to/apxs
The output of /usr/local/apache/bin/apxs follows
apxs:Error: Sorry, no DSO support for Apache available
apxs:Error: under your platform. Make sure the Apache
apxs:Error: module mod_so is compiled into your server
apxs:Error: binary `/usr/local/apache/bin/httpd'.
configure: error: Aborting

---------------------------------------------------------------------------

Буду перекомпільовувати Апач
Конфігуруєм його так:
./configure --enable-module=so


Поки що получається!
Наразі перекомпільовую PHP...
./configure --with-mysql=/usr/local/mysql --with-apxs=/usr/local/apache/bin/apxs


Яке блаженство! Це треба було бачити:
---------------------------------------------------------------------------
[root@makars php-5.0.4]# make install
Installing PHP SAPI module: apache
[activating module `php5' in /usr/local/apache/conf/httpd.conf]
cp libs/libphp5.so /usr/local/apache/libexec/libphp5.so
chmod 755 /usr/local/apache/libexec/libphp5.so
cp /usr/local/apache/conf/httpd.conf /usr/local/apache/conf/httpd.conf.bak
cp /usr/local/apache/conf/httpd.conf.new /usr/local/apache/conf/httpd.conf
rm /usr/local/apache/conf/httpd.conf.new
Installing PHP CLI binary: /usr/local/bin/
Installing PHP CLI man page: /usr/local/man/man1/
Installing PEAR environment: /usr/local/lib/php/
[PEAR] Archive_Tar - already installed: 1.1
[PEAR] Console_Getopt - already installed: 1.2
[PEAR] PEAR: file does not exist
[PEAR] HTML_Template_IT- already installed: 1.1
[PEAR] Net_UserAgent_Detect- already installed: 2.0.1
[PEAR] XML_RPC - already installed: 1.2.2
Installing build environment: /usr/local/lib/php/build/
Installing header files: /usr/local/include/php/
Installing helper programs: /usr/local/bin/
program: phpize
program: php-config
program: phpextdist
[root@makars php-5.0.4]#
---------------------------------------------------------------------------

Автоматично настроюється модуль для Апача!!! ВВАВ!!!


Для начала треба переробити конфіг Апача:
---------------------------------------------------------------------------
Внутри блока
AddType application/x-httpd-php .php
В строке DirectoryIndex пропишите index.php:
DirectoryIndex index.php index.html
---------------------------------------------------------------------------
бо інакше php-файл просто видає на екран


Зара буду пробувати результат.


РОБИТЬ!!! БЛЯ БУДУ РОБИТЬ!!!


Робить Апач, робить PHP і крім того PHP співпрацює з MySQL!
І всьо саме нове із ісходніків, 3 квітня 2005 року


---------------------------------------------------------------------------
Завершення установки PHP:

Зробити ссилки (може і без цього може робити, але РедХат не знає шляху на /usr/local/bin. Не знаю, добре це чи погано, але кумарить)
/usr/local/bin
php
php-config
phpextdist
phpize
в каталог /usr/bin





---------------------------------------------------------------------------
Добавлено 20050509-02-01
---------------------------------------------------------------------------
Щоб добавити mbstring (мультибайтові строки), потрібно перезібрати PHP.
Пробую так:

./configure --with-mysql=/usr/local/mysql --with-apxs=/usr/local/apache/bin/apxs --with-mbstring --enable-mbstring

Проба получилася!


Трохи я з цим помучився, поки зрозумів, шо як і Гмаіл, Блоггер не переварює Оперу. Пробував працювати Оперою через проксі-сервер, то вона пару раз вилітала, і не могла загнати фотки в блог. Попробував ФайрФоксом напряму через інтернет - все получилося чотко!
:-)

Проба


От пробую блоггер. Узнав, що він куплений Гуглом і вирішив попробувати, може пригодиться. Цікаво, сюда фотки можна заливати? І скільки?