Aller au contenu | Aller au menu | Aller à la recherche

vendredi 27 janvier 2012

Avoir un shell interactif pour PHP

PHP aussi moche soit-il est beaucoup utilisé et on n'a parfois d'autre choix que faire ce qu'on nous dit. L'un des problèmes qu'on rencontre est le manque d'un shell interactif pour tester un concept vite fait bien fait.

Heureusement, j'ai trouvé un projet (libre) qui permet d'obtenir un shell et de tester ce qu'on veut dedans.

Pour l'installer, assurez-vous d'avoir PEAR et faites comme suit:

$ wget http://jan.kneschke.de/assets/2007/2/17/PHP_Shell-0.3.1.tgz
$ sudo pear install PHP_Shell-0.3.1.tgz

et lancez avec

$ php-shell.sh
PHP-Shell - Version 0.3.1, with readline() support
(c) 2006, Jan Kneschke <jan@kneschke.de>

>> use '?' to open the inline help 

>> 

Et maintenant vous pouvez faire ce que vous voulez. Consultez le site officiel pour plus d'informations

Embrace your inner PDP-11

J'ai le même dans ma chambreUn petit billet inhabituel pour changer, mais toujours en rapport avec le logiciel malgré tout.

Il est des machines qui sont un un point tournant dans l'histoire. La machine à vapeur, l'ordinateur, l'iPad... ah non pas celui-ci. Bref, je vais m'intéresser à LA machine emblèmatique des premiers hackers et fondatrice du logiciel libre, puisque Richard Stallman a programmé les premiers morceaux de GNU dessus (EMACS et GCC). Je veux bien entendu parler du PDP de DEC.

Le labo d'intelligence artificielle du MIT où RMS travaillait avait tout d'abord un PDP-8 avant de passer au PDP-10. Ces ordinateurs sont des mainframes, dédiés à êtres des ordinateurs centraux avec de nombreux terminaux. Ces engins prédatent Unix, et ils étaient souvent accompagnés d'un système d'exploitation nommé CTS, pour "Compatible Time-sharing System", ou Système Compatible à Temps partagé en langue de Molière. Les hackers du MIT quant à eux avaient conçu leur propre système d'exploitation multi-utilisateur qu'ils avaient appelé parodiquement ITS pour "Incompatible Time-sharing System"; bon nombre des fonctionnalités de ce système étaient très en avance sur leur temps comme le support de système de fichiers en réseau, noyau supportant opérations temps réel et partagés, partage des cycles asynchrones pour les tâches utilisateur et débugueur intégré à l'OS (permettant d'arrêter l'exécution de n'importe quel programme et d'en analyser l'état, avec reprise d'exécution sans conséquence).

On peut toujours trouver ITS et l'installer sur un émulateur de PDP, voire un vrai PDP si on a assez de place chez soi. Mais pour commencer, j'ai préféré jouer avec quelque chose qui nous est plus familier: UNIX6. Cette version d'UNIX est sortie en 1975, et beaucoup d'eau a coulé sous les ponts depuis. J'ai installé l'émulateur simh, présent dans beaucoup de distributions, puis suivi les instructions de gunkies.org afin de pouvoir l'installer. Je vais vous traduire le modus operandi et tenter d'expliquer ce qu'on fait.

Pour la suite, il est intéressant de noter que simh reproduit le fonctionnement de l'appareil. Les boutons roses en dans l'image de l'article étaient en fait utilisés pour programmer le PDP. Un sélecteur permettait de sélectionner un registre ou la mémoire et on chargeait un mot avant de l'envoyer à l'adresse désirée. Vous en verrez l'usage lorsque nous booterons UNIX (le PDP n'avait pas de bios, donc il faut initialiser le boot à la main).

Tout d'abord, récupérez l'image de bande d'UNIX, puis renommez le fichier en dist.tap (faites en une copie de sauvegarde au cas où) démarrons simh, sur Fedora, la commande est:

simh-pdp11

Maintenant, nous allons charger le bootloader d'UNIX dans le disque du PDP comme suit:

set cpu 11/40
set tm0 locked
attach tm0 dist.tap
attach rk0 rk0
attach rk1 rk1
attach rk2 rk2
d cpu 100000 012700 
d cpu 100002 172526
d cpu 100004 010040 
d cpu 100006 012740
d cpu 100010 060003
d cpu 100012 000777
g 100000

Toute la série avant les d cpu sont particulières à l'émulateur; on décrit le matériel qu'on souhaite avoir. Notez la partie attach tm0 dist.tap, dans laquelle nous connectons un lecteur de bande avec la bande d'UNIX. Ensuite on passe des instructions en langage machine afin d'initialiser le lecteur de bande et enfin on exécute du code sur la bande.

Le simulateur va se verrouiller à ce moment-ci. Débloquez le en appuyant sur ctrl+e. Puis entrez l'instruction:

g 0

Le PDP va booter et afficher un signe "=". Tapez les instructions comme suit pour formater les bandes:

=tmrk
disk offset
0
tape offset
100
count
1
=tmrk
disk offset
1
tape offset
101
count
3999
=

Enfin appuyez sur ctrl+e, puis entrez q pour quitter l'émulateur. Nous avons maintenant notre disque de boot tout prêt et le lecteur de bande est formaté pour UNIX.

Il est temps maintenant de booter en mode utilisateur seul afin d'installer UNIX à proprement parler. Avant de commencer, quelques avertissements. Le terminal ne se comporte pas de la même manière que d'habitude. Essentiellement car il émule un télétype et qu'on ne peut pas effacer sur le papier, donc pas de touche backspace. La touche backspace marche, mais elle efface toute la ligne sans afficher l'effacement. Le mieux est de relire plusieurs fois ce qu'on tape et de prendre son temps. Sinon effacez avec backspace, puis tapez sur entrée et retapez toute la ligne (ou profitez des terminaux modernes en copiant-collant ;)). Allons-y:

set cpu 11/40
set tto 7b
set tm0 locked
attach tm0 dist.tap
attach rk0 rk0
attach rk1 rk1
attach rk2 rk2
dep system sr 173030
boot rk0

Maintenant vous devriez voir affiché un symbole "@". Démarrez UNIX en mode seul en tapant rkunix. Ensuite on nettoiera le terminal en passant la commande:

STTY -LCASE

Première chose à faire maintenant, recompiler le noyau d'UNIX.

chdir /usr/sys/conf
cc mkconf.c
mv a.out mkconf

Lancez mkconf (pour configurer le futur kernel) et entrez les infos suivantes:

# ./mkconf
rk
tm
tc
8dc
lp
done
#

Maintenant on va compiler la configuration et y lier le reste du noyau comme suit:

as m40.s
mv a.out m40.o
cc -c c.c
as l.s
ld -x a.out m40.o c.o ../lib1 ../lib2
mv a.out /unix

On peut vérifier que le noyau est bien installé et fait 30kb (on est loin des noyaux modernes hein!):

# ls -l /unix
-rwxrwxrwx  1 root    30346 Oct 10 12:43 /unix

Pas d'udev!!! Donc pas de fichiers de périphériques dans /dev. Heureusement, on peut le faire à la main (on n'a pas le choix d'ailleurs). Je vous conseille de copier/coller cette partie là.

/etc/mknod /dev/rk0 b 0 0
/etc/mknod /dev/rk1 b 0 1
/etc/mknod /dev/rk2 b 0 2
/etc/mknod /dev/mt0 b 3 0
/etc/mknod /dev/tap0 b 4 0
/etc/mknod /dev/rrk0 c 9 0
/etc/mknod /dev/rrk1 c 9 1
/etc/mknod /dev/rrk2 c 9 2
/etc/mknod /dev/rmt0 c 12 0
/etc/mknod /dev/lp0 c 2 0
/etc/mknod /dev/tty0 c 3 0
/etc/mknod /dev/tty1 c 3 1
/etc/mknod /dev/tty2 c 3 2
/etc/mknod /dev/tty3 c 3 3
/etc/mknod /dev/tty4 c 3 4
/etc/mknod /dev/tty5 c 3 5
/etc/mknod /dev/tty6 c 3 6
/etc/mknod /dev/tty7 c 3 7
chmod 640 /dev/*rk*
chmod 640 /dev/*mt*
chmod 640 /dev/*tap*

Et maintenant on va copier le reste d'UNIX sur les disques du PDP. Attention aux commandes dd, surnommé à juste titre "disk destroyer". Prenez votre temps ou copiez/collez.

dd if=/dev/mt0 of=/dev/rk1 count=4000 skip=4100
/etc/mount /dev/rk1 /usr/source
dd if=/dev/mt0 of=/dev/rk2 count=4000 skip=8100
mkdir /usr/doc

On va monter le reste du système et configurer les montages automatiques (très lointain ancètre du système d'init et fstab, vous allez voir...)

/etc/mount /dev/rk1 /usr/source
/etc/mount /dev/rk2 /usr/doc

# cat >> /etc/rc
/etc/mount /dev/rk1 /usr/source
/etc/mount /dev/rk2 /usr/doc

Entrez la combinaison de touche ctrl+D pour en finir avec cette dernière commande. Nous allons maintenant nous occuper de la commande df qui ne savait pas deviner où étaient les disques, donc on doit lui indiquer leurs emplacements dans le code et recompiler. Pour cela nous allons devoir utiliser l'éditeur texte ed. Gardez bien la tête froide et prenez votre temps. Si vous trouviez VI ou EMACS hardcore, ed va vous ôter ce qui vous reste de cheveux.

# chdir /usr/source/s1
# cp df.c df.c.bak
# ed df.c
/rp0/d
.-2a
  "/dev/rk0",
  "/dev/rk1",
.
w
q
# cc df.c
# cp a.out > /bin/df

Notez que j'ai fait une copie de sauvegarde au cas où. À présent nous allons vérifier les systèmes de fichiers (pas de fsck non plus à l'époque):

icheck /dev/rrk0
dcheck /dev/rrk0
icheck /dev/rrk1
dcheck /dev/rrk1
icheck /dev/rrk2
dcheck /dev/rrk2

Enfin nous allons activer le mode multi-utilisateur et rebooter. Enfin rebooter... Disons qu'on sync les disques plusieurs fois avant d'éteindre violemment l'appareil (ctrl+e puis q).

# ed /etc/ttys
1,8s/^0/1/p
w
q
#
# sync
# sync
# sync
# sync

Maintenant on peut utiliser UNIX normalement, en multi-utilisateur. Vous pouvez d'ailleurs vous y connecter en telnet sur le port 5555. Copiez le code qui suit dans un fichier boot.ini, puis lancez avec la commande simh-pdp11 boot.ini:

set cpu 11/40
set cpu idle
set tto 7b
set tm0 locked
attach rk0 rk0
attach rk1 rk1
attach rk2 rk2
attach lpt printer.txt
set dci en
set dci lines=8
set dco 7b
att dci 5555
boot rk0

Le lancement ressemble à:

PDP-11 simulator V3.8-1
Disabling XQ
Listening on port 5555 (socket 108)
@unix

login: root
#

Connectez-vous en tant que root, sans mot de passe.

Bon il n'y a pas tellement à faire, mais c'est intéressant de voir ce qui a changé (assez peu en fait) en 37 ans. Je suis en train de voir si je pourrais éventuellement porter la toute première version de VI (appelé ex) de 1BSD vers UNIX6, mais ça n'est pas tâche facile. Je vous tiendrais au courant!

jeudi 26 janvier 2012

De gros bras dans les serveurs

ARM_Chip.pngBeaucoup d'entre vous ont entendu parler d'ARM, une entreprise Britannique qui conçoit des processeurs et en vend des licences d'implémentation à une pléthore de fondeurs. Ces petits processeurs sont réputés dans l'embarqué pour leur consommation très faible. Ainsi, si Intel est le mastodonte de l'ordinateur et du serveur, ARM est le léviathan du secteur embarqué, virtuellement incontournable, vous avez sans aucun doute déjà utilisé un de leur processeur sans même le savoir.

L'architecture a donc le vent en poupe, poussée très fort par les smartphones et leur insatiable soif de puissance. Les processeurs ARM deviennent donc de plus en plus compétitif. Du coup certains commencent à avoir des idées pour l'introduire dans les marchés dominés par Intel. Parmi ceux-ci, la société Américaine Calxeda s'est associée avec HP, ARM et Canonical afin de concevoir un processeur intégré basé sur quatre coeurs ARMv9 (64 bits) dédié aux serveurs. Les gens de Calxeda en ont fait la présentation il y a peu, et voici un résumé de ce qu'ils ont fait.

Alors d'abord, non cet article n'est pas sponsorisé ;-). La conception que je vais décrire plus loin est vraiment bluffante, et même s'il est difficile d'en savoir les performances réelles, on ne peut qu'apprécier l'efficacité de la solution qui est sans commune mesure avec l'existant.

Carte à processeursLe design, d'un genre nouveau, est orienté vers les applications massivement parallélisées, comme les serveurs web, base de données, serveurs de fichiers et ainsi de suite. Le focus ici n'est pas sur la performance, mais sur l'optimisation espace et consommation. Les serveurs rackables contiennent une grosse carte mère avec beaucoup de ports d'extension. Sur ces ports, on peut soit mettre une carte de processeurs (4 processeurs de 4 coeurs et 4Go de RAM) ou bien du stockage (SSD ou disque durs). Le tout est couplé par des liens haute vitesse (80Gb/s) directement intégrés dans les DIE.

Autre point important, chaque DIE a une consommation maximale de 5W. Et comme le chipset est inclus sur le DIE (SoC), c'est la consommation quasi totale (il faut rajouter la RAM et le disque dur quand même).

Serveur ARM d'HPLe serveur rackable en 4U peut contenir jusqu'à 280 DIE au total dans des espèces de tiroirs à cartes. La présentation du bousin n'a pas dit si on pourrait exécuter un OS sur plusieurs cartes (et donc machines par serveur), ou bien si tout le serveur ne serait qu'une grosse machine (on peut toujours virtualiser après aussi). Néanmoins on peut déjà voir l'espace économiser dans le rack (et les économies associées).

Au niveau système d'exploitation, Canonical qui fait le troisième larron prépare une Ubuntu server pour ARMv9 qui équipera ces engins. Donc les sysadmins s'y retrouveront. Bonne nouvelle, pour le moment Windows Server ne tournera pas dessus (<troll>déjà qu'il tourne mal sur son architecture native...</troll>)

Alors bon, pour mitiger un peu, on ne connaît pas encore les performances réelles des processeurs, et ils n'ont pas encore été utilisés en environnement réel, mais c'est très prometteur. Si j'en vois un jour dans mes racks, je vous en reparlerais!

Image de processeur ARM par moi-même, licence CC-by, voir la source SVG attachée.

mardi 24 janvier 2012

La raison de cachée de la fermeture de Megaupload?

Logo de MegauploadIl y a du nouveau dans l'affaire de megaupload.

L'entreprise avait en effet annoncé en Décembre dernier l'arrivée prochaine d'un nouveau service, Megabox, qui aurait permit non seulement aux artistes de diffuser directement leur musique, avec la garantie de recevoir 90% du revenu de leurs ventes mais aussi de leur assurer un revenu sur les téléchargements gratuits.

On imagine aisément le coup de tonnerre d'un tel service. Qu'on puisse offrir un accès aussi aisé à la musique à un prix si bas et des conditions si raisonnables en faveur des artistes démontrerait que les vendeurs de musique en ligne (iTunes etc.) se payent notre tête depuis plusieurs années. C'est un peu comparable à Free mobile dans l'environnement des marchands d'abonnements.

Megaupload n'est sûrement pas tout blanc, et leur service tenait peut être du vaporware (ou pas). On peut tout de même trouver particulièrement étrange le comportement de la justice Américaine dans l'affaire, d'autant plus que cela coincide étrangement avec l'annonce de leur service de musique en ligne, qui se serait posé en compétition des producteurs existants, et les forçant sûrement à casser leurs prix.

Comme toujours, la vérité est ailleurs...

Owncloud

Interface d'OwncloudEn ces temps sombres (ou bénis?) de disparition de solutions de stockage en ligne, l'heure est venue de retourner aux racines. Revenir à cette époque où tout le monde avait son petit FTP à la maison et où on pouvait choper des fichiers chez ses amis facilement.

Seulement le FTP c'est un peu ingrat de nos jours. Et puis c'est bien beau mais ça ne stocke que des fichiers ça, quid de mon calendrier, des contacts, et pourquoi pas lire sa collec' de musique directement dans le navigateur?

Vous avez été entendus camarades! Owncloud est là!

Il s'agit d'un logiciel écrit en PHP qui s'installe très facilement sur un serveur web comme apache. Il vous permet d'uploader des fichiers et les partager. S'il s'agit d'images, elles seront visibles en tant qu'albums, les musiques peuvent elles être écoutées directement depuis l'interface. En outre, Owncloud propose un calendrier pour vos rendez-vous et un carnet d'adresses.

Tout ceci est paré pour un utilisation multi-utilisateurs, et le pompon étant que tout est intégrable en webdav, caldav et carddav. Concrètement ça veut dire qu'on peut monter ses fichiers comme un disque réseau (webdav), ajouter son calendrier et carnet d'adresse à son client email, et même à son smartphone.

Owncloud c'est de la bonne!

La future version 3 sort dans quelques jours, mais courrez vite l'essayer pour vous faire une idée!

- page 1 de 10