LINUX.ORG.RU

обновление debian -> devuan, костылинг dpkg/apt в середине

 , , ,


0

2

Есть у меня комп с установленной на него debian wheezy (7), ядром от jessie (8). Решил его обновить и перейти заодно на devuan т.к. вспомнил что обновление до нового дебиана установит туда гадостный systemd.

Начал с того что поставил туда apt от stretch (9) с локальных проверенных .deb-пакетов т.к. в более ранних была уязвимость https://lists.debian.org/debian-security-announce/2019/msg00010.html позволяющая RCE через mitm незащищённого соединения к репе. Для того чтобы apt от stretch поставился в wheezy и не ругался, пришлось немного покостылить libstdc++6, убрав из него строчки Breaks: и Depends: (чтобы он просто молча установился и не пытался мне снести пол-системы). Также, чтобы пакеты из новых релизов нормально конфигурировались, (об этом узнал позже, см ниже! ***) пришлось сделать фикс к пакету init-system-helpers-1.48 (от stretch), убрав из него всё что конфликтовало с wheezy, оставив скрипты deb-systemd-helper и deb-systemd-invoke (они нужны в preinst/postinst хуках новых пакетов в т.ч. в devuan), почистив метаданные от конфликтов и зависимостей и заменив версию на 1.47.999 чтобы потом он сам мог дальше обновиться. Получившийся дебиан (wheezy с добавками jessie/stretch) работал нормально.

После этого я установил вручную скаченный и проверенный devuan-keyring, заменил репы на «devuan ascii» (это аналог stretch-а из дебиановских версий, прыгать через 3 версии сразу до beowulf или тем более через 4 до chimaera не хотелось) и начал плавно обновляться. Начал с apt-get update / upgrade.

Вот тут случилась сомнительная ситуация. apt-get upgrade упал в середине настройки из-за отсутствующего deb-systemd-helper. Я этот файл ему организовал (см. выше про хак с init-system-helpers ***), запустил заново apt-get upgrade и вроде оно продолжилось. [!] Первый вопрос - он ничего при таком падении в середине не мог потерять? По виду было всё норм.

Дальше - почистил ненужные остатки вручную, делаю apt-get install eudev, он хочет снести пол-системы, потыкался как сделать эту операцию более щадящими способами, особо не нашёл, единственное заметил что его «план установки» выглядит менее варварским если сделать apt-get install eudev apt-file. Делаю (список удалённых/установленных пакетов запомнил в файл чтобы потом их перепроверить на предмет нужности). И он в середине опять падает :( На настройке какого-то perlmagick. Что именно в нём сломалось выяснить не удалось - потому что повторно уже даже не запускается, пишет что не может составить план установки из-за битых зависимостей. [!] Как так?! Он же уже начал исполнять этот запрос, раньше знал как его выполнить а теперь забыл? Вобщем, apt-get стал нерабочим, т.к. на любые команды он теперь ругается на нерезолвленные зависимости, половину пакетов, которые он собирался удалить, он удалил, какие-то не удалил, может быть что-то поставил. Советует apt-get install -f но тот так же не работает. Ну, я среди его ругани обнаружил остатки ненужного мне гнома, разбираться с конфликтами ненужных пакетов не хочу - поэтому просто вручную потёр их через dpkg --purge (это apt сломался а dpkg работает норм, правда пришлось вручную список к удалению составлять т.к. рекурсивно удалять он не умеет). И ещё несколько пакетов пришлось так удалить (потом поставлю заново), после чего apt-get install -f наконец соизволил придумать что он может сделать. Запускаю, он что-то удаляет/ставит. [!] Третий вопрос: после такого (упавший в неконсистентном состоянии apt, ручная чистка мусора через dpkg, опять запуск apt) apt тоже ничего не «потеряет»? Не мог он какие-то хуки в итоге забыть запустить от пакетов которые он в первый раз недоустановил?

apt-get опять падает, на этот раз на настройке lintian, с странным сообщением об ошибке, дословно не вспомню, но что-то типа «apt ожидал от dpkg 4 действия а тот сделал 0». Исправилось после запуска «dpkg-reconfigure lintian» (который кажется ничего не сделал), после чего apt-get install -f тоже стал ничего не делать и не ругаться. [!] Четвёртый вопрос: тут он тоже ничего не потерял? Судя по его логу до падения от lintian, он только начал этап настроек, а пакетов та было много, но после фикса lintian'а почему-то он ничего делать не продолжил. Впрочем, запущеный после этого ещё раз apt-get upgrade отработал уже нормально, ещё кучу всего обновил и ни разу неупал. Ребут компа тоже прошёл норм, правда иксы не запускаются, но это другая тема, ведь обновление ещё не закончено (ну, я надеюсь что это не связано с вопросами выше и не придётся вручную их чинить).

Если что, на сайте devuan нет гайда ни по обновлению с debian wheezy до чего угодно (минимум jessie), ни по обновлению с чего угодно до devuan ascii (к нему только чистая установка описана, а обновления до beowulf и chimaera - то более поздние релизы). Надеюсь это не потому что там возникают неразрешимые проблемы. ---- Вопросы (всего 4) помечены знаками «[!]» чтобы их было лучше видно в этой простыне.

★★★★★

Последнее исправление: firkax (всего исправлений: 1)

Почему бы просто не переустановить систему? Я понимаю, когда сервер и влом всё перенастраивать, но у тебя, судя по всему, локалхост. Зачем создавать такую ядрёную смесь трёх релизов одного дистрибутива и пытаться её превратить в другой дистрибутив?

puffy ★★
()
Ответ на: комментарий от puffy

Добавил тег :)

Ну, кроме того что «просто захотелось» (проверить, что я смогу, и в очередной раз показать что дебиан живёт без переустановок в любых ситуациях) мне тут тоже влом всё перенастраивать, потому что системе больше 10 лет, файловая система отличается от «система в / и а всё юзерское в /home» и я не помню что я там менял за всё это время.

А смесь потому что с полным обновлением даже до jessie прилетит systemd а я хочу его избежать. Ядро от jessie было давным давно (я часто ядра от следующего релиза ставлю, там не требуются бэкпорты т.к. они не привязаны по зависимостям к остальному). Ну а apt от stretch нужен был т.к. старый небезопасно запускать.

firkax ★★★★★
() автор топика
Последнее исправление: firkax (всего исправлений: 3)
Ответ на: комментарий от firkax

Да ё… Делаешь backup конфигов и данных. Ставишь новьё, наворачиваешь и докручиваешь данные под требования и изменения новых версий. Всё. Пацаны делают на клоне, пока основной работает. Нет клона, делай на этом тазике. Но алгоритм всё равно такой.

А твой подход даст франкенштейна и странное поведение, которое никому не нужно. Развёл тут тред.

Oldboy
()

И в итоге у такой системы будет максимально грязное состояние, помойка с heisenbug’ами слепленная из трёх дистров.

В качестве эксперимента подобное конечно выглядит интересно, но пользоваться подобной системой в повседневной работе я бы не стал.

EXL ★★★★★
()
Ответ на: комментарий от Oldboy

Эм, всё гораздо проще. Бекап делается отключением системного жёсткого диска от загрузки и установкой на чистый. После чего старый монтируется в read-only /mnt/sdb1 /mnt/sdb3 итд и смотрится по мере надобности, не спеша, а когда-то вытаскивается из системного блока и кладётся в архив (шкаф) на будущие 100 лет. Но тут мне захотелось именно инкрементально обновить.

А твой подход даст франкенштейна и странное поведение

А вот почему? Все старые недистровые пакеты я либо почищу, либо (если чистить не подходит) буду точно знать о их наличии, всмысле про каждый индивидуально, почему именно он оставлен и как на что влияет. Так что никаких франкенштейнов. Странное поведение может быть только если apt где-то накосячит, «забудет» выполнить какой-нить хук и нигде об этом не сообщит. Потом придётся искать где надо его вручную выполнять. Об этом собственно и были все вопросы.

firkax ★★★★★
() автор топика
Ответ на: комментарий от metawishmaster

Аааа.

https://www.devuan.org/os/documentation/dev1fanboy/en/migrate-to-ascii.html

Вот почему ссылки сюда нет отсюда? https://www.devuan.org/os/install

Там только «Install ASCII» а «migrate to beowulf». Знал бы заранее может быть бы удобнее всё.

firkax ★★★★★
() автор топика
Ответ на: комментарий от firkax

А вот почему?

Потому, что в системе новые systemd заглушки и ошмётки. Не совместимые с версией, где о systemG не слышали.

Например, gentoo очень изменилась за три года.

Oldboy
()
Последнее исправление: Oldboy (всего исправлений: 1)
Ответ на: комментарий от Oldboy

Эм, ну нет. В дебиане вообще новый systemd, а я его обновлял начиная с lenny до bullseye (когда они выходили) и мне в голову не приходило ставить с нуля. Такие обновления это полностью штатный процесс и никаких проблем не создают, если систему кто-то не запорол до этого другим способом.

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

firkax ★★★★★
() автор топика
Ответ на: комментарий от firkax

Лови упоротого!!! Тебе пишу с горящим пердаком: За два релиза много надо было внести кусков systemd, чтобы ПО работало, DE там… Много изменений, кроме версий, наложено дохрена патчей.

Можно скрестить ужа с ежом, только по количеству текста не то получается ))

Oldboy
()
Последнее исправление: Oldboy (всего исправлений: 1)
Ответ на: комментарий от Oldboy

Ну не знаю, уже обновляю devuan2 -> devuan3, всё вообще штатно идёт. Опасения конечно есть что во время перехода где-то что-то не сделалось и будет проблемы создавать. Но с другой стороны, при смене релиза почти все пакеты заново переставляются, и косяки предыдущего обновления по идее должны уйти вместе с предыдущими установленными пакетами.

firkax ★★★★★
() автор топика
Ответ на: комментарий от firkax

вобщем итоги: ascii -> beowulf установлено, запускается нормально, иксы работают, nvidia-legacy-390xx работает, единственное пришлось чуть поправить конфиг нвидии (прописать путь к её модулю для xorg) потому что почему-то он у неё такой что новый xorg не находит её libglx.so, но это не косяк обновления а косяк пакетов (наверно в chimaera уже норм будет)

/etc/nvidia/legacy-390xx/nvidia-drm-outputclass.conf надо опции ModulePath, которые там в секции «Files», продублировать в секцию «OutputClass»

firkax ★★★★★
() автор топика
Последнее исправление: firkax (всего исправлений: 1)