From 389e63c15451d132eee8a41afa56bfb48bef7209 Mon Sep 17 00:00:00 2001 From: ian Date: Fri, 8 May 2020 14:01:49 +0300 Subject: [PATCH] Homework #1: Create Vagrant box(5) --- README.md | 197 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 197 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 00000000..bdc92163 --- /dev/null +++ b/README.md @@ -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 git@github.com: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 /centos-7-5 1.2 virtualbox \ + centos-7.8.2003-kernel-5-x86_64-Minimal.box +