0 added
0 removed
Original
2026-01-01
Modified
2026-02-19
1
В новой статье разбираем процесс установки Linux на примере CentOS 7 без использования графического установщика. В статье объясняется, когда нужно устанавливать вручную, какие этапы происходят с момента запуска железа. Дополнительно затрагиваем тему LVM - зачем нужен и как использовать. <p><em>За основу статьи взят первый урок</em><a><em>нашего практического курса "Администрирование Linux Мега"</em></a><em>.</em></p>
1
В новой статье разбираем процесс установки Linux на примере CentOS 7 без использования графического установщика. В статье объясняется, когда нужно устанавливать вручную, какие этапы происходят с момента запуска железа. Дополнительно затрагиваем тему LVM - зачем нужен и как использовать. <p><em>За основу статьи взят первый урок</em><a><em>нашего практического курса "Администрирование Linux Мега"</em></a><em>.</em></p>
2
<a></a><h2>Из чего состоят дистрибутивы Linux</h2>
2
<a></a><h2>Из чего состоят дистрибутивы Linux</h2>
3
Дистрибутив - форма распространения программного обеспечения. Любой дистрибутив Linux состоит из: <ul><li><strong>Ядра операционной системы</strong>. Это центральный компонент, который отвечает за управление процессами, памятью и файлами. </li>
3
Дистрибутив - форма распространения программного обеспечения. Любой дистрибутив Linux состоит из: <ul><li><strong>Ядра операционной системы</strong>. Это центральный компонент, который отвечает за управление процессами, памятью и файлами. </li>
4
<li><strong>Набора стандартных утилит</strong>. Почти все утилиты разработаны компанией GNU. Они входят в большую часть UNIX-систем и вместе составляют пакет Core Utilities. Разработчики GNU настаивают, что дистрибутивы на базе этого пакета правильно называть дистрибутивами GNU, а не дистрибутивами Linux, поскольку Linux - лишь ядро в составе системы GNU. Но на практике большинство людей всё равно использует название "дистрибутивы Linux".</li>
4
<li><strong>Набора стандартных утилит</strong>. Почти все утилиты разработаны компанией GNU. Они входят в большую часть UNIX-систем и вместе составляют пакет Core Utilities. Разработчики GNU настаивают, что дистрибутивы на базе этого пакета правильно называть дистрибутивами GNU, а не дистрибутивами Linux, поскольку Linux - лишь ядро в составе системы GNU. Но на практике большинство людей всё равно использует название "дистрибутивы Linux".</li>
5
<li><strong>Менеджера пакетов</strong>. Он нужен для управления программами, установленными в системе. По умолчанию в дистрибутивах Red Hat - это YUM или DNF, а в дистрибутивах Ubuntu и Debian - это APT. </li>
5
<li><strong>Менеджера пакетов</strong>. Он нужен для управления программами, установленными в системе. По умолчанию в дистрибутивах Red Hat - это YUM или DNF, а в дистрибутивах Ubuntu и Debian - это APT. </li>
6
</ul><h2>Как устанавливать дистрибутивы Linux</h2>
6
</ul><h2>Как устанавливать дистрибутивы Linux</h2>
7
Стандартные дистрибутивы вроде Ubuntu или CentOS устанавливаются довольно легко: вы нажимаете на кнопку "Далее", попутно вводя необходимые параметры (пароли пользователей или сетевые настройки). В конце нажимаете "Готово" и перезагружаетесь. После этого система установлена и готова к работе. <p><strong>Плюс такого подхода в простоте</strong>- вы кликаете на кнопки и на выходе получаете стандартизированную операционную систему. </p>
7
Стандартные дистрибутивы вроде Ubuntu или CentOS устанавливаются довольно легко: вы нажимаете на кнопку "Далее", попутно вводя необходимые параметры (пароли пользователей или сетевые настройки). В конце нажимаете "Готово" и перезагружаетесь. После этого система установлена и готова к работе. <p><strong>Плюс такого подхода в простоте</strong>- вы кликаете на кнопки и на выходе получаете стандартизированную операционную систему. </p>
8
<p>Менее популярные дистрибутивы вроде Gentoo или Arch Linux рассчитаны на опытных пользователей Linux и устанавливаются вручную. Инструмента автоматизации установки у них нет. </p>
8
<p>Менее популярные дистрибутивы вроде Gentoo или Arch Linux рассчитаны на опытных пользователей Linux и устанавливаются вручную. Инструмента автоматизации установки у них нет. </p>
9
<p><strong>Плюс такого подхода в гибкости</strong>: дистрибутив собирается как конструктор, и впоследствии у вас есть полный контроль над ним. </p>
9
<p><strong>Плюс такого подхода в гибкости</strong>: дистрибутив собирается как конструктор, и впоследствии у вас есть полный контроль над ним. </p>
10
<p><strong>Минус</strong>- нужно гораздо больше времени и навыков, чем при установке через графический установщик. </p>
10
<p><strong>Минус</strong>- нужно гораздо больше времени и навыков, чем при установке через графический установщик. </p>
11
<p>Графический установщик - средство упрощения. Под капотом все дистрибутивы Linux устанавливаются одинаково:</p>
11
<p>Графический установщик - средство упрощения. Под капотом все дистрибутивы Linux устанавливаются одинаково:</p>
12
<ul><li>делаете разметку диска и создаёте файловые системы;</li>
12
<ul><li>делаете разметку диска и создаёте файловые системы;</li>
13
<li>монтируете файловые системы к окружению установки;</li>
13
<li>монтируете файловые системы к окружению установки;</li>
14
<li>устанавливаете пакеты в примонтированные файловые системы с помощью менеджера пакетов;</li>
14
<li>устанавливаете пакеты в примонтированные файловые системы с помощью менеджера пакетов;</li>
15
<li>устанавливаете загрузчик GRUB;</li>
15
<li>устанавливаете загрузчик GRUB;</li>
16
<li>перезагружаетесь и получаете установленную систему.</li>
16
<li>перезагружаетесь и получаете установленную систему.</li>
17
</ul>Графический установщик позволяет проходить эти этапы автоматически. Но при необходимости все действия можно выполнить вручную.<p><strong>Зачем устанавливать дистрибутивы вручную?</strong>К ручной установке прибегают, когда нужна тонкая настройка конечной системы. Например, CentOS 7 с ядром по умолчанию не поддерживает новые процессоры AMD, а ещё через установщика нельзя выбрать кастомное ядро. Установка вручную позволяет не ставить CentOS как есть и потом доустанавливать нужное ядро, а сразу поставить систему на нужном ядре. </p>
17
</ul>Графический установщик позволяет проходить эти этапы автоматически. Но при необходимости все действия можно выполнить вручную.<p><strong>Зачем устанавливать дистрибутивы вручную?</strong>К ручной установке прибегают, когда нужна тонкая настройка конечной системы. Например, CentOS 7 с ядром по умолчанию не поддерживает новые процессоры AMD, а ещё через установщика нельзя выбрать кастомное ядро. Установка вручную позволяет не ставить CentOS как есть и потом доустанавливать нужное ядро, а сразу поставить систему на нужном ядре. </p>
18
<p>Также установка вручную - единственный вариант, если у вас нет возможности загрузки из образа. Предположим, у вас сервер на Ubuntu, который находится за 100 тысяч километров. Вставить в него флэшку вы не можете, воспользоваться CVM тоже. Всё, что у вас есть, - SSH-доступ к серверу. В этом случае вы устанавливаете CentOS, загруженный в Ubuntu, поверх этой самой Ubuntu.</p>
18
<p>Также установка вручную - единственный вариант, если у вас нет возможности загрузки из образа. Предположим, у вас сервер на Ubuntu, который находится за 100 тысяч километров. Вставить в него флэшку вы не можете, воспользоваться CVM тоже. Всё, что у вас есть, - SSH-доступ к серверу. В этом случае вы устанавливаете CentOS, загруженный в Ubuntu, поверх этой самой Ubuntu.</p>
19
<p>Следующий кейс - если установщик не работает, выдаёт странную ошибку и завершает процесс установки, не установив систему. Понимая, как работают дистрибутивы, вы всегда сможете завершить установку вручную.</p>
19
<p>Следующий кейс - если установщик не работает, выдаёт странную ошибку и завершает процесс установки, не установив систему. Понимая, как работают дистрибутивы, вы всегда сможете завершить установку вручную.</p>
20
<p>Ещё одна причина самостоятельно устанавливать дистрибутивы - возможность глубже понять, из чего состоит и как работает операционная система. В процессе установки вы, вероятнее всего, столкнетесь с трудностями, но их преодоление приблизит вас к пониманию и даст ценный опыт. </p>
20
<p>Ещё одна причина самостоятельно устанавливать дистрибутивы - возможность глубже понять, из чего состоит и как работает операционная система. В процессе установки вы, вероятнее всего, столкнетесь с трудностями, но их преодоление приблизит вас к пониманию и даст ценный опыт. </p>
21
<h2>Как выглядит загрузка ОС на базе Linux</h2>
21
<h2>Как выглядит загрузка ОС на базе Linux</h2>
22
Процесс загрузки компьютера от нажатия кнопки до появления приглашения входа в систему включает несколько этапов. <p><strong>Сначала загружается прошивка материнский платы</strong>. Если материнская плата относительно новая, это BIOS или UEFI. </p>
22
Процесс загрузки компьютера от нажатия кнопки до появления приглашения входа в систему включает несколько этапов. <p><strong>Сначала загружается прошивка материнский платы</strong>. Если материнская плата относительно новая, это BIOS или UEFI. </p>
23
<p><strong>BIOS</strong>- программа, которая хранится на чипе материнской платы и первая загружается при запуске компьютера. Она пробуждает подключенные устройства и убеждается, что они корректно работают. Затем BIOS находит на диске главную загрузочную запись (MBR), и уже её содержимое продолжает загрузку.</p>
23
<p><strong>BIOS</strong>- программа, которая хранится на чипе материнской платы и первая загружается при запуске компьютера. Она пробуждает подключенные устройства и убеждается, что они корректно работают. Затем BIOS находит на диске главную загрузочную запись (MBR), и уже её содержимое продолжает загрузку.</p>
24
<p>У BIOS есть ограничения:</p>
24
<p>У BIOS есть ограничения:</p>
25
<ul><li>Она не умеет загружаться с дисков, размер которых превышает 2 терабайта. Это ограничение MBR. </li>
25
<ul><li>Она не умеет загружаться с дисков, размер которых превышает 2 терабайта. Это ограничение MBR. </li>
26
<li>На одном диске не может быть больше 4 физических разделов. Это ограничение разметки в формате DOS, использующейся в BIOS. </li>
26
<li>На одном диске не может быть больше 4 физических разделов. Это ограничение разметки в формате DOS, использующейся в BIOS. </li>
27
</ul><strong>UEFI</strong>- относительно новый стандарт, ещё не особо распространенный на серверах. Он поддерживает разметку дисков в формате GPT. <p>GPT обходит ограничения разметки DOS и поддерживает 128 физических разделов. Он умеет загружаться с дисков размером больше 2 терабайт, поэтому его стараются использовать на новых серверах.</p>
27
</ul><strong>UEFI</strong>- относительно новый стандарт, ещё не особо распространенный на серверах. Он поддерживает разметку дисков в формате GPT. <p>GPT обходит ограничения разметки DOS и поддерживает 128 физических разделов. Он умеет загружаться с дисков размером больше 2 терабайт, поэтому его стараются использовать на новых серверах.</p>
28
<p><strong>После загрузки прошивки запускается содержимое загрузочного сектора</strong>. У Linux там обычно находится GRand Unified Bootloader. </p>
28
<p><strong>После загрузки прошивки запускается содержимое загрузочного сектора</strong>. У Linux там обычно находится GRand Unified Bootloader. </p>
29
<p>GRUB - загрузчик операционной системы от компании GNU. Он позволяет пользователю иметь несколько установленных операционных систем и при включении компьютера выбирать одну из них для загрузки. Конфигурация GRUB содержит список систем, которые можно загружать, а также правила их загрузки. </p>
29
<p>GRUB - загрузчик операционной системы от компании GNU. Он позволяет пользователю иметь несколько установленных операционных систем и при включении компьютера выбирать одну из них для загрузки. Конфигурация GRUB содержит список систем, которые можно загружать, а также правила их загрузки. </p>
30
<p>GRUB подгружает модуль для работы с файловыми системами и boot-разделом. Далее на указанном диске и по указанному в config пути он ищет и загружает ядро и initramfs. </p>
30
<p>GRUB подгружает модуль для работы с файловыми системами и boot-разделом. Далее на указанном диске и по указанному в config пути он ищет и загружает ядро и initramfs. </p>
31
<p><strong>Когда загрузка ядра и initramfs завершена, в дело вступает initramfs.</strong></p>
31
<p><strong>Когда загрузка ядра и initramfs завершена, в дело вступает initramfs.</strong></p>
32
<p>Initramfs - образ временной файловой системы, который загружается в оперативную память из диска и содержит все необходимые скрипты и программы для дальнейшей загрузки. В нём монтируется корневой раздел и запускается исполняемый файл /sbin/init. </p>
32
<p>Initramfs - образ временной файловой системы, который загружается в оперативную память из диска и содержит все необходимые скрипты и программы для дальнейшей загрузки. В нём монтируется корневой раздел и запускается исполняемый файл /sbin/init. </p>
33
<p>Вы можете положить в initramfs практически всё, что угодно. Например, там может быть SSH-сервер на случай, если у вас зашифрованная файловая система. Вы сможете подключиться по SSH на стадии загрузки в initramfs, ввести пароль от зашифрованной файловой системы и продолжить загрузку. Это удобно, потому что для ввода пароля не нужно получать KVM или просить кого-то дойти до сервера ногами.</p>
33
<p>Вы можете положить в initramfs практически всё, что угодно. Например, там может быть SSH-сервер на случай, если у вас зашифрованная файловая система. Вы сможете подключиться по SSH на стадии загрузки в initramfs, ввести пароль от зашифрованной файловой системы и продолжить загрузку. Это удобно, потому что для ввода пароля не нужно получать KVM или просить кого-то дойти до сервера ногами.</p>
34
<p>После всех приготовлений initramfs запускает /sbin/init - исполняемый файл системы инициализации. В качестве неё выступает systemd или SysV. Система инициализации запускает пользовательское окружение и все сервисы, необходимые для его работы.</p>
34
<p>После всех приготовлений initramfs запускает /sbin/init - исполняемый файл системы инициализации. В качестве неё выступает systemd или SysV. Система инициализации запускает пользовательское окружение и все сервисы, необходимые для его работы.</p>
35
<p><strong>На этом процесс загрузки считается завершенным - пользователь видит графическую оболочку или строку входа в систему.</strong></p>
35
<p><strong>На этом процесс загрузки считается завершенным - пользователь видит графическую оболочку или строку входа в систему.</strong></p>
36
<p>Теперь, когда мы знаем, как устанавливается и загружается операционная система, перейдём к самому интересному - установке CentOS 7 вручную без использования установщика.</p>
36
<p>Теперь, когда мы знаем, как устанавливается и загружается операционная система, перейдём к самому интересному - установке CentOS 7 вручную без использования установщика.</p>
37
<h2><strong>Как установить CentOS 7</strong></h2>
37
<h2><strong>Как установить CentOS 7</strong></h2>
38
Для разбора кейса будем использовать виртуальную машину, на которую загружена Life ISO Arch Linux. Прошивка - BIOS. Разметка диска - DOS.<p>План установки:</p>
38
Для разбора кейса будем использовать виртуальную машину, на которую загружена Life ISO Arch Linux. Прошивка - BIOS. Разметка диска - DOS.<p>План установки:</p>
39
<ul><li>разбить диск;</li>
39
<ul><li>разбить диск;</li>
40
<li>создать LVM-разделы;</li>
40
<li>создать LVM-разделы;</li>
41
<li>создать файловые системы;</li>
41
<li>создать файловые системы;</li>
42
<li>монтировать корневой раздел;</li>
42
<li>монтировать корневой раздел;</li>
43
<li>загрузить ISO-образ CentOS 7 Minimal;</li>
43
<li>загрузить ISO-образ CentOS 7 Minimal;</li>
44
<li>получить временную файловую систему для установки;</li>
44
<li>получить временную файловую систему для установки;</li>
45
<li>первый уровень chroot во временную систему;</li>
45
<li>первый уровень chroot во временную систему;</li>
46
<li>установить пакеты в конечную систему;</li>
46
<li>установить пакеты в конечную систему;</li>
47
<li>второй уровень chroot в конечную систему;</li>
47
<li>второй уровень chroot в конечную систему;</li>
48
<li>настроить конфигурационные файлы;</li>
48
<li>настроить конфигурационные файлы;</li>
49
<li>установить загрузчика;</li>
49
<li>установить загрузчика;</li>
50
<li>перезагрузить. </li>
50
<li>перезагрузить. </li>
51
</ul>Разберём каждый этап подробно. <h3>Разбивка диска</h3>
51
</ul>Разберём каждый этап подробно. <h3>Разбивка диска</h3>
52
Переходим в терминал - нужно создать разметку на дисках файловой системы. Для этого мы используем cfdisk - псевдографическую утилиту, которая позволяет не вводить команды каждый раз вручную:<blockquote>Root@archiso ~ # cfdisk</blockquote>Мы выбираем разметку диска dos и видим, что у нас есть 20 гигабайт свободного пространства:Создаём один физический раздел, выделяя ему всё место, и разбиваем его с помощью LVM. Нажимаем кнопку "Записать изменения" и вводим "Yes". Указываем, что наш диск Bootable, сохраняем изменения и выходим из программы.<h3>Создание LVM-разделов</h3>
52
Переходим в терминал - нужно создать разметку на дисках файловой системы. Для этого мы используем cfdisk - псевдографическую утилиту, которая позволяет не вводить команды каждый раз вручную:<blockquote>Root@archiso ~ # cfdisk</blockquote>Мы выбираем разметку диска dos и видим, что у нас есть 20 гигабайт свободного пространства:Создаём один физический раздел, выделяя ему всё место, и разбиваем его с помощью LVM. Нажимаем кнопку "Записать изменения" и вводим "Yes". Указываем, что наш диск Bootable, сохраняем изменения и выходим из программы.<h3>Создание LVM-разделов</h3>
53
<strong>LVM</strong>- менеджер логических томов. Он добавляет над дисковой подсистемой уровни абстракции и позволяет использовать несколько физических томов как один раздел. Это удобно, когда размера текущего диска уже не хватает, а добавлять диск большего размера и переносить на него данные не хочется.<p>Разберём устройство абстракций LVM:</p>
53
<strong>LVM</strong>- менеджер логических томов. Он добавляет над дисковой подсистемой уровни абстракции и позволяет использовать несколько физических томов как один раздел. Это удобно, когда размера текущего диска уже не хватает, а добавлять диск большего размера и переносить на него данные не хочется.<p>Разберём устройство абстракций LVM:</p>
54
<ul><li>на нижнем уровне находится физический диск /dev/sda, который мы можем инициализировать как Physical Volume (PV). </li>
54
<ul><li>на нижнем уровне находится физический диск /dev/sda, который мы можем инициализировать как Physical Volume (PV). </li>
55
<li>на PV мы создаём Volume Group (VG) - группу разделов;</li>
55
<li>на PV мы создаём Volume Group (VG) - группу разделов;</li>
56
<li>на VG - логические тома Logical Volume (LV);</li>
56
<li>на VG - логические тома Logical Volume (LV);</li>
57
<li>на LV - файловые системы, куда будут ставиться пакеты. </li>
57
<li>на LV - файловые системы, куда будут ставиться пакеты. </li>
58
</ul>Схематично это выглядит так:Возвращаемся к установке: мы уже создали раздел SDA1, и теперь нужно инициализировать его как Physical Volume. Это делается командой pvcreate, которой передаём путь до раздела /dev/sda1:<blockquote>Root@archiso ~ # pvcreate /dev/sda1:</blockquote>Чтобы посмотреть, какие PV у нас есть, используем команды:<blockquote>Root@archiso ~ # pvc</blockquote>или<blockquote>Root@archiso ~ # pvcdisplay</blockquote>Обе команды показывают информацию о дисках, но pvdisplay более подробную.<p>Далее командой vgcreate создаём группу томов Volume Group. В качестве первого аргумента мы передаём название VG - у нас это будет LVM. Затем указываем путь до диска, который инициализирован как Physical volume - /dev/sda1.</p>
58
</ul>Схематично это выглядит так:Возвращаемся к установке: мы уже создали раздел SDA1, и теперь нужно инициализировать его как Physical Volume. Это делается командой pvcreate, которой передаём путь до раздела /dev/sda1:<blockquote>Root@archiso ~ # pvcreate /dev/sda1:</blockquote>Чтобы посмотреть, какие PV у нас есть, используем команды:<blockquote>Root@archiso ~ # pvc</blockquote>или<blockquote>Root@archiso ~ # pvcdisplay</blockquote>Обе команды показывают информацию о дисках, но pvdisplay более подробную.<p>Далее командой vgcreate создаём группу томов Volume Group. В качестве первого аргумента мы передаём название VG - у нас это будет LVM. Затем указываем путь до диска, который инициализирован как Physical volume - /dev/sda1.</p>
59
<blockquote>Root@archiso ~ # vgcreate lvm /dev/sda1</blockquote>Volume Group создан. Посмотреть все VG можно командой:<blockquote>Root@archiso ~ # vgs</blockquote>или<blockquote>Root@archiso ~ # vgsdisplay</blockquote>Остаётся создать три Logical Volume. Первый будет использоваться для корневого раздела, второй - для каталога home, где хранятся данные пользователей, третий - для каталога OPT, где хранятся установленные дополнительно программы.<p>Для создания LV используем команду lvcreate:</p>
59
<blockquote>Root@archiso ~ # vgcreate lvm /dev/sda1</blockquote>Volume Group создан. Посмотреть все VG можно командой:<blockquote>Root@archiso ~ # vgs</blockquote>или<blockquote>Root@archiso ~ # vgsdisplay</blockquote>Остаётся создать три Logical Volume. Первый будет использоваться для корневого раздела, второй - для каталога home, где хранятся данные пользователей, третий - для каталога OPT, где хранятся установленные дополнительно программы.<p>Для создания LV используем команду lvcreate:</p>
60
<blockquote>Root@archiso ~ # lvcreate -L 10G -n root lvm</blockquote>Повторяем то же самое для раздела home, но выделяем ему половину оставшегося места - 5 ГБ:<blockquote>Root@archiso ~ # lvcreate -L 5G -n home lvm</blockquote>Затем всё оставшееся место выделяем под Logical Volume OPT. Используем команду lvcreate, но указываем маленькую l, чтобы выделить место не в абсолютных значениях, а в относительных. Добавляем, что нужно использовать 100% оставшегося свободного пространства - пишем слитно 100%FREE:<blockquote>Root@archiso ~ # lvcreate -l 100%FREE -n opt lvm</blockquote>Теперь у нас есть три Logical Volume, и мы можем посмотреть их командой lvs:<blockquote>Root@archiso ~ # lvs</blockquote>или lvdisplay:<blockquote>Root@archiso ~ # lvdisplay</blockquote><h3>Создание файловых систем</h3>
60
<blockquote>Root@archiso ~ # lvcreate -L 10G -n root lvm</blockquote>Повторяем то же самое для раздела home, но выделяем ему половину оставшегося места - 5 ГБ:<blockquote>Root@archiso ~ # lvcreate -L 5G -n home lvm</blockquote>Затем всё оставшееся место выделяем под Logical Volume OPT. Используем команду lvcreate, но указываем маленькую l, чтобы выделить место не в абсолютных значениях, а в относительных. Добавляем, что нужно использовать 100% оставшегося свободного пространства - пишем слитно 100%FREE:<blockquote>Root@archiso ~ # lvcreate -l 100%FREE -n opt lvm</blockquote>Теперь у нас есть три Logical Volume, и мы можем посмотреть их командой lvs:<blockquote>Root@archiso ~ # lvs</blockquote>или lvdisplay:<blockquote>Root@archiso ~ # lvdisplay</blockquote><h3>Создание файловых систем</h3>
61
Для этого кейса мы возьмём файловую систему EXT4 - она проверена временем и стабильна. А если вы устанавливаете операционную систему на сервере силами хостинг-провайдера, то EXT4 выбирается для всех разделов по умолчанию. <p>Для создания файловых систем используем команду mkfs, после чего через точку указываем нужную файловую систему - EXT4. В качестве аргумента передаём раздел на диске, который форматируем в эту файловую систему. Для получения доступа к файловым разделам LVM обращаемся к каталогу /dev/, где находятся устройства, имя VG - LVM, имя-метка нашего LV - root. </p>
61
Для этого кейса мы возьмём файловую систему EXT4 - она проверена временем и стабильна. А если вы устанавливаете операционную систему на сервере силами хостинг-провайдера, то EXT4 выбирается для всех разделов по умолчанию. <p>Для создания файловых систем используем команду mkfs, после чего через точку указываем нужную файловую систему - EXT4. В качестве аргумента передаём раздел на диске, который форматируем в эту файловую систему. Для получения доступа к файловым разделам LVM обращаемся к каталогу /dev/, где находятся устройства, имя VG - LVM, имя-метка нашего LV - root. </p>
62
<blockquote>Root@archiso ~ # mkfs.ext4 /dev/lvm/root</blockquote>Повторяем это действие для разделов OPT и home:<h3>Монтирование корневого раздела и загрузка ISO-образа CentOS 7 Minimal</h3>
62
<blockquote>Root@archiso ~ # mkfs.ext4 /dev/lvm/root</blockquote>Повторяем это действие для разделов OPT и home:<h3>Монтирование корневого раздела и загрузка ISO-образа CentOS 7 Minimal</h3>
63
Создадим директорию /mnt/centos:<blockquote>Root@archiso ~ # mkdir /mnt/centos</blockquote>И командой mount примонтируем наш root-раздел:<blockquote>Root@archiso ~ # mount /dev/lvm/root /mnt/centos</blockquote>Теперь переходим в эту директорию и скачиваем в неё iso-образ Centos 7 Minimal. Через ключ -o указываем, куда мы скачиваем файл - в /mnt/centos/centos.iso. Процесс занимает около 30 секунд:Когда образ скачается, создадим под него директорию /mnt/iso и примонтируем её через команду mount:<blockquote>Root@archiso /mnt/centos # mkdir /mnt/iso</blockquote><blockquote>Root@archiso /mnt/centos # mount centos. iso /mnt/iso</blockquote><p>Теперь создадим директорию /mnt/squash, в которой будет образ squashfs: </p>
63
Создадим директорию /mnt/centos:<blockquote>Root@archiso ~ # mkdir /mnt/centos</blockquote>И командой mount примонтируем наш root-раздел:<blockquote>Root@archiso ~ # mount /dev/lvm/root /mnt/centos</blockquote>Теперь переходим в эту директорию и скачиваем в неё iso-образ Centos 7 Minimal. Через ключ -o указываем, куда мы скачиваем файл - в /mnt/centos/centos.iso. Процесс занимает около 30 секунд:Когда образ скачается, создадим под него директорию /mnt/iso и примонтируем её через команду mount:<blockquote>Root@archiso /mnt/centos # mkdir /mnt/iso</blockquote><blockquote>Root@archiso /mnt/centos # mount centos. iso /mnt/iso</blockquote><p>Теперь создадим директорию /mnt/squash, в которой будет образ squashfs: </p>
64
<blockquote>Root@archiso /mnt/centos # mkdir /mnt/squash</blockquote><blockquote>Root@archiso /mnt/centos # /mnt/iso/LiveOS/squashfs.img /mnt/squash</blockquote>Всё это мы делаем, чтобы вытащить rootfs из Centos, и из него уже продолжить установку пакетов.<p>Третий уровень монтирования - создадим директорию /mnt/rootfs и в неё монтируем файл /mnt/squash/LiveOS/rootfs.img:</p>
64
<blockquote>Root@archiso /mnt/centos # mkdir /mnt/squash</blockquote><blockquote>Root@archiso /mnt/centos # /mnt/iso/LiveOS/squashfs.img /mnt/squash</blockquote>Всё это мы делаем, чтобы вытащить rootfs из Centos, и из него уже продолжить установку пакетов.<p>Третий уровень монтирования - создадим директорию /mnt/rootfs и в неё монтируем файл /mnt/squash/LiveOS/rootfs.img:</p>
65
<blockquote>Root@archiso /mnt/centos # mkdir /mnt/rootfs</blockquote><blockquote>Root@archiso /mnt/centos # mount /mnt/squash/LiveOS/ rootfs.img /mnt/ rootf</blockquote><h3>Получение временной файловой системы для установки</h3>
65
<blockquote>Root@archiso /mnt/centos # mkdir /mnt/rootfs</blockquote><blockquote>Root@archiso /mnt/centos # mount /mnt/squash/LiveOS/ rootfs.img /mnt/ rootf</blockquote><h3>Получение временной файловой системы для установки</h3>
66
В каталоге /mnt/centos, куда мы примонтировали root-раздел, создадим директорию liveos под временную систему и скопируем в неё содержимое директории /mnt/rootfs:<blockquote>Root@archiso /mnt/centos # mkdir liveos</blockquote><blockquote>Root@archiso /mnt/centos # cp -rf /mnt/rootf/* liveos </blockquote>В директорию liveos скопировались файлы временной системы, из которой мы будем составлять пакеты. Cкопируем из iso-образа директорию Packages, где находятся RPM-пакеты - их мы будем ставить в конечную систему. <blockquote>Root@archiso /mnt/centos # cp /mnt/iso/Packages liveos -rf</blockquote>Перейдём в директорию liveos и начнём уже работать с ней:<blockquote>Root@archiso /mnt/centos # cd liveos/</blockquote>Чтобы временная система работала корректно, нужно примонтировать к ней каталоги /dev, /sys и /proc. В каталоге /dev хранятся файлы устройств, подключенных к системе. В каталоге /sys - параметры подключенных устройств. В каталоге /proc - информация о запущенных процессах и их параметрах. <p>Монтируем командой mount с ключом -rbind:</p>
66
В каталоге /mnt/centos, куда мы примонтировали root-раздел, создадим директорию liveos под временную систему и скопируем в неё содержимое директории /mnt/rootfs:<blockquote>Root@archiso /mnt/centos # mkdir liveos</blockquote><blockquote>Root@archiso /mnt/centos # cp -rf /mnt/rootf/* liveos </blockquote>В директорию liveos скопировались файлы временной системы, из которой мы будем составлять пакеты. Cкопируем из iso-образа директорию Packages, где находятся RPM-пакеты - их мы будем ставить в конечную систему. <blockquote>Root@archiso /mnt/centos # cp /mnt/iso/Packages liveos -rf</blockquote>Перейдём в директорию liveos и начнём уже работать с ней:<blockquote>Root@archiso /mnt/centos # cd liveos/</blockquote>Чтобы временная система работала корректно, нужно примонтировать к ней каталоги /dev, /sys и /proc. В каталоге /dev хранятся файлы устройств, подключенных к системе. В каталоге /sys - параметры подключенных устройств. В каталоге /proc - информация о запущенных процессах и их параметрах. <p>Монтируем командой mount с ключом -rbind:</p>
67
<blockquote>Root@archiso /mnt/centos/liveos # mount --rbind /sys sys</blockquote><blockquote>Root@archiso /mnt/centos/liveos # mount --rbind /dev dev</blockquote><blockquote>Root@archiso /mnt/centos/liveos # mount --rbind /proc proc</blockquote><h3>Первый уровень chroot во временную систему</h3>
67
<blockquote>Root@archiso /mnt/centos/liveos # mount --rbind /sys sys</blockquote><blockquote>Root@archiso /mnt/centos/liveos # mount --rbind /dev dev</blockquote><blockquote>Root@archiso /mnt/centos/liveos # mount --rbind /proc proc</blockquote><h3>Первый уровень chroot во временную систему</h3>
68
Когда необходимые каталоги примонтированы, выполним команду chroot. Она меняет текущий корневой каталог на указанный и позволяет продолжать работу из временной системы. <blockquote>Root@archiso /mnt/centos/liveos # chroot . bin/bash </blockquote><blockquote>Bash-4.2#</blockquote>/bin/bash - интерпретатор по умолчанию<p>Готово, мы внутри файловой системы установщика и получили доступ к пакетному менеджеру yum. Но если попробуем выполнить команду yum, получим ошибку - Python не сможет найти модуль yummain. Нужно через утилиту rpm с ключем --nodeps для пропуска зависимостей установить пакет yum:</p>
68
Когда необходимые каталоги примонтированы, выполним команду chroot. Она меняет текущий корневой каталог на указанный и позволяет продолжать работу из временной системы. <blockquote>Root@archiso /mnt/centos/liveos # chroot . bin/bash </blockquote><blockquote>Bash-4.2#</blockquote>/bin/bash - интерпретатор по умолчанию<p>Готово, мы внутри файловой системы установщика и получили доступ к пакетному менеджеру yum. Но если попробуем выполнить команду yum, получим ошибку - Python не сможет найти модуль yummain. Нужно через утилиту rpm с ключем --nodeps для пропуска зависимостей установить пакет yum:</p>
69
<blockquote>bash-4.2# rpm -i --nodeps</blockquote><blockquote>Packages/yum-3.4.3-168.e17.centos.noarch.rpm</blockquote>Менеджер пакетов работает, монтируем корневой раздел к каталогу mnt:<blockquote>bash-4.2# mount /dev/lvm/root /mnt/</blockquote>Создаём точи для монтирования остальных разделов:<blockquote>bash-4.2# mkdir /mnt/opt</blockquote><blockquote>bash-4.2# mkdir /mnt/home</blockquote>Монтируем:<blockquote>bash-4.2# mount /dev/lvm/opt /mnt/opt</blockquote><blockquote>bash-4.2# mount /dev/lvm/home /mnt/home</blockquote><h3>Установка пакетов в конечную систему</h3>
69
<blockquote>bash-4.2# rpm -i --nodeps</blockquote><blockquote>Packages/yum-3.4.3-168.e17.centos.noarch.rpm</blockquote>Менеджер пакетов работает, монтируем корневой раздел к каталогу mnt:<blockquote>bash-4.2# mount /dev/lvm/root /mnt/</blockquote>Создаём точи для монтирования остальных разделов:<blockquote>bash-4.2# mkdir /mnt/opt</blockquote><blockquote>bash-4.2# mkdir /mnt/home</blockquote>Монтируем:<blockquote>bash-4.2# mount /dev/lvm/opt /mnt/opt</blockquote><blockquote>bash-4.2# mount /dev/lvm/home /mnt/home</blockquote><h3>Установка пакетов в конечную систему</h3>
70
Переходим к установке пакетов в конечную систему. Для этого запускаем команду yum install и используем ключ instalroot:<blockquote>bash-4.2# yum install --instalroot=/mnt Packages/*.rpm </blockquote>Пакеты установлены, перейдём в наш каталог /mnt, чтобы проверить всё ли в порядке:<blockquote>bash-4.2# Is /mnt/</blockquote>Видим, что появилась файловая система Unix, и создались нужные каталоги. Значит пакеты установились точно туда, куда мы хотели. Всё в порядке. <h3>Второй уровень chroot в конечную систему</h3>
70
Переходим к установке пакетов в конечную систему. Для этого запускаем команду yum install и используем ключ instalroot:<blockquote>bash-4.2# yum install --instalroot=/mnt Packages/*.rpm </blockquote>Пакеты установлены, перейдём в наш каталог /mnt, чтобы проверить всё ли в порядке:<blockquote>bash-4.2# Is /mnt/</blockquote>Видим, что появилась файловая система Unix, и создались нужные каталоги. Значит пакеты установились точно туда, куда мы хотели. Всё в порядке. <h3>Второй уровень chroot в конечную систему</h3>
71
Нужно выполнить второй уровень монтирования. Перейдём в каталог mnt и снова примонтируем каталоги /dev, /sys и /proc:<blockquote>bash-4.2# mount --rbind /dev/ dev</blockquote><blockquote>bash-4.2# mount --rbind /sys/ sys</blockquote><blockquote>bash-4.2# mount --rbind /proc/ proc</blockquote>Затем делаем chroot, но предварительно подгружаем в текущую систему информацию, где находятся исполняемые файлы:<blockquote>bash-4.2# source /etc/ profile</blockquote><blockquote>bash-4.2# chroot . /bin/ bash</blockquote>Если попробуем сразу установить в chroot установим пакет vim, чтобы редактировать конфиги:<blockquote>[root@archiso/]# yum install vim</blockquote>Получим ошибку о том, что yum не может определить ip-адрес зеркал:Это происходит, потому что у нас не настроены сервера имен в системе. Исправляем ситуацию:<blockquote>[root@archiso/]# echo “nameserver 8.8.8.8.” > /etc/resolv.conf</blockquote>Снова устанавливаем vim:<blockquote>[root@archiso/]# yum install vim -y vim</blockquote>И приступаем к заполнению конфигов. Начнём с config /etc/fstab - конфигурационного файла, в котором хранится информацию о точках монтирования. <blockquote>[root@archiso/]# vim /etc/fstab</blockquote>Файл делится на 6 столбцов:<ul><li>первый указывает путь до устройства - /dev/lvm/root;</li>
71
Нужно выполнить второй уровень монтирования. Перейдём в каталог mnt и снова примонтируем каталоги /dev, /sys и /proc:<blockquote>bash-4.2# mount --rbind /dev/ dev</blockquote><blockquote>bash-4.2# mount --rbind /sys/ sys</blockquote><blockquote>bash-4.2# mount --rbind /proc/ proc</blockquote>Затем делаем chroot, но предварительно подгружаем в текущую систему информацию, где находятся исполняемые файлы:<blockquote>bash-4.2# source /etc/ profile</blockquote><blockquote>bash-4.2# chroot . /bin/ bash</blockquote>Если попробуем сразу установить в chroot установим пакет vim, чтобы редактировать конфиги:<blockquote>[root@archiso/]# yum install vim</blockquote>Получим ошибку о том, что yum не может определить ip-адрес зеркал:Это происходит, потому что у нас не настроены сервера имен в системе. Исправляем ситуацию:<blockquote>[root@archiso/]# echo “nameserver 8.8.8.8.” > /etc/resolv.conf</blockquote>Снова устанавливаем vim:<blockquote>[root@archiso/]# yum install vim -y vim</blockquote>И приступаем к заполнению конфигов. Начнём с config /etc/fstab - конфигурационного файла, в котором хранится информацию о точках монтирования. <blockquote>[root@archiso/]# vim /etc/fstab</blockquote>Файл делится на 6 столбцов:<ul><li>первый указывает путь до устройства - /dev/lvm/root;</li>
72
<li>второй - точка монтирования, у нас это корневой каталог /;</li>
72
<li>второй - точка монтирования, у нас это корневой каталог /;</li>
73
<li>третий - файловая система устройства, у нас это ext4;</li>
73
<li>третий - файловая система устройства, у нас это ext4;</li>
74
<li>четвертый - опции монтирования - defaults и noatime;</li>
74
<li>четвертый - опции монтирования - defaults и noatime;</li>
75
<li>пятый указывает, нужно ли делать автоматический backup точки монтирования, ставим 0;</li>
75
<li>пятый указывает, нужно ли делать автоматический backup точки монтирования, ставим 0;</li>
76
<li>шестой указывает, нужно ли делать fscheck - проверку файловой системы при запуске. Тоже ставим 0.</li>
76
<li>шестой указывает, нужно ли делать fscheck - проверку файловой системы при запуске. Тоже ставим 0.</li>
77
</ul>Повторяем эти манипуляции с остальными разделами:И выходим из vim. <h3>Настройка конфигурационных файлов</h3>
77
</ul>Повторяем эти манипуляции с остальными разделами:И выходим из vim. <h3>Настройка конфигурационных файлов</h3>
78
Настроим сеть с помощью стандартного для Centos способа - создадим файл /etc/sysconfig/network-scripts:<blockquote>[root@archiso/]# vim /etc/sysconfig/network-scripts- enp0s3</blockquote>enp0s3 - имя сетевого интерфейса. <p>Переходим к файлу и заполняем его:</p>
78
Настроим сеть с помощью стандартного для Centos способа - создадим файл /etc/sysconfig/network-scripts:<blockquote>[root@archiso/]# vim /etc/sysconfig/network-scripts- enp0s3</blockquote>enp0s3 - имя сетевого интерфейса. <p>Переходим к файлу и заполняем его:</p>
79
<ul><li>Параметр TYPE - тип интерфейса. У нас это Ethernet, так как виртуальная машина подключена по Ethernet-кабелю. </li>
79
<ul><li>Параметр TYPE - тип интерфейса. У нас это Ethernet, так как виртуальная машина подключена по Ethernet-кабелю. </li>
80
<li>Параметры BOOTPROTO - показывает, нужно ли получать информацию о настройках сети по dhcp. Нам это не нужно, пишем none.</li>
80
<li>Параметры BOOTPROTO - показывает, нужно ли получать информацию о настройках сети по dhcp. Нам это не нужно, пишем none.</li>
81
<li>Параметр IPADDR указывает адрес. Допустим, у нас 192.168.0.102.</li>
81
<li>Параметр IPADDR указывает адрес. Допустим, у нас 192.168.0.102.</li>
82
<li>Параметр GATEWAY- 192.168.0.1. </li>
82
<li>Параметр GATEWAY- 192.168.0.1. </li>
83
<li>Параметр PREFIX сети - 24. </li>
83
<li>Параметр PREFIX сети - 24. </li>
84
<li>Параметр DNS1 сервер - 8.8.8.8.</li>
84
<li>Параметр DNS1 сервер - 8.8.8.8.</li>
85
<li>Параметр DEFROUTE - yes, потому что у нас это маршрут по умолчанию. </li>
85
<li>Параметр DEFROUTE - yes, потому что у нас это маршрут по умолчанию. </li>
86
<li>Имя сетевого интерфейса - enp0s3. </li>
86
<li>Имя сетевого интерфейса - enp0s3. </li>
87
<li>Имя устройства - enp0s3. </li>
87
<li>Имя устройства - enp0s3. </li>
88
<li>Параметр ONBOOT - yes, чтобы показать, что интерфейс нужно запустить при запуске системы.</li>
88
<li>Параметр ONBOOT - yes, чтобы показать, что интерфейс нужно запустить при запуске системы.</li>
89
</ul>Закончили - выходим в запись изменений и отключаем selinux (как его настраивать разбираем в следующих уроках). <blockquote>[root@archiso/]# vim /etc/selinux/config</blockquote>В параметре SELINUX указываем disabled:<h3>Установка загрузчика</h3>
89
</ul>Закончили - выходим в запись изменений и отключаем selinux (как его настраивать разбираем в следующих уроках). <blockquote>[root@archiso/]# vim /etc/selinux/config</blockquote>В параметре SELINUX указываем disabled:<h3>Установка загрузчика</h3>
90
Устанавливаем загрузчик grub:<blockquote>[root@archiso/]# yum install grub2-pc -y</blockquote>Указываем устройство, на которое ставим загрузчик:<blockquote>[root@archiso/]# grub2-install /dev/sda</blockquote>С помощью команды grub2-mkconfig создаём конфиг для нашего загрузчика:<blockquote>[root@archiso/]# grub2-mkconfig -o /boot/grub2/grub.cfg </blockquote>Нажимаем enter и видим, что автоматически найдены файл ядра, файл initramfs файл rescue-ядра и rescue initramfs - они нужны для загрузки в систему, которая сломалась. Если что-то пошло не так, в grub вы выбираете режим восстановления и грузите с этим ядром. <h3>Перезагрузка </h3>
90
Устанавливаем загрузчик grub:<blockquote>[root@archiso/]# yum install grub2-pc -y</blockquote>Указываем устройство, на которое ставим загрузчик:<blockquote>[root@archiso/]# grub2-install /dev/sda</blockquote>С помощью команды grub2-mkconfig создаём конфиг для нашего загрузчика:<blockquote>[root@archiso/]# grub2-mkconfig -o /boot/grub2/grub.cfg </blockquote>Нажимаем enter и видим, что автоматически найдены файл ядра, файл initramfs файл rescue-ядра и rescue initramfs - они нужны для загрузки в систему, которая сломалась. Если что-то пошло не так, в grub вы выбираете режим восстановления и грузите с этим ядром. <h3>Перезагрузка </h3>
91
С генерацией конфига закончили, теперь поставим пароль для root-пользователя, чтобы подключиться к системе после перезагрузки:<blockquote>[root@archiso/]# password</blockquote>Теперь можем перезагрузиться командой reboot -f. <blockquote>[root@archiso/]# reboot -f</blockquote>Ключ -f говорит, что нам нужно перезагрузиться форсировано- не обращать внимания ни на какие трудности. На проде это использовать не рекомендуется, потому что может посыпаться файловая система, но для стендов такой вариант подходит. <p>Выходим из первого и второго chroot и делаем reboot. Выбираем в virtual box загрузку с нашей системы. Подключаемся к системе через ssh:</p>
91
С генерацией конфига закончили, теперь поставим пароль для root-пользователя, чтобы подключиться к системе после перезагрузки:<blockquote>[root@archiso/]# password</blockquote>Теперь можем перезагрузиться командой reboot -f. <blockquote>[root@archiso/]# reboot -f</blockquote>Ключ -f говорит, что нам нужно перезагрузиться форсировано- не обращать внимания ни на какие трудности. На проде это использовать не рекомендуется, потому что может посыпаться файловая система, но для стендов такой вариант подходит. <p>Выходим из первого и второго chroot и делаем reboot. Выбираем в virtual box загрузку с нашей системы. Подключаемся к системе через ssh:</p>
92
<blockquote>[zaqwer@archlinux`]$ ssh root@192.168.0.102</blockquote>Вводим пароль, и вуаля - мы в системе Centos 7 и даже ни разу не увидели графический установщик. <em>Это статья написана по мотивам урока</em><a><em>курса "Администрирование Linux.Мега"</em></a><em>, второй поток которого стартует 31 октября. Для вас действует промокод со скидкой 10% на обучение. </em>
92
<blockquote>[zaqwer@archlinux`]$ ssh root@192.168.0.102</blockquote>Вводим пароль, и вуаля - мы в системе Centos 7 и даже ни разу не увидели графический установщик. <em>Это статья написана по мотивам урока</em><a><em>курса "Администрирование Linux.Мега"</em></a><em>, второй поток которого стартует 31 октября. Для вас действует промокод со скидкой 10% на обучение. </em>