Skip to content

Commit

Permalink
Homework dmitry-lyutenko#1: Create Vagrant box(5)
Browse files Browse the repository at this point in the history
  • Loading branch information
incertov committed May 8, 2020
1 parent a3d7b5b commit 389e63c
Showing 1 changed file with 197 additions and 0 deletions.
197 changes: 197 additions & 0 deletions README.md
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

0 comments on commit 389e63c

Please sign in to comment.