lundi 8 avril 2019

PODMAN et CNI (Container Network Interface)



Podman permet de gérer vos containers, vos pods, vos images et vos volumes de conteneur, tout ça sans démon.

Cela apporte des avantages indéniables en termes de sécurité, et de flexibilité.
Podman utilise les mêmes commandes que Docker, à quelques exceptions près.

Le lien sur github:
https://github.com/containers/libpod


Exemple de lancement d'un container avec podman:
[root@localhost ~]# podman run --name busybox1 -it --rm busybox
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
3: eth0@if17: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
    link/ether 46:d8:4e:35:f3:f5 brd ff:ff:ff:ff:ff:ff
    inet 10.88.0.43/16 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::44d8:4eff:fe35:f3f5/64 scope link
       valid_lft forever preferred_lft forever
/ #
Le pool par défaut du CNI est  10.88.0.0/16

[root@localhost ~]# ip netns list
cni-a8efaeae-04dc-88d4-7cbe-db589c24e362 (id: 0)
Il existe plusieurs types de configurations CNI.

Nous verrons les modes réseaux suivants:

  • mode bridge
  • mode portmap
  • mode host-device
Le lien sur github:






mardi 12 février 2019

Jeedom sous docker avec mysql 5.7

Voici ma conf avec le reverse proxy traefik en utilisant docker-compose:

docker-compose.yml
version: '2'

services:

  jeedom-server:
    container_name: jeedom-server
    image: jeedom/jeedom:stable
    networks:
     - proxy
     - internal
    labels:
     - "traefik.enable=true"
     - "traefik.port=80"
     - "traefik.backend=jeedom-server"
     - "traefik.frontend.rule=Host:jeedom.domain.com"
     - "traefik.docker.network=proxy"
    ports:
     - "9070:80"
     - "9022:22"
    volumes:
     - /home/docker/jeedom/data/jeedom:/var/www/html
    depends_on:
     - db
    devices:
      - "/dev/ttyUSB0:/dev/ttyUSB0"
      - "/dev/ttyUSB1:/dev/ttyUSB1"
    environment:
     - ROOT_PASSWORD=mdpssh
    mac_address: 03:45:aa:15:01:03
    restart: always

  db:
    container_name: jeedom-mysql
    image: mysql:5.7
    command: --default-authentication-plugin=mysql_native_password
    networks:
     - internal
    ports:
     - "3306:3306"
    volumes:
     - /home/docker/jeedom/data/mysql:/var/lib/mysql
    environment:
     - MYSQL_ROOT_PASSWORD=mdp_root_mysql
    labels:
     - traefik.enable=false
    restart: always

networks:
   proxy:
     external: true
   internal:
     external: false
Cette configuration utilise le container jeedom/jeedom et le container mysql:5.7
Dans la doc Jeedom, cela n'est pas précisé, donc pensez au tag 5.7.
Aussi, ne pas démarrer un container avec le mode –privileged , tel qu'on peut le lire dans la doc Jeedom.

La ligne:
command: --default-authentication-plugin=mysql_native_password
est importante, car elle force à utiliser le mode d'authentification natif sur la base MYSQL.
La nouvelle méthode d'authentification utilise le sha-256 pour le hash des mots de passe. https://dev.mysql.com/doc/refman/8.0/en/caching-sha2-pluggable-authentication.html

Une précision, à partir de MySQL 5.7, le modèle de sécurité a changé. Il n'est plus possible de se connecter en root autrement qu'en localhost.

On obtient l'erreur suivante:
ERROR 1045 (28000): Access denied for user 'root'@'172.17.0.1' (using password: YES)

Il faudrait accepter tous les clients:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password';

Cette solution n'est pas très secure.

La solution à adopter consiste à rajouter un utilisateur uniquement pour la base de données:

Connexion au conteneur mysql:
[root@powernas1 config]# docker exec -it jeedom-mysql /bin/bash
root@0ba7d5saed2a:/# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 18177
Server version: 5.7.25 MySQL Community Server (GPL)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
Vous êtes connectés sur la base mysql, reste à saisir les requêtes sql suivantes:
mysql> SELECT User, Host, authentication_string FROM mysql.user;
+---------------+-----------+-------------------------------------------+
| User          | Host      | authentication_string                     |
+---------------+-----------+-------------------------------------------+
| root          | localhost | *BXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys     | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| root          | %         | *BXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
+---------------+-----------+-------------------------------------------+
4 rows in set (0.00 sec)

mysql> CREATE USER 'jeedom'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON jeedom.* To 'jeedom'@'%' IDENTIFIED BY 'mdp_xxxxxxxxxx';
Query OK, 0 rows affected, 1 warning (0.00 sec)
Changer le mot de passe dans la conf de jeedom:

Dans /home/docker/jeedom/data/jeedom/core/config, modifier le fichier common.config.php
/* * *********************** MySQL & Memcached ******************* */
global $CONFIG;
$CONFIG = array(
        //MySQL parametres
        'db' => array(
                'host' => 'jeedom-mysql',
                'port' => '3306',
                'dbname' => 'jeedom',
                'username' => 'jeedom',
                'password' => 'mdp_xxxxxxxxxx',
        ),
);
?>
Suppression de l'utilisateur root@%

mysql> DROP USER 'root'@'%';
Query OK, 0 rows affected (0.00 sec)
Il est aussi possible de prévoir l'utilisateur de la base jeedom en utilisant les variables d'environnements prévues par le container: https://hub.docker.com/_/mysql
environment:
 - MYSQL_ROOT_PASSWORD=mdp_root_mysql
 - MYSQL_DATABASE=jeedom
 - MYSQL_USER=jeedom
 - MYSQL_PASSWORD=mdp_xxxxxxxxxx

samedi 15 décembre 2018

Découverte du Circuit Background Express

Voici à quoi cela ressemble:

 



Attention, il existe deux versions:

Classic version : Arduino and Code.org
Express version : MakeCode, CircuitPython, Arduino, et Code.org CS Discoveries.

Ici, il s'agit de la version Express.

Le kit de démarrage:

  • 1 circuit playground express
  • 1 cable USB
  • 1 bloc batterie avec trois piles aaa

Parfait pour apprendre à programmer aux enfants:
https://makecode.adafruit.com


https://cdn-learn.adafruit.com/downloads/pdf/make-it-sense.pdf

vendredi 9 novembre 2018

RIKA FIRENET

Module RIKA Firenet

Ce module, vendu assez cher, permet de domotiser la plupart des poêles RIKA. C'est un convertisseur USB / Serial disposant d'une puce WIFI et qui se connecte en https vers un serveur chez Rika.

Vue du circuit imprimé:


Schéma de principe:




Trouver l'IP du Rika Firenet.
Le hostname de la clé: iwm-BE-50-AF
Le mieux est de faire une réservation dans le serveur DHCP.


Les liens disponibles:

http://192.168.1.65/index.html

ST SPWF01S Intelligent WiFi Module

Welcome to the ST SPWF01S intelligent Wi-Fi module.
This page was delivered from the SPWF01S internal HTTP server.
SPWF01S Configuration Settings Page
SPWF01S Status Page
SPWF01S Peers Page
More information about the SPWF01S and other ST products can be found at ST's website: http://www.ST.com/.


http://192.168.1.65/output_demo.html
http://192.168.1.65/input_demo.shtml
http://192.168.1.65/remote.html
http://192.168.1.65/message.shtml
http://192.168.1.65/remote.html
http://192.168.1.65/firstset.html

Flux:

LAN tcp 192.168.1.65:56050 -> 176.34.185.163:443
LAN tcp 192.168.1.65:55509 -> 54.247.85.77:443
LAN tcp 192.168.1.65:64735 -> 46.137.190.145:443

Il s'agit du nom de domaine : rika-fire-stv.herokuapp.com https://www.whatsmydns.net/#A/www.rika-firenet.com

User-Agent: RIKA-Stove
Host: rika-fire-stv.herokuapp.com
POST /api/stove/

Dialogue avec le SPWF01S d’après le firmware:

 AT
 AT+CFUN=1
 AT+S.HTTPGET=www.rika.at,/Verbindungstest.html
 AT+S.TLSCERT2=clean,all
 AT&F
 AT+S.TLSCERT=f_ca,1246
 AT+S.TLSCERT=f_content,0
 AT+S.TLSDOMAIN=f_domain,stv.rika-firenet.com
 AT+S.SCFG=wifi_priv_mode,2
 AT+S.SCFG=wifi_priv_mode,0
 AT+S.SOCKW=00, AT+S.SOCKW=00, AT+S.SCAN
 AT+S.SETTIME=1538352000
 AT+S.SOCKC=00
 AT+S.SOCKON=rika-fire-stv.herokuapp.com,443,s,ind
 AT+S.SOCKQ=00
 AT+S.SOCKR=00, AT+S.SSIDTXT= AT&W
 AT+S.SCFG=wifi_mode,1
 AT+S.SCFG=wifi_wpa_psk_text,


Après plusieurs essais, la solution consisterait à écouter les transactions entre le host (STM32) et le SPWF01S.

Résultat d'un lsusb -v sur le dongle USB Rika:

Bus 001 Device 019: ID 0483:5740 STMicroelectronics Virtual COM Port
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            2 Communications
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  idVendor           0x0483 STMicroelectronics
  idProduct          0x5740 Virtual COM Port
  bcdDevice            2.00
  iManufacturer           1 STMicroelectronics
  iProduct                2 STM32 Virtual COM Port  
  iSerial                 3 48FBE3485324
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           67
    bNumInterfaces          2
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0xc0
      Self Powered
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         2 Communications
      bInterfaceSubClass      2 Abstract (modem)
      bInterfaceProtocol      1 AT-commands (v.25ter)
      iInterface              0 
      CDC Header:
        bcdCDC               1.10
      CDC Call Management:
        bmCapabilities       0x00
        bDataInterface          1
      CDC ACM:
        bmCapabilities       0x02
          line coding and serial state
      CDC Union:
        bMasterInterface        0
        bSlaveInterface         1 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0008  1x 8 bytes
        bInterval             255
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass        10 CDC Data
      bInterfaceSubClass      0 Unused
      bInterfaceProtocol      0 
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x03  EP 3 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               0
Device Status:     0x0001
  Self Powered


Liens:

http://www.emcu.it/WiFi/Presentazioni/WiFiMKT19may2014.pdf
https://www.st.com/content/ccc/resource/sales_and_marketing/presentation/product_presentation/group0/d9/23/1a/c2/0c/55/46/2c/STSW-IDW002%20Wifi%20hands-on%20training/files/stsw-idw002_wifi_training.pdf/jcr:content/translations/en.stsw-idw002_wifi_training.pdf


jeudi 18 octobre 2018

PfSense sur PC Engines APU4B4

Présentation du pc engines apu4B4

https://www.pcengines.ch/apu4b4.htm



Achat sur https://varia-store.com/en/produkt/32328-pc-engines-apu4b4-system-board-4x-lan-4-gb-ram.html

Achat du msata Kingston SSD UV500 msata (SUV500MS/120G) 


Achat du câble série StarTech.com ICUSB232FTN Câble adaptateur DCE USB vers série RS232 DB9 null modem 1 port avec FTDI 



La carte mère:


Le processeur:


GE412TIYJ44JB : AMD G-Series SoC Steppe Eagle GX-412TC, 1.2GHz 4C 6W, No GPU

https://www.amd.com/en/system/files?file=2017-06/g-series-soc-product-brief.pdf


General information
TypeSystem-on-a-Chip
Market segmentEmbedded
Family
AMD G-Series
Model numberGX-412TC
SoC part number
  • GE412TIYJ44JB is an OEM/tray SoC
Frequency1200 MHz
Package769-ball lidless Flip Chip Ball Grid Array
SocketBGA769 (FT3b)
Size0.96" x 0.96" / 2.45cm x 2.45cm
Weight0.1oz / 1.8g
Introduction dateJune 6, 2014
End-of-Life dateLast order date is 4th quarter 2023
Last shipment date is 2nd quarter 2024
Architecture / Microarchitecture
MicroarchitecturePuma
Processor coreCrowned Eagle
Manufacturing process0.028 micron
Data width64 bit
The number of CPU cores4
The number of threads4
Floating Point UnitIntegrated
Level 1 cache size4 x 32 KB instruction caches
4 x 32 KB data caches
Level 2 cache size2 MB 16-way set associative shared cache
Level 3 cache sizeNone
MultiprocessingUniprocessor
Extensions and Technologies
  • MMX instructions
  • Extensions to MMX
  • SSE / Streaming SIMD Extensions
  • SSE2 / Streaming SIMD Extensions 2
  • SSE3 / Streaming SIMD Extensions 3
  • SSSE3 / Supplemental Streaming SIMD Extensions 3
  • SSE4a
  • SSE4 / SSE4.1 + SSE4.2 / Streaming SIMD Extensions 4
  • AES / Advanced Encryption Standard instructions
  • AVX / Advanced Vector Extensions
  • BMI1 / Bit Manipulation instructions 1
  • F16C / 16-bit Floating-Point conversion instructions
  • AMD64 / AMD 64-bit technology
  • AMD-V / AMD Virtualization technology
  • EVP / Enhanced Virus Protection
Integrated peripherals / components
Integrated graphicsNone
Memory controllerThe number of controllers: 1
Memory channels: 1
Supported memory: DDR3-1600
DIMMs per channel: up to 2
ECC supported: Yes
Other peripherals
  • PCI-Express interface
  • Platform Security Processor
  • SATA interface
  • USB interface
  • SD controller
Electrical / Thermal parameters
Minimum/Maximum operating temperature0°C - 90°C
Thermal Design Power6 Watt
Notes on AMD G-Series GX-412TC
  • Embedded microprocessor

Installation:

http://pcengines.ch/howto.htm#OS_installation

https://www.pfsense.org/download/



Message d'erreur lors de l'installation de pfSense sur l'APU4B4 avec mon mSATA et avec le BIOS v4.6.4: CAM status: Command timeout


ahcich0: Timeout on slot 13 port 0
ahcich0: is 00000008 cs 00000000 ss 00000000 rs ffffffff tfd 40 serr 
00000000 cmd 00406d17            mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj
(ada0:ahcich0:0:0:0): WRITE_FPDMA_QUEUED. ACB: 61 30 b8 48 dc 40 00 00 00 00 00 00
(ada0:ahcich0:0:0:0): CAM status: Command timeout
(ada0:ahcich0:0:0:0): Retrying command

Résolution du problème:

When main installer menu pops up do the following:
  • for BIOS v4.0.x let it boot automatically
  • for BIOS v4.6.7 or older, interrupt the installer by pressing ESC and type following commands:
    set hint.ahci.0.msi="0"
    boot
Source: https://github.com/pcengines/apu2-documentation/blob/master/docs/pfSense-install-guide.md

lundi 15 octobre 2018

Oracle Database sur Openshift

Ici, nous allons mettre en oeuvre la database Oracle 12.2.0.1 sur Openshift.
Pour les essais, on prendra minishift.
On peut trouver la procédure sur le lien suivant:
https://docs.okd.io/latest/minishift/getting-started/index.html


Augmenter la taille de la base:
En effet, la base de donnée Oracle 12.2.0.1 demande environ 13 Gb pour la construction de l'image.
Dans /etc/docker/editer ou créer le fichier daemon.json :
# cat daemon.json 
{
  "storage-driver": "devicemapper",
  "storage-opts": [
    "dm.basesize=50G"
  ]
}
Redémarrer docker :
# systemctl restart docker

Vérification du Base Device Size par la commande docker info:
# docker info | grep Base
 Base Device Size: 53.69GB

Nous pouvons maintenant nous lancer dans la construction de l'image docker Oracle Database 12.2.0.1.
Cette image va être construite à partir des sources de Oracle:
https://github.com/oracle/docker-images/tree/master/OracleDatabase/SingleInstance

Télécharger le zip :
https://github.com/oracle/docker-images
$ mkdir oracle12ee
$ cd oracle12ee
$ wget https://github.com/oracle/docker-images/archive/master.zip
$ unzip master.zip
Il faut aussi le binaire linuxx64__database.zip de Oracle à mettre dans le bon répertoire dockerfiles

Lancer le script:
$ cd $HOME/oracle12e/docker-images-master/OracleDatabase/SingleInstance/dockerfiles
$ ./buildDockerImage.sh 

Usage: buildDockerImage.sh -v [version] [-e | -s | -x] [-i] [-o] [Docker build option]
Builds a Docker Image for Oracle Database.
  
Parameters:
   -v: version to build
       Choose one of: 11.2.0.2  12.1.0.2  12.2.0.1  18.3.0  
   -e: creates image based on 'Enterprise Edition'
   -s: creates image based on 'Standard Edition 2'
   -x: creates image based on 'Express Edition'
   -i: ignores the MD5 checksums
   -o: passes on Docker build option

* select one edition only: -e, -s, or -x

LICENSE UPL 1.0

Copyright (c) 2014-2018 Oracle and/or its affiliates. All rights reserved.
Pour construire l'image d'une base de données Oracle "Enterprise Edition" dans la version 12.2.0.1:
$ sudo ./buildDockerImage.sh -v 12.2.0.1 -e
Sauvegarder l'image
# docker save -o oracle12.2.0.1-ee oracle/database
Restaurer l'image sur votre repository docker local de votre serveur Openshift:
# docker load -i oracle12.2.0.1-ee oracle/database
Maintenant, nous allons pusher l'image vers la registry d'openshift:
Connaitre l'adresse IP de la registry:
$ minishift openshift registry
172.30.1.1:5000
Seter l'environnement:
$ minishift oc-env
export PATH="/home/serge/.minishift/cache/oc/v3.10.0/linux:$PATH"
# Run this command to configure your shell:
# eval $(minishift oc-env)
$ eval $(minishift oc-env)
Se connecter sur minishift:
$ docker login -u `oc whoami` -p `oc whoami --show-token` 172.30.1.1:5000
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /home/f074170/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
Création d'un nouveau projet:
$ oc new-project oracle --display-name=Oracle
Tag de l'image avec le nom de la registry:
$ docker tag oracle/database:12.2.0.1-ee 172.30.1.1:5000/oracle/database
Push vers la registry:
$ docker push 172.30.1.1:5000/oracle/database
Il est possible d'utiliser skopeo pour copier l'image entre registry.

Déployer l'image dans openshift:
$ oc new-app --image-stream=database --name=oracle12ee
Exposer les services:
$ oc expose service oracle12ee
Résoudre les pbs de droits avec minishift:
$ ./minishift addon apply anyuid
-- Applying addon 'anyuid':.
 Add-on 'anyuid' changed the default security context constraints to allow pods to run as any user.
 Per default OpenShift runs containers using an arbitrarily assigned user ID.
 Refer to https://docs.okd.io/latest/architecture/additional_concepts/authorization.html#security-context-constraints and
 https://docs.okd.io/latest/creating_images/guidelines.html#openshift-origin-specific-guidelines for more information.

Résoudre les pbs de droits avec OPENSHIFT:

$ oc create serviceaccount useroot

$ oc adm policy add-scc-to-user anyuid -z useroot

$ oc patch dc/oracle12ee --patch '{"spec":{"template":{"spec":{"serviceAccountName": "useroot"}}}}'
 
 
Liens:
https://blog.dbi-services.com/oracle-database-on-openshift/
https://geraldonit.com/2017/08/21/creating-an-oracle-database-docker-image/
https://medium.com/@adilsonbna/importing-an-external-docker-image-into-red-hat-openshift-repository-c25894cd3199
https://piotrminkowski.wordpress.com/tag/openshift/
https://blog.openshift.com/understanding-service-accounts-sccs/

mardi 27 mars 2018

docker-compose au boot du serveur - Redhat / Centos 7

Plateforme: Redhat 7.4

Dans /etc/systemd/system , créer un fichier de la forme docker-compose-app.service


Prenons l'exemple pour le service traefik.

On crée le fichier docker-compose@traefik.service

Contenu du fichier docker-compose@traefik.service:

[Unit]
Description=%i service with docker compose
Requires=docker.service
After=docker.service

[Service]
Restart=always

WorkingDirectory=/home/docker/%i

# Compose up
ExecStart=/usr/bin/docker-compose up

# Compose down, remove containers and volumes
ExecStop=/usr/bin/docker-compose down -v

[Install]
WantedBy=multi-user.target

Dans mon cas, j'ai crée un dossier pour chaque container, contenant pour chacun un fichier docker-compose.yml

Démarrage au boot du serveur:

systemctl enable docker-compose@traefik

Démarrer le container:

systemctl start docker-compose@traefik