Debian поставить пакет из testing

Обновлено: 12.05.2024

Как известно, дебиан stable всегда стабилен, аки кирпич. Testing же становится таковым лишь во второй половине пребывания в тестинге. Что делать, если в вашем любимом Debian Lenny в sources.list повсюду был прописан testing, и, когда 14 февраля Lenny стал стабильным, ваша система обновилась до Squeeze, принеся тем самым кучу мелких и неприятных багов? Официально даунгрейд не поддерживается — но это не значит, что он не возможен. Я не смог найти инструкцию для даунгрейда со Squeeze (все инструкции довольно стары), посему решил написать эту.

Итак, для начала нам необходимо залезть в /etc/apt/sources.list и заменить testing и squeeze на stable, приведя всё примерно к такому виду:


Итак, для начала нам понадобится разобраться с apt-pinning. Создаём файл /etc/apt/preferences с подобным содержанием:

Package: *
Pin: release a=stable
Pin-Priority: 1001
Package: *
Pin: release a=testing
Pin-Priority: 60
Package: *
Pin: release a=unstable
Pin-Priority: 50


Таким образом, приоритет будет отдаваться пакетам из стабильного репозитория.
Теперь обновляем информацию о пакетах:


Если всё идёт хорошо, то нам покажут, что необходимо даунгрейдить около тысячи пакетов, удалить несколько десятков (причём среди них могут оказаться не только какие-то маловажные вещи, но и вполне себе используемый софт, в моём случае — gedit и deluge. Ничего, поставим потом). Соглашаемся, даунгрейдится некоторое количество пакетов, натыкаемся на первую ошибку:

lenny1_i386.deb (--unpack):
trying to overwrite `/usr/lib/gstreamer-0.10/libgstcdio.so', which is also in package gstreamer0.10-plugins-ugly
dpkg-deb: subprocess paste killed by signal (Broken pipe)


Лечим её, в общем-то, методом тыка. С некоторыми помогает:


Некоторые же удаётся вылечить через Synaptic: либо Edit > Broken Packages, либо пользуемся фильтром Broken Packages и пробуем удалить/переустановить по одному.
Зачастую поставить с --force-overwrite не удаётся из-за неудовлетворённых зависимостей:

$ sudo dpkg -i --force-overwrite /var/cache/apt/archives/gconf2-common_2.22.0-1_all.deb
dpkg - warning: downgrading gconf2-common from 2.26.0-1 to 2.22.0-1.
(Reading database . 248673 files and directories currently installed.)
Preparing to replace gconf2-common 2.26.0-1 (using . /gconf2-common_2.22.0-1_all.deb) .
Unpacking replacement gconf2-common .
dpkg: dependency problems prevent configuration of gconf2-common:
gconf2-common depends on ucf; however:
Package ucf is not configured yet.
dpkg: error processing gconf2-common (--install):
dependency problems - leaving unconfigured
Errors were encountered while processing:
gconf2-common

$ sudo dpkg -i --force-overwrite /var/cache/apt/archives/ucf_3.0016_all.deb
(Reading database . 248668 files and directories currently installed.)
Preparing to replace ucf 3.0016 (using . /archives/ucf_3.0016_all.deb) .
Unpacking replacement ucf .
Setting up ucf (3.0016) .
Processing triggers for man-db .

$ sudo dpkg -i --force-overwrite /var/cache/apt/archives/gconf2-common_2.22.0-1_all.deb
(Reading database . 248668 files and directories currently installed.)
Preparing to replace gconf2-common 2.22.0-1 (using . /gconf2-common_2.22.0-1_all.deb) .
Unpacking replacement gconf2-common .
Setting up gconf2-common (2.22.0-1) .
Replacing config file /etc/gconf/2/path with new version


Есть пакеты, зависимости к которым мы не сможем удовлетворить — они появились только в Squeeze. Значит, они нам попросту не нужны:


Если от них что-то зависит — замечательно, сначала удаляем зависящий пакет, затем возвращаемся к этому.
Продравшись через первую (самую большую) порцию ошибок, возобновляем наш


и повторяем процедуру.
В итоге, мы имеем полностью нормальный Debian Lenny. Хотя, разумеется, возможны и проблемы. В моём случае, проблемы возникли с библиотекой /usr/lib/libgssapi_krb5.so.2. Без неё нельзя было залогиниться (иначе как в безопасном режиме), и не работали некоторые программы. Пришлось взять эту библиотеку из Squeeze и поместить её в Lenny — всё заработало идеально.

Сегодня решил сделать небольшую заметку по том, как установить пакет из testing или unstable в Debian, поскольку это довольно актуальное действие для пользователей, которые используют данный дистрибутив.

Суть вопроса

Как известно, Debian довольно уникальный дистрибутив, который придерживатся двух принципов: свобода и стабильность. То есть разработчики включают в него только свободное ПО, хорошо протестированное и, соответственно, довольно стабильное. Но, к сожалению, стабильное, часто означает устаревшее, ведь чтобы программа работала без сбоев, нужно ее тестировать довольно долго. Как правило, за это время разработчики успевают выпустить уже новую версию програмы. Поэтому, стабильные выпуски Debian включают в себя много ПО, которое на несколько версий ниже, чем актуальная версия программы, на сайте разработчика. Как же получить свежую версию такогй программы в Debian?

Вам, вероятно, известно, что перед тем, как выпуск Debian становится стабильным, он проходит несколько стадий разработки. Это так называемые: testing, unstable и experimental выпуски, и в них ПО более свежее, часто актуальное. Поэтому, если вам нужна более новая версия пакета в своем Debian, ее можно установить из репозиториев этих веток дистрибутива.

Как установить пакет из testing или unstable в Debian

Это довольно простая процедура, которая, если вы делаете это первый раз, состоит буквально из 4 шагов:

  • добавлене нового источника в sources.list;
  • установка текущего выпуска дистрибутива основным;
  • обновление индексных пакетов;
  • установка нужной программы.

В дальнейшем вам нужно будет выполнять лишь два последних пункта. Ну а теперь, перейдем к практике, во время которой мы, для примера, установим свежую версию браузера Iceweasel.

Установка Iceweasel в Debian из unstable

  • Открываем от имени администратора файл sources.list:

Вместо mousepad подставляете свой текстовый редактор;

По сути, вы копируете два раза свой основной источник и заменяете в нем имя ветки на unstable и testing.

  • Сохраняем изменения.
  • Для того, чтобы во время установки программы, из добавленных источников не потянулись ненужные зависимости, нужно указать системе, что текущая версия дистрибутива является основной. Для этого нужно добавить соответствующую пометку в файл /etc/apt/apt.conf:

Естественно, если вы пользуетесь, например testing, в скобках нужно указать его, то есть будет:

Теперь осталось обновить индексные файлы, дабы система узнала о новых источниках:

И, наконец, можно установить наш Iceweasel, для этого нужно использовать следущую конструкцию:

Так, если мы хотим установить Iceweasel из unstable, комманда будет следующая:

Если вы пользуетесь Debian, то наверняка знаете, что порой может понадобиться самая свежая версия какого-либо компонента. Или та, которой нет в стабильном выпуске, но её добавили в тестируемый. Ставить ради этого другой дистрибутив, в котором свежее ПО доступно всегда, вы наверняка не станете, если уже настроили себе систему и привыкли к ней. Можно собрать нужную вам программу из исходного кода. Но это тоже не всегда может получиться. Программа может не собраться, долго собираться или вообще иметь закрытый исходный код. В таких случаях, можно установить эту программу из тестовой или нестабильной ветки Debian. Делать это нужно правильно. И о том как правильно это сделать и пойдёт речь в статье.

Как известно, Debian существует в 4 ветках (есть ещё 5, но это полуветка для разработчиков): oldstable (предыдущий стабильный выпуск), stable (текущий стабильный выпуск), testing (тестируемый, будущий стабильный) и unstable (также известный как sid, нестабильная ветка, в которой идёт постоянный поток обновлений компонентов). На данный момент, oldstable - это Wheezy, или Debian 7, stable - Debian 8 Jessie, testing - Debian 9 Stretch, ну и unstable - вечный sid. Также существует репозиторий Backports, в который переносятся свежие версии и некоторые программы, которые достаточно стабильны для stable, но не успели попасть в релиз (или просто могут быть установленны не нарушая работу системы). Но в Backports никогда не прилетят, скажем, новые версии графических окружений. И тут можно прибегнуть к установке оного из тестируемой или нестабильной ветке. Хочу обратить ваше внимание на то, что несмотря на то что это возможно, и есть способ настройки репозиториев, разработчики Debian этого не поощряют. Будьте очень внимательны устанавливая ПО из testing и unstable.

Для того чтобы при установке или обновлении программы из testing/unstable, вся система не превратилась в не пойми что, необходимо настроить приоритеты для пакетов. Более высокий приоритет означает, что пакет не заменится пакетом с низким приоритетом, если это не указать явно. Базовая система должна остаться stable. Для настройки приоритетов, существует файл под названием preferences. Давайте создадим его и впишем туда нужные настройки:

sudo nano /etc/apt/preferences

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

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

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

Package - на какие пакеты распространяется приоритет. Звёздочка говорит что на все без исключения.
Pin - название ветки дистрибутива.
Pin-priority - собственно, приоритет. Чем он выше - тем жёстче будет закреплена ветка. Приоритет выше 1000 позволит произвести даунгрейд пакетов до той ветки, в которой он установлен. Потому если вы переборщили с экспериментами - выставляйте на stable приоритет 1001, обновляйте список пакетов и делайте dist-upgrade.

Как мы видим, репозиторий unstable у нас имеет наименьший приоритет. Возможно он вам не понадобится, но включить его нужно по той причине, что бывает программу переместили в testing, а часть её зависимостей осталась в unstable. И программа, естественно, не установится. Ок, приоритеты мы настроили. Теперь нужно подключить эти репозитории:

sudo nano /etc/apt/sources.list

Добавляем в конец следующие строки:

Далее сохраняем и обновляем список пакетов:

sudo apt-get update

Установка программ идёт двумя способами:

sudo apt install -t testing имяпрограммы
sudo apt install имяпрограммы/testing

При первом способе установки, пакетный менеджер попытается обновить все те компоненты, которые нужны для программы. И установит её (разумеется после вашего согласия). При втором способе, пакетный менеджер попытается использовать существующие версии зависимостей. И если они не подойдут - то программу он не установит. Поэтому для более безопасной установки, рекомендуется второй способ. Ещё раз напоминаю, что этим лучше не увлекаться. Но при правильном использовании вы не только сохраните общую стабильность системы, но и получить свежие версии программ. Для более подробной информации по настройкам, наберите в терминале:

Подскажите, тут попросили помочь поставить php5-ffmpeg. Проблема в том, что в стабильной ветке этой хрени нет, есть в testing, как правильно ставить оттуда?

Надо просто добавить в /etc/apt/sources.list:

на это apt-get update выдаёт ошибку:

Dynamic MMap ran out of room
Problem with MergeList . и т.д.

Как правильно делать?



p.s. а apt-get -t testing php5-ffmpeg говорит, что пакет не найден.


не удастся вам поставить 1 пакет из тестинга на oldstable
у пакета есть зависимости, у зависимостей тоже есть зависимости,
вам из за этого пакетика придется обновить практически все, включая glibc.
варианта 2

1) собираете сами, или configure && make && make install или берете исходники пакета, можно с того же дебиана и собираете как положено пакет(ы)


Надо просто добавить в /etc/apt/sources.list:

на это apt-get update выдаёт ошибку:

Dynamic MMap ran out of room
Problem with MergeList . и т.д.


<<< умница apt-get, не дал вам испортить, я так понимаю что, чужой сервер


ээ. а почему чужой? апдейт же обновляет индексный файл у меня или что там оно используется.


>тут попросили помочь поставить

про свое так не говорят )


А, вы про то, что не себе делаю, понял теперь. Ничего страшного не произошло бы, удалили бы строчку, да заново апдейт сделали бы.


не повезло вам, нету в бэкпортах
придется собирать )


кстати , а почему именно тестинг? в lenny (stable) тоже же есть это,
только вам все равно придется кучу всего обновлять если ставить с lenny, так что получается что будет почти обновление с oldstable до stable

вообще:
apt-get install -t testing php5-ffmpeg

И да, etch old-stable уже , а указывая testing для etch - тем самым вы уже перескакиваете через текущую версию stable (lenny) и в которой так же имеется пакет php5-ffmpeg.

Хотя если только будут приколы от php.


> вообще: apt-get install -t testing php5-ffmpeg

Да, я знаю, я сделал ошибку когда постил сюда.


Это уже давно ушло на свалку истории.

Проблема в том, что в стабильной ветке этой хрени нет, есть в testing, как правильно ставить оттуда?

Но ставить оттуда все-таки нужно очень осторожно. Лучше всего скачать сорцы (apt-get source php5-ffmpeg) и нужные для сборки зависимости (apt-get build-dep php5-ffmpeg), а потом собрать пакет (cd php5-ffmpeg_0.5.3.1 && dpkg-buildpackage) и поставить его (cd .. && dpkg -i php5-ffmpeg_0.5.3.1*.deb).

Читайте также: