Migrating from Ubuntu 14.04 to Ubuntu 20.04

Last updated
Tags Cloud Server v3.x Server v2.x

Switching to a supported image

Swapping out the deprecated image for a supported one in the CircleCI config is straightforward. Additional work to get your pipelines to run with the newer image will depend on if the changes below apply to your project. Here’s an example config using an Ubuntu 14.04 image vs one using a 20.04 image:

version: 2.1
jobs:
  my-job:
    machine:
      image: circleci/classic:201707-01
    steps:
      run: echo "do something"
version: 2.1
jobs:
  my-job:
    machine: true
    steps:
      run: echo "do something"
version: 2.1
jobs:
  my-job:
    machine:
      image: ubuntu-2004:202201-02
    steps:
      run: echo "do something"

The middle example above shows the use of the default image, which is specified when using machine: true in your config. This image is an Ubuntu 14.04 image and is subject to the deprecation. Supported images (and tags) can be found in the Developer Hub.

Note: This guide will be updated over time to include additional information and tips as CircleCI and customers share their experiences with this migration.

Changes

There are many changes between Ubuntu 14.04 and 20.04 that you should be aware of before migrating. Many are changes that Canonical has made (the company behind Ubuntu), but also changes that CircleCI has made to the software that we pre-install. Let’s go through each of these changes separately.

Changes to Ubuntu

  • kernel - The Linux kernel was bumped from v4.4 to v5.11.
  • Python - Python v2 is no longer installed by default from Ubuntu. CircleCI still installs it, and versions can be managed via Pyenv.
  • OpenSSH - OpenSSH was updated to v8.2. This is a new version that should not be affected by GitHub’s deprecation.
    • Ubuntu now refuses to use RSA keys smaller than 1024 bits.
  • GNU Toolchain
    • glibc updated to v2.31
    • binutils updated to v2.26
    • GCC updated to v9,3
  • Apt updated to v1.2
  • Nginx updated to v1.18
  • nginx-core no longer ships with the legacy geoip module enabled by default.
  • Apache has been built with TLSv1.3 support.
  • Apache was updated to version 2.4.29. Additionally, HTTP/2 support is now enabled.
  • LXD updated to v3.0
  • PHP updated to v7.4
  • Perl 5.30
  • MySQL updated to v5.7
  • Snap & Snapcraft - Support for running and build snap packages.
  • Java - OpenJDK v11 is now the default ,however, CircleCI pre-installs more versions.
  • OpenSSL upgraded from v1.1.0 to v1.1.1 enabling TLS v1.3
  • netplan supports IPv6 privacy extensions.
  • netplan can bring up devices without an IP for anonymous bridges.
  • default DNS resolver is systemd-resolved.
  • Bind 9.16
  • SystemD takes over from SysV.
  • gpg binary is provided by gnupg2.
  • Chrony v3.5 replaces ntpd.
  • Wireguard VPN support
  • rustc 1.41
  • HAProxy 2.0
  • PostgreSQL 12

CircleCI Software Changes

Software Ubuntu 14.04 (default) Ubuntu 20.04 (January 2022 Q1)
AWS CLI 1.19.112 2.4.6
Google Chrome 54.0.2840.100 96.0.4664.110
Docker 17.09.0 20.10.11
Docker Compose 1.14.0 1.29.2
Firefox 47.0.1 95.0.1
GCP CLI 174.0.0 365.0.0
Go 1.10.2 1.17.3
Gradle n/a 7.3.2
Heroku 6.99.0 7.59.2
jq 1.5 1.6
Leiningen 2.7.1 2.9.8
Maven 3.2.5 3.8.4
Node.js n/a 16.13.0
npm n/a 8.3.0
OpenJDK 1.8.0_131 11.0.13
Python2 switch switch
Python3 3.4.3 3.9.7
Ruby 2.3.1 3.0.2
SBT n/a 1.5.8
yq n/a 4.13.5


Help make this document better

This guide, as well as the rest of our docs, are open source and available on GitHub. We welcome your contributions.

Need support?

Our support engineers are available to help with service issues, billing, or account related questions, and can help troubleshoot build configurations. Contact our support engineers by opening a ticket.

You can also visit our support site to find support articles, community forums, and training resources.