By

Ajouter un disque NVMe sur un « vieux » PC

C’est possible, et l’étape la plus sensible est le boot quand le Bios de la carte mère ne le supporte pas.

Pour ma part, le but est d’installer un SSD rapide, pas trop cher, et qui consomme peu d’énergie sur mon PC « Proxmox » alimenté (partiellement) par énergie solaire.

Exemple de matériel

  1. Une carte « PCIE NVME Carte pour Key-M M.2 SSD »
  2. SSD interne 256 Go M.2 PCIe NVMe – 2280

Booter sur le disque MVNe

J’utilise une clé USB sur laquelle j’ai installé CLOVER : c’est un bootloader qui émule un Bios qui lui supporte le NVMe 🙂

Ce tuto explique bien comment copier Clover sur une clé USB, puis comment activer le support du MVNe : https://www.win-raid.com/t2375f50-Guide-NVMe-boot-without-modding-your-UEFI-BIOS-Clover-EFI-bootloader-method.html

Premiers résultats

C’est juste impressionnant !   (sur une CM Gigabyte « B75M-D3H », et un cpu « Intel(R) Core(TM) i3-3220 CPU @ 3.30GHz »)

root@proxmox1:~# hdparm -t -T /dev/nvme0n1
/dev/nvme0n1:
Timing cached reads: 13330 MB in 2.00 seconds = 6679.05 MB/sec
Timing buffered disk reads: 4092 MB in 3.00 seconds = 1363.96 MB/sec

Après l’aspect performance, l’aspect consommation électrique est aussi notable : en moyenne, environ 450 mA d’économisé.
Au repos, le PC consomme maintenant environ 1.4 A  (avec l’ancien disque dur 2″5 à 7200 tours/min, la consommation minimale était aux environs de 1.85 A)

 

By

Un PC alimenté en 12V

Après un Raspberry Pi alimenté par énergie solaire, donc sur une batterie de voiture (en 12V), le but est maintenant de faire tourner un PC avec de l’énergie solaire.

La premiere étape est de tester un module d’alimentation ATX, qui prend en entrée uniquement du 12V.

 

 

L’alimentation ATX comprend le bloc de 20+4 broche, et aussi 2 blocs de 4 broches et les connecteur pour les disques (Molex et Sata)

Puisqu’il faut se lancer, je teste avec ma carte mère ATX avec un core i3 et un disque 2″5

 

By

Sonoff – Tasmota – Jeedom – Domoticz

Modèle SONOFF 4CH rev2

Avec un chipset ESP2285

Raccordement serie pour flasher le firmaware (Tasmota)

Résultat une fois flashé et remonté

 

 

By

Openstack All In One (AIO)

All-in-one (AIO) builds are a great way to perform an OpenStack-Ansible build for:

  • a development environment
  • an overview of how all of the OpenStack services fit together
  • a simple lab deployment

Although AIO builds aren’t recommended for large production deployments, they’re great for smaller proof-of-concept deployments.

Absolute minimum server resources (currently used for gate checks):

  • 8 vCPU’s
  • 50GB free disk space on the root partition
  • 8GB RAM

Recommended server resources:

  • CPU/motherboard that supports hardware-assisted virtualization
  • 8 CPU Cores
  • 80GB free disk space on the root partition, or 60GB+ on a blank secondary disk. Using a secondary disk requires the use of thebootstrap_host_data_disk_device parameter. Please see Building an AIO for more details.
  • 16GB RAM

It’s possible to perform AIO builds within a virtual machine for demonstration and evaluation, but your virtual machines will perform poorly. For production workloads, multiple nodes for specific roles are recommended.

Building an AIO

There are three steps to running an AIO build, with an optional first step should you need to customize your build:

  • Configuration (this step is optional)
  • Install and bootstrap Ansible
  • Initial host bootstrap
  • Run playbooks

When building an AIO on a new server, it is recommended that all system packages are upgraded and then reboot into the new kernel:

Note

Execute the following commands and scripts as the root user.

Note Arnaud pour Ubuntu dans ProxMox :

# sudo add-apt-repository universe
# sudo apt install qemu-guest-agent
# Ubuntu
# apt-get dist-upgrade
# reboot
Note : If you are installing with limited connectivity, please review the Installing with limited connectivity appendix in the Deployment Guide before proceeding.

Start by cloning the OpenStack-Ansible repository and changing into the repository root directory:

# git clone https://git.openstack.org/openstack/openstack-ansible \
    /opt/openstack-ansible
# cd /opt/openstack-ansible

Next switch the applicable branch/tag to be deployed from. Note that deploying from the head of a branch may result in an unstable build due to changes in flight and upstream OpenStack changes. For a test (for example, not a development) build it is usually best to checkout the latest tagged version.

# # List all existing tags.
# git tag -l

# # Checkout the stable branch and find just the latest tag
# git checkout master
# git describe --abbrev=0 --tags

# # Checkout the latest tag from either method of retrieving the tag.
# git checkout master

Note

The Stein release is only compatible with Ubuntu 16.04 (Xenial Xerus), Ubuntu 18.04 (Bionic Beaver) Centos 7 and openSUSE Leap 42.X.

By default the scripts deploy all OpenStack services with sensible defaults for the purpose of a gate check, development or testing system.

Review the bootstrap-host role defaults file to see various configuration options. Deployers have the option to change how the host is bootstrapped. This is useful when you wish the AIO to make use of a secondary data disk, or when using this role to bootstrap a multi-node development environment.

The bootstrap script is pre-set to pass the environment variable BOOTSTRAP_OPTS as an additional option to the bootstrap process. For example, if you wish to set the bootstrap to re-partition a specific secondary storage device (/dev/sdb), which will erase all of the data on the device, then execute:

# export BOOTSTRAP_OPTS="bootstrap_host_data_disk_device=sdb"

By default the filesystem type will be set to ext4, if you want another type of filesystem to be used, just use something similar to the following:

# export BOOTSTRAP_OPTS="bootstrap_host_data_disk_device=sdb bootstrap_host_data_disk_fs_type=xfs"

Additional options may be implemented by simply concatenating them with a space between each set of options, for example:

# export BOOTSTRAP_OPTS="bootstrap_host_data_disk_device=sdb"
# export BOOTSTRAP_OPTS="${BOOTSTRAP_OPTS} bootstrap_host_ubuntu_repo=http://mymirror.example.com/ubuntu"

You may wish to change the role fetch mode. Options are galaxy and git-clone. The default for this option is galaxy.

options:
galaxy: Resolve all role dependencies using the ansible-galaxy resolver
git-clone: Clone all of the role dependencies using native git
Notes:
When doing role development it may be useful to set ANSIBLE_ROLE_FETCH_MODE to git-clone. This will provide you the ability to develop roles within the environment by modifying, patching, or committing changes using an intact git tree while the galaxyoption scrubs the .git directory when it resolves a dependency.
$ export ANSIBLE_ROLE_FETCH_MODE=git-clone

The next step is to bootstrap Ansible and the Ansible roles for the development environment. Deployers can customize roles by adding variables to override the defaults in each role (see Overriding default configuration). Run the following to bootstrap Ansible:

# scripts/bootstrap-ansible.sh
Notes:

You might encounter an error while running the Ansible bootstrap script when building some of the Python extensions (like pycrypto) which says:

configure: error: cannot run C compiled programs.

The reason of this failure might be resulting from a noexec mount flag used for the filesystem associated with /tmp which you can check by running the following command:

# mount | grep $(df /tmp | tail -n +2 | awk '{print $1}') | grep noexec

If this is the case you can specify an alternate path which does not have this mount option set:

# TMPDIR=/var/tmp scripts/bootstrap-ansible.sh

In order for all the services to run, the host must be prepared with the appropriate disks partitioning, packages, network configuration and configurations for the OpenStack Deployment.

For the default AIO scenario, this preparation is completed by executing:

# scripts/bootstrap-aio.sh

If you wish to use a different scenario, for example, the Ceph scenario, execute the following:

# export SCENARIO='ceph'
# scripts/bootstrap-aio.sh

Tested Scenarios

To add OpenStack Services over and above the bootstrap-aio default services for the applicable scenario, copy the conf.d files with the .aio file extension into /etc/openstack_deploy and rename then to .yml files. For example, in order to enable the OpenStack Telemetry services, execute the following:

# cd /opt/openstack-ansible/
# cp etc/openstack_deploy/conf.d/{aodh,gnocchi,ceilometer}.yml.aio /etc/openstack_deploy/conf.d/
# for f in $(ls -1 /etc/openstack_deploy/conf.d/*.aio); do mv -v ${f} ${f%.*}; done

To add any global overrides, over and above the defaults for the applicable scenario, edit/etc/openstack_deploy/user_variables.yml. See the Deployment Guide for more details.

Finally, run the playbooks by executing:

# cd /opt/openstack-ansible/playbooks
# openstack-ansible setup-hosts.yml
# openstack-ansible setup-infrastructure.yml
# openstack-ansible setup-openstack.yml

The installation process will take a while to complete, but here are some general estimates:

  • Bare metal systems with SSD storage: ~ 30-50 minutes
  • Virtual machines with SSD storage: ~ 45-60 minutes
  • Systems with traditional hard disks: ~ 90-120 minutes

Once the playbooks have fully executed, it is possible to experiment with various settings changes in /etc/openstack_deploy/user_variables.yml and only run individual playbooks. For example, to run the playbook for the Keystone service, execute:

# cd /opt/openstack-ansible/playbooks
# openstack-ansible os-keystone-install.yml

Rebooting an AIO

As the AIO includes all three cluster members of MariaDB/Galera, the cluster has to be re-initialized after the host is rebooted.

This is done by executing the following:

# cd /opt/openstack-ansible/playbooks
# openstack-ansible -e galera_ignore_cluster_state=true galera-install.yml

If this fails to get the database cluster back into a running state, then please make use of the Galera Cluster Recovery section in the operations guide.

Rebuilding an AIO

Sometimes it may be useful to destroy all the containers and rebuild the AIO. While it is preferred that the AIO is entirely destroyed and rebuilt, this isn’t always practical. As such the following may be executed instead:

# # Move to the playbooks directory.
# cd /opt/openstack-ansible/playbooks

# # Destroy all of the running containers.
# openstack-ansible lxc-containers-destroy.yml

# # On the host stop all of the services that run locally and not
# #  within a container.
# for i in \
       $(ls /etc/init \
         | grep -e "nova\|swift\|neutron\|cinder" \
         | awk -F'.' '{print $1}'); do \
    service $i stop; \
  done

# # Uninstall the core services that were installed.
# for i in $(pip freeze | grep -e "nova\|neutron\|keystone\|swift\|cinder"); do \
    pip uninstall -y $i; done

# # Remove crusty directories.
# rm -rf /openstack /etc/{neutron,nova,swift,cinder} \
         /var/log/{neutron,nova,swift,cinder}

# # Remove the pip configuration files on the host
# rm -rf /root/.pip

# # Remove the apt package manager proxy
# rm /etc/apt/apt.conf.d/00apt-cacher-proxy

Should an existing AIO environment need to be reinstalled, the most efficient method is to destroy the host operating system and start over. For this reason, AIOs are best run inside of some form of virtual machine or cloud guest.

Reference Diagram for an AIO Build

Here is a basic diagram that attempts to illustrate what the resulting AIO deployment looks like.

This diagram is not to scale and is not even 100% accurate, this diagram was built for informational purposes only and should ONLY be used as such.

          ------->[ ETH0 == Public Network ]
          |
          V                        [  *   ] Socket Connections
[ HOST MACHINE ]                   [ <>v^ ] Network Connections
  *       ^  *
  |       |  |-------------------------------------------------------
  |       |                                                         |
  |       |---------------->[ HAProxy ]                             |
  |                                 ^                               |
  |                                 |                               |
  |                                 V                               |
  |                          (BR-Interfaces)<------                 |
  |                                  ^     *      |                 |
  *-[ LXC ]*--*----------------------|-----|------|----|            |
  |           |                      |     |      |  | |            |
  |           |                      |     |      |  | |            |
  |           |                      |     |      |  | |            |
  |           |                      |     |      V  * |            |
  |           *                      |     |   [ Galera x3 ]        |
  |        [ Memcached ]<------------|     |           |            |
  *-------*[ Rsyslog ]<--------------|--|  |           *            |
  |        [ Repos Server x3 ]<------|  ---|-->[ RabbitMQ x3 ]      |
  |        [ Horizon x2 ]<-----------|  |  |                        |
  |        [ Nova api ec2 ]<---------|--|  |                        |
  |        [ Nova api os ]<----------|->|  |                        |
  |        [ Nova console ]<---------|  |  |                        |
  |        [ Nova Cert ]<------------|->|  |                        |
  |        [ Cinder api ]<-----------|->|  |                        |
  |        [ Glance api ]<-----------|->|  |                        |
  |        [ Heat apis ]<------------|->|  | [ Loop back devices ]*-*
  |        [ Heat engine ]<----------|->|  |    \        \          |
  | ------>[ Nova api metadata ]     |  |  |    { LVM }  { XFS x3 } |
  | |      [ Nova conductor ]<-------|  |  |       *         *      |
  | |----->[ Nova scheduler ]--------|->|  |       |         |      |
  | |      [ Keystone x3 ]<----------|->|  |       |         |      |
  | | |--->[ Neutron agents ]*-------|--|---------------------------*
  | | |    [ Neutron server ]<-------|->|          |         |      |
  | | | |->[ Swift proxy ]<-----------  |          |         |      |
  *-|-|-|-*[ Cinder volume ]*----------------------*         |      |
  | | | |                               |                    |      |
  | | | -----------------------------------------            |      |
  | | ----------------------------------------- |            |      |
  | |          -------------------------|     | |            |      |
  | |          |                              | |            |      |
  | |          V                              | |            *      |
  ---->[ Compute ]*[ Neutron linuxbridge ]<---| |->[ Swift storage ]-

By

Pet Feeder v2

A l’approche des vacances de l’été 2017, j’ai finalisé une version utilisable du Pet Feeder. Ce Pet Feeder est un nouveau prototype, qui utilise les même principes mécaniques, mais dont l’électronique a évolué. Plus précisément, c’est la partie programmable qui a changé. Maintenant, il n’y a plus de micro-contrôleur ATméga (arduino Uno), mais uniquement un ESP8266. L’ESP8266, sous forme d’un module « NodeMCU », apporte un micro-processeur, de la mémoire, des GPIO, et du Wifi. Point de vu capacité mémoire et puissance de traitement, c’est plusieurs crans au dessus de l’arduino (Normal !).
Accessoirement, certaines pièces ont été imprimées en 3D. C’est pratique pour faire du sur-mesure.

 

By

Pet Feeder v1

Il faut bien nourrir le chat pendant les vacances, puisque nous ne pouvons pas toujours l’emmener avec nous.

On trouve toute sorte de montage sur internet, du broyeur de croquettes jusqu’au montage de « Doc » dans « retour vers le futur » !

20160615_220723.jpg

J’ai commencé par faire un premier prototype, mais j’ai été confronté à un problème de taille, puisque la machine peut se bloquer, si une croquette se coince 🙁

 

 

 

 

Je suis donc revenu à un système comparable aux distributeurs de corne flakes, ou plus généralement de dry food. Pour faire simple, une roue avec des ailettes dans un tube, sous un entonoire, sous un grand tube.

La difficulté a été de trouver un équivalent à cette roue à ailettes, stratégique au montage. Finalement, j’ai pensé utiliser ca : wp-1466453449644.jpg un goupillon pour nettoyer les bouteilles.

 

J’ai juste coupé aux bonnes dimensions, et utilisé un bout de domino électrique pour caler en translation, et solidariser avec le moteur.

 

Ensuite, j’ai fixé une petite plateforme en bois pour poser le moteur, et ajouter quelques bouts de PVC et construit un support en bois :

wp-1466453464245.jpg

wp-1466453482269.jpg

wp-1466453436871.jpgwp-1466453496591.jpg

 

 

 

 

 

Au final, cela ressemble à ceci :

wp-1466453395807.jpgwp-1466453381035.jpg

Maintenant, je m’attaque à la programmation.

Je vais utiliser un AT-MEGA 328p (arduino UNO from scratch), un ESP8266, et quelques autres composants …

 

 

 

Update du 07/07/2016

Apres une dizaine de jours d’utilisation, ce montage remplie sa fonction à merveille. Une dose est bien distribuée toutes les 12h environ. Plus exactement, toutes les 12h05 : il faudra améliorer la partie programmation horaire.

Le niveau de croquettes évolue selon les prévisions, assez régulièrement, même si le capteur n’a une précision qu’en centimètre. PetFeeder_2-week

C’est aussi quelque chose à améliorer pour la prochaine version… si possible, approcher une précision de quelques millimètres.

 

Et puisqu’il est toujours préférable de vérifier qu’un bricolage fonctionne convenablement, voici le preuve en image (caméra IP en mode infra-rouge, donc en noir et blanc)607228_2016-06-26-22_52_21.jpg.jpg

La chat a très vite repéré le bruit de ce drôle d’engin, et se précipite dessus.
Je peux l’affirmer grâce à une autre webcam, qui couvre son panier dans le garage, près de la chatière.

 

 

 

 

 

By

Un ordinateur solaire en Bretagne !

Un ordinateur allumé en permanence, mais sans utiliser d’électricité, enfin venant d’EDF. Est ce un peu audacieux comme projet en Bretagne ? Ça se discute …

Bon, d’accord le panneau solaire est assez grand, et l’ordinateur est un raspberry pi.

wp-1456252010877.jpgLa partie alimentation et gestion de l’énergie est composée de :

  • un panneau solaire 18V de 80W
  • une batterie 12V de 7.2 VA
  • une batterie 12V de 40 VA (update du 11 juin 2016)
  • un module de gestion de la charge (batterie 12v plomb-acide)
  • un régulateur de tension 5v (prise USB sur allume-cigare)

 

 

wp-1456251996247.jpg

La partie informatique est composée de :

  • un Raspberry Pi (modele B)
  • une carte WiFi USB (Alpha 036)

 

 

 

 

A venir : tester un convertisseur de tension continue (DC-DC), dont l’efficacité doit approcher les 92%

wp-1456251974544.jpg

Je vais aussi superviser la charge de la batterie et l’alimentation venant du panneau solaire. Je vais donc suivre les tensions et les courants autours de la batterie. Un Arduino fera très bien l’affaire. Il pourrait même, à terme, optimiser l’exposition du panneau solaire, en l’inclinant pour qu’il « suive » le soleil …

 

dongle-voltmetre-USBUpdate du 31/03/2016

J’ai commandé un dongle USB qui mesure la tension électrique (V), l’intensité (A), et la capacité (mAh).

Le modèle de Raspberry pi que j’ai retenu initialement est un modèle B, donc la première version. La mauvaise nouvelle, c’est que ce modèle consomme finalement le double de courant que la version 3 !

Avec une carte Wifi en USB, le Raspberry Pi v1 modele B consomme environ 0.53A
Le Raspberry pi 3 consomme environ 0.23A. (avec son Wifi intégré)img_20160331_211411.jpg
Fort de ce constat, j’ai remplacé le raspberry v1 par un v3. Je devrai donc doubler l’autonomie de cette machine. A suivre …

 

By

ESP8266 (modèle ESP-201)

Les modules ESP8266 sont déclinés en différents modèles, avec des brochages différents. Il intègrent du Wifi et un processeur 32bits. leur prix est de quelques euros seulement.(à partir de 3 ou 4 euro sur ebay.fr)
ESP8266-ESP-201-IMG_7898

Avec les firmwares par défaut, il est possible de les piloter avec des simples commandes « AT », comme les modem, donc facile à interfacer avec un arduino en RS232. Il est aussi possible de les flasher avec d’autres firmwares, afin d’en faire des modules autonomes.

Ce modèle, le ESP201, possède plus de broches (GPIO) et la possibilité de connecter une antenne externe.

Important : ne pas alimenter le module en plus que 3.3V, et ne pas exposer les « IO » du module à plus de 3.3V. Il faut éventuellement utiliser un pont diviseur de tension si on le connecte à d’autres modules en 5V (un arduino par exemple).

Pour l’instant, mon module ESP8266 est connecté à un CP2102 (convertisseur USB / Série), et branché sur une Rapsberry Pi 2.
Voici le câblage : wpid-wp-1441548113244.jpg

CP2102 ESP8266
3.3V 3.3V
GND GND
TX RX
RX TX
3.3V CHIP_EN
GND IO15

Sous Linux, on peut utiliser la commande « cu », comme par exemple :

 cu -l /dev/ttyUSB1 -s 115200

A la fin des commandes AT saisies en ligne de commande, il faut lui envoyer un <CR> <LF>, soit <ctrl>-M et <ctrl>-J. au lieu de faire <enter>.

AT ctrl-M ctrl-J

OK

Pour se déconnecter, il faut entrer la séquence « ~. »

 

By

Mirantis openstack 6.1

Mirantis openstack 6.1 (anciennement « Fuel ») est sorti au mois de juin 2015, et embarque de nombreuses évolutions tel que les plugins.
La version d’openstack déployée est « Juno », et les OS utilisés sont « Ubuntu 14.04.1 » et « Cent-OS 6.5 ».

La page officielle des plugins est ici : Plugins Mirantis  (il faut créer un environnement après avoir installé les plugins pour profiter des fonctionnalités.)

NB : Les archives des plugins sont directement disponibles ici : http://plugins.mirantis.com/repository

Pour installer un plugin, il faut télécharger le RPM, puis l’installer avec la commande

fuel plugins --install xxxxx.rpm

Pour mettre à jour Mirantis openstack, xxxxx

Pour créer un miroir de package sur le fuel master, il faut lancer la commande suivante sur sur le master.

fuel-createmirror

La prochaine version est la « 7 », et doit sortir le 30 septembre 2015 (Roadmap). Elle embarquera openstack « Kilo ».

By

Ventilateurs d’un serveur HP SE316M

Modèle SE316M1 à la même carte mère que le SE1220G7 et le SE1120G7. il sont similaires au DL160G6.

Voici le connecteur des ventilateurs sur la carte mère :

DL180G6FanConnector

Type de connecteur : 2510 2.54mm 6 Pin JST

Fonctions : alimenter DEUX ventilateurs en 12v, envoyer des signaux PWM à chacun, et mesurer les vitesses de rotation de chacun.

Les broches des capteurs de vitesse de rotation sont en mode collecteur ouvert, et sont donc mutualisables : un seul ventilateur peut envoyer des signaux (vers la masse) aux deux broches « sensor » de la carte mère.

 

Ventilateur 4 PIN

Connecteurs de ventilateur pour carte-mère

Comme les ventilateurs, ou plutôt les turbines, d’un boitier 1U font énormément de bruit, je souhaite les remplacer par des ventilateurs plus grand, et donc moins bruyant. Le format de connecteur pour les ventilateurs de PC est standard, avec 4 broches :

 

 

Voici l’adaptateur que j’ai construit :

wpid-img_20141220_1102032.jpg.jpeg

 

 

 

 

 

 

 

Voici le câblage :

6 PIN Description 4 PIN
1 Outlet sense (blue) X (3)
2 pwm control (yellow, both fans tied together) X (4)
3 Inlet sense (blue) X (3)
4 Inlet power (red, 12v)
5 gnd (both fans tied together) X (1)
6 Outlet power (red, 12v) X (2)