libvirt - script di avvio da utente semplice

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3975
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

libvirt - script di avvio da utente semplice

Messaggio da joe »

Partiamo dallo scopo, voglio fare uno script che si lancia così:

Codice: Seleziona tutto

joe@machine~: stampa.sh doc.pdf
Ovviamente lo script serve ad inviare un documento PDF in stampa.
Ora, siccome la stampante in questione non c'è stato verso di gestirla nativamente da Linux, ho messo in piedi un sistema quantomeno "esotico":

- si avvia una VM con windows via libvirt
- sul sistema guest è in ascolto una sorta di servizio, in realtà uno script batch, che se trova uno o più PDF in una directory di "fake spool" li invia alla stampante
- la directory di fake spool fa parte di una directory condivisa in rete con la macchina host

In pratica il mio comando "stampa.sh documento.pdf" dovrà:
- avviare libvirt
- avviare la VM windows
- agganciare la stampante (precedentemente accesa e collegata ovvio) via redirezione USB
- montare la directory condivisa (questo manualmente lo faccio da utente semplice avendo predisposto /etc/fstab)
- copiare il documento da stampare nella directory di fake spool

Vediamo i comandi che lancio a mano solitamente:

Codice: Seleziona tutto

su -
/etc/rc.d/rc.libvirt start
virsh start win7
virsh attach-device win7 --file epson-dx4400.xml --live
da utente, in realtà uso un alias che non ricordavo più si appoggiasse a sudo va be', forse serviva comunque sudo per via di CIFS, ad ogni modo:

Codice: Seleziona tutto

sudo /sbin/mount /home/joe/sharelibvirt
cp documento.pdf  sharelibvirt/spool
E a questo punto la stampa del documento dovrebbe partire.

La domanda che volevo porre qui era la seguente:
come posso fare a creare lo script stampa.sh che esegua tutte queste operazioni?
La domanda può sembrare banale, ma l'aspetto "insidioso" è che vorrei lanciarlo da utente semplice. Ovviamente qualcosa richiederà sudo, ma chiedo soprattutto perché in passato con libvirt avviata via sudo avevo riscontrato dei problemi, probabilmente riguardanti permessi vari che ora non ricordo.

Se avete qualche dritta anche e soprattutto in base alla vostra esperienza con libvirt...
Grazie in anticipo! :)

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3975
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: libvirt - script di avvio da utente semplice

Messaggio da joe »

Mi rispondo al volo:
ho provato a copiare nello script i comandi solitamente eseguiti da root a mano. Esempio:

Codice: Seleziona tutto

/etc/rc.d/rc.libvirt start
virsh start win7
virsh attach-device win7 --file epson-dx4400.xml --live
Ho poi configurato sudo per lanciare lo script, che ho chiamato stampa.sh.

Codice: Seleziona tutto

# cat /etc/sudoers.d/stampash
joe master =NOPASSWD: /home/joe/path-to-scripts/stampa.sh
Infine per comodità ho anche fatto un alias in .bashrc

Codice: Seleziona tutto

$ alias stampa
alias stampa='sudo /home/joe/pat-to-scripts/stampa.sh'
Quindi ricapitolando rispondendomi da solo:
- metto i comandi che vanno eseguiti da root nello script
- sarebbe uno script che può funzionare solo se eseguito da root
- allora aggiungo l'esecuzione dello stesso a sudo, impostano che l'utente "joe" possa eseguire lo script come se lo eseguisse root
- e a quel punto i comandi contenuti nello script dovrebbero essere eseguiti allo stesso modo rispetto all'esecuzione manuale da un shell di root.

O per lo meno, nei test che ho condotto nei giorni scorsi sembra funzionare tutto come atteso.
Se ci possono essere sorprese, e a qualcuno saltasse all'occhio la possibilità di malfunzionamenti con un approccio del genere, sono tutt'orecchi! ;)

Rispondi