Можно ли использовать ядро ​​захвата в качестве обычного ядра после kexec?

Если вы стандартный пользователь, не являющийся пользователем root, ответ нет , вы не можете сбросить пароль неизвестный . Причина в том, чтобы запретить пользователю доступ к автоматической клавиатуре для изменения пароля.

в настоящее время ваш пароль хранится в файле call/etc/shadow, который имеет формат

archemar:$6$wmG27ByC$Aig4Uo(abridged)CXCMbkXEAbJ6q3vyCsdIFd27lA6r.:16491:0:99999:7:::

, и вы не можете угадать ваш пароль от Aig4Uo (сокращенный) CXCMbkXEAbJ6q3vyCsdIFd27lA6r.

-121--185062-

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

Теперь верно, что большинство программ на самом деле зависят не непосредственно от интерфейсов ядра (системные вызовы ), а только от интерфейсов стандартной библиотеки C (оболочки C вокруг системных вызовов). О, но какая стандартная библиотека? Глибк? uClibC? Дитлиб? Бионик? Мюсл? и т.д.

Но есть также много программ, которые реализуют специфичные для ОС службы и зависят от интерфейсов ядра, которые не доступны стандартной библиотеке. (В Linux многие из них предлагаются через /proc и /sys .)

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

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

Ломка пользовательских программ просто неприемлема. (…) Мы знаем, что люди используют старые двоичные файлы годами и годами, и что создание нового выпуска не означает, что вы можете просто выбросить это. Ты можешь доверять нам.

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

несколько нормально иметь четко определенную одностороннюю зависимость. Это грустно, но иногда неизбежно. (…) Что НЕ нормально, так это иметь двустороннюю зависимость. Если пользовательский HAL-код зависит от нового ядра, это нормально, хотя я подозреваю, что пользователи надеются, что это будет не «ядро недели,» а скорее «ядро последних нескольких месяцев.»

Но если у вас двусторонняя зависимость, вы облажались. Это означает, что вы должны обновить на этапе блокировки, и это просто НЕ ПРИЕМЛЕМО. Это ужасно для пользователя, но еще важнее, это ужасно для разработчиков,потому что это означает, что вы не можете сказать "произошла ошибка" и делать такие вещи, как попытаться сузить его с помощью бисекции или тому подобное.

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

Официально ,

обратная совместимость для [системных вызовов, объявленных стабильными] будет гарантирована в течение не менее 2 лет.

Однако на практике

большинство интерфейсов (например, syscalls), как ожидается, никогда не изменится и всегда будет доступно.

Чаще всего изменяются интерфейсы, предназначенные только для использования аппаратными программами в /sys . (/proc , с другой стороны, которая с момента введения /sys была зарезервирована для услуг, не связанных с оборудованием, практически никогда не ломается несовместимыми способами.)

В итоге,

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

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

-121--11834-

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

ie:
tar zxvf foo.tar.gz
tar zfxv foo.tar.gz

Both of these work fine without the -.

1
28.02.2018, 14:01
1 ответ

Существует большая разница между стандартным ядром kexec и ядром panic.

«Нормальное» ядро ​​kexec получит полную карту физической памяти от старого ядра (, например. Карта E820 на машинах x86 или дерево устройств на IBM POWER ), поэтому он инициализирует все свои структуры управления памятью для всей ОЗУ.

С другой стороны, ядро ​​паники получит измененную карту, которая включает только область, зарезервированную с параметром crashkernel=в первом ядре. Карта оперативной памяти исходного ядра передается отдельно в заголовках ядра ELF (, ср. elfcorehdr=параметр ядра ), и ядро ​​паники может получить к нему доступ только через специальный файл /proc/vmcore.

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

1
27.01.2020, 23:44

Теги

Похожие вопросы