Migrating between architectures (Русский)

From ArchWiki
Jump to: navigation, search
Состояние перевода: На этой странице представлен перевод статьи Migrating between architectures. Дата последней синхронизации: 2017-08-16. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

На этой странице описаны два возможных способа миграции установленных систем с 64-разрядных (32-разрядных) на x86_64 (64-разрядные) архитектуры. Методы избегают «полной» переустановки (т. е. очистки жесткого диска). Один метод использует liveCD, другой изменяет систему изнутри.

Примечание: Технически этот процесс по-прежнему включает «переустановку», поскольку каждый пакет в системе должен быть заменен. Эти методы просто пытаются сохранить как можно больше из вашей существующей системы.
Важно: Если не указано явно, все эти методы «не проверены» и могут нанести непоправимый урон вашей системе. Продолжайте на свой страх и риск.

Общая подготовка

Проверить 64-битную архитектуру

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

 # grep --color -w lm /proc/cpuinfo

Для процессоров, поддерживающих x86_64, это вернет lm flag (“long mode”). Остерегайтесь того, что 'lahf_lm' - это другой флаг и не указывает на 64-битные возможности.

Дисковое пространство

Вы должны быть готовы к увеличению размера /var/cache/pacman/pkg примерно в два раза. Предполагается, что в кеше находятся только установленные в данный момент, как будто “pacman -Sc” (clean) был недавно запущен. Увеличение дискового пространства связано с дублированием каждого пакета для версии i686 и x86_64.

Если у вас недостаточно диска, используйте GParted, чтобы изменить размер соответствующего раздела или установить другой раздел в /var/cache/pacman.

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

Источник питания

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

Пакеты резервных копий

Если миграция завершилась неудачно, есть пакеты, которые могут помочь разобраться в ситуации, но они должны быть установлены до переноса основных пакетов. Подробнее об использовании их в разделе #Устранение проблем ниже.

Один пакет busybox, который можно использовать для возврата изменений. Он статически связан и не зависит от каких-либо библиотек. Должна быть установлена 32-разрядная версия (i686).

Другой пакет lib32-glibc, из Multilib x86_64 репозитория, может пригодиться только при миграции с 32 бит. Вы можете безопасно пропустить этот пакет, а для запуска 32-битных программ явно вызывать /lib/ld-linux.so.2.

Метод 1: с использованием Arch LiveCD

  1. Скачайте и запишите свежий образ Arch Linux ISO.
  2. Загрузите Arch LiveCD в режиме x86_64.
  3. Настройте доступ к сети.
  4. Примонтируйте текущую установку. Например: mount /dev/sda1 /mnt.
  5. Отредактируйте репозитории LiveCD /etc/pacman.conf для соответствия текущим репозиториям /mnt/etc/pacman.conf.
  6. Обновите базу pacman и очистите кэш при помощи команд:
 # pacman --root /mnt -Syy
 # pacman --root /mnt -Scc
6. Сначала попробуйте переустановить только группу base, затем каждый пакет, при установке которого возникла ошибка. Найти эти пакеты можно при помощи pacman --root /mnt -Qo <error file>. Затем повторяйте установку группы base до тех пор, пока установка не закончится без ошибок.
 # pacman --root /mnt -S base
7. Получить список всех установленных пакетов и переустановить их можно при помощи команды:
 # pacman --root /mnt -Qnq | pacman --root /mnt -S -
8. Команду следует запускать дважды, потому что при первом запуске многие пакеты не смогут выполнить пост-установочные скрипты из-за неверной архитектуры. К примеру, sed, grep, perl и другие. Либо вы можете записать пакеты, установка которых завершилась ошибкой, а затем вернуться к ним после окончания миграции и переустановить. Если же при установке закончилось свободное место, вы можете отфильтровать пакеты по алфавиту и обновлять их группами. Например, сначала ...| grep '^[a-k]' |..., затем '^l' и в конце '^[m-z]'. Также не забывайте запускать после каждой установки pacman --root /mnt -Scc для освобождения места.
9. И в конце запустите
 # arch-chroot /mnt 
 # mkinitcpio -p linux
10. Также обратите внимание на загрузчик, который тоже может потребовать миграции. К примеру:
 # grub-install --recheck /dev/sda
11. После перезагрузки в новую 64-битную систему отредактируйте /etc/makepkg.conf.pacnew и переместите в /etc/makepkg.conf для подготовки к миграции на новую архитектуру сторонних пакетов, включая AUR. Затем их необходимо пересобрать.
Перед пересборкой может потребоваться удаление orphaned пакетов. Для поиска 32-битных пакетов воспользуйтесь:
 $ pacman -Qo `find /usr/bin -type f -exec bash -c 'file "{}" | grep 32-bit' \; | cut -d':' -f1` | cut -d' ' -f5 | sort | uniq | tee list

Метод 2: из работающей системы

Убедитесь, что ваша система полностью обновлена и работоспособна.

# pacman -Syu

Подготовка пакетов

Кеширование старых пакетов

Примечание: Если вы устанавливали пакеты без поддержки новой архитектуры из AUR или сторонних репозиториев, pacman уведомит, если не сможет найти замену. Запишите их, после миграции переустановите, а затем удалите при помощи pacman -Rsn package_name.

Если у вас нет в кэше всех установленных пакетов, загрузите их (для старой архитектуры) для возможности восстановления.

# pacman -Qqn | pacman -Sw -

или используйте bacman из pacman.

Установка busybox

Если вы мигрируете с 32 бит на 64 бита, самое время установить 32-битный busybox

# pacman -S busybox

Изменение архитектуры Pacman

Отредактируйте /etc/pacman.conf и измените Architecture с auto на x86_64.

Убедитесь, что в списках серверов в /etc/pacman.conf и /etc/pacman.d/mirrorlist используется $arch вместо принудительно заданных i686 или x86_64. Затем принудительно синхронизируйте Pacman с репозиториями:

# pacman -Syy                     # принудительная синхронизация с новой архитектурой

Скачайте новые пакеты

Скачайте для всех установленных пакетов версию для новой архитектуры:

# pacman -Sw $(pacman -Qqn|sed '/^lib32-/ d')  # скачать пакеты для новой архитектуры
Важно: Не устанавливайте сразу пакетlib32-glibc. После ldconfig, при установке linux, созданный образ будет включать библиотеки вида librt.so в /usr/lib32, которые при загрузке не будут найдены и процесс загрузки прервется.

Установка пакетов

Установка ядра (64-bit)

Обновить ядро до 64-битного (x86_64) просто и безопасно: 32-битные и 64-битные приложения работают с 64-битным ядром одинаково хорошо.

Установите пакет linux.

# pacman -S linux

Установка lib32-glibc

Установите lib32-glibc на всякий случай. Для этого может потребоваться включить репозиторий multilib в /etc/pacman.conf, если вы еще не сделали это ранее.

# pacman -S lib32-glibc
Примечание: Если установка прервется из-за найденного файла из-за пакета с другим именем, используйте pacman с опцией --force

Перезагрузка

После перезагрузки убедитесь, что работаете в архитектуре x86_64:

$ uname -m
x86_64

Переключение в консольный терминал

Для продолжения по возможности переключитесь в текстовую виртуальную консоль (напр. при помощи Ctrl+Alt+F1). Если при использовании первой консоли возникают проблемы, используйте вместо нее вторую (Ctrl-Alt+F2). Псевдо-терминалы вроде SSH должны работать, но в целях предосторожности рекомендуется прямой доступ. В процессе миграции некоторые пакеты будут заменены, что может сказаться на X11 и загрузить систему будет невозможно.

Установка Pacman

Важно: После запуска обновления pacman и его зависимостей нельзя прерывать процесс! Pacman и все зависимости должны быть установлены одновременно и одной командой.
Важно: После выполнения этой команды только Busybox, Bash и Pacman останутся исполняемыми до момента миграции остальных пакетов. При использовании sudo вы должны получить привилегии root перед следующей командой.

Воспользуйтесь pactree для установки Pacman и всех его зависимостей:

# pactree -l pacman | pacman -S -

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

Важно: До окончания выполнения команды не перезагружайтесь. Если вы все-таки решитесь перезагрузиться, продолжить установку можно из другого Linux-окружения (например, установочного образа)

Установка остальных пакетов

Установите все предварительно скачанные пакеты для новой архитектуры. (Сварите кофе и намажьте пару бутербродов красной икрой, это небыстрый процесс)

# pacman -Qqn | pacman -S -

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

После этого этапа миграция будет окончена, можно безопасно перезагузить систему.

Однако если были установлены пакеты из AUR, необходимо их переустановить отдельно. Список можно получить командой:

$ pacman -Qqm

Очистка

Теперь можно безопасно удалить busybox и lib32-glibc.

Флаги компиляции Makepkg

При обновлении новая версия /etc/makepkg.conf может быть сохранена как /etc/makepkg.conf.pacnew. Если это произошло, то необходимо заменить прежнюю версию на новую или отредактировать ее для сборки при помощи makepkg в будущем.

# mv /etc/makepkg.conf /etc/makepkg.conf.backup && mv /etc/makepkg.conf.pacnew /etc/makepkg.conf

Неплохо бы было проверить вообще все "new" файлы в /etc при помощи:

# find /etc/ -type f -name \*.pac\*

Устранение проблем

При замене glibc на версию для новой архитектуры в процессе обновления многие приложения для старой архитектуры могут не запуститься. Проблему можно решить при помощи busybox и lib32-glibc.

Busybox

В Arch Busybox статически связан. Он может быть запущен без библиотек и предоставить вам массу команд. Например, для извлечения i686-версии Pacman из пакета в кеше можно воспользоваться:

# busybox tar xf /var/cache/pacman/pkg/pacman-3.3.2-1-i686.pkg.tar.gz -C <some folder>

Lib32-glibc

Пример запуска 32-битного /bin/ls:

# /lib/ld-linux.so.2 /bin/ls

KDE не запускается после миграции с 32-bit на 64-bit

KDE будет падать после перехода с 32-bit на 64-bit из-за некоторых 32-битных пакетов в /var/tmp. Для решения проблемы достаточно удалить все папки с кешем.

# rm -rf /var/tmp/kdecache-*

Проблемы Mutt при включенном кеше

Если после завершения миграции Mutt зависает на открытии папок, попробуйте переименовать папку с кешем. Если это решит проблему - переименованную папку можно удалить, Mutt сам создаст новую.

See also