Travailler à distance

De Ensiwiki
Aller à : navigation, rechercher

Accès à l'Ensimag depuis l'extérieur, VPN

Les machines (PC et serveurs) de l'Ensimag sont presque toutes sur un réseau privé. Pour y accéder depuis l'extérieur, la première étape est d'utiliser le VPN.

Il y a quelques exceptions :

  • La machine depots.ensimag.fr est accessible via SSH (cf. ci-dessous) sans VPN. On peut s'en servir comme d'un rebond SSH vers d'autres machines (cf. section SSH ci-dessous).

Webmail

Lorsque vous êtes loin de l'Ensimag, vous pouvez quand même lire vos emails à l'Ensimag en utilisant un simple navigateur. Le serveur webmail se trouve à https://webmail.grenoble-inp.org/.

Accès distant graphique (pcvirtuel.ensimag.fr)

L'environnement Ensimag dans votre navigateur ? C'est possible : Accès distant aux machines virtuelles de l'Ensimag !

Outils pour l'accès distant aux machines de l'Ensimag

Par SSH : scp, rsync, sftp, sshfs, lftp

Le moyen le plus simple d'accéder aux machines de l'Ensimag à distance est bien sûr par SSH. Pour une utilisation avancée, voyez également la page Clés SSH.

SSH ne se limite pas à un terminal distant cependant ; il peut servir de transport chiffré, donc sécurisé, pour d'autres programmes : scp, rsync, sftp et sshfs, entre autres.

  • vous devriez avoir appris à vous servir de scp et de sftp durant le Stage Unix de rentrée. En résumé, pour transférer des fichiers d'une machine vers ou depuis un serveur (disons pcserveur.ensimag.fr), on peut faire sftp pcserveur.ensimag.fr ou sftp utilisateur@pcserveur.ensimag.fr, puis utiliser les commandes sftp get et put pour télécharger et téléverser (i.e. envoyer) des fichiers. Par exemple :
ensipc01$ sftp pcserveur.ensimag.fr 
Connected to pcserveur.ensimag.fr.
sftp> ls
Desktop            Mail               coucou.txt
sftp> get coucou.txt
Fetching /home/user/coucou.txt to coucou.txt
/home/user/coucou.txt
sftp> exit
ensipc01$ cat coucou.txt
coucou
  • Si le principe de sftp vous plait mais que vous trouvez l'outil trop rudimentaire, regardez du côté de lftp qui permet beaucoup plus de choses (en particulier le transfert d'un répertoire complet avec la commande mirror).
  • rsync est une version largement améliorée de scp (le principal avantage : si on recopie un répertoire qui a déjà été recopié plus tôt, rsync ne recopie que ce qui a changé). Par exemple, pour récupérer tout le contenu de votre compte Ensimag dans le répertoire ~/ensimag/ de votre machine personnelle, faites (depuis votre machine perso) :
    rsync -av votre-login@pcserveur.ensimag.fr: ~/ensimag/
    Plus de détails sur cette page ou bien sûr dans man rsync.
  • sshfs est décrit pour Mac OS X dans l'article Monter le dossier maison sous mac depuis l'extérieur. Sous Linux, après avoir éventuellement installé sshfs, il suffit de faire (sur votre machine personnelle) :
    sshfs pcserveur.ensimag.fr: ~/ensimag/
    pour monter votre répertoire HOME de l'Ensimag dans le répertoire ~/ensimag/ chez vous (i.e. les modifications que vous ferez dans ~/ensimag sont transférées sur pcserveur.ensimag.fr au fur et à mesure que vous les faites). Cf. sshfs dans la documentation d'Ubuntu par exemple.

Rebond SSH pour éviter d'avoir besoin du VPN

La plupart des machines de l'Ensimag ne sont pas directement accessibles depuis l'extérieur. Une solution pour y accéder est d'utiliser le VPN. Si on ne souhaite pas utiliser le VPN, on peut tout de même se connecter via SSH aux machines comme pcserveur.ensimag.fr. Plusieurs solutions :

  • Encapsuler deux connections à la main :
[moi@mamachine ~]$ ssh depots.ensimag.fr
[moi@depots ~]$ ssh pcserveur.ensimag.fr
[moi@pcserveur ~]$ 
  • La même chose, en une ligne :
[moi@mamachine ~]$ ssh depots.ensimag.fr -t ssh pcserveur.ensimag.fr
[moi@pcserveur ~]$ 
  • Ajouter (une bonne fois pour toutes) les deux lignes suivantes au fichier ~/.ssh/config (à créer s'il n'existe pas) de la machine qui lance le SSH (i.e. le client) :
Host pcserveur.ensimag.fr ensipc*.imag.fr
ProxyCommand ssh -q login@depots.ensimag.fr nc %h 22

On peut ensuite utiliser ssh normalement vers pcserveur.ensimag.fr

[moi@mamachine ~]$ ssh pcserveur.ensimag.fr
[moi@pcserveur ~]$

Accès graphique aux machines virtuelles de l'Ensimag

Pour obtenir à distance et de manière graphique l'environnement de référence de l'Ensimag, la méthode recommandée est d'utiliser le système de machines virtuelles, décrit sur la page Accès distant aux machines virtuelles de l'Ensimag.

Unison

Unison permet de synchroniser des fichiers entre deux sources ayant divergé chacune de leur côté. En clair, si vous modifiez des fichiers chez vous et les « mêmes » sur le serveur de l'Ensimag, vous pourrez avoir une copie uniforme à la fin avec toutes vos modifications. Voyez la page dédiée à Unison pour un petit tuto.

Gestionnaires de version : Git, Mercurial, SVN

Une utilisation un peu déviante des gestionnaires de versions est de les utiliser pour synchroniser non pas le travail entre plusieurs membres mais celui d'un seul, distribué sur plusieurs machines. Le problème de cette manière de faire est qu'elle nécessite de commit ses changements, ce qui peut polluer le log si vous ne faites pas attention.

Si vous utilisez Git, il est aisé de contourner ce problème en utilisant des branches de travail et le squashing. Voyez plus bas dans les méthodes de travail proposées pour un petit guide.

Méthodes de travail à distance

Nous allons ici illustrer à l'aide des outils présentés plus haut des méthodes de travail possibles à l'Ensimag. N'hésitez pas à contribuer vos astuces ou votre façon de faire !

Travail direct sur serveur (SSH), petites modifications sur machine personnelle

Probablement le choix de la plupart des ensimagiens, et sans doute le choix le plus sûr. Si vous travaillez peu à distance, le plus simple est de vous connecter en SSH sur le serveur et de travailler directement sur les fichiers. Si vous n'êtes pas dans l'enceinte de l'Ensimag-même ceci dit, vous aurez du mal à faire tourner les applications graphiques, il faudra donc éditer dans une console (Emacs ou Vim vous appellent).

Pour le coup, il n'y a pas une seule manière de procéder en vérité :

  • La solution la plus intuitive : lancez un shell à travers SSH avec la commande ssh elle-même, vous aurez une console à votre disposition, ce qui est suffisant pour la grande majorité des tâches que vous aurez à effectuer.
  • Une alternative un peu lourde : téléchargez les fichiers chez vous (avec scp, sftp, rsync ou unison), éditez les, et renvoyez les de la même manière. Cela permet d'éditer dans votre éditeur local.
  • Certains éditeurs (comme Emacs avec /ssh:<login>@<machine>:<chemin>) vous permettent d'éditer directement à travers SSH.
  • Éditer les fichiers montés par sshfs, pour les courageux qui n'ont pas peur, sshfs étant relativement jeune, et probablement pas le système le plus sûr, en cas de perte de connexion ou autre (?).

Points forts :

  • Tout est sur le serveur, pas besoin de chercher plus loin ! En plus, vous bénéficiez de la sauvegarde automatique.
  • Ce que vous programmez sur le serveur devrait marcher tel quel une fois rendu (sauf gros bug).
  • Simple, plein de gens pour vous aider, si quelque chose va de travers, on ne vous tapera pas (normalement) sur les doigts.

Points faibles :

  • Peu devenir vite lourd si vous éditez un peu souvent vos fichiers sur votre machine et que vous utilisez scp pour copier les fichiers un à un... (voyez les conseils, juste au-dessous)
  • S'adapte mal à un week-end de stress sans accès aux serveurs, juste avant de rendre un TP. Plus généralement, peu flexible.

Conseils :

  • Adaptez la méthode de transfert à vos besoins. Si vous êtes sûr de la direction du transfert (pas de modification concurrente à l'Ensimag et sur machine personnelle), rsync est très pratique (il fait strictement plus que scp et est en général plus pratique que sftp, surtout s'il s'agit de transférer tout un répertoire). Si vous vous dédoublez et vous mettez à éditer à deux endroits en même temps (ou si vous n'êtes pas sûr de quand vous avez fait le dernier transfert), considérez unison.
  • Mais généralement, si vous passez beaucoup de temps à éditer sur votre machine personnelle, vous seriez peut-être plus productif en y effectuant la compilation et les tests également (voyez ci-dessous).

Continuer l’exécution d'un processus entre plusieurs connections : screen

La commande screen permet d'avoir une session de travail en terminal qui "survit" à une déconnexion au serveur. C'est pratique quand vous voulez lancer un processus long (compilation, jeux de tests...) sur un serveur, puis vous déconnecter du serveur sans que cela tue le processus pour autant, et enfin vous reconnecter et retrouver votre processus.

La commande screen vous ouvre un nouveau terminal, dans lequel vous pouvez démarrer les processus que vous désirer. Vous pouvez ensuite vous détacher de screen avec C-a d (i.e., appuyer sur Control-a puis sur d). Vous pouvez alors quitter votre session sur le serveur. Quand vous vous reconnecter au serveur, vous pouvez vous réattacher avec la commande screen -r.

pcserveur:~$ screen
pcserveur:~$ cd tp
pcserveur:~/tp$ processus_long &
# ^a d (appuyer sur Control-a, puis d pour se detacher)
pcserveur:~$

# ... je ferme ma session pcserveur, je rentre chez moi ...

pc-perso$ ssh pcserveur
pcserveur:~$ screen -r
pcserveur:~/tp$
# de retour dans screen, processus_long n'a pas été tué entre temps !

Travail sur machine personnelle, tests sur serveur avec rsync

L'option de ceux qui aiment leur petit confort à eux, sur leur machine, avec leur config, bref. Une solution adaptée à ceux qui travaillent majoritairement sur leur machine et ne font que tester sur les machines de l'Ensimag est d'utiliser rsync pour transmettre les changements sur le serveur :

  1. Éditez, compilez, testez chez vous.
  2. Utilisez rsync pour mettre à jour la copie de votre travail sur le serveur.
  3. Utilisez un shell ssh pour relancer les tests sur celui-ci.

Points forts :

  • Votre environnement, vos outils, vos configurations.
  • Si vous effectuez l'étape 2 suffisamment souvent, vous disposez d'une copie redondante de vos données, sauvegardée chaque nuit, etc. en plus de votre copie locale. Bon plan backup à peu de frais si vous n'avez rien d'autre.
  • Travail aussi bien chez vous, qu'en salle machine, qu'en salle de TD si les salles machines sont trop occupées.

Points faibles :

  • Méthode de travail biaisée vers votre machine personnelle.
  • Demande de configurer son environnement personnel pour pouvoir y effectuer les travaux demandés.
  • Demande une bonne organisation, en particulier, si vous n'écrivez pas de scripts de tests (semi-)automatisés que vous pouvez relancer en une commande sur le serveur Ensimag, vous perdrez en productivité (et gagnerez en risque d'erreur) à reproduire les tests sur deux machines différentes.
  • Possibilité d'incompatibilité entre ce qui est fonctionne sur votre machine et ce qui fonctionne sur les machines de l'Ensimag. Il faut faire attention, et savoir un petit peu où regarder pour ne pas se faire avoir. Plus votre système est exotique / éloigné de celui de l'Ensimag, plus il faudra être vigilant.

Conseils :

  • Plutôt pour ceux qui se sentent à l'aise avec le système.
  • Faites vous des scripts pour automatiser les choses fastidieuses.

Travail sur machine personnelle et sur serveur en utilisant Git

Cette section suppose que vous savez déjà vous servir de Git.

Git étant un gestionnaire de versions distribué, il peut vous permettre de travailler sur deux machines en même temps, en maintenant un dépôt sur chacune, synchronisés avec git pull ou git push, selon ce qui est pratique. Afin de garder des logs sains, travaillez sur une branche temporaire, dans laquelle vous pourrez commit selon le besoin : 22h et l'Ensimag ferme ? pas de problème, git commit et vous pourrez git pull de chez vous. Lorsque vous êtes satisfait des changements sur la version de travail et souhaitez effectuer un vrai commit, revenez sur votre branche de développement principale et effectuez un git merge --squash ; et voilà ! cela vous fera un beau gros commit, un seul.

Pour résumer, préparer le terrain :

$ git branch work
$ git checkout work

De chez vous :

$ git checkout work  # si ce n'est déjà fait
$ git pull
$ $EDITOR ...        # faites vos changements
$ git commit -a
$ git push

De l'Ensimag :

$ git checkout work  # si ce n'est déjà fait
$ $EDITOR ...        # faites vos changements
$ git commit -a

Pour faire un vrai commit :

$ git checkout master
$ git merge --squash work
$ git commit

Points forts :

  • Pareil que la méthode rsync.
  • De plus, permet de travailler aux deux endroits également.
  • Combine le processus de duplication à celui de développement utilisant le gestionnaire de versions (à supposer que vous en utilisiez un de base) : vous avez en plus le versionnement de vos fichiers gratuitement !

Points faibles :

  • Pareil que pour la méthode rsync, mais non biaisée.
  • Pas vraiment pour débutant, ou alors débutant bien motivé et prudent (lisez : faites un backup de vos données avant d'utiliser Git n'importe comment dessus).

Conseils :

  • Rien de spécial, Si vous vous lancez là-dedans, vous savez probablement ce que vous faites de toute façon. :)
  • Ah si, lorsque vous êtes sous pression et devez effectuer des tests rapidement (p.ex. deadline de rendu de TP), rsync est plus simple et il est moins facile de faire des bêtises avec ; cela va plus vite de l'utiliser.