# Problema Automount [RISOLTO]

## klaimath

Salve, 

ho configurato il mount dei dispositivi a blocchi come ad esempio i dvd seguendo la guida sulla configurazione di kde.

```

Configurare KDE per il montaggio dei dispositivi

KDE vi dà la possibilità di montare dispositivi come CDROM o pendrive USB tramite un solo click nell'interfaccia grafica. Per permettere ciò dovete aver compilato KDE con la variabile USE hal ed aver installato dbus e hal nel vostro sistema. Dovrete inoltre aggiungere dbus e hal al runlevel default e aggiungere il vostro utente al gruppo plugdev. 

Codice 3.4: Configurare il montaggio dei dispositivi

# emerge --noreplace dbus hal

# rc-update add dbus default

# rc-update add hald default

Aggiungere <utente> al gruppo plugdev

# gpasswd -a <utente> plugdev

Potete inoltre montare in automatico i dispositivi senza nessuna interazione da parte vostra, dovete solamente installare ivman ed aggiungerlo al runlevel default.

```

Il problema è che mi monta, ma non smonta mai perchè solo root può smontare il dispositivo, un solo cd per volta. Mi spiego meglio. Accendo il pc, metto dentro un cd e lo monto. Dopo averlo smontato da root e rimosso per sostituirlo con un altro mi appare l'errore che solo root può montare il dispositivo. Riavviando il pc posso tranquillamente usufruire del mount automatico.

Le uniche modifiche che ho fatto extraguida sono state:

1) Aggiunto il mio utente anche al gruppo cdrom // senza non lo manta neanche dopo un riavvio.

2) Rimosso i noauto dal fstab traformandoli in auto

3) Settato i permessi in lettura su /dev/hdc per tutti e lettura scrittura su /dev/hdd che è il masterizzatore.

Sapete perchè si comporta così ? Da root tutto funziona quindi penso sia una questione di permessi (hal e dbus sono compilati come USE di kde) ma di solito questa è una configurazione talmente banale che una volta tentate le 2 o 3 strade non so da che parte andare. 

Grazie per le risposte

AdrianoLast edited by klaimath on Mon Jun 26, 2006 1:03 pm; edited 1 time in total

----------

## guerro

se non ricordo male c'è un parametro da inserire nella riga di mount di fstab che permette a qualunque utente normale di montare e smontare il file system.

Il parametro dovrebbe essere user. Controllo lo stesso sul manuale di mount.

----------

## MajinJoko

user o users.. non ricordo la differenza, ma uno dei due dovrebbe andare..

----------

## guerro

da una rapida occhiata al man credo proprio che sia user  :Razz:   :Idea: 

----------

## MeMyselfAndI

ma la riga in fstab non dovrebbe essere necessaria per l'automount *almeno su gnome non e' necessaria*; fai una prova, commenta le righe in /etc/fstab per quei dispositivi (cd-rom, dvd) che vuoi vengano montati automaticamente e fai qualche test.

----------

## klaimath

 *MeMyselfAndI wrote:*   

> ma la riga in fstab non dovrebbe essere necessaria per l'automount *almeno su gnome non e' necessaria*; fai una prova, commenta le righe in /etc/fstab per quei dispositivi (cd-rom, dvd) che vuoi vengano montati automaticamente e fai qualche test.

 

bho non mi ci raccapezzo  più. ho configurato l'automount a mano per anni e adesso non funziona più. va bhe ci rinuncio tanto non è un problema.

----------

## MeMyselfAndI

guarda mi spiace davvero ma kde non lo uso quindi ivman non so bene come funziona, ma se e' qualcosa di simile al sistema utilizzato da gnome tutte le eventuali righe che hai per montare in automatico i tuoi dev in /etc/fstab vanno tolte....

----------

## Onip

 *MeMyselfAndI wrote:*   

> ma se e' qualcosa di simile al sistema utilizzato da gnome tutte le eventuali righe che hai per montare in automatico i tuoi dev in /etc/fstab vanno tolte....

 

Perchè? Non è mica vero... Io ho in fstab le partizioni dell'hard disc il dvd e il cd-rw e mi automonta i cd quando li inserisco.

@klaimath: io uso gnome e non kde, ma mi pare che il tuo utente debba essere nel gruppo plugdev. prova a controllare. Nel caso non lo sia aggiungiti e fai logout\login

Byez

----------

## MeMyselfAndI

Scusa ero convinto andassero tolte, nonso per quale motivo! A quanto pare l'automount funziona sia andando a leggere /etc/fstab che non.

----------

## klaimath

Infatti ci devo stare sempre in fstab

 *Onip wrote:*   

> 
> 
> Perchè? Non è mica vero... Io ho in fstab le partizioni dell'hard disc il dvd e il cd-rw e mi automonta i cd quando li inserisco.
> 
> 

 

Si certo deve essere in plugdev e in fatti c'è ... e per maggior sicurezza l'ho aggiunto anche al gruppo cdrom visto che il device hdc è root:cdrom.

 *Onip wrote:*   

> 
> 
> @klaimath: io uso gnome e non kde, ma mi pare che il tuo utente debba essere nel gruppo plugdev. prova a controllare. Nel caso non lo sia aggiungiti e fai logout\login
> 
> Byez

 

Cmq ho risolto alla vecchia maniera; modulo del kernel, autofs e tutti i dispositivi vengono montati e smontati correttamente.

Grazie per le risposte

Adriano

----------

## klaimath

 *MeMyselfAndI wrote:*   

> guarda mi spiace davvero ma kde non lo uso quindi ivman non so bene come funziona, ma se e' qualcosa di simile al sistema utilizzato da gnome tutte le eventuali righe che hai per montare in automatico i tuoi dev in /etc/fstab vanno tolte....

 

Non ho capito bene la necessità di 3 pacchetti installati (ivman, dbus e hal) per un semplice automount che si fa benissimo con 1 pacchetto, autofs, 1 modulo del kernel e 2 righe di configurazione in 2 file.

Cmq ho risolto mettendo appunto autofs e vivo felice con tutti i miei device che si montano e smontano come devono e quando voglio io  :Razz: 

Grazie

Adriano

----------

## Onip

kde non si appoggia (più) ad ivman forse è questo il problema che avevi. Credo abbia un suo tool specifico, che magari non hai emerso. Aspettiamo che qualche user kde si faccia vivo...

cmq se "vivi felice" così tanto meglio per te!

Byez

----------

## XstefanoX

Ivman non usa /etc/fstab per stabilire i mount point ma li legge dal database di Hal.

Per questo motivo è completamente inutile inserire alcun mount point per periferiche removibili quali penne usb o cdrom/dvd in fstab.

In generale, salvo casi particolari che al momento non mi vengono in mente, in fstab devi metterci solo i mount point delle partizioni del tuo hard disk o delle condivisioni samba o nfs che intendi montare.

Hal è un database che contiene numerose informazioni riguardanti le periferiche del tuo sistema (lshal per vedere tutto ciò che contiene). Tra di esse ci sono anche i possibili mount point per le periferiche removibili e le poliche con cui tali periferiche vengono gestite (ovvero con quali diritti/permessi vanno montate, se vanno montate automaticamente o meno, ecc.).Di default hal imposta i mount point in /media.

A montare le periferiche ci pensa ivman. Per montarle ivman di default usa pmount invece del classico comando mount. Pmount è un comando che consente di montare agli utenti comuni, quindi non ti serve essere root. Come funziona? Pmount legge le impostazioni da Hal, appunto, quindi per montare non devi fare altro che scrivere

```
pmount /dev/<periferica>
```

e lui te la monterà nel mount point definito da hal e con i permessi definiti da hal.

Il problema di pmount è che permette di montare da utente normale, ma per smontare devi essere root. Esiste una patch per pmount che permette di farlo da utente, io l'avevo trovata sul sito di ivman tempo fa, poi il sito è andato perso per un problema di database e hanno dovuto rifarlo da zero e il link a tale patch è scomparso. Ma la patch ce l'ho ancora, la uso regolarmente e funziona.

Ivman, inoltre, permette di usare il normale comando mount per montare le periferiche. Si può impostare dal file di configurazione /etc/ivman/IvmConfigBase.xml, ma questo non risolve il problema dello smontare da utente.

Io vedo due soluzioni:

1) Patchare pmount per permettergli di smontare da utente. Funziona sia in automatico con ivman che a mano da linea di comando (con pumount) e non è necessario fare nient'altro. Io preferisco questa soluzione.

2) Settare ivman in modo che usi mount invece di pmount e settare hal in modo che usi l'opzione user per montare le periferiche. In questo modo ivman monterà automaticamente con l'opzione user e da kde o da linea di comando potrai smontare senza diventare root. Lo svantaggio è che questo funziona solo quando a montare è ivman. Se tu volessi montare o smontare a mano potresti montare da utente con pmount ma dovresti sempre diventare root per smontare con umount (o anche con pumount). Le opzioni di hal per montare con l'opzione user vanno inserite in un file xml in /etc/hal/fdi/policy/<qualcosa>.fdi che inizialmente non esiste e te lo devi creare.

Secondo me la prima è la soluzione migliore. Anzi, penso che tale patch andrebbe inserita nei sorgenti di default di pmount, perchè se pmount è fatto per permettere di montare da utente, perchè non permette di smontare? Boh.

Spero di essere stato abbastanza chiaro. Se serve posto la patch.

----------

## grick

xXStefanoX:

Postala, male non fa  :Smile: 

xKlaimath:

Per tagliare la testa al toro ti direi di controllare se i tuoi i vari [p][u]mount sono setuid o meno. Per esempio nel mio sistema lo sono e mi ricordo che anche a forza di user[s] in fstab non c'e' modo di montare (almeno con il semplice mount) senza usare un bel chmod 4711  :Smile: 

----------

## .:deadhead:.

Io uso kde e senza ivman appena collego una periferica mi compare nella systray un'icona della nuova periferica. Poi col mouse la monto e la smonto senza problemi. Di ivman m son sbarazzato appena ho potuto e d'improvviso problemi del tipo periferiche non smontabili & co son scomparsi.

Li monto on un click e tutto va  :Very Happy: 

----------

## XstefanoX

Eccovi la patch

```
--- src/pmount.c.orig   2005-11-01 12:25:54.000000000 +0100

+++ src/pmount.c        2005-11-01 12:35:26.000000000 +0100

@@ -595,7 +595,7 @@

 

     /* is the device already handled by fstab? We allow is_real_path == 0 here

      * to transparently mount thinks like NFS and SMB drives */

-    fstab_device = fstab_has_device( "/etc/fstab", device, NULL, NULL );

+    fstab_device = fstab_has_device( "/etc/fstab", device, NULL, NULL, NULL );

     if( mode == MOUNT && fstab_device ) {

         if( arg2 )

             fprintf( stderr, _("Warning: device %s is already handled by /etc/fstab,"

--- src/pumount.c.orig  2005-11-01 12:25:54.000000000 +0100

+++ src/pumount.c       2005-11-01 12:35:44.000000000 +0100

@@ -215,7 +215,7 @@

     }

 

     /* is the device already handled by fstab? */

-    fstab_device = fstab_has_device( "/etc/fstab", device, NULL, NULL );

+    fstab_device = fstab_has_device( "/etc/fstab", device, NULL, NULL, NULL );

     if( fstab_device ) {

         do_umount_fstab( fstab_device, do_lazy );

         return E_EXECUMOUNT;

--- src/policy.c.orig   2005-11-01 12:25:54.000000000 +0100

+++ src/policy.c        2005-11-01 12:35:49.000000000 +0100

@@ -22,6 +22,7 @@

 #include <sys/stat.h>

 #include <sysfs/libsysfs.h>

 #include <regex.h>

+#include <grp.h>

 

 /*************************************************************************

  *

@@ -251,7 +252,7 @@

 }

 

 const char*

-fstab_has_device( const char* fname, const char* device, char* mntpt, int *uid )

+fstab_has_device( const char* fname, const char* device, char* mntpt, int *uid, int *gid )

 {

     FILE* f;

     struct mntent *entry;

@@ -259,6 +260,7 @@

     static char fstab_device[PATH_MAX];

     char* realdev;

     char* uidopt;

+    char* gidopt;

 

     if( !( f = fopen( fname, "r" ) ) ) {

         perror( _("Error: could not open fstab-type file") );

@@ -289,6 +291,17 @@

                     } else

                         *uid = -1;

                 }

+                if( gid ) {

+                    gidopt = hasmntopt( entry, "gid" );

+                    if( gidopt )

+                        gidopt = strchr( gidopt, '=' );

+                    if( gidopt ) {

+                        ++gidopt; /* skip the '=' */

+                        /* FIXME: this probably needs more checking */

+                        *gid = atoi( gidopt );

+                    } else

+                        *gid = -1;

+                }

                 return fstab_device;

         }

     }

@@ -344,14 +357,19 @@

 device_mounted( const char* device, int expect, char* mntpt )

 {

     char mp[MEDIA_STRING_SIZE];

-    int uid;

-    int mounted = fstab_has_device( "/etc/mtab", device, mp, &uid ) ||

-                  fstab_has_device( "/proc/mounts", device, mp, &uid );

+    int uid, gid;

+    int mounted = fstab_has_device( "/etc/mtab", device, mp, &uid, &gid ) ||

+                  fstab_has_device( "/proc/mounts", device, mp, &uid, &gid );

+    int ngroups = getgroups(0,NULL);

+    int has_group = 0;

+    gid_t groups[ngroups];// = (gid_t) malloc(sizeof(gid_t)*ngroups);

+    getgroups(ngroups,groups);

+    while(ngroups--) if(gid==groups[ngroups]) { has_group=1; break; }

     if( mounted && !expect )

         fprintf( stderr, _("Error: device %s is already mounted to %s\n"), device, mp );

     else if( !mounted && expect )

         fprintf( stderr, _("Error: device %s is not mounted\n"), device );

-    if( mounted && expect && uid >= 0 && (uid_t) uid != getuid() && getuid() > 0) {

+    if( mounted && expect && uid >= 0 && (uid_t) uid != getuid() && getuid() > 0 && has_group == 0) {

         fprintf( stderr, _("Error: device %s was not mounted by you\n"), device );

         return 0;

     }

--- src/policy.h.orig   2005-11-01 12:25:54.000000000 +0100

+++ src/policy.h        2005-11-01 12:35:53.000000000 +0100

@@ -37,7 +37,7 @@

  *        uid, or -1 if uid is not present

  * @return fstab device name whose realpath() matches device; NULL if not found

  */

-const char* fstab_has_device( const char* fname, const char* device, char* mntpt, int *uid );

+const char* fstab_has_device( const char* fname, const char* device, char* mntpt, int *uid, int *gid );

 

 /**

  * Check whether a fstab-type file (fstab, /etc/mtab or /proc/mounts)

--- src/pmount-hal.c.orig       2006-06-17 18:08:04.891955544 +0200

+++ src/pmount-hal.c    2006-06-17 18:09:00.825452360 +0200

@@ -192,7 +192,7 @@

         enable_debug = 1;

 

     /* if this is an fstab device, use mount right away */

-    if( fstab_has_device( "/etc/fstab", devarg, NULL, NULL ) ) {

+    if( fstab_has_device( "/etc/fstab", devarg, NULL, NULL, NULL ) ) {

        debug( "%s is in /etc/fstab, calling mount\n", devarg );

        return spawnl( SPAWN_SEARCHPATH, "mount", "mount", devarg, NULL );

     }

```

Spero vivamente di non aver fatto casino con il copia incolla.

Questa patch funziona con la versione 0.9.11 di pmount, ovvero l'ultima. Per le versioni precedenti è sufficiente cancellare l'ultima parte relativa al file pmount-hal.c.

@klaimath: se preferisci usare automount sei libero di farlo. Però considera due cose:

1) D-BUS e Hal sono due demoni ormai indispensabili per ogni sistema linux desktop e dovresti averli installati e caricati sempre, perchè sono necessari per il corretto funzionamento di numerose applicazioni. Il programma in più da installare è solo ivman.

2) Automount funziona in parte a livello kernel e infatti, come hai detto tu, è necessario caricare un modulo del kernel per farlo funzionare. Ultimamente la tendenza, però, è quella di lasciare nel kernel solamente ciò che è strettamente necessario, al fine di ridurre i potenziali bug. Un esempio è udev, il cui predecessore devfs funzionava a livello kernel, che funziona completamente in modalità utente ed è un demone ben più importante di automount. In sostanza, l'obiettivo è quello di sgravare il kernel da lavori che non gli competono e che possono essere effettuati tranquillamente in spazio utente. Inoltre per automount vanno configurati i mount point, mentre ivman, tramite pmount, sfrutta la flessibilità e le potenzialità di Hal.

Poi ognuno fa la sua scelta, è il bello di linux.

----------

## klaimath

 *Onip wrote:*   

> kde non si appoggia (più) ad ivman forse è questo il problema che avevi. Credo abbia un suo tool specifico, che magari non hai emerso. Aspettiamo che qualche user kde si faccia vivo...
> 
> cmq se "vivi felice" così tanto meglio per te!
> 
> Byez

 

bhe non so se ci sono tool specifici. quello che so è che autofs con 1 riga di codice per ogni dispositivo me li monta e smonta senza troppi problemi. 

pensa che gli ho appena fatto "leggere" lo iomega zip, la pendrive, la macchina fotografica, una vecchissima webcam, il masterizzatore esterno e un altro pò di roba.

ciauz

----------

## klaimath

 *grick wrote:*   

> xXStefanoX:
> 
> xKlaimath:
> 
> Per tagliare la testa al toro ti direi di controllare se i tuoi i vari [p][u]mount sono setuid o meno. Per esempio nel mio sistema lo sono e mi ricordo che anche a forza di user[s] in fstab non c'e' modo di montare (almeno con il semplice mount) senza usare un bel chmod 4711 

 

tutto ok e infatti ora che sono passato a autofs monto e smonto senza nessun problema da sia da utente root che da utente comune in questo secondo caso anche cliccando sulle icone dei dispositivi che mi sono creato sul desktop.

----------

## klaimath

 *XstefanoX wrote:*   

> Ivman non usa /etc/fstab per stabilire i mount point ma li legge dal database di Hal.
> 
> ... cut ...
> 
> 

 

T[/topic]i ringrazio di questa esaurientissima spiegazione che mi ha permesso di avere le idee molto più chiare su questi tool che, ammetto, non conoscevo.

Adesso mi sono copiato la patch, scarico un pò di sorgenti e vedo di configurare il tutto.

Grazie ancors

Adriano

----------

## klaimath

 *XstefanoX wrote:*   

> 
> 
> @klaimath: se preferisci usare automount sei libero di farlo. Però considera due cose:
> 
> 1) D-BUS e Hal sono due demoni ormai indispensabili per ogni sistema linux desktop e dovresti averli installati e caricati sempre, perchè sono necessari per il corretto funzionamento di numerose applicazioni. Il programma in più da installare è solo ivman.
> ...

 

E' vero. Il bello di linux è proprio che non c'è uno schema per fare le cose.

Adesso do un occhiata a ivman, specialmente se riesco a installare la patch, e vedo un pò.

Grazie per l'aiuto

----------

## MeMyselfAndI

ma non so se hai notato che che ti hanno detto chiaramente che con kde non serve piu' ivman...

----------

## XstefanoX

 *MeMyselfAndI wrote:*   

> ma non so se hai notato che che ti hanno detto chiaramente che con kde non serve piu' ivman...

 No, non è vero. Con kde non c'è l'automount, infatti, come .:deadhead:. ha scritto *.:deadhead:. wrote:*   

> Io uso kde e senza ivman appena collego una periferica mi compare nella systray un'icona della nuova periferica. Poi col mouse la monto e la smonto senza problemi.

 Non mi pare che questo si definisca automount. Inoltre ivman non c'entra niente con kde. Funziona anche da console, se non usi X. E' stato fatto proprio per essere indipendente dal window manager (cosa che non è, per esempio, gnome-volume-manager).

----------

## MeMyselfAndI

 :Embarassed:   :Embarassed:   ecco cosa succede a parlare di cose che non si sanno precisamente... sinceramente pensavo che ivman fosse una sorta di gnome-volume-manager, ma mi son proprio sbagliato! sorry

----------

## klaimath

Aggiorno per dire che ho risolto. Ivman non richiede più la patch per smontare i dispositivi e funziona abbastanza bene. 

Grazie a tutti per l'aiuto.

Adriano

----------

## ercoppa

Io uso kde+dbus+hal+pmount+ivman e ho notato che se non c'è ivman non smonta automaticamente le periferische, e che ivman (o hal) legge fstab in quanto io ho inserito nella riga della pennetta async e lui se lo becca come parametro di montaggio (la scrittura era molto lenta, ora è normale).

----------

## MeMyselfAndI

scusa eh ma per vedere se legge o meno da /etc/fsta a parte esperimenti empirici... basta guardare dove monta la chiavetta usb, se sotto /media o sotto l'indirizzo da te specificato in /etc/fstab.

----------

## ercoppa

Hai ragione scusa, mi ero dimenticato di dirlo monta dove indico io nel fstab

----------

