===== mise en place alternc-lxc ===== Mise en place du paquet ''alternc-lxc'' sur une installation d'[[http://www.alternc.org/|AlternC]] existante afin de permettre un accès par SSH aux utilisateurs du panel, cloisonné dans leur répertoire. aptitude install alternc-lxc debootstrap bridge-utils **monter le fs cgroup pour pouvoir utiliser LXC** cgroup /sys/fs/cgroup cgroup defaults 0 0 **restrictions xinetd** * éditer ''/etc/xinetd.d/alternc_lxc'' -> ligne ''only_from'' pour restriction d'accès (quand mis en place sur le meme serveur que le panel AlternC, mettre ''127.0.0.1'') **création de l'image de base pour les LXC créés** * créer l'image nécessaire avec ''/var/lib/alternc-lxc/alternc_lxc_initme.sh'' ( ''telnet localhost 6504'' le dit, au pire ) * -> prévoir environ 1Go dans ''/var/lib/alternc-lxc'' pour stocker l'image **configuration réseau** * décider d'un subnet « privé », derrière lequel seront natés les accès sur les LXC * -> par exemple : ''172.x.y.0/24'' * mettre en place une interface "dummy" qui servira à communiquer entre l'hote et les lxc et un bridge interne (l'interface n'a pas besoin d'adresse IP, elle sera portée par le bridge) * -> par exemple : ''dummy0'' et ''brvm'' auto dummy0 iface dummy0 inet static auto brvm iface brvm inet static address 172.x.y.1 netmask 255.255.255.0 bridge_ports dummy0 bridge_stp off bridge_maxwait 5 => ''ifup brvm'' pour activer l'interface **sous-domaine** * décider d'un "sous-domaine" pour nommer les vm * -> par exemple : ''vmX.host.domaine.tld'' **ports d'accès SSH** * décider d'une série de ports pour permettre l'accès vers chacun des LXC créés * -> par exemple : 2221 et suivants * mettre en place des règles permettant l'accès : * activer l'ip forwarding * le NAT/masquerade pour les accès sortants * port-map pour les accès entrants * autoriser les accès entrants correspondants * -> exemple de regles Shorewall (avec une zone vm contenant l'interface ''brvm'') # SSH pour les LXC DNAT net vm:172.x.y.21:22 tcp 2221 DNAT net vm:172.x.y.22:22 tcp 2222 **configuration alternc-lxc** * détailler dans ''/etc/alternc-lxc/config.json'' les vms qu'on veut pouvoir mettre à disposition : { "_comment":"This is a json-formatted array for AlternC-lxc. 'vm': List of the VM that can be launched in this server for each VM, the key is the vm NAME, and the values set the VM hostname, and network with their IP, mac, and physical link 'servers': List all the AlternC's servers allowed to ask for a VM Each server has its servername as a key And the parameters are its secretkey and nfs or local mount for AlternC's HTML folder. To check it before production, use json_xs -t null config.json ", "vm": { "vm1":{ "hostname": "vm1.host.domaine.tld -p 2221", "network":{ "eth0":{ "link":"brvm", "ipv4":"172.x.y.21\/24", "ipv4.gateway":"172.x.y.1", "mac":"AA:CC:42:00:01:21" } } }, "vm2":{ "hostname": "vm2.host.domaine.tld -p 2222", "network":{ "eth0":{ "link":"brvm", "ipv4":"172.x.y.22\/24", "ipv4.gateway":"172.x.y.1", "mac":"AA:CC:42:00:01:22" } } } }, "servers": { "host.domaine.tld":{ "_comment_key":"Modifier la clef!!", "key":"xyzt1234", "_comment_htmlmount":"Ajuster la commande permettant d'acceder aux donnees web AlternC", "htmlmount":" -o bind /var/www/alternc", "mysql_host": "172.x.y.1" } } } * configurer les variables lxc_* dans le panneau administrateur Tant que l'adresse IP n'est pas renseignée, le menu n'apparait pas. * ''lxc_ip'' : 127.0.0.1 * ''lxc_key'' : la clef configurée dans le config.json * ''lxc_maxtime'' : le nombre d'heures max ou peut tourner une vm * ''lxc_port'' : le port d'acces (normalement 6504, sauf si modification de la configuration de xinetd) * -> si elles n'existent pas (:!: pas comme ça sur un AlternC où les variables sont surchargeables) il faut effectuer des ''INSERT'' dans la base de données : INSERT INTO variable(name,value,comment) VALUES ('lxc_ip','127.0.0.1','LXC server for running consoles'); INSERT INTO variable(name,value,comment) VALUES ('lxc_key','1234','Key for auth to LXC server'); INSERT INTO variable(name,value,comment) VALUES ('lxc_port','6504','Port to access LXC server'); INSERT INTO variable(name,value,comment) VALUES ('lxc_maxtime','4','How many hours do we allow to have a server before shutting it down'); **quelques commandes utiles** * ''alternc_lxc'' : liste les commandes possibles * ''alternc_lxc list'' : liste les LXC connus et lancés * ''alternc_lxc stop vm1'' : pour forcer l'arret d'un LXC * ''telnet localhost 6504'' : pour vérifier que le serveur répond bien (en cas d'erreur dans le fichier .json il le dit là) * ''grep AlternC-LXC /var/log/syslog'' : les erreurs sont enregistrées via syslog