7 votos

Creación programada de puntos de montaje en MacOS 10.12

Apple me ha confirmado ( https://openradar.appspot.com/radar?id=4948585099558912 ) que con MacOS 10.12, los permisos para crear una carpeta dentro de /Volumes requieren acceso a root.

Utilizando el mount requiere que el punto de montaje exista primero, así que vas a tener que sudo para crear esa carpeta para el punto de montaje.

He desarrollado una aplicación que presenta una lista de recursos compartidos de red al usuario, y le permite montarlos selectivamente. Para ello, lanzo un proceso de comandos en segundo plano que utiliza mkdir y mount para montar la unidad de red. Por supuesto, esto ahora falla, ya que no tiene permiso para crear el punto de montaje.

Una opción que estoy estudiando es modificar sudoers para dar permiso a todos los usuarios para usar mkdir .

¿Se le ocurre a alguien más una forma de montar programáticamente una unidad de red a través de la Terminal sin que se le pida la contraseña, o sin que tenga que jugar con sudo?

4voto

Unbelievable Me Puntos 26

Como respondí en MacOS Sierra: El volumen de montaje de AppleScript sigue pidiendo el inicio de sesión Creo que la forma de hacerlo ahora es crear el punto de montaje en algún lugar el usuario hace tienen acceso de escritura, como el directorio personal del usuario:

mkdir -p ~/mnt
mount_smbfs "//my_username:my_password@my_hostname/share" ~/mnt

3voto

Stefan Ried Puntos 61

Aquí hay buenas noticias en torno a los crecientes desafíos de Sierra: El automountd original de Unix vuelve a funcionar como se supone que debe hacerlo.

Haz como Root esto: Añade en tu /etc/auto_master por ejemplo esta línea a un mapa de montaje estático. Lo he llamado "Media", pero puedes hacer lo que quieras.

/etc/auto_master:
/Volumes/Media   auto_media

entonces haga un archivo /etc/auto_media con las entradas de sus puntos de montaje, estos son dos en el ejemplo para imagen y música. Mi Synology NAS es totalmente compatible con el sistema de archivos de Apple, pero puede hacer esto en cualquier servidor de archivos y elegir otro sistema de archivos. Consulte man auto_master.

/etc/auto_master:
Bilder  afp://yournasuser:naspw@Media/Bilder
Musik   afp://yournasuser:naspw@Media/Musik

También hacer la carpeta mountpoint manualmente mkdir /Volume/Media y volver a cargar todo con automount -vc Si ahora haces clic como USUARIO en Finder en la carpeta /Volumes/Media, Finder mostrará automáticamente las subcarpetas Bilder y Musik. Si hace clic en una de ellas, automountd montará automáticamente los volúmenes COMO el USUARIO que lo solicitó y NO como Root. ¡¡¡Esta es la clave de la solución!!! Comprueba el estado del montaje, mostrará lo siguiente:

Type mount
...
map auto_media on /Volumes/Media (autofs, automounted, nobrowse)
//yournasuser@Media/Bilder on /Volumes/Media/Bilder (..automounted,.. mounted by yourMacUser)

Tenga en cuenta el "montado por nombre de usuario" al final de la última línea anterior.

Me he dado cuenta de que el mkdir /Volumes/Media es persistente en un Mac, pero todas las carpetas de /Volumes se borran en otro Mac. En este caso hay que ejecutar tras un el reinicio un script que cree la carpeta y recargue el contador automático. Algo así:

#!/bin/sh
mkdir /Volumes/Media
automount -vc

Espero que esto funcione para todos.

3voto

Stefan Ried Puntos 61

Para aquellos que quieren una solución realmente sofisticada, recordé de mis fundamentos de Unix hace 20 años, cómo funcionan los mapas ejecutables de automontaje. Aquí, el archivo de mapa no es un mapa estático, sino un script ejecutable, que emite básicamente los parámetros para los puntos de montaje. Lo bueno de esto, es que puedes arreglar otras cosas en estos , como despertar un NAS dormido, o añadir enlaces adicionales a los dispositivos montados. Así es como va

/etc/auto_master
/Volumes/Media  auto_exec

cree un script en /etc y hágalo ejecutable (chmod +x /etc/auto_exec) por el demonio automount. Aquí está el mío:

#!/bin/bash
# By www.stefan-ried.de 11/2016
# Open Source
#
# Name or IP of you NAS
server="yourNASServername"
# List of share you want to mount
shares="Bilder Musik Tina GemeinsameDateien"
# NAS use name
user="yourNasUser"
# NAS PW
userpw="yourNasPW"
# local logfile 
logfile="/tmp/automounter.log"
#
# automountd calls this without an argument to show the folders 
# or with a specific folder name as argument to retrieve the mount parameter for it
# 
# Make sure this file is in /etc and executable (chmod +a), call it auto_exec
# Add to /etc/auto_master for example this line
# /Volumes/Media    auto_exec
# 
# automount will then execute this file when the folder is accessed
# Reload the changes to your auto_master and auto_exec with automount -vc
# use tail -f /tmp/automounter.log to see whats going on, when you ls into /Volume/..
# have fun
#
if [ $# = 0 ]; then # List keys
    echo `date` "Showing Folders/Keys" $1   >> $logfile
    for mountpoint in $shares; do
        echo -e "$mountpoint"   >> $logfile
        echo -e "$mountpoint"
        # create symbolic links for legacy mount points under /Volumes
        # you can comment this out, if you don't need it
        if [ ! -L /Volumes/$mountpoint ]; then
            echo -e "Create Sym Link Volumes/$mountpoint"       >> $logfile
            ln -s /Volumes/$server/$mountpoint /Volumes/$mountpoint
        fi
    done
# fire a WOL to the NAS
    /usr/local/bin/wolcmd 0011321906C8 10.0.0.2 255.255.255.0 4343 >> $logfile
#   
else
    echo `date` "Requesting Mountpoint" $1  >> $logfile
    for mountpoint in $shares; do
        if [ $1 = $mountpoint ]; then
            echo -e "afp://$user:$userpw@Media/$mountpoint \\"      >> $logfile
            echo -e "afp://$user:$userpw@Media/$mountpoint \\"
        fi
    done
fi

Entonces, ¿qué hace el script además de la solución de las estadísticas, que he publicado arriba?

  1. Tienes todos los parámetros como variables al principio. Por favor, rellénalo.

  2. Añade mediante enlaces simbólicos los puntos de montaje heredados. Esto es muy útil, ya que antes, por ejemplo, mi carpeta de música estaba montada en /Volumes/Musik, pero ahora aparece en /Volumes/Media/Musik. El enlace hace que también sea visible bajo /Volumes/Musik de nuevo.

  3. Se dispara y se despierta en la red a mi NAS. Descargue el wolcmd aquí por ejemplo: https://www.depicus.com/downloads/wolcmdmac.zip Gracias al autor, por compartir esto libremente. Tienes que ponerlo en cualquier lugar consistente en el script. Yo lo puse en /usr/local/bin

  4. Registra todas las acciones en un archivo de registro. Puede supervisarlo libremente ejecutando, por ejemplo, "tail -f /tmp/automounter.log" en una ventana de terminal. Sólo se ejecutan estos montajes cuando se toca la carpeta correspondiente.

1voto

Stefan Ried Puntos 61

En caso de que tu carpeta /Volumes/mountpoint desaparezca tras el reinicio, y no encuentres en la red con la suficiente rapidez cómo ejecutar algo en el momento del arranque o del inicio de sesión. Aquí lo que hice:

Poner en la carpeta del agente de lanzamiento del usuario: /Users/YourMacUser/Library/LaunchAgents el siguiente archivo

<?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>de.stefan-ried.mounter</string>
  <key>Program</key>
  <string>/Users/YouMacUserFolder/Library/LaunchAgents/mount-startup.sh</string>
  <key>RunAtLoad</key>
  <true/>
 </dict>
</plist>

El mi mount-startup.sh script es este:

#!/bin/sh
# By www.stefan-ried.de 11/2016
# Open Source
#
# Name or IP of you NAS
server="Media"
# List of share you want to mount
shares="Bilder Musik Tina GemeinsameDateien"
# NAS use name
user="YourNasUser"
# Mac PW
userpw="your Mac user pw"
# local logfile 
logfile="/tmp/automounter.log"
#
# automountd calls this without an argument to show the folders 
# or with a specific folder name as argument to retrieve the mount parameter for it
# 
# Make sure this file is in /etc and executable (chmod +a), call it auto_exec
# Add to /etc/auto_master for example this line
# /Volumes/Media    auto_exec
# 
# automount will then execute this file when the folder is accessed
# Reload the changes to your auto_master and auto_exec with automount -vc
# use tail -f /tmp/automounter.log to see whats going on, when you ls into /Volume/..
# have fun
#
echo `date` "Startup" $1    >> $logfile
if [ ! -e /Volumes/$server ]; then
        echo -e "Create Volumes/$server"        >> $logfile
        echo $userpw |sudo -S mkdir /Volumes/$server 
        echo $userpw |sudo -S automount -cv >> $logfile
fi
# fire a WOL to the NAS
echo $userpw |sudo -S /usr/local/bin/wolcmd 0011321906C8 10.0.0.2 255.255.255.0 4343 >> $logfile
# 
for mountpoint in $shares; do
    # create symbolic links for legacy mount points under /Volumes
    # you can comment this out, if you don't need it
    if [ ! -L /Volumes/$mountpoint ]; then
        echo -e "Create Sym Link Volumes/$mountpoint"       >> $logfile
        echo $userpw  | sudo -S ln -s /Volumes/$server/$mountpoint /Volumes/$mountpoint
    fi
done

Eso es lo que hace el script en el momento de iniciar la sesión del usuario.

  1. Comprueba si el punto de montaje en /Volumes está ahí, lo crea y recarga el contador automático. esta era la tarea principal del script. El resto es un lujo.

  2. Despierta el NAS. El NAS también es despertado por el auto_exec script si se accede a una carpeta de automontaje. Pero las unidades NAS tardan algún tiempo en arrancar, y puede que el MacUser haga algo más después de iniciar la sesión. Una vez que se hace clic en la carpeta de automontaje, el NAS ya se está ejecutando. El doble wol no hace daño.

  3. También cree los enlaces de montaje heredados en "Volúmenes" de nuevo. El doble no hace daño.

Tenga en cuenta que este agente script está diseñado para ejecutarse bajo privilegios de USUARIO. Normalmente el comando sudo pide una contraseña. He suprimido esto con el hack "echo $passpw | sudo -S ...". Obviamente, almacenar una contraseña explícitamente en un archivo script no es nada profesional y sólo está bien para mi uso doméstico. Para hacer esto profesionalmente, deberías cargar este lanzamiento script en root /Biblioteca y no en la Biblioteca del usuario. Entonces puedes eliminar toda la parte "echo $passpw | sudo -S " antes del comando real.

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