Featured Image: vim in containers

Disclaimer: In most cases, we don't recommend editing files in a container. However, in rare cases, you might need to reproduce and slightly modify a file in a production container, especially when debugging. (In this case, the vim method I'm using works on Fedora 32 on my laptop and it is the base of my Red Hat OpenShift container image.)

In this article, I present a quick demo on how to install and run vim in a production Red Hat OpenShift container, when vim was not installed in the container image. I also describe the method to use to overcome an event where the local operating system and container base image diverge.

Step 1: Copy the vim binary

For oc cp to work, copy the vim binary: 

$ cp /usr/bin/vim ~/Downloads/vim

(This way of copying the vim binary works best for me, although there might be another cleaner way. Let me know in the comments if you have a different way of doing it.)

Step 2: Log in to the oc cluster

To login to the oc cluster, run the command:

$ oc login ..

Step 3: Specify the container to install vim into

I only have one container running in my pod, so oc picks the first container in the pod automatically:

$ export POD=yourPodName

Step 4: Copy files needed to run vim

For vim to start properly, copy this list of files. If vim doesn't start, add files to this list and copy them over:

$ export VIM_DEPS="~/Downloads/vim /lib64/libgpm.so.2.1.0 /lib64/libpython3.8.so.1.0 /lib64/libgpm.so.2"
$ for i in $VIM_DEPS; do oc cp $i $POD:/home/worker; done

Step 5: Log into the pod

To login to pod, run this command:

$ oc rsh $POD

Step 6: Run vim

To run vim, enter the following:

worker@pod$ LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/home/worker" PATH="$PATH:$PWD" vim

What if my operating system differs from the container's base image?

Make sure the architecture of your container image and laptop match. Then fire up a base image that can run locally in a container. Install vim in that container that runs on your localhost. Copy out the vim binary as is; for example, using podman cp or docker cp, and copy it to the pod as previously described. Run vim in the pod and observe what files are missing. These files can be taken from the container running on your localhost.

I hope that this quick tip vim helps when you need to reproduce and slightly modify a file in an OpenShift production container.

Last updated: January 20, 2023