Linux mini-HOWTO

         

Что я должен знать прямо сейчас?


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

Если однажды, в очень несчастливое утро ваш компьютер скажет "can't load, no system installed" ("не могу загрузиться, нет операционной системы"), вы не должны начинать полную переустановку.

Если у вас был установлен Windows, то я не могу обещать, что вы все восстановите, но, скорее всего, все что относится к Linux вы все-таки восстановить сможете, если только данные не находились в начале диска. Просто некоторые вирусы в Windows стирают первый цилиндр диска, что бы на нем ни находилось. Вообще-то я не экспериментировал с подобными вирусами, поэтому точно утверждать ничего не буду. Но попытаться все-таки, наверное, стоит.

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



Что надо делать сразу?


Если вы сейчас читаете это из простого любопытства или ищете полезную информацию, работая в Linux, сделайте немедленно следующее:

зайдите в систему пользователем root,

запустите "/sbin/fdisk -l" (последний символ - английская l (Leonid)).

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

Перепишите это все на бумагу (или запустите "/sbin/fdisk -l | lpr" для распечатки) и положите в надежное безопасное место для дальнейшего использования.

Если вы не системный администратор - то вас не должна беспокоить эта проблема, и вы можете спокойно прекратить чтение.



Диски


Жесткий диск разбивается на сектора, пронумерованные с 0 до некоторого максимума.

Команда dmesg выдает примерно следующее:

hdb: ST34321A, 4103MB w/128kB Cache, CHS=523/255/63

CHS означает Cylinders, Heads, Sectors (Цилиндры, Головки, Сектора).

523*255*63=8401995 секторов по 512 байт, то есть 4103 Мегабайт. Это логическое разбиение - то, что написано на самом диске, не так уж и важно (кроме общего объема винчестера).

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

Размер диска, видимый системой, напрямую зависит от BIOS (Basic Input/Output System - ПЗУ вашего компьютера). Режим работы вашего жесткого диска, указанный в BIOS, очень важен. Для нового диска лучше всего использовать автоопределение BIOS. В любом случае, любые исправления на этом уровне могут уничтожить все данные на диске, поэтому не изменяйте эти значения без особой на то причины.

Но, скорее всего, диск использует именно эти параметры, поэтому особо не беспокойтесь.



И в чем здесь проблема?


Проблема состоит в том, что все установленные ОС должны совместно использовать диски, а в начале работы системы BIOS обращается только к первому диску, на котором в самом начале должна быть, так называемая, "таблица разделов". Эта таблица разделов находится в Главной Загрузочной Записи MBR (Master Boot Record) вместе с начальным загрузчиком (boot loader).

Некорректное использование MBR любой ОС может привести к проблемам. При попытке установить любую систему, ответ "да", на вопрос типа "Автоматически разбить диск на разделы?", скорее всего, приведет к трудностям... Это чаще всего происходит с Windows, особенно со специальными установщиками Windows, включаемыми в поставку новых компьютеров (без настоящего дистрибутивного диска с Windows). И, к сожалению, стали уже не редкостью проблемы с "умными" (а на самом деле не очень умными) установщиками Linux в новых дистрибутивах.





Legal stuff


This mini-HOWTO is Copyright (c) 2000 by Jean-Daniel Dodin. All rights reserved. You may do (almost) whatever you want with it. I don't care. Just be sure to keep my name intact. I just hope it becomes useful for any person in the Linux community.

I am not responsible of any damage on any computer as a result of anyone reading this HOWTO. If you do any damage, _it is YOUR fault, NOT MINE !_ Be careful when partitioning disks, and don't make any mistakes, because it can be fatal ! Backup all your important data and check that everything you do is correct ! What is described here worked on my computer, but it may or may not work on your computer. Although it should work for everyone, I can't guarantee anything. This is the last warning you get : _BACKUP IMPORTANT DATA !_ Or, to put it short: Use at your own risk !



Мини-HOWTO: Восстановление разделов


Jean-Daniel Dodin

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

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



Наиболее новая версия


Самую новую версию этого минги-HOWTO можно найти на моем Linux веб-сайте по адресу http://www.linux-france/article/jdanield/



Не такое простое решение



Вручную

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

Во-первых, вам надо знать, что пока вы не пишете ничего на диск (кроме записи таблицы разделов при помощи fdisk), вы не можете испортить свои данные, поэтому можно пробовать устанавливать начало раздела последовательно цилиндр за цилиндром. Это надо делать потому, что для запуска системы с раздела, надо знать его начало. Например, если 153 не подошло, попробуйте 154, и так далее.

Это может утомить, но если вы помните примерные размеры разделов, то у вас есть шансы на успех.


gpart

Существует лучший путь, если у вас есть доступ к сети или есть под руками утилита gpart.

gpart - guess PC-type hard disk partitions (Восстановление таблицы разделов жесткого диска)" - это первая строка man-страницы для утилиты gpart (man gpart).

"gpart пытается восстановить таблицу разделов на жестком диске, если она была потеряна, перезаписана или разрушена, а разделы все еще присутствуют на диске". Это как раз то, что нам надо.

Утилита gpart все еще достаточно сыра, но уже довольно хороша для использования.

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

Вот результат работы gpart для ранее описанного диска hdb :

root@charles:/home/jdd > gpart /dev/hdb

Begin scan...

Possible partition(Linux ext2), size(1200Mb), offset(0Mb)

Possible partition(Windows NTFS), size(1200Mb), offset(1200Mb)

Possible partition(Linux ext2), size(1004Mb), offset(2402Mb)

Possible partition(Windows NTFS), size(1600Mb), offset(4102Mb)

End scan.

Checking partitions...

* Warning: partition(OS/2 HPFS, NTFS, QNX or Advanced UNIX) ends beyond disk end .

Partition(Linux ext2 filesystem): primary

Partition(OS/2 HPFS, NTFS, QNX or Advanced UNIX): primary

Partition(Linux ext2 filesystem): primary

Partition(OS/2 HPFS, NTFS, QNX or Advanced UNIX): invalid primary

Ok.

Guessed primary partition table:

Primary partition(1)

type: 131(0x83)(Linux ext2 filesystem)

size: 1200mb #s(2457880) s(63-2457942)

chs: (0/1/1)-(152/254/61)d (0/1/1)-(152/254/61)r

Primary partition(2)

type: 007(0x07)(OS/2 HPFS, NTFS, QNX or Advanced UNIX)

size: 1200mb #s(2457880) s(2457944-4915823)

chs: (152/254/63)-(305/253/60)d (152/254/63)-(305/253/60)r

Primary partition(3)

type: 131(0x83)(Linux ext2 filesystem)

size: 1004mb #s(2056256) s(4919781-6976036)

chs: (306/61/49)-(434/60/47)d (306/61/49)-(434/60/47)r

Primary partition(4)

type: 000(0x00)(unused) size: 0mb #s(0) s(0-0) chs: (0/0/0)-(0/0/0)d (0/0/0)-(0/0/0)r

Как видно из примера, главный раздел можно восстановить, но с расширенным придется еще поработать.

DOS-разделы названы "Windows NTFS" потому, что они были созданы при попытке установки Windows 2000 (очень опасный эксперимент!). А тот раздел, который назван "invalid" - это на самом деле расширенный раздел.

После запуска gpart можно запустить обычный fdisk и попытаться снова воссоздать таблицу разделов (помните, что это неопасно, так как исходная таблица разделов уже потеряна).



Простое решение


Все очень просто, если у вас есть:

диск (флоппи или CD), с которого можно загрузить Linux с программой fdisk - многие загрузочные диски любого дистрибутива могут это сделать,

распечатанный или переписанный результат работы команды fdisk -l (ниже "список").

Надо:

запустить Linux,

запустить fdisk /dev/hda (или тот диск, который хотите восстановить),

использовать команду удаления раздела fdisk (опция d) для всех существующих разделов поврежденного диска,

использовать команду создания главного раздела fdisk (опции 1-4) для всех главных разделов из списка,

проставить соответствующие типы разделов в соответствии со списком (опция t) : 82 - Linux swap, 83 - Linux main (опция L выдает список), 5 - расширенный, который надо создать до создания логических разделов.

создать логические разделы.

fdisk - это очень маленькая и умная программа. Существует много других реализаций fdisk, но я лично предпочитаю стандартный (Я говорю только от лица пользователей Linux).

Заметьте, что fdisk не записывает ничего на диск, пока вы не выберете опцию w и не нажмете Enter. Если вы боитесь ошибиться, выберите опцию q (quit) или нажмите Ctrl-C для выхода без сохранения изменений.

После записи таблицы разделов запустите свой Linux. Возможно, вам это не удастся: lilo тоже может быть поврежден, и вам придется снова загружаться с флоппи или загрузочного CD (выберите опцию "загрузка с существующего раздела").

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

Ваш Linux должен быть восстановлен - проверьте его. Также попытайтесь запустить Windows, если он у вас был. Если ничего не получается, то существуют шансы (которые, к сожалению, очень малы), что вы сможете прочитать данные с вашего Linux, возможно, при помощи прямого чтения секторов с диска. Если вы можете определить номера секторов диска, в которых находятся ваши данные, то используйте команду dd для записи их в файл. Это просто только для текстов. Описание такой формы восстановления данных не входит в этот документ.



Разделы


Диски сейчас стали достаточно большими, 13 Гб уже давно не редкость, поэтому не всегда удобно, чтобы вся информация была в одной куче. Так делает Windows, и, если у вас Linux, то, скорее всего, вы просто знаете, насколько Windows неэффективен.

Поэтому жесткий диск обычно делится на несколько частей, называемых "разделы" (см. "Мини-HOWTO: Разделы", где есть подробное описание работы с разделами, а также файл /usr/doc/package/util/README.fdisk)

Давайте взглянем на результат работы команды fdisk -l на моем компьютере:

Disk /dev/hdb: 255 heads, 63 sectors, 523 cylinders Units = cylinders of 16065 * 512 bytes

Device Boot Start End Blocks Id System /dev/hdb1 1 153 1228941 83 Linux /dev/hdb2 154 166 104422+ 82 Linux swap /dev/hdb3 * 167 291 1004062+ 83 Linux /dev/hdb4 295 523 1839442+ 5 Extended /dev/hdb5 295 422 1028128+ 83 Linux /dev/hdb6 423 523 811251 6 FAT16

Это мой второй жесткий диск, предназначенный для экспериментов (на первом все просто, а поэтому неинтересно).

/dev/hdb - это мой второй IDE диск (зависимый диск на первичном интерфейсе),

/dev/hdb1 - это первый главный раздел, начинающийся с первой дорожки по 153-ю.

На диске может быть максимум 4 таких главных раздела. Если необходимо иметь больше 4, один из них должен быть, так называемым, "расширенным" (не обязательно четвертым), и все дополнительные разделы называются "логическими" и находятся внутри расширенного. Заметьте, что разделы 4 и 5 имеют одно и то же начало. 5-ый раздел - логический, а 4-ый - расширенный. Номера логических разделов всегда начинаются с 5, даже если главных разделов меньше 4.



Решение проблемы


Будьте осторожны! Дальнейшие объяснения приведут к возврату к предыдущей ОС, с потерей, только что установленной, новой, если она есть! Выбирать вам...



Вариант для богатых


Partition Magic - это коммерческий продукт, не из дешевых, с точки зрения частоты применения (его цена примерно 100 долларов во Франции), но о нем очень хорошо отзываются. Однако, я никогда его не использовал и не буду его оценивать. Говорят, что он может что угодно делать с разделами, в том числе, и восстанавливать их. Однако, это утилиты для windows, и я не знаю, есть ли в нем DOS-часть. Если необходимо устанавливать Windows для использования Partition magic, то это не очень интересно.

Старый "Мини-HOWTO: Восстановление разделов" (автор Ralf) был почти полностью основан на применении Partition Magic, поэтому я предполагаю, что это хорошее решение, если у вас есть важные данные на Linux-разделе, а возможности вашего Linux малы. Однако, недавно появились свежие версии Partition Magic, и, я думаю, вам необходимо будет прочитать инструкции.



At


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

atd запускается, используя путь по умолчанию. Однако, пользовательские программы всегда работают в операционной среде, используя команду sh. Поэтому обычно оболочка изменяет этот путь. Смотрите главу по bash.



Bash


Как нормальная оболочка, bash просматривает общесистемный файл /etc/profile, где описано системное окружение и пути, которые могут быть установлены для пользователей bash. Однако, это не выполняется, когда система интерпретирует оболочку как не-интерактивную. Наиболее важный случай находится в rsh, когда удаленная команда выполняется на соседней машине. /etc/profile не запускается, и пути наследуются от rsh демона.

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

Пользователь может переписать значения, установленные в /etc/profile путем создания файлов ~/.bash_profile, ~/.bash_login или ~/.profile. Обратите внимание, что только самый первый из них выполняется - отличается от логики инициализации csh. ~/.bash_login не выполняется специально для оболочки входа в систему и если .bash_profile существует, он не выполняется вообще.

Если bash используется с именем sh вместо имени bash, он эмулирует инициализацию bash: ищет файлы /etc/profile и ~/.profile только для входных оболочек.



Cron


Cron является командой, которая периодически выполняет команды, как определено в /etc/crontab, и определяемых пользователем crontab'ах. В Debian 1.3 имеется стандартный механизм, чтобы выполнить команды в /etc/cron.daily, /etc/cron.weekly и /etc/cron.monthly.

Cron стартует с начала загрузки, но это, кажется, изменяет PATH к довольно странному значению:



Inetd


Большинство сетевых сервисов не имеют собственного процесса для постоянного ожидания запросов. Эта работа поручается супер-серверу интернет, называемому inetd. Inetd слушает все определенные сетевые порты и запускает соответствующий сервер, когда имеется входящий запрос. Этот режим определен в /etc/inetd.conf.

inetd стартует из скрипта при запуске системы. Он наследует пути процесса init. Он не изменяет их, и все серверы стартующие от inetd имеют пути процесса init. Пример такого сервера imapd, сервер почтового протокола IMAP.

Другие примеры процессы inetd - telnetd, rlogind, talkd, ftp, popd, многие http серверы и т.д.

Часто использование inetd еще усложняется, при использовании отдельной программы tcpd для запуска конкретного сервера. Это программа делает дополнительную проверку безопасности до запуска конкретного приложения. Она не изменяет пути (не проверено).



Как выявлять проблемы?


Основная команда для чтения переменных окружения - /usr/bin/env.

Возможно использовать каталог /proc, чтобы выяснять окружение любой программы. Первое, вы должны знать номер процесса - используйте команду ps, чтобы получить его. Например, если номер процесса xterm - 1088, можно просмотреть его окружение с помощью команды

# more /proc/1088/environ

Это не работает с демонами, типа xdm. Чтобы обращаться к среде окружения системных процессов или к другим пользовательским процессам, требуются права root.

Для отладки Netscape, вы можете создать скрипт /tmp/test:

$ cat > /tmp/test #!/bin/sh /usr/bin/env > /tmp/env ^d $ chmod +x /tmp/test

Затем установите вспомогательное приложение, например RealAudio, audio/x-pn-realaudio, чтобы вызвать программу "/tmp/test". Теперь попробуйте в вашем браузере пойти по ссылке с RealAudio контентом (например, http://www.realaudio.com/showcase), Netscape вызовет вашу программу-куклу, которая сохранит окружение в /tmp/env.



Magicfilter


magicfilter является общим инструментом, чтобы управлять файлами для принтера. Он анализирует тип файла, который будет напечатан, и вызывает скрипт для печати соответствующих файлов. Эти скрипты вызываются от демона lpd, который стартует из /etc/init.d/lpd, запускающегося от init. Таким образом путь такой, как и у init. Он не содержит /usr/bin/X11!

Вы можете захотеть поставить на печать PDF файл. Это возможно сделать, используя /usr/bin/X11/xpdf. Теперь вы не должны забыть вставить полный путь к каталогу файла, потому что magicfilter не найдет его. Большинство программ, используемых в magicfilter, не нуждаются в полном пути, т.к. находятся в /bin или /usr/bin.



Некоторые стратегии, позволяющие получить одинаковые пути для всех пользователей


Наиболее важные установки находятся в глобальных файлах инициализации: /etc/csh.login для tcsh и /etc/profile для bash.

Исключения - программы, которые не могут получить правильные пути от этих файлов - это команды ssh, rsh, X window manager (явно не запускает login shell), ,команды вызываемые inittab, задачи запускаемые cron, демоны, подобные magic filters запускаемые lprd, WWW CGI скрипты и т.д.

Если пути установлены в /etc/csh.cshrc, то они правильные, даже когда rsh или ssh выполняют команду на удаленной машине с аккаунтом, использующим tcsh/csh. Однако, не возможно установить пути, если аккаунт использует bash/sh.

Возможно комбинировать установку путей в один файл, например, в файл /etc/environment-common. Теперь пишем:

${EXPORT}PATH${EQ}/bin:/usr/bin:/sbin:/usr/sbin:/usr/bin/X11:/usr/local/bin:/usr/games:.

Это можно использовать из /etc/csh.login (для tcsh и csh)

set EQ=" " set EXPORT="setenv " source /etc/environment-common

И из /etc/profile (для bash, не работает для обычного sh)

EQ='=' EXPORT="export " . /etc/environment-common

И из /etc/environment (для XDM)

EQ="=" EXPORT="export " . /etc/environment-common

Такая стратегия, главным образом, работает, но ssh будет выдавать сообщения об ошибках в /etc/environment (на определения EQ и EXPORT). И еще, rsh-команды, выполняемые в bash, не будут получать этот путь.



Оболочки


Часто пользовательские процессы - дочерние процессы оболочки записаны в /etc/passwd для этого пользователя. Файлы инициализации оболочек часто изменяют пути.

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



Общие принципы


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

Одна важная переменная окружения - PATH (ПУТЬ), список каталогов, разделенных двоеточием (':'). Эти каталоги просматриваются, чтобы найти команды. Если вы пробуете вызвать команду 'foo', все каталоги из переменной PATH (в указаном порядке) будут просмотрены для выполнения файла 'foo' (с установленными правами на выполнение). Если файл найден, он исполняется.

В этом документе я использую термин 'команда', к которому отношу программы, которые, как предполагается, имеют короткое имя, используя механизм путей.

В Linux для запуска процесса операционная система просматривает каталоги, записанные в переменной PATH: вы можете использовать механизм путей там, где пробуете выполнить команду. Если операционная система получает имя файла, котрый не содержит '/' то просматриваются каталоги из переменной окружения PATH. Даже если в среде не имеется никакой переменной PATH, по крайней мере, каталоги /bin и /usr/bin будут просматриваться.

В sh вы используете команду export, чтобы установить окружение, в csh используйте команду setenv. Например:

sh:

PATH=/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:.

csh:

setenv PATH /usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:.

C-программы могут использовать библиотечную функцию setenv() для изменения окружения. Perl содержит окружение в ассоциативном массиве %ENV, вы можете установить PATH так $ENV{PATH}="/bin".

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

Более исчерпывающую информацию по основам механизма окружения можно взять из страниц руководства (man) 'environ', 'execl', 'setenv', или info 'env' и из документации по вашей оболочке.

Когда Linux загружается, первый процесс, который запускается является init. Это - специальный процесс, потому что не имеет родителя. Однако он первичный для всех процессов. Окружение init останется окружением всех процессов, если он не касаются окружения явно. Большинство процессов изменяют окружение.

Init запускает группу процессов. Файл /etc/inittab сообщает то, какие процессы система запускает. Эти процессы работают в окружении, прямо унаследованом от init - например программа 'getty' пишет 'login:' на консоль. Если вы запускаете соединение PPP, вы должны помнить, что вы работаете в окружении init. Инициализация системы - это часто сценарий, который запускается отсюда. В Debian 1.3 скрипт инициализации /etc/init.d/rc вызывает, в свою очередь, другие сценарии инициализации.

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

Когда пользователь заходит в систему, на среду действуют назначения, которые записаны в программу при компиляции, в системный скрипт инициализации и в пользовательский скрипт инициализации. Это довольно усложнено, и текущая ситуация не полностью удовлетворительна. Процесс различается, если пользователь заходит из консоли, XDM или из сети.



PATH HOWTO


Esa Turtiainen
etu@dna.fi
Перевод: Александр Ермолаев, ASPLinux



Печать из X приложений


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

Вы должны помнить, что если X сессия запускается из XDM, window manager никогда не обрабатывает ваши сценарии для входа. Все X приложения, которые вы запускаете из xterm, имеют переменную PRINTER. Однако, если то же самое приложение запускается из меню window manager'а, оно не будет содержать вашу переменную PRINTER.

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



По поводу безопасности


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

Обычная ошибка раньше состояла в том, что '.' содержалась в путях root'а. Злобный хакер делал программу 'ls' и держал ее в своем домашнем каталоге. Если root делал

# cd ~hacker # ls

он исполнял хакерскую программу ls.

Косвенно, это может применяться ко всем программам, запущенным от root. Любой важный демон никогда не должен запускать программы, записанные другим пользователем. В некоторых системах, /usr/local/bin разрешает содержать программы менее строгие в отношении безопасности - это только что удалено из переменной пути пользователя root. Однако, если известно, что некоторый демон выполняет 'foo', используя пути '/usr/local/bin/:...', то возможно обмануть демон, чтобы он выполнил '/usr/local/bin/foo', вместо '/bin/foo' Вероятно любой, кто может записывать в 'usr/local/bin', способен взломать систему.

Очень важно рассмотреть, в каком порядке каталоги прописаны в путях. Если /usr/local/bin записан перед /bin - вы рискуете защитой.

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



Процесс Init


Init - родительский процесс для всех остальных процессов системы. Другие процессы наследуют окружение процесса init и пути, прописанные в init. Только в редких случаях другие пути не установлены.

'Пути init' зафиксированы в исходниках программы и они выглядят так:

/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin

Заметьте, что пути init не содержат /usr/local/bin.

Все программы, которые запускаются из /etc/inittab работают в окружении init, особенно системные скрипты инициализации из /etc/init.d (Debian 1.3).

Все, что запускается из системных сценариев инициализации, имеет окружение init, как окружение по умолчанию. Например, syslogd, kerneld, pppd (когда стартует при запуске), gpm, lpd и inetd имеют окружение init, и не изменяют его.

Группа программ стартует из загрузочного скрипта, и PATH явно установлена в этом скрипте. Например: atd, sendmail, apache и squid.

Имеются другие программы, которые стартуют из сценариев начальной загрузки, но они заменяют путь полностью. Один такой пример - cron.



Процесс Login


В текстовой консоли имеется программа getty, ожидающая вход в систему пользователя. Она пишет 'login:' и другие сообщения. Работает в окружении init. Когда пользователь входит в систему, getty вызывает программу 'login'. Эта программа устанавливает пользовательское окружение и вызывает оболочку.

Программа Login устанавливает пути, определенные в /usr/include/paths.h. 'Пути login' различны для root и других пользователей.

для обычных пользователей (_PATH_DEFPATH):

/usr/local/bin:/usr/bin:/bin:.

для root (_PATH_DEFPATH_ROOT):

/sbin:/bin:/usr/sbin:/usr/bin

Пути обычных пользователей не содержат пути, содержащие любые sbin каталоги. Однако, они содержат текущий каталог, '.', который считается опасным для пользователя root. Даже /usr/local/bin не указан для root.

Пути Login часто переписываются скриптом инициализации оболочки. Однако, возможно использовать другие программы, записанные в /etc/passwd как оболочки пользователя. Например, я использовал следующую строку, чтобы запускался PPP, когда я вхожу в систему, используя специальное имя пользователя. В этом случае, pppd имеет точный путь входа в систему.

etu-ppp:viYabVlxPwzDl:1000:1000:Esa Turtiainen, PPP:/:/usr/sbin/pppd



Rlogin


Rlogin вызывается при входе в систему, чтобы запустить реальную процедуру входа в систему. Если вы входите с помощью rlogin, то получаете те же самые пути, что и при обычном входе в систему. Большинство других способов войти на Linux компьютер не использует login. Обратите внимание на разность с rsh.

Команда login фактически использует



Rsh


Демон rsh устанавливает пути из определения _PATH_DEFPATH (/usr/include/paths.h), этот же путь использует программа login для нормальных пользователей. Root получит тот же путь, что и нормальный пользователь.

Фактически, rshd выполняет команду, полученную из командной строки:



Сетевые серверы


Большинство сетевых серверов не должно вызвать подпроцессы любого вида. Из соображений безопасности их путь должен быть минимален.

Важное исключение - все сервисы, которые позволяют подключаться к системе через сеть. Этот раздел описывает окружение в этих случаях. Если команда выполняется на удаленной машине с помощью rsh, она получает другой path, чем тот, если команда выполнена с помощью ssh. Подобно, вход в систему с помощью rlogin, Telnet или ssh различны.



Ssh


ssh имеет собственную установку путей. Он добавляет каталог, где находится ssh. Часто это означает, что /usr/bin находится в пути дважды:

/usr/local/bin:/usr/bin:/bin:.:/usr/bin

Путь не содержит /usr/X11/bin, и оболочка, вызванная командой ssh - не оболочка входа в систему. Таким образом,

ssh remotehost xterm

не работает, и что-либо в /etc/profile или в /etc/csh.cshrc может заменить это. Вы должны всегда использовать явный путь /usr/bin/X11/xterm.

ssh ищет переменные окружения в форме VAR=VALUE в файле /etc/environment. К сожалению, это вызывает некоторые проблемы с XFree86.



Su


Команда su делает переключение на нового пользователя. Если никакое имя пользователя не указано, то используется пользователь root.

Обычно su вызывает подоболочку другого пользователя. С аргументом '-' (более новые синонимы -l или --login) su вызывает оболочку, подобную входной. Однако она не использует программу login, чтобы сделать это, но использует встроенную функцию для 'симуляции' (simulation - термин используемый в исходном тексте) программы login. Итак:

для нормальных пользователей



Sudo


Имеется группа команд, которые делают использование команд супер-пользователя более безопасным. Они позволяют лучше регистрироваться в системе, устанавливать ограничения пользователям и использовать индивидуальные пароли. Наиболее широко используется команда sudo.

$ sudo env

выполняет команду env как супер-пользователь (если конфигурация позволяет это сделать).

Команда sudo имеет различный подход к обработке путей. Она изменяет пути поиска файлов так, чтобы текущая директория всегда находилась в конце списка. Однако, она не изменяет переменную окружения PATH. Для 'sudo env' и 'env' переменная PATH имеет одинаковые значения. Sudo добавляет только пару переменных среды, подобные SUDO_USER.



Tcsh


При входе оболочка tcsh исполняет следующие файлы в данной последовательности:

/etc/csh.cshrc

/etc/csh.login

?/.tcshrc

?/.cshrc (если .tcshrc не найден)

?/.history

?/.login

?/.cshdirs

tcsh может быть скомпилирован так, чтобы выполнять login скрипт до cshrc скрипта. Остерегайтесь!

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



Telnet


Telnet является че- то подобным rlogin. Использует программу login и командную строку.



Window manager


Window manager наследует окружение XDM. Все программы запущеные window manager'ом наследуют окружение window manager'а.

Окружение оболочки пользователя не затрагивает программы, запускаемые из window manager'а. Например, если программа запускается от 'xterm -ls', она имеет заданную по умолчанию среду при входе в систему, но если она запускается из меню, то имеет только окружение window manager'а.



XDM


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

В каталоге /etc/X11/xdm имеются конфигурационные файлы, которые выполняются на различных фазах входа в систему. Xstartup (и Xstartup_0 специально для screen 0) содержат команды, запускаемые после входа пользователем в систему (команды выполняются под root'ом).

Путь, который установлен для пользователей, находится в /etc/X11/xdm/xdm-config. Имеются строки:



Xterm -ls


По умолчанию путь для всех команд, вызываемых из диспетчера X window, наследуется от XDM. Использование чего-то отличного от этого должно быть установлено явно. Чтобы запустить эмуляцию терминала с "нормальными" путями, нужно использовать специальную опцию. В xterm опция -ls (login shell) должна использоваться, чтобы получить пути определенные в скриптах инициализации оболочки.



Linux mini-HOWTO

Активация PLIP соединения


Наконец, нужно дать (под правами пользователя root) несколько команд для активации PLIP интерфейса (само собой кабель уже должен быть правильно подключен).

ПРИМЕЧАНИЕ: Если произойдет что-то непредвиденное, то дважды проверьте кабель и синтаксис команд. Если вы в точности следовали указаниям, а ошибки все равно остались, то прочитайте раздел FAQ - там есть множество ответов на вопросы.

Прежде всего убедитесь в отсутствии устройства lp:

# cat /proc/devices

Вы не должны видеть какие-либо ссылки на lp типа этой:

6 lp

Если вы их видите, то уберите (временно) lp устройство перед тем, как двигаться дальше. Если PLIP заработает, то позже можно будет попробовать его с lp. Для того, чтобы убрать это устройство, либо придется воспользоваться командой rmmod (если это модуль), либо (если поддержка lp собрана в ядре) собрать ядро заново, скомпилировав lp как модуль (куда более мудрая идея).

Я опять использую в качестве примеров имена one и two. На one вам нужно сделать следующее.

Если у вас нет демона автозагрузки модулей, то загрузите модуль вручную:

# insmod plip

ПРИМЕЧАНИЕ: если IRQ параллельного порта отличен от 7, и/или адрес ввода-вывода отличен от 0x378, то вам нужно указать это для insmod. Определите, IRQ и адрес ввода-вывода (можно воспользоваться командой DOS MSD, но не стоит слишком доверять ей), и дайте примерно следующую команду:

# insmod plip io=0x278 irq=5

Обычно IRQ бывает 7 или 5, а адрес ввода-вывода - 0x378, 0x278 или 0x3bc. Важно убедиться в том, что адрес и IRQ соответствуют установкам аппаратного обеспечения (переключатели на старых карточках, BIOS на современных материнских платах).

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

# lsmod

Module: #pages: Used by: plip 3 0

Посмотрите имя интерфейса (plip0, plip1 и т. д.; см. раздел о сообщениях ядра выше), после чего поднимайте PLIP интерфейс:

# ifconfig plip1 one pointopoint two up

ПРИМЕЧАНИЕ: если IRQ вашего параллельного порта не равен 7, и/или адрес ввода-вывода не равен 0x378, то вам нужно сообщить об этом ifconfig. Для этого дайте примерно следующую команду, в качестве параметров указав ваши значения:


# ifconfig plip1 irq 7 # ifconfig plip1 io_addr 0x3bc


Обычно IRQ равен 7 или 5, а адрес ввода-вывода 0x378, 0x278 или 0x3bc.

Теперь проверьте, как это работает...

# ifconfig

..... ..... plip1 Link encap:10Mbps Ethernet HWaddr FC:FC:C8:00:00:01 inet addr:200.0.0.1 P-t-P:200.0.0.2 Mask:255.255.255. 0 UP POINTOPOINT RUNNING NOARP MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 TX packets:0 errors:0 dropped:0 overruns:0 Interrupt:7 Base address:0x378


Добавьте путь (route) к two...

# route add two plip1


И, если вам нужен NFS для two:

# rpc.portmap # rpc.mountd # rpc.nfsd


На "two" команды те же самые, только нужно заменить one на two и наоборот.

Одна из ваших машин, скорее всего, будет иметь только PLIP соединение. Если это так, и эта машина - two, то можно также ввести на ней:

# route add default gw one


В моем примере two - это переносной компьютер с единственным (PLIP) соединением с one, поэтому я набирал на нем эту строчку.

Последняя проверка, чтобы убедится, что все работает:

# ping two


с one и

# ping one


с two.

Скорее всего, вам захочется, чтобы все эти команды автоматически запускались при загрузке. Для этого создайте скрипт, запускающий их - его можно будет просто запускать (на правах пользователя root) или вставить в /etc/rc.d/rc.inet2 команду, вызывающую его при загрузке.

Для настройки PLIP можно использовать команду plipconfig. За подробностями обратитесь к документации.

Для отключения PLIP нужно набрать:

# ifconfig plip1 down,


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

# rmmod plip



Аппаратное обеспечение, необходимое для использования PLIP


Для работы PLIP интерфейса необходимо (очевидно) наличие свободного параллельного порта на обеих машинах и кабеля. Если у вас есть возможность настраивать BIOS, включите хотя бы "двунаправленный" режим работы порта, а лучше всего ECP или EPP.

Насчет кабеля. Вот то, что написано в файле plip.c, входящем в исходные тексты ядра версии 2.0.33:

Используемый кабель - стандартный параллельный нуль кабель, продаваемый в различных местах как кабель "LapLink". Если желаете сделать его сами, то вам понадобится 12-жильный кабель. Разводка следующая: SLCTIN 17 - 17 GROUND 25 - 25 D0->ERROR 2 - 15 15 - 2 D1->SLCT 3 - 13 13 - 3 D2->PAPOUT 4 - 12 12 - 4 D3->ACK 5 - 10 10 - 5 D4->BUSY 6 - 11 11 - 6 Остальные контакты не соединяйте. Это D5,D6,D7 are 7,8,9 STROBE is 1, FEED is 14, INIT is 16 extra grounds are 18,19,20,21,22,23,24

Для получения более подробной информации о кабеле, я настоятельно рекомендую прочитать /usr/src/linux/drivers/net/README1.PLIP и README2.PLIP.

На мой взгляд, вы должны избегать использования самодельных кабелей. Такой кабель почти не дает экономии денежных средств, но может добавить кучу проблем. Если вы все же решили сделать свой собственный кабель, то помните, что вы делаете это на свой страх и риск. Я привел фрагмент plip.c, но не даю никаких гарантий.

И еще. Длинные кабеля (более 10 футов или 3 метров) могут вызвать проблемы из-за действия электрических полей. Используйте хорошо экранированные кабеля, если используется длинное соединение. Впрочем, в любом случае, не рекомендую использовать кабеля длиной более 15 метров (50 футов).

Кто-то написал мне, что его/ее 100-футовый (30 метров) кабель прекрасно работает. Если кто-нибудь желает попробовать установить PLIP соединение между своим домом и офисом ( метров 200), то пусть попробует это сделать :-).



FAQ


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

При загрузке системы (или модуля) я получаю следующие сообщения:

SIOCSIFADDR: No such device SIOCADDRT: Network is unreachable

и при попытке установить соединение, как описано выше, я снова получаю примерно такие сообщения:

SIOCSIFADDR: No such device SIOCSIFDSTADDR: No such device SIOCADDRT: Network is unreachable mount clntudp_create: RPC: Port Mapper failure - RPC: Unable to send

По какой-то причине ядро не поддерживает PLIP. Это может быть из-за того, что:

Вы не включили поддержку PLIP (PLIP support) при настройке ядра.

Вы включили поддержку принтера (Printer support) при настройке ядра.

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

Вы указали не тот порт, например plip1, вместо plip0.

Есть ли способ (кроме модулей) поддерживать и PLIP, и LP, возможно с двумя параллельными портами?

Да, есть два способа, описанные в разделе "Патчи для совместной работы PLIP и LP":

Можно использовать патч, позволяющий ядру поддерживать и то, и другое.

Можно взять другой патч, позволяющий ядру использовать один порт для PLIP, а второй - для LP.

Я написал скрипт, запускаемый из rc.inet2, который соединяет 2 моих компьютера, и включает NFS. Машина "one" подключает каталоги с машины "two". Кроме того, я добавил правильные строки в /etc/fstab второго компьютера (two). Если я загружаю его в то время, как "one" выключен, то он несколько минут ждет "подключение удаленных файловых систем..." ("mounting remote file systems...").

Это происходит из-за того, что "two" пытается подключить файловые системы с "one". Если же последний выключен, то вам приходится ждать, пока "two" надоест пытаться сделать это. Чтобы избежать этого, вы можете:

Закомментировать в rc.inet2 команду, подключающую удаленные файловые системы.

Убрать из /etc/fstab компьютера "two" соответствующие строки и подключать удаленные файловые системы вручную.


Есть решение получше - определять при загрузке включен ли "one", и только в этом случае подключать с него файловые системы. Этого можно достигнуть, заменив команду mount в rc.d (или где оно там у вас) примерно такими строчками:

if ping -c 5 one ; then mount one:/..... fi


Соединение есть, но ping не работает. Ядро выдает следующее (или подобное) сообщение:

plip1: timed out (1, 89)




Это означает что, с "вашей стороны" соединения все нормально, ваша машина посылает сигналы, но "другая сторона" не отвечает. Как правило это случается при работе с некачественным кабелем или неправильной настройке IRQ/адреса ввода-вывода. Вообще, более 60% проблем связано с неправильной установкой IRQ. Попробуйте сменить его, очень вероятно, что все заработает. Ниже приводится более подробный список возможных причин возникновения этой проблемы:



Кабель неправильно подключен, неисправен или вообще не тот. Если есть такая возможность, включите его между машинами с заведомо работающим PLIP. Если такой возможности нет, то хотя бы проверьте тестером. Факт того, что кабель работал под DOS/win95 - хорошее предзнаменование, но не 100% гарантия.



На машине с "другой стороны" не загружен PLIP.



Если вы соединяетесь с переносным компьютером с нестандартным параллельным портом, то смотрите ниже.



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



Ваш параллельный порт не был настроен (как минимум) как двунаправленный. Зайдите в конфигурацию BIOS и перенастройте его. Возможны также варианты EPP и ECP.



Параллельные порты имеют различный IRQ. Загрузите plip (или lp) модуль с другим IRQ. См. раздел "Активация PLIP соединения".



Другие устройства (например звуковая карта) использует тот же IRQ. Не доверяйте DOS программам типа MSD, лучше просто попробуйте загрузить PLIP модуль с другим IRQ.

Я правильно указал IRQ и адрес ввода/вывода, но PLIP все равно не работает. Адрес и IRQ я узнал с помощью MSD.





MSD не всегда правильно определяет адрес порта. Попробуйте эту программу: http://www.cs.caltech.edu/ huny/para13.zip.

Соединение установлено, и ping работает, но иногда ядро выдает (или похожее) следующее сообщение:

plip1: timed out (1, 89)




Это означает, что другая сторона не ответила до истечения времени ожидания. Если все работает, то вы можете не обращать внимания на эти сообщения: как правило это значит, что другая сторона намного медленнее, чем ваша, что возможно из-за старого аппаратного обеспечения или высокой загрузки машины. Можно попробовать настроить PLIP командой plipconfig.

Я настроил PLIP соединение между моим настольным компьютером и переносным, но ping сообщает о 100% потере пакетов.



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



Посмотреть конфигурацию вашего ноутбука - если есть возможность, то настроить параллельный порт для работы в двунаправленном режиме. Обычно он называется "parallel enhanced mode" (расширенный режим работы параллельного порта).



Попробовать plip mode 0 (режим 0). Увы, я не знаю, как это сделать, и/или будет ли это работать, а также поддерживается ли этот режим в последних ядрах.

Какой скорости можно достигнуть при передаче через PLIP?



Это непростой вопрос, так как МНОЖЕСТВО различных факторов могут влиять на скорость:



Скорость процессора на обеих сторонах соединения.



Тип и настройки параллельного порта.



Загруженность системы.



Для чего вы использует PLIP.

По грубым прикидкам, вы должны достигнуть скорости около 40Кбайт/сек, что намного выше любой скорости, достижимой на последовательном порту, и приближается к медленным сетевым картам.

Что если мне нужно часто давать команду ifconfig up и ifcongig down для plip1?



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



Я прочитал об IP адресах, зарезервированных для внутренних сетей. 200.0.0.1 и 200.0.0.2 к ним не относятся. Не нужно ли их поменять?



Да, нужно, но я сразу же подчеркнул, что выбрал эти адреса только из-за их простоты. Вы можете свободно менять их на то, что пожелаете. Вот цитата из net-2-howto:

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

10.0.0.0 - 10.255.255.255 172.16.0.0 - 172.31.255.255 192.168.0.0 - 192.168.255.255


Есть ли способ настроить параметры PLIP без правки исходного текста кода?



Да, есть. Попробуйте команду /sbin/plipconfig. За более подробной информацией обращайтесь к руководству (man).

У меня установлен Debian GNU/Linux, в котором отсутствуют файлы /etc/rc.d/rc.inet1 и 2. Куда мне прописывать команды настройки plip?



В Debian GNU/Linux все команды, которые предполагалось вставить в rc.inet1 и 2, нужно внести в /etc/init.d/network.

У меня возникли сложности со связыванием двух машин с помощью PLIP. На первой стоит ядро последней версии, а на второй PLIP версии 1.0. Не в этом ли дело?



Да, будет намного лучше, если версии PLIP на обоих концах будут одинаковые. В plip.c указано, что PLIP (последних версий) не может работать с PLIP версии 1.0.xx.

В данный момент PLIP работает с 4 битами, а как насчет 8-битного PLIP, про который я читал в документации по ядру? Кажется, он называется режимом 1 (mode 0).



Этот Mini-HowTo опсиывает настройку PLIP. За технической информацией обращайтесь, пожалуйста, к автору или читайте /usr/src/linux/drivers/net/README*.PLIP. Я знаю только следующее: стандартный PLIP использует "параллельный нуль-кабель" и работает в режиме 0 (не путайте с именем интерфейса plip0), использующем 4 бита. Режим 1 использует 8 бит и уже должен быть реализован, но для него нужен самодельный кабель, и работать он будет только между машинами с Linux. Я не знаю, как настраивать режим 1. Если кто-нибудь знает, то сообщите мне, пожалуйста.


Где найти новые версии этого mini-howto


Этот mini-HOWTO сопровождается координаторами HOWTO и ежемесячно посылается в comp.os.linux.answers

, а также может быть найден в каталоге HOWTO на сайте sun и его зеркалах.

Другой способ найти этот mini-HOWTO (и связаться со мной) - зайти на мою домашнюю страничку,

http://www.cli.di.unipi.it/~controzz/intro.html (итальянский язык)

http://www.cli.di.unipi.it/~controzz/intro_e.html (английский язык)



LINUX PLIP MINI-HOWTO


Andrea Controzzi
controzz@cli.di.unipi.it
Перевод: Денис Дементьев, ASPLinux

Использование информации этого HOWTO позволит вам настроить и использовать протокол параллельного интерфейса (Parallel Line Interface Protocol).



Настройка файлов конфигурации


ПРИМЕЧАНИЕ: Некоторые дистрибутивы, например, Debian используют другие файлы конфигурации. Если у вас стандартная инсталляция и вы не нашли файлы rc.inet*, поищите (другие) файлы в каталоге /etc/init.d.

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

#cp rc.inet1 rc.inet1.BACKUP

- один из вариантов.

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

В файле /etc/rc.d/inet1.rc на обеих машинах добавьте следующую строчку (лучше в конец файла):

/sbin/route add -net ${NETWORK} netmask ${NETMASK}

Где NETWORK и NETMASK должны быть установлены ранее. Если вы не знаете, как это сделать, прочитайте NET-2-HOWTO.

Если после выполнения этой команды route вы будете получать сообщение:

SIOCADDRT: network unreachable,

то используйте такую строку:

/sbin/route add -net ${NETWORK} netmask ${NETMASK} dev plip1,

где обычно имя интерфейса берется из сообщения ядра (см. выше).

Игнорировать эти переменные можно только в следующем случае:

Если вы хотите соединить две машины в отдельно стоящей сети, то можете выбрать произвольные IP адреса, например, 200.0.0.1 и 200.0.0.2 соответственно. В этом случае можно указать NETWORK="200.0.0.0" и NETMASK="255.255.255 .0". Эти значения я использовал в разделе "Быстрая установка PLIP (см. ниже).

ПРИМЕЧАНИЕ: 200.0.0.1 и 200.0.0.2 взяты лишь в качестве примера. Я не советую их использовать, так как они могут оказаться адресами реальных машин в Internet!

Настоятельно рекомендую выбирать адреса из зарезервированных для этой цели интервалов:

10.0.0.0 - 10.255.255.255 172.16.0.0 - 172.31.255.255 192.168.0.0 - 192.168.255.255

В файле /etc/hosts на обеих машинах добавьте строки с IP адресами машин, соединяемых через PLIP. В моем примере я добавил следующие строки:

200.0.0.1 one # IP адрес машины "one" 200.0.0.2 two # IP адрес машины "two"

Где one и two - имена, выбранные вами для обеих машин.

Если вы планируете использовать NFS, то, кроме включения ее поддержки в ядре, вы должны добавить в файл /etc/exports строки, описывающие экспортируемые каталоги. В моем примере для доступа к каталогу /usr я добавил:

/usr two (ro)

Для более подробной информации о NFS читайте соответствующую документацию. Не сообщайте мне о проблемах возникших с NFS - я не смогу вам помочь.

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



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


Предполагается, что вы знаете, как настраивать и компилировать ядро. Если нет, то почитайте документацию (kernel-howto или другие руководства). Благодаря отличной работе, проделанной над ядром, последние версии могут быть легко настроены "обычными" людьми. Для полноты картины все же перечислю вкратце, что нужно сделать.

ПРИМЕЧАНИЕ: я предполагаю, что вы используете ядро версии 2.0.xx. Не даю никаких указаний по ядрам версий 2.1.xx, так как они предназначены для разработки.

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

#make menuconfig

Настоятельно рекомендую выбрать

Loadable module support --->

и включить

[*] Enable loadable module support

и, если возможно, (то есть у вас модули версии 2.0.0)

[*] Kernel daemon support (e.g. autoload of modules)

Затем вернуться и перейти в

Networking options --->

где, как минимум, нужно включить

[*] Network firewalls [*] TCP/IP networking [*] IP: forwarding/gatewaying

Затем вернуться и включить

[*] Network device support PLIP (parallel port) support

Если вы используете модули, рекомендую включить PLIP как модуль. Если вы так и сделали, и вам нужен принтер, перейдите в

Character devices --->

и включите как модуль

Parallel printer support

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

И, наконец, соберите ядро

#make dep ; make clean #make zlilo

Если есть модули

# make modules # make modules_install

После чего перезагрузите систему.



Опыт по PLIP соединению DOS-Linux


ПРИМЕЧАНИЕ: Я получил этот документ от James Vahn jvahn@short.circuit.com, и поместил сюда без изменений. Это означает, что в любом вопросе, касающемся этого документа, он разбирается гораздо лучше меня, поэтому пишите, пожалуйста, ему, а не мне. Его опыт по PLIP соединению компьютера под DOS с одним только флоппи-дисководом с компьютером под Linux - отличный пример того, как можно справляться с общими проблемами.

Последнее обновление сделано 11 июля 1996

Мой компьютер с одним только дисководом, работающий под DOS, соединен через PLIP со вторым портом принтера на машине с Linux. К первому порту принтера на Linux подключен принтер. Оба порта постоянно работают. Под DOS выполняется telnet на машину с Linux. Ниже идут заметки о том, как я этого добился.

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

пишет:

Я по-прежнему рекомендую компилировать PLIP/LP, как модули ядра, так как

модули позволяют гибко менять конфигурацию

(пере)компилирование ядра - не такая уж простая процедура для начинающих пользователей

сосуществование PLIP и LP возможно только с помощью модулей

С PLIP/LP в виде модулей вы можете указать, какой порт используется PLIP, а какой - LP. Пример:

# insmod lp.o io=0x378 # insmod plip.o io=0x278 irq=2

Вы даже можете использовать два параллельных порта:

# insmod plip.o io=0x278,0x3bc irq=2,5

В предыдущем примере,

plip0 назначается адрес 0x278 и irq 2,

plip1 назначается адрес 0x3bc и irq 5, соответственно.

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

Наверно придется изменить два файла из исходных текстов ядра. Я использовал ядро версии 1.2.13 и обнаружил, что в файл ../linux/drivers/net/Space.c нужно внести некоторые изменения для приведения его в соответствие с настройками моего компьютера. Проверьте определения PLIP в строке 205, чтобы убедиться, что IRQ и порт ввода/вывода соответствуют вашим, а также запомните, какое устройство будет использовано для PLIP (plip0, plip1, plip2). В моем случае, порт 0x278 использовал IRQ 5(так выставлены переключатели на карточке), в Space.c определен IRQ 2. Я не стал открывать компьютер и менять переключатели на плате, а подправил файл. Исправление очень простое - всего в один символ. Хотя можно указать IRQ позже через ifconfig, но в этом случае ядро будет загружаться с неправильным IRQ для PLIP, что, наверное, будет вас раздаржать.

Дальнейший шаг потруднее:

В .../drivers/char/lp.c где-то около строки 38 найдите следующее:


struct lp_struct lp_table[] = { { 0x3bc, 0, 0, LP_INIT_CHAR, LP_INIT_TIME, LP_INIT_WAIT, NULL, NULL, }, { 0x378, 0, 0, LP_INIT_CHAR, LP_INIT_TIME, LP_INIT_WAIT, NULL, NULL, }, /* { 0x278, 0, 0, LP_INIT_CHAR, LP_INIT_TIME, LP_INIT_WAIT, NULL, NULL, }, * 0x278 зарезервирован для plip1 * * }; * #define LP_NO 3 */ }; #define LP_NO 2


Обратите внимание на изменения, которые нужно внести - один порт должен быть закомментирован. Теперь для принтера определяются только два порта. Порт 0x3BC, как правило, не работает с PLIP - для него использовался IRQ со старых монохромных видеоадаптеров (MDA).

Надеюсь, вы сделали резервные копии этих файлов. Теперь собираем новое ядро с поддержкой принтера, сети, plip и dummy.

Настраиваем систему. Это мой файл /etc/rc.d/rc.inet1:

#!/bin/bash # /sbin/ifconfig lo 127.0.0.1 /sbin/route add -net 127.0.0.0

/sbin/ifconfig dummy 200.0.0.1 /sbin/route add -net 200.0.0.0 netmask 255.255.255.0 /sbin/ifconfig plip1 arp 200.0.0.1 pointopoint 200.0.0.2 up /sbin/route add 200.0.0.2 /sbin/ifconfig dummy down


Обратите внимание, что для DOS-to-Linux соединения используется arp, необходимость в котором обычно отсутствует в соединениях Linux-to-Linux.

В файл /etc/hosts добавляем имена машин, например:

200.0.0.1 console1 200.0.0.2 console2


Машина с DOS - это console2. Не забывайте о предупреждении Andrea насчет адресов - лучше использовать общепринятые схемы выделения адресов.

Перезапускаем машину для загрузки нового ядра. При загрузке системы, (или позже командой dmesg) если вы патчили ядро, или при загрузке модулей:

lp0 at 0x03bc, using polling driver lp1 at 0x0378, using polling driver [....] NET3 PLIP version 2.0 gniibe@mri.co.jp plip1: Parallel port at 0x278, using assigned IRQ 5.


Команда "route" выдает:

Kernel routing table Destination Gateway Genmask Flags MSS Window Use Iface console2 * 255.255.255.255 UH 1436 0 136 plip1 loopback * 255.0.0.0 U 1936 0 109 lo


А "ifconfig plip1" выдает:

plip1 Link encap:10Mbps Ethernet HWaddr FC:FC:C8:00:00:01 inet addr:200.0.0.1 P-t-P:200.0.0.2 Mask:255.255.255.0 UP POINTOPOINT RUNNING MTU:1500 Metric:1 RX packets:132 errors:0 dropped:0 overruns:0 TX packets:136 errors:0 dropped:0 overruns:0 Interrupt:5 Base address:0x278




Проверьте, разрешен ли telnet в /etc/inetd.conf. Можно прочесть руководство по tcpd, /etc/hosts.allow (ALL: LOCAL) и /etc/hosts.deny (ALL: ALL). Команда "telnet localhost" должна нормально работать.

С Linux-ом все, теперь DOS. Опять таки, осторожней с 0x3BC, если таковой имеется.

Я использую NCSA telnet и Crynwr PLIP драйвер, которые можно найти на:

ftp://ftp.ncsa.uiuc.edu/Telnet/DOS/ncsa/tel2308b.zip

ftp://ftp.crynwr.com/drivers/plip.zip

Обязательно используйте версию 2.3.08 NCSA telnet и версию 11.1 Crynwr PLIP драйвера. Пожалуйста, где-нибудь найдите и прочитайте Crynwr SUPPORT.DOC.

Файл CONFIG.TEL. Большинство установок берется по умолчанию и, для экономии места, я постарался обрезать его, сохранив только необходимую (как я надеюсь) для вас информацию. Второй порт на этой машине имеет адрес 0x278 на IRQ 5.

myip=200.0.0.2 netmask=255.255.255.0 # маска подсети hardware=packet # сетевой адаптер (пакетный драйвер) interrupt=5 # IRQ используемый адаптером ioaddr=60 # программный вектор прерывания, используемы драйвером # #[...много чего без изменений...] # # в конце файла добавьте эту строку: name=console1 ; hostip=200.0.0.1 ; nameserver=1 ; gateway=1


(console1 - это имя машины с Linux, ставьте название вашей)

Я установил 12-футовый нуль-кабель между машинами и (кроме того, что изначально он был разведен неправильно) все заработало без проблем. Стандартный 11-жильный параллельный нуль-кабель также должен работать. Я же сделал его сам, взяв разводку из файла plip.c. Хотя у моего кабеля было соединение 17-17, я не думаю, что оно для чего-то нужно, его нет на промышленно изготовляемых кабелях.

@echo off plip.com 0x60 5 0x278 telbin -s console1


Эти команды должны подсоединить вас к Linux на /dev/ttyp. NCSA telnet поддерживает 8 виртуальных экранов и работает, как ftp сервер. Пропускная способность PLIP соединения достаточно хороша - я получал 6.5кб/сек при передаче файлов на своем антиквариате. Надеюсь, у вас будет больше. :-)


Патчи для совместной работы PLIP и LP


Самый лучший способ заставить работать вместе PLIP и LP - это использовать загружаемые модули: можно загрузить и выгрузить из памяти plip.o, когда вам надо что-то распечатать и наоборот. Если вам необходимо использовать PLIP и LP одновременно, попробуте использовать следующие патчи.



PLIP и LP на разных портах


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

Раскомментируйте одну строку в исходнике ядра в файле drivers/char/lp.c.

struct lp_struct lp_table[] = { { 0x3bc, 0, 0, LP_INIT_CHAR, LP_INIT_TIME, LP_INIT_WAIT, NULL, NULL, }, { 0x378, 0, 0, LP_INIT_CHAR, LP_INIT_TIME, LP_INIT_WAIT, NULL, NULL, }, /* { 0x278, 0, 0, LP_INIT_CHAR, LP_INIT_TIME, LP_INIT_WAIT, NULL, NULL, }, */ }; 3 -> 2

Конфигурация ядра

PLIP (parallel port) support (CONFIG_PLIP) [n] y

Parallel Printer support [y] y

Сообщение ядра при запуске

lp1 at 0x0378, using polling driver ..... NET3 PLIP version 2.0 gniibe@mri.co.jp plip2: Parallel port at 0x278, using assigned IRQ 5.

В этом случае, я несу такую же ответственность, как и в главе 8.1.



PLIP и LP вместе на одном порту


Если вам понадобилась поддержка PLIP и LP, попробуйте следующие патчи.

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



Я использую window 95 только


Этот раздел пуст. Я использую window 95 только для игр, так что я не пытался и не задумывался о PLIP соединении с Linux. Вопросы на эту тему побили все рекорды, так что я даю (пока) определенный ответ.

Нет, пока что никто не сообщил мне об удачном соединении между Linux и Windows 95. Если кому-либо удастся это сделать, немедленно сообщите мне: тысячи пользователей PLIP ожидают этой новости!


PLIP соединение между DOS и Linux


После выхода первой версии этого Mini-HowTo множество людей спрашивало меня о PLIP соединении между компьютерами с Linux и DOS (или Windows). Общий интерес побудил меня добавить этот раздел. Надеюсь, он многим поможет.

Раздел основан на статье James McDuffie , найденной мной в Linux Gazzette. Описываются основы настройки PLIP соединения между Linux и DOS, с использованием Windows и Trumpet WinSock. Также приведен адрес замечательной программы, позволяющей вам запускать X-Windows программы из Windows.

Последняя часть - это приложение, присланное James Vahn jvahn@short.circuit.com

, где он подробно рассказывает, как настроить это соединение и решить множество проблем.

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



Соединение DOS-Linux


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

Итак, в первую очередь, для DOS нужен пакетный драйвер. Его можно найти здесь:

ftp://ftp.crynwr.com/drivers/plip.zip

Программа запускается под DOS и работает так же, как пакетный драйвер для сети. Если PLIP нужен для работы с Windows, то вам, кроме того, понадобится Trumpet Winsock. Он служит TCP/IP интерфейсом. Если работа с Windows не требуется, то вам, вероятно, следует поискать программное обеспечение для работы TCP/IP под DOS.

Вернитесь к компьютеру с Linux и добавьте адрес компьютера с DOS в /etc/hosts. Если у DOS компьютера нет постоянного IP адреса, то можно взять любой (помните о предупреждении об IP адресах в разделе 3).

Предположим, что вы выбрали для компьютера с Linux имя linux, а для компьютера с DOS - имя dos. Тогда вам нужно набрать:



Сообщения ядра об интерфейсе PLIP


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

NET3 PLIP version 2.2 gniibe@mri.co.jp plip1: Parallel port at 0x378, using assigned IRQ 7.

В зависимости от настроек klogd и syslogd сообщение plip может быть помещено в системные файлы протоколирования (log files). Поэтому не впадайте в панику, если не увидите его. Если вы собрали PLIP как модуль, и команда lsmod показывает, что модуль plip загружен, то все нормально.

Обратите внимание на имя интерфейса. Обычно это plip1, но, в зависимости от адреса ввода-вывода (IO Address), может быть plip0 или даже plip2, plip3 и т.д.



Вопросы? Комментарии? Пришлите мне отзыв


Если у вас есть вопросы или комментарии, то свяжитесь со мной по электронной почте по адресу controzz@cli.di.unipi.it

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

Пожалуйста, не посылайте вопросы, имеющиеся в FAQ.

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

Пожалуйста, не посылайте мне вопросы о PLIP с DOS/Windows 3.1/Windows 95 - я не смогу вам помочь. Эти вопросы (о DOS) нужно посылать James Vahn jvahn@short.circuit.com, пославшему мне приложение про DOS. И еще раз: бесполезно спрашивать его или меня про PLIP с Windows 95.