This commit is contained in:
2026-04-25 11:20:14 +02:00
parent ee47a6f06b
commit 3adc69cb89
14 changed files with 308 additions and 24 deletions
+1 -1
View File
@@ -11,7 +11,7 @@ echo "==== system essential"
sudo apt -y install build-essential openssl git pkg-config redis supervisor sqlitebrowser samba-client cifs-utils gettext sudo apt -y install build-essential openssl git pkg-config redis supervisor sqlitebrowser samba-client cifs-utils gettext
echo "==== python3 install" echo "==== python3 install"
sudo apt -y install python3-dev python3-pip python3-venv default-libmysqlclient-dev libmariadb-dev libpq-dev python3-picamera2 sudo apt -y install python3-dev python3-pip python3-venv libpq-dev default-libmysqlclient-dev libmariadb-dev python3-picamera2
echo "==== supervisor http access login:pass => root:toor" echo "==== supervisor http access login:pass => root:toor"
sudo cp supervisor-inet_http.conf /etc/supervisor/conf.d/ sudo cp supervisor-inet_http.conf /etc/supervisor/conf.d/
@@ -5,7 +5,7 @@ sudo apt install libprotobuf-dev protobuf-compiler
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source .cargo/env source $HOME/.cargo/env
cargo --version cargo --version
rustc --version rustc --version
cargo install reductstore cargo install reductstore
+60
View File
@@ -0,0 +1,60 @@
#!/bin/bash
# Script d'installation et de configuration d'un client Samba sur Raspberry Pi 4 (Debian Trixie)
# Mise à jour des paquets
echo "[1/5] Mise à jour des paquets..."
sudo apt update && sudo apt upgrade -y
# Installation des paquets nécessaires (client Samba et outils de montage)
echo "[2/5] Installation des paquets nécessaires..."
sudo apt install -y cifs-utils smbclient
# Création du point de montage pour le partage distant
echo "[3/5] Création du point de montage..."
sudo mkdir -p /mnt/samba/public
sudo mkdir -p /mnt/samba/secure
# Demande des informations de connexion au partage Samba
read -p "Adresse IP ou nom d'hôte du serveur Samba (ex: 192.168.1.10) : " samba_server
read -p "Nom du partage public (ex: public) : " public_share
read -p "Nom du partage sécurisé (ex: secure) : " secure_share
read -p "Nom d'utilisateur Samba (laissez vide si partage public uniquement) : " samba_user
if [ -n "$samba_user" ]; then
read -s -p "Mot de passe de l'utilisateur Samba : " samba_password
echo
fi
# Configuration des identifiants Samba (pour le partage sécurisé)
if [ -n "$samba_user" ]; then
echo "[4/5] Configuration des identifiants pour le partage sécurisé..."
sudo bash -c "echo 'username=$samba_user' > /etc/samba/credentials"
sudo bash -c "echo 'password=$samba_password' >> /etc/samba/credentials"
sudo chmod 600 /etc/samba/credentials
fi
# Configuration du montage automatique dans /etc/fstab
echo "[5/5] Configuration du montage automatique dans /etc/fstab..."
# Sauvegarde du fichier fstab existant
sudo cp /etc/fstab /etc/fstab.bak
# Ajout des lignes pour monter les partages Samba
if [ -n "$samba_user" ]; then
# Montage du partage sécurisé
sudo bash -c "echo '//$samba_server/$secure_share /mnt/samba/secure cifs credentials=/etc/samba/credentials,uid=1000,gid=1000,file_mode=0770,dir_mode=0770 0 0' >> /etc/fstab"
fi
# Montage du partage public (sans authentification)
sudo bash -c "echo '//$samba_server/$public_share /mnt/samba/public cifs guest,uid=1000,gid=1000,file_mode=0777,dir_mode=0777 0 0' >> /etc/fstab"
# Montage des partages
echo "Montage des partages Samba..."
sudo mount -a
# Vérification du montage
echo "Vérification des partages montés :"
df -h | grep samba
echo "Installation et configuration du client Samba terminées !"
echo "Les partages sont montés dans /mnt/samba/public et /mnt/samba/secure."
+76
View File
@@ -0,0 +1,76 @@
#!/bin/bash
# Script d'installation et de configuration de MariaDB
# Utilisation : source mariadb_config.sh && ./install_mariadb.sh
ENV_FILE="../test_tube_scanner/.env"
source $ENV_FILE
# Vérifie que le fichier de configuration est sourcé
if [ -z "$DATABASE_ROOT_PASSWORD" ] || [ -z "$DATABASE_NAME" ] || [ -z "$DATABASE_USER" ] || [ -z "$DATABASE_PASSWORD" ]; then
echo "Erreur : Les variables de configuration ne sont pas définies."
echo "Sourcez le fichier de configuration avant d'exécuter ce script :"
echo " source mariadb_config.sh && ./install_mariadb.sh"
exit 1
fi
# Mise à jour des paquets
echo "[1/6] Mise à jour des paquets..."
sudo apt update && sudo apt upgrade -y
# Installation de MariaDB
echo "[2/6] Installation de MariaDB..."
sudo apt install -y mariadb-server
# Sécurisation de MariaDB (désactive l'accès root à distance, supprime les bases de test, etc.)
echo "[3/6] Sécurisation de MariaDB..."
sudo mariadb_secure_installation <<EOF
n
y
$DATABASE_ROOT_PASSWORD
$DATABASE_ROOT_PASSWORD
y
y
y
y
EOF
# Création de la base de données, de l'utilisateur et attribution des droits
echo "[4/6] Configuration de la base de données '$DATABASE_NAME' et de l'utilisateur '$DATABASE_USER'..."
sudo mariadb -u root -p"$DATABASE_ROOT_PASSWORD" <<EOF
CREATE DATABASE IF NOT EXISTS $DATABASE_NAME;
CREATE USER IF NOT EXISTS '$DATABASE_USER'@'localhost' IDENTIFIED BY '$DATABASE_PASSWORD';
GRANT ALL PRIVILEGES ON $DATABASE_NAME.* TO '$DATABASE_USER'@'localhost';
FLUSH PRIVILEGES;
EOF
# Autoriser l'accès à distance (optionnel, si nécessaire)
# Remplace '%' par une IP spécifique pour plus de sécurité
echo "[5/6] Autorisation de l'accès à distance pour '$DATABASE_USER' (optionnel)..."
sudo mariadb -u root -p"$DATABASE_ROOT_PASSWORD" <<EOF
CREATE USER IF NOT EXISTS '$DATABASE_USER'@'%' IDENTIFIED BY '$DATABASE_PASSWORD';
GRANT ALL PRIVILEGES ON $DATABASE_NAME.* TO '$DATABASE_USER'@'%';
FLUSH PRIVILEGES;
EOF
# Redémarrage du service MariaDB
echo "[6/6] Redémarrage du service MariaDB..."
sudo systemctl restart mariadb
sudo systemctl enable mariadb
# Vérification du statut
echo "Statut du service MariaDB :"
sudo systemctl status mariadb --no-pager
# Affichage des informations de connexion
echo ""
echo "=== Configuration terminée ==="
echo "Base de données : $DATABASE_NAME"
echo "Utilisateur : $DATABASE_USER"
echo "Mot de passe : $DATABASE_PASSWORD"
echo ""
echo "Pour te connecter à MariaDB :"
echo " mariadb -u $DATABASE_USER -p$DATABASE_PASSWORD $DATABASE_NAME"
+81
View File
@@ -0,0 +1,81 @@
#!/bin/bash
# Script d'installation d'Adminer avec Nginx (sans Apache) + détection automatique de PHP
# Mise à jour des paquets
echo "[1/6] Mise à jour des paquets..."
sudo apt update && sudo apt upgrade -y
# Installation de Nginx et PHP-FPM (avec détection de la version de PHP)
echo "[2/6] Installation de Nginx et PHP-FPM..."
sudo apt install -y nginx
# Détection de la version de PHP installée (ou installation si absente)
PHP_VERSION=$(ls /etc/php/ | grep -E '^[0-9]+\.[0-9]+$' | sort -V | tail -n 1)
if [ -z "$PHP_VERSION" ]; then
echo "Aucune version de PHP détectée. Installation de PHP 8.2 par défaut..."
sudo apt install -y php8.2 php8.2-fpm php8.2-mysql
PHP_VERSION="8.2"
else
echo "Version de PHP détectée : $PHP_VERSION"
sudo apt install -y "php$PHP_VERSION" "php$PHP_VERSION-fpm" "php$PHP_VERSION-mysql"
fi
# Téléchargement de la dernière version stable d'Adminer
echo "[3/6] Téléchargement de la dernière version d'Adminer..."
ADMINER_VERSION=$(curl -s https://api.github.com/repos/vrana/adminer/releases/latest | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/\1/')
sudo mkdir -p /var/www/adminer
sudo wget "https://github.com/vrana/adminer/releases/download/v$ADMINER_VERSION/adminer-$ADMINER_VERSION.php" -O /var/www/adminer/index.php
# Configuration de Nginx pour Adminer
echo "[4/6] Configuration de Nginx..."
sudo bash -c "
cat > /etc/nginx/sites-available/adminer <<'END'
server {
listen 81;
server_name scanner.local;
root /var/www/adminer;
index index.php;
location / {
try_files \$uri \$uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php${PHP_VERSION}-fpm.sock;
fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
include fastcgi_params;
}
}
END"
# Activation du site Nginx
sudo ln -s /etc/nginx/sites-available/adminer /etc/nginx/sites-enabled/
sudo nginx -t # Teste la configuration Nginx
# Redémarrage des services
echo "[5/6] Redémarrage de Nginx et PHP-FPM..."
sudo systemctl restart nginx "php${PHP_VERSION}-fpm"
sudo systemctl enable nginx "php${PHP_VERSION}-fpm"
# Ajout de l'entrée dans /etc/hosts (optionnel)
echo "[6/6] Ajout de 'scanner.local' dans /etc/hosts..."
echo "$(hostname -I | awk '{print $1}') scanner.local" | sudo tee -a /etc/hosts
# Affichage des informations
echo ""
echo "=== Installation terminée ==="
echo "Adminer est accessible à l'adresse : http://scanner.local:81"
echo "ou via l'IP locale : http://$(hostname -I | awk '{print $1}'):81"
echo "Version d'Adminer installée : $ADMINER_VERSION"
echo "Version de PHP utilisée : $PHP_VERSION"
echo "Ajouter 'scanner.local' au fichier hosts:"
echo " linux : /etc/hosts"
echo " windows: C:\Windows\System32\drivers\etc\hosts"
echo ""
echo "Pour accéder à Adminer depuis cette machine:"
echo " http://scanner.local:81"
echo "ou"
echo " http://$(hostname -I | awk '{print $1}')"
+84
View File
@@ -0,0 +1,84 @@
#!/bin/bash
# Script d'installation et de configuration d'un serveur Samba sur Debian Trixie
# Mise à jour des paquets
echo "[1/6] Mise à jour des paquets..."
apt update && apt upgrade -y
# Installation de Samba
echo "[2/6] Installation de Samba..."
apt install -y samba samba-common
# Sauvegarde du fichier de configuration original
echo "[3/6] Sauvegarde du fichier smb.conf original..."
cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
# Configuration de Samba
echo "[4/6] Configuration de Samba..."
cat > /etc/samba/smb.conf << 'EOL'
[global]
workgroup = WORKGROUP
server string = Serveur Samba %h
netbios name = DebianSamba
security = user
map to guest = bad user
dns proxy = no
socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=65536 SO_SNDBUF=65536
[public]
comment = Partage Public
path = /srv/samba/public
browsable = yes
guest ok = yes
read only = no
create mask = 0777
directory mask = 0777
[secure]
comment = Partage Sécurisé
path = /srv/samba/secure
browsable = yes
guest ok = no
read only = no
create mask = 0770
directory mask = 0770
valid users = @smbgroup
EOL
# Création des répertoires de partage
echo "[5/6] Création des répertoires de partage..."
mkdir -p /srv/samba/public
mkdir -p /srv/samba/secure
chmod -R 0777 /srv/samba/public
chmod -R 0770 /srv/samba/secure
# Création d'un groupe pour le partage sécurisé
echo "[5/6] Création du groupe smbgroup..."
groupadd smbgroup
# Ajout d'un utilisateur Samba (remplace 'utilisateur' par le nom d'utilisateur souhaité)
echo "[5/6] Ajout d'un utilisateur Samba..."
read -p "Entrez le nom de l'utilisateur Samba à créer : " username
if id "$username" &>/dev/null; then
echo "L'utilisateur $username existe déjà."
else
useradd -M -s /usr/sbin/nologin "$username"
usermod -aG smbgroup "$username"
(echo "motdepasse"; echo "motdepasse") | smbpasswd -a "$username"
echo "Utilisateur $username ajouté à Samba."
fi
# Redémarrage du service Samba
echo "[6/6] Redémarrage du service Samba..."
systemctl restart smbd
systemctl enable smbd
# Vérification du statut du service
echo "Statut du service Samba :"
systemctl status smbd --no-pager
echo "Installation et configuration de Samba terminées !"
echo "Le partage public est accessible sans authentification."
echo "Le partage sécurisé est accessible avec l'utilisateur $username et le mot de passe défini."
-17
View File
@@ -1,17 +0,0 @@
Montage samba:
=============
sudo nano /etc/samba/.smb_creds
username=user_windows
password=mot_de_passe
domain=WORKGROUP
sudo chmod 600 /etc/samba/.smb_creds
sudo chown root:root /etc/samba/.smb_creds
sudo mkdir -p /mnt/exports
sudo chown django:django /mnt/exports
sudo nano /etc/fstab
//192.168.1.210/scanner /mnt/exports_cam cifs credentials=/etc/samba/.smb_creds,uid=django,gid=django,file_mode=0664,dir_mode=0775,iocharset=utf8,vers=3.0,_netdev,nofail 0 0
+2 -1
View File
@@ -74,9 +74,10 @@ DATABASE_POSTGRES_PORT=5432
#### ####
# database # database
# #
DATABASE_ROOT_PASSWORD=change_me
DATABASE_NAME=test_tube DATABASE_NAME=test_tube
DATABASE_USER=test_tube DATABASE_USER=test_tube
DATABASE_PASSWORD=ChangeMe DATABASE_PASSWORD=change_me
#### ####
## reductstore ## reductstore
+1 -1
View File
@@ -7,7 +7,7 @@ class WellAdmin(admin.ModelAdmin):
list_display = ('name', 'author',) list_display = ('name', 'author',)
class ConfigurationAdmin(admin.ModelAdmin): class ConfigurationAdmin(admin.ModelAdmin):
list_display = ('name', 'author', 'use_rpicam', 'video_width_capture', 'video_height_capture', 'video_frame_rate', 'px_per_mm', 'active',) list_display = ('name', 'author', 'use_rpicam', 'video_width_capture', 'video_height_capture', 'video_frame_rate', 'active',)
class MultiWellAdmin(admin.ModelAdmin): class MultiWellAdmin(admin.ModelAdmin):
list_filter = ('author', ) list_filter = ('author', )
+1 -2
View File
@@ -44,7 +44,6 @@ class Configuration(models.Model):
# Grbl configuration # Grbl configuration
grbl_xmax = models.FloatField(_("Grbl Xmax"), help_text=_("CNC Grbl Xmax en mm"), blank=False, default=350.0) grbl_xmax = models.FloatField(_("Grbl Xmax"), help_text=_("CNC Grbl Xmax en mm"), blank=False, default=350.0)
grbl_ymax = models.FloatField(_("Grbl Ymax"), help_text=_("CNC Grbl Ymax en mm"), blank=False, default=250.0) grbl_ymax = models.FloatField(_("Grbl Ymax"), help_text=_("CNC Grbl Ymax en mm"), blank=False, default=250.0)
px_per_mm = models.FloatField(_("Pixel / mm"), help_text=_('Rapport pixel / déplacement en pixel/mm'), blank=False, default=2.5)
# camera configuration # camera configuration
use_rpicam = models.BooleanField(_("Utiliser rpicam"), help_text=_("Par défaaut. Sinon USB webcam"), default=True) use_rpicam = models.BooleanField(_("Utiliser rpicam"), help_text=_("Par défaaut. Sinon USB webcam"), default=True)
@@ -106,7 +105,7 @@ class MultiWell(models.Model):
dy = models.FloatField(_("Pas Y"), help_text=_('Pas ou interval sur Y en mm'), blank=False, default=19.5) dy = models.FloatField(_("Pas Y"), help_text=_('Pas ou interval sur Y en mm'), blank=False, default=19.5)
feed = models.PositiveIntegerField(_("Vitesse"), help_text=_('Vitesse déplacement en mm/mn '), blank=False, default=1000) feed = models.PositiveIntegerField(_("Vitesse"), help_text=_('Vitesse déplacement en mm/mn '), blank=False, default=1000)
well_position = models.BooleanField(_("Positions"), help_text=_('Positions des puits générées ?'), default=False) well_position = models.BooleanField(_("Positions"), help_text=_('Positions des puits générées ?. Non => efface WellPostion et recalcule les positions'), default=False)
active = models.BooleanField(_("Active"), default=True) active = models.BooleanField(_("Active"), default=True)