forked from ScoDoc/DocScoDoc
147 lines
5.7 KiB
Markdown
147 lines
5.7 KiB
Markdown
# Configuration d'un environnement de développement
|
|
|
|
Quelques indications pour développer avec ScoDoc 7.x, à adapter à vos goûts et outils.
|
|
|
|
# Machine virtuelle
|
|
|
|
Il est confortable de développer dans une VM (un container Docker ferait
|
|
aussi bien l'affaire).
|
|
|
|
## Conseils pour la machine virtuelle
|
|
|
|
[VirtualBox](https://www.virtualbox.org/) est facile à installer sur Linux ou
|
|
Windows. Créer une VM avec Debian 10, et suivre la [procédure habituelle
|
|
d'installation de ScoDoc](GuideInstallDebian11.md).
|
|
|
|
Sur les Macs anciens (processeurs Intel), VirtualBox fonctionne bien. Sur les
|
|
modèles "M1" (Apple Silicon), je conseille d'utiliser
|
|
[UTM](https://mac.getutm.app/) qui est facile à installer et très performant. On
|
|
installe alors une VM avec la distribution Linux Debian pour l'architecture
|
|
`arm64` (nous ne produisons pas de paquets Debian `arm64` pour ScoDoc 9, mais
|
|
l'installation est simple, ne pas hésiter à demander sur le Discord).
|
|
|
|
En général, vous préférez développer sur la machine hôte pour disposer de votre
|
|
éditeur préféré, mais exécutez ScoDoc dans la VM.
|
|
|
|
### Éditeur de texte / IDE
|
|
Si vous êtes expérimenté, vous avez vos outils préférés. Mais si vous débutez,
|
|
surtout pour un environnement de développement distant (le code développé tourne
|
|
dans une machine virtuelle ou réelle séparée de votre machine de burea), nous
|
|
vous conseillons **VS Code** avec le module
|
|
[*Remote-SSH*](https://code.visualstudio.com/docs/remote/ssh). Ceci vous évite
|
|
de fastidieuses configurations de partage de fichiers entre les machine, il
|
|
suffit d'une connexion SSH fonctionnelle.
|
|
|
|
### Configuration réseau de VirtualBox
|
|
|
|
La VM a besoin d'accéder à Internet pour l'installation, et aussi pour les mises
|
|
à jour et peut-être certains tests que vous voudrez lancer. L'accès à la VM
|
|
depuis l'hôte doit être possible via un réseau privé interne (car vous ne serez
|
|
pas toujours conencté à Internet, et ne souhaitez pas que l'on accède à votre
|
|
serveur de test de l'extérieur).
|
|
|
|
Modifier la config réseau via l'UI graphique de VirtualBox, la VM étant éteinte.
|
|
|
|
- `Adapter 1` : accès à la VM depuis l'hôte: réseau privé hôte vboxnet0
|
|
|
|
- `Adapter 2` : accès à Internet depuis la VM, configurer un interface réseau NAT.
|
|
|
|
Dans le Debian, j'utilise `/etc/network/interfaces`
|
|
|
|
# The loopback network interface
|
|
auto lo
|
|
iface lo inet loopback
|
|
|
|
# The primary network interface
|
|
allow-hotplug enp0s3
|
|
iface enp0s3 inet dhcp
|
|
|
|
(le `enp0s3` désigne chez moi l'`Adapter 1`, mais c'est susceptible de changer. Normalement, l'installeur créé ce fichier )
|
|
|
|
Pour lancer l'interface externe , quand on a besoin d'accéder à Internet depuis
|
|
la VM (en fait assez rarement):
|
|
|
|
dhclient enp0s8
|
|
|
|
ici `enp0s8` correspond à l'`Adapter 2`. Si vous travaillez sur une machine fixe avec connexion permanente, vous pouvez dans Debian activer cette interface constamment (modifier `/etc/network/interfaces`).
|
|
|
|
### Noms des machines
|
|
Modifier le `/etc/hosts` (ou équivalent) de l'hôte, et y ajouter l'IP de votre VM, par exemple (adapter l'IP !):
|
|
|
|
192.168.12.10 scodoc scodoc.dev.net
|
|
|
|
|
|
### Partage de fichiers
|
|
Pour éditer votre code au chaud sur votre hôte, il y a plein de solutions.
|
|
La plus simple, déjà mentionnée, consiste à passer par une connexion SSH (VS
|
|
Code propose un module dédié très simple et performant, mais tout montage de
|
|
type `sshfs`peut aussi faire l'affaire).
|
|
|
|
|
|
Une autre solution est de laisser le source (clone git) sur l'hôte, et de
|
|
partager ce répertoire avec la VM. Dans VirtualBox / config. VM / Dossiers
|
|
partagés, ajouter un partage. Par exemple, vous mettez vos sources sur l'hôte
|
|
dans `~/src`, et dans la VM sur `/src`.
|
|
Dans ScoDoc, `/opt/scodoc/Products/ScoDoc` est alors un lien symbolique vers
|
|
votre `src/ScoDoc`.
|
|
|
|
#### Détails sur les partages avec VirtualBox
|
|
Pour pouvoir utiliser des liens symboliques dans le partage:
|
|
|
|
VBoxManage setextradata "Debian11" VBoxInternal2/SharedFoldersEnableSymlinksCreate/src 1
|
|
|
|
Attention, VirtualBox gère mal les droits/permissions du répertoire partagé. les utilisateurs linux (dans la VM) doit être dans le groupe `vboxsf`:
|
|
|
|
usermod -a -G vboxsf root
|
|
|
|
Typiquement, les fichiers sources vus de la VM ont les droits
|
|
|
|
-rwxrwx--- 1 root vboxsf 129579 Feb 1 15:04 ZNotes.py
|
|
|
|
alors que le même fichier sera vu de l'hôte
|
|
|
|
-rw-r--r-- 1 viennet staff 127K Feb 1 15:04 ../ScoDoc/ZNotes.py
|
|
|
|
Compte-tenu de ces différences, je préfères utiliser git sur l'hôte.
|
|
|
|
Il arrive (?) que Virtual Box change les droits unix sur les fichiers partagés. Dans ce cas, j'utilise, sur l'hôte
|
|
|
|
git diff -p -R --no-color | grep -E "^(diff|(old|new) mode)" --color=never | git apply
|
|
|
|
# Interaction avec ScoDoc 7 (ancien ScoDoc, avant l'été 2021)
|
|
|
|
ScoDoc 7 utilise Zope, et ce n'est pas un environnement commode pour débugguer.
|
|
|
|
Pour avoir un terminal interactif permettant de jouer avec ScoDoc, lancer
|
|
|
|
cd /opt/scodoc/Product/ScoDoc
|
|
|
|
scotests/scointeractive.sh DEPT
|
|
|
|
où `DEPT` est un département existant.
|
|
|
|
Ce script lance ScoDoc et charge `debug.py`.
|
|
|
|
Vous pouvez lancer un script avant d'entrer en mode interactif, par exemple
|
|
|
|
scotests/scointeractive.sh -r DEPT scotests/test_capitalisation.py
|
|
|
|
(voir plus d'exemples dans le répertoire `scotests`).
|
|
|
|
## problèmes de verrous
|
|
Zope créé un verrou pour ne jamais avoir deux process accédant à sa base de données objet à la fois. Celà empêche de lancer les scripts intercatif si un serveur ScoDoc est lancé, ce qui est ennuyeux quand on debugue. On peut, sur une machine de développement seulement, contourner cela en hackant le code du serveur:
|
|
|
|
Éditer (après installation normale sur votre serveur de développement):
|
|
/opt/zope213/lib/python2.7/site-packages/zc/lockfile
|
|
|
|
Ligne 56, méthode `_lock_file`
|
|
ajouter juste
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
|
|
|