Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,7 @@
.vagrant
*.vdi
sata*
*.old
*.save


118 changes: 118 additions & 0 deletions Lesson1/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
# Домашнее задание: "Обновить ядро в базовой системе"

## Описание/Пошаговая инструкция выполнения домашнего задания:

В материалах к занятию есть методичка, в которой описана процедура обновления ядра из репозитория.
По данной методичке требуется выполнить необходимые действия.
Полученный в ходе выполнения ДЗ Vagrantfile должен быть залит в ваш git-репозиторий.
Для проверки ДЗ необходимо прислать ссылку на него.
Для выполнения ДЗ со * и ** вам потребуется сборка ядра и модулей из исходников.
Методичка Настройка ПК для создания стендов и выполнения домашних заданий
https://docs.google.com/document/d/1fZUXL30bDhJEQpDQgtfv3Nj4WYWto98AaYlC1vJ2LkQ/edit?usp=sharing
Методичка Vagrant-стенд для обновления ядра и создания образа системы
https://docs.google.com/document/d/12sC884LuLGST3-tZYQBDPvn6AH8AGJCK/edit?usp=sharing&ouid=107126378526912727172&rtpof=true&sd=true

## Решение

### Создание образа системы
```
packer build centos.json
```

Результат успешного создания образа в Packer:
```
...
==> Wait completed after 28 minutes 23 seconds

==> Builds finished. The artifacts of successful builds are:
--> centos-7.9: 'virtualbox' provider box: centos-7.9.2009-kernel-6-x86_64-Minimal.box
```

### Импортирование полученного vagrant box в Vagrant:
```
vagrant box add centos7-kernel6 centos-7.9.2009-kernel-6-x86_64-Minimal.box
```
вывод:
```
=> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'centos7-kernel6' (v0) for provider:
box: Unpacking necessary files from: file:///home/vl/otus-linux/Lesson1/centos-7.9.2009-kernel-6-x86_64-Minimal.box
==> box: Successfully added box 'centos7-kernel6' (v0) for 'virtualbox'!
```

Запуск ВМ: ```vagrant up```

Подключимя к ней по SSH: ``` vagrant ssh ```

Проверка версии ядра:
```
[vagrant@otuslinux ~]$ uname -r
6.0.11-1.el7.elrepo.x86_64
```

## ДЗ с **: в вашем образе нормально работают VirtualBox Shared Folders.

В Vagrantfile добавлено создание дисков, их форматирование, монтирование.
Добавлена синхронизация shared folders с созданными дисками.

Для нормальной работы shared folders требуется Добавление vbguest:
```
vagrant plugin install vagrant-vbguest
vagrant ssh -c "cat /var/log/vboxadd-install.log"
vagrant vbguest
```

Установка VirtualBox Addition завершилась с ошибкой:
```
[otuslinux] GuestAdditions seems to be installed (6.1.38) correctly, but not running.
...
Job for vboxadd.service failed because the control process exited with error code. See "systemctl status vboxadd.service" and "journalctl -xe" for details.
...
/opt/VBoxGuestAdditions-6.1.38/bin/VBoxClient: error while loading shared libraries: libX11.so.6: cannot open shared object file: No such file or directory
```

Попытка установить недостающие библиотеки ни к чему не привела:
```
yum update kernel kernel-headers
```

Проверка vbguest
```
vagrant vbguest --status
```
![vbguest installed but not running](imgs/vbguest-installed-but-not-running.png)


### Загрузка образа в Vagrant cloud
Логин в vagrant cloud: ``` vagrant cloud auth login ```

Опубликование образа:
```
vagrant cloud publish --release <user_account>/centos8-kernel5 1.0 virtualbox centos-8-kernel-5-x86_64-Minimal.box
```

Вносим изменения в Vagrant файл, чтобы при запуске использовался образ из Vagrant Cloud
```
config.vm.box = "vlyulin/centos7-kernel6"
config.vm.box_version = "1.0"
```

### Проверка

Проверяем настройки запуском виртуальной машины:
```
vagrant up
```

Из-за того, что некорректно поставлена VirtualBoxAddition, не монтируются Shared folders
![Unable to mount shared folders](imgs/vagrant-was-unable-to-mount-shared-folders.png)

Хотя shared folders показывает:
![Shared folders](imgs/vm-mounted-shared-folders.png)







230 changes: 230 additions & 0 deletions Lesson1/Vagrantfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,230 @@
# -*- mode: ruby -*-
# vi: set ft=ruby :

MACHINES = {
:otuslinux => {
:box_name => "vlyulin/centos7-kernel6",
:box_version => "1.0",
:ip_addr => '192.168.56.2',
:disks => {
:sata1 => {
:dname => 'sata1',
:dfile => './sata1.vdi',
:size => 250,
:port => 1
},
:sata2 => {
:dname => 'sata2',
:dfile => './sata2.vdi',
:size => 250, # Megabytes
:port => 2
},
:sata3 => {
:dname => 'sata3',
:dfile => './sata3.vdi',
:size => 250,
:port => 3
},
:sata4 => {
:dname => 'sata4',
:dfile => './sata4.vdi',
:size => 250, # Megabytes
:port => 4
}

}
},
}

$sdb = <<-SCRIPT
if df | grep "/dev/sdb1"
then
echo '/dev/sdb1 exist'
else
parted /dev/sdb mklabel msdos
parted /dev/sdb mkpart primary 0% 100%
mkfs.xfs /dev/sdb1
fi
mkdir -p /mnt/sata1
if grep -Fxq "sdb1" /etc/fstab
then
echo 'sdb1 exist in fstab'
else
echo `blkid /dev/sdb1 | awk '{print$2}' | sed -e 's/"//g'` /mnt/sata1 xfs defaults,noatime 0 0 >> /etc/fstab
fi
if mount | grep /mnt/sata1 > /dev/null; then
echo "/dev/sdb1 mounted /mnt/sata1"
umount /mnt/sata1
mount -t vboxsf -o uid=1000,gid=1000 /mnt/sata1
else
mount -t vboxsf -o uid=1000,gid=1000 /mnt/sata1
fi
SCRIPT

$sdc = <<-SCRIPT
if df | grep "/dev/sdc1"
then
echo '/dev/sdc1 exist'
else
parted /dev/sdc mklabel msdos
parted /dev/sdc mkpart primary 0% 100%
mkfs.xfs /dev/sdc1
fi
mkdir -p /mnt/sata2
if grep -Fxq "sdc1" /etc/fstab
then
echo 'sdc1 exist in fstab'
else
echo `blkid /dev/sdc1 | awk '{print$2}' | sed -e 's/"//g'` /mnt/sata2 xfs defaults,noatime 0 0 >> /etc/fstab
fi
if mount | grep /mnt/sata2 > /dev/null; then
echo "/dev/sdc1 mounted /mnt/sata2"
umount /mnt/sata2
mount -t vboxsf -o uid=1000,gid=1000 /mnt/sata2
else
mount -t vboxsf -o uid=1000,gid=1000 /mnt/sata2
fi
SCRIPT

$sdd = <<-SCRIPT
if df | grep "/dev/sdd1"
then
echo '/dev/sdd1 exist'
else
parted /dev/sdd mklabel msdos
parted /dev/sdd mkpart primary 0% 100%
mkfs.xfs /dev/sdd1
fi
mkdir -p /mnt/sata3
if grep -Fxq "sdd1" /etc/fstab
then
echo 'sdd1 exist in fstab'
else
echo `blkid /dev/sdd1 | awk '{print$2}' | sed -e 's/"//g'` /mnt/sata3 xfs defaults,noatime 0 0 >> /etc/fstab
fi
if mount | grep /mnt/sata3 > /dev/null; then
echo "/dev/sdd1 mounted /mnt/sata3"
umount /mnt/sata3
mount -t vboxsf -o uid=1000,gid=1000 /mnt/sata3
else
mount -t vboxsf -o uid=1000,gid=1000 /mnt/sata3
fi
SCRIPT

$sde = <<-SCRIPT
if df | grep "/dev/sde1"
then
echo '/dev/sde1 exist'
else
parted /dev/sde mklabel msdos
parted /dev/sde mkpart primary 0% 100%
mkfs.xfs /dev/sde1
fi
mkdir -p /mnt/sata4
if grep -Fxq "sde1" /etc/fstab
then
echo 'sde1 exist in fstab'
else
echo `blkid /dev/sde1 | awk '{print$2}' | sed -e 's/"//g'` /mnt/sata4 xfs defaults,noatime 0 0 >> /etc/fstab
fi
if mount | grep /mnt/sata4 > /dev/null; then
echo "/dev/sde1 mounted /mnt/sata4"
umount /mnt/sata4
mount -t vboxsf -o uid=1000,gid=1000 /mnt/sata4
else
mount -t vboxsf -o uid=1000,gid=1000 /mnt/sata4
fi
SCRIPT


# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure("2") do |config|

# if Vagrant.has_plugin?("vagrant-vbguest") then
config.vbguest.auto_update = true
# end

# Every Vagrant development environment requires a box. You can search for
# boxes at https://vagrantcloud.com/search.
config.vm.box = "vlyulin/centos7-kernel6"
config.vm.box_version = "1.0"

# Disable automatic box update checking. If you disable this, then
# boxes will only be checked for updates when the user runs
# `vagrant box outdated`. This is not recommended.
# config.vm.box_check_update = false

# Share an additional folder to the guest VM. The first argument is
# the path on the host to the actual folder. The second argument is
# the path on the guest to mount the folder. And the optional third
# argument is a set of non-required options.
# config.vm.synced_folder "../data", "/vagrant_data"

MACHINES.each do |boxname, boxconfig|

config.vm.define boxname do |box|

box.vm.box = boxconfig[:box_name]
box.vm.box_version = boxconfig[:box_version]
box.vbguest.installer_options = { allow_kernel_upgrade: true }
box.vm.host_name = boxname.to_s

box.vm.network "private_network", ip: boxconfig[:ip_addr]

config.vm.provision "shell", inline: <<-SHELL
sudo kdir -p /mnt/cdrom
sudo mount /dev/cdrom /mnt/cdrom
sudo apt-get install make gcc linux-headers-$(uname -r)
sudo /media/cdrom/VBoxLinuxAdditions.run
SHELL

box.vm.provider :virtualbox do |vb|
vb.customize ["modifyvm", :id, "--memory", "1024"]
needsController = false
# create disks
boxconfig[:disks].each do |dname, dconf|
unless File.exist?(dconf[:dfile])
vb.customize ['createhd', '--filename', dconf[:dfile], '--variant', 'Fixed', '--size', dconf[:size]]
needsController = true
end

end
if needsController == true
vb.customize ["storagectl", :id, "--name", "SATA", "--add", "sata" ]
# attach disks
boxconfig[:disks].each do |dname, dconf|
vb.customize ['storageattach', :id, '--storagectl', 'SATA', '--port', dconf[:port], '--device', 0, '--type', 'hdd', '--medium', dconf[:dfile]]
end
end
end

# format and mount disks
box.vm.provision "shell", inline: $sdb
box.vm.provision "shell", inline: $sdc
box.vm.provision "shell", inline: $sdd
box.vm.provision "shell", inline: $sde

# fight with Permission denide for mounts
box.vm.provision "shell", inline: <<-SHELL
sudo usermod -aG vboxsf vagrant
sudo chown -R vagrant:vagrant /mnt/sata1/
sudo chown -R vagrant:vagrant /mnt/sata2/
sudo chown -R vagrant:vagrant /mnt/sata3/
sudo chown -R vagrant:vagrant /mnt/sata4/
SHELL

# add shared folders
box.vm.provider :virtualbox do |vb|
boxconfig[:disks].each do |dname, dconf|
# if File.exist?(dconf[:dfile])
config.vm.synced_folder dconf[:dname], "/mnt/#{dconf[:dname]}", create: true
# end
end
end
end
end
end

Loading