FreeBSD - статьи

         

Установка нового ядра и Перезагрузка


После того, как компиляция ядра успешно завершилась наберите комманду

make install

она переименует старое ядро в kernel.old и поместит в корневую директорию

ваш новый kernel.

После этого можно (и нужно) перегрузить компьютер.

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

можете загрузится со старым ядром. Для этого, в начале загрузки

на подсказку Boot: надо быстро сказать kernel.old.

Естественно, после этого надо снова вернуться к редактированию вашей

конфигурации и повторить все последующие пункты.

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

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

"make install" -


kernel.old - предыдущая неработающая версия kernel


kernel - новая, столь же бесполезная.

Конечно, если вы не пожалели места на диске, у вас должен был остаться

в корневой директории файл kernel.GENERIC и вы можете всегда загрузить

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

обычно удаляю.

А чтобы при этом не попасть в вышеописаную ситуацию, можно переименовать

пока еще работающий kernel.old в kernel.work или kernel.original и

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

по крайней мере один "загружабельный" вариант ядра.



Что полезного вы можете здесь прочитать?


Во-первых, о всех (или почти всех) возможностях syscons. Возможно, вы найдете здесь для себя что-то новое. Во-вторых, о русификации своего терминала. Конечно, полная "русификация" системы не ограничивается установкой русских шрифтов для дисплея и русской "раскладки клавиатуры", но, по крайней мере, начинается с нее.
Хочу предупредить, что если вам надо "по быстрому" решить проблему русификации, то совсем не обязательно читать все что я написал далее.
Просто прочитайте краткую инструкцию (например, ). Но если вы хотите русифицировать свой компьютер несколько "нестандартным" образом или понять "как это работает", то, надеюсь, мои инструкции окажутся вам полезными. В-третьих, о переназначении некоторых клавиш - "переключатель РУС/ЛАТ", Meta-клавиша, "комбинация из трех пальцев" (Control+Alt+Del) и т.п. И кроме того, немного справочной информации, которую я собрал из разных man'ов и исходников программ, мелкие, но полезные программки (которыми я пользовался при этом) и некоторые полезные (надеюсь) советы.

Итак...

Иван Паскаль



Файл конфигурации


Это мои комментарии к файлу LINT из исходников FreeBSD 2.2.1.

Я выкинул из него наиболее экзотические опции. Которые, обычно,

сопровождаются комментариями типа - "не работает и оставлено только для тех,

кому будет интересно там покопаться и пофиксить баги" или просто "пока не

работает". Я, также, выкинул те строчки, смысл которых не знаю и,

следовательно, ничего умного сказать о них не могу. Если вам интересно -

читайте оригинальный LINT или ищите разъяснения на

COMPATIBILITY OPTIONS

DEBUGGING OPTIONS

SCSI DEVICES

HARDWARE DEVICE CONFIGURATION

More undocumented options for linting.

Иван Паскаль



Файлы и "права доступа" к ним.


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

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

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

Во-первых, если юзер и вносит какие-то изменения в файлы или директории, он это делает с помощью каких-то программ (редакторов, "коммандеров", системных утилит для копирования, удаления файлов и т.п.), которые в момент выполнения являются процессами. Во-вторых (что более важно), не все программы запускаются юзерами "вручную". Некоторые из них (демоны) запускаются при старте системы. Другие могут запускаться в определенные моменты времени (с помощью программы cron), или вызываться по мере необходимости для обслуживания запросов приходящих по сети (обычно их запускает программа-"диспетчер" inetd). Кроме того, существует ряд программ, которые для выполнения каких-то вспомогательных действий сами запускают другие программы (в этом случае говорят, что процесс-"родитель" запустил процесс-"потомок"). Понятно, что хотелось бы и этим программам (процессам) ограничить доступ к файлам. И наконец, в-третьих, в некоторых случаях очень полезно, чтобы программа, запущенная юзером, имела больше прав, чем обычно имеет этот юзер. Например, обычный юзер не может даже читать файл, в котором "спрятаны" пароли всех юзеров. В то же время, любой юзер должен иметь возможность поменять свой личный пароль, не обращаясь для этого к администратору. Но для этого ему надо иметь возможность записать что-то в файл паролей. Значит программа, которая это делает (passwd) в момент выполнения должна иметь права намного большие, чем юзер, который ее запускает.


Не вдаваясь в подробности, можно сказать, что

каждый процесс имеет идентификатор юзера (userID). Обычно он совпадает с userID'ом того юзера, который запустил этот процесс. процессы, которые запустились автоматически, тоже имеют userID, как будто их запустил реальный юзер. Чей именно userID получают эти программы обычно определяется теми программами, которые их стартуют (программа-загрузчик, cron, inetd и т.д.). В простейших случаях программы-"потомки" просто "наследуют" userID от программы-"родителя", но некоторые "родители" могут запускать программы с другим userID'ом (не совпадающим с собственным). некоторые программы в процессе выполнения могут поменять свой userID и, соответственно, получить права, которые сам юзер не имел. Естественно, для того, чтобы программа могла это сделать, администратор должен "разрешить" ей такое поведение (подробнее об этом будет сказано ниже). Кстати, изменение userID'а делается не только, когда нужно "расширить" права программы, но и наоборот - "сузить" до прав какого-нибудь конкретного юзера. если процесс может изменять свой userID, то различают "реальный userID" и "эффективный userID" (есть еще "сохраненный userID"). Реальный userID - это идентификатор юзера, который запустил процесс (или userID процесса-"родителя"). А эффективный - это новый userID, который задача получила во время выполнения. права на файл (или директорию) определяются по "эффективному userID" процесса. В простейшем случае, когда userID не меняется, "реальный" и "эффективный" userID'ы совпадают и можно говорить просто об userID'е процесса. Или даже просто о правах юзера (а не процесса) на файл.

Итак. Добавление из дистрибутива ...


.


Это самый легкий способ. Но...


Sysinstall все еще в процессе совершенствования :-), и я не уверен,

что эти рекомендации подойдут к любой версии. Кроме того, ему не хватает

гибкости.

Поэтому предлагаю еще один, несколько более трудоемкий, но надежный и гибкий

способ...

.

Иван Паскаль



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


Ну, основные бинарники и конфиги у вас уже стоят. В том числе и ненужные :-).

При инсталляции можно отказатся от установки исходных текстов (src),

системы X-Window, игрушек (games), и различной документации (manpages, doc, info, dict).

Кроме того, существует большое колличество дополнительных программ в виде пакетов (packages) и портов (ports). Но о них разговор отдельный. Смотри:

.

.



Как перегенерировать ядро системы?


В общем виде этот процесс выглядит так:


- развернуть исходники ядра (я обычно заказываю их в процессе инсталяции,

но если вы этого не сделали, то можно добавить их "вручную");


- составить свою конфигурацию (конфигурационный файл);


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

*.h и *.c в соответствии с вашей конфигурацией;


- скомпилировать новое ядро с помощью программы make;


- установить новое ядро на место;


- перезагрузиться.

Теперь более подробно.



Какое место занимает этот драйвер в работе FreeBSD?


Как любой Юникс, FreeBSD дает возможность пользователю общаться с компьютером через различные типы терминалов. Это может быть и "железный" терминал, подключенный, например, через COM-порт и другой компьютер, соединяющийся по сети (программой telnet). Но основным терминалом конечно же является дисплей и клавиатура той "писишки", на которой и запущена FreeBSD.

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

Конечно, и в других операционных системах (даже таких простых, как MS DOS) обычная программа не "лезет в железо", а пользуется библиотечными функциями (getchar, print и т.п.) или функциями BIOS. Но, в данном случае, речь идет о том, что даже между самой системой FreeBSD (системными библиотеками) и "железными" устройствами, стоят соответствующие "драйверы терминалов", которые и обеспечивают "однообразие" при работе с очень разными терминалами.

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

Надо заметить, что в FreeBSD есть еще один "альтернативный" драйвер консоли - pcvt. Для того, чтобы заменит на него syscons надо персобрать ядро системы с соответствующими опциями.

Но, поскольку, в "стандартной поставке" FreeBSD "встроен" именно syscons, он же и используется в большинстве случаев.

Поэтому я ограничусь только описанием syscons (тем более, что pcvt я практически не знаю :-)



Подготовка к генерированию


После того, как вы закончили редактировать свою конфигурацию (пусть она

называется MyConfig, например), наберите команду

config MyConfig

Она создаст в директории /usr/src/sys директорию compile/MyConfig

(о чем и сообщит вам в конце своей работы) и поместит туда файлы, необходимые

для компиляции ядра.



Разворачивание исходников.


Прежде всего посмотрите в директорию

/usr/src/sys

если она не пустая, то все что вам нужно уже на месте. И вы можете

спокойно перейти к следующему пункту.

В противном случае, вам надо взять из дистрибутива нужные файлы и

установить их. Как это сделать описано в

.


Не забудьте, что вам в данном случае необходима только та их часть,

которая называется sys.



Составление конфигурационного файла.


Перейдите в директорию /usr/src/sys/i386/conf.

Здесь имеются два конфигурационных файла GENERIC и LINT.

Первый представляет собой конфигурацию того ядра, которое установилось

у вас при инсталяции системы. Вы можете посмотреть там - что в данный

момент может ваше ядро.

Второй же файл представляет собой скорее описание всех возможных

элементов конфигурационного файла, чем реальную конфигурацию. Если

вы попытаетесь построить ядро в такой конфигурации, оно, скорее всего

даже не будет работать. Во всяком случае, памяти "отожрет" по максимуму :).

Вам необходимо составить свой файл. Его название значения не имеет.

Можете назвать его MyConfig или MyComputer. Я обычно даю ему то же

название, что и доменное имя машины.

В качестве основы для нового файла вы можете использовать один из

уже имеющихся файлов - GENERIC или LINT.

Если вы возьмете за основу GENERIC, то вам придется убрать оттуда описания

всех лишних устройств и дописать необходимые вам options.

Если же вы возьмете за основу LINT, то все редактирование будет заключаться

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

занятием.

Итак. Скопируйте один из имеющихся конфигов


cp GENERIC MyConfig


или


cp LINT MyConfig

И подправьте его любым текстовым редактором.

Hint: Если вы не успели еще поставить никакого текстового редактора

"с человеческим лицом", можно использовать редактор ee, который у вас

наверняка уже стоит. Он довольно простой, но вполне полноценный экранный

редактор.

Как я уже сказал, основным "мануалом" по составлению новой конфигурации

служит файл LINT. Причем, там должны быть описаны самые "свежие" options,

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

"мануалах". (К сожалению, "должны быть" и "есть" - не одно и то же.)

На всякий случай я попытался написать свои .



Трансляция (собственно само генерирование) ядра


Перейдите в директорию /usr/src/sys/compile/MyConfig и наберите команду

make

она сделает все что нужно.


Учтите, что kernel - достаточно сложная программа, поэтому ее компиляция

потребует довольно много времени. От 15-20 минут на Pentium'е до часа,

на 386 процессоре.

Если в процессе компиляции обнаружатся фатальные ошибки, придется

пересмотреть свой конфиг, исправить его и повторить пункты 2.3 - 2.4.

(У меня такие случаи были, когда я попросил некоторые опции, возможные

только для Pentium, забыв указать в начале файла, что хочу поддержку

процессора i586)



Важное замечание по поводу драйверов устройств.


Если вы добавили в конфигурации ядра устройства (реальные или pseudo-device),

возможно потребуется создать для них файлы-устройства в директории /dev.

Какие-то общие рекомендации по этому поводу дать трудно, поскольку это

зависит от того - какие устройства вы добавляли в конфиг-файл, а их много

разных.

Во всяком случае, если вы знаете какого файла (в /dev) не хватает, его

можно создать с помощью программки MAKEDEV, которая лежит в той же /dev.

Это даже не программа, а командный файл, в начале которого есть коментарии,

в которых более-менее подробно описаны возможные аргументы (имена устройств)

для MAKEDEV.

И еще, поскольку, /dev наверняка не прописана в вашем PATH, запускать ее

нужно /dev/MAKEDEV ... , или, если вы находитесь в самой директории /dev, то

./MAKEDEV ...

Иван Паскаль



Зачем нужно перегенерировать ядро (kernel)?


При инсталяции FreeBSD у вас появится в системе ядро, которое

вполне работоспособно. Зачем его переделывать?

Дело в том, что это ядро (так называемая GENERIC конфигурация)

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

на "железе" любой конфигурации (из поддерживаемых, конечно).

В эту конфигурацию встроена поддержка ВСЕХ типов накопителей

(HDD и CD) и ВСЕХ сетевых карт, которые на данный момент поддерживаются

FreeBSD. Это вполне логично - вы должны иметь возможность поставить свой

Unix и дополнительные программы на тот HDD, который имеется у вас

в машине и суметь войти в сеть, какой бы сетевой карточкой вы

ни пользовались.

В то же время, в ядро не включены некоторые полезные модули,

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

хотите использовать вашу машину в качестве сервера. (Например -

поддержка firewall, PPP-сервера, bpf и т.п.).

Итак. Перегенерировать ядро стоит для того чтобы -


- убрать все лишнее (драйверы устройств, которых у вас нет);


- добавить то, чего не хватает.

Первое позволит вам ускорить загрузку (так как система не будет

тратить время на поиск и тестирование несуществующих в вашей машине

устройств) и сэкономить место в ОЗУ, занимаемое ядром.

Ну, а без второго, скорее всего, вы не сможете решить свои задачи :).