PDA

Visualizza la versione completa : Script installa script


psykopear
05-01-2008, 11:33
Ho fatto uno script che installa in /usr/bin/ tutti gli script chiamati script* (quindi script1, script2 eccetera). Funziona, però mi servirebbe un metodo più ortodosso per avere i privilegi di root, e gia che ci siamo sarebbe fico metterci la barra che scorre (tipo quando scarichi i file con wget).



#!/bin/bash
echo "Ora inserisci la password di root, e una volta loggato, premi ctrl+d"
su
chmod +x script*
echo "Ora installerò gli script sul tuo computer"
cp script* /usr/bin/
echo "Ora puoi avviare gli script digitandone i nomi (script1, script2 ecc)"

psykopear
05-01-2008, 11:42
PS: magari prima di dare i privilegi, controllare se l'utente li ha gia con un if. come posso fare?

weseven
05-01-2008, 12:09
if [ `type -p sudo` ]; then SUDOINSTALLED=1; fi
command=`echo $@ | awk '{print $1}'`
if [ $UID -eq 0]; then
echo "all hail master root"
sleep 2;
else if [ $SUDOINSTALLED -eq 1 ] && sudo -l | grep "\(${command}\ *$\|ALL\)" 1>/dev/null; then
#echo "Allowed to use sudo $command"
sudo $@ || return 1
fi
fi


questo ad esempio è il metodo usato in yaourt (leggermente abbreviato).

(ah, io gli script che fai te per scrupolo li metterei in /usr/local/bin :) )

psykopear
05-01-2008, 13:37
Originariamente inviato da weseven
if [ `type -p sudo` ]; then SUDOINSTALLED=1; fi
command=`echo $@ | awk '{print $1}'`
if [ $UID -eq 0]; then
echo "all hail master root"
sleep 2;
else if [ $SUDOINSTALLED -eq 1 ] && sudo -l | grep "\(${command}\ *$\|ALL\)" 1>/dev/null; then
#echo "Allowed to use sudo $command"
sudo $@ || return 1
fi
fi


questo ad esempio è il metodo usato in yaourt (leggermente abbreviato).

(ah, io gli script che fai te per scrupolo li metterei in /usr/local/bin :) )

ok

questo quindi per controllare se csi hanno i permessi di root e in caso, chiedere password.
ora sto a pranzo, provo dopo

psykopear
05-01-2008, 14:57
no, così non va, sarebbe meglio con su anzichè sudo, perchè sennò, ecco cosa succede:

psykopear@ubuntu7:~/script$ ./Install
Ora inserisci la password di root, e una volta loggato, premi ctrl+d
[sudo] password for psykopear:
usage: sudo -K | -L | -V | -h | -k | -l | -v
usage: sudo [-HPSb] [-p prompt] [-u username|#uid]
{ -e file [...] | -i | -s | <command> }
./Install: line 10: return: can only `return' from a function or sourced script
Digita il nome dello script che vuoi installare
script1
cp: impossibile creare il file normale `/usr/local/bin/script1': Permesso negato
Ora installerò gli script sul tuo computer
Ora puoi avviare gli script digitandone i nomi (script1, script2 ecc)
psykopear@ubuntu7:~/script$

weseven
05-01-2008, 16:31
non copiare e incollare, quello era un semplice esempio ridotto del metodo usato in yaourt. è ovvio che ci vogliono altri accorgimenti (puoi ad esempio dare un'occhiata a yaourt stesso, è uno script bash).

psykopear
05-01-2008, 18:38
if [ `type -p su` ]; then SUINSTALLED=1; fi
command=`echo $@ | awk '{print $1}'`
if [ $UID -eq 0]; then
echo "all hail master root"
sleep 2;
else if [ $SUINSTALLED -eq 1 ] && su -l | grep "\(${command}\ *$\|ALL\)" 1>/dev/null; then
#echo "Allowed to use su $command"
su $@ || return 1
fi
fi


Così per esempio? (ora non posso provare subito)

psykopear
05-01-2008, 18:40
Originariamente inviato da weseven
non copiare e incollare, quello era un semplice esempio ridotto del metodo usato in yaourt. è ovvio che ci vogliono altri accorgimenti (puoi ad esempio dare un'occhiata a yaourt stesso, è uno script bash).

PS: Attualmente non c'è arch sull'hard disk (sto provando un po distro, e quello era l'unico spazio disponibile), per cui non posso vedere tutto yaourt

psykopear
06-01-2008, 19:40
ho risolto in modo abbastanza semplice, però bisogna avere sudo funzionante.

#!/bin/bash
for elencosript
do
echo "Ora inserisci la password di utente"
sudo chmod +x $elencosript
echo "Ora installerò gli script sul tuo computer"
sudo cp $elencosript /usr/local/bin/
echo "Ora puoi avviare gli script digitandone i nomi (script1, script2 ecc)"
done


ho fatto anche uno scriptino di backup semplice semplice

#!/bin/bash
for miofile
do
cp $miofile /home/psykopear/backup/
echo "$miofile salvato!"
done

a posto di /home/psykopear posso mettere $HOME/ no?

ora provo

edit: perfetto, sostituito /home/psykopear/backup con /$HOME/backup

psykopear
06-01-2008, 19:45
adesso come faccio a dirgli di creare la directory backup se non c'è, e di stare buono se c'è?

Loading