This article is protected by the Open Publication
License, V1.0 or later. Copyright © 2005 by Red Hat,
Inc.
Original article: http://www.redhat.com/magazine/010aug05/departments/tips_tricks/
Перевод: © Иван Песин
Служба поддержки пользователей Red Hat получает технические вопросы со всего мира. Специалисты Red Hat ежедневно добавляют полученные вопросы и ответы на них в базу знаний Red Hat Knowledgebase. Доступ к ней возможен при наличии учетной записи на сайте redhat.com. Каждый месяц Red Hat Magazine знакомит читателей с Red Hat Knowledgebase, публикуя несколько самых свежих вопросов и ответов.
Да. В Red Hat Enterprise Linux 4 оболочка GNOME включает встроенный vnc-подобный сервис vino. Vino позволяет vnc-клиенту удаленно управлять рабочим столом GNOME зарегистрированного пользователя и поддерживает подключения в режиме зрителя. Для активации этой функциональности, соответствующий пользователь должен зарегистрироваться в системе, выбрать Applications --> Preferences --> Remote Desktop и отметить пункт Allow other users to view your desktop. Нажмите Close и ву а ля, удаленный vnc-клиент может подключаться к рабочему столу GNOME текущего пользователя, указав дисплей :0 .
Проблема:
Номера портов, через которые работает сервис NFS, задаются
сервисом portmap. Побочным эффектом этого является то, что номера
портов определяются случайным образом. Таким образом, порты по которым
работает сервис NFS меняются при каждом его перезапуске. Это представляет
определенную проблему для работы сервера NFS, находящегося за
пакетным фильтром, который разрешает доступ только к конкретным портам
системы.
Решение:
Первым шагом решения этой проблемы будет присвоение постоянного номера
порта каждому из сервисов NFS
(rquotad, mountd, statd и lockd). Не смотря на то, что эти сервисы
могут использовать любые неиспользуемые порты выше 1024,
рекомендуется просмотреть файл /etc/services
и найти незарезервированный диапазон портов. В наших примерах используется диапазон 10000-10005.
Большинство портов, используемых сервисами NFS, настраиваются в файле /etc/sysconfig/nfs
. Вам будет необходимо создать его, если он не существует. Содержимое файла должно быть приблизительно таким:
# NFS port numbers
STATD_PORT=10002
STATD_OUTGOING_PORT=10003
MOUNTD_PORT=10004
RQUOTAD_PORT=10005
Сервис lockd настраивается по-другому, потому что он
представляет собой модуль ядра. Чтобы задать номер порта для lockd,
добавьте в конец файла /etc/modprobe.conf
следующую строку:
options lockd nlm_tcpport=10000 nlm_udpport=10001
Если модуль уже используется, то чтобы изменения вступили
в силу, его нужно перезагрузить. Для этого используйте команды rmmod
и modprobe
. Однако, может быть, что данный модуль используется другими модулями. В этом случае может потребоваться перезагрузка системы.
После изменения конфигурации, вы можете посмотреть командой rpcinfo -p
<hostname>
на каких портах работают сервисы :
program vers proto port
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100021 1 udp 10001 nlockmgr
100021 3 udp 10001 nlockmgr
100021 4 udp 10001 nlockmgr
100021 1 tcp 10000 nlockmgr
100021 3 tcp 10000 nlockmgr
100021 4 tcp 10000 nlockmgr
100024 1 udp 10002 status
100024 1 tcp 10002 status
100011 1 udp 10005 rquotad
100011 2 udp 10005 rquotad
100011 1 tcp 10005 rquotad
100011 2 tcp 10005 rquotad
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100005 1 udp 10004 mountd
100005 1 tcp 10004 mountd
100005 2 udp 10004 mountd
100005 2 tcp 10004 mountd
100005 3 udp 10004 mountd
100005 3 tcp 10004 mountd
Теперь используемые порты не будут меняться при перезапуске NFS. Ниже приведен список портов, которые должны быть открыты в пакетном фильтре:
Теперь вы можете открыть порты в пакетном фильтре, чтобы клиенты могли монтировать сетевые тома. Если вы используете iptables
,
то можно использовать нижеприведенные команды, для разрешения доступа к
портам. Обратите внимание, что это лишь пример. В вашем конкретном
случае, команды могут отличаться:
iptables -A INPUT -p tcp -m tcp --dport 111 -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 111 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 2049 -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 2049 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 10000 -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 10001 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 10002:10005 -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 10002:10005 -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -j REJECT --reject-with icmp-port-unreachable
iptables -A OUTPUT -p tcp -m tcp --dport 111 -j ACCEPT
iptables -A OUTPUT -p udp -m udp --dport 111 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 2049 -j ACCEPT
iptables -A OUTPUT -p udp -m udp --dport 2049 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 10000 -j ACCEPT
iptables -A OUTPUT -p udp -m udp --dport 10001 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 10002:10005 -j ACCEPT
iptables -A OUTPUT -p udp -m udp --dport 10002:10005 -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -j REJECT --reject-with icmp-port-unreachable
Пакет Synaptics включает в себя программу syndaemon
.
Она отключает тачпад на время ввода с клавиатуры. После небольшой
задержки по окончанию ввода с клавиатуры, тачпад будет вновь
активирован.
Для запуска демона, откройте командный интерпретатор и введите:
syndaemon -d
Эта команда запускает программу в режиме демона. Программа будет работать в фоновом режиме, пока процесс syndaemon
не будет завершен или система не будет перезагружена.
За дополнительной информацией о программе syndaemon
обратитесь к странице руководства syndaemon
:
man syndaemon
Есть несколько способов определения пакетов, установленных в системе:
Первый, это отрыть файл /root/install.log
. Однако, в нем указаны только те RPM-пакеты, которые были установленны во время инсталляции Red Hat Enterprise Linux.
Чтобы узнать, какие пакеты установлены в системе в данный момент, можно использовать два метода:
Использовать графическую утилиту redhat-logviewer
(для Red Hat Enterprise Linux 3) или system-logviewer
(для
Red Hat Enterprise Linux 4). В ней есть раздел RPM Packages,
данные в котором обновляются ежедневно с помощью задания cron.
Использовать команду rpm
. Для вывода имен всех установленных пакетов RPM, выполните команду: rpm
-qa | less
Однако, оба метода не выводят даты установки пакета. Чтобы получить эту информацию, нужно указать команде rpm
ключ --last
. Например:
rpm -qa --last | less
Ключ --last
сортирует список пакетов в порядке времени установки так, что самые свежие пакеты оказываются первыми в списке.
Не все скрипты, поддерживающие параметры start/stop/status могут управляться с помощью chkconfig
. Скрипт должен отвечать следующим требованиям:
Ниже, в качестве примера, приведен скрипт /etc/init.d/smb
:
#!/bin/sh
#
# chkconfig: - 91 35
# description: Starts and stops the Samba smbd and nmbd daemons \
# used to provide SMB network services.
Приоритет запуска/останова (в примере -- 91 и 35,
соответственно) является важным параметром для сервисов, которые
зависят от других сервисов. Например, сервис portmap
должен запускаться перед nfs
.
Если скрипт не зависит от других сервисов, вы можете запускать его
после полной загрузки системы. В последнем случае, достаточно вызвать
скрипт из файла /etc/rc.d/rc.local
.
Для этого, выполните команду:
echo /etc/init.d/yourscript >> /etc/rc.d/rc.local
Установите на скрипт атрибут выполнения. Для этого введите:
chmod 0755 /etc/init.d/yourscript
Проблема:
Каждый раз при загрузке системы активируется маршрут zeroconf
(169.254.0.0). Вручную его можно удалить остановив пакетный фильтр и
удалив командой route
маршрут 169.254.0.0 / 255.255.0.0.
Ниже приведен пример вывода команды route
с активным маршрутом zeroconf:
# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.15.50.0 * 255.255.252.0 U 0 0 0 eth0
169.254.0.0 * 255.255.0.0 U 0 0 0 eth0
Решение:
Чтобы запретить активацию маршрута zeroconf во время загрузки системы, откройте в редакторе файл /etc/sysconfig/network
и добавьте в его конец переменную NOZEROCONF
:
NETWORKING=YES
HOSTNAME=localhost.localdomain
NOZEROCONF=yes
Дополнительная информация:
Узнать больше о zeroconf можно по адресу http://www.zeroconf.org/.
Процесс "зомби" -- это процесс, который больше не существует. Он обозначен символом "Z" (Zombie) в выводе команды ps
.
Такой процесс уже закончил свое выполнение с помощью
системного вызова exit(2), но по какими-либо причинам не получил
вызова wait(2) от своего родителя.
Процесс "зомби" не занимает никаких системных ресурсов, кроме записи в таблице процессов, которая поддерживается операционной системой. Вы спокойно можете игнорировать такие процессы. Они будут удалены из таблицы процессов, когда их родитель закончит свое выполнение или система будет перезагружена.
Чтобы скрипт мог взаимодействовать с утилитой chkconfig
и автоматической системой запуска/останова сервисов на разных уровнях выполнения, он должен соответствовать двум требованиям.
Первое: он должен содержать секцию в комментариях, которая позволяет утилите chkconfig
управлять данным скриптом. Вот пример:
#!/bin/bash
#
# chkconfig: 345 10 90
# description: This is where you put a description of your service
Число 345 после директивы chkconfig
обозначает
уровни выполнения, на которых данный сервис будет выполнятся
по-умолчанию. В нашем примере, это будут уровни 3, 4 и 5.
Число 10 определяет приоритет запуска. Чем меньше число, тем выше приоритет, и тем раньше сервис будет запущен. Число 90 задает приоритет останова. Чем меньше число, тем выше приоритет, и тем раньше сервис будет остановлен при смене уровней выполнения.
Второе: скрипт должен поддерживать параметры командной строки "start
" и "stop
". При запуске на необходимом уровне выполнения, скрипт будет вызываться с параметром "start
", а при останове -- с параметром "stop
". При запуске скрипт должен создавать файл-блокировку в каталоге /var/lock/subsys/
.
Если это не будет сделано, скрипт будет автоматически запускаться, но
не будет автоматически останавливаться. Реализовать это можно следующим
образом:
start() {
...
touch /var/lock/subsys/servicename
}
stop() {
...
rm -f /var/lock/subsys/servicename
}
После того, как вы создали скрипт, который отвечает этим двум требованиям, скопируйте его в каталог /etc/init.d/
и выполните команду:
chkconfig --add servicename
Эта команда регистрирует сервис и создает необходимые ссылки в соответствующих каталогах rcX.d
. Теперь вы можете администрировать этот сервис с помощью команды chkconfig
.