пятница, 25 декабря 2009 г.

PHP redirection

Очень удобная штука. Редиректит на http://172.26.18.179/cacti/

$ref=$_SERVER['QUERY_STRING'];
if ($ref!='') $ref='?'.$ref;
header('HTTP/1.1 301 Moved Permanently');
header('Location: http://172.26.18.179/cacti/'.$ref);
exit();
?>

среда, 2 декабря 2009 г.

Perl Threads многопоточность

UPD: Продолжение тут - http://www.k4route.ru/2012/05/perl-threads-queue.html
Имеется много хостов. Периодически нужно цеплятся к каждому и вытягивать какой-нить принтаут или просто давать какаю-нить команду, да так, чтоб одновременно. Множить скрипты? Нужно использовать многопоточность! Начал гуглить. Perl, нити :) Нити-нити! :) Много инфы, мануалы на английском... не очень понятно... разбираюсь... Очередная ссылка, попадая на блог, где чел прям совсем доступно рассказывает про эти самые нити. С базовым пониманием уже можно приступать к изучению крутых мануалов. Собственно ссылко http://nopox.wordpress.com/2007/11/06/multithreading-in-perl-part-2/

И первая моя прога с нитями. Цепляется к массиву хостов по телнет, вытягивает принтаут комманды date.


use threads; #Подключаем модуль нитей
use Net::Telnet; #Модуль Telnet

@sgsns=('172.26.18.163', '172.26.18.164', '172.26.18.165', '172.26.18.166');

$login="log";
$password="pass";


#Создаём столько нитей, сколько у нас элементов в массиве @sgsns

for ($i=0; $i<=$#sgsns; $i++) {
push @threads, threads->create(\&sub1, $sgsns[$i], $login, $password)
}

foreach $thread (@threads) {
$thread->join(); #Сообщаем главной программе,
} #чтоб дожидалась выполнения нити

sub sub1 {
my @InboundParameters = @_;

my $host = $InboundParameters[0];
my $login = $InboundParameters[1];
my $password = $InboundParameters[2];

my $fd=new Net::Telnet (Timeout => 30 , Prompt => '/[\$%#>] $/');

$fd->open($host);
$fd->login($login,$password);

my @lines1=$fd->cmd("date");
print "$host\: @lines1";
print "\n";

}

вторник, 1 декабря 2009 г.

Apache, PHP, PostgeSQL на Solaris 10

Решил потестить, что за зверь такой. Пару раз приходилось поднимать сию базу на линуксах под 1С. Особо желания и времени изучить её не было. Была чёткая последовательность, какой за каким rpm пакет разворачивать. Пришло время :).
Имеется сервак с Solaris 5.10. На нём крутятся разнообразные php приложения, скрипты, собирающие статистику и заливающие её в mysql базу... Чтож, скачал исходник. Развернул. С устновкой самой postgre проблем не было. Стандартные ./configure ; make ; make install. Надо ж и веб морду прикрутить. Качаю phpPgAdmin, разворачиваю в апачевкий DocumentRoot, набираю в браузере заветную строку... :) Тра-ля-ля у вас php собран без ключа --with-pgsql. Грустно... Ищу откуда я ставил php. Вроде бы нашёл. Даю make uninstall, а сей прекраснейший скрипт не знает такого :(. В общем и целом, несколько раз я собирал php, вродеб он даже заливался в нужный каталоги... Короче говоря решил я в конце концов переставить связку apache2+php5, да так, чтоб всё с исходников. Apache у меня стоял пакетом. Собственно хотел зарисовать флаги для configure скрипта.

Apache2:

./configure --prefix=/usr/local/apache2 --enable-mods-shared=all --enable-ssl=shared --enable-ssl --with-ssl=/usr/local/ssl --enable-proxy --enable-proxy-connect --enable-proxy-ftp --enable-proxy-http --enable-so

make ; make install

PHP5:

./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql=/usr/local/mysql/ --with-pgsql=/usr/local/pgsql/ --with-zlib --enable-sockets

make ; make install

Вот собственно говоря и всё :)

четверг, 26 ноября 2009 г.

Find

-atime n True если прошло n дней с создания файла.

-mtime n True если файл был изменен n дней назад.


-exec command Выполнить команду если в поиске пришло true. Завершение команды должно быть отмечено знаком ";". Аргумент для команды {} заменяется найденым путем к файлу.


find /space/*.gz -mtime 28 -exec rm {} \;

Найти архивы gzip в разделе /space/ созданные ранее чем 28 дней и стереть.

среда, 25 ноября 2009 г.

Почистить транзакционные логи MySQL

12.6.1.1. PURGE BINARY LOGS Syntax

PURGE { BINARY | MASTER } LOGS
{ TO 'log_name' | BEFORE datetime_expr }

The binary log is a set of files that contain information about data modifications made by the MySQL server. The log consists of a set of binary log files, plus an index file.

The PURGE BINARY LOGS statement deletes all the binary log files listed in the log index file prior to the specified log file name or date. The log files also are removed from the list recorded in the index file, so that the given log file becomes the first.

This statement has no effect if the --log-bin option has not been enabled.

Examples:

PURGE BINARY LOGS TO 'mysql-bin.010';
PURGE BINARY LOGS BEFORE '2008-04-02 22:46:26';

The BEFORE variant's datetime_expr argument should evaluate to a DATETIME value (a value in 'YYYY-MM-DD hh:mm:ss' format). BINARY and MASTER are synonyms.

This statement is safe to run while slaves are replicating. You do not need to stop them. If you have an active slave that currently is reading one of the logs you are trying to delete, this statement does nothing and fails with an error. However, if a slave is dormant and you happen to purge one of the logs it has yet to read, the slave will be unable to replicate after it comes up.

To safely purge logs, follow this procedure:

1.

On each slave server, use SHOW SLAVE STATUS to check which log it is reading.
2.

Obtain a listing of the binary logs on the master server with SHOW BINARY LOGS.
3.

Determine the earliest log among all the slaves. This is the target log. If all the slaves are up to date, this is the last log on the list.
4.

Make a backup of all the logs you are about to delete. (This step is optional, but always advisable.)
5.

Purge all logs up to but not including the target log.

You can also set the expire_logs_days system variable to expire binary log files automatically after a given number of days (see Section 5.1.3, “Server System Variables”). If you are using replication, you should set the variable no lower than the maximum number of days your slaves might lag behind the master.

Prior to MySQL 5.0.60, PURGE BINARY LOGS TO and PURGE BINARY LOGS BEFORE did not behave in the same way (and neither one behaved correctly) when binary log files listed in the .index file had been removed from the system by some other means (such as using rm on Linux). Beginning with MySQL 5.0.60, both variants of the statement fail with an error in such cases. (Bug#18199, Bug#18453) You can handle such errors by editing the .index file (which is a simple text file) manually and insuring that it lists only the binary log files that are actually present, then running again the PURGE BINARY LOGS statement that failed.

вторник, 10 ноября 2009 г.

Perl и время

($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);
$year=$year+1900;
$mon=$mon+1;
print "$year-$mon-$mday $hour:$min:$sec";
print "\n";

пятница, 6 ноября 2009 г.

Solaris и время

Открываем

bash-2.05# cat /etc/default/init
#ident "@(#)init.dfl 1.6 00/05/27 SMI"
#
# This file is /etc/default/init. /etc/TIMEZONE is a symlink to this file.
# This file looks like a shell script, but it is not. To maintain
# compatibility with old versions of /etc/TIMEZONE, some shell constructs
# (i.e., export commands) are allowed in this file, but are ignored.
#
# Lines of this file should be of the form VAR=value, where VAR is one of
# TZ, LANG, CMASK, or any of the LC_* environment variables.
#
TZ=Europe/Moscow
CMASK=022
LC_COLLATE=en_US.ISO8859-1
LC_CTYPE=en_US.ISO8859-1
LC_MESSAGES=C
LC_MONETARY=en_US.ISO8859-1
LC_NUMERIC=en_US.ISO8859-1
LC_TIME=en_US.ISO8859-1

Смотрим, какие переменные подгружены в среду

bash-2.05# export
declare -x HOME="/"
declare -x HOSTNAME="ddslsrostov"
declare -x HOSTTYPE="sparc"
declare -x HZ=""
declare -x LOGNAME="root"
declare -x MACHTYPE="sparc-sun-solaris2.9"
declare -x OLDPWD="/u01/fw_data/bypass"
declare -x OSTYPE="solaris2.9"
declare -x PATH="/usr/sbin:/usr/bin"
declare -x PWD="/etc/default"
declare -x SHELL="/sbin/sh"
declare -x SHLVL="1"
declare -x TERM="xterm"
declare -x TZ="Europe/Moscow"

:)

вторник, 15 сентября 2009 г.

Как использовать test

Evaluate a conditional expression expr.

Syntax
test expr
[ expr

Options

Each operator and operand must be a separate argument. When the [ form is used, the last argument to the command must be a ]. Expressions may be combined using the following operators, listed in decreasing order of precedence.

! expr

True if expr is false.

( expr )

Returns the value of expr. This may be used to override the
normal precedence of operators.

expr1 -a expr2

True if both expr1 and expr2 are true.

expr1 -o expr2

True if either expr1 or expr2 is true.

The test and [ builtins evaluate conditional expressions using a set of rules based on the number of arguments.

0 arguments

The expression is false.
1 argument

The expression is true if and only if the argument is not null.
2 arguments

If the first argument is `!', the expression is true if and only if the second argument is null. If the first argument is one of the unary conditional operators, the expression is true if the unary test is true. If the first argument is not a valid unary operator, the expression is false.
3 arguments

If the second argument is one of the binary conditional operators, the result of the expression is the result of the binary test using the first and third arguments as operands. If the first argument is `!', the value is the negation of the two-argument test using the second and third arguments. If the first argument is exactly `(' and the third argument is exactly `)', the result is the one-argument test of the second argument. Otherwise, the expression is false. The `-a' and `-o' operators are considered binary operators in this case.
4 arguments

If the first argument is `!', the result is the negation of the three-argument expression composed of the remaining arguments. Otherwise, the expression is parsed and evaluated according to precedence using the rules listed above.
5 or more arguments

The expression is parsed and evaluated according to precedence using the rules listed above.

The above applies to the BOURNE shell built-in, the BASH `test' command has the following additional options:

File type tests

These options test for particular types of files. All cases will only return True (0) if the file exists.

`-b file'
True if file is a Block special device.

`-c file'
True if file is a Character special device.

`-d file'
True if file is a Directory.

`-e file'
True if file Exists.

`-f file'
True if file is a regular File.

`-g file'
True if file has its set-group-id bit set.

`-G file'
True if file is owned by the current effective group id.

`-k file'
True if file has its "sticky" bit set.

`-h file'
`-L file'
True if file is a symbolic Link.

`-O file'
True if file is owned by the current effective user id.

`-p file'
True if file is a named Pipe.

`-r file'
True if file is readable.

`-S file'
True if file is a Socket.

`-s file'
True if file has a Size greater than zero.

`-t [FD]'
True if FD is opened on a terminal. If FD is omitted, it defaults
to 1 (standard output).

`-u file'
True if file has its set-user-id bit set.

`-w file'
True if file is writable.

`-x file'
True if file is executable.

`file1 -ef file2'
True if file1 and file2 have the same device and inode numbers,
i.e., if they are hard links to each other.

File Age
These options test the file modification date.

`file1 -nt file2'
True if file1 is newer than file2.

`file1 -ot file2'
True if file1 is older than file2.

String tests
These options test string characteristics. Strings are not quoted for `test', though you may need to quote them to protect characters with special meaning to the shell, e.g., spaces.

`-z String'
True if the length of String is zero.

`-n String'
`String'
True if the length of String is nonzero.

`String1 = String2'
True if the strings are equal.

`String1 != String2'
True if the strings are not equal.

Numeric tests
Numeric relationals. The arguments must be entirely numeric (possibly negative), or the special expression `-l STRING', which evaluates to the length of STRING.

`ARG1 -eq ARG2'
`ARG1 -ne ARG2'
`ARG1 -lt ARG2'
`ARG1 -le ARG2'
`ARG1 -gt ARG2'
`ARG1 -ge ARG2'
These arithmetic binary operators return true if ARG1 is equal,
not-equal, less-than, less-than-or-equal, greater-than, or
greater-than-or-equal than ARG2, respectively.

For example:

test -1 -gt -2 && echo yes
=> yes
test -l abc -gt 1 && echo yes
=> yes
test 0x100 -eq 1
error--> test: integer expression expected before -eq

Examples

$ ls -al
total 67

drwxr-xr-x 18 root root 4096 Jun 9 21:12 ./
drwxr-xr-x 18 root root 4096 Jun 9 21:12 ../
-rw-rw-rw- 1 simon users 4096 Jun 9 07:30 london
-rwsrwsrwx 1 simon users 4096 Jun 9 07:32 aberdeen
-rw------- 1 simon users 4096 Jun 9 07:29 bristol
-rw-r--r-- 1 simon users 4096 Jun 9 07:29 bath
$

$ test -r paris
$ echo $?
1
$

Because the file `paris' is not Readable, the value returned is false (non zero)

if [ "$LOGNAME" = "scott" ]
then
echo "Logged in as Scott"
else
echo "incorrect user"
fi

If the logname variable = scott then the test returns TRUE (0)

"The test of a vocation is the love of the drudgery it involves" - Logan Pearsall

Related:

case - Conditionally perform a command
cmp - Compare two files
expr - Evaluate expressions
eval - Evaluate several commands/arguments
for - Expand words, and execute commands
if - Conditionally perform a command
pathchk - Check file name portability
Equivalent Windows command: IF - Conditionally perform a command

понедельник, 14 сентября 2009 г.

net-snmp-5.4.2.1 и переменная $PATH

На очередном сервере ставил snmpd из source. Делаю ./configure - всё пробежало норм. Даю make, вылезает ошибка:

make[5]: *** [libnetsnmp.la] Error 1
make[5]: Leaving directory
`../net-snmp/build/snmplib'

до этого на солярке той же версии всё ставилось норм. Начал рыть. Оказывается в переменной $PATH не было прописан путь /usr/ccs/bin/. Добавил в файл /etc/default/su. Ещё раз сконфигурил ./configure, дал make - пробежала :)

пятница, 11 сентября 2009 г.

fork()

В Unix-системах, fork() — системный вызов, создающий новый (дочерний) процесс, идентичный выполняющему этот вызов. После вызова fork() алгоритм обычно разветвляется (родительский процесс получает от fork() PID дочернего, а дочерний получает нуль).

После fork() дочерний процесс чаще всего выполняет системный вызов exec(), загружающий в пространство процесса новую программу (именно так, и только так, в Unix-системе выполняется запуск программы в отдельном процессе). Так, первый (нулевой) процесс Unix (ядро системы) создаёт свою копию, чтобы запустить init (процесс с PID = 1), который в свою очередь создаёт дочерние процессы для запуска инициализации системы и терминалов.

Некоторые программы создают дочерние процессы не для запуска другой программы, а для выполнения параллельной задачи. Так, например, поступают простые сетевые серверы — при подсоединении клиента, сервер создаёт свою копию (дочерний процесс), которая обслуживает клиентское соединение и завершается по его закрытию. Родительский же процесс продолжает ожидать новых соединений.

Вызов fork() выполняется довольно долго, так как требует копирования большого количества данных. Для того чтобы это обойти, некоторые сетевые серверы (например, веб-серверы Apache и Lighttpd), создают дочерние процессы заранее, чтобы уменьшить время отклика сервера. Также существуют «облегченные» реализации fork(), отображающие в новый процесс страницы памяти родительского, вместо того чтобы их копировать (новая страница создаётся только при изменении её содержимого одним из процессов), что существенно снижает время создания нового процесса (т. н. copy-on-write).

$PATH

Устанавливал в Solaris модули на perl. Вспомнил о переменной $PATH. Решил тут записать, чтоб не забыть. Смотрим значение:
echo $PATH

Определяем переменную тут /etc/defaults, и в частности файл "su".

вторник, 8 сентября 2009 г.

Summit x450 mirroring

Кстати вот вам пример рекомендованной настройки мирроинга для X450:

Пример, конфигурирования:
create vlan "LOM2"
configure vlan LOM2 tag 202
configure vlan LOM2 ipaddress 172.26.131.146 255.255.255.240
conf LOM2 add ports 21
conf LOM2 add port 23 tagged
conf mirroring mode enhanced
create vlan "test_mirr"
configure vlan test_mirr tag 333 remote-mirroring
ena mirroring to port-list 5,6 loopback-port 7 remote-tag 333
conf mirroring add vlan "LOM2"
conf vlan "test_mirr" add ports 3 tagged
conf vlan "test_mirr" add ports 4
en ipforwarding
enable jumbo-frame ports 5
enable jumbo-frame ports 6
enable jumbo-frame ports 7
disable learning port 3
disable learning port 4

Вырезка из мана.

enable mirroring to port
enable mirroring to [port [tagged | untagged] | port-list
loopback-port [tagged | untagged]] {remote-tag }
For BlackDiamond 20800 series switches only:
enable mirroring to [port | port-list ] [tagged |
untagged] {remote-tag }
Description
Dedicates a port on the switch to be the mirror output port, or the monitor port.

port Specifies the mirror output port.
port-list Specifies the list of ports where traffic is to be mirrored.
loopback-port Specifies an otherwise unused port required when mirroring to a port-list. The
loopback-port is not available for switching user data traffic.
NOTE: This parameter is not used on BlackDiamond 20800 series switches.
port Specifies a single loopback port that is used internally to provide this feature.
tagged Specifies the mirror output, or monitor, port is tagged.
NOTE: This parameter is available only on the BlackDiamond 10808,
BlackDiamond 12800, and BlackDiamond 20800 series switches.
untagged Specifies the mirror output, or monitor, port is untagged.
NOTE: This parameter is available only on the BlackDiamond 10808,
BlackDiamond 12800, and BlackDiamond 20800 series switches.
remote-tag Specifies the value of the VLAN ID used by the mirrored packets when
egressing the monitor port.

понедельник, 7 сентября 2009 г.

Чудо bash

Нужно было на SGSN сделать выборку, по каким IMSI вылезают ошибки роуменга. Т.к. интерфейс общения с сим девайсом - соляра, есть возможность забульбенить супер-пупер команду :)
Вот такая загагулина :)

=== om_conf@eqm01s14p2 ANCB ~ # cat /tmp/OMS_LOGS/mobility_event_log/tmp/mobility_event_log.* | grep "IMSI" | cut -c13-19 | sort | uniq -c
1 2040445
26 2081034
15 2140135
5 2140155
2 2160123
2 2341590
1 2341592
1 2470101
6 2470102
14 2500382
1358 2503990
14 2509906
18 2509931
3 2509965
2 2509976
3 2620316
4 2620317
129 2620322
3 2620323
2 2620327
1 2860302
2 4240214
24 N/A

пятница, 28 августа 2009 г.

ssh без пароля под linux и windows

Аутентификация по RSA ключам - удобная штука. Рассмотрим 2 варианта. Unix клиент - Unix сервер и Windows клиент - Unix сервер. На сервере должен быть поднят sshd. Файл конфигурации:
/etc/ssh/sshd_config
Protocol 2
Port 22
ListenAddress ::
AllowTcpForwarding no
GatewayPorts no
X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost yes
PrintMotd no
KeepAlive yes
SyslogFacility auth
LogLevel info
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
ServerKeyBits 768
KeyRegenerationInterval 3600
StrictModes yes
LoginGraceTime 600
MaxAuthTries 6
MaxAuthTriesLog 3
PermitEmptyPasswords no
PasswordAuthentication yes
PAMAuthenticationViaKBDInt yes
PermitRootLogin no
Subsystem sftp /usr/lib/ssh/sftp-server
IgnoreRhosts yes
RhostsAuthentication no
RhostsRSAAuthentication no
RSAAuthentication yes

Для того, чтобы подключиться с одной Unix машины на другую делаем следующее. На клиенте (с которой будем заходить) генерим пару ключей private/public.

om@rnd1 # ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (//.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in //.ssh/id_rsa.
Your public key has been saved in //.ssh/id_rsa.pub.
The key fingerprint is:
14:fb:6d:ed:4b:af:d2:86:d3:e8:e7:50:4e:51:55:1b root@rnd1

Далее заходим на сервер (к которому будем подключаться) под пользователем om (к примеру). Наша цель - получить беспарольную аутентификация для пользователя om. В папке пользователя есть директория .ssh. Cоздаём в ней файл authorized_keys.

bash-2.05$ pwd
/export/home/om
bash-2.05$ cd .ssh/
bash-2.05$ touch authorized_keys

Вставляем в него public ключ. В результате получаем файл:
bash-2.05$ cat authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAnsRA4X58e33MBxU3iSiVjjB91x4tLyTlbr90Qk5RoZMnaejnEjKfxaCzKLhBR6MOViugjJe6sXhpuCOeBu1LYL2IyIkSrm+Q/NfDgNWnXkHZWLx9COmtQ0+sqrwxwjiJf1yuyuGXUy3DpUX5f9/M2BUfQXP7389NjK3YiQWSluc= om@rnd1

Проверяем. На машине клиенте:
root@rnd1 # ssh -l om 10.10.0.165
Last login: Sat Aug 29 10:34:13 2009 from 10.10.0.179
Sun Microsystems Inc. SunOS 5.9 Generic May 2002
bash-2.05$

Готово.

Теперь для Windows. Я пользуюсь ssh клиентом putty. На мой взгляд самая удобная прога. Ходят слухи, что она некорректно работает с serial портом, но я такого не замечал. Для того, чтобы сгенерить пару ключей нам понадобится программа puttygen.exe. Гуглим, качаем, ставим.

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


Система таже самая. public ключ прописываем на Unix сервере, на который будем заходить без пароля. В папке пользователя заходим в .ssh, в ней создаем authorized_keys. Вставляем строчку с public ключем.
Теперь создаём сессию в putty. Вбиваем ip адрес сервера или доменное имя. Заполняем имя пользователя в Session - Connection - Data (Auto-login username). Далее Session - Connection - SSH - Auth в поле Authentication parameters ставим галку на Allow agent forwarding. Ниже в поле Key грузим наш public ключ. Не забываем сохранить сессию. Проверяем.

Using username "om".
Authenticating with public key "rsa-key-20090828"
Last login: Fri Aug 28 15:26:14 2009 from 10.10.0.101
bash-2.05$ id
uid=1001(om) gid=1(other)
bash-2.05$

Вот так.

суббота, 22 августа 2009 г.

IPtables, port forwarding

Нашёл файлики с примерами.
Быстро и просто:
#Проброс трафика RDP
iptables -t nat -A PREROUTING -p tcp -d 217.13.45.67 --dport 3389 -j DNAT --to-destination 192.168.1.21:3389

Не забываем, как iptables обрабатывает трафик:



Соотв нужно правило для цепочки FORWARD.

четверг, 20 августа 2009 г.

Pop-Top или VPN сервер на Linux с использованием PPTPD.




В своё время задача доставила мне хлопот. Имеется 2 линуксовых машины. Сервер - Mandriva 2007, client - Ubuntu Server 8.04 LTS - отличная система. Собственно vpn гейт сделан в первую очередь для того, чтобы виндовые пользовтели имели доступ к корпоративной локалке, файловому самбовому серваку и т.д. Но от того чтоб сделать туннель между линуксами я тож не удержался... изначально сервак был без шифрования, потом всётки решил, что оно пригодится :)

Итак параметры немного отличаются в разных версиях pptpd. В манах все подробно описано. Нам нужно, чтоб на машине были pppd, pptpd, pptpd-client.
Настраиваем vpn сервер. Конфиги:

[root@gate ~]# cat /etc/pptpd.conf
option /etc/ppp/options.pptpd
logwtmp
speed 115200

# IP-адрес сервера в локальной сети
localip 172.26.0.1

# Диапазон адресов для клиентов PPTP-сервера
remoteip 172.26.0.2-254

debug

[root@gate ~]# cat /etc/ppp/options.pptpd
lock
debug
auth
refuse-pap
refuse-chap
proxyarp
mppe stateless
ms-dns 172.26.0.1
ms-dns 192.168.0.2
#require-chapms
require-mschap-v2
#+chapms-v2
novj
novjccomp
nologfd



[root@gate ppp]# cat /etc/ppp/options

lock
noauth
noipdefault
usepeerdns
mppe required

[root@gate ppp]# cat chap-secrets
# Secrets for authentication using CHAP
# client server secret IP addresses


# Если мы хотим привязать определённый IP к логину:
vpupkin * 12311jj12 172.26.0.37
vbukin * asda 172.26.0.5
и т.д.
чтобы дать динамич ip ставим вместо адреса звёздочку.

Не забываем про IPTABLES:
#VPN SERVER разрешаем GRE. Нужно помнить, что это portless протокол ;)
$IPTABLES -A INPUT -i $INTERNET -p gre -j ACCEPT
$IPTABLES -A OUTPUT -o $INTERNET -p gre -j ACCEPT

#Ну и дырочка, через которую мы будем заходить на сервер :)
$IPTABLES -A INPUT -i $INTERNET -p tcp -m tcp --dport 1723 -j ACCEPT
$IPTABLES -A OUTPUT -o $INTERNET -p tcp -m tcp --dport 1723 -j ACCEPT

Настройки Linux клиента:

root@file:/etc/ppp# cat options
name vpupkin
remotename vpn
defaultroute
asyncmap 0
crtscts
hide-password
local
lcp-echo-interval 30
lcp-echo-failure 4
noipx
lock
debug
auth
refuse-pap
refuse-chap
proxyarp
#mppe stateless
require-mschap-v2
novj
novjccomp

Собственно подключение для конкретного аккаунта.
root@file:/etc/ppp/peers# cat vpn
pty "pptp 192.168.0.3 --loglevel 2 --nolaunchpppd"
user vpupkin
password "12311jj12"
nodeflate
nobsdcomp
noauth
lock
noproxyarp
nomppe-stateful
require-mppe-128 #Включаем шифрование
file /etc/ppp/options.pptp

root@file:~# cat /etc/ppp/options.pptp
lock
noauth
nobsdcomp
nodeflate
persist
mppe-stateful
#mppe-stateless
#require-mschap-v2

Набираем в строке клиента:

Client:
pppd call vpn

/var/log/messages
Aug 20 22:24:36 file pppd[995]: pppd 2.4.4 started by root, uid 0
Aug 20 22:24:36 file pppd[995]: Using interface ppp0
Aug 20 22:24:36 file pppd[995]: Connect: ppp0 <--> /dev/pts/1
Aug 20 22:24:40 file pppd[995]: CHAP authentication succeeded
Aug 20 22:24:40 file pppd[995]: MPPE 128-bit stateless compression enabled
Aug 20 22:24:43 file pppd[995]: local IP address 172.26.0.11
Aug 20 22:24:43 file pppd[995]: remote IP address 172.26.0.1


root@file:~# ifconfig ppp0

ppp0 Link encap:Point-to-Point Protocol
inet addr:172.26.0.11 P-t-P:172.26.0.1 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1496 Metric:1
RX packets:9 errors:0 dropped:0 overruns:0 frame:0
TX packets:17 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:125 (125.0 B) TX bytes:669 (669.0 B)


Server:

/var/log/messages
Aug 20 22:24:38 gate pptpd[31628]: CTRL: Client 192.168.0.2 control connection started
Aug 20 22:24:39 gate pptpd[31628]: CTRL: Starting call (launching pppd, opening GRE)
Aug 20 22:24:39 gate pppd[31629]: Plugin /usr/lib/pptpd/pptpd-logwtmp.so loaded.
Aug 20 22:24:39 gate pppd[31629]: pptpd-logwtmp: $Version$
Aug 20 22:24:39 gate pppd[31629]: pppd 2.4.3 started by root, uid 0
Aug 20 22:24:39 gate pppd[31629]: Using interface ppp1
Aug 20 22:24:39 gate pppd[31629]: Connect: ppp1 <--> /dev/pts/3
Aug 20 22:24:42 gate pppd[31629]: MPPE 128-bit stateless compression enabled
Aug 20 22:24:45 gate pppd[31629]: Cannot determine ethernet address for proxy ARP
Aug 20 22:24:45 gate pppd[31629]: local IP address 172.26.0.1
Aug 20 22:24:45 gate pppd[31629]: remote IP address 172.26.0.11
Aug 20 22:24:45 gate pppd[31629]: pptpd-logwtmp.so ip-up ppp1 vpupkin 192.168.0.2

Тунель создан. Как видно у клиента более свежая версия pptpd :)

Из винды всё проще. Создать подключение - подключение к сети на рабочем месте - подключенме к vpn - имя - ip. Потом в свойствах включаем шифрование (вроде уже включено по умолчанию). И всё. Вуаля:



Будут вопросы, милости прошу - icq #53819426.

Балансировка двух каналов средствами ipfw под FreeBSD




natd -p 8668 -a ip1
natd -p 8669 -a ip2

ipfw add divert 8668 ip from any to ip1 recv if1
ipfw add divert 8669 ip from any to ip2 recv if2
ipfw add check-state
ipfw add prob 0.5 divert 8668 ip from 192.168.0.0/16 to any xmit if1 keep-state
ipfw add divert 8669 ip from 192.168.0.0/16 to any xmit if1 keep-state
ipfw add fwd gw1 ip from ip1 to any out xmit if1 (если default на if1)
ipfw add fwd gw2 ip from ip2 to any out xmit if2

OpenVPN на Solaris 10



OpenVPN на Solaris 10

Столкнулся на днях с необходимостью поднять на Solaris VPN-сервер. После мучительных поисков пришлось ставить OpenVPN. Есть пакет на blastwave, но лучше всегда собирать самому. Прежде необходимо установить драйвер "tun". Если у вас 64-x разрядная система, то в пакете с sourceforge в файле "solaris/Makefile" надо прописать CFLAGS:


CFLAGS = -m64 -mcmodel=kernel -mno-red-zone -ffreestanding $(DEFS) -O2 -Wall -D_KERNEL -I.



Затем - "make & make install". Драйвер кладется не туда, куда надо, поэтому ручками переместите:


# mv /usr/kernel/drv/tun /kernel/drv/sparcv9


Затем:


# devfsadm -i tun


Выругался? Тогда скачайте драйвер отсюда - этот должен поставиться без проблем ("'./configure', 'make', 'make install').
Если собираете сами, надо еще сначала поставить LZO отсюда ("INSTALL=/usr/ucb/install ./configure", "
make & make install"), потом уже собственно OpenVPN ( "./configure --with-lzo-headers=/usr/local/include --with-lzo-lib=/usr/local/lib", "make & make install"), если ставите с blastwave, то просто устанавливаете openvpn.
Приведу примеры конфигурационных файлов для проверки работоспособности. Свои сертификаты создадите сами, для проверки соединения можно использовать тестовые файлы из архива OpenVPN. Итак, сервер (Solaris):


port 1194
proto tcp-server
dev tun
tls-server
ca /etc/openvpn/tmp-ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh1024.pem
server 192.168.77.0 255.255.255.0
route 192.168.1.0 255.255.255.0
keepalive 10 120
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status /var/log/openvpn-status.log
verb 4
mute 20
writepid /var/run/openvpn.pid


Запуск на сервере (пакет с blastwave идет с rc-скриптом, для теста из консоли можно просто дать команду "openvpn --config /etc/openvpn/openvpn.conf").
Теперь клиент:


dev tun
client
remote 82.*.. 1194 # real IP of Solaris
tls-client
ca /etc/openvpn/tmp-ca.crt
cert /etc/openvpn/client.crt
key /etc/openvpn/client.key
proto tcp-client
comp-lzo


В качестве клиента использовался Debian, где openvpn ставится с помощью "apt-get". Запуск клиента тот же:


# openvpn --config /etc/openvpn/openvpn.conf


Соединение установилось без проблем, чего нельзя сказать о Windows Vista - запущенный на ней OpenVPN GUI-клиент ругался на маску сети, и, провозившись безрезультатно около получаса, я сдался - возможно это причуды Vista и на XP проблем не будет - пробуйте, кому надо.





Мой конфиг сервера:

port 1194
proto tcp-server
dev tun
tls-server
ca /etc/openvpn/tmp-ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh1024.pem
server 10.10.0.0 255.255.255.0
route 172.26.17.0 255.255.255.0 10.10.0.1
route 10.10.0.0 255.255.255.0 10.10.0.1
push "redirect-gateway"
keepalive 10 120
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status /var/log/openvpn-status.log
verb 4
mute 20
writepid /var/run/openvpn.pid

Настройка BIND + DHCPD

2. Настройка первичного(master) DNS сервере и создание прямой и обратной зоны.
Пред.
Глава 3. Настройка DNS сервера След.

________________________________________
2. Настройка первичного(master) DNS сервере и создание прямой и обратной зоны.
Допустим у Вас есть доменное имя mynet.lan Вам хочется сделать свой сервер первичным сервером для этого домена и использовать у себя в сети доменные имена www.mynet.lan, kolya.mynet.lan и т.д. Для этого сначала попрвим файл /etc/named.conf
/////////////////////////////////////////////////////////
key mykey {
algorithm hmac-md5;
secret "IriCelUSbPMypSjImBsiTHMauOumRPMkdBjoxVINAx0vxJZNRKGWzFCKibad";

};
controls {
inet 127.0.0.1 allow { any; } keys { "mykey"; };

// эту строка добавлена здесь для целей которые описанны в главе про DHCP
inet 192.168.1.4 allow { any; } keys { "mykey"; };

// здесь вместо 222.222.222.222 проставте ip DNS сервера вашего провайдера
forwarders { 127.0.0.1; 222.222.222.222; };
forward first;
};
options {
pid-file "/var/run/named/named.pid";
directory "/var/named";
/*
* If there is a firewall between you and nameservers you want
* to talk to, you might need to uncomment the query-source
* directive below. Previous versions of BIND always asked
* questions using port 53, but BIND 8.1 uses an unprivileged
* port by default.
*/
// query-source address * port 53;
};

//
// a caching only nameserver config
//
zone "." {
type hint;
file "named.ca";
};
zone "0.0.127.in-addr.arpa" {
type master;
file "named.local";
};

// Прямая и обратные зоны для домена mynet.lan

zone "mynet.lan" {
type master;
file "mynet.zone";
allow-update { key mykey; };
};

zone "1.168.192.in-addr.arpa" {
type master;
file "mynet.reversed";
allow-update { key mykey; };
};
/////////////////////////////////////////////////////////
Как мы видим в конце файла добавилены две записи "zone". Теперь нам необходимо создать еще 2 файла содержащих прямую и обратную зону.
Создаем файл обратной зоны /var/named/mynet.reversed.
$ORIGIN .
$TTL 86400 ; 1 day
1.168.192.in-addr.arpa IN SOA ns.mynet.lan. ns.mynet.lan. (
2001042703 ; serial
28800 ; refresh (8 hours)
14400 ; retry (4 hours)
3600000 ; expire (5 weeks 6 days 16 hours)
86400 ; minimum (1 day)
)
NS ns.mynet.lan.
$ORIGIN 1.168.192.in-addr.arpa.
$TTL 3600 ; 1 hour
1 PTR router.mynet.lan.
4 PTR ns.mynet.lan.


теперь создаем файл прямой зоны /var/named/mynet.zone
$ORIGIN .
$TTL 86400 ; 1 day
mynet.lan IN SOA ns.mynet.lan. ns.mynet.lan. (
2001042705 ; serial
86400 ; refresh (1 day)
21600 ; retry (6 hours)
3600000 ; expire (5 weeks 6 days 16 hours)
3600 ; minimum (1 hour)
)
NS ns.mynet.lan.
$ORIGIN mynet.lan.
localhost A 127.0.0.1
ns A 192.168.1.4
router A 192.168.1.1
www A 192.168.1.1


По аналогии в конец файла прямой и обратной зон вы можете дописывать все что угодно. Обратите внимание на то что изменения вступают в силу только после изменения поля "serial". Обычно после внесения любых изменений в эти файлы serial увеличивают на 1.




3. Передача(forward) зоны
Иногда необходимо отдать какуюто часть домена для обслуживания другому DNS серверу. Это называется форвардинг зоны. Для этого можно просто добавить примерно такую запись в файл /etc/named.conf
zone "subnet.mynet.lan"{
type forward first;
forwarders {10.10.10.10;};
};
В этом примере subnet.mynet.lan - поддомен который вы передаете DNS серверу с IP 10.10.10.10. С этого момента обращения за доменными именами *.subnet.mynet.lan будут проходить не к вашеиу DNS серверу а к серверу 10.10.10.10
4. Настройка вторичного(secondary) DNS сервера
Иногда необходимо "просекондарить зону" - тоесть настроить свой DNS таким образом чтобы он был вторичным DNS сервером для какой либо зоны. По правилам необходимо чтобы у каждого первичного DNS сервера (master) было как минимум 2 вторичных (slave). Также это может быть необходимо если вам по какимто причинам нужно сделать свой сервер "авторитетным" для какой либо произвольной зоны. Просекондерить свой DNS можно двумя способами:
• С помощью web сервиса на http://secondary.net.ua/
• Настроить свой сервер самостоятельно добавив в файл /etc/named.conf примерно такую запись:
zone "subnet2.mynet.lan" {
type slave;
file "subnet2.mynet.lan.slave";
masters { 10.10.10.10; };
};
В этом примере мы "секондарим" зону subnet2.mynet.lan первичным DNS сервером которой является сервер с IP 10.10.10.10 . после перезапуска DNS сервера должен создаться файл /var/named/subnet2.mynet.lan.slave в котором будет зона которую мы секондарим.
Глава 4. Настройка DHCP сервера
1. Простейший DHCP сервер
2. Настройка динамического DHCP сервера, связанного с DNS
DHCP (Dynamic Host Configuration Protocol), динамический протокол настройки хостов - это протокол, который дает возможность компьютерам в сети получать свои сетевые настройки у сервера. В “сетевые настройки” входит IP-адрес, маска подсети, адрес DNS сервера, шлюз по умолчанию (default gateway). Также DHCP может взаимодействовать с DNS сервером и динамически менять в нем имена хостов. В GNU/Linux протокол DHCP поддерживается демоном dhcpd
1. Простейший DHCP сервер
Установим DHCP сервер:
# urpmi dhcpd
Запуск DHCP сервера:
# /etc/init.d/dhcpd start
Останов DHCP сервера:
# /etc/init.d/dhcpd stop
После установки необходимо создать конфигурационный файл /etc/dhcpd.conf. Можно просто скопировать файл примера:
cp /etc/dhcpd.conf.sample /etc/dhcpd.conf
Далее мы будем вносить изменения в этот конфигурационный файл /etc/dhcpd.conf.
Рассмотрим самый простейший вариант использования DHCP сервера: пусть мы хотим, чтобы все хосты в сети 192.168.1.0/24 получали IP в диапазоне 192.168.1.128-250. Также нам нужно, чтобы машины в сети использовали по умолчанию шлюз 192.168.1.1 и DNS сервер 192.168.1.4. Кроме того нам нужно чтобы клиентская машина знала что она работает в домене mynet.lan.
Настройки такого сервера выглядят следующим образом:
ddns-update-style none;
subnet 192.168.1.0 netmask 255.255.255.0
{
option routers 192.168.1.1;
option subnet-mask 255.255.255.0;
option domain-name-servers 192.168.1.4;
option domain-name "mynet.lan";

range 192.168.1.128 192.168.1.250;
}
В нашем примере первая, обратившаяся за настройками, машина получит адрес 192.168.1.250, следующая 192.168.1.249 ну и так далее.
В случае, если нам нужно, чтобы некоторые компьютеры в сети получали вместо случайных адресов только жестко закрепленный за ними адрес (в соответствии с аппаратным MAC-адресом сетевой карты), тогда можно использовать такую конфигурацию:
ddns-update-style none;
subnet 192.168.1.0 netmask 255.255.255.0
{
option routers 192.168.1.1;
option subnet-mask 255.255.255.0;
option domain-name-servers 192.168.1.4;

range 192.168.1.128 192.168.1.250;

host smith # Вася Сидоров :-)
{
hardware ethernet 00:0c:29:8b:02:e7;
fixed-address 192.168.1.5;
}

host neo # Коля Петров
{
hardware ethernet 00:22:22:22:22:22;
fixed-address 192.168.1.6;
}
}
В этом примере IP-адреса раздаются с привязкой к MAC-адресу сетевой карты. Сетевая карта с MAC 00:0c:29:8b:02:e7 всегда будет получать адрес 192.168.1.5, а сетевая карта с MAC 00:22:22:22:22:22 соответственно адрес 192.168.1.6, а остальные компьютеры в сети будут получать адреса случайным образом в диапазоне с 192.168.1.128 по 192.168.1.250. Если мы хотим чтобы IP-адреса получали только компьютеры, привязанные к MAC, тогда в данном примере нужно закомментировать строку range 192.168.1.128 192.168.1.250;.
2. Настройка динамического DHCP сервера, связанного с DNS
Работает это следующим образом: машина в сети получает случайный IP-адрес и, при получении этого IP, DHCP сервер перенастраивает DNS сервер таким образом, чтобы у компьютеров в сети независимо от того, какой у них в данный момент IP, всегда было одно и тоже доменное имя.
Файлы /etc/named.conf, /var/named/mynet.reversed, /var/named/mynet.zone должны выглядеть точно так, как было описано здесь: Глава 3. Настройка DNS сервера.
Теперь приведем как должен выглядеть файл /etc/dhcpd.conf:
### begin of /etc/dhcpd.conf #################################################
ddns-update-style ad-hoc;

subnet 192.168.1.0 netmask 255.255.255.0
{
option routers 192.168.1.1;
option subnet-mask 255.255.255.0;
option domain-name-servers 192.168.1.4;

range 192.168.1.5 192.168.1.250;

ddns-updates on;
ddns-domainname "mynet.lan";
ddns-rev-domainname "in-addr.arpa";

option domain-name "mynet.lan";

# Этот "secret" нужно пересоздать с помощью команды dnssec-keygen
# он должен быть ОДИНАКОВЫМ в этом файле, а также в
# /etc/named.conf /etc/rndc.conf /etc/rnd.key
key mykey {
algorithm hmac-md5;
secret "IriCelUSbPMypSjImBsiTHMauOumRPMkdBjoxVINAx0vxJZNRKGWzFCKibad";
};

zone mynet.lan. {
primary 192.168.1.4;
key mykey;
}

zone 1.168.192.in-addr.arpa. {
primary 192.168.1.4;
key mykey;
}

host smith # Агент Смит
{
hardware ethernet 00:0c:29:8b:02:e7;
# option host-name "vasya";
ddns-hostname "smith";
}

host neo # Коля Петров
{
hardware ethernet 00:22:22:22:22:22;
# option host-name "kolya";
ddns-hostname "neo";
}
}
### end of /etc/dhcpd.conf #################################################
В этом примере машина с МАС-адресом 00:0c:29:8b:02:e7 получит имя smith.mynet.lan, а машина с МАС-адресом 00:22:22:22:22:22 получит имя neo.mynet.lan. Имена остальных машин будут формироваться на основе запроса DHCP клиента. В случае с M$ Window$ это будет “имя компьютера”.
Для того, чтобы DHCP сервер мог управлять DNS сервером, необходимо также отредактировать следующие файлы: /etc/rndc.conf
###### begin of /etc/rndc.conf ##################
key mykey {
algorithm hmac-md5;
secret "IriCelUSbPMypSjImBsiTHMauOumRPMkdBjoxVINAx0vxJZNRKGWzFCKibad";
};

options {
default-key mykey;
default-server 127.0.0.1;
default-port 953;
};
###### End of /etc/rndc.conf #####################
и /etc/rndc.key
key mykey {
algorithm hmac-md5;
secret "IriCelUSbPMypSjImBsiTHMauOumRPMkdBjoxVINAx0vxJZNRKGWzFCKibad";
};
После выполнения всех этих настроек перезапускаем DNS сервер и DHCP сервер и работаем.

среда, 19 августа 2009 г.

Компиляция ядра Linux




Приходилось проделывать данную операцию. Неплохая статья. Источник, кажется, Opennet.

1. Качаем

Для начала нужно выкачать само ядро [точнее исходники] с сайта http://www.kernel.org

Качайте архив tar.bz2 - он меньше по размеру. Имя файла должно быть примерно таким - linux-2.6.0.tar.bz2 , размер файла около 33 Мбайт. Качайте всегда последнее стабильное ядро.

Если у вас уже есть ядро 2.6.0. , а вам нужно поставить например 2.6.2, то необязательно качать снова 33 Мбайта, можно выкачать заплатки [их также называют еще "патчи", но давайте говорить на русском] и обновить исходники вашего ядра до последней версии. В таком случае вам нужно выкачать все заплатки по возрастанию номеров версии от вашей версии до последней. В данном примере это заплатки 2.6.1 и 2.6.2. Файлы заплаток называются так - patch-2.6.1.bz2 . Их может не быть на главной странице , поищите их на ftp сервере.

Кроме самого ядра нам возможно понадобится выкачать дополнительные заплатки, расширяющие возможности ядра. К примеру, в ядре 2.6 нет поддержки lirc (пульты дистанционного управления). Чтобы эта поддержка была, на ядро нужно наложить соответствующую заплатку.

Для примера возьмем такие заплатки:

1. bootsplash (графическая загрузка Линукса) с http://www.bootsplash.org
2. win4lin (для одноименной программы эмуляции windows) http://www.netraverse.com
3. lirc (поддержка устройств с ПДУ) - на официальном сайте http://www.lirc.org заплаток нет но вы можете их найти с помощью> http://www.google.ru по имени файла

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

1. linux-2.6.0.tar.bz2
2. patch-2.6.1.bz2
3. bootsplash-3.1.3-2.6.0-test9.diff
4. Kernel-Win4Lin3-2.6.0.patch и mki-adapter26_1_3_3.patch
5. patch-lirc-20031219.diff

Хорошо. Теперь подготовим папку, где будем собирать ядро. В Линуксе для сборки из исходников есть специальный каталог /usr/src. Однако по умолчанию писать туда рядовому пользователю запрещено, поэтому сначала дадим себе права. Самый простой способ - запустить консоль, получить права root и командой chmod разрешить всем запись.

[mike@localhost mike]$ su -
Password:
[root@localhost root]# chmod a+w /usr/src
[root@localhost root]#

Копируем исходники ядра ( linux-2.6.0.tar.bz2) в папку /usr/src

Теперь их надо распаковать. Если вы пользуетесь файловым менеджером mc, на файле нажмите F2, а потом "x". Если вы пользуетесь файловым менеджером gentoo (http://linux.alhimia.ru/projects/gentoo/), то щелкните правой кнопкой и выберите Действия - РаспаковатьСюда.

Получился каталог linux-2.6.0. Переименуйте его, например, в linux-2.6.1-my

Копируем все заплатки туда и переходим к следующему пункту.
3 Компилируем
3.1 Подготовка

Для начала давайте посмотрим файл Makefile. Нас интересуют первые 4 строчки

VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 1
EXTRAVERSION =
...

Измените четвертую строку на

EXTRAVERSION = my

Это приведет к тому, что сделанное нами ядро будет называться linux-2.6.1-my. Если нам нужно будет несколько вариантов ядра 2.6.1, то можно снова изменить строчку EXTRAVERSION=my2, скомпилировать ядро еще раз и получить ядро linux-2.6.1-my2. ,что позволит при загрузке выбирать вариант ядра.
3.2 Чистка

Запустите команду make mrproper

[mike@localhost linux-2.6.1-my]$ make mrproper
RM $(CLEAN_FILES)
Making mrproper in the srctree
RM $(MRPROPER_DIRS) + $(MRPROPER_FILES)
[mike@localhost linux-2.6.1-my]$

Эта команда нужна для удаления временных файлов, созданных при предыдущей сборке. Она удаляет также все настройки, которые вы сделали во время прошлой сборки. (Настройки лежат в файле .config, если есть желание перенесите куда-нибудь этот файл, выполните чистку, а потом верните обратно)
3.3 Настройка ядра.

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

Ядро может быть монолитным, а может быть модульным. Что это означает? Монолитное ядро - это просто один файл, который грузится при старте системы, и сидит в оперативке до выключения компьютера. Те возможности, которые заложены в этом файле, не подлежат изменению. Если включить все возможности в ядро, получаем очень большое и очень медленное ядро. Если сделать маленькое и быстрое ядро, то придется пожертвовать возможностями. Кроме того с таким ядром не смогут работать такие коммерческие программы как Win4Lin . На таком ядре не поставить драйвер видеокарты от фирмы Nvidia, что ставит крест на использовании этих ядер на домашних игровых компьютерах с этими видеокартами. В чем же преимущество монолитного ядра? Оно хорошо своей более высокой защищенностью и более простым использованием. При старте ядро обладает всеми возможностями, которые в него заложены. Ядро в этом случае располагается в каталоге /boot и имеет имя vmlinuz-xxxx.

Модульное ядро - это тоже же файл, который грузиться при загрузке с диске как и в случае с монолитным ядром, но плюс к есть нему набор файлов, которые называются модулями. Эти файлы по сути - возможности ядра, которые вы можете подключить к ядру и отключить от него без перезагрузки компьютера. Ядро которое у вас поставилось вместе с дистрибутивом - модульное. В модульном ядре все возможности, которые могут быть выведены в отдельный файл, т.е. модуль, - делаются модульными. Самый большой плюс модульного ядра - то что в него можно включить абсолютно все возможности, на что может ядро, все устройства, все файловые системы и т.п. Ядро в результате получается небольшим (в оперативной памяти) , быстрым и гибким. Минусы такого подхода - собственно в необходимости работы с модулями, вы не получите возможности модуля, пока его не загрузите. К счастью, большинство модулей грузиться автоматически, а остальные грузятся при старте системы загрузочными скриптами, избавляя вас от необходимости грузить вручную десятки модулей. В этом случае ядро представлено тем же файлом /boot/vmlinuz-xxxx и содержимым каталога /lib/modules/<версия ядра>. Кроме того модульному ядру нужен специальный образ загрузки т.н. initrd. Этот образ содержит все необходимые модули которые позволяют ядру загрузить ситему. Без этих модулей оно неспособно подключить системный раздел жесткого диска и прочитать файлы. Initrd файл располагается в каталоге /boot и имеет имя initrd-xxxx.

Где же истина? Как всегда, посередине. Какие-то возможности вы включаете в ядро, какие-то делаете модулями. Какие именно? Те возможности которые вам нужны постоянно - включаете, например драйвер жесткого диска, на котором лежит система. Если к вам приходит друг раз в месяц со своей usb фотокамерой - делайте драйвер usb и камеры модулями. Если сомневаетесь, нужна ли вам та или иная особенность - ставьте модулем. Посмотреть какие модули сейчас загружены в систему вы можете командой lsmod

Если ваш дистрибутив собран для 2.4 ядра (например АСПЛинукс 9.0), то у вас могут быть проблемы с загрузкой модулей, связанные с тем что в 2.6 изменились названия модулей. Поэтому я рекомендую включать все, что вам точно необходимо, в ядро.

Итак, настройка производится на выбор одной из четырех команд

1. make xconfig
2. make menuconfig
3. make config
4. make oldconfig

Первый вариант для пользователей, у которых есть графика - у вас запустится графическая программка для настройки, остальные - для консоли. Второй вариант предлагает текстовые меню для настройки. Третий задает 1000 и 1 вопрос. Четвертый нужен если у нас уже есть сформированный файл настроек .config (можно использовать файл настроек от старого ядра), при этом варианте задаются только те вопросы которые появились в этой версии ядра. Первый вариант нам наиболее симпатичен. Итак вперед!

Если вы хотите возможность оформить модулем ставьте точку (m для консоли), Если включить в ядро галочку (* или y)

Для тех кто не знает английский привожу примерную настройку рабочей станции. Естественно, оговорюсь, что я не считаю свой подход единственно правильным, не претендую на 100% понимание всего что есть в ядре, - как я это понимаю, так и привожу в этом документе

сохраняются в файле .config (скрытый). В будущем, если вы будете переходить на следующую версия ядра, вы может после установки заплаток скопировать этот файл в каталог с исходниками ядра и выполнить в консоли команду make oldconfig. В этом случае вам не придется отвечать на все эти вопросы, вам будут заданы вопросы только по новым возможностям.
3.4 Сборка и установка

Теперь осталось собрать ядро. Процесс сборки и установки ядра можно выполнить одной командой (от пользователя root)

make bzImage modules modules_install install

а можно разбить на несколько этапов

от простого пользователя:
make bzImage
(собрать ядро)
make modules
(собрать модули

от пользователя root:
make modules_install
(установить модули)
make install
(установить ядро)

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

от простого пользователя:
make bzImage modules

от root:
make modules_install install

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

Если вы слишком увлекаетесь заплатками, то ядро может и не собраться (на определенном этапе сборка прервется и вы увидите код ошибки). В этом случае вам придется либо отключать модули на которых происходит ошибка, либо повторять все сначала уже с меньшим кол-вом заплаток. Если у вас ядро без заплаток не желает компилироваться, то это говорит о неправильной установке дистрибутива, либо нехватки компилятора или библиотек. Попробуйте установить дистрибутив в режиме "Разработка" (не забудьте добавить КДЕ и другие пользовательские программы). Дистрибутивы ALT Linux Junior и ASPLinux ChipEdition - на самом деле не дистрибутивы, а, говоря интеллигентно, демо-версии, поэтому не удивляйтесь, если у вас ничего не выйдет.

Когда ядро будет собрано, у вас должны появиться следующие файлы

/boot/vmlinuz-2.6.1-my
/boot/System.map-2.6.1-my
/boot/initrd-2.6.1.img
и каталог модулей
/lib/modules/2.6.1-my

Ядро установлено, теперь надо настроить загрузчик.
4. Настройка загрузчика

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

Три самых распространенных загрузчика

1. LILO
2. GRUB
3. ASPLoader

Первый из них - это самый старый (но это не значит самый обделенный возможностями). Отличается хорошей надежностью и большими возможностями.

GRUB - самый мощный по возможностям загрузчик. Очень хорош.

У ASPLoader есть две оригинальные особенности - поддержка мыши и простота. Однако дизайн у него уж больно смахивает на маздаевский. Да и по возможностям слабоват.

Если у вас установлен АСПЛинукс, то после установки ядра grub будет затерт ASPLoader'ом. Вам надо будет заново установить grub.

!!! Никогда не удаляйте настройки старого ядра, это может привести к невозможности загрузки системы обычным образом, если сделанное вами ядро не работоспособно !!!
4.1 Настройка ASPLoader

1. Для начала подправьте файл настроек

Он расположен в файле /etc/aspldr.conf

[linux1062672691@Linux(2.6.1-my)]
icon linux
kernel /boot/vmlinuz-2.6.1-my root=/dev/hda5 hdc=ide-scsi vga=791 splash=silent
initrd /boot/initrd-2.6.1-my.img

[SEPARATOR]

[asplinux1@ASPLinux(2.4.20-9asp)]
icon linux
kernel /boot/vmlinuz-2.4.20-9asp root=/dev/hda5 ro
initrd /boot/initrd.2.4.20-9asp.img

Если вы не используете initrd (все драйверы необходимые для загрузки системы включены в ядро и bootsplash не используется), тогда соответствующую строчку можно удалить

2. Дайте команду aspldr для записи изменений в загрузчик

Для дополнительной информации смотрите man aspldr.conf
4.2 Настройка GRUB

1. Подправьте файл настроек

/boot/grub/grub.conf

title linux-2.6.1-my
kernel /vmlinuz-2.6.1-my root=/dev/hda5 hdc=ide-scsi vga=791 splash=silent
initrd /initrd-empty.splash
boot

title linux-2.4.20
kernel /vmlinuz-2.4.20-9asp root=/dev/hda5
initrd /initrd.2.4.20-9asp.img
boot

2. Если у вас установлен АСПЛинукс, то после установки ядра grub в MBR будет затерт ASPLoader'ом. Вам надо будет заново установить grub. Под пользователем root введите в консоли

grub
grub> root (hd0,0) (/boot раздел расположен на первом разделе первого жесткого диска)
Filesystem type is ext2fs, partition type 0x83

grub> setup (hd0) (записать загрузчик в MBR первого жесткого диска)
Checking if "/boot/grub/stage1" exists... no
Checking if "/grub/stage1" exists... yes
Checking if "/grub/stage2" exists... yes
Checking if "/grub/e2fs_stage1_5" exists... yes
Running "embed /grub/e2fs_stage1_5 (hd0)"... 16 sectors are embedded... succeeded
Running "install /grub/stage1 (hd0) (hd0)1+16 p (hd0,0)/grub/stage2 /grub/grub.conf"... succeeded
Done.

grub> quit

Подробнее о настройках grub смотрите info grub
5. Доводка вашего дистрибутива.

Перед тем как загрузиться с ядра 2.6 необходимо подправить некоторые вещи в нашем дистрибутиве. (Имеется в виду дистрибутив АСПЛинукс 9.0)

Первое, нужны новые утилиты для работы с модулями - modutils. Вы их можете найти с помощью ресурса http://www.rpmfind.net. Качайте последнюю версию для RedHat (Fedora).

Для установки пакетов нужно под пользователем root ввести команду

rpm -Uhv <имя файла rpm>

Второе, загрузочные скрипты ошибочно отключают автозагрузку модулей.

Для этого в файле /etc/rc.d/rc.sysinit найдите следующие строки

if ! LC_ALL=C grep -iq nomodules /proc/cmdline 2>/dev/null && [ -f /proc/ksyms ]; then
USEMODULES=y
fi

и переделайте их к виду

if ! LC_ALL=C grep -iq nomodules /proc/cmdline 2>/dev/null ; then
USEMODULES=y
fi

Кроме этого, возможны проблемы с подключением модулей, которые имеют разные названия в версиях ядра 2.4 и 2.6. В этой ситуации помогает включение этих модулей в ядро.

На этом все. Добро пожаловать в Линукс 2.6!

Windows XP в роли router

На корпоративном буке стоит XP, есть инет. Часто приходится раздавать инет в локалку, когда прихожу в гости к офлайновым друзьям. Вот собственно последовательность действий, после которых XP начинает натить :)

Внимание! Некорректное использование редактора системного реестра может привести систему в неработоспособное состояние и потребовать проведения полной переустановки операционной системы. Microsoft не несет ответственности за некорректное использование редактора реестра.

Для включения маршрутизации пакетов TCP/IP выполните следующие действия:

1. Запустите редактор системного реестра (Regedt32.exe).
2. Откройте следующий раздел:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
3. Внесите следующие изменения:
Параметр: IPEnableRouter
Тип данных: REG_DWORD
Значение: 1
Значение "1" включает маршрутизацию пакетов TCP/IP для всех сетевых подключений, установленных на данном компьютере.
4. Значение "1" включает маршрутизацию пакетов TCP/IP для всех сетевых подключений, установленных на данном компьютере. Закройте редактор реестра.

Информация в данной статье применима к:

* Microsoft Windows XP Home Edition
* Microsoft Windows XP Professional Edition



Цитата:
слышал ещё про Routing and Remote Access это тоже подходит?
только почему я не могу найти его у себя в папке с администрацией..



1. Остановить и отключить службу WinFirewall/ICS
2.

Код:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"IPEnableRouter"=dword:00000001

3.

Код:
netsh routing ip nat uninstall
netsh routing ip nat install
netsh routing ip nat add interface name=LAN Private
netsh routing ip nat add interface name=3g Full

4. Запустить службу RRAS.


Включить службы
- локатор удаленного вызова процедур RPC
- Маршрутизация и удаленный доступ

соотв выключить...