WordPress : Export vers un livre en PDF

5 x served & 1 x viewed

J’ai fait une petite sélection :

J’ai donc fait un test avec celui qui me semble être le meilleur : Blog booker : https://www.blogbooker.com/export_wordpress.php .

La première étape consiste à faire un export en XML :

Le fichier fait 35 Mo pour mon blog complet.

La seconde phase, c’est pas ici :  https://www.blogbooker.com/wordpress.php :

On indique où est le fichier XML et le lien vers le blog … et on patiente.

On se retrouve avec un Livre de 934 pages, à noter qu’il y a beaucoup d’erreur mais il n’est pas possible d’avoir la liste afin de comprendre et corriger. Le PDF fait 12 Mo, donc 1/3 du fichier XML … autant dire qu’il y a du avoir quelques ratés. Normalement j’ai 1123 articles, et il en compte 291 (25%). Mais j’ai utilisé la version Free, donc c’est normal d’avoir une limite. 

L’export des tableaux HTML ne fonctionne pas :

On va dire que c’est un bon début …

A suivre.

 

Open Sky de Valbonne : c’est David Lisnard qui en parle le mieux

9 x served & 0 x viewed

Voir l’article : https://www.nicematin.com/politique/david-lisnard-revient-a-la-charge-sur-les-projets-ecotone-et-open-sky-270524 

« Le futur centre commercial des Clausonnes construit sur des terrains essentiellement naturels, présenté comme environnemental quand il s’agit d’imperméabilisation des sols (on connaît les conséquences), de saturation routière supplémentaire, de gâchis et banalisation des paysages », a ironisé David Lisnard sur Twitter.

Voir aussi la lettre d’Estrosi :

Sachant que ce même Ciotti a écrit :

Misère.

SWAP sur Raspbian

19 x served & 2 x viewed

Lire le lien : https://raspberrypi.stackexchange.com/questions/84390/how-to-permanently-disable-swap-on-raspbian-stretch-lite (Merci Michel)

J’ai fait un petit script pour faire un free -h et un uname -r sur tous les serveurs :

$ ./ssh-distant-2.sh 
Cnx sur 127.0.0.1 
4.14.34-6-osmc total used free shared buff/cache available Mem: 746M 138M 231M 20M 376M 539M Swap: 0B 0B 0B
Cnx sur 192.168.0.70 
4.14.50+ total used free shared buff/cache available Mem: 433M 28M 51M 5,7M 353M 351M Swap: 99M 0B 99M
Cnx sur 192.168.0.71 
4.14.71-v7+ total used free shared buff/cache available Mem: 927M 183M 138M 46M 604M 633M Swap: 99M 768K 99M
Cnx sur 192.168.0.72 
4.14.50-v7+ total used free shared buff/cache available Mem: 927M 415M 157M 17M 353M 429M Swap: 99M 0B 99M
Cnx sur 192.168.0.73 
4.14.50-v7+ total used free shared buff/cache available Mem: 927M 153M 337M 17M 435M 691M Swap: 99M 0B 99M
Cnx sur 192.168.0.74 
4.14.70-v7+ total used free shared buff/cache available Mem: 927M 158M 127M 57M 641M 647M Swap: 99M 768K 99M

Si je regarde la valuer dans le fichier /etc/dphys-swapfile, via un script : cat /etc/dphys-swapfile | grep CONF_SWAPSIZE

$ ./ssh-distant-3.sh 
Cnx sur 127.0.0.1 
cat: /etc/dphys-swapfile: Aucun fichier ou dossier de ce type
Cnx sur 192.168.0.70 
CONF_SWAPSIZE=100
Cnx sur 192.168.0.71 
CONF_SWAPSIZE=100
Cnx sur 192.168.0.72 
CONF_SWAPSIZE=100
Cnx sur 192.168.0.73 
CONF_SWAPSIZE=100
Cnx sur 192.168.0.74 
CONF_SWAPSIZE=100

Le problème c’est l’écriture sur la carte microSD, je veux être sûr de ne pas user rapidement la carte.

A suivre.

PSSH/SSHPASS : Lancer des scripts en parallèle.

14 x served & 3 x viewed

Etape n°1 :

Installation, facile avec pip :

$ sudo pip install pssh
Collecting pssh
  Downloading https://files.pythonhosted.org/packages/60/9a/8035af3a7d3d1617ae2c7c174efa4f154e5bf9c24b36b623413b38be8e4a/pssh-2.3.1.tar.gz
Installing collected packages: pssh
  Running setup.py install for pssh ... done
Successfully installed pssh-2.3.1

Etape n°2 :

Utilisation simple, tous les serveurs ont le même login (par exemple pi2base) et le même mot de passe :

$ cat pssh-hosts
192.168.0.80  
192.168.0.70 
192.168.0.71  
192.168.0.72   
192.168.0.73 
192.168.0.74 
$ pssh -h pssh-hosts -l pi2base -A -i "hostnamectl"

On fait donc la commande hostnamectl via le login pi2base, sur tous les serveurs dans le fichier pssh-hosts.
Plus complexe, les utilisateurs sont différents mais les mots de passe sont identiques :
pi2base) et le même mot de passe :

$ cat pssh-hosts
user1@192.168.0.80  
user2@192.168.0.70 
user3@192.168.0.71  
user4@192.168.0.72   
user5@192.168.0.73 
user6@192.168.0.74 
$ pssh -h pssh-hosts  -A -i "hostnamectl"

Encore plus complexe, sans demander les mots de passe :

$ apt-get install sshpass pssh

Ensuite il suffit de faire un script :

$ cat ssh-distant.sh 
#!/bin/bash

serveur[1]=127.0.0.1
login[1]=xxxx
password[1]=zzzz
serveur[2]=192.168.0.70
login[2]=xxxx
password[2]=zzzz
serveur[3]=192.168.0.71
login[3]=xxxx
password[3]=zzzz
serveur[4]=192.168.0.72
login[4]=xxxx
password[4]=zzzz
serveur[5]=192.168.0.73
login[5]=xxxx
password[5]=zzzz
serveur[6]=192.168.0.74
login[6]=xxxx            
password[6]=zzzz

for index in 1 2 3 4 5 6
do
	printf " cnx sur ${login[index]} \n"
	output=$(sshpass -p ${password[index]} ssh -o StrictHostKeyChecking=no ${login[index]}@${serveur[index]} ' hostnamectl ' 2>&1)
	#echo "$?" 
	echo $output
done

history -c

La commande finale, permet de supprimer l’historique … sinon le mot de passe est en clair dans l’historique.
Par exemple :

$ ./ssh-distant.sh 
 cnx sur xxxxx 
Static hostname: osmc Icon name: computer Machine ID: 1671b5b617884fdf85a465a5ac731b8f Boot ID: a312213621b54c2f953202f480a070d7 Operating System: Open Source Media Center Kernel: Linux 4.14.34-6-osmc Architecture: arm
 cnx sur xxxxx 
Static hostname: raspberrypi Icon name: computer Machine ID: 0b646f6436cf4076bc65ccf9a7517e6c Boot ID: dc978e5c9f4d41a5b4b126b2dd7e923f Operating System: Raspbian GNU/Linux 9 (stretch) Kernel: Linux 4.14.50+ Architecture: arm
 cnx sur xxxxx 
Static hostname: RASP3 Icon name: computer Machine ID: 5c7798e1c4144782bfc8e591138cce5f Boot ID: 7cd79bf1fa26484d8ff98b2cba06726c Operating System: Raspbian GNU/Linux 9 (stretch) Kernel: Linux 4.14.71-v7+ Architecture: arm
 cnx sur xxxxx 
Static hostname: RASP4 Icon name: computer Machine ID: b48f53ca95ae44f8bfc503090332c390 Boot ID: c66f163ff98e4d62b0f855b07a86e0ec Operating System: Raspbian GNU/Linux 9 (stretch) Kernel: Linux 4.14.50-v7+ Architecture: arm
 cnx sur xxxxx 
Static hostname: RASP5 Icon name: computer Machine ID: 45ed4ac581ef4f3fb099a4c8791a4787 Boot ID: e46e4361b8e44dae9f47b812525983ba Operating System: Raspbian GNU/Linux 9 (stretch) Kernel: Linux 4.14.50-v7+ Architecture: arm
 cnx sur xxxxx 
Static hostname: RASP6 Icon name: computer Machine ID: 072b46046e3a4cdea183a0f7d018a2a3 Boot ID: 0143eb44792f457dbe288e4bbd67a973 Operating System: Raspbian GNU/Linux 9 (stretch) Kernel: Linux 4.14.70-v7+ Architecture: arm

Sinon il reste Ansible, mais c’est beaucoup plus lourd :

$ sudo pip install ansible

… mais aussi plus performant. Il suffit de copier le fichier des hosts (pssh-hosts dans mon exemple) dans /etc/ansible/hosts . Sachant qu’il faut faire une clef : ssh-keygen, et ensuite il faut copier la clef : ssh-copy-id -i ~/.ssh/id_rsa.pub root@ip-host .

Le problème de ansible, c’est que sur Raspbian par défaut on a une erreur d’installation :

$ sudo pip install ansible
...
arm-linux-gnueabihf-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -Wdate-time -D_FORTIFY_SOURCE=2 -g -fdebug-prefix-map=/build/python2.7-ttpzh8/python2.7-2.7.13=. -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DUSE__THREAD -DHAVE_SYNC_SYNCHRONIZE -I/usr/include/ffi -I/usr/include/libffi -I/usr/include/python2.7 -c c/_cffi_backend.c -o build/temp.linux-armv7l-2.7/c/_cffi_backend.o
      c/_cffi_backend.c:15:17: fatal error: ffi.h: Aucun fichier ou dossier de ce type
       #include 
                       ^
      compilation terminated.
      error: command 'arm-linux-gnueabihf-gcc' failed with exit status 1
  
      ----------------------------------------
  Command "/usr/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-JTBUnP/cffi/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-record-6maTdm/install-record.txt --single-version-externally-managed --prefix /tmp/pip-build-env-JcZXMj --compile" failed with error code 1 in /tmp/pip-install-JTBUnP/cffi/
  
  ----------------------------------------
Command "/usr/bin/python -m pip install --ignore-installed --no-user --prefix /tmp/pip-build-env-JcZXMj --no-warn-script-location --no-binary :none: --only-binary :none: -i https://pypi.org/simple -- setuptools wheel "cffi>=1.4.1; python_implementation != 'PyPy'"" failed with error code 1 in None

A suivre.

Développement en C sous Linux : pthread et la fonction sleep().

15 x served & 2 x viewed

Un petit exemple vaut mieux que de grands discours, voici le source en C :

#include 
#include 
#include 
#include <sys/time.h>
#include <sys/types.h>
#include 
static long debut = 0;
void* longue_pause(void* a){
        pid_t t = getpid();
        printf("pid = %d\n",(int)t);
        printf("thread longue_pause %d debut : %ld\n",(int)pthread_self(),time(0)-debut);
        sleep(10);
        printf("thread longue_pause %d fin : %ld\n",(int)pthread_self(),time(0)-debut);
}
void* petites_pauses(void* a){
	int i = 0;
        pid_t t = getpid();
        printf("pid = %d\n",t);
        printf("thread petites_pauses %d debut : %ld \n",(int)pthread_self(), time(0)-debut);
        for(; i < 10 ;++i){
                printf("thread petites_pauses %d en cours : %ld \n",(int)pthread_self(), time(0)-debut);
                sleep(1);
        }
}
int main(){
        pthread_t longue;
        pthread_t petit1;
        pthread_t petit2;
        debut = time(0);
        pthread_create(&longue,NULL,longue_pause,NULL);
        pthread_create(&petit1,NULL,petites_pauses,NULL);
        pthread_create(&petit2,NULL,petites_pauses,NULL);
	sleep(8);
	printf("Debut join: %ld\n",time(0)-debut);
        pthread_join(longue,NULL);
        printf("fin long : %ld\n",time(0)-debut); 
        pthread_join(petit1,NULL);
	printf("fin petit1 : %ld\n",time(0)-debut);	
        pthread_join(petit2,NULL);
	printf("fin petit2 : %ld\n",time(0)-debut);
}

Pour la compilation :

$ gcc test_pthread_test.c -lpthread -o test2

On lance le test :

$ ./test2 
pid = 324
thread longue_pause 1078445824 debut : 0
pid = 324
thread petites_pauses 1070053120 debut : 0 
thread petites_pauses 1070053120 en cours : 0 
pid = 324
thread petites_pauses 1061660416 debut : 0 
thread petites_pauses 1061660416 en cours : 0 
thread petites_pauses 1070053120 en cours : 1 
thread petites_pauses 1061660416 en cours : 1 
thread petites_pauses 1070053120 en cours : 2 
thread petites_pauses 1061660416 en cours : 2 
thread petites_pauses 1070053120 en cours : 3 
thread petites_pauses 1061660416 en cours : 3 
thread petites_pauses 1070053120 en cours : 4 
thread petites_pauses 1061660416 en cours : 4 
thread petites_pauses 1061660416 en cours : 5 
thread petites_pauses 1070053120 en cours : 5 
thread petites_pauses 1061660416 en cours : 6 
thread petites_pauses 1070053120 en cours : 6 
thread petites_pauses 1070053120 en cours : 7 
thread petites_pauses 1061660416 en cours : 7 
Debut join: 8
thread petites_pauses 1070053120 en cours : 8 
thread petites_pauses 1061660416 en cours : 8 
thread petites_pauses 1070053120 en cours : 9 
thread petites_pauses 1061660416 en cours : 9 
thread longue_pause 1078445824 fin : 10
fin long : 10
fin petit1 : 10
fin petit2 : 10

Le petit exemple nous montre bien qu’aucun sleep() ne fait une attente sur les autres pthreads, même celui dans le main().

J’ai pu voir sur des forums :

Effectivement sur le POSIX il est marqué : http://pubs.opengroup.org/onlinepubs/9699919799/functions/sleep.html :

The sleep() function shall cause the calling thread to be suspended from execution until either the number of realtime seconds specified by the argument seconds has elapsed or a signal is delivered to the calling thread and its action is to invoke a signal-catching function or to terminate the process.

Mais si beaucoup de personne se pose la question c’est que cela n’a pas toujours été le cas. Sauf problème de mémoire j’ai vu le changement entre la Redhat 8.0 et la Fédora 9.0.

Mes OS de développement ont été (dans l’ordre) :

  • Redhat 5.2 ( la seule version que j’ai acheté, misère – pour information la date de release est : 2 novembre 1998 ) : A l’université de Toulouse.
  • SuSE ? : Chez Centre Océanographique de Marseille.
  • Debian ? : Chez Cyber-workers / Alias .
  • Redhat ? : Chez Rightvision
  • Redhat 7.2 : Chez Honeywell / SeCOM
  • Redhat 8.0 : Chez Honeywell / SeCOM
  • Fédora 9.0 : Chez Honeywell / SeCOM
  • Fédora 14.0 : Chez Honeywell / SeCOM
  • Fédora 17.0 : Chez Honeywell / SeCOM
  • Oracle 7.0 : Chez Honeywell / SeCOM
  • Oracle 7.2 : Chez Honeywell / SeCOM
  • Oracle 7.3 : Chez Honeywell / SeCOM
  • Oracle 7.4 : Chez Honeywell / SeCOM
  • Oracle 7.5 & Fédora 26 sous Docker : Chez Honeywell / SeCOM
  • Ubuntu 16.04 :  Chez Honeywell / SeCOM

Chez moi c’est plutôt Raspbian STRETCH ( Débian )  : https://www.raspberrypi.org/downloads/raspbian/ .

Bref, cela fait seulement 20 ans que je suis sous Linux.

Ma version de Linux Ubuntu :

$ uname -a
Linux VirtualBox 4.15.0-36-generic #39~16.04.1-Ubuntu SMP Tue Sep 25 08:59:23 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

Au passage on peut aussi voir l’impact des directives de compilation sur la taille :

$ gcc test_pthread_test.c -lpthread -o test2
$ gcc test_pthread_test.c -lpthread -O2 -o test2-O2
$ gcc test_pthread_test.c -lpthread -O3 -o test2-O3
$ gcc test_pthread_test.c -lpthread -O -o test2-O
$ gcc test_pthread_test.c -lpthread -g -o test2-g
$ gcc test_pthread_test.c -lpthread -g -O3 -o test2-g-03
$ ls -l test2*
13208  test2
15024  test2-g
14880  test2-g-03
9120   test2-O
9120   test2-O2
9120   test2-O3

Voila.

(Bisous à Luc)