backuppc_client/client/install_backuppc_windows_ba...

155 lines
4.9 KiB
Bash
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# Automatisation d'installation et configuration de BackupPC pour Windows 10 {{{
# via Bash on Ubuntu
# Institut de Physique de Rennes UMR6251
# Jérémy Gardais Mail 2019
# }}}
# How-to use {{{
# With PowerShell
## This script can be launch with PowerShell:
## bash -c "./install_backuppc_windows_bash_on_linux.sh"
# }}}
# Variable {{{
## Valeur de fin
SUCCESS=0
ERROR=1
backuppc_user="backuppc"
backuppc_homedir="/var/lib/backuppc"
backuppc_sshkey="from=\"129.20.203.16\" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDIhMc8ixQXfWDACJy4q0v8T877UxahhCjO51PQFzylwVpf88LX3yWeDrWIW0NRu0zoSm396mig918OpD5ggqML/QbYbQsoDdAFUV/tK4JU6UJgEQIl25MOcUBCFepsFBGS09CH/V07xSUqSP/+beeTRLNO2CQzk3S2y3YfkXpM7KmOGfeLgoCaQAcxIkgLXeM3TpCZEzJDlZ8c8k/DjVvsgwCpQktYzNo2b37KHLLfgyW9KSo6N9sReUuNQjS6lu8rjrXfc6+J0pY2D6IxWptTWL/JVrhFCUqe4QQy+xYjoR41wqnAQyl/kOcyBNhSvojMKwQT6vlPwru6pOno16/X backuppc@backuppc.ipr.univ-rennes1.fr"
## Couleur {{{
BLACK='\033[49;30m'
BLACKB='\033[49;90m'
RED='\033[0;31m'
REDB='\033[1;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
BLUE='\033[94;49m'
MAGENTA='\033[0;35m'
CYAN='\033[36;49m'
WHITE='\033[0;37m'
BOLD='\033[1m'
RESET='\033[0m'
## }}}
# }}}
# Fonctions {{{
function getMainBackupDir() ## {{{
{
local input_dir
local backup_dir
printf '%b' "${GREEN}Merci de saisir ici (copier/coller avec le clic droit), le chemin du dossier à sauvegarder:${RESET} "
read -r input_dir
### Transform Windows path to Unix path
backup_dir=$(wslpath "${input_dir}")
### Verify the directory exist
if [ ! -d "${backup_dir}" ]; then
printf '%b' "${BOLD}${input_dir} ne semble pas être un dossier. Merci de vérifier votre saisie.${RESET}\\n"
return "${ERROR}"
fi
}
## }}}
function addUserForBackuppc() ## {{{
{
local userLogin="${1}" ### eg. 'backuppc'
local userHomedir="${2}" ### eg. '/var/lib/backuppc'
if ! getent passwd "${userLogin}" > /dev/null 2>&1; then
printf '%b' "${BOLD}L'utilisateur ${userLogin} n'existe pas, tentative de création.${RESET}\\n"
useradd --system --shell /bin/sh --home-dir "${userHomedir}/" --create-home -- "${userLogin}"
fi
chown -R -- "${userLogin}:" "${userHomedir}"
}
## }}}
function manageSshKeyForBackuppc() ## {{{
{
local userLogin="${1}" ### eg. 'backuppc'
local backuppcSshKey="${2}" ### eg. 'AAAAA...
local userHomedir
userHomedir="$(getent passwd "${userLogin}" | cut -d: -f6)"
### Create ssh directory for BackupPC's user
mkdir -p -- "${userHomedir}/.ssh"
chmod 0700 -- "${userHomedir}/.ssh"
printf '%b' "${backuppcSshKey}" > "${userHomedir}/.ssh/authorized_keys"
chmod 0600 -- "${userHomedir}/.ssh/authorized_keys"
chown -R -- "${userLogin}:" "${userHomedir}"
}
## }}}
function ensureSshdIsInstalled() ## {{{
{
### `command -v sshd` still return old value even after openssh-server was removed
### So we can't be sure of openssh-server state.
if ! hash sshd 2>/dev/null; then
printf '%b' "${BOLD}openssh-server non installé, tentative d'installation.${RESET}\\n"
if [ $(command -v aptitude) ]; then aptitude install -y --quiet=5 -- openssh-server > /dev/null
elif [ $(command -v apt) ]; then apt install -y openssh-server > /dev/null
elif [ $(command -v yum) ]; then yum install -y openssh-server
elif [ $(command -v zypper) ]; then zypper install -y openssh-server
else
printf '%b' "${REDB}Merci dinstaller openssh-server sur votre machine, installation annulée.${RESET}\\n"
return "$ERROR"
fi
fi
}
## }}}
function ensureSshdIsRunning() ## {{{
{
### Ensure to completely restart sshd
service ssh --full-restart > /dev/null
}
## }}}
# }}}
# Récupération des informations de l'utilisateur {{{
getMainBackupDir
if [ "$?" != "${SUCCESS}" ]; then
printf '%b' "${REDB}La récupération du dossier principal à sauvegarder a échouée, installation annulée.${RESET}\\n"
exit "${ERROR}"
fi
# }}}
# Gestion des paquets {{{
## Mettre à jour les dépôts
apt update -- > /dev/null 2>&1
## Installer aptitude
### aptitude permet une meilleure résolution des dépendances/erreurs/... que apt
### apt-get est déprécié au profit de apt ou aptitude
apt install -y -- aptitude > /dev/null 2>&1
## Mettre à jour le système
aptitude full-upgrade -y --quiet=5 > /dev/null
# }}}
# Gestion de l'utilisateur pour BackupPC {{{
addUserForBackuppc "${backuppc_user}" "${backuppc_homedir}"
if [ "$?" != "${SUCCESS}" ]; then
printf '%b' "${REDB}La création de l'utilisateur ${backuppc_user} a échouée, installation annulée.${RESET}\\n"
exit "${ERROR}"
fi
manageSshKeyForBackuppc "${backuppc_user}" "${backuppc_sshkey}"
# }}}
# Gestion de SSH {{{
ensureSshdIsInstalled
if [ "$?" != "${SUCCESS}" ]; then
printf '%b' "${REDB}L'installation du serveur ssh a échoué, installation annulée.${RESET}\\n"
exit "${ERROR}"
fi
ensureSshdIsRunning
if [ "$?" != "${SUCCESS}" ]; then
printf '%b' "${REDB}Le serveur ssh n'a pas correctement démarré, installation annulée.${RESET}\\n"
exit "${ERROR}"
fi
# }}}
exit "${SUCCESS}"