New machine executor image ubuntu-1604:202004-01 with Docker 19.03

We are excited to announce a new Ubuntu 16.04-based machine executor image, ubuntu-1604:202004-01, which is similar to the existing ubuntu-1604:201903-01 but with Docker 19.03 installed as well as updates to other software installed on the image. See the machine executor docs for more information about how to use the image.

Here is a list of the major software installed on the image:

aws-cli 1.18.42
chrome 81.0.4044.113
chromedriver 81.0.4044
docker 19.03.8
docker-compose 1.25.5
firefox 75.0.0
go 1.14.2
google cloud sdk 289.0.0
gradle 6.3
heroku 7.39.3
leiningen 2.9.3
maven 3.6.3
node 12.16.2
openjdk 1.8
python 2.7.17
python 3.8.2
ruby 2.7.1
sbt 1.3.9
4 Likes

Awesome!

I’m having an issue running sudo apt update & upgrade however “E: The repository ‘https://packagecloud.io/circleci/trusty/****** xenial Release’ does not have a Release file.”

Full stack follows:

0% [Working]Get:1 http://us-central1.gce.archive.******.com/****** xenial InRelease [247 kB]
 
0% [1 InRelease 13.8 kB/247 kB 6%] [Connecting to security.******.com (91.189.80% [Connecting to security.******.com (91.189.88.142)] [Connecting to ppa.launcGet:2 http://us-central1.gce.archive.******.com/****** xenial-updates InRelease [109 kB]
 
0% [Waiting for headers] [Connecting to security.******.com (91.189.88.142)] [C0% [1 InRelease gpgv 247 kB] [Waiting for headers] [Connecting to security.ubunGet:3 http://us-central1.gce.archive.******.com/****** xenial-backports InRelease [107 kB]
 
0% [1 InRelease gpgv 247 kB] [Connecting to security.******.com (91.189.88.142)Hit:4 http://archive.canonical.com/****** xenial InRelease                     
 
0% [1 InRelease gpgv 247 kB] [Connecting to security.******.com (91.189.88.142)0% [Waiting for headers] [Waiting for headers] [Waiting for headers]           0% [2 InRelease gpgv 109 kB] [Waiting for headers] [Waiting for headers] [WaitiGet:5 https://cli-assets.heroku.com/apt ./ InRelease [2,879 B]                 
 
0% [2 InRelease gpgv 109 kB] [Waiting for headers] [Waiting for headers] [WaitiGet:6 http://us-central1.gce.archive.******.com/****** xenial/main Sources [868 kB]
 
0% [2 InRelease gpgv 109 kB] [6 Sources 42.0 kB/868 kB 5%] [Waiting for headersHit:7 http://ppa.launchpad.net/git-core/ppa/****** xenial InRelease            
 
0% [2 InRelease gpgv 109 kB] [6 Sources 868 kB/868 kB 100%] [Waiting for header0% [2 InRelease gpgv 109 kB] [Waiting for headers] [Connecting to ppa.launchpadGet:8 http://security.******.com/****** xenial-security InRelease [109 kB]     
 
0% [2 InRelease gpgv 109 kB] [8 InRelease 2,505 B/109 kB 2%] [Connecting to ppaGet:9 http://us-central1.gce.archive.******.com/****** xenial/restricted Sources [4,808 B]
 
Get:10 http://us-central1.gce.archive.******.com/****** xenial/universe Sources [7,728 kB]
 
0% [6 Sources store 0 B] [2 InRelease gpgv 109 kB] [10 Sources 39.4 kB/7,728 kBGet:11 http://dl.google.com/linux/chrome/deb stable InRelease [1,811 B]        
 
0% [6 Sources store 0 B] [2 InRelease gpgv 109 kB] [10 Sources 760 kB/7,728 kB Ign:12 https://packagecloud.io/circleci/trusty/****** xenial InRelease         
 
0% [6 Sources store 0 B] [2 InRelease gpgv 109 kB] [10 Sources 7,616 kB/7,728 kHit:13 http://ppa.launchpad.net/openjdk-r/ppa/****** xenial InRelease          
 
0% [6 Sources store 0 B] [2 InRelease gpgv 109 kB] [10 Sources 7,707 kB/7,728 k0% [6 Sources store 0 B] [2 InRelease gpgv 109 kB] [8 InRelease 41.9 kB/109 kB Get:14 http://us-central1.gce.archive.******.com/****** xenial/multiverse Sources [179 kB]
 
0% [6 Sources store 0 B] [2 InRelease gpgv 109 kB] [14 Sources 13.9 kB/179 kB 80% [6 Sources store 0 B] [2 InRelease gpgv 109 kB] [8 InRelease 41.9 kB/109 kB Get:15 http://us-central1.gce.archive.******.com/****** xenial/main amd64 Packages [1,201 kB]
 
0% [6 Sources store 0 B] [2 InRelease gpgv 109 kB] [15 Packages 13.9 kB/1,201 k0% [6 Sources store 0 B] [2 InRelease gpgv 109 kB] [8 InRelease 53.2 kB/109 kB Get:16 http://us-central1.gce.archive.******.com/****** xenial/main Translation-en [568 kB]
 
0% [6 Sources store 0 B] [2 InRelease gpgv 109 kB] [16 Translation-en 172 kB/56Err:17 https://packagecloud.io/circleci/trusty/****** xenial Release           
 
  404  Not Found
 
0% [6 Sources store 0 B] [2 InRelease gpgv 109 kB] [16 Translation-en 473 kB/560% [2 InRelease gpgv 109 kB] [8 InRelease 61.6 kB/109 kB 56%] [Connecting to pp0% [9 Sources store 0 B] [2 InRelease gpgv 109 kB] [Waiting for headers] [8 InR0% [2 InRelease gpgv 109 kB] [Waiting for headers] [8 InRelease 61.6 kB/109 kB 0% [10 Sources store 0 B] [2 InRelease gpgv 109 kB] [Waiting for headers] [8 InGet:18 http://us-central1.gce.archive.******.com/****** xenial/restricted amd64 Packages [8,344 B]
 
0% [10 Sources store 0 B] [2 InRelease gpgv 109 kB] [18 Packages 0 B/8,344 B 0%0% [10 Sources store 0 B] [2 InRelease gpgv 109 kB] [8 InRelease 61.6 kB/109 kBGet:19 http://us-central1.gce.archive.******.com/****** xenial/restricted Translation-en [2,908 B]
 
0% [10 Sources store 0 B] [2 InRelease gpgv 109 kB] [19 Translation-en 0 B/2,900% [10 Sources store 0 B] [2 InRelease gpgv 109 kB] [8 InRelease 64.5 kB/109 kBGet:20 http://us-central1.gce.archive.******.com/****** xenial/universe amd64 Packages [7,532 kB]
 
0% [10 Sources store 0 B] [2 InRelease gpgv 109 kB] [20 Packages 0 B/7,532 kB 00% [10 Sources store 0 B] [20 Packages 1,962 kB/7,532 kB 26%] [8 InRelease 107 0% [10 Sources store 0 B] [3 InRelease gpgv 107 kB] [20 Packages 1,962 kB/7,5320% [10 Sources store 0 B] [3 InRelease gpgv 107 kB] [20 Packages 2,083 kB/7,532Get:21 http://ppa.launchpad.net/wireguard/wireguard/****** xenial InRelease [18.0 kB]
 
0% [10 Sources store 0 B] [3 InRelease gpgv 107 kB] [20 Packages 4,845 kB/7,5320% [10 Sources store 0 B] [3 InRelease gpgv 107 kB] [21 InRelease 12.6 kB/18.0 Get:22 http://us-central1.gce.archive.******.com/****** xenial/universe Translation-en [4,354 kB]
 
0% [10 Sources store 0 B] [3 InRelease gpgv 107 kB] [22 Translation-en 42.0 kB/0% [10 Sources store 0 B] [3 InRelease gpgv 107 kB] [22 Translation-en 1,356 kB0% [10 Sources store 0 B] [3 InRelease gpgv 107 kB]                            0% [10 Sources store 0 B] [Waiting for headers]    Get:23 http://us-central1.gce.archive.******.com/****** xenial/multiverse amd64 Packages [144 kB]
 
0% [10 Sources store 0 B] [Waiting for headers]0% [10 Sources store 0 B] [4 InRelease gpgv 11.5 kB] [Waiting for headers]Get:24 http://us-central1.gce.archive.******.com/****** xenial/multiverse Translation-en [106 kB]
 
0% [10 Sources store 0 B] [4 InRelease gpgv 11.5 kB] [24 Translation-en 13.6 kB0% [10 Sources store 0 B] [4 InRelease gpgv 11.5 kB]                           Get:25 http://us-central1.gce.archive.******.com/****** xenial-updates/main Sources [347 kB]
 
0% [10 Sources store 0 B] [4 InRelease gpgv 11.5 kB] [25 Sources 38.3 kB/347 kB0% [10 Sources store 0 B] [4 InRelease gpgv 11.5 kB]                           Get:26 http://us-central1.gce.archive.******.com/****** xenial-updates/restricted Sources [2,536 B]
 
0% [10 Sources store 0 B] [4 InRelease gpgv 11.5 kB] [26 Sources 2,536 B/2,536 0% [10 Sources store 0 B] [4 InRelease gpgv 11.5 kB] [Waiting for headers]     Get:27 http://us-central1.gce.archive.******.com/****** xenial-updates/universe Sources [269 kB]
 
0% [10 Sources store 0 B] [4 InRelease gpgv 11.5 kB] [27 Sources 13.9 kB/269 kB0% [10 Sources store 0 B] [4 InRelease gpgv 11.5 kB]                           Get:28 http://us-central1.gce.archive.******.com/****** xenial-updates/multiverse Sources [8,748 B]
 
0% [10 Sources store 0 B] [4 InRelease gpgv 11.5 kB] [28 Sources 8,748 B/8,748 0% [10 Sources store 0 B] [4 InRelease gpgv 11.5 kB] [Waiting for headers]     Get:29 http://us-central1.gce.archive.******.com/****** xenial-updates/main amd64 Packages [1,141 kB]
 
0% [10 Sources store 0 B] [4 InRelease gpgv 11.5 kB] [29 Packages 13.9 kB/1,1410% [10 Sources store 0 B] [4 InRelease gpgv 11.5 kB]                           Get:30 http://us-central1.gce.archive.******.com/****** xenial-updates/main Translation-en [432 kB]
 
0% [10 Sources store 0 B] [4 InRelease gpgv 11.5 kB] [30 Translation-en 35.0 kB0% [10 Sources store 0 B] [4 InRelease gpgv 11.5 kB]                           Get:31 http://us-central1.gce.archive.******.com/****** xenial-updates/restricted amd64 Packages [7,616 B]
 
0% [10 Sources store 0 B] [4 InRelease gpgv 11.5 kB] [Waiting for headers]Get:32 http://us-central1.gce.archive.******.com/****** xenial-updates/restricted Translation-en [2,272 B]
 
0% [10 Sources store 0 B] [4 InRelease gpgv 11.5 kB] [Waiting for headers]Get:33 http://us-central1.gce.archive.******.com/****** xenial-updates/universe amd64 Packages [797 kB]
 
0% [10 Sources store 0 B] [4 InRelease gpgv 11.5 kB] [33 Packages 13.9 kB/797 k0% [10 Sources store 0 B] [4 InRelease gpgv 11.5 kB]                           0% [10 Sources store 0 B] [Waiting for headers]     0% [10 Sources store 0 B] [5 InRelease gpgv 2,879 B] [Waiting for headers]Get:34 http://us-central1.gce.archive.******.com/****** xenial-updates/universe Translation-en [333 kB]
 
0% [10 Sources store 0 B] [5 InRelease gpgv 2,879 B] [34 Translation-en 0 B/3330% [10 Sources store 0 B] [5 InRelease gpgv 2,879 B]                           Get:35 http://us-central1.gce.archive.******.com/****** xenial-updates/multiverse amd64 Packages [17.1 kB]
 
0% [10 Sources store 0 B] [5 InRelease gpgv 2,879 B] [Waiting for headers]Get:36 http://us-central1.gce.archive.******.com/****** xenial-updates/multiverse Translation-en [8,632 B]
 
0% [10 Sources store 0 B] [5 InRelease gpgv 2,879 B] [36 Translation-en 4,096 B0% [10 Sources store 0 B] [5 InRelease gpgv 2,879 B] [Waiting for headers]     Get:37 http://us-central1.gce.archive.******.com/****** xenial-backports/main Sources [4,848 B]
 
0% [10 Sources store 0 B] [5 InRelease gpgv 2,879 B] [Waiting for headers]Get:38 http://us-central1.gce.archive.******.com/****** xenial-backports/universe Sources [7,120 B]
 
0% [10 Sources store 0 B] [5 InRelease gpgv 2,879 B] [Waiting for headers]Get:39 http://us-central1.gce.archive.******.com/****** xenial-backports/main amd64 Packages [7,280 B]
 
0% [10 Sources store 0 B] [5 InRelease gpgv 2,879 B] [39 Packages 7,280 B/7,2800% [10 Sources store 0 B] [5 InRelease gpgv 2,879 B] [Waiting for headers]     Get:40 http://us-central1.gce.archive.******.com/****** xenial-backports/main Translation-en [4,456 B]
 
0% [10 Sources store 0 B] [5 InRelease gpgv 2,879 B] [Waiting for headers]Get:41 http://us-central1.gce.archive.******.com/****** xenial-backports/universe amd64 Packages [8,064 B]
 
0% [10 Sources store 0 B] [5 InRelease gpgv 2,879 B] [Waiting for headers]Get:42 http://us-central1.gce.archive.******.com/****** xenial-backports/universe Translation-en [4,328 B]
 
0% [10 Sources store 0 B] [5 InRelease gpgv 2,879 B]                      0% [10 Sources store 0 B]                           0% [10 Sources store 0 B] [7 InRelease gpgv 23.8 kB]Get:43 https://cli-assets.heroku.com/apt ./ Packages [624 B]
 
0% [10 Sources store 0 B] [7 InRelease gpgv 23.8 kB] [43 Packages 624 B/624 B 10% [10 Sources store 0 B] [7 InRelease gpgv 23.8 kB]                           0% [10 Sources store 0 B]                           0% [10 Sources store 0 B] [11 InRelease gpgv 1,811 B]0% [10 Sources store 0 B]                            0% [10 Sources store 0 B] [13 InRelease gpgv 17.5 kB] [Waiting for headers]Get:44 http://dl.google.com/linux/chrome/deb stable/main amd64 Packages [1,126 B]
 
0% [10 Sources store 0 B] [13 InRelease gpgv 17.5 kB] [44 Packages 1,126 B/1,120% [10 Sources store 0 B] [13 InRelease gpgv 17.5 kB]                          0% [10 Sources store 0 B]                            0% [10 Sources store 0 B] [8 InRelease gpgv 109 kB]0% [10 Sources store 0 B]                          0% [10 Sources store 0 B] [21 InRelease gpgv 18.0 kB] [Waiting for headers]0% [10 Sources store 0 B] [Waiting for headers]                            Get:45 http://security.******.com/****** xenial-security/main Sources [163 kB]
 
0% [10 Sources store 0 B] [45 Sources 8,239 B/163 kB 5%] [Connecting to ppa.lau0% [10 Sources store 0 B] [Waiting for headers]                                Get:46 http://ppa.launchpad.net/wireguard/wireguard/****** xenial/main amd64 Packages [992 B]
 
0% [10 Sources store 0 B] [Waiting for headers]Get:47 http://security.******.com/****** xenial-security/universe Sources [119 kB]
 
0% [10 Sources store 0 B] [47 Sources 0 B/119 kB 0%] [Connecting to ppa.launchp0% [10 Sources store 0 B] [Connecting to ppa.launchpad.net (91.189.95.83)]     Get:48 http://security.******.com/****** xenial-security/main amd64 Packages [861 kB]
 
0% [10 Sources store 0 B] [48 Packages 0 B/861 kB 0%] [Waiting for headers]Get:49 http://ppa.launchpad.net/wireguard/wireguard/****** xenial/main Translation-en [764 B]
 
0% [10 Sources store 0 B] [48 Packages 172 kB/861 kB 20%]                  0% [10 Sources store 0 B]                                0% [Waiting for headers] 0% [14 Sources store 0 B] [Waiting for headers]0% [Waiting for headers]                       0% [15 Packages store 0 B] [Waiting for headers]Get:50 http://security.******.com/****** xenial-security/main Translation-en [323 kB]
 
0% [15 Packages store 0 B] [50 Translation-en 12.5 kB/323 kB 4%]0% [15 Packages store 0 B]                                      Get:51 http://security.******.com/****** xenial-security/universe amd64 Packages [490 kB]
 
0% [15 Packages store 0 B] [51 Packages 12.5 kB/490 kB 3%]0% [51 Packages 479 kB/490 kB 98%]                        0% [16 Translation-en store 0 B] [51 Packages 490 kB/490 kB 100%]0% [16 Translation-en store 0 B] [Waiting for headers]           0% [Waiting for headers]                              0% [18 Packages store 0 B] [Waiting for headers]0% [Waiting for headers]                        0% [19 Translation-en store 0 B] [Waiting for headers]0% [Waiting for headers]                              0% [20 Packages store 0 B] [Waiting for headers]Get:52 http://security.******.com/****** xenial-security/universe Translation-en [200 kB]
 
0% [20 Packages store 0 B] [52 Translation-en 12.5 kB/200 kB 6%]0% [20 Packages store 0 B]                                      Get:53 http://security.******.com/****** xenial-security/multiverse amd64 Packages [6,088 B]
 
0% [20 Packages store 0 B] [53 Packages 6,088 B/6,088 B 100%]0% [20 Packages store 0 B]                                   Get:54 http://security.******.com/****** xenial-security/multiverse Translation-en [2,888 B]
 
0% [20 Packages store 0 B]0% [20 Packages store 0 B]0% [Working]              0% [22 Translation-en store 0 B]0% [22 Translation-en store 0 B]0% [Working]                    0% [23 Packages store 0 B]0% [Working]              0% [24 Translation-en store 0 B]0% [Working]                    0% [25 Sources store 0 B]0% [Working]             0% [26 Sources store 0 B]0% [Working]             0% [27 Sources store 0 B]0% [Working]             0% [28 Sources store 0 B]0% [Working]             0% [29 Packages store 0 B]0% [Working]              0% [30 Translation-en store 0 B]0% [Working]                    0% [31 Packages store 0 B]0% [Working]              0% [32 Translation-en store 0 B]0% [Working]                    0% [33 Packages store 0 B]0% [Working]              0% [34 Translation-en store 0 B]0% [Working]                    0% [35 Packages store 0 B]0% [Working]              0% [36 Translation-en store 0 B]0% [Working]                    0% [37 Sources store 0 B]0% [Working]             0% [38 Sources store 0 B]0% [Working]             0% [39 Packages store 0 B]0% [Working]              0% [40 Translation-en store 0 B]0% [Working]                    0% [41 Packages store 0 B]0% [Working]              0% [42 Translation-en store 0 B]0% [Working]                    0% [43 Packages store 0 B]0% [Working]              0% [44 Packages store 0 B]0% [Working]              0% [45 Sources store 0 B]0% [Working]             0% [46 Packages store 0 B]0% [Working]              0% [47 Sources store 0 B]0% [Working]             0% [49 Translation-en store 0 B]0% [Working]                    0% [48 Packages store 0 B]0% [Working]              0% [50 Translation-en store 0 B]0% [Working]                    0% [51 Packages store 0 B]0% [Working]              0% [52 Translation-en store 0 B]0% [Working]                    0% [53 Packages store 0 B]0% [Working]              0% [54 Translation-en store 0 B]0% [Working]                    Reading package lists... Done 
W: Target Packages (main/binary-amd64/Packages) is configured multiple times in /etc/apt/sources.list.d/google-chrome.list:3 and /etc/apt/sources.list.d/google.list:1
 
W: Target Packages (main/binary-all/Packages) is configured multiple times in /etc/apt/sources.list.d/google-chrome.list:3 and /etc/apt/sources.list.d/google.list:1
 
W: Target Translations (main/i18n/Translation-en_US) is configured multiple times in /etc/apt/sources.list.d/google-chrome.list:3 and /etc/apt/sources.list.d/google.list:1
 
W: Target Translations (main/i18n/Translation-en) is configured multiple times in /etc/apt/sources.list.d/google-chrome.list:3 and /etc/apt/sources.list.d/google.list:1
 
**E: The repository 'https://packagecloud.io/circleci/trusty/****** xenial Release' does not have a Release file.**
 
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
 
N: See apt-secure(8) manpage for repository creation and user configuration details.
 
W: Target Packages (main/binary-amd64/Packages) is configured multiple times in /etc/apt/sources.list.d/google-chrome.list:3 and /etc/apt/sources.list.d/google.list:1
 
W: Target Packages (main/binary-all/Packages) is configured multiple times in /etc/apt/sources.list.d/google-chrome.list:3 and /etc/apt/sources.list.d/google.list:1
 
W: Target Translations (main/i18n/Translation-en_US) is configured multiple times in /etc/apt/sources.list.d/google-chrome.list:3 and /etc/apt/sources.list.d/google.list:1
 
W: Target Translations (main/i18n/Translation-en) is configured multiple times in /etc/apt/sources.list.d/google-chrome.list:3 and /etc/apt/sources.list.d/google.list:1

@danackerson Thanks for the feedback! Could you share the exact commands that you ran, or your config.yml? I was not able to reproduce the problems with this simple config:

version: 2.1
jobs:
  build:
    machine:
      image: ubuntu-1604:202004-01
    steps:
      - checkout
      - run: sudo apt-get update
      - run: sudo apt-get upgrade
workflows:
  version: 2
  build-and-deploy:
    jobs:
      - build

Well, this is embarassing but I used

sudo apt update

After changing this to the recommended

sudo apt-get update

all clear!

Thanks again :slight_smile:

1 Like

We updated from the previous image because apt update failed there, as well.
And now the fresh image has broken repos from the start?

I don’t see how using apt-get is a solution.

Could you retest this? @stella

It’s definitely broken for sudo apt update (for us).

Thanks

@valentinsavenko Thank you for the feedback. This issue was something overlooked during the update of the image and we’re currently investigating it. In the meantime, we recommend using sudo apt-get update if it meets your needs.

I’ve been using ubuntu-1604:202004-01 and I worked around the apt update issue by adding rm /etc/apt/sources.list.d/circleci_trusty.list before updating apt. Now my builds are failing with rm: cannot remove '/etc/apt/sources.list.d/circleci_trusty.list': No such file or directory so I have to revert that change.

Did the machine image change without the tag changing?

This image has been patched to fix the apt update issue.

If you use apt-get, you don’t get a failed build do to this issue.

Yes, it was patched. Your workaround is no longer needed.

In the future, could you please bump the tag instead of pushing a new image to the same tag? This broke CI in a half-dozen repos for me. I’d happily remove the workaround and switch to a ubuntu-1604:202004-02 tag, but it’s not fun when I have to drop what I’m doing and fix this immediately.

@ggreer We had hoped it would be a fix transparent to existing users; apologies for the disruption caused and thank you for the valuable feedback.

Definitely a no-go to release a shadowed patch underneath the hood. Nobody does expect this kind of behaviour when running their daily CI’s.

How can someone even rely upon having deterministic builds for their products if patches are shipped silently. Additionally it makes debugging even harder if something accidently go wrong for pipeline execution.

The patch system that we have in place is for the very scenario, to fix an image that shipped broken. We ship new releases when software is simply being updated.

The workaround we suggested to users (using apt-get instead of apt) who reported and experienced this problem didn’t cause the image to break once we fixed the problem. We can’t predict users doing something outside of what we suggest.

While I understand what happened for you @ggreer, I’d ask that you also understand we had support tickets with users asking for us to fix this problem the way did, with pushing this patch. They would have been upset if we forced them to use another tag for the image instead of just fixing it. We’re doing our best to please as many people as we can.


Lastly, I do want to share that the responsibility for the Linux machine image is moving to another team at CircleCI as we speak. What we’re hoping to deliver with this change is more TLC for the Linux machine image. We’re looking to deliver more frequent, scheduled updates, improved community on changes (including ahead of time communication), faster updating Docs when this images changes, etc.

I’ll make sure to discuss with the new team our existing patch process as it is today, and see if there’s a way we can improve it. Our team also works on the Convenience Images (Docker) and if you’ve heard anything about the next-gen images, we specially don’t touch existing image tags as a default practice. Perhaps we do the same here. Stay tuned to this Announcements category and the CircleCI Discuss Images category for future information on this.

– Ricardo

I would just like to echo @ggreer that I don’t find it acceptable to make machine image changes under the same tag in a CI/CD system such as this. It is very surprising that an image tagged with a date and number would change under the same tag. Everything should remain identical unless the user chooses to make a change, or opted into a dynamically updating environment. The security implications of this within a secure SDLC are worth considering as well…