Исходные данные - 2 жестких диска в RAID1, на них Debian. Возникла ситуация, когда на дисках закончилось свободное место, т.е. необходима замена HDD. Я не смог найти в инете полного и четкого описания процесса, т.е. бест практик, поэтому напишу свои действия с подробными разъяснениями.
При написании использовал материал

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

Итак, предположим, винты (/dev/sda и /dev/sdb)разбиты на 3 раздела -

md0 - своп
md1 - корень (ext3)
md2 - данные, да что угодно (ext3), его-то и будем увеличивать

Может быть разделов у вас будет больше, значения не имеет, главное смысл.

md0 соответствует /dev/sda1 и /dev/sdb1
md1 - /dev/sda2 и /dev/sdb2
md2 - /dev/sda3 и /dev/sdb3

1. Если вы будете выключать машину, то можно пропустить это пункт.
Помечаем как сбойные и удаляем все разделы /dev/sdb из состава наших md (еще 10 раз подумайте, может все же лучше не на ходу?)

mdadm /dev/md0 --fail /dev/sdb1 --remove /dev/sdb1
mdadm /dev/md1 --fail /dev/sdb2 --remove /dev/sdb2
mdadm /dev/md2 --fail /dev/sdb3 --remove /dev/sdb3


2.Выньте /dev/sdb и замените его на новый. Если выключали машину, то загрузитесь с оставшегося /dev/sda.

3. С помощью fdisk на новом /dev/sdb создайте нужные разделы и sdb3 большей емкости. Можно воспользоваться sfdisk, чтобы сначала клонировать разделы, а потом пересоздать sdb3, что может сэкономить время, если разделов у вас много, да и вообще так, имхо удобнее. Я подробно опишу процесс с применением sfdisk.

3.1 Скопируйте таблицу разделов

sfdisk -d /dev/sda | sfdisk /dev/sdb

3.2 Пересоздаете /dev/sdb3

fdisk /dev/sdb

удалите раздел (команда d)
создайте раздел (команда n, по умолчанию предложит максимальную емкость)
измените тип раздела на Linux raid autodetect (команда t, затем если хотите L для подсказки, нужный код - fd)
в конце - w для сохранения.

На выходе имеем те же самые разделы, что и на /dev/sda, только /dev/sdb3 больше

4. Включаем /dev/sdb в состав существующего RAID1

mdadm --add /dev/md0 /dev/sdb1
mdadm --add /dev/md1 /dev/sdb2
mdadm --add /dev/md2 /dev/sdb3


Во время процесса синхронизации, чтобы не терять времени добавьте загрузчик на /dev/sdb.

grub
grub>device (hd0) /dev/sdb
grub>root (hd0,1)
grub>setup (hd0)
grub>quit


Дождитесь окончания процесса синхронизации, наблюдать за прогрессом можно с помощью
watch cat /proc/mdstat

5. Удалите /dev/sda из состава RAID1 или выключите машину. Если выключали, то загрузитесь с /dev/sdb.

mdadm /dev/md0 --fail /dev/sda1 --remove /dev/sda1
mdadm /dev/md1 --fail /dev/sda2 --remove /dev/sda2
mdadm /dev/md2 --fail /dev/sda3 --remove /dev/sda3


6. Поменяйте /dev/sda на новый и выполните пункт 3 (/dev/sda <-> /dev/sdb)

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

7.1 Включайте только не измененные разделы /dev/sdа в состав существующего RAID1

mdadm --add /dev/md0 /dev/sda1
mdadm --add /dev/md1 /dev/sda2


Дождитесь окончания..
7.2 Увеличьте размер md2 до максимального

mdadm --grow /dev/md2 --size=max

7.3 Расширьте раздел md2

resize2fs /dev/md2

8. И вот только теперь включайте /dev/sda3 в состав /dev/md2. Это следует выполнить, чтобы обезопасить себя от сбоя во время расширения раздела, т.к. если что-то пойдет не так, вы потеряете все данные с /dev/md2 (ну естественно же есть бекап, да? ;))

mdadm --add /dev/md2 /dev/sda3

9. Далее, поставьте загрузчик на /dev/sda
grub
grub>device (hd0) /dev/sda
grub>root (hd0,1)
grub>setup (hd0)
grub>quit


Осталось дождаться выполнения синхронизации md2.

На этом все. Добавлю, что делал именно по второму пути, за исключением того, что винчестеры на ходу не перетыкал, Т.е. у меня было не занятое под разделы место в конце диска.

P.S. И еще, мне подсказали, что в случае изменения количества или нумерации md, перед перезагрузкой крайне рекомендуется делать update-initramfs, чтобы избежать непредвиденных последствий.

вторник, 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. Права на чтение-запись, анонимный доступ и выолнение сценариев. 

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

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