точку в этой саге. Это последняя часть трилогии, первая находится здесь вторая здесь
В них описана установка qemu-kvm настройка моста объединившего все виртуалки в одну локальную
сеть, где мы превратили целевую машину в маршрутизатор и открыли выход в глобальную сеть всех
виртуальных точек. Теперь просто обустроим все и добавим некоторого удобства в работе.
Обычно я запускаю виртуалки на разных рабочих столах это создает эффект удаленности и
перемещаю файлы при помощи инструмента
Код: Выделить всё
scp ./document one@linux:/home/nezabudka/машины. Сразу бросается в глаза неудобство связанное со вводом пароля при запуске скрипта.
Это связано с тем что саму машину мы должны запускать от имени пользователя, а именованный канал
создаем от рута. Я работаю на домашнем компьютере так что могу себе позволить отключить ввод
пароля для нужных мне команд. Но я наверное обязана для начала предупредить что это серьезная
дыра в безопасности системы и повторять это или нет в первую очередь зависит от основной цели использования станции. По крайней мере нужно всегда помнить на будущее что мы добавили
некоторые команды в безпарольный запуск. Теперь сделаем это
Код: Выделить всё
vim /etc/sudoersКод: Выделить всё
nezabudka ALL=NOPASSWD:/sbin/ifconfig,/usr/sbin/tunctl,/sbin/brctlПереходим к следующей проблемме. Она сводилась к тому что сеть в нашей машине нельзя
рестартнуть ибо собьются все настройки, а правильный кейс следующий - "остановить и
по новой запустить саму виртуалку но уже не создавая именованного канала".
Как учила баба Шура, во первах составим алгоритм нового скрипта
1.Создаем преключатель
а)Запускаем машину в режиме по умолчанию
б)Запускаем машину в режиме перезагрузки когда уже созданы именованные каналы
За работу преключателя назначаем ответственным параметр "reboot"
Сперва выстроим работоспособный скелет
Код: Выделить всё
if [[ "$1" == "reboot" ]]; then
echo "Запускаем машину без создания именованного канала"
else
sudo echo "Запускаем машину по дефолту с cозданием канала"
fi
exit 0Но можем прикрутить сюда и псевдо графический интерфейс который нам любезно
предоставляет тулза whiptail. Cмотрим че за зверь.
Код: Выделить всё
dpkg -s whiptail
apt-cache show whiptailКод: Выделить всё
#!/usr/bin/env bash
if (whiptail --yesno "Режимы запуска ВМ" --yes-button "Start" --no-button "Reboot" --title "Тестируем байду от незабудки" 10 70) then
toilet --gay "Привет"
else
toilet --metal "Пока"
fi
exit 0две утилиты, обязательная whiptail и не обязательная toilet которую вы можете заменить
комндой echo. Но вот зачем нам взрослым людям гуй и тем более псевдо гуй? Мы все им наигрались
при устаноке системы. Оставим его на новый год лампочки переключать. А выбор режима запуска
мы можем с легкостью перепоручить самой программе. Лишние телодвижения это не линукс вэй.
Алгоритм работы программы будет слудующим.
Запускаем скрипт, программа проверяет доступен ли интерфейс tap0. Если доступен, запускаем
одну группу команд, если нет другую. Добавим в наш скрипт следующую конструкцию
Код: Выделить всё
if (sudo ifconfig | grep -o tap0) then
"Строка запуска машины без создания канала"
else
"Строки создания канала и запуска машины"
fi
exit 0И более того предлагаю вообще оторвать запуск скрипта от терминала.
Заходим в "параметры" выбираем "клавиатура" преходим на вкладку "комбинации клавиш",
добавляем название и команду (путь до нашего скрипта) и привяжем это действие к
комбинации Alt+Ctrl+1, а из скрипта уберем значек выполнения в фоне. Есть смысл повесить
запуск других машин на Alt+Ctrl+2... Помимо удаления значка амперсанда, отвечающего за
запуск программы в фоне, нам нужно обязательно прописать в скрипте sh все абсолютные пути
используемых файлов и программы. Наш скрипт в конечном итоге приобретет следующий вид
Код: Выделить всё
#!/usr/bin/env bash
macaddress=$(printf 'DE:AD:BE:EF:%02X:%02X\n' $((RANDOM%256)) $((RANDOM%256)))
if (sudo ifconfig | grep -o tap0) then #доверим программе выбирать режимы запуска
/usr/bin/kvm -hda /home/nezabudka/kvm/Deb1.img -cdrom /home/gnom/kvm/debian.iso -net nic,model=e1000,macaddr=${macaddress},vlan=0 -net tap,vlan=0,ifname=tap0,script=no
else
sudo tunctl -b -u gnom
sudo ifconfig tap0 up
sudo brctl addif br0 tap0
/usr/bin/kvm -hda /home/nezabudka/kvm/Deb1.img -cdrom /home/gnom/kvm/debian.iso -net nic,model=e1000,macaddr=${macaddress},vlan=0 -net tap,vlan=0,ifname=tap0,script=no
fi
exit 0рабочем столе. У нас есть очень интересный каталог. В нем находятся ярлыки
установленных в системе программ. Если мы зайдем туда и воспользуемся для просмотра
редактором vim или утилитой cat | more
то мы можем просмотреть их содержимое для ознакомления, а через наутилус с помощью мыши
позапускать их. По их подобию можно создать аналогичный ярлык. Попробуем.
К стати сказать я пользуюсь оболочкой gnome-shell так что делайте поправки на свое окружение.
Код: Выделить всё
cd desktop
vim script.desktopКод: Выделить всё
[Desktop Entry]
Name=KVM_1
Comment=Скрипт запуска виртуальной машины
GenericName=Эмулятор процессора
Keywords=эмулятор;виртуалка;машина
Exec=/home/nezabudka/kvm/1vm.sh
Terminal=false
Type=Application
Icon=/usr/share/pixmaps/faces/dice.jpg
Categories=qemu-kvm;kvm;qemu
StartupNotify=falseменю. И конечно же не забываем добавить права на выполнение
Код: Выделить всё
chmod 755 script.desktopзапущенный из терминала обязательно захватит весь терминал. Если вы работаете только в эмуляторе консоли и вы противник использования хот кеев верните амперсанд на место.
В следующих постах мы начнем то ради чего настраивали этого спрута, начнем создавать соединения, тестировать сетевые утилиты и инструменты, настраивать службы, а так же работать над безопасностью
системы, но это уже будут отдельные истории.


