Install packages from newer release without building (apt pinning)

I need these packages with the latest upstream version backported for ubuntu/natty

  • libccid_1.4.5-0ubuntu1_amd64.deb
  • libpcsclite1_1.8.1-0ubuntu1_amd64.deb
  • libpcsclite-dev_1.8.1-0ubuntu1_amd64.deb
  • libusb-1.0-0_1.0.9-0ubuntu1_amd64.deb
  • libusb-1.0-0-dev_1.0.9-0ubuntu1_amd64.deb
  • opensc_0.12.2-1ubuntu1ppa1~natty1_amd64.deb
  • pcscd_1.8.1-0ubuntu1_amd64.deb pcsc-tools_1.4.18-0ubuntu1_amd64.deb

I tried to build them from source with update but it failed. I am not an expert at packaging and there are so many tutorials and recipes out there.

Do you know a good and up to date tutorial for backporting Ubuntu packages?

How do I get packages from other releases without having to build them myself?


Solution 1:

You would be much better off exploring apt pinning, see man apt_preferences.

Let's assume you're on Oneiric and you want to get those packages from Precise.

If you read the man you'll see that I copy/pasted the relevant sections and just modified the release name

/etc/apt/preferences:

Package: libccid
Pin: release n=precise
Pin-Priority: 990

Package: libpcsclite*
Pin: release n=precise
Pin-Priority: 990

Package: libusb*
Pin: release n=precise
Pin-Priority: 990

Package: opensc
Pin: release n=precise
Pin-Priority: 990

Package: pcscd
Pin: release n=precise
Pin-Priority: 990


Explanation: Uninstall or do not install any Ubuntu-originated
Explanation: package versions other than those in the oneiric release
Package: *
Pin: release n=oneiric
Pin-Priority: 900

Package: *
Pin: release o=Ubuntu
Pin-Priority: -10

Then, I copied my /etc/apt/sources.list to /etc/apt/sources.list.d/precise.list and replaced all occurrences of oneiric with precise. Then ran apt-get update and finally apt-get upgrade.

$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be upgraded:
  libpcsclite1 libusb-0.1-4 libusb-1.0-0 libusbmuxd1
4 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 86.0 kB of archives.
After this operation, 88.1 kB disk space will be freed.
Do you want to continue [Y/n]? y
Get:1 http://us.archive.ubuntu.com/ubuntu/ precise/main libusb-0.1-4 amd64 2:0.1.12-20 [17.6 kB]
Get:2 http://us.archive.ubuntu.com/ubuntu/ precise/main libusb-1.0-0 amd64 2:1.0.9~rc3-2 [30.9 kB]
Get:3 http://us.archive.ubuntu.com/ubuntu/ precise/main libpcsclite1 amd64 1.7.4-2ubuntu1 [23.5 kB]
Get:4 http://us.archive.ubuntu.com/ubuntu/ precise/main libusbmuxd1 amd64 1.0.7-2 [14.1 kB]
 Fetched 86.0 kB in 0s (124 kB/s) 

For some reason, pcscd and opensc didn't get installed, probably because it wasn't installed to begin with so there was nothing to upgrade, no big deal, I can install exactly that version using precise as the reference like this.

apt-get install opensc pcscd -t precise

Take note of the use of -t, packagename/precise would also work.

and there are the packages you want, from the latest release, and only those packages, they will also be updated automatically. If you don't want them anymore, just delete the entries from /etc/apt/preferences and the next time you run apt-get upgrade they'll be removed. Should you remove the entire prefs file be sure to delete that precise.list sources file as well our your system will try to update to the latest set of packages. Also if you decide to dist-upgrade later, you'll need to remove the entire prefs file and it would probably be a good idea to remove the other sources.list less the upgrade will find, thanks to the higher priority, that there are no packages to update.

Apt pinning isn't that hard, you just need to dig in a little and experiment. All the verbs for n= etc are found by examining apt-cache policy.

This is why seasoned admins rant and rave about apt vs yum. You can concisely update services and keep them up-to-date in a clean, deterministic, and maintainable manner.

No more compiling packages either.

I strongly suggest you read the entire man page and get comfortable with the concept and read other guides on apt pinning before continuing with this proposal. Good luck and have fun!

https://help.ubuntu.com/community/PinningHowto