791 lines
26 KiB
Bash
Executable File
791 lines
26 KiB
Bash
Executable File
#!/bin/sh
|
||
################################################################################################
|
||
##
|
||
## Nom: post_install_sid.sh
|
||
##
|
||
## Version: 0.3.1
|
||
##
|
||
## Licence: WTFPL
|
||
##
|
||
################################################################################################
|
||
|
||
## Vérification que le script est bien lancé en root
|
||
if [ "${USER}" = "root" ]; then
|
||
echo "Lancement du script"
|
||
else
|
||
echo "/!\\ Le script nécessite d'être root /!\\"
|
||
exit 1
|
||
fi
|
||
|
||
# **********************************************************************************************
|
||
#
|
||
# Variables globales
|
||
#
|
||
# -----------------------------------------------------------
|
||
|
||
script_path=$(dirname $0)
|
||
|
||
## Choix du mode d'exécution du script: (cf fonction def_debug)
|
||
## Niveau 0
|
||
# Exécution automatique avec normalement aucune interaction avec l'utilisateur et peu de log
|
||
## Niveau 1 et 2
|
||
# Exécution automatique avec un peu plus d'information dans les logs
|
||
## Niveau 3
|
||
# Exécution manuelle avec tous les logs
|
||
## Niveau 4
|
||
# Reprise du niveau 3 sur la sortie standard
|
||
## Niveau 5
|
||
# Exécution automatique avecla sortie standard
|
||
## Niveau 6
|
||
# Mode debug
|
||
mode_debug=5
|
||
|
||
## Architecture de la distribution
|
||
ARCH=""
|
||
|
||
## Options d'aptitude en fonction du niveau de debug
|
||
OPTIONS=""
|
||
|
||
# Default grub timeout
|
||
grub_timeout='5'
|
||
|
||
# Default user informations
|
||
new_username=$(ls -1 /home | grep -v "lost+found" | tail -n 1)
|
||
new_user_mail="${new_username}"
|
||
|
||
# Strate 1 server from Paris Astronomical Observatory (obspm)
|
||
# http://syrte.obspm.fr/informatique/ntp_infos.php
|
||
ntp_server='ntp-p1.obspm.fr'
|
||
|
||
# Load personnal informations (new_username, new_user_mail, …) and override some variables
|
||
if [ -f ${script_path}/informations ]; then
|
||
. ${script_path}/informations
|
||
else
|
||
printf '%b' "You should define a ${script_path}/informations file\n"
|
||
printf '%b' "Or simply copy the template:\n"
|
||
printf '%b' "cp ${script_path}/informations.template ${script_path}/informations\n"
|
||
printf '%b' "Otherwise the script will use defaults values such as '${new_username}' as main user.\n"
|
||
time=10
|
||
printf '%b' "The script will continue in ${time} seconds "
|
||
while [ "${time}" -gt 0 ]; do
|
||
printf '%b' "."
|
||
time=$((time-1))
|
||
sleep 1
|
||
done
|
||
clear
|
||
fi
|
||
|
||
# Fin des variables globales
|
||
# -----------------------------------------------------------
|
||
# **********************************************************************************************
|
||
|
||
# **********************************************************************************************
|
||
#
|
||
# Fichiers globaux
|
||
#
|
||
# -----------------------------------------------------------
|
||
#
|
||
## Répertoire de log
|
||
log_dir="/home/${new_username}/log/`date +"%d"-"%m"-"%y"`"
|
||
|
||
# !! Pour utiliser un répertoire de log, décommenter la ligne suivante:
|
||
#mkdir -p $log_dir
|
||
|
||
if [ -d ${log_dir} ]; then
|
||
## Fichier de log placé dans le répertoire de log
|
||
fichier_log="${log_dir}/new_post_install.sh.log"
|
||
## Fichier de erreur placé dans le répertoire de log
|
||
fichier_erreur="${log_dir}/new_post_install.sh.err"
|
||
else
|
||
## Fichier de log "normal"
|
||
fichier_log="new_post_install.sh.log"
|
||
## Fichier de erreur "normal"
|
||
fichier_erreur="new_post_install.sh.err"
|
||
fi
|
||
|
||
## Fichier qui reprend toutes les informations pour l'utilisateur à la suite de l'installation.
|
||
INFORMATION="information.txt"
|
||
|
||
# Fin des fichiers globaux
|
||
# -----------------------------------------------------------
|
||
# **********************************************************************************************
|
||
|
||
# **********************************************************************************************
|
||
#
|
||
# Fonctions globales
|
||
#
|
||
# -----------------------------------------------------------
|
||
## Fonction d'affichage en fonction du mode debug choisi
|
||
echod() { [ "${mode_debug}" -ge 5 ] && echo "\n(DEBUG) $*" ; }
|
||
echok() { [ "${mode_debug}" -ge 3 ] && echo "(ok) $*" ; }
|
||
echoi() { [ "${mode_debug}" -ge 2 ] && echo "(ii) $*" ; }
|
||
echow() { [ "${mode_debug}" -ge 1 ] && echo "(!!) $*" ; }
|
||
echnk() { [ "${mode_debug}" -ge 0 ] && echo "(EE) $*" ; }
|
||
|
||
## Redirection de la sortie standard (stdout) vers le fichier de log
|
||
redirect_stdout()
|
||
{
|
||
# On test si le descripteur de fichier 6 existe déjà
|
||
if [ ! "$(lsof -a -p $$ -d6 | grep 6)" ]; then # Si stdout n'est pas déjà redirigé
|
||
# Sauvegarder la valeur de stdout dans le descripteur de fichier 6
|
||
exec 6>&1
|
||
|
||
# stdout remplacé par le fichier de log
|
||
exec > ${fichier_log}
|
||
echok "stdout redirigé"
|
||
else
|
||
echow "stdout déjà redirigé ..."
|
||
fi
|
||
}
|
||
|
||
## Restauration de stdout
|
||
restore_stdout()
|
||
{
|
||
# Test si le descripteur de fichier 6 existe
|
||
if [ "$(lsof -a -p $$ -d6 | grep 6)" ]; then
|
||
echok "Restauration de stdout et fermeture du descripteur de fichier 6"
|
||
# Restaurer stdout et fermer le descripteur de fichier #6
|
||
exec 1>&6 6>&-
|
||
else
|
||
echoi "Le descripteur de fichier 6 n'existe pas. stdout est normalement en place"
|
||
fi
|
||
}
|
||
|
||
## Redirection de la sortie d'erreur standard (stderr) vers le fichier d'erreur
|
||
redirect_stderr()
|
||
{
|
||
# On test si le descripteur de fichier 7 existe déjà
|
||
if [ ! "$(lsof -a -p $$ -d7 | grep 7)" ]; then
|
||
# Sauvegarder la valeur de stderr dans le descripteur de fichier 7
|
||
exec 7>&2
|
||
|
||
# stderr remplacé par le fichier d'erreur
|
||
exec 2> ${fichier_erreur}
|
||
echok "stderr redirigé"
|
||
else
|
||
echow "stderr déjà redirigé"
|
||
fi
|
||
}
|
||
|
||
## Restauration de stderr
|
||
restore_stderr()
|
||
{
|
||
# Test si le descripteur de fichier 7 existe
|
||
if [ "$(lsof -a -p $$ -d7 | grep 7)" ]; then
|
||
echok "Restauration de stderr et fermeture du descripteur de fichier 7"
|
||
# Restaurer stderr et fermer le descripteur de fichier #7
|
||
exec 2>&7 7>&-
|
||
else
|
||
echoi "Le descripteur de fichier 7 n'existe pas. stderr est normalement en place"
|
||
fi
|
||
}
|
||
|
||
## Fonction de vérification du code retour de la commande précédemment exécutée
|
||
# Affiche un message relatif au code retour, et peut sortir du script.
|
||
# - Prototype : check_output "MESSAGE_RELATIF_À_LA_COMMANDE"
|
||
check_output()
|
||
{
|
||
## Vérification du code retour de la dernière commande
|
||
case "${?}" in
|
||
0 ) ## Si 0, tout s'est bien passé
|
||
echok "${1}\n"
|
||
> "${fichier_erreur}" ## On vide le fichier d'erreur qui aurait pu récupérer des warnings ou autre
|
||
# Appel de la fonction d'attente (appui sur une touche)
|
||
attente
|
||
;; ## Pas d'erreur
|
||
* ) ## Si différent de 0
|
||
## On affiche le message relatif à l'erreur
|
||
echnk "Erreur lors de: -> ${1} <-"
|
||
echoi "Voir le fichier ${fichier_erreur} pour plus d'information."
|
||
## Et on arrête le script avec un code retour 1
|
||
echnk "/!\\ Arrêt du script /!\\ "
|
||
exit 1;
|
||
;;
|
||
esac
|
||
}
|
||
|
||
## Fonction qui crée les fichiers passés en paramètres
|
||
## Si les fichiers existent déjà, ils sont supprimés puis recrées
|
||
## Prototype: create_file $1 [$2 $3 ... $x]
|
||
## $1: nom du premier fichier à créer
|
||
create_file()
|
||
{
|
||
# Parcourir tous les arguments et les crée si nécessaire
|
||
for fichier in $*; do
|
||
if [ -f ${fichier} ]; then
|
||
rm -f ${fichier}
|
||
touch ${fichier}
|
||
check_output "Suppression puis création du fichier ${fichier}"
|
||
else
|
||
touch ${fichier}
|
||
check_output "Création du fichier ${fichier}"
|
||
fi
|
||
done
|
||
}
|
||
|
||
## Fonction qui permet de redéfinir les fichiers de log
|
||
# Prototype: change_log_file $1
|
||
# $1: nouveau nom du fichier de log
|
||
change_log_file()
|
||
{
|
||
# Restauration des sorties standard
|
||
restore_stdout
|
||
restore_stdin
|
||
|
||
# Redéfinition des fichiers de logs pour mieux correspondre à l'action en cours
|
||
if [ -d ${log_dir} ]; then
|
||
## Fichier de log placé dans le répertoire de log
|
||
fichier_log="${log_dir}/${1}.log"
|
||
## Fichier de erreur placé dans le répertoire de log
|
||
fichier_erreur="${log_dir}/${1}.err"
|
||
else
|
||
## Fichier de log "normal"
|
||
fichier_log="${1}.log"
|
||
## Fichier de erreur "normal"
|
||
fichier_erreur="${1}.err"
|
||
fi
|
||
|
||
# Création des fichiers de logs
|
||
create_file ${fichier_log} ${fichier_erreur}
|
||
|
||
# Rediriger les sorties standard
|
||
redirect_stdout
|
||
redirect_stderr
|
||
}
|
||
|
||
## Fonction d'attente
|
||
# Attend l'appui sur une touche si le mode debug le permet
|
||
# Prototype: attente
|
||
attente()
|
||
{
|
||
if [ "${mode_debug}" -ge 6 ]; then
|
||
echod "Appuyer sur la touche 'Entrée' pour continuer ..."
|
||
#read -s -n1 /dev/null 2> /dev/null
|
||
dd bs=1 count=1 > /dev/null 2>&1
|
||
# Le problème avec la commande `read` est que les différents shell (sh, bash, zsh, ...) en ont une implémentation
|
||
# différente. L'utilisation de `dd` est en revanche fonctionnelle partout.
|
||
fi
|
||
}
|
||
|
||
## Définition du niveau de debug
|
||
## Prototype: def_debug $1
|
||
## $1: valeur comprise entre 0 et 2 pour déterminer le niveau de debug
|
||
## Niveau 0
|
||
# Exécution automatique avec normalement aucune interaction avec l'utilisateur et peu de log
|
||
## Niveau 1 et 2
|
||
# Exécution automatique avec un peu plus d'information dans les logs
|
||
## Niveau 3
|
||
# Exécution automatique avec tous les logs
|
||
## Niveau 4
|
||
# Reprise du niveau 3 sur la sortie standard
|
||
## Niveau 5
|
||
# Mode debug
|
||
def_debug()
|
||
{
|
||
case "${1}" in
|
||
0) ## Niveau minimum avec le minimum de contenu dans les fichiers de logs
|
||
# La sortie standard sera redirigée dans un fichier de log
|
||
redirect_stdout
|
||
# La sortie d'erreur sera redirigée dans un fichier d'erreur
|
||
redirect_stderr
|
||
# Aptitude en tout automatique
|
||
OPTIONS="-y"
|
||
# Ne pas afficher les changements sur les paquets lors des mises à jour
|
||
sed -i 's/pager$/none/' /etc/apt/listchanges.conf
|
||
;;
|
||
1) ## Niveau bas avec seulement les erreurs et les warnings dans les logs
|
||
redirect_stdout
|
||
redirect_stderr
|
||
# Aptitude en tout automatique
|
||
OPTIONS="-y"
|
||
# Ne pas afficher les changements sur les paquets lors des mises à jour
|
||
sed -i 's/pager$/none/' /etc/apt/listchanges.conf
|
||
;;
|
||
2) ## Niveau intermédiaire avec les erreurs, les warnings et les informations
|
||
redirect_stdout
|
||
redirect_stderr
|
||
# Pas d'options pour aptitude
|
||
OPTIONS="-y"
|
||
# Ne pas afficher les changements sur les paquets lors des mises à jour
|
||
sed -i 's/pager$/none/' /etc/apt/listchanges.conf
|
||
;;
|
||
3) ## Niveau moyen avec presque tous les echos (sauf DEBUG)
|
||
redirect_stdout
|
||
redirect_stderr
|
||
# Pas d'options pour aptitude
|
||
OPTIONS=""
|
||
;;
|
||
4) ## Niveau élevé avec presque tous les echos (sauf DEBUG) sur la sortie standard
|
||
redirect_stderr
|
||
# Pas d'options pour aptitude
|
||
OPTIONS=""
|
||
;;
|
||
5)
|
||
OPTIONS="-y"
|
||
# Ne pas afficher les changements sur les paquets lors des mises à jour
|
||
sed -i 's/pager$/none/' /etc/apt/listchanges.conf
|
||
;;
|
||
6) ## Niveau debug avec tous les echos et les sorties non redirigées
|
||
# Pas d'options pour aptitude
|
||
OPTIONS=""
|
||
echo "Mode debug"
|
||
attente
|
||
;;
|
||
*) ## Niveau non pris en compte
|
||
echo "Erreur, le niveau choisi (${1}) n'est pas géré"
|
||
esac
|
||
}
|
||
|
||
## Fonction d'installation
|
||
# Récupère la liste des paquets à installer et le type de ces paquets.
|
||
# Prototype: ains "DESCRIPTION_PAQUET" paquet1 paquet2 ... paquetX
|
||
# Les options sont définies en fonctions du niveau de debug
|
||
# Utilisation de la fonction check_output pour vérifier que tout s'est bien passé
|
||
ains()
|
||
{
|
||
## On récupère la description
|
||
DESCR_PAQUET="${1}"
|
||
## Décale la liste des paramètres, $2 devient $1, ... Permet de supprimer la description des paquet.
|
||
shift
|
||
## Installation de la liste des paquets passées en paramètre
|
||
aptitude ${OPTIONS} install $*
|
||
## Vérification que tout s'est bien passé
|
||
check_output "${DESCR_PAQUET}"
|
||
## Nettoie les paquets téléchargés
|
||
aptitude clean
|
||
}
|
||
|
||
## Fonction de désinstallation
|
||
# Récupère la liste des paquets à désinstaller et le type de ces paquets.
|
||
# Prototype: arem "DESCRIPTION_PAQUET" paquet1 paquet2 ... paquetX
|
||
# Les options sont définies en fonctions du niveau de debug
|
||
# Utilisation de la fonction check_output pour vérifier que tout s'est bien passé
|
||
arem()
|
||
{
|
||
## On récupère la description
|
||
DESCR_PAQUET="${1}"
|
||
## Décale la liste des paramètres, $2 devient $1, ... Permet de supprimer la description des paquet.
|
||
shift
|
||
## Installation de la liste des paquets passées en paramètre
|
||
aptitude ${OPTIONS} remove $*
|
||
## Vérification que tout s'est bien passé
|
||
check_output "${DESCR_PAQUET}"
|
||
## Nettoie les fichiers de configuration des paquets
|
||
aptitude ${OPTIONS} purge '~c'
|
||
}
|
||
|
||
## Fonction qui récupère l'architecture de la distribution
|
||
architecture()
|
||
{
|
||
ARCHI=$(uname -r)
|
||
|
||
if [ `uname -r | grep amd64` ]; then
|
||
ARCH="64"
|
||
elif [ `uname -r | grep 86` ]; then
|
||
ARCH="86"
|
||
else
|
||
echow "architecture inconnue: ${ARCHI}"
|
||
fi
|
||
}
|
||
|
||
## Fonction qui vérifie la présence d'un fichier seed pour l'argument passé en paramètre.
|
||
# Si ce fichier existe, il sera donc appliqué.
|
||
# Prototype: preconfig "NOM_PAQUET"
|
||
preconfig()
|
||
{
|
||
if [ -f ${script_path}/seed/${1}.seed ]; then
|
||
debconf-set-selections ${script_path}/seed/${1}.seed
|
||
check_output "Préconfiguration de ${1}"
|
||
else
|
||
echow "Il n'existe aucun fichier seed pour ${1}."
|
||
fi
|
||
}
|
||
|
||
# Fin des fonctions globales
|
||
# -----------------------------------------------------------
|
||
# **********************************************************************************************
|
||
|
||
# **********************************************************************************************
|
||
#
|
||
# Programme principale
|
||
#
|
||
# -----------------------------------------------------------
|
||
|
||
# Création des fichiers de logs
|
||
create_file ${fichier_log} ${fichier_erreur} ${INFORMATION}
|
||
|
||
# Définition du niveau de debug
|
||
def_debug ${mode_debug}
|
||
|
||
# Définition de l'architecture
|
||
architecture
|
||
|
||
###########################################################
|
||
## Prerequisite
|
||
##### Installation
|
||
ains "Prerequisite" debconf-utils lsof
|
||
|
||
##### Post-configuration
|
||
preconfig locales
|
||
preconfig keyboard
|
||
###########################################################
|
||
|
||
###########################################################
|
||
#### Apt configuration
|
||
###########################################################
|
||
##### Pre-configuration
|
||
###### Load pre-seed to automatically restart services after an upgrade
|
||
preconfig restart_no_asking
|
||
|
||
###### apt.conf.d
|
||
cp -f ${script_path}/apt/apt.conf.d/* /etc/apt/apt.conf.d/
|
||
|
||
###### sources.list.d
|
||
### Backup initial
|
||
test -f /etc/apt/sources.list && mv /etc/apt/sources.list /etc/apt/sources.list.bkp
|
||
rm -f /etc/apt/sources.list\~
|
||
### Copy all local sources.list files
|
||
cp -f ${script_path}/apt/sources-list.d/* /etc/apt/sources.list.d/
|
||
|
||
###### preferences.d
|
||
### Backup initial
|
||
test -f /etc/apt/preferences && mv /etc/apt/preferences /etc/apt/preferences.bkp
|
||
### Copy all local preferences files
|
||
cp -f ${script_path}/apt/preferences.d/* /etc/apt/preferences.d/
|
||
|
||
aptitude update
|
||
check_output "Update Debian repositories"
|
||
|
||
# Restore the standard output to be sur to be able to install the Debian Multimedia Keyring
|
||
restore_stdout
|
||
restore_stderr
|
||
|
||
##### Add
|
||
ains "Debian Multimedia Repository" deb-multimedia-keyring
|
||
|
||
# Restore the standard output to the default choosen level
|
||
def_debug ${mode_debug}
|
||
|
||
##### Post-Configuration
|
||
aptitude update
|
||
check_output "Update Debian repositories"
|
||
|
||
###### Set a variable to ensure to keep old config files when upgrading a package.
|
||
export UCF_FORCE_CONFFOLD=1
|
||
|
||
###### Force a full-upgrade of the system
|
||
aptitude -y full-upgrade
|
||
check_output "Force full-upgrade of the system"
|
||
|
||
###########################################################
|
||
#### X11 Server
|
||
##### Pre-configuration
|
||
preconfig x11-common
|
||
|
||
##### Installation
|
||
ains "X11 Server" mesa-utils xorg
|
||
###########################################################
|
||
|
||
###########################################################
|
||
#### Graphic Environment
|
||
##### Installation
|
||
ains "Graphic Environment" alsa-utils gtk2-engines-cleanice herbstluftwm i3lock lxappearance nitrogen redshift rofi roxterm scrot suckless-tools terminator wmctrl xautolock xbacklight xclip
|
||
|
||
##### Remove
|
||
arem "Purge: Graphic Environment" geoclue-2.0 modemmanager xscreensaver xscreensaver-data
|
||
|
||
##### Post-Configuration
|
||
# Ensure to have an xautolock launch at boot time
|
||
if [ ! "$(grep 'xautolock' /home/${new_username}/.xinitrc)" ]; then
|
||
cat << EOF >> "/home/${new_username}/.xinitrc"
|
||
xautolock -time 15 -locker 'i3lock --pointer win -d -e -t' &
|
||
EOF
|
||
fi
|
||
###########################################################
|
||
|
||
###########################################################
|
||
#### Gnome tools
|
||
##### Installation
|
||
ains "Gnome tools" evince etherape gedit gnome-calculator gparted nemo nemo-fileroller planner
|
||
|
||
##### Remove
|
||
arem "Purge: Gnome tools" eog
|
||
###########################################################
|
||
|
||
###########################################################
|
||
#### Dev tools
|
||
##### Installation
|
||
ains "Dev tools" build-essential binutils cpp debconf-utils gcc g++ make
|
||
###########################################################
|
||
|
||
###########################################################
|
||
#### Admin tools for cli
|
||
##### Pre-configuration
|
||
preconfig hddtemp
|
||
|
||
##### Installation
|
||
ains "Admin tools for cli" acpitool alien apticron apt-file apt-listbugs apt-rdepends apt-show-source apt-show-versions dctrl-tools debian-goodies dnsutils dstat ethtool git git-svn gpm hddtemp htop ifscheme iperf mlocate mercurial module-assistant ncdu netdiscover netselect-apt ngrep nmap ntp parted pastebinit perf-tools-unstable rsyslog strace sudo sysv-rc-conf tcpdump tree util-linux whois
|
||
|
||
##### Post-configuration
|
||
###### apt-file: Synchronize the package contents from their sources.
|
||
apt-file update
|
||
|
||
###### Grub: Modify the default grub timeout
|
||
if [ ! "$(grep "GRUB_TIMEOUT=${grub_timeout}" /etc/default/grub)" ]; then
|
||
sed -i "s/^GRUB_TIMEOUT.*/GRUB_TIMEOUT=${grub_timeout}/" /etc/default/grub
|
||
update-grub
|
||
fi
|
||
|
||
###### Mlocate: Update the mlocate database
|
||
updatedb
|
||
|
||
###### Modprobe: Ensure to disable system beep/buzzer
|
||
cp ${script_path}/modprobe.d/blacklist-beep.conf /etc/modprobe.d/
|
||
# Ensure to blacklist dangerous modules (firewire, thunderbolt, …)
|
||
cp ${script_path}/modprobe.d/blacklist-dma.conf /etc/modprobe.d/
|
||
|
||
###### Ntp: Set a better NTP server.
|
||
if [ ! "$(grep "server ${ntp_server}" /etc/ntp.conf)" ]; then
|
||
sed -i "s/^server.*/server ${ntp_server}/g" /etc/ntp.conf
|
||
# Restart NTP service to apply the new server
|
||
systemctl restart ntp
|
||
fi
|
||
|
||
###### Rsyslog: Enable Rsyslog in tty9
|
||
sed -i '/#daemon,mail.\*;/{:label;/^$/q;s/^#//;n;s/^#//;t label;}' /etc/rsyslog.conf
|
||
sed -i 's/tty8/tty9/' /etc/rsyslog.conf
|
||
|
||
###### Sudo: Add default user to sudo group
|
||
if [ ! "$(grep "^sudo:x:27:.*${new_username}" /etc/group)" ]; then
|
||
adduser ${new_username} sudo
|
||
fi
|
||
|
||
###### Fstrim: Ensure to enable TRIM if a SSD is available.
|
||
# If fstrim is not already enable
|
||
if [ ! "$(grep fstrim /etc/rc.local)" ]; then
|
||
|
||
# For all hdd
|
||
for path_drive in $(find /sys/block/ ! -name "dm-*" -type l);
|
||
do
|
||
IS_SSD=$(grep 0 ${path_drive}/queue/rotational)
|
||
if [ ${IS_SSD} ]; then
|
||
sed -i 's/\(^exit 0\)/# Run TRIM on every mountpath\nfstrim -a\n\n\1/' /etc/rc.local
|
||
fi
|
||
done
|
||
|
||
fi
|
||
###########################################################
|
||
|
||
|
||
#########################################################
|
||
#### UEFI tools
|
||
##### Installation
|
||
uefi_add_pkg_list="efibootmgr efivar"
|
||
# If grub-efi is available
|
||
if [ "$(dpkg -l grub-efi)" ]; then
|
||
ains "UEFI tools" efibootmgr efivar
|
||
fi
|
||
#########################################################
|
||
|
||
###########################################################
|
||
#### System tools for cli
|
||
##### Pre-configuration
|
||
|
||
##### Installation
|
||
ains "System tools for cli" bsdmainutils colordiff cpio genisoimage keychain knockd lzip moreutils multitail myrepos ntfs-3g openssh-client openvpn physlock screen tmux udisks2 unrar unzip urlview vim-nox vim-doc vim-scripts vlock wakeonlan zsh zip
|
||
|
||
##### Remove
|
||
arem "Purge: System tools for cli" bluetooth bluez network-manager vim-tiny
|
||
|
||
##### Post-configuration
|
||
###### Vim: set vim-nox as default editor.
|
||
update-alternatives --set editor $(command -v vim.nox)
|
||
|
||
##### Openvpn: Disable to automatically start
|
||
systemctl disable openvpn.service
|
||
|
||
###### ZSH: set as default shell
|
||
## For root
|
||
chsh -s /bin/zsh
|
||
rm -f ~/.bash*
|
||
## For new_username
|
||
chsh -s /bin/zsh "${new_username}"
|
||
mkdir -p /home/"${new_username}"/.zsh
|
||
chown "${new_username}":"${new_username}" /home/"${new_username}"/.zsh
|
||
## For new users with adduser
|
||
sed -i "s;/bin/bash;/bin/zsh;" /etc/adduser.conf
|
||
###########################################################
|
||
|
||
###########################################################
|
||
#### Internet tools for cli
|
||
##### Installation
|
||
ains "Internet tools for cli" axel finch lynx mat postfix weechat-curses
|
||
|
||
##### Post-configuration
|
||
###### Postfix
|
||
# Ensure to forward root's mails to $new_user_mail
|
||
if [ ! "$(grep "root: .*${new_user_mail}" /etc/aliases)" ]; then
|
||
sed -i "s/^root: /root: ${new_user_mail} /" /etc/aliases
|
||
newaliases
|
||
fi
|
||
|
||
# Ensure Postfix only listen on localhost
|
||
if [ -f /etc/postfix/main.cf ] && [ !"$(grep 'inet_interfaces = localhost' /etc/postfix/main.cf)" ]; then
|
||
sed -i 's/\(inet_interfaces\).*/\1 = localhost/' /etc/postfix/main.cf
|
||
systemctl restart postfix
|
||
fi
|
||
###########################################################
|
||
|
||
###########################################################
|
||
#### Internet tools for X11
|
||
##### Installation
|
||
ains "Internet tools for X11" browser-plugin-freshplayer-pepperflash dwb filezilla icedove icedove-l10n-fr iceowl-extension firefox firefox-l10n-fr luakit midori mumble pepperflashplugin-nonfree pidgin pidgin-otr pidgin-microblog rdesktop transmission xvnc4viewer
|
||
|
||
##### Remove
|
||
arem "Purge: Internet tools for X11" flashplugin-nonfree flashplugin-nonfree-extrasound
|
||
|
||
##### Post-configuration
|
||
# Ensure to install last flash version
|
||
update-pepperflashplugin-nonfree --install
|
||
###########################################################
|
||
|
||
###########################################################
|
||
#### Nvidia driver
|
||
if [ "$(lspci | grep -i nvidia)" ]; then
|
||
##### Installation
|
||
ains "Nvidia driver" linux-headers-$(uname -r|sed 's,[^-]*-[^-]*-,,') nvidia-kernel-dkms nvidia-xconfig
|
||
|
||
##### Post-configuration
|
||
## Backup previous xorg.conf file if exists
|
||
if [ -f /etc/X11/xorg.conf ]; then
|
||
mv /etc/X11/xorg.conf{,.bkp}
|
||
fi
|
||
## Run the Nvidia configuration tool
|
||
nvidia-xconfig --no-logo
|
||
fi
|
||
###########################################################
|
||
|
||
###########################################################
|
||
#### Wireless driver for BCM43
|
||
## Support : carte wifi BCM43
|
||
## Liste: broadcom-sta-dkms
|
||
if [ "$(lspci | grep -i BCM43)" ]; then
|
||
##### Installation
|
||
ains "Wireless driver for BCM43 " linux-headers-$(uname -r|sed 's,[^-]*-[^-]*-,,') broadcom-sta-dkms
|
||
|
||
###### Post-configuration
|
||
# Unload useless modules
|
||
modprobe -r b44 b43 b43legacy ssb brcmsmac
|
||
# Load the 'wl' module
|
||
modprobe wl
|
||
# Vérification du bon fonctionnement avec:
|
||
#iwconfig
|
||
fi
|
||
###########################################################
|
||
|
||
###########################################################
|
||
#### Office tools for cli
|
||
##### Pre-configuration
|
||
# Load preseed file
|
||
preconfig cups
|
||
|
||
##### Installation
|
||
ains "Office tools for cli" cups devtodo ghostscript gocr graphviz imagemagick imagemagick-doc odt2txt pdftk poppler-utils texinfo texlive texlive-latex-extra vim-latexsuite xpdf
|
||
|
||
##### Remove
|
||
arem "Purge: Office tools for cli" avahi-autopid avahi-daemon cups-browsed libdaemon0 libnss-mdns
|
||
|
||
##### Post-configuration
|
||
# Add the standard user to lpadmin group to be able to manage Cups administration via webgui.
|
||
adduser "${new_username}" lpadmin > /dev/null 2> "${fichier_erreur}"
|
||
# cups needs samba!
|
||
###########################################################
|
||
|
||
###########################################################
|
||
#### Office tools for X11
|
||
##### Installation
|
||
ains "Outils bureautique graphique" freeplane gprename key-mon libreoffice libreoffice-l10n-fr libreoffice-help-fr libreoffice-pdfimport fonts-linuxlibertine ttf-ancient-fonts verbiste verbiste-gnome xournal
|
||
###########################################################
|
||
|
||
###########################################################
|
||
#### Multimedia tools for cli
|
||
##### Installation
|
||
ains "Multimedia tools for cli" avinfo eyed3 ffmpeg mediainfo mkvtoolnix moc w32codecs
|
||
###########################################################
|
||
|
||
###########################################################
|
||
#### Multimedia tools for X11
|
||
##### Installation
|
||
ains "Multimedia tools for X11" audacity easytag gimp gpicview inkscape mirage mkvtoolnix-gui smplayer rhythmbox vlc
|
||
###########################################################
|
||
|
||
###########################################################
|
||
#### Games
|
||
##### Installation
|
||
ains "Games" teeworlds teeworlds-server
|
||
###########################################################
|
||
|
||
###########################################################
|
||
#### Network share
|
||
##### Installation
|
||
ains "Network share" nfs-common
|
||
|
||
##### Remove
|
||
arem "Purge: Network share" nfs-kernel-server samba
|
||
|
||
##### Post-configuration
|
||
#### If nfs-kernel-server and samba are need or vital for the system, disable them anyway
|
||
# Disable samba service if available by default
|
||
if [ $(command -v samba) ]; then
|
||
systemctl disable nmbd.service
|
||
systemctl disable smbd.service
|
||
systemctl disable samba.service
|
||
fi
|
||
# Disable nfs-kernel-server service if available by default
|
||
if [ $(command -v nfsdcltrack) ]; then
|
||
systemctl disable nfs-kernel-server.service
|
||
fi
|
||
###########################################################
|
||
|
||
###########################################################
|
||
#### Wireless tools for cli
|
||
if [ "$(lspci | grep -i wireless)" ]; then
|
||
##### Installation
|
||
ains "Wireless tools for cli" ifscheme wireless-tools wpasupplicant
|
||
fi
|
||
###########################################################
|
||
|
||
###########################################################
|
||
#### Wireless tools for X11
|
||
if [ "$(lspci | grep -i wireless)" ]; then
|
||
##### Installation
|
||
ains "Wireless tools for X11" wpagui
|
||
fi
|
||
###########################################################
|
||
|
||
###########################################################
|
||
#### Miscellaneous useless packages
|
||
##### Installation
|
||
ains "Miscellaneous useless packages" asr-manpages cmatrix cmatrix-xfont cowsay cowsay-off fortunes fortunes-bofh-excuses fortunes-debian-hints fortunes-fr fortunes-off funny-manpages linuxlogo sl
|
||
###########################################################
|
||
|
||
###########################################################
|
||
#### Manpages / Documentation
|
||
##### Installation
|
||
ains "Manpages" aptitude-doc-fr info manpages-fr manpages-fr-dev manpages-fr-extra
|
||
###########################################################
|
||
|
||
# Restauration des sorties standard
|
||
restore_stdout
|
||
restore_stderr
|
||
|
||
# Supprime le fichier d'erreur si il est vide
|
||
[ -s ${fichier_erreur} ] && echo "Fichier erreur non vide" || rm ${fichier_erreur}
|
||
# Supprime le fichier d'log si il est vide
|
||
[ -s ${fichier_log} ] && echo "Fichier log non vide" || rm ${fichier_log}
|
||
|
||
exit 0
|
||
# Fin de la boucle principale
|
||
# -----------------------------------------------------------
|
||
# **********************************************************************************************
|