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

    Как известно, дебиан 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 — всё заработало идеально.
    • +22
    • 12,2k
    • 9
    Поделиться публикацией
    Похожие публикации
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 9
    • +3
      Хорошая заметка, но! помойму не хорошо делать посты в блоге Linux закрытыми.
      • +1
        Открыл. Сначала открытый топик хабр не давал создать, кидал на 404.
      • +1
        Извините, но:
        >Некоторые же удаётся вылечить через Synaptic: либо Edit > Broken Packages, либо пользуемся >фильтром Broken Packages и пробуем удалить/переустановить по одному.
        А при помощи APT это не вылечить? Synaptic — это всего лишь фронтенд для APT.

        И кстати чтобы ситуации описываемой в статье не случилось можно прописывать репозиторий явно, например:
        deb ru.ftp.debian.ru/debian/ lenny main contrib non-free
        • 0
          обычно проще сделать aptitude safe-upgrade, он просчитывает все зависимости
          • 0
            Ну, все делалось методом научного тыка. Так что да, возможно так и проще.
          • 0
            Совсем недавно проапгрэйдил свой Ленни с тестинг/анстэйбл репозиториев. Пока полет нормальный :)
            На эту тему так-то в интернете есть разрозненная информация, но вам спасибо. Возьму себе в избранное — на всякий случай.
            • +8
              Чтобы этого не случилось ВСЕГДА используйте ветку по имени, например etch, lenny, sid вместо oldstable,stable,unstable, etc…
              • –1
                Ну, sid или unstable — разницы никакой :)
                А вообще, в таких ситуациях рекомендуется всё-таки зафиксировать установленный набор пакетов из squeeze, обновляя только те, которые глючат. Политика Debian говорит, что даунгрейд пакетов — это крайняя мера, так, при разрешении зависимостей пакетным менеджером даунгрейд какого-либо пакета рассматривается в последнюю очередь, скорее вам предложат что-нибудь удалить.
              • 0
                А можно ли дангрейднуть Ubuntu 9.04 до 8.10?

                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.