Другие языки: AWK, SED, Smalltalk, Eiffel, ADA, Prolog, assembler, Objective C, Logo, Pascal (p2c конвертер)
C, Lisp и Perl являются традиционными языками программирования в системе GNU/Linux; Python, PHP, Java и C++ присоединились к их числу совсем недавно.
Risto S. Varanka
Перевод: Александр Ермолаев, ASPLinux
Краткое сравнение основных языков программирования в Linux, а также библиотек для создания графических интерфейсов пользователя (GUIs) в Linux.
Библиотеки
Общее название или аббревиатура библиотеки.
Начинающий
Подходит ли библиотека для начинающего программиста.
Лицензия
Различные лицензии для различных средств (инструментов) разработки GUI имеют практическое значение. Лицензии GTK+ и TK позволят вам разрабатывать приложения с открытыми исходными текстами и без них, без оплаты за лицензию. Лицензия Motif требует оплаты, лицензия QT требует оплаты, если вы распространяете приложения без исходных текстов.
Язык
Язык, который наиболее часто используется со средствами разработки.
Связанные
Другие языки, которые могут использовать комплект инструментов.
Примеры
Приложения, использующие библиотеку.
Комментарии
Дополнительная информация по средствам разработки.
Язык
Название языка.
Начинающий
Указывает, насколько язык удовлетворяет потребности людей с небольшим опытом программирования. Язык, отмеченный ``да'', должен быть прост для изучения новичком.
Эффективность
Как быстро ваши приложения будут работать, когда вы выпустите их в виде готового продукта. Эффективность зависит более от личных навыков алгоритмического программирования, чем от фактического языка. Как правило, C, C++ и Fortran являются иногда необходимыми, потому что они могут решать больше задач, в отличии от других языков - с другой стороны они могут быть неприменимы для достижения желаемой цели. (Одна идея для тестирования языков состояла в том, чтобы осуществить простой алгоритм сортировки во всех из них, а затем сравнивать продолжительность выполнения задания. Кто-нибудь хочет помочь мне в этом?)
ООП, Объектно-ориентированное программирование против других парадигм
Объектно-ориентированное программирование - важная составляющая программирования, которая получает все большее распространение. В объектно-ориентированном программировании, структуры данных и алгоритмы интегрированы в модули, часто называемые классами. ООП часто контрастирует с процедурным программированием (которое использует разделение алгоритмов и структуры данных). Это строго не зависит от языка: вы можете осуществлять ООП на языках, не причисляемых к объектно-ориентированным (C например), и программирование в процедурном стиле на языках, причисляемых к ОО. Я причислил к объектно-ориентированным языки, которые имеют специальные особенности или расширения, чтобы облегчить ООП. Функциональные языки (Lisp например) являются иным - среди других, функциональное программирование - надмножество ООП. Логическое программирование (Prolog), также называемое декларативным программированием, с другой стороны, не связано с иными типами программирования, в подобном смысле.
RAD, Быстрая разработка приложений
Многое зависит от инструментальных средств, которые вы используете, а не от языка. Имеется HOWTO по инструментам разработки GUI для Linux, хотя уже устаревшее. С хорошим графическим инструментом вы можете быстро разрабатывать приложения. Иногда RAD основан на многократном использовании готового кода, тем более что свободно распространяемое ПО - хорошая основа для этого.
Примеры
Области, в которых наиболее часто используется данный язык программирования. Другие области существуют, но в них применение данного языка не так ярко выражено.
Комментарии
Дополнительная информация относительно языка, "диалекты".
Оболочки - это также важная среда программирования. Я не охватил эту область, потому что не до конца понимаю ее. Знание shell важно для любого, кто регулярно работает на Linux, особенно для системных администраторов. Имеются подобия между shell программированием и созданием скриптов (сценариев) - часто они могут достигать тех же самых целей, и вы можете выбирать между родной оболочкой и скрипт-языком. Среди наиболее популярных оболочек можно отметить bash, tcsh, csh, ksh и zsh. Вы можете получить основную информацию по вашей оболочке с помощью команды man например, man bash.
Стандартные графические подсистемы для UNIX и Linux, называемые X(иксами), имеют свои собственные библиотеки для разработки GUI. Они обеспечивают программный интерфейс на низком уровне для X, но довольно сложны в использовании. Они, конечно, хороши для старых приложений, но в настоящее время используются GTK+ и Qt, так как их используют две популярные среды - GNOME и KDE.
Общий информационный сайт по языкам программирования, большое количество информации и мнений.
Еще один пример применения Прокси-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 необходим только для передачи пакетов из сети 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 с подсетями в ядре 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.
Bob Edwards
Robert.Edwards@anu.edu.au
Перевод: Станислав Рогин, ASPLinux
В этом документе описывается работа с подсетями при помощи протокола Прокси-ARP (Address Resolution Protocol). Моя цель - сделать так, чтобы подсеть из нескольких компьютеров была видна в другой подсети, использующей протокол IP. (Я называю такую конфигурацию суб-подсетью). В результате все должно выглядеть так, как будто машины локальной подсети (далее сеть 0) подключены к главной сети(далее сеть 1).
Это все будет работать только в том случае, если все машины соединены при помощи Ethernet-совместимых устройств (т.е. не будет работать с SLIP/PPP/CSLIP и т.п..)
Конфигурация подсетей, при которых необходимо использование Прокси-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.
! Выключаем 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, то вам придется изменять настройки вручную, если это понадобится, или создать еще одного пользователя с индивидуальными настройками.
Enter
mkdir /home/guest/.netscape chmod 777 /home/guest/.netscape |
Для того, чтобы создать каталог .netscape в домашнем каталоге пользователя guest и сделать его общедоступным в вашей системе выполните следующую команду.
Donald B. Marti Jr.
dmarti@best.com
Перевод: Михаил Корепанов, ASPLinux
В этом документе содержится информация о процедуре предоставления веб-доступа с ограничением возможностей пользователя.
Если вам нужна отдельная система, не подключенная к сети, предназначенная для проверки веб-страниц, то у вас должен быть установлен httpd, и, разумеется, все документы, предназначенные для проверки. Для этого нужно сделать следующее:
lynx -dump http://localhost/ |
Вы должны увидеть содержимое домашней страницы вашей системы.
Мы предполагаем, что у вас уже установлен работающий графический обозреватель типа Netscape Navigator. У вас должно быть разрешение на его использование. Если вам нужен коммерческий дистрибутив Netscape Navigator, то его можно приобрести с соответствующей лицензией у Caldera.
Если вы не можете воспользоваться правами пользователя root, попросите администратора завести пользователя ``guest'' и дать вам полные права на каталог guest. Когда вы это сделаете, перейдите к разделу "Создание файлов в домашнем каталоге пользователя guest".
Будучи пользователем root, используйте команду adduser для создания пользователя guest. Затем введите
passwd guest |
для задания пароля пользователя guest. Это должно быть что-то простенькое, например ``guest'', потому что вы будете его давать другим, и, ни в коем случае, этот пароль не должен совпадать с вашим личным.
Затем создайте домашний каталог guest. Введите
chown me.mygroup /home/guest |
Замените ``me'' своим обычным именем пользователя и ``mygroup'' на свою группу. (На Red Hat Linux они будут совпадать, так как у каждого пользователя есть своя собственная группа.)
Теперь вы должны выйти и все остальное делать как пользователь guest, а не root.
Это моя любимая почтовая программа.
Тут есть одна загвоздка - большинство программ 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 потому, что почтой пользуется и моя семья. 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 |
Я написал эту главу потому, что ваш ящик не будет работать без 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 |
# Основано на: # 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 |
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
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 для надежности.
Christopher Richardson
rdn@tara.n.eunet.de
Перевод: Михаил Корепанов, ASPLinux
Я просто записываю весь свой опыт по установке Qmail и предлагаю его прочесть тем, кто в нем нуждается. Версия 1.4
qmail доставляет почту в домашний каталог (~/Mailbox). Я добавил следующее в mtstailor
Дистрибутив SuSE Linux 5.1 с ядром 2.0.33.
PPP связь с провайдером
Вы используете все под свою ответственность, никаких возвратов денег и т.п.
Кто-нибудь смог "заставить" работать mh с Maildir? Я не пробовал этого по принципу - не надо трогать хорошо работающую систему. Если вам это удалось, то напишите мне об этом, и я включу этот материал в следующую версию документа.
В 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-6.8.4/mts/sendmail/smail.c программой mh-qmail-smail.c (написанной Dan Bernstein)
Файл mh-6.8.4/conf/MH выглядит следующим образом:
Следуйте в точности всем инструкциям INSTALL.
Замечания:
Прочтите полностью всю документацию. Цифры означают шаги при установке.
2 - Я устанавливал пользователей и их группы, как описано в INSTALL.ids
7 - ./qmail-makectl не работало на моей машине. Я добавил имя моего домена сам (mickey.n.eunet.de) в /var/qmail/control/me
23 - удостоверьтесь в том, что вы написали именно qmail-smtpd в файле inetd-conf. (Я написал qmail-smptd и искал ошибку два дня :( )
Разделы, на которых не включено квотирование, выглядят следующим образом:
Льготный период (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. |
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 используется для сканирования дискового пространства и обновления файла "quota.user". Я рекомендую запускать его во время загрузки системы или периодически через cron (скажем, каждую неделю).
Quotaon используется для включения подсчета квот; quotaoff для выключения. На самом деле, оба файла похожи между собой и запускаются во время запуска, и выключения системы соответственно.
Repquota выводит общий отчет по квотированию файловой системы. Пример:
Доступ к файлам записи квот quota.user и quota.group должен иметь только пользователь с правами root
Зайдите как пользователь root. Зайдите в корневой каталог и создайте файлы quota.user и quota.group:
Я слышал, что поддержка квотирования встроена в ядро, начиная с версии 1.3.8x, и теперь это часть ядра 2.0.x. Если ваша система не поддерживает квотирование, я настоятельно рекомендую обновить ядро.
В настоящее время, квотирование работает только на файловой системе ext2.
Эта операция выполняется, при помощи команды edqouta (man edquota).
Перед этим я обычно запускаю команду qoutacheck с параметрами -avug, чтобы файловая система точно знала, что и кем используется. Впрочем, это не обязательный шаг, а просто привычка.
Для быстрой установки квот, скажем для 100 пользователей, на те же значения, что и для пользователя bob, я должен определить ему квоты, а затем запустить:
Программное обеспечение для квотирования находится по адресу
Жесткие ограничения работают только тогда, когда установлен льготный период. Они определяют абсолютный лимит использования диска, который пользователь не может превысить.