Commit 0606596d authored by matograine's avatar matograine

MAJ README

parent 090dbec6
......@@ -23,17 +23,20 @@ Vous trouverez (un peu) plus d'informations sur [le site](g1pourboire.fr/G1cotis
## Installation
Comment l'installer et le configurer ?
Il vous faut tout d'abord installer les dépendances :
Silkaj 0.6.5 (profitez-en pour le tester !)
Diceware
Silkaj : version spécifique à G1Cotis, en attendant la 0.8 officielle.
Diceware
* Sous Debian Buster ou Ubuntu 19.X GNU/Linux :
`# apt update ; apt upgrade ; apt install silkaj diceware`
* Sous Debian Buster ou Ubuntu 19.X GNU/Linux:
`# apt update ; apt upgrade ; apt install diceware pipenv libsodium23`
`# wget https://git.duniter.org/matograine/silkaj/-/archive/g1cotis-multioutput/silkaj-g1cotis-multioutput.tar.gz`
`# tar -xf silkaj-g1cotis-multioutput.tar.gz`
`# cd silkaj-g1cotis-multioutput`
`# pipenv install "-e ."
* Sous Debian Stretch : voir [ce post](https://blog.jytou.fr/2018/06/02/installing-a-working-python-environment-and-silkaj-on-a-raspberry-pi-3-with-raspbian-jessie/) pour installer Silkaj en pipenv. Puis :
* Sous Debian Stretch : voir [ce post](https://blog.jytou.fr/2018/06/02/installing-a-working-python-environment-and-silkaj-on-a-raspberry-pi-3-with-raspbian-jessie/) pour pour installer Silkaj en $
`# apt install diceware`
* Sous d'autres distributions : je ne sais pas, indiquez-moi comment vous faites ! Voici [le site de Silkaj](https://silkaj.duniter.org/index.html)
......@@ -41,24 +44,23 @@ Il vous faut tout d'abord installer les dépendances :
Ensuite :
* Placez-vous dans le /home de l'utilisateur qui va lancer Ğ1cotis, connecté comme cet utilisateur.
* Télécharger la dernière release (v0.2.1) en .tar.gz :
`$ wget https://git.duniter.org/matograine/g1-cotis/-/archive/v0.2/g1-cotis-v0.2.tar.gz`
* La déziper où vous le souhaitez :
`$ tar -xf g1-cotis-v0.2.tar.gz`
* Renommer (si vous le souhaitez) :
`$ mv g1-cotis-v0.2 G1cotis`
* Rendez ce dossier inaccessible pour les autres utilisateurs :
* Télécharger la dernière release (v0.2) en .tar.gz :
`$ wget https://git.duniter.org/matograine/g1-cotis/-/archive/0.3/g1-cotis-0.3.tar.gz`
* La déziper où vous le souhaitez :
`$ tar -xf g1-cotis-0.3.tar.gz`
* Renommer (si vous le souhaitez) :
`$ mv g1-cotis-0.3 G1cotis`
* Rendez ce dossier inaccessible pour les autres utilisateurs :
`$ chmod 700 G1cotis`
* Vous placer dans le dossier :
* Vous placer dans le dossier :
`$ cd G1cotis`
* Editer le fichier config.sh en fonction des paramètres locaux (dossier, noeud, monnaie, silkaj) :
* Editer le fichier config.sh en fonction des paramètres locaux (dossier, noeud, monnaie, dossier silkaj-g1cotis-multioutput) :
`$ nano config.sh`
* Créer le premier compte :
* Créer le premier compte :
`$ bash nouveau-compte.sh`
* Modifiez le crontab en suivant les recommandations du script :
* Modifiez le crontab en suivant les recommandations du script :
`$ crontab -e `
Tous les dossiers nécessaires seront créés à la première création de compte.
Pour une mise à jour, déplacez simplement les dossiers q_\<periode\> de l'ancien dossier vers le nouveau.
......@@ -101,4 +103,4 @@ Je n'ai pas les compétences pour créer une interface web, mais elle me semble
### Licence CECILL ###
Cet ensemble de scripts est publié sous licence CECILL 2.1, compatible avec la licence GNU.
Aucune garantie n'est apportée : c'est le premier code que je publie, et je code comme un ~~cochon~~ autodidacte débutant.
\ No newline at end of file
Aucune garantie n'est apportée : c'est le premier code que je publie, et je code comme un ~~cochon~~ autodidacte débutant.
......@@ -10,16 +10,6 @@ source $dossier_scripts/fonctions.sh
#### Début du script ####
## nettoyer authfile si besoin
if [ -e authfile ] ; then
mv -f authfile $dossier_auth/authfile.$(date +%d-%m-%y_%H:%m)
fi
if [ -e $dossier/authfile ] ; then
mv -f $dossier/authfile $dossier_auth/authfile.$(date +%d-%m-%y_%H:%m)
fi
# 1- information
printf "\n##################################\n#### Configuration de Ğ1Cotis ####\n################################## \n\n"
......@@ -46,10 +36,11 @@ printf "\n########################################\n#### Initialisation du sc
# 3- questions :
# lecture du chemin du dossier, Vérification du dossier
if [ ! $doss == $dossier ] ; then
printf "Vous n'avez pas modifié le fichier config.sh. \n \n Veuillez y indiquer : \'dossier=$doss\' , et vérifier le reste de la configuration. \n Vérifiez également que vous avez installé Silkaj et Diceware, comme indiqué dans le Readme. Si besoin, modifiez config.sh en fonction de votre installation de Silkaj. \n Puis relancer nouveau-compte.sh. A tout de suite !\n"
exit
printf "Vous n'avez pas modifié le fichier config.sh. \n \n Veuillez y indiquer : \'dossier=$doss\' , et vérifier le reste de la configuration. \n Vérifiez également que vous avez installé$
exit
fi
# VERIFIER L'EXISTENCE DES DOSSIERS
if [ ! -e $dossier_quot ] || [ ! -e $dossier_hebdo ] || [ ! -e $dossier_mens ] || [ ! -e $dossier_reboot ] || [ ! -e $dossier_auth ] || [ ! -e $dossier/logs ] ; then
......@@ -123,13 +114,13 @@ if [ ! "$?" == "0" ] ; then
tps_random 28 ; dom=$?
dow=*
cr_mens=$(echo "$m $h $dom * $dow cd $dossier_scripts ; bash ./init_mens.sh >> $dossier/logs/g1cotis.log 2>&1")
printf "\nĞ1Cotis (mensuel) sera lancé chaque $dom e jour du mois à $h:$m."
printf "\n\n !! ATTENTION !! : Après ce script, exécutez la commande 'crontab -e' et ajoutez à la fin de votre crontable (modifiez MAILTO si vous savez ce que vous faites) :\n\nMAILTO=\"\"\n$cr_reboot\n$cr_quot\n$cr_hebdo\n$cr_mens\n\n "
fi
printf "\nĞ1Cotis (mensuel) sera lancé chaque $dow e jour du mois à $h:$m."
printf '\E[31;40m'"\033[1m\n\n !! ATTENTION !! : Après ce script, exécutez la commande 'crontab -e' et ajoutez à la fin de votre crontable (modifiez MAILTO si vous savez ce que vous faites$
fi
else
printf "Votre Crontab est déjà configuré. \nSi vous installez la v0.2 par-dessus la v0.1, veuillez effacer les lignes correspondantes dans le crontab et recommencer."
printf "Votre Crontab est déjà configuré. \nSi vous installez la v0.2 par-dessus la v0.1, veuillez effacer les lignes correspondantes dans le crontab et recommencer."
fi
rm /tmp/g1cotis-crontab
printf "\n\n#####\nFin des vérifications. Suivez nos recommandations avant le premier lancement de Ğ1Cotis.\n\nMerci de participer au financement de la Ğ1 !\n\n"
......@@ -65,46 +65,35 @@ elif [ $montant_round -lt $min ] ; then # S'il n'y a pas assez de monnai
elif [ $montant_round -ge $min ] ; then
echo "montant : " $montant $monnaie
## Calcul et envoi des cotisations
a=0
restant=$montant
while [ $a -lt ${#lst_tx[@]} ] ; do
echo "======================"
echo "compte de cotisation : " ${lst_tx[$a]}
p=$(echo "${lst_p[$a]}" | bc)
echo "pourcentage : " $p "%"
cot=$(echo "$montant * $p * 0.01 " | bc )
com=${lst_com[$a]}
echo "cotisation n° " $((a+1)) " : " $cot
# Calcul du montant restant
restant=$(echo "$restant - $cot" |bc )
# envoi de la transaction
while true ; do
$silkaj -p $noeud --auth-file --file=$auth tx -y --output="${lst_tx[$a]}" --amount="$cot" --comment="$com"
if [ $? == 0 ] ; then
echo "cotisation $(($a+1)) effectuée" ; break
else
echo "ERREUR : nouvel essai dans 5 minutes. Si ce problème se reproduit, envisagez de changer de noeud en modifiant config.sh"
sleep 300
fi
done
a=$(($a+1))
done
## Envoi du reste sur le compte final
restant_round=$(echo "$restant" | awk '{printf("%d\n",$1)}')
echo "apres cotisations :" $restant $monnaie
if [ ! $restant_round -eq 0 ] ; then
while true ; do
$silkaj -p $noeud --auth-file --file=$auth tx -y --output="$fin" --amount="$restant" --comment="G1Cotis"
if [ $? == 0 ] ; then
echo "transaction finale effectuée" ; break
else
echo "ERREUR : nouvel essai dans 5 minutes. Si ce problème se reproduit, envisagez de changer de noeud en modifiant config.sh"
sleep 300
fi
done
fi
## Création de la liste d'outputs
output=${lst_tx[0]}
a=1
while [ $a -lt ${#lst_tx[@]} ] ; do
output=$output:${lst_tx[$a]}
a=$((a+1))
done
output=$output:$fin
echo "debug output : $output"
## Création de la liste de montants
amount=$(echo "$montant * ${lst_p[0]} * 0.01 " | bc )
restant=$(echo "$montant - $amount" | bc)
a=1
while [ $a -lt ${#lst_p[@]} ] ; do
p=${lst_p[$a]}
cot=$(echo "$montant * $p * 0.01 " | bc )
amount=$amount:$cot
restant=$(echo "$restant - $cot" | bc )
a=$((a+1))
done
amount=$amount:$restant
echo "debug amount : $amount"
## envoi transaction
$silkaj -p $noeud -af --file $auth tx -y --output=$output --amount="$amount" --comment=$comment
## fin du script
fi
......@@ -115,4 +104,6 @@ fin=""
min=""
lst_tx=""
lst_p=""
lst_com=""
comment=""
amount=""
......@@ -52,16 +52,19 @@ elif [ $(echo "100 * $montant_round" | bc) -lt $(echo "100 * $virt_recur" | bc)
elif [ $(echo "100 * $montant_round" | bc) -ge $(echo "100 * $virt_recur" | bc) ] ; then
echo "montant : " $montant $monnaie
## Envoi du virement
while true ; do
$silkaj -p $noeud --auth-file --file=$auth tx -y --output="$fin" --amount="$virt_recur" --comment=$com
if [ $? == 0 ] ; then
echo "virement effectué" ; break
else
echo "ERREUR : nouvel essai dans 5 minutes. Si ce problème se reproduit, envisagez de changer de noeud en modifiant config.sh ; ou vérifiez que le versement a DEUX chiffres après la virgule."
sleep 300
fi
done
## Envoi du virement : 5 tentatives
a=0
while [ $a -le 5 ] ; do
$silkaj -p $noeud -af --file $auth tx -y --output="$fin" --amount="$virt_recur" --comment=$com
if [ $? == 0 ] ; then
echo "virement effectué" ; break
elif [ $a -eq 5 ] ; then
echo "Le serveur est inaccessible. envisagez de changer de noeud en modifiant config.sh ou reportez ce bug."
else
echo "ERREUR : nouvel essai dans 5 minutes. Si ce problème se reproduit, envisagez de changer de noeud en modifiant config.sh ; ou vérifiez que le versement a DEUX chiffres après l$
sleep 300
fi
done
fi
# vidage des variables
......
......@@ -58,13 +58,13 @@ echo -n "Connaissez-vous déjà les identifiants pour ce compte ? (o/N) : "
read ouinon
if [ "$ouinon" == "o" ] || [ "$ouinon" == "O" ] ; then
printf "\nNous allons créer le fichier d'authentification pour ce compte. Soyez sûr.e de vous rappeler des identifiants, Ğ1Cotis ne les enregistrera pas.\nEntrez les identifiants lorsque Silkaj vous le demandera.\n\nEn attente de Silkaj...\n\n"
$silkaj authfile > /tmp/$nom
rm -f ./authfile ; $silkaj authfile > /tmp/$nom
pubkey=$(cat /tmp/$nom | grep "Authentication file 'authfile' generated and stored in current folder for following public key:" | cut -d':' -f2 | sed 's/.\{1\}//' ) #| cut -d' ' -f2- | sed -e 's/ $monnaie//g' )
printf "\nClef publique : $pubkey pour le compte $nom. Est-ce juste ? (o/N) : "
read ouinon
if [ "$ouinon" = "o" ] || [ "$ouinon" = "O" ]; then
printf "recept=$pubkey\n" >> $fichier
cp ./authfile $dossier_auth/$pubkey.auth
mv ./authfile $dossier_auth/$pubkey.auth
printf "Parfait, continuons\n\n" ; break
elif [ "$ouinon" = "n" ] || [ "$ouinon" = "N" ] || [ "$ouinon" = "" ]; then
printf "\nRecommençons."
......@@ -76,10 +76,10 @@ read ouinon
mdp=$(diceware -d - --no-caps)
printf "\nNous vous proposons un identifiant secret et un mot de passe, basés sur Diceware. \nEcrivez-les (copier-coller) quand Silkaj vous les demandera.\nRappel : <Ctrl+Maj+C> et <Ctrl+Maj+V> pour copier-coller dans le terminal.\nSoyez sûr.e de vous en rappeler, Ğ1Cotis ne les enregistrera pas. \n\nID= $id\nMDP= $mdp\n\nEn attente de Silkaj...\n\n"
rappel=yes
$silkaj authfile > /tmp/$nom
rm -f ./authfile ; $silkaj authfile > /tmp/$nom
pubkey=$(cat /tmp/$nom | grep "Authentication file 'authfile' generated and stored in current folder for following public key:" | cut -d':' -f2 | sed 's/.\{1\}//' ) #| cut -d' ' -f2- | sed -e 's/ $monnaie//g' )
printf "recept=$pubkey\n" >> $fichier
cp ./authfile $dossier_auth/$pubkey.auth
mv ./authfile $dossier_auth/$pubkey.auth
printf "\nClef publique : $pubkey pour le compte $nom.\n\n" ; break
else
printf "Il faut écrire O ou N, pas $ouinon !"
......@@ -161,3 +161,5 @@ printf ")\n\n" >> $fichier
printf "## Liste des pourcentages\nlst_p=(\n" >> $fichier
ecriture_liste ${lst_p[@]}
printf ")\n\n" >> $fichier
printf "## Commentaire\ncomment=G1Cotis" >> $fichier
......@@ -56,13 +56,13 @@ echo -n "Connaissez-vous déjà les identifiants pour ce compte ? (o/N) : "
read ouinon
if [ "$ouinon" == "o" ] || [ "$ouinon" == "O" ] ; then
printf "\nNous allons créer le fichier d'authentification pour ce compte. Soyez sûr.e de vous rappeler des identifiants, Ğ1Cotis ne les enregistrera pas.\nEntrez les identifiants lorsque Silkaj vous le demandera.\n\nEn attente de Silkaj ...\n\n"
$silkaj authfile > /tmp/$nom
rm -f ./authfile ; $silkaj authfile > /tmp/$nom
pubkey=$(cat /tmp/$nom | grep "Authentication file 'authfile' generated and stored in current folder for following public key:" | cut -d':' -f2 | sed 's/.\{1\}//' ) #| cut -d' ' -f2- | sed -e 's/ $monnaie//g' )
printf "\nClef publique : $pubkey pour le compte $nom. Est-ce juste ? (o/N) : "
read ouinon
if [ "$ouinon" = "o" ] || [ "$ouinon" = "O" ]; then
printf "recept=$pubkey\n" >> $fichier
cp ./authfile $dossier_auth/$pubkey.auth
mv ./authfile $dossier_auth/$pubkey.auth
printf "Parfait, continuons\n\n" ; break
elif [ "$ouinon" = "n" ] || [ "$ouinon" = "N" ] || [ "$ouinon" = "" ]; then
printf "\nRecommençons."
......@@ -74,10 +74,10 @@ read ouinon
mdp=$(diceware -d - --no-caps)
printf "\nNous vous proposons un identifiant secret et un mot de passe, basés sur Diceware. \nEcrivez-les (copier-coller) quand Silkaj vous les demandera.\nRappel : <Ctrl+Maj+C> et <Ctrl+Maj+V> pour copier-coller dans le terminal.\nSoyez sûr.e de vous en rappeler, Ğ1Cotis ne les enregistrera pas. \n\nID= $id\nMDP= $mdp\n\nEn attente de Silkaj ... \n\n"
rappel=yes
$silkaj authfile > /tmp/$nom
rm -f ./authfile ; $silkaj authfile > /tmp/$nom
pubkey=$(cat /tmp/$nom | grep "Authentication file 'authfile' generated and stored in current folder for following public key:" | cut -d':' -f2 | sed 's/.\{1\}//' ) #| cut -d' ' -f2- | sed -e 's/ $monnaie//g' )
printf "recept=$pubkey\n" >> $fichier
cp ./authfile $dossier_auth/$pubkey.auth
mv ./authfile $dossier_auth/$pubkey.auth
printf "\nClef publique : $pubkey pour le compte $nom.\n\n" ; break
else
printf "Il faut écrire O ou N, pas $ouinon !"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment