UNIX

Toying Around With Xv6 X86

From the project’s Github repository:

xv6 is a re-implementation of Dennis Ritchie’s and Ken Thompson’s Unix Version 6 (v6). xv6 loosely follows the structure and style of v6, but is implemented for a modern x86-based multiprocessor using ANSI C.

Having a small footprint and code base, xv6 is an excellent tool to deepen in operating systems internals, like boot process, virtual memory setup, basics of a filesystem…
The version I tried is the i386 port, but again in the project’s repo we can read:

au-to-ma-gic

Au boulot, j’ai élu une solution de déploiement à haute teneur en convivialité qui m’a été suggérée par nico, j’ai nommé fabric.

Ce soft à l’utilisation simplissime permet en un tournemain de réaliser des opérations complexes en masse sur une architecture distante en utilisant le protocole SSH.

Si la documentation de la plupart des fonctions est clarissime, l’une d’entre elles, qui pourtant me semblait avoir un fort potentiel loutresque, n’était pas très clairement exposée: upload_template. Cette fonction, comme son nom semble l’indiquer, permet d’envoyer sur un serveur distant un fichier “template” en ayant préalablement remplacé des variables par le contenu souhaité. Après un peu de lecture du code source de fabric, la subtilité de son utilisation m’est apparue.

split vertical et screen

Il y a quelques jours, un collègue m’apprenait l’existence d’un soft basé sur gnome-terminal, terminator, permettant de diviser un terminal horizontalement et verticalement. J’en parle sur #gcu, et on me signifie que screen est capable de splitter verticalement (le split horizontal était implémenté depuis longtemps) dans sa version current, présente dans debian/unstable. Étant d’une nature loutresque, je décidais donc d’ecrire un screenrc spécifique qui démarrerait screen en mode splitté avec 4 fenetres (deux en haut, deux en bas). Je m’aperçois alors que le man de screen ne mentionne nulle part comment spécifier ce comportement dans une conf. C’est en fouillant dans le repository git de screen que je lis :

Command and conquer

Et tant qu’on est dans les ssheries, connaissez-vous sshmenu applet ? J’ai découvert ce petit outil à insérer dans une barre gnome voila un an et j’en suis devenu fan. Ce dernier vient enfin d’arriver dans debian/lenny, et via un ajout dans l’apt source-list, c’est également installable sur une ubuntu.

Petit screenshot :

bounce-bounce-bounce-bounce

Sur zone0, j’ai des domUs dont le ssh n’est pas accessible depuis Internet. Habituellement, je ssh sur le dom0 puis rebondis. Et puis je me suis souvenu de cette news de Reefab qui pointait une astuce à base de nc. Voici une version compactée et un peu modifiée de la doc en question :

Sur le client :

nc devra evidemment etre installé sur le serveur de rebond (ici, le dom0). Voici enfin un exemple de .ssh/config :

Push the playlist on

Ptite magouille.

Pour bruler mes CDs audio, j’utilise gnomebaker. Il est pratique, rapide, intuitif, et il fonctionne. Ce dernier est capable d’enregistrer des “projets”, qui correspondent en l’occurrence à un fichier XML contenant les informations sur la playlist que vous allez graver.

J’avais pas envie de coder un truc, j’ai donc opté pour du scripting de feignant. La première brique s’appelle xmlstarlet, un outil command line qui permet de manipuler du XML. Un petit coup de sed | nl permettra de mettre un peu d’ordre. Enfin, Nous ferons appel à ImageMagick et plus particulièrement convert pour générer une image avec cette sortie. Ce qui nous donne :

Ce ne sont pas ces droïdes que vous recherchez.

Sur mon serveur perso, par définition, y’a des trucs perso. De plus, à l’approche d’une société nouvelle, il n’est pas superflu de prendre quelques mesures afin de préserver un semblant d’intimité. Pour cela, les bons génies de l’Internet on créé, il y a bien longtemps, SSL. Mais voila, il y a d’autres trucs et bidules que je souhaite pouvoir exposer en place publique. J’entreprend donc de jouer avec les directives de lighttpd pour créer des exclusions et autres redirections. Le lien qui eclaire tout, c’est celui là. En substance, nous allons rediriger tout ce qui matche mon.host.magique et faire passer ce traffic en SSL. Voici la conf :

merde, j'ai pas de backup...

Combien de fois cette phrase a retenti dans vos esprits imprudents ? dans mon esprit imprudent à moi, plein. Alors, comme je viens de toper un kimloli sur les conseils de mon bouquetin favori, je me suis dit que, pour une fois, j’y collerais bien une procedure de backup propre.

J’ai déjà parlé et probablement pasté ici même un petit script gentil qui, grâce au couple rsync / rsyncd, permettait de rendre cette opération relativement rapide assez simplement. J’y ai apporté quelques modifs et enrobé le tout d’un chouillat de sécu. Un chouillat j’ai dit, trépigne pas spoty.

tin, 23%...

Problème :

Tu as, sur ta machine chez toi, démarré une application graphique qui n’a pas de pendant console et tu es curieux de savoir à combien de poucents en est le… la… COMPILATION. Ta machine est bien evidemment située derrière une gate quelconque dont la seule particularité est de disposer d’un access ssh accessible.

“Damn foukine shit”, te dis-tu, “Ca va etre une tannée pas croyable”

Que nenni

Solution (qui suppose que tu as un VNC server qui tourne sur ta workstation) :

local

update

Non seulement ce qui est ecrit ci dessous est faux mais en plus ca ne marche absolument pas. En réalité il suffisait de spécifier à la classe w de chercher tous les attributs sendmailMTAClassName=w dans l’arbre, soit : define(confCW_FILE’, @ldap: -k sendmailMTAClassName=w -v sendmailMTACLassValue') dans le fichier .mc

C’est pris à la volée et ca marche impeccablement bien.

P’tit tip en passant, pour verifier tes local-host-names : echo '$=w' | sendmail -bt Je me demandais pourquoi donc après avoir ajouté des hosts dans la classe sendmailMTAClassName=w (équivalent de local-host-names), les mails à destination de ces derniers étaient refusés / non relayés si je ne restartais pas sendmail. En fait, et c’est très ennuyeux, il faut effectivement restarter sendmail pour que la classe w soit reloadée. MAIS ASTUCE ! je viens également d’apprendre ici qu’on peut elegamment remplacer le fichier classique des domaines locaux par une entrée dans la mailertable et dans l’access.db pour authoriser son relay. En LDAP ca nous donne : `