Все об Arch Linux

Arch Linux будет тем, что вы из него сделаете!

Восстановление системы без сети: pacman -U и офлайн-кэш

Суть: сломанную систему можно восстановить без интернета, если есть сами пакеты. Собери нужные .pkg.tar.zst на другом компьютере или достань их из кэша, перенеси на флешке и поставь командой pacman -U /путь/*.pkg.tar.zst. Так лечится и kernel-module mismatch, когда после обновления ядра модули DKMS не совпадают с ним по версии. Ниже полный порядок действий для офлайн-восстановления.

Что делать, если система сломалась, а интернета нет?

Не переустанавливай систему. Почти любую поломку в Arch Linux можно вылечить офлайн, если под рукой есть пакеты. Вопрос только в том, где их взять.

Три источника пакетов без сети:

  • кэш pacman на этой же машине, /var/cache/pacman/pkg;
  • кэш или скачанные пакеты на другом компьютере;
  • флешка или внешний диск с заранее заготовленными пакетами.

Если система ещё грузится, начни с кэша. Проверь, что в нём лежит:

ls /var/cache/pacman/pkg/ | grep <имя-пакета>

Нужная версия на месте, ставь её напрямую через pacman -U. Если кэш пуст, а сеть ещё работает, скачай пакеты заранее. Команда pacman -Sw загружает пакет в кэш, не устанавливая его:

sudo pacman -Sw <пакет>

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

Как собрать пакеты на другом компьютере?

Если сеть пропала совсем, а кэш пуст, пакеты собираются на второй машине с интернетом. Подойдёт любой Arch Linux, даже виртуалка.

Скачай нужные пакеты вместе с зависимостями:

sudo pacman -Sw <пакет> --cachedir /mnt/usb/packages

Флаг --cachedir кладёт пакеты сразу на флешку, минуя системный кэш. Команда скачает и сам пакет, и все его зависимости, так что на флешке окажется полный набор. На выходе получится готовый набор файлов .pkg.tar.zst, который останется только перенести на сломанную машину.

Чтобы не вспоминать, что именно стояло на сломанной системе, заранее экспортируй список пакетов:

pacman -Qqe > packages.txt

Список пригодится и для восстановления, и для переустановки системы с нуля. Как им пользоваться, разобрано в статье «Экспорт списка пакетов».

Ещё один источник: кэш чужой машины. Если на втором компьютере стоит похожая система, скопируй его /var/cache/pacman/pkg целиком:

rsync -av /var/cache/pacman/pkg/ /mnt/usb/packages/

Версии могут не совпасть с твоими, но для восстановления это не критично: pacman сам подберёт совместимые.

Как установить пакеты через pacman -U?

pacman -U ставит пакеты из локальных файлов, без обращения к репозиториям. Это главный инструмент офлайн-восстановления.

Один пакет:

sudo pacman -U /mnt/usb/packages/<пакет>.pkg.tar.zst

Пачка пакетов одной командой:

sudo pacman -U /mnt/usb/packages/*.pkg.tar.zst

Звёздочка подставит все файлы из каталога. pacman разберёт зависимости между ними сам: если в пачке есть и библиотека, и программа, которая её использует, обе встанут в правильном порядке.

Если пакетов много и часть уже установлена, добавь флаг -u:

sudo pacman -Uu /mnt/usb/packages/*.pkg.tar.zst

-u пропускает пакеты, версия которых не новее установленной. Удобно, когда пачка собрана с другой машины и часть версий у тебя уже стоит.

Важно: pacman проверяет зависимости и может отказаться ставить пакет, если нужной библиотеки нет в пачке. Тогда добавь недостающий пакет в каталог и повтори команду. Список недостающих зависимостей pacman покажет в сообщении об ошибке.

Что такое kernel-module mismatch и как его починить без сети?

Классический кейс из чата: обновил ядро, перезагрузился, и система либо не загрузилась, либо потеряла часть устройств. Причина простая: модули ядра не совпадают с самим ядром по версии.

Как это выглядит. Ядро обновилось с 6.12 на 6.13, а модули DKMS, например драйвер видеокарты или Wi-Fi, остались собранными под старое ядро. При загрузке модуль отказывается подключаться: версия модуля не совпадает с версией ядра. Проверяется это так:

uname -r

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

ls /usr/lib/modules/

Если каталог модулей не совпадает с версией из uname -r, вот он, mismatch.

Что делать без сети. Модули DKMS пересобираются под новое ядро автоматически при установке пакета. Офлайн это значит одно: переустанови пакет с модулями из кэша или с флешки:

sudo pacman -U /mnt/usb/packages/<пакет-с-модулями>.pkg.tar.zst

После установки DKMS пересоберёт модули под текущее ядро. Проверь:

dkms status

Все строки должны показывать версию ядра из uname -r. Если какая-то строка показывает старую версию, модуль не пересобрался. Причина обычно в том, что пакет с модулями установлен, а заголовков нового ядра нет. Тогда добавь в пачку linux-headers нужной версии и переустанови оба пакета. Про то, как устроены динамические модули и почему они ломаются при обновлении ядра, читай в статье «DKMS: динамические модули».

Если пакета с модулями нет ни в кэше, ни на флешке, а система ещё грузится, загрузись со старым ядром из меню GRUB. Arch хранит несколько ядер, и старое ядро, под которое модули собраны, почти наверняка на месте. После загрузки откати новое ядро из кэша:

sudo pacman -U /var/cache/pacman/pkg/linux-<старая-версия>.pkg.tar.zst

Общий алгоритм отката после обновления разобран в статье «Сломалось после обновления: единый гайд по откату».

Как восстановить систему через live-USB и chroot?

Если система не грузится вообще, лечить её придётся извне. Загрузись с live-USB, смонтируй разделы и войди в свою систему через chroot:

lsblk
mount /dev/nvme0n1p2 /mnt          # корень, подставь свой раздел
mount /dev/nvme0n1p1 /mnt/boot     # ESP, если есть отдельный /boot
arch-chroot /mnt

Теперь ты внутри установленной системы. Если пакеты лежат на флешке, смонтируй её и ставь:

mount /dev/sdb1 /mnt/usb
pacman -U /mnt/usb/packages/*.pkg.tar.zst

Внутри chroot pacman работает как обычно, но без сети. Если сеть в live-окружении есть, пробрось её в систему:

mount --rbind /dev /mnt/dev
mount --rbind /proc /mnt/proc
mount --rbind /sys /mnt/sys
arch-chroot /mnt

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

pacman -Sy

pacman -Sy обновляет только базу данных пакетов, без установки. Без свежей базы pacman может не найти пакеты, нужные для восстановления, или предложить устаревшие версии. Поэтому обновление базы внутри chroot делается первым делом, ещё до установки чего-либо. Дальше ставь или откатывай пакеты обычными командами. Полная последовательность восстановления через chroot, включая переустановку GRUB, описана в статье «grub rescue: что делать».

После всех действий выйди из chroot и перезагрузись:

exit
umount -R /mnt
reboot

Как поставить AUR-пакет, собранный заранее?

AUR-пакеты не лежат в репозиториях, поэтому pacman -Sw их не скачает. Но собранный заранее пакет ставится офлайн тем же pacman -U.

Собери пакет на машине с интернетом, перенеси .pkg.tar.zst на флешку и поставь:

sudo pacman -U /mnt/usb/packages/<aur-пакет>.pkg.tar.zst

Зависимости из официальных репозиториев тоже должны быть в пачке, иначе pacman откажется ставить. Как организовать офлайн-сборку с кэшем исходников и пакетов, разобрано в статье «Сборка без интернета: локальный кэш makepkg».

Как выбрать пакеты для восстановления вручную?

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

Посмотри, какие файлы принадлежат пакету, и проверь, на месте ли они:

pacman -Ql <пакет>

Вывод покажет все файлы пакета. Такой список удобен и для проверки целостности: если файл из вывода отсутствует на диске, пакет повреждён и его переустановка обязательна. Если часть файлов отсутствует или битая, пакет стоит переустановить.

Когда pacman ругается на конфликт версий, а нужной версии в пачке нет, помогает установка с обходом проверок:

sudo pacman -U --dbonly --force /mnt/usb/packages/<пакет>.pkg.tar.zst

--dbonly записывает пакет в базу, не распаковывая файлы, а --force пропускает проверку конфликтов. Это костыль для экстренных случаев: файлы пакета останутся старыми, но база будет считать пакет установленным. Пользуйся им только чтобы поднять систему до появления сети, а потом переустанови пакеты нормально.

Как настроить сеть после восстановления?

После восстановления системы сеть может не подняться сама, особенно если NetworkManager не запущен. Проверь статус:

systemctl status NetworkManager

Если сервис выключен, включи его:

sudo systemctl enable --now NetworkManager

Подключение к Wi-Fi через nmcli:

nmcli device wifi connect <имя-сети> password <пароль>

Для проводного соединения обычно достаточно включить сервис, NetworkManager сам поднимет интерфейс. Если сеть не появилась, проверь, что драйвер сетевой карты загрузился:

lsmod | grep <имя-драйвера>

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

Частые вопросы

Можно ли восстановить систему без сети, если кэш пуст и флешки нет?

Нет. Пакеты нужно откуда-то взять. Без сети и без кэша остаётся только live-USB с интернетом: загрузиться с него, смонтировать систему и поставить пакеты из сети через chroot.

pacman -U ругается на зависимости, что делать?

Добавь недостающие пакеты в каталог с пачкой и повтори команду. Список недостающих зависимостей pacman покажет в сообщении об ошибке. Скачать их можно на другом компьютере через pacman -Sw.

Чем pacman -U отличается от pacman -S?

pacman -S ставит пакеты из репозиториев по сети, pacman -U ставит из локальных файлов. Для офлайн-восстановления нужен только -U.

После восстановления модули снова не совпадают с ядром, почему?

Скорее всего, пакет с модулями установлен, но DKMS не пересобрал их под новое ядро. Проверь dkms status и пересобери модули вручную:

sudo dkms autoinstall

Нужно ли обновлять базу пакетов после восстановления?

Да, при первой возможности. pacman -Sy обновит базу, а pacman -Syu приведёт систему в актуальное состояние. До этого момента не ставь новые пакеты: pacman может не знать о свежих версиях.

Полезные ресурсы

Заключение

Восстановление без сети сводится к трём шагам: найти пакеты, перенести их на сломанную машину и поставить через pacman -U. Кэш pacman, флешка с пакетами с другого компьютера и chroot с live-USB закрывают почти все сценарии, включая kernel-module mismatch после обновления ядра. Главное, не паниковать и не переустанавливать систему: пакеты есть, значит, есть и лечение. А чтобы в следующий раз было проще, держи свежий кэш и список установленных пакетов под рукой.



Не получилось? Поможем настроить

Задай вопрос в чате — отвечаем быстро, по делу и без воды.

Читайте также

Комментарии

Загрузка…

Откроется GitHub: создайте новый issue с вашим комментарием (кнопка «Submit new issue»). После отправки обновите эту страницу — комментарий появится ниже.

Telegram Max