Когда дело доходит до любой операционной системы Linux, включая Ubuntu, люди склонны различать термины ядро и операционная система . Это верно для Windows и семейства OS X, но почему это так широко распространено среди Linux-сообщества? Есть ли способ обновить ядро ОС без обновления самой ОС? Или наоборот? Если да, то как это может быть полезно?
Целая система GNU/Linux создается с помощью модульного подхода. Можно главным образом обновить ( замена в целом) единственный модуль без касающихся других. Рассматриваемый модуль может быть загрузчиком, ядром, оболочкой, командой, настольной средой, приложением GUI, whatever†¦
, Конечно, это верно, пока Вы можете управлять зависимостями правильно. В наборе дистрибутивов вокруг Ubuntu APT используется для разрешения зависимостей автоматически.
можно установить другую версию ядра с помощью команды:
sudo apt install linux-image-<version>
, пока APT позволяет его, необходимо смочь перезагрузить и использовать выбранную версию ядра, быть этим универсальный, lowlatency и т.д., Или Вы создаете версию ядра сами, например, Linux В реальном времени, и используете его с Вашей существующей системой.
Во-первых, несколько пояснений, потому что я чувствую, что вы не понимаете, как появились системы GNU / Linux. Потерпи меня, если для тебя в этом нет ничего нового:
«Ядро» - это не просто еще одна программа, которая запускается, а часть операционной системы, предоставляющая базовые функции: если ты хочешь запустить программу (скажем, , вы вводите «ls» в командной строке) двоичный файл должен быть загружен с диска (который включает в себя некоторые операции с файловой системой для его обнаружения и некоторую обработку файла для его чтения), затем создается «среда процесса»: память назначается Выдается номер процесса и т. д. и т. д. Все предыдущие действия (FS, чтение из файла, ...) обрабатываются системными библиотеками, но последние являются функциями ядра. В некотором смысле ядро «является ОС», а все остальное - просто украшение вокруг него.
«Linux» на самом деле (только!) - ядро без других частей ОС. Линус Торвальдс начал писать, взяв ядро операционной системы MINIX на основе шаблона Эндрю Таненбаумса и завершив его, чтобы оно стало полноценным и реально работоспособным ядром. По сей день есть Линус (и многие другие, которые внесли / внесли свой вклад), которые развивают это ядро. Это ядро все еще очень похоже на UNIX, но НЕ на ядро UNIX.
«GNU» начал как инициативу, чтобы «улучшить» многие распространенные команды UNIX. Я не буду обсуждать, преуспели они или нет, но они определенно написали много программного обеспечения и в какой-то момент имели набор служебных программ. Они даже начали разрабатывать собственное ядро ОС (HURD), которое было основано главным образом на UNIX, но определенно отличалось. Но по сей день HURD находится на ранней стадии разработки и вряд ли является рабочим решением. "GNU" между прочим сокращение от «GNU (is) Not UNIX» - они пытались преодолеть некоторые (предполагаемые или реальные) ограничения UNIX с целью создания преемника UNIX (опять же: я не хочу вступать в дискуссию, если они преуспели или нет - мне все равно, "лучше" или "хуже", но это определенно другое!).
Итак, с набором инструментов, в которых отсутствует ядро, и в ядре, в котором отсутствует набор инструментов, было естественным явлением соединить эти два: GNU / Linux был создан.
Тем не менее, чтобы иметь работающую (и работоспособную) ОС, вам нужно больше, чем просто ядро и набор инструментов: вам нужна система управления пакетами, вам нужны процедуры установки, вам нужны конфигурации шаблонов, вам нужно ....
Несколько разных людей (или их групп) пришли к такому выводу и использовали комбинацию GNU / Linux для создания системы GNU / Linux по своему вкусу, добавив в точности то, о чем я говорил выше: они создали менеджер пакетов, система упаковки, процедуры установки и многое другое. Эти разные группы (соответственно, результаты их усилий) являются тем, чем являются различные распределения. Сегодня существует три разных менеджера пакетов (подходящих для Debian и производных систем, таких как * ubuntu, rpm для RedHat и производных систем, таких как Fedora, CentOS и др., Pacman для ArchLinux), но все они просто управляют пакетами программного обеспечения, которое (по сути) то же самое: то, что вызывается, когда вы запускаете "ls" или "df" и т. д. в системе Debian или RHEL-системе, происходит из разных пакетов, но по сути это GNU-версия "ls" - (" Программа df "-), просто по-разному упакованная.
Таким образом, «в принципе» вы можете обновить ядро в одиночку, как это делали люди, создавшие дистрибутив из разных версий всего программного обеспечения, о котором я говорил выше.
Но, и это действительно большое НО: потому что есть не только ядро и некоторое дополнительное программное обеспечение, но и много других вещей, о которых следует помнить, таких как инструменты конфигурации системы (systemd, которые используются некоторыми дистрибутивами, а некоторые - нет). ), инструменты управления сетью, такие как NetworkManager, который, в свою очередь, зависит от некоторых версий библиотеки GNOME и т. д. и т. д. - «распространение» - довольно сложная вещь, и есть вероятность, что если вы попытаетесь обновить ядро, то в итоге вы обновляете много других вещей из-за множества взаимозависимостей.
Тем не менее, а также «в принципе», как указано выше: вы также можете создать свой собственный дистрибутив, загрузив все исходные файлы, скомпилировав их, найти рабочий набор комбинаций версий, установить на место некоторую систему упаковки (или использовать одну из существующие) - и так далее, пока у вас не будет распространяемой, устанавливаемой и настраиваемой системы. Это то, что делают создатели таких дистрибутивов, как Ubuntu, и это не чудо - просто много сложной работы, поэтому в действительности большинство пользователей уклоняются от этого и используют то, что они могут, готовые к использованию.
Надеюсь, это ответит на ваш вопрос.
Самый простой ответ не имеет ничего общего с Ubuntu; это связано с тем, как построен GNU / Linux. Если вы попытаетесь посмотреть на нее как на разработчика системы, вы увидите два мира, каждый из которых разделен четкой границей (ABI).
Мир ядра, в котором работают низкоуровневые разработчики, - это система сама по себе. В нем есть все, что вы обычно найдете в обычном приложении. Единственное отличие состоит в том, что пользователь - это не тот человек, который пользуется машиной, а мир пользователя. Ядро «приложение» - это посредник, сервер, который использует машину - призрак в оболочке.
Теперь пространство пользователя - это нормальный мир, в который играют обычные пользователи и разработчики. Он имеет жесткие API, правила, файлы и, самое главное, абстрактный детский образ машины, на которой он работает. Поскольку пользователь видит только эту часть, а это составляет 99% от размера дистрибутива, легко назвать ее «Операционная система». Правильная номенклатура - называть это дистрибутивом программного обеспечения, созданным какой-либо сущностью (Canonical, Fedora и т. Д.), Использующим ядро (Linux, HURD, BSD и т. Д.) И построенным с использованием набора инструментов (обычно предоставляемых GNU). ).
Чтобы ответить на ваш вопрос, в GNU / Linux (как и в Windows и OSX, поверьте мне) вы можете изменить ядро, не только версию, но и всю архитектуру (ядро Linux, против ядра HURD), и, до тех пор, пока ABI не затронут, никогда не вносите ни одного изменения в пользовательский мир ... В те времена, когда настоящему человеку приходилось собирать ядро из исходных текстов, вы могли бы выполнить несколько таких изменений, чтобы получить дрянная веб-камера USB для работы ... Теперь, с модульным ядром, вам просто нужно установить модуль, и вы получите совершенно новый мир ядра, с расширением ABI (иногда) с новыми функциями ...
Опять же, то же самое для пользовательского пространства. Когда вы устанавливаете новое приложение, скажем, из репозитория Ubuntu, в 99% случаев вашей главной заботой является совместимость других компонентов пользовательского пространства, а не реального ядра. Бывают случаи, когда версия ядра диктует (через ABI) диапазон вещей, которые можно установить в пользовательском пространстве, но цель (по крайней мере, для разработчиков) состоит в том, чтобы это исчезло ...
Еще одна вещь для размышления: вы можете (и это довольно легко) создать свой собственный, уникальный в своем роде дистрибутив GNU / Linux. Получить ядро, несколько простых скриптов, несколько приложений, и все готово. Это так просто (взгляните на дистрибутивы OpenWRT GNU / Linux, для сетевого оборудования весь дистрибутив умещается в 16 Мб или около того).
Я думаю, они хранятся отдельно, потому что ядро является критической частью. Ядро с регрессией или просто неудачное обновление может нанести довольно большой ущерб. Возможно, вы захотите обновить его реже; или только после ожидания, чтобы никто не сообщил о проблемах.
Также некоторые продвинутые или профессиональные пользователи перекомпилируют ядро, чтобы изменить его поведение в соответствии с их потребностями. В таком случае вы, очевидно, не захотите, чтобы он автоматически заменялся заводской версией при каждом обновлении.
Поскольку Вы знаете, что Ядро является важной частью ОС, в GNU/дистрибутивах Linux можно легко обновить ядро, не касаясь другой части ОС. Однако мы просто обновляем часть нашей ОС.
Операционная система сделана из двух частей, пространства ядра и пространства пользователя.
Таким образом да, можно обновить пространство ядра, не касаясь пространства пользователя, если только новая версия совместима с текущим пространством пользователя.
И об обновлении инструментов пространства пользователя, это - другой да.
Когда Вы работаете:
sudo apt-get upgrade
Если было обновление, доступное для ядра, Вы доберетесь:
The following packages have been kept back:
linux-generic linux-headers-generic linux-image-generic
таким образом, Вы только обновляете свое пространство пользователя и когда Вы выполняете что-то как
sudo apt-get dist-upgrade
Вы обновляете все включая ядро.
Для обновления только Ядра до более новой версии используют что-то как:
$ apt-cache search "linux-image-[0-9]+.*-generic" | awk '{print $1}' | head -4
linux-image-4.4.0-21-generic
linux-image-4.10.0-14-generic
linux-image-4.10.0-19-generic
linux-image-4.10.0-20-generic
для нахождения списка более новых ядер затем установите его как новый пакет, например:
sudo apt install linux-image-4.10.0-14-generic