Назад | Перейти на главную страницу

Знайте (с первого взгляда), что ваш клиент Mac обновлен

У нас более тысячи клиентов Mac, и мы время от времени вносим изменения, которые затрагивают многие или все из них (например, установка нового программного обеспечения, создание локальных учетных записей пользователей или применение обновлений). Я хочу знать, какие методы вы используете, чтобы сразу узнать, что ваши клиенты обновлены., потому что мы обнаруживаем, что когда некоторые машины пропускают обновление, это плохо отражается на нас :)

Выдача изменений: я имею в виду использование системы, которая выталкивает изменения, например Casper, Puppet, radmind, Apple Remote Desktop или даже взломанный ssh-empowered expect сценарий.

Что касается «беглого взгляда», есть два основных места, куда я бы посмотрел (особенно если информация не была действительно очевидна из системы, которая выпустила изменения):

Мне приходит в голову, что простым изменением было бы изменить фон экрана входа в систему, или в изменить текст в окне входа в систему. Еще более мощным может оказаться способ взять стандартный фон рабочего стола и сделать его аннотированную копию (возможно, с некоторыми точками или текстом на нем, чтобы представить изменения, которым он подвергся). [Кто-нибудь знает, как это сделать, или мне следует задать это как отдельный вопрос, здесь или в stackoverflow?]

Другое простое изменение - установить одно из четырех полей ARD, например:

defaults write /Library/Preferences/com.apple.RemoteDesktop Text4 "`date +%Y-%m-%d`"

Итак, что вы делаете, чтобы знать, что ваши клиенты в курсе последних событий (или, альтернативно, что бы вы хотели сделать, если бы знали, как это сделать?)

Не уверен, что это именно то, о чем вы думали, но тем не менее я могу поделиться этим.

Если бы можно было определить, обновлена ​​ли машина, запустив команду терминала в системе, вы могли бы написать свой собственный плагин Nagios для автоматизации проверок. Это потребует наличия SSH-ключа в каждой системе, чтобы позволить nagios войти в систему как непривилегированный пользователь и запустить команду проверки.

Я мог видеть один очень простой способ сделать это, если бы ваши обновления всегда оставляли какую-то строку в заранее определенном месте. Затем создайте файл на сервере Nagios с «последней» строкой. Тогда плагину просто нужно будет сравнить флаг на машине с «последним» флагом на сервере Nagios. Затем вы можете наблюдать за распространением обновлений на Nagios и быстро видеть, какие машины обновлены, а какие нет.

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

Возможно, пища для размышлений.

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

#!/bin/bash
# This script changes the background image on the login window
# Pass in the image name as the first parameter, or adjust it here:
NEW_IMAGE="/Library/Desktop Pictures/Nature/Earth Horizon.jpg"

if [[ "$1" != "" ]] ; then NEW_IMAGE="$1" ; fi

if [[ $EUID -ne 0 ]]; then
   echo "This script must be run as root" 1>&2
   exit 1
fi

# Change the desktop background
defaults write /Library/Preferences/com.apple.loginwindow DesktopPicture "$NEW_IMAGE"

# Restart the login window if there are no graphical users logged in
# (If there is someone logged in, the display will change when they log out)
if [ "`who | grep -c console`" -eq "0" ] ; then 
    killall -SIGHUP loginwindow 
fi

Вы можете получить версии приложения из командной строки с помощью этого

for app in /Applications/*.app; do 
  name=`basename "$app" .app`
  ver=`cat "$app/Contents/Info.plist" |grep -A1 CFBundleShortVersionString | tail -1 | sed -e 's/.*<string>//;s/<.*//'`
  echo "$name:$ver"
done

Хотя не каждое приложение использует этот идентификатор в файле info.plist