Toon posts:

CDrom laten umounten over netwerk

Pagina: 1
Acties:

Verwijderd

Topicstarter
In ons netwerk (12 PC's) hebben de workstations geen CDroms. In plaats daarvan hangt er één CD-rom in een linuxbakkie. Deze moet vrij toegankelijk zijn voor iedereen, en dat is hij ook. Zodra er een CD in gaat wordt het ding fatsoenlijk gemount en kan iedereen erop. Als de persoon die gekeken heeft uitlogt op zijn windows-workstation, wordt de CDrom ge-umount en kan de CDrom er weer uit.

Nu het probleem:
Als meerdere mensen op de CD-rom kijken, haalt het niet meer uit als degene die de CDrom erin deed uitlogt en kan een niet-systeembeheerder de CD-rom niet meer openen.

Het liefst zou ik ook een samba-share aanmaken voor de CD-rom die bij het inloggen op het workstation direct zichtbaar is (toegankelijkheid), maar ik ben bang dat dit erin resulteert dat de CDrom iedere keer gemount wordt als er weer iemand inlogt en dat bovenstaand probleem ontzettend vaak gaat optreden.

Is er een manier waarop ik ervoor kan zorgen dat de CD-rom slechts door één persoon tegelijk bekeken kan worden, of dat er maar 1 persoon die de CD bekeken heeft hoeft uit te loggen om de CDrom weer open te krijgen?

Wat helemaal luxe zou zijn is als alleen degene die als eerste inlogt na het vullen van de CDrom-drive de CD zou kunnen bekijken.

FStab:

/dev/cdrom /cdrom auto defaults,ro,user,noauto,umask=0 0 0

smb.conf:

[cdrom]
comment = CD-rom
writable = no
locking = no
path = /cdrom
guest ok = yes
read only = yes
public = yes
root preexec = /bin/mount /cdrom
root postexec = /bin/umount /cdrom

  • Koffie
  • Registratie: Augustus 2000
  • Laatst online: 09:12

Koffie

Koffiebierbrouwer

Braaimeneer

Ik denk dat je meer kans hebt in NOS, alstie dara niet goed staat moet een mod 'm toch maar weer ff terug schoppen :P

Move NT > NOS

Tijd voor een nieuwe sig..


  • imdos
  • Registratie: Maart 2000
  • Laatst online: 04-05 14:00

imdos

I use FreeNAS and Ubuntu

En om hoeveel cd's gaat het dan in totaal :?

Kan je niet van zeg 10 cd's met dd een image op de schijf maken en die mounten in een loop en zo altijd die cd beschikbaar te hebben?

pvoutput. Waarom makkelijk doen, als het ook moeilijk kan! Every solution has a new problem


  • odysseus
  • Registratie: Augustus 2000
  • Laatst online: 14:42

odysseus

Debian GNU/Linux Sid

Dit is best een lastig probleem, maar ik doe even een gooi in de richting van een mogelijk antwoord. Hierbij ga ik ervan uit dat bij het mounten gewoon mount wordt gebruikt (desnoods via automount of zo).

• Verplaats mount naar mount.real en umount naar umount.real
• Maak een script 'mount' aan dat kijkt door welke gebruiker het wordt aangeroepen ($(whoami) bijvoorbeeld) en sla die naam ergens op. Laat daarna 'mount' mount.real aanroepen met de gewenste opties.
• Nu kunnen alle gebruikers er gewoon bij, maar er is opgeslagen wie het ding heeft gemount.
• Maak een script 'umount' aan dat kijkt of de aanvrager dezelfde is als de persoon die gemount heeft of dat het root is en sluit dan alle processen af die in het mountpoint werken ("lsof +D /mnt/cdrom" is daar een begin voor). Vervolgens umount je de CD, eventueel met gebruik van 'umount.real -f /dev/cdrom'.

Er zijn afhankelijk van je wensen nog andere mogelijkheden en uitbreidingen of versimpelingen, maar dit is een eerste idee ;).

Leven is het meervoud van lef | In order to make an apple pie from scratch, you must first create the universe.


Verwijderd

of ISO files, en mounten met

mount -t isofs ....

Dan kun je meerdere CD's serveren, over meerdere drives. Kan je ook nog in je fstab gooien, zodat je enkel

mount /mnt/Encarta

moet doen om de Encarta CD (bijvoorbeeld) te mounten.

  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 02-05 18:38

deadinspace

The what goes where now?

Het is mij niet helemaal duidelijk of gebruikers die cdrom benaderen via een SMB share, via een shell account, of beide, maar ik kan twee oplossingen bedenken:

- In plaats van "user" in /etc/fstab "users" gebruiken. Dit zorgt ervoor dat na het mounten van de cdrom iedereen hem kan unmounten (mits niet meer in gebruik uiteraard). Zo kan user A inloggen en de CD mounten en gebruiken, waarna user B ook inlogt en ook de CD gebruikt. Als user A dan uitlogt kan hij de cdrom niet unmounten (user B maakt er nog gebruik van), maar user B kan later de cdrom umounten.

- Alleen samba rechten geven om het device te mounten en unmounten, en dan samba de cdrom automatisch laten mounten en unmounten bij het benaderen van die share.

Verwijderd

Topicstarter
deadinspace schreef op 08 mei 2003 @ 21:33:
Het is mij niet helemaal duidelijk of gebruikers die cdrom benaderen via een SMB share, via een shell account, of beide, maar ik kan twee oplossingen bedenken:

- In plaats van "user" in /etc/fstab "users" gebruiken. Dit zorgt ervoor dat na het mounten van de cdrom iedereen hem kan unmounten (mits niet meer in gebruik uiteraard). Zo kan user A inloggen en de CD mounten en gebruiken, waarna user B ook inlogt en ook de CD gebruikt. Als user A dan uitlogt kan hij de cdrom niet unmounten (user B maakt er nog gebruik van), maar user B kan later de cdrom umounten.

- Alleen samba rechten geven om het device te mounten en unmounten, en dan samba de cdrom automatisch laten mounten en unmounten bij het benaderen van die share.
de gebruikers hebben geen verstand van linux (voor zover ik dat wel heb dan :P) en dus geen shell login. Het is juist de bedoeling dat de gebruiker die de CD-rom erin heeft gestopt 'm er weer uit kan halen zonder dat hij hoeft te wachten op gebruiker B, dus wat dat betreft zou het volgens jou zo goed moeten staan?

Ik heb iig nog iets leuks gevonden:

In smb.conf kan bij de betreffende share een regeltje worden opgenomen:

max connections = 1

het resultaat is verbluffend ;)
1 user kan de CD bekijken en alle volgende connecties worden geweigerd. Werkt prima...
totdat ik mezelf (die de CD-rom bekeken had) uitlogde en probeerde de CD-rom er weer uit te halen... niet dus! Op de 1 of andere manier is de CD-rom nog steeds gemount :S
Dit ging dus wel goed vóór ik dat regeltje "max connections = 1" toevoegde in smb.conf... iemand een idee hoe dat weer te verhelpen is?
Want dit regeltje heeft in principe wel precies het effect dat ik wil!

  • odysseus
  • Registratie: Augustus 2000
  • Laatst online: 14:42

odysseus

Debian GNU/Linux Sid

Verwijderd schreef op 09 mei 2003 @ 16:02:
Want dit regeltje heeft in principe wel precies het effect dat ik wil!
Je kunt even kijken met lsof +D /mnt/cdrom welk proces er nog met die bestanden bezig is. Als je dat eenmaal weet dan kun je verder zoeken naar een oplossing :).

Leven is het meervoud van lef | In order to make an apple pie from scratch, you must first create the universe.


Verwijderd

Topicstarter
lsof +D /cdrom (daar wordt de CD-rom normaal gemount) geeft geen output.

Er is een duidelijker probleem geloof ik:

Ook als ik gekeken heb en uitgelogd onthoud hij dat er 1 connectie gaande is of zo (maar geen proces te bekennen!) want als ik het dan onder m'n eigen naam nog eens probeer, geeft de computer te kennen dat er maar 1 connectie mag bestaan (die ik eigenlijk zojuist verbroken had :S)
Samba restarten helpt dan niet eens, om het probleem te verhelpen moet ik eerst de max connections naar 0 zetten (oneindig), op de share kijken, en de max connections weer naar 1 zetten en samba herstarten. Pas dan kan ik weer eenmalig een nieuwe connectie maken...

edit:

lsof:
smbd 1343 root cwd DIR 3,64 2048 45056 /cdrom
smbd 1544 root cwd DIR 3,64 2048 45056 /cdrom

dit proces wordt niet beëindigd als er iemand uitlogt...
sterker nog... het wordt opgestart als een CD-bekijker uitlogt :S

Misschien als iemand een script heeft om bovenstaande processen automatisch op te sporen en te killen dat het wel lukt?
Zolang zo'n proces draait is het 'device busy' en kan er dus niet ge-umount worden

[ Voor 31% gewijzigd door Verwijderd op 09-05-2003 17:07 ]


Verwijderd

wat geeft

cat /etc/mtab
smbstatus

want dat uitloggen van een netwerkshare? hoe doe je dat? bij mij is dat met
net use netwerkschijf: /delete
ofzoiets, en dan pas is die Samba login weg. Doe je dat zo? Anders zal smbstatus je dat denk'k wel vertellen.

  • G33rt
  • Registratie: Februari 2002
  • Laatst online: 22-06-2022
Verwijderd schreef op 09 May 2003 @ 16:31:
Zolang zo'n proces draait is het 'device busy' en kan er dus niet ge-umount worden
[/edit]
ik heb vandaag met wat geklooi de UT2003 (die gaf ook busy terwijl ie om de volgende cd vroeg |:() cd geunmount te krijgen.

Als je - in mijn geval dan - /dev/hdc toevoegt met gid=$gid,uid=$uid (van de betreffende user, voor default zetten dus) met als mountpoint /mnt/cdrom, kon je het omzeilen door vervolgens umount /dev/hdc (wel met de goede uid en gid natuurlijk, je zou ook alleen gid kunnen doen als al die users in dezelfde groep zitten) te doen.

ik weet niet of dat kan via het netwerk, maar het is altijd een poging waard.

sorry als je er niets aan hebt, ben nog aan het newbie-en :P

  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 02-05 18:38

deadinspace

The what goes where now?

Je zou anders misschien iets kunnen maken dat als iemand bij de cdrom op het eject knopje duwt, dat de samba processes die de cdrom lezen gemaaid worden, en de cdrom geunmount en geeject wordt. Ik weet niet hoe goed samba daar tegen kan, maar op zich zou zoiets wel kunnen werken.

Kijk anders eens op freshmeat.net ofzo... Daar kwam ik dingen tegen die wel interessant leken, zoals autorun:
autorun automagically recognizes all available CDROMs in the system, mounts them upon insertion of a media and executes a possible autorun executable on the CD. The user can remove the media; autorun will call unmount after that.
Het uitvoeren van autorun is niet zo boeiend, maar de rest wel. Ik weet overigens niet zeker hoe ermee omgegaan wordt dat een filesystem geunmount wordt nadat het medium verwijderd is.

Of cd-server, misschien dat dit project een interessante oplossing heeft:
cd-server is a set of Perl scripts which allow a Linux box with a CDROM drive and a large hard drive to act as a network CDROM server. CDROMs are cached to the hard drive and shared out to the network. It currently supports NFS and Samba for sharing.

Verwijderd

het hangt een beetje af hoeveel verschillende cd's jullie bekijken, en met welke frequentie. De meeste standaard zut, windows os/office/troep cd's linux cd's etcetcetc, die kun je dd'en en via loopback filesystems aan samba aanbieden. Voor de frequente cd's is autorun idd interesant. Het maakt niet uit dat de cd al uit de drive is voor het umounten. Het gaat hier om een read-only medium, dus umount heeft er totaal geen probleem mee.

  • odysseus
  • Registratie: Augustus 2000
  • Laatst online: 14:42

odysseus

Debian GNU/Linux Sid

Verwijderd schreef op 09 May 2003 @ 22:04:
Het maakt niet uit dat de cd al uit de drive is voor het umounten. Het gaat hier om een read-only medium, dus umount heeft er totaal geen probleem mee.
Umount heeft er geen probleem mee, maar de meeste CDROM-spelers worden gelockd bij het mounten...je kunt dus niet zo makkelijk de CD uit de drive halen :). De eenvoudigste optie lijkt het om gewoon die smbd-processen af te maaien en dan te umounten. Let in het volgende voorbeeld op de backquotes (``) en gewone quotes (''):
code:
1
kill `lsof +D /cdrom | awk '{print $2}'`

Leven is het meervoud van lef | In order to make an apple pie from scratch, you must first create the universe.


Verwijderd

Topicstarter
Verwijderd schreef op 09 mei 2003 @ 18:32:
wat geeft

cat /etc/mtab
smbstatus

want dat uitloggen van een netwerkshare? hoe doe je dat? bij mij is dat met
net use netwerkschijf: /delete
ofzoiets, en dan pas is die Samba login weg. Doe je dat zo? Anders zal smbstatus je dat denk'k wel vertellen.
In mtab staat niets wat met de CD-rom te maken heeft, eerlijk gezegd weet ik niet eens waar mtab precies voor dient.

Dat met die net use ga ik eens proberen denk ik.
odysseus schreef op 09 May 2003 @ 22:14:
[...]
code:
1
kill `lsof +D /cdrom | awk '{print $2}'`
is ook goed bruikbaar, maar hoe zorg ik ervoor dat deze regel wordt uitgevoerd als OF de gebruiker uitlogt op z'n windows-workstation, OF dat deze wordt uitgevoerd als er op het eject-knopje wordt gedrukt?


Reactie op deadinspace:

dat eerste progy lijkt dan niet zo handig (unmounten na verwijderen medium, wat niet gaat lukken omdat ie nog niet ge-unmount is), maar die tweede zou wel leuk kunnen zijn :7 Als bovenstaande twee dingen niet lukken (lijken mij makkelijker), dan kijk ik daar eens naar.

Verwijderd

Topicstarter
Ik heb nu de samba-share standaard in windows gezet m.b.v. een logon.cmd (net use ....)
Het gebruiken van "net use /delete" in een logoff.cmd heeft geen positief effect.

Deze output kreeg ik na het uitvoeren van jouw regel Odysseud:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
jukebox:/cdrom# lsof +D /cdrom
COMMAND  PID USER   FD   TYPE DEVICE SIZE  NODE NAME
bash    4267 root  cwd    DIR   3,64 2048 45056 /cdrom
lsof    4387 root  cwd    DIR   3,64 2048 45056 /cdrom
lsof    4388 root  cwd    DIR   3,64 2048 45056 /cdrom
jukebox:/cdrom# kill `lsof +D /cdrom | awk '{print $2}'`
bash: kill: PID: no such pid
bash: kill: (4389) - No such process
bash: kill: (4390) - No such process
bash: kill: (4391) - No such process
bash: kill: (4392) - No such process
jukebox:/cdrom# lsof +D /cdrom
COMMAND  PID USER   FD   TYPE DEVICE SIZE  NODE NAME
bash    4267 root  cwd    DIR   3,64 2048 45056 /cdrom
lsof    4393 root  cwd    DIR   3,64 2048 45056 /cdrom
lsof    4394 root  cwd    DIR   3,64 2048 45056 /cdrom


Zoals je kunt zien is alleen de bovenste te killen :S
Ik krijg dus nu de CD er niet meer uit :P

Maar op zich lijkt het me wel een effectieve methode... Hoe zorg ik ervoor dat zoiets wordt uitgevoerd als er op het eject-knopje wordt gedrukt?

Verwijderd

Sorry, als ik iets doms ga zeggen, ik heb niet de hele draad gelezen :P
root postexec = /bin/umount /cdrom

Als meerdere mensen op de CD-rom kijken, haalt het niet meer uit als degene die de CDrom erin deed uitlogt en kan een niet-systeembeheerder de CD-rom niet meer openen.

Zolang zo'n proces draait is het 'device busy' en kan er dus niet ge-umount worden
Je bent bekend met de optie -f en -L van umount?
code:
1
2
3
4
5
6
7
      -f     Force  unmount  (in case of an unreachable NFS sys­
              tem).  (Requires kernel 2.1.116 or later.)

       -l     Lazy  unmount.  Detach  the  filesystem  from   the
              filesystem  hierarchy  now,  and cleanup all refer­
              ences to the filesystem as soon as it is  not  busy
              anymore.  (Requires kernel 2.4.11 or later.)

mbv onderstaande optie is het bijv. mogelijk te voorkomen dat meerdere keren de cdrom gemount wordt
preexec close (S)
This boolean option controls whether a non-zero return code from preexec should close the service
being connected to.

Default: preexec close = no

Verwijderd

Topicstarter
ga ik dat ook eens proberen, kun je die opties bij umount nog iets meer uitleggen?
Force is op zich wel duidelijk, maar wat is die -L optie? (en is het hoofdletter of niet?)

  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 02-05 18:38

deadinspace

The what goes where now?

Verwijderd schreef op 12 mei 2003 @ 01:53:
dat eerste progy lijkt dan niet zo handig (unmounten na verwijderen medium, wat niet gaat lukken omdat ie nog niet ge-unmount is)
Ja, maar ik gok dat hij het ejecten forced. Hoe weet ik niet, maar het zou kunnen.

Overigens, over de -f en -l opties van umount:

-f heeft alleen betrekking op NFS mounts.

-l is een interessante optie (ik kende hem nog niet), maar het device blijft wel gelocked totdat er geen files meer op dat filesystem open zijn.

Verwijderd

Topicstarter
Ik dacht misschien smb.conf aan te passen en het volgende te doen:
code:
1
root postexec = /usr/local/bin/script

en dan in het script zoiets als:
code:
1
2
3
#!/bin/sh
kill `lsof +D /cdrom | awk '{print $2}'`
umount /cdrom


dit werkt alleen niet... komt dat door een fout in de code of grijp ik er gewoon hard naast?

handmatig werkt het wel :)

edit:

lsof +D /cdrom |awk '{print $2}' geeft een output die denk ik niet bruikbaar is voor kill, nl.:
PID
xxxx
terwijl ik alleen xxxx moet hebben

Als ik dat nummer eruit kan trekken kan ik dus middels een scriptje alle processen die met de cdrom te maken hebben killen en de cdrom daarna umounten :)

Heeft iemand een aanpassinkje paraat waarmee ik alleen de tweede regel uitlees?

--------------------------------------------------------------------------------------
Btw... autorun gaf een fout bij het compileren en cd-server krijg ik ook niet aan de praat (geen foutmeldingen, maar ik zie niet echt wat gebeuren)

[ Voor 65% gewijzigd door Verwijderd op 13-05-2003 16:39 ]


  • odysseus
  • Registratie: Augustus 2000
  • Laatst online: 14:42

odysseus

Debian GNU/Linux Sid

Verwijderd schreef op 13 May 2003 @ 12:44:
[...]
dit werkt alleen niet... komt dat door een fout in de code of grijp ik er gewoon hard naast?

handmatig werkt het wel :)
Je kunt even testen of het script wel wordt uitgevoerd door er een regel als 'echo TEST > /een/bestand/met/schrijfrechten'. Als je die tekst niet in het bestand krijgt, dan weet je dat er een probleem zit in je smb.conf, als je wel uitvoer krijgt dan ligt het toch aan je script (het zou wel eens te weinig rechten kunnen hebben bijvoorbeeld).

Leven is het meervoud van lef | In order to make an apple pie from scratch, you must first create the universe.


Verwijderd

Verwijderd schreef op 13 May 2003 @ 12:44:lsof +D /cdrom |awk '{print $2}' geeft een output die denk ik niet bruikbaar is voor kill, nl.:
PID
xxxx
terwijl ik alleen xxxx moet hebben
Probeer het eens met
code:
1
lsof +D /cdrom | tail +2 | awk '{ print $2 }'
Dan ben je de eerste regel uit de lsof output kwijt.
Ik weet niet of kill problemen heeft met twee keer dezelfde PID in z'n argumenten, anders kun je ook nog
code:
1
lsof +D /cdrom | tail +2 | sort | uniq | awk '{ print $2 }'
proberen

  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 02-05 18:38

deadinspace

The what goes where now?

Hmm, mag ik even opmerken dat processes die geen files open hebben op de cdrom maar wel een directory op de cdrom als cwd (current working directory) hebben ook het umounten blokkeren? Die verschijnen niet in de output van lsof.

  • odysseus
  • Registratie: Augustus 2000
  • Laatst online: 14:42

odysseus

Debian GNU/Linux Sid

code:
1
2
3
4
5
6
       +d s     This  option  causes lsof to search for all open instances of
                directory s and the files and directories it contains at  its
                top  level.  This option does NOT descend the directory tree,
                rooted at s, nor does it follow  symbolic  links  within  it.
                The  +D D option may be used to request a full-descent direc-
                tory tree search, rooted at directory D.

Naar mijn mening beweert deze tekst dat ook geopende directories worden weergegeven. Dat blijkt in de praktijk ook zo te zijn. Ik open een terminal in ~/test en draai vervolgens in een andere terminal het commando 'lsof +D ~/test'. De uitvoer is dan als volgt:
code:
1
2
COMMAND  PID USER   FD   TYPE DEVICE SIZE   NODE NAME
bash    3230 kde3  cwd    DIR    3,1 4096 357633 test

Je ziet hier ook de 'cwd' weer terug komen :).

Leven is het meervoud van lef | In order to make an apple pie from scratch, you must first create the universe.


  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 02-05 18:38

deadinspace

The what goes where now?

Hmm, mag ik even opmerken dat ik over die optie heengelezen heb? O-) :+

Verwijderd

Topicstarter
Scriptje werkt op zich prima, hij killt alle processen, maar... de cdrom blijft stiekem toch gemount...
Als ik handmatig een tweede keer het script uitvoert umount hij wel.
Kan dit liggen aan het feit dat het killen van de processen even duurt en dat het script al bij het umounten is voordat de processen gekillt zijn?
Zoja, hoe kan ik dit oplossen, zonee, waar kan het dan aan liggen en hoe los ik dát op?

Hieronder scriptje:
code:
1
2
3
4
#!/bin/sh
PID=`lsof +D /cdrom| tail +2 |awk {'print $2'}`
kill $PID
/bin/umount /cdrom


Bij voorbaat dank

Verwijderd

Zoiets?
code:
1
2
3
4
5
6
#!/bin/sh
PID=`lsof +D /cdrom| tail +2 |awk {'print $2'}`
kill $PID
sleep 1
kill -9 $PID
/bin/umount -f /cdrom

[ Voor 6% gewijzigd door Verwijderd op 16-05-2003 18:23 . Reden: oeps ]

Pagina: 1