forked from dmitry-lyutenko/manual_kernel_update
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Homework dmitry-lyutenko#1: Create Vagrant box(5)
- Loading branch information
Showing
1 changed file
with
197 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,197 @@ | ||
# **Обновление ядра в базовой системе** | ||
|
||
При выполнении задания использовалось следующее ПО: | ||
### **Хост** | ||
** ОС - Linux Mint 19.3 ** | ||
** Гипервизор - VirtualBox 6.1.6** | ||
** Средство для создания и конфигурирования виртуальной среды - Vagrant 2.2.7 ** | ||
** Создание образа виртуальной машины - Packer 1.5.5 ** | ||
** Система контроля версий - Git 2.26.2 ** | ||
|
||
###**Виртуальные машины** | ||
** ОС - CentOS Linux 7.8 ** | ||
|
||
И аккаунты на | ||
https://github.com/ - для создания и размещения репозитория | ||
и https://app.vagrantup.com - для размещения готового бокса | ||
|
||
|
||
# **Установка ПО на хосте** | ||
|
||
### **Vagrant** | ||
Установка Vagrant производилась по инструкции указанной в методичке к домашнему задании и не вызвала никаких затруднений. На момент установки последним релизом был 2.2.7 и работа выполнялась с ним, поэтому будет описан вариант установки этой версии. | ||
|
||
``` | ||
curl -O https://releases.hashicorp.com/vagrant/2.2.7/vagrant_2.2.7_x86_64.deb && \ | ||
sudo dpkg -i vagrant_2.2.7_x86_64.deb | ||
``` | ||
|
||
Дополнительно, для удобства был установлен плагин который автоматически устанавливает дополнительные средства интеграции гостевой машины с хостом | ||
|
||
``` | ||
vagrant plugin install vagrant-vbguest | ||
``` | ||
|
||
Vagrant и плагин успешно установлены. | ||
|
||
### **Packer** | ||
Установка Packer также проводилась по инструкции в методичке и не вызвала затруднений. На момент установки была 1.5.5 и работа выполнялась с ним, поэтому будет описан вариант установки этой версии. | ||
|
||
``` | ||
curl https://releases.hashicorp.com/packer/1.5.5/packer_1.5.5_linux_amd64.zip | \ | ||
sudo gzip -d > /usr/local/bin/packer && \ | ||
sudo chmod +x /usr/local/bin/packer | ||
``` | ||
|
||
Packer успешно установлен. | ||
|
||
--- | ||
|
||
# **Работа с репозиторием** | ||
|
||
### **Создание копии репозитория и её копирование на хост** | ||
Следуя инструкции из методички на сайте https://github.com была создана учётная запись, после это я создал свою ветвь репозитария https://github.com/dmitry-lyutenko/manual_kernel_update выполнив `fork` | ||
|
||
После этого клонировал его на хост выполнив не нём команду: | ||
``` | ||
git clone [email protected]:incertov/manual_kernel_update.git | ||
``` | ||
Клонирование выполнено | ||
|
||
|
||
Далее перейдя в корневую директорию клонированного репозитария на хосте в терминале выполнил команду | ||
|
||
``` | ||
vagrant up | ||
``` | ||
После выполнения всех операций виртуальная машины запустилась и была готова к работе. | ||
``` | ||
vagrant ssh | ||
``` | ||
|
||
|
||
### **Обновление ядра** | ||
Следуя методичке подключаем репозиторий откуда затем будет установлено ядро. | ||
``` | ||
sudo yum install -y http://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm | ||
``` | ||
|
||
Ставим последнее ядро: | ||
|
||
``` | ||
sudo yum --enablerepo elrepo-kernel install kernel-ml -y | ||
``` | ||
Обновляем конфигурацию загрузчика: | ||
``` | ||
sudo grub2-mkconfig -o /boot/grub2/grub.cfg | ||
``` | ||
Выбираем загрузку с новым ядром по-умолчанию: | ||
``` | ||
sudo grub2-set-default 0 | ||
``` | ||
|
||
Перезагружаем виртуальную машину: | ||
``` | ||
sudo reboot | ||
``` | ||
|
||
После выполнения этих операций машина успешно загружается с новым ядром. | ||
|
||
|
||
--- | ||
|
||
# **Packer** | ||
Теперь с помощью packer создадём образ машины с обновленным ядром пятой версии. В директории packer уже есть файл centos.json, актуализируем его | ||
|
||
### **centos.json** | ||
|
||
В секции `"variables"` . | ||
|
||
Создаем переменные (`variables`) с версией и названием нашего проекта (artifact): | ||
``` | ||
"artifact_description": "CentOS 7.8 with kernel 5.x", | ||
"artifact_version": "7.8.2003", | ||
``` | ||
|
||
В секции `builders` задаем исходный образ, для создания своего в виде ссылки и контрольной суммы. По ходу выполнения задания выяснилось что версия дистрибутива описанная в методичке уже устарела и была заменена обновленной версией, в связи с этим актуализируем эту секцию | ||
|
||
``` | ||
"iso_url": "https://mirror.yandex.ru/centos/7.8.2003/isos/x86_64/CentOS-7-x86_64-Minimal-2003.iso", | ||
"iso_checksum": "659691c28a0e672558b003d223f83938f254b39875ee7559d1a4a14c79173193", | ||
"iso_checksum_type": "sha256", | ||
``` | ||
В секции `post-processors` указываем имя файла, куда будет сохранен образ, в случае успешной сборки действия по методичке указываем итоговое имя бокса помня что оно формируется исходя из комбинации c `artifact_version` указанной в начале файла | ||
|
||
``` | ||
"output": "centos-{{user `artifact_version`}}-kernel-5-x86_64-Minimal.box", | ||
``` | ||
|
||
В секции `provisioners` указываем каким образом и какие действия необходимо произвести для настройки виртуальной машины. В данном случае необходимо установить дополнительный репозиторий и обновить из него ядро. | ||
|
||
``` | ||
"scripts" : | ||
[ | ||
"scripts/stage-1-kernel-update.sh", | ||
"scripts/stage-2-clean.sh" | ||
] | ||
``` | ||
Скрипты тоже потребовалось немного актуализировать. В `"scripts/stage-1-kernel-update.sh"` заменен пакет репозитория на `http://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm` , возможно это не требовалось, но так представлена более свежая версия пакета то замена была произведена. В `"scripts/stage-2-clean.sh"` после выполнения обновления загрузчика было изменено значение `grub2-set-default 1` на `grub2-set-default 0` в противном случае после обновления образ загружался в режиме аварийного восстановления. | ||
|
||
### **packer build** | ||
|
||
Выполняем сборку бокса | ||
``` | ||
packer build centos.json | ||
``` | ||
Скрипт успешно выполняется и в результате получаем файл: `centos-7.8.2003-kernel-5-x86_64-Minimal.box` | ||
|
||
### **Тестирование полученного бокса** | ||
|
||
Импортируем файл в `vagrant` | ||
|
||
``` | ||
vagrant box add --name centos-7-5 centos-7.8.2003-kernel-5-x86_64-Minimal.box | ||
``` | ||
Убеждаемся в что операция выполнена: | ||
|
||
``` | ||
vagrant box list | ||
``` | ||
Видим наш образ: | ||
|
||
``` | ||
centos-7-5 (virtualbox, 0) | ||
``` | ||
|
||
Создаем новую директорию и помещаем туда копию существующего `Vagrantfile` из первой части задания. Перейдя в неё в терминале выполняем команду | ||
|
||
``` | ||
vagrant up | ||
``` | ||
Убеждаемся что образ машины исправен и загружается выполнив | ||
|
||
``` | ||
vagrant ssh | ||
``` | ||
|
||
Проверяем версию ядра | ||
|
||
``` | ||
uname -r | ||
``` | ||
Если видим установленной пятую версию ядра значит обновление успешно применено и проверено на работоспособность. | ||
|
||
# **Загрузка бокса** | ||
|
||
``` | ||
vagrant cloud auth login | ||
Vagrant Cloud username or email: <указываем свой email> | ||
Password (will be hidden): Пароль | ||
Token description (Defaults to "Vagrant login from DS-WS"): | ||
You are now logged in. | ||
``` | ||
Публикуем полученный бокс: | ||
``` | ||
vagrant cloud publish --release <username>/centos-7-5 1.2 virtualbox \ | ||
centos-7.8.2003-kernel-5-x86_64-Minimal.box | ||