У всей этой процедуры очень немного требований. Однако, я настоятельно рекомендую, чтобы все эти требования были обязательно выполнены, т.к. с более старыми версиями возникают проблемы. Итак, потребуются:
MS-DOS 5.0 или новее с MS-Windows 3.1/3.11 ИЛИ MS-Windows 95/98
Программы shutdown/init, умеющие запускать файлы в процессе загрузки и выключения. (Пакет SysVinit-2.50, например, может это делать. SysVinit-2.50 можно найти на сайте sunsite.unc.edu в каталоге /pub/Linux/system/Daemons. Почти все нынешние дистрибутивы используют этот пакет.)
И Windows, и Linux используют области подкачки. Когда ОС выключена, эта область содержит абсолютно ненужный мусор, и ОС абсолютно не важно, что находится в области подкачки. Проблема состоит в следующем: выделять отдельно для Linux область подкачки размером 60 Мб и для Windows около 32 Мб не очень эффективно - в один момент времени работает только одна ОС (Возможно запустить одновременно и Linux и Windows - спасибо VMWare. За более подробной информацией обращайтесь на сайт VMWare). Итак, мы хотим чтобы Linux и Windows использовали одно и то же пространство на диске для подкачки.
Проблема состоит в том, что Linux использует для подкачки раздел на диске, а Windows использует файл. (Возможно использовать и в Linux файл подкачки, но это не рекомендуется. Смотрите "Руководство по установке и первому запуску Linux" автора Matt Welsh). Поэтому, если Linux будет использовать тот же раздел, где хранится файл подкачки Windows, он перезапишет загрузочный сектор, FAT и другие таблицы, которые должны быть, по предположению Windows, на каждом диске. В результате этого, Windows не обнаружит файл подкачки на этом разделе и создаст файл win386.swp в каталоге windows. Таким образом, если даже ваш Linux аварийно завершит работу, Windows сможет запуститься. Если это произойдет (т.е. файл подкачки Windows будет находиться в каталоге Windows), восстановите область подкачки DOS/Windows простым перезапуском Linux. После этого Windows будет использовать файл подкачки на диске X, и вы можете спокойно удалять файл win386.swp в каталоге windows.
Суть наших действий состоит в том, чтобы сохранять критичные для Windows таблицы данных с начала раздела подкачки где-нибудь в файле, находящемся в разделе Linux. При каждом запуске Linux мы проверяем, кто последний раз использовал область подкачки - Linux или Windows (используя метку, которую вы проставили этому разделу). Если это был Linux, то мы просто разрешаем подкачку, а иначе сначала создаем раздел подкачки на диске X: командой "mkswap /dev/winswap" и только затем разрешаем подкачку.
Очень важно для нормального последующего запуска Windows восстановить формат FAT на разделе подкачки при выключении Linux. Для этого мы используем команду
/bin/zcat /etc/winswap.gz > /dev/winswap |
в файле halt.
Теперь мы исправим наши инициализационные скрипты, чтобы область подкачки создавалась при каждом запуске Linux, и специальные сектора DOS/Windows восстанавливались каждый раз при завершении работы Linux.
Вместо того, чтобы вставлять команды, отвечающие за эту часть процедуры, прямо в инициализационные скрипты, мы подготовим два отдельных файла, под названиями swapinit.sh и swaphalt.sh. Пример этих файлов, который будет работать в Red Hat Linux, дан в приложениях к этому документу. Вы можете поместить эти файлы в любой каталог, но наиболее предпочтительным будет /etc/rc.d/init.d. Создайте два файла в этом каталоге и скопируйте туда скрипты, приведенные в приложениях. Самый простой способ - скопировать этот документ в файлы командами
Версия 1.3 -- Написана H. Peter Anvin, и не поддерживается с 15 января 1998.
Версия 1.4 -- Основана на версии 1.3, но добавлено много деталей. Сейчас поддерживается Rahul U. Joshi
Версия 1.41 -- Изменены некоторые шаги процедуры для предотвращения ошибок на диске подкачки, который проверяется SCANDISK.
Изменения внесены Rahul U. Joshi
Дата: 26 ноября 1999
Добавлены детали, касающиеся Windows 95/98.
Добавлены замечания о Red Hat Linux.
Исправлена программа msinfo.
Добавлены разделы 5 - 12.
Полностью переписан раздел "Процедура", чтобы он был более удобочитаемым.
Инициализация области подкачки и остановка системы разделены в два скрипта.
Изменены скрипты: внесена поддержка многократной проверки сигнатуры.
Добавлены замечания о новых видах областей подкачки.
Добавлены несколько более надежных схем действий.
Здесь приведен файл msinfo, при помощи которого можно определить "Общее Количество Специальных Секторов". Он был включен первоначальным автором этого HOWTO в закодированной форме. Скопируйте текст, начиная со строки "begin 755 msinfo.gz" до строки "end" во временный файл, скажем temp.uu. Затем раскодируйте и разархивируйте этот файл, чтобы получить файл msinfo.
# uudecode temp.uu # gunzip msinfo.gz |
Затем запустите программу командой
# ./msinfo /dev/winswap |
Эта программа показывает информацию из загрузочного сектора, включая "Общее Количество Специальных Секторов".
begin 755 msinfo.gz --------------------------------------------------------------------- Примечание переводчика: В этом месте автором текста была приведена программа msinfo.gz в формате UUENCODE. Однако многократные преобразования этого HOWTO могли повредить этот файл. Даже если он не был бы поврежден, то он бы выводил сообщения на английском. Используйте скрипт из предыдущей главы. --------------------------------------------------------------------- end |
Rahul U. Joshi
jurahul@hotmail.com
Перевод: Станислав Рогин, ASPLinux
В этом документе содержится информация о том, как использовать раздел подкачки (swap partition) вашего Linux совместно с Windows.
Загрузите Linux. Отключите подкачку, отредактировав файл /etc/fstab, закомментировав в нем строки, описывающие раздел подкачки.
Используя команду fdisk в Linux, удалите раздел подкачки, таким образом освободив дисковое пространство.
Загрузите DOS. Создайте DOS-раздел (используя команду FDISK) с необходимым вам размером. Если вы не можете создать такой раздел (например, если DOS FDISK сообщает о том, что "в расширенном разделе все пространство занято под логические диски"), можно использовать fdisk или cfdisk из Linux для создания этого раздела. Вы даже можете просто сменить тип раздела подкачки с 82h (Раздел подкачки Linux) на 06h (FAT16). В этом случае не придется удалять этот раздел, а просто сменить тип.
После того, как создали раздел, загрузите DOS, если вы еще не в DOS. DOS выделит новому разделу букву диска. Используйте эту букву вместо X везде в этом тексте, где встретите команды типа "LABEL X:" или "COPY FOO X:DUMMY.DAT"
Отформатируйте этот раздел DOS-командой FORMAT.
Нет никакой необходимости добавлять /dev/winswap в файл /etc/fstab. Скорее всего, это вообще нельзя делать (если только как комментарий).
Если ваш Linux однажды аварийно прекратит работу без выполнения /etc/rc.d/init.d/halt, то вам придется перезагрузиться, загрузить Linux и выйти из него корректно - только в этом случае подкачка в Windows будет работать нормально. Есть другой способ - дать команду FORMAT X: и создать файл подкачки Windows снова. Еще один путь был вроде очевиден - в файл AUTOEXEC.BAT DOS поместить некую программу-эквивалент /.../halt из Linux. Я пытался не раз написать подобную программу, но это ни к чему, кроме проблем, не привело! Первое и главное, что происходило - восстановление всех специальных секторов не удовлетворяет DOS. Скорее всего, необходимо также исправлять какие-то внутренние структуры DOS, чтобы он нормально понимал наличие диска, иначе DOS выдает примерно следующую ошибку:
Invalid media type reading drive X: Abort, Retry or Fail ? |
Я не очень хорошо разбираюсь в деталях обработки дисков в DOS и Windows - я думаю, что по этому вопросу вам надо обратиться к специалистам по DOS. Конечно, если вас не беспокоит скорость загрузки, то вы просто можете при загрузке давать безусловную команду форматирования диска X: и после этого восстанавливать специальные сектора. Может быть, существуют другие решения. Если вы знаете такое решение, напишите мне сегодня!
Еще одним способом восстановления раздела подкачки Windows является следующий: загрузите Linux, отключите подкачку (как было описано выше) и затем дайте следующие команды:
# swapoff -a # zcat /etc/winswap.gz > /dev/winswap # reboot |
Зачем необходимо удалять каталог RECYCLED? В соответствии с тем, что было описано выше, вы должны удалить каталог RECYCLED. Это необходимо потому, что мы будем сохранять и восстанавливать только сектора с начала раздела по корневой каталог включительно, но не более того. Другой нашей задачей является то, чтобы диск X: восстанавливался в "нормальном" состоянии и без ошибок. Если мы бы не удалили каталог RECYCLED, то сам он конечно бы восстановился, но его содержимое, а точнее точки "." и ".." не восстановились бы, и ScanDisk выдавал бы ошибку. Чтобы этого не случилось, мы удаляем каталог RECYCLED и, таким образом, восстанавливаться будет только строка, отвечающая за файл win386.swp.
Finding module dependencies Out of memory |
# dd if=/dev/zero of=/swap bs=1024 count=16384 # mkswap /swap 16384 # sync |
Verifying swap space...Linux signature found swapon: /dev/winswap invalid argument |
# ln -s /etc/rc.d/init.d/swapinit.sh swapinit.sh # ./swapinit.sh |
if [ $activated -ne 1 ] ; then echo "Сигнатура подкачки не найдена после $loopcount попыток (Swap signature not found after $loopcount tries)" echo "Активизирую файл подкачки (Activating swap file)" swapon /swap exit 1 fi |
C:\CLAN>TC /RE |
Swapping = E:\ |
/sbin/mkswap -v1 /dev/winswap YYYYY |
# swapoff /dev/winswap # mkswap -v1 /dev/winswap YYYYY # swapon /dev/winswap |
Этот документ не является пошаговой инструкцией. Предполагается, что читатель сначала изучит весь документ, чтобы быть осведомленным о различных подводных камнях и возможных трудностях. После того, как вы получите четкое представление о том, какие шаги будут вами предприняты, вы можете начать следовать инструкциям этого документа пошагово. Так как вы будете root-ом и вам предстоит изменять системные файлы инициализации, будьте осторожны с тем, что собираетесь делать. Пишите в этих файлах комментарии к тем секциям, которые добавляете, а когда хотите убрать секцию, не удаляйте ее - просто закомментируйте. (В скриптах комментарии начинаются с символа #). В случае, если что-то пойдет не так, вы сможете восстановить исходную конфигурацию, просто убрав те изменения, которые внесли. Несмотря на то, что вы не обязательно должны хорошо знать синтаксис скриптов, и то, что я дал в этом документе все, что необходимо, небольшие познания в этом вопросе могут быть полезны, как со стороны понимания, так и со стороны поиска ошибок.
Загрузите Linux, и войдите в него как root.
Используйте команду fdisk, чтобы узнать название раздела и его размер в блоках. Создайте символьную ссылку /dev/winswap, указывающую на этот раздел. Например, если этот раздел - hda7, то наберите:
Этот скрипт анализирует загрузочный сектор заданного раздела и выдает различную информацию, включая "Общее Количество Специальных Секторов". Скрипт предполагает, что на данном разделе установлена файловая система FAT16. Если это не так, он выдаст сообщение об ошибке и прекратит работу. Скрипт запускается следующим образом
# msinfo |
Для запуска этого скрипта вам понадобится программа "dialog", которая может выводить диалоговые окна на экран. Вы можете найти ее здесь.
#!/bin/sh # # msinfo.sh Этот скрипт показывает содержание загрузочного # сектора заданного раздела. # This shell script displays the boot sector of the # given partition. # # Автор: Rahul U. Joshi # Перевод: Станислав Рогин # # Изменения Убрано использование команды expr, замененной на команду let # Modifications Removed the use of expr and replaced it by the let # command.
# проверяем параметры командной строки # check for command line arguments if [ $# -ne 1 ]; then echo "Использование: msinfo " exit 1 fi # проверяем, является ли входной файл блочным устройством # check whether the input name is a block device if [ ! -b $1 ]; then echo "msinfo: $1 не является блочным устройством" exit 1 fi # создаем два временных файла # create two temporary files for use TMPFILE=`mktemp -q /tmp/$0.XXXXXX` if [ $? -ne 0 ]; then echo "msinfo: Не могу создать временный файл, прекращаю работу..." exit 1 fi TXTFILE=`mktemp -q /tmp/$0.XXXXXX` if [ $? -ne 0 ]; then echo "msinfo: Не могу создать временный файл, прекращаю работу..." rm -f $TMPFILE exit 1 fi backtitle="`printf "%78s" "msinfo, Информация о файловой системе FAT16 -- Rahul Joshi"`" dialog --title "Загрузочный сектор $1" --backtitle "$back_title" --infobox "\nАнализирую загрузочный сектор $1\nПодождите..." 14 60 # создаем пустой текстовый файл TXTFILE # truncate TXTFILE to zero length echo > $TXTFILE # Получаем версию форматировавшей DOS # get Formatting DOS version dd 2>/dev/null if=$1 bs=1 count=8 skip=3 | dd 2>/dev/null of=$TMPFILE printf >>$TXTFILE "%30s : %s\n" "Версия форматировавшей DOS" "`cat $TMPFILE`" # Получаем файловую систему # get file system dd 2>/dev/null if=$1 bs=1 count=8 skip=54 | dd 2>/dev/null of=$TMPFILE printf >>$TXTFILE "%30s : %s\n" "Файловая система" "`cat $TMPFILE`" # проверяем, является ли файловая система FAT16 # check if filesystem in a FAT16 if [ "`cat $TMPFILE`" != "FAT16 " ]; then dialog --title "Загрузочный сектор $1" --backtitle "$back_title" --infobox "\nФайловая система $1 не является FAT16" 14 60 exit 2 fi # Получаем метку тома из загрузочного сектора # get volume label in boot sector dd 2>/dev/null if=$1 bs=1 count=11 skip=43 | dd 2>/dev/null of=$TMPFILE printf >>$TXTFILE "%30s : %s\n" "Метка тома в загрузочном секторе" "`cat $TMPFILE`" # Получаем размер сектора # get Sector size dd 2>/dev/null if=$1 bs=1 count=2 skip=11| od -An -tdS | dd 2>/dev/null of=$TMPFILE printf >>$TXTFILE "%30s : %d\n" "Размер сектора" `cat $TMPFILE` sector_size=`cat $TMPFILE` # Получаем количество резервных секторов # get Reserved sectors dd 2>/dev/null if=$1 bs=1 count=2 skip=14| od -An -tdS | dd 2>/dev/null of=$TMPFILE printf >>$TXTFILE "%30s : %d\n" " Резервные сектора" `cat $TMPFILE` reserved_sectors=`cat $TMPFILE` # Получаем количество секторов FAT # get FAT sectors dd 2>/dev/null if=$1 bs=1 count=1 skip=16| od -An -tdS | dd 2>/dev/null of=$TMPFILE fat_count=`cat $TMPFILE` dd 2/dev/null if=$1 bs=1 count=2 skip=22| od -An -tdS | dd 2>/dev/null of=$TMPFILE sectors_per_fat=`cat $TMPFILE` # расчитываем количество секторов, занимаемых FAT # calculate the no of sectors allocated for FAT's let fat_sectors=fat_count*sectors_per_fat printf >>$TXTFILE "%30s : %u (%u x %u) \n" "Секторов FAT" "$fat_sectors" "$fat_count" "$sectors_per_fat" # Получаем количество секторов в корневом каталоге # get root directory sectors dd 2>/dev/null if=$1 bs=1 count=2 skip=17| od -An -tdS | dd 2>/dev/null of=$TMPFILE root_sectors=`cat $TMPFILE` # расчитываем количество секторов, занимаемых корневым каталогом # calculate the no of sectors allocated for root directory let root_sectors=root_sectors*32/sector_size printf >$TXTFILE "%30s : %u\n" "Секторов корневого каталога" "$root_sectors" # получаем Общее Количество Специальных Секторов # get Total special sectors let total=reserved_sectors+fat_sectors+root_sectors printf >>$TXTFILE "%30s : %u\n" "Всего специальных секторов" "$total" # вывод информации dialog --title "Загрузочный сектор $1" --backtitle "$back_title" --msgbox "`cat $TXTFILE`" 14 60 # удаление временных файлов # delete temporary files rm -f $TMPFILE rm -f $TXTFILE # end of msinfo.sh |
Этот скрипт сначала проверяет сигнатуру области подкачки Linux, а затем восстанавливает на разделе файловую систему Windows.
(Основано на скрипте, приведенном в Swap-Space-HOWTO автора H. Peter Anvin)
#!/bin/sh # # swaphalt.sh Этот файл вызывается из /etc/rc.d/init.d/halt # после того, как будут выключены учет ресурсов и подкачка # # This file is executed through the /etc/rc.d/init.d/halt # script after swapping and accounting has been turned off. # # Автор: Rahul U. Joshi Перевод: Станислав Рогин #
# проверяем сигнатуру раздела подкачки и восстанавливаем таблицы данных Windows loopcount=0 # флаг, указывающий была ли восстановлена информация раздела подкачки Windows # flag to indicate whether the swap info has been restored or not restored=0 # проверяем сигнатуру до 3 раз (check for swap signature 3 times before giving up) while [ $loopcount -lt 3 ] do if [ "`/bin/dd 2>/dev/null if=/dev/winswap bs=1 count=10 skip=4086`" = 'SWAP-SPACE' ]; then echo "Восстановление структуры раздела подкачки DOS/Windows ($loopcount-я попытка)" echo "Restoring DOS/Windows swap info , iteration $loopcount)" /bin/zcat /etc/winswap.gz > /dev/winswap restored=1 break else loopcount=loopcount+1 fi done if [ $restored -ne 1 ] ; then echo "Сигнатура области подкачки не обнаружена после $loopcount попыток" echo "Swap signature not found after $loopcount tries" echo "Восстановление таблиц не произведено" echo "Skipping restoring" fi |
Этот скрипт инициализирует область подкачки на разделе. Код, отвечающий за определение сигнатуры, повторяется 6 раз, так как сигнатура иногда правильно определяется со второго или третьего раза. (Основано на скрипте, приведенном в Swap-Space-HOWTO автора H. Peter Anvin)
#!/bin/sh # # swapinit.sh - активизируем раздел подкачки (activate the swap partition) # # автор Rahul U. Joshi, перевод Станислав Рогин # Проверяем и инициализируем область подкачки (Verify and initialize swap space) #
echo -n 'Проверка области подкачки (Verifying swap space...)' loopcount=0 # Флаг, указывающий, активизирован ли раздел # flag to indicate whether the partition has been activated or not) activated=0 # Проверяем сигнатуру до 6 раз # check for signatures 6 times before giving up while [ $loopcount -lt 6 ] do if [ "`/bin/dd 2>/dev/null if=/dev/winswap bs=1 count=10 skip=4086`" = 'SWAP-SPACE' ]; then echo "Сигнатура Linux обнаружена с $loopcount раза" echo "Активация раздела подкачки" echo "Linux signature found, iteration $loopcount" echo "Activating swap partitions" swapon /dev/winswap activated=1 break elif [ "`/bin/dd 2>/dev/null if=/dev/winswap bs=1 count=11 skip=43`" = 'SWAP SPACE ' ]; then echo "Сигнатура DOS обнаружена с $loopcount раза" echo "Подготовка раздела подкачки" echo "DOS signature found, iteration $loopcount" echo "Making swap partition" mkswap /dev/winswap YYYYY echo "Активация раздела подкачки" echo "Activating swap partitions" swapon /dev/winswap activated=1 break else let loopcount=loopcount+1 fi done if [ $activated -ne 1 ] ; then echo "Сигнатура не найдена после $loopcount попыток" echo "Разделы подкачки не активизированы" echo "Swap signature not found after $loopcount tries" echo "No swapping partitions activated" exit 1 fi |
Запустите Windows. Перейдите в Панель Управления (Control Panel), выберите пункт "386 расширенный" ("386 Enhanced"). Выберите "Виртуальная память" ("Virtual Memory") и создайте постоянный файл подкачки на диске X: максимально возможного размера (Его вам укажет Windows). Windows может пожаловаться, что не сможет использовать такой большой файл подкачки. Не обращайте на это внимания и все равно создайте файл.
Выйдите из Windows.
Запустите Windows. Перейдите в "Панель Управления" (Пуск| Настройка | Панель управления). Выберите пункт "Система". (В это окно можно попасть проще: нажмите Win+Break) В диалоговом окне "Свойства системы" выберите пункт "Быстродействие". Нажмите кнопку "Виртуальная память". На экране появится диалог настройки параметров виртуальной памяти. Выберите пункт "Я хочу задать параметры виртуальной памяти самостоятельно". Выберите диск, на котором хотите иметь разделенный с Linux раздел подкачки (X:). Оставьте максимальные и минимальные значения такими, какими их установит Windows. Нажмите OK. Windows попросит вас перезапустить компьютер. Так и сделайте.
После того, как вы перезапустите Windows, увидите, что на диске X: появился файл win386.swp. В дополнение к этому появился каталог Recycled. По той причине, что вы не собираетесь хранить другие файлы на этом диске, и одного файла будет более, чем достаточно (да и тот не жалко, в случае чего), укажите Windows не поддерживать корзину на этом диске (X:). На рабочем столе нажмите правую кнопку мыши на корзине и в открывшемся меню нажмите Свойства. На экране появится диалог настройки Корзины. Нажмите на закладку "Глобальные" и выберите "Независимая конфигурация дисков". После этого выберите диск X: drive (у которого будет метка SWAP SPACE). В этом диалоге сдвиньте указатель "Предельный объем корзины" на 0 процентов. В графе "Зарезервированное место" должно быть написано 0 байт. Нажмите ОК и перезагрузите компьютер.
Казалось бы: раз вы больше не поддерживаете корзину для диска X, то Windows каталог RECYCLED там больше не нужен, и она могла бы его удалить. Она не только не удаляет его, но и не разрешает вам сделать это. Как я говорил раньше, нам этот каталог не нужен, и мы хотим, чтобы на диске X: был только файл win386.swp. Чтобы удалить ненужный каталог, перезагрузите компьютер в Режиме Эмуляции MS-DOS. Выберите Пуск | Завершение работы | Перезапуск компьютера в режиме MS-DOS, или в момент загрузки Windows нажмите F8, и из появившегося меню выберите пункт "Command Prompt only". Попав в режим MS-DOS, выполните следующие команды:
Уберите комментарий со строки с разделом подкачки в файле /etc/fstab (который вы добавили ранее). (Это конечно необязательно, так как мы больше не используем fstab для разделов подкачки). Перезагрузите Linux. У вас должна быть включена подкачка на новом устройстве подкачки.
Я, к сожалению, выяснил, что мои советы, данные в версии 1.4 этого документа содержали ошибку. Если вы использовали советы из версии 1.4 для настройки совместного использования пространства подкачки Linux и Windows и, в результате, получаете от ScanDisk сообщения об ошибках на диске X:, проделайте следующее:
Во-первых, загрузите Linux, и закомментируйте строку в файле rc.sysinit file строку, отвечающую за вызов скрипта swapinit.sh, а также из файла halt строку, отвечающую за вызов swaphalt.sh. В результате этого, при последующем запуске Linux у вас будут отсутствовать области подкачки. Если у вас мало системной памяти, создайте временный файл подкачки. Как это сделать, читайте в разделе "Пара замечаний".
Затем, выключите Linux, запустите Windows, нажмите F8 при начале загрузки и загрузите систему в режиме "Command prompt only" из появившегося меню. Затем выполните следующие команды:
C:\>SCANDISK X: |
ScanDisk сообщит, что каталог RECYCLED поврежден. Укажите ему исправить ошибки. Он может также найти потерянные кластера. Укажите ему удалить их. Короче, исправьте все ошибки на диске X:, убедившись в том, что ScanDisk не затронул файл win386.swp. Вы можете, например, запомнить размер файла win386.swp до проверки, сравнив его затем с тем, что будет после ScanDisk. Если ScanDisk изменил размер win386.swp, добавьте что-нибудь к нему, или удалите из него лишнее, чтобы восстановить его размер.
Удалите все с диска X: кроме файла win386.swp. Удалите все другое содержимое, включая каталог RECYCLED. Чтобы его удалить, используйте следующие команды:
C:\>X: X:\>ATTRIB -R -H -S RECYCLED X:\>DELTREE RECYCLED |
Запустите Linux. Зайдите в систему root-ом и сделайте следующее:
# dd if=/dev/winswap bs=512 count=XXX | gzip -9 > /etc/winswap.gz |
где XXX - известное уже вам "Общее Количество Специальных Секторов".
Раскомментируйте команды в файлах swapinit.sh и swaphalt.sh, которые закомментировали ранее, и удалите из них все команды, добавленные вами для использования файла подкачки. Теперь с вашей системой все в порядке.
Теперь более подробно.
Сначала с внутренней машины соединитесь с внешней (здесь и далее внутренняя и внешняя относительно firewall) и войдите в систему.
Так как вы используете linux, вы будете использовать файловую систему proc (смотрите далее), удостоверьтесь, что shell - это shell типа sh (bash, zsh и т.д.) . Например, если у вас csh, то установите связь telnet следующей командой:
(setenv SHELL /bin/sh; telnet machine.outside) |
После вхождения в систему внешней машины, выполните команду
term -r -n off telnet |
теперь выйдите в командную строку telnet на внутренней машине, используя ^] (или как у вас настроено), и, при помощи команды !, запустите term,
telnet> ! term -n on telnet >&3 |
Получилось!!!
(Если у вас нестандартная версия telnet, то вам надо использовать другой дескриптор файла (у меня он 3); его можно легко определить при помощи strace. Но тройка, по-моему, работает на всех bsd-совместимых telnet клиентах, я пробовал на SunOS 4.x и обычных дистрибутивах linux.)
Некоторые клиенты telnet не имеют команды "!", которая запускает внешнюю команду оболочки. Например, telnet-клиент в дистрибутиве Slackware 3.0 именно такой. Исходники (не уверен на 100%) этого клиента лежат на
ftp://ftp.cdrom.com:/pub/linux/slackware-3.0/source/n/tcpip/NetKit-B-0.05.tar.gz |
в них есть эта команда. Напрашивается решение - скачать и перекомпилировать их. Но, к сожалению, я не смог этого сделать. и в добавок если у вас используется SOCKS firewall, то вам понадобиться клиент telnet поддерживающий SOCKS. В этом случае я не оплошал и собрал такой клиент, используя
ftp://ftp.nec.com/pub/security/socks.cstc/socks.cstc.4.2.tar.gz |
или, если вы находитесь за пределами США ,
ftp://ftp.nec.com/pub/security/socks.cstc/export.socks.cstc.4.2.tar.gz |
Если у вас ядро до 1.2.13, вы можете приостановить telnet командой ^]^z, затем выяснить его идентификатор процесса и дать команду
term -n on -v /proc//fd/3 telnet |
Это не работает с ядрами выше 1.3.x , у которых, из соображений безопасности, закрыт доступ к этим дескрипторам файлов (fd) для всех пользователей, кроме одного.
Подробно, включая патчи к SOCKS, можно получить от Steven Danz .
Я проверил качество линии, при помощи утилиты linecheck. Я думал, что она будет полностью прозрачна, но я ошибся. Однако, проблемы возникли только с символом 255. Поэтому я написал в файле ?/.term/termrc.telnet (.telnet - это имя term-сокета, см.предыдущую главу) следующее:
baudrate off escape 255 ignore 255 timeout 600 |
Наверно, после более точной настройки, скорость повысится, но у меня пропускная способность этой системы составляет около 30 тысяч cps (достаточно дальнее соединение и медленный firewall). По ftp скорость немного выше - около 100 тысяч cps. На самом деле пропускная способность может зависит от времен задержки.
Barak Pearlmutter
bap@cs.unm.edu
Перевод: Михаил Корепанов, ASPLinux
Здесь приведены инструкции, как, с помощью "term", делать с сетью через TCP-firewall то, что вы делать, в принципе, не должны.
Хорошая идея - дать сокету term явное имя. Это имя - "telnet" - параметр при вызове term. Если вы не имеете переменную среды TERMSERVER с установленным значением "telnet", вызывайте term клиент с ключом -t, например "trsh -t telnet".
Программа linecheck иногда имеет некоторые проблемы при проверке telnet соединения. Это происходит иногда, потому что она не проверяет код возврата функции read(). Для сетевых соединений вызов read() может возвращать коды ошибок -1, EINTR (прервано) или EAGAIN (попытаться снова). Очевидно, это должно проверяться.
Имеется множество особенностей, которые могут облегчить использование term через telnet. Они прежде всего касаются предположения, которое повлияло на разработку term, а именно, когда подключение идет на линиях с низкой пропускной способностью, малой надежностью и некоторой зашумленностью.
Telnet соединение в общем проходит с высокой пропускной способностью, надежностью и без ошибок. Это означает, что подключение может быть лучше, если (а) максимальный размер буфера увеличен, намного больше предела установленного term - N_PACKETS/2=16, (б) выключена проверка контрольной суммы пакета и (в) разрешены большие пакеты.
Также, чтобы увеличить безопасность, было бы хорошо иметь опцию term, чтобы регистрировать все соединения через сокет, выводить сообщения в журнал, в поток stderr или в оба. Это позволило бы увидеть, не разрушают ли term соединение хакеры на вашей машине.
Некоторые клиенты и серверы telnet согласны передавать друг другу зашифрованные данные, чтобы обеспечить их безопасность. К сожалению, хак, используемый выше (использование сетевого подключения, которое установил клиент telnet, пока он простаивает) не будет работать в этом случае. Вместо этого, необходимо проверить клиент telnet непосредственно, на наличие функции шифрования. Добавьте команду, которая выполнит процесс с его вводом и выводом.
Убедитесь, что удаленный telnetd не работает в противном семибитном режиме. Если это не так, вы должны сообщить term об этом, когда вы вызываете его, добавив ключ -a. (Я иногда использую "^] telnet> set outbin", или "set bin" или вызываю telnet с ключом -8, для перевода в восьмибитный режим).
Очевидно, что если вы находитесь за пределами firewall и входите в систему при помощи карты SecureID или ей подобной, то вам может понадобиться смена ролей, описанных выше локального и удаленного серверов. (Если вы не понимаете, что это такое - значит вы не настолько знакомы с term, чтобы правильно использовать хитрость, описанную здесь))
Процедура установления term-соединения состоит из двух этапов. Сначала вам надо, при помощи telnet, установить telnet-соединение и зайти в систему. Затем клиент telnet останавливается, а управление сообщением передается term.
Если ваша ситуация подобна моей, то вы получаете около 3,500 тысяч сообщений в день. Каждый раз после получения почты, вам придется просмотреть все сообщения, выбрав те, которые вас интересуют.
Эта проблема разрешима с помощью Procmail.
Procmail работает примерно так: Procmail проверяет каждое приходящее сообщение и выполняет над ними действия, основанные на некоторых, определенных вами правилах.
Скажем, например, что каждый день я получаю приблизительно 200 сообщений от некоторого списка рассылки (в этом примере я использую список рассылки под названием linux-foo). Все эти сообщения прямиком попадают в мою главную папку входящих сообщений (inbox), а я бы хотел, что они были автоматически отфильтровывались в папку под названием "foo-list".
На первом шаге должен обрабатываться заголовок письма.
В каждом сообщение, приходящем из этого списка рассылки, есть строка, в которой написано следующее:
Sender: owner-linux-foo@bar.foogers.com
Теперь я могу указать procmail перемещать каждое сообщение, содержащее эту строку, в некоторую папку. Это делается при помощи файла ".procmailrc".
Я буду использовать мой любимый текстовый редактор, чтобы создать текстовый файл под названием ".procmailrc" в моем домашнем каталоге.
Файл будет выглядеть примерно так:
LOGFILE=$HOME/.pmlog MAILDIR=$HOME/mail VERBOSE
# linux-foo list :0 Hw * ^.*[Ss]ender: owner-linux-foo@bar.foogers.edu foo-list # if it got to this point, put it in my new mail folder :0 Hw newmail |
Рассмотрим подробнее строку "[Ss]ender". Заметьте, что эта строка есть во всех сообщениях от нашего списка рассылки.
Эта строка указывает procmail перемещать все сообщения, содержащие эту строку, в каталог "foo-list".
Следующая строка означает, что если сообщение не соответствовало ничему, описанному выше, то его необходимо поместить в newmail.
Теперь предположим, что я получаю сообщение от моего хорошего друга, EJ, и я хочу, чтобы оно попало в папку по имени "EJ".
Я добавлю новый раздел в мой файл .procmailrc.
LOGFILE=$HOME/.pmlog MAILDIR=$HOME/mail VERBOSE # список рассылки linux-foo :0 Hw * ^.*[Ss]ender: owner-linux-foo@bar.foogers.edu foo-list # Сообщение от E.J.! :0 Hw * ^.*[Ff]rom: ej@mypal.com ej # если добрались до этой точки, помещаем в каталог для новой почты :0 Hw newmail |
LOGFILE=$HOME/.pmlog MAILDIR=$HOME/mail VERBOSE # Это пришло от Билла Гейтса? Если да, то УДАЛИТЬ ЕГО!!! :0 Hw * ^.*[Ff]rom: bgates@microsoft.com /dev/null # список рассылки linux-foo :0 Hw * ^.*[Ss]ender: owner-linux-foo@bar.foogers.edu foo-list # Сообщение от E.J.! :0 Hw * ^.*[Ff]rom: ej@mypal.com ej # если добрались до этой точки, помещаем в каталог для новой почты :0 Hw newmail |
После запуска TkRat вы будете находится в папке, называемой "INBOX". Используйте fetchmail для того, чтобы скачать всю новую почту. Новая почта появится в этом каталоге INBOX.
В TkRat интуитивно понятный интерфейс. В верхней части экрана список пришедших вам сообщений. В нижней части экрана - содержимое сообщения.
Вы можете читать почту, просто щелкая по любому сообщению в списке.
Когда вы закончите чтение сообщения, то можете перейти к следующему сообщению, ответить на первое сообщение, написать новое сообщение или переместить сообщение в другую папку.
У вас может быть несколько папок почты. В них можно держать полученные письма, рассортировав их по темам.
Для создания новой почтовой папки сделайте следующее:
Щелкните по Admin, затем New/Edit Folders
Вы увидите окошко с папкой "INBOX". Щелкните левой клавишей мыши по нему.
В появившемся меню выберите пункт "New File Folder".
Вам будет выдано диалоговое окно для ввода информации.
В первом текстовом поле введите имя новой папки.
Во втором текстовом поле введите имя файла, в котором вы будете хранить сообщения (подсказка: используйте имя, подобное этому - /home/username/mail/name_of_folder. Так, если в первом поле записано "Personal", во втором поле запишите "/home/dave/mail/personal" (предполагая, что username - dave))
Щелкните OK. Обратите внимание, что ваша новая папка появилась в списке папок. Затем выберите "Window" и "Close".
Вы можете перемещать сообщения в новую папку и переключаться на эту папку, выбрав имя папки в меню "Folders".
Посылать почту очень просто. Щелкните "Compose", введите почтовый адрес получателя, введите тему сообщения (subject) и напишите письмо.
Когда вы закончите, щелкните по Send.
В командной строке введите "tkrat" и нажмите Enter. Щелкните по "Create". Прочитайте сообщение, затем нажмите "Continue". Теперь вы перейдете к главному окну программы TkRat. Первое, что вы должны сделать - настроить программу под свою систему.
Перейдите в меню Admin, и выберите Preferences.
Щелкните на "Sending"
Введите свой адрес электронной почты (E-Mail) в поле "Default Reply-To".
Введите свой E-Mail, в поле "Use from address". например dave@linuxtoday.com (Dave Whitinger)
Введите имя своего домена в поле "Domain". Если ваш E-Mail - "user@xyz.com", то вы должны ввести "xyz.com".
Щелкните по "Apply".
Щелкните на "Method".
Для "Send Via" выберите "SMTP".
В поле "SMTP host:", введите адрес SMTP-сервера вашего интернет-провайдера. (его должен дать вам ваш провайдер).
Щелкните "Apply", затем "Dismiss".
Dave Whitinger
dave@linuxtoday.com
Перевод: Александр Ермолаев, ASPLinux
Этот докумет предназначен тем, кому интересно использовать свой компьютер под Linux для посылки и приема электронной почты (E-Mail)
Чтобы читать электронную почту, обычно лучше всего загрузить ее в вашу машину; для этого существует программа "fetchmail". Приведенные ниже команды рассчитаны на fetchmail версии 2.2 - хотя они должны работать и в более новых версиях.
(Обратите внимание: Fetchmail, скорее всего, уже установлен в вашей системе, поскольку он включен во все дистрибутивы Linux, которые мне известны - если кто знает о том, что это не совсем так, пожалуйста, сообщите мне!)
Выполните следующие шаги:
echo "server pop.com protocol pop3 username dave password foo" > ~/.fetchmailrc
(Замените "pop.com" на имя почтового сервера вашего провайдера. Замените "dave" на ваше имя пользователя и замените "foo" на ваш пользовательский пароль.) |
Теперь, всякий раз, когда вы захотите проверить свою почту, введите "fetchmail" в командную строку и нажмите Enter. Fetchmail загрузит всю вашу почту и сохранит ее в вашем локальном каталоге почты.
Я хотел бы подчеркнуть, что имеется много превосходных программ электронной почты, предназначенных для Linux. Вы сами выбираете необходимую программу. Я пользуюсь программой "TkRat" более двух лет, и она мне нравится. Это графическая программа, имеющая все возможности, которые должны быть в качественной почтовой программе. Она проста в изучении, мощна и свободно распространяется. По этим причинам в данном HOWTO я буду описывать только программу TkRat.
Первое, что вы должны сделать - скачать архив TkRat. Вы можете либо получить исходные тексты программы и скомпилировать их, либо получить уже готовую собранную версию
Архив можно взять по следующим адресам:
ftp://ftp.md.chalmers.se/pub/tkrat/tkrat-2.0b3.tar.gz (загрузка через ftp)
http://www.dtek.chalmers.se/~maf/ratatosk/tkrat-2.0b3.tar.gz (загрузка через http)
http://www.dtek.chalmers.se/~maf/ratatosk/download.html (загрузить страницу, чтобы узнать номер последней версии продукта!)
Когда загрузите архив (файл tar), вы будете готовы установить программу на вашу систему.
Чтобы установить программу, используйте команды:
tar -zcvpf tkrat-2.0b3.tar.gz cd tkrat-2.0b3 ./configure make make install |
Если что-нибудь будет не так, смотрите файлы INSTALL и README, расположенные в каталоге tkrat-2.0b3. Обратите внимание, что для сборки программы вам будет нужна библиотека tcl версии выше 8.1. Самую свежую версию tcl вы можете найти на сайте scriptics.com.
Примите мои поздравления - TkRat установлен в вашей системе.
Удостоверьтесь в том, что Ваша Token-Ring-карта поддерживается данным драйвером. В настоящее время драйвер поддерживает только карты на основе чипсета Tropiс.
Карты, работающие с данным драйвером:
3Com 3C619B Token Link
3Com 3C619C Token Link
HyperRing Classic 16/4
IBM Turbo 16/4 ISA adapter**
IBM Token Ring Auto 16/4 ISA adapter
IBM Token Ring Auto 16/4 adapter /A
IBM Token Ring 16/4 adapter /A
IBM Token Ring adapter /A
IBM Token Ring adapter II (4 Megabit only)
IBM 16/4 ISA Token Ring card (16bit)
IBM 16/4 ISA Token Ring card (8bit)
Madge Blue (100% IBM compatible)
Остальные IBM-совместимые адаптеры с разделяемой памятью также должны прекрасно работать. Пожалуйста, сообщите мне, если Вы найдете другие работающие карты.
Рекомендую в настоящее время использовать адаптеры с 16КБ разделяемой памяти.
Карты, использование которых с данным драйвером может вызвать проблемы:
IBM Turbo 16/4 ISA adapter
На самом деле эта карта будет прекрасно работать с драйвером Token-Ring под Linux, однако Вам надо будет запустить карту в режиме, совместимом с Auto 16/4. Самый простой путь его установить - использовать диски LANAID, поставляемые вместе с Вашей картой, и воспользоваться командой:
LANAIDC /FAST=AUTO16 |
Для настройки карты Вы должны использовать LANAIDC или LANAID.
Token-Ring Network 16/4 Adapter II
Эта карта не работает. Не путайте ее с IBM Token Ring adapter II (4mbit), который работает без проблем. Это DMA/Busmaster-адаптер для ISA.
3Com TokenLink Velocity ISA
Эта карта может как работать, так и не работать. У меня было много писем от людей, у которых была такая карта, причем у одних она работала без проблем, а у других не работала вообще.
PCI адаптеры
В настоящее время ни один из IBM PCI-адаптеров не поддерживается.
IBM Auto LanStreamer 16/4 Token-Ring PCI Adapter
Данный адаптер в настоящее время не поддерживается, но работал. Этот драйвер должен поддерживать и полнодуплексный (Full Duplex) режим.
У меня самого возникало с этим драйвером несколько проблем. Если у Вас проблемы с Token Ring, а Вы используете Linux с ядром 1.2.х, пожалуйста, обновите его до 2.0. На момент написания этого документа, текущей версией ядра была 2.0.33. В патчи Token-Ring было внесено много усовершенствований со времен версии 1.2.x. Большинство этих исправлений не было перенесено назад.
Я бы не советовал вам использовать этот патч для ядер 2.0. В эти ядра уже встроена поддержка Token-Ring. Хотя существуют пробные патчи, поднимающие версию до 2.1.
Примечание:
Если Вы работаете с ядром версии 2.0 и выше, то обратитесь к следующему разделу данного документа. Все, перечисленное ниже, касается, главным образом, ядер версий 1.2.
Я предполагаю, что в данный момент перед Вами находится работающая Linux-машина.
Возьмите Token Ring патч по адресу:
ftp://ftp.wayne.esu1.k12.ne.us/pub/Linux/Token-Ring/TokenRing.patch-1.2.0.gz |
Возьмите исправленные исходные тексты NetTools по адресу:
ftp://ftp.wayne.esu1.k12.ne.us/pub/Linux/Token-Ring/net-tools-1.2.0.patched.tar.gz |
Создайте каталог для хранения патчей (например, /usr/src/patches) и скопируйте патчи туда. Создать каталоги можно следующими командами:
Mkdir /usr/src/patches - основной каталог для хранения патчей Mkdir /usr/src/patches/token - сюда разместите патч Token Ring |
В дистрибутиве RedHat 4.0+ имеется прекрасная панель управления XWindows, предназначенная для конфигурирования модулей и устройств. Если Вы устанавливаете tr-адаптер в стандартной комплектации RedHat 4.0+, то там уже должна быть поддержка Token Ring, собираемая в в качестве модуля.
Попробуйте использовать команду:
modprobe ibmtr |
Если в Вашем дистрибутиве действительно есть поддержка tr-адаптера, то, скорее всего, больше ничего не надо делать.
Самый простой способ сконфигурировать Ваш интерфейс - это использовать панель управления (control-panel). Сперва загрузите новое сетевое устройство Token Ring. При этом автоматически должен загружаться драйвер ibmtr. Затем перейдите в конфигурацию сети и добавьте новое устройство - tr, присвойте ему ip-адрес и т.п. После перезагрузки Ваш Linux RedHat 4.0+ будет работать с Token Ring.
Пожалуйста, обратите внимание, что уже в течении длительного времени мне не приходилось настраивать ни одну из моих RedHat систем, поэтому данные инструкции я пишу по памяти. По крайней мере, они должны направить Вас на путь, по которому необходимо следовать при настройке.
Mike Eckhoff
mike.e@emissary.aus-etc.com
Перевод: Денис Дементьев, ASPLinux
Этот howto предназначен для того, чтобы помочь Вам установить и настроить TokenRing (в том числе, как установить патч в ядро). Обязательно прочитайте весь документ до того, как приступbть к установке драйвера Token-Ring для Linux.
Примечаниe:
Эта инструкция предназначена для внесения исправлений в ядро версии 1.2. Если у Вас ядро версии 2.0, то пересоберите его и ответьте yes или module, на вопрос о поддержке Token-Ring. Вам надо сделать следующее:
Установить Token-Ring-карту в систему и сконфигурировать ее в зависимости от того, для чего Вы хотите ее использовать. Будет хорошо, если есть возможность сперва проверить работоспособность карты под DOS, а только потом устанавливать ее под Linux. Скорее всего карта будет работать под Linux с теми же настройками, что и под DOS. Если карта поддерживает режим PnP, постарайтесь заблокировать его сразу, как только она начнет работать.
Сделайте резервные копии каталога с исходными текстами ядра. Это пригодится, если понадобится полностью удалить Token-Ring-патч и вернуться к оригинальному состоянию исходных текстов.
cd /usr/src tar cvzhf linuxbak.tar.gz linux |
Разархивируйте патч Token-Ring.
cd /usr/src/patches/token gzip -d TokenRing.patch-1.2.0.gz |
Модифицируйте ваше ядро патчем Token-Ring
cd /usr/src/linux patch -p1 < /usr/src/patches/token/TokenRing.patch-1.2.0 |
-или-
patch -p1 < /TokenRing.patch-1.2.0 |
Найдите все rej-файлы патча и внесите, если надо, необходимые изменения
find . -name \*.rej -print |
Найдите orig-файлы и удалите их
find . -name \*.orig -print | xargs rm |
Конфигурация и сборка ядра
Примечание:
Если у вас есть раздел подкачки, то удостоверьтесь в том, что он активен.
cd /usr/src/linux make config |
(Патч должен добавить две строки к Вашему файлу config.in)
Token Ring support (CONFIG_TR) [y] |
(and further down the list...)
IBM Tropic chipset based adaptor support (CONFIG_IBMTR) [y] |
make dep make clean make zImage |
Настройка LILO. Сперва переименуйте каталог /vmlinuz в vmlinuz.old
Затем копируйте ядро в /vmlinuz. На моей системе для этого необходимо было бы скопировать /usr/src/linux/arch/i386/boot/zImage в /vmlinuz и отредактировать /etc/lilo.conf для загрузки ядра. Теперь из командной строки запустите LILO, набрав "lilo"
Сейчас Вы должны быть готовы к перезагрузке вашей системы и использованию Token-Ring-карты в Вашем компьютере. ,Пожалуйста прочитайте раздел "установки, специфичные для дистрибутивов".
Пакет NetTools содержит много основных утилит работы с сетевыми устройствами. NetTools включает в себя программы arp, rarp, route, ifconfig и netstat и т.п. Эти программы не знают о Token Ring изначально, поэтому Вам необходимо модифицировать NetTools для того, чтобы эти утилиты могли более эффективно работать с драйвером Token Ring.
Примечание:
Текущая версия NetTools предназначается для ядра 1.2.x. Если Вы используете ядро версии 2.0, то Ваша версия NetTools, скорее всего, новее. Однако можно взять последнюю версию NetTools по адресу
ftp://tapac.inka.de/pub/comp/Linux/networking/NetTools/ |
(1) Скопируйте и разархивируйте исходные тексты NetTools в каталог исходных текстов.
cp net-tools-1.2.0.patched.tar.gz /usr/src tar -zxvof /usr/src/net-tools-1.2.0.tar.gz |
(5) Соберите NetTools.
cd /usr/src/net make install |
Q:
Может ли Token Ring собираться как модуль?
A:
Да, это можно сделать, причем Token-Ring при этом будет довольно хорошо работать. Имеется дополнительный параметр, который Вы можете использовать для компиляции Token Ring в качестве модуля. Если Вам когда-нибудь понадобится "обмануть" программы, например загрузочные диски RedHat, то в конфигурации Token-Ring-карты (для NFS/FTP и т.п.) используйте параметр "device", отличный от tr0. Вероятно возникнут проблемы, если попробовать использовать этот трюк с несколькими Token-Ring-совместимыми адаптерами. Он предназначен, главным образом, для нескольких несовместимых устройств. Пример:
/sbin/insmod ibmtr device=eth0 |
Q:
Я получаю ошибку с кодом "0011". Что это значит?
A:
Удостоверьтесь, что Вы подсоединены к сети, и что у Вас есть loopback-коннектор на Token-Ring-карте. Это сообщение может означать, что не открыта сеть. В 99,99% оно означает, что Вы не подключены к ней.
C:
Если на машине установлена звуковая карта, использующая порт 0x220, то она может конфликтовать с Token-Ring-картой, использующей порт 0xa20. Если возникла данная ситуация, то попробуйте поменять порт Token-Ring-карты на 0xa24, или переместите/удалите звуковую карту.
Также у меня сохранились некоторые письма, касающиеся Token Ring под Linux. В некоторых сообщениях для экономии места я удалил не очень интересные части.
Q:
От: "Mr. Chuck Rickard" Тема: Re: Token Ring патч для ядра
Я поменял параметр "device" на tr0, но при сборке получил сообщение "tr0: Can't assign device to adapter", и параметр "device" снова стал tr1. У Вас есть какие-нибудь идеи по этому поводу? Спасибо! Chuck Rickard (chuck@umbc8.umbc.edu) |
A:
От: David Morris |
Когда это единственное получаемое сообщение, то оно скорее всего означает, что программно заданный адрес порта не используется Вашей tr-картой (см. segment = inb(PIOaddr) в ibmtr.c)).
Q:
От: Mike Glover Тема: Token ring проблемы. Спасибо за ответ. Вот мой файл /var/adm/messages: May 2 10:03: 14 linux kernel: tr0: Unable to assign adapter to device. May 2 10:03:14 linux kernel: tr1: Unable to assign adapter to device. Устройство tr0 не может связаться с адаптером, это смущает меня. Документации очень мало и я не знаю как поступить при таком сообщением. Я знаю, что я не ввел никакие параметры tr-карты, но я не знаю где это делать. Железо: PC-клон (Dell OMNIPLEX 560, если быть точным) tr-карта Olicom 16/4 Adapter. У меня есть tr-драйвер для DOS и под DOS моя карта работает. Мне кажется, что я чего-то не доделываю в Linux. |
От: Mike Glover Тема: Нашел IBM-карту... Я взял IBM tr-карту и добился немного большего, но все еще не могу полностью установить ее. (Я изменял /etc/rc.d/rc.inet1 ifconfig от eth0 до tr0). Вот часть моего файла /var/adm/messages : May 2 16:23:07 linux kernel: IPX Portions Copyright (c) 1995 Caldera, Inc. May 2 16:23:07 linux kernel: tr0: PIOaddr: a20 seg/intr: b8 mmio base: 000dc000 intr: 0 May 2 16:23:07 linux kernel: tr0: Channel ID string not found for PIOaddr: a20 May 2 16:23:07 linux kernel: tr0: Expected for ISA: 5049434f3631313039393020 May 2 16:23:07 linux kernel: tr0: found: 000902003021111000182000 May 2 16:23:07 linux kernel: tr0: Expected for MCA: 4d4152533633583435313820 May 2 16:23:07 linux kernel: tr0: Unable to assign adapter to device. May 2 16:23:07 linux kernel: tr1: Unable to assign adapter to device. May 2 16:23:07 linux kernel: PPP: version 0.2.7 (4 channels) NEW_TTY_DRIVERS OPTIMIZE_FLAGS Это Вам говорит о чем-нибудь? Мне - практически ни о чем. |
От: David Morris |
От: Mike Glover Тема: Уже почти... Я вижу в моем файле messages следующее: May 3 14:50:24 linux kernel: tr0: now opening the board... May 3 14:50:24 linux kernel: tr0: board opened... May 3 15:11:47 linux kernel: tr0: Arrg. Transmitter busy for more than 50 msec. Donald resets adapter, but resetting May 3 15:11:47 linux kernel: the IBM tokenring adapter takes a long time. It might not even help when the May 3 15:11:47 linux kernel: ring is very busy, so we just wait a little longer and hope for the best. May 3 15:11:47 linux kernel: tr0: Arrg. Transmitter busy for more than 50 msec. Donald resets adapter, but resetting May 3 15:11:47 linux kernel: the IBM tokenring adapter takes a long time. It might not even help when the May 3 15:11:47 linux kernel: ring is very busy, so we just wait a little longer and hope for the best. May 3 15:11:47 linux kernel: tr0: Arrg. Transmitter busy for more than 50 msec. Donald resets adapter, but resetting Запись Arrg появляется только тогда, когда я запускаю telnet, rlogin или ftp на удаленной машине. Как только это происходит, процесс связи надолго зависает. Я попробовал удалить все устройства из моего компьютера (такие как SCSI-карта) и работать только с tr-картой. Так что проблема не в аппаратной части. Вот переключатели DIP на карте: 1 Up | 2 Down | 3 Down | Согласно руководству эти переключатели устанавливают 4 Up | базовый адрес CC000, что вполне подходит для моей машины. 5 Up | 6 Down | 7 Down + Эти устанавливают IRQ=2, что тоже меня устраивает 8 Down + 9 Up X Первичный сетевой адаптер. 10 Up = 16 KB RAM. Это хорошо? 11 Down = 12 Up # 16 Mbps скорость данных. Я буду удивлен, если дело в DIP-переключателях, мне кажется, у меня неправильно сконфигурирована таблица маршрутизации и другие сетевые настройки. Mike |
Если вам нужна помощь, вы можете посмотреть squid-FAQ или список рассылки squid на www.squid-cache.org. Вы также можете написать мне по адресу drk@unxsoft.com, и, если позволит время, я попытаюсь ответить на ваши вопросы.
Daniel Kiracofe
Перевод: Павел Гашев, ASPLinux
Этот документ содержит в себе информацию, по установке прозрачного кэширующего HTTP-прокси-сервера, при помощи Linux и squid.
Первое, что мы должны сделать - это убедиться в том, что настроено ядро. Если вы используете готовое ядро из вашего дистрибутива, прозрачный прокси может быть включен, а может быть и нет (IIRC в RH 6.1, но не ссылайтесь на меня). Если вы не уверены, лучше пропустите этот раздел, и, если в следующем разделе команды дают ошибку, это значит, что у вас не настроено ядро.
Если ваше ядро не настроено на прозрачный прокси, вам нужно его пересобрать. Пересборка ядра - это сложный процесс (по крайней мере сначала) и он не описывается в данном документе. Читайте Kernel-HOWTO.
Следующие опции, которые вам нужно включить (замечу: ни одна из них не может быть собрана, как модуль):
Sysctl support
TCP/IP networking
IP: firewalling
IP: always defragment
IP: transparent proxy support
/proc filesystem support
Как только у вас будет запущено новое ядро, вам, возможно, надо будет включить пересылку IP-пакетов (forwarding), который позволяет вашему компьютеру работать в качестве маршрутизатора. По умолчанию эта опция выключена, и должна включаться каждый раз в процессе загрузки. Кроме того, это может сделать только root. Тем не менее, в вашем дистрибутиве это может делаться автоматически. Проверьте это, сделав "cat /proc/sys/net/ipv4/ip_forward". Если вы видите "1" - все нормально. Иначе, выполните "echo '1' >/proc/sys/net/ipv4/ip_forward'' и добавьте эту команду в скрипт загрузки в /etc/rc.d/.(Примечание переводчика: В некоторых дистрибутивах, например в RedHat, это делается путем установки переменной FORWARD_IPV4 в true в файле /etc/sysconfig/network)
Этот документ уделяет внимание squid версии 2.3 и ядру версии 2.2 - наиболее стабильным текущим версиям на момент, когда пишется этот текст (Март 2000). Однако это работает и на более ранних версиях squid 2.0 и ядрах 2.1 и выше. Если вам нужна информация о старых версиях, некоторые ранние документы доступны на www.unxsoft.com.
Если у вас ядро 2.3, вам нужно использовать netfilter вместо ipchains. Тем не менее, если вы используете разрабатывающееся ядро, вы должны сами разобраться с netfilter на основе предусмотренной документации. Если нет, вам не надо использовать разрабатывающееся ядро (поверьте мне на слово). Как только выйдет ядро 2.4, этот документ будет изменен согласно утилите netfilter.
Если все было сделано правильно, пойдите на другую машину, укажите ей в качестве шлюза вашу машину и выйдите в Интернет. Чтобы убедится, что запросы обрабатываются именно прокси-сервером, а не напрямую, проверьте содержимое журнала /usr/local/squid/logs/access.log
ipchains поставляется почти с каждым последним дистрибутивом (основанном на ядре 2.2). Тем не менее, если у вас нет ipchains, вы можете взять его по адресу ftp://ftp.rustcorp.com/ipchains/. ipchains - очень мощная программа и мы лишь слегка коснемся ее возможностей. За дополнительной информацией обращайтесь к http://www.rustcorp.com/linux/ipchains/HOWTO.html.
Чтобы установить правила, нам нужно знать две вещи: IP адрес сервера (я например использую 192.168.1.1) и номер порта, на котором запущен squid (я использую значение по умолчанию - 3128).
Во-первых, вам нужно разрешить прохождение пакетов, направленных к вашему веб-серверу. Причем надо указать как интерфейс loopback, так и сетевой интерфейс. Вам нужно это сделать даже в том случае, если у вас нет собственного веб-сервера, т.к. отсутствие этих правил приведет бесконечному зацикливанию пакетов, если прокси попытается соединиться с самим собой. Используйте следующие команды:
ipchains -A input -p TCP -d 127.0.0.1/32 www -j ACCEPT
ipchains -A input -p TCP -d 192.168.1.1/32 www -j ACCEPT
А это заклинание включает прозрачный прокси:
ipchains -A input -p TCP -d any/0 www -j REDIRECT 3128
Вы можете добавить эти команды к соответствующему скрипту загрузки в каталоге /etc/rc.d/.
Теперь нам нужно запустить squid. Скачайте последнюю версию исходных текстов с www.squid-cache.com. Убедитесь в том, что это СТАБИЛЬНАЯ (STABLE) версия, а не разрабатываемая (DEVEL). В данный момент, когда пишется этот текст, последняя версия была squid-2.3.STABLE1.tar.gz.
Разархивируйте архив ("tar -xzf "). Запустите скрипт автоконфигурации ("./configure"), скомпилируйте ("make") и установите squid ("make install").
Теперь нам нужно отредактировать файл squid.conf (по умолчанию он находится в /usr/local/squid/etc/squid.conf). В нем много комментариев, и, на самом деле, самая лучшая документация по squid находится в файле squid.conf. После того, как все запустилось и работает, вы должны вернуться в этот файл и настроить одну вещь. Найдите следующие опции, раскомментируйте их, и присвойте им соответствующие значения:
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on httpd_accel_uses_host_header on
И наконец, найдите директиву http_access. Значение по умолчанию скорее всего будет установлено в "http_access deny all". Это запрещает всем использовать squid. Вы можете изменить это на "http_access allow all", но как только это заработает, вам возможно нужно будет прочитать об ACL (Access Control List) и установить доступ к squid только пользователям вашей сети. Это может показаться глупым, но вы должны ввести некоторые ограничения в доступе к squid. Люди, находящиеся за фильтрующим firewall (таким как порно-фильтр или фильтры для стран, язык которых вы не понимаете) часто "садятся" на открытый прокси и засоряют канал.
Создайте структуру каталогов, запустив "squid -z" (если вы установили squid в первый раз).
Теперь, запустите squid, используя скрипт RunCache, находящийся в каталоге /usr/local/squid/bin/. Если он запустился, вам нужно настроить обозреватель на использование в качестве прокси-сервера вашей машины и порта 3128 (если вы не меняли порт по умолчанию) и попробовать squid в качестве обычного прокси-сервера.
За дополнительной информацией обращайтесь к squid FAQ на www.squid-cache.org.
В случае использования "обычного" прокси, клиент в программном обеспечении просмотра веб-страниц (обозревателе) должен указывать прокси-сервер и порт. Обозреватель выполняет запрос на прокси-сервер, который перенаправляет его к веб-серверу. Это все конечно хорошо, но иногда случаются ситуации, типа
Всем клиентам сети приходится настраиваться на прокси-сервер, хотят они этого или нет.
Вы хотите, чтобы клиенты использовали прокси-сервер, но не хотите, чтобы они об этом знали.
Вы хотите, чтобы клиенты использовали прокси-сервер, но не хотите настраивать сотни или тысячи веб-браузеров.
На помощь вам приходит "прозрачный" прокси-сервер. Веб-запрос перехватывается прокси-сервером абсолютно прозрачно. Т.е. клиентское программное обеспечение думает, что работает с настоящим веб-сервером, хотя, на самом деле, работает с прокси-сервером.
Маршрутизаторы Cisco поддерживают прозрачный прокси. Но, (к вашему большому удивлению) Linux тоже может быть маршрутизатором и поддерживать прозрачный прокси, перенаправляя TCP-соединения на локальные порты. Кроме того, наш прокси-сервер может знать все последствия этого перенаправления, и не делать его. Таким образом у нас есть два пути:
Первый. Если ваш прокси-сервер не может быть прозрачным, вы можете использовать маленький сервер transproxy, который все сделает за вас. transproxy написал John Saunders, и он доступен на ftp://ftp.nlc.net.au/pub/linux/www/ или на вашем местном зеркале metalab. Далее в этом тексте мы не будем обращаться к transproxy.
Более "чистый" путь - взять веб-прокси-сервер, который сам поддерживает прозрачность. Один из них, на который мы хотим обратить внимание - это squid. Squid - это кэширующий прокси-сервер с открытыми исходными текстами (Open Source) для систем Unix. Его можно найти на www.squid-cache.org