OpenVPN – Comment rendre possible l’accès à un site local https

Avec les paramètres par défaut du routeur Asus, il n’est pas possible d’accéder à certains port, donc le 443 qui correspond aux pages https ou l’accès à d’autres ports pour d’autres services.

Pour y remédier, il faut faire deux choses :

Paramétrer le Subnet Mask

Dans LAN, il faut paramétrer un Subnet Mask (masque de sous-réseau) un peu plus large. Par exemple, pour qu’il aille de 192.168.2.0 à 192.168.3.255 :

Paramétrage avancé d’OpenVPN

Finalement, il faut paramétrer le sous-réseau du VPN afin qu’il démarre sur 192.168.3.0 :

Theta Network – Installer un noeud et explorer

EN COURS DE REDACTION

Ce petit tuto a pour but d’installer tout ce qui est nécessaire afin d’avoir un explorateur de blockchain sur une machine locale.

Il consiste en les étapes suivantes :

  1. Installer un noeud Theta
  2. Installer un une base de données NoSQL (Blockchain Data Crawler)
  3. Installer l’API d’application en arrière-plan
  4. Installer l’application web de l’explorateur

Installations

Noeud Theta

On commence par installer un noeud Theta ledger. Toutes les indications sont données ici : https://github.com/thetatoken/theta-mainnet-integration-guide/blob/master/docs/setup.md

L’installation démarre un noeud en mode « private » (local).

Ensuite, il faut connecter le noeud sur le Mainnet. Suite les instructions suivantes : https://github.com/thetatoken/theta-mainnet-integration-guide/blob/master/docs/mainnet.md#connect-to-the-mainnet

Mise à jour du noeud

DÉCRIRE LES OPERATIONS NÉCESSAIRES POUR FAIRE LA MISE A JOUR DU NOEUD.

Tester la méthode « git pull ».

Charger les fichiers de l’explorer

Pour charger les fichiers, il faut taper la commande suivante :

git clone --branch master https://github.com/thetatoken/theta-infrastructure-ledger-explorer.git $GOPATH/src/github.com/thetatoken/theta-infrastructure-ledger-explorer

Il faut également installer node.js et npm.

Pour se faire, il suffit de taper les commandes suivantes :

sudo apt install nodejs
sudo apt install npm

Il faut également installer node-schedule :

npm install node-schedule

Lors de l’installation, il y aura peut-être une indication de vulnérabilité. Il suffit de suivre les indications pour les résoudre.

Base de donnée NoSQL

L’installation de la base de données NoSQL MongoDB est expliquée ici, sous le chapitre « Blockchain Data Crawler ».

Il est possible de modifier la localisation de stockage de MongoDB (pour par exemple le faire pointer sur un autre disque). Pour ce faire, il faut modifier le fichier /etc/mongod.conf (explication complète ici) :

The official MongoDB package includes a configuration file (/etc/mongod.conf). These settings (such as the data directory and log directory specifications) take effect upon startup. That is, if you change the configuration file while the MongoDB instance is running, you must restart the instance for the changes to take effect.

Vérifier s’il n’est pas nécessaire de faire de la configuration (à compléter lors des tests) avant le démarrage du data crawler (il me semble que oui, d’après ce que j’ai vu sur le fichier de config).

API en backend

Cette étape est facultative. Elle permets d’activer une API REST.

Suivre les indications présentés ici dans le chapitre « Backend API Application ».

Explorateur Web

Cette étape est facultative. Elle permet d’avoir une application Web pour explorer la blockchain Theta.

Il suffit de suivre les indications présentées ici, dans le chapitre « Frontend Web Application ».

Interroger la base MongoDB

Quelles sont les structures des données stockées ?

Comment récupérer le total de rewards (staking) d’une adresse sur une période donnée ?

1 – Laravel : installation environnement de développement

Environnement de développement

Cet article présente une façon d’installer un environnement de développement LAMP + composer pour Laravel.

Pour commencer, il faut installer XAMPP. Pour cela, rien de plus simple, il faut suffit d’aller sur le site suivant et de suivre les instructions : https://www.apachefriends.org/fr/index.html

Composer

A rédiger installer composer… (voir lien sur machine virtuelle)

Nodejs

Installer Nodejs et npm simplement avec la commande suivante :

sudo apt-get update
sudo apt-get install nodejs npm

CHMOD

A rédiger : paramétrer chmod (voir lien sur machine virtuelle)

 

A rédiger : installer une application Laravel… (voir https://laravel.sillo.org/creer-une-application-avec-laravel-5-5-installation-et-style/)
A mettre dans un article à part entière ?

Let’s Encrypt sur Synology

Sur un NAS Synology, pour éviter qu’il certificat Let’s Encrypt ne puisse pas être créé ou renouveler, il faut ouvrir le port 80. Il faut donc vérifier que ce port soit bien ouvert, surtout en cas de blocage d’accès du NAS pour certains pays.

Améliorer le son de la voix – Audacity

Compression

Pour réduire la dynamique de son enregistrer (réduire l’écart entre les valeurs les plus hautes et les valeurs les plus basses du son), il faut utiliser la compression. Avec l’effet « Compresseur dynamique », sélectionner les valeurs suivantes :

  • Seuil : -20 dB
  • Niveau des bruit : -40 dB
  • Ratio : 3:1
  • Attaque : 0.10 secs
  • Durée du relâchement : 1.0 s

Et cocher « Compenser le gain à 0dB après compresion » si la voix manque de volume et qu’il n’y a que de la voix sur la piste.

Égalisation

L’égalisation d’une piste son permets d’ajouter un peu de « rondeur » et faire ressortir la présence d’une voix.

Dans l’effet d’égalisation d’Audacity, cliquer sur « Egalisateur graphique ».
Appliquer les courbe « Bass Boost » puis « Treble Boost »

Mode plus avancé : à venir

Enlever le bruit

Sélectionner une partie de la bande son sur laquelle on entend uniquement le bruit.
Dans l’effet « Noise Reduction », cliquer sur « Prendre le profil du bruit ».
Sélectionner ensuite la partie de la piste sur laquelle on souhaite supprimer le bruit.
Finalement, retourner dans « Noise Reduction » et cliquer sur OK.

Normalisation

Sur l’effet de normalisation, cocher « Suprimer tout décalage CC » et « Normaliser l’amplidute maximum à -1.0 dB ». Cliquer ensuite sur OK.

Installer DSM 5.2 sur un Synology DS209

Ce petit guide décrit les étapes pour qu’un NAS Synology DS209 soit identifié comme un DS211j afin d’y installer la version 5.2 de DSM.

Pour commencer, il faut se connecter en telnet ou ssh sur le NAS et modifier le fichier synoinfo.conf :

vi /etc.defaults/synoinfo.conf

Il faut modifier sur les lignes suivantes 209 par 211j :

  • unique=
  • synobios=
  • upnpmodelname=

Télécharger les firemwares suivants :

Sans redémarrer, les réinstaller dans l’ordre et manuellement.

Upload d’une image

Introduction

Ce petit tutoriel explique comment sauvegarder un fichier « image » avec Yii 2.

Modèle de base

Le modèle de base sur lequel sont basé les opérations présentées ci-dessous est le suivant :

mdl

Dans ce tutoriel, nous allons nous concentrer uniquement sur la classe/table Site qui contient une image (logo du site).

Prérequis

Avoir créé le CRUD des deux modèles à l’aide de Gii.

Opérations à effectuer

Modèle

Pour commencer, il faut modifier le modèle Site afin d’y ajouter la variable $image et des règles concernant l’image.

# modeles/Site.php

class Site extends \yii\db\ActiveRecord
{
    public $image;

les règles :

# models/Site.php::rules()

// Other rules
[['image'], 'file', 'skipOnEmpty' => true,
    'maxSize' => 102400, 'extensions' => 'jpg, jpeg, png',
    'tooBig' => 'L\'image ne peut pas être plus grande que 100 Ko.',
    'wrongExtension' => 'L\'image doit être au format JPG ou PNG.',
    'on' => 'register'],
[['image'], 'file', 'skipOnEmpty' => false,
    'maxSize' => 102400, 'extensions' => 'jpg, jpeg, png',
    'tooBig' => 'L\'image ne peut pas être plus grande que 100 Ko.',
    'wrongExtension' => 'L\'image doit être au format JPG ou PNG.',
    'on' => 'update']

Dans cet exemple, l’image doit être de type jpg, jpeg ou png et ne doit pas être plus grande que 100 octets.

Form

Nous devons ensuite modifier le formulaire afin de permettre la sélection de l’image. Nous en profiterons pour épurer l’affichage du formulaire des données techniques de l’image (type et taille).

Il faut que le formulaire ait l’option enctype de type multipart/form-data.

use yii\widgets\ActiveForm;
$form = ActiveForm::begin(
  [
    'enableAjaxValidation' => false,
    'options' => ['enctype' => 'multipart/form-data'],
  ]
);

Ensuite, il faut supprimer les lignes suivantes car ces champs seront renseignés par le controller  :

    <?= $form->field($model, 'image_name')->textInput(['maxlength' => true]) ?>

    <?= $form->field($model, 'image_type')->textInput(['maxlength' => true]) ?>

    <?= $form->field($model, 'image_size')->textInput() ?>

Puis, il faut ajouter le champs « fichier » d’upload de l’image :

<?= $form->field($model, 'image')->fileInput() ?>

Controller

Finalement, nous allons voir comment récupérer et sauvegarder l’image. Pour ce faire, il faut modifier le controller controllers/SiteController.php.

Create

Nous allons commencer par modifier l’action actionCreate. Son état de base est le suivant :

public function actionCreate()
{
    $model = new Site();

    if ($model->load(Yii::$app->request->post()) && $model->save()) {
        return $this->redirect(['view', 'id' => $model->id]);
    } else {
        return $this->render('create', [
            'model' => $model,
        ]);
    }
}

Il faut la modifier comme suite :

public function actionCreate()
{
    $model = new Site();

    if (Yii::$app->request->isPost) {
        $model->load(Yii::$app->request->post());
        $model->image = UploadedFile::getInstance($model, 'image');

        if($model->image !== null){
            $model->image_name = $model->mnemo . '.' . $model->image->extension;
            $model->image_type = $model->image->type;
            $model->image_size = $model->image->size;
        }
        if ($model->save()) {
            if($model->image !== null){
                $model->image->saveAs('chemin/vers/destination');
            }
            return $this->redirect(['view','id' => $model->id]);
        }    
    }
    return $this->render('create', ['model' => $model]);
}

Il faut également ajouter en début de document le namespace pour pouvoir utiliser le helper du même nom :

use yii\web\UploadedFile;

Update

Les modifications à apporter à l’action Update sont très similaire à l’action Create.

L’action sans modification est la suivante :

public function actionUpdate($id)
{
    $model = $this->findModel($id);

    if ($model->load(Yii::$app->request->post()) && $model->save()) {
        return $this->redirect(['view', 'id' => $model->id]);
    } else {
        return $this->render('update', [
            'model' => $model,
        ]);
    }
}

Nous la modifions comme suite :

public function actionUpdate($id)
{
    $model = $this->findModel($id);

    if (Yii::$app->request->isPost) {
        $model->load(Yii::$app->request->post());
        $upload = UploadedFile::getInstance($model, 'image');

        if($upload !== null){
            $model->image_name = $model->mnemo . '.' . $upload->extension;
            $model->image_type = $upload->type;
            $model->image_size = $upload->size;
        }
        if ($model->save()) {
            if($upload !== null){
                $model->image = $upload;

                $model->image->saveAs('chemin/vers/destination');
            }
            return $this->redirect(['view','id' => $model->id]);
        }    
    }
    return $this->render('update', ['model' => $model]);       
}

Delete

Il ne faut pas oublier de supprimer le fichier lors du lancement de l’action Delete. Pour ce faire, nous utilisons la fonction unlink de PHP.

Action d’origine :

public function actionDelete($id)
{
    $this->findModel($id)->delete();

    return $this->redirect(['index']);
}

Action modifiée :

public function actionDelete($id)
{
    $model = $this->findModel($id);
    $filename = $model->image_name;
        
    $model->delete();
        
    unlink('chemin/vers/destination' . $filename);

    return $this->redirect(['index']);
}

Remarques

Dans ce tutoriel, nous n’avons pas abordé plusieurs aspect qu’il est important de traiter dans un projet réel :

  • centraliser le chemin vers les image dans les paramètres de l’application

Paramétrage du framework

Le fichier bootstrap

Le bootstrap est le fichier par lequel toutes les requêtes vous passer et c’est lui qui va « orchestrer » l’application. Sur Yii2, c’est le fichier index.php du répertoire de l’application. Voici son contenu à la création d’un site « basic » avec Composer :

<?php

// comment out the following two lines when deployed to production
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');

require(__DIR__ . '/../vendor/autoload.php');
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');

$config = require(__DIR__ . '/../config/web.php');

(new yii\web\Application($config))->run();

La modification principale à faire dans ce fichier est de définir le chemin d’accès aux fichiers du framework. Par exemple, si les fichiers de mon serveur doivent être dans le répertoire /httpdocs/, je déplace le contenu du répertoire web/ dedans et je créer un répertoire /yii2/ dans lequel je déplace le reste des fichiers. En imaginant l’arborescence suivante :

/

httpdocs/

yii2/

le fichier bootstrap devra être modifié en comme suite :

<?php

// comment out the following two lines when deployed to production
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');

require(__DIR__ . '/../yii2/vendor/autoload.php');
require(__DIR__ . '/../yii2/vendor/yiisoft/yii2/Yii.php');

$config = require(__DIR__ . '/../yii2/config/web.php');

(new yii\web\Application($config))->run();

Mise en production

Le de la mise en production, il faut désactiver le mode debug, pour ce faire, il faut remplacer la ligne

defined('YII_DEBUG') or define('YII_DEBUG', true);

par

defined('YII_DEBUG') or define('YII_DEBUG', false);

Configuration du site – web.php

Le fichier web.php contient un grand nombre de données de configuration du site. Il se trouve dans le répertoire config/ du framework.

Routage

Par défaut, les URL du site sont sous la forme suivante :

http://exemple.com/index.php?r=site/login

Il est possible de paramétrer le site afin d’obtenir une URL « propre sans le « index.php » :

http://exemple.com/site/login/

Pour ce faire, il faut commencer par activer PrettyUrl dans le fichier de configuration et cacher le fichier du bootstrap avec showScriptName :

$config = [
    'id' => 'basic',
    'basePath' => dirname(__DIR__),
    'bootstrap' => ['log'],
    'components' => [
	    // divers composants
        'db' => require(__DIR__ . '/db.php'),
        'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'rules' => [
            ],
        ]
    ],
    'params' => $params,    
];

Pour ne pas avoir une erreur 404, il faut maintenant créer un fichier .htaccess contenant les données suivantes :

<IfModule mod_rewrite.c>
  RewriteEngine on
  # A decommenter et changer pour correspondre à l'URL de base:
  # RewriteBase /
  # Si un repertoire ou un fichier existe, utiliser directement la requete:
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  # Sinon, transmettre la requete a index.php:
  RewriteRule . index.php
</IfModule>

Gii

Gii est un générateur de code pour Yii2 qui permet de générer très rapidement des pages utilisables (par exemple, du CRUD sur la base de tables de base de données).

Par défaut, Gii est automatiquement chargé avec l’application basic chargée via Composer :

if (YII_ENV_DEV) {
    // configuration adjustments for 'dev' environment
    $config['bootstrap'][] = 'debug';
    $config['modules']['debug'] = 'yii\debug\Module';

    $config['bootstrap'][] = 'gii';
    //$config['modules']['gii'] = 'yii\gii\Module';
    $config['modules']['gii'] = [
    	'class' => 'yii\gii\Module',
    	//'allowedIPs' => ['*']
    ];
}

Gii est accessible par l’adresse « propre » (uniquement en local et sur un environnement de développement) :

http://exemple.com/gii/

 

Base de données – db.php

Le fichier db.php contient les données de configuration de base de données. Il se trouve dans le répertoire config/ du framework.

Il suffit de paramétrer le fichier avec les bonnes données :

<?php

return [
    'class' => 'yii\db\Connection',
    'dsn' => 'mysql:host=localhost;dbname=nomDB',
    'username' => 'nomUtilisateurDb',
    'password' => 'motDePasse',
    'charset' => 'utf8',
];

Variables du site – params.php

A compléter…

Compression en tar

Compression

Lancer la commande suivante :

tar czvf monArchive.tar.gz monDossier/

Les options sont les suivantes :

  • c : crée l’archive
  • x : extrait l’archive
  • f : utilise le fichier donné en paramètre
  • v : active le mode « verbeux » (bavard, affiche ce qu’il fait).

Option pour définir la compression souhaitée :

  • z : ajoute la compression Gzip.
  • j : ajoute la compression Bzip2.
  • J : ajoute la compression Lzma.

Restauration

Pour restaurer de façon classique, lancer quasiment la même commande que pour la compression, par exemple :

tar xzvf monArchive.tar.gz

Pour conserver les mêmes permissions et les mêmes « owner » :

tar xzvf monArchive.tar.gz --preserve --same-owner

 

Raspbian – Démarrer sur un disque dur

Pour commencer, il faut installer raspbian sur la carte SD.

Préparer le disque dur

Il faut formater le disque dur en Ext4 pour pouvoir y déplacer la partition Root de l’OS (avec gparted ou la commande fdisk, puis mkfs -t ext4 /dev/sda1).

Copie de root

Toutes les commandes ci-dessous sont à faire avec les droits Root.

Identifier la carte SD et le disque dur pour pouvoir les monter (affiché sd?? dans les commandes ci-dessous) :

sudo fdisk -l

Copier la partition Root depuis la carte SD vers le HDD (if=SD of=HDD).

sudo dd if=/dev/sd?? of=/dev/sd?? bs=512

En clair : copie tout ce qui est dans la carte SD vers la partition sda2 du disque dur, par blocs de 512 octets (bs=block size).

Finalement, étendre la ROOT FILE SYSTEM :

sudo resize2fs /dev/sd??

Vérifier copie et nettoyer SD

Monter le disque dur dans un répertoire créé préalablement (ici /home/user/hdd) :

sudo mount -t ext4 /dev/sd?? /home/user/hdd

Vérifier que la copie c’est bien passée sur le HDD :

cd /home/user/hdd
ls -l

Si tout est OK, on supprime la partition Root de la carte avec la commande fdisk ou avec gparted.

Configuration pour démarrage sur HDD

Pour que l’OS démarre sur le HDD, il faut modifier deux fichiers : cmdline.txt et fstab.

Pour commencer, il faut monter la partition boot de la carte SD :

sudo mount -t vfat /dev/sd?? /home/user/sd
cd /home/user/sd

Modifier cmdline.txt

Dans le fichier, remplacer la partie root=/dev/mmcblk0p2 par root=/dev/sda1 :

sudo nano cmdline.txt

Modifier fstab

Modifier le chargement de la partition root comme suite :

roc            /proc           proc    defaults          0       0
/dev/mmcblk0p1  /boot           vfat    defaults,ro          0       2
#/dev/mmcblk0p2  /               ext4    defaults,noatime  0       1
/dev/sda1  /               ext4    defaults,noatime  0       1

avec la commande :

cd /home/user/hdd/etc
sudo nano fstab

On démonte la carte SD et le HDD :

sudo umount /home/user/hdd /home/user/sd

Conclusion

Le Raspberry Pi peut maintenant être démarrer. Il ne reste plus qu’à y installer les logiciels souhaités.

 

Marche à suivre fortement inspirée du site framboise314.fr.