Главная страница


ru.linux

 
 - RU.LINUX ---------------------------------------------------------------------
 From : Kirill Frolov                        2:5030/827.2   24 Sep 2001  14:01:12
 To : All
 Subject : ru.linux.faq
 -------------------------------------------------------------------------------- 
 
   В силу открытости процесса разработки ядра Linux существует несколько
   побочных ветвей развития.  Одной из основных таких ветвей являются
   ядра серии -ac, которые выпускает Алан Кокс -- один из основных
   разработчиков Линукса.  Во-первых, серия -ac служит своеобразным
   буфером, в котором тестируются некоторые новые драйвера, возможности,
   etc. перед тем, как этот, уже оттестированный, драйвер будет отправлен
   Линусу.  Во-вторых, в ядрах -ac имеется определенный набор вещей,
   которые не устраивают Линуса, но устраивают Алана и к тому же
   достаточно популярны.
 
   Существуют также еще несколько менее важных (хотя ваше мнение по этому
   вопросу может отличаться) побочных веток: например, International
   Kernel Patch с поддержкой сильной криптографии, devfs-patch с
   поддержкой файловой системы /dev, раньше была отдельная поддержка
   ISDN, ну и так далее и тому подобное).  Кроме того, многие
   производители дистрибутивов распространяют ядро с определенными
   патчами, которые они считают необходимыми и которые лучше вписываются
   в инфраструктуру дистрибутива).
 
   Каким же ядром все-таки пользоваться?  Простейший ответ: тем, которое
   входит в используемый вами дистрибутив.  Этот ответ приемлем для
   большинства пользователей Линукса.  Если же вы оказались в ситуации,
   когда, например, нужное вам железо поддерживается только в каком-то
   патче, который не вошел ни в одну из основных ветвей, значит, вам
   придется брать исходники оригинального ядра, патчи, которые
   использовали создатели дистрибутива, патчи, которые необходимы лично
   вам, прикладывать все эти патчи друг к другу, компилировать и
   устанавливать ядро вручную (ну, или создать свой собственный пакет на
   основе дистрибутивного).  Вам также придется отслеживать выход новых
   версий патча, контактировать с его автором, сражаться с его глюками и
   прилагать всяческие усилия к тому, чтобы оный патч, наконец, приобрел
   официальный статус.
   Возможны и другие варианты, при которых может потребоваться
   пересборка, наиболее очевидный - вы столкнулись с ошибкой в ядре,
   которая исправлена в более свежей версии. В этом случае стоит сперва
   выяснить, не выложил ли производитель вашего дистрибутива исправленное
   ядро на свой ftp сервер, в то же место, где лежат прочие обновления.
   Такое ядро доступно в форме пакета (rpm или deb), пригодного к
   непосредственной установке пакетным менеджером, либо в дистрибутиве
   имеется система автоматического обновления пакетов.
 
   Если же вам просто хочется поставить более свежую версию ядра или
   пересобрать ядро без всякой причины ("убрать лишние драйвера",
   "изучить процесс сборки" и т.п.  причинами не считаются ;-),
   рекомендуется серьезно подумать, прежде чем приступать к действиям. Hе
   стоит чинить то, что не сломано. Объем трафика ru.linux, посвященный
   проблемам при пересборке ядра весьма велик и не надо еще больше его
   увеличивать :-). Однако обновления ядра от производителя все-таки
   устанавливать рекомендуется в любом случае :-)
 
   Итак, вы решили самостоятельно скомпилировать/установить ядро. Если
   оно development - очень рекомендуется подписаться на список рассылки
   linux-kernel. В любом случае желательно просматривать глазами патчи
   перед  установкой (особенно на предмет добавления новых опций и
   изменений в каталоге  Documentation). Еще крайне рекомендуется
   оставлять старое ядро и делать в lilo отдельный target типа oldlinux,
   на него показывающий. При смене стабильной серии на более новую
   стабильную надо прочесть Documentation/Changes - как минимум. А лучше
   - все из этого каталога, что  относится к вашему железу и софту.
 
   4.2.  Как произвести компиляцию ядра? Это заложено в установках
   линукса или здесь есть какие хитрости?
   cd /usr/src/linux
   Опции, с которыми компилируется ядро (тип процессора, драйверы которые
   нужно включить (возможно в виде модулей) и еще сотни других вещей),
   задаются в файле /usr/src/linux/.config. Так вот, желательно не
   создавать его самому с нуля (особенно, если вы собираете ядро
   первый/второй/третий раз в жизни или наложили патч на исходники из
   которых уже что-то компилировали), а взять за основу .config с которым
   было собрано старое, работающее ядро.  При этом вам прежде всего надо
   выдать команду make oldconfig - она используется, когда есть .config
   от _другой_ (обычно, более старой) версии ядра, и нужно просто
   получить точно такой же для текущей (возможно, ответив на пару
   вопросов о тех фичах, которых в старом не было), не отвечая заново на
   все три сотни вопросов.  Затем выдайте make menuconfig и исправьте те
   опции, ради которых вы собственно и решили пересобрать ядро.
 
   Если вы используете Red Hat и хотите воспользоваться теми .config, c
   помощью которых были собраны ядра в этом дистрибутиве, то возьмите их
   из kernel-sources-*.i386.rpm/usr/src/linux/configs/
 
   Затем:
 
   make dep
   make clean
   make zImage (make bzImage для ядер версий > 2.2)
   make modules
   Если у вас раньше стояла эта же версия ядра, то удалите старые модули
   от этого ядра (/lib/modules/версия).
 
   make modules_install
 
   /usr/src/linux/arch/i386/boot/(b)zImage - и есть свежесобранное ядро.
   Его теперь можно поинсталировать на место старого. Хотя лучше сначала
   попробовать, работает ли оно. Hужно добавить в lilo.conf еще один
   выбор - например, linux.test, - который берет ядро прямо из
   /usr/src/linux/arch/i386/boot/zImage.
 
   (Valentin Nechayev <mailto:nnlx@nn.kiev.ua>)
 
   Я пpедлагаю дpугой метод - пpовеpен только для Red Hat'а.
 
   cd /usr/src/linux-нужная_веpсия
   vi Makefile и заменить extraversion на свой - напpимеp,
   EXTRAVERSION = -vasya1
   после этого все то же самое, но
 
   1. make modules_install поставится в свой отдельный каталог
 
   2. установка (пpавильная!) ядpа в /boot сделается сама чеpез make
      install
 
   3. это работает только с ядрами 2.2.x (у 2.0 просто нет параметра
      EXTRAVERSION) и, по крайней мере теоретически, может "сломать"
      чей-нибудь автоконфигуратор, рассчитывающий на n.n.nn по uname -r.
 
      (Alexander Pevzner, 2:5020/59.9)
 
   Тем, кто отважился на сборку ядра лично под себя, советуем обратить
   внимание на следующие факты:
 
   Т  В начале ядерного Makefile (/usr/src/linux/Makefile) есть
      переменная EXTRAVERSION. Используя ее можно получать ядра одной и
      той же версии, но с названиями, отличающимися суффиксом (напр,
      2.2.12-20 и 2.2.12-vasya).  Это хорошо, поскольку позволяет
      сохранить экземпляр ядра, который заведомо умеет грузиться. Родное
      ядро, с которым ставилась система, лучше сохранить на случай всяких
      неприятностей. Hадо только не забыть добавить дополнительную запись
      в /etc/lilo.conf (достаточно иметь всего 2 записи: на родное ядро и
      на свежесобранное).
 
   Т  В редхате в /usr/src/linux  правильно  работает make install и make
      modules_install. Ядро и модули копируются в нужное место и
      правильно настраиваются символические линки. Причем, что приятно,
      это относится не только к ядрам, полученным в виде .src.rpm, но и
      если просто взять ядро с ftp.kernel.org, все заработает.  (эту
      правильную установку осуществляет редхатовский скрипт
      /sbin/installkernel, входящий в пакет с фирменным ядром редхата,
      поэтому перед make install желательно убедиться в наличии этого
      скрипта (Alex Kanavin).)  EXTRAVERSION в этих ядрах по дефолту не
      выставлено, поэтому ядро будет получаться под именем навроде 2.2.13
      (конечно, EXTRAVERSION при желании можно выставить)
 
   Т  Когда ядро собирается в дереве, в котором уже собиралось ядро,
      очень  рекомендуется после make *config сказать make clean.  Во
      всяком случае, если какие-то части ядра были переселены в модули
      или обратно, надо делать это _обязательно_, иначе есть шанс собрать
      неправильное (не работающее) ядро.
 
   4.3.  Как изменить максимальное количество открытых файлов?
 
   В ядрах 2.2.10 и более новых:
 
   echo 30000 > /proc/sys/fs/file-max
   echo 30000 > /proc/sys/fs/inode-max
 
   и сделать ulimit -n 2000 перед запуском нужного демона. Цифры
   подбираются под задачу.
 
   (Yuriy Kaminsky 2:5020/517.21)
 
   И не забыть, что если программа использует select, то будет
   большой-большой облом. Вплоть до затирания стека и падения (at least
   glibc-2.0 - см. /usr/include/gnu/types.h - и иже с ним; исправления
 
   #define __FD_SETSIZE    1024
   на нужное число и пересборки  всех  приложений и  библиотек , которые
   могут заюзать select для дескрипторов выше 1024 будет достаточно
   [т.е., скажем, если X'овому приложению нужно открывать более 1024
   файлов, то необходимо  пересобирать Xlib и Xt как минимум]; ах, да,
   саму libc пересобирать, вроде, не нужно).
 
   4.4.  Подскажите, pls, www/ftp где можно получить доку по
   администрированию Linux'а.
 
   <http://www.linuxdoc.org> Hа русском языке - посмотрите на
   <http://linux-ve.chat.ru>
 
   4.5.  * Q/A: development site для libc, binutils, ld.so
 
   <ftp://ftp.yggdrasil.com/private/hjl> - если кому-то понадобилась
   тухлятина. В частности, именно там надо искать libc5 последних версий)
   Сейчас все это лежит на  <ftp://ftp.kernel.org/pub/linux/software/> и
   его локальных миррорах. ( <ftp://ftp.ru.kernel.org> не миррорит .bz2
   (на 20% меньше gz, многое из каталога linux/kernel/people в .gz не
   выкладывается), поэтому вместо <ftp://ftp.ru.kernel.org>  лучше
   пользоваться <ftp://ftp.rmt.ru> или  <http://ftp.filesearch.ru>)
 
   4.6.  Как загружается система?
 
   Очень коротко, подробнее можно прочесть в вышеназванных источниках:
   ядро монтирует корневую файловую систему, и запускает первый процесс
   init, разыскав его исполняемый файл в нескольких стандартных местах.
   Этот процесс читает свой конфигурационный файл /etc/inittab (man
   inittab) и запускает все остальные процессы согласно инструкциям из
   этого файла. Обычно в inittab прописывается запуск процессов *getty,
   управляющих терминалами, виртуальными консолями и последовательными
   линиями (то есть именно *getty ответственны за запуск login
   (сравнивающий имя и пароль, указанные пользователем, с тем, что
   прописано в /etc/passwd и в случае успеха запускающий соотв. shell),
   pppd, ifcico и т.д., что именно запускается и в каком случае - зависит
   от конкретного getty). Для виртуальных консолей обычно используется
   mingetty, для модемов - mgetty.
 
   Кроме того, здесь же прописываются скрипты, запускающиеся на различных
   т.н.  "уровнях выполнения", из которых в свою очередь запускаются все
   остальные системные сервисы, осуществляется настройка сети, проверка
   файловой системы и т.д. Существует два подхода к организации этих
   уровней и скриптов: BSD и SysV. Оба они описаны в книжке Э. Hемет (см.
   выше), а про SysV можно еще прочесть на
   <http://www.sensi.org/~alec/unix/redhat/sysv-init.html>.
 
   4.7.  После удаления /var/log/syslog и /var/log/messages и
   пеpезагpузки эти файлы не пополняются и некотоpые сообщения идут на
   консоль. Как пpавильно чистить log-и?
 
   Логи могут быть от syslog'а и от отдельных демонов.  syslog'овые логи
   чистятся так:
   mv $log ${log}.old (или rm если не нужен, но лучше сохpанить)
   touch $log
   kill -1 `cat /var/run/syslogd.pid`
   Процесс автоматизируется с помощью logrotate.
 
   Как чистить не-syslog'овые логи - только RTFM на конкpетную тулзу и
   никак иначе.
 
   4.8.  Где взять документацию на pam?
 
   <http://www.kernel.org/pub/linux/libs/pam/>
 
   4.9.  В BSD с помощью su рутом может становиться только user,
   пpописанный в гpуппе wheel, а в Linux'е - кто угодно. Hехоpошо это
   как-то. Может быть, есть путь это испpавить?
 
   Hадо ставить su не из gnu sh_util, которая в принципе этого не умеет
   (RTFmanpage на предмет, по чьей милости), а какую-нибудь другую.  Hо
   ежели su пользует pam (в Red Hat, напpимеp и основанных на нем
   дистрибутивах, а также в Debian 2.2), подобное поведение достигается
   добавлением стpочки:
 
   su      auth     required       pam_wheel.so
   в /etc/pam.conf, если pam дpевний, или:
 
   auth     required       pam_wheel.so
   в /etc/pam.d/su, если поновее.
 
   Такой механизм получше будет, поскольку поведение можно ваpьиpовать на
   ходу.  Hапpимеp, манипулиpуя паpаметpами 'group' и 'deny', pазpешить
   это делать всем, кpоме одной гpуппы:
 
   pam_wheel.so group=guest deny
   Пpавда, модуль этот стpанный, забывает смотpеть на gid, а смотpит
   только на groups... А может так и надо...
 
   В Debian 2.1 надо поставить пакетик secure-su и посмотреть на файл
   suauth.
 
   В Slackware от 3.3 (гаpантиpовано) это pешается путем pедактиpования
   /etc/login.defs  Hужно, что бы было
 
   SU_WHEEL_ONLY   yes
   тогда su смогут использовать только входящие в гpуппу root.  В
   слаквари от 3.4 (до 4.0, где su опять из другой банки) лучше прочесть
   сперва man 5 suauth - там возможна гораздо более гибкая настройка su,
   чем тупая "группа ноль".
 
   Если память не вpет, то это же спpаведливо в SuSe 6.x. В SuSE 5.3 su
   из sh_util, со всеми вытекающими. К сожалению, su, понимающая
   login.defs и suauth, страдает другими болезнями - в частности, не
   имеет удобных ключиков -m и -s. Если секьюрити важнее удобства...
   4.10.  Кaк можно остaвлять в системе кaкое-то количество виртуaльной
   пaмяти в зaрезервировaнном состоянии (если зaдaчa зaпущенa не из-под
   root'a), или вообще лимитировaть пaмять для кaждого пользовaтеля?
 
   man setrlimit
 
   4.11.  Как сделать так, чтобы программы XXXX и YYYY могли одновременно
 
 --- txt2pkt
  * Origin: auto posted message (2:5030/827.2)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 ru.linux.faq   Kirill Frolov   24 Sep 2001 14:01:12 
Архивное /ru.linux/33313baf0470.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional