Как установка CentOS работает изнутри?

Я пытаюсь понять содержание файла образа ISO в дистрибутиве Linux и как происходит процесс установки. Здесь я специально говорю о CentOS 6.4 в своей минимальной версии.

Таким образом, ISOLINUX запускается, и я получаю меню. Затем я ударил установку.

Он загружает ядро ​​и файловую систему initrd.

Мои вопросы:

  1. Как называется Анаконда ?

  2. Какова роль файла images / install.img? (Кто звонит / монтирует его?)

  3. Anaconda устанавливает пакеты / *. Rpm? Если бы я захотел добавить его туда, я мог бы установить его?

Любая ссылка / рекомендация приветствуется,

Я один из авторов / сопровождающих Anaconda. Я мог бы подробно рассказать о том, как загружается установщик, но я постараюсь быть кратким.

(Обратите внимание, что это относится только к RHEL / CentOS 6.x или Fedora 14 и более ранним версиям, установщик был почти полностью переписан между Fedora 15, 16 и 17, так что теперь все изменилось.)

  1. Как называется Анаконда?
  2. Какова роль файла images / install.img? (Кто звонит / монтирует его?)

initrd.img на носителе установки – это то, что мы называем изображением stage1 . Он содержит программу под названием loader , единственной задачей которой является поиск и загрузка images/install.img .

install.img – это изображение stage2 . Здесь Anaconda фактически живет – это изображение squashfs, которое содержит корневую файловую систему установщика.

Существует множество способов загрузки install.img , но при загрузке с DVD это просто: загрузчик замечает DVD-диск установщика, монтирует его и монтирует images/install.img качестве своей корневой файловой системы.

Как только изображение stage2 установлено, загрузчик запускает Anaconda, который затем запускает Xorg и кладет оболочку на tty2 и все эти приятные вещи, и установщик действительно запускается.

3. Установляет ли Anaconda пакеты / *. Rpm? Если бы я захотел добавить его туда, я мог бы установить его?

Нет, он не просто устанавливает все там. Он использует файл comps.xmlrepodata/ ), чтобы решить, какие группы пакетов доступны (и какие пакеты находятся в этих группах) – вот как заполняется пользовательский интерфейс выбора пакета.

Если вы добавите что-либо в каталог Packages/ (например, если вы пытаетесь создать пользовательский образ DVD), и вы хотите, чтобы он был createrepo для установки, вам нужно будет использовать createrepo для регенерации каталога repodata/ . Это позволит вам установить ваши пакеты с помощью kickstart, по крайней мере.

Если вам нужно, чтобы они отображались в пользовательском интерфейсе, вам также нужно будет отредактировать comps.xml .

При загрузке с компакт-диска вы получаете загрузчик ISOLINUX и загружаете ядро ​​Linux и исходный ramdisk. Это запускает Anaconda, который загружает различные элементы, такие как install.img. Затем Anaconda берет на себя установку различных пакетов и т. Д.

Самый простой способ заставить Anaconda устанавливать дополнительные пакеты (или выполнять дополнительную настройку) – это написать сценарий кикстарта. Скрипт kickstart сообщает Anaconda, какие пакеты устанавливать, как настроить операционную систему и т. Д. Чтобы сообщить anaconda об использовании конкретного сценария кикстарта, вы можете ввести «install ks = http://example.com/my_kickstart.ks » в приглашении ISOLINUX. Затем он загрузит этот файл кикстарта (с веб-сервера в этом примере) и будет использовать его, чтобы узнать, какие пакеты установить.

Более подробную информацию о сценариях кикстарта можно найти по адресу http://fedoraproject.org/wiki/Anaconda/Kickstart

Когда вы загружаете установочный компакт-диск, он загружает ядро ​​и initrd так же, как вы упомянули. Это в основном загружает минимальную систему Linux в память ваших компьютеров. Anaconda работает как служба при загрузке, а программа запускается. Затем Anaconda находит ваши HD-файлы и монтирует их как / mnt / sysimage. Anaconda устанавливает пакеты / *. Rpm с установочного компакт-диска, и вы можете добавить RPM в каталог Packages, а затем повторно записать iso, но Anaconda все еще не знает, что его нужно установить. Что касается взлома Anaconda, чтобы программа искала RPM, у меня нет ответа.