banneer2

Rechercher sur le blog du grouik:

#Main:

L’installation de Dreamfactory par une image Bitnami est très bien pour tester, mais elle me fait craindre quelques problèmes de stabilité. C’est un peu caca, bitnami en met partout, dur de s’y retrouver lorsque des optimisations sont à faire coté apache php ou mysql etc... et les scripts Bitnami de redémarrages de services oublient de faire des logrotates et font d’autres erreurs.

Bref avant de passer Dreamfactory en production, installons le proprement à la main. voici le mémo.

Le wiki de Dreamfactory explique bien comment faire. http://wiki.dreamfactory.com/DreamFactory/Installation je m’attacherai ici à détailler un eu plus, dont le paramétrage serveur.

1: Prérequis

Débian 8 Fraichement installée.

Je choisis un trio PHP7 + Apache + mysql

2: Apache, php et ses modules, et autres prérequis

2.1: ajouter le dépôt dotdeb

PHP 7 n’est pas dans les dépôts de la version stable de debian. C’est la logique de leur cycle de développement, ils ne sortent pas de version majeures d un logiciel. On va donc utiliser le dépôt dotdeb.

echo "deb http://packages.dotdeb.org jessie all" > /etc/apt/sources.list.d/dotdeb.list
wget -O- https://www.dotdeb.org/dotdeb.gpg | apt-key add -
apt-get update

’’Source’

2.2: Installer tous paquets nécessaires directement et indirectement à dreamfactory.

apt-get install git curl apache2 apache2-doc apache2-mpm-prefork apache2-utils libexpat1 ssl-cert php7.0 php7.0-mysql php7.0-curl php7.0-json php7.0-gd php7.0-mcrypt php7.0-msgpack php7.0-memcached php7.0-intl php7.0-sqlite3 php7.0-gmp php7.0-geoip php7.0-mbstring php7.0-xml php7.0-zip php7.0 libapache2-mod-php7.0 php7.0-mysql php7.0-curl php7.0-json php7.0-gd php7.0-mcrypt php7.0-msgpack php7.0-memcached php7.0-intl php7.0-sqlite3 php7.0-gmp php7.0-geoip php7.0-mbstring php7.0-xml php7.0-zip php7.0-dev php-pear mysql-server mysql-client libcurl4-openssl-dev pkg-config
pecl channel-update pecl.php.net
#la lib mongodb est un peu chiante à installer 
#(Plusieurs paquets ci dessus en sont des prérequis, et il faut enregistrer le module)
pecl install mongodb-alpha
echo "extension=mongodb.so">/etc/php/7.0/cli/conf.d/20-mongo.ini
echo "extension=mongodb.so">/etc/php/7.0/mods-available/mongo.ini

Mettez un mot de passe root à mysql quand il le demande.

2.3: php.ini

vi /etc/php/7.0/apache2/php.ini Si votre API dreamfactory aura aussi pour vocation du transfert de fichiers, relevez les valeurs par défaut en fonction de vos besoins.

post_max_size = 40M
upload_max_filesize = 40M
max_file_uploads = 20

2.4: Composer

curl -s https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

2.5: Créer une base mysql

mysql -u root -p
CREATE DATABASE dreamfactory;
GRANT ALL ON dreamfactory.* TO 'dreamfactory'@'localhost' IDENTIFIED BY '*hjiQM,NER!';
quit

3: Installer dreamfactory

cd /var/www
git clone https://github.com/dreamfactorysoftware/dreamfactory.git
cd dreamfactory/
composer install --no-dev
php artisan dreamfactory:setup

Voici mon retour écran pour la dernière commande:

root@dreamfactory:/var/www/dreamfactory# php artisan dreamfactory:setup
**********************************************************************************************************************
* Configuring DreamFactory... 
**********************************************************************************************************************
Created .env file with default configuration.
Application key [base64:9AZJkz07XobEu5IQ72kRCVjIiJKUg0HrhY/WD1McPUw=] set successfully.
Created phpunit.xml with default configuration.

 Which database would you like to use for system tables? [sqlite]:
  [0] sqlite
  [1] mysql
  [2] pgsql
  [3] sqlsrv
 > 1

 Enter your mysql Host:
 > localhost

 Enter your database name:
 > dreamfactory

 Enter your database username:
 > dreamfactory

 Enter your database password:
 > 

 Re-enter your database password:
 > 

 Enter your Database Port [3306]:
 > 

CACHE DRIVER  is not supported. Using default driver file.
Configuration complete!
*************************************************** WARNING! *********************************************************
*
* Please take a moment to review the .env file. You can make any changes as necessary there. 
*
* Please run "php artisan dreamfactory:setup" again to complete the setup process.
*
**********************************************************************************************************************

Un petit tour dans le fichier .env nous indique entre autre qu’il veut bien de redis comme systeme de cache. Let’s do it:

apt-get install redis-server

Maintenant on édite le fichier .env, et on gère le cache comme ça:

##------------------------------------------------------------------------------
## Cache and Session Settings
##------------------------------------------------------------------------------

CACHE_DRIVER=redis
SESSION_DRIVER=array
MAIL_DRIVER=mail

##------------------------------------------------------------------------------
## Redis cache settings.  Uncomment if the CACHE_DRIVER is changed to redis and
## the default values are not appropriate
##------------------------------------------------------------------------------

REDIS_HOST=127.0.0.1
REDIS_PORT=6379
#REDIS_DATABASE=
#REDIS_PASSWORD=

On relance la commande:

php artisan dreamfactory:setup

Voici mon retour écran

root@dreamfactory:/var/www/dreamfactory# php artisan dreamfactory:setup
**********************************************************************************************************************
* Welcome to DreamFactory setup wizard.
**********************************************************************************************************************
Running Migrations...
Migration table created successfully.
Migration driver used: mysql
Migrated: 2015_01_27_190908_create_system_tables
Migrated: 2015_02_03_161456_create_sqldb_tables
Migrated: 2015_02_03_161457_create_couchdb_tables
Migrated: 2015_02_03_161457_create_mongodb_tables
Migrated: 2015_03_10_135522_create_aws_tables
Migrated: 2015_03_10_200756_create_azure_tables
Migrated: 2015_03_11_143913_create_rackspace_tables
Migrated: 2015_03_20_205504_create_remote_web_service_tables
Migrated: 2015_05_02_134911_update_user_table_for_oauth_support
Migrated: 2015_05_21_190727_create_user_config_table
Migrated: 2015_07_10_161839_create_user_custom_table
Migrated: 2015_08_25_202632_db_alias
Migrated: 2015_11_06_155036_db_function
Migrated: 2015_11_10_225902_db_foreign_key
Migrated: 2016_01_21_213101_add_curl_options
Migrated: 2016_03_15_235903_add_username_field_to_user_table
Migrated: 2016_05_11_134231_remove_service_and_script_type
Migrated: 2016_05_17_020359_db_config_add
Migrated: 2016_06_20_195319_event_affects_content
Migrated: 2016_07_11_155716_create_cassandra_config_table
Migrated: 2016_07_25_214132_adding_a_custom_field_for_oauth_config
Migrated: 2016_08_02_153513_create_redis_config_table
Migrated: 2016_08_02_193216_create_local_cache_config
Migrated: 2016_08_04_140705_create_memcached_config_table
Migrated: 2016_08_09_202900_create_jobs_table
Migrated: 2016_08_10_145124_create_failed_jobs_table
Migrated: 2016_08_10_191349_queueable_scripts
Migration completed successfully.
**********************************************************************************************************************
**********************************************************************************************************************
Running Seeder...
Service resources created: system, api_docs, files, db
Seeded: DreamFactory\Core\Models\Seeds\ServiceSeeder
App resources created: admin, api_docs, file_manager
Seeded: DreamFactory\Core\Models\Seeds\AppSeeder
Email Template resources created: User Invite Default, User Registration Default, Password Reset Default
Seeded: DreamFactory\Core\User\Models\Seeds\EmailTemplateSeeder
Service resources created: email
Seeded: DreamFactory\Core\User\Models\Seeds\EmailServiceSeeder
Service resources created: user
Seeded: DreamFactory\Core\User\Models\Seeds\UserServiceSeeder
Seeded: DreamFactory\Core\User\Models\Seeds\DatabaseSeeder
All tables were seeded successfully.
**********************************************************************************************************************
**********************************************************************************************************************
Creating the first admin user...

 Enter your first name:
 > Gnieark

 Enter your last name:
 > Grouik

 Enter display name:
 > Gnieark Grouik

 Enter your email address?:
 > gnieark@domaoine.com

 Choose a password:
 > 

 Re-enter password:
 > 

Successfully created first admin user.
**********************************************************************************************************************
*************************************************** WARNING! *********************************************************
* Please make sure following directories and all directories under them are readable and writable by your web server 
*   -> storage/
*   -> bootstrap/cache/
* Example:
*      > sudo chown -R {www user}:{your user group} storage/ bootstrap/cache/ 
*      > sudo chmod -R 2775 storage/ bootstrap/cache/ 
**********************************************************************************************************************
*********************************************** Setup Successful! ****************************************************
* Setup is complete! Your instance is ready. Please launch your instance using a browser.
* You can run "php artisan serve" to try out your instance without setting up a web server.
**********************************************************************************************************************

On applique les droits:

chown -R www-data:www-data storage/ bootstrap/cache/ 
chmod -R 2775 storage/ bootstrap/cache/

4: Configuration d’apache

a2enmod rewrite

Editer le fichier /etc/apache2/sites-available/000-default.conf Pour y mettre:

<VirtualHost *:80>
    DocumentRoot /var/www/dreamfactory/public

    <Directory /var/www/dreamfactory/public>
        AddOutputFilterByType DEFLATE text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript
        Options -Indexes +FollowSymLinks -MultiViews
        AllowOverride All
        AllowOverride None
        Require all granted
        RewriteEngine on
        RewriteBase /
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^.*$ /index.php [L]

        <LimitExcept GET HEAD PUT DELETE PATCH POST>
            Allow from all
        </LimitExcept>
    </Directory>
</VirtualHost>
service apache2 restart

Se rendre sur le serveur via un navigateur: Capture_du_2016-09-18_23-50-53.png

Voila, Il ne reste plus qu’à configurer apache pour le https, mais ça, je vous laisse faire.


Nouveau rythme de vie, nouveaux usages de mon PC portable.

  • Dans le train, j’"accroche" mon PC portable en USB [1] à mon téléphone Android afin de partager la connexion. La carte réseau est alors usb0
  • Au travail, je le relie en RJ45 au lan la carte réseau utilisée est alors eth0
  • Chez moi, c’est généralement en wifi que mon PC est connecté. Wlan0

Sauf que ça marche mal. Voici le test à l’instant.

  • Je me mets en partage de connexion USB.
  • Je vérifie le résultat de la commande ifconfig. OK
  • Je pingue 8.8.8.8 OK

Voici les détails

  • Je débranche mon tel,
  • Je me mets sur le wifi
  • Je checke l’ifconfig, c’est cohérent
  • Je pingue 8.8.8.8, ça ne marche pas.

Voici les détails

J’envoie la commande:

dhcclient wlan0

Et ça marche

Et ce problème se produit dans d’autres sens (passage de la connexion wifi vers usb ou filaire vers wifi etc....

La solution temporaire:

Lorsque je suis en wifi, je saisis la commande:

dhcclient wlan0

Lorsque je suis connecté en USB:

dhcclient usb0

Et le rootage se fait comme il faut. Mais je préfererais faire du plug and play et ne pas avoir à ouvrir un terminal en root à chaque changement de connexion.

Cherchons la solution automatique

Bah, j’ai la flegme de réfléchir. Je fais le bourrin, je dégage Network-manager et configure tout dans le fichier /etc/network/interfaces

Capture_d_ecran_de_2016-08-07_15_13_16.png Devinette, Quel est le prénom de mon voisin? Quel est son FAI? Est-ce que ces infos suffiraient à tenter un bon pishing bien personnalisé pour récupérer des codes de carte bleue?

apt-get remove network-manager
vi /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

auto eth0
allow-hotplug eth0
iface eth0 inet dhcp

auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
    wpa-ssid proutcacaboudin2 
    wpa-psk azerty

auto usb0
allow-hotplug usb0
iface usb0 inet dhcp

Voilà, ça marche mieux... Bon Ok, c’est la méthode "à la truelle dans les fichiers de paramétrage" ... Pour gérer plusieurs réseaux wifi, jetez un coup d’oeil à wpa_supplicant

Note

[1] Je suppose que ça consomme moins la batterie que de faire un pont wifi, mais ça reste à vérifier



bots-arena-connectFour.png

Depuis quelques mois, j’utilise une partie de mon temps libre au développement de Bots Aréna. Je n’avais même pas pris le temps de venir présenter ce site sur ce blog. C’est chose faite.

Quelques jeux sont disponibles.

  • Le morpion
  • Le puissance 4
  • La bataille navale (en maintenance, on a redéfini les specifications, je n’ai pas encore adapté ce jeu là)

Et d’autres viendront, je pense à un Tron pour le prochain.

Le principe, c’est que vous ne devez pas y jouer, mais développer une intelligence artificielle qui jouera pour vous.

Vous hébergez cette dernière sur un site web[1]. Bots arena fera les requêtes pour interroger les adversaires.

principe.gif

les spécifications qui expliquent comment votre bot et l’arène communiquent sont détaillées sur le site pour chaque jeu. Une page web (à télécharger éventuellement) vous permettant de tester votre bot avant de l’envoyer combattre a été créée.

J’attends vos bots avec impatience. Concernant mes bots "gnieark" dans botsarena, ils ne sont pas au point, ce sera facile de me gagner ;)

PS, Mon projet BotsArena est public et opensource.

Note

[1] Il y aurait plein de contraintes, de sécurité pour mon serveur, de limitations de langage de développement, si je devais créer une plateforme qui héberge tous les bots.


postfix-mail-server.png

Oui, les certificats pour les serveurs web sont les mêmes que pour les serveurs de messagerie.

Dans les fichiers de configuration de Dovecot et de postfix, Quels fichiers générés par Lets Encrypt faut-il renseigner?

Créer la clé et le certificat avec lets encrypt.

ce n’est pas vraiment l’objet de ce billet, si vous avez déjà créé vos certificats, passez au paragraphe suivant.

cd ~
#dl lets encript
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
#Stopper l'éventuel service qui utilise le port 80 (dans mon cas c'est apache)
#car letsencrypt en auraz besoin quelques secondes.
service apache2 stop
#générer le certificat
#Je ne mets pas le mode auto car ma configuration d'apache est un peu fouillie
# et lets encrypt n'arrivera pas à générer la configuration
# du coup je lui demande juste les certificats et le clefs:
# Adaptez en fonction de vos besoins
./letsencrypt-auto certonly --standalone --email email@domaine.fr -d domaine1.fr -d machine.domaine1.fr -d machine.domaine2.fr 
#restart apache
service apache2 start

Postfix

Ma partie certificats tls dans le /etc/postfix/main.cf est la suivante:

#tls
smtpd_tls_key_file = /etc/letsencrypt/live/tinad.fr/privkey.pem
smtpd_tls_cert_file = /etc/letsencrypt/live/tinad.fr/cert.pem
smtpd_tls_CAfile = /etc/letsencrypt/live/tinad.fr/chain.pem

Évidemment vous remplacez tinad.fr par le nom du répertoire que vous trouvez dans /etc/letsencrypt/live

Dovecot

Pour dovecot (serveur IMAP)

ssl_protocols = !SSLv2 !SSLv3
ssl_ca = </etc/letsencrypt/live/tinad.fr/chain.pem
ssl_cert = </etc/letsencrypt/live/tinad.fr/cert.pem
ssl_key = </etc/letsencrypt/live/tinad.fr/privkey.pem
ssl_verify_client_cert = yes
ssl = required

j’adapte ce billet en vidéo, mais je prends le temps d’aller plus loin dans l’explication théorique.

je ne suis pas super satisfait du résultat (qualité de la vidéo, rythme etc...), mais j’expérimente.

Enjoy.


- page 1 de 94

#enBref:

Pokémon: Ton anus est petit pour son type tu ne trouves pas?

Pokemon Go a fait deux modifications récentes, il est possible :

  • de personnaliser le nom d’un pokémon,
  • d’obtenir une évaluation d’un Pokémon.

Mélangeons les deux possibilités, ça donne:

Screenshot_2016-09-03-23-19-50.jpg

Screenshot_2016-09-03-23-22-59.jpg

Screenshot_2016-09-03-23-23-19.jpg

Screenshot_2016-09-03-23-32-43.jpg

On peut même s’amuser avec des noms d’hommes politiques:

Et bien! c’est le plus petit des ex présidents que j’ai jamais vu!

Mais, je ne m’amuserai pas à ça sur ce blog.



Let's Encrypt

letsencrypt-logo-horizontal.svg

Juste un petit mot pour dire que comme beaucoup, j’ai testé Lets’Encrypt. Je ne ferai probablement pas de tutoriel là dessus car la documentation se trouve partout, et que la flegme.

Plusieurs VHOSTS sur ce serveur ont des certificats lets’Encrypt. Je compte tester quelques renouvellements de certificats (La validité d’un certificat Let’s Encrypt est de 90 jours), avant de généraliser l’utilisation de ce service à tous mes VHOSTS.

Parce que:

C’est gratuit (le prix de départ d’un certificat c’est 15€) et faut compter 200 euros pour une wildcard.

La wildcard n’est pas possible, mais il est possible de renseigner plusieurs noms DNS. Du coup j’image bien renseigner sur un certificat tous les vhosts de ma dédibox, et éventuellement trouver comment retirer la gestion du SNI [1] sur le serveur Web. Ça devrait faire gagner au moins 4 instructions processeur par chargement de page web ;) .

Ne plus me faire ch... avec des certificats qui expirent à des dates différentes. Trois commandes unix suffisent à renouveler tous les certificats d’un coup:

#Il faut stopper l'éventuel service qui écoute sur le port 80:
service apache stop
./letsencrypt
service apache start

Note

[1] J’adore sourcer vers un article Wikipedia dont je suis l’auteur.


Timelapse fail.... coucher de soleil

IMG_20151001_222114.jpg

Suite à mes bidouillages pour pouvoir superviser la reprap à distance, J’ai jeté la webcam qui datait du début de l’époque MSN, pour une cam spéciale Raspberry pi.

On a franchi cette étape: mon imprimante est assez mature pour que je la laisse plusieurs heures sans surveillance directe. Snif, quelle émotion. Aujourd’hui, j’ai lancé une impression (de 7 heures) et suis parti. Je regardais quand même sur mon smartphone, toutes les 1 heures ou deux les images de la cam. Ce qui m’aurait permis de stopper la machine en cas de bouillie de plastique (ou d’incendie -_-).

Le fail, c’est qu’à partir de 20 heures, n’ayant pas laissé de lumière allumée, la cam ne me montrait que du noir. (l’impression est réussie quand même)

Le timelapse est par là (la flegme d’intégrer la vidéo dans ce billet)

Bref, objectif: ajouter une lumière (12 ou 5 V à la reprap) et pouvoir l’allumer et l’éteindre depuis octoprint. Quelques pistes:

Si je prends le temps de le faire dans les semaines qui viennent, je publierai évidemment ma solution sur ce blog.


MAJ

Je viens de faire une petite mise à jour du tuto sur horde 5. Une histoire de ’realm’ qui a été modifiée sur la configuration d’IMP


Passage en debian 8 Jessie

Debian_8_.pngC’est fait, direct sur la prod #evilmode.

Les quelques points sur lesquels j’ai lutté après la mise à jour:

GNUTLS

qui a déconné, du coup j’ai reconfiguré mes quelques vhosts en https avec modSSL

Apache

J’ai remis les apache.conf et php.ini recommandés. du coup, j’ai du modifier plus de 10 000 de code PHP à grand coups de sed. genre:

find /var/www/vhost -exec sed -i "s/mysql_set_charset(/mysqli_set_charset(\$GLOBALS["linkMysql"],/g" {} \;

afin de ne plus me prendre les WARN "deprecated"

su

La commande "su user" ne fonctionne plus pour les users qui n’ont pas de shell du coup il faut le préciser le paramètre:

su -s /bin/bash www-data

(je m’en sers pour gérerer des crontab avec les droits de www-data ou un autre compte)

rsyncd

Mon serveur est boudé par le serveur de sauvegarde. je suis encore en train de regarder pourquoi.

systemctl

Pas de problème, juste qu’il prend une place plus importante sous debian 8. Il faut s’habituer à l’utiliser.


Oups

f9b26427bda2d1e6a8c82ebf25bbb1d0.jpg

Je viens de m’apercevoir que j’avais oublié de retirer le mappage des ports 80 et 22 vers mon raspberry Pi. Sauf que dernièrement (depuis 2 semaines quand même), j’avais remis le pi au cul de ma freebox pour octopi:

  • En lui laissant le mot de passe par défaut pi/raspberry
  • En branchant la webcam (consultable en http sans s’authentifier dans octopi). Sauf que le câble de la cam étant trop court, elle ne filme pas la reprap, mais mon salon.

Je pense m’en être aperçu avant d’avoir mérité le "Numéric Darwin Awards"

PS: Octoprint a ce robots.txt de base:

User-agent: *
Disallow: /

Pas de possibilité d’utiliser un Google dork pour faire joujou avec plein de reprap dans le monde :p

Photo by mofetos/Flickr (CC BY 2.0)


Réduction du bruit de ma reprap

dalle-verte-2.jpg Passage chez Toys R Us pour chercher un cadeau, je me suis offert une dalle amortissante d’extérieur.... Pour la mettre sous ma Reprap.

Aaaaarg! pourquoi je ne l’avais pas fait avant!? La nuisance sonore est réduite par 10, le meuble ikéa sur lequel est installée la bête ne résonne plus à chaque mouvement. Je peux enfin allier impression 3D et matage d’une série à la TV.

PS: Pour trouver une image de la dalle, j’ai cherché sur le site de Toys R Us, elle ne semble malheureusement pas être vendue en ligne.


Propulsé par Dotclear