BASH Programming - Введение

         

Информация о ISP


Более детальная информация о определенных ISP доступна из различных источников:

Demon Internet (demon.co.uk)

Easynet TBA

Netcom

PowerTech, Schibstednett, Telenor Online

Primenet TBA

Stanford

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



Как автоматизировать процедуру соединения?


Автоматизированная обработка новостей и почты в Linux делается легко.

Во-первых, надо создать /usr/lib/ppp/ppp-on, который устанавливает соединение с ISP. Часто этот файл содержит только:

/usr/sbin/pppd

В /etc/ppp/options указываются такие спецификации:

connect "/usr/lib/ppp/chat -v -f /etc/ppp/chatscript" crtscts modem defaultroute asyncmap 00000000 user dirk /dev/modem 38400

Для завершения соединения, используйте соответственнно файл /usr/lib/ppp/ppp-off.

Проверив функциональные возможности этих двух скриптов, теперь нужно написать скрипты, которые выполняют другие задачи. Скрипт для забора email был описан выше, и мы поместим его в /home/dirk/pop.

Скрипт обмена почтой может быть потом выполнен как /root/mail:

#! /bin/sh # # exchange mail # 10 minutes timeout: TIMEOUT=600 DT=10

# kick sendmail: sendmail -q &

# retrieve mail: su dirk -c /home/dirk/pop



# wait for sendmail to terminate: t=0 while ! mailq | grep -q "Mail queue is empty"; do t=$[$t+$DT] if [ $t -gt $TIMEOUT ] ; then echo "sendmail -q timeout ($TIMEOUT).." exit 1 fi sleep $DT done

exit 0

Скрипт обмена новостями может быть записан как /usr/lib/news/news:

#!/bin/sh # # обмен новостями # должен быть запущен от пользователя news: cd /usr/lib/news

#обновить исходящие пакеты (C News): /usr/lib/newsbin/input/newsrun < /dev/null

#обмен новостями: /usr/lib/newsbin/newsx acme news.acme.net

#и обработать пришедшие пакеты: /usr/lib/newsbin/input/newsrun < /dev/null

Скрипт, соединяет различные составляющие и куски, и может быть размещен как /root/news+mail:

#!/bin/sh # # обмен новостями и почтой # должен запускаться от root # if ! /usr/lib/ppp/ppp-on; then exit 1 fi trap "/usr/lib/ppp/ppp-off" 1 2 3 15

#обмен почтой и новостями /root/mail & su news -c ~news/news wait

#отсодиниться.. /usr/lib/ppp/ppp-off

#обновить исходящие пакеты (C News):: su news -c /usr/lib/newsbin/input/newsrun < /dev/null &

exit 0

Легко добавить расширение к вышеприведенному скрипту для установления соединения, если имеется почта и новости для отправки. Давайте назовем его /root/news+mail.cond, и имейте в виду, что имя спула исходящих новостей должно быть исправлено на значение в вашей системе:


#!/bin/sh # # exchange news и email, only if outgoing news или mail # (C News spool) if [ -s /var/spool/news/out.going/acme/togo ] ! ( mailq | grep -q "Mail queue is empty"); then /root/news+mail fi

Осталось только задать время, когда все это запускать. Это делается использованием команды crontab -e от имени root. Давайте назначим обмен почтой и новостями на 07:00 утра и затем каждые четыре часа отправку почты и новостей:

00 7 * * * /root/news+mail 00 11,15,19,23 * * * /root/news+mail.cond

Удостоверьтесть, что каждый компонент тщательно проверен, прежде чем начнете использовать их вместе. Позже можно добавить несколько других задач, таких как установка времени дня (используя ntpdate) и автоматическое обновление (зеркалирование) локально разрабатываемых файлов WWW и FTP на ISP (используя make и ftp).

ALT: В зависимости от предпочтений, также возможно поключить какой-либо процесс. При каждом поднятии PPP, запускается скрипт /etc/ppp/ip-up. Здесь можно добавить команды для запуска процедуры обмена почтой и новостями. См. man pppd для подробностей.

ALT: Также возможно автоматически поднимать PPP при обнаружении трафика. Есть много элегантных решений, но они сильно зависят от правильной настройки, которая должна помочь избежать частых (и дорогостоящих) установлений соединений. Больше информации можно почерпнуть на:



Утилита diald доступна на:



В других местах можно обнаружить и другие варианты создания PPP-сессий.


Как мне бродить по Интернет?


Если вас больше интересует текствое содержание, вам пригодится Lynx Web-браузер. Он находится на:

Если у вас установлен X-windows, вы можете использовать множество графических браузеров. Chimera находится на:

Mosaic:

Mozilla (Netscape):

Эти браузеры постоянно обновляются и доступны во всех версиях.

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



Как мне подсоединиться к остальному миру?


Предполагается, что мы уже имеем установленные модули сетевого программного обеспечения (напр., часть N-серии Slackware), и что вы используете последовательный порт /dev/modem.

Настройка по умолчанию позволяет обращаться к /dev/modem только как пользователь root.

Чтобы напрямую подсоединиться к shell ISP и поэкспериментировать над процессом соединения, вы можете использовать программу minicom. Она прекрасно подходит для этой цели.



Как мне узнать побольше?


В Linux Documentation Project есть книга, называемая Linux Network Administrator's Guide от Olaf Kirch - прекрасное руководство для тех, кто устанавливает и делает что-то, относящееся к TCP/IP и Internet:

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

man pppd

Также вы можете найти некоторую документaцию на определенные программы в каталоге /usr/doc, хотя он не всегда хорошо структурирован.

Весьма рекомендуются следующие HOWTO:

Installation-HOWTO дает основы.

NET-2-HOWTO очень глубокое описание установки и настройки программного обеспечения поддержки сети. Многое из описанного в нем уже должно быть сделано, если вы используете стандартный дистрибутив Linux (например, Slackware, RedHat, Debian). Тем не менее многие главы по настройке и поиску проблем окажутся весьма полезными.

Mail-HOWTO объясняет как настроить различные утилиты. Хотя, многое из этого делается при инсталляции Linux.

News-HOWTO для установки (conventional) news spool.

Tiny-News обрисовывает другой путь обмена новостями.

PPP-HOWTO хорошее описание проблем, с которыми вы можете столкнуться при настройке PPP соединения.

Serial-HOWTO содержит все, что вам нужно знать об установке последовательных портов.

Mail-Queue расскажет вам как настроить отправку через sendmail так, чтобы удаленная почта ставилась в очередь, а локальная доставлялась немедленно.



Как настроить C News?


Здесь описано решение на базе ньюссервера C News и протоколе NNTP. C News предназначался для несколько других целей, но его гибкости хватает и для нашей ситуации. Также можно использовать более свежий продукт - сервер новостей INN, но он может требовать большее количество ресурсов. В любом случае не вздумайте ставить их обоих одновременно; они не дружат друг с другом.

Критично, что обработка новостей делается от имени пользователя news, и все конфигурационные файлы находятся в каталоге /usr/lib/news. Один из способов сделать это, при регистрации как root выполнить su news; cd.

Самые важные настроечные файлы это:

active - краткое описание активных групп новостей. Он обновляется командой addgroup, например, addgroup comp.os.linux.networking y.

организация может быть указана по вашему усмотрению в поле заголовка Organization: , в нашем случае:

Dirk Gently's Holistic Detective Agency

почтовое имя в нашем случае acme.net.

whoami установливает имя вашего сайта в Path: . В установке, описанной здесь, с использованием NewsX, это имя никогда не выйдет за пределы машины, так что можете установить его так, как вам нравится, если только уверены, что оно уникально.

sys управляет выборкой и дальнейшим распространением новостей. Допустим, что ISP в нашем случае добавляет acme.net к Path, и, что он единственный наш поставщик новостей. Данный пример в действительности говорит о том, что мы будем принимать все, что приходит, и, что мы отсылаем новости только на acme.net, который прежде не видели и первоначально отправляли на наш собственный сайт. В этой упрощенной установке мы допустим, что все группы приходят из одного источника. /all определяет дистрибуцию, и должно быть включено. Буква F говорит о том, что все (указатели на) исходящие новости будут складываться в файл.

ME:all/all:: acme/acme.net:all,!junk/all:FL:

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

mkdir /var/spool/news/out.going/acme

mailpaths управляет отправкой сообщений в модерируемые группы, хотя эта задача обычно оставляется на усмотрение ISP.


C News нуждаются в определенной доле ежедневного внимания со стороны администратора, но его действия могут быть определены один раз и для всех командой crontab -e для пользователя news. Далее показано как может выглядеть эта установка; она может быть настроена как вам угодно:

# maintain incoming и outgoing batches 10,40 * * * * /usr/lib/newsbin/input/newsrun

# expire C News, once a day 30 0 * * * /usr/lib/newsbin/expire/doexpire

# monitor и report if needed 00 2 * * sat /usr/lib/newsbin/maint/addmissing 40 3 * * * /usr/lib/newsbin/maint/newswatch 50 3 * * * /usr/lib/newsbin/maint/newsdaily

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

Нужно также удостовериться, что при запуске машины все чисто. От пользователя root, добавьте строку в /etc/rc.d/rc.local:

su news -c /usr/lib/newsbin/maint/newsboot

News могут обрабатываться программой NewsX, извлекающей новости с NNTP-сервера. Программа может быть найдена на:

Or:



Установка NewsX предельно проста. Установка в классическом случае:

make su make install exit

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

Чтобы выбрать статьи, пользователь news выдает следующие команды (при установке связи по PPP, или аналогичной -):

newsrun newsx acme news.acme.net newsrun

Опция -d дает непрерывную распечатку экрану. За подробной информацией обратитесь к документации NewsX.

NewsX будет также заботиться о регистрации исходящих новостей.

Для управления удалением статей при их устаревании требуется файл explist, требуется. Комментарии в этом примере должны объяснить, что мы делаем:

# hold onto history lines 14 days, nobody gets >120 days /expired/ x 14 - /bounds/ x 0-1-120 -

# retain these for 2 months comp.sources,comp.os.linux.all x 60 -

# noise gets thrown away fast junk,control x 2 -

# default: 14 days, no archive all x 14 -

ALT: В маленьком спуле новостей, не требуется частое управление группами новостей. Полезность трафика изменяется в широких пределах. Основная задача состоит в определении, какие статьи отбросить, а какие группы создать автоматически. Чтобы гарантировать, что управляющие сообщения, содержащие новую группу, не создадут у нас беспорядок, в файле, называемом newgroupperm определяется, что именно мы позволяем:

comp.os.linux tale@uunet.com yv all any nq

В этом примере, будут созданы все группы в иерархии comp.os.linux (y), и пользовательские новости будут сообщаться (v). Все остальные будут молча (q) проигнорированы (n). Последняя строка нужна, если вы хотите создавать все группы вручную.

ALT: Альтернатива NewsX - suck, или slurp совместно с postit. Slurp использует NNTP NEWNEWS, который может работать с несколькими серверами.


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


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

Как для C News, вся обработка новостей ведется от пользователя news.

Домашний каталог для leafnode /usr/lib/leafnode. Для установки введите:

cd /usr/lib/leafnode tar -xzvf leafnode-0.8.tgz cd leafnode-0.8 make su make install

Оставаясь пользователем root, измените строку, которая управляет NNTP в /etc/inetd.conf:

nntp stream tcp nowait news /usr/sbin/tcpd /usr/local/sbin/leafnode

Активизация:

killall -HUP inetd

Возвратимся к пользователю news, напечатав exit. В /usr/lib/leafnode/config изменяем строку, которая определяет сервер NNTP. В нашем случае:

server = news.acme.net

Leafnode будет обслуживать себя добавлением следующей команды через crontab -e от пользователя news:

# expire Leafnode, once a day 0 4 * * * /usr/local/sbin/texpire

Обмен новостями производится также от пользователя news следующей командой (PPP поднят и запущен):

/usr/local/sbin/fetch

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

export NNTPSERVER=localhost

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

ALT: Альтернатива leafnode - nntpcache. Он доступен на:



Как настроить оффлайновую читалку новостей?


Чтобы читать новости в offline и таким образом сократить счета за телефон и достичь большей гибкости, надо установить локальный news-spool. Это потребует усилий по настройке, и также определенного объема дискового пространства. После первичной настройки все должно более или менее благополучно работать, требуя лишь некоторого внимания время от времени.

Здесь описаны два различных решения.



Как настроить онлайновую читалку новостей?


Пока PPP активен, можно читать новости в онлайне. Есть куча доступных программ. Два примера: rtin и trn.

Чтобы начать читать новости, то в большинстве случаев достаточно сделать (обычно только раз и для всех в файле .profile):

export NNTPSERVER=news.acme.net

Для получения в сообщениях корректного From-address, некоторые программы могут потребовать:

export NNTP_INEWS_DOMAIN=acme.net



Как отправлять и принимать электронную почту?


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

Sendmail основывается на настройках в /etc/sendmail.cf. Подходящий для клиентов ISP пример может быть найден на:

Он основан на procmail, как агенте доставки, но может быть легко изменен для пользователя.

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

# who I masquerade as (null for no masquerading) DMacme.net

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

# "Smart" relay host (may be null) DSmail.acme.net

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

Прием почты часто может быть выполнен через протокол POP3, который может быть инициализирован при каждом соединении. Скрипт для проверки этого:

sendmail -q popclient -3 -v mail.acme.net -u dirk -p "PrettySecret" \ -k -o /usr/spool/mail/dirk

Этот скрипт может быть запущен после установления PPP-сессии. Заметьте, что это только тест, поэтому удостоверьтесь, что местный почтовый ящик не затрагивается при выполнении этого скрипта. Опция -k говорит, что почта остается в почтовом ящике ISP, и вы просто получаете копию ее. Как только убедитесь, что скрипт работает корректно, можете удалить эту опцию.

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

Более безопасная и лучшая версия этого скрипта находится на:

Эта версия скрипта требует установленного procmail, который находится на:




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

Заметьте, что когда мы прямо используем procmail, как в этом случае, ситуация несколько отличается от описанной в документации на procmail Файл .forward не требуется, и также нам не нужен .procmailrc. Последний нужен только для сортировки почты.

Интерфейс пользователя для чтения и отправки почты может быть найден в программах типа Pine или Elm.

ALT: Для обычного клиента ISP, работающего по коммутируемой линии, нет необходимости иметь активным sendmail демон. Чтобы сократить потребление ресурсов можно закомментировать строку запуска sendmail, которая обчно находится в /etc/rc.d/rc.M.

ALT: Вместо sendmail может использоваться более простой smail. Он очень хорошо описан в (также как и другие полезные вещи) в Руководстве Сетевого Администратора Linux.

ALT: Для создания sendmail.cf есть пакет m4. Он прекрасно подходит для модификации существующей конфигурации.

ALT: Есть менее гибкие, но более простые альтернативы. Pine может быть запусщен в неинтерактивном режиме на указываемый в настройках промежуток времени, например. Можно даже использовать новые версии некоторых веббраузеров.

ALT: Многим энтузиастам нравится примочка Gnus к Emacs, которая работает с почтой и новостями. Дополнительная информация на:



ALT: Альтернативный pop-клиент - это pop-perl5. Доступен на:




Новые версии этого документа


Новые версии этого документа будут периодически поститься в comp.os.linux.answers. Они также будут поступать на различные анонимные FTP-сайты, которые собирают такую информацию, включая:

Вдобавок вы наверняка найдете этот документ на домашней странице Linux WorldWideWeb через:

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



О каких других вещах я должен знать?


Различные сообщения об ошибках в системе обычно будут выдаваться в виде внутреннего email. Чтобы гарантировать, что их можно будет прочесть, нужно создать /etc/aliases. Не забудьте выполнить команду newaliases при каждом изменении этого файла. Пример, подходящий в большинстве случаев:

PostMaster: root ftp: root news: root usenet: root FaxMaster: root fax: root WebMaster: root MAILER.DAEMON: root

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

Если вам пришлось перейти из Yarn, он должен быть преоразован в стандартные почтовые ящики, используя yarn2mf, который доступен:



Основная настройка


Настройка машины для использования в сети должна производиться от root. Первым делом удостоверьтесь, что файл /etc/hosts.deny содержит строки:

ALL: ALL

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

ALL: LOCAL

или что тоже самое:

ALL: 127.0.0.1

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

Прекрасно иметь имя у машины, имя, которое пользователь с динамическим IP может действительно выбрать таким, каким пожелает. Введите имя в /etc/hostname:

roderick

Следующий шаг - установка сервера имен в /etc/resolv.conf:

search . nameserver 193.212.1.0

Сервер имен должен быть указан числовым IP адресом, и отличается для каждого ISP. Если требуется, вы можете прописать до трех различных серверов. Они будут опрашиваться в том порядке, в каком вы их указали.

Если вы хотите иметь возможность использовать имена типа somemachine как сокращение для somemachine.acme.net, вы должны заменить первую строку на:

search acme.net

Определенный минимум настройки также требуется для /etc/hosts. Большинство пользователей смогут управлять:

127.0.0.1 localhost 0.0.0.0 roderick

Пользователь с фиксированным адресом очевидно должен вместо 0.0.0.0 указать свой фиксированный адрес.

Аналогично минимальный /etc/networks:

loopback 127.0.0.0 localnet 0.0.0.0

Также вы можете установить ваш внешний почтовый домен в /etc/mailname:

acme.net

Имя пользователя и пароль для ISP должны быть указаны в /etc/ppp/pap-secrets

dirk * PrettySecret

Для тех ISP, которые используют CHAP вместо PAP, имя файла будет /etc/ppp/chap-secrets.

Наконец, надо описать процедуру соединения, которая производится перед инициализацией PPP проделать. Это делается в /etc/ppp/chatscript:

TIMEOUT 5 "" ATZ OK ATDT12345678 ABORT "NO CARRIER" ABORT BUSY ABORT "NO DIALTONE" ABORT WAITING TIMEOUT 45 CONNECT "" TIMEOUT 5 "name:" ppp


Содержимое можно настроить по-своему. Телефонный номер в третьей строке, конечно, должен быть заменен на ваш. Некоторым пользователям может понадобиться заменить строку инициализации модема ATZ на более соответствующую их модему. Последняя строка указывает, что в ответ на приглашение name: надо ответить ppp. Другие системы могут иметь другие процедуры входа в систему.

Чтобы проинициировать звонок, PPP-протокол может быть активизирован командой:

exec pppd connect \ 'chat -v -f /etc/ppp/chatscript' \ -detach crtscts modem defaultroute \ user dirk \ /dev/modem 38400

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

tail /var/adm/messages

Пока PPP поднят, вы напрямую подключены к Интернет, и можете использовать программы типа ftp, ncftp, rlogin, telnet, finger итд. Все эти программы являются частью пакета network.

Также информация о PPP также доступна в:

/usr/lib/ppp/README.linux

/usr/lib/ppp/README.linux-chat

Наконец, дополнительное слово о безопасности. Файл /etc/inetd.conf содержит список всех сервисов, которые ваша машина обслуживает внешне. Файлом /etc/hosts.deny мы запретим внешний доступ. Для нужных сервисов доступ можно позволить файлом /etc/hosts.allow. Локальный трафик может быть разрешен:

ALL: LOCAL

См. также man 5 hosts_access.

Маленькое замечание: Существует определенное недопонимание по поводу имен протоколов POP. Определения в /etc/services обычно такие:

pop2 109/tcp pop-2 # PostOffice V.2 pop3 110/tcp pop-3 pop # PostOffice V.3

ALT: Вместо chatscript можно использовать намного более гибкий dip. Но не одновременно с diald.

ALT: Счастливчики, имеющие постоянное TCP/IP соединение через, например, Ethernet, могут спокойно пропустить все, что касается, PPP, и сосредоточиться на вопросах установки их сетевых адаптеров.

ALT: У некоторых может не быть доступа через PPP, но может быть SLIP, для которого поддержка такая же, как для PPP. Другая возможность - UUCP. Другие могут иметь только новости и почту. Описание для варианта с почтой находится на:



Также возможна программа TERM. Почитайте Term-HOWTO.


Это описание создано как ответ


Это описание создано как ответ на вопросы пользователей о том, как можно настроить доступ к ISP (Internet Service Provider) по коммутируемой линии в Linux.
Чтобы помочь тем, кто впервые подключает свои машины с Linux к ISP, я попытался охватить как можно больше информации. Этот подход неизбежно приводит приводит к созданию определенных пересечений с другими Linux Howto-документами и LDP книгами. Ссылки на эти документы сделаны для лучшего понимания и подробного изложения.
Множество существующей документaции рассчитано на опытных пользователей с с большим опытом работы, и новички часто имеют проблемы при изучении такого рода информации.
Для простоты, примеры даны относительно следующих установок:
Учетная запись пользователя: dirk
Пароль: PrettySecret
Провайдер Интернет: acme.net
Почтовый сервер: mail.acme.net
Сервер новостей: news.acme.net
Сервер имен: 193.212.1.0
Телефон провайдера: 12345678
Наш dirk будет звонить со своей машины roderick.
Все вышеприведенные установки должны быть соотвественно заменены вашими собственными значениями. Чаще всего пользователям требуется внести минимальные изменения для подключения к различным ISP. Я постараюсь разрешить проблемы, которые вы можете встретить.

Большие или медленные ядра


Если ваше ядро поглощает достаточное количество памяти, слишком большое и/или просто долго компилирует, даже когда вы заставили ваш новый 786DX6/440 работать с ним, то вы вероятно получили набор ненужных вам вещей (драйверов устройств, файловых систем и т.п.). Если вы не используете их, то не настраивайте их, потому, что это занимает память машины. Наиболее очевидный симптом раздутия ядра, это интенсивное свапирование памяти на диск и с диска; если ваш диск создает шум и он не один из старых винчестеров Fujitsu Eagles, чей звук напоминал звук выключаемого двигателя реактивного самолета, то посмотрите в конфигурацию ядра.

Вы можете узнать сколько оперативной памяти занимает ядро взяв общее количество памяти на машине и вычтя из него количество ``общей памяти'' в файле /proc/meminfo или вывод команды `free'. Вы можете также определить это выполнив команду `dmesg' (или посмотрев в файл протокола ядра, если он есть в вашей системе). Там будет строка, которая выглядит примерно так:

Memory: 15124k/16384k available (552k kernel code, 384k reserved, 324k data)

Моя машина с процессором 386 (которая была настроена с меньшим количество опций) выдает следующее:

Memory: 7000k/8192k available (496k kernel code, 384k reserved, 312k data)

Если у вас просто получается большое ядро, но система не позволяет вам это, то вы можете попытаться выполнить `make bzimage'. Вам также может понадобиться установить новую версию LILO чтобы сделать это.



Что сделать


Раздел ``Советы и приемы'' очень маленький. Я надеюсь расширить его с помощью ваших пожеланий.

То же самой для раздела ``Дополнительные пакеты.''

Требуется больше информации об отладке/восстановлении.



Что такое загружаемый модуль?


Это кусочки кода ядра, которые не включены прямо в ядро. Они компилируются отдельно и затем могут вставлять и удалять их в запущенное ядро почти в любое время. Вследствии их гибкости, сейчас это предпочтительный способ кодирования некоторых средств ядра. Много популярных драйверов устройств, таких как драйвера PCMCIA и драйвера ленточных устройств QIC-80/40, являются загружаемыми модулями.



Что теперь? (Makefile)


После того как make config выдаст сообщение о том, что ваше ядро было настроено, вы можете ``проверить (настроить) основной Makefile для дополнительных настроек'', и т.п.

Теперь вы можете посмотреть в Makefile. Вам вероятно не понадобится изменять его, но вы не повредите его если посмотрите. Вы можете также изменить опции в нем с помощью команды `rdev' после того как поместите ядро на его место.



Что вообще делает ядро?


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

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



Дополнительные пакеты


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



Другие HOWTO, которые могут быть полезными


Sound-HOWTO: звуковые карты и утилиты

SCSI-HOWTO: все о контроллерах и устройствах SCSI

NET-2-HOWTO: работа с сетями

PPP-HOWTO: в отдельности работа с PPP

PCMCIA-HOWTO: о драйверах для вашего переносного компьютера (notebook)

ELF-HOWTO: что такое ELF, преобразование..

Hardware-HOWTO: обзор поддерживаемого оборудования

Module-HOWTO: более детально о модулях ядра

Kerneld mini-HOWTO: о kerneld

BogoMips mini-HOWTO: в случае если вас что-то удивляет



Другие опции настройки


Не все опции настройки перечислены здесь потому-что они слишком часто меняются или являются очевидными (например, поддержка 3Com 3C509 для компиляции драйвера для данной карты ethernet). Существует довольно полный список всех опций (плюс способ поместить их в скрипт Configure), который собран Axel Boldt (axel@uni-paderborn.de) по следующему адресу:

http://math-www.uni-paderborn.de/~axel/config_help.html

или через анонимный FTP по адресу:

ftp://sunsite.unc.edu/pub/Linux/kernel/config/krnl_cnfg_hlp.x.yz.tgz

где x.yz это номер версии.

Для последних ядер (2.0.x и более поздних), этот список был интегрирован в дерево исходных текстов.


Этот раздел содержит описания избранных опций настройки ядра (в make config), которые не перечислены в разделе конфигурации. Большинство драйверов устройств не перечислены.



Другие вещи, можно сделать с помощью ``make''


`make mrproper' выполнит более интенсивную очистку дерева исходных текстов. Иногда она является необходимой; вы можете выполнять эту команду после каждого наложения заплаток. `make mrproper' также удалит ваши файлы конфигурации, так что вы можете захотеть сохранить резервную копию вашего файла (.config), если вы считаете его ценным.

`make oldconfig' попытается настроить ваше ядро используя старый файл настроек; он проделает путь по процессу конфигурации `make config' вместо вас. Если у вас нет скомпилированного ядра или у вас нет старого файла настроек, то вам скорее всего не надо делать этой операции, поскольку вы вероятно захотите изменить настройки по умолчанию.

Смотрите раздел о модулях для описания операции `make modules'.



Другие заплатки


Также существуют другие заплатки (я буду назвать их ``нестандартными''), кроме поставляемых Linus. Если вы накладываете такие заплатки, то заплатки от Linus могут работать неправильно и вы должны будете либо убрать их, изменить исходные тексты или заплатку, либо установить новое дерево исходных текстов, или выполнить комбинацию описанных действий. Это может быть очень расстраивающим, так что если вы не хотите изменять исходные тексты (с возможно плохим результатом), то удалите нестандартные заплатки до приложения заплаток полученных от Linus, или просто установите новое дерево исходных текстов. Затем вы можете посмотреть работают ли нестандартные заплатки. Если они не работают, то вы либо задержались с использованием старого ядра, поиграйтесь с исходными текстами или измените заплатку, либо просто дождитесь выхода новой версии нестандартной заплатки.

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



Если что-то неправильно


(Замечание: этот раздел относится к большинству старых ядер).

Наиболее частая проблема возникает когда заплатка модифицирует файл, называемый `config.in' и он не выглядит достаточно правильно, потому-что вы изменили его опции для вашей машины. Это было исправлено, но эта проблема может возникнуть со старыми выпусками ядра. Для исправления этой проблемы посмотрите в файл config.in.rej, и посмотрите что осталось сделать оригинальной заплатке. Изменения обычно обозначаются символами `+' и `-' в начале строки. Посмотрите строки, которые окружают эти символы и запомните где установлено `y' или `n'. Теперь отредактируйте файл config.in, и измените `y' на `n' и `n' на `y' где это нужно. Выполните команду

patch -p0 < config.in.rej

и если она выдала, что операция проведена удачно (без ошибок), то вы можете продолжать работу выполняя настройку ядра и его компиляцию. Файл config.in.rej все равно останется, но вы можете удалить его.

если у вас все равно существуют проблемы, то это значит, что вы могли установить заплатку не с тем номером. Если программа patch сообщает `previously applied patch detected: Assume -R? (обнаружена предыдущая заплатка: использовать опцию -R?', то вы скорее всего пытаетесь приложить заплатку с номером меньшим, чем номер версии вашего ядра; если вы ответите `y', то программа попытается вернуть ваши исходные тексты к предыдущей версии, и скорее всего это вызовет ошибку; поэтому вам понадобится установить заново все дерево исходных текстов (что может быть не такой уж плохой идеей).

Для того чтобы убрать изменения внесенные заплаткой, используйте команду `patch -R' с оригинальной заплаткой.

Лучше всего в случае, когда заплатки делают что-то неправильно, начать применять ее с новым деревом исходных текстов (например извлеченным из одного из файлов linux-x.y.z.tar.gz), и запустит процесс заново.



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


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

Стандартная (minix) - Более новые дистрибутивы не создают файловые системы minix, и много людей не используют ее, но все равно хорошая идея настроить ее. Некоторые программы с ``дисками для восстановления (rescue disk)'' используют ее и все еще много гибких дисков могут использовать файловую систему minix, поскольку файловая система minix менее мучительная для использования на гибких дисках.

Extended fs - это была первая версия расширенной файловой системы, которая сейчас не является широко используемой. Если вы не знаете точно, что она вам нужна и сомневаетесь, то скорее всего она вам не нужна.

Second extended - эта файловая система широко используется в новых дистрибутивах. У вас скорее всего она есть и вам нужно ответить `y'.

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

msdos - если вы хотите использовать разделы вашего жесткого диска с MS-DOS, или монтировать гибкие диски, отформатированные под MS-DOS, то ответьте `y'.

umsdos - эта файловая система расширяет возможности файловой системы MS-DOS обычными Unix-подобными возможностями, такими как длинные имена. Это не является полезным для людей (таких как я), кто ``не работает в DOS.''

/proc - одна из величайших вещей со времен изобретения порошкового молока (я так предполагаю, идея была бесстыдно украдена у Bell Labs). Она не создает файловую систему proc на диске; она является интерфейсом в виде файловой системы к ядру и процессам. Много программ, выдающих список процессов (таких как `ps') используют ее. Как нибудь попробуйте выполнить `cat /proc/meminfo' или `cat /proc/devices'. Некоторые командные процессоры (в частности rc) используют /proc/self/fd (известный как /dev/fd в других системах) для ввода/вывода. Вы должны почти всегда ответить `y' на этот вопрос; много важных утилит для linux зависят от этого выбора.

NFS - если ваша машина работает в сети и вы хотите использовать файловые системы находящиеся на других машинах с помощью NFS, то ответьте `y'.

ISO9660 - имеется на большинстве CD-ROM. Если у вас есть привод CD-ROM и вы хотите использовать его в Linux, то ответьте `y'.

OS/2 HPFS - во время написания работает как файловая система только для чтения для OS/2 HPFS.

System V и Coherent - для разделов машин с System V и Coherent (это другие варианты Unix для PC).



BASH Programming - Введение


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



Hdparm


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



Избавляемся от файлов .orig


После всего нескольких заплаток у вас накопится куча файлов с расширением .orig. Например одно ядро 1.1.51, которое было последний раз почищено при версии 1.1.48. Удаление .orig файлов сохранило примерно половину мегабайта дисковой памяти.

find . -name '*.orig' -exec rm -f {} ';'

эта команда позаботится о вас. Версии программы patch, которые используют знак # для отклоненных файлов используют знак тильды ~ вместо .orig.

Существует лучший способ избавится от .orig файлов, который зависит от GNU программы xargs:

find . -name '*.orig' | xargs rm

или ``довольно безопасный, но несколько более многословный'' метод:

find . -name '*.orig' -print0 | xargs --null rm --



Я не могу заставить работать мой привод IDE/ATAPI CD-ROM


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

Если ваш CD-ROM единственное устройство на отдельном интерфейсе IDE, то оно должно быть выставлено как ``master'' или ``single''. Предположительно это наиболее общая ошибка.

Creative Labs (для некоторых) поместил интерфейс IDE на свои звуковые карты. Однако это приводит к интересной проблеме, заключающейся в том, что некоторые люди имеют только один интерфейс, много имеют два IDE интерфейса, встроенных в материнские платы (обычно на IRQ15), так что общая практика в том, чтобы сделать интерфейс на soundblaster третим IDE портом (IRQ11).

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

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

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

Если по некоторым причинам ваше устройство должно быть на так называемом ``третьем'' интерфейсе, или в случае других проблем возьмите ядро версии 1.3.x (например ядро 1.3.57 имеет такую поддержку), и прочитайте файл drivers/block/README.ide. Там существует гораздо больше информации.



Ядро не компилируется


Если ядро не компилируется, то скорее всего произошел сбой при накладывании заплатки или ваши исходные тексты были повреждены каким-либо образом. У вас также может быть неправильная версия gcc или также может быть повреждена (например включаемые файлы могут быть с ошибками). Убедитесь, что символические ссылки, которые описывает Linus в файле README установлены правильно. В общем, если стандартное ядро не компилируется, то у час что-то серьезное с системой и вероятно необходима переустановка некоторых утилит.

или возможно вы компилируете ядро 1.2.x при помощи ELF компилятора (gcc 2.6.3 и выше). Если вы получили набор ошибок типа so-and-so undefined в течении компиляции, то скорее всего у вас такая проблема. Исправление в большинстве случаев очень просто. Добавьте эти строки в начало файла arch/i386/Makefile:

AS=/usr/i486-linuxaout/bin/as LD=/usr/i486-linuxaout/bin/ld -m i386linux CC=gcc -b i486-linuxaout -D__KERNEL__ -I$(TOPDIR)/include

Затем заново выполните make dep и zImage.

В редких случаях gcc может не работать из-за аппаратных проблем. Сообщение об ошибке будет примерно такое ``xxx exited with signal 15'' и это в общем будет выглядеть очень загадочно. Я вероятно не должен был здесь это упоминать, за исключением того что это со мной однажды случилось -- у меня была испорченная кэш-память и компилятор время от времени не работал. Попробуйте сначала переставить gcc, если у вас есть такая проблема. ВЫ должны стать подозрительным только если ваше ядро нормально компилируется с отключенным внешним кэшем, с уменьшенным количество оперативной памяти и т.п.

Это имеет склонность беспокоить людей, когда они предполагают, что их оборудование не в порядке. Хорошо, я не буду делать это. Об этом существует FAQ -- он находится на http://www.bitwizard.nl/sig11/.



Ядро сообщает странные вещи об устаревших запросах маршрутизации


Возьмите новую версию программы route и любую другую программу, которая выполняет манипуляцию маршрутизацией. /usr/include/linux/route.h (который является файлом в /usr/src/linux) был изменен.



Ядро сообщает `warning: bdflush not running (предупреждение bdflush не запущен)'


Это может быть серьезной проблемой. Начиная с ядер после 1.0 (примерно 20 апреля 1994), программа названная `update', которая периодически сохраняла буфера файловой системы была изменена/заменена. Возьмите исходные тексты программы `bdflush' (вы должны найти их там где вы брали исходные тексты ядра), и установите эту программу (вы вероятно захотите запустить старое ядро пока вы делаете это). Эта программа сама установится как `update' и после перезагрузки, новое ядро не будет больше выражать недовольство ее отсутствием.



Эмуляция математических функций ядром


Если у вас нет математического сопроцессора (у вас голый 386 или 486SX), то вы должны ответить `y' на этот вопрос. Если у вас есть сопроцессор и вы все равно ответили `y', то не беспокойтесь-- сопроцессор все рано будет использоваться, а эмуляция будет проигнорирована. Единственное следствие этого в том, что ядро будет больше (расход ОЗУ). Я упоминал о том, что эмуляция очень медлена; хотя это не очень часто влияет, но все равно вспомните это, если столкнетесь с малой производительностью системы X-windos.



Как долго этот процесс идет?


Для большинства людей ответ будет такой: ``довольно долго''. Скорость вашей машины и количество имеющейся памяти определяют это время, но некоторая часть определяется, тем как вы включили в ядро. На машине 486DX4/100 с 16 МБ ОЗУ, на ядре версии 1.2 с пятью файловыми файловыми системами, поддержкой сети и драйвером звуковой карты, компиляция займет примерно 20 минут. На 386DX/40 (8 MБ ОЗУ) с примерно такой же конфигурацией, компиляция продолжается около 1.5 часов. В общем рекомендуем выпить кофе, посмотреть телевизор, повязать или поделать что-нибудь подобное пока ваша машина компилирует ядро.



Какие типы оборудования поддерживают новые ядра?


Смотрите Hardware-HOWTO. В качестве альтернативы вы можете посмотреть файл `config.in' в исходных текстах ядра linux source, или просто найти нужное устройство запустив `make config'. Они показывают все оборудование поддерживаемое дистрибутивом ядра, но не все, которое поддерживает linux; много драйверов общих устройств (таких как драйвера PCMCIA и некоторые драйвера ленточных устройств) являются загружаемыми модулями сопровождаются и распространяются отдельно.



Какие версии gcc и libc мне нужны?


Рекомендации Linus по версии gcc находятся в файле README, включенном в исходные тексты linux. Если у вас нет этой версии, то документация по рекомендуемой версии gcc должна сообщить вам все сведения, если вам необходимо обновить вашу версию libc. Это не трудная процедура, но важно следовать инструкциям.



Kbd


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



Make clean


Если новое ядро делает какие-то странные вещи после текущего его обновления, то есть большая вероятность, что вы забыли выполнить make clean до компиляции нового ядра. Симптомы могут быть любыми от полного краха вашей системы, странных проблем с вводом/выводом до малой производительности. Убедитесь также, что вы сделали make dep.



Модули


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



Модули распространяемые с ядром


В версии 2.0.30, почти все доступно как загружаемые модули. Для их использования сначала сначала убедитесь, что вы не настроили их вкомпилированными в ядро; то есть вы не ответили y в процессе выполнения `make config'. Скомпилируйте новое ядро и загрузитесь с ним. Затем снова перейдите в /usr/src/linux, и выполните `make modules'. это скомпилирует все модули, которые вы не указали при настройке ядра, и поместит ссылки на них в /usr/src/linux/modules. ВЫ можете использовать их прямо из этой директории, или выполните команду `make modules_install', которая установит модули в директорию /lib/modules/x.y.z, где x.y.z это версия ядра.

Это может быть особенно полезным в использовании файловых систем. Вы можете нечасто использовать файловые системы minix или msdos. Например, если я сталкиваюсь с гибким диском с msdos, я должен сделать insmod /usr/src/linux/modules/msdos.o, и затем rmmod msdos, когда все закончено. Эта процедура сохраняет примерно 50k ОЗУ в ядре в течении нормальной работы. Маленькое замечание для использования файловой системы minix: вы должны всегда настроить его прямо в ядро для использования в ``восстановительных (rescue)'' дисках.



Наложение заплаток


Накладывающиеся обновления ядра распространяются в виде заплаток. Например, если у вас версия 1.1.45, и вас оповестили, что выпущен `patch46.gz' для него, это означает, что вы можете обновить ядро до версии 1.1.46 приложив эту заплатку. Вы можете захотеть сначала сделать резервную копию дерева исходных текстов ядра (сначала `make clean' и затем `cd /usr/src; tar zcvf old-tree.tar.gz linux' создаст для сжатый архивный файл с резервной копией).

Так, продолжая пример, приведенный выше, предположим, что у вас файл `patch46.gz' расположен в директории /usr/src. Выполним cd в /usr/src и выполним `zcat patch46.gz | patch -p0' (или `patch -p0 < patch46' если эта заплатка не является сжатой). Вы увидите некоторые вещи мелькающие на экране, которые сообщают вам, что программа пытается приложить куски заплатки на нужные файлы и информацию о том, удачна данная операция или нет. Обычно этот процесс идет слишком быстро, чтобы вы могли прочитать и вы можете не быть уверенными, удачна эта операция или нет, в этом случае вы можете использовать опцию -s для программы patch, которая заставляет patch выдавать только сообщение об ошибках (вы не получите сообщения ``эй, мой компьютер действительно что-то делает!'', но если вы это предпочитаете..). Для того, чтобы взглянуть на то какие разделы не прошли гладко, перейдите в директорию /usr/src/linux и посмотрите файлы с расширением .rej. Некоторые версии программы patch (старые версии, которые могли быть скомпилированы на более худших файловых системах) оставляют отклоненные файлы с расширением #. вы можете использовать команду `find' для того чтобы найти эти файлы:

find . -name '*.rej' -print

эта команда печатает список всех файлов, которые находятся в текущей директории и ее поддиректориях и имеют расширение .rej на стандартный вывод.

если все прошло правильно, то выполните команды `make clean', `config', и `dep' как описано в разделах 3 и 4.

Существует еще несколько опций для команды patch. Как было отмечено выше, patch -s запретит вывод всех сообщений за исключением сообщений об ошибках. Если вы храните ваше ядро где-то в другом месте, отличном от /usr/src/linux, то выполнение patch -p1 (в этой директории) правильно выставит заплатку. Другие опции команды patch хорошо описаны в ее справочной странице.



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


Замечание: Некоторое из этого являются повторенниями/пояснениями подобного раздела файла README поставляемого Linus.

Команда `make config' выполненная в /usr/src/linux

запускает скрипт настройки, которая задает вам много вопросов. Она требует наличия bash, так что проверьте что bash находятся в /bin/bash, /bin/sh, или $BASH.

Существуют некоторые альтернативы команде `make config' и вы можете найти их более удобными и легкими для использования. Те, кто работает в X могут попробовать `make xconfig', если у вас установлен Tk (`click-o-rama' - Nat). `make menuconfig' -- это для тех, у кого установлен (n)curses и предпочитает текстовые меню. Эти интерфейсы имеют одно явное преимущество: если вы сделали неправильный выбор в течении настройки, то очень легко вернуться и исправить ее.

Теперь вы готовы отвечать на вопросы, обычно ответы выглядят как `y' (да) или `n' (нет). Драйвера устройств обычно имеют опцию `m'. Это означает ``module (модуль)'', обозначая, что система будет компилировать этот драйвер, но не вставит его прямо в ядро, а сделает загружаемым модулем. Более комично эта опция описывается как ``maybe (может быть)''. Некоторые более ясные и некритичные опции здесь не описаны; смотрите раздел ``Другие опции настройки'' для их краткого описания.

В версиях 2.0.x и более поздних, существует опция `?', которая обеспечивает краткое описание параметра настройки. Эта информация скорее всего наиболее свежая.



Не могу скомпилировать некоторые вещи после обновления ядра


Исходные тексты ядра linux включают некоторое количество заголовочных файлов (файлов, чьи имена заканчиваются на .h), на которые ссылаются стандартные заголовочные файлы в /usr/include. На них обычно ссылаются примерно так (где xyzzy.h должен быть чем-то в /usr/include/linux):

#include <linux/xyzzy.h>

Обычно существует ссылка, названная linux в /usr/include

на директорию include/linux в исходных текстах вашего ядра (/usr/src/linux/include/linux в обычной системе). Если эта ссылка находится не там, или указывает на неправильное место, то некоторые вещи вообще не будут компилироваться. Если вы посчитали, что исходные тексты ядра занимают слишком много места на диске и удалили их, то это скорее всего вызовет проблему. Другая проблема может возникнуть при неправильных правах доступа на файлы; если ваш администратор установил umask в такое значение, которое не позволяет другим пользователям видеть его файлы по умолчанию, и вы разархивировали исходные тексты без опции p (сохранение прав доступа), то эти пользователи не смогут пользоваться компилятором C. Хотя вы могли бы воспользоваться командой chmod для исправления этого, но вероятно более легко заново разархивировать заголовочные файлы. Вы можете сделать это также, как и со всеми исходными текстами, но только с дополнительным аргументом:

blah# tar zxvpf linux.x.y.z.tar.gz linux/include

Замечание: ``make config'' заново создаст ссылки в /usr/src/linux, если они отсутствуют.



Не видно чтобы новая версия ядра грузилась


Вы не запустили LILO, или он не настроен правильно. Одна вещь которая случилось однажды со мной это была проблема в файле конфигурации; там говорилось `boot=/dev/hda1' вместо `boot=/dev/hda' (Это может быть раздражающим в начале, но когда вы сделаете рабочий файл конфигурации, то вам не нужно будет его больше изменять).



Но я не знаю какие файловые системы мне нужны!


Хорошо, наберите команду `mount'. Ее вывод будет выглядеть примерно так:

blah# mount /dev/hda1 on / type ext2 (defaults) /dev/hda3 on /usr type ext2 (defaults) none on /proc type proc (defaults) /dev/fd0 on /mnt type msdos (defaults)

Посмотрите на каждую строку; слово идущее за словом `type (тип)' является типом файловой системы. В моем примере мои файловые системы / и /usr являются файловыми системами типа second extended, я использую /proc, и есть гибкий диск смонтированный используя файловую систему msdos.

Вы можете попробовать выполнить `cat /proc/filesystems', если у вас в настоящее время разрешено использование /proc; эта команда перечислит файловые системы, поддержку которых имеет ваше ядро.

Настройка редко используемых, не критических файловых систем может вызвать раздувание вашего ядра; смотрите раздел о модулях чтобы избежать этого и раздел ``Ловушки'' о том, почему раздувшееся ядро является нежелательным.



``Not a compressed kernel Image file (Не является файлом сжатогообраза ядра)''


Не используйте файл vmlinux, созданный в /usr/src/linux как образ загрузки; Правильным образом загрузки является [..]/arch/i386/boot/zImage.



Обновления ядра


Russell Nelson (nelson@crynwr.com) подводит итоги сделанных изменений в новых выпусках ядер. Они являются короткими и вы можете захотеть взглянуть на них до начала обновления ядра. Эти данные доступны через анонимный ftp с ftp.emlist.com в директории pub/kchanges или со следующего URL

http://www.crynwr.com/kchanges



Общая настройка


Normal floppy disk support (Поддержка обычных гибких дисков) - что и написано. Вы можете прочитать файл drivers/block/README.fd; это особенно важно для пользователей IBM Thinkpad.

XT harddisk support (поддержка жестких дисков XT) - если вы хотите использовать 8-битные контроллеры XT, пылящиеся в углу.

PCI bios support поддержка PCI bios) - если у вас имеются PCI устройства, то вы можете попробовать использовать эту опцию; будьте осторожны, поскольку некоторые старые материнские платы с поддержкой PCI могут не работать с этой опцией. Более детальную информацию о использовании шины PCI под linux вы можете найти в PCI-HOWTO.

Kernel support for ELF binaries (поддержка ядром исполняемых файлов в формате ELF) - ELF это попытка позволить исполняемым файлам охватывать разные архитектуры и операционные системы; linux по видимому идет в этом направлении, так что вы вероятно захотите использовать эту опцию.

Set version information on all symbols for modules (установка информации о версии на все символы для модулей) - в прошлом, модули ядра перекомпилировались с каждым новым ядром. Если вы ответите y, то станет возможным использование модулей скомпилированных для других версий ядра. Прочитайте файл README.modules для более подробной информации.



Очистка и создание зависимостей


Когда настроечный скрипт закончит свою работу, он также скажет вам, чтобы вы выполнили `make dep' и (вероятно) `clean'. Так что выполните `make dep'. Он обеспечит, чтобы все зависимости, такие как файлы заголовков, находятся на месте. Эта процедура не длиться долго, если у вас не медленный компьютер. Для более старых версий ядер, при окончании вы должны выполнить `make clean'. Эта процедура удаляет все объектные файлы и некоторые другие вещи оставшиеся от предыдущей компиляции. В любом случае, не забывайте выполнить этот шаг до начала перекомпиляции ядра.



Одно слово о стиле


Текст, который выглядит вот так-- это либо то, что появится на вашем экране, либо имя файла, либо то, что может быть прямо набрано, например команда, или опции команды (если вы читаете это как простой текст, то это различие не видно). Команды и другой ввод часто взяты в кавычки (с помощью ` '), что вызывает классическую проблему пунктуации: Если такой пункт появляется в конце предложения в кавычках, то люди часто набирают `.' вместе с командой, потому-что Американский стиль цитирования заставляет помещать точку внутри кавычек. Даже если здравый смысл (и к сожалению, это предполагает, что люди со ``здравым смыслом)'' будут использовать американский стиль цитирования) говорит кому-то, что надо отбросить сначала знаки пунктуации, много людей просто этого не помнят, так что я буду в таких случаях помещать знаки пунктуации вне кавычек. Другими словами, когда надо показать, что вы должны набрать ``make config'', то я буду писать `make config', а не `make config.'



Ограничить память до менее 16MB


Существуют работающие с ошибками контролеры DMA на машинах с процессором 386, которые имеют проблемы с адресацией больше 16 Мб ОЗУ; вы можете ответить `y' в случае (редком) если у вас такой контроллер.



Перенаправление вывода команд make или patch


Если вы хотите протоколировать действия команд `make' или `patch', то вы можете перенаправить вывод в файл. Сначала определите какой интерпретатор команд вы используете выполнив команду: `grep root /etc/passwd' и ищите строку, которая выглядит примерно так `/bin/csh'.

Если вы используете sh или bash, то команда

(command) 2>&1 | tee (output file)

поместит копию вывода команды (command) в файл `(output file)'.

Для csh или tcsh, используйте следующую последовательность

(command) |& tee (output file)

Для rc (Замечание: вы скорее всего не используете rc) это выглядит так:

(command) >[2=1] | tee (output file)



Почему я должен обновлять мое ядро?


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



Поддержка обычных (MFM/RLL) дисков и дисков/cdrom IDE


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

Затем у вас спросят о драйверах ``old disk-only (только старых дисков)'' и ``new IDE (новых IDE)''. Вы захотите выбрать один из них; основное отличие в том, что старые диски поддерживают только два диска на одном интерфейсе, а новые поддерживают вторичный (secondary) интерфейс и накопители IDE/ATAPI cdrom. Новый драйвер на 4k больше старого и также предположительно ``улучшен'', убирая некоторое количество ошибок, он может улучшить производительность вашего диска, особенно если у вас новое оборудование (типа EIDE).



Поддержка SCSI


Если у вас есть устройства SCSI, то ответьте `y'. У вас запросят дополнительную информацию, такую как поддержку CD-ROM, дисков, и какой тип адаптера SCSI у вас имеется. Смотрите SCSI-HOWTO для дополнительной информации.



Поддержка сетевых устройств


Если у вас есть сетевая карта, или вы хотите использовать SLIP, PPP, или адаптер параллельного порта для подключения к Internet, то ответьте `y'. Скрипт настройки запросит у вас тип карты и какие протоколы вы хотите использовать.



Поддержка сети


В принципе вы должны ответить `y', если ваша машина подключена к сети, такой как internet, или вы хотите использовать SLIP, PPP, term и т.п. для dial up доступа к internet. Однако много пакетов (таких как оконная система X) требует поддержку сети, даже если вы не подключены ни к какой сети, вы должны сказать `y'. Позже у вас спросят, хотите ли вы поддержку TCP/IP; далее скажите `y', если вы абсолютно уверены в своем выборе.



Получение исходных текстов


Вы можете получить исходные тексты с помощью анонимного ftp с ftp.funet.fi в директории /pub/Linux/PEOPLE/Linus, с его зеркала, или с другого сервера. Они обычно обозначены как linux-x.y.z.tar.gz, где x.y.z номер версии. Более новые (лучшие?) версии и заплатки (patches) обычно находятся в поддиректориях, таких как `v1.1' и `v1.2'. Самый большой номер имеет последняя версия и обычно является ``тестовой версией'', это значит, что если вы нелегко плохо чувствуете себя с альфа или бета версиями, то вы должны использовать стабильную версию.

Я настоятельно рекомендую вам использовать сервера-зеркала вместо использования ftp.funet.fi. Здесь приведен короткий список серверов-зеркал и других серверов:

USA: sunsite.unc.edu:/pub/Linux/kernel USA: tsx-11.mit.edu:/pub/linux/sources/system UK: sunsite.doc.ic.ac.uk:/pub/unix/Linux/sunsite.unc-mirror/kernel Austria: ftp.univie.ac.at:/systems/linux/sunsite/kernel Germany: ftp.Germany.EU.net:/pub/os/Linux/Local.EUnet/Kernel/Linus Germany: sunsite.informatik.rwth-aachen.de:/pub/Linux/PEOPLE/Linus France: ftp.ibp.fr:/pub/linux/sources/system/patches Australia: sunsite.anu.edu.au:/pub/linux/kernel

В общем зеркало сервера sunsite.unc.edu является хорошим местом, где можно взять исходные тексты ядра. Файл /pub/Linux/MIRRORS

содержит список известных серверов-зеркал. Если у вас нет доступа к ftp, то список систем BBS, которые распространяют linux периодически посылается в группу comp.os.linux.announce; постарайтесь получить его.

Если вы ищете общую информацию о Linux и его дистрибутивах, то посмотрите на http://www.linux.org.



Проблемы с консолью после обновления до 1.3.x


Измените слово dumb на linux в записи для консоли в файле /etc/termcap. Вам также может понадобиться создать запись в terminfo.



Прочитайте это сначала! (Я это подразумеваю)


Некоторые из примеров в этом документе предполагают, что у вас есть GNU tar, find, и xargs. Эти программы довольно стандартны; это не должно вызвать проблем. Так же предполагается, что вы знаете структуру вашей файловой системы; если вы не знаете эьлгл, то вы должны сохранить копию вывода команды mount при обычных системных операциях (или содержимое файла /etc/fstab, если вы можете читать его). Эта информация является важной, и не изменяется до переразбивки вашего диска, добавления нового, перестановки вашей системы или чего-то подобного.

Последней ``стабильной (production)'' версией ядра во время написания этого документа была версия 2.0.30, это означает, что все ссылки и примеры относятся к этой версии. Даже хотя я пытался сделать этот документ как не зависящий от версии насколько это возможно, все равно ядра постоянно находятся в развитии, так что если вы получили новую версию, то она неизбежно будет иметь некоторые отличия. Вообще это не должно вызвать больших проблем, но может создать некоторые осложнения.

Существует две версии исходного кода ядра linux, ``стабильная (production)'' и ``разрабатываемая (development)''. Стабильные версии начались с 1.0.x и в настоящее время они идут с четными номерами; 1.0.x являются стабильными, 1.2.x являются стабильными, так же как и 2.0.x. Эти ядра считаются более стабильными и свободными от ошибок версиями во время их выпуска. Разрабатываемые ядра (1.1.x, 1.3.x, и т.п.) являются ядрами для тестирования, для людей желающих протестировать новые, возможно с ошибками, ядра. Я вас предупредил!



Работа над ядром (Kernel hacking)


Из Linus README:

действие опции настройки ``kernel hacking'' обычно проявляется в более большом или медленном ядре (или оба симптома), и может даже сделать ядро менее стабильным из-за настройки некоторых подпрограмм на попытку активно сломать плохой код, чтобы найти проблемы с ядром (kmalloc()). Таким образом вам скорее всего надо ответить `n' на этот вопрос для ``production'' ядер.



Распаковка исходных текстов


Войдите в систему как администратор или выполните команду su, и перейдите в директорию /usr/src.Если вы устанавливали исходные тексты ядра при установке linux (как делает большинство), то том у вас уже есть директория названная `linux', которая содержит полное дерево устаревших исходных текстов. Если у вас есть свободное дисковое пространство, то вы можете сохранить эту директорию. Хорошая идея-- определить какая версия ядра запущена и соответственно переименовать директорию. Команда `uname -r' выдает номер текущей версии ядра. Поэтому, если команда `uname -r' выдала `1.0.9', то вы должны переименовать (с помощью `mv') `linux' в `linux-1.0.9'. Если вы не чувствуете, что поступаете опрометчиво, то просто сотрите всю директорию. В любом случае убедитесь, что никакой директории `linux' в /usr/src до распаковки полного исходного кода ядра.

Теперь распакуйте в /usr/src исходные тексты, пользуясь командой `tar zxpvf linux-x.y.z.tar.gz' (если вы получили просто файл .tar без расширения .gz на конце, то работает команда `tar xpvf linux-x.y.z.tar'). Содержимое архива будет распаковано. После окончания процесса, будет существовать новая директория `linux' в /usr/src. Перейдите linux и посмотрите файл README. Там будет раздел с заголовком `INSTALLING the kernel (Установка ядра)'. Выполните соответствующие инструкции -- символические ссылки должны быть на своем месте, удалите старые .o

файлы, и т.п.



Сетевые опции


Сетевые опции хорошо описаны в NET-3-HOWTO (или NET-какой-то-номер-HOWTO).



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


В этом разделе вы выбираете драйвера для вашего принтера (параллельного принтера), шинной мыши, мыши для PS/2 (многие notebook используют протокол мыши PS/2 для своих встроенных трекболов), некоторые ленточные накопители и другие такие же ``символьные'' устройства. Ответьте `y' где необходимо.

Замечание: Selection это программа, которая позволяет вам использовать мышь вне системы X window для вырезания и вставки между виртуальными консолями. Она работает довольно хорошо, если у вас мышь для последовательного порта, потому-что она хорошо работает с X, но вам необходимо выполнить некоторые действия, для того чтобы работали другие типы мышей. Поддержка Selection одно время была опцией настройки, но сейчас она является стандартом.

Замечание 2: Сейчас Selection считается устаревшей. Имя новой программы ``gpm''. Она может делать более фантастические вещи, такие как трансляцию протокола мыши, работать с несколькими мышами, ..



Сколько места на диске мне надо?


Это зависит от конфигурации вашей системы. Первое, это сжатые исходные тексты ядра, примерно 6 мегабайт для версии 2.0.10. На многих машинах этот файл хранят даже после распаковки. В расжатом виде исходные тексты занимают до 24 мегабайт. Но это не конец-- вам нужно больше для компиляции ядра. Требуемый размер зависит от того, как вы настроили ваше ядро. Например, на одной машине у меня настроена работа сети, драйвер 3Com 3C509, и три файловые системы, это все занимает примерно 30 мегабайт дискового пространства. Добавив сжатые исходные тексты, вам понадобиться около 26 Мб для такой конфигурации. На другой системе, без поддержки драйвера сетевой карты (но все равно с поддержкой сети) и звуковой картой, все занимает больше пространства. Также, более новые ядра имеют более большое дерево исходных текстов, так что в общем, если если у вас довольно много устройств, то убедитесь, что у вас достаточно большой жесткий диск (при сегодняшних ценах, я не могу помочь вам, но я рекомендую взять другой диск как ответ на вашу проблему отсутствия свободного пространства).



System V IPC


Одно из лучших определений IPC (Interprocess Communication, Межпроцессного сообщения) данов в глоссарии книги по Perl. Не удивительно, что некоторые программисты на Perl используют этот механизм чтобы позволить процессу общаться с другими процессами, так же как и другие пакеты (самый заметный из них это DOOM), так что ответ n не является хорошей идеей, пока вы не будете точно уверены в том, что вы делаете.



Тип процессора (386, 486, Pentium, PPro)


(в старых ядрах: используйте флаг -m486 для оптимизации для процессора 486)

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



Условная установка ядра


Вместо использования гибкого диска существует другой метод тестирования нового ядра без удаления старого. В отличии от многих других Unix-систем, LILO имеет возможность загружать ядро с любого места на диске (если у вас большой диск (500 MB или больше), то пожалуйста прочитайте документацию на LILO о том как это может вызвать проблемы). Итак, если вы добавите что-то похожее на следующие строки

image = /usr/src/linux/arch/i386/boot/zImage label = new_kernel

в конец вашего файла настроек LILO, то вы сможете выбрать запуск свежескомпилированного ядра без удаления старого /vmlinuz (конечно после предварительного запуска lilo). Самый легкий способ заставить LILO загрузить новое ядро - это нажать клавишу shift во время загрузки (когда на экран выводится сообщение LILO), это заставит программу загрузки выдать приглашение. В этом месте вы можете ввести название `new_kernel' для загрузки нового ядра.

Если вы хотите хранить несколько исходных тексты разных ядер на своем компьютере одновременно (это займет достаточно много места на диске, будьте осторожны) то наиболее удобный способ называть их /usr/src/linux-x.y.z, где дерево исходных x.y.z это номер версии ядра. Вы можете ``выбирать'' дерево исходных текстов с помощью символической ссылки. например, команда `ln -sf linux-1.2.2 /usr/src/linux' должна сделать текущим дерево исходных текстов ядра версии 1.2.2. До создания символической ссылки убедитесь, что последний аргумент команды ln не является настоящей директорией (старая символическая ссылка это нормально); результат будут не такой какой вы ожидали.



Установка ядра


После того как вы установили, что новое ядро работает так как вам надо, наступает время его установки. Большинство людей для этого использует LILO (Загрузчик Linux). Команда `make zlilo' установит новое ядро, запустит для него LILO, и все будет готово к перезагрузке, НО ТОЛЬКО если lilo настроено правильно в вашей системе: ядро располагается в файле /vmlinuz, lilo находится в директории /sbin, и ваш конфигурационный файл lilo (/etc/lilo.conf) отражает эти условия.

Иначе вам придется использовать LILO непосредственно. Это довольно легкий в установке и в работе пакет, но он имеет тенденцию вводить в замешательство людей своим конфигурационным файлом. Посмотрите конфигурационный файл (либо /etc/lilo/config для старых версий либо /etc/lilo.conf для более новых версий), и посмотрите текущие настройки. Конфигурационный файл выглядит примерно так:

image = /vmlinuz label = Linux root = /dev/hda1 ...

`image =' указывает на установленное в настоящее время ядро. Большинство людей используют /vmlinuz. `label' используется для определения какое ядро или операционная система будет загружаться, и `root' это корневой раздел отдельной операционной системы. Сделайте резервную копию вашего ядра и скопируйте только что сделанное ядро на его место (вы должны выполнить команду `cp zImage /vmlinuz' если вы используете `/vmlinuz'). Затем перезапустите lilo -- на более новых системах вы можете просто запустить `lilo', но на старых вы должны выполнить /etc/lilo/install или даже /etc/lilo/lilo -C /etc/lilo/config.

Если вы хотите знать больше о настройке LILO или у вас его нет, то возьмите самую новую его версию с вашего любимого сервера ftp и следуйте инструкциям.

Для загрузки одного из ваших старых ядер на жестком диске (еще один способ обезопасить себя при использовании нового ядра), скопируйте нижеприведенные строки (и включите) `image = xxx' в файл конфигурации LILO в конце файла, и измените `image = xxx' на `image = yyy', где `yyy' это полный путь вашего старого ядра. Затем измените `label = zzz' на `label = linux-backup' и перезапустите lilo. Вам может быть будет необходимо поместить строку в конфигурационный файл, которая выглядит так `delay=x', где x это количество десятых долей секунды, на которое LILO задержится до загрузки, так что вы можете прервать его выполнение (например при помощи клавиши shift), и набрать метку имя сохраненного образа загрузки (в случае, если произойдут разные неприятные вещи).



Установка утилит для работы с модулями


Утилиты для работы с модулями доступны от туда же откуда вы получили свое ядро, они называются modules-x.y.z.tar.gz; выберите самый большой номер x.y.z, который равен или ниже чем номер вашего текущего ядра. Распакуйте их с помощью команды `tar zxvf modules-x.y.z.tar.gz', перейдите в директорию, которую эта команда создала (modules-x.y.z), посмотрите файл README, и выполните приведенные в нем инструкции по установке (которые обычно являются очень простыми, такими как make install). Вы должны теперь получить программы insmod, rmmod, ksyms, lsmod, genksyms, modprobe, и depmod в директории /sbin. Если вы хотите, протестируйте полученные программы с помощью демонстрационного драйвера ``hw'' в insmod; для более детальной информации смотрите файл INSTALL, который находится в директории с исходными текстами.

Команда insmod вставляет модуль в работающее ядро. Модули обычно имеют расширение .o; пример драйвера, упомянутый выше называется drv_hello.o, так для того чтобы вставить его, вы должны выполнить `insmod drv_hello.o'. Для того чтобы увидеть список загруженных модулей используйте команду lsmod. Ее вывод выглядит примерно так:

blah# lsmod Module: #pages: Used by: drv_hello 1

`drv_hello' это имя модуля, он использует 1 страницу оперативной памяти (4k), и ни какие модули ядра не зависят от него на текущий момент. Для удаления этого модуля используйте команду `rmmod drv_hello'. Заметим, что rmmod требует имя модуля, а не имя файла; вы можете получить его из списка выдаваемого lsmod. Назначение других утилит для работы с модулями описано в их справочных страницах.



Util-linux


Rik Faith (faith@cs.unc.edu) собрал вместе большой набор утилит для linux, который по странному совпадению называется util-linux. В настоящее время этот набор сопровождается Nicolai Langfeldt (util-linux@math.uio.no). Он доступен по анонимному ftp с sunsite.unc.edu в директории /pub/Linux/system/misc, он содержит такие программы как setterm, rdev, и ctrlaltdel, которые имеют отношение к ядру. Как сказал Rik, не устанавливайте их без раздумий; вам не нужно устанавливать весь пакет, и у вас могут возникнуть серьезные проблемы, если вы сделаете это.



Увеличение предельных значений


Следующие несколько показательных команд могут быть полезны для тех кто не знает как увеличить некоторые программные предельные значения The following few example commands may be helpful to those wondering how to increase certain soft limits imposed by the kernel:

echo 4096 > /proc/sys/kernel/file-max echo 12288 > /proc/sys/kernel/inode-max echo 300 400 500 > /proc/sys/vm/freepages



Время компиляции


После выполнения dep и clean, вы можете выполнять `make zImage' или `make zdisk' (эта часть процесса занимает длительное время). `make zImage' скомпилирует ядро и оставит в директории arch/i386/boot файл названный `zImage' (среди других вещей). Это новое сжатое ядро. `make zdisk' делает тоже самое, но также помещает новый файл zImage на гибкий диск, который вы должны вставить в устройство ``A:''. `zdisk' является довольно удобным для тестирования новых ядер; если оно не загружается (или просто работает неправильно), то просто вытащите дискету из дисковода и загрузитесь со старым ядром. Это может быть также удобным в том случае, если вы случайно удалили ядро (или сделали что-нибудь подобное по своему разрушительному действию). Вы также можете использовать его для установки новых систем, в том случае когда вы просто делаете дамп с одного диска на другой(``это все и больше! Теперь, сколько вы могли бы купить?'').

Все, даже сравнительно недавние ядра являются сжатыми, поэтому они имеют букву `z' в начале имени. Сжатое ядро автоматически разжимается при выполнении.



Должны ли вы читать этот


Должны ли вы читать этот документ? Да, если у вас один из следующих симптомов:
``Вах! Этот пакет wizzo-46.5.6 говорит, что ему нужно ядро 1.8.193, а я все еще пользуюсь версией 1.0.9!''
В одном из более новых ядер существует драйвер необходимого вам устройства.
Вы не знаете как компилировать ядро
``В действительности ли в файле README находится все описание?''
Вы старались, вы пытались, а это не работает
Вам нужно что-то дать людям, которые просят вас установить ядра для них

Вы забыли запустить LILO, или система просто не грузится


Оххх! Лучшая вещь, которую вы можете сделать в этом случае это загрузиться с дискеты подготовить другой загрузочный диск (такой какой должна сделать команда `make zdisk'). Вам необходимо знать где находится ваша корневая файловая система (/) и какой тип она имеет (например second extended, minix). В нижеприведенном примере, вам также необходимо знать на какой файловой системе находится дерево исходных текстов /usr/src/linux, ее тип и где она обычно монтируется.

В следующем примере, / находится на /dev/hda1, а файловая система, которая содержит /usr/src/linux находится на /dev/hda3, обычно смонтированной как /usr. Обе относятся к типу second extended файловых систем. Рабочее ядро находится в директории /usr/src/linux/arch/i386/boot и называется zImage.

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

С начала загрузимся с комбинации загрузочного/корневого дисков или спасательного (rescue) диска, и смонтируем файловую систему, которая содержит работающее ядро:

mkdir /mnt mount -t ext2 /dev/hda3 /mnt

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

/mnt + /usr/src/linux/arch/i386/boot - /usr = /mnt/src/linux/arch/i386/boot

Поместите отформатированную дискету в привод ``A:'' (только не загрузочную дискету и не дискету с корневой файловой системой!), и перебросьте ядро на дискету и настройте его на вашу корневую файловую систему:

cd /mnt/src/linux/arch/i386/boot dd if=zImage of=/dev/fd0 rdev /dev/fd0 /dev/hda1

перейдите в / и отмонтируйте обычную файловую систему /usr:

cd / umount /mnt

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

Как было упомянуто выше, существует другая общая альтернатива. Если у вас к счастью имеется рабочее ядро находящееся на разделе / (например /vmlinuz), то вы можете использовать его для загрузочной дискеты. Предполагая все вышеприведенные условия, и что наше ядро находится в /vmlinuz, то просто сделайте изменения в вышеприведенном примере: измените /dev/hda3 на /dev/hda1 (корневая файловая система), /mnt/src/linux на /mnt, и if=zImage на if=vmlinuz. Замечание о том как получить доступ к /mnt/src/linux может быть проигнорировано.

Используя LILO с большими дисками (больше чем 1024 цилиндра) может вызвать проблемы. Смотрите LILO mini-HOWTO или документацию для помощи в этом случае.



Выводятся сообщения о неопределенных символах и не компилируется


У вас вероятнее всего ELF компилятор (gcc 2.6.3 и выше) и исходные тексты ядра 1.2.x (или более раннего). Обычное исправление заключается в добавлении этих трех строк в начало файла arch/i386/Makefile:

AS=/usr/i486-linuxaout/bin/as LD=/usr/i486-linuxaout/bin/ld -m i386linux CC=gcc -b i486-linuxaout -D__KERNEL__ -I$(TOPDIR)/include

Это заставит выполнять компиляцию ядра 1.2.x с библиотеками a.out.



Замечание для обновления до версии 2.0.x


Ядра версии 2.0.x внесли довольно много изменений в установке ядра. Файл Documentation/Changes в дереве исходных текстов ядра 2.0.x содержит информацию, которую вы должны знать когда обновляете до версии 2.0.x. вам скорее всего надо обновить несколько ключевых пакетов, таких как gcc, libc, и SysVInit, и возможно изменить некоторые системные файлы, так что ожидайте этого. Хотя не паникуйте.



Звуковые карты


если вы чувствуете огромное желание слышать рявканье biff, то ответьте `y', и далее другая программа настройки будет скомпилирована и будет задавать вам вопросы о вашей звуковой карте. (Примечание о настройке звуковой карты: когда программа спросит у вас устанавливать ли полную версию драйвера, то ответьте `n' и сохраните некоторое количество памяти в ядре выбором только необходимых возможностей драйвера). Я сильно рекомендую вам посмотреть в Sound-HOWTO для более детальной информации о поддержке звука, если у вас есть звуковая карта.