Предыдущий Содержание Следующий

Chapter 4
Настройка

4.1  Настройка системы

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

4.1.1  Обзор системы

Очень важно понять, как организован Linux перед тем, как погружаться в различные аспекты по его настройке. Система Linux кардинальным образом отличается от систем DOS или Windows (а так же Macintosh OS). Этот раздел ознакомит вас с расположением основных элементов системы.

Организация файловой системы

Первое принципиальное отличие Slackware Linux от DOS или Windows - это организация файловой системы. Для начинающих пользователей: в Linux различным разделам жёсткого диска не сопоставляются буквы. В этой системе есть только один основной каталог. Вы можете провести аналогию с диском C: системы DOS. Каждый раздел жёсткого диска смонтирован (подключён)12 к одному из каталогов основной директории. Что-то вроде всегда расширяемого диска.

Мы называем эту основную директорию корневой директорией, или корневым каталогом, а ссылаемся на неё при помощи одинарного слэша (/). Эта концепция может показаться вам странной, но на самом деле она значительно упрощает жизнь в том случае, если вам необходимо увеличить размер используемого дискового пространства. Например, у вас закончилось место на том диске, который содержит каталог /home. На самом деле, большинство пользователей при установке Slackware создают один большой корневой диск, так что это лишь пример. Так как разделы могут быть подключены к любому каталогу, вы можете просто пойти в магазин, купить ещё один жёсткий диск и подключить его к каталогу /home13. И вот вы ''привили'' немного свободного пространства к вашей системе. И всё без особых усилий по пере-настройке и переносу различных программ.

Ниже вы найдёте описание основных каталогов верхнего уровня в системе Slackware.

/bin Здесь хранятся основные программы пользователей. Имеются в виду самые основные команды, необходимые пользователю для работы в системе. Например, такие как оболочки и команды файловой системы (ls, cp и т.д.). Каталог /bin обычно не претерпевает изменений после установки. Если претерпевает, то обычно лишь при обновления пакетов программ предоставленных нами.
/boot Файлы, используемые Загрузчиком Linux-a (LILO). Эта директория так же практически не получает изменений после установки.
/cdrom Помните, что все диски подключаются к определённому каталогу? Так вот, каталог /cdrom предоставлен вам для использования в качестве точки монтирования вашего привода компакт дисков.
/dev В Linux всё рассматривается, как файл. Даже различные устройства, такие как последовательные порты, жёсткие диски и сканеры. Для получения доступа к определённому устройству, необходимо чтобы существовал специальный файл, называемый device node14 . Все эти ноды находятся в каталоге /dev. Аналогично устроены большинство Unix - подобных операционных систем.
/etc Этот каталог содержит файлы настроек. Всё, от конфигурационных файлов системы X Window, базы данных пользователей и до стартовых сценариев. Администратор системы детально ознакомится с этим каталогом, со временем, конечно.
/home Linux является многопользовательской системой. Каждому пользователю присваивается эккаунт и уникальная директория для персональных файлов. Эта директория называется ''home'' (домашним) каталогом пользователя. Каталог /home предоставлен для расположения домашних директорий пользователей.
/lib Системные библиотеки, необходимые для основных программ находятся здесь. Библиотека C, динамический загрузчик, библиотека ncurses и модули ядра - это основные обитатели этого каталога.
/lost+found При загрузке системы происходит проверка файловых систем на наличие ошибок. Если они обнаружены, то запускается программа fsck и пытается исправить их. Восстановленные части файловой системы сохраняются программой в этом каталоге.
/mnt Этот каталог предоставляется как временная точка монтирования для жёстких дисков, или отключаемых устройств.
/opt Дополнительные пакеты программ. Идея в том, что все пакеты программ, устанавливаются в этот каталог, например /opt/<программный пакет> и в последствии если этот пакет вам более не нужен, то достаточно всего лишь удалить соответствующий каталог. В Slackware дистрибутиве некоторые программы поставляются в /opt каталоге (например KDE в /opt/kde), но вы вольны добавить всё, что угодно в /opt.
/proc Это в своём роде уникальная директория. На самом деле, она не является частью файловой системы, это виртуальная файловая система, которая предоставляет доступ к информации ядра. Различная информация, которую ядро хочет сообщить вам, подаётся вам через ''файлы'' в каталоге /proc. Вы так же можете сообщить ядру через некоторые из этих ''файлов'' попробуйте выполнить cat /proc/cpuinfo.
/root Администратор системы известен системе, как ''root''. Его домашний каталог - /root, вместо /home/root. Причина этого в том, что каталог /home может находится в разделе, отличном от / и если по какой-то причине /home не может быть подключён, то пользователь root вынужден будет войти в систему, чтобы решить проблему. И если его домашний каталог на другом диске, это усложнит вход в систему.
/sbin Основные программы, выполняемые пользователем root а так же программы, выполняемые процессом загрузки хранятся здесь. Обычные пользователи не будут пользоваться этими программами.
/tmp Временное хранилище данных. Все пользователи имеют права чтения и записи в этом каталоге.
/usr Это большой каталог в Linux системе. Практически всё остальное расположено здесь. Программы, документация, исходный код ядра и X Window система. Именно в этот каталог, скорее всего, вы будете устанавливать программы.
/var Системные лог файлы, кэш файлы и файлы-замки программ хранятся здесь.Это каталог для часто меняющихся данных.

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

Поиск Файлов

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

which  

Первый из них - это команда which(1). which обычно используется для быстрого поиска программ. Он просто ищет в каталогах, указанных в вашей PATH переменной и выдаёт первое найденное соответствие, а так же путь к этому файлу. Например:

$ which bash
/bin/bash

Таким образом, bash находится в /bin каталоге. Это очень ограниченная команда для поиска, так как она ищет только в вашем PATH.

whereis  

Команда whereis(1) работает аналогично программе which, но в дополнение к последней, так же ищет man страницы и исходники программ. Результат выполнения whereis для bash будет следующий:

$ whereis bash
bash: /bin/bash /usr/bin/bash /usr/man/man1/bash.1.gz

Эта команда не только говорит, где находится программа, но так же указывает, где находится её онлайн документация. Но она всё ещё весьма ограничена. Что если вам необходимо найти определённый конфигурационный файл? which или whereis тут вам не помогут.

find  

Команда find(1) может быть использована для поиска всего, чего угодно. Я хочу задать поиск файла xinitrc во всей системе.

$ find / -name xinitrc
/var/X11R6/lib/xinit/xinitrc

find потребует много времени для поиска, так как эта команда пролистает всё дерево каталогов для поиска. И если вы выполните команду, как обычный пользователь, то на экран, вероятно, неоднократно будут выведены сообщения об ошибке доступа к некоторым из каталогов (к тем, которые может просматривать только root). Но find нашла наш файл. Уже хорошо. Если бы только она работала чуточку быстрее...

locate  

Команда locate(1) производит поиск по всей файловой системе, в точности как и find, но она просматривает свою базу данных вместо того, чтобы пролистать все каталоги. База данных настроена так, что она автоматически обновляется в 4:40 утра. Вы так же можете вручную выполнить updatedb(1), для обновления этой базы данных (перед запуском её вручную вам следует выполнить su nobody). Вот пример использования locate:

$ locate xinitrc # нам не надо быть root
/var/X11R6/lib/xinit/xinitrc
/var/X11R6/lib/xinit/xinitrc.fvwm2
/var/X11R6/lib/xinit/xinitrc.openwin
/var/X11R6/lib/xinit/xinitrc.twm

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

Каталог /etc/rc.d

Файлы, выполняемые системой при её инициализации, хранятся в каталоге /etc/rc.d. Slackware использует расположение сценариев инициализации в стиле BSD. Каждое задание или runlevel (уровень загрузки) имеет свой rc файл. Таким образом, получается организованная структура, которой легко пользоваться.

Есть несколько категорий сценариев инициализации. Начальная загрузка системы, уровни загрузки, инициализация сети и System V совместимые. По традиции, мы отнесём всё остальное к категории ''других''.

Начальная загрузка системы

Первая программа, запускаемая в Slackware после ядра Linux -это init(8). Эта программа читает /etc/inittab(5) файл, чтобы узнать, как загружать систему. Запускает /etc/rc.d/rc.S сценарий для подготовки перед переключением на выбранный runlevel. rc.S файл активизирует виртуальную память, подключает файловые системы, очищает определённые log каталоги инициализирует Plug and Play устройства, загружает модули ядра, настраивает PCMCIA устройства, активизирует последовательные порты и запускает System V загрузочные сценарии (если таковые присутствуют). rc.S выполняет много задач самостоятельно, но так же до завершения своей работы, он вызовет ниже перечисленные сценарии из каталога /etc/rc.d:

rc.S Это и есть инициализационный сценарий.
rc.modules Загружает модули ядра. Такие, как поддержка сетевой карты, PPP и другие. Если сценарий находит rc.netdevice, то он выполнит и его.
rc.pcmcia Проверяет наличие и настраивает все PCMCIA устройства, присутствующие в вашей системе. Это наиболее полезно для пользователей laptop компьютеров, у которых, наверняка есть PCMCIA модем или сетевая карта.
rc.serial Настраивает последовательные порты, запуская соответствующие setserial команды.
rc.sysvinit Ищет System V инициализационные сценарии, соответствующие выбранному runlevel и выполняет их. Это более подробно обсуждается ниже.

Инициализационные сценарии runlevel

После того, как инициализация системы завершена, init переходит к инициализации runlevel. Runlevel описывает, в каком режиме ваш компьютер будет работать. Звучит загадочно? Ну, runlevel сообщает init-у, будете ли вы в многопользовательском (multiuser logins) режиме, или только в одно-пользовательском (single user), хотите ли вы сетевые сервисы и будете ли вы использовать X Window или agetty(8), для управления входом в систему (logins). Файлы, приведённые ниже определяют разные runlevels в Slackware Linux.

rc.0 Выключает систему (runlevel 0). По умолчанию, это символическая ссылка на rc.6.
rc.4 Многопользовательский запуск (runlevel 4), но в X11 с KDM, GDM или XDM в качестве менеджера входа в систему.
rc.6 Перезагружает систему (runlevel 6).
rc.K Запуск в одно-пользовательском режиме (runlevel 1).
rc.M Многопользовательский режим (runleveld 2 и 3), но со стандартным текстовым входом (login). Это runlevel, используемый в Slackware по умолчанию.

Инициализация сети

Уровни загрузки 2, 3 и 4 запустят сетевые сервисы. Следующие файлы ответственны за инициализацию сети:

rc.inet1 Этот файл, созданный программой netconfig, ответственен за настройку сетевого интерфейса.
rc.inet2 Выполняется после rc.inet1 и запускает основные сетевые сервисы.
rc.atalk Запускает AppleTalk сервисы.
rc.httpd Запускает вэб сервер Apache.
rc.samba Запускает Samba сервис.
rc.news Запускает сервер новостей.

Совместимость с System V

Совместимость с System V была предоставлена в Slackware 7.0. Много других Linux дистрибутивов используют этот форматом вместо BSD формата. В этом стиле каждому уровню загрузки предоставляется каталог для сценариев, а в BSD-стиле каждому уровню загрузки соответствует только один сценарий.

rc.sysinit сценарий произведёт поиск всех System V init сценариев в /etc/rc.d каталоге и выполнит их, если уровень загрузки соответствующий. Это полезно, если вы пользуетесь коммерческим программным обеспечением, которое устанавливает System V init сценарии, в то же время, вы можете пользоваться и BSD сценариями.

Другие файлы

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

rc.cdrom Если активизирован, то он проверит, есть ли компакт диск в приводе и если есть, то подключит его к /cdrom.
rc.gpm Запускает сервис основной поддержки мыши (general purpose mouse). Это позволит вам копировать и вставлять текст в консоли.
rc.ibcs2 Запускает поддержку Intel Binary Compatibility. Это необходимо только в том случае, если вы планируете выполнять программы, откомпилированные на SCO Unix или на других коммерческих Intel Unix разновидностях. В этом нет необходимости для запуска Linux программ.
rc.font Загружает пользовательский экранный шрифт для режима командной строки.
rc.local Содержит всю специфическую загрузочную информацию для вашей конкретной системы. В свеже-установленном дистрибутиве этот файл пуст. Он зарезервирован для использования администратором системы. Этот сценарий выполняется самым последним при загрузке.

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

4.1.2  Выбор ядра

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

Slackware предоставляет около 60-ти прекомпилированных ядер. Так что перед вами открывается широкий выбор. Каждое из ядер включает в себя набор стандартных драйверов, плюс дополнительные специфические драйвера. Вы можете использовать одно из прекомпилированных ядер, или вы можете самоcтоятельно откомпилировать ядро для вашей системы. В любом случае, вам следует убедиться в том, что используемое вами ядро содержит поддержку аппаратных устройств, присутствующих в системе.

Каталог /kernels на Slackware CD-ROM

Прекомпилированные Slackware ядра доступны в каталоге /kernels на Slackware CD-ROM, а так же на FTP сайте в основном каталоге Slackware. С появлением новых версий дистрибутива, обновляются и ядра, так что документация в каталоге с ядрами - всегда наиболее полный источник информации по ним. Каталог /kernels содержит под-каталог для каждого из ядер. Имена под-каталогов совпадают с именами ядер. В каждом под-каталоге вы найдёте следующие фалы:

Файл Назначение
System.map Системный map файл для этого ядра
bzImage (или zImage) Образ ядра
config Конфигурационный файл исходника
для этого ядра

Чтобы установить ядро, скопируйте System.map и config в каталог /boot вашей системы, а образ ядра скопируйте в файл /vmlinuz. Запустите /sbin/lilo(8), чтобы установить LILO для нового ядра, а затем пере загрузите систему. Это всё что вам необходимо проделать для установки одного из прекомпилированных ядер в вашу систему.

Ядра, заканчивающиеся на ''.i'' - это IDE ядра. Т.е. они не содержат SCSI поддержки в самом ядре. Ядра, заканчивающиеся с ''.s'' - это SCSI ядра. Они содержат поддержку IDE устройств точно так же, как и ''.i'' ядра, плюс поддержку SCSI.

Компилирование ядра из исходников

Новые пользователи часто спрашивают: ''Следует ли мне компилировать ядро для моей системы?''. Ответ, определённо: может быть. Большинству пользователей подойдёт одно из прекомпилированных ядер, с подгружаемыми модулями для устройств, не поддерживаемых самим ядром. Вы захотите откомпилировать ядро в случае, если вы обновляете его версию на более новое, которое мы ещё не предоставили в Slackware, или если вы наложили патч на исходник вашего ядра.

Сборка своего собственного ядра не такой уж сложный процесс. Первым делом необходимо убедиться, что в вашей системе установлен исходный текст ядра. Убедитесь, что вы установили пакеты из раздела K во время установки. Вам так же понадобятся пакеты из раздела D, в частности компилятор C, GNU make и GNU binutils. В общем неплохо бы, чтобы весь раздел D был установлен, если вы собираетесь заниматься разработкой чего либо. Теперь мы готовы к сборке ядра:

$ su -
Password:
# cd /usr/src/linux

Первым делом вернём исходный текст ядра к его первоначальному состоянию. Для этого выполним следующее:

# make mrproper

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

# make config     (текстовая вопрос-ответ версия)
#make menuconfig (menu, текстовая версия)
#make xconfig    (X-ориентированная версия, вначале убедитесь,
что вы в X)


Figure

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

# make dep
# make clean

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

# make zImage   (Вначале попробуйте так)
# make bzImage   (Если предыдущая команда не
сработала, попробуйте эту)

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

# make modules
15

Теперь мы можем установить свеже-скомпилированное ядро и модули. Чтобы установить ядро в Slackware системе, необходимо воспользоваться следующими командами:

# mv /vmlinuz /vmlinuz.old
# cat arch/i386/boot/zImage > /vmlinuz
# mv /boot/System.map /boot/System.map.old
# cp System.map /boot/System.map

Замените zImage на bzImage, если вам пришлось собрать большее ядро. Вероятно, вы захотите отредактировать /etc/lilo.conf файл и добавить соответствующий раздел для вашего старого ядра, на тот случай, если новое ядро не работает. После этого выполните /sbin/lilo, чтобы установить новый загрузочный блок. Теперь вы можете пере-загрузиться с новым ядром.

Использование модулей ядра

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

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

Модули хранятся в каталоге /lib/modules/<kernel version> вашей системы. Они могут быть загружены во время загрузки компьютера из rc.modules файла. В этом файле есть очень много комментариев и примеров для типичных устройств. Для просмотра загруженных модулей воспользуйтесь командой lsmod(1):

# lsmod
Module Size Used by
parport_pc 7220 0
parport 7844 0 [parport_pc]

Как видно из примера, у меня загружен только модуль параллельного порта. Для выгрузки модуля используйте команду rmmod(1). Модули могут быть загружены командами modprobe(1) или insmod(1). modprobe обычно безопаснее, так как автоматически загрузит модули, необходимые для модуля, который вы пытаетесь загрузить.

Большинство пользователей никогда не загружают или выгружают модули вручную. Они пользуются загрузчиком ядра для менеджмента модулей. Всё что вам надо сделать, это раз-комментировать строчку /sbin/kerneld(8) в /etc/rc.d/rc.modules и автозагрузчик запустится. Он позаботится о загрузке и выгрузке модулей по мере надобности. Автозагрузчик определяет, что нужно загрузить модуль по обращению к устройству, для которого в данный момент модуль не загружен.

Вы можете найти больше информации в man страницах для каждой из команд, а так же в rc.modules файле.

4.1.3  Итог

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


Предыдущий Содержание Следующий

File translated from TEX by TTH, version 2.89.
On 24 Apr 2001, 16:43.