Arch linux как обновить initramfs

Обновлено: 05.07.2024

Достаточно много было шумихи по поводу того, что из-за нового чипа T2 невозможно установить linux на новые MacBook 2018 года с тачбаром. Шло время, и под конец 2019 года стронними разработчиками был реализован ряд драйверов и патчей ядра для взаимодействия с чипом T2. Основной драйвер для MacBook моделей 2018 и новее реализует работу VHCI (работа тача/клавиатуры/и.т.д.), а также функционирование звука.

  • BCE (Buffer Copy Engine) — устанавливает основной канал связи с T2. VHCI и Audio требуют этот компонент.
  • VHCI — это виртуальный хост-контроллер USB; клавиатура, мышь и другие компоненты системы предоставляются этим компонентом (другие драйверы используют этот хост-контроллер для обеспечения большей функциональности.
  • Audio — драйвер для аудиоинтерфейса T2, в настоящее время поддерживается только вывод звука через встроенные динамики MacBook

Также была реализована поддержка таких устройств, как wi-fi, тачпад, etc, с помощью патчей ядра. На текущий момент версия ядра 5.3.5-1

Что работает на данный момент

  1. NVMe
  2. Клавиатура
  3. USB-C (Thunderbolt не проверялся, при автоматической загрузке модуля подвешивает систему намертво)
  4. Тачбар (с возможностью включения клавиш Fn, подсветка, ESC итп)
  5. Звук (только встроенные динамики)
  6. Модуль Wi-Fi (через brcmfmac и только через iw)
  7. DisplayPort через USB-C
  8. Сенсоры
  9. Suspend/Resume (частично)
  10. etc..

Что потребуется для установки

  • USB-C док-переходник на USB (как минимум три USB входа для подключения мыши, клавиатуры, usb модема или телефона в режиме tethering). Это необходимо только на первых этапах установки
  • USB-клавиатура
  • USB/USB-C флешка минимум на 4Гб

1. Отключаем запрет загрузки с внешних носителей

2. Выделяем свободное место с помощью Disk Utility

Для удобства я сразу выделил 30Гб на диск, отформатировав его в exfat в самом Disk Utility. Разбиение физического диска на разделы Disk Utility.

3. Формируем iso образ

  1. Можно пойти простым путем и скачать готовый образ с ядром 5.3.5-1 и пачтами от aunali1ссылка на готовый образ
  2. Сформировать образ самостоятельно через archlive (необходима система с дистрибутивом арча)

Добавляем репозиторий в pacman.conf:


Игнорируем оригинальное ядро в pacman.conf:


Добавляем необходимые пакеты, в конце добавляем ядро linux-mbp и linux-mbp-headers


Изменяем скрипт для работы в интерактивном режиме (заменяем pacstrap -C на pacstrap -i -C):


Нажимаем Y, чтобы пропустить игнорируемые пакеты, затем пишем iso-образ на usb флешку:

4. Первая загрузка

Перезагружаемся с вставленной флешкой и клавиатурой. Нажимаем options при появлении яблока, выбираем EFI BOOT.

Далее необходимо нажать клавишу «e» и вписать в конец командной строки module_blacklist=thunderbolt. Если этого не сделать, то система может не загрузиться, и вылетит ошибка Thunderbolt ICM Error.

С помощью fdisk/cfdisk находим наш раздел (у меня это nvme0n1p4), форматируем и производим установку арча. Можно воспользоваться официальной инструкцией или строронней.

Загрузочный раздел не создаем, загрузчик будем писать в /dev/nvme0n1p1
После того, как полностью сформировано окружение в /mnt и перед тем, как перейти в arch-chroot, пишем:


Добавляем в /etc/pacman.conf:


Прописываем thunderbolt и applesmc в /etc/modprobe.d/blacklist.conf

Клавиатура, тачбар, etc


Устанавливаем модули для работы тачбара:


Добавляем модули в автозагрузку: /etc/modules-load.d/apple.conf


Устанавливаем модули ядра для работы клавиатуры. В репозитории anuali1 есть готовый пакет, он называется apple-bce-dkms-git. Чтобы его установить, пишем в консоли:


В этом случае модуль ядра будет называться apple-bce. В случае самостоятельной сборки он называется bce. Соответственно, если вы хотите прописать модуль в раздел MODULES в файл mkinicpio.conf, то не забудьте, какой модуль вы устанавливали.


Добавляем модуль bce или apple-bce в автозагрузку: /etc/modules-load.d/bce.conf


Если хотите использовать по умолчанию кнопки Fn, то в файл /etc/modprobe.d/apple-tb.conf пишем:


Обновляем ядро и initramfs.

5. Загрузчик

После того, как внутри chroot все основные пакеты установлены, можно приступать к установке загрузчика.

Мне так и не удалось заставить работать grub. С внешнего usb-диска grub загружается, но при попытке прописать его в nvme через

grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=grub

система улетала в kernel panic, и после перезагрузки нового пункта через options не появлялось. Какого-то внятного решения данной проблемы я не нашел и поэтому решил попробовать реализовать загрузку с помощью systemd-boot.

Если необходимо, чтобы клавиатура работала до полной загрузки системы (это необходимо в случае использования шифрования luks/dm-crypt) то прописываем в файл /etc/mkinicpio.conf в разделе MODULES:


Обновляем ядро и initramfs.

Настраиваем systemd-boot

Редактируем файл /boot/loader/loader.conf, удаляем все, что там внутри, и вносим следующее:


Переходим в папку /boot/loader/entries, создаем файл arch.conf и пишем:


В случае, если использовали luks и lvm, то


Перезагружаемся в MacOS.

6. Настройка Wi-Fi

Как в итоге выяснилось, файлы прошивок для wi-fi адаптера MacOS хранит в папке /usr/share/firmware/wifi , и можно их от туда взять в виде блобов и скормить модулю ядра brcmfmac. Для того, чтобы выяснить, какие именно файлы использует ваш адаптер, открываем терминал в MacOS и пишем:


Получаем длинный список. Нам нужны файлы только из раздела RequestedFiles:


В вашем случае названия файлов могут отличаться. Копируем их из папки /usr/share/firmware/wifi на флешку и переименовываем в следующий вид:


В данном случае последний текстовый файл содержит названия модели, если ваша модель не macbookpro15,2, то необходимо переименовать этот файл в соответствии с вашей моделью макбука.

Перезагружаемся в арч.

Копируем файлы с флешки в папку /lib/firmware/brcm/


Проверяем работоспособность модуля:


Убеждаемся, что сетевой интерфейс появился через ifconfig/ip.
Настраиваем wifi через iwctl

Внимание. Через netctl, nmcli, etc. интерфейс не работает, только через iwd.

Заставляем NetworkManager использовать iwd. Для этого создаем файл /etc/NetworkManager/NetworkManager.conf и пишем:


Запускаем службу NetworkManager

7. Звук

Для того, чтобы заработал звук, необходимо установить pulseaudio:


Скачиваем три файла:

8. Suspend/Resume

На текущий момент 16.10.2019 приходится выбирать либо звук, либо suspend/resume. Ждем, пока автор bce модуля допилит функционал.

Чтобы собрать модуль с поддержкой susped/resume, необходимо выполнить следующее:


Если вы устанавливали готовый модуль apple-bce из репозитория anuali1, то необходимо его предварительно удалить и только после этого собирать и устанавливать bce модуль с поддежкой suspend режима.

Также, необходимо добавить в blacklist модуль applesmc (если вы этого не сделали ранее) и убедиться, что в /boot/loader/entries/arch.conf в строке options в конце добавлен параметр pcie_ports=compat.

Создайте скрипт /lib/systemd/system-sleep/rmmod.sh:


Сделайте его исполняемым:


На этом пока все. В итоге получась вполне работоспособная система, за исключением некоторых нюансов с suspend/resume. Никаких вылетов и kernel panic не наблюдается на протяжении нескольких дней аптайма. Надеюсь, в ближайшее время автор модуля bce его допилит, и мы получим полноценную поддержку suspend/resume и звука.

Можно, делаешь туда chroot и выполняешь команду.

Неужели за год использования Linux ты первый раз слышишь про chroot?

Можно, делаешь туда chroot и выполняешь команду.

Можешь подсказать как именно будут выглядеть команды?)

Неужели за год использования Linux ты первый раз слышишь про chroot?

За полтора. Слышал, но не использовал.)

Гугл совсем не отвечает?

Уже бы давно узнал что нужно сделать, а не спрашивал.

Уже бы давно узнал что нужно сделать, а не спрашивал.

Да вот уже и загуглил, и пока не получается.

TheLinuxUser ★ ( 16.03.19 22:41:12 )
Последнее исправление: TheLinuxUser 16.03.19 22:41:27 (всего исправлений: 1)

Без параметров в chroot запускается такой же интерпретатор, что и используемый в текущем окружении.

Если в системе, куда ты делаешь chroot нет /bin/bash, то ты должен указать существующей в ней интерпретатор.

Подумай какой shell там и укажи его.


Ну как бы для сборки initramfs нужно немного больше

1) желательно, чтобы livecd/liveusb был от того же семейства ОС и с не слишком отличающейся версией ядра

2) до chroot нужно ещё смонтировать всё динамическое ( /dev, /proc, /sys, если есть что-то ещё - тоже ) через mount -o bind

1) желательно, чтобы livecd/liveusb был от того же семейства ОС и с не слишком отличающейся версией ядра

2) до chroot нужно ещё смонтировать всё динамическое ( /dev, /proc, /sys, если есть что-то ещё - тоже ) через mount -o bind

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

А для простого запуска приложения, выполнения в данном случае команды генерации initramfs достаточно только смонтированной корневой файловой системы, если прочие части файловой систмы вынесены отдельно, то их тоже нужно смонтировать.

А для простого запуска приложения, выполнения в данном случае команды генерации initramfs достаточно только смонтированной корневой файловой системы, если прочие части файловой систмы вынесены отдельно, то их тоже нужно смонтировать.

Млять, ну и как это сделать? Я с этой системой весь день провозился, остался последний момент и трудно более конкретно сказать какие именно команды?

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

Я тебе всё что нужно написал.

Без параметров в chroot запускается такой же интерпретатор, что и используемый в текущем окружении.

Если в системе, куда ты делаешь chroot нет /bin/bash, то ты должен указать существующей в ней интерпретатор.

Подумай какой shell там и укажи его.

Прочти это ещё раз.

Не ну если тебе хочется чувствовать себя дураком, то вот команда:

ubuntu@ubuntu:/mnt/flash$ sudo chroot /mnt/flash

вначале же был /mnt/root ?

Не ну если тебе хочется чувствовать себя дураком, то вот команда:

sudo chroot /mnt/flash /bin/интерпретатор

Какой он у тебя?

Для начала, что такое интерпретатор и как узнать какой он? У меня в каталоге boot, который я в /mnt/flash монтирую, есть только каталоги:

ubuntu@ubuntu:/mnt/flash$ sudo chroot /mnt/flash

вначале же был /mnt/root ?

В /mnt/root я смонтировал нужный корень с системой, и рядом с root смотрировал flash (/mnt/flash)

TheLinuxUser ★ ( 16.03.19 23:03:22 )
Последнее исправление: TheLinuxUser 16.03.19 23:04:13 (всего исправлений: 1)


если ты например собрался устанавливать загрузчик.

Возможно я привык делать лишние действия, чтобы лишний раз не продумывать всё до мелочей. Потом как-нибудь проверю

А для простого запуска приложения, выполнения в данном случае команды генерации initramfs достаточно только смонтированной корневой файловой системы

При сборке initramfs нужна информация о модулях, которые требуются для успешной загрузки. Не уверен, что все утилиты для сборки смогут получить эту информацию без sysfs, procfs и udev

У меня в каталоге boot, который я в /mnt/flash монтирую

а должен быть смонтирован в /mnt/root/boot и чрутится надо в /mnt/root

Для начала, что такое интерпретатор и как узнать какой он?

Это командная оболочка bash, zsh, что-то другое.

У меня в каталоге boot, который я в /mnt/flash монтирую, есть только каталоги:

Что? Тебе нужно делать chroot не boot раздел, а в корневую файловую систему.

Т.е. в начале монтируешь корневую файловую систему:

В /mnt/root я смонтировал нужный корень с системой, и рядом с root смотрировал flash (/mnt/flash)

Вот в root тебе и надо делать chroot, только предварительно в root/boot смонтируй файловую систему с загрузчиком и ядрами.

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

Contents

Проверка на наличие ошибок

Неудачный запуск служб systemd

Проверьте, возможно какие-либо службы systemd неудачно запустились:

Файлы журналов

Посмотрите на наличие ошибок файл журнала, находящийся в /var/log , а также высоко приоритетные ошибки в журнале systemd:

Резервное копирование

Создавайте резервные копии важных данных через регулярные промежутки времени. Эти данные включают в себя конфигурационные файлы, установленные пакеты и каталоги, такие как /etc , /home , /var и для серверных установок, также /srv .

Смотрите различные приложения синхронизации и программ резервного копирования которые подойдут в вашем случае. Также смотрите восстановление системы.

Резервное копирование можно автоматизировать с помощь Systemd/Таймеры.

Файлы настроек

Перед внесением изменений в файлы настроек, создайте резервную копию. Таким образом, вы можете вернуться к рабочей версии в случае возникновения проблем. Такие редакторы как vim и emacs могут сделать это автоматически, а также такая утилита как etckeeper держат /etc в системе контроля версий (VCS).

Список установленных приложений

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

База данных Pacman

Заголовки LUKS

Обновление системы

Если в системе есть пакеты из AUR, внимательно обновите все из них.

Избегайте определенных команд pacman

Избегайте частичные обновления, то есть никогда не запускайте pacman -Sy , вместо того чтобы использовать pacman -Syu .

Избегайте использования опции -d с Pacman. pacman -Rdd пакет пропустит проверку зависимостей при удалении пакета. В результате пакет, создающий критическую зависимость, может быть удален, что приведет к нарушению системы.

Частичные обновления не поддерживаются

Arch Linux является роллинг-релиз дистрибутивом. Это означает, что когда новая версия библиотек поступит в репозиторий, разработчики и доверенные пользователи пересоберут все пакеты в репозиториях, которые должны быть пересобраны с библиотеками. Например, если два пакета зависят от той же библиотеки, обновление только одного пакета может также обновить библиотеку (в качестве зависимости), которая может сломать другой пакет, который зависит от старой версии библиотеки.

Именно поэтому частичные обновления являются не поддерживаемыми. Не используйте pacman -Sy пакет или любой эквивалент, такой как pacman -Sy а затем pacman -S пакет , всегда обновляйтесь (с помощью pacman -Syu ) перед установкой пакета. По той же причине будьте очень осторожны при использовании IgnorePkg и IgnoreGroup . Если в системе есть локально установленные пакеты (например, пакеты из AUR), пользователи должны будут пересобрать их, когда их зависимост получит игнор.

Если было частичное обновление, и бинарные файлы сломаны, потому что они не могут найти зависимые библиотеки, не "исправляйте" проблему при помощи символьной ссылки. Библиотеки получают игнор, когда они не имеет обратной совместимости. Выполнение команды pacman -Syu с правильно синхронизированным зеркалом решит проблему, пока сам "pacman" работоспособен.

Прочитайте перед обновлением системы

Сигналы предупреждений во время обновления

Как можно быстрее договаривайтесь с новыми файлами настроек

Когда вызывается pacman, могут быть созданы файлы .pacnew и .pacsave . Pacman уведомит вас, когда это произойдет, и пользователи должны разобраться с этими файлами в кратчайшие сроки. Пользователи могут обратиться к вики-страницы Pacman/Pacnew and Pacsave (Русский) для подробных инструкций.

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

Откат сломанных обновлений

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

Pacman делает работу намного лучше, чем ваше ручное содержание файлов. Если вы устанавливаете пакеты вручную, вы в скором времени, рано или поздно, забудете что вы делали, устанавливали конфликтующее программное обеспечение, устанавливали в неправильное место и т.д. Вместо этого, узнайте, как создать пакет.

Выбирайте драйверы с открытым исходным кодом

Будьте осторожны с неофициальными пакетами

Используйте меры предосторожности при использовании пакетов из AUR или неофициальных пользовательских репозиториев. Большинство из них содержатся обычными пользователями, и, следовательно, не могут иметь те же стандарты, что и в официальных репозиториях. Будьте осторожны с вспомогательными утилитами для работы с AUR, которые весьма упрощают установку пакетов AUR. Всегда проверяйте PKGBUILD'ы на вменяемость, признаки ошибок или вредоносного кода, прежде чем собрать и/или установить пакет.

Обновите список зеркал (mirrorlist)

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

Очистите файловую систему

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

Старые файлы настроек

Старые файлы настроек могут конфликтовать с новыми версиями программного обеспечения, или портиться со временем. Периодически удаляйте ненужные файлы настроек, особенно в вашей домашней папке и

/.config . По тем же причинам, будьте осторожны при совместном использовании домашних папок между установками.

Посмотрите на следующие папки:

Для большей информации смотрите XDG Base Directory support.

Чтобы сохранить домашний каталог чистым от временных файлов, созданных в неправильном месте, будет хорошо иметь список нежелательных файлов и удалять их регулярно, например, с помощью rmshit.py.

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

Неиспользуемые пакеты

Удалите неиспользуемые пакеты из системы, тем самым освободив место на диске и упростив обслуживание.

Кэш пакетов

Удалите ненужные файлы .pkg из /var/cache/pacman/pkg/ чтобы освободить дисковое пространство. .

Сломанные симлинки

Старые, сломанные символьные ссылки могут находится в вашей системе; вы должны удалить их. Найти примеры того как их найти указаны тут (Англ.) и там (Англ.).

Для быстрого просмотра списка всех сломанных символьных ссылок в вашей системе, воспользуйтесь:

Затем проверьте и удалите ненужные записи из этого списка.

Советы и приёмы

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

Используйте проверенные программные пакеты

Роллинг-релиз Arch даёт преимущество пользователям, которые хотят попробовать новейшие функции и получить последние обновления как можно скорее, но это может сделать обслуживание системы более трудным. Для упрощения технического обслуживания и повышения стабильности, старайтесь избегать ультрасовременное программное обеспечение и устанавливайте только зрелое и проверенные программное обеспечение. Такие пакеты имеют меньше шансов получить сложные обновления, такие как основные изменения настроек или удаление особенностей. Предпочитайте программное обеспечение, которое имеет сильное и активное сообщество разработчиков, а также большое количество компетентных пользователей, для того чтобы упростить поддержку в случае возникновения проблем.

Избегайте использования тестового (testing) репозитория, даже отдельных пакетов из testing. Эти пакеты являются экспериментальными и не подходят для стабильной системы. Кроме того, избегайте разрабатываемых пакетов, которые собираются непосредственно из апстрима. Они обычно находятся в AUR, и содержат в названии: "dev", "devel", "svn", "cvs", "git", и т.д.

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

Пакет linux-lts представляет собой альтернативный пакет ядра Arch, и доступен в core репозитории. Эта конкретная версия ядра имеет долгосрочную поддержку (LTS) от апстрима, включая исправления безопасности, и некоторые Бэкпорты. Это будет полезным, если вы предпочитаете стабильность и менее частые обновления ядра, или если вы хотите иметь запасное ядро, в случае если новая версия ядра вызывает проблемы.

Пользователи, которые любят экспериментировать со своей операционной системой время от времени сталкиваются с ошибкой загрузки, когда система выводит приглашение ввода BusyBox с initramfs. Эта ошибка означает, что ядро не может загрузить корневой раздел, та файловая система, к которой у вас есть доступ из этого режима не имеет ничего общего с вашей системой. Это содержимое образа initramfs, которое содержит только самые необходимые компоненты, используемые ядром для загрузки системы.

Почему Linux не загружается дальше initramfs


1. Неверный корневой раздел в загрузчике

В данном случае она сообщает, что не может найти раздел /dev/sda10:

Alert: /dev/sda10 does not exist. Dropping to a shell


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

ls /dev/ | grep sd


В этом окружении есть BusyBox, а значит есть большинство утилит Unix. Вы можете примонтировать каждый из этих разделов с помощью команды mount и узнать где находится ваш новый корневой раздел, например:

mkdir /mnt
mount /dev/sda5 /mnt
ls

Вы также можете узнать здесь же UUID данного раздела диска, для этого выполните:


В данном случае, корневой раздел имеет имя /dev/sda5. Именно это имя можно передать ядру в конфигурации загрузчика Grub, а можно UUID, но если в этом нет крайней необходимости, то короткое имя использовать гораздо проще. Надо перезагрузить компьютер, в меню Grub выбрать нужную загрузочную запись и нажать клавишу E:


Далее найти пункт, начинающейся со слова linux и в нём параметр root. Его значение вместе со словом UUID надо стереть, а вместо него прописать имя корневого раздела:


После этого система загрузится, а вам останется только создать новый конфигурационный файл grub с помощью команды:

2. Повреждённая файловая система

Подобная ошибка может появляться также при серьезных ошибках в файловой системе, которые мешают примонтировать корневой раздел. Обычно, fsck восстанавливает файловую систему автоматически, но если проблема серьезная и грозит потерей данных, утилите надо подтверждение пользователя для работы. Тогда система показывает такую ошибку:

The root filesystem on /dev/sda5 requires a manual fsck

Вы можете прямо здесь же попытаться восстановить файловую систему. Для этого выполните:

Здесь /dev/sda5 - это корневой раздел, его нужно заменить на свой. Опция -y указывает утилите, что на все вопросы надо ли исправлять блок нужно отвечать утвердительно. После успешного восстановления надо перезагрузить компьютер и попытаться загрузить систему снова.

Выводы

Нет похожих записей


Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна.

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