|
| 1 | +# **Обновление ядра в базовой системе** |
| 2 | + |
| 3 | +При выполнении задания использовалось следующее ПО: |
| 4 | +### **Хост** |
| 5 | +** ОС - Linux Mint 19.3 ** |
| 6 | +** Гипервизор - VirtualBox 6.1.6** |
| 7 | +** Средство для создания и конфигурирования виртуальной среды - Vagrant 2.2.7 ** |
| 8 | +** Создание образа виртуальной машины - Packer 1.5.5 ** |
| 9 | +** Система контроля версий - Git 2.26.2 ** |
| 10 | + |
| 11 | +###**Виртуальные машины** |
| 12 | +** ОС - CentOS Linux 7.8 ** |
| 13 | + |
| 14 | +И аккаунты на |
| 15 | +https://github.com/ - для создания и размещения репозитория |
| 16 | +и https://app.vagrantup.com - для размещения готового бокса |
| 17 | + |
| 18 | + |
| 19 | +# **Установка ПО на хосте** |
| 20 | + |
| 21 | +### **Vagrant** |
| 22 | +Установка Vagrant производилась по инструкции указанной в методичке к домашнему задании и не вызвала никаких затруднений. На момент установки последним релизом был 2.2.7 и работа выполнялась с ним, поэтому будет описан вариант установки этой версии. |
| 23 | + |
| 24 | +``` |
| 25 | +curl -O https://releases.hashicorp.com/vagrant/2.2.7/vagrant_2.2.7_x86_64.deb && \ |
| 26 | +sudo dpkg -i vagrant_2.2.7_x86_64.deb |
| 27 | +``` |
| 28 | + |
| 29 | +Дополнительно, для удобства был установлен плагин который автоматически устанавливает дополнительные средства интеграции гостевой машины с хостом |
| 30 | + |
| 31 | +``` |
| 32 | +vagrant plugin install vagrant-vbguest |
| 33 | +``` |
| 34 | + |
| 35 | +Vagrant и плагин успешно установлены. |
| 36 | + |
| 37 | +### **Packer** |
| 38 | +Установка Packer также проводилась по инструкции в методичке и не вызвала затруднений. На момент установки была 1.5.5 и работа выполнялась с ним, поэтому будет описан вариант установки этой версии. |
| 39 | + |
| 40 | +``` |
| 41 | +curl https://releases.hashicorp.com/packer/1.5.5/packer_1.5.5_linux_amd64.zip | \ |
| 42 | +sudo gzip -d > /usr/local/bin/packer && \ |
| 43 | +sudo chmod +x /usr/local/bin/packer |
| 44 | +``` |
| 45 | + |
| 46 | +Packer успешно установлен. |
| 47 | + |
| 48 | +--- |
| 49 | + |
| 50 | +# **Работа с репозиторием** |
| 51 | + |
| 52 | +### **Создание копии репозитория и её копирование на хост** |
| 53 | +Следуя инструкции из методички на сайте https://github.com была создана учётная запись, после это я создал свою ветвь репозитария https://github.com/dmitry-lyutenko/manual_kernel_update выполнив `fork` |
| 54 | + |
| 55 | +После этого клонировал его на хост выполнив не нём команду: |
| 56 | +``` |
| 57 | +git clone git@github.com:incertov/manual_kernel_update.git |
| 58 | +``` |
| 59 | +Клонирование выполнено |
| 60 | + |
| 61 | + |
| 62 | +Далее перейдя в корневую директорию клонированного репозитария на хосте в терминале выполнил команду |
| 63 | + |
| 64 | +``` |
| 65 | +vagrant up |
| 66 | +``` |
| 67 | +После выполнения всех операций виртуальная машины запустилась и была готова к работе. |
| 68 | +``` |
| 69 | +vagrant ssh |
| 70 | +``` |
| 71 | + |
| 72 | + |
| 73 | +### **Обновление ядра** |
| 74 | +Следуя методичке подключаем репозиторий откуда затем будет установлено ядро. |
| 75 | +``` |
| 76 | +sudo yum install -y http://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm |
| 77 | +``` |
| 78 | + |
| 79 | +Ставим последнее ядро: |
| 80 | + |
| 81 | +``` |
| 82 | +sudo yum --enablerepo elrepo-kernel install kernel-ml -y |
| 83 | +``` |
| 84 | +Обновляем конфигурацию загрузчика: |
| 85 | +``` |
| 86 | +sudo grub2-mkconfig -o /boot/grub2/grub.cfg |
| 87 | +``` |
| 88 | +Выбираем загрузку с новым ядром по-умолчанию: |
| 89 | +``` |
| 90 | +sudo grub2-set-default 0 |
| 91 | +``` |
| 92 | + |
| 93 | +Перезагружаем виртуальную машину: |
| 94 | +``` |
| 95 | +sudo reboot |
| 96 | +``` |
| 97 | + |
| 98 | +После выполнения этих операций машина успешно загружается с новым ядром. |
| 99 | + |
| 100 | + |
| 101 | +--- |
| 102 | + |
| 103 | +# **Packer** |
| 104 | +Теперь с помощью packer создадём образ машины с обновленным ядром пятой версии. В директории packer уже есть файл centos.json, актуализируем его |
| 105 | + |
| 106 | +### **centos.json** |
| 107 | + |
| 108 | +В секции `"variables"` . |
| 109 | + |
| 110 | +Создаем переменные (`variables`) с версией и названием нашего проекта (artifact): |
| 111 | +``` |
| 112 | + "artifact_description": "CentOS 7.8 with kernel 5.x", |
| 113 | + "artifact_version": "7.8.2003", |
| 114 | +``` |
| 115 | + |
| 116 | +В секции `builders` задаем исходный образ, для создания своего в виде ссылки и контрольной суммы. По ходу выполнения задания выяснилось что версия дистрибутива описанная в методичке уже устарела и была заменена обновленной версией, в связи с этим актуализируем эту секцию |
| 117 | + |
| 118 | +``` |
| 119 | +"iso_url": "https://mirror.yandex.ru/centos/7.8.2003/isos/x86_64/CentOS-7-x86_64-Minimal-2003.iso", |
| 120 | +"iso_checksum": "659691c28a0e672558b003d223f83938f254b39875ee7559d1a4a14c79173193", |
| 121 | +"iso_checksum_type": "sha256", |
| 122 | +``` |
| 123 | +В секции `post-processors` указываем имя файла, куда будет сохранен образ, в случае успешной сборки действия по методичке указываем итоговое имя бокса помня что оно формируется исходя из комбинации c `artifact_version` указанной в начале файла |
| 124 | + |
| 125 | +``` |
| 126 | + "output": "centos-{{user `artifact_version`}}-kernel-5-x86_64-Minimal.box", |
| 127 | +``` |
| 128 | + |
| 129 | +В секции `provisioners` указываем каким образом и какие действия необходимо произвести для настройки виртуальной машины. В данном случае необходимо установить дополнительный репозиторий и обновить из него ядро. |
| 130 | + |
| 131 | +``` |
| 132 | + "scripts" : |
| 133 | + [ |
| 134 | + "scripts/stage-1-kernel-update.sh", |
| 135 | + "scripts/stage-2-clean.sh" |
| 136 | + ] |
| 137 | +``` |
| 138 | +Скрипты тоже потребовалось немного актуализировать. В `"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` в противном случае после обновления образ загружался в режиме аварийного восстановления. |
| 139 | + |
| 140 | +### **packer build** |
| 141 | + |
| 142 | +Выполняем сборку бокса |
| 143 | +``` |
| 144 | +packer build centos.json |
| 145 | +``` |
| 146 | +Скрипт успешно выполняется и в результате получаем файл: `centos-7.8.2003-kernel-5-x86_64-Minimal.box` |
| 147 | + |
| 148 | +### **Тестирование полученного бокса** |
| 149 | + |
| 150 | +Импортируем файл в `vagrant` |
| 151 | + |
| 152 | +``` |
| 153 | +vagrant box add --name centos-7-5 centos-7.8.2003-kernel-5-x86_64-Minimal.box |
| 154 | +``` |
| 155 | +Убеждаемся в что операция выполнена: |
| 156 | + |
| 157 | +``` |
| 158 | +vagrant box list |
| 159 | +``` |
| 160 | +Видим наш образ: |
| 161 | + |
| 162 | +``` |
| 163 | +centos-7-5 (virtualbox, 0) |
| 164 | +``` |
| 165 | + |
| 166 | +Создаем новую директорию и помещаем туда копию существующего `Vagrantfile` из первой части задания. Перейдя в неё в терминале выполняем команду |
| 167 | + |
| 168 | +``` |
| 169 | +vagrant up |
| 170 | +``` |
| 171 | +Убеждаемся что образ машины исправен и загружается выполнив |
| 172 | + |
| 173 | +``` |
| 174 | +vagrant ssh |
| 175 | +``` |
| 176 | + |
| 177 | +Проверяем версию ядра |
| 178 | + |
| 179 | +``` |
| 180 | +uname -r |
| 181 | +``` |
| 182 | +Если видим установленной пятую версию ядра значит обновление успешно применено и проверено на работоспособность. |
| 183 | + |
| 184 | +# **Загрузка бокса** |
| 185 | + |
| 186 | +``` |
| 187 | +vagrant cloud auth login |
| 188 | +Vagrant Cloud username or email: <указываем свой email> |
| 189 | +Password (will be hidden): Пароль |
| 190 | +Token description (Defaults to "Vagrant login from DS-WS"): |
| 191 | +You are now logged in. |
| 192 | +``` |
| 193 | +Публикуем полученный бокс: |
| 194 | +``` |
| 195 | +vagrant cloud publish --release <username>/centos-7-5 1.2 virtualbox \ |
| 196 | + centos-7.8.2003-kernel-5-x86_64-Minimal.box |
| 197 | +
|
0 commit comments