Подборка вопросов и ответов #1

Почему попытка удалённо выполнить команду sudo с помощью ssh оканчивается ошибкой?

Last modified on 2009-05-30 15:50:32 GMT. 0 comments. Top.

Система: Red Hat Enterprise Linux 5

Проблема:

Попытка удалённого вызова команды sudo с помощью ssh заканчивается ошибкой.

Например:

$ ssh hostname sudo <command>
$ sudo: sorry, you must have a tty to run sudo

Решение:

Файл /etc/sudoers в Red Hat Enterprise Linux 5 по-умолчанию содержит флаг 'requiretty'. Когда этот флаг установлен, только зарегистрированные в системе пользователи могут выполнять команды с помощью sudo. Именно это и не позволяет выполнять удалённо команду sudo через rsh или ssh. Программы rsh и ssh не выделяют устройство псевдотерминала. Рекомендуется не убирать этот флаг, поскольку без псеводтерминала невозможно отключить эхо вводимых символов и, как следствие, отображение вводимого пароля.

Для принудительного выделения псевдотерминального устройства, укажите команде ssh параметр -t :

# ssh -t hostname sudo <cmd>

Как вариант, можно также отредактировать файл /etc/sudoers с помощью visudo и отключить флаг requiretty, закомментировав строку "Defaults: requiretty". Примечание: делать это не рекомендуется.

За подробной информацией обращайтесь к Red Hat Enterprise Linux Deployment Guide.


Как увеличить приоритет операций ввода-вывода некоторых процессов в Red Hat Enterprise Linux 5?

Last modified on 2009-05-30 09:12:06 GMT. 0 comments. Top.

Система: Red Hat Enterprise Linux 5 и новее

Введение:
Приоритет и класс ввода/вывода процесса могут быть изменены командой ionice. Linux поддерживает три класса ввода/вывода:

  • Idle: процесс, имеющий класс idle, получает возможность работать с диском только если никакая другая программа не выполняет операций ввода/вывода в течении некоторого периода времени.
  • Best effort: этот класс используется всеми процессами по-умолчанию, если не был задан определённый класс ввода/вывода.
  • Real time: процессы, работающие в классе реального времени, получают доступ к диску в перую очередь, вне зависимости от того, что еще происходит в системе.

По-умолчанию, процессы работают в классе Best Effort с приоритетом равным нулю, т.е. с наивысшим приоритетом в этом классе. Наилучший вариант применения ionice — улучшение производительности в случаях, когда нужно одновременно выполнять два класса задач: такие, которые не требуют много ввода/вывода, но чувствительны к скорости выполнения операций, и такие, которые наоборот нетребовательны к скорости отклика, но выполняют много операций ввода/вывода.

Решение:
Для повышения приоритета ввода/вывода процесса используйте следующую команду:

# ionice -c1 -n0 -p<PID>

Где:

  • -c1 указывает класс реального времени
  • -n0 задаёт наивысший приоритет
  • -p <PID> указывает идентификатор процесса

Понизить приоритет ввода/вывода процесса можно командой:

# ionice -c2 -n4 -p<PID>

Где:

  • -c2 указывает класс best-effort
  • -n4 задаёт приоритет 4

Чтобы узнать текущий приоритет ввода/вывода процесса, выполните команду:

# ionice <PID>

Например:

# ionice 9709
realtime: prio 7

За подробной информацией о ключах команды ionice, обращайтесь к руководству, которое доступно по команде man ionice.

Применения
Если текущему командному интерпретатору задать класс idle, то все команды, которые из него вызываются, будут тоже выполняться в классе idle. Чтобы это сделать, нам понадобится переменная $$ интерпретаторов bash и sh.

Например:

# echo $$
29033

Этот вывод означает, что PID вашего текущего интерпретатора равен 29033. Если вы хотите назначить назначить ему класс idle, выполните команду:

# ionice -c3 -p$$

Теперь всё, что вы делаете в этом интерпретаторе, выполняется в классе idle.

Другим специальным применением ionice является приоритезация системных бекапов. Вы можете изменить приоритет ввода/вывода архивирующего программного обеспечения так, чтобы оно не мешало другим приложениям в системе.

Примечание: приоритеты и классы ввода/вывода поддерживаются начиная с версии ядра 2.6.13, при использовании планировщика ввода/вывода CFQ. В Red Hat Enterprise Linux 5 для того, чтобы узнать какой планировщик используется в данный момент, используйте команду cat /sys/block/[sh]d[a-z]*/queue/scheduler. Текущий планировщик будет выделен квадратными скобками..

Например, следующий вывод показывает, что сейчас используется планировщик CFQ:

$ cat /sys/block/[sh]d[a-z]*/queue/scheduler
noop anticipatory deadline [cfq]


Как в Red Hat Enterprise Linux 5 настроить мост для Xen на интерфейсе, отличном от eth0?

Last modified on 2009-05-27 19:53:42 GMT. 0 comments. Top.

Система: Red Hat Enterprise Linux 5

Проблема:

Конфигурация Xen по-умолчанию автоматически включает в мост xenbr0 интерфейс eth0. Однако, в некоторых случаях бывает желательно включить в мост интерфейс, отличный от eth0, чтобы обеспечить гостевым системам доступ к другой сети.

Решение:

Для того, чтобы включить в мост xenbr0 интерфейс, отличный от eth0, необходимо передать дополнительный параметр скрипту network-bridge в файле /etc/xen/xend-config.sxp. Измените строку

(network-script network-bridge)

так, чтобы она включала имя интерфейса, который нужно включить в мост:

(network-script 'network-bridge netdev=eth1')

В этом примере, интерфейс eth1 будет включён в мост xenbr0. Если вы используете bonded-интерфейс, конфигурация будет выглядеть так:

(network-script 'network-bridge netdev=bond0')

При следующем старте демона xend для настройки моста будет использована новая конфигурация. Чтобы убедиться в правильности новой конфигурации, используйте команду brctl:

# brctl show
bridge name	bridge id		STP enabled	interfaces
virbr0		8000.000000000000	yes
xenbr0		8000.feffffffffff	no		peth1
							vif0.0

В этом примере, peth1 указан, как интерфейс входящий в мост xenbr0. Это означает, что интерфейс eth1 был корректно включён в мост.

Если необходимо, чтобы в мост входило несколько сетевых интерфейсов, например eth0 и eth1, прочитайте инструкции в совете Как объединить несколько сетевых интерфейсов Xen-хоста в мост, доступный гостевым системам?.


Где найти дополнительную информацию для отладки autofs?

Last modified on 2009-05-26 18:23:58 GMT. 0 comments. Top.

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

Сначала настройте syslog писать сообщения уровня daemon.debug в отдельный файл. Это поможет в дальнейшем отбирать необходимые сообщения. Добавьте такую строку в файл /etc/syslog.conf:

daemon.debug /var/log/autofs

Перегрузите syslog:

service syslog reload

Разрешите режим отладки демона automount. В карте auto.master добавьте флаг --debug в нужной строке.

Например, у нас есть такая строка в файле auto.master:

/autofoo auto.foo --timeout=60

Измените её на следующую:

/autofoo auto.foo --timeout=60 --debug

Перегрузите autofs:

service autofs reload

В результате, autofs начнёт писать подробную информацию о своей работе в журнальный файл /var/log/autofs.

После того, как вы получили необходимую информацию, стоит отменить внесённые изменения. Удалите строки, добавленные в конфигурационные файлы, и перезапустите сервисы autofs и syslog.


Как объединить несколько сетевых интерфейсов Xen-хоста в мост, доступный гостевым системам?

Last modified on 2009-05-24 19:19:16 GMT. 0 comments. Top.

Создайте скрипт со следующим содержанием и назовите его /etc/xen/scripts/network-xen-custom:

#!/bin/sh
# network-xen-custom
# Выйти, если что-то пойдёт не так
set -e
# Первый аргумент -- это операция
OP=$1
shift
script=/etc/xen/scripts/network-bridge
case ${OP} in
        start)
                $script start vifnum=0 bridge=xenbr0 netdev=eth0
                $script start vifnum=1 bridge=xenbr1 netdev=eth1
                ;;
        stop)
                $script stop vifnum=0 bridge=xenbr0 netdev=eth0
                $script stop vifnum=1 bridge=xenbr1 netdev=eth1
                ;;
        status)
                $script status vifnum=0 bridge=xenbr0 netdev=eth0
                $script status vifnum=1 bridge=xenbr1 netdev=eth1
                ;;
        *)
                echo "Unknown command:${OP}"
                echo 'Valid commands are: start, stop, status'
                exit 1
esac

Убедитесь, что этот скрипт имеет установленный бит выполнения:

chmod 755 /etc/xen/scripts/network-xen-custom

Отредактируйте файл /etc/xen/xend-config.sxp : закомментируйте вызов старого скрипта и добавьте строку с вызовом нового:

#(network-script network-bridge)
(network-script network-xen-custom)

Перезагрузите систему, чтобы новый интерфейс-мост инициализировался корректно.


Как выключить цветовую подсветку в vi или vim из Red Hat Enterprise Linux

Last modified on 2009-05-24 09:24:05 GMT. 0 comments. Top.

Система: Red Hat Enterprise Linux, все версии

Проблема: В Red Hat Enterprise Linux команда vi является псевдонимом текстового редактора vim, улучшенной версии vi. Некоторым людям не нравится цветной вариант и подсветка в vim и они хотят того же стиля, как в старом vi.

Решение:

Самый простой способ решения этой проблемы — выключить синтаксическую подсветку в vim. Введите следующую команду в vim для отключения синтаксической подсветки:

:syntax off

Если вы захотите опять включить цвета и подсветку, просто введите:

:syntax on

Примечание: если вы хотите, чтобы запрет подсветки синтаксиса сохранялся при последующих запусках vim для данной учётной записи, вы можете отредактировать файл .vimrc в домашнем каталоге пользователя.

Выполните команду:

vi ~/.vimrc

Добавьте следующую строку в файл .vimrc, чтобы запретить подсветку синтаксиса для текущей учётной записи:

syntax off

Если вы захотите вернуть обратно синтаксическую подсветку в vim, укажите “syntax on”.

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

:help
:help syntax


Как избежать неправильной нумерации сетевых карт в системах Red Hat Enterprise Linux с несколькими сетевыми интерфейсами?

Last modified on 2009-05-20 15:21:23 GMT. 0 comments. Top.

Система: Red Hat Enterprise Linux 5

Проблема:

Большинство устройств нумеруются ядром Linux в соответствии с их порядком в PCI-таблице системного BIOS. Наполнением этой таблицы занимается сам BIOS. Поскольку порядок устройств в этой таблице на разных системах не обязательно последовательный, устройства могут нумероваться ядром по-разному. Обычно при определении порядка устройств на шине используются номер шины, номер устройства и номер функции. Некоторые системы имеют несколько шин, например шину PCI и шину PCI-X.

Решение:

Для того, чтобы избежать случаев перенумеровывания системных сетевых интерфейсов, необходимо использовать параметр HWADDR=. Например, следующая строка может быть добавлена в любой из файлов /etc/sysconfig/network-scripts/ifcfg-ethN:

HWADDR=

Если параметр “HWADDR=” не используется, то при перезагрузках может происходить периодическое переименование устройств.

Пример

ifconfig -a | grep HW

__tmp1174018308 Link encap:Ethernet  HWaddr 00:1D:09:6A:78:EA
eth1      Link encap:Ethernet  HWaddr 00:1D:09:6A:78:EC
eth2      Link encap:Ethernet  HWaddr 00:15:17:19:39:38
eth3      Link encap:Ethernet  HWaddr 00:15:17:19:39:39

В вышеприведённом примере вы можете видеть, что устройство eth0 после перезагрузки было переименовано в “__tmp1174018308”. Чтобы избежать повторения такой проблемы, задайте параметр “HWADDR=” в файле /etc/sysconfig/network-scripts/ifcfg-eth0 следующим образом:

Ethernet Device
DEVICE=eth0
BOOTPROTO=static
HWADDR=00:1D:09:6A:78:EA
ONBOOT=yes