Installing Calculate in LXC

Updated 13 June 2023

LXC

Installing the required packages

To continue, you need to install app-containers/lxc:

emerge -a app-containers/lxc

Installing Calculate into a container

To install Calculate Linux Container, run:

lxc-create -n calculate -t download -- --server mirror.calculate-linux.org --arch x86_64 --dist scratch --release live
Downloading the image index
Downloading the rootfs
Downloading the metadata
The image cache is now ready
Unpacking the rootfs

---
You just created a Calculate container (release=23, 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.

Replace calculate with any name you want for your container. The application will automatically fetch the container on the cloud and install it. The installed containers are stored in the /var/calculate/lxc/ directory.

Note

In subsequent commands and paths, use the container name you replaced calculate with.

Network configuration

Network configuration of the host computer

To configure the network in a LXC container, you will need to configure the network bridge on the host. To do this, select one of the two configuration options:

  • If the host computer has multiple IP addresses - for example, if you will run the container on a desktop operating in the local network and receiving the IP via DHCP - you can configure the network by [using shared network containers] (network#ispolzovanie_obshchei_seti).
  • If the host computer has a single IP address - for example, when running a container on a VPS or dedicated server - you can configure [network address translation] (network#transliatsiia_ip-adresov) via a single interface.

Network configuration of the container

Configure the network for your container:

/var/calculate/lxc/calculate/config

# network type if bridge is used
lxc.net.0.type = veth
# start the network at system start
lxc.net.0.flags = up
# interface inside the container
lxc.net.0.name = eth0
# bridge to be used by the virtual interface
lxc.net.0.link = br0
# random MAC for the network interface of the container (first number must be even)
lxc.net.0.hwaddr = 02:03:04:05:06:07

Replace the MAC address, 02:03:04:05:06:07. Please note that the first number must be even (addresses with an odd first number are multicast and cannot be assigned).

Start the container

To start the container, run:

lxc-start calculate

Make sure the container is up and running:

lxc-info calculate
Name:           calculate
State:          RUNNING
PID:            25107
CPU use:        3.03 seconds
BlkIO use:      51.98 MiB
Memory use:     61.21 MiB
KMem use:       4.39 MiB
Link:           vethXLWII2
 TX bytes:      516 bytes
 RX bytes:      516 bytes
 Total bytes:   1.01 KiB

Add the container to autostart:

ln -sf /etc/init.d/lxc /etc/init.d/lxc.calculate

rc-update add lxc.calculate

In order for the system in the container to start correctly once the network is up, create a file containing the following rule:

/etc/conf.d/lxc

rc_want="net.br0"

Configuring system in the container

Connect to the container to make further modifications or adjustments.

lxc-attach calculate

Note

You can also edit settings in the container from the host computer, using the following syntax:

lxc-attach [HTML_REMOVED] -- [HTML_REMOVED]

Network

Network configuration when using a shared network

If you are using a shared network (with local IPs), you can configure the network either with DHCP or by specifying an available IP address and a router IP address.

When using a DHCP server on a local network, you simply have to run the following:

/etc/init.d/net.eth0 start

rc-update add net.eth0

Network configuration when using NAT

If using [network address translation (NAT)] (network#transliatsiia_ip-adresov), edit the host settings accordingly:

cl-setup-network --iface eth0:192.168.11.2:24 --route default:192.168.11.1 --dns 8.8.8.8

rc-update add net.eth0

In the example, the container uses IP ~192.168.11.2~~ to route via ~192.168.11.1~.

Other settings

Check the localization parameters and set the root password:

cl-setup-locale -l ru_RU --timezone Europe/Moscow

passwd

You can also specify the complete hostname:

cl-setup-network --hostname calculate.mydomain.org

To check the changes, run:

hostname -f

Adding applications in a container

Update Portage in the container:

cl-update

The first time you run the tool, it pulls the Portage tree and enabled overlays.

Now install the software you need for logging and cron jobs:

emerge -a app-admin/logrotate app-admin/syslog-ng sys-process/cronie

When you have completed the configuration, exit the container:

exit

Update to v.4.0

Starting with LXC 4.0, one configuration file common.conf is used instead of separate files for the different container types. When upgrading app-containers/lxc from previous versions, adjustments must be made to the settings of the already prepared containers. Edit the path to the common configuration file:

/var/calculate/lxc/calculate/config

#lxc.include = /usr/share/lxc/config/gentoo.common.conf
lxc.include = /usr/share/lxc/config/common.conf

To run programs that use /dev/shm (e.g. PostgreSQL), add the tmpfs mount to this path in the configuration file of the container:

/var/calculate/lxc/calculate/config

lxc.mount.entry = none dev/shm tmpfs rw,nosuid,nodev,create=dir

Conclusion

Containers are useful as they remain separated from the main system. You can experiment with them and even launch Calculate Linux from other systems.