FAQ FreeBSD - Решение проблем с программным обеспечением
ОГЛАВЛЕНИЕ
3.12. FreeBSD 2.0 аварийно завершает работу с сообщением kmem_map too small!
Note: Сообщение может также выглядеть как mb_map too small!
Такое завершение работы показывает, что системе не хватает виртуальной памяти
для сетевых буферов (точнее, структур mbuf). Вы можете увеличить количество в
иртуальной памяти для структур mbuf, добавив:
options "NMBCLUSTERS=n"
в файл конфигурации ядра, где n - это число в пределах 512-4096, в зависимости
от числа TCP-соединений, которое вам нужно одновременно обслуживать. Я
рекомендую попробовать значение 2048 - это должно избавить вас от аварийных
остановов. Вы можете отслеживать количество структур mbuf, выделенных/
используемых системой командой netstat -m. Значение по умолчанию для
NMBCLUSTERS равно 512 + MAXUSERS * 16.
3.13. При перезагрузке с новым ядром выдаётся сообщение CMAP busy panic.
Процедура определения устаревших файлов /var/db/kvm_*.db иногда даёт сбой и
использует не те файлы, что может вызвать аварийный останов системы.
Если это случилось, перезагрузитесь в однопользовательском режиме и выполните
команду:
# rm /var/db/kvm_*.db
3.14. ahc0: brkadrint, Illegal Host Access at seqaddr 0x0
Это - результат конфликта со SCSI-адаптером Ultrastor.
Во время загрузки войдите в меню конфигурации ядра и выключите устройство uha0,
являющееся источником этой проблемы.
3.15. Sendmail говорит, что mail loops back to myself
В FAQ по sendmail на это дан такой ответ:-
* Выдаются сообщения "Local configuration error", примерно такие:
553 relay.domain.net config error: mail loops back to myself
554 <Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.>... Local configuration error
Как можно решить эту проблему?
Согласно записям MX, почта для домена (скажем, domain.net) была
перенаправлена на указанный хост (в нашем случае relay.domain.net),
но он не распознаётся как domain.net. Добавьте строку domain.net в
файл /etc/sendmail.cw (если вы используете FEATURE(use_cw_file)) или
добавьте "Cw domain.net" в /etc/sendmail.cf.
Текущая версия FAQ по sendmail больше не поставляется вместе с sendmail. Однако
этот документ регулярно помещается в конференции comp.mail.sendmail,
comp.mail.misc, comp.mail.smail, comp.answers и news.answers. Вы можете
получить копию по электронной почте, послав сообщение, содержащее команду send
usenet/news.answers/mail/sendmail-faq в теле письма, в адрес <
Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.>.
3.16. Полноэкранные приложения на удалённой машине ведут себя неправильно!
На удалённой машине тип терминала может быть установлен в значение, отличное от
типа терминала cons25, требуемом при использовании консоли FreeBSD.
Есть несколько возможных способов решения этой проблемы:
* После входа на другую машину установите значение переменной окружения TERM
равным ansi или sco, если эта машина знает об этих типах терминалов.
* Используйте эмулятор VT100 типа screen на консоли FreeBSD. Screen даёт вам
возможность открывать несколько рабочих сеансов на одном терминале, и она
имеет ещё ряд полезных особенностей. Каждое окно программы screen ведёт
себя как терминал VT100, так что переменная TERM на удалённой машине должна
быть установлена в значение vt100.
* Опишите терминал cons25 в базе данных характеристик терминалов на удалённой
машине. Способ описания зависит от используемой на этой машине операционной
системе. Вам может помочь чтение руководств по администрированию удалённой
системы.
* Запустите X-сервер на стороне FreeBSD и войдите на удалённую систему с
помощью какого-либо эмулятора терминала, работающего в X Window, такого,
как xterm или rxvt. Переменная окружения TERM на удалённой машине должна
быть установлена в значение xterm или vt100.
3.17. Выводятся сообщения calcru: negative time...
Это может быть вызвано различными аппаратными или программными проблемами, св
язанными с прерываниями. Это может быть связано как с ошибками при программиров
ании, так и с природой самих устройств. Например, работа с TCP/IP по
параллельному порту с использованием большого MTU приводит к этой проблеме,
также как использование графических акселераторов; в последнем случае вы должны
проверить настройку прерываний на графическом адаптере.
Одним из проявлений этой проблемы является прерывание работы процессов с
диагностическим сообщением "SIGXCPU exceeded cpu time limit".
Если эта проблема не может быть решена, для FreeBSD 3.0 от 29 ноября 1998 и в
ыше измените значение системной переменной:
# sysctl -w kern.timecounter.method=1
Это коснётся производительности системы, но, принимая во внимание источник этой
проблемы, это будет незаметно. Если проблема всё ещё даёт о себе знать, остав
ьте значение этой переменной равным единичке и увеличьте значение параметра
NTIMECOUNTER в файле конфигурации вашего ядра. Если в конце концов вы
достигнете значения NTIMECOUNTER=20, то вам эту проблему решить не удастся,
прерывания дают слишком большую нагрузку на процессор, чтобы обеспечить отслежи
вание времени.
3.18. Выдаётся сообщение pcm0 not found или мой звуковой адаптер определяется
как pcm1, хотя в конфигурационном файле ядра указана строчка device pcm0
Такое бывает во FreeBSD 3.x со звуковыми адаптерами PCI. Устройство pcm0
предназначено исключительно для адаптеров ISA, поэтому, если у вас имеется
адаптер PCI, то вы увидите эту ошибку и ваш адаптер будет распознан как pcm1.
Note: Вы не сможете избавиться от предупреждающего сообщения, просто измени
в строку в конфигурационном файле ядра на device pcm1, так как это приведёт
к закреплению устройства pcm1 за адаптерами ISA, а ваш адаптер PCI будет
найден как устройство pcm2 (и появится предупреждение pcm1 not found).
Если у вас имеется звуковой адаптер PCI, то вам нужно также создать устройство
snd1, а не snd0:
# cd /dev
# ./MAKEDEV snd1
Такой ситуации не возникает во FreeBSD 4.x, так как в ней было положено много
усилий, чтобы сделать её более PnP-центричной и устройство pcm0 больше не
предназначено исключительно для адаптеров ISA
3.19. После обновления FreeBSD до версии 4.x мой PnP-адаптер больше не обнаруживается (или определяется как unknown)
FreeBSD 4.x теперь гораздо более PnP-центрична, что отражается на некоторых
устройствах PnP (к примеру, звуковых адаптерах и внутренних модемах),
перестающих работать, хотя они функционировали в системе FreeBSD 3.x.
Причины такого поведения объясняются в следующем сообщении электронной почты,
опубликованном в списке рассылки freebsd-questions Питером Уэммом (Peter Wemm)
в ответ на вопрос о внутреннем модеме, который перестал распознаваться после
обновления до FreeBSD 4.x (комментарии внутри [] были добавлены для пояснения
контекста послания.
BIOS, поддерживающая PNP, предварительно отводит и оставляет ему [модему]
место в адресном пространстве портов, так что [в 3.x] процедура обнаружения
в старом стиле ISA "находит" его здесь.
В 4.0 код для работы с ISA гораздо более PnP-центричен. [В 3.x] было в
озможно при распознавании ISA найти "беспризорное" устройство и затем по
идентификатору PNP-устройства произвести поиск и получить ошибку из-за
конфликта ресурсов. Поэтому для предотвращения повторной процедуры распозна
вания в нем сначала выключаются все управляемые адаптеры. Это также
означает, что для поддерживаемого оборудования PnP нужно знать их
PnP-идентификаторы. Имеются планы на обеспечение возможности найстройки
этого со стороны пользователя.
Чтобы заставить устройство работать снова, требуется определить его
PnP-идентификатор и добавить его в список, который используется процедурой
распознавания ISA для идентификации устройств PnP. Этот идентификатор можно
получить при помощи программы pnpinfo(8), найдя устройство в ее выдаче, вот,
например, вывод команды pnpinfo(8) в случае внутреннего модема:
# pnpinfo
Checking for Plug-n-Play devices...
Card assigned CSN #1
Vendor ID PMC2430 (0x3024a341), Serial Number 0xffffffff
PnP Version 1.0, Vendor Version 0
Device Description: Pace 56 Voice Internal Plug & Play Modem
Logical Device ID: PMC2430 0x3024a341 #0
Device supports I/O Range Check
TAG Start DF
I/O Range 0x3f8 .. 0x3f8, alignment 0x8, len 0x8
[16-bit addr]
IRQ: 4 - only one type (true/edge)
[лишние строки TAG исключены]
TAG End DF
End Tag
Successfully got 31 resources, 1 logical fdevs
-- card select # 0x0001
CSN PMC2430 (0x3024a341), Serial Number 0xffffffff
Logical device #0
IO: 0x03e8 0x03e8 0x03e8 0x03e8 0x03e8 0x03e8 0x03e8 0x03e8
IRQ 5 0
DMA 4 0
IO range check 0x00 activate 0x01
Информация, которая вам нужна, находится в строке "Vendor ID" в самом начале вы
вода команды. Шестнадцатиричное число в скобках (в этом примере 0x3024a341) яв
ляется PnP-идентификатором, а строчка, идущая прямо перед ним (PMC2430) яв
ляется уникальным ASCII-идентификатором. Эту информацию нужно добавить в файл /
usr/src/sys/isa/sio.c.
Сначала вы должны сделать резервную копию файла sio.c просто на тот случай,
если что-то пойдет не так. Эта копия также может потребоваться для создания
патча для посылки его вместе с вашим PR (вы же собираетесь послать PR, не прав
да ли?) отредактировав файл sio.c и поискав строчку
static struct isa_pnp_id sio_ids[] = {
после чего переместитесь ниже и найдите подходящее место, чтобы добавить
строчку для вашего устройства. Записи имеют примерно такой вид, и они отсортиро
ваны по ASCII-строкам Vendor ID, которые должны быть помещены в поле
комментария справа от строки кода вместе с полным описанием устройства (если
оно поместится) или частью из Device Description вывода программы pnpinfo(8):
{0x0f804f3f, NULL}, /* OZO800f - Zoom 2812 (56k Modem) */
{0x39804f3f, NULL}, /* OZO8039 - Zoom 56k flex */
{0x3024a341, NULL}, /* PMC2430 - Pace 56 Voice Internal Modem */
{0x1000eb49, NULL}, /* ROK0010 - Rockwell ? */
{0x5002734a, NULL}, /* RSS0250 - 5614Jx3(G) Internal Modem */
Добавьте шестнадцатиричный идентификатор Vendor ID вашего устройства в соотв
етствующее место, сохраните файл, перестройте ядро и выполните перезагрузку. В
аше устройство должно теперь быть найдено в виде устройства sio, как это и было
во FreeBSD 3.x