Installer Calculate sous Debian LXC

Updated 7 Mars 2019

Introduction

Peu de fournisseurs de serveurs VPS/VDS permettent d'installer votre système personnalisé à partir d'une image ISO, plutôt que d'utiliser un système courant. Vous pouvez néanmoins exécuter Calculate Linux dans un conteneur. Cette solution a deux avantages principaux:

  • Votre système ne dépend pas d'un contrat d'hébergement et peut être facilement transféré;
  • Vous pouvez utiliser autant de conteneurs avec Calculate Linux à bord que vous le souhaitez, chacun d'entre eux étant dédié à une tâche spécifique si vous le souhaitez.

Prenons Debian 9 comme exemple de système hôte.

Configuration du pont réseau

Installez d'abord les logiciels nécessaires:

apt-get install bridge-utils

Configurez le pont en ajoutant à la fin du fichier de configuration:

/etc/network/interfaces

auto br0
iface br0 inet static
bridge_ports none
bridge_fd 0
address 192.168.0.1
netmask 255.255.255.0

Redémarrer le réseau:

systemctl restart networking

Assurez-vous que le réseau br0 est opérationnel :

ifconfig
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.1  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::418:f4ff:fe48:10e9  prefixlen 64  scopeid 0x20<link>
        ether 06:18:f4:48:10:e9  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 5  bytes 438 (438.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Installer un conteneur avec Calculate Linux

Installez tous les logiciels nécessaires. Pour extraire l'image du système, vous aurez besoin du paquet app-arch/xz-utils, alors installez-le:

apt-get install lxc xz-utils

Installez une version récente de Calculate Container Scratch. Le nom du conteneur sera calculate. Vous serez invité à indiquer un nom de version disponible (17.12.2):

lxc-create -n calculate -t download -- --server mirror.calculate-linux.org --no-validate -d CCS --arch x86_64
Downloading the image index
WARNING: Running without gpg validation!
---
DIST    RELEASE ARCH    VARIANT BUILD
---
CCS 17.12.2 x86_64  default 20180221
---

Release: 17.12.2

Downloading the image index
Downloading the rootfs
Downloading the metadata
The image cache is now ready
Unpacking the rootfs

---
You just created a Gentoo container (release=17.12.2, arch=amd64, variant=default)

To enable sshd, run: rc-update add sshd

For security reason, container images ship without user accounts
and without a root password.

Use lxc-attach or chroot directly into the rootfs to set a root password
or create user accounts.

Modifiez les paramètres du conteneur:

/var/lib/lxc/calculate/config

# Network configuration
lxc.network.type = veth
lxc.network.flags = up
lxc.network.name = eth0
lxc.network.link = br0
lxc.network.ipv4.address = 192.168.0.2/24
lxc.network.ipv4.gateway = 192.168.0.1
lxc.start.auto = 1

Redémarrez le conteneur et ajoutez le daemon au démarrage automatique:

systemctl start lxc

systemctl enable lxc
Synchronizing state of lxc.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable lxc

Vérifiez le conteneur :

lxc-info -n calculate
Name:           calculate
State:          RUNNING
PID:            20111
IP:             192.168.0.2
CPU use:        8.16 seconds
BlkIO use:      50.00 MiB
Memory use:     58.30 MiB
KMem use:       6.67 MiB
Link:           veth0
 TX bytes:      858 bytes
 RX bytes:      438 bytes
 Total bytes:   1.27 KiB

Configurer Calculate Linux

Connectez-vous au système LCX et

lxc-attach -n calculate

passwd

/etc/init.d/sshd start

rc-update add sshd default

cl-setup-locale -l ru_RU

exit

Configuration du pare-feu

Vous aurez besoin du logiciel Shorewall pour configurer le routage et le pare-feu. Tout d'abord, installez Shorewall:

apt-get install shorewall

Copiez la configuration du modèle:

cp /usr/share/shorewall/configfiles/{interfaces,policy,rules,snat,zones} /etc/shorewall/

Modifier les paramètres communs de Shorewall, permettant la redirection IP:

/etc/shorewall/shorewall.conf

IP_FORWARDING=On

Vous devez connaître le nom de l'interface, car il sera spécifié dans les paramètres. Si vous ne le savez pas, lancez:

ifconfig

...
ens3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

Important

Dans les exemples ci-dessous, ens3 représente le nom de l'interface. N'oubliez pas de le remplacer par le vôtre !

/etc/shorewall/conf.d/zones

#ZONE       TYPE
fw          firewall
loc         ipv4
net         ipv4

Définir les zones d'interface

/etc/shorewall/conf.d/interfaces

?FORMAT 2
#ZONE       INTERFACE       OPTIONS
net         ens3            tcpflags,nosmurfs,routefilter
loc         br0             tcpflags,nosmurfs,routefilter,routeback

Configurez le masquage IP afin d'avoir une connexion Internet dans le conteneur:

Important

Remplacez 12.34.56.56.78 par votre IP externe.

/etc/shorewall/conf.d/snat

#ACTION             SOURCE              DEST
SNAT(12.34.56.78)   192.168.0.0/24      ens3

Configurez la politique de connexion : les connexions doivent être autorisées dans la zone locale, tandis que les appels entrants sont refusés.

/etc/shorewall/conf.d/policy

#SOURCE     DEST        POLICY      LOGLEVEL
fw          all         ACCEPT
loc         all         ACCEPT
net         all         DROP
all         all         REJECT      INFO

Configurez l'accès au système hôte

Configurez l'accès au système hôte : autorisez l'accès pour ping et ssh, et définissez la règle de transfert pour le conteneur ssh via le port 222:

/etc/shorewall/conf.d/rules

?SECTION NEW
#ACTION             SOURCE          DEST                    PROTO       DPORT
Ping(ACCEPT)        all             $FW
SSH(ACCEPT)         net             $FW
DNAT                net             loc:192.168.0.2:22      tcp         222

Run(@debian) Shorewall:

shorewall start

Vérifier l'accès au conteneur via ssh, port 222:

ssh -p 222 server.example.org

server.example.org est le serveur.

Si tout va bien, ajoutez Shorewall au démarrage automatique:

systemctl enable shorewall
Synchronizing state of shorewall.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable shorewall