Le Blog Utux

HTTP 200 GET /

Ansible: récupérer les clés SSH depuis BitBucket

Rédigé par uTux Aucun commentaire

Je m'attaque aux API REST et en particulier celle de BitBucket pour y récupérer mes clés SSH que je déploie ensuite sur mes serveurs, le tout avec Ansible. Voilà un petit bout de code sur lequel j'ai passé une bonne soirée car autant c'est facile d'interroger l'API, autant ça l'est un peu moins de faire rentrer les bons champs dans des variables ;)

Pré requis:

  • Sur votre compte BitBucket
  • Settings > App passwords
  • Créez un password avec l'autorisation Account / read.

Allons-y (à mettre dans votre tasks/main.yml par exemple):

---

  - name: GET authorized_keys from REST API
    uri:
      url: "{{ authorized_keys.api_url }}"
      method: "{{ authorized_keys.api_method }}"
      user: "{{ authorized_keys.api_user }}"
      password: "{{ authorized_keys.api_password }}"
      force_basic_auth: "{{ authorized_keys.api_force_basic }}"
    register: authorized_keys__json_response
    delegate_to: localhost
    run_once: True
    # Delegate to localhost and run 1 time because
    # we don't need to query the API from each remote host

  - name: Set Keys as a Var
    set_fact:
      authorized_keys__keys: "{{ authorized_keys__json_response.json | json_query('values[*].key') }}"
    delegate_to: localhost
    run_once: True
    # Extract the fields 'key' in a variable

  - name: Concatenate Keys
    set_fact:
      authorized_keys__keys_concatenate: "{{ authorized_keys__keys | join('\n') }}"
    delegate_to: localhost
    run_once: True
    # Ansible authorized_keys module with 'exclusive' option requires all keys in one batch
    # separated by a newline \n

La variable authorized_keys__keys contient la liste des clés publiques. La variable authorized_keys__keys_concatenate n'est pas une liste mais un champ contenant toutes les clés séparées par un retour à la ligne et elle est utile si vous souhaitez utiliser le module authorized_keys avec exclusive: yes car ce dernier ne marche pas bien avec une liste, il faut donc lui fournir 1 seul "batch".

Complétez ensuite vos variables, par exemple:

# group_vars/all/vars.yml

authorized_keys:
  api_user: john
  api_url: "https://api.bitbucket.org/2.0/users/john/ssh-keys"
  api_method: GET
  api_force_basic: yes
  api_password: password créé dans l'interface bitbucket

Bien sûr en vrai on mettra le password dans un vault ;)

Et voilà, vous pouvez utiliser authorized_keys__keys ou authorized_keys__keys_concatenate pour la suite!

Rip hardware.fr :'(

Rédigé par uTux 1 commentaire

C'est un coup dur :( Hardware.fr va cesser de publier des articles il ne restera donc que le forum et la boutique. J'étais fan des articles longs et détaillés comme les tests des CPU ou des cartes graphiques, le testeur avait même identifié un problème de latence entre les cœurs des RyZen... A chaque fois qu'un site fermait ou devenait payant, je me disais "pas grave il reste toujours hardware.fr".

RIP Hardware...

FreeBSD: jouons avec iocage

Rédigé par uTux Aucun commentaire

En 2018, en matière de containers il n'y a pas que Docker ou LXC, il y a aussi FreeBSD et ses jails :) en fait ça existait longtemps avant et c'est plutôt bien fichu. J'ai longtemps utilisé le framework ezjail qui a l'avantage d'être simple et de fonctionner sans ZFS (j'avais un serveur anémique à base d'Atom 32 bit).

J'utilise FreeNAS et bien que leur web-ui permette depuis longtemps de créer des jails, cette solution est trop rigide, il est par exemple impossible d'upgrader une jail :( Bonne nouvelle, dans les dernières versions (avec le web-ui en beta ou via la ligne de commandes) on a droit à iocage qui est plus souple et supporte (entre autres) les upgrades.

Création d'une jail FreeBSD

Tout comme iohyve, il faut commencer par définir un pool de stockage ZFS. Cela peut être un pool existant, il ne l'écrase pas mais créé quelques datasets. Par exemple pour utiliser le pool data:

[root@freenas] ~# iocage activate data
ZFS pool 'data' successfully activated.

Ensuite on télécharge un template qui va servir à créer nos jails. Par exemple pour récupérer 11.1-RELEASE:

[root@freenas] ~# iocage fetch
[0] 9.3-RELEASE (EOL)
[1] 10.1-RELEASE (EOL)
[2] 10.2-RELEASE (EOL)
[3] 10.3-RELEASE
[4] 10.4-RELEASE
[5] 11.0-RELEASE (EOL)
[6] 11.1-RELEASE

Type the number of the desired RELEASE
Press [Enter] to fetch the default selection: (11.1)
Type EXIT to quit: 6
Fetching: 11.1-RELEASE

Downloading : MANIFEST [####################] 100% 0Mbit/s
Downloading : base.txz [####################] 100%  13.44Mbit/s
Downloading : lib32.txz [####################] 100%  12.66Mbit/s
Downloading : doc.txz [####################] 100%  10.76Mbit/s
Downloading : src.txz [####################] 100%  11.94Mbit/s
 11.94Mbit/sExtracting: base.txz... 
Extracting: lib32.txz... 
Extracting: doc.txz... 
Extracting: src.txz... 

* Updating 11.1-RELEASE to the latest patch level... 
src component not installed, skipped
Looking up update.FreeBSD.org mirrors... 3 mirrors found.
Fetching public key from update4.freebsd.org... done.
Fetching metadata signature for 11.1-RELEASE from update4.freebsd.org... done.
Fetching metadata index... done.
Fetching 2 metadata files... done.
Inspecting system... done.
Preparing to download files... done.
Fetching 151 patches.....10....20....30....40....50....60....70....80....90....100....110....120....130....140....150 done.
Applying patches... done.

The following files will be updated as part of updating to 11.1-RELEASE-p9:
[--- blablabla ---]
Installing updates... done.

On peut créer une jail nommée "unbound":

root@freenas:~ # iocage create -r 11.1-RELEASE -n unbound
unbound successfully created!

On lui met une adresse IP (en mode shared car j'ai encore quelques soucis avec le VNET):

root@freenas:~ # iocage set vnet=off unbound
Property: vnet has been updated to off
root@freenas:~ # iocage set ip4_addr="em0|192.168.0.201/24" unbound
Property: ip4_addr has been updated to em0|192.168.0.201/24

On démarre la jail:

root@freenas:~ # iocage start unbound
* Starting unbound
  + Started OK
  + Starting services OK

On entre dans la jail:

root@freenas:~ # iocage console unbound

FreeBSD 11.1-RELEASE (GENERIC) #0 r321309: Fri Jul 21 02:08:28 UTC 2017

Welcome to FreeBSD!

Release Notes, Errata: https://www.FreeBSD.org/releases/
Security Advisories:   https://www.FreeBSD.org/security/
FreeBSD Handbook:      https://www.FreeBSD.org/handbook/
FreeBSD FAQ:           https://www.FreeBSD.org/faq/
Questions List: https://lists.FreeBSD.org/mailman/listinfo/freebsd-questions/
FreeBSD Forums:        https://forums.FreeBSD.org/

Documents installed with the system are in the /usr/local/share/doc/freebsd/
directory, or can be installed later with:  pkg install en-freebsd-doc
For other languages, replace "en" with a language code like de or fr.

Show the version of FreeBSD installed:  freebsd-version ; uname -a
Please include that output and any error messages when posting questions.
Introduction to manual pages:  man man
FreeBSD directory layout:      man hier

Edit /etc/motd to change this login announcement.
root@unbound:~ #

Autres features

  • Créer ses propres templates, utile pour créer des jails prêtes à l'emploi (avec SSH + authorized_keys, par exemple).
  • Upgrade des jails
  • Snapshots (et oui, zfs...)
  • VNET (la jail a sa propre stack réseau, utile pour les manipulations pare-feu ou vpn)
  • Limitations CPU & mémoire
  • Installation automatique de paquets
  • Montage de volumes bind
  • Création de jails kFreeBSD (à titre de proof of concept)
  • A la manière des dataset/pool zfs, chaque jail a des propriétés modifiables (get/set)
  • Ecrit en python

Conclusion

J'utilise iocage pour une jail backuppc et j'en suis plutôt content. Si l'aspect VNET reste à améliorer, on a quand même fait un grand pas par rapport à la solution maison de FreeNAS.

iocage c'est le meilleur de FreeBSD: les jails et zfs. La syntaxe est claire, facile à retenir et me donne presque envie de m'y remettre et de migrer tous mes services dessus. Je vous encourage à l'essayer! Je vous encourage aussi à manger du FreeNAS, c'est bon pour la santé.

Marathon de la Loire (Saumur) 2018

Rédigé par uTux 4 commentaires

En 2017 j'ai fait deux semi-marathon: Nantes puis Auray-Vannes. Le premier fut difficile à terminer, le second beaucoup moins, et comme je suis fou j'ai décidé de passer à la vitesse supérieure donc j'ai tenté le marathon.

Assez parlé, voici mes stats :

42,2km
04h11 5,50 min/km
Distance Temps réel Pace

Trace marathon

Mon ressenti:

Pfiou! Pas facile! Autant je maîtrise les 21km du semi, autant le marathon ça en fait quand même le double, et puis c'est long 4h de course! On parle souvent du "mur" des 30km, je n'ai pas ressenti quelque chose de brutal, c'est plutôt une accumulation, le bout du rouleau. A partir du 35e km j'avoue avoir eu des phases de marche car mes muscles étaient à 200% de fatigue... par contre une fois la ligne d'arrivée franchie, quel pied! J'ai failli pleurer de joie mais j'étais trop occupé à souffrir plié en deux contre un muret en me disant "plus jamais ça!".

J'ai préparé ce marathon pendant 3 mois, je suis sorti courir après le travail, crevé, sous la pluie, le froid ou la chaleur, et ça a payé car j'ai augmenté significativement mon endurance et mon allure, et accessoirement j'ai perdu 5kg. Mais je suis quand même un peu déçu, mon objectif était de faire les 42km sans marcher. Tant pis, ce sera pour la prochaine fois...

Néanmoins je ne regrette pas, c'était un super premier marathon avec un super parcours en campagne le long de la Loire, avec une super médaille à la clé, une super veste élégante (avec le logo en gros), et surtout une super ambiance. En plus Jesus était avec nous et c'est vraiment un super cosplay :) Merci aux gens qui ont subit la pluie pour venir nous encourager, merci aux bénévoles qui ont rendu tout ceci possible, et merci à mes proches pour m'avoir soutenu.

J'aime le libre

Rédigé par uTux 24 commentaires

J'écris cet article pour combattre une idée que je vois revenir souvent dans la blogosphère (française), qui dit que dans l'univers du logiciel libre c'est le bordel, c'est la guerre, trop de choix, des distributions qui se combattent au lieu de s'unir, et des développeurs qui se moquent de leurs utilisateurs.

J'ai un problème avec ça car le libre c'est mon métier. Je suis ingénieur systèmes Linux et si j'en suis arrivé là, c'est parce que je baigne dans un univers où on partage les connaissances, où on peut lire le code, où on peut poser des questions, et où globalement les logiciels marchent bien. Il y a 20 ans encore l'informatique c'était très majoritairement du Microsoft, un monde payant dans lequel il fallait des diplômes, des livres, des certifications, c'était quand même assez fermé et peu accessible. Aujourd'hui les produits libres en vogue tels que Docker ou Ansible publient leur documentation, des howto, des quickstart, un repo github, et si on ajoute stackoverfow/stackexchange on peut s'auto-former en quelques semaines. Bien sûr l'expérience en production est importante et ce n'est qu'après quelques mois voire années qu'on peut se vendre comme "expert" sur cette technologie, mais au moins c'est possible. Allez essayer de vous auto-former avec un Windows Server et un Exchange, outre les spécifications matérielles très élevées, hors programme MSDNA c'est juste impossible à cause du coût des licences.

Le libre c'est aussi la culture Devops dont je fais partie et où Microsoft a bien du mal à se positionner. On automatise, on industrialise, on code, on pousse sur le repo git, les tests unitaires et l'intégration sont déclenchés tout seuls, et on s'amuse. Merci au libre de nous avoir montré qu'on peut faire autre chose qu'installer des .exe à la main ou avec des logiciels très cher tels que SCCM.

Donc au final quand je tombe sur des articles présentant le monde du logiciel libre comme game of thrones, je me dis que ce n'est que la vision desktop, les 1% de parts de marché pour lesquels j'ai abandonné tout espoir. On oublie la culture qu'il y a derrière et moi j'aime travailler avec le libre, pas pour les raisons extrémistes de RMS et la FSF, mais pour l'efficacité, le partage, les compétences, l'accessibilité.

Fil RSS des articles