mardi 6 décembre 2022

Trucs2Geek

Contruire sa Framboise 1/2

Ok, vous avez fait le tour de la Raspbian, elle vous plait bien, vous avez vos repères, mais il y a un petit problème..il y a beaucoup trop de chose d’installer. Pas de panique, nous allons construire une image de Raspbain minimale, et en mode CLI c’est-à-dire en mode interface de ligne de commande (Command Line Interface).

1. Carte SD

1.1. Choix
On commence par se procurer une carte micro-SD de 2Go minimum…et maximum aussi en fait.
On crée une partition que l’on formatera en type FAT32 (+/- 50 Mo).

1.2. Préparation
On récupère la dernière version du raspBianInstaller, qui correspond à une NetInstall Debian classique basée sur une version Wheezy. On decompresse et copie le contenu sur cette partion FAT32.
Nous avons donc 6  fichiers sur notre carte (bootcode.bin – cmdline.txt – kernel.img – loader.bin – README.txt – start.elf).

2. Installation

Voici ce moment mémorable où pendant 2 heures vous guettez l’état d’avancement sur votre écran.
Inserer la carte dans la Raspberry, brancher un cable réseau (avec un serveur DHCP au bout, c’est plus pratique), un clavier, et un écran… ou un téléviseur en HDMI (ce qui est mon cas), et allumer la bête.

2.1.Installation du système de base
L’installation se déroule ainsi :
Select a language : french
Choix de votre situation géographique : france
Configurer le clavier : français
Détection du matériel réseau : pas d’entrée
Configuration du réseau avec dhcp : pas d’entrée
Nom du système (hostname) : raspi (choisissez votre hostname)
Nom de domaine : priv8.fr (choisissez votre domaine)
Choisir un miroir de l’archive Debian : – saisie manuelle
Saisir : mirrordirector.raspbian.org (en saisissant mirrordirector.raspbian.org le miroir le plus approprié pour votre zone géographique sera choisi )
Répertoire du miroir de l’archive Debian :  /raspbian/
Mandataire http : pas d’entrée (dans mon cas, pas de proxy)
Télécharger des composants d’installation. Vous aurez droit à une fenêtre d’avertissement :
« Aucun module du noyau n’a été trouvé. Faut-il poursuivre l’installation sans charger les modules du noyau ? : oui
Charger des composants supplémentaires : pas d’entrée
Créer des utilisateurs et choisir les mots de passe:
Mot de passe root : raspberry (vous pouvez saisir ce que vous voulez hein..)
Confirmation du mot de passe : raspberry (…à condition de saisir la même chose ici)
Nom complet du nouvel utilisateur : HAMIDA Mehdi (pareil, faites preuve d’imagination)
Identifiant du nouvel utilisateur : idem (n’insistez pas hein…)
Mot de passe utilisateur : xxxxxx (tu me crois assez bête pour l’écrire ici?)
Détection des disques et autres périphériques
Chargement des composants
Démarrage de l’outil de partitionnement – partitionnement assisté automatique
Partitionner les disques : l’installeur vous propose un schéma de partitions utilisant l’intégralité de votre carte SD. Cela me convient très bien pour le moment, donc je valide.
Confirmation du formatage des partitions – dernière chance de modifier la table des partitions.
Faut-il appliquer les changement sur les disques ? : oui
Formatage des partitions : pas d’entrée
Installation du système de base : pas d’entrée (et là, je papote pendant 45 min avec mon ami Arnaud, trouvez-vous une autre occupation)
Fenêtre d’avertissement: voulez-vous poursuivre sans installer un noyau ? : oui
Configuration de l’outil de gestion des paquets apt : pas d’entrée
Choisir et installer des logiciels de base
Configuration de popularity-contest – souhaitez-vous participer à l’étude sur l’utilisation des paquets ? : non

 Logiciels à installer :
                       [ ] Environnement graphique de bureau
                       [ ] Serveur web
                       [ ] Serveur d'impression
                       [ ] Serveur DNS
                       [ ] Serveur de fichiersw
                       [ ] Serveur de courrier
                       [ ] Base de données SQL
                       [*] Serveur SSH
                       [ ] Ordinateur portable
                       [*] Utilitaires standard du système

     Pour une installation minimale, on ne sélectionnera que « SSH Serveur » et « Utilitaires standards du système ». Si vous souhaitez installer l’environnement de Bureau, libre à vous. Si vous avez entre 6 à 8 heures à attendre pour installer plus de 800 paquets….(JDCJDR).
Choisir et installer des logiciels : pas d’entrée (1/2 heure pendant laquelle j’ai posté mon billet de ce matin)
Fenêtre d’avertissement : aucun programme de démarrage installé : <continuer> puis [Enter]
Fin de l’installation
Reboot automatique
Premier login

2.2. Première connexion
On se connecte donc avec le compte root et son mot de passe (le votre hein, pas le mien).

Voilà, nous avons maintenant une Raspbian avec le strict minimum d’installé.
La suite, dans le prochain billet.

Debian Wheezy disponible depuis le 4 Mai

Ma distribution préféré a publié sa toute dernière mouture Debian 7 (stable) « Wheezy » le 4 mai dernier.
La version stable sort toujours après plusieurs longs mois, voire années de tests approfondis et de corrections de bogues. Cela fait de cette version majeure de Debian une version très attendue dans la communauté Linux.

L’annonce officielle faite par Debian mentionne plusieurs changements :

  • Linux kernel 3.2
  • ext4 est maintenant le système de fichiers par défaut pour les nouvelles installations Linux
  • systemd avec journald
  • GNOME 3.4, KDE 4.8, XFCE 4.8
  • Perl 5.14, Python 3.2, Ruby 1.9
  • X.Org 7.7
  • LibreOffice remplace OpenOffice.org
  • PackageKit
  • plus de 36 000 autres paquets prêts à l’emploi, construits à partir de plus de 17 500 paquets sources.

Les utilisateurs de la Debian 6 « Squeeze » sont encouragés à migrer vers « Wheezy » dès que possible. En effet, cette version n’obtiendra des mises à jour de sécurité que pour 1 an supplémentaire.
Le téléchargement des images (Blu-ray installable, DVD, et les images de CD) est disponibles ici.

Pensée du soir

J’ai toujours cette formidable citation de Paul Weeks (qui au passage a un blog très intéressant) :

I’m a dad and a geek. A geek without an outlet is a dangerous thing.
A blog about home automation, the internet of things and general tinkering with technical stuff. This is my outlet!

Je peux dire la même chose : Je suis un papa et un geek. Un geek sans exutoire est une chose dangereuse. Un blog sur la domotique, ceci est mon exutoire!

Programme de demain mercredi

raspbian_logoVoilà bientôt 3h que je suis en train de faire une installation de Raspbian en passant par l’installeur, en gros, comme si vous mettiez un CD dans votre ordinateur pour faire l’installation.

Les avantages : on choisit vraiment ce qu’on veut installer, et le système est moins pollué.Les inconvénients : c’est looooong.

Donc dans la journée je tacherais de vous faire un tuto clair pour installer une framboise orientée serveur.
Sur ce, moi je termine ce qui est en cours, je fait vite une sauvegarde de ma carte SD, et dodo.

Une pseudo MOTD couleur framboise

Ça vous tente un petit message comme cela lors de votre login :

motdPour cela, il faut créer/éditer le fichier .bash_profile qui est dans votre home et y coller ceci :

let upSeconds="$(/usr/bin/cut -d. -f1 /proc/uptime)"
let secs=$((${upSeconds}%60))
let mins=$((${upSeconds}/60%60))
let hours=$((${upSeconds}/3600%24))
let days=$((${upSeconds}/86400))
UPTIME=`printf "%d days, %02dh%02dm%02ds" "$days" "$hours" "$mins" "$secs"`

# get the load averages
read one five fifteen rest < /proc/loadavg

echo "$(tput setaf 2)
   .~~.   .~~.    `date +"%A, %e %B %Y, %R"`
  '.  ' ' / .'   `uname -srmo`$(tput setaf 1)
   .~ .~~~..~.    Uptime.............: ${UPTIME}
  : .~.'~'.~. :    
 ~ (   ) (   ) ~  Memory.............: $((`cat /proc/meminfo | grep MemFree | awk {'print $2'}`/1024))MB (Free) / $((`cat /proc/meminfo | grep MemTotal | awk {'print $2'}`/1024))MB (Total)
( : '~'.~.'~' : ) Load Averages......: ${one}, ${five}, ${fifteen} (1, 5, 15 min)
 ~ .~ (   ) ~. ~  Running Processes..: `ps ax | wc -l | tr -d " "`
  (  : '~' :  )   Temperature........: `vcgencmd measure_temp | sed "s/temp=//"`
   '~ .~~~. ~'    ETH0 IP Addresses..: `/sbin/ifconfig eth0| /bin/grep "Bcast:" | /usr/bin/cut -d ":" -f 2 | /usr/bin/cut -d " " -f 1`
       '~'        WLAN0 IP Addresses.: `/sbin/ifconfig wlan0| /bin/grep "Bcast:" | /usr/bin/cut -d ":" -f 2 | /usr/bin/cut -d " " -f 1`
$(tput sgr0)"

 

Ma framboise va plus vite

Bon, ok, pour le moment, nous n’avons pas configurer ni Apache, ni MySQL. Avant cela, nous allons booster un peu plus notre Raspberry.

1. Remplacer OpenSSH  par DropBear

Le simple fait de remplacer OpenSSH par DropBear nous permettra de gagner environ 10Mb de mémoire.
On installe donc le client openssh et DropBear.

root@raspi:/home/idem# apt-get install dropbear openssh-client

On configure Dropbear au travers du fichier /etc/default/dropbear :

# disabled because OpenSSH is installed
# change to NO_START=0 to enable Dropbear
NO_START=0

# the TCP port that Dropbear listens on
DROPBEAR_PORT=22

# any additional arguments for Dropbear
# Interdire els connexion root 
# et les connexion avec mot de passe
#DROPBEAR_EXTRA_ARGS="-w -s"
#
# Interdire les connexion root
DROPBEAR_EXTRA_ARGS="-w"

On peut maintenant arrêter le serveur Ssh et lancer le serveur Dropbear :
puis on arrête le service SSH.

root@raspi:/home/idem# /etc/init.d/ssh stop
root@raspi:/home/idem# /etc/init.d/dropbear start

2. Modifier le Swap
Plusieurs tests ont révélés que notre Framboise est plus performant lorsqu’elle utilise plus de 512 Mb de swap. On va lui faire plaisir et ajouter 1 Go de swap en éditant le fichier /etc/dphys-swapfile

CONF_SWAPSIZE=1024

Ensuite nous l’activons :

root@raspi:/home/idem# dphys-swapfile setup
root@raspi:/home/idem# dphys-swapfile swapon

3. Optimiser le montage de / avec le fichier /etc/fstab
Nous allons ajouter l'option nodiratime (nodiratime – Do not update directory inode access times on the filesystem. Can help performance).

/dev/mmcblk0p2  /               ext4    defaults,noatime,nodiratime     0       1

Ensuite, une dernière optimisation dans le fichier /boot/cmdline.txt où on remplacera la valeur deadline par noop :

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=noop rootwait

Ce qu’en dit la doc….

elevator=	[IOSCHED]
			Format: {"cfq" | "deadline" | "noop"}
			See Documentation/block/as-iosched.txt and
			Documentation/block/deadline-iosched.txt for details.

The deadlines means that it tries to write each block before its deadline expires, but within those deadlines, is free to re-arrange blocks as it sees fit.

Ma framboise est un serveur

On continue l’article précédent, parce que ça n’est pas tout. Bon, je l’ai deja écrit dans un billet, mais je le répète quand même avec quelques mises à jour.

1. Sécurisation SSH
On serre un peu la vis du SSH avec le fichier /etc/ssh/sshd_config. Pour cela, on va interdire l’accès au root et autoriser que les membres d’un groupe à se connecter :

...
PermitRootLogin no
AllowGroups staff
Protocol 2
...

2. Sécurisation Fail2ban
Maintenant, on installe fail2ban et créer des règles pour contrer les petits malins. Ce service va donc lire les fichiers logs, repérer les échecs d’identification et les adresses IP correspondantes, les bloquer avec une règle iptables et vous envoyer un mail pour vous avertir.

root@raspi:/home/idem# aptitude -R install fail2ban

Maintenant, on passe à la configuration. Tout d’abord le fichier /etc/fail2ban/jail.conf . Je modifie l’action par défaut :

action = %(action_mwl)s

Qui correspond à :

action_mwl = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
 %(mta)s-whois-lines[name=%(__name__)s, dest="%(destemail)s", logpath=%(logpath)s, chain="%(chain)s"]

Ensuite nous activons les régles pour les services ssh-ddos, apache, apache-noscript, et apache-overflows en positionnant la variable enable sur true :

enabled  = true

Il faut redémarrer le service pour prendre en compte ces modifications :

root@raspi:/home/idem# /etc/init.d/fail2ban restart

3. Suppression du user pi
Remplacer dans le fichier /etc/group les occurrences de pi :

:1,$s/:pi/:idem/g

Puis supprimer le compte pi :

root@raspi:/home/idem# deluser --remove-home  pi

Ma Framboise devient un serveur

Voilà, une fois mon Wifi fonctionnel, je vais pouvoir passer à la suite.

1. Faire un peu de ménage dans les packages
On peut commencer par virer tout ce qui se rapporte au serveur X, puisqu’on n’en aura pas l’utilité, et surtout par sécurité :

root@raspi:/home/pi# aptitude purge xserver-xorg xserver-xorg-core xserver-xorg-input-all 
xserver-xorg-input-evdev xserver-xorg-input-synaptics xserver-xorg-video-fbdev xserver-common 
xpdf xinit x11-common x11-utils x11-xkb-utils xarchiver screen pcmanfm penguinspuzzle lxde-common 
lxappearance lxde-icon-theme lxinput lxmenu-data lxpanel lxpolkit lxrandr lxsession lxsession-edit 
lxshortcut lxtask lxterminal leafpad dillo galculator gnome-icon-theme gnome-themes-standard 
gnome-themes-standard-data gpicview hicolor-icon-theme gvfs-common libgtk-3-0 libgtk2.0-0 
libproxy0 lightdm lightdm-gtk-greeter lxde lxde-core midori openbox squeak-vm zenity kdebase-bin 
tk8.5 xdg-utils glib-networking-common glib-networking-services gvfs-daemons libgtk-3-common 
libgtk2.0-common obconf

Un dernier coup de ménage pour purger tous les paquets dont il ne reste plus que les fichiers de configuration.
Avec aptitude c’est très simple avec la commande aptitude purge ~c (ou aptitude purge ?config-files). Par sécurité, on remplacera purge par search avant pour visualiser uniquement la liste des paquets concernés :

aptitude search ?config-files
aptitude purge ~c
apt-get autoremove

On installe ensuite localepurge pour faire de la place dans les fichier de locales. Pour info, aptitude -R install est utilisé pour installer que les paquets absolument nécessaires :

aptitude -R install localepurge && localepurge

2. Se mettre à la page

apt-get update
apt-get upgrade
apt-get dist-upgrade

Dernière étape avant de passer aux choses sérieuses, redéfinir l’espace disque de votre Framboise avec raspi-config :

rootFS

Maintenant, on fait un peu de configuration de base.

3. Modification du hostname

echo "raspi.priv8.fr" > /etc/hostname
hostname -F /etc/hostname
/etc/init.d/hostname.sh start

4. Modification du fichier /etc/hosts

127.0.0.1      localhost.localdomain    raspi.priv8.fr    localhost    raspi
::1            localhost ip6-localhost ip6-loopback
fe00::0        ip6-localnet
ff00::0        ip6-mcastprefix
ff02::1        ip6-allnodes
ff02::2        ip6-allrouters
#127.0.1.1    raspberrypi

5. Modifier les locales (peut être réaliser avec raspi-config) et tzdata

root@raspi:/home/idem# dpkg-reconfigure locales
Generating locales (this might take a while)...
fr_FR.UTF-8... done
Generation complete.

Choisir fr_FR.UTF-8
Autre méthode :

root@raspi:/home/idem# echo "fr_FR ISO-8859-1
fr_FR.UTF-8 UTF-8
fr_FR.UTF-8@euro UTF-8
en_US.UTF-8
fr_FR@euro ISO-8859-15" > /etc/locale.gen

root@raspi:/home/idem# echo "en_US.UTF-8" > /etc/default/locale

root@raspi:/home/idem# /bin/sed -i -e 's/^LANG=.*/LANG=en_US.UTF-8/' /etc/default/locale
root@raspi:/home/idem# /bin/sed -i -e 's/^LANG=.*/LANG=fr_FR/' /etc/environment
root@raspi:/home/idem# /usr/sbin/locale-gen

Ensuite, on configure le timezone :

dpkg-reconfigure tzdata

On peut aussi modifier l’éditeur par défaut :

root@raspberrypi:/home/pi# aptitude install vim vim-nox 
root@raspberrypi:/home/pi# update-alternatives --set editor /usr/bin/vim.nox

Enfin, j’utilise beaucoup vim donc j’aime bien mon petit confort. On va donc activer manuellement certaines options dans le fichier /etc/vim/vimrc. Commençons par la coloration syntaxique  en de-commentant la linge :

syntax on

Décommettez les lignes suivantes afin que vim vous repositionne à la ligne où vous étiez dans le fichier précédemment fermé :

if has("autocmd")
          au BufReadPost * if line("'"") > 1 && line("'"") < = line("$") | exe "normal! g'"" | endif
endif

Décommettez les lignes suivantes pour que la recherche et la visualisation dans le fichier soit plus aisée :

set showmatch       " Show matching brackets
set ignorecase      " Do case insensitive matching
set smartcase       " Do smart case matching
set incsearch       " Incremental search

6. Petites modifications utiles
Ajoutons donc un vrai user (idem) et affectons le au groupe staff :

root@raspi:/home/pi# cat /etc/group | grep staff 
staff:x:50: 

root@raspi:/home/pi# adduser idem -gid 50

Maintenant, ajoutons la permission à cet utilisateur  d’être root via un sudo :

root@raspi:/home/pi# visudo
# User privilege specification
root    ALL=(ALL:ALL) ALL
idem    ALL=(ALL:ALL) ALL

# Allow members of group sudo to execute any command
#%sudo  ALL=(ALL:ALL) ALL

Un petit truc pratique que j’aime beaucoup, c’est avoir un joli prompt.
Pour cela, je modifie le fichier /etc/bash.bashrc :

# set a fancy prompt (non-color, overwrite the one in /etc/profile)
#PS1='${debian_chroot:+($debian_chroot)}u@h:w$ '
PS1='${debian_chroot:+($debian_chroot)}[33[01;32m]u@h[33[00m]:[33[01;34m]w[33[00m]$ '

7. Installer les packages de base + Apache/Php/MySQL

root@raspi:/home/pi# apt-get install mc cron-apt fail2ban ntpdate bison 
flex rkhunter lzma zoo arj nomarch lzop cabextract gettext 
apt-listchanges daemon sysstat libidn11 htop iftop sendmail 
ssl-cert php5 php5-dev php5-gd php5-fpm php5-cli php5-sqlite 
php5-curl php5-common php5-cgi php5-mysql sqlite php-pear 
php-apc autoconf automake autotools-dev libapr1 libtool libcurl4-openssl-dev 
php-xml-parser mysql-client mysql-server mutt samba samba-common-bin 
apache2 php5 mysql-server libapache2-mod-php5 php5-mysql mysql-client php-pear