Справка - Поиск - Участники - Войти - Регистрация
Полная версия: Прежде чем задать вопрос по *nix
Частный клуб Алекса Экслера > Наши сети притащили > Администрирование сетей
Chief
6 мая 2005, 00:23
1. Аварийный вход в систему
Иногда система ломается. Не важно от чего. Иногда отламываются иксы и "семафорят" на консоль. Иногда ломается какой-то важный бинарник или библиотека и препятствует загрузке системы.
Кто виноват и что делать? На 99.9% виноваты кривые руки или работа из-под рутового аккаунта.

Что делать?

Попробовать перезагрузится в single user mode. Для этого во время вывода меню lilo или grub необходимо добавить 1 в параметры ядра.
Для lilo это будет так:

linux 1

Для grub вначале надо жать "e" чтоб войти в "edit mode", затем выбрать последнюю строчку и вновь жать "e", дописать 1, незабыв что перед параметрами ставят пробел, жать enter, затем "b" - boot.

При работе в single user mode монтирование корневой системы изначально ro - писать ничего нельзя. Для того что исправить надо перемонтировать раздел в режиме rw:

mount -o remount rw /

Но иногда и этого мало. Порой последствия бывают таковы, что даже загружка в single mode не проходит. Тут необходима загрузочная дискета или дистрибутив с поддержкой rescue mode. Правда не все дистрибутивы имеют такой режим. Проверьте сами - загрузитесь с CD и попереключайте консоли ALT+F1... ALT+F2. Если где-то проявится командная строка - это и есть rescue mode. Попробуйте примонтировать раздел и записать с дистрибутива отсутствующие файлы на которые ругается система.
Я понимаю, что для новичка это непосильная задача. Однако не все так сложно. В никсах все системные настройки живут в /etc и /usr/local/etc. Если их зарание копировать в не-корневой раздел, а допустим в /home то восстановление системных настроек после переустановки системы займет считанные секунды. Вот аналог "отката настроек" который при каждой загрузке делает архив /etc, /usr/etc, /usr/local/etc в /home раздел:

echo 'tar -czf "/home/etc-backup-`date`.tar.gz" /etc /usr/etc /usr/local/etc' >> /etc/rc.d/rc.local

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


2. О логах
У меня не работает то-то! - пишут неофиты. И упускают самое главное - логи. В никсах никогда ничего не происходит бесследно, разве если отключить демон логгирования. Все действия программ пишутся в протокол - лог-файл, доступный для понимания путем прочтения оного. Все лог файлы живут обычно в /var/log. У многих программ свой лог. Остальные же пишут в общий лог - /var/log/messages.

По этому для получения реальной помощи а не тыкания в гугл и документацию рекомендую приводить кусок лога связанны с проблемами. Если своего лога нет, то нужно выслать /var/log/messages после запуска проблемной программы. Допустим я хочу выслать лог после старта ndc:
ndc start ; tail -f /var/log/messages.
И не забывайте о конфигах и хорошем тоне! Удаляйте символы комментариев при помощи grep:

grep -v "^#" ИМЯ-КОНФИГА-ТУТ | grep -v "^$"

gerp мощная штука. Например как с помощью grep получить список проблем на уровне ядра? Очень просто:

grep -i kerel /var/log/messages | grep -i error

И наконец - strace. Это трассировщик системных вызовов. Он позволяет получить информацию о том, где возникает проблема если остальные средства не помогают. Как правило это проблемы с правами на устройства, лимиты и прочие нетрифиальные для новичков вещи.
strace ИМЯ_ПРОГРАММЫ выводит системные вызовы которые дергает оная программа. Это очень большой текст, постарайтесь при помощи grep очистить лишнюю информацию.

3. Порочность сборки из исходников
Многие неофиты плюют на идеологию дистрибутива и делают все по своему. В результате они плакаются в форум - я собрал велосипед с треугольными колесами, а он отказывается ездить! Как мне убрать его обратно?
Итак, мои советы:

Во-первых, во FreeBSD есть система портов и пакаджей. Например для установки mc можно дать команду pkg_add -r mc. Или собрать его из портов:

cd /usr/ports
make search name=mc
cd misc/mc
make install clean


А можно перед этим поставить очень полезную утилитку portupgrade и использовать ее:

portinstall mc

Внимание! Перед использованием portupgrade чтение его манов обязательно!
Да, еще. Готовый cvsup-конфиг для обновления портов лежит в /usr/share/examples/cvsup/
Просто отредакируйте cvsup-сервер.

Во-вторых пакетные линуксы - RedHat, Mandrake и прочие. Они имеют штатные средства для обновления и установки софта. Так-же есть дополнительное - apt. Крайне рекомендую для тех дистрибутивов на которые его можно установить. Брать его тут - http://apt.freshrpms.net/
Как быть если нужного софта нет в дистрибутивах? Попробуйте поискать его тут - http://rpmfind.net/ так-же есть большой шанс что после обработки напильнком srpm т другого дистрибутива можно будет пересобрать на нужном. Или написать spec самостоятельно. Но это для отважных духом, те кто не хочет с этим заморачиватся - читайте о "правильной" сборке из исходников.

Итак, о дистрибутивах а-ля Slackware или "правильной" сборке из исходников. Для того чтоб удалить установленный из исходников софт и вообще иметь хоть какой-то контроль применяется checkinstall - брать тут - http://proyectos.glo.org.mx/checkinstall/download.php
Перед использованием обязательно читать документацию!
Как использовать:

./configure
make
checkinstall make install


и отвечать на вопросы.

Копирайт dedic.ru.

Далее пишу лично:
Ссылки на документацию и другие FAQ будут добавляться

В разных никсах одни и теже команды имеют разные опциии, поэтому рекомендую читать man по команде, которую дали...
Пример:
Во FreeBSD к команде du, есть параметр -d, дающий возможность отвечать за вложеность, по опросам в Linux его нет (если есть, просьба скинуть в приват).

Один из форумчан (форя) внимательно прочитав ман объяснил, что одну из опций du -d, можно реализовать и под Linux...
Опция -x подразумевает под собой вывод информации только о каталоге, который интересует..
Большое спасибо, форя. Документации много, а прочитать ее всю не реально...
upd: После чтения манов и вопросов на паре форумов - опция для du в линуксе выглядит как max_depth=N, где N - вложеность... Жутко не удобно (Linux я за такие вещи всегда не любил), но работает, в том числе и в скриптах...
Господа, чем больше грамотных ответов - тем бльше мы можем помочь друг другу...
Эта версия форума - с пониженной функциональностью. Для просмотра полной версии со всеми функциями, форматированием, картинками и т. п. нажмите сюда.
Invision Power Board © 2001-2017 Invision Power Services, Inc.
модификация - Яро & Серёга
Хостинг от «Зенон»Сервера компании «ETegro»