Uruchom pytanie ładowania agenta


0

Mam następującego agenta uruchamiania, który działa w systemie OS X i uruchamia poniższy skrypt, aby usunąć aplikację, gdy użytkownik pobierze aktualizację systemu operacyjnego ze sklepu App Store. Następnie wyświetla wiadomość użytkownikowi po usunięciu.

#!/bin/bash

Version=$(sw_vers | grep ProductVersion | tail -c 7 | cut -d . -f 2)    

if [[ $Version -ge 11 ]]
then  
    launchctl unload /Library/LaunchAgents/net.company_name.blocksierra.plist
    rm -f /Library/LaunchAgents/net.company_name.blocksierra.plist
    rm -f /usr/local/bin/blocksierra.sh
exit 0

else
    rm -rf /Applications/Install\ macOS\ Sierra\ Public\ Beta.app/
    osascript -e 'display dialog "macOS sierra is not allowed on computers at this time." with title "Technology Notice" buttons {"OK"} default button "OK" giving up after 30'
fi

Teraz spakuję go, a następnie wdrożę na wszystkich naszych komputerach Mac. Moje pytanie brzmi: co dodać do skryptu, aby pakiet automatycznie „ładował” program uruchamiający automatycznie po zainstalowaniu pakietu?

Innymi słowy, jak włączyć to polecenie?

sudo launchctl load /Library/LaunchAgents/net.company_name.blocksierra.plist

Oto lista rzeczy

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"  "http://www.apple.com    /DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>net.company_name.blocksierra</string>
<key>ProgramArguments</key>
<array>
    <string>/usr/local/bin/blocksierra.sh</string>
</array>
<key>KeepAlive</key>
<dict>
    <key>PathState</key>
    <dict>
        <key>/Applications/Install macOS Sierra Public Beta.app/</key>
        <true/>
    </dict>
</dict>
<key>OnDemand</key>
<true/>
</dict>
</plist>

Odpowiedzi:


1

Wszystkie zadania związane z elementami instalowanymi przez pakiety (tj. Instalatorem pkg) są wykonywane za pomocą skryptów preflight lub postflight, które są zawarte w pakiecie.

Skrypt inspekcji wstępnej może sprawdzić, czy istnieje potrzebny folder i czy jego uprawnienia są ustawione poprawnie. Skrypt postflight może załadować agenty uruchamiające i demony zainstalowane przez instalatora pkg oraz ustawić ich właścicieli i uprawnienia.

W twoim przypadku użyłbyś skryptu następującego po locie:

#!/bin/bash

sudo /bin/launchctl load /Library/LaunchAgents/net.company_name.blocksierra.plist

BTW: Użycie if [[ $Version -ge 11 ]]spowoduje zwolnienie i usunięcie agenta uruchamiania, gdy jest zainstalowany El Capitan. Być może trzeba będzie zmienić to na 12.


Podany skrypt postflight działa, a Launchagent usuwa aplikację, jednak po ponownym pobraniu aplikacji NIE usuwa jej. Sprawdziłem, czy lista jest ładowana, wpisując listę uruchamiania. Możesz doradzić?
sql1

W moim teście jest to 10.10.5. Wersja pozostałych waha się od 10,8 do 10,11.
sql1

Aby zablokować zarówno Sierra, jak i beta Sierra. Nie musimy blokować czapki El. Celem jest zablokowanie aktualizacji do sierra z dowolnego poprzedniego systemu operacyjnego, na którym znajduje się użytkownik. Np. Jeśli użytkownik korzysta z wersji 10.8 / 10.9 / 10.10 lub 10.11.
sql1

twój skrypt po locie znów działa poprawnie. po ponownym uruchomieniu aplikacja jest usuwana. Ale osascript, jak wyżej, nie wyświetla użytkownikowi komunikatu powitalnego? Czy to dlatego, że sudo jest używane w sudo / bin / launchctl load /Library/LaunchAgents/net.company_name.blocksierra.plist i to jest LA? Jak mogę uzyskać wiadomość powitalną dla użytkownika, jeśli robię to jako LD?
sql1

@sql Skrypt postflight jest wykonywany tylko raz - po zainstalowaniu pkg. Nie ma związku między skryptem postflight a zadaniami, które musi wykonać la lub ld. Lot po prostu ładuje się i uruchamia nową literę, ponieważ nie mogą się uruchomić ani nie znają ich.
klanomath
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.