Strumenti Utente

Strumenti Sito


script

Questa è una vecchia versione del documento!


Script di installazione

ATTENZIONE Questa pagina è accessibile anche agli utenti non autenticati! Non inserire password o informazioni sensibili!

Ubuntu

inst.sh
#!/bin/bash
#####
# Script di installazione per Ubuntu.
# Versione del 16/09/2015 - Installazione SMONGO ed R, rimosso Flash
# Per Ubuntu LTS 12.04 e 14.04
 
############################################################
# 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 grub2 curl"
 
# 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 plplot12-driver-gd lldpd"
 
# Pacchetti da installare solo nei laboratori didattici
LAB_PKGS="nfs-common r-base"
 
############################################################
# 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
 
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
AD_SCRIPT=pbis-open-8.3.0.3287.linux.${ARCH}.deb.sh
AD_SCRIPTURL=http://apps.difa.unibo.it/wiki/_media/script:$AD_SCRIPT
 
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
    mkdir /home/PERSONALE
    mkdir /home/STUDENTI
else
    # È un lab
    ISLAB=1
    AD_OU="$AD_OU/laboratori"
 
    apt-get -qy install ${LAB_PKGS}
 
    DEFSO=""
    case "$LAB" in
        "n"|"o")
            AD_OU="${AD_OU}/belmeloro/${LAB}"
            DEFSO="\"Windows 7 (loader) (on /dev/sda1)\""
            useradd -G root -m -U cirsfid
            echo "Imposta password per utente cirsfid"
            passwd cirsfid
 
            # Creazione delle home sul fileserver
            mkdir /home/PERSONALE
            mkdir /home/STUDENTI
            echo "serverlab.bo.astro.it:/home/PERSONALE/ /home/PERSONALE nfs rsize=8192,wsize=8192,nosuid,soft,vers=3 0 0" >>/etc/fstab
            echo "serverlab.bo.astro.it:/home/STUDENTI/ /home/STUDENTI nfs rsize=8192,wsize=8192,nosuid,soft,vers=3 0 0" >>/etc/fstab
            SM_INST="y"
            ;;
        "r1")
            AD_OU="${AD_OU}/r1"
            AD_HOME='%H/local/%D/%U'
            # Creazione delle home sul fileserver
            mkdir /home/local
            echo "137.204.65.251:/nas/NASDisk-00021/home_r1 /home/local nfs rsize=8192,wsize=8192,vers=3,nosuid,soft 0 0" >>/etc/fstab
            mkdir /home/remote/
            mkdir /home/remote/PERSONALE
            mkdir /home/remote/STUDENTI
            echo "serverlab.bo.astro.it:/home/PERSONALE/ /home/remote/PERSONALE nfs rsize=8192,wsize=8192,nosuid,soft,vers=3 0 0" >>/etc/fstab
            echo "serverlab.bo.astro.it:/home/STUDENTI/ /home/remote/STUDENTI nfs rsize=8192,wsize=8192,nosuid,soft,vers=3 0 0" >>/etc/fstab
            SM_INST="y"
            ;;
        "i")
            AD_OU="${AD_OU}/irnerio"
            mkdir /home/PERSONALE
            mkdir /home/STUDENTI
            ;;
        "*")
            echo "Laboratorio sconosciuto: '${LAB}'"
            exit
    esac
 
    # I laboratori si spengono alle 20
    echo "0 20 * * * shutdown -h now" | crontab -
 
    if [ "y" == "$SM_INST" ]; then
        cd /
        wget -O $SM_FILE $SM_URL
        tar xfz $SM_FILE
        rm -f $SM_FILE
        cd -
    fi
fi
 
readdef 'Vuoi joinare la macchina? (S/n)' 's' JOIN
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
    apt-get -qy install $AD_PKGS
    curl $AD_SCRIPTURL > ~/$AD_SCRIPT
fi
 
# Fix schermata di login
if [ ! -s /etc/lightdm/lightdm.conf ]; then
    # il file non pare esistere in 14.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"
    # 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
    read A
    $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
    }
fi
 
# Installazione dei pacchetti base
apt-get -qy install ${XTRA_PKGS}
 
# Installa ORACLE Java (richiede conferma sia per l'aggiunta del repository che per la licenza)
add-apt-repository ppa:webupd8team/java
apt-get update
apt-get -qy install oracle-java7-installer
 
# Aggiornamento completo del sistema
apt-get -qy dist-upgrade
shutdown -h 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.

instdeb.sh
#!/bin/bash
#####
# Script di installazione per server Debian. Versione del 03/08/2015
# Convertito a PBIS-open invece di winbind
 
############################################################
# 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"
 
# Pacchetti da installare solo se si effettua il join, *dopo* SYS_PKGS
AD_PKGS="libpam-ccreds"
 
# Pacchetti comuni
XTRA_PKGS="keychain screen tcsh clamav"
 
############################################################
# 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
 
LAB=`echo $PCID| sed 's/\([^-]*\)-[0-9]*/\1/; t; s/.*//'`
PCNO=`echo $PCID| sed "s/$LAB-\(.*\)/\1/"`
AD_HOME='%H/%D/%U'
 
# All our servers are x86_64 . Moreover, often "uname -i" on Debian returns "unknown"
#ARCH="x86"
#CURARCH=$(uname -i)
#if [ "$CURARCH" == "x86_64" -o "$CURARCH" == "amd64"]; then
    ARCH="x86_64";
#fi
AD_SCRIPT=pbis-open-8.3.0.3287.linux.${ARCH}.deb.sh
AD_SCRIPTURL=http://apps.difa.unibo.it/wiki/_media/script:$AD_SCRIPT
 
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
    curl $AD_SCRIPTURL > ~/$AD_SCRIPT
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
#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
    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"
        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-get -qy install ${XTRA_PKGS}
 
# Aggiornamento completo del sistema
apt-get -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).

instdeb-old.sh
#!/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
script.1442479698.txt.gz · Ultima modifica: 2015/09/17 08:48 da diego.zuccato@unibo.it

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki