Поддержка Консалтинг Обучение Jamf Pro Блог

Software Update Server против HTTP-прокси

Василий Колосов 03.06.2011

Stolichnaya Reposado

У одного из наших клиентов, на род деятельности которого опасно даже намекать, всегда были повышенные требования к безопасности. Помимо наличия целого каскада фаерволов, драконовских политик безопасности и постоянных проверок рабочего персонала, присутствовало еще одно неудобство: все находящиеся в нашей юрисдикции серверы не имели прямого доступа в интернет, а должны были использовать HTTP-прокси, с которым родной Software Update Server работать не умеет.
Естественно, установка обновлений на все три сотни машин превращалась в головную боль. И когда мы узнали, что системные администраторы Walt Disney Animation Studios написали альтернативный сервер обновлений Mac OS X с загадочным названием Reposado, то решили попробовать его при первой же возможности.

Reposado написан на Python и, как следствие, является кроссплатформенным решением. Для его работы нужен только веб-сервер, утилита curl и около 30 Гб свободного места на диске.

Установка и начальная конфигурация

Скачиваем последнюю версию:
$ git clone git://github.com/wdas/reposado.git
Запускаем установщик:
$ cd reposado/
$ sudo python setup.py install
Теперь нужно выполнить первичную конфигурацию при помощи скрипта repoutil, который попросит задать путь к каталогу для хранения обновлений, каталогу с метаданными и указать адрес веб-сервера:
$ repoutil –configure
Path to store replicated catalogs and updates [None]: /var/reposado/html
Path to store Reposado metadata [None]: /var/reposado/meta
Base URL for your local Software Update Service
(Example: http://su.your.org — leave empty if you are not replicating updates) [None]: http://macupdate.kremlin.ru:8088
WARNING: UpdatesRootDir “/var/reposado/html” does not exist. Will attempt to create it.
WARNING: UpdatesMetadataDir “/var/reposado/meta” does not exist. Will attempt to create it.

Настройка прокси-сервера

Свою конфигурацию reposado сохраняет в файле preferences.plist, который располагается в каталоге /Library/Python/2.6/site-packages/. Выглядеть он будет приблизительно так:
<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE plist PUBLIC “-//Apple Computer//DTD PLIST 1.0//EN” “http://www.apple.com/DTDs/PropertyList-1.0.dt”>
<plist version=”1.0″>
<dict>
<key>LocalCatalogURLBase</key>
<string> http://macupdate.kremlin.ru:8088</string>
<key>UpdatesMetadataDir</key>
<string> /var/reposado/meta </string>
<key>UpdatesRootDir</key>
<string> /var/reposado/html</string>
</dict>
</plist>
При помощи параметра AdditionalCurlOptions можно задать дополнительные параметры для curl. Нас, конечно, интересует возможность указать адрес прокси-сервера и данные для аутентификации на нем, например:
<key>AdditionalCurlOptions</key>
<array>
<string>proxy = “proxy.kremlin.ru:3128″</string>
<string>user = “admin:lenin123”</string>
</array>

Синхронизация обновлений

Теперь стоит выполнить первую синхронизацию каталога и проверить, что все работает нормально:
$ repo_sync
Downloading 871235 bytes from http://swscan.apple.com/content/catalogs/index.sucatalog…
В дальнейшем проще настроить ее периодическое выполнение по расписанию. Для этого достаточно создать элемент launchd (например, ru.shortcut.reposync.plist) и поместить его в каталог /Library/LaunchDaemons. Сам plist-файл может выглядеть, например, так:
<?xml version=’1.0′ encoding=’UTF-8′?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN
http://www.apple.com/DTDs/PropertyList-1.0.dtd>
<plist version=’1.0′>
<dict>
<key>Label</key><string>ru.shortcut.reposync</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/repo_sync</string>
</array>
<key>UserName</key>
<string>root</string>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>8</integer>
<key>Minute</key>
<integer>0</integer>
</dict>
</dict>
</plist>
Остается загрузить его в launchd:
$ sudo launchctl load /Library/LaunchDaemons/ru.shortcut.reposync.plist

Настройка веб-сервера

В Server Admin на вкладке Sites панели управления веб-сервером добавляем новый сайт, задаем Host Name (например, macupdate.kremlin.ru), описание (по вкусу), порт (стандартный Software Update Server использует 8088) и указываем в качестве корневой папки (Web Folder) путь к каталогу обновлений Reposado (в нашем примере это /var/reposado/html).

Skolkovo14-56

 

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

Как и в случае со стандартным Software Update Server, мы задаем путь к каталогу  обновлений в параметре CatalogURL файла настроек com.apple.SoftwareUpdate.plist.   Для этого мы можем использовать Managed Preferences в Workgroup Manager или редактировать его напрямую, например, командой defaults (для 10.6):
defaults write /Library/Preferences/com.apple.SoftwareUpdate CatalogURL http://macupdate.kremlin.ru:8088/content/catalogs/others/index-leopard-snowleopard.merged-1.sucatalog
На компьютерах с 10.5 следует заменить index-leopard-snowleopard.merged-1.sucatalog на index-leopard.merged-1.sucatalog:
defaults write /Library/Preferences/com.apple.SoftwareUpdate CatalogURL http://macupdate.kremlin.ru:8088/content/catalogs/others/index-leopard.merged-1.sucatalog
Через Send UNIX Command в ARD можно выполнить эту команду сразу на всех  компьютерах. После этого остается только запустить softwareupdate -l и убедиться в правильной работе сервера.

И не только

Конечно, Reposado — это больше, чем спасение от HTTP-прокси. При помощи repoutil можно создавать свои «ветви» каталогов и предоставлять разным клиентам разный набор обновлений. Удобно, к примеру, выделить несколько тестовых компьютеров для «обкатки» только что вышедших патчей. Еще один сценарий: сервер с 10.5 (или даже 10.4!) и наличие клиентов с более новой версией Mac OS X. Reposado, в отличие от заводского Software Update Server, будет предоставлять обновления всем желающим.