Comment 3 for bug 1177432

Revision history for this message
Scott Moser (smoser) wrote : Re: Enable backports in cloud-init archive template

== summary ==
fix this problem by creating tools to manage /etc/apt/sources.list

== details ==
I realize that cloud-init is just kind of caught in the middle here because of the template that it has, and the fact that that template has not been updated to keep in sync with changes made elsewhere to the default sources list.

I personally prefer the smaller sources.list that is present in the cloud images. For reference, the differences between a server install of 13.04 cd and cloud-init template at the moment are:
 - cloud-init: (12 total entries, 2 x 3 x 2)
    {deb, deb-src} $release{"",-updates,-security} {main, universe}
 - install cd: (32 total entries, 2 x 4 x 4)
    {deb, deb-src} $release{"",-updates,-security,-backports} {main,restricted,universe,multiverse}

Ignoring multiarch, and translations, which are also multipliers, That means 20 more GETs every time 'apt-get update' is done. That is nothing to be scoffed at.

I put a gist at https://gist.github.com/smoser/5586288 which uses chdist to easily time runs of 'apt-get update'. The differences are very real.
In quick tests on raring, I was seeing a refresh taking 20 seconds for "full list" versus 8 seconds for cloud-images list against a locally warmed cache.

This is partially because apt is doing the GET serially, but even the cpu decompression does take time.

My basic issue boils down to this:
 * I expect that when people launch an instance, they immediately install software on it. In order to do that, they need to run 'apt-get update'.
 * If apt-get update goes from taking 8 seconds to 20 seconds, that is a significant increase in total time to functional system.

I'd prefer that we solve this *not* by making cloud-init have a large amount of additional sources. If I were to suggest making a change, it would be to remove deb-src entries from /etc/apt/sources.list to make it smaller.

My suggestion is that we fix this problem by adding tools that manipulate /etc/apt/sources.list or sources.list.d similar to 'apt-add-repository', but that support aliases like 'backports', 'partner', 'multiverse'.
Example usage:
 - aptsources --no-source set main universe
 - aptsources remove multiverse

Cloud-init can then expose such simple instructions in its cloud-config syntax.