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.