Notes et astuces sur les systèmes libres basés sur GNU/Linux

Aller au contenu | Aller au menu | Aller à la recherche

Mot-clé - gui

Fil des billets

vendredi, 2 mai 2014

Une IHM pour LXC : LXC-Web-Panel

screenshot01.png
Bonjour à tous,

Un soupçon de motivation m'anime tout d'un coup, autant vous dire que c'est très rare et que je vais en profiter pour faire la promotion du made IN France :D

Comme vous le savez, j'utilise LXC pour faire mes petits tests. A part la mise en oeuvre qui est un petit peu fastidieuse, la solution tourne plutôt bien (très bien même).

Mais j'aime bien avoir une vue générale de ce qui tourne sur mon PC et une petite IHM Web pour visualiser et interagir avec LXC c'est plutôt cool.

J'ai trouvé une solution qui permet de gérer via une web appli votre hyperviseur LXC à la KISS style.
Elle est super bien référencée dans Google mais je n'ai vu aucun article français en parler, avouez que pour une application développée par des Français c'est un comble.

J'ai installé LWP sous ma Debian 7.5, of course it runs sans bidouille, juste en utilisant leur script.

Points Positifs :

  • Installation facile
  • Belle IHM, rien de superflu
  • Fait le boulot attendu.
  • Serveur léger

Axes d'améliorations :

  • Il me manque la gestion des sauvegardes/snapshot et ré-initialisation
  • Une petite console d'accès à distance (je n'ai encore pas encore de solution fiable et intéropérable mais on peut rêver)
  • Gestion des ressources systèmes de chaque containeur via un graphe
  • Laissez un script d'installation tourné en root me plaît pas trop.
  • Tout n'est pas opérationnel sous Debian mais cela devrait rentrer dans l'ordre avec LXC en version 1.0
    • Gestion du réseau
    • Création from scratch d'un container
    • Gestion du lancement des containers au boot
  • Je regrette un peu la technologie choisie qui se base sur du Python/Flask.


Quelques questions à l'un des auteurs Elie DELOUMEAU :

Qu'est-ce qui vous a poussé à developper LWP :

Avoir fait quelque chose d'utile dans ma vie et avoir quelque chose sur mon CV ^^

Quels besoins souhaitiez-vous couvrir avec cette application :

Rester dans une interface utilisable par tout le monde mais aussi poussée parfois pour les professionnels.

Vos prochaines fonctionnalités et développements en cours :

RESTful API
Backup
Gestion avancée des utilisateurs
Gestion d'ACL
Autoupdate
Gestion de plusieurs serveurs via une interface
Personnalisation de l'interface
Configuration du SSL à l'installation (si possible)
Installation sur une base MySQL si l'utilisateur le souhaite
Nous sommes actuellement sur le dev d'une version multi plateformes (debian/ubuntu/fedora etc..)

Pourquoi Python et Flask ?

Je suis parti sur du Python car je ne suis pas développeur et en tant qu'admin systèmes c'est le seul langage que je maîtrise plus ou moins. Et au final j'ai bien fait d'utiliser Python car avec LXC 1, il y a une bibliothèque Python livrée avec :D


Un grand merci à lui et une bonne continuation.

Sources :

dimanche, 30 décembre 2012

Ttyecho : Lancer un editeur de texte CLI depuis une GUI

Echo

Bonjour,

Derrière ce titre un peu alambiqué se cache un petit plaisir personnel enfin assouvi.
Je m'explique, imaginons que vous utilisiez un explorateur de fichier de type GUI (eg. Nautilus, pcmanfm ...) parce que vous êtes un peu tordu, vous utilisez un éditeur de texte en ligne de commande (eg. vim, emacs ou nano).
Cette situation est embêtante car vous avez envie d’éditer un programme en C que vous voyez s'afficher dans votre explorateur mais vous ne pouvez double-cliquer directement dessus car cela ne va pas vous lancer votre éditeur favoris.

Alors, j'ai trouvé une solution que je vais vous détailler ci-dessous, cependant si vous avez d'autres idées je suis comme un bar dans une soirée étudiante, open !

Bon on commence par récupérer le code source magique de ttyecho :

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <string.h>
#include <unistd.h>

void print_help(char *prog_name) {
        printf("Usage: %s [-n] DEVNAME COMMAND\n", prog_name);
        printf("Usage: '-n' is an optional argument if you want to push a new line at the end of the text\n");
        printf("Usage: Will require 'sudo' to run if the executable is not setuid root\n");
        exit(1);
}

int main (int argc, char *argv[]) {
    char *cmd, *nl = "\n";
    int i, fd;
    int devno, commandno, newline;
    int mem_len;
    devno = 1; commandno = 2; newline = 0;
    if (argc < 3) {
        print_help(argv[0]);
    }
    if (argc > 3 && argv[1][0] == '-' && argv[1][1] == 'n') {
        devno = 2; commandno = 3; newline=1;
    } else if (argc > 3 && argv[1][0] == '-' && argv[1][1] != 'n') {
        printf("Invalid Option\n");
        print_help(argv[0]);
    }
    fd = open(argv[devno],O_RDWR);
    if(fd == -1) {
        perror("open DEVICE");
        exit(1);
    }
    mem_len = 0;
    for ( i = commandno; i < argc; i++ ) {
        mem_len += strlen(argv[i]) + 2;
        if ( i > commandno ) {
            cmd = (char *)realloc((void *)cmd, mem_len);
        } else { //i == commandno
            cmd = (char *)malloc(mem_len);
        }

        strcat(cmd, argv[i]);
        strcat(cmd, " ");
    }
  if (newline == 0)
        usleep(225000);
    for (i = 0; cmd[i]; i++)
        ioctl (fd, TIOCSTI, cmd+i);
    if (newline == 1)
        ioctl (fd, TIOCSTI, nl);
    close(fd);
    free((void *)cmd);
    exit (0);
}

1. On stocke tout ça dans un fichier ttyecho.c par exemple.

2. On compile :

make ttyecho

3. On fait une petite copie vers un répertoire binaire contenu dans votre PATH :

sudo cp ttyecho /usr/local/bin/ttyecho

Pour vérifier que tout est en ordre, vous pouvez ouvrir deux terminaux.

#Terminal1
tty
> /dev/pts/0

sudo ttyecho -n /dev/pts/1 echo "toto"
#Terminal2
tty
> /dev/pts/1
>toto
  • Il est à noter que nous sommes obliger d'effectuer cette opération en tant que root.
  • L'option -n, permet d'effectuer un retour chariot dans le terminal distant.

Pour remédier au problème de droit, je vous propose cette manipulation qui comme d'habitude n'est pas très secure :

chmod +s /usr/local/bin/ttyecho

Avec le sticky bit, les utilisateurs qui lanceront cette commande auront les droits du propriétaire du fichier autrement dit "root".

Et maintenant le bouquet final : Application à notre problème

  • On ouvre notre explorateur de fichier, pour moi c'est pcmanfm.
  • On fait un joli clic-droit sur le fichier que nous souhaitons editer (ttyecho.c).
  • On choisit l'item "open with" et on remplit l'onglet "custom command line" comme suit :
ttyecho -n/dev/pts/0 nano %f

Il peut paraitre sot de rappeler qu'il faut que /dev/pts/0 soit déjà ouvert ...

Enjoy !