Назад | Перейти на главную страницу

Вытащите php5 из DotDeb и игнорируйте другие пакеты

У меня установлен 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.