При выполнении задания использовалось следующее ПО:
** ОС - 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 производилась по инструкции указанной в методичке к домашнему задании и не вызвала никаких затруднений. На момент установки последним релизом был 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 также проводилась по инструкции в методичке и не вызвала затруднений. На момент установки была 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 уже есть файл 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 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