Catégorie : Systèmes

15 décembre 2017 /

MT sert à contrôler le lecteur de bandes magnétiques à un assez bas niveau. Cette application permet d’ajouter des tags sur la bande, éjecter la bande, rebobiner la bande et se déplacer par rapport aux tags.

Les commandes de bases

Voir les informations de la bande:

mt -f /dev/st0 status

Rembobiner la bande:

mt -f /dev/st0 rewind

Voir le contenu (compressé) de la bande:

tar -tzf /dev/st0

Si vous avez ce message d’erreur:

tar (child): /dev/st0 : read impossible: Ne peut allouer de la mémoire
tar (child): Début de la cartouche atteinte ; arrêt du programme.
tar (child): Error is not recoverable: exiting now
gzip: stdin: unexpected end of file
tar: Child returned status 2
tar: Error is not recoverable: exiting now

Cela est probablement dû à l’option -z de tar, les données sur la bande ne sont pas compressées:

Voir le contenu (non compressé) de la bande:

tar -tf /dev/st0

Si vous avez ce message:

tar: /dev/st0 : read impossible: Ne peut allouer de la mémoire
tar: Début de la cartouche atteinte ; arrêt du programme.
tar: Error is not recoverable: exiting now

Cela est probablement dû à la taille de block (512 par default) qui a été spécifie lors de la création de l’archive.
En effet, tar ne détermine pas automatiquement la taille des blocs, Il faudra donc le spécifier lors de la restauration.
Pour cela, il faut connaitre la taille de block qui a été spécifié lors de la création:

stat -f /dev/st0

Fichier : « /dev/st0 »
Identif. : 0 Longueur du nom : 255 Type : tmpfs
Taille de bloc : 4096 Taille de bloc fondamentale : 4096
Blocs : total : 2560 libre : 2560 disponible : 2560
Inœuds : total : 2042000 libre : 2041603

On peut maintenant voir le contenu de la bande dans le lecteur:

tar -b 4096 -tf /dev/st0

Si il y a beaucoup de fichiers sur la bande:

tar -b 4096 -tf /dev/st0 > liste_fichier_bande.txt

Pour éjecter la bande:

mt -f /dev/st0 eject

Rembobiner et éjecter la bande:

mt -f /dev/st0 offline

Effacer la bande:

mt -f /dev/st0 erase

Connaître sa position (block) sur la bande:

mt -f /dev/st0 tell

Se déplacer à la fin des données sur la bande :

mt -f /dev/nst0 eod

Pour se positionner devant un bloc:

mt -f /dev/nst0 seek n°_de_block

Se déplacer à l’enregistrement précédent:

mt -f /dev/nst0 bsfm 1

Se déplacer à l’enregistrement suivant:

mt -f /dev/nst0 fsf 1

Faire une sauvegarde du dossier /etc et /home avec compression:

tar -czf /dev/st0 /etc /home

Restaurer tous les fichiers de la bande vers /home:

mt -f /dev/st0 rewind
tar -xzf /dev/st0 /home

Sauvegarder sur plusieurs bandes le dossier /home:

tar -clpMzvf /dev/st0 /home

Restaurer à partir de plusieurs bande le dossier /home:

tar -xlpMzvf /dev/st0 /home

Comparer la sauvegarde sur bande au dossier /home:

tar -dlpMzvf /dev/st0 /home

Remarque:

-d : trouve les différences entre l'archive et le repertoire
-x : extraire des fichiers d'une archive
-l : lister le contenu d'une archive
-p : ignore le umask lors de l'extraction
-M : créer / lister / extraire des archives multi-volumes (plusieurs bandes)
-z : compression avec Gzip
-v : mode verbial

Aller plus loin:

Voici un petit script qui affiche la liste des fichiers sauvegardés (avec tar) sur une bande avec en préambule de chaque sauvegarde le numéro du bloc à partir duquel démarre la sauvegarde:

#!/bin/sh
# Script affichant le contenu d'une bande en spécifiant le numero de block
#
#
BANDE=/dev/st0
COMPRESS=Y
#
# On rembobine
echo "Lecteur $BANDE - Compression $COMPRESS"
echo -n "Rembobinage "
MSG=$(mt -f $BANDE rewind 2>&1)
if [ $? -ne 0 ] ; then
echo "Erreur : " $MSG
exit 1;
fi
echo ": OK"
echo "Liste des fichiers"
mt -f $BANDE tell
if [ "$COMPRESS" == "Y" ] ; then
CMD=tzvf
else
CMD=tvf
fi
LOOP=0
while [ $LOOP -eq 0 ] ; do
tar -$CMD $BANDE 2> /dev/null
LOOP=$?
if [ $LOOP -eq 0 ] ; then mt -f $BANDE tell
fi
done
echo "Pour se positionner devant un bloc, avant restauration, faire mt -f $BANDE seek n"
mt -f $BANDE rewind

Exemple d’utilisation :

./liste_bande.sh

Lecteur /dev/st0 - Compression Y
Rembobinage : OK
Liste des fichiers
At block 0.
-rw------- 1 romain romain 23415 déc. 15 09:07 .bash_history
-rw-r--r-- 1 romain romain 220 nov. 2 14:53 .bash_logout
-rw-r--r-- 1 romain romain 3526 nov. 2 14:53 .bashrc
At block 2.
-rw------- 1 romain romain 10549 déc. 5 11:14 .viminfo
-rw------- 1 romain romain 51 déc. 7 19:35 .Xauthority
-rw------- 1 romain romain 358 déc. 15 09:03 .xsession-errors
At block 4.

Pour se positionner devant un bloc, avant restauration:

mt -f /dev/nst0 seek n°_de_block

Par exemple, pour restaurer le fichier « .bashrc » situé au block 4 :

mt -f /dev/st0 rewind
mt -f /dev/st0 seek 2
tar -xzvf /dev/st0 .bashrc

Remarque :
Si un utilisateur autre que root doit accéder au lecteur de bande, il faudra l’ajouter dans le groupe tape pour qu’il ait les droits d’accès aux périphérique /dev/nst0 et /dev/st0

 

15 décembre 2017 /

Pour cela, il faut éditer son .bashrc:

vi ~/.bashrc

Et y ajouter cela:

export LESS_TERMCAP_mb=$'\e[1;32m'
export LESS_TERMCAP_md=$'\e[1;32m'
export LESS_TERMCAP_me=$'\e[0m'
export LESS_TERMCAP_se=$'\e[0m'
export LESS_TERMCAP_so=$'\e[01;33m'
export LESS_TERMCAP_ue=$'\e[0m'
export LESS_TERMCAP_us=$'\e[1;4;31m'

Il ne nous reste plus qu’a sourcer notre .bashrc:

reset

ou

source ~/.bashrc

2 décembre 2017 /

Sauvegarde sur un serveur FTP

On se met en mode administrateur:

enable

On passe en mode configuration:

conf t

On renseigne les informations de connexion au serveur FTP:

ip ftp username login_utilisateur
ip ftp password mot_de_passe

On sort du mode configuration:

end

Puis on lance la sauvegarde:

copy running-config ftp:

Il nous demandera alors l’adresse ip du serveur FTP, et le nom que l’on souhaite donner au fichier contenant la configuration.

Dans le fichier récupérer il faudra supprimez toute ligne débutant par « AAA » car cela peut bloquer sa restauration.

Pour restaurer depuis un serveur FTP

On passe en mode configuration sur le nouveau Cisco:

conf t

On renseigne les informations de connexion au serveur FTP:

ip ftp username login_utilisateur
ip ftp password mot_de_passe

On sort du mode configuration:

end

Puis on lance la sauvegarde:

copy ftp: running-config

Il nous demandera alors l’adresse ip du serveur FTP puis une fois connecté, le fichier qui contient la configuration à restaurer.

Sauvegarde en local via Minicom

On passe en mode administrateur sur le Cisco:

enable

On désactive le « –more– » pour afficher d’un coup la configuration:

terminal length 0

On accède au menu de Minicom pour lancer la capture de la sortie standard dans un fichier texte:

Ctrl+A puis Z puis L

On affiche la configuration actuelle pour la capturer dans notre fichier:

show running-config

Une fois la configuration affichée, on arrête la capture de log:

Ctrl+A puis Z puis L

On va maintenant sauvegarder la configuration de démarrage:

Ctrl+A puis Z puis L

On affiche la configuration de démarrage pour qu’elle soit capturée:

show startup-config

Une fois la configuration affichée, on arrête la capture de log

Ctrl+A puis Z puis L

Restauration en local via minicom

On lance Minicom et on se met en mode administrateur sur le Cisco:

enable

On passe en mode configuration:

conf t

Puis on affiche les options de minicom:
Ctrl+A puis Z puis Y

On sélectionne le fichier de configuration que l’on a en local pour que Minicom colle le contenu du fichier dans l’entrée standard.

On peut vérifier que la configuration s’est bien reportée:

show running-config

On oublie pas de sauvegarder la configuration une fois restaurer:

copy running-config startup-config
wr

11 novembre 2017 /

Nous pouvons consulter le niveau d’entropie disponible dans le fichier suivant:

/proc/sys/kernel/random/entropy_avail

Si le niveau d’entropie disponible est inférieur à 1000, le noyau va avoir des difficultés à générer des nombres aléatoires lorsque cela lui sera demandé. Le noyau va donc attendre tranquillou jusqu’à ce qu’il collecte suffisamment d’entropie. Idéalement, on aura une valeur avoisinant les 2000.

Le serveur SSH par exemple, qui utilise de l’entropie, peut souffrir de lenteurs lors de l’établissement de connexions si celle-ci vient à manquer. Cela affecte particulièrement les machines virtuelles.

Pour palier ce problème, le paquet haveged permet d’alimenter le noyau en entropie.

apt-get install -y haveged

ou

yum install -y haveged

On active le service

systemctl enable haveged

On va augmenter le niveau d’entropie à 2048 bits en éditant le fichier suivant:

vi /etc/default/haveged

Puis on modifie ce paramètre:

DAEMON_ARGS="-w 2048"

On redémarre le service:

systemctl stop haveged
systemctl start haveged

Pour voir le niveau d’entropie maintenant optimisé:

watch -n 0,1 cat /proc/sys/kernel/random/entropy_avail

18 août 2017 /

Installation

Installation de Docker via Aptitude:

sudo apt-get update
sudo apt-get install lxc-docker​

Installation de Docker via le script d’installation officiel:

wget -O dockerinstall.sh https://get.docker.com
sh ./dockerinstall.sh

Information

Afficher les informations sur la version de Docker installée​:

docker version

Obtenir la liste des commandes du client Docker:

docker help

Obtenir de l’aide sur les options d’une commande:

docker help nom_de_la_commande

Docker Hub

​Connexion à un compte Docker Hub:

docker login

Déconnexion du compte Docker Hub:

docker logout

Récupérer une image

Récupérer une image sans la lancer:

docker pull nom_de_l_image

Récupération d’une image Ubuntu dans sa dernière version:

docker pull ubuntu:latest

​Rechercher une image Nginx avec au moins 5 étoiles:

docker search --stars=5 nginx

Envoyer d’une image

Envoyer une image locale sur le registre Docker Hub:

docker push nom_image

Envoyer une image sur un registre privé:

docker push localhost:88/ubuntu

Dépôt de l’image depuis une autre machine (host=starmate):

docker push starmate:5000/ubuntu

Sauvegarde et restauration

Export d’une image sous forme d’archive:

docker save -o fichier.tar nom_image

Import d’une archive d’image:

docker load -i fichier.tar

Lancement de conteneur

Démarrer un conteneur arrêté:

docker start nom_image

Redémarrer un conteneur en cours:

docker restart nom_image

Redémarrer un conteneur en spécifiant la période de grâce:

docker restart -t 20 nom_image

Démarrer le conteneur de test Hello World:

docker run hello-world​

Démarrer un conteneur en mode interactif:

docker run -i -t ubuntu

Démarrer sans option d’un conteneur:

docker run ubuntu

Démarrer un conteneur avec un nom donné:

docker run --name=nom_donné nom_image

Démarrer un conteneur avec une commande donnée:

docker run nom_de_l_image commande_à_exécuter

Démarrer un conteneur en ajoutant une variable d’environnement:

docker run -e=nom_variable=valeur nom_image

ou

docker run -e nom_variable=valeur nom_image

Démarrer un conteneur en injectant une des variables d’environnement de la machine hôte:

docker run -e=nom_variable image_à_instancier

Démarrer un conteneur en injectant des variables d’environnement stockées dans un fichier:

docker run --env-file=nom_fichier nom_image

Démarrer un conteneur en modifiant son hostname:

docker run -h hostname_voulu

Démarrer un conteneur en montant un dossier dans le conteneur depuis la machine hôte en RO (read only):

docker run -v dossier_sur_hote:dossier_sur_l_image:ro nom_image

Démarrer un conteneur en mode détaché:

docker run -d nom_image

Démarrer un conteneur d’un registre privé en localhost (port 5000 vers 88):

docker run -d --name starmate -p 88:5000 starmate:2.0

Démarrer un conteneur d’un registre privé sur le réseau local (IPhost=starmate dans tous les fichiers hosts):

docker run -d --name starmate -p 5000:5000 starmate:2.0

Démarrer un conteneur du registre privé en réseau local (IPhost= starmate dans tous les fichiers hosts) en montant un dossier local de la machine host:

docker run -d --name starmate -p 5000:5000 -v /dossier_machine_host:/dossier_image_starmate starmate:2.0

Démarrer et supprimer un conteneur dès la sortie du processus:

docker run --rm hello-world

Connexion à un conteneur

Connexion à un conteneur en tant que root avec bash:

docker exec -u root -it ID_conteneur bash

Suppression de conteneur

Supprimer un conteneur arrêté:

docker rm loving_lovelace

Supprimer un conteneur de manière forcée:

docker rm -f nom_conteneur

Supprimer tous les conteneurs:

docker rm `docker ps -a -q`

Suppression d’une image

Supprimer une image:

docker rmi nom_de_l_image

Supprimer plusieurs images:

docker rmi image1 image2 imageN

Arrêt d’un conteneur

Arrêter un conteneur:

docker stop nom_image

Envoyer un signal à un conteneur:

docker kill -s code_du_signal nom_image

Monitoring

​Lister les conteneurs en cours de fonctionnement:

docker ps

​Lister tous les conteneurs:

docker ps -a

Lister les images Docker présentes sur la machine locale:

docker images

Lister les modifications d’un conteneur par rapport à son image de lancement:

docker diff identifiant_du_conteneur

Visualiser les logs d’un conteneur:

docker logs nom_image

Explorer les processus d’un conteneur:

docker top nom_image

Construction d’un conteneur

Persister l’état d’un conteneur en une nouvelle image:

docker commit identifiant_du_conteneur  nom_de_l_image

Tag

Tag d’un conteneur:

docker build -t identifiant_du_conteneur starmate:1.0

Modifier le tag d’un conteneur:

docker tag starmate:1.0 starmate:latest

Forcer le tag d’un conteneur (si tag déjà existant):

docker tag -f starmate:1.0 starmate:latest