# 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](https://trisquel.info/fr/wiki/%EF%BB%BFinstallation-de-trisquel-netinstall-en-mode-texte), qui est la plus adaptée à [l'installation de serveurs](https://trisquel.info/en/wiki/install-trisquel-server). 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 : - aller sur https://routeur.libre-en-communs.org/cgi-bin/luci/admin/network/dhcp ; - onglet Static Leases, bouton Add : - Hostname : nom de PM en domaine, - MAC : dispo sur la machine, - IPv4 : choisir une 192.168.0.x (réservé infra générale, pour les machines physiques). - valider les changements. 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 ```