Видео ролики бесплатно онлайн

Смотреть супер видео

Официальный сайт fresher 24/7/365

Смотреть видео бесплатно

ava1ar 17.03.2010 02:04

ArchlinuxМигрируем 32-х битную Arch систему в 64-х битную без полной переустановки.

Итак, сегодня я расскажу о своем новоприобретенном опыте о миграции установленной 32-ой битной Arch Linux системы в 64-х битную - такая задача встала передо мной после апгрейда процессора в ноутбуке. Как арчевод со стажем я первым делом полез на вики, что бы посмотреть как это делается правильно и очень разочаровался, прочитав вот такой вот текст:
Can I upgrade/switch my system from i686 to x86_64 without reinstalling?

No. However, you can start the system with the Arch64 install CD, mount the disk, backup anything you may want to keep that isn't a 32-bit binary (e.g: /home & /etc), and install.

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

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

Этап первый, подготовительный. Выполняется на i686 системе, которую и будем подвергать миграции:
(a) обновляем систему до актуального состояния;
(b) в случае, если в системе используется не родное арчевское ядро (kernel26), стоит на время миграции установить его и миграцию производить на нем, дабы уменьшить риск операции;
(c) чистим систему от i686-only пакетов - у меня их оказалось два: skype и virtualbox-ose (в комьюнити репозитории почему-то только i686 версия), а также от пакетов из AUR - из все-равно придется пересобирать, а отсутствие их в системе ускорит процесс (в принципе, пакеты можно и оставить, просто дальше некоторые операции нужно будет выполнять с поправкой на их наличие)
(d) удаляем i686-only репозитории из pacman.conf
(e) зачищаем кэш и неиспользуемые репозитории с помощью команды
1
# pacman -Sсс

(f) Перенастраиваем зеркала из mirrorlist с c i686 на x86_64:
1
2
# mv /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.i686
# sed -e 's/i686/x86_64/' /etc/pacman.d/mirrorlist.i686 > /etc/pacman.d/mirrorlist

Кроме того, нужно позаботится и о других mirror файлах - у меня например был еще kdemodmirrorlist для kdemod-пакетов.
(g) Теперь можно пересинхронизировать кэш pacman'a:
1
# pacman -Syy

и (внимание) только скачать все требуемые пакеты в кэш
1
# pacman -S -w `pacman -Qq`

но не устанавливать их (!). Попытка установить их сейчас приведет систему в неработоспособное состояние!

Внимание: скачивание пакетов потребует свободного места в корневом разделе, времени на закачку и приличного трафика (у меня было ~ 1.3Gb). Также, что бы ускорить процесс закачки в несколько раз (при быстром интернет-канале) советую установить powerpill и последнюю команду заменить на
1
# powerpill -S -w `pacman -Qq`


Этап второй, основной. Выполняется на x86_64 live системе, запущенной с cd/dvd/flash носителя (я использовал версию 200908, установленную на 1Гб флешку).
(a) грузимся в livecd и логинися root'ом.
(b) Монтируем куда-нибудь корень нашей основной системы:
1
2
# mkdir /media/i686
# mount /dev/sdaX /media/i686

(c) Переустанавливаем все пакеты в нашей системе с опцией --noscriptlet (будьте внимательны с опциями pacman'a):
1
# pacman --root /media/i686 --cache /media/i686/var/cache/pacman/pkg --noscriptlet -S `pacman --root /media/i686 -Qq`


<лирическое отступление>
Думаю, что самое время ответить на возникшие вопросы, которых как минимум два: что же это за параметр такой --noscriptlet и почему нельзя просто сделать обновление всех пакетов без этих плясок в бубном?
Отвечу на оба, начиная со второго:
Просто обновить системы с i686 на x86_64 не получится вот почему. Процесс установки пакета а Arch Linux состоит не только из распаковки файлов и копировании их по нужным местам, это еще и запуск всяческих post-install действий (например для ядра это герерация ramdisk'a, для glibc - переренерация всех локалей и т.д.). Во время обновления пакетов будет происходить постепенная замена i686 библиотек на x86_64, которые - очевидно - не будут работоспособны с в текущей системы из-за другой архитектуры, и если какой-то их обновляемых пакетов потребует доступ к уже обнволенной бибилиотеке, он получить ошибку и неверном ELF-классе и завершит операцию с ошибкой.
Ммм... вот хорошая аналогия - у вас есть карточный домик, собранный из одной колоды карт (i686), а вы хотите пересобрать его из другой (x86_64), но карты там другого размера - очевидно вам придется все разобрать и собрать уже их новых карт, но проблема в том, что последовательность разборки диктуется вам со стороны и она не совпадается с желаемой (сверху вниз), и нет гарантии что на втором шаге вас не попросят вынуть карту из основания и т.д. Ну и соотвественно если продолжать аналогию, если домик рухнет, то это равносильно тому, что вы уроните всю систему и тут уж без полной переустановки никак.

Теперь ответ первый вопрос: опция --nosctiplet заставляет pacman не выполнять никакие post-intsall действия, а только распаковывать файлы из пакета. Понятно, что это не тождественно полной установке и должно использоваться в осбых случаях и с осторожностью - но собственно описанный в данной статье процесс и может счиаться таким вот случаем :)
</лирическое отступление>

(d) Монтируем вируальные файловые системы
1
2
3
4
5
# mount --bind /proc /media/i686/proc
# mount --bind /sys /media/i686/sys
# mount --bind /dev /media/i686/dev
# mount --bind /dev/pts /media/i686/dev/pts
# mount --bind /dev/shm /media/i686/dev/shm

(e) chroot'имся в / основной системы:
1
# chroot /media/i686

(f) Монтируем /boot раздел (если он у вас вынесен из /) - это очень важный шаг, без него не удасться обновить ядро системы на 64х-битное:
1
# mount /boot

(g) Обновляем все пакеты, на этот раз полностью:
1
# pacman -S `pacman -Qq`


Этап третий, заключительный. В принципе, на этом миграция практически закончена, осталось размонтировать разделы и перезагрузится в обновленную систему, а также поправить некоторые файлы конфигурации.
(a) Размонируем /boot
1
# umount /boot

(b) Выходим из chroot
1
# exit

(c) Размонтируем выртуальные файловые системы:
1
2
3
4
5
# umount /media/i686/proc
# umount /media/i686/sys
# umount /media/i686/dev
# umount /media/i686/dev/pts
# umount /media/i686/dev/shm

(d) Отмонтируем / основсной системы
1
# umount /media/i686

(e) Перезагружаемся в основную систему
Если все прошло успешно, то вы уже загрузитесь уже в 64х битную систему. Дальше осталось просмотреть в системе файлы .pacsave/.pacnew - бэкапы и новые версии файлов конфигурации, поправить makepkg.conf и переустановить пакеты из AUR'a.

Собственно на этом все.Помните: если нельзя, но очень хочется, то можно :)


Тэги: Arch Linux pacman
+ 23 -
Похожие Поделиться

l1feh4ck3r 17.03.2010 05:56 #
+ 0 -
Круть!
Перевести и добавить в вики!
ava1ar 17.03.2010 08:01 #
+ 0 -
Так получилось, что ангоийский вариант был готово первым :) Пока правда, только на форуме, но в ближайшее время планирую перенести в вики, т.е. текущий пункт в faq по сути не верен.
ZogG 17.03.2010 07:38 #
+ 0 -
не вижу большого отличия от переустановки(просто тут она произошла на уже существующие пакеты, а не с нуля).
(c) Переустанавливаем все пакеты в нашей системе с опцией --noscriptlet (будьте внимательны с опциями pacman'a):
# pacman --root /media/i686 --cache /media/i686/var/cache/pacman/pkg --noscriptlet -S `pacman --root /media/i686 -Qq`
За подробностями о назначении --noscriplet читатель направляется в
# man pacman


не красиво, дал комманду с важным параметром, опиши, что это ( я сам не арчевод, но такие статьи люблю, и стало интересно, что это)
ava1ar 17.03.2010 08:21 #
+ 0 -
не вижу большого отличия от переустановки(просто тут она произошла на уже существующие пакеты, а не с нуля).


По сути да (т.к. смена архитектуры в любом случае потребует смены всех бинарников в системе), но все же есть одно отличия есть:
1) не нужно запускать инсталлятор
2) в прицнипе можно обойтись без бэкапа данных с / т.к. все операции вполне безопасны и не затрагивают не бинарные данные (с инсталером пришлось бы делать backup/restore как минимум /etc)
3) за раз вроисходит обновление всей системы - инсталятором же пришлось бы действовать поэтапно: снос /, утановка чистой системы, восстановление из backup'а конфигов, доустановка пакетов - а это уже гораздо более сложная последовательность шагов, выше вероятность проблем
4) в данном способе все необходимые пакеты выкачиваются еще в оригинальной системе - во время самом миграции доступ в сеть не нужен. Для меня это было удобно по 2-м причинам: а) слить данные из сети можно в одном месте (я сделал это на работе - там интернет на порядок быстрее), а продолжить операцию уже дома в спокойной обстановке и b) поднять доступ к интернету из live-системы дома мне было бы затруднительно, т.к. используется связка wifi+pptp vpn - не самый friendly вариант подключения - а в описанном способе миграции все операции с live-сd проводятся offline.
не красиво, дал комманду с важным параметром, опиши, что это
Да, все верно, доваблю краткое описание.
ZogG 17.03.2010 08:55 #
+ 1 -
ну есть что-то в этом, советую посмотреть мой пост про перевод генту с 32 на 64 бита, какие подводные камни встретил, ну и я еще заодно перешел на ехт4, и полностью переставлял.
ava1ar 17.03.2010 09:02 #
+ 0 -
Обязательно, стало интересно, насколько трудоемок такой вот переход в разных дистрибутивах. Начну подалуй с Gentoo :)
ava1ar 17.03.2010 09:23 #
+ 0 -
Прочитал... не сказал бы что на gentoo алгоритм перехода проще, просто он другой - специфика source-based. Думаю, по скорости на арче бысрее получится, но накладнее в плане трафика.
razum2um 17.03.2010 17:27 #
+ 0 -
Ога, хорошая аналогия с post-install в топике, а у нас с тобой че? Можно post-install отрубить?
пока на ум приходит только получить список пакетов и что-то вродь
for i in `qlist -I`; do ebuild $i install; done
но боюсь, что карточный домик таки упадет

Это видел, но чисто интересно: загрузившись с х64 ядра на х32 систему, реально пересобраться без лайвов?!
:D
ZogG 17.03.2010 22:49 #
+ 0 -
думаю да, так как генту можно собирать на одной машине сразу нескольким компам (список можно взять из своего же старого world), но это будет как ставить с нуля, только вместо на чистый лист, будем писать поверх, конфиги оставит, но может и проблематичные либы оставить. вообщем не совсем кошерно.
neurosurgeon 17.03.2010 10:09 #
+ 1 -
По моему, переустановить систему в данной ситуации не сложнее, а может и проще.

>зачищаем кэш и неиспользуемые репозитории с помощью команды
# pacman -Syy

разве не # pacman -Scc ?
ava1ar 17.03.2010 10:17 #
+ 0 -
точно, пасиба, исправлено.
nymiiin 17.03.2010 17:05 #
+ 0 -
арчем (пока?) не пользуюсь, но все равно рад
haku 17.03.2010 17:07 #
+ 0 -
Какой однако спорный способ переустановить/обновить систему.
С точки зрения перфекциониста так конечно делать нельзя -- нет никакой гарантии что в ветвях дерева файловой системы не осталось куча ненужного х86 хлама, и это потом где-нибудь не всплывёт. С другой стороны действительно -- это не полная переустановка, хотя и очень похожа на неё.
С пол-года назад переводил я дженту с х86 на х86_64. Правда с небольшим отличием в деталях -- создавал пустой раздел под корень, копировал туда конфиги из /etc. Ну а потом полная пересборка всего. Т.к. фактически то же самое, что и автор топика, только старая система не перезаписывалась при установке новой.
ava1ar 17.03.2010 18:22 #
+ 0 -
Прелесть этого способа в том, что он гарантирует полный(!) снос всех(!) 32-х бинарников и по сути равносилен чистой установке (если все сделать верно). Если при работе с системой вы следовали Arch Way - не ставили софт через configure && make && make install, а использовали makepkg и pacman, то все бинарники в системе есть части каких-то пакетов. А сам метод, по сути, заключается в переустановке всех пакетов в системе, но при этом сами пакеты подменятся на пакеты другой архитектуры. Т.к. переустановка пакета = удаление пакета+установка пакета, то в результате такой переустановки мы получаем систему такой как она была, но уже 64х битной.
ZogG 17.03.2010 22:51 #
+ 0 -
ха, у меня хоть и генту, но есть вещи мультилибные и есть поддержка 32бита, вопрос - переставит ли он эти либы заново, или поставит только различающие, что повлечет некоректную работу.
Minoru 17.03.2010 20:20 #
+ 0 -
Интересно, а как такое же под Debian провернуть? Сходу ни в man aptitude, ни в man apt-get опции типа --noscriptlet не нашёл. Грустно…
divius 17.03.2010 23:25 #
+ 0 -
Не думаю, что в дебиане/убунту такое возможно. Хотя... Опция такая есть, она по-другому называется, всё остальное тоже можно провернуть. Но я бы не рискнул.
ava1ar 18.03.2010 00:01 #
+ 0 -
Экспериментировать на живой системе точно не рекомендую. Я так вышеописанный спобоб придумыыал и обкатывал на виртуалке 2 вечера, и когда уже точно перепроверил все шаги и ньюансы - обновил существующую систему. К слову сказать обновление заняло от силы полчаса, учитывая что минут 15 просто качались пакеты (благо интернет на работе хороший).
А вообще, сам процесс исследования и хкспериментов для меня весьма увлекателен. Банально переустановить было бы быстрее, но идея была в тои, что бы получше узнать любимый дистрибутив и его инструменты.
Minoru 18.03.2010 00:30 #
+ 0 -
М, так опция всё-таки есть? А как она выглядит-то, не подскажешь?

Смотреть онлайн бесплатно

Онлайн видео бесплатно


Смотреть русское с разговорами видео

Online video HD

Видео скачать на телефон

Русские фильмы бесплатно

Full HD video online

Смотреть видео онлайн

Смотреть HD видео бесплатно

School смотреть онлайн