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

Сделал паузу - скушал "Твикс"

Случилось это за день до пятницы 13-го ноября - 12-го, в четверг. Но что поделать...
Вернувшись из отпуска получил я на работе заработанную плату. И дабы не хранить её дома решил покормить банкомат Альфабанка полученными купюрами.
По пути домой на станции Волковская в ТЦ Радиус установили банкомат, точнее платёжный терминал.
Такой красивый:

Платёжный терминал оснащён купюроприёмником. Купюры он глотает по одной и обратно не выдаёт, о чём соответствующая предупреждающая надпись есть. В отличие от банкоматов с модулем CCDM (Check/Cash Deposit Module), которые берут банкноты пачкой и возвращают их обратно в случае проблем с операцией зачисления. Купюроприёмник вернуть банкноты не может, устроен он так...
Покормил я его 10 бумажками по одной тысячи рублей. Стало быть 10 тысяч заработанных терминал съел. Выполнил операцию "Зачисление на счёт". Задумался терминал... Думал долго может минуту или почти минуту...
После чего радостно сообщил "Операция успешно выполнена". Но чек не выдал.
Заподозрив неладное, попросил я его выдать мне мини-выписку. На распечатанном чеке операции зачисления не обнаружилось.
Ммм-да... Сделал паузу - скушал "Твикс"
Что-же делать. Придя домой, проверил в "Альфа-Клик" - реклама :)))... Ну нет денег.
Время вечер... Позвонил по телефону "Альфа-Консультант" - снова реклама :)))
Послушав некоторое время песню великого Луи Армстронга Go Down Moses. Вы тоже можете ей насладиться на законных условиях на Yandex - реклама :)))
Имел честь поговорить с первым оператором, которая сообщила что для всех дальнейших действий мне необходимо авторизоваться в Альфа-Консультанте. Код доступа и пароль, конечно я не помнил, но по счастью подготовил паспорт. Сверив мои паспортные данные и секретное слово (которое я помнил - О!) девушка сообщила мне код доступа и выслала временный пароль с помощью SMS. После чего предложила перевести меня на систему авторизации, но, к несчастью, мой домашний телефон отказался переключаться в тональный режим (АТС у меня импульсная).
Вновь перезвонить пришлось уже с сотового. Благо звонки из "Регионов России" бесплатные.
Дозвонился, послушал музыку (всё туже). Сообщил первой девушке свою проблему...
- На какой счёт зачисляли?
- Текущий.
- Нет поступлений.
- Знаю.
- Сейчас переведу на специалиста он заведёт претензию.
Вновь слушаю знакомую песню... Слушаю...
- Здравствуйте.
- Здравствуйте.
Излагаю проблему...
- На какой счёт зачисляли?
- Текущий.
- Нет поступлений.
- Знаю!
- Сейчас переведу на специалиста он заведёт претензию.
Хм... Интересно какова у них цикличность...
- Здравствуйте.
- Здравствуйте.
Излагаю проблему...
- На какой счёт зачисляли?
- Текущий.
- Нет поступлений.
- Да, я знаю!
- Сейчас заведу претензию.
Претензию завели. Сообщили что обычный срок рассмотрения претензий - 7 дней.
Четверг 12 закончился... Минут 40 телефонных переговоров, но зато нет необходимости писать бумажное заявление!
На следующей неделе, во вторник позвонил снова (конечно послушал музыку), был переведён оператором Владимиром на специалиста:
- Ваша претензия находится на рассмотрении. Решения пока нет. Обычный срок рассмотрения - 8 дней. Вам обязательно сообщат.
- Спасибо...
И ровно через 8 дней в пятницу 20-го пришла SMS следующего содержания:
Uvazhaemiy Klient ALFA-BANKA!
Po Vashey pretenzii prinyato 
polojitelnoe reshenie.
Primite nashy izvineniya.
Проверяю "Альфа-Клик" - деньги зачислены!

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

mcs - манипулирование комментариями объектных файлов

В Solaris (а может и не только там) есть утилита для манипулирования комментариями объектных файлов (ELF) - msc:
/usr/ccs/bin/mcs
Весьма важное её применение просмотр что добавили в комментарии инженеры Sun Microsystems. Обычно это информация о версии исправления (patch) с которым этот файл прибыл в систему:
# mcs -p /platform/sun4u/kernel/sparcv9/unix
/platform/sun4u/kernel/sparcv9/unix:
@(#)SunOS 5.10 Generic 137111-04 Jun 2008

# mcs -p /platform/sun4u/kernel/unix
/platform/sun4u/kernel/unix:
@(#)SunOS 5.10 Generic 137111-04 Jun 2008

# mcs -p /usr/ccs/bin/mcs
/usr/ccs/bin/mcs:
@(#)SunOS 5.10 Generic 127127-11 Mar 2008
Так же это может быть информация о компиляторе или (и) сборщике:
# mcs -p /opt/csw/bin/wget
acomp: Sun C 5.8 Patch 121015-06 2007/10/03
iropt: Sun Compiler Common 11 Patch 120760-18 2007/09/19
ld: Software Generation Utilities - Solaris Link Editors: 5.8-1.302

четверг, 26 ноября 2009 г.

Обновление RDP лицензий Windows для rdesktop

Для работы RDP (если использовать в качестве клиента RDP rdesktop) достаточно запустить Лицензирование служб терминалов и клиенты получат временные лицензии (на 90 или 120 дней). Это период отсрочки на получение лицензий. Этот период можно продлить, получив новые временные клиентские лицензии.
Для этого необходимо в строке запуска rdesktop указать параметр нового имени хоста для которого мы хотим получить лицензию:
# rdesktop -n new_client_hostname server
Если бегло взглянуть на исходный код rdesktop 1.6, можно увидеть попытку сохранения лицензий в файл $HOME/.rdesktop/licence.new и переименовывания в файл $HOME/.rdesktop/licence.$HOSTNAME
void
save_licence(unsigned char *data, int length)
{
 char *home, *path, *tmppath;
 int fd;

 home = getenv("HOME");
 if (home == NULL)
  return;

 path = (char *) xmalloc(strlen(home) + strlen(g_hostname) + sizeof("/.rdesktop/licence."));

 sprintf(path, "%s/.rdesktop", home);
 if ((mkdir(path, 0700) == -1) && errno != EEXIST)
 {
  perror(path);
  return;
 }

 /* write licence to licence.hostname.new, then atomically rename to licence.hostname */

 sprintf(path, "%s/.rdesktop/licence.%s", home, g_hostname);
 tmppath = (char *) xmalloc(strlen(path) + sizeof(".new"));
 strcpy(tmppath, path);
 strcat(tmppath, ".new");

 fd = open(tmppath, O_WRONLY | O_CREAT | O_TRUNC, 0600);
 if (fd == -1)
 {
  perror(tmppath);
  return;
 }

 if (write(fd, data, length) != length)
 {
  perror(tmppath);
  unlink(tmppath);
 }
 else if (rename(tmppath, path) == -1)
 {
  perror(path);
  unlink(tmppath);
 }

 close(fd);
 xfree(tmppath);
 xfree(path);
}
И чтения от туда же:
int
load_licence(unsigned char **data)
{
 char *home, *path;
 struct stat st;
 int fd, length;

 home = getenv("HOME");
 if (home == NULL)
  return -1;

 path = (char *) xmalloc(strlen(home) + strlen(g_hostname) + sizeof("/.rdesktop/licence."));
 sprintf(path, "%s/.rdesktop/licence.%s", home, g_hostname);

 fd = open(path, O_RDONLY);
 if (fd == -1)
  return -1;

 if (fstat(fd, &st))
  return -1;

 *data = (uint8 *) xmalloc(st.st_size);
 length = read(fd, *data, st.st_size);
 close(fd);
 xfree(path);
 return length;
}
В установленной версии 1.5 тоже есть такие-же шаблоны.
# strings rdesktop | grep .rdesktop/lic
%s/.rdesktop/licence.%s
%s/.rdesktop/licence.%s
Но сохранённых лицензий на давно работающей системе нет (пользователи работают с rdesktop).
Участник конференции на freshmeat louigi600 предложил даже скрипт обёртку для rdesktop генерирующий новое имя хоста (перед этим он пробует использовать все имеющиеся).
Для устройств SunRay удалить старые лицензии можно так.
Для устройств Windows удалить старые лицензии можно так.

Удаление RDP лицензий Windows для клиентов mstsc.exe

Для работы RDP (терминалов Windows, клиент mstsc.exe) достаточно запустить Лицензирование служб терминалов и клиенты получат временные лицензии (на 90 или 120 дней). Это период отсрочки на получение лицензий. Этот период можно продлить, удалив временные клиентские лицензии с устройств.
Для устройств SunRay это можно сделать так.
Для клиентских устройств Windows необходимо удалить ключи реестра. Удобно это сделать, сохранив следующий текст в файле с расширением reg (например: remove-tsc-lic.reg):
REGEDIT4
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSLicensing\HardwareID]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSLicensing\Store\LICENSE000]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSLicensing\Store\LICENSE001]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSLicensing\Store\LICENSE002]
При следующем запуске mstsc.exe клиенты получат новые временные лицензии.

Удаление RDP лицензий Windows для uttsc

Для подключения по протоколу RDP в с Sun Ray клиентов рекомендуется использовать Sun Ray Connector for Windows - uttsc. Использовать его может как пользователь самостоятельно, так и возможна конфигурация на автоматический запуск в режиме киоска.
Для работы достаточно запустить Лицензирование служб терминалов и клиенты получат временные лицензии (на 90 или 120 дней). Это период отсрочки на получение лицензий. Этот период можно продлить, удалив временные клиентские лицензии с устройств.
Для управления RDP лицензиями в среде Sun Ray используется утилита utlicenseadm.
Получить список можно так:
# utlicenseadm -l -t RDPLicense
DESKTOP ID              LICENSE TYPE            LICENSE KEY
==============================================================
00144fe7a741            RDPLicense              QQAwADIAAAA=
080020ff8dd9            RDPLicense              QQAwADIAAAA=
Для удаления можно использовать простой скрипт:
#!/usr/bin/sh
PATH=/opt/SUNWut/sbin:/usr/bin
# Get list desktops with installed licenses
DESKTOP_LIST=`utlicenseadm -l -t RDPLicense | awk '/RDPLicense/{print $1}'`

for ID in ${DESKTOP_LIST}
do
  utlicenseadm -d ${ID}
done
При следующем запуске клиенты получат новые временные лицензии.

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

Краткая памятка Cisco IOS NAT (PAT)

Для конфигурирования NAT (в терминологии Cisco - PAT) на маршрутизаторе с Cisco IOS необходимо:
  • на внутреннем интерфейсе включить ip nat inside:
  • Router#configure terminal
    Router(config)#interface FastEthernet 0
    Router(config-if)#description inside interface (LAN)
    Router(config-if)#ip nat inside
  • на внешнем ip nat outside:
  • Router(config)#interface Ethernet 0
    Router(config-if)#description outside interface (WAN)
    Router(config-if)#ip nat outside
  • включить маршрутизацию с явным маршрутом:
  • Router(config)#ip route 0.0.0.0 0.0.0.0 xxx.xxx.xxx.xxx
  • создать список доступа с разрешёнными узлами:
  • Router(config)#ip access-list extended nat-allow
    Router(config-ext-nacl)#permit ip 192.168.0.xxx 0.0.0.255 any
  • указать для использования этот список:
  • Router(config)#ip nat inside source list nat-allow interface Ethernet0 overload

Падение 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

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