Subsections

Контролиране на избора на пакети за инсталиране

Ето един конфигурационен файл /etc/apt/sources.list със списък на официални и някои (примерни) неофициални източници:

###################################################################
# Official US & non-US, binary & source package entries start here
###################################################################

# BINARY PACKAGES
deb ftp://ftp.bg.debian.org/debian stable   main contrib non-free
deb ftp://ftp.bg.debian.org/debian testing  main contrib non-free
deb ftp://ftp.bg.debian.org/debian unstable main contrib non-free

deb ftp://ftp.bg.debian.org/debian-non-US stable/non-US   main contrib non-free
deb ftp://ftp.bg.debian.org/debian-non-US testing/non-US  main contrib non-free
deb ftp://ftp.bg.debian.org/debian-non-US unstable/non-US main contrib non-free

deb http://non-us.debian.org/debian-non-US stable/non-US   main contrib non-free
deb http://non-us.debian.org/debian-non-US testing/non-US  main contrib non-free
deb http://non-us.debian.org/debian-non-US unstable/non-US main contrib non-free

# Proposed & security updates
deb http://security.debian.org stable/updates main contrib non-free
deb http://security.debian.org testing/updates main contrib non-free
deb ftp://ftp.bg.debian.org/debian proposed-updates main contrib non-free
deb ftp://ftp.bg.debian.org/debian testing-proposed-updates main contrib non-free

# SOURCE PACKAGES
deb-src ftp://ftp.bg.debian.org/debian stable   main contrib non-free
deb-src ftp://ftp.bg.debian.org/debian testing  main contrib non-free
deb-src ftp://ftp.bg.debian.org/debian unstable main contrib non-free

deb-src ftp://ftp.bg.debian.org/debian-non-US stable/non-US   main contrib non-free
deb-src ftp://ftp.bg.debian.org/debian-non-US testing/non-US  main contrib non-free
deb-src ftp://ftp.bg.debian.org/debian-non-US unstable/non-US main contrib non-free

deb-src http://non-us.debian.org/debian-non-US stable/non-US   main contrib non-free
deb-src http://non-us.debian.org/debian-non-US testing/non-US  main contrib non-free
deb-src http://non-us.debian.org/debian-non-US unstable/non-US main contrib non-free

# Proposed & security updates
deb-src http://security.debian.org     stable/updates  main contrib non-free
deb-src http://security.debian.org     testing/updates  main contrib non-free
deb-src ftp://ftp.bg.debian.org/debian proposed-updates main contrib non-free
deb-src ftp://ftp.bg.debian.org/debian testing-proposed-updates  main contrib non-free


#####################################################################
# Unofficial APT entries start here - binary and/or source packages
#####################################################################
# Various unofficial sources for APT can be found here:
# http://www.internatif.org/bortzmeyer/debian/apt-sources/
# http://www.apt-get.org

#####################################################################
# Unofficial apt-build local repository - note compiler optimizations
#####################################################################
#deb file:/var/cache/apt-build/repository apt-build main

# 1) MY OWN LOCAL REPOSITORY
# ===========================
#deb file:/usr/local/src/Mplayer-dev/mplayer-netinst/MPlayer-CVS   ./


# 2) GNOME 2 semi-officials
# =========================
# after apt-get update, go examine list files in /var/lib/apt/lists/
# ex: apt-get install -t experimental gnome2
# ex: apt-get -t experimental install nautilus2 gnome-panel2
#     gnome-applets2 gnome-terminal2 gnome-control-center2 fam
#     msttcorefonts ...

deb http://ftp.de.debian.org/debian/ ../project/experimental main contrib non-free
deb-src http://ftp.de.debian.org/debian/ ../project/experimental main contrib non-free

# apt-get install gnome2
#deb http://people.debian.org/~walters/debian/staging/ ./


# 3)  KDE 3.x unofficials
# =======================
# SEE http://davidpashley.com/debian-kde/faq.html
#
# for KDE 3.1 unofficial deb's see http://wh9.tu-dresden.de/kde3/

# for stable backport from download.kde.org

#deb http://download.kde.org/stable/3.1.1/Debian stable main
#deb-src http://download.kde.org/stable/3.1.1/Debian stable main

# KOffice, kdeartwork, kdeaddons, kdeedu, kdesdk, kdetoys, kile,
# kbear, quanta, kcd, kcpuload, kdbg, knetload, konq-speaker, kprof
#deb http://people.debian.org/~bab/kde3 ./

# kdevelop
#deb http://people.debian.org/~njordan kde3.0/

# ksensors, kvim, kxicq2, krusader, yammi, arson
#deb http://ers.linuxforum.hu/kde3deb/ ./


# 4) Joey Hess's kitenet development network http://kitenet.net/programs/debs.cgi
# ===============================================================================
# very powerful perl version of apt-src program + more ...
#    deb     http://kitenet.net/programs/code/debian /
#    deb-src http://kitenet.net/programs/code/debian /

 
# 5) OPERA
# ========
deb http://www.opera.com/debian stable opera non-free


# 6) ICKLE
# ========
#deb http://stud3.tuwien.ac.at/~e0027500/debian/ ./


# 7) Pixie Plus
# =============
#deb http://arachni.kiwi.uni-hamburg.de/~harlekin/binary-i386/ ./


# 8) Blackdown java files
# =======================
#deb ftp://metalab.unc.edu/pub/linux/devel/lang/java/blackdown.org/debian woody non-free

# 9) Jonas site - lame, pine binaries, etc ... , do in mind apt's preferences !
# ==============================================================================
#    deb http://debian.jones.dk/ unstable misc
#    deb http://debian.jones.dk/ testing misc

# 10) snapshot.debian.net - Fumitoshi UKAI <ukai@debian.or.jp>
# ============================================================

# Different from usual mirror site, it provides daily snapshot since
# 2002/06/04.  It uses pdumpfs to backup debian & debian-non-US
# daily. This is useful in case you got broken version of package and
# you want to get old working version of package without searching
# around delayed debian mirror sites. Whenever you like, you can
# access debian archive on specific date. For example, you can get
# debian packages of June 20th from

# http://snapshot.debian.net/archive/2002/06/20/debian
# or apt-line
#deb http://snapshot.debian.net/archive/2002/06/20/debian unstable main contrib non-free

# You can also get debian packages on relative date, for instance, last week's
# debian from http://snapshot.debian.net/archive/date/last-week/debian/
# or apt-line
#deb http://snapshot.debian.net/archive/date/last-week/debian unstable main contrib non-free
# In place of 'last-week', you can use any datestr recognized by date(1).
# You can also access all version of debian package in snapshot.debian.net by using the following apt-line
#deb http://snapshot.debian.net/archive pool packagename1 packagename2 ....
# This is useful if you don't know when specific version of package you want
# was installed in debian but know which version of package.

Вече трябва да сте се ориентирали как стоят нещата, и може да го ползвате, допълвайки го или коментирайки излишното. Ето ви и още няколко примерни конфигурационни файлове:

/etc/apt/apt-build.conf:

cc = gcc-2.95
Olevel = -O3
march = -march=i686
mcpu = -mcpu=i686

/etc/apt/apt.conf:

/* This file is a sample configuration file with a few harmless sample 
   options.   
*/

APT 
{
  // Options for apt-get
  Get 
  {
     Download-Only "false";
  };
  
};

// Always show packages to be upgraded (-u)
APT::Get::Show-Upgraded "true";

// Options for the downloading routines
Acquire
{
  Retries "0";
};

// Things that effect the APT dselect method
DSelect 
{
  Clean "auto";   // always|auto|prompt|never
};

DPkg 
{
  // Probably don't want to use force-downgrade..
  Options {"--force-overwrite";}
}

    APT::Default-Release "testing";
    APT::Cache-Limit "25165824";

// All dpsyco packages should be updated after installation.
DPkg::Post-Invoke {"/usr/sbin/update-dpsyco || true";};

/etc/apt/apt-file.conf:

# cache directory. All Съдържание files will be stored in this directory
cache = /var/cache/auto-apt

# verbose. Run apt-file in verbose mode
verbose off

# arch. Processor architecture (defaults to host architecture)
# arch = i386

# sources-list. Where to find the `sources-list' file
sources-list = /etc/apt/sources.list

# ftp-passive. Switch to passive ftp connection
ftp-passive on

# case-sensitive. Find files in case sensitive mode
case-sensitive on

# recursive. Search file in a recursive mode
recursive on

/etc/apt/preferences (I):

Package: *
Pin: release o=Jones
Pin-Priority: 99

/etc/apt/preferences (II):

Package: *
Pin: release a=stable
Pin-Priority: 200

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

Package: *
Pin: release a=unstable
Pin-Priority: 400

/etc/apt/preferences (III):

# OLD VALUES BEGIN
# Package: *
# Pin: release o=Jones
# Pin-Priority: 99
# OLD VALUES END

#  Package: *
# Pin: release v=3.0*
# Pin-Priority: 1001

# Using APT with both Debian and non-Debian sources
# ----------------------------------------------------------------
#
# APT's Default-Release setting (aka "apt-get --target-release") is an
# extremely useful feature, but it has problems if you're using non-Debian
# entries in your /etc/apt/sources.list file.  This file improves the
# situation a bit.
#
# Copy this file to /etc/apt/preferences and edit the following Pin:
# line, replacing "testing" with "stable" if that's your preferences.
# The rest of the file contains an explanation, you don't have to
# worry about anything other than this line if you don't care about
# the details.
#
# ----------------------------------------------------------------

Pin: release a=testing

# ----------------------------------------------------------------
#
# The above Pin: is your default release.  The way it's set is the
# equivalent of the apt.conf APT::Default-Release setting.  It's
# convenient to have it here instead so that all the pinning settings
# are in one place.
#

Package: *
Pin-Priority: 900

# Pin unstable at a lower than default priority.  Here's an example to
# show why this is necessary.  Consider a package which is available
# from 3 releases like this:
#
#    rel.       ver.    without pin     with pin
#    ----       ----    -----------     --------
#    testing    1.0     900             900
#    local      1.1     500             500
#    unstable   1.2     500             200
#
# Without this pin version 1.1 installed from local would be immediately
# upgraded to the 1.2 version from unstable, since they're both priority
# 500.
#
# The priority of this pin has to be > 100 (the priority of currently
# installed packages) else a package installed from unstable wouldn't
# track new versions from unstable.
#
# This isn't a complete solution.  Say your apt.sources included
# Debian's testing and unstable, plus 3 external sources A, B, and
# C.  It'd be nice to be able to install a package from B and have
# it always come from B (or from the default release, if a newer
# version gets there), but I don't see a way to do that without
# listing the other releases here explicitly.  Since A, B, and C all
# have the same priority (500, the default priority) a package from
# B can be replaced by a newer one from C.  If this is a problem for
# you, the best solution I can currently offer is to add a new pin
# here for each of your external sources.  Even then I don't see a
# way to do per-release mutual exclusion, so you'll still have to
# order them.  If they don't provide a Release file you should be
# able to use a specifier like "Pin: origin www.somesource.com".

Package: *
Pin: release o=Debian
Pin-Priority: 200

FIXME: да се обясни за apt-cdrom, и въобще за /usr/lib/apt/methods/

Избор на release, от който да се вземат пакети

Нека имаме един такъв разширен /etc/apt/sources.list, както е показан по-горе, с редове за official stable, testing, unstable, experimental и дузина unofficials, това е само пример за демонстрация, не е задължително винаги на подхождате така глобално). Освен това в /etc/apt/apt.conf можем да укажем например

APT::Default-Release "testing"

така че apt по подразбиране да точи от testing и само с изрично указана опция -t, -target-release, -default-release, подавана на apt, да се предприема теглене от stable, unstable и др. Aко няма указано нищо за APT::Default-Release, не е подадена опция -t, и освен това няма промяна от потребителя в приоритета на пакетите чрез Package:, Pin: или Pin-Priority: в /etc/apt/preferences, което е с по-голяма тежест от APT::Default-Release, apt ще предпочете най-голямата версия на пакета. Ето какво бихме получили:

Само този пакет да се тегли от unstable и нищо друго, ако има неудоволетворени зависимости apt ще каже:

# apt-get install пакет/unstable

Apt има разрешение освен за пакет от unstable да вземе и неговите зависимости, ако има такива, пак от там:

# apt-get install -t unstable пакет

Опцията -s е за симулация, т.е. ползвайте я, за да проверите какво би се получило, като нищо няма да бъде изтеглено и инсталирано, само за проверка.

# apt-get install пакет1/stable пакет2/testing пакет3/unstable -s

Дори може да се конкретизира и до версия на пакет и т.н.

# apt-get install пакет=версия

Имайте предвид, че по този начин, а и изброените по-горе, може и да downgrade даден инсталиран вече във вашата система пакет, като при ситуация на downgrade apt предупреждава изрично, че минавате към по-ниска версия на пакета.

# apt-get install пакет/stable

Възстановяване на стари версии на пакети

Състоянието на unstable много бързо се променя, Testing също, но по-бавно. Stable само със security updates, така че за кратко време влизат доста нови packages, като някои стари версии може да изпадат от официалните архиви и т.н. Ако търсите някоя по-стара версия на даден пакет и я няма в Unstable или Testing към момента, а така също и във вашия локален кеш /var/cache/apt/archives/, но е била там преди известно време, то може да добавяте и редове във файла sources.list(5) към http://snapshot.debian.net за търсене на такива по-стари и изпаднали към момента версии на отделните пакети. На сайта си пише как се ползва.

Има предвидена и още една възможност в подобни ситуации. Ако във вашата система имате инсталирана версия на пакет, който е изпаднал към момента от официалните stable/testing/unstable, освен това сте го премахнали и от локалния си кеш на apt и отгоре на това не ви се търси точно тази версия в архивите на http://snapshot.debian.net, то може да използвате Perl скрипта dpkg-repack, който идва с едноименния пакет dpkg-repack. Преди да upgrade-вате така дефицитните версии на интересуващите ви пакети, изпълнете:

# dpkg-repack пакет

Инсталираният в системата пакет ще бъде събран пак като инсталационен .deb пакет и сега вече спокойно може да upgrade-вате към нови версии на дадените пакети, при което, ако те нещо не ви харесат, ги премахвате или форсирате downgrade за тях.

Приоритети на пакетите

Apt отчита вътрешно списък с приоритети на пакетите (candidate version policy, или начина, по които те да бъдат избирани от apt), описание на които ще намерите в apt_preferences(5). Там е обяснено и какво са non-automatic priorities и как може да се променят подразбиращите се такива, а оттам и селективното поведение на apt. Когато правите такива промени, винаги използвайте -s опцията на apt, за да се уверите, че ще постигнете точно това, което желаете, избягвайки нежелателни изненади. Изпълнявайки:

# apt-cache policy пакет

ще получите информация за Installed и Candidate версиите и Version Table, в която за всяка достъпна версия на пакета се изписват приоритета и мястото, от където евентуално ще изтеглите този пакет.

FIXME: Страницата е вече променена. Един пример http://people.debian.org/~walters/gnome2.html за това как може да се промени приоритета на packages от experimental (трябва да имате experimental entries в /etc/apt/sources.list, и да сте изпълнили apt-get update), за да бъдат предпочетени те от APT пред тези от unstable (Sid). В случая е даден пример с GNOME 2 packages (виж отговора на предпоследния въпрос). Забележете и интересно предложение за debfoster -u, което се дава. Чрез промяна на приоритета на пакетите може да се постигне и т.н. им "`заковаване"'. FIXME: Реферира се apt-howto-bg.

Downgrade

Downgrade-ването на цялата система, да речем от настоящия Testing към настоящия Stable, може да се разглежда като специален случай на цялостен upgrade от Stable към Testing, който вие изпълнявате чрез

# apt-get dist-upgrade

Това може да стане чрез pinning feature на apt-0.5.4. Вижте APT HOWTO и apt_preferences(5) за повече подробности. На практика debian packaging tools са толкова развити, че спокойно може да се програмира върху тях, ползвайки ги като stable API. Например статията How I Downgraded Testing to Stable показва как може да постигнете горното по един такъв начин със създадени от вас приложения. Разбира се, трябва да знаете какво правите, имайки поне базови познания и опит с debian packaging system. Например, че ако "`слизате"' от Testing към Stable, трябва да имате предвид какво ще правите с пакетите, които ги има в Testing и ги имате инсталирани на вашата система и които към момента ги няма в Stable. Известни познания за shell програмиране въобще не пречат ;-). Шелът ви дава достатъчно възможности, но с употребата на Perl или Python скриптиране за подобни ваши цели можете да направите нещата наистина сериозни. Всъщност добър пример за административни Perl скриптове са пакетите debconf и debhelper, чиито сорсове можете да разгледате. По подобен начин ако решите, че apt-src, apt-build, pbuilder и т.н. не ви предлагат достатъчно възможности за получаването на binary packages от съответните source packages, може да погледнете в кодовете им и да запрограмирате нещо аналогично и по-специфично за вашите цели, като отчитате, че ще се нуждаете само от source packages на тези binary packages, които вие имате инсталирани, плюс необходимото за техния успешен build.

Виртуални и мета-пакети

Една от силните страни на пакетната система на Debian това е наличието на виртуални и мета-пакети. Те спестяват много време и усилия на потребителите.

Виртуални пакети - Има пакети, които предлагат същата или почти същата функционалност. В такъв случай е добра идея да се създаде виртуален пакет, който да обедини тези функционалности. Тези пакети се наричат "виртуални пакети". Виртуалните пакети съществуват само логически - т.е те не са истински пакети (от там идва и името им - виртуални). Тази им функционалност е доста полезна за хората, които не са запознати с конкретни имена на програми, но знаят каква функционалност търсят. Например ако се търси ftp сървър не е нужно потребителят да знае конкретни имена на продукти и да търси не-ефективно (в отговорите на apt-cache ще има доста програми, които всъщност не са ftp сървъри, а просто имат някаква връзка), нужно е просто да се изпълни:

# apt-cache search ftp-server

Отговорът вече е повече от задоволителен:

bsd-ftpd - Port of the OpenBSD FTP server
ftpd - FTP server
ftpd-ssl - FTP server with SSL encryption support.
heimdal-servers - Servers for Heimdal Kerberos
kerberos4kth-servers - Servers for Kerberos4 From KTH
krb5-ftpd - Secure FTP server supporting MIT Kerberos
lukemftpd - The enhanced ftp daemon from NetBSD.
vsftpd - The Very Secure FTP Daemon
wu-ftpd - powerful and widely used FTP server
......
.....

Информация за наличните виртуални пакети в Debian можете да намерите на адрес: doc/package-developer/virtual-package-names-list.text в най-близкия локален mirror на Debian.org например: bg.debian.org

Ако имате инсталиран пакета debian-policy на вашата система можете да прочетете този списък и от: /usr/share/doc/debian-policy/virtual-package-names-list.txt.gz

Мета-пакети - Мета-пакетите са още един много полезен инструмент за начинаещите и за напредналите в Debian. Както добре се знае един от основните проблеми при запознаването с Linux, и при боравенето със софтуера впоследствие е как потребителя да е сигурен, че е инсталирал всички пакети, необходими му за работа или използване на всичките възможности на дадена програма. Мета-пакетите правят точно това. Най-добър пример за мета-пакети са тези на kde, gnome и x-window-system. С инсталирането на x-window-system ще се инсталира всичко необходимо за да стартирате графична среда във вашия Debian. Съответно инсталирането на мета-пакета kde ще ви снабди с KDE и пълното му обкръжение от софтуер: kdegraphics, koffice.. и т.н За да разберете с какви мета-пакети можете да боравите във вашата система изпълнете:

#apt-cache search metapackage

Системата ще върне списък със всички мета-пакети, които можете да използвате:

arts - Analog Realtime Synthesizer (aRts) metapackage
debian-reference - A metapackage to install all translations of Debian Reference
education-astronomy - DebianEdu astronomy related applications
education-chemistry - DebianEdu chemistry related applications
education-desktop-gnome - DebianEdu GNOME desktop applications
education-desktop-kde - DebianEdu KDE desktop applications
education-desktop-other - DebianEdu desktop applications (non-GNOME, non-KDE)
education-electronics - DebianEdu electronics related applications
education-geography - DebianEdu applications for geography
education-graphics - DebianEdu graphics related applications
.....
....

Алтернативи на dpkg и apt

За пояснение, самата инсталация на packages се прави от dpkg(8) (аналогично на rpm), а apt се използва за внасяне на допълнителна логика върху всичко това и правене на по-специални магии, които не са работа на dpkg(8) да знае и може (той си има достатъчно друга работа), на него apt-get(8) му подава готов набор от пакети за обработка. Реално може да ползвате и само dpkg(8) (точно както и програмата rpm) и без надстройка като apt-get(8) (или dselect(8)), но ако има някакви неудоволетворени зависимости и/или конфликти, dpkg(8) само ще изреве и ще спре работа и ще се оплаква докато не му ги доставите и подадете ръчно в съответния ред, вместо да даде предложения за решения и т.н., което е от компетенцията на apt-get(8) (и dselect(8)). Такива надстройки има и за rpm, разбира се. Има и графични надстройки и над apt като aptitude, synaptic, gsynaptic, stormpkg, deity, gnome-apt, kpackage. Последните две май са лош пример за такива ;-)

Нека не се бъркат програмите пакетни менажери (като dpkg и rpm) със съответните пакетни бинарни формати (.deb и .rpm), с които те работят. Тези бинарни файлове (да речем, .deb) са просто един архив, който се разпознава и от програми като ar(1), tar(1), file(1). Te се получават от съответните сорсове (source packages). Те са си .tgz или .tar.gz архив, като са конфигурирани по подходящ начин, за да се компилират и инсталират коректно на съответната система, т.е. спазва се някакъв стил и политика. Реално пакетният менажер rpm го има и в Debian, но не бива да се ползва директно за инсталиране на .rpm пакети, най-малкото понеже тези пакети не са подходящо конфигурани и едва ли спазват стила и практиката на Debian при изготвянето на пакети, т.е. те не го спазват и това не им е работа, разбира се. Той е сложен за създаване на такива при добро желание от страна на потребителя. Има и един пакет alien, който е предназначен уж за подобно конвертиране на бинарните пакетни файлове, но трябва да се убедите и разгледате какво и как конвертира, защото не винаги го прави коректно. Има maintainer scripts, които едва ли се генерират при едно такова конвертиране, такива scripts просто се създават за debian source packages и са си специфични за Debian. Такива .rpm пакети са конфигурирани за Red Hat, Mandrake, SuSE и т.н., дори за съответните версии на тези дистрибуции, като хич не е добра идея .rpm пакет, конфигуриран за Red Hat, да се инсталира, особено форсирано, на нещо различно от Red Hat като Mandrake, SuSE и т.н. Не си чупете дистрибуциите по този смешен начин, гледайки на пакетните файлове и пакетните менажери като на ябълки и круши ... ;-) Това хич не е GNU/Linux way... Подобно поведение от страна на потребителите е лошо наследство от работата на сляпо с предишна операционна система (затворена), която лесно се обозава и плаче за преинсталация на определен период от време. Това са смешни истории и мисля, че са безкрайно ясни.

FIXME: Да се обясни повече за apt-listchanges, apt-listbugs, apt-show-source, apt-show-versions.

Документация

Като нов потребител за начало ще е полезно да прочетете:



George Danchev 2004-12-25