version | codename | created | release | eol |
---|---|---|---|---|
4.10 | Warty Warthog | 2004-03-05 | 2004-10-20 | 2006-04-30 |
5.04 | Hoary Hedgehog | 2004-10-20 | 2005-04-08 | 2006-10-31 |
5.10 | Breezy Badger | 2005-04-08 | 2005-10-12 | 2007-04-13 |
version | codename | created | release | eol | eol-server |
---|---|---|---|---|---|
6.06 LTS | Dapper Drake | 2005-10-12 | 2006-06-01 | 2009-07-14 | 2011-06-01 |
version | codename | created | release | eol |
---|---|---|---|---|
6.10 | Edgy Eft | 2006-06-01 | 2006-10-26 | 2008-04-25 |
7.04 | Feisty Fawn | 2006-10-26 | 2007-04-19 | 2008-10-19 |
7.10 | Gutsy Gibbon | 2007-04-19 | 2007-10-18 | 2009-04-18 |
version | codename | created | release | eol | eol-server |
---|---|---|---|---|---|
8.04 LTS | Hardy Heron | 2007-10-18 | 2008-04-24 | 2011-05-12 | 2013-05-09 |
version | codename | created | release | eol |
---|---|---|---|---|
8.10 | Intrepid Ibex | 2008-04-24 | 2008-10-30 | 2010-04-30 |
9.04 | Jaunty Jackalope | 2008-10-30 | 2009-04-23 | 2010-10-23 |
9.10 | Karmic Koala | 2009-04-23 | 2009-10-29 | 2011-04-30 |
version | codename | created | release | eol | eol-server |
---|---|---|---|---|---|
10.04 LTS | Lucid Lynx | 2009-10-29 | 2010-04-29 | 2013-05-09 | 2015-04-30 |
version | codename | created | release | eol |
---|---|---|---|---|
10.10 | Maverick Meerkat | 2010-04-29 | 2010-10-10 | 2012-04-10 |
11.04 | Natty Narwhal | 2010-10-10 | 2011-04-28 | 2012-10-28 |
11.10 | Oneiric Ocelot | 2011-04-28 | 2011-10-13 | 2013-05-09 |
version | codename | created | release | eol | eol-server | eol-esm |
---|---|---|---|---|---|---|
12.04 LTS | Precise Pangolin | 2011-10-13 | 2012-04-26 | 2017-04-28 | 2017-04-28 | 2019-04-26 |
version | codename | created | release | eol |
---|---|---|---|---|
12.10 | Quantal Quetzal | 2012-04-26 | 2012-10-18 | 2014-05-16 |
13.04 | Raring Ringtail | 2012-10-18 | 2013-04-25 | 2014-01-27 |
13.10 | Saucy Salamander | 2013-04-25 | 2013-10-17 | 2014-07-17 |
version | codename | created | release | eol | eol-server | eol-esm |
---|---|---|---|---|---|---|
14.04 LTS | Trusty Tahr | 2013-10-17 | 2014-04-17 | 2019-04-25 | 2019-04-25 | 2024-04-25 |
version | codename | created | release | eol |
---|---|---|---|---|
14.10 | Utopic Unicorn | 2014-04-17 | 2014-10-23 | 2015-07-23 |
15.04 | Vivid Vervet | 2014-10-23 | 2015-04-23 | 2016-02-04 |
15.10 | Wily Werewolf | 2015-04-23 | 2015-10-22 | 2016-07-28 |
version | codename | created | release | eol | eol-server | eol-esm |
---|---|---|---|---|---|---|
16.04 LTS | Xenial Xerus | 2015-10-22 | 2016-04-21 | 2021-04-30 | 2021-04-30 | 2026-04-23 |
version | codename | created | release | eol |
---|---|---|---|---|
16.10 | Yakkety Yak | 2016-04-21 | 2016-10-13 | 2017-07-20 |
17.04 | Zesty Zapus | 2016-10-13 | 2017-04-13 | 2018-01-13 |
17.10 | Artful Aardvark | 2017-04-13 | 2017-10-19 | 2018-07-19 |
version | codename | created | release | eol | eol-server | eol-esm |
---|---|---|---|---|---|---|
18.04 LTS | Bionic Beaver | 2017-10-19 | 2018-04-26 | 2023-05-31 | 2023-05-31 | 2028-04-26 |
version | codename | created | release | eol |
---|---|---|---|---|
18.10 | Cosmic Cuttlefish | 2018-04-26 | 2018-10-18 | 2019-07-18 |
19.04 | Disco Dingo | 2018-10-18 | 2019-04-18 | 2020-01-23 |
19.10 | Eoan Ermine | 2019-04-18 | 2019-10-17 | 2020-07-17 |
version | codename | created | release | eol | eol-server | eol-esm |
---|---|---|---|---|---|---|
20.04 LTS | Focal Fossa | 2019-10-17 | 2020-04-23 | 2025-05-29 | 2025-05-29 | 2030-04-23 |
version | codename | created | release | eol |
---|---|---|---|---|
20.10 | Groovy Gorilla | 2020-04-23 | 2020-10-22 | 2021-07-22 |
21.04 | Hirsute Hippo | 2020-10-22 | 2021-04-22 | 2022-01-20 |
21.10 | Impish Indri | 2021-04-22 | 2021-10-14 | 2022-07-14 |
version | codename | created | release | eol | eol-server | eol-esm |
---|---|---|---|---|---|---|
22.04 LTS | Jammy Jellyfish | 2021-10-14 | 2022-04-21 | 2027-06-01 | 2027-06-01 | 2032-04-21 |
version | codename | created | release | eol |
---|---|---|---|---|
22.10 | Kinetic Kudu | 2022-04-21 | 2022-10-20 | 2023-07-20 |
23.04 | Lunar Lobster | 2022-10-20 | 2023-04-20 | 2024-01-25 |
23.10 | Mantic Minotaur | 2023-04-20 | 2023-10-12 | 2024-07-11 |
version | codename | created | release | eol | eol-server | eol-esm |
---|---|---|---|---|---|---|
24.04 LTS | Noble Numbat | 2023-10-12 | 2024-04-25 | 2029-05-31 | 2029-05-31 | 2034-04-25 |
See also:
PLEASE NOTE: THIS IS A WIP (WORK IN PORGESS)
Unlike container images, which offer almost all versions, the lowest version offered by VM images is 15.04, not 4.10.
On Ubuntu, Mint, Kali ...
# run apt as root (e.g., sudo apt update)
apt update
apt install qemu-system-x86 zsh zstd
mkdir -p 22.04/x64
cd 22.04
url='https://github.com/2cd/ubuntu-museum/releases/download/22.04/vm-minimal_jammy_x64.tar.zst'
curl -LO "$url"
cd x64
tar -xvf ../vm-minimal_jammy_x64.tar.zst
If you have enough disk space then
+3G
can be changed to+10G
qemu-img resize disk.img +3G
./run
Android Termux
pkg i qemu-system-aarch64-headless zsh
Ubuntu
# Run apt as root (i.e., +sudo/+doas)
apt install qemu-system-arm zsh
cd /sdcard/Download || cd ~/Downloads
mkdir -p 22.04/arm64
cd 22.04/arm64
url='https://github.com/2cd/ubuntu-museum/releases/download/22.04/vm-minimal_jammy_arm64.tar.zst'
aria2c -s5 -x5 --no-conf -o jammy-vm.tzst "$url" || curl -Lo jammy-vm.tzst "$url"
tar -xvf jammy-vm.tzst
qemu-img resize disk.img +1G
zsh run
Open a new terminal session and run the following command.
zsh connect-to-ssh
tag=jammy-minimal-x64
# tag=jammy-minimal-arm64
docker run -it --name jammy-kvm --device /dev/kvm ghcr.io/2cd/ubuntu-vm:$tag
Step1: install docker
# run apt as root (e.g., sudo apt update)
apt update
apt install docker.io apparmor
Step2: start docker
/etc/init.d/docker start
# OR: systemctl start docker
Step3 (Optional): add the current user to the docker user group
# run it on POSIX-compliant shell (e.g., zsh, ash, bash)
# run adduser as root (i.e., +sudo/+doas)
adduser $(id -un) docker
Take ubuntu 24.04 for example.
We can create a disposable container:
docker run -it --rm -e LANG=$LANG ghcr.io/2cd/ubuntu:24.04
We can also specify the architecture (platform) of the container, but we need to install qemu-user-static
fisrst. It will automatically configure binfmt_misc
for us.
# run apt as root (i.e., +sudo/doas)
apt install qemu-user-static
Try riscv64:
docker run -it --rm --platform linux/riscv64 ghcr.io/2cd/ubuntu:24.04
# OR: docker run -it --rm ghcr.io/2cd/ubuntu:24.04-rv64gc
Note: The above is only suitable for simple cases, in more cases we will use use it as a base container image and use it with other services.
Here's a snippet of the configuration:
name: Ubuntu
codename: Noble Numbat
series: noble
version: '24.04'
oci-platforms:
- linux/386
- linux/amd64
- linux/arm/v7
- linux/arm64
- linux/ppc64le
- linux/riscv64
- linux/s390x
If you want more information, go to Github Releases.
To use systemd-nspawn, we need to install it.
# run apt as root (i.e., +sudo/doas)
apt install systemd-container
Next, let's take 22.10 arm64 for example.
Note: This is a version that is already EOL. In most cases, you should use the ongoing maintenance version, not the EOL.
mkdir -p ./tmp/kinetic-arm64
cd tmp
# We need to download a file of size 26.15 MiB.
curl -LO 'https://github.com/2cd/ubuntu-museum/releases/download/22.10/22.10_kinetic_arm64.tar.zst'
# install bsdtar, run apt as root (i.e., +sudo/+doas)
apt install libarchive-tools
# run bsdtar or gnutar as root (i.e., +sudo/+doas)
# if using gnutar, then `bsdtar` -> `tar`
bsdtar -C kinetic-arm64 -xf "22.10_kinetic_arm64.tar.zst"
# run nspawn as root (i.e., +sudo/+doas)
# On pwsh, $LANG -> $env:LANG
systemd-nspawn -D kinetic-arm64 -E LANG=$LANG
Once inside the container, we can configure the language environment:
apt update
apt install locales
dpkg-reconfigure locales
-
Actually, compared to the official Ubuntu Docker image, it does not have any particularly great advantages. One significant difference compared to the official one is that it is not as streamlined. This can be seen as both an advantage and a disadvantage. In many cases, being streamlined can reduce the size it occupies. However, for certain purposes, like graphical user interfaces, being too streamlined may cause issues.
-
On modern operating systems (Linux kernel: 6.x), running some ancient systems (in containers, not virtual machines) may cause issues.
For example, Warty (i386, 4.10):
Inconsistency detected by ld.so: rtld.c: 1192: dl_main: Assertion `(void *) ph->p_vaddr == _rtld_local._dl_sysinfo_dso' failed!