Pour ne pas me poser la question chaque fois :
iconv -f iso-8859-1 -t UTF-8 < monfichier.8859 > monfichier.utf8
jeudi 29 juillet 2010
Par Flyounet le jeudi 29 juillet 2010, 16:35 - Documentations
Pour ne pas me poser la question chaque fois :
iconv -f iso-8859-1 -t UTF-8 < monfichier.8859 > monfichier.utf8
jeudi 27 mai 2010
Par Flyounet le jeudi 27 mai 2010, 23:54 - Documentations
Vaste question qui ne me semble reposer que sur 3 réponses :
stat,file,readlink.stat :fly@Capote:~/tmp$ stat /tmp/totoz File: `/tmp/totoz' -> `/tmp/pipo' Size: 40 Blocks: 0 IO Block: 4096 lien symbolique Device: 808h/2056d Inode: 3744 Links: 1 Access: (0777/lrwxrwxrwx) Uid: ( 1000/ fly) Gid: ( 1000/ fly) Access: 2010-05-27 23:42:00.590730266 +0200 Modify: 2010-05-26 23:34:46.978029853 +0200 Change: 2010-05-26 23:34:46.978029853 +0200
On constate que le nom du fichier pointé est indiqué en première ligne. Donc, la ligne suivante devrait suffire :
fly@Capote:~/tmp$ a="$(stat /tmp/totoz | head -1 | awk '{print $NF}')" ; echo ${a}
`/tmp/pipo'
C'est bien mais pas top avec les quotes, d'où l'astuce suivante :
fly@Capote:~/tmp$ i=${#a}; echo ${a:1:(($i-2))}
/tmp/pipo
file :fly@mst:~/tmp$ file /tmp/totoz /tmp/totoz: symbolic link to `/tmp/pipo'
On constate maintenant qu'une seule ligne est retournée, mais il y a toujours ce problème de quotes. Donc, on résout de la même manière :
fly@mst:~/tmp$ a="$(stat /tmp/totoz | awk '{print $NF}')" ; echo ${a}
`/tmp/pipo'
fly@mst:~/tmp$ i=${#a}; echo ${a:1:(($i-2))}
/tmp/pipo
readlink :fly@Capote:~/tmp$ readlink /tmp/totoz /tmp/pipo
Bon, ben voilà; finalement je le préfère ce petit readlink (et de loin)...
lundi 3 mai 2010
Par Flyounet le lundi 3 mai 2010, 17:58 - Outils & Développements
Because I need it, I implement the statusBar function.
I tested with KSH and Bash and it seems to work with both.
+ statusBar : generate the informations to have a status bar. eg. 0%....5%....10%.... and so on until 100%
jeudi 29 avril 2010
Par Flyounet le jeudi 29 avril 2010, 00:14 - Outils & Développements
As I am writting more Shell code every day. I often need to use color to show to my users the huge mistake they're trying to put with my Shell script[1]
As my wife calls me Red Fish[2], I rarely figure what is the reference for Shell colors. That's why I made this little Script.
v0.01 [30/03/2010] Flyounet [@Home] :
> Initiale Release
> Prerequisites : F01 common.lib (at least v0.24)
v0.02 [21/04/2010] Flyounet [@Home] :
> Now Under DSSL & GPLv3
> set ts=4 ; set noai
+ Add information how to quit
* When run with Ksh, it show errors about declare... Erased them &
use typeset instead.
v0.03 [27/04/2010] Flyounet [@Home] :
+ Added the work 'effect' in the rainbowTable function
> Now use the F01common.lib v0.27
mardi 27 avril 2010
Par Flyounet le mardi 27 avril 2010, 14:00 - Outils & Développements
Due to lots of bugs in the previous version, I'm happy to show you this one with I hope no bug inside.
Nearly all tests have been done with Ksh, and unfortunately I forget to test under Bash, and that's the result... Sorry.
> Problem with the Bash version. If old Bash is use BASH_SOURCE doesn't exist... Now looks for the files instead of trying to load it directly to avoid, error messages. Search in above and under directory. * F01Version return the path of the Bash extension. * trim : Huge bug ! Instead of unsetting __ltrim & __trim, i unsetted functions ltrim & rtrim... > ltrim & rtrim don't work under Bash ! ARGGGGGGGGGGGGG !!!!! * iniParseFile : In case of a line only containing a left var with incorrect character (like a dash -), the awk version sent an error to the output (and under Ksh stops). Function has been rewritted purely in Shell... * sprintf : Problem under Bash. Bash doesn't support only one _ as a variable name : Corrected. * iniGetValue : Not use grep anymore. Only Shell ! * fileCheck : Problem under Bash. Bash doesn't support only one _ as a variable name : Corrected. * logMe : Problem under Bash. Bash doesn't support only one _ as a variable name : Corrected. > Now only logRotate use non-shell programs ! + myError : If none args then empty __lastError
jeudi 22 avril 2010
Par Flyounet le jeudi 22 avril 2010, 21:21 - Outils & Développements
J'ai oublié de publier les précédentes versions, aussi je vous présente cette nouvelle version.
Après pas mal de boulot, il ne reste plus que la fonction iniParseFile qui continue d'utiliser awk, sinon tout le reste n'utilise plus que le Shell avec lequel il a été exécuté.
Et j'en ai profité pour passer le code sous GPLv3 et DSSL (disponible là).
v0.23 [30/01/2010] Flyounet [@Home] :
* fileCreate: In case of error during touch an ugly message is now
sent to /dev/null (for chmod too)
v0.24 [03/03/2010] Flyounet [@Home] :
> First svn version
v0.25 [01/04/2010] Flyounet [@Home] :
+ textFill: equivalent to perl "string" x number
+ textBox: put a caracter all around a text
* textBox: not working with KSH
+ _str2lower & _str2upper have been added, cause to KSH that doesn't
support Case modification of Bash.
* textBox: now use _str2*er and work with KSH
* iniGetValue: Remove the call to awk (Yeah ! Love shell !)
v0.26 [22/04/2010] Flyounet [@Home] :
+ parseHeadersForHelp: Print the headers of each function in a file.
Headers are based on a first line containing a #F??.
> textBox: Only works with KSH... Fuck !
* textBox: A subfile is needed to make it works with bash.
J'ai tenté de la rendre la plus indépendante possible de sed et awk qui sont assez incontournable[1]. Elle fonctionne sous bash ou ksh.
Ci-dessous un aperçu des variables et fonctions :

En annexes sont fournis les fichiers indépendants, ainsi qu'une archive regroupant le tout.
Les fichiers sont :
common.lib_v0.26.tar.bz2 : L'archive qui contient tous les fichiers,common.lib.README : Une micro documentation,common.lib : La librairie Shell,_common4bash.lib : L'extension pour Bash de la fonction textBox(),doc/common.lib.mm : La liste de fonctions et variables sous forme de fichier Free(Mind|Plane),doc/common.lib.png : La liste de fonctions et variables sous forme de fichier image,test/libHelp.sh : Un script de test qui retourne de l'aide sur les fonctions,test/test_common-lib.conf : Un fichier de configuration pour exécuter le script de test,test/test_common-lib.sh : Un script de test, qui exécute quasiment toutes les fonctions de la librairie.26ecc237a2dcc4f74f3a21ed3db809d6 _common4bash.lib 2c540c2a2516829a7f0796ebdc789979 common.lib 07d486cdcf8c5623a2a17b7183c0b7be common.lib.README dde7d1862448a90eaadfd8e2ee5ec811 doc/common.lib.png 606b099e82e48e846c71555b2827237a doc/common.lib.mm d04d3958e604ffdd69d5387d6c95110f test/libHelp.sh 51504fd29f5fd1aa73137d73657536ae test/test_common-lib.conf 21793fdcd0cc20cf16743e223d157a63 test/test_common-lib.sh 4cef5fce3dc9d224333540b91bd53f61 F01common.lib_v0.26.tar.bz2
123dfbdbce15d27c0d5ca8a927d5d2fe0a575b41 _common4bash.lib 72e7de48dd30ef059bc16bbd809536505de62cdf common.lib fa9dead34dbc604a49ddf15b81805d288a9a0157 common.lib.README 0acab9ac384dfb9ce9e30baa4195cd2088fc069b doc/common.lib.png d32b6a8c2ad02816031b1e2f39dde6d7f41818af doc/common.lib.mm f8f1bf4afb8e54ec122f5f6e67a8a0bba72e98c8 test/libHelp.sh 34a05abbd28321b353c34b4003b7e001afd8a1b0 test/test_common-lib.conf db07298d8710c78ca681dc4496408ee4901aa000 test/test_common-lib.sh b849101928c71eec69f7623b233f369bf0dcfd3c F01common.lib_v0.26.tar.bz2
Ci-dessous la liste des fonctions :
#F01.01.03 #Function : ps2, Print to screen string passed in argument #F01.02.02 #Function : p2st, Print to screen string passed in argument, with Time before #F01.03.01 #Function : oops, Print to screen string passed in argument, and exit 1 #F01.04.01 #Function : oopst, Print to screen string passed in argument, with time before, and exit 1 #F01.05.06 #Function : myDebug, Print to screen string passed in argument if debug level is reach #F01.06.02 #Function : myError, Store error in variables #F01.07.02 #Function : fileCheck, Check file for presence and permission #F01.08.02 #Function : fileCreate, Create file with permissions if asked #F01.09.01 #Function : fileDelete, Delete the specified file #F01.10.04 #Function : iniGetValue, Get the value from a specified INI file #F01.11.04 #Function : iniParseFile, Set all values from a specified INI file #F01.12.03 #Function : trim, Remove all blank from begining and end #F01.13.03 #Function : logRotate, Transfer the begining of a file to the rotationned version. #F01.14.01 #Function : logMe, Send the log to the log files #F01.15.01 #Function : logMeV, Send the log to the verbose log files #F01.16.03 #Function : isFunction, Verify that the function exists #F01.17.07 #Function : sprintf, return a formatted string #F01.18.02 #Function : ltrim, Remove all blank from begining #F01.19.02 #Function : rtrim, Remove all blank from end #F01.20.01 #Function : _str2lower, lower all characters #F01.21.01 #Function : _str2upper, upper all characters #F01.22.01 #Function : textFill, Create a text filled by the caracter #F01.23.03 #Function : textBox, Create a box around the text #F01.24.05 #Function : parseHeadersForHelp, Print headers of function for a given file #F01.99.02 #Function : F01Version, Return/Print version information #F01.23-1.02 #Function : _textBox4Bash, Create a box around the text
[1] Mes fonctions préférées sont sans aucun doute : sprintf et les *trim.
lundi 25 janvier 2010
Par Flyounet le lundi 25 janvier 2010, 22:39 - Outils & Développements
Après plusieurs mois à codouiller[1] des petits bouts de script Shell, j'ai décidé d'en faire librairie : F01common.lib.
J'ai tenté de la rendre la plus indépendante possible de sed et awk qui sont assez incontournable[2]. Elle fonctionne sous bash ou ksh.
Ci-dessous un aperçu des variables et fonctions :

En annexes sont fournis les fichiers indépendants, ainsi qu'une archive regroupant le tout.
Les fichiers sont :
common.lib.README : Une micro documentation,common.lib_v0.22 : La librairie Shell,common.lib_v0.22.mm : La liste de fonctions et variables sous forme de fichier Free(Mind|Plane),common.lib_v0.22.png : La liste de fonctions et variables sous forme de fichier image,common.lib_v0.22.tar.bz2 : L'archive qui contient tous les fichiers,test_common-lib.conf : Un fichier de configuration pour exécuter le script de test,test_common-lib.sh : Un script de test, qui exécute quasiment toutes les fonctions de la librairie.Les md5 des fichiers :
16fc140f5a69acdcbe5e1a21be185772 common.lib.README 3f5c5a78a3bc2da85e86395d65b88188 common.lib_v0.22 31bd6704a048d38ba1479ec42a0e97b2 common.lib_v0.22.mm d273f4afd7a95aa8aa899e53f5dca904 common.lib_v0.22.png 1d0c7dd2ce3d264a14bfd442dadf0d24 common.lib_v0.22.tar.bz2 4c550b4593b12cd849af697313139e33 test_common-lib.conf 5520dd6882f166f4688ffef981187b41 test_common-lib.sh
Les sha1 des fichiers :
076770bedcfef3cc2568b0d00185c47a5c84ab89 common.lib.README b9f251ee69112e2357f716fac604f3bb3d73b627 common.lib_v0.22 b7cf30403aec92271678e14f79af9a4fd1f82df8 common.lib_v0.22.mm 30790cd148091e996415a5f620e5128feb40d986 common.lib_v0.22.png 832f5c6938657396f1361f80ebcb327f31956bd1 common.lib_v0.22.tar.bz2 7113349a4f5d1ddd74e790f4c2fa782ace0af949 test_common-lib.conf 7be004717f6ca2f9281955888c011ac6209b03e7 test_common-lib.sh
mardi 19 janvier 2010
Par Flyounet le mardi 19 janvier 2010, 23:04 - Documentations
Si vous avez utilisé le précédent billet pour vous faire la main sur le XDCC, alors vous risquez d'avoir, comme moi, besoin de fichiers volumineux.
Dans mon joli répertoire /usr/local/src/IRC_dev/XDCC_offers :
for i in $(seq 1 10); do let j=15*$i; let k=1024*$j; echo "File: $j - Size : $k"; dd if=/dev/urandom of=file_${j}MiB bs=1024 count=$k;done
Ligne qui peut se décomposer de la sorte :
for i in $(seq 1 10)
do
let j=15*$i; let k=1024*$j
echo "File: $j - Size : $k"
dd if=/dev/urandom of=file_${j}MiB bs=1024 count=$k
done
Ce qui a pour résultat :
$ ls -lh | awk '{print $5 "\t" $NF}'|tail
105M file_105MiB
120M file_120MiB
135M file_135MiB
150M file_150MiB
15M file_15MiB
30M file_30MiB
45M file_45MiB
60M file_60MiB
75M file_75MiB
90M file_90MiBPar Flyounet le mardi 19 janvier 2010, 01:25 - Outils & Développements
Depuis pas mal de temps, je codouille[1] en Perlouille[2] pour le plus beau, le trop méga génial hyper
; j'ai bien sûr nommé IRSSI.
Comme je n'ai pas forcément Internet partout où je vais, il faut bien que je puisse continuer à Perlouiller, du coup ci-dessous une petite explication pour se faire un environnement IRC quickly.
/usr/local/src/IRC_dev/../configure --prefix=/usr/local/src/IRC_dev/inspIRCd make clean && make && make install
Pour résumer, on indique où vont se trouver les binaires après installation, on compile et on installe. Comptez 19 bonnes minutes sur mon Athlon mobile 2000+, mes 512 MiB de RAM et dont la RunQueue est en moyenne de 2 en permanence, ou alors 7 minutes sur un Sempron 3000+ qui fait semblant de router des paquets IP.
Si c'est pour du test, il n'y a pas grand chose à modifier ; vous copiez le fichier inspircd.conf.example en inspircd.conf dans le sous-répertoire conf/ et vous modifiez les quelques lignes suivantes :
name="localhost.localdomain" description="Mon Test IRC" name="Me" nick="myUglyNick" address="127.0.0.1"
Pour la partie secret :
allow="192.168.36.15"
Pour la partie main :
allow="127.0.0.1"
Et n'oubliez pas de commenter les lignes qui commencent par <die value="....
Comme je suis pas un relou, d'une part je ne laisse pas ce genre de programme tourner en root, mon user me suffit, et d'autre part je le fais tourner en debug dans un screen[3].
$ ./inspircd help Usage: ./inspircd (start|version|restart|checkconf|status|cron|help|rehash|stop) Developer arguments: (screendebug|valdebug|debug|valdebug-unattended|screenvaldebug)
Exemple :
$ ./inspircd debug [...] InspIRCd is now running as 'localhost.localdomain'[559] with 1024 max open sockets Mon Jan 18 23:51:47 2010: Keeping pseudo-tty open as we are running in the foreground. Mon Jan 18 23:51:47 2010: Startup complete as 'localhost.localdomain'[559], 1024 max open sockets
D'abord je modifie le Makefile.config pour avoir mon installation où je veux. Je change INSDIR = /usr/local/src/IRC_dev/iroffer.
mkdir /usr/local/src/IRC_dev/iroffer ./Configure make clean && make && sudo make install sudo chown monuser:mongroup /usr/local/src/IRC_dev/iroffer/iroffer
Faites fi de tout ces Warning qui font chier, et vous aurez un beau binaire.
Si c'est pour du test, il n'y a pas grand chose à modifier ; vous copiez le fichier sample.conf en tupeuxpastest.conf dans le répertoire du binaire et vous modifiez les quelques lignes suivantes :
connectionmethod direct server 127.0.0.1 channel #myTest -plist 2 -plistoffset 3 -pformat full user_nick mybotDCC user_realname My Bot # Pour la valeur suivante, c'est à voir pour vos tests downloadhost *!*@* # C'est du local overallmaxspeed 600 #adminpass montest (généré avec iroffer -c) adminpass Hffrt/W5SUFZk adminhost *!~me@*.domain.com adminhost *!me@192.168.10.# timestampconsole
Comme je suis pas un relou, d'une part je ne laisse pas ce genre de programme tourner en root, mon user me suffit, et d'autre part je le fais tourner en debug dans un screen[4].
$ ./iroffer
./iroffer: no configuration file specifed
iroffer v1.3.b11 [20051213023024] by PMG, see http://iroffer.org/
Usage: ./iroffer [-vc] [-bdkns] [-u user] [-t dir] configfile [ configfile ... ]
-v Print version and exit.
-c Generate encrypted password and exit.
-d Increase debug level
-b Go to background mode
-k Attempt to adjust ulimit to allow core files
-n No colors in foreground mode
-s No screen manipulation in foreground mode
-u user Run as user (you have to start as root).
-t dir Chroot to dir (you have to start as root).
Exemple :
$ ./iroffer -d tupeuxpastest.config [...] ** 2010-01-19-00:24:04: Attempting Connection to 127.0.01 (direct) ** 2010-01-19-00:24:04: Connecting to 127.0.0.1:6667 ** 2010-01-19-00:24:04: ircserver socket = 5 ** 2010-01-19-00:24:04: Server Connection Established, Logging In ** 2010-01-19-00:24:04: ourip = 127.0.0.1 ** 2010-01-19-00:24:04: <SND<: NICK mybotDCC [...] ** 2010-01-19-00:24:54: <SND<: PING localhost.localdomain ** 2010-01-19-00:24:54: >IRC>: :localhost.localdomain PONG localhost.localdomain :localhost.localdomain [ Stat: 0/20 Sls, 0/10 Q, 0.0K/s Rcd, 0 SrQ (Bdw: 0K, 0.0K/s, 0.0K/s Rcd) ] [ iroffer (mybotDCC) >
M'en fous ! Un sudo apt-get install irssi m'a suffi.
[1] Concaténation du verbe coder et du verbe merdouiller.
[2] Concaténation de Perl (langage de programmation) et de couilles (diminutif de boulettes, et dans de nombreux cas aussi appelées "Brave merde").
[3] Une des meilleures commande au monde...
[4] Une des meilleures commande au monde... Sans déconner, j'ai grave l'impression d'un déjà vu, non ?!
mercredi 16 septembre 2009
Par Flyounet le mercredi 16 septembre 2009, 13:09 - Documentations
Bien sûr on commence par un :
apt-get install a2ps
Puis on y va direct :
a2ps --columns=1 -B -R -T2 accountHebergement_tataJeanine.txt -o - | ps2pdf - accountHebergement_tataJeanine.pdf
a2ps :
--columns=1 pour que ça remplisse la feuille,-B pour ne pas avoir de Header,-R pour forcer la mise en page en mode Portrait,-T2 pour forcer les tabulations à 2 caractères,-o - pour forcer l'envoi vers la sortie standard.ps2pdf :
- pour forcer la transformation de l'entrée standard.mardi 8 septembre 2009
Par Flyounet le mardi 8 septembre 2009, 17:00 - Documentations
Pour mon boulot[1], j'ai un léger besoin de Webalizer. Du coup, plutôt que d'utiliser la version binaire[2], j'ai besoin d'en avoir une version static[3]. Donc voici la ligne de configuration pour mes tests :
./configure --prefix=/tmp/webalizer-bin --enable-static --with-geodb=/tmp/webalizer-bin/geodb --enable-geoip --enable-bz2
Je poursuis d'un make ; make install qui se banane comme une vieille bouse en m'insultant avec de vieilles vannes sur la lib pthread :
/usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/libdb.a(os_addrinfo.o): In function `__os_getaddrinfo': (.text+0x44): warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking /usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/libdb.a(os_pid.o): In function `__os_id': (.text+0x2a): undefined reference to `pthread_self' /usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/libdb.a(os_yield.o): In function `__os_yield': (.text+0xc9): undefined reference to `pthread_yield' /usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/libdb.a(mut_pthread.o): In function `__db_pthread_mutex_destroy': (.text+0x38): undefined reference to `pthread_mutex_destroy' /usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/libdb.a(mut_pthread.o): In function `__db_pthread_mutex_destroy': (.text+0x5f): undefined reference to `pthread_cond_destroy' /usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/libdb.a(mut_pthread.o): In function `__db_pthread_mutex_unlock': (.text+0x159): undefined reference to `pthread_mutex_unlock' /usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/libdb.a(mut_pthread.o): In function `__db_pthread_mutex_unlock': (.text+0x1c4): undefined reference to `pthread_mutex_lock' /usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/libdb.a(mut_pthread.o): In function `__db_pthread_mutex_unlock': (.text+0x1e3): undefined reference to `pthread_cond_signal' /usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/libdb.a(mut_pthread.o): In function `__db_pthread_mutex_lock': (.text+0x278): undefined reference to `pthread_mutex_lock'
Pour faire simple la manip est de modifier le Makefile :
Avant :
LIBS = -lGeoIP -lbz2 -ldb -lgd -lpng -lz -lm WCMGR_LIBS = -ldb
Après :
LIBS = -lGeoIP -lbz2 -ldb -lgd -lpng -lz -lm -lpthread WCMGR_LIBS = -ldb -lpthread
[1] Oui ça m'arrive d'y aller...
[2] Qui est linkée dynamiquement.
[3] Oui, c'est une grande invention de décideur... Je compile sur ma machine et utilise les binaires générés sur une autre qui n'a pas les libs, car c'est une machine de Production... Cherchez pas, il n'y a pas de vrai raison derrière (et je ne dis pas cela parce que le décideur vient du monde Windows).
mercredi 10 septembre 2008
Par Flyounet le mercredi 10 septembre 2008, 18:26 - Documentations
Comme je l'ai écrit dans ce billet Les joies du 64 bits sous AIX avec WebSphere
voici quelques commandes à se rappeler :
$ dump -X64 -H path_to_binary
$ dump -X64 -H path_to_binary
$ getconf HARDWARE_BITMODE
$ getconf KERNEL_BITMODE