Creazione automatica di punti di montaggio in macOS 10.12

4

Apple mi ha confermato ( link ) che con macOS 10.12, le autorizzazioni per creare una cartella all'interno di /Volumes richiede l'accesso come root.

L'utilizzo del comando mount richiede che il punto di montaggio esista per primo, quindi dovrai salvare sudo per creare quella cartella per il punto di montaggio.

Sviluppo un'applicazione che presenta un elenco di condivisioni di rete a un utente e consente loro di montarlo in modo selettivo. Lo gestisco attivando un processo di comando in background che utilizza mkdir e mount per montare l'unità di rete. Ovviamente questo non funziona, poiché non ha il permesso di creare il mount point.

Un'opzione che sto cercando è la modifica di sudoers per dare a tutti gli utenti il permesso di usare mkdir .

Qualcun altro può pensare a un modo per montare a livello di programmazione un'unità di rete tramite Terminale senza richieste di password o fare casino con sudo?

    
posta mattdwen 17.08.2016 - 00:48
fonte

4 risposte

3

Come ho risposto a macOS Sierra: il volume di montaggio di AppleScript continua a chiedere l'accesso , penso che il modo per farlo ora sia creare il punto di montaggio in cui l'utente ha l'accesso in scrittura, come la home directory dell'utente :

mkdir -p ~/mnt
mount_smbfs "//my_username:my_password@my_hostname/share" ~/mnt
    
risposta data 23.09.2016 - 06:39
fonte
3

Ecco buone notizie su Sierra le sfide crescenti: L'originale Uniomo automountd funziona di nuovo come dovrebbe funzionare.

Fai come root questo: Aggiungi al tuo / etc / auto_master per esempio questa linea a una mappa di montaggio statica. L'ho chiamato "Media", ma puoi fare tutto quello che vuoi.

/etc/auto_master:
/Volumes/Media   auto_media

quindi crea un file / etc / auto_media con le voci dei tuoi mount point, questi sono due in esempio per immagini e musica. My Synology NAS supporta completamente il sistema di file Apple, ma è possibile farlo su qualsiasi file server e scegliere un altro file system. Vedi l'uomo auto_master.

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

Rendi la cartella mountpoint manualmente anche mkdir / Volume / Media e ricarica tutto con automount -vc Se ora fai clic su come UTENTE in Finder nella cartella / Volumi / Media, Finder mostrerà automaticamente le sottocartelle Bilder e Musik. Se si fa clic su uno di questi, automountd monterà automaticamente i volumi COME UTENTE che lo richiedeva e NON come root. Questa è la chiave per la soluzione !!! Controlla lo stato di mount, mostrerà quanto segue:

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

Si prega di notare "montato da Username" alla fine dell'ultima riga sopra.

Mi sono reso conto che mkdir / Volumes / Media è persistente su un Mac, ma tutte le cartelle in / Volumes vengono cancellate su un altro Mac. In questo caso è necessario eseguire dopo il riavvio uno script che crea la cartella e ricarica l'automounter. Qualcosa del genere:

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

Spero che questo funzioni per tutti.

    
risposta data 21.11.2016 - 09:36
fonte
2

Per coloro che vogliono una soluzione davvero sofisticata, mi sono ricordato dalle mie basi Unix 20 anni fa, come funzionano le mappe automount eseguibili. Qui, il mapfile non è una mappa statica, ma uno script eseguibile, che genera sostanzialmente i parametri per i punti di montaggio. La cosa buona è che puoi aggiustare altre cose in questi script, come svegliare un NAS assonnato o aggiungere collegamenti aggiuntivi ai dispositivi montati. Ecco come va

/etc/auto_master
/Volumes/Media  auto_exec

crea uno script in / etc e rendilo eseguibile (chmod + x / etc / auto_exec) dal demone automount. Ecco il mio:

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

Quindi, cosa fa lo script oltre alla soluzione statis, che ho postato sopra?

  1. Hai tutti i parametri come variabili all'inizio. Si prega di compilare.

  2. Aggiunge tramite collegamenti simbolici i punti di montaggio legacy. Questo è molto utile, come prima, ad esempio, la mia cartella musicale è stata montata su / Volumes / Musik, ma appare sotto / Volumi / Media / Musik. Il link rende è anche visibile sotto / Volumi / Musik di nuovo.

  3. Spara e wake-on-lan sul mio NAS. Scarica il wolcmd qui ad esempio: link Grazie all'autore, per averlo condiviso liberamente. Devi metterlo in qualsiasi posizione coerente con lo script. L'ho messo in / usr / local / bin

  4. Registra tutte le azioni sotto un file di log. È possibile monitorarlo liberamente eseguendo ad esempio "tail -f /tmp/automounter.log" in una finestra di terminale. Solo questi montaggi vengono eseguiti dove viene toccata la cartella corrispondente.

risposta data 21.11.2016 - 10:00
fonte
1

Nel caso in cui la cartella / Volumi / mountpoint scompaia dopo il riavvio, e non si trova in rete abbastanza velocemente come eseguire qualcosa all'avvio o al tempo di accesso. Ecco cosa ho fatto:

Inserisci nella cartella dell'agente di lancio dell'utente: / Users / YourMacUser / Library / LaunchAgents il seguente file

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

Lo script mount-startup.sh è questo:

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

Questo è ciò che lo script fa al momento del login dell'utente.

  1. Controlla se il punto di mount in / Volumi è presente, lo crea e ricarica l'automounter. questo era il compito principale della sceneggiatura. Il resto è lusso.

  2. Riattiva il NAS. Il NAS viene anche riattivato dallo script auto_exec se si accede a una cartella automount. Ma le unità NAS richiedono un po 'di tempo per l'avvio, e forse MacUser fa qualcos'altro dopo il login. Dopo aver fatto clic sulla cartella automount, il NAS è già in esecuzione. Il doppio wol non fa male.

  3. Crea nuovamente i legacy mount link sotto "Volumes". Il doppio non fa male.

Si noti che questo script agente è progettato per funzionare con i privilegi USER. Di solito il comando sudo richiede una password. L'ho soppresso con "hack $ passpw | sudo -S ..." hack. Ovviamente, memorizzare una password in modo esplicito in un file di script non è affatto professionale e va bene per il mio uso domestico. Per fare ciò professionalmente, è necessario caricare questo script di avvio nella root / libreria e non nella libreria utente. Puoi semplicemente eliminare tutta la parte "echo $ passpw | sudo -S" prima del comando effettivo.

    
risposta data 21.11.2016 - 10:26
fonte

Leggi altre domande sui tag