0 votos

Necesito ayuda con bash script para borrar el instalador de El Capitan

Me han dado el siguiente plist que apunta a un bash script.

El script se supone que elimina el instalador (El capitan.app) después de que se haya descargado para evitar que la gente se actualice a él.

No funciona y no estoy seguro de lo que hay que cambiar/ajustar, si es que hay algo, al script. No consigue borrar 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 lanzamiento (almacenado en /Library/LaunchDaemons) se carga como se confirma usando el comando:

sudo launchctl list | grep net.

que muestra un resultado de:

-    78 net.ORG.blockelcapitan

Necesito ayuda con el script, no tengo ni idea de si es correcto o qué hay que añadir/quitar/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:

<?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>

2 votos

¿Cuál es el resultado previsto del shell script? ¿Cuál es la razón para usar un doble shebang y repetir partes del "shell script" en tu pregunta? Por favor, edita tu pregunta para aclararla.

0 votos

Ya lo he hecho. Lo siento, no sé la razón de un doble shebang.

0 votos

He editado tu pregunta para que veas los duplicados: las partes que siguen a los shebangs son casi idénticas excepto el rm y el osascript ¡línea después del primer tinglado!

2voto

klanomath Puntos 19587

Si no instalaste ningún BlockElCapitanLaunchDaemon.pkg previamente, sino que sólo obtuviste el contenido del plist y el shell script conseguirás que esto funcione eliminando algunas líneas inútiles y comandos falsos:

Una versión que funciona 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 puede simplificarse a:

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

El plist del demonio de lanzamiento relacionado net.company_name.blockelcapitan.plist añadido a su pregunta está correctamente formateado 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:rueda 755
  • net.company_name.blockelcapitan.plist : root:rueda 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 la versión principal del sistema actual (por ejemplo, 9: Mavericks, 10: Yosemite, 11: El Capitan, etc.)
  • if [[ $Version -ge 11 ]] :
    si la versión mayor del sistema arrancado es igual o mayor que 11
  • then... (si se ha instalado El Capitan o una versión más reciente) descargue y elimine el demonio de lanzamiento y el shell script.
  • else...
    (si está instalado Yosemite o una versión anterior) eliminar la aplicación de instalación de El Capitan

Ninguna de las anteriores sudo s es necesario, porque el shell script iniciado por el demonio de lanzamiento ya se ejecuta como root . La opción -r en el primer rm no es necesario porque ninguno de los objetos es un directorio. Los archivos y la carpeta en /var no existen si no has instalado nada (excepto el plist y el archivo shell script).

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

1 votos

¿Por qué no hacer el Version limpiador de asignación de variables con- Version=$(sw_vers -productVersion | cut -d . -f 2 ) ?

0 votos

@fd0 para seguir siendo lo más fiel posible al original, pero añadiré un mod

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X