kevingrondin / Raspberry_Pi

Configurer un Raspberry

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Linux

Structure de dossier

Dossier Description
/boot Contient le fichier qui est utilisé par le boot loader (grub.cfg)
/root Le repertoire de l'utilisateur root différent de /
/dev les périphériques
/etc configuration
/bin -> /usr/bin Les commandes quotidienne de l'utilisateur
/sbin -> /usr/sbin commandes système/sytèle de fichier
/opt application complémentaire optionnelle ( pas partie de l'OS )
/proc processus en cour ( n'existe qu'en mémoire )
/lib -> /usr/lib Fichiers de librairie du langage C dont ont besoin les commandes et les applications strace -e open pwd
/tmp repertoire temporaires
/home repertoire utilisateur
/var log system
/run Démons système qui démarrent très tôt (systemd, udev ) pour stocker les fichiers d'exécution temporaires comme les fichiers PID
/mnt pour monter un système de fichiers externe
/media CDROM

Installation (Raspberry)

Télécharger l'image ici la version light est suffisante

Formatter la SD

Formater depuis un windows avec l'invite de commande

diskpart
list disk
select disk
clean
create partition primary
active
format fs=exfat quick
assign
exit
exit

Preparer la SD

Avec rufus ou etcher

Configurer le wifi et ssh en avance

créer un fichier à la racine ssh et en même temps wpa_supplicant.conf avec ces infos

country=fr
update_config=1
ctrl_interface=/var/run/wpa_supplicant

network={
 scan_ssid=1
 ssid="nameofnetworknotnetwork5GHZ"
 psk="motdepasse"
}

Ecrire ces informations en EOL Unix avec Notepad++ dans le menu Edit/EOL Conversion, les réseau 5GHZ ne fonctionneras pas. Aprés chaque redemarrage la configuration seras supprimé

Fixer une adresse IP

sudo nano /etc/dhcpcd.conf
interface wlan0
static ip_address=192.168.1.2/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1

Mettre le clavier en français

sudo raspi-config

changer les options de locatisations (FR UTF8)

Mettre à jour le système

sudo su
apt update -y && apt upgrade -y && sudo apt full-upgrade -y 
apt install ntpdate
apt install ntp
apt-get install bash-completion

Changer le mot de passe

passwd

Mettre a jour le Noyau

yum update kernel -y

Activier l'auto-complétion

nano /etc/bash.bashrc

Decommentez les lignes comme ci-dessous

# enable bash completion in interactive shells
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

Changer le hostname

cat /etc/hostname
hostnamectl set-hostname <newname>

Connexion avec clée SSH

Creer votre clée public, et votre clée privée, laissez les double côte

# Version secure
ssh-keygen -t rsa -b 4096 -C "email_address"

# Version basic
ssh-keygen -t rsa -C "email_address"

Pour tester votre clée avec github, une fois votre clée publique sur github

ssh -T git@github.com

Sous windows

type C:\Users\name\.ssh\id_rsa.pub

Mettre les bon droits au fichier générés

sudo chmod 600 ~/.ssh/id_rsa
sudo chmod 600 ~/.ssh/id_rsa.pub

Envoyé la clée OPENSSH au rasp

cat ~/.ssh/id_rsa.pub | ssh <USERNAME>@<IP-ADDRESS> 'mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys'

Autoriser les authorized_keys dans sshd_config

nano /etc/ssh/sshd_config

et decommentez

AuthorizedKeysFile   /.ssh/authorized_keys

et recharger la config ssh

/etc/init.d/ssh force-reload

vous pouvez vous connectez avec cette ligne de commande

ssh -i /root/.ssh/<KEY> <USERNAME>@<IP_ADRESSE>

Marche aussi avec Rsync

rsync -e « ssh -i /root/.ssh/<KEY> » -av <USERNAME>@<IP_ADRESSE>:/source/destination/

Si vous êtes sur windows vous pouvez utiliser Pageant et wsl-ssh-pageant-amd64-gui pour ne plus à avoir entrer les clée privé à chaque fois

Dans votre dossier .ssh creer un fichier config sans extension, vous pouvez créer des alias pour vous connectez plus rapidement

Host *
   ForwardAgent yes
        
Host <ALIAS>
   HostName <SERVEUR>
   Port     <PORT>
   User     <USER>
   # Tunnel SSH
   # ProxyCommand     ssh <USER>@<SERVEUR> -W %h:%p

Sur unix dans votre dossier home

nano ~/.ssh/config
chmod 600 ~/.ssh/config
chown $USER ~/.ssh/config

dans ~/.ssh creer un fichier config de la même façon que pour windows pour les racourcis

VSCODE server (ne fonctionne pas sur des architectures arm)

sudo apt-get install libx11-dev libxkbfile-dev libsecret-1-dev fakeroot rpm

code-server

docker run -it -p 127.0.0.1:8080:8080 -v "${HOME}/.local/share/code-server:/home/coder/.local/share/code-server" -v "$PWD:/home/coder/project" codercom/code-server:v2

npm rebuild dans vscode pour recompiler si des problèmes persistes

Acces à distance

Bureau à distance

sudo apt install -y xrdp

acces depuis windows et mac (rajouter .local pour mac) avec mstsc

Serveur de fichier Simple

sudo apt install -y samba

configurer samba

mkdir /home/pi/shares
chmod 777 /home/shares/public

sudo rm /etc/samba/smb.conf
sudo nano /etc/samba/smb.conf
[global]
        netbios name = server
        server string = server
        workgroup = WORKGROUP
        security = user

[server]
        comment = server
        path = "/home/pi/shares"
        public = yes
        guest ok = yes
        read only = no
sudo pdbedit -a -u pi
sudo service smbd restart

Serveur de fichier Avancé

Installation de samba

sudo apt install -y samba

On créer un groupe

groupadd <group>

On créer un dans le groupe

useradd -g <group> <user>

On lui donne un mot de passe pour samba

smbpasswd -a <user>

On créer un dossier partagé avec les droit adéquat

mkdir -p /<partage>/<groupe>
chown -R root:<groupe> /<partage>/<groupe>/
chmod -R 770 /<partage>/<groupe>/

On historise la configuration par defaut de samba

mv /etc/samba/smb.conf /etc/samba/smb.conf.bak
vi /etc/samba/smb.conf
 
# Ajouter la configuration ci-dessous
 
#======================= Global Settings =======================
 
[global]
workgroup = WORKGROUP
server string = %h
public = yes
security = user
encrypt passwords = true

#======================= Share Definitions =======================

[<group>]
comment = répertoire du <groupe>
  path = <partage>/<groupe>
  valid users = @<groupe>
  writable = yes
  directory mask = 0770
  create mask = 0770
  force create mode = 0770

dans valid users on écri @groupe1, @groupe2 et user1, user2

On test si tout es bon

testparm smb.conf

On redemarre si tout est bon

/etc/init.d/samba restar

Installer nodejs

Façon Node

curl -sL https://deb.nodesource.com/setup_13.x | sudo -E bash -
sudo apt-get install -y nodejs
sudo npm install -g npm

Façon linux

//verfier si arm7 ou plus
cat /proc/cpuinfo

// aller sur navigateur web chercher la bonne installation
wget https://nodejs.org/dist/...
// decompresser et supprimer le fichier compresser aussi
tar xf node-v...

// renomer en node
mv node-v... node

// creer les lien 
ln -s /var/www/node/bin/node /usr/sbin
ln -s /var/www/node/bin/npm /usr/sbin

Desactiver apache, ainsi qu'au demarrage

sudo /etc/init.d/apache2 stop
sudo systemctl disable apache2

Désinstaller LibreOffice

sudo apt-get remove --purge libreoffice*

Installer Docker

curl -sSL get.docker.com | sh

Web

Monitoring

PM2

npm install pm2 -g

demander a pm2 de ce lancer au demarrage du raspberry

pm2 startup

monitorer le serveur complet

pm2 install pm2-server-monit

Netdata

Supervision en temp réel

bash <(curl -Ss https://my-netdata.io/kickstart.sh)

ncdu

Installer ncdu avec apt pour visualiser les fichiers trop volumineux

ce placer à la racine

ncdu -x

tmpreaper

Installer tmpreaper avec apt

lors de l'installation avec apt, il faut commenter la ligne showing dans le fichier etc/tmpreaper

lnav

Analyser les log avec lnav installation simple avec apt

lnav /var/log/messages*

journalctl | lnav

journalctl -f | lnav

journalctl -o short-iso | lnav

journalctl -o json | lnav

journalctl -a -o json | lnav

journalctl -o json --output-fields=MESSAGE,PRIORITY,_PID,SYSLOG_IDENTIFIER,_SYSTEMD_UNIT | lnav

Si on utilise pas journalctl, mais les log normale

logrotate est déja présent sur les distribution linux, il permet d'effecctuer des actions de rotations et de compression sur les logs

Assurons-nous que cette ligne n'est pas commentez

cat /etc/logrotate.conf | grep "include"

Voici un exemple

/var/log/mylogs/auth.log {
     su <user> <group>
     monthly
     rotate 3
     compress
     missingok
     create 644 <user> <group>
}
 
/var/log/mylogs/errors.log {
     su <user> <group>
     monthly
     rotate 3
     compress
     missingok
     create 644 <user> <group>
}
  1. monthly : la rotation se fait mensuellement
  2. rotate 3 : le nombre de fichiers qu’on souhaite conserver
  3. compress : les anciens fichiers sont compressés
  4. missingok : ne considère pas l’absence du fichier comme une erreur
  5. create 644 root root : créer le fichier de log immédiatement après la rotation avec les droits adéquats

Petite verification

logrotate --force /etc/logrotate.d/mylogs

ecouter le traffic

iftop
nethogs
iptraf-ng
apt install sysstat

# Regarder la crontab
cat /etc/cron.d/sysstat

# les fichiers générés
ls /var/log/sa

# CPU
sar -u

# Memoire
sar -r

# Swap
sar -W

# Etat des IO disque
sar -b

# Entree sortie 
sar -d

# Une période 
sadf -s 05:00:01 -e 06:00:01 -dT /var/log/sa/sa15 -- -A

Installer Pyhton pour du machine learning

curl -LO "https://repo.anaconda.com/miniconda/Miniconda2-4.7.12.1-Linux-x86_64.sh"

path correspond à notre repertoire de travail exemple : /maboite/miniconda3

sh Miniconda2-4.7.12.1-Linux-x86_64.sh -b -p <path>
conda install -y "jupyter" "numpy" "pandas"

Intimité sous BATCH

history

supprimer une ligne génante

history -d numeroligne

Tout nettoyer

history -c

Si je veux l'historique sans les ligne de commande ls -l

export HISTIGNORE='ls -l:pwd:history'

tout l'historique sont sauvegardé ici

/home/yourname/.bash_history

ctrl+r permet de faire une recherche dans les lignes de commande tapé

System Monitoring

df -h
top
dmesg
iostat 1
free
cat /proc/cpuinfo
cat /proc/meminfo

Installer ncdu avec apt pour visualiser les fichiers trop volumineux

ce placer à la racine

ncdu -x

Installer tmpreaper avec apt

lors de l'installation avec apt, il faut commenter la ligne showing dans le fichier etc/tmpreaper

Analyser les log avec lnav installation simple avec apt

lnav /var/log/messages*

journalctl | lnav

journalctl -f | lnav

journalctl -o short-iso | lnav

journalctl -o json | lnav

journalctl -a -o json | lnav

journalctl -o json --output-fields=MESSAGE,PRIORITY,_PID,SYSLOG_IDENTIFIER,_SYSTEMD_UNIT | lnav

Suppression

Il peux arriver qu'un dossier comporte tellement de fichier que vider le dossier deviens impossible meme avec un rm

find . -name "*.toto" -exec rm {} \;

Rechercher

Rechercher une chaine de caractère dans tout les fichiers du repertoire courant

grep -rnw './' -e 'machainearechercher'

Wildcard

Cette ligne de commande creer 9 fichiers

touch abcd{1..9}-wyz

Afficher un message à chaque connexion

Pour afficher un message il faudra l'écrire la dedans

/etc/motd

Process and Jobs

systemctl ps -aux top crontab -e pour creer un crontab crontab -l pour lister les crontab

on peux definir plus facilement les cron dans /etc/

ls -l | grep cron

Process Management

Crtl-z, jobs, bg, fg, nohup &, ps, pkill, nice

Bloquer les connexions utiliateurs

Pour afficher un message il faudra ce deplacer ici

/etc/nologin

cat nologin

Ecrire votre message

Changer mot de passe

passwd

Commande sed

Remplacer tout les mots ancien par les mots nouveau du fichier MonFichier

sed 's/ancien/nouveau/g' MonFichier

Rajouter l'argument -i pour que cela soit actif

sed -i 's/ancien/nouveau/g' MonFichier

Supprimer toutes les lignes dans le fichier contenant le mot ancien dans MonFichier

sed '/ancien/d' MonFichier

Supprimer toutes les lignes vide dans MonFichier

sed -i '/^$/d' MonFichier

Tester le chiffrement TLS/SSL ou service en ligne (STARTTLS)

git clone –depth 1 https://github.com/drwetter/testssl.sh.git
cd testssl.sh
./testssl.sh https://qwant.com

Tableau bord serveur

Surveillez son linux en temp réel sur l'adresse htt://127.0.0.1:19999

bash <(curl -Ss https://my-netdata.io/kickstart.sh)

Detecter le traffic malicieux

https://github.com/stamparm/maltrail

Mise à jour

Mise a jour

apt-get update
apt-get upgrade

Voir les paquets installé

dpkg -l | grep paquet_recherché

Savoir si un repertoire est vide ou non

$ if ./empty-dir /home/sk/ostechnix; then echo "It is empty" ; fi
It is empty

Génère un mot de passe avec 15 charactère

./randpass -n 15

Voir les dernière modif d'un fichier

./since /var/log/apt/history.log

Exécuter une commande sur une période

Exécuter un htop pendant 10h10m10s

$ ./timeout -t 10:10:10 htop

Système log monitor

Voir les log

cd var/log

ls -ltr
ll | more

Voir les log de demarrage toujours dans var/log

more boot.log

voir quand est-ce que boot.log a été modifié

ls -l boot.log

voir les log du matériel

dmesg

Utilisateur

Creer l'utilisateur toto et l'ajouter au group sudo

useradd toto
usermod -aG sudo toto

Supprimer un utilisateur

userdel -r toto

Chercher toto dans /etc/group

grep toto /etc/group

Creer un groupe TEST

groupadd TEST

Voir la liste de tout les groupes

cat /etc/group/

rsync

Synchroniser deux repertoire sur un serveur local

rsync -zvr /var/opt/installation/inventory /root/temp

Partage de fichier Windows

Creer un groupe sharing

addgroup --system sharing

Creer un groupe utilisateur sharing appartenant au groupe sharing

adduser --system sharing --ingroup sharing

Mot de passe

passwd sharing

Creer un repertoire partagé

mkdir /home/sharing/public
chmod 777 /home/sharing/public

Installer Samba

apt update && apt install samba -y

sudo rm /etc/samba/smb.conf
sudo nano /etc/samba/smb.conf

Copier dans le fichier

[global]
        netbios name = server
        server string = server
        workgroup = WORKGROUP
        security = user

[server]
        comment = server
        path = "/home/sharing/public"
        public = yes
        guest ok = yes
        read only = no
sudo pdbedit -a -u guest
sudo service smbd restart

Exécuter une ligne de commande sur une liste de serveur

On recupére l'espace disque sur tout les serveurs

sudo apt-get install python-pip
sudo pip install pssh

pssh -h pssh-hosts -l root -A -i "df -hT"

Recupération de disque dur

Recupérer dd_rescue

Décompressez, puis make pour créer le binaire

Si le disque enfommagé est /dev/sdb1 Si le disque libre est /dev/sdc1

Information du disque

fdisk -l

Se placer dans le repertoire dd_rescue

dd_rescue -l transfert_errors.log /dev/sdb1 /dev/sdc1

Le fichier log va être créé et qui va lister les blocs qu'il n'a pas plus traiter

Choisisser un des lignes de commande ci-dessous selon votre système de fichiers

fsck.ext2
fsck.ext3
fsck.ext4
fsck.vfat

WSL 2

Windows

PowerShell en admin

Enable-WindowsOptionalFeature -Online -NoRestart -FeatureName VirtualMachinePlatform
Enable-WindowsOptionalFeature -Online -NoRestart -FeatureName Microsoft-Windows-Subsystem-Linux
Restart-Computer

wsl --list 
wsl --set-version Ubuntu 2
wsl ~ -d Ubuntu

Installer VcXsrv choisir One Large Windows

Choisir une distribution

  • Ubuntu 16.04 LTS
  • Ubuntu 18.04 LTS
  • OpenSUSE Leap 15
  • OpenSUSE Leap 42
  • SUSE Linux Enterprise Server 12
  • SUSE Linux Enterprise Server 15
  • Kali Linux
  • Debian GNU/Linux
  • Fedora Remix pour WSL
  • Pengwin
  • Pengwin Enterprise
  • Alpine WSL

WSL

sudo apt-get install xfce4

Lancer

xfce4-session --display=:0.0

Ouvrir l'explorateur windows

explorer.exe .

CRON

chronic execute une commande en silence sauf en cas d'échec, Il est utile pour les travaux de cron. Au lieu d'essayer de garder la commande silencieuse, et d'avoir à traiter des mails contenant des sorties accidentelles quand elle réussit, et pas assez verbeux quand elle échoue, vous pouvez simplement l'exécuter toujours verbalement, et utiliser Chronic pour cacher la sortie réussie.

Exemple :

Lors de la création d'un nouveau cron job, au lieu d'utiliser la ligne suivante ;

#0 1 * * * backup >/dev/null 2>&1
0 1 * * * chronic backup

DEV

Services

Si on est amenée à faire du developpement en python ou avec node l'instance s'éteindra dès lors que vouq quitterez votre session SSH, puisque la tâche ( npm run start ou node server.js ) tourne en foreground.

Pour parrer à ça vous avez :

  1. screen
  2. tmux
  3. systemd
  4. pm2

Nous allons ici réaliser un service, il faut créer un fichier sur notre instance à l'emplacement /etc/system/system/.service, avec la syntaxe suivante:

# Configuration principale de notre service
[Service]
# Variables d'environnements à utiliser dans le service
# Ici, spécifiez les variables d'environnement demandées plus haut comme
Environment="NOM_DE_MA_VARIABLE=valeur"
Environment="DB_HOST=127.0.0.1"
Environment="DB_USER=infrauser"
# ...

# Suites de commande à exécuter pour chacun des états du service:
# Ici, cette commande sera exécutée lorsqu'on appellera systemctl start mon-service
ExecStart=cd <dossier-contenant-le-code-serveur> && npm run start

L'otion Restart=on-failure peut redemarrer si notre service rencontre une erreur journalctl -t dans le ExecStart serrais une bonne idée aussi pour avoir des log sur un canal en particuler

# Notifie systemd que la configuration a été modifiée, et qu'il faut donc la prendre en compte
sudo systemctl daemon-reload
# Démarrer le nouveau service que vous venez de créer
sudo systemctl start backend
# Vérifier l'état du service
sudo systemctl status backend

About

Configurer un Raspberry