¿Necesita ayuda con el script bash para eliminar el instalador de El Capitan?

0

Me dieron la siguiente lista que apunta a un script de bash.

Se supone que el script elimina el instalador (El capitan.app) después de que se haya descargado para evitar que las personas se actualicen a él.

No está funcionando y no estoy seguro de qué es necesario cambiar / ajustar, si acaso, el script. No se puede eliminar el instalador descargado.

He colocado el script en la ubicación / usr / local / bin, nombre de archivo blockelcapitan.sh y también puedo confirmar que el dameon de inicio (almacenado en / Library / LaunchDaemons) se carga como se confirma con el comando:

sudo launchctl list | grep net.

que muestra un resultado de:

-    78 net.ORG.blockelcapitan

Necesito ayuda con el script, no tengo idea de si es correcto o qué debo agregar / eliminar / cambiar.

#!/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

Aquí está el propio launchdaemon real:

<?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>
    
pregunta sql1 06.09.2016 - 14:03

1 respuesta

2

Si no instaló BlockElCapitanLaunchDaemon.pkg anteriormente, pero acaba de obtener el contenido del plist y el script de shell, logrará que esto funcione eliminando algunas líneas inútiles y comandos falsos:

Una versión de trabajo es:

#!/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 Variable Versión se puede simplificar para:

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

El daemon de inicio relacionado plist net.company_name.blockelcapitan.plist agregado a su pregunta tiene el formato correcto y funciona después de cambiar la línea <string>net.ORG.blockelcapitan</string> a <string>net.company_name.blockelcapitan</string> .

Los archivos deben tener los siguientes permisos:

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

El script hace lo siguiente:

  • Version=$(sw_vers | grep ProductVersion | tail -c 7 | cut -d . -f 2) o Version=$(sw_vers -productVersion | cut -d . -f 2 ) :
    Obtenga el número de versión principal de la versión actual del sistema (por ejemplo, 9: Mavericks, 10: Yosemite, 11: El Capitán, etc.)
  • if [[ $Version -ge 11 ]] :
    si la versión principal del sistema arrancado es igual o mayor que 11
  • %código% (si está instalado El Capitan o una versión más reciente) descargue y elimine el daemon de inicio y el script de shell
  • then...
    (Si está instalado Yosemite o una versión anterior), elimine la aplicación de instalación de El Capitan

No se necesita ninguno de los sudo anteriores, porque el script de shell iniciado por el demonio de lanzamiento ya se ejecuta como raíz . La opción -r en los primeros comandos else... no es necesaria porque ninguno de los objetos es un directorio. Los archivos y la carpeta en / var no existen si no ha instalado nada (excepto el archivo plist y el script de shell).

Por lo que puedo decir, el osascript no funciona así, así que lo ignoré. Intentaré encontrar una solución.

    
respondido por el klanomath 06.09.2016 - 18:49

Lea otras preguntas en las etiquetas