Показаны сообщения с ярлыком SMF. Показать все сообщения
Показаны сообщения с ярлыком SMF. Показать все сообщения

понедельник, 23 ноября 2009 г.

Падение VNC server в Solaris 10 при смене языка

Если совершить ошибку и, подключаясь VNC, сменить язык, например на Russian UTF-8 (ru_RU.UTF-8) то VNC сервер падает.


В логе (/var/dt/Xerrors) наблюдается нечто вроде:
/usr/openwin/bin/xset:  bad font path element (#54), possible causes are:
    Directory does not exist or has wrong permissions
    Directory missing fonts.dir
    Incorrect font server address or syntax
Попытка вновь подключиться к серверу, запущенному с помощью inetd приводит к его падению. Dtlogin пытается несколько раз перезапустить Xvnc и отключает его, сообщая:
error (pid 22852): Server for display :2 can't be started.
Вылечить это (решить текущую проблему, но не исправить ПО Solaris) можно удалив файлы в папке:
# ls /var/dt/sdtlogin/
lastlang_1      lastlang_2      lastlang_:1     lastsettings_1  lastsettings_2
# rm /var/dt/sdtlogin/*
Для варианта запуска через Dtlogin необходимо перезапустить сервис:
# svcadm restart svc:/application/graphical-login/cde-login:default

суббота, 21 ноября 2009 г.

Настройка VNC в Solaris 10 - запуск с помощью Xserver

Аналогично рассмотренному: Настройка VNC в Solaris 10 - запуск с помощью dtlogin. VNC можно запускать при старте системы, но использовать идеологически более правильное хранение параметров запуска в SMF.
Скрипт
/usr/X11/bin/Xserver
считывает параметры запускаемого X-сервера из SMF:
# grep x11-server /usr/X11/bin/Xserver
    svcprop -q -p $1 application/x11/x11-server$INSTANCE
    PROPVAL=$(svcprop -p $1 application/x11/x11-server$INSTANCE)
Таким образом правильнее хранить параметры в базе SMF.
Скрипт, выполняющий данную операцию выглядит так:
#!/usr/bin/sh

# Xwindows is configured with text files under /usr/dt
# but these shouldn't be modified,
# make copied of them under /etc/dt and modify the copies

VNC_LIST="1 2"

if [ ! -d $HOME/.vnc ]
then
  mkdir -p /etc/dt/config
fi
cp /usr/dt/config/Xservers /etc/dt/config/

# Add the /etc/dt/config/Xservers to configure the extra connections to Xwindows
# Set properties for x11-server instances
for VNC in $VNC_LIST
do

  echo "   :${VNC}   Local local_uid@none root /usr/X11/bin/Xserver :${VNC}"\
  >> /etc/dt/config/Xservers
  INST=`svcs -H -o INST svc:/application/x11/x11-server:display${VNC} 2> /dev/null`
  if [ -n "${INST}" ]
  then
    svccfg delete application/x11/x11-server:display${VNC}
  fi
  svccfg -s application/x11/x11-server add display${VNC}
  svccfg -s application/x11/x11-server:display${VNC} addpg options application

  svccfg -s application/x11/x11-server:display${VNC} \
         setprop options/server = astring: \"/usr/X11/bin/Xvnc\"
  svccfg -s application/x11/x11-server:display${VNC} \
         setprop options/server_args = astring: \"-PasswordFile=${HOME}/.vnc/passwd\"
  svccfg -s application/x11/x11-server:display${VNC} \
         addpropvalue options/server_args astring: \"-AlwaysShared\"
 
  svcadm refresh application/x11/x11-server:display${VNC}

done

# Configure a password, this is prompted for before the user sees a login screen
echo "Please set VNC password"
if [ ! -d $HOME/.vnc ]
then
  mkdir $HOME/.vnc
fi
vncpasswd
chmod +r /root/.vnc/passwd

# Restarting dtlogin
svcadm restart svc:/application/graphical-login/cde-login:default
При такой конфигурации используется глубина цвета по умолчанию для X11 в Solaris:
# svcprop application/x11/x11-server | grep depth
options/default_depth integer 24
В остальном Xvnc запускается с теми же параметрами.
/usr/X11/bin/Xvnc :1 -depth 24 -PasswordFile=/root/.vnc/passwd -AlwaysShared  -auth /var/dt/A:1-i1a4Lw

пятница, 20 ноября 2009 г.

Настройка VNC в Solaris 10 - запуск с помощью dtlogin

Иногда возникает необходимость оставлять графическую сессию на сервере надолго (например, при инсталяции SAP или базы Oracle). При настройке VNC сервера в Solaris 10 c помощью SMF inetd через супердемон inetd закрытие VNC клиента приводит к закрытию сессии.
На страничке Salix Training Limited есть отличная статья как настроить VNC на запуск с помощью dtlogin (CDE login service) - VNC on Solaris 10.
Так как теперь VNC сервер идёт в комплекте с Solaris 10 (начиная с 5/08 - U5) предложенное Salix решение можно значительно упростить. Для двух (число определено в списке VNC_LIST) постоянно запущенных сессий достаточно выполнит скрипт:
#!/usr/bin/sh

# Xwindows is configured with text files under /usr/dt 
# but these shouldn't be modified,
# make copied of them under /etc/dt and modify the copies

VNC_LIST="1 2"

if [ ! -d $HOME/.vnc ]
then
  mkdir -p /etc/dt/config
fi
cp /usr/dt/config/Xservers /etc/dt/config/

# Add the /etc/dt/config/Xservers to configure the extra connections to Xwindows
for VNC in $VNC_LIST
do
  echo "   :${VNC}   Local local_uid@console root /usr/X11/bin/Xvnc\
  :${VNC} -PasswordFile=${HOME}/.vnc/passwd -AlwaysShared"\
  >> /etc/dt/config/Xservers
done

# Configure a password, this is prompted for before the user sees a login screen
echo "Please set VNC password"
if [ ! -d $HOME/.vnc ]
then
  mkdir $HOME/.vnc
fi
vncpasswd
chmod +r /root/.vnc/passwd

# Restarting dtlogin
svcadm restart svc:/application/graphical-login/cde-login:default

Подключаться можно будет к сессии :1 (5901) и :2 (5901). Параметры разрешения и глубины цвета виртуального дисплея можно изменить, добавив дополнительные параметры Xvnc:
  • -depth [8|15|16|24] - по умолчанию 16
  • -geometry WxH - по умолчанию 1024x768
Можно настроить и другие параметры. Подробнее можно посмотреть man -M /usr/X11/man Xvnc.

P.S.
При поиске ссылки на man страницу Xvnc для Solaris нашёл универсальную инструкцию по настройке VNC в Solaris 10: How to Set Up VNC to Provide a Solaris Guest Graphical Login в документе по виртуализации: System Administration Guide: Virtualization Using the Solaris Operating System. Ошибка относительно необходимости добавления сервиса в /etc/services осталась... Ошибку исправили в аналогичном документе по OpenSolaris.

среда, 18 ноября 2009 г.

Настройка VNC в Solaris 10 - запуск с помощью SMF inetd

В последних выпусках Solaris 10 (начиная с 5/08 - U5) поставляется VNC сервер, а именно RealVNC. Есть даже для него SMF сервис:
# svcs -l svc:/application/x11/xvnc-inetd:default
fmri         svc:/application/x11/xvnc-inetd:default
name         X server that displays to VNC viewers
enabled      false
state        disabled
next_state   none
state_time   Tue Nov 17 15:27:39 2009
restarter    svc:/network/inetd:default

Попытаемся его включить:
# svcadm enable svc:/application/x11/xvnc-inetd:default

И не получается:
# svcs -l svc:/application/x11/xvnc-inetd:default
fmri         svc:/application/x11/xvnc-inetd:default
name         X server that displays to VNC viewers
enabled      true
state        maintenance
next_state   none
state_time   Wed Nov 18 16:39:38 2009
restarter    svc:/network/inetd:default

Сервис описан как запускаемый с помощью супердемона inetd:
# svcprop svc:/application/x11/xvnc-inetd:default
inetd/name astring vnc-server
inetd_start/exec astring /usr/X11/bin/Xvnc\ -inetd\ -query\ localhost\ -once\ securitytypes=none

Беда собственно в том что сервис по имени vnc-server не определён в сервисах:
/etc/services

Добавим:
# printf "vnc-server\t5900/tcp\n" >> /etc/services

Можно перезапустить сервис:
# svcadm clear svc:/application/x11/xvnc-inetd:default

И чудо:
# svcs -l svc:/application/x11/xvnc-inetd:default
fmri         svc:/application/x11/xvnc-inetd:default
name         X server that displays to VNC viewers
enabled      true
state        online
next_state   none
state_time   Wed Nov 18 18:06:29 2009
restarter    svc:/network/inetd:default

пятница, 13 ноября 2009 г.

Перезапуск сервиса в состоянии maintenance или degraded

Бывает так что при проблемах с питанием одновременно выключается и сервер и массив.
И если этим массивом является Sun-овский T3, то сервер успевает загрузиться быстрее, а файловые системы с массива не успевают смонтироваться.
В Solaris 10 с его Solaris Service Management Facility от
svc:/system/filesystem/local
зависят более четырёх десятков сервисов в том числе: sshd, samba, nfs, smtp и многие другие.
Очевидны два варианта решения этой проблемы: отключение зависимостей или перезапуск сервиса filesystem/local и, конечно, простейший - перезагрузка сервера.
Зависимостей много и отключать их в целом не очень разумно, особенно samb-у и nfs.
Для ручного перезапуска сервиса необходимо подключиться к консоли сервера (sshd так-же не работает).
Решением проблемы может служить следующий скрипт:
#!/usr/bin/sh

# STA The abbreviated state of the service instance

PATH=/usr/sbin:/usr/bin

COLUMN=STA

# MNT maintenance
# DGD degraded

FRMI=svc:/system/filesystem/local:default



STATUS=`svcs -H -o ${COLUMN} ${FRMI}`

if [ ${STATUS} = MNT ]
then
{
echo "Clearing ${FMRI} maintenance status"
svcadm clear ${FMRI}
}
elif [ ${STATUS} = DGD ]
then
{
echo "Clearing ${FMRI} degraded status"
svcadm clear ${FMRI}
}
fi


Выполнять его можно через cron, например, раз в минуту:
* * * * * /root/clear_local_fs


Аналогичная проблема при монтировании файловых систем nfs
svc:/network/nfs/client:default
В этом случае скрипт так же подходит. Необходимо лишь поменять значение FMRI.

Что мне интересно - общие элементы Google Reader