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
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
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-х битную без переустановки системы. Несмотря на некоторые внутренние проблемы, которые могли бы подпортить чистоту теста, итог оказался неутешительным - система была приведена в нерабочее состояние и пришлось переустанавливать ее.
Надеюсь, эта статья была кому-нибудь полезна.
Получается что ваша вина в том, что забыли glibc.
А значит вывод в конце статьи сделан неверно.
Если бы вы не забыли glibc, то переход завершился бы как положено? Вот чего я не пойму.
А значит вывод в конце статьи сделан неверно.
Если бы вы не забыли glibc, то переход завершился бы как положено? Вот чего я не пойму.
Нет. Глибц я забыл первый раз, потом все поправил, но в ручную (разархивировал пакеты), но этого оказалось не достаточно. Например, из-за того что не обновился agetty (а может и что-то еще), который ни к чему из указанного в этой команде "pacman -S pacman glibc libfetch libarchive openssl acl attr xz-utils bzip2 zlib readline bash ncurses expat" не идет в зависимостях. Возможно раньше он шел, но на тот момент, что я делал, это было не так.
Спасибо, статья действительно полезная, я даже сохранил ее на диск - на случай, если когда-нибудь что-то пойдет не так и придется переустанавливать систему.
Что касается моего мнения относительно итогового вывода статьи - все верно, хорошо рассуждать, сидя с работающей системой, и задним числом говорить об ошибках, которые совершил автор. А по факту получается, когда сам сталкиваешься - система мертва, хорошо если залогиниться в консоль удается, но и этого может не быть, НИЧЕГО не работает, инет только на маленьком экранчике телефона - и делаешь неутешительные выводы.
Статья хороша хотя-бы тем, что показывает на свет божий достаточный ворох граблей и вдобавок еще вероятные грабли, которые не были обнаружены. Поэтому люди, владеющие линухом на моем, скажем, уровне - заранее знают теперь, что овчинка выделки не стоит, и проще сохранять конфиги, список пакетов и /home - и переставлять все с нуля.
Ну и за команды создания отдельных списков из реп и из АУРа - отдельное спасибо, не хватало очень)
Что касается моего мнения относительно итогового вывода статьи - все верно, хорошо рассуждать, сидя с работающей системой, и задним числом говорить об ошибках, которые совершил автор. А по факту получается, когда сам сталкиваешься - система мертва, хорошо если залогиниться в консоль удается, но и этого может не быть, НИЧЕГО не работает, инет только на маленьком экранчике телефона - и делаешь неутешительные выводы.
Статья хороша хотя-бы тем, что показывает на свет божий достаточный ворох граблей и вдобавок еще вероятные грабли, которые не были обнаружены. Поэтому люди, владеющие линухом на моем, скажем, уровне - заранее знают теперь, что овчинка выделки не стоит, и проще сохранять конфиги, список пакетов и /home - и переставлять все с нуля.
Ну и за команды создания отдельных списков из реп и из АУРа - отдельное спасибо, не хватало очень)
Я же это веду к тому, чтобы повторить эксперимент=)
Чтобы четко по статье в вики.
Сам, к сожалению пока не могу этим заняться, но в планы уже записал.
Правда я думаю сначала опробовать сие на виртуалке, ибо до уровня автора статьи не дотягиваю и руками что-то в черной консоле сделать не смогу.
Чтобы четко по статье в вики.
Сам, к сожалению пока не могу этим заняться, но в планы уже записал.
Правда я думаю сначала опробовать сие на виртуалке, ибо до уровня автора статьи не дотягиваю и руками что-то в черной консоле сделать не смогу.
Cool story bro. А ещё можно научиться пользоваться поиском..
http://welinux.ru/post/1598/
http://welinux.ru/post/2540/
http://welinux.ru/post/1598/
http://welinux.ru/post/2540/
ага, я уже ответил на эти вопросы выше. но, если признаться, то да - я не подумал тут это поискать, однако статья получилась неплохая, по-моему. неплохая еще тем, что в ней четко описаны цели, и выводы, а так же довольно подробно действия и результаты их работы.
Хм, а разницу в производительности заметили? И если Вы хотели просто чтобы использовалась вся оперативка, то достаточно было ядро пересобрать.
Способ с установкой предварительно сохраненного списка пакетов действительно проще и быстрее.