Migrating between architectures (Русский)
На этой странице описаны два возможных способа миграции установленных систем с архитектуры i686 (32 бита) на x86_64 (64 бита). Методы избегают полной переустановки (т.е. очистки жёсткого диска). Один метод использует liveCD, другой изменяет систему изнутри.
Общая подготовка
Проверка 64-битной архитектуры
Для запуска 64-разрядного программного обеспечения, у вас должен быть 64-разрядный процессор. Большинство современных процессоров способны запускать 64-битное программное обеспечение. Вы можете проверить свой процессор с помощью следующей команды:
# grep --color -w lm /proc/cpuinfo
Для процессоров, поддерживающих x86_64, это вернёт выделенный цветом флаг lm
(“long mode”). Остерегайтесь того, что 'lahf_lm' — это другой флаг, который не указывает на 64-битные возможности.
Дисковое пространство
Вы должны быть готовы к увеличению размера директории /var/cache/pacman/pkg
примерно в два раза. Предполагается, что в кеше находятся только установленные в данный момент пакеты, как будто “pacman -Sc” (clean) был недавно запущен. Увеличение дискового пространства связано с дублированием каждого пакета для версии i686 и x86_64.
Если у вас недостаточно места, используйте Parted (Русский), чтобы изменить размер соответствующего раздела или примонтировать другой раздел в /var/cache/pacman
.
Не удаляйте пакеты старой архитектуры из кеша, пока система не будет полностью работать в новой архитектуре. Слишком раннее удаление пакетов может оставить вас без возможности вернуть изменения.
Источник питания
Миграция может занять значительное количество времени и было бы неудобно прерывать процесс. Вы должны рассчитывать как минимум минимум на час, в зависимости от количества и размера установленных пакетов и скорости интернет-соединения (хотя вы можете предварительно загрузить все пакеты перед началом критической части). Убедитесь, что вы подключены к стабильному источнику питания, предпочтительно с какой-либо отказоустойчивостью или резервным аккумулятором.
Пакеты для отката изменений
Если процесс миграция прервётся на полпути, существуют пакеты, которые могут помочь разобраться в ситуации, но они должны быть установлены до переноса основных пакетов. Подробнее об их использовании рассказано в разделе #Решение проблем.
Один из пакетов — busybox, который можно использовать для отката изменений. Он использует статическую привязку и не зависит от каких-либо библиотек. Должна быть установлена 32-разрядная версия (i686).
Другой пакет — это lib32-glibc из x86_64-репозитория multilib (Русский), который может пригодиться только при миграции с 32 бит. Вы можете безопасно пропустить этот пакет, а для запуска 32-битных программ явно вызывать /lib/ld-linux.so.2
.
Метод 1: с использованием Arch LiveCD
- Скачайте и запишите свежий образ Arch Linux ISO.
- Загрузите Arch LiveCD в режиме x86_64.
- Настройте доступ к сети.
- Примонтируйте текущую установленную систему. Например:
mount /dev/sda1 /mnt
. - Отредактируйте репозитории LiveCD в
/etc/pacman.conf
для соответствия текущим репозиториям/mnt/etc/pacman.conf
. - Обновите локальную базу данных 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
для освобождения места на диске после каждой установки. Или, так как весь пакет загружается в ramfs LiveCD, вы также можете смонтировать этот раздел или создать символическую ссылку на/var/cache/pacman/pkg
(например,ln -s /mnt/var/cache/pacman/pkg /var/cache/pacman/pkg
).
- 9. И наконец, выполните следующие команды:
# arch-chroot /mnt # mkinitcpio -p linux
- 10. Также обратите внимание на загрузчик, который тоже может потребовать миграции. К примеру:
# grub-install --recheck /dev/sda
- 11. После перезагрузки в новую 64-битную систему, отредактируйте
/etc/makepkg.conf.pacnew
и переместите его в/etc/makepkg.conf
для подготовки к миграции на новую архитектуру. Затем пересоберите сторонние пакеты, которые будут включать в себя пакеты из AUR (Русский).
- Перед пересборкой может потребоваться удаление заброшенных пакетов. Для поиска 32-битных пакетов воспользуйтесь данной командой:
$ LC_ALL=C 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
Подготовка пакетов
Кеширование старых пакетов
pacman -Rsn название_пакета
.Если у вас нет в кеше всех установленных пакетов, загрузите их (для старой архитектуры) для возможности восстановления.
# pacman -Qqn | pacman -Sw -
или используйте пакет fakepkgAUR, чтобы сгенерировать их.
Установка 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') # загрузка пакетов для новой архитектуры
/usr/lib32
, которые при загрузке не будут найдены и процесс загрузки прервётся.Установка пакетов
Установка ядра (64 бита)
Обновить ядро до 64-битного (x86_64) просто и безопасно: 32-битные и 64-битные приложения работают с 64-битным ядром одинаково хорошо.
Установите пакет linux.
# pacman -S linux
Установка lib32-glibc
Установите lib32-glibc на случай возникновения непредвиденных неполадок, а также 64-разрядную версию библиотеки glibc. Для этого может потребоваться включить репозиторий multilib (Русский) в /etc/pacman.conf
, если вы ещё не сделали этого ранее.
# pacman -S glibc lib32-glibc
Перезагрузка
После перезагрузки убедитесь, что работаете в архитектуре x86_64:
$ uname -m
x86_64
Переключение в терминал
Для продолжения, переключитесь в текстовую виртуальную консоль (напр. при помощи Ctrl+Alt+F1), если это возможно. Если при использовании первой консоли возникают проблемы, используйте вместо неё вторую (Ctrl-Alt+F2). Псевдо-терминалы вроде SSH должны работать, но в целях предосторожности рекомендуется прямой доступ. В процессе миграции некоторые пакеты будут заменены, что может сказаться на X11 и загрузить систему будет невозможно.
Установка Pacman
Воспользуйтесь pactree для установки Pacman и всех его зависимостей:
# pactree -l pacman | pacman -S -
В процессе могут возникать ошибки, но они не страшны пока Pacman продолжает работать.
Установка остальных пакетов
Установите все предварительно скачанные пакеты для новой архитектуры. (Сварите кофе и сделайте пару бутербродов, это может занять некоторое время.)
# 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
Также хорошей идеей может быть проверка всех "новых" файлов в /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
Миграция с систем 2017 года и старше
Вы можете столкнуться с проблемами при обновлении старых 32-битных систем, так как в 2017 году Arch Linux прекратил поддержку архитектуры i686. Для безопасного обновления рекомендуется использовать Arch Linux Archive. Например, сделайте снимок репозитория, обновите текущую систему и переключитесь на 64-битные версии пакетов той же версии.
Обратите внимание, что, возможно, вам придётся понизить уровень доверия в pacman.conf
(например, PackageTrustAll
для доверия ко всем пакетам), так как не все использованные для подписи пакетов GPG-ключи до сих пор действительны. Также рекомендуется удостовериться в использовании протокола HTTPS, чтобы как минимум быть уверенным в том, что пакеты загружаются с домена archlinux.org
.
KDE не запускается после миграции с 32-bit на 64-bit
KDE будет "падать" после перехода с 32-bit на 64-bit из-за некоторых 32-битных пакетов в /var/tmp. Для решения проблемы достаточно удалить все папки с кешем:
# rm -rf /var/tmp/kdecache-*
Проблемы Mutt при включённом кеше
Если после завершения миграции Mutt зависает на открытии папок, попробуйте переименовать папку с кешем. Если это решит проблему, переименованную папку можно удалить — Mutt сам создаст новую.