blog.roxing.net

weblog roxing.net - astuces spip, php, bash, linux & more

Il y a 7 articles sur 33
  • Connexion en carton mousse

    Envoyer des fichier volumineux au travers d’une petite connexion internet peu s’avérer compliqué. Cet article liste les quelques outils nécessaires et les commandes utiles à l’accomplissement de cette tâche.

    Xz - Compresser un fichier

    Xz est un outil de compression très performant. Pour compresser un gros fichier avec le taux de compression maximal on utilise simplement :

    xz -9 gros_fichier

    Le fichier de sortie sera nommé gros_fichier.xz

    Split - Découper un fichier en plusieurs fichiers de taille définie

    Découper le fichier en plusieurs fragments de 1GB (-b bytes) et ajouter un suffixe numérique aux fichiers de sortie (-d )

    split -b 1024M  -d gros_fichier.xz  gros_fichier.xz_part
    donnera :

    gros_fichier.xz_part01
    gros_fichier.xz_part02
    gros_fichier.xz_part03
    ...

    Combiner tar + xz-utils + split

    A titre d’exemple, le même résultat que précédement, en utilisant conjointement tar et split :

    tar -Jcvf - un_repertoire_ou_fichier | split -d -b 1024MB - gros_fichier.tar.xz.

    Tmux - Envoyer les fichiers en tâche de fond

    Pour envoyer les fichiers vers un serveur, j’utilise scp avec une clef ssh et comme je ne veux pas saturer la connexion j’utilise l’option -l (limit). Dans l’exemple ci-dessous, -l 512 correspond à environ 50ko/s.

    scp -i ~/.ssh/ma_clef  -l 512 gros_fichier.xz_part* user@host:/home/bob/incoming

    C’est bien joli, mais si je fais des transferts à distance, j’aimerais bien lancer la commande en tâche de fond, surtout si l’upload est très long.
    Pour ce faire, j’utilise tmux qui permet d’utiliser plusieurs terminaux virtuel que l’on peu détacher ou rattacher au terminal facilement.

    tmux new-session -d -s upload  'scp -i ~/.ssh/ma_clef  -l 512 gros_fichier.xz_part* user@host:/home/bob/incoming 2> errors.log'

    Rattacher le terminal pour voir l’upload en cours : tmux attach
    Détacher le terminal avec la combinaison de touches ctrl + b puis d
    Grâce à tmux, je peux me déconnecter du shell distant et revenir plus tard...
    Un simple tmux a me permettra de consulter l’état d’avancement de l’upload.

    Cat - Réassembler les fichiers découpés

    Une fois les fichiers transférés, je les réassemble avec un simple cat

    cat gros_fichier.xz_part*   >  gros_fichier.xz

    Décompression d’un xz ou d’un tar.xz

    Avec tar (-x xtract) :
    tar -Jxvf gros_fichier.tar.xz

    Avec xz-utils (-d)
    xz -d gros_fichier.xz

    Voilà.


  • générer et mettre à jour une police d’icônes webfont en quelques secondes

    Fontello propose de composer une webfont d’icônes sur mesure en piochant parmi plusieurs collections (Font Awesome, Web Symbols, ...) Le service est très bien fait, rapide et simple d’utilisation. Mais vous pouvez gagner encore plus de temps lors de l’ajout d’icônes supplémentaires an passant directement via l’API.

    Allons directement dans le vif du sujet en créant un fichier

    Makefile
    chmod +x Makefile pour le rendre exécutable quelque part en amont de votre projet :

    # Makefile
    
    FONT_DIR      ?= ./css/icons
    PROJECT_NAME  ?= projet_foo
    FONTELLO_HOST ?= http://fontello.com
    
    fontopen:
    	@if test ! `which curl` ; then \
    		echo 'Install curl first.' >&2 ; \
    		exit 128 ; \
    		fi
    	curl --silent --show-error --fail --output .fontello \
    		--form "config=@${FONT_DIR}/config.json" \
    		${FONTELLO_HOST}
    	x-www-browser ${FONTELLO_HOST}/`cat .fontello`
    
    
    fontsave:
    	@if test ! `which unzip` ; then \
    		echo 'Install unzip first.' >&2 ; \
    		exit 128 ; \
    		fi
    	@if test ! -e .fontello ; then \
    		echo 'Run `make fontopen` first.' >&2 ; \
    		exit 128 ; \
    		fi
    	rm -rf .fontello.src .fontello.zip
    	curl --silent --show-error --fail --output .fontello.zip \
    		${FONTELLO_HOST}/`cat .fontello`/get
    	unzip .fontello.zip -d .fontello.src
    	rm -rf ${FONT_DIR}/*
    	mv `find ./.fontello.src -maxdepth 3 	\( -name "config.json" -o -name "*.woff" -o -name "*.ttf" -o -name "*.svg" -o -name "*.eot" \) ` ${FONT_DIR}
    	mv `find ./.fontello.src -maxdepth 3  -name "${PROJECT_NAME}-codes.css"` ${FONT_DIR}/codes.scss
    	rm -rf .fontello.src .fontello.zip
    

    Passons rapidement le script en revue

    Tout d’abord, on doit éditer le script pour renseigner 2 informations :

    • FONT_DIR, qui est l’emplacement du dossier qui va recevoir les éléments issus de fontetto (.ttf, .woff. css, .css, ...), relativement au fichier Makefile. Personnellement j’ai choisi un dossier "icons" dédié à cela, et distinct des polices (webfonts) complètes qui elles sont dans un autre dossier "fonts".
    • PROJECT_NAME qui désigne le nom du projet.

    A présent, direction fontello.com où vous pouvez commencer à composer votre webfont personnalisée projet_foo. Enregistrez (bouton en haut à droite), téléchargez le .zip et récupérez le fichier config.json (qui est le seul qui nous intéresse) et copiez le dans le dossier FONT_DIR.

    À l’usage

    À partir de maintenant, l’ajout ou modification d’icônes va se faire en un clin d’oeil via 2 commandes successives, issues du fichier Makefile :

    make fontopen

    inspecte le fichier config.json et ouvre le navigateur avec les paramètres d’édition sauvegardés.

    make fontsave

    récupère la version mise à jour du projet_foo en écrasant les anciens fichiers.

    Pour ma part, c’est surtout le fichier projet_foo-codes.css avec les codes qui m’importe (voir et modifier au besoin la ligne 32) ; c’est pourquoi je renomme en codes.scss pour l’appeler ultérieurement dans la compilation SASS.


    placido

    P.-S.

    Ultime remarque, si vous constatez un problème d’affichage des icônes après une mise à jour, essayer de changer le paramètre en fin d’url dans la déclaration css font-face.

    devenant par exemple :

    C’est un désagrément dû aux navigateurs, qui allouent un cache spécifique pour les webfonts.

  • Virtualisation facile !

    7|

    Installer et configurer LXC sur Debian Jessie en trois coups de cuiller à pot

    Installation de LXC

    Création d’un container

     -n nom du container
     -t template de l’OS à utiliser

    Bien noter le mot de passe root qui s’affichera à la fin de la création du container lxc.

    Configuration du réseau sur l’hôte

    Il y a plusieurs façons de configurer le réseau, pour ma part je préfère créer un (ou plusieurs) sous-réseaux pour mes containers qui seront "natter" par la machine hôte.
    Pour illustrer, on pourrait dire que les sous-réseaux sont cloisonnés à l’intérieur de l’hôte qui fera office de pare-feu vers l’extérieur.

    Autoriser "l’ip forwarding"

    Recharger la configuration du système pour prendre en compte la modification.

    Configurer l’interface qui servira de bridge

    La paquet bridge-utils est nécessaire, il est normalement installé en dépendance de lxc, au cas ou :

    Paramétrage de /etc/network/interfaces

    Redémarrer le service réseau afin de prendre en compte la nouvelle interface br0

    Vérifier que l’interface réseau est bien présente :
    ifconfig devrait renvoyer quelque chose comme ça

    Activer le partage de connexion internet pour les containers LXC :

    On va donner l’accès internet aux containers LXC à travers wlan0 (On verra comment automatiser ça sur un hôte au profil itinérant qui se connecte sur des interfaces diverses et variées : wlan0 eth0 usb0... )

    Configuration du réseau sur les containers LXC

    Attention ! il ne s’agit pas de paramétrer le réseau à l’intérieur du container mais d’éditer un fichier de configuration qui se chargera de configurer le réseau au démarrage de celui-ci.

    Par défaut, Debian installe les nouveaux containers dans /var/lib/lxc ; ce dossier contient tous les containers créés, qui eux-même contiennent des fichiers de logs, de configs et le dossier rootfs qui comme son nom l’indique, correspond à la racine du système virtualisé ( / ).

    Afin de configurer le réseau sur notre container LXC, nous allons éditer son fichier de config /var/lib/lxc/NomContainer
    Extrait de la configuration réseau d’un container /var/lib/lxc/NomContainer/config

    Démarrage du container et test du réseau


     -n nom du container
     -d en mode daemon

    La commande pour contrôler si notre container LXC est bien démarré :

    Devrait retourner

    Sur l’hôte un petit ping 192.168.100.1 devrait retourner :

    On va se connecter directement au container LXC

    Se connecter au container, j’espère que vous avez bien noté le mot de passe root lors de sa création sinon vous pouvez toujours consulter l’article dédié au changement de mot de passe root d’un container LXC.
    Une fois connecté, on va tester l’accès internet en utilisant apt pour installer ping afin de "pinguer" la machine hôte :

    Et voilà, Juste ça marche !


    Pierrox

    P.-S.

    Pour quitter un container, utilisez la combinaison de touche ctrl+a puis q

  • Lire directement les vidéos youtube (& cie) dans VLC

    S’affranchir efficacement de flash pour lire les vidéos directement dans VLC

    Vous le savez comme moi, flash c’est le mal. Et voici LA solution qui vous fera franchir le pas d’un bannissement (espérons permanent) du vil greffon sans pour autant faire une croix sur les vidéos des plateformes d’hébergement (youtube, dailymotion, vimeo, etc).

    Cela consiste en l’emploi coordonné de deux scripts qui vont vous permettre de lire directement une vidéo distante dans votre lecteur habituel (VLC, mplayer ou autre).

    1) Installation de youtube-dl

    Sous GNU-Linux, la méthode que je trouve la plus simple est de passer par le gestionnaire d’environnement python pip.

    Veillez à mettre à jour l’application de temps en temps, car les plugins de gestion par plateforme sont nombreux et les modifications fréquentes.

    2) Lancement illico grâce à vlcopen.sh

    youtude-dl est un super logiciel, efficace dans bien des situations, mais son utilisation en ligne de commande s’avère à la longue un peu rédhibitoire pour une utilisation en tant que simple utilisateur.

    D’où le recours à un second script, mis à disposition par swarminglogic,qui va apporter un peu de souplesse d’utilisation et ouvrir la vidéo encore plus vite que si vous y aviez accédée directement depuis la page youtube, grâce à un raccourci clavier.

    Ce script se comporte comme une capsule pour youtube-dl. Il va analyser le contenu du presse-papier, et s’il détecte une url prise en charge, va créer un répertoire temporaire, y télécharger la vidéo, l’ouvrir avec VLC après quelques instants et supprimer automatiquement tous les fichiers temporaires à la fermeture.

    Il suffit d’enregistrer le script (sous le nom vlcopen.sh par exemple) dans un répertoire inclus dans votre $PATH, le rendre exécutable (chmod +x vlcopen.sh) et d’associer un raccourci clavier à son exécution.

    Typiquement sous openbox, j’ai rajouté une section comme suit à mon rc.xml.

    Dès lors, dans les faits, lorsque je veux regarder une vidéo, je fais un clic-droit > copier l’url de la page soit sur la page courante, soit sur le lien à analyser, puis super + y (oui j’ai choisi y pour "youtube" mais à vous d’adapter au besoin), et voilà !

    Seul bémol, si la vidéo est longue et que vous êtes impatient, vous ne pourrez pas avancer directement la lecture à un point qui n’a pas encore été téléchargé.

    source github.com/swarminglogic


  • 2|

    Une fonction qui permet de créer/supprimer des liens symboliques facilement vers les répertoires couramment utilisés. Classe non ?

    Il faut rajouter ceci dans son /.bash_aliases :

    Le code est assez explicite, mais à l’usage voilà ce que cela donne :

    Créer un raccourci

    Usage

    Lister les raccourcis déjà créés

    Supprimer le raccourci


  • 1|

    Aide mémoire listant toutes les variables # !shell utiles pour l’écriture de # !scripts .

    Manipulation de variables simples

    var=val
    var="a b"
    affectation de la variable "var"
    $var
    ${var}
    contenu de la variable "var"
    ${#var} longueur de la variable "var"
    ${var:-valeur} affectation conditionnelle, si "var" non défini alors var = valeur
    export var
    declare -x var
    exportation de la variable "var" vers les shells fils
    set affichage de l’ensemble des variables définies dans le shell
    unset var suppression de la variable "var"

    Tableaux

    tab[0]=val affectation du premier enregistrement du tableau "tab"
    ${tab[0]}
    $tab
    contenu du premier enregistrement du tableau "tab"
    ${tab[11]} contenu du douzième enregistrement du tableau "tab"
    ${tab[*]} ensemble des enregistrements du tableau "tab"
    ${#tab[11]} longueur du douzième enregistrement du tableau "tab"
    ${#tab[*]} nombre d’enregistrements du tableau "tab"
    ${!tab[@]} liste des clefs ( Index ) du tableau "tab"

    Paramètres positionnels et arguments

    $0 nom du script
    $1 $2 ... ${10} paramètres positionnels (1, 2 et 10)
    $# nombre de paramètres positionnels
    $*
    $@
    ensemble des paramètres positionnels, équivalant à $1 $2 ... $n

    Variables spéciales

    $$ PID du shell courant
    $! PID du dernier travail lancé en arrière plan
    $? code retour de la dernière commande
    ${PIPESTATUS[0]} code retour de la première commande d’un pipe

    Variables d’environnement

    $HOME chemin du répertoire personnel de l’utilisateur
    $OLDPWD chemin du répertoire précédent
    $PATH liste des chemins de recherche des commandes exécutables
    $PPID PID du processus père du shell
    $PS1 invite principale du shell
    $PS2 invite secondaire du shell
    $PS3 invite de la structure shell "select"
    $PS4 invite de l’option shell de débogage "xtrace"
    $PWD chemin du répertoire courant
    $RANDOM nombre entier aléatoire compris entre 0 et 32767
    $REPLY variable par défaut de la commande "read" et de la structure shell "select"
    $SECONDS nombre de secondes écoulées depuis le lancement du shell

  • Quelques commandes bash utiles pour mysql

    Sauvegarder toute la base en concaténant le nom de l’hostname + la date pour le nom du fichier de sauvegarde :

    En théorie la commande ci-dessus devrait fonctionner sans problème.
    J’ai eu un bug ? sur ma debian, avec le résultat de la commande de hostname -a qui me renvoyait systématique un espace en fin de chaîne.

    Je vous laisse apprécier la basherie ci-dessous visant a nommer le fichier de sortie en supprimant l’espace indisposant avec la commande sed.

    Pour importer une sauvegarde Mysql au format bz2 sans faire une décompression préalable.