====== 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/Dip-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/Dip-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/Dip-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