Hai bisogno di aiuto con lo script bash per eliminare El Capitan Installer

0

Mi è stato fornito il seguente plist che punta a uno script bash.

Lo script dovrebbe eliminare l'installer (El capitan.app) dopo che è stato scaricato per impedire agli utenti di aggiornarlo.

Non funziona e non sono sicuro di cosa sia necessario modificare / modificare, se possibile, la sceneggiatura. Non riesce a eliminare il programma di installazione scaricato.

Ho inserito lo script nella posizione / usr / local / bin, nome file blockelcapitan.sh e posso anche confermare che il dameon di avvio (memorizzato in / Library / LaunchDaemons) sia stato caricato come confermato utilizzando il comando:

sudo launchctl list | grep net.

che mostra un risultato di:

-    78 net.ORG.blockelcapitan

Ho bisogno di aiuto con lo script, non ho idea se è corretto o cosa è necessario aggiungere / rimuovere / modificare.

#!/bin/bash
Version=$(sw_vers | grep ProductVersion | tail -c 7 | cut -d . -f 2)    
if [[ $Version -ge 11 ]]
then
    sudo launchctl unload /Library/LaunchDaemons/net.ORG.blockelcapitan.plist
    sudo rm -rf /Library/LaunchDaemons/net.ORG.blockelcapitan.plist
    sudo rm -rf /var/ORG/ElCapitan/
    sudo rm -rf /var/db/receipts/net.ORG.pkg.BlockElCapitanLaunchDaemon.bom
    sudo rm -rf /var/db/receipts/net.ORG.pkg.BlockElCapitanLaunchDaemon.plist
    exit 0
fi
rm -rf /Applications/Install\ OS\ X\ El\ Capitan.app/
osascript -e 'display dialog "OS X El Capitan is not allowed on ORG computers at this time." with title "ORG Technology Notice" buttons {"OK"}     default button "OK" giving up after 30'

Post-flight for installer PKG (you’ll want to use something like Packages     for Mac to build a deployable .pkg):

#!/bin/bash

launchctl load -w /Library/LaunchDaemons/net.ORG.blockelcapitan.plist

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


if [[ $Version -ge 11 ]]
then
    sudo launchctl unload /Library/LaunchDaemons/net.ORG.blockelcapitan.plist
    sudo rm -rf /Library/LaunchDaemons/net.ORG.blockelcapitan.plist
    sudo rm -rf /var/ORG/ElCapitan/
    sudo rm -rf /var/db/receipts/net.ORG.pkg.BlockElCapitanLaunchDaemon.bom
    sudo rm -rf /var/db/receipts/net.ORG.pkg.BlockElCapitanLaunchDaemon.plist
    exit 0
fi

Ecco l'effettivo launchdaemon stesso:

<?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.ORG.blockelcapitan</string>
<key>ProgramArguments</key>
<array>
    <string>/usr/local/bin/blockelcapitan.sh</string>
</array>
<key>KeepAlive</key>
<dict>
    <key>PathState</key>
    <dict>
        <key>/Applications/Install OS X El Capitan.app/</key>
        <true/>
    </dict>
</dict>
<key>OnDemand</key>
<true/>
</dict>
</plist>
    
posta sql1 06.09.2016 - 14:03
fonte

1 risposta

2

Se non hai installato BlockElCapitanLaunchDaemon.pkg in precedenza, ma hai appena ottenuto il contenuto del plist e dello script della shell, questo funzionerà rimuovendo alcune linee inutili e comandi fasulli:

Una versione funzionante è:

#!/bin/bash

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

if [[ $Version -ge 11 ]]
then
    launchctl unload /Library/LaunchDaemons/net.company_name.blockelcapitan.plist
    rm -f /Library/LaunchDaemons/net.company_name.blockelcapitan.plist
    rm -f /usr/local/bin/blockelcapitan.sh
    exit 0
else
    rm -rf /Applications/Install\ OS\ X\ El\ Capitan.app/
fi

La Versione della variabile può essere semplificata per:

Version=$(sw_vers -productVersion | cut -d . -f 2 )

Il demone di lancio correlato plist net.company_name.blockelcapitan.plist aggiunto alla tua domanda è correttamente formattato e funzionante dopo aver modificato la riga% da% a <string>net.ORG.blockelcapitan</string> .

I file dovrebbero avere le seguenti autorizzazioni:

  • blockelcapitan.sh : root: wheel 755
  • net.company_name.blockelcapitan.plist : root: wheel 644

Lo script procede come segue:

  • <string>net.company_name.blockelcapitan</string> o Version=$(sw_vers | grep ProductVersion | tail -c 7 | cut -d . -f 2) :
    Ottieni il numero di versione principale della versione corrente del sistema (ad esempio 9: Mavericks, 10: Yosemite, 11: El Capitan ecc.)
  • Version=$(sw_vers -productVersion | cut -d . -f 2 ) :
    se la versione principale del sistema avviato è uguale o maggiore di 11
  • %codice% (se è installato El Capitan o il più recente), scaricare e rimuovere il daemon di avvio e lo script di shell
  • if [[ $Version -ge 11 ]]
    (se è installato Yosemite o precedente), rimuovere l'applicazione di installazione El Capitan

Nessuno dei precedenti sudo è necessario, perché lo script di shell avviato dal daemon di lancio gira già come root . L'opzione -r nei primi comandi then... non è necessaria perché nessuno degli oggetti è una directory. I file e la cartella in / var non esistono se non hai installato nulla (tranne il plist e il file di script della shell).

Per quanto posso dire, l'osascript non funziona così, quindi l'ho ignorato. Cercherò di trovare una soluzione.

    
risposta data 06.09.2016 - 18:49
fonte

Leggi altre domande sui tag