====== Script di installazione ====== **ATTENZIONE** Questa pagina è accessibile anche agli utenti non autenticati! Non inserire password o informazioni sensibili! Per prelevare direttamente uno degli script senza aprire il browser, usare wget http://apps.difa.unibo.it/wiki/_export/code/script?codeblock=N -O inst.sh con N da 1 a 3 (rispettivamente Ubuntu, Debian-pbis, Debian-winbind). Per l'installazione dei lab, conviene creare uno script **prepare.sh** su chiavetta contenente #!/bin/bash export myADUser=nome.cognome wget http://apps.difa.unibo.it/wiki/_export/code/script?codeblock=0 -O /home/tecnici/preinst.sh sudo bash /home/tecnici/preinst.sh Ovviamente va cambiato nome.cognome col proprio UPN AD (può essere diverso dalla mail senza dominio, p.e. m.bertelli@unibo.it deve usare michele.bertelli2). Quando si entra come tecnici, si inserisce la chiavetta (che viene montata automaticamente) e si lancia bash /media/*/*/prepare.sh Lo script che viene scaricato ed eseguito è: #!/bin/bash ##### # Preparazione per installazione laboratorio # File release: 20210729 if [ -z "$1" ]; then echo -n "Laboratorio (i=Irnerio, nav=Navile) ? " read L else L=$1 fi if [ -z "$2" ]; then echo -n "Numero macchina ? " read N else N=$2 fi sudo sed -i~ "s/LAB-GEN/${L}-${N}/" /etc/host{s,name} sudo nmcli c m "Connessione via cavo 1" 802-3.wake-on-lan magic sudo dpkg-reconfigure openssh-server sudo apt update wget http://apps.difa.unibo.it/wiki/_export/code/script?codeblock=1 -O /home/tecnici/inst.sh sed -i~ "s/=diego.zuccato/=$myADUser/" /home/tecnici/inst.sh sudo shutdown -r now ===== Ubuntu ===== #!/bin/bash ##### # Script di installazione per Ubuntu. # Versione 20210729 ############################################################ # Config section: personalizza a volontà #### # Utente locale LOCAL_USER=tecnici # Amministratore AD da usare per il join AD_USER=diego.zuccato # Base OU in AD AD_OU='dsa.auto/str00957-difa/computer' # Pacchetti base, da installare sempre SYS_PKGS="vim-nox mc openssh-server unattended-upgrades curl lldpd" # Pacchetti da installare solo se si effettua il join, *dopo* SYS_PKGS AD_PKGS="libpam-ccreds" # Pacchetti comuni (PC e lab) XTRA_PKGS="keychain chromium-browser screen gfortran kile k3b konqueror gnuplot kate xemacs21 nedit tcsh clamav clamtk gnudatalanguage plplot12-driver-xwin build-essential htop" # Pacchetti da installare solo nei laboratori didattici LAB_PKGS="epoptes-client r-base glusterfs-client texlive-lang-italian texlive-publishers" ############################################################ # Qui non modificare nulla techs="str957.tecnici" NAME=$(hostname -s) admgrp="${NAME}-amministratori" usrgrp="${NAME}-abilitati" pbis_base=/opt/pbis/bin # Read user input with a default # readdef "prompt" "default" varname function readdef { local v; read -p "$1 " v if [ -z "$v" ]; then eval $3="\$2" else eval $3="\$v" fi } PCID=`echo $NAME | sed 's/str957-\(.*\)/\1/i; t ;s/.*//'` if [ -z "$PCID" ]; then echo "Hostname errato! Deve iniziare con 'str957-'" exit fi if [ "LAB-GEN" == "$PCID" ]; then echo "Fase di personalizzazione dell'installazione non corretta: controlla l'hostname!" exit fi LAB=`echo $PCID| sed 's/\([^-]*\)-[0-9]*/\1/; t; s/.*//'` PCNO=`echo $PCID| sed "s/$LAB-\(.*\)/\1/"` AD_HOME='%H/%D/%U' ARCH="x86" if [ "$(uname -i)" == "x86_64" ]; then ARCH="x86_64"; fi SM_FILE=sm2_4_25tot.tar.gz SM_URL=http://apps.difa.unibo.it/wiki/_media/script:$SM_FILE SM_INST="" if [ -z "$LAB" ]; then # Non si tratta di un lab # AD_OU è già corretta echo "Non è un PC di laboratorio" ISLAB=0 readdef 'Vuoi joinare la macchina? (S/n)' 's' JOIN if [ "n" != "$JOIN" ]; then mkdir /home/PERSONALE mkdir /home/STUDENTI fi else # È un lab ISLAB=1 JOIN=s AD_OU="$AD_OU/laboratori" apt install ${LAB_PKGS} DEFSO="" case "$LAB" in "nav") AD_OU="${AD_OU}/navile" SRV_LAB="srv-lab-m" useradd -G root -m -U cesia echo "Imposta password per utente cesia" passwd cesia # Creazione delle home sul fileserver mkdir /home/PERSONALE mkdir /home/STUDENTI echo "137.204.136.90 ${SRV_LAB}" >> /etc/hosts echo "${SRV_LAB}:homes /home glusterfs defaults,_netdev 0 0" >>/etc/fstab SM_INST="y" # Preparazione all'installazione di IRAF (dipendenze e cache) mount /home/PERSONALE cp /home/PERSONALE/_LIB/IRAF/iraf64.tar.gz /home /home/PERSONALE/_LIB/IRAF/deploy.sh ;; "i") AD_OU="${AD_OU}/irnerio" SRV_LAB="srv-labirnerio" useradd -G root -m -U cesia mkdir /home/PERSONALE mkdir /home/STUDENTI # IP esterno del server 137.204.248.241 echo "10.10.10.241 ${SRV_LAB}" >> /etc/hosts echo "${SRV_LAB}:home-personale /home/PERSONALE glusterfs defaults,_netdev 0 0" >>/etc/fstab echo "${SRV_LAB}:home-studenti /home/STUDENTI glusterfs defaults,_netdev 0 0" >>/etc/fstab ;; "*") echo "Laboratorio sconosciuto: '${LAB}'" exit esac # I laboratori si spengono alle 20 echo "0 20 * * * /sbin/shutdown -h now" | crontab - if [ "y" == "$SM_INST" ]; then apt-get -qy install libx11-6:i386 libc6:i386 libxcb1:i386 libxau6:i386 libxdmcp6:i386 cd / wget -O $SM_FILE $SM_URL tar xfz $SM_FILE rm -f $SM_FILE cd - fi fi if [ "n" != "$JOIN" ]; then readdef "Nome amministratore AD (${AD_USER})" "$AD_USER" AD_USER fi # Inizializzazione del sistema if [ -n "$DEFSO" ]; then sed -i~ "s,DEFAULT=0,DEFAULT=${DEFSO}," /etc/default/grub # update-grub chiede conferma update-grub fi # Primo aggiornamento/installazione pacchetti di sistema base apt-get -qy install $SYS_PKGS if [ "n" != "$JOIN" ]; then wget -O - http://repo.pbis.beyondtrust.com/apt/RPM-GPG-KEY-pbis|apt-key add - wget -O /etc/apt/sources.list.d/pbiso.list http://repo.pbis.beyondtrust.com/apt/pbiso.list apt-get update apt-get -qy install $AD_PKGS pbis-open fi # Fix schermata di login if [ ! -s /etc/lightdm/lightdm.conf ]; then # il file non pare esistere in 18.04LTS... echo "[SeatDefaults]" > /etc/lightdm/lightdm.conf echo "user-session=ubuntu" >> /etc/lightdm/lightdm.conf echo "greeter-session=unity-greeter" >> /etc/lightdm/lightdm.conf fi echo "allow-guest=false">>/etc/lightdm/lightdm.conf echo "greeter-show-manual-login=true">>/etc/lightdm/lightdm.conf # Fix autorizzazioni sed -i~ "s/^\(root:x:0:\)\$/\1${LOCAL_USER}/" /etc/group sed -i~ "s,^\(#\|//\)\s*\(auth\s*\(required\s*pam_wheel.so\|sufficient\s*pam_wheel.so\s*trust\)\)\$,\2," /etc/pam.d/su sed -i~ 's,//\(Unattended-Upgrade::\(MinimalSteps\|InstallOnShutdown\)\|.*-\(updates\|backports\).*\),\1,' /etc/apt/apt.conf.d/50unattended-upgrades # Operazioni relative al dominio if [ "n" != "$JOIN" ]; then # Installazione pacchetti per join #apt-get -qy install $SYS_PKGS2 sh ~/${AD_SCRIPT} $pbis_base/domainjoin-cli setname $(hostname -s) $pbis_base/domainjoin-cli join --ou "$AD_OU" personale.dir.unibo.it "$AD_USER" echo "Se il join è riuscito, premi INVIO, altrimenti ^C" read A # Corregge errore con PAM (il file pbis viene creato col join, non prima...) sed -i 's/^\(.*\)sufficient\(.*\)$/\1[success=ok default=ignore]\2/' /usr/share/pam-configs/pbis pam-auth-update $pbis_base/config HomeDirTemplate %H/%D/%U $pbis_base/config AssumeDefaultDomain 1 $pbis_base/config LoginShellTemplate /bin/bash $pbis_base/update-dns echo "%str957.tecnici ALL=NOPASSWD: ALL" > /etc/sudoers.d/tecnici chmod 0440 /etc/sudoers.d/tecnici $pbis_base/find-group-by-name "$admgrp" > /dev/null 2>&1 && { echo "Admin group found" sed -i "s/^\(AdminIdentities.*;unix-group:admin\)\$/\1;unix-group:$admgrp/" /etc/polkit-1/localauthority.conf.d/51-ubuntu-admin.conf echo "%${admgrp} ALL=NOPASSWD: ALL" > /etc/sudoers.d/localadmins chmod 0440 /etc/sudoers.d/localadmins } $pbis_base/find-group-by-name "$usrgrp" > /dev/null 2>&1 && { echo "Allowed users group found" reqm="PERSONALE\\$usrgrp"; $pbis_base/enum-members --group $usrgrp |grep -i $admgrp >/dev/null || { # Trying to lockout admins? Don't! reqm2="PERSONALE\\$admgrp" } $pbis_base/enum-members --group $usrgrp |grep -i $techs >/dev/null || { # Never lockout technicians! reqm3="PERSONALE\\$techs" } $pbis_base/config RequireMembershipOf $reqm $reqm2 $reqm3 } echo "nameserver 137.204.25.77" >> /etc/resolv.conf /opt/pbis/bin/update-dns fi # Installazione dei pacchetti base apt-get -qy install ${XTRA_PKGS} if [ -f /etc/default/epoptes-client ]; then echo "SERVER=${SRV_LAB}" >> /etc/default/epoptes-client epoptes-client -c fi # Aggiornamento completo del sistema apt-get -qy dist-upgrade shutdown -r now ===== Debian ===== I server con Debian necessitano di uno script leggermente diverso: alcuni pacchetti/configurazioni differiscono, al termine non va installato Java di Oracle e sopratutto il sistema va riavviato, non spento. === PBIS (new) === Questo è lo script preferenziale per i nuovi server. PBIS si è rivelato piuttosto stabile. Rispetto al vecchio script, però, cambia il mapping UID/GID e questo può essere indesiderabile. #!/bin/bash ##### # Script di installazione per server Debian. Versione del 09/07/2019 # Modifiche per Debian 10 # Permessa installazione senza join per macchine non str957-* ############################################################ # Config section: personalizza a volontà #### # Utente locale LOCAL_USER=tecnici # Amministratore AD da usare per il join AD_USER=diego.zuccato # Base OU in AD AD_OU='dsa.auto/str00957-difa/computer/server' # Pacchetti base, da installare sempre SYS_PKGS="vim-nox mc openssh-server curl gnupg" # Pacchetti da installare solo se si effettua il join, *dopo* SYS_PKGS AD_PKGS="libpam-ccreds" # Pacchetti comuni XTRA_PKGS="keychain screen tcsh clamav htop" ############################################################ # Qui non modificare nulla techs="str957.tecnici" NAME=$(hostname -s) admgrp="${NAME}-amministratori" usrgrp="${NAME}-abilitati" pbis_base=/opt/pbis/bin AD_HOME='%H/%D/%U' # Read user input with a default # readdef "prompt" "default" varname function readdef { local v; read -p "$1 " v if [ -z "$v" ]; then eval $3="\$2" else eval $3="\$v" fi } PCID=`echo $NAME | sed 's/str957-\(.*\)/\1/i; t ;s/.*//'` if [ -z "$PCID" ]; then echo "Hostname non joinabile! Dovrebbe iniziare con 'str957-' ." echo "Premi INVIO per continuare comunque." JOIN=n read A else readdef 'Vuoi joinare la macchina? (S/n)' 's' JOIN fi if [ "n" != "$JOIN" ]; then readdef "Nome amministratore AD (${AD_USER})" "$AD_USER" AD_USER mkdir /home/PERSONALE mkdir /home/STUDENTI fi # Primo aggiornamento/installazione pacchetti di sistema base apt -qy install $SYS_PKGS if [ "n" != "$JOIN" ]; then wget -O - http://repo.pbis.beyondtrust.com/apt/RPM-GPG-KEY-pbis|apt-key add - wget -O /etc/apt/sources.list.d/pbiso.list http://repo.pbis.beyondtrust.com/apt/pbiso.list apt update apt -qy install $AD_PKGS pbis-open fi # Fix autorizzazioni sed -i~ "s/^\(root:x:0:\)\$/\1${LOCAL_USER}/" /etc/group sed -i~ "s,^\(#\|//\)\s*\(auth\s*\(required\s*pam_wheel.so\|sufficient\s*pam_wheel.so\s*trust\)\)\$,\2," /etc/pam.d/su # Operazioni relative al dominio if [ "n" != "$JOIN" ]; then sh ~/${AD_SCRIPT} $pbis_base/domainjoin-cli setname $(hostname -s) $pbis_base/domainjoin-cli join --ou "$AD_OU" personale.dir.unibo.it "$AD_USER" echo "Se il join è riuscito, premi INVIO, altrimenti ^C" read A # Corregge errore con PAM (il file pbis viene creato col join, non prima...) sed -i 's/^\(.*\)sufficient\(.*\)$/\1[success=ok default=ignore]\2/' /usr/share/pam-configs/pbis pam-auth-update $pbis_base/config HomeDirTemplate $AD_HOME $pbis_base/config AssumeDefaultDomain 1 $pbis_base/config LoginShellTemplate /bin/bash $pbis_base/update-dns echo "%str957.tecnici ALL=NOPASSWD: ALL" > /etc/sudoers.d/tecnici chmod 0440 /etc/sudoers.d/tecnici $pbis_base/find-group-by-name "$admgrp" > /dev/null 2>&1 && { echo "Admin group found" echo "%${admgrp} ALL=NOPASSWD: ALL" > /etc/sudoers.d/localadmins chmod 0440 /etc/sudoers.d/localadmins } $pbis_base/find-group-by-name "$usrgrp" > /dev/null 2>&1 && { echo "Allowed users group found" reqm="PERSONALE\\$usrgrp"; $pbis_base/enum-members --group $usrgrp |grep -i $admgrp >/dev/null || { # Trying to lockout admins? Don't! reqm2="PERSONALE\\$admgrp" } $pbis_base/enum-members --group $usrgrp |grep -i $techs >/dev/null || { # Never lockout technicians! reqm3="PERSONALE\\$techs" } $pbis_base/config RequireMembershipOf $reqm $reqm2 $reqm3 } fi # Installazione dei pacchetti base apt -qy install ${XTRA_PKGS} # Aggiornamento completo del sistema apt -qy dist-upgrade shutdown -r now === Winbind (old) === Talvolta è necessario evitare l'uso di PBIS (p.e. perché si aggiungono nodi che devono mantenere il mapping UID/GID coerente con vecchi server). #!/bin/bash ##### # Script di installazione per server Debian. # Versione del 1/9/2015 ############################################################ # Config section: personalizza a volontà #### # Utente locale LOCAL_USER=tecnici # Amministratore AD da usare per il join AD_USER=diego.zuccato # Base OU in AD AD_OU='Dsa.Auto/Str00957-DIFA/Computer/Server' # Pacchetti base, da installare sempre SYS_PKGS="vim-nox mc openssh-server grub2" # Pacchetti da installare solo se si effettua il join, *dopo* SYS_PKGS AD_PKGS="winbind libpam-ccreds ntp ntpdate libpam-winbind libnss-winbind" # Pacchetti comuni XTRA_PKGS="keychain screen gfortran nedit tcsh clamav" ############################################################ # Qui non modificare nulla # Read user input with a default # readdef "prompt" "default" varname function readdef { local v; read -p "$1 " v if [ -z "$v" ]; then eval $3="\$2" else eval $3="\$v" fi } NAME=$(hostname -s) PCID=`echo $NAME | sed 's/str957-\(.*\)/\1/i; t ;s/.*//'` if [ -z "$PCID" ]; then echo "Hostname errato! Deve iniziare con 'str957-'" exit fi LAB=`echo $PCID| sed 's/\([^-]*\)-[0-9]*/\1/; t; s/.*//'` PCNO=`echo $PCID| sed "s/$LAB-\(.*\)/\1/"` AD_HOME='%H/%D/%U' mkdir /home/PERSONALE mkdir /home/STUDENTI readdef 'Vuoi joinare la macchina? (S/n)' 's' JOIN if [ "n" != "$JOIN" ]; then readdef "Nome amministratore AD (${AD_USER})" "$AD_USER" AD_USER fi # Primo aggiornamento/installazione pacchetti di sistema base apt-get -qy install $SYS_PKGS if [ "n" != "$JOIN" ]; then apt-get -qy install $AD_PKGS service winbind stop mv /etc/samba/smb.conf /etc/samba/smb.conf.ori cat > /etc/samba/smb.conf << END [global] netbios name = ${NAME} workgroup = PERSONALE realm = PERSONALE.DIR.UNIBO.IT server string = %v security = ADS encrypt passwords = true password server = personale.dir.unibo.it #password server = atu.personale.dir.unibo.it log file = /var/log/samba/log.%m log level = 3 max log size = 50 socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 local master = No dns proxy = No wins server = 137.204.25.77 client schannel = no #winbind separator = - winbind enum users = No winbind enum groups = No winbind offline logon = Yes winbind nested groups = Yes winbind normalize names = Yes winbind refresh tickets = Yes winbind use default domain = yes winbind uid = 10000-99999 winbind gid = 10000-99999 #idmap domains = PERSONALE STUDENTI #idmap config PERSONALE:default = no #idmap config STUDENTI:default = yes idmap config PERSONALE:backend = rid idmap config PERSONALE:base_rid = 500 idmap config PERSONALE:range = 100000 - 49999999 idmap config STUDENTI:backend = rid idmap config STUDENTI:base_rid = 500 idmap config STUDENTI:range = 50000000 - 99999999 template homedir = /home/%D/%U template shell = /bin/bash END readdef "Gruppo degli abilitati all'accesso" ${NOME}-abilitati chkgroup getent group $chkgroup > /dev/null && GROUP="${NOME}-abilitati," cat > /etc/security/pam_winbind.conf << END [global] require_membership_of=${GROUP}Str957.Tecnici mkhomedir=yes END # Aggiorna nsswitch per fargli cercare gli utenti anche con winbind sed -i~ 's/^\(\(passwd\|group\).*compat\)$/\1 winbind/' /etc/nsswitch.conf # Controllo ed eventuale restart automatico di winbind ogni 5 minuti echo '*/5 * * * * wbinfo -p >/dev/null 2>&1 || /etc/init.d/winbind start >/dev/null'|crontab - fi # Fix autorizzazioni sed -i~ "s/^\(root:x:0:\)\$/\1${LOCAL_USER}/" /etc/group sed -i~ "s,^\(#\|//\)\s*\(auth\s*\(required\s*pam_wheel.so\|sufficient\s*pam_wheel.so\s*trust\)\)\$,\2," /etc/pam.d/su # Operazioni relative al dominio if [ "n" != "$JOIN" ]; then net ads join -U "$AD_USER" -createcomputer=${AD_OU} echo "Se il join è riuscito (ignora l'eventuale errore di registrazione nel DNS), premi INVIO, altrimenti ^C" read A net ads dns register -P echo "%str957.tecnici ALL=NOPASSWD: ALL" > /etc/sudoers.d/tecnici chmod 0440 /etc/sudoers.d/tecnici service winbind restart fi # Installazione dei pacchetti base apt-get -qy install ${XTRA_PKGS} # Aggiornamento completo del sistema apt-get -qy dist-upgrade shutdown -r now