Linux mini-HOWTO

         

Copyright and License


Copyright (c) 2000 by John E. Danner

Please freely copy and distribute (sell or give away) this document in any format. It's requested that corrections and/or comments be fowarded to the document maintainer. You may create a derivative work and distribute it provided that you:

1.Send your derivative work (in the most suitable format such as sgml) to the LDP (Linux Documentation Project) or the like for posting on the Internet. If not the LDP, then let the LDP know where it is available.

2.License the derivative work with this same license or use GPL. Include a copyright notice and at least a pointer to the license used.

3.Give due credit to previous authors and major contributors.

If you're considering making a derived work other than a translation, it's requested that you discuss your plans with the current maintainer.



ДИНАМИЧЕСКИЕ IP АДРЕСА (Dial-up или DHCP)


Прочитайте внимательно эту главу и главу "Порядок действий", если ваши IP-адреса меняются при каждом вашем подключении к Интернету.

Спасибо Peter Illmayer за то, что дал мне этот скрипт : (Это лучше всего работает у тех, у кого динамические IP адреса...) В debian, я создал файл переадресаций (forward) в /etc/ppp/ip-up.d и добавил туда следующие строки

#!/bin/sh ppp_ip="`/sbin/ifconfig ppp0 | grep 'inet addr' | awk '{print $2}' | sed -e 's/.*://'`" /usr/sbin/ipmasqadm portfw -f /usr/sbin/ipmasqadm portfw -a -P tcp -L ${ppp_ip} 6702 -R 192.168.0.2 6702

Это было в Linux-е с ядром версии 2.2.x kernel, с установленной утилитой ipmasqadm и с соответствующими скомпилированными модулями ядра. Charles J. Fisher подсказал, что подобный скрипт может быть использован и в случае применения DHCP: просто добавьте следующие строки в скрипт, запускающий DHCP, после того, как ваша машина уже получила IP-адрес.

net_ip="`ifconfig eth0 | awk '/inet/ {sub(/addr:/,"",$2); print $2}'`" /usr/sbin/ipmasqadm portfw -f /usr/sbin/ipmasqadm portfw -a -P tcp -L ${net_ip} 6702 -R 192.168.1.2 6702

Конечно, чем больше машин используют Napster за вашим IP-маскарадингом, тем больше портов вам придется перенаправить.



IP-Маскарадинг+Napster мини-HOWTO


John E. Danner

Перевод: Станислав Рогин, ASPLinux

Этот мини-HOWTO описывает механизм использования системы Napster пользователями, находящимися за IP маскарадинг-firewall.



ПЕРЕД НАЧАЛОМ РАБОТЫ


Я проверил работу моего "обходного пути" со следующими параметрами:

Napster версия 2.0 Beta 5a (для Windows), см. Официальную страницу Napster

Один внешний IP адрес выхода в Интернет.

В настоящий момент 6 компьютеров работают за IP-маскарадингом, 4 из них используют Napster.

Установлен Linux с ядром версии 2.2.12-20 (Дистрибутив RedHat v6.1)

Утилита IPMASQADM версия 0.42, скачайте ее здесь здесь



ПОДДЕРЖКА ЭТОГО ДОКУМЕНТА


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



ПОРЯДОК ДЕЙСТВИЙ


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

Установите Napster на Windows-машинах клиентов

После установки Napster и настройки всех установок пользователей, эта версия начнет процедуру под названием "Finding Acceptable Local Data Port" (поиск приемлимого локального порта данных), и через короткое время появится сообщение об ошибке. Внимание: если у вас уже установлен Napster версии 2.0 beta 5a, тогда в меню "Файл" (File) выберите "Свойства" (Properties).

Здесь выберите второй пункт "Я не использую Firewall или мой Firewall астроен - Использовать порт TCP:" (I am not behind a firewall or I configured my firewall - Use TCP port:)

Введите уникальный номер порта. Каждому компьютеру, использующему Napster, нужно будет сопоставить свой номер порта. Самое простое - использовать последнюю цифру IP-адреса. Например: если адрес компьютера 192.168.1.2, то наиболее просто будет запомнить число 6702. Внимание: убедитесь в том, что вы не используете уже занятые номера портов (например 21, 110, и т.п....полный список находится в файле /etc/services)

Повторите пункты 1 - 4 для всех систем, которые будут использовать Napster.

Теперь войдите в вашу систему, осуществляющую IP-маскарадинг, и измените файл стартовой конфигурации (у меня это /etc/rc.d/rc.local) Следующие команды проводят соединение к клиентским частям Napster на машинах, находящихся за вашим IP-маскарадингом. (добавьте их в файл стартовой конфигурации - необходимо добавить по одной команде для каждой машины, использующей Napster):

/usr/sbin/ipmasqadm portfw -a -P tcp -L xxx.xxx.xxx.xxx 6702 -R 192.168.1.2 6702 /usr/sbin/ipmasqadm portfw -a -P tcp -L xxx.xxx.xxx.xxx 6703 -R 192.168.1.3 6703 /usr/sbin/ipmasqadm portfw -a -P tcp -L xxx.xxx.xxx.xxx 6704 -R 192.168.1.4 6704 /usr/sbin/ipmasqadm portfw -a -P tcp -L xxx.xxx.xxx.xxx 6705 -R 192.168.1.5 6705

Где XXX.XXX.XXX.XXX - это IP-адрес Linux-машины, осуществляющей IP-маскарадинг (Интернетовский IP-адрес). Внимание: Если у вас трудности с утилитой IPMASQADM или с IP-маскарадингом вообще, то смотрите IPMASQ-HOWTO. Этот документ написан для тех, у кого системы работают правильно. В документе IPMASQ-HOWTO подробно описывается система переадресации портов и IP-маскарадинга вообще.



РЕЗУЛЬТАТ


Подобная система позволит Napster-у работать за машиной с IP-маскарадингом. Надеюсь, что эти советы помогут вам работать так же хорошо, как помогли мне! Пожалуйста, отправляйте комментарии/предложения/претензии по адресу jed204@psu.edu



у меня возникла проблема, состоящая


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

Анатомия IP адресов


Перед погружением в изучение организации подсетей, мы должны усвоить основы IP-адресов.



Что такое подсети?


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

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



Другие источники информации


Имеется ряд других источников информации, которые уместны для более детального изучения. Рекомендуемые автором:

The Linux Network Administrators Guide.

The Linux System Administration Guide.

TCP/IP Network Administration by Craig Hunt, published by O'Reilly and Associates.



IP адреса характеризуют сетевые соединения, а НЕ компьютеры!


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

А что стоит за этим?

На настоящий момент, много (если не большинство) компьютеров в IP-сети обладают единственным сетевым интерфейсом (и имеют, как следствие, единственный IP адрес). Компьютеры (и другие устройства) могут иметь несколько (если не много) сетевых интерфейсов - и каждый интерфейс будет иметь свой IP адрес.

Так, устройство с 6 работающими интерфейсами (например, маршрутизатор) будет иметь 6 IP адресов - по одному на каждую сеть, с которой он соединен.

Несмотря на это, большинство людей ссылаются на адреса машин, когда это касается IP адреса. Только помните, что это упрощенная форма для IP-адреса конкретного устройства на этом компьютере. Много (если не большая часть) устройств в Internet имеет только один интерфейс и, таким образом, единственный IP адрес.



IP-адреса как "четверка чисел разделенные точками"


В текущей (IPv4) реализации IP адресов, IP адрес состоит из 4-х (8-битовых) байтов - он представляет из себя 32 бита доступной информации. Это приводит к числам, которые являются довольно большими (даже когда написано в представлении десятичных чисел). Поэтому для удобства (и по организационным причинам) IP адреса обычно записываются в виде четырех чисел, разделенных точками. IP адрес



Как организуются подсети


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

Установите физическую связанность (сетевые соединения - типа маршрутизаторов);

Решите, какой (большой/маленькой) должна быть каждая подсеть, т.е. какое количество IP-адресов требуется для каждого сегмента.

Вычислите соответствующую сетевую маску и сетевые адреса;

Установите каждому интерфейсу на каждой сети его собственный IP адрес и соответствующую сетевую маску;

Установите направления связи на маршрутизаторах и соответствующих шлюзах, направления связи и/или заданные по умолчанию направления связи на сетевых устройствах;

Протестируйте систему, исправьте ошибки и расслабьтесь!

В качестве примера предположим, что мы - организуем подсеть класса C с номером: 192.168.1.0

Это предусматривает максимум 254 связанных интерфейсов (хостов), плюс обязательный сетевой номер (192.168.1.0) и широковещательный адрес (192.168.1.255).



Классы сетей


Имеются три класса IP адресов

IP адрес сети класса A использует крайние левые 8 битов (первый байт) для идентификации сети, оставшиеся 24 бита (три байта) идентифицируют сетевые интерфейсы компьютера в сети. Адреса класса A всегда имеют крайний левый бит, равный нулю - поэтому первый байт адреса принимает значения от 0 до 127. Так доступно максимум 128 номеров для сетей класса A, с каждым, содержащим до 33,554,430 возможных интерфейсов.

Однако, сети 0.0.0.0 (известный как заданный по умолчанию маршрут) и 127.0.0.0 (зарезервированы для организации обратной связи (loopback)) имеют специальные предназначения и не доступны для использования, чтобы идентифицировать сети. Соответственно, могут существовать только 126 номеров для сети класса A.

IP адрес сети класса B использует крайние левые 16 битов (первые 2 байта) для идентификации сети, оставшиеся 16 бит идентифицируют сетевые интерфейсы компьютера в сети. Адреса класса B всегда имеют крайние левые два бита, установленные в 1 0. Сети класса B имеют диапазон от 128 до 191 для первого байта, каждая сеть может содержать до 32,766 возможных интерфейсов.

IP адрес сети класса C использует крайние левые 24 бита для идентификации сети, оставшиеся 8 бит идентифицируют сетевые интерфейсы компьютера в сети. Адрес сети класса C всегда имеет крайние левые 3 бита, установленные в 1 1 0 или диапазон от 192 до 255 для крайнего левого байта. Имеется, таким образом, 4,194,303 номеров, доступных для идентификации сети класса C, каждая может содержать до 254 сетевых интерфейса. (однако, сети класса C с первым байтом, большим, чем 223, зарезервированы и недоступны для использования).

Резюме:



Маршрутизация


Если вы используете Linux машину с двумя сетевыми картами, чтобы установить маршрут между двумя (или более) подсетями, вам нужно иметь ядро, скомпилированное с поддержкой пересылки IP-пакетов (Forwarding). Сделайте следущее:



Организация IP-подсетей


Robert Hart
hartr@interweft.com.au


Перевод: Александр Ермолаев, ASPLinux

В этом документе содержится информация о том, как и почему организуются IP-подсети, которые используют отдельную область IP-адресов класса A, B или C, для правильного функционирования нескольких связанных подсетей.



Почему организуются подсети?


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

Это вызвало очевидные проблемы с огромным трафиком и администрированием, если все компьютеры на большом сайте должны быть связаны с той же самой сетью: попытка управлять таким огромным чудовищем была бы кошмаром и сеть бы терпела крах (конечно почти) от загрузки собственным трафиком.

Введите организацию подсетей: адрес сети класса A может быть разбит на несколько (если не много) отдельных сетей. Управлять каждой отдельной сетью значительно проще.

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

Другие причины для организации подсетей:

Физическое размещение сайта может быть ограничено (длина кабеля), ясно, что физическая инфраструктура может быть связана, требуя множественные сети. Организация подсетей позволяет это сделать, используя единственный сетевой номер. Сейчас это обычно делают интернет-провайдеры, которые желают дать своим постоянным клиентам с локальными сетями статические IP адреса.

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

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

Имеется оборудование, которое использует несовместимые технологии организации сетей, и есть потребность связать их (как упомянуто выше).



Сетевая маска


Сетевая маска более правильно называется маской подсети. Однако, это, вообще, упоминается как сетевая маска.

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

Стандартная маска (под-) сети - содержит единицы в разрядах поля сети и нули в остальных разрядах. Это означает, что стандартные сетевые маски для трех классов сетей выглядят так:

маска для сети класса А: 255.0.0.0

маска для сети класса B: 255.255.0.0

маска для сети класса C: 255.255.255.0

Есть две важные вещи относительно сетевой маски, которые нужно помнить:

Сетевая маска воздействует только локально (где локальный означает - на этом специфическом сетевом сегменте);

Сетевая маска - это не IP адрес - она используется для того, чтобы изменить интерпретацию локальных IP адресов.



Сетевые адреса, адреса интерфейсов и широковещательные адреса


IP адреса могут иметь три возможных значения:

адрес IP сети (группа IP устройств, совместно использующих доступ к среде передачи - все находятся на том же самом сегменте Ethernet). Если в поле номера сети биты установлены в 0, то по умолчанию считается, что этот узел принадлежит той же самой сети, что и узел, с которого отправлен пакет;

широковещательный адрес IP сети (сообщение с таким адресом назначения должно рассылаться всем узлам, находящимся в той же сети, что и источник этого пакета). Все разряды IP адреса установлены в 1.

адрес интерфейса (типа платы Ethernet или PPP интерфейс на компьютере, маршрутизаторе, сервере печати и т.д.).Эти адреса могут иметь любое значение в битах поля узла, исключая все нули или все единицы, т.к. если будут все нули - адрес сети, все единицы - широковещательный адрес.

Резюме:



Таблицы маршрутизации


Позвольте нам предположить, что компьютер с Linux действует, как маршрутизатор для этой сети. Он будет иметь три сетевых карты к локальным сетям и, возможно, четвертый интерфейс для связи с Internet (который был бы шлюзом по умолчанию).

Пусть компьютер с Linux использует самый первый доступный IP адрес в каждой подсети. Конфигурация сетевых карт будет следующей:

Interface IP Address Netmask eth0 192.168.1.1 255.255.255.192 eth1 192.168.1.65 255.255.255.192 eth2 192.168.1.129 255.255.255.128

Таблица маршрутизации при данной конфигурации будет такой

Destination Gateway Genmask Iface 192.168.1.0 0.0.0.0 255.255.255.192 eth0 192.168.1.64 0.0.0.0 255.255.255.192 eth1 192.168.1.128 0.0.0.0 255.255.255.128 eth2

На каждой из подсетей главные компьютеры были бы конфигурированы с их собственным IP адресом и сетевой маской (соответствующий специфической сети). Каждый главный компьютер объявил бы Linux PC своим шлюзом/маршрутизатором, определяя IP адрес маршрутизатора для его сетевой карты на той части сети.

Robert Hart Мельбурн, Австралия Март 1997.



Установка физической связанности


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

Вам будет также нужен механизм, чтобы связать различные сегменты вместе (маршрутизаторы, конверторы, хабы и т.д.).

Детальное обсуждение этого здесь невозможно. Если вам нужна справка, имеются сетевые консультанты по проектированию/установке сетей, которые обеспечивают это обслуживание. Бесплатный совет доступен также в ряде конференций (например, comp.os.linux.networking).



Установление размеров подсети


Каждая сеть имеет два адреса, не используемых для сетевых интерфейсов (компьютеров) - сетевой номер сети и широковещательный адрес. Когда вы организуете подсеть, каждая из них требует собственный, уникальный IP адрес и широковещательный адрес, и они должны быть правильными внутри диапазона адресов сети, которую вы организуете.

Таким образом, разделение сети на две подсети приводит к тому, что образуются два адреса сети и два широковещательных адреса - увеличивается число "неиспользуемых" адресов интерфейсов; создание 4-х подсетей приведет к образованию 8-и неиспользуемых адресов интерфейсов и т.д.

Фактически, самая маленькая пригодная для использования подсеть состоит из 4 IP адресов:

Два используются для интерфейсов - один для маршрутизатора в этой сети, другой для единственной машины в этой сети.

Один адрес сети.

Один широковещательный адрес.

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

В принципе, вы можете разделить ваш сетевой номер на 2^n (где n на единицу меньше, чем число битов поля машины в вашем сетевом адресе), получаем одинаковые размеры подсетей (однако, вы можете делить подсети на подсети, и/или объединять их).

Так будьте реалистом, относительно разработки вашей сети - вам необходимо минимальное число отдельных локальных сетей, которые является совместимыми по управлению, физически, по оборудованию и безопасности!



В этом документе описывается разбивка


В этом документе описывается разбивка единственного IP сетевого адреса так, чтобы он мог использоваться на нескольких различных сетях.
В этом документе, в основном, содержится материал по сетевым адресам класса C, но принципы применимы и к сетям класса A и B.

Вычисление сетевой маски и сетевых адресов


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

Сетевая маска для сети, не разделенной на подсети - это просто четверка чисел, которая имеет все биты в полях сети, установленные в '1' и все биты машины, установленные в '0'.

Таким образом, для трех классов сетей стандартные сетевые маски выглядят следующим образом:

Класс A (8 сетевых битов) : 255.0.0.0

Класс B (16 сетевых бита): 255.255.0.0

Класс C (24 сетевых бита): 255.255.255.0

Способ организации подсетей заимствует один или более из доступных битов номера хоста и заставляет интерпретировать эти заимствованные биты, как часть сетевых битов. Таким образом, чтобы получить возможность использовать, вместо одного номера подсети, два, мы должны заимствовать один бит машины, установив его (крайний левый) в сетевой маске в '1'.

Для адресов сети класса C это привело бы к маске вида 11111111.11111111.11111111.10000000 или 255.255.255.128

Для нашей сети класса C с сетевым номером 192.168.1.0, есть несколько случаев:

Число Число машин подсетей на сеть Сетевая маска 2 126 255.255.255.128 (11111111.11111111.11111111.10000000) 4 62 255.255.255.192 (11111111.11111111.11111111.11000000) 8 30 255.255.255.224 (11111111.11111111.11111111.11100000) 16 14 255.255.255.240 (11111111.11111111.11111111.11110000) 32 6 255.255.255.248 (11111111.11111111.11111111.11111000) 64 2 255.255.255.252 (11111111.11111111.11111111.11111100)

В принципе, нет абсолютно никакой причины следовать вышеупомянутым способам организации подсетей, где сетевые биты добавлены от старшего до младшего бита хоста. Однако, если вы не выбираете этот способ, то в результате IP адреса будут идти в очень странной последовательности! Но в результате, решение, к какой подсети принадлежит IP адрес, получается чрезвычайно трудным для нас (людей), поскольку мы не слишком хорошо считаем в двоичной арифметике (с другой стороны, компьютеры, с равным хладнокровием, будут использовать любую схему, которую вы им предложите).

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



IP-адреса, имена доменов и подсети


Для многих, кто использует написанное выше, смена IP-адреса не будет проблемой. Это те, обычные, простые пользователи, у которых обычные dialup входы, и они особенно не загружают себя техническими тонкостями. Им можно пропустить этот раздел и перейти туда, где описываются важные вещи в правильной настройке их системы. Новички могут пропустить раздел о постоянных IP-адресах, доменах и подсетях, и прочитать только самый конец этого раздела.

Получение постоянного IP-адреса может быть бесплатным у вашего ISP, поэтому, если вы не уверены, спросите их. Лично я бы заплатил за постоянный IP-адрес. Это позволит посылать и принимать электронную почту, используя уникальный IP-адрес или домен, и т.п. Если вы хотите получить постоянный IP-адрес, напишите письмо своему провайдеру и попросите его о выделении вам постоянного IP-адреса.

Когда вы получите свой постоянный IP-адрес, используйте grep в каталоге /etc, чтобы найти, где еще остались ваши старые IP-адреса. Мне пришлось изменять файлы в каталоге sendmail-а и файл /etc/hosts. Существуют еще несколько ключевых файлов, которые вы сможете найти при помощи grep. Откройте файл /etc/hosts, и добавьте свой новый IP-адрес в стандартном формате. Перезагрузите машину: теперь все должно быть готово.

Вам будет необходимо изменить свой chat-скрипт для того, чтобы он отвечал новым условиям. Если у вас автоматически запускается PPP после установления соединения, скажите системному администратору вашего провайдера, чтобы они убедились в том, что их PPP-система знает, что у вас постоянный IP-адрес, и выделяет его, вместо нового. Если вы попадаете в приглашение оболочки (shell prompt), и вам надо написать ppp или что-то подобное для установления соединения, то вместо того, что указано выше, впишите в файл /ppp-connect следующую строку, после того, как он отследит приглашение оболочки провайдера ($ или что-то другое).

/usr/sbin/pppd :Ваш_IP_Адрес

Вместо фразы Ваш_IP_Адрес, впишите постоянный IP-адрес, который вам дал провайдер. Убедитесь в том, чтобы эту строку ограничить кавычками, когда впишите ее в chat-скрипт. Если это не сработает - проконсультируйтесь у своего ISP, относительно местоположения PPPd в его системе, и спросите его, какую команду давать. Вы также можете попробовать оставить все, как есть, и посмотреть, вдруг сервер распознает вас и выделит вам правильный адрес.

Следующее, что вам видимо понадобится - это имя домена. Я знаю, что в Австралии домены .asn.au и .org.au бесплатны. В США, домен .us тоже бесплатный, но они очень долго выделяются. Если вы в Австралии, обратитесь по адресу http://www.aunic.net/ для регистрации домена. В Соединенных Штатах обратитесь по адресу http://www.internic.net/ .

Для регистрации домена вам будет необходимо получить доступ к DNS-сервисам и еще к нескольким подобным вещам. Если ваш провайдер не предоставляет таких услуг, выкиньте официальный .asn.au или какой-то другой домен в форточку, и получите интернетовский домен Monolith Internet Domain.

Monolith предлагает бесплатные интернет-домены, кому угодно, по всему миру. Все происходит без прямого контакта ,через web-формы в вашем обозревателе (browser). Ваш домен будет иметь форму Ваш_Выбор.ml.org. Monolith предоставляет для вас DNS-сервис. Если вы хотите получать и отправлять почту для этого домена, попросите вашего провайдера быть вашим почтовым ящиком (Mail Exchanger).

Посетите http://www.ml.org/ и заполните все формы, войдите в базу данных с именем пользователя и паролем, и получите БЕСПЛАТНЫЙ домен. Вам надо будет ввести свой IP-адрес, поэтому приготовьте его заранее. Ваш домен появится в DNS через пару дней.

Хорошо, теперь перейдем к разделу для новичков или для тех, у кого нет постоянного IP-адреса или имени домена. Все, что вам надо, это отредактировать файл /etc/hosts под правами пользователя root, назвать ваш сайт как-нибудь не очень некрасиво, дать ему адрес 10.10.10.10 или нечто подобное и перезагрузить компьютер..

Вот и все, вы только что настроили компьютер для работы с pppd и chat за десять минут. Теперь перейдем к разделу, где описывается Электронная Почта.



Электронная почта в вашем Linux-е


Один из самых важных аспектов Интернета, это удивительная возможность посылать почту внутри страны и за границу. Для Linux есть очень много простых почтовых программ для текстового режима. Та, что мы опишем здесь, называется Pine (Program for Internet Mail and News(Программа для почты и новостей Интернета)), сделанная в Вашингтонском Университете, и программу fetchmail для получения почты, автор Eric S. Raymond. Обе программы должны быть включены в ваш дистрибутив Linux.

Fetchmail - это программа, принимающая вашу почту с сервера при помощи протокола POP, переносящая ее в вашу машину, и удаляющая ее с сервера, как делают, например, Eudora или Microsoft Internet Mail/Exchange. Для настройки и автоматизации fetchmail, вам необходим файл в вашем домашнем каталоге под именем .fetchmailrc. Просто откройте /.fetchmailrc (Запомните: это вы делаете под своим именем, а не под root-ом в вашем любимом редакторе), и взгляните на опции командной строки, приведенной ниже:

poll mail.yourisp.com proto pop3 user учетное_имя password пароль

user login_name with pass your_passwd is login_name here

Все, что вам нужно сделать, это заменить mail.yourisp.com именем почтового сервера своего ISP, пароль - своим паролем, и учетное_имя - своим именем входа.

Важная деталь, которую стоит заметить. Чтобы Pine и fetchmail работали корректно, ваше учетное имя должно соответствовать имени входа, которое вы используете у провайдера. То есть локальное имя входа должно совпадать с именем входа в почтовый сервер и с вашим почтовым (e-mail) адресом.

Затем убедитесь, что у файла .fetchmailrc правильно проставлены права (чтение/запись только владельцем). Fetchmail можно запустить двумя способами, в стандартном режиме (когда он получает почту от сервера и прекращает работу), или в режиме демона (daemon) (Когда он остается активен и проверяет/загружает почту каждые X секунд). Чтобы использовать режим демона, наберите fetchmail -a -d(Секунд между запросами). Опция -a включает загрузку всей почты. Чтобы запустит его в обычном режиме, наберите fetchmail -a.

Затем, вам надо будет настроить Pine. Запустите Pine, набрав pine в командной строке, выберите пункт Setup - Configuration. Настройте строку userdomain, как ваш домен в почтовом (e-mail) адресе, например, для адреса jack@linux.org, это будет linux.org. Затем проставьте smtp-сервер такой же, как и POP-сервер (напишите то же, что писали в настройке fetchmail). Например, это будет www.linux.org. Если вам нужны новости, настройте строку nntp server в соответствии с сервером новостей вашего ISP.

Ну теперь у вас все есть, и все должно работать. Для установления связи с провайдером просто запустите /ppp-connect под пользователем root. Затем, чтобы получить почту, запустите fetchmail уже под своим рабочим паролем. Чтобы просмотреть почту и новости, используйте Pine. Установите текстовый обозреватель www, например, Lynx, чтобы вы могли просматривать www.

Шлите любые комментарии, вопросы и предложения по адресу: mstrates@croftj.net



Мини-HOWTO: подключение к Интернет-провайдеру


Michael Strates
mstrates@croftj.net


Перевод: Станислав Рогин, ASPLinux

Этот документ описывает, как настроить PPP, подключиться к провайдеру (Internet Service Provider, в дальнейшем ISP), настроить почту и новости, получить постоянный IP (если это возможно), получить имя домена, и получить прекрасно работающую машину за 30 минут.



Соединяемся с внешним миром


В этом документе мы опишем, как сделать это, используя PPP (Point to Point Protocol (Протокол от Точки к Точке)), очень популярный протокол, почти всегда используемый в Интернете. Он позволяет вашему модему "speak" с внешним миром. Это именно то, что делали программы, такие как Trumpet Winsock в Windows 3.x, и многие другие программы, которые вы, возможно, никогда и не видели.

В Linux мы используем программу chat для соединения с ISP, а затем используем утилиту pppd для 'использования' соединения. По сути, chat - это номеронабиратель (dialer), а pppd - это ваш протокол. Ниже мы опишем, как их настроить.



Связь и коммуникации при помощи pppd и chat


Вероятно, наиболее простой способ - это написать скрипт в домашнем каталоге root-а и назвать его ppp-connect, и включать его тогда, когда вам нужно соединение. Обсудим этот метод.

Откройте ваш любимый текстовый редактор, на правах root, и создайте файл ppp-connect. Далее надо определиться по вашим параметрам.

pppd connect 'chat -v "" "строка_инициализации" "" ATDTтелефонный_номер CONNECT "" ogin: учетное_имя word: пароль' /dev/tty(0/1/2) скорость modem

pppd запускает /usr/sbin/pppd в моей системе, затем загружает chat для дозвона. Chat посылает строку_инициализации

модему, затем набирает номер телефонный_номер. Затем он ожидает от модема ответа CONNECT, и ждет фразы ogin: (буква l убрана, так как первый символ может быть потерян или может быть буквой L), посылает учетное_имя, ожидает word: и посылает your_passwd. После этого chat прекращает работу, и передает управление pppd.

Последняя часть команды определяет порт модема (у меня /dev/ttyS1). В большинстве случаев это будет ttyS1 (COM2: в DOS-е), ttyS0 (COM1: в DOS-е); или, если вы используете Slackware, cua1 или cua0. (Примечание переводчика: в последних поставках Linux появилось устройство /dev/modem, которое является символьной ссылкой (symbolic link) на соответствующее устройство. Просто настройте эту ссылку на нужное устройство и все.). Скорость - это скорость модема. Я использую 115200 (скорость моего модема - 33600). Если у вас достаточно новый компьютер (с микросхемой UART 16550), то я бы не делал скорость ниже 57600. Иначе для 14400-модема, используйте 38400. Слово "modem" просто сообщает, что это соединение с использованием последовательного порта и модема. Уберите флаг -v, если вы не хотите получать подробных записей в ваших журналах.

Сценарий, приведенный ниже, написан специально для тех, кто дозванивается до провайдера, и тот автоматически запускает PPP, т.е. для тех, у кого не запускается командная оболочка (shell). Вот содержимое их /ppp-connect:

pppd connect 'chat "" "ATZ" "" ATDT555-1800 CONNECT "" ogin: johnny word: blackjak' /dev/ttyS1 115200 modem

Но у некоторых, у кого ISP запускает оболочку и автоматически не запускает PPP, могут возникнуть проблемы. К счастью, chat может справиться и с этим. Просто надо добавить еще пару команд в ваш chat-скрипт. Ниже приведен пример, где провайдер пользователя "johnny" просто запускает для него оболочку (shell), и от "johnny" требуется набрать ppp для установления ppp-соединения. Его приглашение оболочки (shell prompt) заканчивается символом $.

pppd connect 'chat "" "ATZ" "" ATDT555-1800 CONNECT "" ogin: johnny word: blackjak $ ppp' /dev/ttyS1 115200 modem

Если у вас больше одного слова в одной фразе посылки, не забудьте заключить его в двойные кавычки. Я надеюсь, вы уловили суть всего вышесказанного и сможете сами написать свой скрипт для своего соединения. Просто исправьте первый или второй johnny-скрипт по вашим настройкам (порт, сервер и т.п.) и запишите файл.

Теперь, когда вы создали свой файл, убедитесь, что только root может исполнять, читать этот файл или писать в него. Это очень важно. Также убедитесь в том, чтобы никто не смог прочитать ваши журналы (log files), если вы решили оставить опцию -v, так как, в этом случае, в журналы попадет ваш пароль. (Я не вижу особой нужды в -v, если вы не знаете, о чем я, то уберите -v).



Блочные устройства


Если вы запустите /sbin/modprobe -c, вам будет выдан список всех модулей, которые известны kerneld, и какие запросы, какому модулю соответствуют. Например, запрос, из-за которого загружается драйвер флоппи-дисковода, направлен к блочному устройству с главным (major) номером 2:



Что такое kerneld?


kerneld - это демон, впервые представленный в ядрах версии 1.3 Bjorn Ekwall. Он позволяет "модулям" ядра (т.е. драйверам устройств, сети, файловым системам и т.п.) загружаться автоматически при первом запросе к ним, вместо ручного вызова их при помощи команд modprobe или insmod.

И для более интересных функций, которые не встроены (все еще?) в стандартное ядро:

kerneld можно настроить на вызов программы пользователя, вместо запуска стандартного гашения экрана, что позволяет использовать любую программу как заставку (screen-saver).

Тем же образом, как и в случае с программой-заставкой, можно изменить стандартный "сигнал (beep)" консоли в нечто совершенно другое ...

kerneld состоит из двух отдельных частей:

Поддержка в ядре Linux-а, для отсылки запросов на использование какого-либо модуля демону (daemon).

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

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



Файловые системы


Запросы kerneld, требующие файловую систему, представляют собой простое название типа файловой системы. Наиболее часто это используется для загрузки модуля isofs для файловых систем CD-ROM-ов, например, файловых систем типа "iso9660":

alias iso9660 isofs

Примечания
[1]

В некоторых дистрибутивах этот файл называется modules.conf



Формат кода программы (Binary formats)


Форматы кода обрабатываются почти также. Когда бы вы ни пытались запустить программу, формат которой неизвестен ядру, kerneld получает запрос на binfmt-xxx, где xxx - это номер вида кода, определенный из нескольких первых байтов кода. Таким образом, строка настройки kerneld, для поддержки загрузки модуля binfmt_aout для формата программ ZMAGIC (a.out), будет следующая:



Где найти необходимые части?


Поддержка модулей впервые была встроена в ядро версии 1.3.57. Если у вас ядро более ранней версии, и вы хотите установить kerneld, то вы должны перейти на более новое ядро. Исходные тексты ядер можно найти на всех основных Linux ftp-серверах, в том числе и на:

Kernel.Org

Metalab Linux

TSX-11 в MIT

Демон (daemon) входит в пакет modules. Он обычно также доступен по тем же адресам, где находятся исходные тексты ядра.

ВНИМАНИЕ: Если вы хотите использовать загрузку модулей в последних тестовых ядрах, то вы должны использовать пакет modutils (НЕ modules). Ниже (глава Общие проблемы) приведено несколько замечаний о проблемах использования модулей в ядрах версии 2.1.



Как это настроить?


Сначала достаньте необходимые части: подходящее ядро и последние утилиты из пакета modules. Затем надо установить утилиты modules. Это делается очень просто - распакуйте исходные тексты и запустите make install. Эта команда скомпилирует и установит следующие программы в каталог /sbin: genksysm, insmod, lsmod, modprobe, depmod и kerneld. Я рекомендую добавить несколько строк в загрузочные скрипты (для проведения некоторых настроек при загрузке Linux). Добавьте следующие строки в файл /etc/rc.d/rc.S (если у вас Slackware), или в /etc/rc.d/rc.sysinit (если у вас установлен SysVinit, т.е. Debian, RedHat, Caldera):



Как kerneld определяет, какой модуль загружать?


Несмотря на то, что kerneld содержит в себе встроенную информацию о наиболее распространенных типах модулей, иногда возникает ситуация когда kerneld не будет знать, как обработать запрос ядра. Это бывает в том случае, когда запрос идет к устройствам типа CD-ROM или сетевых плат, и существует несколько модулей, которые можно загрузить.

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

к драйверу блочного устройства

к драйверу символьного устройства

к формату кода программы (binary format)

к протоколу tty-линии

к файловой системе

к сетевому устройству

к сетевому сервису (например, rarp)

к сетевому протоколу (например, IPX)

kerneld определяет, какой модуль должен быть загружен, просматривая файл /etc/conf.modules [1]

Существует два вида строк в этом файле: пути (где находятся файлы модулей), и алиасы (aliases) (какие модули для чего предназначены). Если у вас еще нет этого файла, его можно создать при помощи команд



Когда недостаточно просто загрузить модуль: Строка post-install


Иногда, простой загрузки модуля недостаточно для того, чтобы все нормально работало. Например, если у вас драйвер звуковой платы собран в виде модуля, то очень часто требуется установить необходимый уровень громкости звука. Только проблема состоит в том, что установки громкости обнуляются при следующей загрузке модуля. Ниже приведен способ решения от Ben Galliart (bgallia@luc.edu>):

Конечное решение требует установки пакета setmix

А затем добавим следующую строку к файлу /etc/conf.modules:

post-install sound /usr/local/bin/setmix -f /etc/volume.conf

Таким образом, после загрузки модуля звуковой платы, kerneld запускает команду, указанную в строке post-install sound. В результате звуковой модуль будет настроен командой /usr/local/bin/setmix -f /etc/volume.conf.

Этот путь можно использовать и для других модулей, например, модуль lp можно настроить программой tunelp, добавив строку

post-install lp tunelp options

Для того, чтобы kerneld обработал эти опции, вам необходим kerneld версии 1.3.69f или выше.

В более старых версиях этого мини-HOWTO упоминалась опция "pre-remove", которая могла использоваться для запуска команды до выгрузки модуля. Однако, она никогда не работала и ее использование вообще сомнительно - наиболее вероятно, что эта опция исчезнет из следующего релиза kerneld. Вся система "настроек" модулей сейчас претерпевает некоторые изменения, и поэтому могут появиться некоторые различия на момент чтения вами этого документа



Мини-HOWTO: Linux kerneld


Henrik Storner
kerneld-howto@linuxdoc.org
Перевод: Станислав Рогин, ASPLinux

Copyright © 2000 Linux Documentation Project



Наблюдение за действиями kerneld


Если вы уже все перепробовали, и так и не выяснили, что же все-таки ядро просит сделать kerneld, существует способ просмотреть запросы, которые получает kerneld, и таким образом выяснить, что написать в /etc/conf.modules: Это утилита kdstat.

Эта маленькая, но очень полезная программа включена в пакет modules, но не собирается и не устанавливается по умолчанию. Чтобы собрать ее, зайдите в каталог исходных текстов kerneld и дайте команду make kdstat Затем, чтобы просмотреть информацию о действиях kerneld, запустите kdstat debug, и kerneld начнет выдавать информацию о том, что он делает, на консоль. Если вы потом попробуете запустить команду, которую хотите использовать, вы увидите запросы, которые получает kerneld; их затем можно поместить в /etc/conf.modules, написав соответствующие псевдонимы.

Для отключения вывода отладочной информации, наберите /sbin/kdstat nodebug.



Обычные проблемы и то, чем вы можете заинтересоваться


Q: Почему я получаю сообщение Cannot locate module for net-pf-X (Не могу найти модуль для net-pf-X), когда я запускаю ifconfig Q: После запуска kerneld, моя система сильно замедляется при установке ppp-соединенияQ: kerneld не загружает мой SCSI-драйвер!Q: modprobe выдает сообщение о том, что gcc2_compiled не определено Q: Мой драйвер звуковой карты продолжает забывать настройки громкости и т.п. Q: DOSEMU требует модули - как заставить kerneld их загружать? Q: Почему я получаю сообщения Ouch, kerneld timed out, message failed ("Ох, kerneld превысил время ожидания, запрос не выполнен") ?Q: Команда mount не ждет, пока kerneld загрузит модуль файловой системы Q: kerneld не может загрузить модуль ncpfs

Q: kerneld не может загрузить модуль smbfs

Q: Я все построил в виде модулей, и теперь моя система не загружается, или kerneld не может загрузить модуль корневой файловой системы!Q: kerneld не запускается в момент загрузки системы - жалуется на libgdbmQ: Я получаю сообщение "Cannot load module xxx" ("Не могу загрузить модуль xxx"), но я только что собрал мое ядро без поддержки xxx! Q: Я пересобрал ядро и модули, и до сих пор получаю сообщения о неразрешимых символах (unresolved symbols) в модулях при загрузке Q: Я установил Linux с ядром версии 2.1 и теперь не могу загрузить НИ ОДИН модуль! Q: Что насчет работы с сетью 'дозвон-по-требованию' (dial-on-demand)?

Q: Почему я получаю сообщение Cannot locate module for net-pf-X (Не могу найти модуль для net-pf-X), когда я запускаю ifconfig

A: В районе версии 1.3.80 ядра, код работы с сетью был изменен, чтобы поддерживать загрузку семейств сетевых протоколов (например, IPX, AX.25 и AppleTalk) в виде модулей. Поэтому был введен новый вид запроса ядра к kerneld: net-pf-X, где X - это число, определяющее протокол (см. /usr/src/linux/include/linux/socket.h для конкретных значений различных чисел). К сожалению, ifconfig вызывает своими действиями появление этих сообщений, поэтому у многих появляется пара таких сообщений в журнале загрузки системы и затем при запуске ifconfig для настройки устройства обратной петли. Эти сообщения безобидны, и вы можете запретить их, добавив соответствующие строки

alias net-pf-3 off # Забыть AX.25 alias net-pf-4 off # Забыть IPX alias net-pf-5 off # Забыть AppleTalk


в /etc/conf.modules. Конечно вам не надо добавлять строчку о запрете IPX, если вы используете его в виде модуля.

Q: После запуска kerneld, моя система сильно замедляется при установке ppp-соединения

A: На самом деле пару раз были такие вопросы. Скорее всего, это неправильное взаимодействие между kerneld и скриптом tkPPP, который используется на некоторых системах для настройки и мониторинга PPP соединения - скрипт видимо запускает в цикле ifconfig. Это, в свою очередь, заставляет kerneld каждый раз искать модули net-pf-X (см. выше), тем самым загружая систему и, возможно, забрасывая системный журнал потоком сообщений "Cannot locate module for net-pf-X" ("Не могу найти модуль для net-pf-X") . Пока нет известного решения, кроме того, как не использовать tkPPP, или его изменения для другого способа мониторинга соединения.

Q: kerneld не загружает мой SCSI-драйвер!

A: Добавьте строчку SCSI hostadapter в файл /etc/conf.modules. Смотрите описание строки scsi_hostadapter

выше.

Q: modprobe выдает сообщение о том, что gcc2_compiled не определено

A: Это ошибка в утилитах modules, она проявляется только с пакетом binutils версии 2.6.0.9 и выше, и описана в примечаниях и дополнениях (releasenotes) binutils. Поэтому их и читайте. Или достаньте новую версию утилит modules, в которой эта ошибка исправлена.

Q: Мой драйвер звуковой карты продолжает забывать настройки громкости и т.п.

A: Настройки модуля находятся внутри самого модуля на момент загрузки. Поэтому, когда kerneld автоматически выгружает модуль, все настройки, которые вы делали, теряются, и при следующей загрузке модуля настройки возвращаются в значения по умолчанию.

Вы можете заставить kerneld настроить модуль путем запуска программы после того, как модуль автоматически загружен. Смотрите раздел Pre/Post Install, описывающий строки post-install.

Q: DOSEMU требует модули - как заставить kerneld их загружать?

A: Никак. Ни одна из версий dosemu - официальных или тестовых - не поддерживает загрузку модулей dosemu через kerneld. С другой стороны, если у вас ядро версии 2.0.26 и выше, вам просто не нужны дополнительные специальные модули dosemu - просто обновите свой dosemu до версии 0.66.1.

Q: Почему я получаю сообщения Ouch, kerneld timed out, message failed ("Ох, kerneld превысил время ожидания, запрос не выполнен") ?

A: Когда ядро посылает запрос kerneld, оно ожидает подтверждения в течение секунды. Если kerneld не посылает это подтверждение, тогда и возникает это сообщение. Запрос посылается заново, и, в конце концов, должен пройти.

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

Если это происходит, а система не перегружена, попробуйте перезапустить kerneld. (Пошлите сигнал "Kill" процессу kerneld, а затем снова запустите его командой /usr/sbin/kerneld). Если проблема не исчезла, напишите отчет об ошибке по адресу linux-kernel@vger.rutgers.edu>, но, пожалуйста, сначала убедитесь в том, что версии вашего ядра и kerneld действительно новые. Проверьте соответствие требованиям файла linux/Documentation/Changes



Q: Команда mount не ждет, пока kerneld загрузит модуль файловой системы

A: Было несколько сообщений о том, что команда mount(8) не ожидает, пока kerneld загружает модуль файловой системы. Команда lsmod, однако, показывает, что kerneld загружает модуль, и если сразу же повторить команду mount, то она выполнится успешно. Это, по-видимому, ошибка в утилитах modules версии 1.3.69f, которая возникает у некоторых пользователей дистрибутива Debian - ее можно исправить, установив последнюю версию утилит modules.

Q: kerneld не может загрузить модуль ncpfs



A: Утилиты ncpfs необходимо собрать с ключом -DHAVE_KERNELD. Смотрите файл сборки (Makefile) утилит ncpfs.

Q: kerneld не может загрузить модуль smbfs



A: У вас старая версия утилит smbmount. Установите последнюю версию (0.10 или новее), которую можно найти на ftp по адресу: Архив SMBFS на TSX-11

Q: Я все построил в виде модулей, и теперь моя система не загружается, или kerneld не может загрузить модуль корневой файловой системы!

A: Нельзя же превращать в модули все подряд: Ядру должно хватать встроенных драйверов, чтобы смонтировать (mount) вашу корневую файловую систему, а также, чтобы запустить все программы, необходимые для запуска kerneld. [1]

Поэтому нельзя превращать в модули:



драйвер жесткого диска, на котором находится ваша корневая файловая система



собственно драйвер корневой файловой системы



драйвер формата кода программ init, kerneld и им подобных



Q: kerneld не запускается в момент загрузки системы - жалуется на libgdbm

A: Новые версии kerneld для работы используют библиотеку GNU dbm, libgdbm.so. Во многих установках этот файл находится в каталоге /usr/lib, а у вас, по-видимому, kerneld запускается до подключения файловой системы /usr. Одним из симптомов этого может быть то, что kerneld не запускается в процессе старта системы (из rc-скриптов), но запускается вручную после загрузки системы. Проблема решается либо путем переноса загрузки kerneld так, чтобы он загружался после подключения (mount) файловой системы /usr, либо путем переноса библиотеки gdbm в корневую файловую систему, т.е. в каталог /lib.

Q: Я получаю сообщение "Cannot load module xxx" ("Не могу загрузить модуль xxx"), но я только что собрал мое ядро без поддержки xxx!

A: Дистрибутив Slackware (и, возможно, некоторые другие) включает в себя стандартный файл /etc/rc.d/rc.modules, в котором содержатся подробные команды modprobe на некоторые конкретные модули. Конкретный список модулей, для которых запускается команда modprobe, зависит от конфигурации начального ядра. Вы, по-видимому, перенастроили ваше ядро, исключив из него модули, которые используются командой modprobe в rc.modules, поэтому и возникает сообщение об ошибке. Исправьте ваш файл rc.modules, закоментировав строчки с модулями, которые вы больше не используете, или вообще удалите файл, чтобы kerneld загружал модули только тогда, когда они потребуются.

Q: Я пересобрал ядро и модули, и до сих пор получаю сообщения о неразрешимых символах (unresolved symbols) в модулях при загрузке

A: Вы, видимо, переконфигурировали/пересобрали ваше ядро и исключили несколько модулей. Значит, у вас сохранились старые модули в районе каталога /lib/modules. Наиболее простое решение - удалить все подкаталоги каталога /lib/modules/x.y.z, и запустить make modules_install из каталога, содержащего исходные тексты ядра. Заметьте, что такая проблема существует, когда вы изменяете конфигурацию ядра без изменения его версии. Если вы получили это сообщение при переходе на новую версию ядра, то у вас, очевидно, другая проблема.

Q: Я установил Linux с ядром версии 2.1 и теперь не могу загрузить НИ ОДИН модуль!

A: Ядра Linux-а нечетных версий являются тестовым. Поэтому можно ожидать, что такие вещи будут происходить время от времени. Одна из вещей, которая серьезно изменилась - это способ работы с модулями, а также способ и место загрузки модулей ядром в память. Кроме того, Richard Henderson теперь отвечает за разработку модулей ядра.

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





прочитать файл Documentation/Changes и выяснить, какие пакеты требуют обновления в вашей системе



использовать наиболее новый пакет modutils, доступный по адресу AlphaBits на Red Hat или на зеркале TSX-11



Если вы хотите использовать модули с ядром версии 2.1, я бы порекомендовал использовать ядро, как минимум, версии 2.1.29.

Q: Что насчет работы с сетью 'дозвон-по-требованию' (dial-on-demand)?

A: kerneld ранее поддерживал возможность установления dial-up соединения по требованию системы; попытки посылать пакеты в сеть без соединения должны были заставлять kerneld запускать скрипт /sbin/request_route для установления PPP или SLIP соединения.

Но это была плохая идея. Alan Cox, один из знаменитых специалистов по сетям в Linux, написал в списке рассылки по ядру Linux, что



Утилита request-route устарела, не работает и не нужна [...] Она также убрана из структур 2.1.x.

Вместо использования скрипта request-route вместе с kerneld, я настоятельно советую вам установить пакет diald (Eric Schenk), доступный по адресу http://www.dna.lth.se/~erics/diald.html.

Примечания
[1]

(На самом деле, это не совсем так. Поздние версии 1.3.x и все 2.x версии ядер поддерживают режим загрузочного ram-диска, загружаемого LILO или LOADLIN-ом, и также существует возможность загрузить модули с этого "диска" практически в любой момент в процессе загрузки. Как это сделать, описано в файле linux/Documentation/initrd.txt, поставляемом с исходными текстами ядра.)




Протокол линии (slip, cslip и ppp)


Протоколы линии запрашиваются через tty-ldisc-x, где x обычно 1 (для SLIP) или 3 (для PPP). Оба эти варианта известны kerneld по умолчанию.

Продолжая разговор о PPP, если вы хотите, чтобы kerneld загружал модуль сжатия данных bsd_comp для PPP, то вам необходимо добавить следующие строки к файлу /etc/conf.modules:



Проверка kerneld


Перезагрузитесь с новым ядром. Когда система загрузится, наберите ps ax, и вы должны увидеть там строку с kerneld:

PID TTY STAT TIME COMMAND 59 ? S 0:01 /sbin/kerneld

Одно из самых приятных свойств kerneld состоит в том, что после загрузки ядра и загрузки kerneld требуется очень мало дополнительных действий. Для начала попробуйте использовать один из драйверов, который вы собрали в виде модуля - наиболее вероятно, что он заработает без дальнейшей настройки. Я собрал драйвер флоппи-дисковода в виде модуля так, чтобы можно было вставить DOS диск в дисковод и

osiris:~ $ mdir a: Volume in drive A has no label Volume Serial Number is 2E2B-1102 Directory for A:/

binuti~1 gz 1942 02-14-1996 11:35a binutils-2.6.0.6-2.6.0.7.diff.gz libc-5~1 gz 24747 02-14-1996 11:35a libc-5.3.4-5.3.5.diff.gz 2 file(s) 26689 bytes

Итак, драйвер флоппи-диска работает - он автоматически загрузился kerneld, когда я обратился к флоппи-диску.

Чтобы увидеть, что модуль флоппи на самом деле загружен, запустите /sbin/lsmod, который выдает список всех загруженных модулей на данный момент:

osiris:~ $ /sbin/lsmod Module: #pages: Used by: floppy 11 0 (autoclean)

Примечание "(autoclean)" означает, что модуль будет автоматически выгружен kerneld, если будет неактивен больше одной минуты. Таким образом, 11 страниц памяти (= 44кб, одна страница - это 4 кб) будут использованы,только пока я обращаюсь к флоппи - если пауза в использовании превысит одну минуту, то эта память будет освобождена. Достаточно удобно, если вам не хватает памяти для ваших программ!



Семейства сетевых протоколов (IPX, AppleTalk, AX.25)


Некоторые сетевые протоколы могут быть также загружены в виде модулей. Ядро запрашивает у kerneld загрузку семейства протоколов (напр. IPX) при помощи запроса net-pf-X, где X это число, означающее номер необходимого семейства протоколов. Например, net-pf-3 означает AX.25, net-pf-4 - IPX и net-pf-5 - это AppleTalk. (Эти номера определяются константами AF_AX25, AF_IPX и т.п., заданными в исходных текстах ядра в файле include/linux/socket.h). Поэтому, для автозагрузки модуля IPX, вам необходимо добавить следующее в файл /etc/conf.modules:



Сетевые устройства


Вы также можете использовать имя устройства вместо char-major-xxx / block-major-yyy. Это очень часто используется для драйверов сети. Например, для NE2000-совместимой сетевой карты, работающей под именем eth0, будет следующая строка:



Символьные устройства


Символьные устройства работают тем же образом. Например, драйвер стриммера ftape использует главный номер устройства 27:



Символьные устройства с главным


Обычно периферийные устройства определяются при помощи их главных номеров, например ftape имеет главный номер (major) 27. Однако, если вы взглянете в каталог /dev, и поищете там символьные устройства с главным номером 10, вы увидите там набор абсолютно разных устройств, включая:

Мыши, подключенные к различным портам (шинная мышь (busmouse), PS/2-мыши)

Сторожевые псы (watchdog)

Генератор случайных чисел ядра random

Интерфейс расширенного управления питанием APM (Advanced Power Management)

Очевидно, что эти устройства контролируются несколькими различными модулями, а не одним. Поэтому, для настройки конфигурации kerneld для этих разнообразных устройств необходимо указать не только главное, но и дополнительное (minor) число:



Специфическое использование kerneld


Я знал, что вы спросите о том, как настроить модуль гашения экрана...

Каталог kerneld/GOODIES в пакете modules содержит пару интересных патчей (patch) к ядру для поддержки в kerneld модуля гашения экрана и звукового сигнала консоли; они пока не являются частью официального ядра. Поэтому вам надо будет установить патчи и пересобрать ядро.

Чтобы установить патч, используйте команду "patch":

cd /usr/src/linux patch -s -p1 /usr/src/modules-*/kerneld/GOODIES/blanker_patch

Затем пересоберите и установите новое ядро.

Когда срабатывает программа гашения экрана (screensaver), kerneld запускает команду /sbin/screenblanker - это может быть все, что угодно, например скрипт, запускающий вашу любимую программу гашения экрана.

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



Устройства, требующие специальной настройки


Некоторые устройства требуют небольшой дополнительной настройки помимо обычных псевдонимов вида устройство-модуль.

Символьные устройства с главным номером 10:Разнообразные устройства

SCSI-устройства

Устройства, требующие специальной инициализации



Зачем это нужно?


Существует много причин для использования kerneld. Те, которые я упомяну - мои, другие люди могут использовать kerneld по иным причинам.

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

Для разработчиков модули более просты на стадии проверки - нет необходимости каждый раз перезагружать систему для загрузки или выгрузки драйвера. (Это относится ко всем модулям, не только загружаемым kerneld).

Это экономит память, используемую ядром, то есть, у вас больше памяти для приложений. Память, используемая ядром, никогда не кладется в раздел подкачки (swap), поэтому, если у вас 100 кб неиспользуемых драйверов внутри ядра, вы просто теряете оперативную память.

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

Создатели дистрибутивов Linux-а не должны собирать 284 разных загрузочных образов (boot image) - каждый пользователь загружает драйверы для своего оборудования. В последних версиях некоторых дистрибутивов встроено автоматическое определение оборудования, которое само загружает только необходимые модули.

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



Загрузка драйверов SCSI: Строка scsi_hostadapter


Драйвера SCSI-устройств состоят из двух частей: драйвера SCSI-адаптера (например, Adaptec 1542) и драйвера конкретного SCSI-устройства, которое вы используете, например, жесткий диск, CD-ROM или стриммер. Все это может быть загружено в виде модулей. Но при этом, если вы хотите обратиться, например, к CD-ROM-у, подключенному к SCSI-адаптеру Adaptec, ядро и kerneld знает лишь то, что необходимо загрузить модуль sr_mod для поддержки SCSI CD-ROM-ов - ему не известно, к какому SCSI-контроллеру подключен этот CD-ROM, и, соответственно, не известно какой модуль загружать для поддержки SCSI-контроллера.

Для разрешения этой проблемы можно добавить строку в /etc/conf.modules, в которой будет указано, который из многих доступных модулей драйверов SCSI-контроллеров надо загружать: