Go to file
poka b81b550b0a Factorise var 2019-11-29 15:40:22 +01:00
shell Factorise var 2019-11-29 15:40:22 +01:00
silkaj init 2019-11-27 23:43:32 +01:00
.env Factorise var 2019-11-29 15:40:22 +01:00
README.md Add README 2019-11-28 15:09:41 +01:00
_DU init 2019-11-27 23:43:32 +01:00
_chain init 2019-11-27 23:43:32 +01:00
_comments init 2019-11-27 23:43:32 +01:00
_id init 2019-11-27 23:43:32 +01:00
_nanodate init 2019-11-27 23:43:32 +01:00
_official init 2019-11-27 23:43:32 +01:00
_publishkey.gpg init 2019-11-27 23:43:32 +01:00
_type init 2019-11-27 23:43:32 +01:00
_zen init 2019-11-27 23:43:32 +01:00
config.sh Elagage bootsrap 2019-11-29 15:06:06 +01:00
g1sms.pub.key init 2019-11-27 23:43:32 +01:00
install.sh init 2019-11-27 23:43:32 +01:00
install_ipfs_layer.sh init 2019-11-27 23:43:32 +01:00
rc.local.sh init 2019-11-27 23:43:32 +01:00
search init 2019-11-27 23:43:32 +01:00
sms_received.sh Factorise var 2019-11-29 15:40:22 +01:00
test.sh Elagage bootsrap 2019-11-29 15:06:06 +01:00

README.md

G1sms+

LE DRAPEAU DE LA MONNAIE LIBRE EST PLANTE DANS LE SYSTEME DE FICHIER INTERPLANETAIRE!! :: G1Forge / G1FabLab ::

Il s'agit de la seconde version de G1sms. Cette mouture utilise une carte fille GSM (à la place d'un dongle USB) et ajoute une couche de communication inter noeuds grâce à l'utilisation de IPFS.

Le réseau G1sms+ manipule des portefeuilles (synchronis(é)ables avec des portefeuilles G1) partagés par IPFS dévérouillable par interaction Humaine/Machine avec un des Noeuds du Swarm. Il peut être découplé pour assurer comptabilisation des échanges en temps réel et synchroniser les états G1 simplifiés... Le Token ZEN (convertible en Ḡ1) y opère ses comptes sur un réseau de noeuds IPFS de confiance (administrés par des membres compétents et motivés pour le moment)...

On peut:

  • Effectuer toutes les anciennes commandes G1sms
  • Réaliser des virements (simples ou récurrents) entre portefeuilles G1sms, G1Tag ou membres Cesium.
  • Imprimer des G1tag qui peuvent servir de bon au porteur ou de coffre, ou un mix des 2 (en barrant les QRcodes qui ne servent pas).
  • Scanner les G1Tag pour valider son montant et/ou l'encaisser (parfait comme solution cashless (+G1) pour un festival ou autre événementiel, les festivaliers repartent avec de la monnaie libre!!).
  • A venir, trouver les moyens d'indiquer le montant d'une transaction pour fabriquer un G1Tx qui facilite le fonctionnement en mode Coffre du G1Tag.

J'aimerai bien créer une alerte SMS quand une annonce gchange.fr est proche de mon geoPoint 💎


Tout ça totalement décentralisé dans un essaim IPFS Avec des commandes CLI enchainées https://docs.ipfs.io/reference/api/cli/#ipfs-swarm

Musiques pour plongée profonde dans le CODE: https://www.youtube.com/watch?v=kJxp-vOboSU https://www.youtube.com/watch?v=QDnG3Jni7sY https://www.youtube.com/watch?v=LqV65iPTmnc https://www.youtube.com/watch?v=_PVwf9nRAA0

Matériel

A découvrir sur la page G1SMS🔸

Installer Raspbian Stretch 🍨

Terminez cette phase par une mise à jour

sudo apt update; sudo apt upgrade -y

1. Installation carte GSM (pour commandes par SMS)?

L'interface de commande par SMS permet d'ouvrir l'usage de la monnaie libre à ceux qui ne possèdent pas de smartphone et n'ont aucun ordinateur connecté à disposition... Et permet l'utilisation du réseau 2G des opérateurs, peut encombré et presque gratuit (1€/ mois chez Free je crois)

Vous ne souhaitez pas activer cette interface? Sautez cette section !

NB: Vous pourrez utiliser les commandes "./shell/sms_*.sh" en ligne de commande (lancer "./test.sh").

Elles ont besoin d'être testées et d'améliorer leur compatibilité CLI. En fonction de votre matériel, vous pourre utiliser et enrichir les commandes "./shell/tag_*.sh" ( Imprimer et Scanner des TAG de type billets ou CB ).

Les scripts "./shell/cron" en cours d'écriture/test et sont à activer soi-même.

2. Activer le GSM pHAT

La carte utilise une connexion UART sur l'interface GPIO du Rpi pour communiquer (en commandes AT). Placer le jumper dans la position B pour activer ce mode. On prendra soin de désactiver la console (tty) établie par le système sur le port série qui rentre en conflit autrement...

  • Activer et libérer le port série UART
    • Ajouter: enable_uart=1 à /boot/config.txt
    • Effacer console=serial0,115200 de /boot/cmdline.txt
    • Redémarrer...

3. Démarrer la carte GSM !

il faudra appuyer 3 secondes sur le bouton d'allumage. Nous allons le faire par un script qui manipule le GPIO.

sudo apt install wiringpi;
sudo usermod -aG gpio pi;

nano GSM_powerkey.sh

#!/bin/bash
if [ ! -e /sys/class/gpio/gpio4 ]; then
    echo "File exists."
    echo "4" > /sys/class/gpio/export
fi
echo "out" > /sys/class/gpio/gpio4/direction
echo "0" > /sys/class/gpio/gpio4/value
sleep 2
echo "1" > /sys/class/gpio/gpio4/value

Ajouter le lancement de ce script au démarrage (dans /etc/rc.local)

4. Installer gammu et gammu-smsd

Afin de dialoguer avec le réseau GSM, recevoir et envoyer des SMS. Nous utiliserons le serveur gammu. Suivre la procédure détaillée ici: https://tutoandco.colas-delmas.fr/software/envoyer-sms-gammu-deamon/

sudo apt-get install ppp screen git python3-pip minicom gammu gammu-smsd
sudo usermod -aG gammu pi;

Vérifier que la carte GSM pHAT est démarrée, sinon lancer

sudo ./GSM_powerkey.sh 

Identification de la carte

sudo gammu --identify

Device : /dev/ttyS0 Manufacturer : SIMCOM_Ltd Model : unknown (SIMCOM_SIM868) Firmware : Revision:1418B03SIM868M32_BT IMEI : 868183033532677

Création du fichier de configuration gammurc à partir de ces infos... sudo nano /etc/gammurc

[gammu]
port = /dev/ttyS0
model = SIMCOM_Ltd (SIMCOM_SIM868)
connection = at19200
synchronizetime = yes
logfile = /tmp/smsd.log
logformat = nothing

TEST: Envoyer un SMS.

sudo gammu sendsms TEXT 06nnnnnnnn  -text "NOUVEAU G1sms+"

Tout ce passe bien? Alors on installe le daemon gammu smsd

sudo apt install gammu-smsd -y

Préparer le fichier de configuration (DOC gammu...) Adaptez selon le code PIN de votre carte SIM.

sudo nano /etc/gammu-smsdrc

[gammu]
device = /dev/ttyS0
name = SIMCOM_Ltd (SIMCOM_SIM868)
connection = at19200
synchronizetime = yes
gammucoding = utf8
logformat = textall

[smsd]
service = files
Logfile = /tmp/smsd.log
DeliveryReport = log
debuglevel = 3
CommTimeout = 5
ReceiveFrequency = 5
CheckSecurity = 1
PIN = 0000

# Paths where messages are stored
inboxpath = /var/spool/gammu/inbox/
outboxpath = /var/spool/gammu/outbox/
sentsmspath = /var/spool/gammu/sent/
errorsmspath = /var/spool/gammu/error/

# Run G1SMS Script RunOnReceive
RunOnReceive = /home/pi/G1sms+/sms_received.sh

Le fichier de configuration maintenant prêt, on peut redémarrer le démon smsd

sudo service gammu-smsd restart

Vous voyez cette ligne dans vos processus? Tudo Bom 😃 !

ps auxf
usr/bin/gammu-smsd --pid=/var/run/gammu-smsd.pid --daemon

VOILA! Le système peut maintenant dialoguer par SMS.

Installer le coeur de G1sms+

⚠️ Le code appelé par gammu s'exécute en tant qu'utilisateur root.

On pourra ajouter umask 027 à /root/.bashrc pour isoler l'appartenance des fichiers de ce compte.

1. Installer Silkaj & Duniterpy

# Exécuter les commandes suivante en root
sudo -s

# Silkaj + Duniterpy
sudo apt install python3-pip
sudo apt install libsodium18
sudo pip3 install silkaj

Voila ces 2 super connecteurs python à Duniter installés 🆒 Ils seront utilisés par G1sms+ pour gérer les wallets et leurs TX, récupérer le profil des membres dans Cesium+, etc...

En fait pour l'instant l'API CLI de silkaj n'étant pas encore disponible. C'est la version 0.50 patchée de G1sms qui continue à être utilisée (TODO !!!). Dans ce cas, il faudra peut-être installer les librairies pythons à la main...

cd ./silkaj
pip3 install -r requirements.txt

Dans cette version. Le dialogue avec les serveurs Duniter a été améliorée par un "load-balacing" régulier sur le groupe de serveurs en plus grand consensus et ayant un timeout correct...

2. Installer IPFS

Installer ipfs par son programme de mise à niveau permettra de facilement suivre l'évolution de l'Univers Interplanétaire 🔮

sudo -s
cd /usr/src/
wget https://dist.ipfs.io/ipfs-update/v1.5.2/ipfs-update_v1.5.2_linux-arm.tar.gz
tar xvzf ipfs-update_v1.5.2_linux-arm.tar.gz 
cd ipfs-update
./install.sh
ipfs-update install latest

Maintenant on peut choisir entre 3 façons de faire:

  1. Opérer IPFS en Réseau Privé (swarm.key & Environment="LIBP2P_FORCE_PNET=1") et gérer ses serveurs de bootstrap. https://pad.p2p.legal/ipfs-onelove#Rejoindre-l%E2%80%99Essaim
  2. Opérer sur IPFS Global en prenant soin de crypter les données échangées. https://medium.com/@mycoralhealth/learn-to-securely-share-files-on-the-blockchain-with-ipfs-219ee47df54c 3. Utiliser l'application ipfs-cluster: https://cluster.ipfs.io/documentation/quickstart/

C'est finalement l'option 2 qui a été choisie, en chiffrant les fichiers mis dans IPFS par la clef GPG du SWARM, du NODE, ou du TAG, la sécurité est assurée (regarder dans ./shell/init_keys.sh, Generer une clef GPG pour le NODE, partager les clefs publiques des Nodes ./wallets/SWARM/IPFSID/gpgpubkey)

Ici, chaque noeud reste propritéaire des G1sms wallet qu'il a créé est reste le seul à pouvoir interagir avec.

Configurer le démon ipfs pour le user pi

Configurer et initialiser le démon avec des options p2p trop pratiques (communication, publication et surveillance de canal, forward de ports, reverse ssh, etc... on accède à tout par son hash, y compris un noeud...)

su pi
ipfs init -p lowpower
# Activate pubsub (mode gossip)
ipfs config Pubsub.Router gossipsub
# Define max storage
ipfs config Datastore.StorageMax 6GB
## Port Forwarding on P2P (SSH: ipfs p2p listen /x/ssh /ip4/127.0.0.1/tcp/22 )
ipfs config --json Experimental.Libp2pStreamMounting true

On ajoute au BOOTSTRAP le(s) noeud(s) leader (always on) du SWARM

######### UPDATE BOOTSTRAP LIST ###########
ipfs bootstrap rm --all
### fred@onelove.madeinzion.org ###
# ID: QmSX7gFRPHui5A2DWFk2VmBvq6hynj2hubhJLQAwPWe4Lh
ipfs bootstrap add /ip6/fe80::207:cbff:fe0b:75bb/tcp/4001/ipfs/QmSX7gFRPHui5A2DWFk2VmBvq6hynj2hubhJLQAwPWe4Lh
ipfs bootstrap add /ip4/51.15.2.211/tcp/4001/ipfs/QmSX7gFRPHui5A2DWFk2VmBvq6hynj2hubhJLQAwPWe4Lh

3. ACTIVER LE SUPPORT A DISTANCE

Grâce l'activation de Experimental.Libp2pStreamMounting vous pouvez autoriser l'accès depuis les autres machines du Swarm par forward P2P du port SSH.

# POUR QUE fred@onelove PUISSE SE CONNECTER ET DEPANNER LE NOEUD...
ssh-keygen 
echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFthQ3FggJlz/+ZglZJjVJzYs6ehx/iB7f89KY396K+7ai4ETqFhq6ANVp9xeQ4dLU26w0bFBELcnh9rn5QDSrXjsIptoWXErkSdZOeXqofnLtJEOhZO/I328y0C1vQRwtMMXKLLnqPe14h+zJenc7KJbL5cvB3Hd7nfQ+Q0uEnIsKb0f5wcKagySHIFdmY/FqaGz5g4MXGq7nlX/31hvfTFhF0g+k3mhvTTVQ368Op9qZZIozYhBoojWWvK5mwAovxdS9QT1hKrFXHfjov/aKQxLAy0a0oxFvHKoYN/l4ffGibFMAmedljTxf1VSDBv/k/RN53UU6RufW3qqBjY0b fred@onelove" >> ~/.ssh/authorized_keys

FAIRE APPEL AU SUPPORT

Envoyer un email à support@qo-op.com en indiquant votre problème et le Qm_NODE_IPFSID de votre noeud IPFS (voici les commandes à lancer pour activer l'accès ssh à distance vers un noeud)

# Activer le forwad de votre port local SSH vers le SWARM
ipfs p2p listen /x/ssh /ip4/127.0.0.1/tcp/22

# FERMER le forward
ipfs p2p close --all

# Récupérer votre Qm_NODE_IPFSID
Qm_NODE_IPFSID=$(ipfs id -f='<id>\n')
echo $Qm_NODE_IPFSID

# Se connecter au port forwardé
ipfs p2p forward /x/ssh /ip4/127.0.0.1/tcp/2222 /ipfs/$Qm_NODE_IPFSID
ssh pi@localhost -p 2222

4. Lancement de ipfs au démarrage du système

sudo nano /etc/systemd/system/ipfs.service

[Unit]
Description=IPFS daemon
After=network.target

[Service]
User=pi
ExecStart=/usr/local/bin/ipfs daemon --enable-pubsub-experiment --enable-namesys-pubsub --routing=dhtclient --enable-gc
Restart=on-failure

[Install]
WantedBy=multi-user.target

Activer et lancer le service ipfs

sudo systemctl daemon-reload
sudo systemctl enable ipfs
sudo systemctl start ipfs

sudo systemctl status ipfs

5. Installer la Suite: logiciels et périphériques

On installe gnupg ntpdate pour synchroniser nos horloges plus de quoi manipuler les images, les qrcodes, les chiffres et le json (dialogue avec DUNITER et CESIUM)

sudo apt install gnupg ntpdate
sudo apt install ssmtp mpack

# Pour manipuler les images, les chiffres et le json
sudo apt install imagemagick qrencode bc jq libttspico-utils

nano /etc/ssmtp/ssmtp.conf (mailjet.com)

root= support@qo-op.com
mailhub= in-v3.mailjet.com:465
FromLineOverride=YES
AuthUser=02b075c3f28b9797d406f0ca015ca984
AuthPass=*****************************
UseTLS=YES

cat ./email.txt | sed s/EMAIL/"${EMAIL}"/g | sed s/SUBJECT/"${SUBJECT}"/g | sed s/MESSAGE/"${MESSAGE}"/g | ssmtp -v ${EMAIL}

Récupérer le code

Ce CODE est un automate. Tout commence par une commande (IDWallet, Commande), "./sms_received.sh" et les fichiers sms_*.sh gèrent les codes exécutés par chaque commande.

Utiliser la commande ./search fournie pour fouiller dans le code, ajouter "log" pour débugger dans: Log => tail -f /tmp/g1sms.log -n 200 gammu => tail -f /tmp/smsd.log -n 200 ,

EN FAISANT PARTIE DU SWARM G1sms+ VOUS DEVENEZ GARANT DE LA SECURITE PHYSIQUE ET INFORMATIQUE DE VOTRE NOEUD!

Le lien IPFS du CODE OFFICIEL mis à jour est publiée sur cette page du FORUM: https://forum.monnaie-libre.fr/t/le-g1fablab-recherche-1fadas-pour-participer-au-g1sms-one-live-swarm/8038/8?u=qoop

Liens divers & Documentation

2G/3G/4G


OPENCV


IPFS/IPNS

INSTALL

A venir... préparer un script qui effectue ce qui est décrit dans ce document pour lancer des installations plus automatiques de NODE G1sms+