вторник, 30 декабря 2014 г.

PsExec + ключи тихой установки = тихая установка программ в локальной сети

Периодически нужно устанавливать и обновлять  на машинах в локальной сети определенные программы.  Причем хочется делать это, не вмешиваясь в работу сотрудников.
Для решения этой задачи в Windows-среде есть не так уж много путей:

  • Active Directory (GPSI)
  • Сторонние программы (WPKG)
  • Внутренние механизмы обновления программ
  • Использование PsExec и «тихой установки».

Active Directory (GPSI)

Использование GPSI – наверное самый популярный вариант, но он не лишен недостатков. Возможно, самый весомый – возможность установки только msi-пакетов. Существует много способов преобразовать .exe-установщик в msi-пакет (например, Orca), но все они нетривиальны.

WPKG

Из сторонних программ интересен проект WPKG. WPKG использует клиент-серверную архитектуру (у пользователя устанавливается клиентская часть) и позволяет автоматически обновлять программы у пользователя в соответствии с заранее заданным списком. Можно, например, задать обновление определенной программы только для конкретного отдела в организации, что очень удобно в том случае, если программой пользуется только один отдел.
Больше информации здесь
Недостаток данной программы — довольно запутанная настройка инсталляционных пакетов. Кроме того, WPKG устанавливает новые версии программы не сразу после обновления дистрибутива, а через некоторое время (впрочем, это время можно настраивать).

Внутренние механизмы обновления
Использование внутренних механизмов обновления программ — почти идеальный вариант. Выглядит это так — программа сама периодически опрашивает сервер обновлений о наличии новой версии, и в случае наличия новой версии предлагает пользователю обновиться.
Минус у этого варианта два. Первый — разработчики  не всегда добавляют функционал обновления в свои программы. Если в случае собственных разработок организации этот минус можно преодолеть, то при использовании сторонних программ это довольно проблематично.
Второй минус — может возникнуть ситуация, когда рабочее место не имеет доступа к интернет (или имеет строго ограниченный доступ). В таком случае программа не сможет получить доступ к серверу, который нужно опрашивать на наличие обновлений. Это ограничение можно преодолеть, добавив в программу возможность использования локального сервера обновлений, но опять же, для сторонних программ добиться включения такой опции может быть довольно непросто.


PsExec + тихая установка

В качестве компромиссного решения предлагаю использовать связку PsExec + ключи тихой установки.
PsExec – это бесплатная консольная утилита  от Sysinternals (подразделение Microsoft) позволяющая запускать программы на удаленных компьютерах. PsExec позволяет перенаправить вывод консольных команд с удаленной системы на локальную, то есть можно видеть на своей машине результат выполнения консольной команды на удаленной системе.
Скачать утилиту можно здесь (в составе пакета PsTools).

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

Установка PsExec, запуск программ через PsExec на удаленных системах
PsExec нужно устанавливать только на «серверную» сторону, то есть на компьютер, с которого будут рассылаться команды на установку (компьютер администратора, например).
Установка PsExec заключается в распаковке архива PsTools в удобную папку. После этого можно добавить эту папку в переменную окружения PATH, для того, чтобы вызывать PsExec из командной строки не по полному пути, а только по имени файла.

Следует озвучить два момента по поводу запуска программ на удаленных системах через PsExec.
Первый — для того, чтобы запускать программы на удаленной системе при помощи PsExec, необходимо иметь права локального администратора на этой системе.
Второй — для того, чтобы получить доступ к сетевым ресурсам на удаленной системе (например, чтобы зайти на сетевой ресурс или посмотреть список доступных сетевых подключений) нужно запускать PsExec от имени пользователя, профиль которого находится на удаленной системе.

То есть если нужно запустить на удаленной системе программу, которая не использует сетевые ресурсы, можно использовать учетные данные любого пользователя, для которого возможен доступ к общему ресурсу Admin$ на этой системе.
Если же нужно, чтобы программа на удаленной системе взаимодействовала с сетевыми ресурсами, нужно указывать пользователя, явно созданного на данной удаленной системе.
Для того, чтобы иметь возможность запускать PsExec на нескольких системах пакетно, нужно создать на этих системах локального пользователя с правами администратора, причем так, чтобы имя пользователя и пароль на каждой системе были одинаковыми.

Схема автоматической тихой установки с использованием PsExec и ключей тихой установки включает в себя следующие компоненты:
1. Дистрибутив (установочный файл) необходимой программы. Для примера назовем установочный файл program_install.exe.
2. Скрипт, создающий подключение к сетевому диску, запускающий удаление предыдущей версии программы и установку новой. Далее — скрипт установки, program.unattended.bat.
3.  Скрипт, запускающий скрипт установки на списке удаленных систем (через PsExec), с указанием имени пользователя и пароля на удаленной системе. Далее — скрипт PsExec, program.psexec.bat
4. Файл, содержащий список имен удаленных систем, на которых нужно выполнить скрипт PsExec. Далее — список имён, list.txt

Работа системы выглядит следующим образом:
1. Администратор запускает скрипт PsExec (program.psexec.bat).
2. Скрипт PsExec читает список имён list.txt, и для каждой системы из списка открывает в отдельной консоли экземпляр PsExec c последующим запуском на удаленной системе скрипта установки program.unattended.bat.
3. На удаленной машине скрипт установки создает  сетевой диск, ссылающийся на ресурс, на котором располагается дистрибутив  program_install.exe и производит тихое удаление и тихую установку новой версии программы.

Создание скрипта тихой установки
Создание скрипта тихой установки для конкретной программы — самая долгая и сложная часть работы. В качестве примера разберу скрипт тихой установки конкретной программы:

net use Q: /DELETE
net use Q: "\\SoftShare\Soft\program\"
taskkill /F /T /IM  program.exe
"C:\Program Files\RMO\unins000.exe" /SILENT
RMDIR /S/Q "C:\Program Files\program"
"Q:\new\program_install.exe" /VERYSILENT /NORESTART /TASKS="desktopicon"
xcopy "Q:\new\workspace" "C:\Program files\program\workspace" /E /H /I
xcopy "C:\Documents and Settings\InstallUser\Рабочий стол\program.lnk" "C:\Documents and Settings\All users\Рабочий стол" /Y
net use Q: /DELETE

Для создания подключения к сетевому ресурсу используется диск Q:. Естественно, можно выбрать любую другую букву диска. Стоит сказать, что поскольку все действия в скрипте выполняются  для специально созданного локального пользователя (назовем его InstallUser), данный диск не будет виден человеку, который работает на данной удаленной системе.

В первой строке диск Q: удаляется из списка сетевых дисков пользователя InstallUser . Вообще-то делать это необязательно, по большей части это перестраховка от того случая, если вдруг у пользователя   InstallUser окажется есть диск с таким именем.
Во второй строке происходит подключение ресурса \\SoftShare\Soft\Program (папка с программой, которая будет устанавливаться) в качестве диска Q:
Третья строка нужна для завершения экземпляра программы, которая будет устанавливаться.  Ключ /F означает принудительное завершение процесса, /T – завершение также дочерних процессов, /IM program.exe – определяет, что завершить надо процесс с именем program.exe. Для других программ имя процесса будет, естественно, отличаться.
4-я строка вызывает тихое удаление существующей версии программы. Ключ /SILENT означает как раз тихое удаление. Подробнее о ключах тихого удаления и установки — чуть позже.
5-я строка удаляет папку, в которой находилась программа, а также все её подкаталоги (ключ /S), без запроса подтверждения на удаление (/Q)
6-я строка наконец-то устанавливает нужную программу.  Подробнее о ключах тихой установки и удаления будет ниже. Ключ /VERYSILENT в данном случае вызывает установку без вывода какой-либо информации на экран, в каталог по умолчанию. Ключ /NORESTART подавляет перезагрузку компьютера после установки. Ключ /TASKS="desktopicon" дает указание на то, что необходимо создать ярлык программы на рабочем столе.
7-я строка в данном случае была нужна для того, чтобы скопировать определенные конфигурационные файлы, используемые в программе для того, чтобы после переустановки программы не сбивались определенные настройки. В конкретном случае копирование конфигурационных файлов может понадобиться, а в каких-то случаях можно обойтись и без этого.
8-я строка нужна копирует ярлык программы из рабочего стола InstallUser в рабочий стол всех пользователей. В данном случае это действие нужно из-за того, что по умолчанию программа устанавливается для того пользователя, который вызывает установку (в данном случае это InstallUser), соответственно ярлык создается только для этого пользователя.
В 9-й строке подключение к диску Q: удаляется из списка подключений InstallUser.

Несмотря на объемное описание, процедура установки довольно проста, и в упрощенном виде может быть представлена следующим образом:
1. Создать подключение к папке с дистрибутивом
2. Удалить предыдущую версию программы
3. Установить новую версию программы
4. При необходимости произвести дополнительные действия (скопировать файл конфигурации, ярлык программы и т. д.)
5. Удалить подключение к папке с дистрибутивом

Как можно увидеть, самая сложная часть при создании данного файла — правильно прописать ключи тихой установки для конкретной программы. Сложность заключается в том, что для конкретных установщиков эти ключи очень сильно отличаются, и ключи, подходящие для одной программы, далеко не всегда подходят для другой.
Для облегчения поиска ключей тихой установки советую отличный сайт ITNinja. Сайт содержит информацию о способах тихой установки популярных программ. Достаточно ввести название программы, и будут выведены способы тихой установки для данной программы.
Кроме того, поиск облегчает тот факт, что большинство программ используют одинаковые установщики, для которых ключи установки заранее известны. Наиболее популярные установщики:

  • Пакет MSI
  • InstallShield
  • Inno Setup
  • NSIS


Информацию о ключах установки для популярных установщиков можно найти здесь

Создание скрипта PsExec
Создание скрипта PsExec – довольно простая задача. Приведу пример скрипта PsExec для установки программы, описанной выше:

@echo off
echo Внимание! будет произведена автоматическая
echo установка program.exe на следующие компьютеры:
echo ----------------------------------
for /F %%i in (list.txt) do echo %%i
echo ----------------------------------
echo Предыдущая версия program.exe на данных компьютерах будет удалена
echo Все запущенные экземпляры program.exe будут закрыты без уведомления
set /p cont=Продолжить? (Д\Н)
set /p username=Введите имя пользователя:
set /p userpass=Введите пароль:
if %cont% == Д for /F %%i in (list.txt) do start cmd /K "psexec -u %username% -p %userpass% -c \\%%i program.unattended.bat"


Первые 9 строк нужны только для того, чтобы обратить внимание администратора на то, что он собирается сделать. Команда на 5-й строке выводит список компьютеров, на которые будет устанавливаться программа. Список компьютеров хранится в файле list.txt, о котором будет сказано позднее.
Строки 10 и 11 принимают имя пользователя и пароль. В данном случае нужно будет ввести имя пользователя InstallUser и пароль данного пользователя.
Данный текст будет виден только человеку, запустившему скрипт. Пользователи на удаленных компьютерах текста не увидят.
Всё основное действие заключено в последней строке, начиная с for. Данная конструкция для каждой строки из list.txt (как уже было сказано, данный файл содержит список компьютеров, на которые будет устанавливаться программа)  вызывает отдельное окно с командной строкой , в которое передается команда "psexec -u %username% -p %userpass% -c \\%%i program.unattended.bat".

Разберём, какие действия выполняет данная команда. Данная команда вызывает программу psexec, в качестве имени пользователя (-u) используется имя, введенное с клавиатуры, в качестве пароля (-p) используется  пароль, введенный с клавиатуры.  В качестве имени удаленной системы берется параметр %%i, который означает строку, взятую из файла list.txt. Параметр -с указывает на то, что необходимо скопировать вызываемый файл на удаленную систему.
В качестве исполняемого файла используется файл  program.unattended.bat — это тот самый скрипт тихой установки, который был рассмотрен выше.

Таким образом, создание скрипта PsExec сводится к подставлению необходимых имени пользователя, пароля и имени скрипта установки.

Создание списка имён
Список имен представляет собой обычный текстовый файл, в каждой строке которого находится имя или ip-адрес удаленного компьютера, на который будет производиться установка программы. Единственные  требования к файлу — на каждой строке должно находиться только одно имя или один ip-адрес, без слешей, в конце строки не должно быть никаких символов, кроме перевода строки.
Пример списка имён:
192.168.1.171
192.168.1.172
192.168.1.173
192.168.1.175
192.168.1.190
PC_PUPKINA
PC_IVANOV
PC_PETROV

В результате в папке с дистрибутивом программы будет находиться как минимум 4 объекта:
1. Папка с дистрибутивом программы, из которой будет производиться установка (в данном примере папка new)
2. Скрипт PsExec (файл program.psexec.bat) – тот файл, который запускает администратор
3. Скрипт установки (файл program.unattended.bat) – тот файл, который запускает на удаленной системе.
4. Список имён (файл list.txt)
Дополнительные файлы\папки могут использоваться или не использоваться в каждом конкретном случае.

О хранении и передаче пароля
В скрипте PsExec имя пользователя и пароль не хранятся из соображений безопасности. В случае, если нужно  указать имя пользователя и пароль явно (например, при запуске установки в ночное время, когда некому будет ввести логин и пароль), нужно удалить строки запроса имени пользователя и пароля и заменить переменные username и userpass на конкретные значения.  Однако безопасность в этом случае сильно страдает.
В интернете есть много сообщений о том, что при передаче запроса PsExec на подключение к удаленной системе пароль передается в открытом виде. Однако как я ни старался, при помощи анализатора трафика мне не удалось найти никаких следов пароля (использовал Wireshark). Возможно, это замечание относится только к старым версиям PsExec. Однако  если безопасность передачи пароля важна, возможно, стоит применить дополнительные методы защиты соединений.

Плюсы и минусы данного метода установки
Попробую дать оценку данному методу установки.
К плюсам метода можно отнести:

  • Возможность работы с любыми типами установщиков (в отличие от GPSI, который поддерживает только msi пакеты)
  • Сравнительная простота создания установки для конкретного дистрибутива. Единственная сложность заключается в правильном использовании ключей тихой установки. После создания установщика для конкретного дистрибутива установка сводится к запуску скрипта и вводу имени пользователя и пароля.
  • Незаметность для конечного пользователя. Вся установка протекает незаметно для пользователя и не отвлекает его от работы. Никаких действий от пользователя не требуется.


Минусы метода:
  • «Заточенность» под конкретный сценарий использования. Данный метод удобно использовать для сценария, когда есть большое количество машин, на которых периодически нужно обновлять определенные программы. При других сценариях — например, когда есть один или несколько «новых» компьютеров, на которые нужно установить пакетно большое количество программ — данный метод использовать тоже можно, но придется вносить некоторые изменения.
  • Невозможность отложенной установки. Может возникнуть ситуация, когда конечный пользователь в настоящий момент использует данную программу и обновлять ее прямо сейчас нежелательно. При использовании данного метода открытый экземпляр программы будет закрыт и программа обновится вне зависимости от желания пользователя. Если необходимо посылать пользователю предложение об установке программы (чтобы пользователь мог сам решить, устанавливать программу или нет), возможно, стоит использовать другие системы, например WPKG.
  • Большая нагрузка на хранилище. При использовании данного метода все пользователи начинают скачивать дистрибутив устанавливаемой программы одновременно, что может привести к большим нагрузкам на сетевое хранилище (в особенности, если пользователей много и дистрибутив большого размера). Возможное решение проблемы — небольшая модификация  скрипта PsExec.
Если вместо
for /F %%i in (list.txt) do start cmd /K "psexec -u %username% -p %userpass% -c \\%%i program.unattended.bat"
написать
psexec -u %username% -p %userpass% -c @list.txt program.unattended.bat
Удаленные системы запустят скрипт установки не одновременно, а одна за другой.

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

четверг, 11 декабря 2014 г.

Maria Linnemann - Canzone d'Amore: ноты

Еще одна интересная композиция для гитары от Марии Линнеманн. Исполнение:
Ноты в интернете найти можно, но обычно это сканы не очень хорошего качества.
Выкладываю свою подборку (в качестве источника использовался один из таких сканов):
Ноты в формате PDF - здесь
Ноты в формате mscz (для нотного редактора MuseScore) - здесь 

За точность подбора не ручаюсь. 

суббота, 18 октября 2014 г.

Maria Linnemann - Antonino (Valz Venezolano): ноты

Еще одна интересная композиция для гитары. Исполнение:
Не нашел в свободном доступе нот для этой композиции. Подобрал по видео, выкладываю.
За точность подбора не ручаюсь.

воскресенье, 12 октября 2014 г.

Maria Linnemann - Sempre Solo : ноты и табы.

Простое, но довольно красивое произведение для гитары. Будет интересно начинающим гитаристам. Исполнение:
Не нашел в свободном доступе нот для этой композиции. Подобрал по видео, выкладываю.
За точность подбора не ручаюсь.

четверг, 25 сентября 2014 г.

Internet Explorer не открывает скачанные ods/odt через LibreOffice – решение.



Столкнулся со следующей проблемой:
На машине стоит Internet Explorer (8 версия, для более поздних не проверял) и LibreOffice 4.3.1 (самая свежая версия на момент написания). ОС — Windows XP SP3 (на более поздних не проверял). При скачивании через Internet Explorer ods, odt и прочих OpenDocument-ов появляется стандартное окошко:

Если нажать на кнопку «Открыть», то ничего не происходит. Окно LibreOffice-а не появляется, хотя процесс soffice.bin висит в списке задач. Если нажать «Сохранить», а затем открыть сохраненный файл, он успешно открывается.
Если вместо LibreOffice-а поставить OpenOffice, то скачанный файл открывается по кнопке «Открыть».
Еще странность — из браузера Google Chrome (28 +)  файлы открываются даже при установленном LibreOffice.

Решение проблемы: удалить или переименовать следующие разделы реестра:
  • HKEY_CLASSES_ROOT\CLSID\{7B342DC4-139A-4a46-8A93-DB0827CCEE9C} - Электронная таблица OpenOffice.org 1.1
  • HKEY_CLASSES_ROOT\CLSID\{7FA8AE11-B3E3-4D88-AABF-255526CD1CE8} - Электронная таблица OpenDocument
  • HKEY_CLASSES_ROOT\CLSID\{30A2652A-DDF7-45e7-ACA6-3EAB26FC8A4E} - Текстовый документ OpenOffice.org 1.1
  • HKEY_CLASSES_ROOT\CLSID\{F616B81F-7BB8-4F22-B8A5-47428D59F8AD} - Текстовый документ OpenDocument
  • HKEY_CLASSES_ROOT\CLSID\{41662FC2-0D57-4aff-AB27-AD2E12E7C273} - рисунок OpenOffice.org 1.1
  • HKEY_CLASSES_ROOT\CLSID\{448BB771-CFE2-47C4-BCDF-1FBF378E202C} - Рисунок OpenDocument
  • HKEY_CLASSES_ROOT\CLSID\{E5A0B632-DFBA-4549-9346-E414DA06E6F8} - презентация OpenOffice.org 1.1
  • HKEY_CLASSES_ROOT\CLSID\{EE5D1EA4-D445-4289-B2FC-55FC93693917} - Презентация OpenDocument

суббота, 20 сентября 2014 г.

Google Chrome: отключение окна синхронизации при отсутствии доступа к Интернет.

При первом запуске Google Chrome (по крайней мере в версии 21 и выше) появляется страница с предложением синхронизации данных при помощи аккаунта Google:
При наличии доступа к Интернет страница отключается кликом по ссылке "Нет, спасибо" и больше не появляется. Однако в некоторых ситуациях доступа к Интернет на машине нет - например, в корпоративном секторе, где браузер используется для доступа только ко внутренним ресурсам.
Страницу невозможно отключить через настройки Google Chrome. 
Отключить страницу можно, отредактировав файл C:\Documents and Settings\<USER>\Local Settings\Application Data\Google\Chrome\User Data\Default\Preferences:
в конце файла найти ветку

"sync_promo": {
"startup_count": 1
}

 и заменить на :

"sync_promo": {
"startup_count": 1,
"user_skipped": true
}

воскресенье, 15 июня 2014 г.

Xerox WC3325DNI\3315DN - тихая установка только драйвера принтера

Xerox WorkCentre 3325 - Монохромный МФУ SOHO-класса от компании  Xerox со скоростью печати от 30 копий в минуту.
Среди интересных особенностей МФУ:
  •  двусторонняя печать
  • двустороннее копирование (присутствует автоподатчик)
  • возможна работа с Wi-fi (802.11g)
Во время установки МФУ сотрудникам обнаружил интересную особенность.
На диске, который идет в комплекте с сетевым МФУ Xerox 3325 (как подсказывает гугл, это относится и к 3315), присутствует очень странный установщик. Установщик этот не дает возможности установить только драйвер принтера. Устанавливается сразу все - принтер, факс, сканер...кроме того, установщик довольно массивный и на слабых машинах загружается довольно долго.
В документации, поставлявшейся с МФУ, ничего не говорилось про ключи тихой установки и про выборочную установку.
Информация эта содержится только в SAG (System Administrator's Guide) для МФУ - скачать можно здесь. Кстати, SAG выпущен не так давно, в апреле 2014 года.
Итак, тихая установка драйвера МФУ Xerox WorkCentre 3325 (так, как используется у нас):
setup.exe /S /P 000.000.000.000 /N "Xerox 3325" /ND /L "0x0019"
/S - указание на тихую установку
/P 000.000.000.000 - порт принтера. В данном случае сетевой (нужно заменить на свой IP)
/N "Xerox 3325" - имя, под которым принтер будет установлен в системе
/ND - указание на то, что принтер не будет использоваться как принтер по умолчанию
/L "0x0019"- Язык установки (русский).
Проблема с лишними опциями при установке решается просто - для того, чтобы не устанавливались драйверы сканера и факса, нужно удалить папки Fax и Scaner из дистрибутива.


вторник, 20 мая 2014 г.

DB2 - как бороться с ошибкой "База с алиасом ... уже существует" при восстановлении БД.

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

Понадобилось мне перенести БД с одного сервера DB2 на другой.
Начало стандартное. Вводим команду резервного копирования базы в файл:
db2 backup database BaseName to C:\Backup
Получаем стандартный ответ:
 Резервное копирование завершилось успешно. Отметка времени копии : 
20140517122420 
Получаем архив с базой, который отправляем на конечный сервер DB2.
На конечном сервере вводим команду восстановления базы:
db2 restore database BaseName from C:\Backup taken at 20140517122420 TO D: INTO BaseName
Здесь TO D:  указывает, где физически располагается база. INTO BaseName - Имя, которое получит база в новом node.

И в этом моменте появилась непонятная ошибка:
База с алиасом BaseName уже существует
Номер ошибки не помню, записываю по памяти.
Смотрю список баз  командой db2 list db directory - базы BaseName в списке нет.
А вот если сделать  db2 list db directory on D: - база BaseName появляется в списке.
Видимо, после предыдущих экспериментов в записях осталась какая-то информация об этой базе.
По идее нужно сделать db2 drop db BaseName. 
Однако на эту команду получаю ответ:
Ошибка ввода\вывода
Дальнейшее гугление привело к файлу db2diag.log (который, кстати, находится не в папке с СУБД, а где-то в LocalSettings).
Это лог DB2, в который направляется всякая диагностическая информация.
В логе обнаружилось, что удаление базы невозможно, так как не удается получить доступ к файлам SQLOGCTL.LFH.1 и SQLOGCTL.LFH.2.
Гугление этой проблемы привело к следующему решению (не знаю, насколько оно хорошее, для меня важно, что оно действует):
1. Сделать резервные копии всех БД NODE'ы.
2. Очистить папку NODE0000 (вместо 0000 могут быть другие цифры)
3. Восстановить все БД NODE'ы.
4. Восстановить БД, которую нужно было восстановить в самом начале.

Метод железный, т.к. уничтожается вся информация о структуре ноды. Однако следует быть внимательным, чтобы не пропустить резервное копирование какой-нибудь базы. 


пятница, 28 марта 2014 г.

setuptools на python 2.7 (Windows) и ошибка UnicodeDecodeError: 'ascii' codec can't decode byte 0xae in position 11

Недавно пытался установить модуль setuptools для Python 2.7 под Windows XP.
По документации установка проходит буквально в два клика: запускаем
python ez_install.py 
ждем, пока скачается и установится модуль, наслаждаемся жизнью.
В моем случае на этапе установки вылезла ошибка:

Installing Setuptools
Traceback (most recent call last):
  File "setup.py", line 17, in 
    exec(init_file.read(), command_ns)
  File "", line 8, in 
  File "c:\users\namar\appdata\local\temp\tmp1tanvy\setuptools-2.1\setuptools\__
init__.py", line 11, in 
    from setuptools.extension import Extension
  File "c:\users\namar\appdata\local\temp\tmp1tanvy\setuptools-2.1\setuptools\ex
tension.py", line 5, in 
    from setuptools.dist import _get_unpatched
  File "c:\users\namar\appdata\local\temp\tmp1tanvy\setuptools-2.1\setuptools\di
st.py", line 15, in 
    from setuptools.compat import numeric_types, basestring
  File "c:\users\namar\appdata\local\temp\tmp1tanvy\setuptools-2.1\setuptools\co
mpat.py", line 19, in 
    from SimpleHTTPServer import SimpleHTTPRequestHandler
  File "c:\python27\lib\SimpleHTTPServer.py", line 27, in 
    class SimpleHTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
  File "c:\python27\lib\SimpleHTTPServer.py", line 208, in SimpleHTTPRequestHand
ler
    mimetypes.init() # try to read system mime.types
  File "c:\python27\lib\mimetypes.py", line 358, in init
    db.read_windows_registry()
  File "c:\python27\lib\mimetypes.py", line 258, in read_windows_registry
    for subkeyname in enum_types(hkcr):
  File "c:\python27\lib\mimetypes.py", line 249, in enum_types
    ctype = ctype.encode(default_encoding) # omit in 3.x!
UnicodeDecodeError: 'ascii' codec can't decode byte 0xae in position 11: ordinal
 not in range(128)
Something went wrong during the installation.
See the error message above.

Полез в гугл. Основное предлагаемое решение - удалить  в разделе "HKEY_CLASSES_ROOT\MIME\Database\Content Type" все подразделы, в названии которых есть русские символы (точнее, символы не из кодировки ascii). Например, см. здесьздесь или здесь.
Полез по указанному пути. Проверил на несколько раз. Разделов с запретными названиями не было!
Дальнейшее гугление ни к чему не привело.
Собственно, вот к какому решению я пришел после некоторых исследований:

  • Открываем c:\python27\lib\mimetypes.py
  • Переходим на строку 249
 ctype = ctype.encode(default_encoding)
  • Перед этой строкой вставляем 
print ctype
  • Сохраняем
  • Запускаем 
python ez_install.py
еще раз.
  • Видим, как на консоль выводятся некие строки - это названия разделов реестра, которые сейчас просматривает установщик. 
  • В определенный момент вывод строк остановится, и последней из этих строк будет строка с "кракозябрами" (ну или с русскими символами - зависит от того, как настроена консоль).
  • Далее всё просто - если в строке "кракозябры", то с помощью любимого текстового редактора переводим символы в нужную кодировку,  и делаем поиск в реестре по этим символам.
В моем случае разделом, на котором установщик споткнулся, был раздел "BDATool.компоненты".
  • Далее удаляем или переименовываем этот раздел и запускаем установщик заново.