Pull to refresh

Даунгрейдим дебиан: из testing в stable

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

Итак, для начала нам необходимо залезть в /etc/apt/sources.list и заменить testing и squeeze на stable, приведя всё примерно к такому виду:
deb mirror.yandex.ru/debian stable main contrib non-free
deb security.debian.org stable/updates main contrib non-free

Итак, для начала нам понадобится разобраться с 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

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

И делаем первую попытку даунгрейда:
$ sudo apt-get dist-upgrade

Если всё идёт хорошо, то нам покажут, что необходимо даунгрейдить около тысячи пакетов, удалить несколько десятков (причём среди них могут оказаться не только какие-то маловажные вещи, но и вполне себе используемый софт, в моём случае — gedit и deluge. Ничего, поставим потом). Соглашаемся, даунгрейдится некоторое количество пакетов, натыкаемся на первую ошибку:
dpkg: error processing /var/cache/apt/archives/gstreamer0.10-plugins-good_0.10.8-4.1~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)

Лечим её, в общем-то, методом тыка. С некоторыми помогает:
$ sudo dpkg -i --force-overwrite /var/cache/apt/archives/gstreamer0.10-plugins-good_0.10.8-4.1~lenny1_i386.deb

Некоторые же удаётся вылечить через 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. Значит, они нам попросту не нужны:
sudo dpkg --remove libnm-util1

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

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

Articles

Change theme settings