Linux mini-HOWTO

         

Другие языки


Другие языки: AWK, SED, Smalltalk, Eiffel, ADA, Prolog, assembler, Objective C, Logo, Pascal (p2c конвертер)



Языки программирования


C, Lisp и Perl являются традиционными языками программирования в системе GNU/Linux; Python, PHP, Java и C++ присоединились к их числу совсем недавно.



Mini-HOWTO по языкам программирования


Risto S. Varanka

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

Краткое сравнение основных языков программирования в Linux, а также библиотек для создания графических интерфейсов пользователя (GUIs) в Linux.



Принятые обозначения


Библиотеки

Общее название или аббревиатура библиотеки.

Начинающий

Подходит ли библиотека для начинающего программиста.

Лицензия

Различные лицензии для различных средств (инструментов) разработки GUI имеют практическое значение. Лицензии GTK+ и TK позволят вам разрабатывать приложения с открытыми исходными текстами и без них, без оплаты за лицензию. Лицензия Motif требует оплаты, лицензия QT требует оплаты, если вы распространяете приложения без исходных текстов.

Язык

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

Связанные

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

Примеры

Приложения, использующие библиотеку.

Комментарии



Дополнительная информация по средствам разработки.


Язык

Название языка.

Начинающий

Указывает, насколько язык удовлетворяет потребности людей с небольшим опытом программирования. Язык, отмеченный ``да'', должен быть прост для изучения новичком.

Эффективность

Как быстро ваши приложения будут работать, когда вы выпустите их в виде готового продукта. Эффективность зависит более от личных навыков алгоритмического программирования, чем от фактического языка. Как правило, C, C++ и Fortran являются иногда необходимыми, потому что они могут решать больше задач, в отличии от других языков - с другой стороны они могут быть неприменимы для достижения желаемой цели. (Одна идея для тестирования языков состояла в том, чтобы осуществить простой алгоритм сортировки во всех из них, а затем сравнивать продолжительность выполнения задания. Кто-нибудь хочет помочь мне в этом?)

ООП, Объектно-ориентированное программирование против других парадигм

Объектно-ориентированное программирование - важная составляющая программирования, которая получает все большее распространение. В объектно-ориентированном программировании, структуры данных и алгоритмы интегрированы в модули, часто называемые классами. ООП часто контрастирует с процедурным программированием (которое использует разделение алгоритмов и структуры данных). Это строго не зависит от языка: вы можете осуществлять ООП на языках, не причисляемых к объектно-ориентированным (C например), и программирование в процедурном стиле на языках, причисляемых к ОО. Я причислил к объектно-ориентированным языки, которые имеют специальные особенности или расширения, чтобы облегчить ООП. Функциональные языки (Lisp например) являются иным - среди других, функциональное программирование - надмножество ООП. Логическое программирование (Prolog), также называемое декларативным программированием, с другой стороны, не связано с иными типами программирования, в подобном смысле.

RAD, Быстрая разработка приложений

Многое зависит от инструментальных средств, которые вы используете, а не от языка. Имеется HOWTO по инструментам разработки GUI для Linux, хотя уже устаревшее. С хорошим графическим инструментом вы можете быстро разрабатывать приложения. Иногда RAD основан на многократном использовании готового кода, тем более что свободно распространяемое ПО - хорошая основа для этого.

Примеры

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

Комментарии

Дополнительная информация относительно языка, "диалекты".



Shell программирование


Оболочки - это также важная среда программирования. Я не охватил эту область, потому что не до конца понимаю ее. Знание shell важно для любого, кто регулярно работает на Linux, особенно для системных администраторов. Имеются подобия между shell программированием и созданием скриптов (сценариев) - часто они могут достигать тех же самых целей, и вы можете выбирать между родной оболочкой и скрипт-языком. Среди наиболее популярных оболочек можно отметить bash, tcsh, csh, ksh и zsh. Вы можете получить основную информацию по вашей оболочке с помощью команды man например, man bash.



Средства разработки GUI


Стандартные графические подсистемы для UNIX и Linux, называемые X(иксами), имеют свои собственные библиотеки для разработки GUI. Они обеспечивают программный интерфейс на низком уровне для X, но довольно сложны в использовании. Они, конечно, хороши для старых приложений, но в настоящее время используются GTK+ и Qt, так как их используют две популярные среды - GNOME и KDE.



Ссылки


Общий информационный сайт по языкам программирования, большое количество информации и мнений.

TCL

Perl

Python

PHP

Java

clisp



Другие аспекты применения Прокси-ARP в подсетях


Еще один пример применения Прокси-ARP в подсетях можно найти здесь же, в Австралийском Национальном Университете. Эта та самая конфигурация, для которой Andrew Tridgell и написал работу с подсетями в Прокси-ARP. Однако, Andrew говорит, что, на самом деле в мире существует еще несколько подобных конфигураций (подробностей у меня нет).

Это была лаборатория, в которой студентов обучают, как настраивать TCP/IP в машинах, включая и настройку шлюза. Там имеется сеть класса C, и Andrew была нужна "подсеть" для безопасности, контроля трафика и образовательных целей, упомянутых выше. Он сделал это при помощи стандартного Прокси-ARP, а затем до него дошло, что иметь одну запись в ARP-кэше значительно проще, чем иметь по одной записи для каждой машины.. И вот... появился Прокси-ARP для подсетей!



Другие способы работы с подсетями


Существуют и другие способы работы с этими подсетями, кроме Прокси-ARP. О некоторых из них я уже упомянул выше (мосты и маршрутизация):

IP-Маскарадинг (см. мини-HOWTO "IP-Маскарадинг"). При его использовании, сеть 0 будет скрыта за машиной A от остальной части Интернет. При попытке машин сети 0 связаться с остальным миром через машину A, адреса отправителей и номера портов в пакетах будут заменены на машине A так, как будто она сама связывается с внешним миром. Это достаточно красивое решение, но машины сети 1 не смогут связаться с машинами сети 0, потому что для сети 1 сеть 0 не существует. Это, конечно, увеличивает защищенность сети 0, но при этом теряется возможность работы машин сети 1 с машинами сети 0.

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

Использовать Прокси-ARP без подсетей. Теоретически это возможно, просто вам придется в ARP-кэше указать все машины подсети 0 по отдельности, вместо указания ссылки на всю сеть.

Наверно, здесь можно воспользоваться и IP-алиасингом, но я об этом не думал.



Как использовать Прокси-ARP при работе с подсетями


На самом деле Прокси-ARP необходим только для передачи пакетов из сети 1 в сеть 0. Обратно пакеты идут при помощи стандартной IP-маршрутизации.

В данном случае у сети 1 была 8-битная маска (255.255.255.0). Для сети 0 я использовал 4-битную маску (255.255.255.240), тем самым получив возможность иметь в ней 14 адресов (2 ^ 4 = 16, минус 0-ой и 15-ый). Заметьте что эта подсеть может иметь любое количество бит, которое должно быть меньше количества бит главной сети (т.е. 2, 3, 4, 5, 6 или 7 бит в моем случае)

Все IP-адреса сети 0 (всего их 16) являются подмножеством адресов сети 1. Очень важно, чтобы ни у одной машины в сети 1 не было адреса, входящего в пространство сети 0! В моем случае я "зарезервировал" для сети 0 адреса сети 1, оканчивающиеся на 64 .. 79. В данном примере, адреса 64 и 79 не могут использоваться машинами: 64 - этой адрес сети 0, а 79 - это широковещательный адрес сети 0.

Машине A выделены два IP-адреса, один в адресном пространстве сети 0 для настоящего Ethernet-интерфейса (eth0), а второй в пространстве сети 1 (не сети 0) для интерфейса радио-карты (eth1).

Предположим, что машине C (в сети 1) необходимо послать пакет машине B (в сети 0). Машина C, считая что находится в одной подсети с машиной B, посылает в сети 1 широковещательный запрос с целью узнать Ethernet-адрес машины B. Машина B не получит этот запрос - она не находится в одной физической сети с машиной C - но этот запрос увидит машина A.

Вот здесь и начинается волшебство. Код arp в ядре Linux в машине A, будучи правильно настроен (Прокси-ARP для подсетей), определяет, что ARP-запрос идет из интерфейса сети 1 (eth1), а соответствующий IP-адрес находится в сети 0. В этом случае машина A в ответе на запрос укажет свой собственный Ethernet-адрес.

Машина C сделает запись в своем ARP-кэше, в котором укажет, что IP-адресу машины B соответствует Ethernet-адрес машины A (в данном случае, адрес радио-Ethernet карты). После этого машина C сможет послать пакет машине B на этот Ethernet-адрес, и его получит машина A.

Получив такой пакет, машина A определит, что его получатель не она, а машина B. Код IP-маршрутизации ядра Linux машины A попытается передать пакет машине B в соответствии со своей таблицей маршрутизации (в которой указано, какому интерфейсу, какая сеть соответствует). Однако, IP-адрес машины B соответствует одновременно и сети 0, и сети 1.

Вот здесь происходит вторая часть волшебства. Маска подсети на интерфейсе 0 имеет в двоичном представлении больше единиц (то есть, более конкретизирована), чем маска подсети интерфейса 1. Вследствие этого, код маршрутизации сопоставит этот пакет с интерфейсом eth0, игнорируя соответствие адреса в пакете сети 1 (из которой, собственно, этот пакет и пришел).

Теперь машине A необходим "настоящий" физический (Ethernet) адрес машины B (предположим, что его нет в ARP-кэше). Машина A посылает ARP-запрос, но, в этот раз, код arp в ядре Linux определяет, что запрос идет не из сети 1, и не посылает в ответ прокси-адрес интерфейса eth1. Вместо этого, запрос производится в сети 0 (интерфейс eth0) - этот запрос увидит машина B и пошлет в ответ свой (настоящий) физический (Ethernet) адрес. Теперь машина A может переслать пакет (шедший от машины C) машине B.

Машина B получает пакет от машины C (через машину A) и ей надо послать ответ. В этот раз машина B определяет, что машина C находится в другой подсети (маска 255.255.255.240 подсети машины B исключает из ее адресного пространства все машины, не входящие в сеть 0). В машине B маршрут по умолчанию указывает на машину A - она посылает пакет через машину A. Теперь код маршрутизации пакетов машины A определяет, что IP-адрес получателя (машины C) находится в сети 1, и она посылает этот пакет машине C через радио-Ethernet-интерфейс eth1.

Аналогично (и даже немного проще) происходит с пакетами любых машин обеих сетей, предназначенными для машины A.

Очевидно, что, если другая машина (D) в сети 0 пошлет ARP-запрос относительно физического адреса машины B, машина A получит этот запрос с сети 0 и не пошлет в ответ прокси-адрес интерфейса eth1, определив, что запрос идет из сети 0.

Заметьте, что в машинах B и C (и D) не требуется каких-то специальных IP-настроек. В моем случае - это была дикая смесь из Sun, Macintosh и PC-машин в сети 0, подключенных к остальному миру через Linux-машину A.

Маленькое дополнение: заметьте, что физические (Ethernet) адреса, полученные машинами A, B, C (и D), помещаются в ARP-кэш, и последующие пакеты не вызовут повторной процедуры ARP-запрос-ответ. ARP-кэш обычно удаляет записи с адресами после 5 минут их бездействия.



Настройка Прокси-ARP


Я настроил работу Прокси-ARP с подсетями в ядре Linux версии 2.0.30, но мне сказали, что все это работало еще в пору ядер 1.2.x.

Первое, что надо запомнить: код ARP можно разделить на две части: первая часть входит в ядро - она посылает и получает ARP запросы и ответы, обновляет содержимое ARP-кэша и т.п.; вторая часть - это команда arp(8), позволяющая администратору изменять содержимое ARP-кэша, а остальным пользователям его просматривать.

Первая проблема, с которой я столкнулся, состояла в следующем - программа arp(8), входившая в мой дистрибутив Slackware 3.1, была настолько стара(1994 года выпуска!!!), что вообще не могла работать с кодом arp в ядре (главное доказательство этого - очень странный результат работы команды "arp -a").

Команда arp(8) входит в состав пакета "net-tools-1.33a", который можно взять, практически, где угодно, в том числе и по адресу ftp.linux.org.uk:/pub/linux/Networking/base/

(этот адрес я взял из файла README из этого пакета). Она работает нормально, вместе с ней поставляется нормальная версия man-страниц, в которых все объяснено значительно подробнее, чем в старых.

Получив свежую версию команды arp(8), все изменения я внес в скрипт /etc/rc.d/rc.inet1 (это в Slackware - в других случаях все может быть немного по-другому). Сначала нам надо сменить широковещательный адрес, адрес и сетевую маску интерфейса eth0:

NETMASK=255.255.255.240 # это для 4-битной сети NETWORK=x.y.z.64 # наш номер сети (замените x.y.z на настоящие цифры вашей сети) BROADCAST=x.y.z.79 # широковещательный адрес (в моем случае)

Затем добавляем настройку второй Ethernet-карты (после загрузки всех необходимых модулей с драйвером):

/sbin/ifconfig eth1 (name on net 1) broadcast (x.y.z.255) netmask 255.255.255.0

Теперь добавляем запись в таблицу маршрутизации:

/sbin/route add -net (x.y.z.0) netmask 255.255.255.0

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

Теперь настало время добавить строку, включающую Прокси-ARP:

/sbin/arp -i eth1 -Ds ${NETWORK} eth1 netmask ${NETMASK} pub

Здесь мы указываем коду ARP добавить в кэш статическую запись (опция s) для сети ${NETWORK}. Опция -D указывает ARP использовать адрес интерфейса eth1 (вторая запись eth1), что позволяет нам не выяснять физический адрес интерфейса eth1, чтобы вписать его сюда вручную. Опция netmask указывает ARP, что мы работаем с подсетью (т.е. Прокси для всех (IP-адресов) & ${NETMASK} == ${NETWORK} & ${NETMASK}). Опция pub означает, что ARP должен "опубликовать" эту ARP-запись, т.е., что это прокси-запись, и ее надо посылать в ответ на поиск всех IP-адресов этой подсети. Опция -i eth1 означает, что ARP должен отвечать только на запросы, идущие с интерфейса eth1.

Если нам повезет, после загрузки все машины подсети 0 появятся в сети 1. Вы можете проверить на машине A настройку Прокси-ARP, используя следующую команду: (имена и адреса изменены)

bash$ /sbin/arp -an Address HWtype HWaddress Flags Mask Iface x.y.z.1 ether 00:00:0C:13:6F:17 C * eth1 x.y.z.65 ether 00:40:05:49:77:01 C * eth0 x.y.z.67 ether 08:00:20:0B:79:47 C * eth0 x.y.z.5 ether 00:00:3B:80:18:E5 C * eth1 x.y.z.64 ether 00:40:96:20:CD:D2 CMP 255.255.255.240 eth1

Вы можете просмотреть содержимое "файла" /proc/net/arp.

Последняя строка - это прокси-запись для подсети. Флаги CMP означают, что запись является статической (введена вручную), и должна быть опубликована. Эта строка будет использоваться только при получении запроса с сети 1, если IP-адрес соответствует сети 0. Заметьте, что команда arp(8) автоматически определила физический адрес интерфейса eth1, и подставила его в соответствующее место (опция -Ds).

Вы также можете проверить правильность таблицу маршрутизации. Ниже приведена моя таблица (имена и адреса снова изменены):

#/bin/netstat -rn Kernel routing table Destination Gateway Genmask Flags Metric Ref Use Iface x.y.z.64 0.0.0.0 255.255.255.240 U 0 0 71 eth0 x.y.z.0 0.0.0.0 255.255.255.0 U 0 0 389 eth1 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 7 lo 0.0.0.0 x.y.z.1 0.0.0.0 UG 1 0 573 eth1

Эту же таблицу вы увидите, взглянув на файл /proc/net/route.

Заметьте, что первая запись является подмножеством второй, но таблица маршрутизации отсортирована в порядке приоритета, поэтому строка eth0 будет обрабатываться до строки eth1.



Работа с подсетями при помощи Прокси-ARP


Bob Edwards
Robert.Edwards@anu.edu.au
Перевод: Станислав Рогин, ASPLinux

В этом документе описывается работа с подсетями при помощи протокола Прокси-ARP (Address Resolution Protocol). Моя цель - сделать так, чтобы подсеть из нескольких компьютеров была видна в другой подсети, использующей протокол IP. (Я называю такую конфигурацию суб-подсетью). В результате все должно выглядеть так, как будто машины локальной подсети (далее сеть 0) подключены к главной сети(далее сеть 1).

Это все будет работать только в том случае, если все машины соединены при помощи Ethernet-совместимых устройств (т.е. не будет работать с SLIP/PPP/CSLIP и т.п..)



Зачем при работе с подсетями нужен Прокси-ARP?


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

У меня была радио-Ethernet-ISA-8бит-карта. Мне было необходимо подключить ее к нескольким машинам одновременно. Я мог использовать ее на Linux-машине (правда мне для этого пришлось писать драйвер, но это тема для отдельного разговора). В общем, от меня требовалось установить вторую карту в Linux-машину, и некоторым образом объединить две подсети.

Предположим (в качестве примера), что сеть 0 - это локальная сеть Ethernet, подключенная к Linux при помощи NE2000-совместимой карты на интерфейсе eth0. Сеть 1 - это главная сеть, подключенная к Linux при помощи радио-Ethermet-карты на интерфейсе eth1. Машина A - это Linux с обоими интерфейсами. Машина B - любая TCP/IP-машина в сети 0, а машина C - такая же машина в сети 1.

В обычном случае я должен был сделать следующее:

Использовать IP-мост (см. Мини-HOWTO: Мосты), чтобы передавать пакеты между интерфейсами. К сожалению, у радио-Ethernet-карт нет режима "promisc" (они не могут перехватывать весь трафик сети 1). Это связано с маленькой скоростью передачи (2Мбит/сек), а также с тем, что нам совсем не надо обрабатывать весь трафик сети 1. Более того, мосты достаточно хорошо загружают систему!

С другой стороны, я мог использовать подсети и IP-маршрутизацию для передачи данных между подсетями (см. Мини-HOWTO: "Подсети IP"). Это решение подходит только для IP-протокола - ядро Linux будет обрабатывать лишь IP-пакеты, а остальным протоколам (например AppleTalk) потребуются дополнительные программы. Это также потребует новой IP-подсети, что не всегда возможно.

В этом случае я не мог получить новую подсеть, поэтому мне пришлось настроить все так, как будто все машины сети 0 подключены к сети 1. Вот здесь и понадобился Прокси-ARP. Для работы с другими (не-IP) протоколами использовались соответствующие программы - например для маршрутизации пакетов AppleTalk использовался netatalk.



Файл: .Xdefaults


! Выключаем drag-to-select. *hysteresis: 3000

! Делаем посещенные и не посещенные ссылки одного цвета *linkForeground: #0000EE *vlinkForeground: #0000EE

Netscape.Navigator.geometry: =NETSCAPE_GEOMETRY

! Аннулируем некоторые команды клавиатуры. *globalTranslations:

! Настройка мышки: делаем установки на мышке. *drawingArea.translations: #replace \ : ArmLink() \n\ : ArmLink() \n\ : ArmLink() \n\ ~Shift: ActivateLink() \ DisarmLink() \n\ ~Shift: ActivateLink() \ DisarmLink() \n\ ~Shift: ActivateLink() \ DisarmLink() \n\ Shift: ActivateLink() \ DisarmLink() \n\ Shift: ActivateLink() \ DisarmLink() \n\ Shift: ActivateLink() \ DisarmLink() \n\ : DisarmLinkIfMoved() \n\ : DisarmLinkIfMoved() \n\ : DisarmLinkIfMoved() \n\ : DescribeLink() \n\

Этот файл выключает мигающие тэги, drag-to-select, и некоторые команды клавиатуры. Так же он делает все кнопки мыши одинаковыми по функциям, убирает панель меню, делает посещенные и не посещенные ссылки одного цвета (голубые), а не какие-нибудь пурпурные.

Вы должны заменить строку NETSCAPE_GEOMETRY на размер окна под X по форме: XxY+0-0, где X ширина вашего экрана, а Y это высота + 32. Это уберет с экрана панель меню Netscape, и пользователь не будет отвлекаться на них при работе. пример: если ваш экран 800x600, то геометрия будет выглядеть следующим образом 800x632+0-0.



Изменение настроек


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



Создайте каталог .netscape в домашнем каталоге guest


Enter

mkdir /home/guest/.netscape chmod 777 /home/guest/.netscape

Для того, чтобы создать каталог .netscape в домашнем каталоге пользователя guest и сделать его общедоступным в вашей системе выполните следующую команду.



The Linux Public Web Browser mini-HOWTO


Donald B. Marti Jr.
dmarti@best.com
Перевод: Михаил Корепанов, ASPLinux

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



Установите httpd, если вам нужна отдельная станция


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

lynx -dump http://localhost/

Вы должны увидеть содержимое домашней страницы вашей системы.



Вам нужен графический обозреватель


Мы предполагаем, что у вас уже установлен работающий графический обозреватель типа Netscape Navigator. У вас должно быть разрешение на его использование. Если вам нужен коммерческий дистрибутив Netscape Navigator, то его можно приобрести с соответствующей лицензией у Caldera.



Этот документ предназначен для тех


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

Вы должны получить права


Если вы не можете воспользоваться правами пользователя root, попросите администратора завести пользователя ``guest'' и дать вам полные права на каталог guest. Когда вы это сделаете, перейдите к разделу "Создание файлов в домашнем каталоге пользователя guest".



Заведите пользователя guest


Будучи пользователем root, используйте команду adduser для создания пользователя guest. Затем введите

passwd guest

для задания пароля пользователя guest. Это должно быть что-то простенькое, например ``guest'', потому что вы будете его давать другим, и, ни в коем случае, этот пароль не должен совпадать с вашим личным.

Затем создайте домашний каталог guest. Введите

chown me.mygroup /home/guest

Замените ``me'' своим обычным именем пользователя и ``mygroup'' на свою группу. (На Red Hat Linux они будут совпадать, так как у каждого пользователя есть своя собственная группа.)

Теперь вы должны выйти и все остальное делать как пользователь guest, а не root.



Exmh


Это моя любимая почтовая программа.

Тут есть одна загвоздка - большинство программ TCL/TK имеют установки безопасности. Это решается при помощи скрипта .xserverrc.secure, который поставляется вместе с SuSE.

#!/bin/sh

# # поместите этот файл в ~/.xserverrc, если вы не хотите давать доступ # к вашему X-серверу # if [ -x /usr/bin/keygen ]; then if [ ! -x /usr/bin/hostname -a ! -x /bin/hostname \ -a ! -x /usr/bsd/hostname ]; then echo "startx: can't get my hostname - exiting" exit 1 else host=`hostname` fi

xauth add $host:0 . `/usr/bin/keygen` sleep 2 xauth add $host/"unix":0 . `/usr/bin/keygen` exec X :0 -auth .Xauthority $* else exec X :0 $* fi



Fetchmail


Я решил использовать fetchmail потому, что почтой пользуется и моя семья. Linux и fetchmail доставляют почту на порт smtp, где qmail вступает в работу.

При установке не возникло никаких проблем, посылка писем в многопользовательский ящик пользователям работает с .fetchmailrc :

poll PersonalMail.Germany.EU.net protocol pop3 username myname password mypassword # следующие две строки делают возможным посылку в многопользовательский ящик localdomains mydomain.de is * here # В FAQ fetchmail говорится, что qmail требует forcecr



ISDN


Я написал эту главу потому, что ваш ящик не будет работать без PPP-линии к провайдеру. Мне пришлось немного помучаться перед тем, как ISDN начал работать. Дистрибутив SuSE включает себя настройки ISDN, но я бы хотел, чтобы все было еще проще. Все, что здесь написано, было взято из скриптов Bernhard Hailer. (Огромное спасибо)

Файл rc.config загружает необходимые модули во время установки:

#!/bin/bash # Это адаптированный скрипт, написанный Bernhard Hailer

LOCAL_NUMBER="91311234" # ваш телефон 091311234 REMOTE_NUMBER="0911123456" # телефон провайдера LOCAL_IP="192.168.0.99" # у меня динамический IP REMOTE_IP="195.112.123.11" # адрес шлюза провайдера DEVICE="ippp0"

SYSPATH="/sbin" ISDNCTRL="$SYSPATH/isdnctrl"

case "$1" in start) # активирует isdn insmod /lib/modules/2.0.33/net/slhc.o insmod /lib/modules/2.0.33/misc/isdn.o sleep 1 # загружает модуль hisax insmod /lib/modules/2.0.33/misc/hisax.o id=Tel0 type=5 protocol=2 irq=10 io=0x300 echo "Запуск isdn4linux" # global $ISDNCTRL verbose 0

$ISDNCTRL addif $DEVICE # создает новый интерфейс $ISDNCTRL addphone $DEVICE in $REMOTE_NUMBER $ISDNCTRL addphone $DEVICE out $REMOTE_NUMBER $ISDNCTRL eaz $DEVICE $LOCAL_NUMBER $ISDNCTRL l2_prot $DEVICE hdlc $ISDNCTRL l3_prot $DEVICE trans $ISDNCTRL encap $DEVICE syncppp $ISDNCTRL huptimeout $DEVICE 300 $ISDNCTRL chargehup $DEVICE off $ISDNCTRL secure $DEVICE on

$SYSPATH/ifconfig $DEVICE $LOCAL_IP pointopoint $REMOTE_IP metric 1 $SYSPATH/route add default $DEVICE $SYSPATH/ipppd /dev/ippp0 file /etc/ppp/options.ipppd & $SYSPATH/route del default

;; stop) #деактивирует isdn rmmod hisax.o sleep 1 rmmod isdn.o rmmod slhc.o echo "Отключение isdn4linux" $ISDNCTRL delif ippp0 ;; *) echo "Использование: $0 (start|stop)" exit 1 ;; esac

Я использую следующий скрипт для установки коммутируемого соединения isdn on|off

#!/bin/bash # Это основано на скрипте написанном Bernhard Hailer


IP_ADDRESS="195.112.123.11"

case "$1" in on)

echo "Вызов ippp0" /sbin/isdnctrl dial ippp0 # команда sleep дает время на установление РPP-соединения echo "Пауза 8s для установки соединения PPP" sleep 8s /sbin/route add default ippp0 echo "линия открыта - проверка...."

# проверка установления PPP-соединения: set `ping -qc3 -i1 $IP_ADDRESS 2>/dev/null | grep transmitted` if [ $4 -gt 0 ]; then echo "успешно." echo "Запуск демона fetchmail" /usr/bin/fetchmail -d 600 -k -v -a -L /var/log/fetchmail echo "Сбрасываем очередь почты...." /usr/local/bin/serialmail/maildir2smtp ~alias/pppdir alias-ppp- mail.server.ip.no `hostname` else echo "ошибка!" /sbin/isdnctrl hangup ippp0 fi

;;

off) echo -n "Отключаем демона fetchmail" /usr/bin/fetchmail --quit

/sbin/isdnctrl hangup ippp0 /sbin/route del default # удаление маршрута echo "Отключение прошло успешно" ;;

*) echo -e "\aИспользование:" echo "isdn on" echo "isdn off" ;;

esac



Теперь займемся файлом опций /etc/ppp/options.ipppd

# Основано на: # Klaus Franken, kfr@suse.de # Версия: 27.08.97 (5.1) # # Этот файл скопирован с /etc/ppp/ioptions.YaST # в options.

user "myuserid"

# имя системы (только для CHAP!) # имя my_system_name

# получение адреса IP # используйте с динамическим адресом IP ipcp-accept-local ipcp-accept-remote noipdefault

# попытка взять адрес из интерфейса # опции для ipppd (as opposed to pppd) # используются при статическом IP #useifip

# запретить сжатие заголовков -vj -vjccomp -ac -pc -bsdcomp

# иногда вам будет нужен: #noccp

# максимальный размер принимаемых данных mru 1524 # максимальный размер передаваемых данных mtu 1500

# Если эта машина - сервер, то вам надо убрать пометки на комментариях в следующих строчках

# "+pap" / "+chap" NUR AKTIVIEREN, WENN DIES EIN SERVER IST!!! #+pap #+chap

# если у вас проблемы с соединением (нет ответа на первый # lcp пакет), то попытайтесь уменьшить время повторного цикла. По умолчанию он равен 3 сек, # попробуйте его уменьшить до 2: # lcp-restart 2




Maildir2smtp


Dan Bernstein создал программу для отправки почты провайдеру из очереди при установке коммутируемого соединения. Этот файл (serialmailxxx) можно скачать с его странички.

Установите эту программу, как описано в руководстве (спасибо за создание руководства Rupert Mazzucco (maz@pap.univie.ac.at), она работает без всяких настроек!

maildir2smtp - blast a maildir across SMTP

maildir2smtp позволяет посылать сообщения через SLIP- или PPP-соединение. Для того, чтобы это сделать, создайте новый maildir как указано далее на примере пользователя alias:

# maildirmake ~alias/pppdir # chown -R alias ~alias/pppdir

поместите

:alias-ppp

в control/virtualdomains и

./pppdir/

в ~alias/.qmail-ppp-default. Не забудьте о дополнительном знаке "/" в pppdir/. Затем в скрипте установки PPP напишите

maildir2smtp ~alias/pppdir alias-ppp- $IP `hostname`

заменив $IP адресом провайдера.

Замечание:

Пожалуйста, полностью прочтите руководство.

Maildir2smtp требует. чтобы у вашего почтового сервера IP адрес был указан через точки. Если вы его не знаете, то можете узнать при помощи команды ping ВашеИмя@домен.страна.

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



Mh_profile


Ниже приведен мой .mh_profile

Path: Mail draft-folder: drafts unseen-sequence: unseen AliasFile: /home/rdn/.mh_aliases send: -msgid comp: -form /home/rdn/.mymh-components MailDrop: /home/rdn/Mailbox

Замечания:

Я добавил строку MailDrop для надежности.



Мини-HOWTO: Установка qmail и MH


Christopher Richardson
rdn@tara.n.eunet.de
Перевод: Михаил Корепанов, ASPLinux

Я просто записываю весь свой опыт по установке Qmail и предлагаю его прочесть тем, кто в нем нуждается. Версия 1.4



Mtstailor


qmail доставляет почту в домашний каталог (~/Mailbox). Я добавил следующее в mtstailor



Описание моей системы


Дистрибутив SuSE Linux 5.1 с ядром 2.0.33.

PPP связь с провайдером



Ответственность


Вы используете все под свою ответственность, никаких возвратов денег и т.п.



Послесловие


Кто-нибудь смог "заставить" работать mh с Maildir? Я не пробовал этого по принципу - не надо трогать хорошо работающую систему. Если вам это удалось, то напишите мне об этом, и я включу этот материал в следующую версию документа.



Procmail


В FAQ qmail говорится что надо добавить

в ~/.qmail строку:

| preline procmail

В версии 3.11pre7 изменилась переменная почтового ящика по умолчанию. Раньше она находилась в config.h. Теперь она в src/authenticate.c:

#define MAILSPOOLHOME "/Mailbox" /* обратите внимание на слэши / */ /* delivers to $HOME/Mailbox */

Я нашел очень много полезных советов по содержимому файла .procmailrc в comp.mail.mh и comp.mail.misc some . Спасибо всем!

# Пример .PROCMAILRC # Написан Catherine Hampton # Версия 1.1 # Последнее обновление 1/25/98 # # Released to the Public Domain. # # # SET VARIABLES

# Внутренние переменные # нижеследующее было изменено rdn 19980303

# Все говорят, что нужна среда SHELL SHELL=/bin/sh #Shell используется для запуска procmail. Удостоверьтесь, что эта #ссылка на ваш sh. LINEBUF=4096 #Задано для того, чтобы Procmail не "съедал" #длинные заголовки писем

PATH=$HOME/bin:/bin:/usr/bin:/usr/local/bin:/usr/bin/mh:/usr/lib/mh: #Пути к вашим программам - лучше их не трогать

VERBOSE=off #Смените это на "on" при испытаниях нового метода, #чтобы Procmail отмечал каждый свой шаг в журнале #НЕ ОСТАВЛЯЙТЕ ЭТО ВКЛЮЧЕННЫМ, иначе журналы могут #переполниться.

# Стандартное расположение файлов и программ

MAILDIR=$HOME/Mail #Вам лучше проверить, существует ли этот каталог

DEFAULT=$HOME/Mailbox #Стандартный ящик входящей почты. Впишите сюда #верное для вашей системы значение

LOGFILE=$MAILDIR/procmail.log #Расположение журналов. Рекомендуется его задать, иначе #все ошибки будут посылаться вам по почте

FORMAIL=/usr/bin/formail #Это удобно для систем автоответа.

SENDMAIL=/usr/sbin/sendmail #Это также удобно для систем автоответа. Измените это #значение в соответствии с вашей системой

В Procmail имеется прекрасная документация. Прочтите руководство и установите файл .procmailrc.



Ссылки


Нужные пакеты находятся по следующим адресам:

The net is so dynamic that it is pretty pointless to give sources. but for what it's worth:

Qmail http://www.qmail.org/

MH http://www.ics.uci.edu/?mh/

glimpse http://glimpse.cs.arizona.edu/

Fetchmail http://sagan.earthspace.net/?esr/fetchmail

Exmh http://www.beedub.com/exmh

Procmail ftp.informatik.rwth-aachen.de/pub/packages/promail



Установка MH


В добавлении могу сказать, что я заменил /mh-6.8.4/mts/sendmail/smail.c программой mh-qmail-smail.c (написанной Dan Bernstein)

Файл mh-6.8.4/conf/MH выглядит следующим образом:



Установка Qmail


Следуйте в точности всем инструкциям INSTALL.

Замечания:

Прочтите полностью всю документацию. Цифры означают шаги при установке.

2 - Я устанавливал пользователей и их группы, как описано в INSTALL.ids

7 - ./qmail-makectl не работало на моей машине. Я добавил имя моего домена сам (mickey.n.eunet.de) в /var/qmail/control/me

23 - удостоверьтесь в том, что вы написали именно qmail-smtpd в файле inetd-conf. (Я написал qmail-smptd и искал ошибку два дня :( )



Изменение /etc/fstab


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



Льготный период


Льготный период (grace period) - это количество времени после превышения мягких ограничений, в течении которого пользователю позволено использовать дисковое пространство, если оно не превышает жесткий лимит. Он определяется в секундах (seconds), минутах (minutes), часах (hours), днях (days), неделях (weeks) или месяцах (months). Проверить его можно при помощи команды "edquota -t":

Time units may be: days, hours, minutes, or seconds Grace period before enforcing soft limits for users: /dev/hda2: block grace period: 0 days, file grace period: 0 days

Можете изменить число дней на любое разумное значение. Лично я использую 7 дней (или 1 неделю).



Мягкие ограничения


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



Настройка ядра


Перенастройте свое ядро и добавьте туда поддержку квотирования.:



Определение квот для конкретного пользователя


Например. У меня в системе есть пользователь bob. Команда "edqouta -u bob" запускает текстовый редактор (определенный в переменной окружения $EDITOR) для редактирования квот пользователя bob для каждого раздела, на котором включено квотирование:



Определение квот для конкретной группы


В моей системе есть группа games. "edquota -g games", снова запускает текстовый редактор для редактирования квот группы games:



Перезагрузка


Теперь перезагрузите систему.

Запомните, что теперь для установления квотирования на каталоги вам потребуется произвести шаги 4, 5, и 6.



Программное обеспечение


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

ftp://ftp.funet.fi/pub/Linux/PEOPLE/Linus/subsystems/quota/all.tar.gz.



Quota mini-HOWTO


Albert M.C. Tam
bertie@scn.org


Перевод: Павел Гашев, ASPLinux

Введение: This document is copylefted by Albert M.C. Tam (bertie@scn.org). Permission to use, copy, distribute this document for non-commerical purposes is hereby granted, provided that the author's / editor's name and this notice appear in all copies and/or supporting documents; that this document is not modified.

Надеюсь, что этот документ будет вам полезен, но БЕЗО ВСЯКИХ ГАРАНТИЙ, явных и не явных. Даже если в тексте присутствует убеждение в точности представленной информации, авторы/редакторы/сопроводители не несут НИКАКОЙ ОТВЕТСТВЕННОСТИ за ошибки или повреждения, полученными в результате ее использования. Этот документ описывает настройку квот для файловой системы Linux, определение квот для пользователей и групп, а также использование различных команд, связанных с квотированием. Предполагается, что у пользователя есть ядро 2.x (RedHat 4.1). Пользователям же старых ядер, чтобы использовать квотирование, необходимо обновить ядро. Если вы найдете ошибки или заметите пропущенную информацию, можете спокойно послать письмо с комментариями по адресу bertie@scn.org. Я оценю это.



Quotacheck


Quotacheck используется для сканирования дискового пространства и обновления файла "quota.user". Я рекомендую запускать его во время загрузки системы или периодически через cron (скажем, каждую неделю).



Quotaon и Quotaoff


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



Repquota


Repquota выводит общий отчет по квотированию файловой системы. Пример:



Создание "quota.user" и "quota.group"


Доступ к файлам записи квот quota.user и quota.group должен иметь только пользователь с правами root

Зайдите как пользователь root. Зайдите в корневой каталог и создайте файлы quota.user и quota.group:



Текущее состояние квот в Linux


Я слышал, что поддержка квотирования встроена в ядро, начиная с версии 1.3.8x, и теперь это часть ядра 2.0.x. Если ваша система не поддерживает квотирование, я настоятельно рекомендую обновить ядро.

В настоящее время, квотирование работает только на файловой системе ext2.



Установка - Часть II: Определение квот для пользователей и групп


Эта операция выполняется, при помощи команды edqouta (man edquota).

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



Установка одинаковых квот для множества пользователей


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



Установка программного обеспечения


Программное обеспечение для квотирования находится по адресу



Жесткие ограничения


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