LINUX.ORG.RU

миграция 32 -> 64

 64vs32flame, ,


2

1

Есть изначально 32-бит система. Поставлен crossdev, собрано и загружено 64-бит ядро. Хочется как-то неспешно перевести окружение на 64.
Как мне это представляется: сменить CHOST и соответствующий профиль, заставить новую архитектуру целиться на lib64, а не на lib, как это дефолтно. При этом новое архитектура будет постепенно замещать, не ломая старого окружения. В итоге, видимо, останется мусор из ненужных 32-библиотек, но это уже мелочи.
На сколько это реально и чего я не учел?

И еще вопрос: есть ли уже штатная возможность держать часть пакетов с новым x32 ABI?

★★★★★

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

Разверните 64 битный stage3 рядом, сделайте в него chroot и установите все пакеты из world 32 битной системы, затем укажите в параметрах ядра новый корень, /home оставьте старый.

kostik87 ★★★★★
()

Проще новую систему собрать и перенести в нее настройки. Меньше мороки на мой взгляд.

deterok ★★★★★
()

На сколько это реально и чего я не учел?

Все ок только одно мелкое и противное «но»… Но дело в том, что из 64х битного стейджа3 ты все это закончишь намного быстрее.

init_6 ★★★★★
()

Возьми amd64 ядрецо и stage3 и не онанизмируй с школовыдумками о «миграции».

держать часть пакетов с новым x32 ABI

$ equery hasuse abi_x86_x32
 * Searching for USE flag abi_x86_x32 ... 
[IP-] [  ] dev-libs/libpthread-stubs-0.3-r1:0
[IP-] [  ] media-libs/fontconfig-2.10.2-r1:1.0
[IP-] [  ] media-libs/freetype-2.4.11-r2:2
[IP-] [  ] media-libs/libtxc_dxtn-1.0.1-r1:0
[IP-] [  ] media-libs/opus-1.0.2-r2:0
[IP-] [  ] x11-libs/libICE-1.0.8-r1:0
[IP-] [  ] x11-libs/libSM-1.2.1-r1:0
[IP-] [  ] x11-libs/libX11-1.5.0-r1:0
[IP-] [  ] x11-libs/libXau-1.0.7-r1:0
[IP-] [  ] x11-libs/libXcomposite-0.4.4-r1:0
[IP-] [  ] x11-libs/libXcursor-1.1.13-r1:0
[IP-] [  ] x11-libs/libXdamage-1.1.4-r1:0
[IP-] [  ] x11-libs/libXdmcp-1.1.1-r1:0
[IP-] [  ] x11-libs/libXext-1.3.1-r1:0
[IP-] [  ] x11-libs/libXfixes-5.0-r1:0
[IP-] [  ] x11-libs/libXft-2.3.1-r1:0
[IP-] [  ] x11-libs/libXi-1.7.1:0
[IP-] [  ] x11-libs/libXinerama-1.1.2-r1:0
[IP-] [  ] x11-libs/libXmu-1.1.1-r1:0
[IP-] [  ] x11-libs/libXrandr-1.4.0-r1:0
[IP-] [  ] x11-libs/libXrender-0.9.7-r1:0
[IP-] [  ] x11-libs/libXt-1.1.3-r1:0
[IP-] [  ] x11-libs/libXv-1.0.7-r1:0
[IP-] [  ] x11-libs/libXxf86vm-1.1.2-r1:0
[IP-] [  ] x11-libs/libpciaccess-0.13.1-r1:0
[IP-] [  ] x11-libs/libvdpau-0.6:0
[IP-] [  ] x11-libs/libxcb-1.9-r1:0
[IP-] [  ] x11-proto/compositeproto-0.4.2-r1:0
[IP-] [  ] x11-proto/damageproto-1.2.1-r1:0
[IP-] [  ] x11-proto/fixesproto-5.0-r1:0
[IP-] [  ] x11-proto/inputproto-2.3:0
[IP-] [  ] x11-proto/kbproto-1.0.6-r1:0
[IP-] [  ] x11-proto/randrproto-1.4.0-r1:0
[IP-] [  ] x11-proto/recordproto-1.14.2-r1:0
[IP-] [  ] x11-proto/renderproto-0.11.1-r1:0
[IP-] [  ] x11-proto/scrnsaverproto-1.2.2-r1:0
[IP-] [  ] x11-proto/videoproto-2.3.1-r1:0
[IP-] [  ] x11-proto/xcb-proto-1.8-r2:0
[IP-] [  ] x11-proto/xextproto-7.2.1-r1:0
[IP-] [  ] x11-proto/xf86bigfontproto-1.2.0-r1:0
[IP-] [  ] x11-proto/xf86dgaproto-2.1-r2:0
[IP-] [  ] x11-proto/xf86vidmodeproto-2.3.1-r1:0
[IP-] [  ] x11-proto/xineramaproto-1.2.1-r1:0
[IP-] [  ] x11-proto/xproto-7.0.24:0
anonymous
()
Ответ на: комментарий от madcore

Первый компилер для amd64 был кросскомпилером с x86, с тех пор ситуация не ухудшилась. Но кому это надо?

anonymous
()
Ответ на: комментарий от madcore

Может и умеет, по крайней мере на x32 ABI он не замаскирован. Но я бы не назвал профиль x32 стабильным...

Pinkbyte ★★★★★
()

проще через чрут переходить.

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

как это нечем? пол мира не собрано, какой там код?

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

Это не я здесь на ходулях по болоту кирпичей пытаюсь пройти.

Deleted
()

Подписался. Хотя что на счёт реально развёртывания с нуля, только с небольшой оговоркой?

Выделяем место под новый рут, распаковываем stage3, делаем chroot, собираем систему так, как нам нужно (благо, 64-битное ядро уже есть, т.е., проблем с запуском 64-битных приложений в chroot не будет (ведь не будет?)). Правим конфиги и делаем нужные настройки в chroot.

Всё это время основная система работает. Дальше останавливаем все сервисы, убеждаемся в отсутствии открытых на запись файлов и unix-сокетов, перемонтируем рут в read-only, синхронизируем изменившиеся файлы с системой в chroot (БД, различные файлы в /var, и т.д.)

Делаем pivot_root и вуаля — мы на новой системе без ребута. Дальше настраиваем загрузчик, стартуем нужные сервисы, и всё.

Это можно делать и удалённо, только надо буть уверенным в качестве связи, да и лучше потренироваться на виртуалке.

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

x32 ABI не хочешь ты. Не шутка.

Для всяких пыхов и апачей было б не лишним, если оно рабочее.

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

(благо, 64-битное ядро уже есть, т.е., проблем с запуском 64-битных приложений в chroot не будет (ведь не будет?))

Их нет и не в chroot.

А stage3 и chroot - слишком скучно.

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

А stage3 и chroot - слишком скучно.

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

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

Т.е., сделать перенос можно, но будет или аццкий объем ручной работы, или есть вероятность коллизий и кучи мусора в итоге. ИМХО.

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

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

Их нет и не в chroot.
Поставлен crossdev, собрано и загружено 64-бит ядро.

?!

Что не так? crossdev нужен был чтобы собрать 64-ядро в 32-системе. После чего загрузился с новым ядром.

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

По теме: лучше сделать это в чруте или из стейдж3.

wakuwaku ★★★★
()

В общем, дошли руки до опыта. Сделать все красиво исключительно средствами portage, без рукосуйств, у меня сходу не вышло, но это скорее потому, что было лень во всем разбираться. Думаю, возможно отладить процесс до нормального уровня без всяких хаков. Сама идея удалась, система на стадии винегрета остается полностью работоспособной, по мере обновления можно просто перезапускать сервисы, чтобы перешли на новое окружение.

Изначально была только одна перезагрузка после сборки 64-ядра. Ни один stage3 или chroot в процессе не пострадал. Зачем все это нужно объяснять лень.

madcore ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.