Bash Script для автоматического обновления (и перезагрузки) всех обновлений Mavericks & Yosemite?


1

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

Например, я хотел бы:

sudo curl https://gist.githubusercontent.com/ChristopherA/0ddc4c27f8ec7d5a0aed/raw/2e694c616c728593c2af155d18aeeff68b25a222/gistfile1.txt | sh

Затем он попадает в мою суть, отправляет содержимое в мою оболочку, а затем следующий скрипт (который в настоящее время существует в моих гистах):

#!/bin/bash

# Installs all system updates, reboot and does it again if necessary.

# Execute on a new mac via:

# sudo curl https://gist.githubusercontent.com/ChristopherA/0ddc4c27f8ec7d5a0aed/raw/2e694c616c728593c2af155d18aeeff68b25a222/gistfile1.txt | sh

# Initially, based on https://jamfnation.jamfsoftware.com/discussion.html?id=7827 which works on 10.8 and untested on 10.9 or 10.10

SWUL=`/usr/sbin/softwareupdate -l | /usr/bin/awk '{printf "%s", $0}'`
SWULER=`/usr/sbin/softwareupdate -l 2>&1 | /usr/bin/head -1`
NoRestartUpdates=`/usr/sbin/softwareupdate -l | /usr/bin/grep -v restart | /usr/bin/grep -B1 recommended | /usr/bin/grep -v recommended | /usr/bin/awk '{print $2}' | /usr/bin/awk '{printf "%s ", $0}'`
osvers=`sw_vers -productVersion | awk -F. '{print $2}'`

if [[ $osvers -lt 8 ]]; then
/bin/echo "Script only for 10.8+ ONLY"
exit 1
elif [ "$SWULER" == "No new software available." ]; then
/bin/echo "$SWULER"
exit 1
elif [[ "$SWUL" == *"[restart]"* ]]; then
echo "Installing Updates that require Restart"
/usr/bin/sudo /usr/sbin/softwareupdate -d -a
/usr/libexec/PListBuddy -c "Copy CompletedProducts InstallAtLogout" /Library/Updates/index.plist
/usr/bin/touch /var/db/.SoftwareUpdateAtLogout
/bin/chmod og-r /var/db/.SoftwareUpdateAtLogout
/usr/libexec/PListBuddy -c "Add -RootInstallMode STRING YES" /var/db/.SoftwareUpdateOptions
/usr/libexec/PListBuddy -c "Add -SkipConfirm STRING YES" /var/db/.SoftwareUpdateOptions
/bin/chmod og-r /var/db/.SoftwareUpdateOptions
elif [[ "$SWUL" == *"[recommended]"* ]]; then
/bin/echo "Installing Updates that does not require Restart"
/usr/bin/sudo /usr/sbin/softwareupdate -i $NoRestartUpdates
fi

exit 0

`` `

К сожалению, этот скрипт из https://jamfnation.jamfsoftware.com/discussion.html?id=7827 не работает на 10.9 или 10.10.

Результаты, достижения:

Installing Updates that require Restart
Software Update Tool
Copyright 2002-2012 Apple Inc.

Finding available software

Downloaded iTunes
Downloaded iTunes
Downloaded OS X Yosemite Developer Preview 8
Downloading Yosemite Recovery Update
Downloaded Yosemite Recovery Update
Done.
Copy: Entry, "CompletedProducts", Does Not Exist
touch: /var/db/.SoftwareUpdateAtLogout: Permission denied
chmod: /var/db/.SoftwareUpdateAtLogout: No such file or directory
File Doesn't Exist, Will Create: /var/db/.SoftwareUpdateOptions
File Doesn't Exist, Will Create: /var/db/.SoftwareUpdateOptions
chmod: /var/db/.SoftwareUpdateOptions: No such file or directory
$

В комментариях к этому посту есть некоторые подсказки, а также по адресу http://hints.macworld.com/article.php?story=20080916220249270

Однако я не могу найти что-то, что может быть просто сценарием bash.

  • Кристофер Аллен

Ответы:


1

как насчет просто

sudo softwareupdate -i -a
sudo reboot

Кстати, о сценарии, который вы опубликовали, попробуйте добавить sudo перед командами ниже:

/usr/bin/touch /var/db/.SoftwareUpdateAtLogout
/bin/chmod og-r /var/db/.SoftwareUpdateAtLogout
/usr/libexec/PListBuddy -c "Add -RootInstallMode STRING YES" /var/db/.SoftwareUpdateOptions
/usr/libexec/PListBuddy -c "Add -SkipConfirm STRING YES" /var/db/.SoftwareUpdateOptions
/bin/chmod og-r /var/db/.SoftwareUpdateOptions

Проблема с простым sudo softwareupdate -iaзаключается в том, что может потребоваться несколько перезагрузок и установок. Я хотел бы перейти к тому, о чем он сообщает, No updates are available.а затем клонировать мой репозиторий .dotfiles, а затем запустить скрипт для установки дополнительных инструментов, приложений и настроек конфигурации.
Кристофер Аллен

Я попробую поставить sudo перед другими командами, чтобы увидеть, работает ли это.
Кристофер Аллен

Добавление sudo к командам не помогло вообще. Поиск доступного программного обеспечения Копия: запись, «CompletedProducts», не существует: touch /var/db/.SoftwareUpdateAtLogout: в доступе отказано /var/db/.SoftwareUpdateOptions Файл не существует, будет создан: /var/db/.SoftwareUpdateOptions chmod: /var/db/.SoftwareUpdateOptions: Нет такого файла или каталога
Кристофер Аллен,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.