#+TITLE: Linux Containers #+AUTHOR: Elia el Lazkani * Welcome to /Linux Containers/ Hello and Welcome to this presentation about /Linux Containers/. * Who am I ? - Name :: Elia el Lazkani - Blog :: [[https://blog.lazkani.io]] - Gitea :: [[https://gitea.project42.io/Elia][Project42:@Elia]] - Gitlab :: [[https://gilab.com/elazkani][@elazkani]] - Github :: [[https://github.com/elazkani][@elazkani]] * Once upon a time A little bit of history into /container technology/. * Pre-Linux Containers Era - 2000 :: Jails' early implementation show up in *FreeBSD* /[[https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/jails.html][Jails]]/ builds upon /chroot/. It changes the *root* directory of a /set of processes/. This will essentially create a safe environment, separate from the remainder of the system. This is great to hack code, like the *FreeBSD* base, safely without any risk to the remainder of the system. - 2003 :: Linux VServer /[[http://linux-vserver.org/Welcome_to_Linux-VServer.org][Linux VServer]]/ first release shows up as a patch to the /Linux Kernel/. /VServer/ provides virtualization for the /Linux Kernel/. Even though this is not *containerization*, this is the earliest form of partitioning resources. - 2005 :: Solaris Containers /Solaris/ leveraged /ZFS/ capabilities in their implementation of /containers/. They were able to offer features like *snapshots*, *cloning* and *restoring*. - 2005 :: OpenVZ /[[https://openvz.org/][Open Virtuozzo]]/ finds itself on /Linux/ as a patched kernel. /OpenVZ/ is operating-system-level virtualization technology which allows running multiple isolated operating system instances on the same kernel. It called these instances /containers/. * Post-Linux Containers Era - 2006-2007 :: The /[[https://lkml.org/lkml/2006/10/20/251][Generic Process Containers]]/ lands in Linux This was renamed thereafter to /[[https://en.wikipedia.org/wiki/Cgroups][Control Groups]]/ popularily known as /cgroups/ and landed in /Linux/ version =2.6.24=. /cgroups/ are the first piece of the puzzle in /Linux Containers/. We will be talking about /cgroups/ in detail later. - 2008 :: Namespaces Even though /namespaces/ have been around since 2002, /Linux/ version =2.4.19=, they saw a [[https://www.redhat.com/en/blog/history-containers][rapid development]] beginning 2006 and into 2008. /namespaces/ are the other piece of the puzzle in /Linux Containers/. We will talk about /namespaces/ in more details later. - 2008 :: LXC /LXC/ finally shows up! /LXC/ is the first form of /containers/ on the /Linux/ kernel. /LXC/ combined both /cgroups/ and /namespaces/ to provide isolated environments; containers. It is worth mentioning that /LXC/ runs a full operating system containers from an image. In other words, /LXC/ containers are meant to run more than one process. - 2013 :: Docker /Docker/ offered a full set of tools for working with /containers/. Making it easier than ever to work with them. They leveraged a lot of the concepts that we have mentioned previously. /Docker/ containers are designed to only run the application process. Unlike /LXC/ the =PID= =1= of a Docker container is excepted to be the application running in the contanier. We will be discussing this topic in more details later. * /cgroups/ What are cgroups ? Let's find out ! Better yet, let's use the tools at our disposal to find out together... Open a *terminal* and run the following command. #+BEGIN_SRC bash man 7 cgroups #+END_SRC This should open the ~man~ pages for =cgroups=. #+BEGIN_QUOTE Control groups, usually referred to as cgroups, are a Linux kernel fea‐ ture which allow processes to be organized into hierarchical groups whose usage of various types of resources can then be limited and moni‐ tored. The kernel's cgroup interface is provided through a pseudo- filesystem called cgroupfs. Grouping is implemented in the core cgroup kernel code, while resource tracking and limits are implemented in a set of per-resource-type subsystems (memory, CPU, and so on). #+END_QUOTE * What this all mean ? This can all be simplified by explaining it in a different way. Essentially, you can think of =cgroups= as a way for the /kernel/ to *limit* what you can *use*. This gives us the ability to only give a /container/ *1* CPU out of 4 available to the /kernel/. Or maybe, limit the memory allowed to *512MB* to the container. This way the container cannot overload the resources of the system in case they run a fork-bomb, for example. But, =cgroups= do not limit what we can "/see/". * /namespaces/ /Namespaces/ to the rescue ! As we did before, let's check the ~man~ page for =namespaces= #+BEGIN_SRC bash man 7 namespaces #+END_SRC #+BEGIN_QUOTE A namespace wraps a global system resource in an abstraction that makes it appear to the processes within the namespace that they have their own isolated instance of the global resource. Changes to the global resource are visible to other processes that are members of the name‐ space, but are invisible to other processes. One use of namespaces is to implement containers. #+END_QUOTE Wooow ! That's more mumbo jumbo ?! * Is it really simple ? Let's simplify this one as well. You can think of =namespaces= as way for the /kernel/ to *limit* what we *see*. There are multiple =namespaces=, like the =cgroup_namespaces= which /virtualizes/ the view of a process =cgroup=. In other words, inside the =cgroup= the process with =PID= *1* is not =PID= on the *system*. The =namespaces= manual page lists them, you check them out for more details. * Linux Containers We are finally here. Let's talk /Linux Containers/. The first topic we need to know about is *images*. * What are container images ? We talked before that /Docker/ came in and offered tooling around /containers/. One of those concepts that they used is *layers*. First of all, an image is a /file-system/ representation of a container. It is an on-disk, read-only, image. It sort of looks like your /Linux/ *filesystem*. Then, layers on top to add functionality. You might ask, what are these layers. We will see them in action. Let's look at my system. #+BEGIN_SRC bash :results output lsb_release -a #+END_SRC #+RESULTS: : LSB Version: n/a : Distributor ID: ManjaroLinux : Description: Manjaro Linux : Release: 20.1.1 : Codename: Mikah As you can see, I am running =Manjaro=. Keep that in mind. Let's take a look at the kernel running on this machine. #+BEGIN_SRC bash :results output uname -a #+END_SRC #+RESULTS: : Linux the-manj 5.8.6-1-MANJARO #1 SMP PREEMPT Thu Sep 3 14:19:36 UTC 2020 x86_64 GNU/Linux So, it's /kernel version/ =5.8.6=. Remember this one as well. * /neofetch/ I would like to /test/ a tool called =neofetch=. Why ? - First reason, I am not that creative. - Second, it's a nice tool, you'll see. We can test =neofetch= #+BEGIN_SRC bash :results output neofetch #+END_SRC #+RESULTS: Look at that, we don't have it installed. Not a big deal. We can download an image and test it inside. * Pulling an image Let's download a docker image. I am using =podman=, an open source project that allows us to *use* containers. _NOTE_: you might want to run these commands with =sudo= privileges. #+BEGIN_SRC bash :dir /sudo:: :results output podman pull ubuntu:20.04 #+END_SRC #+RESULTS: : 9140108b62dc87d9b278bb0d4fd6a3e44c2959646eb966b86531306faa81b09b Let's pull an ~Ubuntu~ image. As you can see, we have pulled an image from the repositories online. We can see further information about the image. #+BEGIN_SRC bash :dir /sudo:: :results output podman images #+END_SRC #+RESULTS: : REPOSITORY TAG IMAGE ID CREATED SIZE : docker.io/library/ubuntu 20.04 9140108b62dc 6 days ago 75.3 MB Much better, now we can see that we have an ~Ubuntu~ image downloaded from [[docker.io]]. * What's a container then ? A container is nothing but an instance of an image. Let's list our containers. #+BEGIN_SRC bash :dir /sudo:: :results output podman ps -a #+END_SRC #+RESULTS: : CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES We have none. Let's start one. #+BEGIN_SRC bash :dir /sudo:: :results output podman run -it ubuntu:20.04 uname -a #+END_SRC #+RESULTS: : Linux ee76616f69d1 5.8.6-1-MANJARO #1 SMP PREEMPT Thu Sep 3 14:19:36 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux It's running the same /kernel/ as our machine. are we really inside a container ? #+BEGIN_SRC bash :dir /sudo:: :results output podman run -it ubuntu:20.04 hostname -f #+END_SRC #+RESULTS: : 04b762cd25e3 #+BEGIN_SRC bash hostname -f #+END_SRC #+RESULTS: : the-manj They have different /hostnames/. Let's see if it's *really* ~Ubuntu~. #+BEGIN_SRC bash :dir /sudo:: :results output podman run -it ubuntu:20.04 bash -c 'apt-get update && apt-get install -y vim' #+END_SRC #+RESULTS: #+begin_example 0% [Working] Get:1 http://archive.ubuntu.com/ubuntu focal InRelease [265 kB] Get:2 http://security.ubuntu.com/ubuntu focal-security InRelease [107 kB] 0% [1 InRelease 14.2 kB/265 kB 5%] [2 InRelease 14.2 kB/107 kB 13%] 0% [1 InRelease 192 kB/265 kB 73%] 0% [Working] Get:3 http://archive.ubuntu.com/ubuntu focal-updates InRelease [111 kB] 0% [3 InRelease 1153 B/111 kB 1%] 0% [Working] Get:4 http://archive.ubuntu.com/ubuntu focal-backports InRelease [98.3 kB] 0% [4 InRelease 2602 B/98.3 kB 3%] 0% [Working] 0% [Working] Get:5 http://security.ubuntu.com/ubuntu focal-security/main amd64 Packages [367 kB] 0% [5 Packages 1239 B/367 kB 0%] 0% [Working] 0% [5 Packages store 0 B] Get:6 http://security.ubuntu.com/ubuntu focal-security/multiverse amd64 Packages [1169 B] 0% [5 Packages store 0 B] [6 Packages 1169 B/1169 B 100%] 0% [5 Packages store 0 B] [Waiting for headers] Get:7 http://security.ubuntu.com/ubuntu focal-security/universe amd64 Packages [112 kB] 0% [5 Packages store 0 B] [7 Packages 2761 B/112 kB 2%] 0% [5 Packages store 0 B] [Waiting for headers] Get:8 http://security.ubuntu.com/ubuntu focal-security/restricted amd64 Packages [75.9 kB] 0% [5 Packages store 0 B] [8 Packages 13.7 kB/75.9 kB 18%] 0% [5 Packages store 0 B] 0% [Working] 0% [6 Packages store 0 B] 0% [Working] 0% [7 Packages store 0 B] 0% [Working] 0% [8 Packages store 0 B] 0% [Working] 0% [Working] Get:9 http://archive.ubuntu.com/ubuntu focal/main amd64 Packages [1275 kB] 0% [9 Packages 34.5 kB/1275 kB 3%] 0% [Working] 0% [9 Packages store 0 B] [Waiting for headers] 0% [9 Packages store 0 B] [Waiting for headers] Get:10 http://archive.ubuntu.com/ubuntu focal/restricted amd64 Packages [33.4 kB] 0% [9 Packages store 0 B] [10 Packages 8481 B/33.4 kB 25%] 0% [9 Packages store 0 B] Get:11 http://archive.ubuntu.com/ubuntu focal/multiverse amd64 Packages [177 kB] 0% [9 Packages store 0 B] [11 Packages 11.4 kB/177 kB 6%] 0% [9 Packages store 0 B] Get:12 http://archive.ubuntu.com/ubuntu focal/universe amd64 Packages [11.3 MB] 0% [9 Packages store 0 B] [12 Packages 0 B/11.3 MB 0%] 0% [12 Packages 1578 kB/11.3 MB 14%] 0% [10 Packages store 0 B] [12 Packages 1578 kB/11.3 MB 14%] 0% [12 Packages 1717 kB/11.3 MB 15%] 0% [11 Packages store 0 B] [12 Packages 1717 kB/11.3 MB 15%] 40% [11 Packages store 0 B] [12 Packages 1974 kB/11.3 MB 17%] 41% [12 Packages 2005 kB/11.3 MB 18%] 91% [Waiting for headers] Get:13 http://archive.ubuntu.com/ubuntu focal-updates/multiverse amd64 Packages [21.6 kB] 91% [13 Packages 21.6 kB/21.6 kB 100%] 91% [12 Packages store 0 B] [13 Packages 21.6 kB/21.6 kB 100%] 91% [12 Packages store 0 B] Get:14 http://archive.ubuntu.com/ubuntu focal-updates/universe amd64 Packages [303 kB] 91% [12 Packages store 0 B] [14 Packages 41.5 kB/303 kB 14%] 92% [12 Packages store 0 B] Get:15 http://archive.ubuntu.com/ubuntu focal-updates/restricted amd64 Packages [88.7 kB] 93% [12 Packages store 0 B] [15 Packages 39.2 kB/88.7 kB 44%] 93% [12 Packages store 0 B] [Waiting for headers] Get:16 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages [703 kB] 93% [12 Packages store 0 B] [16 Packages 22.6 kB/703 kB 3%] 97% [12 Packages store 0 B] Get:17 http://archive.ubuntu.com/ubuntu focal-backports/universe amd64 Packages [4277 B] 97% [12 Packages store 0 B] [17 Packages 4277 B/4277 B 100%] 97% [12 Packages store 0 B] 97% [12 Packages store 0 B] 97% [Working] 97% [13 Packages store 0 B] 98% [Working] 98% [14 Packages store 0 B] 98% [Working] 98% [15 Packages store 0 B] 99% [Working] 99% [16 Packages store 0 B] 99% [Working] 99% [17 Packages store 0 B] 100% [Working] Fetched 15.1 MB in 2s (8963 kB/s) Reading package lists... 0% Reading package lists... 0% Reading package lists... 0% Reading package lists... 9% Reading package lists... 9% Reading package lists... 9% Reading package lists... 9% Reading package lists... 87% Reading package lists... 87% Reading package lists... 89% Reading package lists... 89% Reading package lists... 93% Reading package lists... 93% Reading package lists... 94% Reading package lists... 94% Reading package lists... 96% Reading package lists... 96% Reading package lists... 96% Reading package lists... 96% Reading package lists... 96% Reading package lists... 96% Reading package lists... 98% Reading package lists... 98% Reading package lists... 99% Reading package lists... 99% Reading package lists... 99% Reading package lists... 99% Reading package lists... 99% Reading package lists... 99% Reading package lists... Done Reading package lists... 0% Reading package lists... 0% Reading package lists... 0% Reading package lists... 9% Reading package lists... 9% Reading package lists... 9% Reading package lists... 9% Reading package lists... 87% Reading package lists... 87% Reading package lists... 89% Reading package lists... 89% Reading package lists... 93% Reading package lists... 93% Reading package lists... 94% Reading package lists... 94% Reading package lists... 96% Reading package lists... 96% Reading package lists... 96% Reading package lists... 96% Reading package lists... 96% Reading package lists... 96% Reading package lists... 98% Reading package lists... 98% Reading package lists... 99% Reading package lists... 99% Reading package lists... 99% Reading package lists... 99% Reading package lists... 99% Reading package lists... 99% Reading package lists... Done Building dependency tree... 0% Building dependency tree... 0% Building dependency tree... 50% Building dependency tree... 50% Building dependency tree... 65% Building dependency tree Reading state information... 0% Reading state information... 0% Reading state information... Done The following additional packages will be installed: alsa-topology-conf alsa-ucm-conf file libasound2 libasound2-data libcanberra0 libexpat1 libgpm2 libltdl7 libmagic-mgc libmagic1 libmpdec2 libogg0 libpython3.8 libpython3.8-minimal libpython3.8-stdlib libreadline8 libsqlite3-0 libssl1.1 libtdb1 libvorbis0a libvorbisfile3 mime-support readline-common sound-theme-freedesktop vim-common vim-runtime xxd xz-utils Suggested packages: libasound2-plugins alsa-utils libcanberra-gtk0 libcanberra-pulse gpm readline-doc ctags vim-doc vim-scripts The following NEW packages will be installed: alsa-topology-conf alsa-ucm-conf file libasound2 libasound2-data libcanberra0 libexpat1 libgpm2 libltdl7 libmagic-mgc libmagic1 libmpdec2 libogg0 libpython3.8 libpython3.8-minimal libpython3.8-stdlib libreadline8 libsqlite3-0 libssl1.1 libtdb1 libvorbis0a libvorbisfile3 mime-support readline-common sound-theme-freedesktop vim vim-common vim-runtime xxd xz-utils 0 upgraded, 30 newly installed, 0 to remove and 0 not upgraded. Need to get 14.9 MB of archives. After this operation, 70.4 MB of additional disk space will be used. 0% [Working] Get:1 http://archive.ubuntu.com/ubuntu focal/main amd64 libmagic-mgc amd64 1:5.38-4 [218 kB] 0% [1 libmagic-mgc 1165 B/218 kB 1%] 2% [Working] Get:2 http://archive.ubuntu.com/ubuntu focal/main amd64 libmagic1 amd64 1:5.38-4 [75.9 kB] 2% [2 libmagic1 1166 B/75.9 kB 2%] 3% [Waiting for headers] Get:3 http://archive.ubuntu.com/ubuntu focal/main amd64 file amd64 1:5.38-4 [23.3 kB] 3% [3 file 23.3 kB/23.3 kB 100%] 4% [Working] Get:4 http://archive.ubuntu.com/ubuntu focal/main amd64 libexpat1 amd64 2.2.9-1build1 [73.3 kB] 4% [4 libexpat1 9264 B/73.3 kB 13%] 5% [Working] Get:5 http://archive.ubuntu.com/ubuntu focal/main amd64 libmpdec2 amd64 2.4.2-3 [81.1 kB] 5% [5 libmpdec2 58.9 kB/81.1 kB 73%] 6% [Working] Get:6 http://archive.ubuntu.com/ubuntu focal/main amd64 libssl1.1 amd64 1.1.1f-1ubuntu2 [1318 kB] 6% [6 libssl1.1 50.9 kB/1318 kB 4%] 14% [Working] Get:7 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libpython3.8-minimal amd64 3.8.2-1ubuntu1.2 [705 kB] 14% [7 libpython3.8-minimal 43.1 kB/705 kB 6%] 18% [Working] Get:8 http://archive.ubuntu.com/ubuntu focal/main amd64 mime-support all 3.64ubuntu1 [30.6 kB] 18% [8 mime-support 30.6 kB/30.6 kB 100%] 19% [Working] Get:9 http://archive.ubuntu.com/ubuntu focal/main amd64 readline-common all 8.0-4 [53.5 kB] 19% [9 readline-common 28.3 kB/53.5 kB 53%] 20% [Working] Get:10 http://archive.ubuntu.com/ubuntu focal/main amd64 libreadline8 amd64 8.0-4 [131 kB] 20% [10 libreadline8 32.6 kB/131 kB 25%] 21% [Waiting for headers] Get:11 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libsqlite3-0 amd64 3.31.1-4ubuntu0.2 [549 kB] 21% [11 libsqlite3-0 39.9 kB/549 kB 7%] 25% [Waiting for headers] Get:12 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libpython3.8-stdlib amd64 3.8.2-1ubuntu1.2 [1665 kB] 25% [12 libpython3.8-stdlib 15.1 kB/1665 kB 1%] 34% [Waiting for headers] Get:13 http://archive.ubuntu.com/ubuntu focal/main amd64 xxd amd64 2:8.1.2269-1ubuntu5 [50.1 kB] 35% [13 xxd 28.2 kB/50.1 kB 56%] 35% [Working] Get:14 http://archive.ubuntu.com/ubuntu focal/main amd64 vim-common all 2:8.1.2269-1ubuntu5 [85.1 kB] 35% [14 vim-common 9703 B/85.1 kB 11%] 36% [Working] Get:15 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 xz-utils amd64 5.2.4-1ubuntu1 [82.5 kB] 37% [15 xz-utils 34.4 kB/82.5 kB 42%] 38% [Working] Get:16 http://archive.ubuntu.com/ubuntu focal/main amd64 alsa-topology-conf all 1.2.2-1 [7364 B] 38% [16 alsa-topology-conf 7364 B/7364 B 100%] 38% [Working] Get:17 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 alsa-ucm-conf all 1.2.2-1ubuntu0.4 [25.4 kB] 38% [17 alsa-ucm-conf 23.8 kB/25.4 kB 93%] 39% [Working] Get:18 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libasound2-data all 1.2.2-2.1ubuntu2 [20.1 kB] 39% [18 libasound2-data 0 B/20.1 kB 0%] 40% [Working] Get:19 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libasound2 amd64 1.2.2-2.1ubuntu2 [335 kB] 40% [19 libasound2 39.7 kB/335 kB 12%] 42% [Waiting for headers] Get:20 http://archive.ubuntu.com/ubuntu focal/main amd64 libltdl7 amd64 2.4.6-14 [38.5 kB] 43% [20 libltdl7 35.8 kB/38.5 kB 93%] 43% [Working] Get:21 http://archive.ubuntu.com/ubuntu focal/main amd64 libtdb1 amd64 1.4.2-3build1 [44.1 kB] 43% [21 libtdb1 0 B/44.1 kB 0%] 44% [Working] Get:22 http://archive.ubuntu.com/ubuntu focal/main amd64 libogg0 amd64 1.3.4-0ubuntu1 [24.0 kB] 44% [22 libogg0 2615 B/24.0 kB 11%] 45% [Waiting for headers] Get:23 http://archive.ubuntu.com/ubuntu focal/main amd64 libvorbis0a amd64 1.3.6-2ubuntu1 [87.0 kB] 45% [23 libvorbis0a 50.4 kB/87.0 kB 58%] 46% [Waiting for headers] Get:24 http://archive.ubuntu.com/ubuntu focal/main amd64 libvorbisfile3 amd64 1.3.6-2ubuntu1 [16.1 kB] 46% [24 libvorbisfile3 16.1 kB/16.1 kB 100%] 47% [Waiting for headers] Get:25 http://archive.ubuntu.com/ubuntu focal/main amd64 sound-theme-freedesktop all 0.8-2ubuntu1 [384 kB] 47% [25 sound-theme-freedesktop 9853 B/384 kB 3%] 50% [Waiting for headers] Get:26 http://archive.ubuntu.com/ubuntu focal/main amd64 libcanberra0 amd64 0.30-7ubuntu1 [38.1 kB] 50% [26 libcanberra0 30.2 kB/38.1 kB 79%] 50% [Waiting for headers] Get:27 http://archive.ubuntu.com/ubuntu focal/main amd64 libgpm2 amd64 1.20.7-5 [15.1 kB] 50% [27 libgpm2 15.1 kB/15.1 kB 100%] 51% [Waiting for headers] Get:28 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libpython3.8 amd64 3.8.2-1ubuntu1.2 [1620 kB] 51% [28 libpython3.8 41.9 kB/1620 kB 3%] 61% [Waiting for headers] Get:29 http://archive.ubuntu.com/ubuntu focal/main amd64 vim-runtime all 2:8.1.2269-1ubuntu5 [5873 kB] 61% [29 vim-runtime 11.6 kB/5873 kB 0%] 93% [Waiting for headers] Get:30 http://archive.ubuntu.com/ubuntu focal/main amd64 vim amd64 2:8.1.2269-1ubuntu5 [1238 kB] 93% [30 vim 18.9 kB/1238 kB 2%] 100% [Working] Fetched 14.9 MB in 1s (17.2 MB/s) debconf: delaying package configuration, since apt-utils is not installed Selecting previously unselected package libmagic-mgc. (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 4121 files and directories currently installed.) Preparing to unpack .../00-libmagic-mgc_1%3a5.38-4_amd64.deb ... Unpacking libmagic-mgc (1:5.38-4) ... Selecting previously unselected package libmagic1:amd64. Preparing to unpack .../01-libmagic1_1%3a5.38-4_amd64.deb ... Unpacking libmagic1:amd64 (1:5.38-4) ... Selecting previously unselected package file. Preparing to unpack .../02-file_1%3a5.38-4_amd64.deb ... Unpacking file (1:5.38-4) ... Selecting previously unselected package libexpat1:amd64. Preparing to unpack .../03-libexpat1_2.2.9-1build1_amd64.deb ... Unpacking libexpat1:amd64 (2.2.9-1build1) ... Selecting previously unselected package libmpdec2:amd64. Preparing to unpack .../04-libmpdec2_2.4.2-3_amd64.deb ... Unpacking libmpdec2:amd64 (2.4.2-3) ... Selecting previously unselected package libssl1.1:amd64. Preparing to unpack .../05-libssl1.1_1.1.1f-1ubuntu2_amd64.deb ... Unpacking libssl1.1:amd64 (1.1.1f-1ubuntu2) ... Selecting previously unselected package libpython3.8-minimal:amd64. Preparing to unpack .../06-libpython3.8-minimal_3.8.2-1ubuntu1.2_amd64.deb ... Unpacking libpython3.8-minimal:amd64 (3.8.2-1ubuntu1.2) ... Selecting previously unselected package mime-support. Preparing to unpack .../07-mime-support_3.64ubuntu1_all.deb ... Unpacking mime-support (3.64ubuntu1) ... Selecting previously unselected package readline-common. Preparing to unpack .../08-readline-common_8.0-4_all.deb ... Unpacking readline-common (8.0-4) ... Selecting previously unselected package libreadline8:amd64. Preparing to unpack .../09-libreadline8_8.0-4_amd64.deb ... Unpacking libreadline8:amd64 (8.0-4) ... Selecting previously unselected package libsqlite3-0:amd64. Preparing to unpack .../10-libsqlite3-0_3.31.1-4ubuntu0.2_amd64.deb ... Unpacking libsqlite3-0:amd64 (3.31.1-4ubuntu0.2) ... Selecting previously unselected package libpython3.8-stdlib:amd64. Preparing to unpack .../11-libpython3.8-stdlib_3.8.2-1ubuntu1.2_amd64.deb ... Unpacking libpython3.8-stdlib:amd64 (3.8.2-1ubuntu1.2) ... Selecting previously unselected package xxd. Preparing to unpack .../12-xxd_2%3a8.1.2269-1ubuntu5_amd64.deb ... Unpacking xxd (2:8.1.2269-1ubuntu5) ... Selecting previously unselected package vim-common. Preparing to unpack .../13-vim-common_2%3a8.1.2269-1ubuntu5_all.deb ... Unpacking vim-common (2:8.1.2269-1ubuntu5) ... Selecting previously unselected package xz-utils. Preparing to unpack .../14-xz-utils_5.2.4-1ubuntu1_amd64.deb ... Unpacking xz-utils (5.2.4-1ubuntu1) ... Selecting previously unselected package alsa-topology-conf. Preparing to unpack .../15-alsa-topology-conf_1.2.2-1_all.deb ... Unpacking alsa-topology-conf (1.2.2-1) ... Selecting previously unselected package alsa-ucm-conf. Preparing to unpack .../16-alsa-ucm-conf_1.2.2-1ubuntu0.4_all.deb ... Unpacking alsa-ucm-conf (1.2.2-1ubuntu0.4) ... Selecting previously unselected package libasound2-data. Preparing to unpack .../17-libasound2-data_1.2.2-2.1ubuntu2_all.deb ... Unpacking libasound2-data (1.2.2-2.1ubuntu2) ... Selecting previously unselected package libasound2:amd64. Preparing to unpack .../18-libasound2_1.2.2-2.1ubuntu2_amd64.deb ... Unpacking libasound2:amd64 (1.2.2-2.1ubuntu2) ... Selecting previously unselected package libltdl7:amd64. Preparing to unpack .../19-libltdl7_2.4.6-14_amd64.deb ... Unpacking libltdl7:amd64 (2.4.6-14) ... Selecting previously unselected package libtdb1:amd64. Preparing to unpack .../20-libtdb1_1.4.2-3build1_amd64.deb ... Unpacking libtdb1:amd64 (1.4.2-3build1) ... Selecting previously unselected package libogg0:amd64. Preparing to unpack .../21-libogg0_1.3.4-0ubuntu1_amd64.deb ... Unpacking libogg0:amd64 (1.3.4-0ubuntu1) ... Selecting previously unselected package libvorbis0a:amd64. Preparing to unpack .../22-libvorbis0a_1.3.6-2ubuntu1_amd64.deb ... Unpacking libvorbis0a:amd64 (1.3.6-2ubuntu1) ... Selecting previously unselected package libvorbisfile3:amd64. Preparing to unpack .../23-libvorbisfile3_1.3.6-2ubuntu1_amd64.deb ... Unpacking libvorbisfile3:amd64 (1.3.6-2ubuntu1) ... Selecting previously unselected package sound-theme-freedesktop. Preparing to unpack .../24-sound-theme-freedesktop_0.8-2ubuntu1_all.deb ... Unpacking sound-theme-freedesktop (0.8-2ubuntu1) ... Selecting previously unselected package libcanberra0:amd64. Preparing to unpack .../25-libcanberra0_0.30-7ubuntu1_amd64.deb ... Unpacking libcanberra0:amd64 (0.30-7ubuntu1) ... Selecting previously unselected package libgpm2:amd64. Preparing to unpack .../26-libgpm2_1.20.7-5_amd64.deb ... Unpacking libgpm2:amd64 (1.20.7-5) ... Selecting previously unselected package libpython3.8:amd64. Preparing to unpack .../27-libpython3.8_3.8.2-1ubuntu1.2_amd64.deb ... Unpacking libpython3.8:amd64 (3.8.2-1ubuntu1.2) ... Selecting previously unselected package vim-runtime. Preparing to unpack .../28-vim-runtime_2%3a8.1.2269-1ubuntu5_all.deb ... Adding 'diversion of /usr/share/vim/vim81/doc/help.txt to /usr/share/vim/vim81/doc/help.txt.vim-tiny by vim-runtime' Adding 'diversion of /usr/share/vim/vim81/doc/tags to /usr/share/vim/vim81/doc/tags.vim-tiny by vim-runtime' Unpacking vim-runtime (2:8.1.2269-1ubuntu5) ... Selecting previously unselected package vim. Preparing to unpack .../29-vim_2%3a8.1.2269-1ubuntu5_amd64.deb ... Unpacking vim (2:8.1.2269-1ubuntu5) ... Setting up libexpat1:amd64 (2.2.9-1build1) ... Setting up libgpm2:amd64 (1.20.7-5) ... Setting up libogg0:amd64 (1.3.4-0ubuntu1) ... Setting up mime-support (3.64ubuntu1) ... Setting up alsa-ucm-conf (1.2.2-1ubuntu0.4) ... Setting up libmagic-mgc (1:5.38-4) ... Setting up libtdb1:amd64 (1.4.2-3build1) ... Setting up libssl1.1:amd64 (1.1.1f-1ubuntu2) ... debconf: unable to initialize frontend: Dialog debconf: (No usable dialog-like program is installed, so the dialog based frontend cannot be used. at /usr/share/perl5/Debconf/FrontEnd/Dialog.pm line 76.) debconf: falling back to frontend: Readline debconf: unable to initialize frontend: Readline debconf: (Can't locate Term/ReadLine.pm in @INC (you may need to install the Term::ReadLine module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.30.0 /usr/local/share/perl/5.30.0 /usr/lib/x86_64-linux-gnu/perl5/5.30 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.30 /usr/share/perl/5.30 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base) at /usr/share/perl5/Debconf/FrontEnd/Readline.pm line 7.) debconf: falling back to frontend: Teletype Setting up libsqlite3-0:amd64 (3.31.1-4ubuntu0.2) ... Setting up libmagic1:amd64 (1:5.38-4) ... Setting up file (1:5.38-4) ... Setting up xxd (2:8.1.2269-1ubuntu5) ... Setting up libasound2-data (1.2.2-2.1ubuntu2) ... Setting up vim-common (2:8.1.2269-1ubuntu5) ... Setting up xz-utils (5.2.4-1ubuntu1) ... update-alternatives: using /usr/bin/xz to provide /usr/bin/lzma (lzma) in auto mode update-alternatives: warning: skip creation of /usr/share/man/man1/lzma.1.gz because associated file /usr/share/man/man1/xz.1.gz (of link group lzma) doesn't exist update-alternatives: warning: skip creation of /usr/share/man/man1/unlzma.1.gz because associated file /usr/share/man/man1/unxz.1.gz (of link group lzma) doesn't exist update-alternatives: warning: skip creation of /usr/share/man/man1/lzcat.1.gz because associated file /usr/share/man/man1/xzcat.1.gz (of link group lzma) doesn't exist update-alternatives: warning: skip creation of /usr/share/man/man1/lzmore.1.gz because associated file /usr/share/man/man1/xzmore.1.gz (of link group lzma) doesn't exist update-alternatives: warning: skip creation of /usr/share/man/man1/lzless.1.gz because associated file /usr/share/man/man1/xzless.1.gz (of link group lzma) doesn't exist update-alternatives: warning: skip creation of /usr/share/man/man1/lzdiff.1.gz because associated file /usr/share/man/man1/xzdiff.1.gz (of link group lzma) doesn't exist update-alternatives: warning: skip creation of /usr/share/man/man1/lzcmp.1.gz because associated file /usr/share/man/man1/xzcmp.1.gz (of link group lzma) doesn't exist update-alternatives: warning: skip creation of /usr/share/man/man1/lzgrep.1.gz because associated file /usr/share/man/man1/xzgrep.1.gz (of link group lzma) doesn't exist update-alternatives: warning: skip creation of /usr/share/man/man1/lzegrep.1.gz because associated file /usr/share/man/man1/xzegrep.1.gz (of link group lzma) doesn't exist update-alternatives: warning: skip creation of /usr/share/man/man1/lzfgrep.1.gz because associated file /usr/share/man/man1/xzfgrep.1.gz (of link group lzma) doesn't exist Setting up libvorbis0a:amd64 (1.3.6-2ubuntu1) ... Setting up libltdl7:amd64 (2.4.6-14) ... Setting up alsa-topology-conf (1.2.2-1) ... Setting up sound-theme-freedesktop (0.8-2ubuntu1) ... Setting up libasound2:amd64 (1.2.2-2.1ubuntu2) ... Setting up libmpdec2:amd64 (2.4.2-3) ... Setting up vim-runtime (2:8.1.2269-1ubuntu5) ... Setting up readline-common (8.0-4) ... Setting up libpython3.8-minimal:amd64 (3.8.2-1ubuntu1.2) ... Setting up libreadline8:amd64 (8.0-4) ... Setting up libvorbisfile3:amd64 (1.3.6-2ubuntu1) ... Setting up libpython3.8-stdlib:amd64 (3.8.2-1ubuntu1.2) ... Setting up libcanberra0:amd64 (0.30-7ubuntu1) ... Setting up libpython3.8:amd64 (3.8.2-1ubuntu1.2) ... Setting up vim (2:8.1.2269-1ubuntu5) ... update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vim (vim) in auto mode update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vimdiff (vimdiff) in auto mode update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/rvim (rvim) in auto mode update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/rview (rview) in auto mode update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vi (vi) in auto mode update-alternatives: warning: skip creation of /usr/share/man/da/man1/vi.1.gz because associated file /usr/share/man/da/man1/vim.1.gz (of link group vi) doesn't exist update-alternatives: warning: skip creation of /usr/share/man/de/man1/vi.1.gz because associated file /usr/share/man/de/man1/vim.1.gz (of link group vi) doesn't exist update-alternatives: warning: skip creation of /usr/share/man/fr/man1/vi.1.gz because associated file /usr/share/man/fr/man1/vim.1.gz (of link group vi) doesn't exist update-alternatives: warning: skip creation of /usr/share/man/it/man1/vi.1.gz because associated file /usr/share/man/it/man1/vim.1.gz (of link group vi) doesn't exist update-alternatives: warning: skip creation of /usr/share/man/ja/man1/vi.1.gz because associated file /usr/share/man/ja/man1/vim.1.gz (of link group vi) doesn't exist update-alternatives: warning: skip creation of /usr/share/man/pl/man1/vi.1.gz because associated file /usr/share/man/pl/man1/vim.1.gz (of link group vi) doesn't exist update-alternatives: warning: skip creation of /usr/share/man/ru/man1/vi.1.gz because associated file /usr/share/man/ru/man1/vim.1.gz (of link group vi) doesn't exist update-alternatives: warning: skip creation of /usr/share/man/man1/vi.1.gz because associated file /usr/share/man/man1/vim.1.gz (of link group vi) doesn't exist update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/view (view) in auto mode update-alternatives: warning: skip creation of /usr/share/man/da/man1/view.1.gz because associated file /usr/share/man/da/man1/vim.1.gz (of link group view) doesn't exist update-alternatives: warning: skip creation of /usr/share/man/de/man1/view.1.gz because associated file /usr/share/man/de/man1/vim.1.gz (of link group view) doesn't exist update-alternatives: warning: skip creation of /usr/share/man/fr/man1/view.1.gz because associated file /usr/share/man/fr/man1/vim.1.gz (of link group view) doesn't exist update-alternatives: warning: skip creation of /usr/share/man/it/man1/view.1.gz because associated file /usr/share/man/it/man1/vim.1.gz (of link group view) doesn't exist update-alternatives: warning: skip creation of /usr/share/man/ja/man1/view.1.gz because associated file /usr/share/man/ja/man1/vim.1.gz (of link group view) doesn't exist update-alternatives: warning: skip creation of /usr/share/man/pl/man1/view.1.gz because associated file /usr/share/man/pl/man1/vim.1.gz (of link group view) doesn't exist update-alternatives: warning: skip creation of /usr/share/man/ru/man1/view.1.gz because associated file /usr/share/man/ru/man1/vim.1.gz (of link group view) doesn't exist update-alternatives: warning: skip creation of /usr/share/man/man1/view.1.gz because associated file /usr/share/man/man1/vim.1.gz (of link group view) doesn't exist update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/ex (ex) in auto mode update-alternatives: warning: skip creation of /usr/share/man/da/man1/ex.1.gz because associated file /usr/share/man/da/man1/vim.1.gz (of link group ex) doesn't exist update-alternatives: warning: skip creation of /usr/share/man/de/man1/ex.1.gz because associated file /usr/share/man/de/man1/vim.1.gz (of link group ex) doesn't exist update-alternatives: warning: skip creation of /usr/share/man/fr/man1/ex.1.gz because associated file /usr/share/man/fr/man1/vim.1.gz (of link group ex) doesn't exist update-alternatives: warning: skip creation of /usr/share/man/it/man1/ex.1.gz because associated file /usr/share/man/it/man1/vim.1.gz (of link group ex) doesn't exist update-alternatives: warning: skip creation of /usr/share/man/ja/man1/ex.1.gz because associated file /usr/share/man/ja/man1/vim.1.gz (of link group ex) doesn't exist update-alternatives: warning: skip creation of /usr/share/man/pl/man1/ex.1.gz because associated file /usr/share/man/pl/man1/vim.1.gz (of link group ex) doesn't exist update-alternatives: warning: skip creation of /usr/share/man/ru/man1/ex.1.gz because associated file /usr/share/man/ru/man1/vim.1.gz (of link group ex) doesn't exist update-alternatives: warning: skip creation of /usr/share/man/man1/ex.1.gz because associated file /usr/share/man/man1/vim.1.gz (of link group ex) doesn't exist update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/editor (editor) in auto mode update-alternatives: warning: skip creation of /usr/share/man/da/man1/editor.1.gz because associated file /usr/share/man/da/man1/vim.1.gz (of link group editor) doesn't exist update-alternatives: warning: skip creation of /usr/share/man/de/man1/editor.1.gz because associated file /usr/share/man/de/man1/vim.1.gz (of link group editor) doesn't exist update-alternatives: warning: skip creation of /usr/share/man/fr/man1/editor.1.gz because associated file /usr/share/man/fr/man1/vim.1.gz (of link group editor) doesn't exist update-alternatives: warning: skip creation of /usr/share/man/it/man1/editor.1.gz because associated file /usr/share/man/it/man1/vim.1.gz (of link group editor) doesn't exist update-alternatives: warning: skip creation of /usr/share/man/ja/man1/editor.1.gz because associated file /usr/share/man/ja/man1/vim.1.gz (of link group editor) doesn't exist update-alternatives: warning: skip creation of /usr/share/man/pl/man1/editor.1.gz because associated file /usr/share/man/pl/man1/vim.1.gz (of link group editor) doesn't exist update-alternatives: warning: skip creation of /usr/share/man/ru/man1/editor.1.gz because associated file /usr/share/man/ru/man1/vim.1.gz (of link group editor) doesn't exist update-alternatives: warning: skip creation of /usr/share/man/man1/editor.1.gz because associated file /usr/share/man/man1/vim.1.gz (of link group editor) doesn't exist Processing triggers for libc-bin (2.31-0ubuntu9.1) ... #+end_example This should not work on my ~Manjaro~. =apt-get= is not a thing here. Well, the output is a little bit all over the place but we seem to have installed vim. * Building a container image Now that we saw what an /image/ is and what a /container/ is. We can explore a bit inside a container to see it more clearly. So, what can we do with containers. We can use the layering system and the /docker/ created tooling to create them and distribute them. Let's go back to our =neofetch= example. I want to get an ~Ubuntu~ image, then install =neofetch= on it. First step, create a ~Dockerfile~ in your current directory. It should look like this. #+BEGIN_SRC dockerfile :tangle Dockerfile.ubuntu FROM ubuntu:20.04 RUN apt-get update && \ apt-get install -y neofetch #+END_SRC This file has 2 commands: - =FROM= :: Designates the base image to use. This is the base image we will be building upon. In our case, we chose ~Ubuntu:20.04~. You can find the images on multiple platforms. To mention a few, we have /Dockerhub/, /Quay.io/ and a few others. By default, this downloads from /Dockerhub/. - =RUN= :: Designates the commands to run. Pretty simple. We are running a couple of commands that should be very familiar to any /debian-base/ OS user. Now that we have a /Dockerfile/, it has to be named specifically that, =case-sensitive=. We can build the container. #+BEGIN_SRC bash :dir (concat "/sudo::" (expand-file-name ".")) :results output podman build -t presentation:20.04 . #+END_SRC #+RESULTS: #+begin_example STEP 1: FROM ubuntu:20.04 STEP 2: RUN apt-get update && apt-get install -y neofetch Get:1 http://security.ubuntu.com/ubuntu focal-security InRelease [107 kB] Get:2 http://archive.ubuntu.com/ubuntu focal InRelease [265 kB] Get:3 http://security.ubuntu.com/ubuntu focal-security/restricted amd64 Packages [75.9 kB] Get:4 http://archive.ubuntu.com/ubuntu focal-updates InRelease [111 kB] Get:5 http://archive.ubuntu.com/ubuntu focal-backports InRelease [98.3 kB] Get:6 http://security.ubuntu.com/ubuntu focal-security/universe amd64 Packages [112 kB] Get:7 http://security.ubuntu.com/ubuntu focal-security/multiverse amd64 Packages [1169 B] Get:8 http://security.ubuntu.com/ubuntu focal-security/main amd64 Packages [367 kB] Get:9 http://archive.ubuntu.com/ubuntu focal/multiverse amd64 Packages [177 kB] Get:10 http://archive.ubuntu.com/ubuntu focal/main amd64 Packages [1275 kB] Get:11 http://archive.ubuntu.com/ubuntu focal/universe amd64 Packages [11.3 MB] Get:12 http://archive.ubuntu.com/ubuntu focal/restricted amd64 Packages [33.4 kB] Get:13 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages [703 kB] Get:14 http://archive.ubuntu.com/ubuntu focal-updates/multiverse amd64 Packages [21.6 kB] Get:15 http://archive.ubuntu.com/ubuntu focal-updates/restricted amd64 Packages [88.7 kB] Get:16 http://archive.ubuntu.com/ubuntu focal-updates/universe amd64 Packages [303 kB] Get:17 http://archive.ubuntu.com/ubuntu focal-backports/universe amd64 Packages [4277 B] Fetched 15.1 MB in 2s (8964 kB/s) Reading package lists... Reading package lists... Building dependency tree... Reading state information... The following additional packages will be installed: chafa dbus fontconfig-config fonts-dejavu-core fonts-droid-fallback fonts-noto-mono fonts-urw-base35 ghostscript gsfonts imagemagick-6-common krb5-locales libapparmor1 libavahi-client3 libavahi-common-data libavahi-common3 libbsd0 libchafa0 libcups2 libdbus-1-3 libexpat1 libfftw3-double3 libfontconfig1 libfreetype6 libglib2.0-0 libglib2.0-data libgomp1 libgs9 libgs9-common libgssapi-krb5-2 libicu66 libidn11 libijs-0.35 libjbig0 libjbig2dec0 libjpeg-turbo8 libjpeg8 libk5crypto3 libkeyutils1 libkrb5-3 libkrb5support0 liblcms2-2 liblqr-1-0 libltdl7 libmagickcore-6.q16-6 libmagickwand-6.q16-6 libopenjp2-7 libpaper-utils libpaper1 libpng16-16 libssl1.1 libtiff5 libwebp6 libwebpmux3 libx11-6 libx11-data libxau6 libxcb1 libxdmcp6 libxext6 libxml2 poppler-data shared-mime-info tzdata ucf xdg-user-dirs Suggested packages: default-dbus-session-bus | dbus-session-bus fonts-noto fonts-freefont-otf | fonts-freefont-ttf fonts-texgyre ghostscript-x cups-common libfftw3-bin libfftw3-dev krb5-doc krb5-user liblcms2-utils libmagickcore-6.q16-6-extra poppler-utils fonts-japanese-mincho | fonts-ipafont-mincho fonts-japanese-gothic | fonts-ipafont-gothic fonts-arphic-ukai fonts-arphic-uming fonts-nanum The following NEW packages will be installed: chafa dbus fontconfig-config fonts-dejavu-core fonts-droid-fallback fonts-noto-mono fonts-urw-base35 ghostscript gsfonts imagemagick-6-common krb5-locales libapparmor1 libavahi-client3 libavahi-common-data libavahi-common3 libbsd0 libchafa0 libcups2 libdbus-1-3 libexpat1 libfftw3-double3 libfontconfig1 libfreetype6 libglib2.0-0 libglib2.0-data libgomp1 libgs9 libgs9-common libgssapi-krb5-2 libicu66 libidn11 libijs-0.35 libjbig0 libjbig2dec0 libjpeg-turbo8 libjpeg8 libk5crypto3 libkeyutils1 libkrb5-3 libkrb5support0 liblcms2-2 liblqr-1-0 libltdl7 libmagickcore-6.q16-6 libmagickwand-6.q16-6 libopenjp2-7 libpaper-utils libpaper1 libpng16-16 libssl1.1 libtiff5 libwebp6 libwebpmux3 libx11-6 libx11-data libxau6 libxcb1 libxdmcp6 libxext6 libxml2 neofetch poppler-data shared-mime-info tzdata ucf xdg-user-dirs 0 upgraded, 66 newly installed, 0 to remove and 0 not upgraded. Need to get 36.1 MB of archives. After this operation, 136 MB of additional disk space will be used. Get:1 http://archive.ubuntu.com/ubuntu focal/main amd64 fonts-droid-fallback all 1:6.0.1r16-1.1 [1805 kB] Get:2 http://archive.ubuntu.com/ubuntu focal/main amd64 libgomp1 amd64 10-20200411-0ubuntu1 [101 kB] Get:3 http://archive.ubuntu.com/ubuntu focal/main amd64 libfftw3-double3 amd64 3.3.8-2ubuntu1 [728 kB] Get:4 http://archive.ubuntu.com/ubuntu focal/main amd64 libexpat1 amd64 2.2.9-1build1 [73.3 kB] Get:5 http://archive.ubuntu.com/ubuntu focal/main amd64 libpng16-16 amd64 1.6.37-2 [179 kB] Get:6 http://archive.ubuntu.com/ubuntu focal/main amd64 libfreetype6 amd64 2.10.1-2 [341 kB] Get:7 http://archive.ubuntu.com/ubuntu focal/main amd64 ucf all 3.0038+nmu1 [51.6 kB] Get:8 http://archive.ubuntu.com/ubuntu focal/main amd64 fonts-dejavu-core all 2.37-1 [1041 kB] Get:9 http://archive.ubuntu.com/ubuntu focal/main amd64 fontconfig-config all 2.13.1-2ubuntu3 [28.8 kB] Get:10 http://archive.ubuntu.com/ubuntu focal/main amd64 libfontconfig1 amd64 2.13.1-2ubuntu3 [114 kB] Get:11 http://archive.ubuntu.com/ubuntu focal/main amd64 libjbig0 amd64 2.1-3.1build1 [26.7 kB] Get:12 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libjpeg-turbo8 amd64 2.0.3-0ubuntu1.20.04.1 [117 kB] Get:13 http://archive.ubuntu.com/ubuntu focal/main amd64 libjpeg8 amd64 8c-2ubuntu8 [2194 B] Get:14 http://archive.ubuntu.com/ubuntu focal/main amd64 liblcms2-2 amd64 2.9-4 [140 kB] Get:15 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libglib2.0-0 amd64 2.64.3-1~ubuntu20.04.1 [1284 kB] Get:16 http://archive.ubuntu.com/ubuntu focal/universe amd64 liblqr-1-0 amd64 0.4.2-2.1 [27.7 kB] Get:17 http://archive.ubuntu.com/ubuntu focal/main amd64 libltdl7 amd64 2.4.6-14 [38.5 kB] Get:18 http://archive.ubuntu.com/ubuntu focal/main amd64 libwebp6 amd64 0.6.1-2 [185 kB] Get:19 http://archive.ubuntu.com/ubuntu focal/main amd64 libtiff5 amd64 4.1.0+git191117-2build1 [161 kB] Get:20 http://archive.ubuntu.com/ubuntu focal/main amd64 libwebpmux3 amd64 0.6.1-2 [19.6 kB] Get:21 http://archive.ubuntu.com/ubuntu focal/main amd64 libxau6 amd64 1:1.0.9-0ubuntu1 [7488 B] Get:22 http://archive.ubuntu.com/ubuntu focal/main amd64 libbsd0 amd64 0.10.0-1 [45.4 kB] Get:23 http://archive.ubuntu.com/ubuntu focal/main amd64 libxdmcp6 amd64 1:1.1.3-0ubuntu1 [10.6 kB] Get:24 http://archive.ubuntu.com/ubuntu focal/main amd64 libxcb1 amd64 1.14-2 [44.7 kB] Get:25 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libx11-data all 2:1.6.9-2ubuntu1.1 [113 kB] Get:26 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libx11-6 amd64 2:1.6.9-2ubuntu1.1 [574 kB] Get:27 http://archive.ubuntu.com/ubuntu focal/main amd64 libxext6 amd64 2:1.3.4-0ubuntu1 [29.1 kB] Get:28 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 tzdata all 2020a-0ubuntu0.20.04 [293 kB] Get:29 http://archive.ubuntu.com/ubuntu focal/main amd64 libicu66 amd64 66.1-2ubuntu2 [8520 kB] Get:30 http://archive.ubuntu.com/ubuntu focal/main amd64 libxml2 amd64 2.9.10+dfsg-5 [640 kB] Get:31 http://archive.ubuntu.com/ubuntu focal-updates/universe amd64 imagemagick-6-common all 8:6.9.10.23+dfsg-2.1ubuntu11.1 [60.9 kB] Get:32 http://archive.ubuntu.com/ubuntu focal-updates/universe amd64 libmagickcore-6.q16-6 amd64 8:6.9.10.23+dfsg-2.1ubuntu11.1 [1644 kB] Get:33 http://archive.ubuntu.com/ubuntu focal-updates/universe amd64 libmagickwand-6.q16-6 amd64 8:6.9.10.23+dfsg-2.1ubuntu11.1 [302 kB] Get:34 http://archive.ubuntu.com/ubuntu focal/main amd64 poppler-data all 0.4.9-2 [1475 kB] Get:35 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libapparmor1 amd64 2.13.3-7ubuntu5.1 [34.1 kB] Get:36 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libdbus-1-3 amd64 1.12.16-2ubuntu2.1 [179 kB] Get:37 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 dbus amd64 1.12.16-2ubuntu2.1 [151 kB] Get:38 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libglib2.0-data all 2.64.3-1~ubuntu20.04.1 [5752 B] Get:39 http://archive.ubuntu.com/ubuntu focal/main amd64 libssl1.1 amd64 1.1.1f-1ubuntu2 [1318 kB] Get:40 http://archive.ubuntu.com/ubuntu focal/main amd64 shared-mime-info amd64 1.15-1 [430 kB] Get:41 http://archive.ubuntu.com/ubuntu focal/main amd64 xdg-user-dirs amd64 0.17-2ubuntu1 [48.3 kB] Get:42 http://archive.ubuntu.com/ubuntu focal/main amd64 krb5-locales all 1.17-6ubuntu4 [11.4 kB] Get:43 http://archive.ubuntu.com/ubuntu focal/main amd64 libkrb5support0 amd64 1.17-6ubuntu4 [30.9 kB] Get:44 http://archive.ubuntu.com/ubuntu focal/main amd64 libk5crypto3 amd64 1.17-6ubuntu4 [80.2 kB] Get:45 http://archive.ubuntu.com/ubuntu focal/main amd64 libkeyutils1 amd64 1.6-6ubuntu1 [10.2 kB] Get:46 http://archive.ubuntu.com/ubuntu focal/main amd64 libkrb5-3 amd64 1.17-6ubuntu4 [330 kB] Get:47 http://archive.ubuntu.com/ubuntu focal/main amd64 libgssapi-krb5-2 amd64 1.17-6ubuntu4 [121 kB] Get:48 http://archive.ubuntu.com/ubuntu focal/universe amd64 libchafa0 amd64 1.2.1-1 [42.1 kB] Get:49 http://archive.ubuntu.com/ubuntu focal/universe amd64 chafa amd64 1.2.1-1 [29.7 kB] Get:50 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 fonts-noto-mono all 20200323-1build1~ubuntu20.04.1 [80.6 kB] Get:51 http://archive.ubuntu.com/ubuntu focal/main amd64 fonts-urw-base35 all 20170801.1-3 [6333 kB] Get:52 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libgs9-common all 9.50~dfsg-5ubuntu4.2 [681 kB] Get:53 http://archive.ubuntu.com/ubuntu focal/main amd64 libavahi-common-data amd64 0.7-4ubuntu7 [21.4 kB] Get:54 http://archive.ubuntu.com/ubuntu focal/main amd64 libavahi-common3 amd64 0.7-4ubuntu7 [21.7 kB] Get:55 http://archive.ubuntu.com/ubuntu focal/main amd64 libavahi-client3 amd64 0.7-4ubuntu7 [25.5 kB] Get:56 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libcups2 amd64 2.3.1-9ubuntu1.1 [233 kB] Get:57 http://archive.ubuntu.com/ubuntu focal/main amd64 libidn11 amd64 1.33-2.2ubuntu2 [46.2 kB] Get:58 http://archive.ubuntu.com/ubuntu focal/main amd64 libijs-0.35 amd64 0.35-15 [15.7 kB] Get:59 http://archive.ubuntu.com/ubuntu focal/main amd64 libjbig2dec0 amd64 0.18-1ubuntu1 [60.0 kB] Get:60 http://archive.ubuntu.com/ubuntu focal/main amd64 libopenjp2-7 amd64 2.3.1-1ubuntu4 [141 kB] Get:61 http://archive.ubuntu.com/ubuntu focal/main amd64 libpaper1 amd64 1.1.28 [13.0 kB] Get:62 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libgs9 amd64 9.50~dfsg-5ubuntu4.2 [2172 kB] Get:63 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 ghostscript amd64 9.50~dfsg-5ubuntu4.2 [51.6 kB] Get:64 http://archive.ubuntu.com/ubuntu focal/universe amd64 gsfonts all 1:8.11+urwcyr1.0.7~pre44-4.4 [3120 kB] Get:65 http://archive.ubuntu.com/ubuntu focal/main amd64 libpaper-utils amd64 1.1.28 [8400 B] Get:66 http://archive.ubuntu.com/ubuntu focal/universe amd64 neofetch all 7.0.0-1 [77.5 kB] Fetched 36.1 MB in 2s (19.1 MB/s) Selecting previously unselected package fonts-droid-fallback. (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 4121 files and directories currently installed.) Preparing to unpack .../00-fonts-droid-fallback_1%3a6.0.1r16-1.1_all.deb ... Unpacking fonts-droid-fallback (1:6.0.1r16-1.1) ... Selecting previously unselected package libgomp1:amd64. Preparing to unpack .../01-libgomp1_10-20200411-0ubuntu1_amd64.deb ... Unpacking libgomp1:amd64 (10-20200411-0ubuntu1) ... Selecting previously unselected package libfftw3-double3:amd64. Preparing to unpack .../02-libfftw3-double3_3.3.8-2ubuntu1_amd64.deb ... Unpacking libfftw3-double3:amd64 (3.3.8-2ubuntu1) ... Selecting previously unselected package libexpat1:amd64. Preparing to unpack .../03-libexpat1_2.2.9-1build1_amd64.deb ... Unpacking libexpat1:amd64 (2.2.9-1build1) ... Selecting previously unselected package libpng16-16:amd64. Preparing to unpack .../04-libpng16-16_1.6.37-2_amd64.deb ... Unpacking libpng16-16:amd64 (1.6.37-2) ... Selecting previously unselected package libfreetype6:amd64. Preparing to unpack .../05-libfreetype6_2.10.1-2_amd64.deb ... Unpacking libfreetype6:amd64 (2.10.1-2) ... Selecting previously unselected package ucf. Preparing to unpack .../06-ucf_3.0038+nmu1_all.deb ... Moving old data out of the way Unpacking ucf (3.0038+nmu1) ... Selecting previously unselected package fonts-dejavu-core. Preparing to unpack .../07-fonts-dejavu-core_2.37-1_all.deb ... Unpacking fonts-dejavu-core (2.37-1) ... Selecting previously unselected package fontconfig-config. Preparing to unpack .../08-fontconfig-config_2.13.1-2ubuntu3_all.deb ... Unpacking fontconfig-config (2.13.1-2ubuntu3) ... Selecting previously unselected package libfontconfig1:amd64. Preparing to unpack .../09-libfontconfig1_2.13.1-2ubuntu3_amd64.deb ... Unpacking libfontconfig1:amd64 (2.13.1-2ubuntu3) ... Selecting previously unselected package libjbig0:amd64. Preparing to unpack .../10-libjbig0_2.1-3.1build1_amd64.deb ... Unpacking libjbig0:amd64 (2.1-3.1build1) ... Selecting previously unselected package libjpeg-turbo8:amd64. Preparing to unpack .../11-libjpeg-turbo8_2.0.3-0ubuntu1.20.04.1_amd64.deb ... Unpacking libjpeg-turbo8:amd64 (2.0.3-0ubuntu1.20.04.1) ... Selecting previously unselected package libjpeg8:amd64. Preparing to unpack .../12-libjpeg8_8c-2ubuntu8_amd64.deb ... Unpacking libjpeg8:amd64 (8c-2ubuntu8) ... Selecting previously unselected package liblcms2-2:amd64. Preparing to unpack .../13-liblcms2-2_2.9-4_amd64.deb ... Unpacking liblcms2-2:amd64 (2.9-4) ... Selecting previously unselected package libglib2.0-0:amd64. Preparing to unpack .../14-libglib2.0-0_2.64.3-1~ubuntu20.04.1_amd64.deb ... Unpacking libglib2.0-0:amd64 (2.64.3-1~ubuntu20.04.1) ... Selecting previously unselected package liblqr-1-0:amd64. Preparing to unpack .../15-liblqr-1-0_0.4.2-2.1_amd64.deb ... Unpacking liblqr-1-0:amd64 (0.4.2-2.1) ... Selecting previously unselected package libltdl7:amd64. Preparing to unpack .../16-libltdl7_2.4.6-14_amd64.deb ... Unpacking libltdl7:amd64 (2.4.6-14) ... Selecting previously unselected package libwebp6:amd64. Preparing to unpack .../17-libwebp6_0.6.1-2_amd64.deb ... Unpacking libwebp6:amd64 (0.6.1-2) ... Selecting previously unselected package libtiff5:amd64. Preparing to unpack .../18-libtiff5_4.1.0+git191117-2build1_amd64.deb ... Unpacking libtiff5:amd64 (4.1.0+git191117-2build1) ... Selecting previously unselected package libwebpmux3:amd64. Preparing to unpack .../19-libwebpmux3_0.6.1-2_amd64.deb ... Unpacking libwebpmux3:amd64 (0.6.1-2) ... Selecting previously unselected package libxau6:amd64. Preparing to unpack .../20-libxau6_1%3a1.0.9-0ubuntu1_amd64.deb ... Unpacking libxau6:amd64 (1:1.0.9-0ubuntu1) ... Selecting previously unselected package libbsd0:amd64. Preparing to unpack .../21-libbsd0_0.10.0-1_amd64.deb ... Unpacking libbsd0:amd64 (0.10.0-1) ... Selecting previously unselected package libxdmcp6:amd64. Preparing to unpack .../22-libxdmcp6_1%3a1.1.3-0ubuntu1_amd64.deb ... Unpacking libxdmcp6:amd64 (1:1.1.3-0ubuntu1) ... Selecting previously unselected package libxcb1:amd64. Preparing to unpack .../23-libxcb1_1.14-2_amd64.deb ... Unpacking libxcb1:amd64 (1.14-2) ... Selecting previously unselected package libx11-data. Preparing to unpack .../24-libx11-data_2%3a1.6.9-2ubuntu1.1_all.deb ... Unpacking libx11-data (2:1.6.9-2ubuntu1.1) ... Selecting previously unselected package libx11-6:amd64. Preparing to unpack .../25-libx11-6_2%3a1.6.9-2ubuntu1.1_amd64.deb ... Unpacking libx11-6:amd64 (2:1.6.9-2ubuntu1.1) ... Selecting previously unselected package libxext6:amd64. Preparing to unpack .../26-libxext6_2%3a1.3.4-0ubuntu1_amd64.deb ... Unpacking libxext6:amd64 (2:1.3.4-0ubuntu1) ... Selecting previously unselected package tzdata. Preparing to unpack .../27-tzdata_2020a-0ubuntu0.20.04_all.deb ... Unpacking tzdata (2020a-0ubuntu0.20.04) ... Selecting previously unselected package libicu66:amd64. Preparing to unpack .../28-libicu66_66.1-2ubuntu2_amd64.deb ... Unpacking libicu66:amd64 (66.1-2ubuntu2) ... Selecting previously unselected package libxml2:amd64. Preparing to unpack .../29-libxml2_2.9.10+dfsg-5_amd64.deb ... Unpacking libxml2:amd64 (2.9.10+dfsg-5) ... Selecting previously unselected package imagemagick-6-common. Preparing to unpack .../30-imagemagick-6-common_8%3a6.9.10.23+dfsg-2.1ubuntu11.1_all.deb ... Unpacking imagemagick-6-common (8:6.9.10.23+dfsg-2.1ubuntu11.1) ... Selecting previously unselected package libmagickcore-6.q16-6:amd64. Preparing to unpack .../31-libmagickcore-6.q16-6_8%3a6.9.10.23+dfsg-2.1ubuntu11.1_amd64.deb ... Unpacking libmagickcore-6.q16-6:amd64 (8:6.9.10.23+dfsg-2.1ubuntu11.1) ... Selecting previously unselected package libmagickwand-6.q16-6:amd64. Preparing to unpack .../32-libmagickwand-6.q16-6_8%3a6.9.10.23+dfsg-2.1ubuntu11.1_amd64.deb ... Unpacking libmagickwand-6.q16-6:amd64 (8:6.9.10.23+dfsg-2.1ubuntu11.1) ... Selecting previously unselected package poppler-data. Preparing to unpack .../33-poppler-data_0.4.9-2_all.deb ... Unpacking poppler-data (0.4.9-2) ... Selecting previously unselected package libapparmor1:amd64. Preparing to unpack .../34-libapparmor1_2.13.3-7ubuntu5.1_amd64.deb ... Unpacking libapparmor1:amd64 (2.13.3-7ubuntu5.1) ... Selecting previously unselected package libdbus-1-3:amd64. Preparing to unpack .../35-libdbus-1-3_1.12.16-2ubuntu2.1_amd64.deb ... Unpacking libdbus-1-3:amd64 (1.12.16-2ubuntu2.1) ... Selecting previously unselected package dbus. Preparing to unpack .../36-dbus_1.12.16-2ubuntu2.1_amd64.deb ... Unpacking dbus (1.12.16-2ubuntu2.1) ... Selecting previously unselected package libglib2.0-data. Preparing to unpack .../37-libglib2.0-data_2.64.3-1~ubuntu20.04.1_all.deb ... Unpacking libglib2.0-data (2.64.3-1~ubuntu20.04.1) ... Selecting previously unselected package libssl1.1:amd64. Preparing to unpack .../38-libssl1.1_1.1.1f-1ubuntu2_amd64.deb ... Unpacking libssl1.1:amd64 (1.1.1f-1ubuntu2) ... Selecting previously unselected package shared-mime-info. Preparing to unpack .../39-shared-mime-info_1.15-1_amd64.deb ... Unpacking shared-mime-info (1.15-1) ... Selecting previously unselected package xdg-user-dirs. Preparing to unpack .../40-xdg-user-dirs_0.17-2ubuntu1_amd64.deb ... Unpacking xdg-user-dirs (0.17-2ubuntu1) ... Selecting previously unselected package krb5-locales. Preparing to unpack .../41-krb5-locales_1.17-6ubuntu4_all.deb ... Unpacking krb5-locales (1.17-6ubuntu4) ... Selecting previously unselected package libkrb5support0:amd64. Preparing to unpack .../42-libkrb5support0_1.17-6ubuntu4_amd64.deb ... Unpacking libkrb5support0:amd64 (1.17-6ubuntu4) ... Selecting previously unselected package libk5crypto3:amd64. Preparing to unpack .../43-libk5crypto3_1.17-6ubuntu4_amd64.deb ... Unpacking libk5crypto3:amd64 (1.17-6ubuntu4) ... Selecting previously unselected package libkeyutils1:amd64. Preparing to unpack .../44-libkeyutils1_1.6-6ubuntu1_amd64.deb ... Unpacking libkeyutils1:amd64 (1.6-6ubuntu1) ... Selecting previously unselected package libkrb5-3:amd64. Preparing to unpack .../45-libkrb5-3_1.17-6ubuntu4_amd64.deb ... Unpacking libkrb5-3:amd64 (1.17-6ubuntu4) ... Selecting previously unselected package libgssapi-krb5-2:amd64. Preparing to unpack .../46-libgssapi-krb5-2_1.17-6ubuntu4_amd64.deb ... Unpacking libgssapi-krb5-2:amd64 (1.17-6ubuntu4) ... Selecting previously unselected package libchafa0:amd64. Preparing to unpack .../47-libchafa0_1.2.1-1_amd64.deb ... Unpacking libchafa0:amd64 (1.2.1-1) ... Selecting previously unselected package chafa. Preparing to unpack .../48-chafa_1.2.1-1_amd64.deb ... Unpacking chafa (1.2.1-1) ... Selecting previously unselected package fonts-noto-mono. Preparing to unpack .../49-fonts-noto-mono_20200323-1build1~ubuntu20.04.1_all.deb ... Unpacking fonts-noto-mono (20200323-1build1~ubuntu20.04.1) ... Selecting previously unselected package fonts-urw-base35. Preparing to unpack .../50-fonts-urw-base35_20170801.1-3_all.deb ... Unpacking fonts-urw-base35 (20170801.1-3) ... Selecting previously unselected package libgs9-common. Preparing to unpack .../51-libgs9-common_9.50~dfsg-5ubuntu4.2_all.deb ... Unpacking libgs9-common (9.50~dfsg-5ubuntu4.2) ... Selecting previously unselected package libavahi-common-data:amd64. Preparing to unpack .../52-libavahi-common-data_0.7-4ubuntu7_amd64.deb ... Unpacking libavahi-common-data:amd64 (0.7-4ubuntu7) ... Selecting previously unselected package libavahi-common3:amd64. Preparing to unpack .../53-libavahi-common3_0.7-4ubuntu7_amd64.deb ... Unpacking libavahi-common3:amd64 (0.7-4ubuntu7) ... Selecting previously unselected package libavahi-client3:amd64. Preparing to unpack .../54-libavahi-client3_0.7-4ubuntu7_amd64.deb ... Unpacking libavahi-client3:amd64 (0.7-4ubuntu7) ... Selecting previously unselected package libcups2:amd64. Preparing to unpack .../55-libcups2_2.3.1-9ubuntu1.1_amd64.deb ... Unpacking libcups2:amd64 (2.3.1-9ubuntu1.1) ... Selecting previously unselected package libidn11:amd64. Preparing to unpack .../56-libidn11_1.33-2.2ubuntu2_amd64.deb ... Unpacking libidn11:amd64 (1.33-2.2ubuntu2) ... Selecting previously unselected package libijs-0.35:amd64. Preparing to unpack .../57-libijs-0.35_0.35-15_amd64.deb ... Unpacking libijs-0.35:amd64 (0.35-15) ... Selecting previously unselected package libjbig2dec0:amd64. Preparing to unpack .../58-libjbig2dec0_0.18-1ubuntu1_amd64.deb ... Unpacking libjbig2dec0:amd64 (0.18-1ubuntu1) ... Selecting previously unselected package libopenjp2-7:amd64. Preparing to unpack .../59-libopenjp2-7_2.3.1-1ubuntu4_amd64.deb ... Unpacking libopenjp2-7:amd64 (2.3.1-1ubuntu4) ... Selecting previously unselected package libpaper1:amd64. Preparing to unpack .../60-libpaper1_1.1.28_amd64.deb ... Unpacking libpaper1:amd64 (1.1.28) ... Selecting previously unselected package libgs9:amd64. Preparing to unpack .../61-libgs9_9.50~dfsg-5ubuntu4.2_amd64.deb ... Unpacking libgs9:amd64 (9.50~dfsg-5ubuntu4.2) ... Selecting previously unselected package ghostscript. Preparing to unpack .../62-ghostscript_9.50~dfsg-5ubuntu4.2_amd64.deb ... Unpacking ghostscript (9.50~dfsg-5ubuntu4.2) ... Selecting previously unselected package gsfonts. Preparing to unpack .../63-gsfonts_1%3a8.11+urwcyr1.0.7~pre44-4.4_all.deb ... Unpacking gsfonts (1:8.11+urwcyr1.0.7~pre44-4.4) ... Selecting previously unselected package libpaper-utils. Preparing to unpack .../64-libpaper-utils_1.1.28_amd64.deb ... Unpacking libpaper-utils (1.1.28) ... Selecting previously unselected package neofetch. Preparing to unpack .../65-neofetch_7.0.0-1_all.deb ... Unpacking neofetch (7.0.0-1) ... Setting up libexpat1:amd64 (2.2.9-1build1) ... Setting up liblcms2-2:amd64 (2.9-4) ... Setting up libxau6:amd64 (1:1.0.9-0ubuntu1) ... Setting up imagemagick-6-common (8:6.9.10.23+dfsg-2.1ubuntu11.1) ... Setting up libkeyutils1:amd64 (1.6-6ubuntu1) ... Setting up libapparmor1:amd64 (2.13.3-7ubuntu5.1) ... Setting up fonts-noto-mono (20200323-1build1~ubuntu20.04.1) ... Setting up xdg-user-dirs (0.17-2ubuntu1) ... Setting up libglib2.0-0:amd64 (2.64.3-1~ubuntu20.04.1) ... No schema files found: doing nothing. Setting up libssl1.1:amd64 (1.1.1f-1ubuntu2) ... debconf: unable to initialize frontend: Dialog debconf: (No usable dialog-like program is installed, so the dialog based frontend cannot be used. at /usr/share/perl5/Debconf/FrontEnd/Dialog.pm line 76.) debconf: falling back to frontend: Readline debconf: unable to initialize frontend: Readline debconf: (Can't locate Term/ReadLine.pm in @INC (you may need to install the Term::ReadLine module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.30.0 /usr/local/share/perl/5.30.0 /usr/lib/x86_64-linux-gnu/perl5/5.30 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.30 /usr/share/perl/5.30 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base) at /usr/share/perl5/Debconf/FrontEnd/Readline.pm line 7.) debconf: falling back to frontend: Teletype Setting up libijs-0.35:amd64 (0.35-15) ... Setting up krb5-locales (1.17-6ubuntu4) ... Setting up fonts-urw-base35 (20170801.1-3) ... Setting up libgomp1:amd64 (10-20200411-0ubuntu1) ... Setting up libjbig0:amd64 (2.1-3.1build1) ... Setting up neofetch (7.0.0-1) ... Setting up poppler-data (0.4.9-2) ... Setting up libkrb5support0:amd64 (1.17-6ubuntu4) ... Setting up libchafa0:amd64 (1.2.1-1) ... Setting up tzdata (2020a-0ubuntu0.20.04) ... debconf: unable to initialize frontend: Dialog debconf: (No usable dialog-like program is installed, so the dialog based frontend cannot be used. at /usr/share/perl5/Debconf/FrontEnd/Dialog.pm line 76.) debconf: falling back to frontend: Readline debconf: unable to initialize frontend: Readline debconf: (Can't locate Term/ReadLine.pm in @INC (you may need to install the Term::ReadLine module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.30.0 /usr/local/share/perl/5.30.0 /usr/lib/x86_64-linux-gnu/perl5/5.30 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.30 /usr/share/perl/5.30 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base) at /usr/share/perl5/Debconf/FrontEnd/Readline.pm line 7.) debconf: falling back to frontend: Teletype Configuring tzdata ------------------ Please select the geographic area in which you live. Subsequent configuration questions will narrow this down by presenting a list of cities, representing the time zones in which they are located. 1. Africa 4. Australia 7. Atlantic 10. Pacific 13. Etc 2. America 5. Arctic 8. Europe 11. SystemV 3. Antarctica 6. Asia 9. Indian 12. US Geographic area: Use of uninitialized value $_[1] in join or string at /usr/share/perl5/Debconf/DbDriver/Stack.pm line 111. Current default time zone: '/UTC' Local time is now: Fri Oct 2 17:28:44 UTC 2020. Universal Time is now: Fri Oct 2 17:28:44 UTC 2020. Run 'dpkg-reconfigure tzdata' if you wish to change it. Use of uninitialized value $val in substitution (s///) at /usr/share/perl5/Debconf/Format/822.pm line 83, line 4. Use of uninitialized value $val in concatenation (.) or string at /usr/share/perl5/Debconf/Format/822.pm line 84, line 4. Setting up libglib2.0-data (2.64.3-1~ubuntu20.04.1) ... Setting up libx11-data (2:1.6.9-2ubuntu1.1) ... Setting up libjbig2dec0:amd64 (0.18-1ubuntu1) ... Setting up libidn11:amd64 (1.33-2.2ubuntu2) ... Setting up gsfonts (1:8.11+urwcyr1.0.7~pre44-4.4) ... Setting up libavahi-common-data:amd64 (0.7-4ubuntu7) ... Setting up libdbus-1-3:amd64 (1.12.16-2ubuntu2.1) ... Setting up dbus (1.12.16-2ubuntu2.1) ... Setting up libpng16-16:amd64 (1.6.37-2) ... Setting up libwebp6:amd64 (0.6.1-2) ... Setting up fonts-dejavu-core (2.37-1) ... Setting up ucf (3.0038+nmu1) ... debconf: unable to initialize frontend: Dialog debconf: (No usable dialog-like program is installed, so the dialog based frontend cannot be used. at /usr/share/perl5/Debconf/FrontEnd/Dialog.pm line 76.) debconf: falling back to frontend: Readline debconf: unable to initialize frontend: Readline debconf: (Can't locate Term/ReadLine.pm in @INC (you may need to install the Term::ReadLine module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.30.0 /usr/local/share/perl/5.30.0 /usr/lib/x86_64-linux-gnu/perl5/5.30 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.30 /usr/share/perl/5.30 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base) at /usr/share/perl5/Debconf/FrontEnd/Readline.pm line 7.) debconf: falling back to frontend: Teletype Setting up libk5crypto3:amd64 (1.17-6ubuntu4) ... Setting up libjpeg-turbo8:amd64 (2.0.3-0ubuntu1.20.04.1) ... Setting up libltdl7:amd64 (2.4.6-14) ... Setting up libfftw3-double3:amd64 (3.3.8-2ubuntu1) ... Setting up liblqr-1-0:amd64 (0.4.2-2.1) ... Setting up libopenjp2-7:amd64 (2.3.1-1ubuntu4) ... Setting up libkrb5-3:amd64 (1.17-6ubuntu4) ... Setting up fonts-droid-fallback (1:6.0.1r16-1.1) ... Setting up libwebpmux3:amd64 (0.6.1-2) ... Setting up libbsd0:amd64 (0.10.0-1) ... Setting up libjpeg8:amd64 (8c-2ubuntu8) ... Setting up libgs9-common (9.50~dfsg-5ubuntu4.2) ... Setting up libpaper1:amd64 (1.1.28) ... debconf: unable to initialize frontend: Dialog debconf: (No usable dialog-like program is installed, so the dialog based frontend cannot be used. at /usr/share/perl5/Debconf/FrontEnd/Dialog.pm line 76.) debconf: falling back to frontend: Readline debconf: unable to initialize frontend: Readline debconf: (Can't locate Term/ReadLine.pm in @INC (you may need to install the Term::ReadLine module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.30.0 /usr/local/share/perl/5.30.0 /usr/lib/x86_64-linux-gnu/perl5/5.30 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.30 /usr/share/perl/5.30 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base) at /usr/share/perl5/Debconf/FrontEnd/Readline.pm line 7.) debconf: falling back to frontend: Teletype Creating config file /etc/papersize with new version Setting up libxdmcp6:amd64 (1:1.1.3-0ubuntu1) ... Setting up libxcb1:amd64 (1.14-2) ... Setting up fontconfig-config (2.13.1-2ubuntu3) ... Setting up libicu66:amd64 (66.1-2ubuntu2) ... Setting up libavahi-common3:amd64 (0.7-4ubuntu7) ... Setting up libpaper-utils (1.1.28) ... Setting up libfreetype6:amd64 (2.10.1-2) ... Setting up libgssapi-krb5-2:amd64 (1.17-6ubuntu4) ... Setting up libx11-6:amd64 (2:1.6.9-2ubuntu1.1) ... Setting up libtiff5:amd64 (4.1.0+git191117-2build1) ... Setting up libfontconfig1:amd64 (2.13.1-2ubuntu3) ... Setting up libxml2:amd64 (2.9.10+dfsg-5) ... Setting up libavahi-client3:amd64 (0.7-4ubuntu7) ... Setting up libxext6:amd64 (2:1.3.4-0ubuntu1) ... Setting up libmagickcore-6.q16-6:amd64 (8:6.9.10.23+dfsg-2.1ubuntu11.1) ... Setting up shared-mime-info (1.15-1) ... Setting up libcups2:amd64 (2.3.1-9ubuntu1.1) ... Setting up libmagickwand-6.q16-6:amd64 (8:6.9.10.23+dfsg-2.1ubuntu11.1) ... Setting up libgs9:amd64 (9.50~dfsg-5ubuntu4.2) ... Setting up chafa (1.2.1-1) ... Setting up ghostscript (9.50~dfsg-5ubuntu4.2) ... Processing triggers for libc-bin (2.31-0ubuntu9.1) ... STEP 3: COMMIT presentation:20.04 --> 460a4869c3e 460a4869c3e5bd60cb96ec7882a099651f9c9cce76e671426a00aa48a99ff622 #+end_example _NOTE_: You might need =sudo= to run this command. As you can see, we just successfully built the container. We also got a =hash= as a name for it. If you were careful, I used the =&&= command instead of using multiple =RUN=. You *can* use as many =RUN= commands ase you like. But be careful, each one of those commands creates a *layer*. The /more/ layers you create, the /more/ time they require to *download*/*upload*. It might not seem to be a lot of time to download a few extra layer on one system. But once we mention /container orchestration/ platforms, it makes a big difference. Let's examine the build a bit more and see what we got. #+BEGIN_EXAMPLE STEP 1: FROM ubuntu:20.04 STEP 2: RUN apt-get update && apt-get install -y neofetch #+END_EXAMPLE The first step was to /download/ the base image so we could use it, then we added a *layer* which insatlled neofetch. If we list our *images*. #+BEGIN_SRC bash :dir /sudo:: :results output podman images #+END_SRC We can see that we have =localhost/presentation=. If we examine the =ID=, we can see that it is the same as the one given to us at the end of the build. * Running our container Now that we created a /brand-spanking-new/ image, we can run it. #+BEGIN_SRC bash :dir /sudo:: :results output podman images #+END_SRC #+RESULTS: : REPOSITORY TAG IMAGE ID CREATED SIZE : localhost/presentation 20.04 460a4869c3e5 9 minutes ago 237 MB : docker.io/library/ubuntu 20.04 9140108b62dc 6 days ago 75.3 MB First we list our *images*. Then we choose which one to run. #+BEGIN_SRC bash :dir /sudo:: :results output podman run -it presentation:20.04 neofetch #+END_SRC #+RESULTS: #+begin_example [?25l[?7l .-/+oossssoo+/-. `:+ssssssssssssssssss+:` -+ssssssssssssssssssyyssss+- .ossssssssssssssssssdMMMNysssso. /ssssssssssshdmmNNmmyNMMMMhssssss/ +ssssssssshmydMMMMMMMNddddyssssssss+ /sssssssshNMMMyhhyyyyhmNMMMNhssssssss/ .ssssssssdMMMNhsssssssssshNMMMdssssssss. +sssshhhyNMMNyssssssssssssyNMMMysssssss+ ossyNMMMNyMMhsssssssssssssshmmmhssssssso ossyNMMMNyMMhsssssssssssssshmmmhssssssso +sssshhhyNMMNyssssssssssssyNMMMysssssss+ .ssssssssdMMMNhsssssssssshNMMMdssssssss. /sssssssshNMMMyhhyyyyhdNMMMNhssssssss/ +sssssssssdmydMMMMMMMMddddyssssssss+ /ssssssssssshdmNNNNmyNMMMMhssssss/ .ossssssssssssssssssdMMMNysssso. -+sssssssssssssssssyyyssss+- `:+ssssssssssssssssss+:` .-/+oossssoo+/-. root@bdc3a60e7393 ----------------- OS: Ubuntu 20.04.1 LTS focal x86_64 Host: XPS 13 9350 Kernel: 5.8.6-1-MANJARO Uptime: 1 day, 5 hours, 12 mins Packages: 158 (dpkg) Shell: bash 5.0.17 Resolution: 1920x1080 CPU: Intel i7-6560U (4) @ 3.200GHz Memory: 4019MiB / 15856MiB                   [?25h[?7h #+end_example =neofetch= is installed in that container, because the *image* has it. We can also build an image based on something else, maybe ~Fedora~ ? I looked in [[https://hub.docker.com/_/fedora/][Dockerhub (Fedora)]] and found the following image. #+BEGIN_SRC dockerfile :tangle Dockerfile.fedora FROM fedora:32 RUN dnf install -y neofetch #+END_SRC * Container Orchestration Platforms Overview Final section, /buzzwords/. Who's all heard of one of these: /Kubernetes/, /Kind/, /K3s/, /Nomad/, /Cattle/, /Rancher/, /OpenShift/ or /Mesosphere/ ? These are what called /Container Orchestration/ platform. The *limitation* of a *container*, per say, is that it is limited to the /Kernel/ it is running on. But, what if you wanted to manage multiple machines and make them only run /containers/, what do you do ? For virtualization technology, there are hypervisors. For /containers/, you have /Container Orchestration/ platforms. They are, simply, a way to manage /containers/ across a /cluster/ of nodes at the same time. A way to specify *which* /container/ you want to run, and *how*. But you don't necessarily care *where*. As long as the cluster keeps a certain number of your /containers/ alive, you're good to go ! In a nutshell, that's what all of these aim to do. Manage /containers/ across more than one machine and balance across them. They deploy their own /DNS/ /containers/, their own /API/, their own everything. It is a lot more complexity on top of the system, but you are trying to do complex things. * Questions ? Any questions ?