Funzioni

AvoConnect poggia le sue basi su un file di funzioni che serve a fare funzionare le sue app e manipolare i file di sistema.

isroot () {
   #info_per_la_documentazione Non rimuovere le linee di commento sottostanti
   #Pubblicato: Si
   #Stato: Stabile
   #Nome: isroot
   #Descrizione: Verifica se sei root oppure no
   #Parametri:
   #Richiede:
   #Restituisce: Esce se non sei root
   #fine_info_per_la_documentazione
   if [ "$EUID" -ne 0 ]
   then
  
   echo "Questo script va eseguito come root "
   exit 1
   else
   echo "Bene , sei root"
   ISROOT="YES"
   fi
}

isuser () {
   #info_per_la_documentazione Non rimuovere le linee di commento sottostanti
   #Pubblicato: Si
   #Stato: Stabile
   #Nome: isuser
   #Descrizione: Verifica se sei non sei root
   #Parametri:
   #Richiede:
   #Restituisce: Esce se sei root
   #fine_info_per_la_documentazione
   if (whoami != root)
   then
   echo "Non sei utente root"
   ISUSER="YES"
   else
   echo "Non puoi eseguire questo script da root"
   exit 1
   fi
}

issudo () {
   #info_per_la_documentazione Non rimuovere le linee di commento sottostanti
   #Pubblicato: Si
   #Stato: Stabile
   #Nome: issudo
   #Descrizione: verifica se sei nei sudoers
   #Parametri:
   #Richiede:
   #Restituisce: Esce se non sei un sudoers
   #fine_info_per_la_documentazione
   if sudo -vn 2> /dev/null; then
   echo "Bene, sei nei sudoers"
   ISSUDO="YES"
   else
   echo "Non hai i permessi necessari per eseguire questo script"
   exit 1
   fi
}

isconnected () {
   #info_per_la_documentazione Non rimuovere le linee di commento sottostanti
   #Pubblicato: Si
   #Stato: Stabile
   #Nome: isconnected
   #Descrizione: Verifica se sei collegato a internet
   #Parametri:
   #Richiede:
   #Restituisce: Esce se non sei collegato a internet
   #fine_info_per_la_documentazione
   wget -q --spider https://www.avoconnect.itisavogadro.org/
  
   if [ $? -eq 0 ]; then
   echo "Bene, siamo online"
   ISCONNECTED="YES"
   else
   echo "Sembra che non sei collegato a internet, correggi e riprova"
   exit 1
   fi
}

logga () {
   #info_per_la_documentazione Non rimuovere le linee di commento sottostanti
   #Pubblicato: Si
   #Stato: Stabile
   #Nome: logga
   #Descrizione: Scrive nei log qualcosa, se sono root lo fa su $WORKINGFOLDER/log/install.log, altrimenti su /home/$utente/.log/install.log.
manda anche il messaggio a schermo tramite zenity.
   #Parametri: messaggio
   #Richiede: un messaggio da loggare
   #Restituisce: scrittura e output zenity
   #fine_info_per_la_documentazione
  DATAEVENTO=`date +"%Y-%m-%d %H:%M:%S"`
  
  if (( $EUID == 0 )); then
   utente="root"
   echo -e "$DATAEVENTO -- $1" >> $WORKINGFOLDER/log/install.log
   # notify-send -i "/usr/AvoScript/img/avologo.png" -t 1300 "$1"
  else
   utente=$(whoami)
   mkdir -p /home/$utente/.log/
   touch /home/$utente/.log/install.log
   echo -e "$DATAEVENTO -- $1" >> /home/$utente/.log/install.log
  
  fi
  zenity --info --text="$1" --timeout 2 --title="AvoScript $utente" --width="300"
  
  
}

dimmi () {
   #info_per_la_documentazione Non rimuovere le linee di commento sottostanti
   #Pubblicato: Si
   #Stato: Stabile
   #Nome: dimmi
   #Descrizione: manda un messaggio a schermo tramite zenity.
   #Parametri: messaggio
   #Richiede: un messaggio da inviare
   #Restituisce: output zenity
   #fine_info_per_la_documentazione
  DATAEVENTO=`date +"%Y-%m-%d %H:%M:%S"`
  
   # notify-send -i "/usr/AvoScript/img/avologo.png" -t 1300 "$1"
   zenity --info --text="*** $1 ***" --timeout 2 --title="AvoScript" --width="400"
  
}

loggauser () {
   #info_per_la_documentazione Non rimuovere le linee di commento sottostanti
   #Pubblicato: Si
   #Stato: DEPRECATO
   #Nome: loggauser
   #Descrizione: integrato in logga
   #Parametri: messaggio
   #Richiede: un messaggio da loggare
   #Restituisce: output su file
   #fine_info_per_la_documentazione
  DATAEVENTO=`date +"%Y-%m-%d %H:%M:%S"`
   echo -e "$DATAEVENTO -- $1" >> $LOGUSERFILE
   echo -e "$DATAEVENT -- $1"
   notify-send -i "/usr/AvoScript/img/avologo.png" -t 1300 "$1"
  
}

escape_su_sed() {
   #info_per_la_documentazione Non rimuovere le linee di commento sottostanti
   #Pubblicato: Si
   #Stato: Stabile
   #Nome: escape_su_sed
   #Descrizione: Funzione di appoggio richiamata da scrivi_cfg leggi_cfg cancella_cfg esiste_cfg
   #Parametri:
   #Richiede: il testo da manipolare
   #Restituisce: il testo pronto per essere usato nella scittura
   #fine_info_per_la_documentazione
   sed -e 's/[]\/$*.^[]/\\&/g'
}

scrivi_cfg() { # path, key, value
  #info_per_la_documentazione Non rimuovere le linee di commento sottostanti
  #Pubblicato: Si
  #Stato: Stabile
  #Nome: scrivi_cfg
  #Descrizione: Scrive su $1 sulla chiave $2 il valore $3
  #Parametri: File Chiave Valore
  #Richiede:
  #Restituisce:
  #fine_info_per_la_documentazione
   cancella_cfg "$1" "$2"
   echo "$2=$3" >> "$1"
}

leggi_cfg() { # path, key -> value
  #info_per_la_documentazione Non rimuovere le linee di commento sottostanti
  #Pubblicato: Si
  #Stato: Stabile
  #Nome: leggi_cfg
  #Descrizione: Legge su $1 sulla chiave $2
  #Parametri: File Chiave Valore
  #Richiede:
  #Restituisce: Valore chiave
  #fine_info_per_la_documentazione
   test -f "$1" && grep "^$(echo "$2" | escape_su_sed)=" "$1" | sed "s/^$(echo "$2" | escape_su_sed)=//" | tail -1
}

cancella_cfg() { # path, key
  #info_per_la_documentazione Non rimuovere le linee di commento sottostanti
  #Pubblicato: Si
  #Stato: Stabile
  #Nome: cancella_cfg
  #Descrizione: cancella su $1 la chiave $2
  #Parametri: File Chiave Valore
  #Richiede:
  #Restituisce: cancella la voce
  #fine_info_per_la_documentazione
   test -f "$1" && sed -i "/^$(echo $2 | escape_su_sed).*$/d" "$1"
}

esiste_cfg() { # path, key
  #info_per_la_documentazione Non rimuovere le linee di commento sottostanti
  #Pubblicato: Si
  #Stato: Stabile
  #Nome: esiste_cfg
  #Descrizione: cancella su $1 la chiave $2
  #Parametri: File Chiave
  #Richiede:
  #Restituisce: verifica l'esistenza di una voce
  #fine_info_per_la_documentazione
   test -f "$1" && grep "^$(echo "$2" | escape_su_sed)=" "$1" > /dev/null
}

installa () {
   #info_per_la_documentazione Non rimuovere le linee di commento sottostanti
   #Pubblicato: Si
   #Stato: Beta
   #Nome: installa
   #Descrizione: la funzione verifica guarda se una cosa è già stata fatta $1 è il comando e se $2 è "F" forzo l'esecuzione anche se gia fatto, se N è normale
   #Parametri: pacchetto.deb
   #Richiede:
   #Restituisce:
   #fine_info_per_la_documentazione
   PACCHETTO=$1
   PKG_OK=$(dpkg-query -W --showformat='${Status}\n' $PACCHETTO|grep "install ok installed")
   echo Checking for $PACCHETTO: $PKG_OK
   if [ "" = "$PKG_OK" ]; then
   sudo apt-get --yes install $PACCHETTO
   DATAEVENTO=`date +"%Y-%m-%d %H:%M:%S"`
   logga "**** $1 installato"
   else
   logga "$1 già installato"
   fi
}

verifica () {
   #info_per_la_documentazione Non rimuovere le linee di commento sottostanti
   #Pubblicato: Si
   #Stato: Beta da finire
   #Nome: verifica
   #Descrizione: verifica se un comando è gia stato eseguito, per ora controlla solo le operazioni di root utile ad esempio per non mettere repo piu volte
   #Parametri: comando
   #Richiede:
   #Restituisce:
   #fine_info_per_la_documentazione
  LOGFILE="$WORKINGFOLDER/log/install.log"
  DATAEVENTO=`date +"%Y-%m-%d %H:%M:%S"`
  touch $LOGFILE
  count=$(grep -o "$1" $LOGFILE | wc -l)
  if [ $count != 0 ];then
   if [ $2 = "F" ]; then
   echo $DATAEVENTO -- ***$2*** $1 >> $LOGFILE
   $1
   fi
   if [ $2 = "N" ]; then
   echo "Comando gia eseguito ($count volte)"
   fi
  else
   echo $DATAEVENTO -- $1 >> $LOGFILE
   $1
  fi
}

trovatesto () {
   #info_per_la_documentazione Non rimuovere le linee di commento sottostanti
   #Pubblicato: Si
   #Stato: stabile
   #Nome: installa
   #Descrizione: cerca una occorrenza nei file di log
   #Parametri: testo da cercare
   #Richiede: voce da cercare
   #Restituisce:vai posto a S o N
   #fine_info_per_la_documentazione
   # verifica se nel file di log c'è una occorrenza , se si pone la variabile "vai" a "S" , "N"
   LOGFILE="$WORKINGFOLDER/log/install.log"
   count=$(grep -o "$1" $LOGFILE | wc -l)
   if [ $count != 0 ];then
   export vai="N"
   else
   export vai="S"
   fi
}

cancella () {
   #info_per_la_documentazione Non rimuovere le linee di commento sottostanti
   #Pubblicato: Si
   #Stato: Beta
   #Nome: cancella
   #Descrizione: Cancella un file o una cartella, se esiste e se può farlo.
   #Parametri: file o cartella da cancellare
   #Richiede:
   #Restituisce:
   #fine_info_per_la_documentazione
   if [ -f "$1" ]; then
   if [ -w "$1" ]
   then
   rm $1
   logga "Rimosso $1"
   else
   logga "Non posso rimuovere $1"
   fi
   fi
   if [ -d "$1" ]; then
  
   if [ -w "$1" ]
   then
   rm -rf $1
   logga "Rimosso $1 (cartella)"
   else
   logga "Non posso rimuovere $1 (cartella)"
   fi
  
   fi
  
}

autostart () {
  #info_per_la_documentazione Non rimuovere le linee di commento sottostanti
  #Pubblicato: Si
  #Stato: Beta
  #Nome: autostart
  #Descrizione: Mette in autostart qualcosa a livello user
  #Parametri: utente nome_app path_binario
  #Richiede:
  #Restituisce:
  #fine_info_per_la_documentazione
  notify-send -i "/usr/AvoScript/img/avologo.png" -t 700 "$1"
  
   if [ -n "$3" ]; then
  
  
  DIRH="/home/$1/"
   if [ -d "$DIRH" ]; then
   logga " creazione autostart per utente $1 e app $3 : utente esistente"
   DIRA="$DIRH.config/autostart/"
   if [ -d "$DIRA" ]; then
   logga " creazione autostart per utente $1 e app $3 : abbiamo autostart in $1"
   else mkdir $DIRA
   chown $1 $DIRA
   chgrp $1 $DIRA
   fi
   echo -e "[Desktop Entry]\nName=$2\nComment=$2\nExec=$3\nType=Application\nTerminal=false\nHidden=false"> $DIRA$2.desktop
   chmod +x $DIRA$2.desktop
   chmod 744 $DIRA$2.desktop
   chown $1 $DIRA$2.desktop
   chgrp $1 $DIRA$2.desktop
   logga " creazione autostart per utente $1 e app $3 : creato $DIRA$2.desktop"
   else
   logga " creazione autostart per utente $1 e app $3 : NON Creato $DIRA$2.desktop "
  
   fi
  else
   logga " Devi lanciare la funzione per creare autostart con tre parametri : utente nome e percorso_applicazione "
  fi
  
}

linkmenu () {
  
   #info_per_la_documentazione Non rimuovere le linee di commento sottostanti
   #Pubblicato: No
   #Stato: da finire
   #Nome: linkmenu
   #Descrizione: crea i link nella gui
   #Parametri:
   #Richiede:
   #Restituisce:
   #fine_info_per_la_documentazione
  if [ -z "$1" ]
  then
   echo "uso : linkmenu Name Exec (Icon) (Isolate (S-N)) (autostart (S-N))"
   exit 0
  fi
  name=$1
  
  if [ -z "$2" ]
  then
   echo "uso : linkmenu Name Exec (Icon) (Isolate (S-N)) (autostart (S-N))"
   exit 0
  fi
  exec=$2
  
  if [ -z "$3" ]
  then
  
   icon="/usr/AvoScript/img/avologo.png"
  else
   icon=$4
  fi
  
  if [ -z "$4" ]
  then
  
   isolate="N"
  else
   isolate=$4
  fi
  
  if [ -z "$5" ]
  then
  
   autostart="N"
  else
   autostart=$5
  fi
  
  # settato tutto
  # creo il file
  FILE="$name.desktop"
  if test -f "$FILE"; then
   rm $FILE
  fi
  
  echo $FILE
  logga "$FILE"
  echo "[Desktop Entry]">$FILE
  scrivi_cfg "$FILE" "Version" "`date +"%Y-%m-%d %H:%M:%S"`"
  scrivi_cfg "$FILE" "Name" "$name"
  scrivi_cfg "$FILE" "Comment" "$name by Avoscript"
  scrivi_cfg "$FILE" "Exec" "$exec"
  scrivi_cfg "$FILE" "Terminal" "False"
  scrivi_cfg "$FILE" "Type" "Application"
  scrivi_cfg "$FILE" "Icon" "$icon"
  scrivi_cfg "$FILE" "Categories" "Avogadro"
  scrivi_cfg "$FILE" "StartupNotify" "True"
  
  chmod +x $FILE
  
}

scarica () {
   #info_per_la_documentazione Non rimuovere le linee di commento sottostanti
   #Pubblicato: Si
   #Stato: da finire
   #Nome: scarica
   #Descrizione: Scarica una app dal repo Avoconnect
   #Parametri:
   #Richiede: nome app da scaricare (la cartella)
   #Restituisce:
   #fine_info_per_la_documentazione
   isconnected
   isroot
  
   if [ -d "$WORKINGFOLDER/bin/scripts" ]; then
   echo "OK"
   else
   mkdir $WORKINGFOLDER/bin/scripts
   fi
  
   rm -rf $WORKINGFOLDER/bin/scripts/$1
   mkdir $WORKINGFOLDER/bin/scripts/$1
   mkdir $WORKINGFOLDER/bin/scripts/$1/files
   for robe in label.txt man.sh post.sh pre.sh remove.sh run.sh version
   do
   wget -q -O $WORKINGFOLDER/bin/scripts/$1/$robe $SERVERPATH/apps/items/$1/$robe
   chmod +x $WORKINGFOLDER/bin/scripts/$1/$robe
   done
  
  logga "Scaricato $1"
  
  unset $1
  
}

createrminal() {
   #info_per_la_documentazione Non rimuovere le linee di commento sottostanti
   #Pubblicato: Si
   #Stato: finito
   #Nome: createrminal
   #Descrizione: Configura le connessioni rdp della rete amministrativa
   #Parametri:
   #Richiede: se passo l'username lo fa per quello, altrimenti chiede
   #Restituisce:
   #fine_info_per_la_documentazione
  
   if [ -n "$1" ]; then
   userterminal=$1
   else
   userterminal=$(zenity --entry --title="Creo Terminal" --text="quale utente deve avere il terminal ?")
  
   fi
  
  
  
   if id -u "$userterminal" >/dev/null 2>&1; then
   echo 'utente esiste'
   else
   echo 'utente non esiste , esco'
   exit 1
   fi
  
  
   Posizione=$(pwd)
   Cartella=`date +"%s"`
   mkdir $Posizione/$Cartella
   cd $Posizione/$Cartella
  
   if [ $? -eq 0 ]; then
   SERVERPATH=$(leggi_cfg "$WORKINGFOLDER/etc/AvoScript.conf" "SERVERPATH")
   wget -O listats.txt $SERVERPATH/apps/items/Amministrativa/files/listaterminal.txt
   wget -O default.remmina $SERVERPATH/apps/items/Amministrativa/files/ts.remmina
  
   cat listats.txt | while read terminalutente
   do
   logga "$terminalutente per $userterminal"
   PATHCONFREMMINA="/home/$userterminal/.local/share/remmina"
  
   if [ -d "$PATHCONFREMMINA" ]; then
   ### Take action if $DIR exists ###
   echo "Trovata la cartella di configurazione remmina per $userterminal"
   else
   logga "La cartella di configurazione remmina per $userterminal non esiste, la creo"
   mkdir -p $PATHCONFREMMINA
   chown $userterminal $PATHCONFREMMINA
   chgrp $userterminal $PATHCONFREMMINA
   fi
   nomets=$(echo $terminalutente |sed s/[.]/-/g)
   nomets="Terminal_$nomets"
   nomets="$nomets.remmina"
   cp default.remmina $nomets
   ipsource=$(hostname -I)
   scrivi_cfg $nomets server $terminalutente
   scrivi_cfg $nomets username $userterminal
   scrivi_cfg $nomets group Amministrativa
   scrivi_cfg $nomets clientname $ipsource
   scrivi_cfg $nomets name RDP_$terminalutente
  
   chown $userterminal $nomets
   chgrp $userterminal $nomets
   chmod +x $nomets
  
   if [[ -f "$PATHCONFREMMINA/$nomets" ]]; then
   rm $PATHCONFREMMINA/$nomets
   fi
   cp $nomets $PATHCONFREMMINA/.
  
   done
  
   fi
  
   cd $Posizione
   rm -rf $Posizione/$Cartella
  
}

sistemalauncher() {
  
   #sistemo plank che è in /home/$utente/.config/plank/dock1
  
   if [ "$*" == "" ]; then
   echo "uso: sistemalauncher [nomeapp]"
   exit 1
  fi
  Posizione=$(pwd)
  Cartella=`date +"%s"`
   mkdir $Posizione/$Cartella
   cd $Posizione/$Cartella
  
  if [[ $EUID -ne 0 ]]
  then
   echo "Non sono root"
   whoami > utenti.txt
  
  else
   echo "Sono root"
   getent passwd {1000..6000} | awk -F: '{ print $1}' > utenti.txt
  fi
  
  FILEL=/usr/share/applications/$1.desktop
  if [ -f "$FILEL" ]; then
   echo "$FILEL esiste."
  else
   echo "$FILEL does non esiste, esco."
   cd $Posizione
   rm -rf $Posizione/$Cartella
   exit 1
  fi
  
   TIPOINSTALLAZIONE=$(leggi_cfg "$WORKINGFOLDER/etc/AvoScript.conf" "TIPOINSTALLAZIONE")
  
  
  echo "[PlankDockItemPreferences]" > $1.dockitem
  scrivi_cfg $1.dockitem Launcher file:///usr/share/applications/$1.desktop
  cat utenti.txt | while read line
  do
  destpath=/home/$line/.config/plank/dock1/launchers
  dest=/home/$line/.config/plank/dock1/launchers/$1.dockitem
  
  
  if [ -f "$dest" ]; then
   rm $dest
  fi
  
  echo "cp $1.dockitem $destpath/."
  cp $1.dockitem $destpath/.
  chown $line $dest
  echo "chown $line $dest"
  logga "Creato $1 sul launcher per $line"
  done
  
   cd $Posizione
   rm -rf $Posizione/$Cartella
}
settatipo () {
   #info_per_la_documentazione Non rimuovere le linee di commento sottostanti
   #Pubblicato: Si
   #Stato: finito
   #Nome: settatipo
   #Descrizione: Imposta il tipo di installazione (amministrativa ... laboratorio informatica ...)
   #Parametri:
   #Richiede:
   #Restituisce:
   #fine_info_per_la_documentazione
  
  if [ -z "$1" ]
   then
  
  
  
   TIPOINSTALLAZIONE=$(leggi_cfg "$WORKINGFOLDER/etc/AvoScript.conf" "TIPOINSTALLAZIONE")
  
  
   if [ -z "$TIPOINSTALLAZIONE" ]
   then
  
  
   STICA=$(zenity --list \
   --title="Scegli il tipo di installazione (una sola)" \
   --column="Valore" --column="Descrizione" \
   AMMINISTRATIVA "Per i pc della rete amministrativa" \
   LABORATORIO "Uso nei laboratori didattici" \
   PERSONALE "Come personal computer" \
   GENERIC "Impostazione di default" \
   DEVELOPER "Per fare esperimenti e sviluppare nuove funzioni" \
   CHIOSCO "Postazione pubblica" )
  
   dimmi "Hai scelto $STICA"
  
   scrivi_cfg $WORKINGFOLDER/etc/AvoScript.conf TIPOINSTALLAZIONE $STICA
  
  
  
   else
   if zenity --question --text="Tipo installazione $TIPOINSTALLAZIONE : Vuoi cambiare?"
   then
   STICA=$(zenity --list \
   --title="Scegli il tipo di installazione (una sola)" \
   --column="Valore" --column="Descrizione" \
   AMMINISTRATIVA "Per i pc della rete amministrativa" \
   LABORATORIO "Uso nei laboratori didattici" \
   PERSONALE "Come personal computer" \
   GENERIC "Impostazione di default" \
   DEVELOPER "Per fare esperimenti e sviluppare nuove funzioni" \
   CHIOSCO "Postazione pubblica" )
  
   dimmi "Hai scelto $STICA"
  
   scrivi_cfg $WORKINGFOLDER/etc/AvoScript.conf TIPOINSTALLAZIONE $STICA
   fi
  
  
  
   TIPOINSTALLAZIONE=$(leggi_cfg "$WORKINGFOLDER/etc/AvoScript.conf" "TIPOINSTALLAZIONE")
   logga "Abbiamo impostato il tipo di installazione a $TIPOINSTALLAZIONE"
   fi
  
  else
  
   scrivi_cfg $WORKINGFOLDER/etc/AvoScript.conf TIPOINSTALLAZIONE $1
   TIPOINSTALLAZIONE=$(leggi_cfg "$WORKINGFOLDER/etc/AvoScript.conf" "TIPOINSTALLAZIONE")
   logga "Abbiamo impostato il tipo di installazione a $TIPOINSTALLAZIONE"
  fi
  
}

AvoScript

By Grupporete Avogadro.
Rilasciato sotto licenza Gpl v2