У меня установлен Debian squeeze, и это мой /etc/apt/sources.list
файл:
# Debian packages for stable
deb http://ftp.lug.ro/debian/ stable main contrib non-free
# Security updates for stable
deb http://security.debian.org/ stable/updates main contrib non-free
# DotDeb - http://www.dotdeb.org/
deb ftp://download.srv.ro/pub/dotdeb/ stable all
deb-src ftp://download.srv.ro/pub/dotdeb stable all
Что я пытаюсь сделать, так это настроить штифт, чтобы я мог установить только php5
пакет из dotdeb и игнорируйте все остальное из этого репозитория. Я пробовал это:
# cat /etc/apt/preferences
Package: *
Pin: release o=packages.dotdeb.org
Pin-Priority: 100
Package: php5
Pin: release o=packages.dotdeb.org
Pin-Priority: 900
# apt-cache policy php5
php5:
Installed: 5.3.3-7+squeeze14
Candidate: 5.3.17-1~dotdeb.0
Package pin: 5.3.17-1~dotdeb.0
Version table:
5.3.17-1~dotdeb.0 900
100 ftp://download.srv.ro/pub/dotdeb/ stable/all i386 Packages
*** 5.3.3-7+squeeze14 900
500 http://ftp.lug.ro/debian/ stable/main i386 Packages
500 http://security.debian.org/ stable/updates/main i386 Packages
100 /var/lib/dpkg/status
но безуспешно. Возможно, я не очень хорошо понимаю, как работает закрепление.
ОБНОВИТЬ
Бег apt-get -s upgrade
дает мне:
# apt-get -s upgrade
<-- output clipped -->
The following packages have been kept back:
php5
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
Кроме того, я только что заметил, что бег apt-get -s install php5
дает мне:
# apt-get -s install php5
<-- output clipped -->
The following information may help to resolve the situation:
The following packages have unmet dependencies:
php5 : Depends: libapache2-mod-php5 (>= 5.3.17-1~dotdeb.0) but 5.3.3-7+squeeze14 is to be installed or
libapache2-mod-php5filter (>= 5.3.17-1~dotdeb.0) but it is not going to be installed or
php5-cgi (>= 5.3.17-1~dotdeb.0) but 5.3.3-7+squeeze14 is to be installed or
php5-fpm (>= 5.3.17-1~dotdeb.0) but it is not going to be installed
Depends: php5-common (>= 5.3.17-1~dotdeb.0) but 5.3.3-7+squeeze14 is to be installed
E: Broken packages
Так что это может быть причиной того, что пакет не установлен. Если действительно проблема, как я могу закрепить несколько пакетов одновременно? Или нужно вручную закреплять каждую упаковку?
Все дело в том, чтобы php
с участием readline
поддержка, чтобы я мог использовать php
интерактивный режим с php -a
. Я нашел хороший пост о том, как настроить репозиторий Dotdeb apt на Debian и использовал эту команду:
PACKAGES=$(command wget "http://packages.dotdeb.org/dists/squeeze/php5/binary-$(command dpkg --print-architecture)" \
--quiet --output-document=- \
| command grep "href=" | command grep -v "h1" | command grep -v "\.\./" \
| command sed -e 's/^[^>]*>\([^_]*\)_.*$/\1/' | command tr "\n" " ")
Получить все php5
связанные пакеты и обновленные /etc/apt/preferences
чтобы выглядеть так:
Package: *
Pin: release o=packages.dotdeb.org
Pin-Priority: 100
Package: libapache2-mod-php5 libapache2-mod-php5filter php-pear php5-cgi php5-cli php5-common php5-curl php5-dbg php5-dev php5-enchant php5-fpm php5-gd php5-gmp php5-imap php5-interbase php5-intl php5-ldap php5-mcrypt php5-mysql php5-odbc php5-pgsql php5-pspell php5-recode php5-snmp php5-sqlite php5-sybase php5-tidy php5-xmlrpc php5-xsl php5
Pin: release o=packages.dotdeb.org
Pin-Priority: 900
И теперь apt-get установит все необходимые пакеты:
# apt-get -s install php5
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
libapache2-mod-php5 php5-cli php5-common php5-curl
Suggested packages:
php-pear
The following packages will be upgraded:
libapache2-mod-php5 php5 php5-cli php5-common php5-curl
5 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Inst php5-cli [5.3.3-7+squeeze14] (5.3.17-1~dotdeb.0 packages.dotdeb.org:stable [i386]) []
Inst php5-curl [5.3.3-7+squeeze14] (5.3.17-1~dotdeb.0 packages.dotdeb.org:stable [i386]) []
Inst libapache2-mod-php5 [5.3.3-7+squeeze14] (5.3.17-1~dotdeb.0 packages.dotdeb.org:stable [i386]) []
Inst php5-common [5.3.3-7+squeeze14] (5.3.17-1~dotdeb.0 packages.dotdeb.org:stable [i386])
Inst php5 [5.3.3-7+squeeze14] (5.3.17-1~dotdeb.0 packages.dotdeb.org:stable [all])
Conf php5-common (5.3.17-1~dotdeb.0 packages.dotdeb.org:stable [i386])
Conf php5-cli (5.3.17-1~dotdeb.0 packages.dotdeb.org:stable [i386])
Conf libapache2-mod-php5 (5.3.17-1~dotdeb.0 packages.dotdeb.org:stable [i386])
Conf php5-curl (5.3.17-1~dotdeb.0 packages.dotdeb.org:stable [i386])
Conf php5 (5.3.17-1~dotdeb.0 packages.dotdeb.org:stable [all])
Вы не можете закрепить и / или установить только в php5
пакет. Помимо того, что PHP является «мета-пакетом», который устанавливает другие пакеты, он также имеет ряд различных модулей, которые также необходимо установить.
Если вы хотите закрепить вещи таким образом, вам нужно будет закрепить (как минимум) либо libapache2-mod-php5
(или версия с фильтром) или php5-cgi
или php5-fpm
для самого PHP, а php5-common
пакет. Любые модули PHP, которые вам нужны, также должны быть закреплены и установлены из этого репозитория, как и любые библиотеки, от которых зависят эти плагины, не той же версии, что и в стабильной версии Debian.