# Apt Pinning Artful Aardvark Packages in Xenial Xerus

You want to set up apt-pinning so that you can explicitly install packages from artful, on your xenial machine, but you also want to be able to issue the command `apt-get dist-upgrade` and have nothing automatically upgrade from xenial to artful.

In order to get this to work you have to edit three files. The first file is `/etc/apt/sources.list`. Make a double length version of the file, with the second half of the file describing the artful equivalent of the xenial repos. Like this.

    # /etc/apt/sources.list
    deb http://archive.ubuntu.com/ubuntu xenial main restricted
    deb-src http://archive.ubuntu.com/ubuntu xenial main restricted

    deb http://archive.ubuntu.com/ubuntu xenial-updates main restricted
    deb-src http://archive.ubuntu.com/ubuntu xenial-updates main restricted

    deb http://archive.ubuntu.com/ubuntu xenial universe
    deb-src http://archive.ubuntu.com/ubuntu xenial universe
    deb http://archive.ubuntu.com/ubuntu xenial-updates universe
    deb-src http://archive.ubuntu.com/ubuntu xenial-updates universe

    deb http://archive.ubuntu.com/ubuntu xenial multiverse
    deb-src http://archive.ubuntu.com/ubuntu xenial multiverse
    deb http://archive.ubuntu.com/ubuntu xenial-updates multiverse
    deb-src http://archive.ubuntu.com/ubuntu xenial-updates multiverse

    deb http://archive.ubuntu.com/ubuntu xenial-backports main restricted universe multiverse
    deb-src http://archive.ubuntu.com/ubuntu xenial-backports main restricted universe multiverse

    deb http://security.ubuntu.com/ubuntu xenial-security main restricted
    deb-src http://security.ubuntu.com/ubuntu xenial-security main restricted
    deb http://security.ubuntu.com/ubuntu xenial-security universe
    deb-src http://security.ubuntu.com/ubuntu xenial-security universe
    deb http://security.ubuntu.com/ubuntu xenial-security multiverse
    deb-src http://security.ubuntu.com/ubuntu xenial-security multiverse

    ## Uncomment the following two lines to add software from Canonical's
    ## 'partner' repository.
    ## This software is not part of Ubuntu, but is offered by Canonical and the
    ## respective vendors as a service to Ubuntu users.
    # deb http://archive.canonical.com/ubuntu xenial partner
    # deb-src http://archive.canonical.com/ubuntu xenial partner

    deb http://archive.ubuntu.com/ubuntu artful main restricted
    deb-src http://archive.ubuntu.com/ubuntu artful main restricted

    deb http://archive.ubuntu.com/ubuntu artful-updates main restricted
    deb-src http://archive.ubuntu.com/ubuntu artful-updates main restricted

    deb http://archive.ubuntu.com/ubuntu artful universe
    deb-src http://archive.ubuntu.com/ubuntu artful universe
    deb http://archive.ubuntu.com/ubuntu artful-updates universe
    deb-src http://archive.ubuntu.com/ubuntu artful-updates universe

    deb http://archive.ubuntu.com/ubuntu artful multiverse
    deb-src http://archive.ubuntu.com/ubuntu artful multiverse
    deb http://archive.ubuntu.com/ubuntu artful-updates multiverse
    deb-src http://archive.ubuntu.com/ubuntu artful-updates multiverse

    deb http://archive.ubuntu.com/ubuntu artful-backports main restricted universe multiverse
    deb-src http://archive.ubuntu.com/ubuntu artful-backports main restricted universe multiverse

    deb http://security.ubuntu.com/ubuntu artful-security main restricted
    deb-src http://security.ubuntu.com/ubuntu artful-security main restricted
    deb http://security.ubuntu.com/ubuntu artful-security universe
    deb-src http://security.ubuntu.com/ubuntu artful-security universe
    deb http://security.ubuntu.com/ubuntu artful-security multiverse

Now create a new file `/etc/apt/preferences.d/xenial` with the following content.

    Package: *
    Pin: release a=xenial
    Pin-Priority: 900

And create one more file `/etc/apt/preferences.d/artful` with the following content.

    Package: *
    Pin: release a=artful
    Pin-Priority: 300

Actually, I'm not entirely certain these are the optimal apt-pinning priority numbers. There's a little bit of art to apt-pinning.

So you can verify that nothing will automatically upgrade with the following command.

    # the result of this command should be that nothing upgrades
    apt-get dist-upgrade

But let's suppose that you want to explicitly install a package, and hopefully the upgraded dependancies which it needs from artful. `apt-cache madison` is a useful command.

    apt-cache madison weather-util
    # outputs the following
    weather-util |      2.3-2 | http://archive.ubuntu.com/ubuntu artful/universe amd64 Packages
    weather-util |      2.0-1 | http://archive.ubuntu.com/ubuntu xenial/universe amd64 Packages
    weather-util |      2.0-1 | http://archive.ubuntu.com/ubuntu xenial/universe Sources
    weather-util |      2.3-2 | http://archive.ubuntu.com/ubuntu artful/universe Sources

As you can see, two different version of weather-util are available (as well as two different source versions), one each from the xenial, and the artful repos.

But if you type `apt-get install weather-util`, the old version from the xenial repo will be installed. The intended behaviour is entirely a matter of getting the apt-pinning priority numbers correct.

To explicitly install the newer version of weather-util, and perhaps more importantly it's upgraded weather-util-data dependancy, use the following command.

    apt-get -t artful install weather-util

But hold on, HOLD ON! The above command doesn't actually confirm what version is going to be installed, and you'd like to have one last look things over, so add the `-V` flag to your `apt-get` command.

    root@xhost:~# apt-get -t artful install weather-util -V
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    The following additional packages will be installed:
      weather-util-data (2.3-2)
    The following NEW packages will be installed:
      weather-util (2.3-2)
         weather-util-data (2.3-2)
         0 upgraded, 2 newly installed, 0 to remove and 389 not upgraded.
         Need to get 0 B/3375 kB of archives.
         After this operation, 3557 kB of additional disk space will be used.
         Do you want to continue? [Y/n]

That's what you're looking for.

« Previous Next »