LINUX.ORG.RU
ФорумTalks

Обновил devuan 4 i386 -> devuan 4 amd64

 , , , ,


1

1

Это non-systemd мод к debian 11 если что. До обновления в списке установленных пакетов у меня был бардак с фиктивными статусами manual/auto и соответственно в autoremove показывало длинный список из частично нужных пакетов, в котором я предварительно разбираться не захотел и стал обновлять как есть.

В начале оказалось довольно просто - ну разумеется update/upgrade, поставить штатно 64-битное ядро. Скачать (apt install --download-only) amd64 версии dpkg, apt, apt-utils, в официальном дебиановском мануале был ещё tar непонятно зачем, тоже скачал, и perl-base - а вот с ним проблема, apt усматривал в его скачивании пачку конфликтов и ничего не делал, поэтому я на него забил. Ну и установить через dpkg -i всё скачанное (через apt не получится - он найдёт там битые зависимости).

После установки 64-битного dpkg/apt всё стало ломаться - apt стал считать 64 нативной архитектурой, а это, как оказалось, означает что все пакеты с архитектурой :all приравниваются теперь к ней, а не к :i386, и куча зависимостей, как all->i386 так и i386->all оказались сломанными, и даже apt install -f их починить не мог (но я б всё равно не стал его наобум запускать, он бы кучу всего сломал с учётом фиктивных auto/manual статусов). Да, удивительно, там такая вот костыльная реализация дерева зависимостей в применении к all, и полазив пару часов по исходникам apt я не нашёл способа это быстро пофиксить.

Было решено пойти методом грязных хаков - открыл в mcedit-е файл /var/lib/dpkg/status и прописал там всем неожиданно ставшим неподходящими i386-пакетам-чьим-то-зависимостям тег Multi-Arch: foreign (хотел составить список хакнутых пакетов чтоб потом исправить назад но запорол его и списка нет), а там где сломалась зависимость i386->all - в Depends i386-пакета дописывал сломанным зависимостям явное :all. Параллельно с этим, если дело касалось multiarch-совместимых библиотек, которые можно ставить параллельно обе архитектуры, просто честно ставил amd64 (откатившись на 32-битный dpkg/apt чтоб всё работало). Узнал неприятный факт - если в Depends прописана зависимость с архитектурой :any - она ломается без внятной диагностики если у пакета-зависимости стоит Multi-Arch: foreign или same (и не нашёл где это задокументировано), так вышло с тем самым перлом на который я забил в начале. Правда не с perl-base (его оказалось можно протащить 32-битный очень долго, обновляя остальное) а с самим perl. Скачал его и ещё 3 нужных ему пакета apt-get download (он не смотрит зависимости автоматически и не ломается от них) и поставил через dpkg -i. Потом ещё остались разные мусорные libXXX-XXX-perl, половина из которых all, половина i386, которые конфликтовали друг с другом и мешали всё делать, снёс их все через dpkg -r --force-depends чтобы потом уже ставить. Несмотря на то, что дебиановцы считают перл критически важным пакетом, на самом деле для более-менее рабочей системы он не нужен. По крайней мере шелл и пакетный менеджер точно прекрасно обходятся без него.

apt в конце концов пришёл в консистетное состояние и дальнейшее можно было делать через него. (если что, до этого никакие install -f, upgrade или dist-upgrade, указанные в мануале как штатное средство такого апгрейда, работать даже не пытались и жаловались на битые зависимости). Установил 64-битный драйвер nvidia и иксы, можно ребутнуться в наконец в гуи вместо 80х25 консолей.

Потом ещё часов 5 ручного разбора смешанной свалки 32/64 пакетов, удаления ненужного, установки нужного в amd64. Правда часть пакетов так и осталась i386, да и пофиг, всё работает, когда-нить с апдейтом версии переставятся на 64 наверно. Ну и wine разумеется нужен 32-битный со всеми его зависимостями - не трогал имеющийся, всё работает.

Итог: стартовое лагание файрфокса с лазанием по диску (не ssd) удлинилось раза в 3 (было секунд 10, стало около 30). То есть фф уже запустился, но всё делает медленно и видно что всё его время занято i/o. В остальном особых изменений не заметил.

мануал из дебиан вики (который не сработал)

описание тега Multi-Arch в .deb пакетах (для хакинга файла базы /var/lib/dpkg/status)

★★★★★

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

8GB, и занята далеко не впритык.

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

там

Это non-systemd мод к debian 11 если что. До обновления в списке установленных пакетов у меня был бардак с фиктивными статусами manual/auto и соответственно в autoremove показывало длинный список из частично нужных пакетов, в котором я предварительно разбираться не захотел и стал обновлять как есть.

В начале оказалось довольно просто - ну разумеется update/upgrade, поставить штатно 64-битное ядро. Скачать (apt install --download-only) amd64 версии dpkg, apt, apt-utils, в официальном дебиановском мануале был ещё tar непонятно зачем, тоже скачал, и perl-base - а вот с ним проблема, apt усматривал в его скачивании пачку конфликтов и ничего не делал, поэтому я на него забил. Ну и установить через dpkg -i всё скачанное (через apt не получится - он найдёт там битые зависимости).

После установки 64-битного dpkg/apt всё стало ломаться - apt стал считать 64 нативной архитектурой, а это, как оказалось, означает что все пакеты с архитектурой :all приравниваются теперь к ней, а не к :i386, и куча зависимостей, как all->i386 так и i386->all оказались сломанными, и даже apt install -f их починить не мог (но я б всё равно не стал его наобум запускать, он бы кучу всего сломал с учётом фиктивных auto/manual статусов). Да, удивительно, там такая вот костыльная реализация дерева зависимостей в применении к all, и полазив пару часов по исходникам apt я не нашёл способа это быстро пофиксить.

Было решено пойти методом грязных хаков - открыл в mcedit-е файл /var/lib/dpkg/status и прописал там всем неожиданно ставшим неподходящими i386-пакетам-чьим-то-зависимостям тег Multi-Arch: foreign (хотел составить список хакнутых пакетов чтоб потом исправить назад но запорол его и списка нет), а там где сломалась зависимость i386->all - в Depends i386-пакета дописывал сломанным зависимостям явное :all. Параллельно с этим, если дело касалось multiarch-совместимых библиотек, которые можно ставить параллельно обе архитектуры, просто честно ставил amd64 (откатившись на 32-битный dpkg/apt чтоб всё работало). Узнал неприятный факт - если в Depends прописана зависимость с архитектурой :any - она ломается без внятной диагностики если у пакета-зависимости стоит Multi-Arch: foreign или same (и не нашёл где это задокументировано), так вышло с тем самым перлом на который я забил в начале. Правда не с perl-base (его оказалось можно протащить 32-битный очень долго, обновляя остальное) а с самим perl. Скачал его и ещё 3 нужных ему пакета apt-get download (он не смотрит зависимости автоматически и не ломается от них) и поставил через dpkg -i. Потом ещё остались разные мусорные libXXX-XXX-perl, половина из которых all, половина i386, которые конфликтовали друг с другом и мешали всё делать, снёс их все через dpkg -r --force-depends чтобы потом уже ставить. Несмотря на то, что дебиановцы считают перл критически важным пакетом, на самом деле для более-менее рабочей системы он не нужен. По крайней мере шелл и пакетный менеджер точно прекрасно обходятся без него.

apt в конце концов пришёл в консистетное состояние и дальнейшее можно было делать через него. (если что, до этого никакие install -f, upgrade или dist-upgrade, указанные в мануале как штатное средство такого апгрейда, работать даже не пытались и жаловались на битые зависимости). Установил 64-битный драйвер nvidia и иксы, можно ребутнуться в наконец в гуи вместо 80х25 консолей.

Потом ещё часов 5 ручного разбора смешанной свалки 32/64 пакетов, удаления ненужного, установки нужного в amd64. Правда часть пакетов так и осталась i386, да и пофиг, всё работает, когда-нить с апдейтом версии переставятся на 64 наверно. Ну и wine разумеется нужен 32-битный со всеми его зависимостями - не трогал имеющийся, всё работает.

Итог: стартовое лагание файрфокса с лазанием по диску (не ssd) удлинилось раза в 3 (было секунд 10, стало около 30). То есть фф уже запустился, но всё делает медленно и видно что всё его время занято i/o. В остальном особых изменений не заметил.

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

Товарищ майор, страна теряет специалиста, примите меры

superuser ★★★★☆
()

i386 -> amd64

Тебе бы с таким стремлением к красноглазию генту собирать, а не вот это вот всё. А то и LFS. Точнее, CLFS

XMs ★★★★★
()

Я понимаю, если бы ты в gentoo CHOST сменил. А тут нафига столько писанины? Нет, читать не буду, нудно

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

да где там красиво? В deb-based - библиотеки в /lib/<triplet> и /usr/lib/<triplet>
Можно делать мультилибы с любыми архитектурами, лишь бы binfmt умелся. Например, возможен мультилиб с aarch32/aarch64, с бинарными трансляторами возможностей ещё больше Думаю, при желании можно сделать мультилиб с разными libc в пределах этой схемы.

А в gentoo? Во-первых захардкоженные пути - lib32/lib64/libx32
Во вторых под все архитектуры собирается один пакет, только одной версии, ещё и атомарно. В третьих все архитектуры будут иметь один набор юз-флагов т.к сами abi - тоже юзфлаги.

Тебе нужно дособрать 32битную версию библиотеки? Пересобирай целиком все остальные архитектуры. Какая-то опция недоступна на одной из архитектур? Отключай её для всех. Не поддерживается одна из архитектур в в llvm? Собирай mesa без llvm (это приведёт например к очень низкой производительности в i915g т.к методы, работавшие через llvmpipe используют тормозной softpipe, да и сам llvmpipe мог бы быть полезен). В большинстве случаев 32битным версиям библиотек нужен минимум фич для работы какого-то определённого старого софта и wine. Но в генте придётся собирать полный набор.

Как минимум идеальный мультилиб подразумевал бы использование слотов для архитектур подобно слотам для версий. В каждом слоте можно было бы использовать отдельный каталог для include, сейчас же инклуды в мультилибе общие.

В общем, мультилиб в генте весьма и весьма посредственный. Даже старые бинарные emul пакеты, которые когда-то были вместо него были намного лучше.

В gentoo есть crossdev, который конечно же не мультилиб, а именно сборка другой архитектуры. Который обладает всеми этими свойствами, но заточен под кросскомпиляцию, а не исполнение, из-за чего очень ограничен. Так же есть префиксы. Но всё это не работает как мультилиб и потребует большого количества доработки

mittorn ★★★★★
()
Последнее исправление: mittorn (всего исправлений: 2)

Странно. В своё время перепиливал дебиан на amd64 именно по их мануалу, и всё прокатило. Правда, это было в досистемдшные времена.

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

Потому что заново потом придётся выяснять где что могло слететь, что я настраивал больше 10 лет назад ещё в debian 6, а так же правильный список установленных пакетов, часть которых установлена ещё в те же времена и в новых репах отсутствует.

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

Ну, возможно если б это был дебиан а не девуан, если б не было залоченной java7-jre из древней репы, если б не было бардака в статусах пакетов - оно бы и обновилось так. Хотя кто знает.

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

Не превозмогал — нет повода для спама на лоре. А так, ну обновил и обновил. Бином Невтона.

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

А что слетит? Всё поменялось сто раз за это время. Работают ли старые костыли и подпорки? Или только проблемы вызывают?

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

Ну если замечу проблемы то буду исправлять, а так раз работает значит не надо беспричинно трогать. 64 тоже бы не ставил но нехорошие проприетарщики стали иногда делать 64-only софт.

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

Тут, если уж проводить аналогии, не мультилиб, а смена CHOST

XMs ★★★★★
()

Зачем тебе этот секс с пакетным менеджером и 32-битным юзерспейсом? Просто поставь 64-битную систему.

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

А на кой мультилиб сейчас вообще нужен?
Для wine? Там же вроде пилили его поддержку на чистой 64 системе?
Мои просто все на no-multilib профиле, и пока ещё с проблемами не сталкивался.

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

Для запуска 32-битного софта. Например, старых проприетарных игрушек. Ты свой ник ну вообще никак не оправдываешь!

hateyoufeel ★★★★★
()

Потом ещё часов 5 ручного разбора смешанной свалки 32/64 пакетов, удаления ненужного, установки нужного в amd64.

Когда-то давно делал подобный подвиг для убунты, но я делал по готовому гайду без многочасовых ковыряний.

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

Во-первых, в 32-битном юзерспейсе нет ничего плохого и я бы и дальше им пользовался если б не одна 64-only прога. Во-вторых, тема как раз о том как я ставил 64 бита.

Пакетным менеджером потому что мне нужна не абстрактная чистая система а сделанные и забытые давно настройки.

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

Как минимум для wine. Wow64 пояаился только в последних версиях и по дефолту скорее всего отключён до сих пор. Да и велика вероятность, что с Wow64 или даже просто с последними версиями wine какой-то софт не запустится. Во многих обёртках для wine есть опция установки десятков его версий. Так же куча версий Proton, в котором это всё нескоро будет.
В стиме многие игры всё ещё 32-битные, да и сам стим ещё, кажется, совсем недавно был таковым.
Xash3D хоть и поддерживает 64 бита, для загрузки оригинального игрового кода (hlsdk и моды собирались только под x86 windows/linux/osx) нужен именно 32битный движок. И вряд ли это поменяется т.к если в wine ещё удобно реализовать Wow64 в слое сисколов, в xash3d пришлось бы с нуля изобретать какую-то linux32 on linux64 libc.
Конечно если тебе комфортно живётся на каком-нибудь alpine без мультилиба - это хорошо, но есть вещи, которые там не заработают.
Да, технически можно сделать решение которое даст загрузить 32битный x86 код в 64битном процессе, но на данный момент для linux его нет кроме того, что в составе wine. Мало того, сисколы отличаются и просто загрузить libc и сделать враппер для gl не выйдет. Придётся собирать специальный glibc, делающий 64битные сисколы, но со стандартным abi. Ну и софт, использующий 32битные сисколы напрямую отпадает, что-то наверное можно закрыть тем же способом, как эмулирует сисколы wine. В windows тем временем умельцы даже 64битные dll в 32битном процессе держали - там с этим лучше обстоят дела.

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

Во-первых, в 32-битном юзерспейсе нет ничего плохого

Есть.

Не, нету. Если ему хватает 4G памяти на процесс, то и посрать.

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

Мало того, сисколы отличаются и просто загрузить libc и сделать враппер для gl не выйдет

Это к чему?

Придётся собирать специальный glibc, делающий 64битные сисколы, но со стандартным abi.

Зачем? 64-битное ядро поддерживает 32-битные сисколлы, и glibc который их делает для 32-битного софта и так есть.

что-то наверное можно закрыть тем же способом, как эмулирует сисколы wine

wine не эмулирует сисколлы.

В windows тем временем умельцы даже 64битные dll в 32битном процессе держали - там с этим лучше обстоят дела.

В линуксе тоже можно, просто никому не надо. Зачем это понадобилось в винде тоже не знаю.

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

Почему дебиан? Там же какая-то васяносборка

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

Это к чему?

wine с wow64 может избежать мультилиба, используя 64битные библиотеки и 64битный процесс. В мультилибе же тебе придётся тащить opengl/vulkan драйвера со всеми зависимостиями если нужно аппартное ускорение, либо каким-то образом собирать специальную mesa под wine (что теоретически возможно конечно)

Зачем? 64-битное ядро поддерживает 32-битные сисколлы

Только для 64битного процесса. И только если это явно не отключено. Зачем их сделали разными? Вероятно для обратной совместимости, но да, в разных процессах могут быть разные таблицы сисколов и методы их вызова. А запуск в 32битном процессе - и есть мультилиб. Особенно в контексте того, что wayland не имеет какого-то протокола для отрисовки и чтобы нарисовать самый простейший gui понадобится opengl/vulkan драйвер со всеми зависимостями.

wine не эмулирует сисколлы.

В wine есть эмуляция сисколов через обработчик SIGSYS, она ещё BPFjit использует если доступен. Она конечно необязательна, но сам принцип есть и его можно было бы задействовать и в нативных процессах

В линуксе тоже можно, просто никому не надо. Зачем это понадобилось в винде тоже не знаю.

Технически ты её может и загрузишь, но LDT там отличается и я не уверен, что получится её переопределить нужным образом, чтобы существующие бибоиотеки реально работали. Опять же, я не пробовал т.к это реально никому не надо. Если нужно уместить указатели в 32 бита - это можно сделать зарезервировав всё адресное пространство кроме нижних 64 бит. wine preloader вроде бы так и делает, осталвляя только vdso

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

Опять это дурацкое слово мультилиб, что бы под ним подразумеваешь? К ядру и сисколлам оно в любом случае не может иметь отношения. Насколько я знаю, это шапкотермин для мультиарча, который означает очень простую вещь: в файловой системе задано место для библиотек разных архитектур так, чтоб можно было установить обе одновременно и они не конфликтовали, например /lib/i386-linux-gnu/ и /lib/x86_64-linux-gnu вместо общего /lib для всех. Ну и лоадер под каждую архитектуру свой со своими путями поиска библиотек. Никакой другой специальной поддержки чего бы то ни было там не требуется.

Запустить 32-бит прогу с 64-бит библиотекой, просто штатно её скомпилировав, у тебя никак в любом случае не получится, потому что 64-бит библиотека должна выполняться в 64-бит сегменте и имеет 64-битное соглашение о передаче аргументов, а 32-битная прога про всё это не знает. Чтобы было можно - нужна прослойка, которая примет вызов 32-битной функции с 32-битным соглашением, переключится в 64-битный сегмент и вызовет 64-битную библиотеку, передав её сконвертированные в 64-битный вид аргументы. А после завершения переключится назад и передаст проге возвращённое значение. И делать это надо индивидуально для каждой функции каждой используемой библиотеки - очень большая работа, хотя частично можно и автоматизировать.

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

Опять это дурацкое слово мультилиб, что бы под ним подразумеваешь

То же, что и все - технически отдельный юзерспейс в той же ФС, минимальтный, но достаточный для работы прилоежний второй архитектуры.

К ядру и сисколлам оно в любом случае не может иметь отношения
Никакой другой специальной поддержки чего бы то ни было там не требуется.

ок, отрубаем в ядре поддержку ia32, опция уже есть. Дальше что?
Да и библиотеки - не просто библиотеки, ещё и драйера юзерспейсные. Ты не можешь просто взять и притащить системный libc и libGL/glvnd, нужно и всё, что ими динамически загружается. Это полноценная 32битная система со всеми библиотеками, только без ядра и большей части исполняемых бинарей. В gentoo мультилиб полагается на то, что у архитектур общие заголовочные файлы. Но это потребует собирать все архитектуры с одинаковой конфигурацией. У самого принципа мультилиба такого требования нет, это чисто гентушная особенность

Переключится в 64-битный сегмент и вызовет 64-битную библиотеку, передав её сконвертированные в 64-битный вид аргументы.

Когда я с этим экспериментимровал, были какие-то проблемы если делать это из 32битного процесса. Впрочем мне не сильно было интересно грузить именно 64 в 32.
Обратный вариант потенциально работоспособен, разумеется с учётом необходимости врапперов. Просто завраппить соглашение вызовов не выйдет - отличаются структуры. libc несомненно под 32битный код нуден отдельный. Таким образом получается некоторый интерфейс псевдосисколов, которые являются мостом между 32битным libc и 64битным, а так же мостом для тех библиотек, которые мы хотим использовать из 64битного мира. Ещё между libc могут быть конфликты за реализации TLS т.к они могут исполдзовать одни и те же сегментные регистры

mittorn ★★★★★
()

А ты смелый, я всегда сразу переустанавливал, для смены архитектуры. Респект, пока портянку не читал.

xwicked ★★☆
()

Платиновый пердолинг.

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

Да и библиотеки - не просто библиотеки, ещё и драйера юзерспейсные. Ты не можешь просто взять и притащить системный libc и libGL/glvnd, нужно и всё, что ими динамически загружается. Это полноценная 32битная система со всеми библиотеками,

Какое-то не очень последовательное высказывание и непонятно что тут имелось ввиду. Но это именно библиотеки, разумеется многим прогам нужно не только libc а ещё много других библиотек и их тоже надо ставить. А вот какой архитектуры будет при этом /bin/sh, /bin/cat или /sbin/init - уже не важно, можно делать любой поддерживаемой и не совпадающей друг с другом. Такой отдельной сущности как «юзерспейсный драйвер» в линуксе нет - это либо библиотека либо исполняемый бинарник. Соответственно если библиотека то надо её дублировать в 32 бита, если исполняемый бинарник - не надо.

В gentoo мультилиб полагается на то, что у архитектур общие заголовочные файлы

В дебиане есть /usr/include/i386-linux-gnu и подобное. Не для всех, но часть хедеров там. Впрочем это не критично, можно прпепроцессором в одном файле хранить две независимые версии в зависимости от архитектуры.

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

Какое-то не очень последовательное высказывание и непонятно что тут имелось ввиду

Я уже не знаю, как понятнее объяснять

Такой отдельной сущности как «юзерспейсный драйвер» в линуксе нет

Есть термин «Installable client driver». Пускай для opengl оно официально так в линуксах не называлась, оно всё равно называется драйверами и даже переменная огружения указывающая к ним назывывается ..._DRIVER_PATH. dri драйвера - те же ICD.

Соответственно если библиотека то надо её дублировать в 32 бита

а если версии под 32 бита не существует? Wow64 в wine этот вопрос решает, не пытаясь при этом притащить с собой win32 mesa (хотя конечно можно было бы её запатчить, чтобы она через wine открывала /dev/dri/card0 и стучалась туда)

В дебиане есть /usr/include/i386-linux-gnu и подобное.

Вот, а в gentoo нет, что иногда создаёт проблемы.

можно прпепроцессором в одном файле хранить две независимые версии

А можно не хранить. Библиотеки не должны закорстыливаться под мультилиб. Библиотека, собранная под вторую архитектуру вообще не обязана знать чего-либо о первой и тем более как-то под неё закостыливаться

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

Ты в очередной раз пишешь какие-то странные вещи.

Есть термин «Installable client driver»

Эти юзерские ярлыки на ситуацию никак не влияют. Либо можно запустить, либо so (изредка и то и то), других нет.

а если версии под 32 бита не существует?

Если не существует, то 32-битная прога нативно эту библиотеку использовать не сможет, очевидно.

Wow64 в wine этот вопрос решает

А я то не знал, спасибо. О чём спор?

А можно не хранить. Библиотеки не должны закорстыливаться под мультилиб. Библиотека, собранная под вторую архитектуру вообще не обязана знать чего-либо о первой и тем более как-то под неё закостыливаться

Это тут ни при чём. Если ты поддерживаешь библиотеку и под i386 и под amd64 то тебе надо сделать рабочий хедер и туда и туда. И на то есть два способа: либо держать в репе два отдельных хедера и следить чтоб они обновлялись синхронно, либо сложить всё в один с ifdef-ами и тогда за синхронностью следить не придётся (т.к. файл всего один). То, что из-за этого такой файл оказывается удобнее использовать в ОС без раздельных инклюдов - это скорее побочный бонус.

firkax ★★★★★
() автор топика

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

ponchik-2
()

Я таким занимался - страшно сказать - 15 лет назад, переезжая с убунты 9.04 на 9.10 с одновременной сменой архитектуры с i386 на amd64.

Что сказать, было весело. Как упражнение - прикольно. Классно, что подобное вообще возможно.

Стал бы я такое повторять? Да ни в жизнь.

Barracuda72 ★★
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)