Contained and Isolated Arch Environment within Linux host.

In the upcoming blog posts, we will explore one of my favorites editors: VIM. I wanted to start from scratch, so any new user can learn how to quickly customize the editor.

In this post we explore an operating-system-level virtualization method for running multiple isolated Linux systems (containers) on a single control host (LXC host). This will allow me to start a clean and minimal operative system within my fully fledged environment so I can teach VIM from scratch.

This is just one application, you can leverage the power of these contained environments for much more apart from testing new packages and having project contained configurations . We can see it as virtualization at bare-metal level. We can even emulate other architectures, as described in this post. So if we don’t want to carry around a raspberry pi for development, we can run it in a container environment in our host system.

Anyhow, lets get to it. First we create the directory where we want to store our container, in my case, the vim_container:

mkdir arch_container

Installing a minimal Arch Linux system

I will start a minimal arch installation within that container:

sudo pacstrap -c ./arch_container base --ignore linux

The -c option stands for cached. This tells to used cached packages as I’m also running in arch, so it is faster and it does not need to download them. We install base which includes the minimal system and ignore the linux package. As explained in the arch wiki, the linux package is not required to run a container, and could cause some issues during the booting process.

Enabling login

In order to be able to login we need to perform some modifications to the clean installed arch system. One option is mentioned in this github issue. We can simply delete /etc/securetty from the container, which will allow root login on all ttys:

sudo rm ./arch_container/etc/securetty

That should be it. Another option is to comment the first line of clean_vim/etc/pam.d/login:

sudo vim ./arch_container/etc/pam.d/login

#auth       required
auth       requisite
auth       include      system-local-login
account    include      system-local-login
session    include      system-local-login

We are ready to go.

Boot and login

For launching the container we will need systemd-nspawnof the systemd package:

sudo pacman -S systemd

Now we can boot into our container:

sudo systemd-nspawn -b -D ./clean_vim

The -b option stands for boot, and -D specifies the directory.

We are done, after executing that command we would see the system booting up and we would enter the login screen.

To exit the container we can either log in and execute poweroff or just press in less than a second ctrl+] 3 times (it is mentioned in the beginning when we launch the container)

Fix container shell compatibility with host terminal

I use urxvt as my terminal. This ended up having a minor incompatibility with the guest shell. When I would press backspace, a white space character would appear. After some googling I found that the issue was that my terminal and the guest shell differed on emulation. To fix this, we just need to do:

export TERM=ansi

We can include this line in the guests `root/.profile` so it happens automatically after login in.

  • Post author:
  • Post category:linux / vim