Install a different version of a package

I'm running lucid server and have installed tomcat. The version it installed is 6.0.24-2ubuntu1.6.

Is this the version I'm tied to? Is it possible to install a more recent version? The one available from maverick is 6.0.28.

Maybe I can add a source to provide my lucid install with this version? In the package manager user interface I can "force version". Is it possible to force version from command line alternative as well?


Solution 1:

Short answer:

Using pinning, you can select which packages come from maverick, and automatically get their dependencies, and keep them up-to-date through your package manager. https://help.ubuntu.com/community/PinningHowto

Long answer copied from https://askubuntu.com/a/103338/42024:

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

So lets 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.

# 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
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

Solution 2:

You can force a version on the command line with apt-get install somepackage=someversion, but you can't ask for a version that isn't in the repositories apt knows about, which usually means the release you are on.

You can try to manually download the maverick deb from launchpad and install it. Sometimes this works, but sometimes it depends on newer versions of various libraries and so won't install. The other option is to download the latest source and compile it yourself.

Solution 3:

lucid only has 6.0.24 available and that is unlikely to change. It's rare to backport software like tomcat to an older release.

But still you can run latest tomcat by using the tomcat binary packages. I am using that.