вторник, 15 декабря 2009 г.

RDP 7 256 цветов

В Remote Desktop 7ой версии минимальная глубина цвета ограничена 15 бит. На медленных подключениях это доставляет массу неудобств. Победить довольно просто -
открываем "Подключение к удаленному рабочему столу" (Пуск - выполнить - mstsc), выставляем нужные параметры, не обращая внимания на глубину цвета. Далее внизу жмем "Сохарнить как". Получившийся файл открываем в блокноте и правим строку

session bpp:i:16
16 в данном случае глубина цвета в 16 бит, нам же нужно 8 бит. Меняем, сохраняем, запускаем получившийся rdp-файл.

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

Incorrect information in file: './mysql/host.frm'

После сбоя MySQL возможно повреждение служебных баз.

При старте в лог сыпится примерно следующее:

InnoDB: Database was not shut down normally!
InnoDB: Starting crash recovery.
InnoDB: Reading tablespace information from the .ibd files...
InnoDB: Restoring possible half-written data pages from the doublewrite
InnoDB: buffer...
InnoDB: Starting log scan based on checkpoint at
InnoDB: log sequence number 0 49614.
InnoDB: Doing recovery: scanned up to log sequence number 0 49614
InnoDB: Started; log sequence number 0 49614
[Note] Recovering after a crash using /var/log/mysql/mysql-bin
[Note] Starting crash recovery...
[Note] Crash recovery finished.
[ERROR] /usr/sbin/mysqld: Incorrect information in file: './mysql/host.frm'
[ERROR] /usr/sbin/mysqld: Incorrect information in file: './mysql/host.frm'
[ERROR] Fatal error: Can't open and lock privilege tables: Incorrect information in file: './mysql/host.frm'



В том числе это актуально для таблиц db, func, proc, user и пр.

Если бекапов нет, то придется заново инициализировать служебные базы MySQL. Для этого первым делом сохраняем в надежно место содержимое /var/lib/mysql и /var/log/mysql на случай, если что-то пойдет не так.

К тому же данные о пользователях будут утеряны и их придется создавать заново, естественно нужно будет дать те же права и пароли, которые были ранее (ниже я приведу пример).

Итак, сохранив данные двух вышеуказанных каталогов, удаляем содержимое /var/lib/mysql/mysql/* (Обратите внимание, удалить нужно содержимое именно подкаталога mysql в каталоге /var/lib/mysql)

Инициализируем базу данных
#mysql_install_db

Вводим новый (в смысле старый пароль рута, вы же его помните ;))
dpkg-reconfigure mysql-server-5.0

запускаем MYsql
/etc/init.d/mysql start

Под рутом смотрим список баз, которые увидел мускуль
mysql -u root -p
SHOW DATABASES;

На выходе вы получите список баз.

Теперь создаем нужных пользователей и назначаем им права на базы (повторить для всех нужных пользователей и баз)

GRANT ALL ON base_name.* TO user@localhost IDENTIFIED BY "yourpassword";
base_name - имя нужной базы
user - пользователь
yourpassword - пароль на базу

На этом все. Запускайте MySQL-зависимые сервисы и наблюдайте за результатом.

ЗЫ. И делайте, в конце концов, бекапы ;)

вторник, 7 апреля 2009 г.

Установка Zabbix на Debian Etch и Lenny

В статье описывается процесс установки системы мониторинга Zabbix на Debian 4.0 (Etch) и 5.0 (Lenny). Установка будет производиться из исходников нестабильного дистрибутива.
На момент написания статьи, текущая стабильная версия Zabbix - 1.6.4.

Статья написана так, что вы можете просто копировать комманды непосредственно в консоль.

1. Первым делом нужно добавить в /etc/sources.list ссылку на исходники из нестабильного дистрибутива sid (используется зеркало яндекса)

echo "deb-src http://mirror.yandex.ru/debian/ unstable main contrib non-free" >> /etc/apt/sources.list

2. Далее обновляем кеш пакетов

apt-get update

3. Ставим зависимости для сборки Zabbix на Lenny*

apt-get install debhelper libsnmp9-dev libmysqlclient15-dev dpatch automake1.9 po-debconf libpq-dev libcurl4-gnutls-dev libldap2-dev libiksemel-dev libopenipmi-dev gcc

*в Etch нет пакета libcurl4-gnutls-dev, поэтому для установки следует использовать libcurl3-gnutls-dev.

5. Ставим зависимости для работы Zabbix.

apt-get install mysql-server apache2 php5 php5-mysql php5-gd dbconfig-common fping

6. Качаем исходники Zabbix в /tmp (или куда больше нравится)

cd /tmp
apt-get source zabbix


7. Собираем Заббикс

cd /zabbix-1.6.4
dpkg-buildpackage


8. Будут собраны пакеты zabbix-server-mysql, zabbix-server-pgsql, zabbix-proxy-mysql, zabbix-proxy-pgsql, zabbix-agent и zabbix-frontend.
Определитесь с выбором СУБД для Zabbix и установите нужные пакеты через

cd ..
dpkg -i <имя пакета>.deb


Врят ли при первоначальной установке вам понадобится устанавливать zabbix-server и zabbix-proxy на одной машине, поэтому можно обойтись только заббикс-сервером. Так же не забывайте, что сервер и прокси по умолчанию встают на один порт.

В ходе установки будут заданы вопросы про настройки СУБД и базу Заббикса.

9. После окончания установки надо поправить два параметра в php5.ini
Открывайте в любимом редакторе /etc/php5/apache2/php.ini и правите пару строк следующим образом (часовой пояс указан для Московского времени)

timezone = Europe/Moscow
max_execution_time = 300


10. Создаем в конфиге апатча алиас на zabbix. В /etc/apache2/sites-available добавляем строку

Alias /zabbix /usr/share/zabbix

перед закрывающим тегом </VirtualHost>

11. Перезапускаем апатч

/etc/init.d/apache2 restart


12. Рестартим заббикс-агент

/etc/init.d/zabbix-agentd restart

13. админка доступна по адресу http://my-zabbix-server/zabbix
Возможно, в начале вам потребуется донастроить заббикс через веб-интерфейс, а далее
логин - admin
пароль - zabbix

пятница, 13 февраля 2009 г.

Openfire - Часть 2. Openfire+Red5+Spark+SSO на Windows

При написании статьи я использовал материал с http://www.igniterealtime.org/community/docs/DOC-1362 (англ).


Оф.сайт Опенфаера, Спарка и плагинов к опенфаеру и спарку - http://www.igniterealtime.org/

Установка опенфаера, прикрученного к АД в первой части цикла статей про Openfire.

Моя площадка:

Сервер - Win2k3 SP2R2 rus, с последними обновлениями.
Клиенты - WinXP SP3, с последними обновлениями, IE6
Режим работы AD - смешанный.
Openfire 3.6.3
Spark 2.5.8
Red5-plugin for Openfire - 0.1.04
Red5-plugin for Spark - 0.0.6

И так, у нас в организации возникла необходимость внедрения видеоконференций. После продолжительного поиска опенсорс решений, я пришел к выводу, что не за чем изобретать велосипед, и все можно реализовать через джаббер-сервер Openfire c плагином Red5.
Ранее, у нас использовался клиент Pandion, но я не смог найти ред5-плагина к нему, хотя, в природе он вроде бы существует.

Т.к. у нас присутствует Актив Директори, то и джаббер-аккаунты привязаны к нему, ну и чтобы не заставлять бедных юзеров вводить пароли, нужна поддержка SSO

В общем, приступим. Первым делом понадобится пакет Support Tools, для вашей версии серверной винды, где, собственно и будет развернут опенфаер-сервер. Он есть на диске с виндой, то ли на первом, то ли на втором. Вроде на первом.

Настройка серера Windows для поддержки Single Sign-On в Openfire

1. Заходим на контроллер домена (далее КД) админом.

2. Создаем учетку в Active Directory (далее AD, АД), по умолчанию она должна быть в группе "Пользователи домена". Проверяем это. Кстати, у нас уже должа быть учетная запись, через которую Openfire (далее ОФ) коннектится к АД. Ее можно посмотреть в веб-админке ОФ, в разделе System Properties. Учетка должна быть с неограниченным сроком пароля и запретом его изменения.
В моем примере, учетка будет называться "xmpp-openfire" (осталось от англоязычного ХауТу. Если интересно, у меня она просто "of").

3.Идем в "програм файлс\саппорт тулс". Убеждаемся в наличии файла setspn.exe.

4. Теперь создаем "Kerberos XMPP SPN" (хрен иво знает че это, влом вкуривать %) ) для нашей опенфаеровской учетки (эта команда и последующие пишется в одну строку)

setspn -A xmpp/servername.domain.com@REALM.COM xmpp-openfire

servername.domain.com - полное доменное имя вашего КД (full quality doman name, FQDN), а после собаки, имя домена в верхнем регистре (это важно).
xmpp-openfire - имя вашей учетной записи для ОФ.

Результатом выполнения будет что-то типа

Registering ServicePrincipalNames for CN=xmpp-openfire,OU=OU_Users,DC=realm,DC=сщь
xmpp/servername.domain.com@REALM.COM
Updated object


5. Ищем в суппорт тулс файл ktpass.exe. Находим и радуемся. теперь мы должны привязать "Kerberos XMPP SPN" к нашей оф-учетке.

ktpass -princ xmpp/servername.domain.com@REALM.COM -mapuser xmpp-openfire@domain.com -pass **** -ptype KRB5_NT_PRINCIPAL

Тут о же самое.
servername.domain.com - полное доменное имя вашего КД (full quality doman name, FQDN), а после собаки, имя домена в верхнем регистре (это важно).
xmpp-openfire - имя вашей учетной записи для ОФ.
xmpp-openfire@domain.com - наша учетка@имя домена в нижнем регистре. Звездочтками отмечен пароль для этой учетки, соответственно, замените на свой.

на выходе получим что-то типа

Targeting domain controller: servername.domain.com
Successfully mapped xmpp/servername.domain.com to xmpp-openfire.
Key created.
Account of has been set for DES-only encryption.


6. Далее, мы должны создать keytab файл. он создается с помощью тулзы ktab, лежащей в каталоге Java/JRE. Я нашел этот каталог в папке опенфаер\jre\bin. В английском хауту написано, что версия java должна быть не ниже 1.6. В комплекте с ОФ 3.6.3 идет нужная версия. И так, выполняем

ktab -k xmpp.keytab -a xmpp/servername.domain.com@REALM.COM

оно попросит нас пароль для этой учетки, смело даем че нас просят.

на выходе а-ля

Password for xmpp/servername.domain.com@REALM.COM:****
Done!
Service key for xmpp/servername.domain.com@REALM.COM is saved in xmpp.keytab


оно создаст в этой же директории файл xmpp.keytab. Пущай там и лежит.

7. Идем снова в суппорт тулз, ищем и находим файло ktpass.exe. Выполняем

ktpass -princ xmpp/servername.domain.com@REALM.COM -mapuser xmpp-openfire@domain.com -pass **** -ptype KRB5_NT_PRINCIPAL -out xmpp.keytab

Заменяем, что нужно, как в пункте 5. На выходе имеем типа

Targeting domain controller: servername.domain.com
Failed to set property "servicePrincipalName" to "xmpp/servername.domain.com" on Dn
"CN=of,OU=OU_Users,DC=realm,DC=com": 0x14.
WARNING: Unable to set SPN mapping data.
If of already has an SPN mapping installed for xmpp/servername.domain.com, this i
s no cause for concern.
Key created.
Output keytab to xmpp.keytab:
Keytab version: 0x502
keysize 56 xmpp/servername.domain.com@REALM.COM ptype 1 (KRB5_NT_PRINCIPAL) vno 4 etype
0x3 (DES-CBC-MD5) keylength 8 (0xf185cb081f830e2f)
Account of has been set for DES-only encryption.


Как видите, оно заругалась на что-то, ну, и ф иг с ним. файлег создало и ладушки.

8. Копируем xmpp.keytab в каталог опенфаер\resourses. Я брал кейтаб изкаталога Java, а не саппорт тулс, несмотря на то, что второй мы создавали позже. За то первый весит больше =))

Настройка Openfire для SSO + Kerberos используя GSSAPI

1. Идем в каталог опенфаер\conf и создаем там файл gss.conf со следующим содержанием

com.sun.security.jgss.accept {
com.sun.security.auth.module.Krb5LoginModule
required
storeKey=true
keyTab="C:/Program Files/Openfire/resources/xmpp.keytab"
doNotPrompt=true
useKeyTab=true
realm="REALM.COM"
principal="xmpp/servername.domain.com@REALM.COM"
debug=true;
};


realm="REALM.COM"
и
principal="xmpp/servername.domain.com@REALM.COM"
меняете под себя.

2. На серваке идем в катлог винды и создаем там файл krb5.ini. вот егосодержание.

[libdefaults]
default_realm = REALM.COM
default_tkt_enctypes = rc4-hmac des3-cbc-sha1 des-cbc-crc des-cbc-md5
default_tgs_enctypes = rc4-hmac des3-cbc-sha1 des-cbc-crc des-cbc-md5
permitted_enctypes = rc4-hmac des3-cbc-sha1 des-cbc-crc des-cbc-md5

[realms]
REALM.COM = {
kdc = kdc1.domain.com
admin_server = kdc1.domain.com
default_domain = domain.com
}

[domain_realms]
domain.com = REALM.COM
.domain.com = REALM.COM


REALM.COM везде меняем на имя домена в верхнем регистре. В секции [realms], в первых двух пунктах указываем КД, в третьем имя домена. Кстати, я взеде уазал имя домена, т.к. ресолв домена, по умолчанию ведет на первый попавшийся КД.

3. Включаем поддержку GSSAPI в Опенфаере. идем в каталог опенфаер\конф и видим там файл openfire.xml. Делаем копию этого файла, на всяк случай...

В конец файла, перед закрывающим тегом </jive> добавляем следующее


<!-- sasl configuration -->
<sasl> 
  <mechs>GSSAPI</mechs>  
  <!-- Set this to your Keberos realm name which is usually your AD domain name in all caps. -->
  <realm>REALM.COM</realm>  
  <gssapi> 
  <!-- You can set this to false once you have everything working. -->
  <debug>true</debug>  
  <!-- Set this to the location of your gss.conf file created earlier -->
  <!-- "/" is used in the path here not "\" even though this is on Windows. -->
  <config>C:/Program Files/Openfire/conf/gss.conf</config>  
  <usesubjectcredsonly>false</usesubjectcredsonly> 
  </gssapi> 
</sasl>  
<authorization> 
  <classlist>org.jivesoftware.openfire.auth.DefaultAuthorizationPolicy</classlist> 
  </authorization>



REALM.COM меняем под себя, остальное оставляем как есть.

4. Идем в опенфаер, если запущен, или запускаем, если нет.
На вкладке System Properties изменяем/добавляем параметр "xmpp.fqdn". В нашем примере это "servername.domain.com", т.е. FQDN КД.

Перезапускаем ОФ.

Настройка виндового клиента

Копируем файл krb5.ini с сервака в каталог винды на клиенте. Правим реестр.

Для Windows 2000 SP4, Windows 2003 Server или Windows Vista:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Kerberos\Parameters
Value Name: AllowTGTSessionKey
Value Type: REG_DWORD
Value: 1


Для винды XP SP2, SP3

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Kerberos
Value Name: AllowTGTSessionKey
Value Type: REG_DWORD
Value: 1


Ребутимся клиентом. Для чистоты эксперимента, можно грохнуть каталог Spark в профиле юзера.

Запускаем Спарк и радуемся. Если не радуемся, проверяем все с начала. За одним сравниваем с английским вариантом. Хотя, я сам копипастил, опкосячиться не должон...

Установка red5-плагина

Тут все довольно тривиально. Качаем ред5 с сайта, указанного в начале этого топега. Ложим red5.war в каталог опенфаер\plugins. Через некоторое время опенфаер запалит новый плагин и автоматически его подключит. Перезапускаем Опенфаер.

В папке плагинс\ред5\Spark будет лежать red5-plugin.jar. Его копируем в папку плагинс у Спарка и перезапускаем спарк. Внимательно изучаем новые элементы меню в Спарке. Да, для корректной работы должен быть установлен flashplayer plugin для браузеров.

вторник, 27 января 2009 г.

Супер робот


17 рабочих дней / полдня отдыха

хит этой еще не законченной "рабочей недели".


В голове моей - электронные пластинки.
300 гигабайт - без задержки и заминки.

Может потому я не очень многословен,
Потому, что мозг мой супер-мега-электронный

У меня в груди бьется сердце из металла
Я не знал любви, много это или мало

Может потому я так мало тока трачу,
Потому, что никогда не смеюсь я и не плачу


Я супер робот – сделан из железа
Супер электронный мозг и зажигание – супер пьеза
Я супер робот – все мне по плечу
Не курю, не пью и не торчу

У меня внутри очень сложные процессы
Электронный шквал, навороченный процессор.

Может потому я не очень симпатичный,
Потому, что вид мой очень даже необычный

Иногда я сплю, отключившись от сомнений,
Погрузившись в треск электронных сновидений.

Может потому для людей так много значу,
Потому, что никогда ничего не напортачу

среда, 21 января 2009 г.

Джаббер - что за зверь?

В связи с постоянно учащающимися проблемами с ICQ и по сути объявлением открытой войны альтернативным клиентам, все больше и больше пользователей присмотривается к джабберу.

Джаббер - (джа́ббер; досл. пер. с англ. — болтовня, трёп) — открытый протокол для быстрого обмена сообщениями и информацией о присутствии между любыми двумя абонентами Интернет.

Более подробное объяснение можно с легкостью найти в википедии, а тут я постараюсь объяснить в чем же преимущество джаббер перед другими протоколами, и вышеупомянутой аськой в частности.

Во-первых, джаббер реализован на открытом (читай бесплатном) XMPP-протоколе и разработчики не требует отчислений за его использование.

Во-вторых, и на мой взгляд, это главное преимущество, джаббер децентрализован. Пожалуй, проще всего провести параллель с почтой. В Сети существует огромное количество корпоративных, частных и просто халявных почтовых серверов. По сути, любой может зарегистрировать доменное имя vasya-pupkin.ru, купить статический IP-адрес и, да хоть у себя дома, поднять почтовый сервак. На нем можно будет создать любое количество почтовых ящиков с произвольными названиями. При этом, если кто-то захочет послать на такой ящик письмо, то остальные почтовые сервера без проблем разберутся где найти адресата.
Так же и с джаббером. Можно поднять свой джаббер сервер, доступный из интернета, и завести на нем джаббер-аккаунты. Кстати, и выглядеть они будут так же, как адреса электронной почты - vasya@vasya-pupkin.ru. Естественно, проще воспользоваться публичными джаббер-серверами, например jabber.ru

В-третьих, возможности джаббера несравнимо выше, чем у конкурентов. Сам по себе джаббер позволяет делать через себя транспорты в аську, мейл-агент, MSN, yahoo и многие другие. Так же через джаббер доступны аудио-чаты и видеоконференции. И вообще, каждый может заняться расширением функционала джаббер, поэтому в будущем нас ждет появление новых сервисов.

И, в-четвертых, из открытости и распространенности решений джаббер-серверов и джаббер-клиентов, вытекает немаловажный аспект для корпоративного сектора. Это уже упомянутые мной видео и аудиоконференции, экономия на траффике, когда он не уходит, без необходимости, за пределы корпоративной сети. И самый важный аспект - безопастноть и полный контроль. В настоящий момент, огромное количество пользователей решают деловые вопросы через ICQ, что в корне небезопастно.

В будущем, мои статьи будут ориентированы именно на корпоративных пользоватей (читай администраторов ;) ) джаббер.

Для пользователей миранды - скачать, если надо, плагин и в настройках плагина выставить "клиент ID" - &RQ, ICQ6, или еще какой.... Так работает, но раз на раз...

UPD: исправленная версия плагина Miranda IM ICQ
Есть данные, что эта dll не работает со сборкой хоткоффи

правка  v0.2 (в тексте - пометки "правка", курсивом выделен предыдущий вариант)

Задача - поднять внутрикорпоративный сервер чата. С минимальными телодвижениями со стороны пользователей (в нашем случае их вообще нет). Имеем AD, так что незачем создавать отдельную базу данных пользователей. Идеально для этой цели подходит связка - сервер Openfire и клиент Pandion | Spark

Так же существует реализация SSO, в случае с сервером на Windows. Думаю, что и на Linux-сервере это можно реализовать, но данной целью пока не задавался. Т.о. для винды качаем еще патч-плагин Openfire, ссылку на который можно найти на форумах ру-борда (раздел для сисадминов). Кстати, родной Опенфаеровский клиент Spark у меня работать с SSO отказался.

правка: Spark из коробки заработал с виндовым сервером (v 3.6.3) через SSO. 


правка 2: нифига оно не заработало, а как оказалось, скешировало пароль... так, что мануал по настройке ищите во второй части части статей про Опенфаер.
Первым делом ставим скачанный Openfire, и после установки соглашаемся с его запуском. Вся админка идет через замечательный приятный глазу веб-интерфейс. На данный момент нет поддержки русского языка, но нафиг оно и не надо ;) Админка доступна по адресу http://localhost:9090 , ну или откуда вы там заходите...

Первоначальная настройка (если я чего-то не упомянул, оставляйте по дефолту):

1) выбираем понравившийся язык
2) в поле домен пишем имя своего AD-домена, напимер "domain.lc"
3) выбираем базу данных, где Опенфаер будет хранить свои данные. В простейшем случае - внутрення БД "Embedded Database", вот ее и берем. Кому интересно, с MySQL у меня тоже проблем не возникло.
4) Где хранить аккаунты. Наш выбор - Directory Server (LDAP)
5)* Server Type: Active Directory
* Host: вот тут можно указать имя любого контроллера домена, но я бы порекомендовал писать сюда сразу же имя домена, без указания конкретного сервера, т.к. в этом случае, Опенфаер будет искать через ДНС первый попавшийся Контроллер домена.
* На следующем пункте остановлюсь поподробнее, т.к. не все понимают что нужно писать в Base DN: Начиная с этого контейнера Опенфаер будет искать учтеные записи в AD.
И так, допустим, ваш домен "domen.lc", а учетные записи (про группы не забудьте) лежат в контейнере OU-Users.
Тогда пункт Base DN: будет выглядеть так
OU=OU-Users,DC=domain,DC=lc

Administrator DN: любая учетная запись с правами на чтение AD и пароль от нее. Учетка должна быть, естественно ниже корня Base DN: Указывать нужно только логин. Я рекомендую создать отдельную учетку с неограниченным сроком, запретом входа на компьютеры, забыть про нее и никогда не менять пароль. И вообще ей не пользоваться.
Жмем тест, убеждаемся, что все хорошо, если все плохо, смотрим что не так.
6) Profile Settings: User Mapping тупо жмем тест и смотрим как подмаппились пользователи. Тут проблем быть не должно
7) Profile Settings: Group Mapping аналогично предыдущему пункту, но только для групп пользователей.
8) Аккаунты администраторов Опенфаер. Указываем реальные логины без имени домена. Можно нажать "тест" и проверить как все заработает
9) Поздарвляю, жмем "логин" и попадаем в админку Опенфаера.

На этом пока все, в дальнейшем будем прикручивать SSO, создавать группы и на вкусное - мой скрипт автоматической установки Pandion, с автоматическими настройками.

Хост - Debian 4 ядро 2.6.24 etchnhalf . 

Стоит VirtualBox 2.1.0, в нем гость ВинХР. Виртуалка запускается при старте системы через rc.d командой

VBoxManage startvm "WinXP" -type vrdp

Гуев на хосте нет. Проблема в том, что если не выключить корректно виртуалку, хост при выключении падает в кернел паник.

Я написал скрипт выключения виртуальной машины, который пытается корректно выключить виртуальную машину, а в случае неудачи просто убивает относящиеся к ней процессы. Да и вообще, если не найдет запущенных машин пытается убить все Vbox`ы... так, на всякий случай ;)
скрипт можно (и нужно) сложить в /etc/init.d/vm.stop и сделать на него симлинки

ln -s /etc/init.d/vm.stop /etc/rc0.d/K08vm.stop
ln -s /etc/init.d/vm.stop /etc/rc1.d/K08vm.stop
ln -s /etc/init.d/vm.stop /etc/rc6.d/K08vm.stop

А вот, собссно и сам скрипт. Поддерживается несколько ВМ. Комментарии в коде.
Версия 0.2

#!/bin/sh

#v0.2
TIMEOUT=30 #Таймаут в секундах на заверщение работы. =DELAY*TIMEOUT. Для каждой виртуальной машины
DELAY=2 #Задержка проверки.
for VMS in WinXP W2k3 #Виртуальные машины через пробел. Регистрозависимо.
do
  COUNT=1
  if /usr/bin/VBoxManage showvminfo "$VMS" | grep "running" -c > /dev/null
  then /usr/bin/VBoxManage controlvm "$VMS" acpipowerbutton #Команда "нажать кнопку питания"
  # Гостевая машина должна выполнять какое-либо действие (логично, что это выключение или спячка)
  # при нажатии кнопки питания. Иначе она будет просто убита по таймауту.
  # К примеру, cерверные версии Windows по умолчанию, без входа в систему не реагируют на кнопку питания.
  echo -n Stopping Virtual Machine $VMS.
  until [ "$COUNT" -gt "$TIMEOUT" ]
  do
  sleep $DELAY
  echo -n .
  if /usr/bin/VBoxManage showvminfo "$VMS" | grep "powered off" -c > /dev/null
  then echo "done"
  break
  fi
  let "COUNT += 1"
  done
  if [ "$COUNT" -gt "$TIMEOUT" ]
  then echo -e '\E[31;40mtimeout. will be terminated.'; tput sgr0
  fi
  fi
done
killall -r VBox #На всякий случай, полюбас убиваею все VBox`ы



Форматирование кода уехало. Обращайте внимание на "левые" комментарии

На Win2k3 R2 SP2 столкнулся с проблемой. В логи стали сыпаться ошибки

Самостоятельное обновление не работает.

Стал искать причину и выяснил, что после обновленияя SP1 для WSUS, из IIS пропал виртуальный катлог Selfupdate.

Небходимо добавить вирт. каталог Selfupdate, путь - %systemdrive%:\Program Files\Update Services\Selfupdate. Права на чтение-запись, анонимный доступ и выолнение сценариев. 

Так, ну что ж... Как щас принято говорить, пиарю блог ;)

Блондинка, кот, шредер, админ, хуясе, о_О