<?xml 
version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="https://blog.roxing.net/spip.php?page=backend.xslt" ?>
<rss version="2.0" 
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:atom="http://www.w3.org/2005/Atom"
>

<channel xml:lang="fr">
	<title>blog.roxing.net</title>
	<link>http://blog.roxing.net/</link>
	<description>weblog roxing.net - astuces spip, php, bash, linux &amp; more</description>
	<language>fr</language>
	<generator>SPIP - www.spip.net</generator>
	<atom:link href="https://blog.roxing.net/spip.php?id_mot=3&amp;page=backend" rel="self" type="application/rss+xml" />

	<image>
		<title>blog.roxing.net</title>
		<url>https://blog.roxing.net/local/cache-vignettes/L144xH37/siteon0-6ddb5.png?1727125340</url>
		<link>http://blog.roxing.net/</link>
		<height>37</height>
		<width>144</width>
	</image>



<item xml:lang="fr">
		<title>[rsync] Exclure un pattern de la synchro par d&#233;faut</title>
		<link>https://blog.roxing.net/rsync-exclure-un-pattern-de-la-synchro-par-defaut</link>
		<guid isPermaLink="true">https://blog.roxing.net/rsync-exclure-un-pattern-de-la-synchro-par-defaut</guid>
		<dc:date>2020-04-14T13:23:33Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>placido</dc:creator>


		<dc:subject>bash</dc:subject>
		<dc:subject>linux</dc:subject>
		<dc:subject>rsync</dc:subject>

		<description>
&lt;p&gt;rsync n'a pas de fichier de configuration g&#233;n&#233;ral pour exclure un format de fichiers lors de la synchronation. Pour se dispenser de pr&#233;ciser la r&#232;gle &#8212;exclude=&#034;truc&#034; &#224; chaque fois, on a recours &#224; un wrapper dans /bin/rsync.
&lt;br class='autobr' /&gt;
# !/bin/sh # RSYNC wrapper to exclude files by default # https://unix.stackexchange.com/questions/21701/how-can-i-exclude-files-by-default-with-rsync
&lt;br class='autobr' /&gt;
# Set path to the rsync binary RSYNC=/usr/bin/rsync
&lt;br class='autobr' /&gt;
# Look for these exclude files (&#8230;)&lt;/p&gt;


-
&lt;a href="https://blog.roxing.net/signets" rel="directory"&gt;signets&lt;/a&gt;

/ 
&lt;a href="https://blog.roxing.net/bash" rel="tag"&gt;bash&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/gnu-linux" rel="tag"&gt;linux&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/rsync" rel="tag"&gt;rsync&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;&lt;strong&gt;rsync&lt;/strong&gt; n'a pas de fichier de configuration g&#233;n&#233;ral pour exclure un format de fichiers lors de la synchronation. Pour se dispenser de pr&#233;ciser la r&#232;gle &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;--exclude=&#034;truc&#034;&lt;/code&gt; &#224; chaque fois, on a recours &#224; un wrapper dans &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;~/bin/rsync&lt;/code&gt;.&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='19' class='spip_cadre spip_cadre_block' dir='ltr'&gt;#!/bin/sh # RSYNC wrapper to exclude files by default # https://unix.stackexchange.com/questions/21701/how-can-i-exclude-files-by-default-with-rsync # Set path to the rsync binary RSYNC=/usr/bin/rsync # Look for these exclude files IGNORE_FILES=(~/.rsyncignore ./.gitignore ./.rsyncignore) EXCLUDE_FROM=&#034;&#034; for f in ${IGNORE_FILES[@]}; do if [[ -e $f ]]; then EXCLUDE_FROM=&#034;$EXCLUDE_FROM --exclude-from=$f &#034; fi done $RSYNC $EXCLUDE_FROM &#034;$@&#034;&lt;/textarea&gt;
&lt;p&gt;Puis dans un fichier /.rsyncignore&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='6' class='spip_cadre spip_cadre_block' dir='ltr'&gt;# .rsyncignore error_log .DS* cache/* local/* tmp/*&lt;/textarea&gt;&lt;/div&gt;
		&lt;div class="hyperlien"&gt;Voir en ligne : &lt;a href="https://unix.stackexchange.com/questions/21701/how-can-i-exclude-files-by-default-with-rsync" class="spip_out"&gt;Unix &amp; Linux Stack Exchange&lt;/a&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Publier un d&#233;p&#244;t Git existant vers un d&#233;p&#244;t SVN</title>
		<link>https://blog.roxing.net/publier-un-depot-git-existant-vers-un-depot-svn</link>
		<guid isPermaLink="true">https://blog.roxing.net/publier-un-depot-git-existant-vers-un-depot-svn</guid>
		<dc:date>2017-06-13T20:44:45Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>placido</dc:creator>


		<dc:subject>bash</dc:subject>
		<dc:subject>howto</dc:subject>
		<dc:subject>git</dc:subject>
		<dc:subject>svn</dc:subject>

		<description>

-
&lt;a href="https://blog.roxing.net/signets" rel="directory"&gt;signets&lt;/a&gt;

/ 
&lt;a href="https://blog.roxing.net/bash" rel="tag"&gt;bash&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/howto" rel="tag"&gt;howto&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/git" rel="tag"&gt;git&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/svn" rel="tag"&gt;svn&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class="hyperlien"&gt;Voir en ligne : &lt;a href="https://stackoverflow.com/questions/661018/pushing-an-existing-git-repository-to-svn" class="spip_out"&gt;Pushing an existing git repository to SVN - Stack Overflow&lt;/a&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>explainshell.com </title>
		<link>https://blog.roxing.net/explainshell-com</link>
		<guid isPermaLink="true">https://blog.roxing.net/explainshell-com</guid>
		<dc:date>2017-06-13T10:34:49Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>placido</dc:creator>


		<dc:subject>bash</dc:subject>
		<dc:subject>shell</dc:subject>
		<dc:subject>man</dc:subject>
		<dc:subject>help</dc:subject>

		<description>
&lt;p&gt;Documentation qui d&#233;taille les arguments que l'on passe &#224; une fonction dans la ligne de commande&lt;/p&gt;


-
&lt;a href="https://blog.roxing.net/signets" rel="directory"&gt;signets&lt;/a&gt;

/ 
&lt;a href="https://blog.roxing.net/bash" rel="tag"&gt;bash&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/shell" rel="tag"&gt;shell&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/man" rel="tag"&gt;man&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/help" rel="tag"&gt;help&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Documentation qui d&#233;taille les arguments que l'on passe &#224; une fonction dans la ligne de commande&lt;/p&gt;&lt;/div&gt;
		&lt;div class="hyperlien"&gt;Voir en ligne : &lt;a href="https://explainshell.com/" class="spip_out"&gt;explainshell.com - match command-line arguments to their help text&lt;/a&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Compresser, d&#233;couper et envoyer des fichiers volumineux sous Linux</title>
		<link>https://blog.roxing.net/linux-compresser-decouper-et-envoyer-des-fichiers</link>
		<guid isPermaLink="true">https://blog.roxing.net/linux-compresser-decouper-et-envoyer-des-fichiers</guid>
		<dc:date>2016-11-22T09:59:03Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Pierrox</dc:creator>


		<dc:subject>bash</dc:subject>
		<dc:subject>sauvegarde</dc:subject>
		<dc:subject>linux</dc:subject>
		<dc:subject>xz-utils</dc:subject>
		<dc:subject>compression</dc:subject>
		<dc:subject>tmux</dc:subject>
		<dc:subject>split</dc:subject>
		<dc:subject>tar</dc:subject>

		<description>&lt;p&gt;Envoyer des fichier volumineux au travers d'une petite connexion internet peu s'av&#233;rer compliqu&#233;. Cet article liste les quelques outils n&#233;cessaires et les commandes utiles &#224; l'accomplissement de cette t&#226;che.&lt;/p&gt;

-
&lt;a href="https://blog.roxing.net/administration-systeme" rel="directory"&gt;administration syst&#232;me&lt;/a&gt;

/ 
&lt;a href="https://blog.roxing.net/bash" rel="tag"&gt;bash&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/sauvegarde" rel="tag"&gt;sauvegarde&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/gnu-linux" rel="tag"&gt;linux&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/xz-utils" rel="tag"&gt;xz-utils&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/compression" rel="tag"&gt;compression&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/tmux" rel="tag"&gt;tmux&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/split" rel="tag"&gt;split&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/tar" rel="tag"&gt;tar&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;Xz - Compresser un fichier &lt;/h2&gt;
&lt;p&gt;Xz est un outil de compression tr&#232;s performant. Pour compresser un gros fichier avec le taux de compression maximal on utilise simplement :&lt;/p&gt;
&lt;p&gt;&lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;xz -9 gros_fichier&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Le fichier de sortie sera nomm&#233; gros_fichier.xz&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Split - D&#233;couper un fichier en plusieurs fichiers de taille d&#233;finie &lt;/h2&gt;
&lt;p&gt;D&#233;couper le fichier en plusieurs fragments de 1GB (-b bytes) et ajouter un suffixe num&#233;rique aux fichiers de sortie (-d )&lt;/p&gt;
&lt;p&gt;&lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;split -b 1024M -d gros_fichier.xz gros_fichier.xz_part&lt;/code&gt;&lt;br class='autobr' /&gt;
donnera :&lt;/p&gt;
&lt;p&gt;gros_fichier.xz_part01&lt;br class='manualbr' /&gt;gros_fichier.xz_part02&lt;br class='manualbr' /&gt;gros_fichier.xz_part03&lt;br class='manualbr' /&gt;...&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt; Combiner tar + xz-utils + split &lt;/h2&gt;
&lt;p&gt;A titre d'exemple, le m&#234;me r&#233;sultat que pr&#233;c&#233;dement, en utilisant conjointement tar et split :&lt;/p&gt;
&lt;p&gt;&lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;tar -Jcvf - un_repertoire_ou_fichier | split -d -b 1024MB - gros_fichier.tar.xz. &lt;/code&gt;&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt; Tmux - Envoyer les fichiers en t&#226;che de fond &lt;/h2&gt;
&lt;p&gt;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 &#224; environ 50ko/s.&lt;/p&gt;
&lt;p&gt;&lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;scp -i ~/.ssh/ma_clef -l 512 gros_fichier.xz_part* user@host:/home/bob/incoming&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;C'est bien joli, mais si je fais des transferts &#224; distance, j'aimerais bien lancer la commande en t&#226;che de fond, surtout si l'upload est tr&#232;s long. &lt;br class='autobr' /&gt;
Pour ce faire, j'utilise tmux qui permet d'utiliser plusieurs terminaux virtuel que l'on peu d&#233;tacher ou rattacher au terminal facilement.&lt;/p&gt;
&lt;p&gt;&lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;tmux new-session -d -s upload 'scp -i ~/.ssh/ma_clef -l 512 gros_fichier.xz_part* user@host:/home/bob/incoming 2&gt; errors.log'&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Rattacher le terminal pour voir l'upload en cours : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;tmux attach&lt;/code&gt;&lt;br class='manualbr' /&gt;D&#233;tacher le terminal avec la combinaison de touches &lt;kbd&gt;ctrl&lt;/kbd&gt; + &lt;kbd&gt;b&lt;/kbd&gt; puis &lt;kbd&gt;d&lt;/kbd&gt;&lt;br class='autobr' /&gt;
Gr&#226;ce &#224; tmux, je peux me d&#233;connecter du shell distant et revenir plus tard... &lt;br class='autobr' /&gt;
Un simple &lt;samp&gt;tmux a&lt;/samp&gt; me permettra de consulter l'&#233;tat d'avancement de l'upload.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt; Cat - R&#233;assembler les fichiers d&#233;coup&#233;s &lt;/h2&gt;
&lt;p&gt;Une fois les fichiers transf&#233;r&#233;s, je les r&#233;assemble avec un simple cat&lt;/p&gt;
&lt;p&gt;&lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;cat gros_fichier.xz_part* &gt; gros_fichier.xz&lt;/code&gt;&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt; D&#233;compression d'un xz ou d'un tar.xz &lt;/h2&gt;
&lt;p&gt;Avec tar (-x xtract) :&lt;br class='manualbr' /&gt;&lt;samp&gt;tar -Jxvf gros_fichier.tar.xz&lt;/samp&gt;&lt;/p&gt;
&lt;p&gt;Avec xz-utils (-d)&lt;br class='manualbr' /&gt;&lt;samp&gt;xz -d gros_fichier.xz&lt;/samp&gt;&lt;/p&gt;
&lt;p&gt;Voil&#224;.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>keepalive.sh : Relancer une commande en boucle</title>
		<link>https://blog.roxing.net/keepalive-sh-relancer-une-commande-en-boucle</link>
		<guid isPermaLink="true">https://blog.roxing.net/keepalive-sh-relancer-une-commande-en-boucle</guid>
		<dc:date>2016-11-20T09:10:45Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>placido</dc:creator>


		<dc:subject>bash</dc:subject>
		<dc:subject>script</dc:subject>
		<dc:subject>astuce</dc:subject>
		<dc:subject>youtube-dl</dc:subject>

		<description>
&lt;p&gt;Une petite astuce pour relancer en boucle une commande jusqu'&#224; ce que le processus se termine en mani&#232;re attendue :
&lt;br class='autobr' /&gt;
# !/bin/bash # keepalive.sh
&lt;br class='autobr' /&gt;
until $1 ; do echo &#034;Processus termin&#233; avec exit code $ ?. On relance...&#034; &gt;&amp;2 sleep 1 done
&lt;br class='autobr' /&gt;
exit 0 &lt;br class='autobr' /&gt;
&#192; l'usage (une fois que le fichier est dans le $PATH) :
&lt;br class='autobr' /&gt;
keepalive.sh &#034;youtube-dl -f hls-best http://www.tf6.ch/concours-super-menuisier.html&#034; &lt;br class='autobr' /&gt;
Pratique, si le t&#233;l&#233;chargement connait des rat&#233;s, plus besoin de le (&#8230;)&lt;/p&gt;


-
&lt;a href="https://blog.roxing.net/signets" rel="directory"&gt;signets&lt;/a&gt;

/ 
&lt;a href="https://blog.roxing.net/bash" rel="tag"&gt;bash&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/script-50" rel="tag"&gt;script&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/astuce" rel="tag"&gt;astuce&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/youtube-dl" rel="tag"&gt;youtube-dl&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Une petite astuce pour relancer en boucle une commande jusqu'&#224; ce que le processus se termine en mani&#232;re attendue :&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='10' class='spip_cadre spip_cadre_block' dir='ltr'&gt;#!/bin/bash # keepalive.sh until $1; do echo &#034;Processus termin&#233; avec exit code $?. On relance...&#034; &gt;&amp;2 sleep 1 done exit 0&lt;/textarea&gt;
&lt;p&gt;&#192; l'usage (une fois que le fichier est dans le $PATH) :&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;keepalive.sh &#034;youtube-dl -f hls-best http://www.tf6.ch/concours-super-menuisier.html&#034;&lt;/textarea&gt;
&lt;p&gt;Pratique, si le t&#233;l&#233;chargement connait des rat&#233;s, plus besoin de le relancer soi-m&#234;me.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>KeePassX, Openbox et clavier fr_FR</title>
		<link>https://blog.roxing.net/keepassx-openbox-et-clavier-fr</link>
		<guid isPermaLink="true">https://blog.roxing.net/keepassx-openbox-et-clavier-fr</guid>
		<dc:date>2016-08-13T11:32:06Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>placido</dc:creator>


		<dc:subject>bash</dc:subject>
		<dc:subject>linux</dc:subject>
		<dc:subject>astuce</dc:subject>
		<dc:subject>openbox</dc:subject>
		<dc:subject>keyboard</dc:subject>
		<dc:subject>keepassx</dc:subject>

		<description>
&lt;p&gt;Pour une obscure raison, la fonctionnalit&#233; Auto-Type de KeePassX (v 0.4.3), utilise une disposition de clavier diff&#233;rente que celle d&#233;finie par le syst&#232;me.
&lt;br class='autobr' /&gt;
$ localectl status System Locale : LANG=fr_FR.UTF-8 VC Keymap : n/a X11 Layout : fr X11 Model : pc105 X11 Variant : latin9 X11 Options : terminate:ctrl_alt_bksp &lt;br class='autobr' /&gt;
Du coup, la saisie auto d'un mot de passe azerty donne qwerty. &lt;br class='autobr' /&gt;
Solution : rajouter cette ligne dans /.config/openbox/autostart :
&lt;br class='autobr' /&gt;
setxkbmap fr &amp;&lt;/p&gt;


-
&lt;a href="https://blog.roxing.net/signets" rel="directory"&gt;signets&lt;/a&gt;

/ 
&lt;a href="https://blog.roxing.net/bash" rel="tag"&gt;bash&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/gnu-linux" rel="tag"&gt;linux&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/astuce" rel="tag"&gt;astuce&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/openbox-85" rel="tag"&gt;openbox&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/keyboard" rel="tag"&gt;keyboard&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/keepassx" rel="tag"&gt;keepassx&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Pour une obscure raison, la fonctionnalit&#233; &lt;strong&gt;Auto-Type &lt;/strong&gt; de KeePassX (v 0.4.3), utilise une disposition de clavier diff&#233;rente que celle d&#233;finie par le syst&#232;me.&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='7' class='spip_cadre spip_cadre_block' dir='ltr'&gt;$ localectl status System Locale: LANG=fr_FR.UTF-8 VC Keymap: n/a X11 Layout: fr X11 Model: pc105 X11 Variant: latin9 X11 Options: terminate:ctrl_alt_bksp&lt;/textarea&gt;
&lt;p&gt;Du coup, la saisie auto d'un mot de passe &lt;kbd&gt;a&lt;/kbd&gt;&lt;kbd&gt;z&lt;/kbd&gt;&lt;kbd&gt;e&lt;/kbd&gt;&lt;kbd&gt;r&lt;/kbd&gt;&lt;kbd&gt;t&lt;/kbd&gt;&lt;kbd&gt;y&lt;/kbd&gt; donne &lt;kbd&gt;q&lt;/kbd&gt;&lt;kbd&gt;w&lt;/kbd&gt;&lt;kbd&gt;e&lt;/kbd&gt;&lt;kbd&gt;r&lt;/kbd&gt;&lt;kbd&gt;t&lt;/kbd&gt;&lt;kbd&gt;y&lt;/kbd&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt; : rajouter cette ligne dans &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;~/.config/openbox/autostart&lt;/code&gt; :&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;setxkbmap fr &amp;&lt;/textarea&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>[Bash] Minuterie et Chronom&#232;tre</title>
		<link>https://blog.roxing.net/bash-minuterie-et-chronometre</link>
		<guid isPermaLink="true">https://blog.roxing.net/bash-minuterie-et-chronometre</guid>
		<dc:date>2016-04-27T14:10:36Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>placido</dc:creator>


		<dc:subject>bash</dc:subject>
		<dc:subject>astuce</dc:subject>
		<dc:subject>bash_aliases</dc:subject>

		<description>
&lt;p&gt;Voici 2 fonctions &#224; rajouter &#224; son .bash_aliases
&lt;br class='autobr' /&gt;
function countdown() date1=$((&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;date +%s&lt;/code&gt; + $1)) ; while [ &#034;$date1&#034; -ge &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;date +%s&lt;/code&gt; ] ; do echo -ne &#034;$(date -u &#8212;date @$(($date1 - &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;date +%s&lt;/code&gt;)) (&#8230;)&lt;/p&gt;


-
&lt;a href="https://blog.roxing.net/signets" rel="directory"&gt;signets&lt;/a&gt;

/ 
&lt;a href="https://blog.roxing.net/bash" rel="tag"&gt;bash&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/astuce" rel="tag"&gt;astuce&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/bash_aliases" rel="tag"&gt;bash_aliases&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Voici 2 fonctions &#224; rajouter &#224; son &lt;em&gt;.bash_aliases&lt;/em&gt;&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='23' class='spip_cadre spip_cadre_block' dir='ltr'&gt;function countdown(){ date1=$((&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;date +%s&lt;/code&gt; + $1)); while [ &#034;$date1&#034; -ge &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;date +%s&lt;/code&gt; ]; do echo -ne &#034;$(date -u --date @$(($date1 - &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;date +%s&lt;/code&gt;)) +%H:%M:%S)\r&#034;; sleep 0.1 done } function stopwatch(){ date1=&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;date +%s&lt;/code&gt;; while true; do echo -ne &#034;$(date -u --date @$((&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;date +%s&lt;/code&gt; - $date1)) +%H:%M:%S)\r&#034;; sleep 0.1 done }&lt;/textarea&gt;&lt;h2 class=&#034;spip&#034;&gt;Minuterie (countdown)&lt;/h2&gt;
&lt;p&gt;Une version remani&#233;e de &lt;i&gt;sleep&lt;/i&gt; qui affiche les secondes restantes. Vous voulez un r&#233;veil &#224; la suite d'une micro sieste de 20 minutes ?!&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;countdown 60*20 &amp;&amp; mplayer ~/music/La_chevauch&#233;e_des_Valkyries.mp3&lt;/textarea&gt;&lt;h2 class=&#034;spip&#034;&gt;Chronom&#232;tre (stopwatch)&lt;/h2&gt;
&lt;p&gt;A vos marques. Pr&#234;t ? feu !&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;stopwatch&lt;/textarea&gt;
&lt;p&gt;&lt;kbd&gt;ctrl&lt;/kbd&gt; + &lt;kbd&gt;c&lt;/kbd&gt; pour remettre &#224; z&#233;ro.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>[BASH] Utiliser l'API fontello.com</title>
		<link>https://blog.roxing.net/exemple-api-fontello-bash</link>
		<guid isPermaLink="true">https://blog.roxing.net/exemple-api-fontello-bash</guid>
		<dc:date>2015-10-14T12:35:17Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>placido</dc:creator>


		<dc:subject>design</dc:subject>
		<dc:subject>bash</dc:subject>
		<dc:subject>script</dc:subject>
		<dc:subject>css</dc:subject>
		<dc:subject>font</dc:subject>
		<dc:subject>fontello</dc:subject>
		<dc:subject>webfont</dc:subject>

		<description>&lt;p&gt;&lt;a href=&#034;http://fontello.com&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Fontello&lt;/a&gt; propose de composer une webfont d'ic&#244;nes sur mesure en piochant parmi plusieurs collections (Font Awesome, Web Symbols, ...) Le service est tr&#232;s bien fait, rapide et simple d'utilisation. Mais vous pouvez gagner encore plus de temps lors de l'ajout d'ic&#244;nes suppl&#233;mentaires an passant directement via l'API.&lt;/p&gt;

-
&lt;a href="https://blog.roxing.net/billets" rel="directory"&gt;billets&lt;/a&gt;

/ 
&lt;a href="https://blog.roxing.net/design" rel="tag"&gt;design&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/bash" rel="tag"&gt;bash&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/script-50" rel="tag"&gt;script&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/css" rel="tag"&gt;css&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/font" rel="tag"&gt;font&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/fontello" rel="tag"&gt;fontello&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/webfont" rel="tag"&gt;webfont&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Allons directement dans le vif du sujet en cr&#233;ant un fichier&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Makefile&lt;/strong&gt;&lt;br class='autobr' /&gt;
&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;chmod +x Makefile&lt;/code&gt; pour le rendre ex&#233;cutable quelque part en amont de votre projet :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;# Makefile FONT_DIR ?= ./css/icons PROJECT_NAME ?= projet_foo FONTELLO_HOST ?= http://fontello.com fontopen: @if test ! `which curl` ; then \ echo 'Install curl first.' &gt;&amp;2 ; \ exit 128 ; \ fi curl --silent --show-error --fail --output .fontello \ --form &#034;config=@${FONT_DIR}/config.json&#034; \ ${FONTELLO_HOST} x-www-browser ${FONTELLO_HOST}/`cat .fontello` fontsave: @if test ! `which unzip` ; then \ echo 'Install unzip first.' &gt;&amp;2 ; \ exit 128 ; \ fi @if test ! -e .fontello ; then \ echo 'Run `make fontopen` first.' &gt;&amp;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 &#034;config.json&#034; -o -name &#034;*.woff&#034; -o -name &#034;*.ttf&#034; -o -name &#034;*.svg&#034; -o -name &#034;*.eot&#034; \) ` ${FONT_DIR} mv `find ./.fontello.src -maxdepth 3 -name &#034;${PROJECT_NAME}-codes.css&#034;` ${FONT_DIR}/codes.scss rm -rf .fontello.src .fontello.zip &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;Passons rapidement le script en revue&lt;/h2&gt;
&lt;p&gt;Tout d'abord, on doit &#233;diter le script pour renseigner 2 informations :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;strong&gt;FONT_DIR&lt;/strong&gt;, qui est l'emplacement du dossier qui va recevoir les &#233;l&#233;ments issus de fontetto (.ttf, .woff. css, .css, ...), relativement au fichier Makefile. Personnellement j'ai choisi un dossier &#034;icons&#034; d&#233;di&#233; &#224; cela, et distinct des polices (webfonts) compl&#232;tes qui elles sont dans un autre dossier &#034;fonts&#034;.&lt;/li&gt;&lt;li&gt; &lt;strong&gt;PROJECT_NAME&lt;/strong&gt; qui d&#233;signe le nom du projet.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;A pr&#233;sent, direction &lt;a href=&#034;http://fontello.com&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;fontello.com&lt;/a&gt; o&#249; vous pouvez commencer &#224; composer votre webfont personnalis&#233;e &lt;strong&gt;projet_foo&lt;/strong&gt;. Enregistrez (bouton en haut &#224; droite), t&#233;l&#233;chargez le .zip et r&#233;cup&#233;rez le fichier config.json (qui est le seul qui nous int&#233;resse) et copiez le dans le dossier FONT_DIR.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&#192; l'usage&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&#192; partir de maintenant, l'ajout ou modification d'ic&#244;nes va se faire en un clin d'oeil via 2 commandes successives, issues du fichier &lt;i&gt;Makefile&lt;/i&gt; :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;make fontopen&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;inspecte le fichier &lt;i&gt;config.json&lt;/i&gt; et ouvre le navigateur avec les param&#232;tres d'&#233;dition sauvegard&#233;s.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;make fontsave&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;r&#233;cup&#232;re la version mise &#224; jour du projet_foo en &#233;crasant les anciens fichiers.&lt;/p&gt;
&lt;p&gt;Pour ma part, c'est surtout le fichier &lt;i&gt;projet_foo-codes.css&lt;/i&gt; avec les codes qui m'importe (voir et modifier au besoin la ligne 32) ; c'est pourquoi je renomme en &lt;i&gt;codes.scss&lt;/i&gt; pour l'appeler ult&#233;rieurement dans la compilation SASS.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_ps'&gt;&lt;p&gt;Ultime remarque, si vous constatez un probl&#232;me d'affichage des ic&#244;nes apr&#232;s une mise &#224; jour, essayer de changer le param&#232;tre en fin d'url dans la d&#233;claration css font-face.&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='7' class='spip_cadre spip_cadre_block' dir='ltr'&gt;@font-face { font-family: 'projet_foo'; src: url('icons/projet_foo.eot?248676'); /* ... */ }&lt;/textarea&gt; &lt;p&gt;devenant par exemple :&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='7' class='spip_cadre spip_cadre_block' dir='ltr'&gt;@font-face { font-family: 'projet_foo'; src: url('icons/projet_foo.eot?1039286'); /* ... */ }&lt;/textarea&gt; &lt;p&gt;C'est un d&#233;sagr&#233;ment d&#251; aux navigateurs, qui allouent un cache sp&#233;cifique pour les webfonts.&lt;/p&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>LXC Debian Jessie </title>
		<link>https://blog.roxing.net/lxc-debian-jessie</link>
		<guid isPermaLink="true">https://blog.roxing.net/lxc-debian-jessie</guid>
		<dc:date>2015-09-05T21:54:48Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Pierrox</dc:creator>


		<dc:subject>bash</dc:subject>
		<dc:subject>linux</dc:subject>
		<dc:subject>LXC</dc:subject>
		<dc:subject>virtualisation</dc:subject>
		<dc:subject>Debian Jessie</dc:subject>
		<dc:subject>lxc nat</dc:subject>
		<dc:subject>howto</dc:subject>

		<description>&lt;p&gt;Installer et configurer LXC sur Debian Jessie en trois coups de cuiller &#224; pot&lt;/p&gt;

-
&lt;a href="https://blog.roxing.net/administration-systeme" rel="directory"&gt;administration syst&#232;me&lt;/a&gt;

/ 
&lt;a href="https://blog.roxing.net/bash" rel="tag"&gt;bash&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/gnu-linux" rel="tag"&gt;linux&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/lxc" rel="tag"&gt;LXC&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/virtualisation" rel="tag"&gt;virtualisation&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/debian-jessie" rel="tag"&gt;Debian Jessie&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/lxc-nat" rel="tag"&gt;lxc nat&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/howto" rel="tag"&gt;howto&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;Installation de LXC&lt;/h2&gt;
&lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;apt-get install lxc lxctl&lt;/textarea&gt;
&lt;p&gt;&lt;strong&gt;Cr&#233;ation d'un container&lt;/strong&gt;&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;lxc-create -n NomContainer -t debian&lt;/textarea&gt;
&lt;p&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; -n nom du container &lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; -t template de l'OS &#224; utiliser&lt;/p&gt;
&lt;p&gt;Bien noter le mot de passe root qui s'affichera &#224; la fin de la cr&#233;ation du container lxc.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Configuration du r&#233;seau sur l'h&#244;te&lt;/h2&gt;
&lt;p&gt;Il y a plusieurs fa&#231;ons de configurer le r&#233;seau, pour ma part je pr&#233;f&#232;re cr&#233;er un (ou plusieurs) sous-r&#233;seaux pour mes containers qui seront &#034;natter&#034; par la machine h&#244;te.&lt;br class='autobr' /&gt;
Pour illustrer, on pourrait dire que les sous-r&#233;seaux sont cloisonn&#233;s &#224; l'int&#233;rieur de l'h&#244;te qui fera office de pare-feu vers l'ext&#233;rieur.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Autoriser &#034;l'ip forwarding&#034;&lt;/strong&gt;&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;nano /etc/sysctl.conf net.ipv4.ip_forward=1&lt;/textarea&gt;
&lt;p&gt;Recharger la configuration du syst&#232;me pour prendre en compte la modification.&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;sysctl -p&lt;/textarea&gt;
&lt;p&gt;&lt;strong&gt;Configurer l'interface qui servira de bridge&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La paquet bridge-utils est n&#233;cessaire, il est normalement install&#233; en d&#233;pendance de lxc, au cas ou :&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;apt-get install bridge-utils&lt;/textarea&gt;
&lt;p&gt;Param&#233;trage de /etc/network/interfaces&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='10' class='spip_cadre spip_cadre_block' dir='ltr'&gt;# The loopback network interface auto lo iface lo inet loopback # Configuration du Bridge pour le sous r&#233;seau virtualis&#233; auto br0 iface br0 inet static address 192.168.100.254 netmask 255.255.255.0 bridge_ports none&lt;/textarea&gt;
&lt;p&gt;Red&#233;marrer le service r&#233;seau afin de prendre en compte la nouvelle interface br0&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;service networking restart&lt;/textarea&gt;
&lt;p&gt;V&#233;rifier que l'interface r&#233;seau est bien pr&#233;sente :&lt;br class='autobr' /&gt;
&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;ifconfig&lt;/code&gt; devrait renvoyer quelque chose comme &#231;a&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='11' class='spip_cadre spip_cadre_block' dir='ltr'&gt;br0 Link encap:Ethernet HWaddr 22:ce:06:00:1d:7f inet adr:192.168.100.254 Bcast:192.168.100.255 Masque:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:24 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 lg file transmission:0 RX bytes:0 (0.0 B) TX bytes:3915 (3.8 KiB)&lt;/textarea&gt;
&lt;p&gt;&lt;strong&gt;Activer le partage de connexion internet pour les containers LXC :&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;On va donner l'acc&#232;s internet aux containers LXC &#224; travers wlan0 (On verra comment automatiser &#231;a sur un h&#244;te au profil itin&#233;rant qui se connecte sur des interfaces diverses et vari&#233;es : wlan0 eth0 usb0... )&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;iptables -t nat -F POSTROUTING iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE&lt;/textarea&gt;&lt;h2 class=&#034;spip&#034;&gt;Configuration du r&#233;seau sur les containers LXC&lt;/h2&gt;
&lt;p&gt;Attention ! il ne s'agit pas de param&#233;trer le r&#233;seau &#224; l'int&#233;rieur du container mais d'&#233;diter un fichier de configuration qui se chargera de configurer le r&#233;seau au d&#233;marrage de celui-ci.&lt;/p&gt;
&lt;p&gt;Par d&#233;faut, Debian installe les nouveaux containers dans &lt;strong&gt;/var/lib/lxc&lt;/strong&gt; ; ce dossier contient tous les containers cr&#233;&#233;s, qui eux-m&#234;me contiennent des fichiers de logs, de configs et le dossier &lt;strong&gt;rootfs&lt;/strong&gt; qui comme son nom l'indique, correspond &#224; la racine du syst&#232;me virtualis&#233; ( / ).&lt;/p&gt;
&lt;p&gt;Afin de configurer le r&#233;seau sur notre container LXC, nous allons &#233;diter son fichier de config &lt;strong&gt; /var/lib/lxc/NomContainer&lt;/strong&gt;&lt;br class='autobr' /&gt;
Extrait de la configuration r&#233;seau d'un container &lt;strong&gt;/var/lib/lxc/NomContainer/config&lt;/strong&gt;&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='7' class='spip_cadre spip_cadre_block' dir='ltr'&gt;lxc.network.type = veth lxc.network.name = veth0 lxc.network.flags = up lxc.network.link = br0 lxc.network.veth.pair = veth0 lxc.network.ipv4 = 192.168.100.1/24 lxc.network.ipv4.gateway = 192.168.100.254&lt;/textarea&gt;&lt;h2 class=&#034;spip&#034;&gt;D&#233;marrage du container et test du r&#233;seau&lt;/h2&gt;
&lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;lxc-start -n NomContainer -d&lt;/textarea&gt;
&lt;p&gt;&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; -n nom du container &lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; -d en mode daemon&lt;/p&gt;
&lt;p&gt;La commande pour contr&#244;ler si notre container LXC est bien d&#233;marr&#233; :&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;lxc-ls -f&lt;/textarea&gt;
&lt;p&gt;Devrait retourner&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='4' class='spip_cadre spip_cadre_block' dir='ltr'&gt;NAME STATE IPV4 IPV6 AUTOSTART --------------------------------------------------------- NomContainer RUNNING 192.168.100.1 - NO&lt;/textarea&gt;
&lt;p&gt;Sur l'h&#244;te un petit ping 192.168.100.1 devrait retourner :&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='3' class='spip_cadre spip_cadre_block' dir='ltr'&gt;PING 192.168.100.1 (192.168.100.1) 56(84) bytes of data. 64 bytes from 192.168.100.1: icmp_seq=1 ttl=64 time=0.087 ms&lt;/textarea&gt;
&lt;p&gt;On va se connecter directement au container LXC&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;lxc-console -n NomContainer&lt;/textarea&gt;
&lt;p&gt;Se connecter au container, j'esp&#232;re que vous avez bien not&#233; le mot de passe root lors de sa cr&#233;ation sinon vous pouvez toujours &lt;a href='https://blog.roxing.net/lxc-root-password' class=&#034;spip_in&#034;&gt;consulter l'article d&#233;di&#233; au changement de mot de passe root d'un container LXC&lt;/a&gt;.&lt;br class='autobr' /&gt;
Une fois connect&#233;, on va tester l'acc&#232;s internet en utilisant apt pour installer ping afin de &#034;pinguer&#034; la machine h&#244;te :&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='11' class='spip_cadre spip_cadre_block' dir='ltr'&gt;root@NomContainer:~#apt-get install inetutils-ping Les NOUVEAUX paquets suivants seront install&#233;s&#160;: inetutils-ping (...) Param&#233;trage de inetutils-ping (2:1.9.2.39.3a460-3) .. root@NomContainer:~#ping 192.168.100.254 PING 192.168.100.254 (192.168.100.254): 56 data bytes 64 bytes from 192.168.100.254: icmp_seq=0 ttl=64 time=0,163 ms 64 bytes from 192.168.100.254: icmp_seq=1 ttl=64 time=0,163 ms&lt;/textarea&gt;
&lt;p&gt;Et voil&#224;, Juste &#231;a marche !&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_ps'&gt;&lt;p&gt;Pour quitter un container, utilisez la combinaison de touche &lt;kbd&gt;ctrl&lt;/kbd&gt;+&lt;kbd&gt;a&lt;/kbd&gt; puis &lt;kbd&gt;q&lt;/kbd&gt;&lt;/p&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>youtube-dl + vlcopen</title>
		<link>https://blog.roxing.net/youtube-dl-vlcopen</link>
		<guid isPermaLink="true">https://blog.roxing.net/youtube-dl-vlcopen</guid>
		<dc:date>2015-04-07T19:52:19Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>placido</dc:creator>


		<dc:subject>bash</dc:subject>
		<dc:subject>script</dc:subject>
		<dc:subject>linux</dc:subject>
		<dc:subject>vlc</dc:subject>
		<dc:subject>openbox</dc:subject>
		<dc:subject>youtube-dl</dc:subject>
		<dc:subject>youtube</dc:subject>

		<description>&lt;p&gt;S'affranchir efficacement de flash pour lire les vid&#233;os directement dans VLC&lt;/p&gt;

-
&lt;a href="https://blog.roxing.net/billets" rel="directory"&gt;billets&lt;/a&gt;

/ 
&lt;a href="https://blog.roxing.net/bash" rel="tag"&gt;bash&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/script-50" rel="tag"&gt;script&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/gnu-linux" rel="tag"&gt;linux&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/vlc" rel="tag"&gt;vlc&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/openbox-85" rel="tag"&gt;openbox&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/youtube-dl" rel="tag"&gt;youtube-dl&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/youtube" rel="tag"&gt;youtube&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Vous le savez comme moi, flash c'est le mal. Et voici LA solution qui vous fera franchir le pas d'un bannissement (esp&#233;rons permanent) du vil greffon sans pour autant faire une croix sur les vid&#233;os des plateformes d'h&#233;bergement (youtube, dailymotion, vimeo, etc).&lt;/p&gt;
&lt;p&gt;Cela consiste en l'emploi coordonn&#233; de &lt;strong&gt;deux scripts&lt;/strong&gt; qui vont vous permettre de lire directement une vid&#233;o distante dans votre lecteur habituel (VLC, mplayer ou autre).&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;1) Installation de youtube-dl&lt;/h2&gt;
&lt;p&gt;Sous GNU-Linux, la m&#233;thode que je trouve la plus simple est de passer par le gestionnaire d'environnement python pip.&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;sudo apt-get install python-pip
sudo pip install youtube-dl&lt;/textarea&gt;
&lt;p&gt;Veillez &#224; mettre &#224; jour l'application de temps en temps, car les plugins de gestion par plateforme sont nombreux et les modifications fr&#233;quentes.&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;sudo pip install -U youtube-dl&lt;/textarea&gt;&lt;h2 class=&#034;spip&#034;&gt;2) Lancement illico gr&#226;ce &#224; vlcopen.sh&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#034;https://github.com/rg3/youtube-dl&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;youtude-dl&lt;/a&gt; est un super logiciel, efficace dans bien des situations, mais son utilisation en ligne de commande s'av&#232;re &#224; la longue un peu r&#233;dhibitoire pour une utilisation en tant que simple utilisateur.&lt;/p&gt;
&lt;p&gt;D'o&#249; le recours &#224; un second script, mis &#224; disposition par &lt;a href=&#034;https://gist.github.com/swarminglogic/0cd2f6d55390243e693b&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;swarminglogic&lt;/a&gt;,qui va apporter un peu de souplesse d'utilisation et ouvrir la vid&#233;o encore plus vite que si vous y aviez acc&#233;d&#233;e directement depuis la page youtube, gr&#226;ce &#224; un raccourci clavier.&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='95' class='spip_cadre spip_cadre_block' dir='ltr'&gt;#!/bin/bash if [ $# -eq 1 ] ; then path=$1
else clipboard=$(xclip -selection clipboard -o) if [ $(&lt;&lt;&lt;$clipboard grep -P &#034;^http&#034;) ] ; then path=$clipboard else if [ -t 1 ] ; then echo &#034;Bad clipboard path: $clipboard&#034; &gt;&amp;2 else notify-send &#034;Bad clipboard path: $clipboard&#034; fi exit 1 fi
fi #$1 processid, $2 tempdir $3 logfile
function cleanup { echo &#034;-------------------------------------------&#034; echo &#034;Cleaning up&#034; kill -9 $1 &amp;&gt; /dev/null if [ -n &#034;$2&#034; ] ; then rm $2/* ; fi if [ -n &#034;$2&#034; ] ; then rmdir $2 ; fi if [ -n &#034;$3&#034; ] ; then rm $3 ; fi
} echo &#034;Opening $path&#034;
tmpvlcopen=/tmp/vlcopen/
[ ! -d $tmpvlcopen ] &amp;&amp; mkdir $tmpvlcopen
tmpdir=$(mktemp -d --tmpdir=$tmpvlcopen) # If the tmpdir path doesn't include &#034;/tmp/vlcopen&#034; something went bad!
if [ &#034;${tmpdir/$tmpvlcopen}&#034; = &#034;$tmpdir&#034; ] ; then echo &#034;Aborting: failed to create proper temporary directories&#034; &gt;&amp;2 exit 1
fi cd $tmpdir
echo &#034;Temporary directory: $tmpdir&#034;
echo &#034;Getting video: $path&#034;
downloadlog=$(tempfile)
(youtube-dl --restrict-filenames --no-part &#034;$path&#034; &amp;&gt; $downloadlog)&amp;
processId=$!
echo &#034;ProcessID: $processId&#034;
echo &#034;Waiting for file creation&#034; count=0
while [ $(ls -1 | wc -l) -eq 0 ] ; do # check if process is done. if ! kill -0 $processId &amp;&gt;/dev/null ; then if [ -t 1 ] ; then echo &#034;-------------------------------------------&#034;&gt;&amp;2 echo &#034;Error: youtube-dl finished without output.&#034; &gt;&amp;2 echo &#034;Error: Bad URL?&#034; &gt;&amp;2 echo &#034;---------------- Download Log -------------&#034;&gt;&amp;2 cat $downloadlog &gt;&amp;2 else notify-send &#034;Bad URL: $path $(cat $downloadlog)&#034; fi cleanup $processId &#034;$tmpdir&#034; &#034;$downloadlog&#034; exit 0 fi sleep 0.5 ((count++)) if [ $count -eq 20 ] ; then if [ -t 1 ] ; then echo &#034;Timed out&#034; &gt;&amp;2 else notify-send &#034;Timed out&#034; fi exit 0 fi
done sleep 0.1
echo &#034;Opening file: $(ls -1 | head -n 1)&#034;
vlc &#034;$(ls -1 | head -n 1)&#034; &amp;&gt;/dev/null
cleanup $processId &#034;$tmpdir&#034; &#034;$downloadlog&#034;&lt;/textarea&gt;
&lt;p&gt;Ce script se comporte comme une capsule pour youtube-dl. Il va analyser le contenu du presse-papier, et s'il d&#233;tecte une url prise en charge, va cr&#233;er un r&#233;pertoire temporaire, y t&#233;l&#233;charger la vid&#233;o, l'ouvrir avec VLC apr&#232;s quelques instants et supprimer automatiquement tous les fichiers temporaires &#224; la fermeture.&lt;/p&gt;
&lt;p&gt;Il suffit d'enregistrer le script (sous le nom vlcopen.sh par exemple) dans un r&#233;pertoire inclus dans votre &lt;i&gt;$PATH&lt;/i&gt;, le rendre ex&#233;cutable (&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;chmod +x vlcopen.sh&lt;/code&gt;) et d'associer un raccourci clavier &#224; son ex&#233;cution.&lt;/p&gt;
&lt;p&gt;Typiquement sous openbox, j'ai rajout&#233; une section comme suit &#224; mon rc.xml.&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='9' class='spip_cadre spip_cadre_block' dir='ltr'&gt;&lt;keybind key=&#034;W-y&#034;&gt; &lt;action name=&#034;Execute&#034;&gt; &lt;startupnotify&gt; &lt;enabled&gt;true&lt;/enabled&gt; &lt;name&gt;vlcopen&lt;/name&gt; &lt;/startupnotify&gt; &lt;command&gt;vlcopen.sh&lt;/command&gt; &lt;/action&gt;
&lt;/keybind&gt;&lt;/textarea&gt;
&lt;p&gt;D&#232;s lors, dans les faits, lorsque je veux regarder une vid&#233;o, je fais un&lt;i&gt; clic-droit &gt; copier l'url de la page&lt;/i&gt; soit sur la page courante, soit sur le lien &#224; analyser, puis &lt;kbd&gt;super&lt;/kbd&gt; + &lt;kbd&gt;y&lt;/kbd&gt; (oui j'ai choisi &lt;kbd&gt;y&lt;/kbd&gt; pour &#034;youtube&#034; mais &#224; vous d'adapter au besoin), et voil&#224; !&lt;/p&gt;
&lt;p&gt;Seul b&#233;mol, si la vid&#233;o est longue et que vous &#234;tes impatient, vous ne pourrez pas avancer directement la lecture &#224; un point qui n'a pas encore &#233;t&#233; t&#233;l&#233;charg&#233;.&lt;/p&gt;&lt;/div&gt;
		&lt;div class="hyperlien"&gt;Voir en ligne : &lt;a href="https://gist.github.com/swarminglogic/0cd2f6d55390243e693b" class="spip_out"&gt;github.com/swarminglogic&lt;/a&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>



</channel>

</rss>
