documentation/procédures/création_pm.md

12 KiB

Création d'une nouvelle machine physique

Le but est d'intégrer une nouvelle machine physique dans le SI.

Installer un microprogramme libre

Installation du système d'exploitation FSDG (Trisquel)

Préparation du média d'installation

Récupérer l'image Trisquel NetInstall, qui est la plus adaptée à l'installation de serveurs.

A la date d'écriture de cette procédure, on utilise Trisquel version 11 (Aramo) via la console série, sans écran.

Installation du système

Démarrer le média d'installation sur la console série

Utiliser TAB pour éditer la ligne de commande du menu de démarrage du média et remplacer dans la ligne de commande du noyau vga=788 par console=ttyS0,115200n8.

Supprimer également la directive quiet.

Appuyer sur entrée pour continuer le démarrage.

Configuration de la langue et position

Installer avec la langue anglaise et la locale en_US.UTF8.

Indiquer le lieu en France, utiliser le miroir allemand.

Création de l'utilisateur d'administration

Créer l'utilisateur admin666 avec un mot de passe fort.

Enregistrer ce mot de passe dans le coffre (section infra générale).

Partitionnement des disques

Partitionner selon le schéma voulu pour la machine spécifique. Par exemple avec du RAID logiciel sur deux disques, une partition de démarrage (en ext2), une partition racine et une partition de stockage de machine virtuelle.

Sélection des paquets de base de l'installateur

Choisir d'installer postfix, openssh et Trisquel console environment.

Configurer postfix

Indiquer de configurer postfix en mode local.

Configurer GRUB

Installer GRUB sur le premier disque contenant une partition de démarrage.

Configuration critique du système

Programme de démarrage (grub)

Au premier démarrage du système, afin de pouvoir accéder à la console série, modifier la ligne de commande du noyau dans l'interface de GRUB avec la touche e. Ajouter la directive console=ttyS0,115200n8 à la ligne linux.

Une fois le système démarré, modifier le fichier /etc/default/grub :

GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="libata.force=noncq nohz=on console=ttyS0,115200n8"
GRUB_CMDLINE_LINUX=""

GRUB_TERMINAL=serial
GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"

Effectuer ensuite :

update-grub
update-initramfs -u

Programme de redémarrage (kexec)

Les démarrages gérés par le BIOS sont parfois longs et risqués, on préfère utiliser kexec.

Installer avec :

apt install kexec-tools.

Reconfiguration de la langue

Utiliser la commande dpkg-reconfigure locales et sélectionner uniquement fr_FR.UTF8.

Redémarrer à l'issue de cette commande.

Installation des paquets de base

apt install etckeeper molly-guard tig lm-sensors fancontrol screen emacs-nox needrestart iotop htop atop usbtop curl ncdu iptraf tig unzip ufw ifupdown net-tools bridge-utils

Paramétrage réseau

Il faut passer de netplan.io à networking :

apt purge netplan.io

Éditer le service de résolution DNS dans /etc/systemd/resolved.conf, et modifier la ligne #DNS= en DNS=192.168.0.1 (correspondant à l'adresse du routeur).

Relancer le service :

systemctl restart systemd-resolved

Supprimer le fichier /etc/resolv.conf et le regénérer :

rm /etc/resolv.conf
ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf

Configurer dans /etc/network/interfaces :

auto lo br0
iface lo inet loopback
allow-hotplug ens10
allow-hotplug ens9

# bridge for vm
iface br0 inet static
    bridge_ports ens10
    address 192.168.1.2
    gateway 192.168.0.1
    broadcast 192.168.255.255
    netmask 255.255.0.0
 
iface br0 inet6 static
    bridge_ports ens10
    address 2001:910:1028:0::2/128
    gateway 2001:910:1028::1

Configurer ensuite le routage sur le routeur :

Redémarrer la machine à la fin de ces étapes.

Configuration SSH (OpenSSH)

Créer l'utilisateur cominfra pour servir de proxy de connexion, sans mot de passe :

adduser cominfra

Placer toutes les clés publiques nécessaires dans /home/cominfra/.ssh/authorized_keys et dans /home/admin666/.ssh/authorized_keys.

Configurer le serveur OpenSSH avec le fichier /etc/ssh/sshd_config :

Port 222
AddressFamily any
ListenAddress 0.0.0.0
ListenAddress ::
PubkeyAuthentication yes
PasswordAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
UsePAM yes
AllowAgentForwarding yes
AllowTcpForwarding yes
GatewayPorts yes
X11Forwarding no
PrintMotd no
TCPKeepAlive yes
PermitTunnel yes
AcceptEnv LANG LC\_* GIT\_*
Subsystem       sftp    /usr/lib/openssh/sftp-server
Match User admin666 Address *,!192.168.0.0/16,!::1,!127.0.0.1
    DenyUsers admin666

Configuration de sudo

Utiliser la commande :

sudo visudo

Modifier la ligne %sudo ALL=(ALL:ALL) ALL en %sudo ALL=(ALL:ALL) NOPASSWD:ALL.

Configuration du pare-feu (UFW)

Autoriser les ports 222, 25, 5665, 68, 7789, 16514, 49152, 49153, 3493 :

ufw allow 25
ufw allow 68
ufw allow 222
ufw allow 3493
ufw allow 5665
ufw allow 7789
ufw allow 16514
ufw allow 49152
ufw allow 49153

Activer le pare-feu

ufw enable

Configuration du MTA (Postfix)

Il faut configurer le MTA pour qu'il relaie les courriels vers mail.a-lec.org.

Éditer /etc/postfix/transport :

a-lec.org    :
*    discard:

Éditer /etc/postfix/virtual :

@localhost admin@a-lec.org
@anthea.libre-en-communs.org admin@a-lec.org

Valider les changements :

postmap /etc/postfix/transport
postmap /etc/postfix/virtual
postfix reload

Configuration du moteur de virtualisation (KVM + libvirt)

Installer les paquets :

apt install qemu-kvm libvirt-daemon-system libvirt-clients

Créer un nouvel utilisateur dédié : virt-user

adduser virt-user
adduser virt-user libvirt

Configuration de htop

Éditer le fichier ~/.config/htop/htoprc pour les comptes admin666 et root :

fields=0 48 17 18 38 39 40 2 46 47 49 1
sort_key=0
sort_direction=1
tree_sort_key=0
tree_sort_direction=1
hide_kernel_threads=1
hide_userland_threads=0
shadow_other_users=0
show_thread_names=0
show_program_path=1
highlight_base_name=0
highlight_megabytes=1
highlight_threads=1
highlight_changes=0
highlight_changes_delay_secs=5
find_comm_in_cmdline=1
strip_exe_from_cmdline=1
show_merged_command=0
tree_view=0
tree_view_always_by_pid=0
header_margin=1
detailed_cpu_time=0
cpu_count_from_one=0
show_cpu_usage=1
show_cpu_frequency=0
show_cpu_temperature=0
degree_fahrenheit=0
update_process_names=0
account_guest_in_cpu_meter=0
color_scheme=0
enable_mouse=1
delay=15
left_meters=LeftCPUs2 Blank Memory DiskIO NetworkIO Systemd
left_meter_modes=1 2 1 2 2 2
right_meters=RightCPUs2 Blank CPU LoadAverage Tasks Uptime
right_meter_modes=1 2 1 2 2 2
hide_function_bar=0

Configuration de bash

Éditer /etc/skel/.bashrc et /home/admin666/.bashrc :

``` # ~/.bashrc: executed by bash(1) for non-login shells. # see /usr/share/doc/bash/examples/startup-files (in the package bash-doc) # for examples
# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth

# append to the history file, don't overwrite it
shopt -s histappend

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000

# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.

shopt -s checkwinsize


# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"

# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "\[\033[01;32m\]=(^-^)=${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi

# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
    xterm-color|*-256color) color_prompt=yes;;
esac

if [ -n "$force_color_prompt" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
    # We have color support; assume it's compliant with Ecma-48
    # (ISO/IEC-6429). (Lack of such support is extremely rare, and such
    # a case would tend to support setf rather than setaf.)
        color_prompt=yes
    else
        color_prompt=
    fi
fi

if [ "$color_prompt" = yes ]; then
    PS1='\[\033[01;32m\]=(^-^)=${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='=(^-^)=${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi

unset color_prompt force_color_prompt

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;=(^-^)=${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
    ;;
*)
    ;;
esac

# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    alias ls='ls --color=auto'
    alias grep='grep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias egrep='egrep --color=auto'
fi

# colored GCC warnings and errors
#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'

# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'

# Add an "alert" alias for long running commands.  Use like so:
#   sleep 10; alert
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi
```

Éditer le fichier /root/.bashrc :

# ~/.bashrc: executed by bash(1) for non-login shells.

# Note: PS1 and umask are already set in /etc/profile. You should not
# need this unless you want different defaults for root.
# PS1='${debian_chroot:+($debian_chroot)}\h:\w\$ '
PS1='\[\033[01;32m\]=(^-^)=${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '

# You may uncomment the following lines if you want `ls' to be colorized:
# export LS_OPTIONS='--color=auto'
# eval "`dircolors`"
alias ll='ls $LS_OPTIONS -l'

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi

# more aliases
if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi