SheevaPlug
Sunday, 27 January 2013
|
Écrit par
Grégory Soutadé

Mon Sheeva est tombé un lundi matin (le 7 janvier). J'ai reçu l'alimentation deux semaines plus tard... Le serveur a pu redémarrer vers 16h, mais les plus attentifs auront remarqué que le blog était en ligne depuis le mardi 8 janvier 11h. C'est le résultat de mes premiers pas dans les nuages. La situation est critique : l'alimentation a lâchée, pas de serveur de secours sous la main (mais les sauvegardes sont là), pas de serveur distant, impossible de laisser tourner un PC h24 et (a priori) quelques jours à attendre avant d'avoir la pièce de rechange.

Le blog est la partie la plus visitée, il fallait au moins essayer de le remettre en ligne. Pour le coup, le passage à un blog statique simplifie énormément les choses ! Bref il faut trouver un petit espace de stockage en ligne pour pas longtemps et pas trop cher (tant pis pour les autres services, ils ne sont pas critiques et je ne voulais pas perdre du temps à configurer une instance qui sera détruite par la suite).

Goku sur son nuage

Je suis référencé chez Gandi, j'ai donc cherché par là. Concernant les sites web simples, ils ne proposent que la création via Gandi BaseKit ou Sitemaker à partir de 5€ par mois. Sinon, ils ont une solution "Simple Hosting" : un pack PHP/MySQL ou PHP/PostGre à partir de 5€/mois, ça pourrait presque être adapté, mais je ne voulais pas souscrire pour un mois. Enfin, dernière option : les nuages (le cloud) : louer une part d'un serveur que l'on peut relâcher quand on n'en a plus besoin. Bingo ! Je paye via mon compte pré payé (le surplus servira pour le renouvellement du nom de domaine). Une fois l'instance crée avec une Debian stable 64 bits (quelques minutes), un petit SSH, on installe emacs, nginx, un autre coup de scp, on reconfigure la zone DNS et roulez jeunesse, le blog est de nouveau en ligne. Les mails sont redirigés sur le webmail de Gandi. C'est une solution de secours flexible, pas chère (0.50 euros par jour) et très intéressante (surtout quand on a déjà tous les fichiers de conf) puisqu'on maîtrise tout (ce qui est plus facile pour adapter son ancienne configuration) avec en prime une addresse IPV6. Pour ce prix-là, j'ai :

  • 1 coeur dédié
  • 512Mo de mémoire
  • 12 Go de disque
  • Une connexion 10Mbits

De loin on pourrait dire que c'est à peu près la même chose que le Sheeva (hors débit de la connexion), sauf qu'en fait ça va VRAIMENT plus vite. Suite à l'aller-retour de l'alimentation en Angleterre (...), j'ai quand même ré installé la majorité des services sur l'instance.

En réalité, ça fait quelques semaines que j'y pensais. Lorsque ce sera possible, il faudrait installer un serveur de secours (fallback) pour faire face à un problème matériel, un crash de disque ou même une connexion qui tombe. C'est un gros problème de l'auto hébergement : pas de réplication des ressources. Tandis que dans les gros datacenter de Gandi, tout est virtuel, dupliqué 15 fois sur plusieurs sites physiques et avec des débits plus qu'intéressants. Bref, avoir deux serveurs physiques c'est presque jouable (ami, famille ...). Les problèmes sont les suivants :

  • Le DNS : si l'IP change tout le temps des deux côtés, c'est galère. On doit s'appuyer sur un serveur DNS fixe et éditer les zones en évitant les conflits (ou activer/désactiver manuellement l'édition des zones sur le serveur qui va bien). Il faut au moins avoir une IP fixe sur les deux (pour avoir un DNS primaire/secondaire).
  • Les données utilisateurs : un simple rsync suffit
  • Les projets versionnés : a priori une simple copie des fichiers suffit, mais c'est plus élégant de faire un clone/checkout des dépôts
  • Base de données : la plupart des moteurs incluent un système de maître/esclave

Il existe quelques solutions qui prennent en compte tous ces paramètres ou faire un script perso, reste plus qu'à le mettre en place si j'achète un nouveau serveur !

Concernant ma solution dans les nuages, je pourrais aussi faire un script de migration (copie, installation et configuration des paquets sur un nouveau serveur virtuel).

Et pour le plaisir :

Sunday, 27 January 2013
|
Écrit par
Grégory Soutadé

Le SheevaPlug est mort, vive le SheevaPlug !

Suite à mon dernier article concernant le travail le dimanche, mon SheevaPlug a décidé de se mettre en grève ! À mon réveil lundi matin (7 janvier) : plus rien ! Ma première idée est qu'il y a eu une coupure de courant et qu'il a eu du mal à redémarrer sur la clé USB, Ubuntu ayant pour sa part planté. Pourtant, je n'arrive pas à me connecter par le lien série. Les symptômes sont :

  • Une seule des deux LED du frontpanel est allumée
  • Les deux LED de l'ethernet sont allumées

Et pourtant, rien ne marche :( En consultant le net, je retombe régulièrement sur LE problème du SheevaPlug : son alimentation. Ce serait donc la PSU (Power Supply Unit) qui aurait lâché. Quatre coups de tournevis plus tard (et surtout en suivant ces instructions), je découvre ça :

SheevaPlug broken PSU
Je ne comprends pas grand-chose en électronique, mais je me dis que ça a vraiment été monté à l'arrache. Elle aura quand même tenu 2 ans et demi (donc la garantie de 12 mois a expirée depuis bien longtemps), ce qui est quand même très bien (ça fait du 3.61€ par mois). J'ai ensuite commandé une nouvelle alimentation sur newit (ils ont tout prévu !) : 26.5€ avec les frais de port. J'aurais pu en acheter une chez un marchand d'élec, mais je ne voulais pas qu'elle pende lamentablement à l'extérieur, ni avoir à souder. J'espère que celle-ci tiendra au moins aussi longtemps que la précédente.

SheevaPlug with new PSU


PS : Lors du voyage par Royal Air Mail, ils ont oublié de préciser les informations additionnelles, du coup elle a fait un joli aller-retour et j'ai pris deux semaines dans les dents + le prix d'un transporteur TNT. Du coup le transport a coûté plus cher que l'alimentation en elle-même.

Une fois la nouvelle alimentation installée : Oh miracle ! Ça fonctionne !!!! J'ai même pu tuner mon Sheeva avec un embout blanc sur un fond noir.

Sheevaplug working


CuBox

cubox.jpg

Régulièrement je regarde le site newit pour voir les nouveautés. GlobalScale Technologies (le constructeur du SheevaPlug) s'est rapidement éloigné de la philosophie du Sheeva (le GuruPlug a eu un succès mitigé) : on rajoute un disque dur, on rajoute le wifi, on rajoute le bluetooth, on rajoute le HDMI... Mais on garde le même processeur et la même quantité de mémoire... Alors qu'il fallait faire tout l'inverse : garder un appareil petit avec quelques connexions (le double ethernet peut être sympa) tout en augmentant la puissance (processeur et mémoire). Solid Run (une startup de seulement 7 personnes !) l'a bien compris en sortant la CuBox. Pour moi c'est le digne successeur du SheevaPlug :

  • Marvel PJ4 (Dual Cortex A8) @ 800Mhz
  • 1GB de DDR3 32 bits @ 800Mhz
  • GPU OpenGL ES / Décodeur HD / HDMI (c'était dans le SoC)
  • InfraRouge
  • 1 Gigabit Ethernet / 2 USB / 1 eSata / 1 SPDIF / 1 MicroSD
  • 55mm x 55mm x 42mm

Plus petit (le Sheevaplug fait 110 mm x 69.5 mm x 48.5 mm), plus puissant et le tout pour 3 Watts (comme le Sheeva). Le prix est identique à celui du Sheeva (130 €). Et pour ceux qui sont un minimum patient, une version à 2GB (CuBox pro) devrait sortir fin janvier. Si elle avait été disponible de suite (ou pré commandable depuis le site de Solid Run, qui ne livre pas en France...), je l'aurais bien échangé contre mon Sheeva qui commence un peu à ramer quand on lui demande du PHP ou du Python ! Au passage, j'ai remplacé ma clé USB Toshiba par une SDCard 16GB class 10 : en plus d'accélérer les entrées/sorties elle devrait être plus fiable.

La CuBox sera incontestablement ma prochaine acquisition pour un serveur perso (à faible charge, s'entend). D'ici là, c'est bien de voir comment va se comporter le hard, qui vient tout juste de paraître (on n'est pas sans rappeler les défauts d'alimentation du Sheeva...).

Monday, 08 October 2012
|
Écrit par
Grégory Soutadé

esata.png

Activate eSata on Sheevaplug with Debian I recently bought an external hard disk with an eSata interface, it was not easy to find (almost are with USB2/3, other are expensive advanced NAS), but I did. The purpose of this disk is to make backups. But, on my Sheevaplug, the main partitions (/root, /boot...) are on an USB key (Toshiba 16 GB) running Debian stable. When I plugged my new hdd it was not recognized ! Actually I first configured my sheevaplug following some tutorials (http://www.cyrius.com/debian/kirkwood/sheevaplug/ for example). It was said to set the boot variable "arcNumber" to 2097. Why ? In facts ARM SoC doesn't have peripherals discovery mode, so you need to tell which board you're running on.

After looking a bit into Debian's kernel, it seems that eSata interface is activated only if arcNumber is set to 2678 ! If I do that, original Ubuntu on NAND flash (factory installation) doesn't recognize the current SoC because arcNumber 2678 is a patch from Debian (in original installation, eSata is activated by default). The second point is that if you set the board as an eSata board, Debian will try to boot on the eSata hard disk (even if you specify different kernel root=XX values).

So what to do ? The solution is to specify your partitions not using classic /dev/sdXXX format, but using UUID numbers. They are not human readable, nevertheless they refer to an unique partition ! The first step consists in listing your partitions UUID :

ls -l /dev/disk/by-uuid/ lrwxrwxrwx 1 root root 10 Sep 27 07:34 1642ad57-77aa-494c-aa77-6998d420eb8f -> ../../sda3 lrwxrwxrwx 1 root root 10 Sep 27 07:34 198239b4-ff16-4dda-8df0-37b106005817 -> ../../sda1 lrwxrwxrwx 1 root root 10 Sep 27 07:34 2e0cd399-3839-4e4e-bc57-5e6628841bc1 -> ../../sda2 lrwxrwxrwx 1 root root 10 Sep 27 07:34 dd27350b-2522-46a6-862e-0cbc072b535f -> ../../sda4

Then, edit /etc/fstab to use UUID and not /dev/sdXXX (it's fastidious I know) After that, you need to reboot with the serial console connected and stop automatic boot (type a key) to edit uBoot configuration. We'll set arcNumber to 2678 by default.

setenv arcNumber 2678

Then edit bootargs_options (for me it's bootargs_options_usb) to set correct UUID value

setenv usb_bootargs_root "root=UUID=2e0cd399-3839-4e4e-bc57-5e6628841bc1"

Last step is to edit the global boot_cmd to set arcNumber to 2097 before booting to NAND (in my case, if USB boot fails it will try to boot on MMC then on NAND) :

setenv bootcmd 'setenv arcNumber 2678; saveenv; run usb_boot; setenv arcNumber 2097; saveenv; run bootcmd_mmc; run bootcmd_nand'

Finally save environment variables to flash and boot

saveenv boot

My final environment variables

ethact=egiga0 bootargs_root=ubi.mtd=1 root=ubi0:rootfs rootfstype=ubifs mtdpartitions=mtdparts=orion_nand:0x400000@0x100000(uImage),0x1fb00000@0x500000(rootfs) ethaddr=00:50:43:01:4C:56 bootargs_console=console=ttyS0,115200 bootargs_root_nand=ubi.mtd=1 root=ubi0:rootfs rootfstype=ubifs bootcmd_nand=setenv bootargs $(bootargs_console) $(mtdpartitions) $(bootargs_root_nand); \ nand read.e 0x00800000 0x00100000 0x00400000; bootm 0x00800000 bootargs_root_mmc=root=/dev/mmcblk0p2 rootdelay=5 bootcmd_mmc=setenv bootargs $(bootargs_console) $(bootargs_root_mmc); mmcinit;\ ext2load mmc 0:1 0x800000 /uImage; bootm 0x00800000 real_bootcmd=run bootcmd_mmc; run bootcmd_nand filesize=32D62A usb_bootargs_console=console=ttyS0,115200 usb_bootcmd_usb=usb start; ext2load usb 0:1 0x01100000 /uInitrd; ext2load usb 0:1 0x00800000 /uImage usb_boot=setenv bootargs $(usb_bootargs_console) $(usb_bootargs_root); run usb_bootcmd_usb;\ bootm 0x00800000 0x01100000 mainlineLinus=yes bustargs_root_usbroot=/dev/sda2 usb_bootargs="root=UUID=2e0cd399-3839-4e4e-bc57-5e6628841bc1" stdin=serial stdout=serial stderr=serial mainlineLinux=yes enaMonExt=no enaCpuStream=no enaWrAllo=no pexMode=RC disL2Cache=no setL2CacheWT=yes disL2Prefetch=yes enaICPref=yes enaDCPref=yes sata_dma_mode=yes netbsd_en=no vxworks_en=no bootdelay=3 disaMvPnp=no enaAutoRecovery=yes

I added a rule in fstab to mount my hdd at startup

UUID=590f30b1-7727-4d0a-a86a-2360ec0b3f88 /media/backup ext4 defaults 0 1

A simple backup script based on rsync that power down disk after backup is done.

Thursday, 09 August 2012
|
Écrit par
Grégory Soutadé

A lot of things has been written about nginx and Apache : proxy_pass, proxy_redirect, subdomains... I just want to publish my configuration that is in test but works. This is a response to my requirements : I want nginx to serve the subdomain blog.soutade.fr but transfer all other requests to an Apache server (soutade.fr, www.soutade.fr, indefero.soutade.fr ...).

 

First step is to install nginx. Nginx current version is 0.7.23 (thanks to debian stable). Then edit /etc/nginx/sites-available/default :

server { listen 80 default; ## listen for ipv4 server_name soutade.fr *.soutade.fr; access_log /var/log/nginx/soutade.fr.access.log; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; resolver localhost; proxy_pass http://$host:8000; } } server { listen 80; ## listen for ipv4 server_name blog.soutade.fr; access_log /var/log/nginx/soutade.fr.access.log; location / { root /var/www/blog; index index.html; } location = /favicon.ico { access_log off; log_not_found off; } location ~ /\. { deny all; access_log off; log_not_found off; } }

The first block tells nginx to redirect all request from soutade.fr and *.soutade.fr to a local Apache server listening on port 8000. The second block creates a special rule for blog.soutade.fr : files will be served by nginx server and no redirection will be applied. We also disable favicon.ico error log and deny serving \.* files. There is a tip in the first block : we need to set up a local DNS server ("resolver localhost" directive). If this option is not set, it will try to do another DNS request to resolve $host address. So we'll simply install bind9 and configure it. Edit /etc/bind/named.conf.local

zone "soutade.fr" { type master; file "/etc/bind/db.soutade.fr"; };

Finally edit /etc/bind/db.soutade.fr with :

$TTL 604800 @ IN SOA soutade.fr. root.soutade.fr. ( 07082012 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS localhost. @ IN A 127.0.0.1 * IN CNAME soutade.fr. @ IN AAAA ::1

And restart bind : sudo service bind9 restart. root.soutade.fr. is the mail address of the administrator. Now everything might be ok.

Saturday, 04 August 2012
|
Écrit par
Grégory Soutadé

 

Les cigales chantent au loin pour fêter les deux ans du blog ! Ma première impression est la satisfaction d'être arrivé jusque là. En effet, la plupart des blogs meurent assez vite. Sans rentrer dans les détails, cette année a été plutôt bonne : fréquentation en hausse, articles variés, aucun trou, pas de problème technique.

Le bilan en chiffres

  • 60 articles ont été publiés, soit 1 article par semaine
  • 1/3 (33%) des articles concernent le cinéma : cette année a été assez pauvre d'un point de vue cinématographique. De plus, sur le peu d'articles parus, seuls 2/3 sont favorables
  • Quasiment 18 000 visites avec une moyenne de 400 visistes / mois pendant les 5 premier mois puis 1800 visistes / mois par la suite
  • 5.7 Go de données envoyées


Les chiffres de l'année dernière en comparaison :

  • 60 articles
  • 50% pour le cinéma
  • 9 000 visites
  • 2.7 Go de données


Ces chiffres ne tiennent pas compte du mois d'avril qui a été très particulier. En avril, j'ai eu l'équivalent d'un an de visite (18 000 visites, 4.75 Go de données envoyées), ce qui fait une moyenne de 600 visites par jour. La courbe se centre en fait sur 12 jours où il y a eu entre 1000 et 1600 visites / jour.

Hélas 90% du traffic se concentre (encore) sur un seul article, malgrès une diversification assez importante, et même deux articles en Anglais... La sortie de la version 0.3 de KissCount n'a pas non plus déchaîné les foules comme ça avait été le cas l'année dernière. C'est dommage, car c'est la version la plus aboutie/jolie.

Côté technique, le sheevaplug a parfaitement remplit son rôle : très peu de redémarrages, aucun problème matériel, un temps de réponse plutôt correct, bref, il est amorti ! En ce qui concerne le nom de domaine, je suis passé d'OVH à Gandi suite à l'arrêt des certificats SSL d'OVH. Le prix est sensiblement le même, mais côté technique je préfère la plateforme OVH : plus simple à manipuler, DynDNS supporté de base et des serveurs DNS avec un TTL décent !

L'épisode d'avril a donné naissance au projet Dynastie : un générateur de blog statique écrit avec le framework Django. Désormais il n'y aura plus pour le blog que du html compressé (sauf pour la fonction de recherche), servi par un serveur nginx avec des css et js optimisés. Le reste continuera à être servit par Apache. Ceci devrait permettre de réduire par deux (environ) la taille des données envoyées. Ce qui signifie moins de latence, donc une meilleure expérience sur le blog ! J'aurais aimé le sortir pour les deux ans, mais il n'est pas encore prêt...

Et maintenant ? Et bien, rien ne change ! On continue sur la lancée actuelle : une idée = un article, avec le soutien des sorties ciné. Comme l'année dernière, il y a quelques idées qui trainent, mais globalement ça se fera au jour le jour. Comme on dit : qui vivra, verra.