|
|
google上找到的,感觉不错,转来让兄弟们看看 
http://jaqque.sbih.org/kplug/apt-pinning.html
- Apt-Pinning for Beginners
- Why apt-pinning?
- Do you run Debian? Have you ever gotten annoyed at how Debian Stable always seems to be out of date?
- I will show you a way that you can have apt mix-and-match between Stable, Testing, and Unstable sources. This will allow you to run a mostly-Stable system, but also track the latest and greatest of those packages that you are most keenly interested in.
- Why do this? Stable is covered by the Security Team. Testing and Unstable are not. For non-critical services, like perhaps your mailer, or your window manager, this is not so important, and the newest versions may have additional features that are desired. It is these packages that are perfect for pinning to a version, other than Stable.
- sources.list
- The first step is to set up your /etc/apt/sources.list to include your typical Stable, plus the Testing/Unstable sources that you want.
- A simple sources.list may look like this:
- #Stable
- deb http://ftp.us.debian.org/debian stable main non-free contrib
- deb http://non-us.debian.org/debian-non-US stable/non-US main contrib non-free
- #Testing
- deb http://ftp.us.debian.org/debian testing main non-free contrib
- deb http://non-us.debian.org/debian-non-US testing/non-US main contrib non-free
- #Unstable
- deb http://ftp.us.debian.org/debian unstable main non-free contrib
- deb http://non-us.debian.org/debian-non-US unstable/non-US main contrib non-free
- You would probably want to add your mirrors, security.debian.org, and perhaps the appropriate deb-src lines. Here is a copy of my actual sources.list.
- preferences
- The next step is to create/edit your /etc/apt/preferences file. preferences is where the apt-pinning takes place. Normally, the highest version of an available package wins, but we will override that.
- A simple preferences file may look like this:
- Package: *
- Pin: release a=stable
- Pin-Priority: 700
- Package: *
- Pin: release a=testing
- Pin-Priority: 650
- Package: *
- Pin: release a=unstable
- Pin-Priority: 600
- Note the decending values. Since Stable has the highest pin-priority, it will be installed preferentially over Testing or Unstable.
- My actual preferences file is what you see above.
- apt-get update
- Now we are ready to apt-get update. This will add the new repositories to apt's list.
- E: Dynamic MMap ran out of room
- You may find that you receive an error like the following:
- E: Dynamic MMap ran out of room
- E: Error occured while processing sqlrelay-sqlite (NewPackage)
- E: Problem with MergeList /var/lib/apt/lists/ftp.us.debian.org_debian_dists_woody_contrib_binary-i386_Packages
- E: The package lists or status file could not be parsed or opened.
- This is caused because apt's cache is too small to handle all of the packages that are included with stable, testing, and unstable. This is also very easy to fix. Add the following line to /etc/apt/apt.conf
- APT::Cache-Limit "8388608";
- Thanks to R (Chandra) Chandras for pointing out this problem
- Installing new packages
- To install a new package, it is just as it ever was, apt-get install <package>. If the package exists in Stable, then that is what it will grab. If the package exists only in Unstable, then from Unstable it will be gotten.
- What if the package exists in both Stable and Unstable, but we want the Unstable version? There are two ways we can do that, each with a slightly different syntax, and each with a slightly different effect.
- * apt-get install <package>/unstable
- This will install the unstable version of the package, and try to meet any dependencies from Stable. This may not work, but it will tell you why:
- # apt-get install zsh/unstable
- Reading Package Lists... Done
- Building Dependency Tree... Done
- Selected version 4.0.6-7 (Debian:unstable) for zsh
- Some packages could not be installed. This may mean that you have
- requested an impossible situation or if you are using the unstable
- distribution that some required packages have not yet been created
- or been moved out of Incoming.
- Since you only requested a single operation it is extremely likely that
- the package is simply not installable and a bug report against
- that package should be filed.
- The following information may help to resolve the situation:
- Sorry, but the following packages have unmet dependencies:
- zsh: Depends: libc6 (>= 2.2.5-13) but 2.2.5-11.1 is to be installed
- E: Sorry, broken packages
- * apt-get -t unstable install <package>
- This will install the Unstable version of the package, and try to meet any dependencies from Unstable. This may produce better results.
- # apt-get -t unstable install zsh
- Reading Package Lists... Done
- Building Dependency Tree... Done
- The following extra packages will be installed:
- libc6 libc6-dev libc6-pic libdb1-compat locales
- The following NEW packages will be installed:
- libdb1-compat
- 5 packages upgraded, 1 newly installed, 0 to remove and 394 not upgraded.
- Need to get 11.6MB of archives. After unpacking 606kB will be used.
- Do you want to continue? [Y/n]
- That's it!
- Armed with a complete sources.list and a minimal preferences, you can go ahead and mix-and-match between the various Debian releases.
- Have fun!
-
复制代码
也可看看 http://www.argon.org/~roderick/apt-pinning.html
- Using APT with more than 2 sources
- APT's Default-Release setting (aka apt-get --target-release) is useful if your /etc/apt/sources.list file contains exactly 2 releases (such as stable and testing, or testing and unstable). If you want to track more than 2 releases (stable, testing, and unstable, or two of those plus a non-Debian source), it has problems. This document explains how to do better. Updates can be found at http://www.argon.org/~roderick/apt-pinning.html.
- Improved /etc/apt/preferences File
- First, here are some reasonable /etc/apt/preferences files for the common cases. The rest of this document describes what these are doing.
- * Track stable:
- Explanation: see http://www.argon.org/~roderick/apt-pinning.html
- Package: *
- Pin: release o=Debian,a=stable
- Pin-Priority: 900
- Package: *
- Pin: release o=Debian,a=testing
- Pin-Priority: 400
- Package: *
- Pin: release o=Debian,a=unstable
- Pin-Priority: 300
- Package: *
- Pin: release o=Debian
- Pin-Priority: -1
- * Track testing:
- Explanation: see http://www.argon.org/~roderick/apt-pinning.html
- Package: *
- Pin: release o=Debian,a=testing
- Pin-Priority: 900
- Package: *
- Pin: release o=Debian,a=unstable
- Pin-Priority: 300
- Package: *
- Pin: release o=Debian
- Pin-Priority: -1
- "apt-get --default-release" Has No Memory
- When you run "apt-get -t unstable install foo", this sets APT::Default-Release for this invocation of apt-get, but it doesn't affect future runs. This is useful in some circumstances, but problematic in others.
- The Good
- Say you've got testing and unstable in your sources.list, an APT::Default-Release of "testing" in apt.conf, no /etc/apt/preferences, and a package foo which is available from the releases like this:
- release version priority
- no -t switch -t unstable
- testing 1.1 990 500
- unstable 1.2 500 990
- If foo isn't installed and you run "apt-get install foo" you get version 1.1 from testing, since that version has the highest priority.
- If you run "apt-get -t unstable install foo" instead you get version 1.2 from unstable, since the -t switch temporarily causes that version to have the highest priority.
- foo will temporarily track unstable. If version 1.3 is uploaded to unstable while 1.1 is still in testing, we have:
- release version priority
- installed 1.2 100
- testing 1.1 990
- unstable 1.3 500
- The highest priority version is 1.1, but this is lower than the installed 1.2. Since the priority of 1.1 is 990 (which is lower than 1000), apt-get will not downgrade to it. The next highest priority is 1.3 at 500. Since this is greater than the installed 1.2, it is selected.
- foo will stop tracking unstable as soon as testing gets a version which is as new as the version which is currently installed. Say that version 1.3 migrates from unstable to testing, and then 1.4 is uploaded to unstable:
- release version priority
- installed 1.3 100
- testing 1.3 990
- unstable 1.4 500
- Since the unstable 1.4 version now has a lower priority than the installed version, foo is not upgraded to it. Often this is what you want.
- The Bad
- APT::Default-Release's behavior works well when you're only tracking two different releases, but with 3 or more it starts to go wrong. When you install a package from 1 of the non-default releases, it can be immediately replaced with a newer version from another of them.
- Consider:
- release version priority
- APT::Default-Release above /etc/apt/preferences
- stable 1.0 990 900
- testing 1.1 500 400
- unstable 1.2 500 300
- With an APT::Default-Release of "stable" and no /etc/apt/preferences, if you install the package with "apt-get -t testing install foo" you'll get version 1.1 from testing.
- The big problem happens when you run "apt-get upgrade": Version 1.2 from unstable has the same priority as the 1.1 just installed, so 1.1 (testing) is replaced with 1.2 (unstable)!
- I fix this problem by giving testing and unstable different priorities. With the explicit PINs from the above /etc/apt/preferences, version 1.2 from unstable has priority 300 compared to testing's 400, so the version from testing remains installed.
- The pin of other Debian releases at priority -1 is only a bit of defensiveness. This doesn't affect any Debian sources that I know of (since they're all stable, testing, or unstable), so if a new Debian source is added I'll have to decide what priority to give it. Without this pin it'd come in at the default priority of 500.
- Using Non-Debian Sources
- If you're using non-Debian sources, you've got the same problem, only more so because there's no natural ordering as there is with Debian's stable -> testing -> unstable. Without explicitly listing them in /etc/apt/preferences, they're all at priority 500, so a package installed from one source can be replaced by a higher version supplied by a different source.
- A partial fix for this is to pin each source at a different priority. Eg,
- Package: *
- Pin: origin marillat.free.fr
- Pin-Priority: 600
- Package: *
- Pin: origin www.ibiblio.org
- Pin-Priority: 610
- Package: *
- Pin: origin www.argon.org
- Pin-Priority: 620
- These settings would mean that a package installed from www.argon.org wouldn't automatically be replaced with one from the other two, and one from www.ibiblio.org wouldn't be replaced with one from marillat.free.fr.
- Working in the other direction the packages would still be replaced, however: If you've installed a package from www.ibiblio.org and a newer version becomes available from www.argon.org, apt-get will upgrade to it. The only way I know of to prevent that is to explicitly pin the package to the source via /etc/apt/preferences.
- Roderick Schertler <roderick@argon.org>
- http://www.argon.org/~roderick/
复制代码 |
|