caxap 14.08.2011 13:27

ArchlinuxПереход с 32-битной на 64-битную архитектуру (дистрибутив archlinux)

Недавно я решил обновить 32-х битный арч на своем ноуте до 64-х битного. Эта статья будет содержать рассказ о том, как я это делал, что у меня получалось, какие ошибки совершил и чем все закончилось. Скриншотов не ждите, потому что было это несколько недель назад.



Признаться я с детства не любил 64-х битную архитектуру, потому как застал ее рождение и сразу же решил попробовать от чего получил неизгладимые впечатления, почти как от визита стоматолога в советское время (пруф: http://dirty.ru/comments/319917/). Поэтому даже на новый ноут с 4-я Гб оперативки я поставил 32-х битную систему и был согласен с потерей одного гигабайта.

Я не буду рассказывать про причины, побудивше меня установить 64-ую систему, а то и так затянувшееся введение растянется еще на пару абзацев. Просто так сложилось, и все.

Итак, моя цель была обновить дистрибутив archlinux на рабочей машине с 32-х бит на 64-е бита без переустановки системы и по возможности с наименьшим количеством телодвижений.

Прежде чем браться за сие сомнительное действо я немного погуглил этот вопрос. Для "всеми любимого дистрибутива" можно отметить вот эти две ссылки:

https://wiki.archlinux.org/index.php/Arch64_FAQ

https://wiki.archlinux.org/index.php/Migrating_Between_Architectures_Without_Reinstalling

а еще есть клевый проект дебиана по мультиархитектурности:

http://wiki.debian.org/Multiarch

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

Русского варианта этой статьи я не видел, так что вот вольный перевод одной очень важной фразы из этого руководства:

Warning: Unless explicitly stated, all these methods are UNTESTED and may irreparably damage your system. Continue at your own risk.

Предупреждение: пока не указано иного, все методы, приведенные в этой статье, нетестированны и могут необратимо повредить вашу систему. Продлжайте на свой страх и риск.

Ну я и продолжил ... :)

Первый метод мне не подходил, поэтому я шел по второму пути. Для начала нужно сохранить список всех установленных пакетов. Хорошая идея разделить пакеты из аура (и прочих) и их стандартных репозиториев. Сделать это можно вот такой командой, а точнее двумя:

1) pacman -Qqe | grep -vx "$(pacman -Qqm)" > /backup_dir/pacman.ls

2) pacman -Qqm > /backup_dir/aur.lst

* взято отсюда https://bbs.archlinux.org/viewtopic.php?id=64485

Все, а потом удалить все пакеты из аура и левых репозиториев. Наверное как-то так:

pacman -Rsn $(cat aur.lst)

Дальше есть один важный нюанс. Если вы что-то напортачите с обновлением, то нужно будет делать откат, а для этого неплохо бы иметь все версии установленных в системе пакетов в кеше, хотя мне не понадобились они. Только место зря занимают сейчас в системе. Арчвики говорит, что делается это вот так:

pacman -Sw $(comm -23 <(pacman -Qq) <(pacman -Qmq))

На всякий пожарный случай еще неплохо бы было сделать бекап важных файлов:


cp -a /etc /backup_dir

Тут стоит помнить, что:

Некоторые программы хранят неокторые файлы в /var/lib (говорят так делает амарок)

Некоторые программы хранят конфиги тем итп в /usr/share

Так же можно забекапить каталог /opt
(от себя добавлю, что забекапил только /etc)

Вот почти и все. Это все были подготовительные шаги. Я еще на всякий слечай установил busybox (просто на всякий :)

Теперь поехали:

Меняем архитектуру в конфиге пакмана:

sed -i -e s/'Architecture = auto'/'Architecture = x86_64'/g /etc/pacman.conf

а потом удаляем локальную базу данных пакетов

rm -rf /var/lib/pacman/sync/*

(я забекапил перед этим)
и выполняем команду

pacman -Sy

тут все дожно пройти без проблем.

Дальше загружаем все необходимые нам пакеты для новой архитектуры:

pacman -Sw $(pacman -Qq|sed '/^lib32-/ d')

первый раз у меня эта команда не отработала и пришлось добавить новый репозиторий multilib в файл pacman.conf:

[multilib]
Include = /etc/pacman.d/mirrorlist

после этого загрузка нужных пакетов работает нормально.

Дальше вики советует нам установить lib32-glibc, но у меня этого сделать не получилось, потому что glibc уже присутствовал в системе и я решил забить на это (а зря, это бы спасло меня от многих проблем :)

Дальше все вроде как очень просто, устанавливаем новое 64-х битное ядро (перед установкой ядра я бы советовал вам привести файлик mkinitcpio.conf в его первоначальный вид)

pacman -S kernel26 (или для нового ядра pacman -S linux)

а после установки перезагружаемся.

Тут тоже все должно быть нормально, так как 32-х битные программы обычно работают под 64-х битным ядром.

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

Следующий шаг - это обновить пакман (по-моему, это самая сложная часть дела. По крайней мере так было в моем случае).

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

pacman -S pacman glibc libfetch libarchive openssl acl attr xz-utils bzip2 zlib readline bash ncurses expat

Однако к этому моменту вы уже не сможете открыть свой любимый браузер и подсмотреть эту команду в вики, поэтому варианта у вас два либо ее записать, либо использовать консольный браузер, нарпимер links. К слову сказать, я не записал эту команду, и как показалось после перезагрузки, links у меня не был установлен.

Правильно говорят, что лень матушка вперед нас родилась. Мне было лень ставить линкс и я решил, что я самый умный, поэтому подсмотрел прямые зависимости пакмана и установил их, не забыв добавить в список установки glibc.

Тут сразу появилось несколько проблем:

Во-первых, как я обнаружил после перезагрузки ... 64-х битный глибц не любит работать с 32-х битным башем и эсашем (который линк на баш), на котором написаны загрузочные скрипты :)

А во-вторых, после моих игр с системой пакман начал выдавать странную ошибку типа "файл присутствует в системе, и я не могу его перезаписать" (Это видимо случилось еще до обновления, но обнаружилось только сейчас. Гугленье по этому поводу ничего особого не дало, да и времени разбираться не было). В итоге получилось, что пакман не перезаписал файлы старых библиотек, но пометил пакеты как установленные.

А в самом большом итоге имеем незапускающуюся систему (из-за несовместимости баша и глиба) да еще и с нерабочим пакманом.

Выход был один (ну или два, но второй, полная переустановка, мне пока не нравился). Загрузившись из лайфсиди я вручную "установил" (имеется ввиду скопировал все нужные файлы из архива пакета) 64-х битные версии нужных пакетов и решил продолжить с того момента, где все пошло не так.

Тут важно отметить, что вики немного ошибается (или мой метод неверный, потому что я не учел зависимости, которые тянут за собой эти "необходимые" пакеты). Даже после установки всех этих пакетов система остается в нерабочем состоянии, потому что, например, 32-х битная /sbin/agetty совсем не хочет работать в 64-х битной системе, но никто пакет util-linux в зависимости не тянет. Соответственно, вы не сможете залогиниться, чтобы обновить оставшиеся пакеты.

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

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

Надеюсь, эта статья была кому-нибудь полезна.


Тэги: 32-bit 64-bit architecture ArchLinux
+ 4 -
Похожие Поделиться

taliano 14.08.2011 13:42 #
Жестокие издевательства))
Способ с установкой предварительно сохраненного списка пакетов действительно проще и быстрее.
caxap 14.08.2011 13:51 #
дак он не работает в том то и дело :(
VovanR 14.08.2011 20:02 #
Получается что ваша вина в том, что забыли glibc.
А значит вывод в конце статьи сделан неверно.

Если бы вы не забыли glibc, то переход завершился бы как положено? Вот чего я не пойму.
caxap 15.08.2011 01:07 #
Нет. Глибц я забыл первый раз, потом все поправил, но в ручную (разархивировал пакеты), но этого оказалось не достаточно. Например, из-за того что не обновился agetty (а может и что-то еще), который ни к чему из указанного в этой команде "pacman -S pacman glibc libfetch libarchive openssl acl attr xz-utils bzip2 zlib readline bash ncurses expat" не идет в зависимостях. Возможно раньше он шел, но на тот момент, что я делал, это было не так.
narical 15.08.2011 12:34 #
Спасибо, статья действительно полезная, я даже сохранил ее на диск - на случай, если когда-нибудь что-то пойдет не так и придется переустанавливать систему.

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

Статья хороша хотя-бы тем, что показывает на свет божий достаточный ворох граблей и вдобавок еще вероятные грабли, которые не были обнаружены. Поэтому люди, владеющие линухом на моем, скажем, уровне - заранее знают теперь, что овчинка выделки не стоит, и проще сохранять конфиги, список пакетов и /home - и переставлять все с нуля.

Ну и за команды создания отдельных списков из реп и из АУРа - отдельное спасибо, не хватало очень)
VovanR 15.08.2011 22:07 #
Я же это веду к тому, чтобы повторить эксперимент=)
Чтобы четко по статье в вики.
Сам, к сожалению пока не могу этим заняться, но в планы уже записал.

Правда я думаю сначала опробовать сие на виртуалке, ибо до уровня автора статьи не дотягиваю и руками что-то в черной консоле сделать не смогу.
cyrus 16.08.2011 16:26 #
Cool story bro. А ещё можно научиться пользоваться поиском..

http://www.welinux.ru/post/1598/
http://www.welinux.ru/post/2540/
caxap 18.08.2011 11:42 #
ага, я уже ответил на эти вопросы выше. но, если признаться, то да - я не подумал тут это поискать, однако статья получилась неплохая, по-моему. неплохая еще тем, что в ней четко описаны цели, и выводы, а так же довольно подробно действия и результаты их работы.
darkrain 16.08.2011 22:13 #
Хм, а разницу в производительности заметили? И если Вы хотели просто чтобы использовалась вся оперативка, то достаточно было ядро пересобрать.
caxap 18.08.2011 11:44 #
разницу в производительности ... визуально - нет. мне и без этого гига всегда оперативки хватало с головой. а ноут и так довольно мощный, а тяжелые проги я на нем не пускаю :)