UMGUM.COM 

KVM + Bash-Supervisor + Running ( Функция запуска виртуальной машины. )

21 июля 2011  (обновлено 28 октября 2018)

Эта публикация скрыта. Она доступна только по прямой ссылке.

Здесь размещено описание одного из функциональных блоков инструкции с примером управления виртуальными машинами "Qemu-KVM" через простейшие BASH-скрипты. Отдельно неприменимо.

Фрагмент кода с функциями формирования строки инициализации и запуска виртуальной машины как таковой:

# vi /etc/kvm/fnc.d/7.run.fnc

#!/bin/bash
# This file contains the code snippet for the shell Bash v.4 (Bourne again shell)
# Файл содержит фрагмент кода для командного интерпретатора Bash v.4 (Bourne again shell)

# Функция непосредственного запуска виртуальной машины
function start-run() {

  # Если скрипт исполняет суперпользователь, то задаём перевод запускаемой машины во владение пользователя, специально созданного для работы с виртуальными машинами
  if [ "`id --user`" == "0" ]; then
    RUNUS="-runas ${USER}"
  else
    RUNUS=""
  fi

  # Запускаем виртуальную машину
  echo "${DATE}: Starting virtual machine ${NAME} ..." | tee -a "${LOGT}"
  /usr/bin/kvm -name ${NAME} -daemonize -enable-kvm ${RUNUS} \
    ${PSTRING} \
    ${DSTRING} \
    ${NSTRING} \
    ${MSTRING}

  # Если скрипт исполняет суперпользователь, то задаём перевод ресурсов запускаемой машины во владение пользователя и группы, специально созданных для работы с виртуальными машинами. В противном случае, если скрипт исполняется от рядового пользователя группы KVM, просто расширяем права доступа в рамках группы KVM
  if [ "`id --user`" == "0" ]; then
    chown -R ${USER}:${GROUP} /tmp/kvm
    chmod -R ug+rw /tmp/kvm
    chmod -R o-rwx /tmp/kvm
  else

    # Права доступа к PID-файлам на уровне взаимодействия приложения и системы автоматически ограничиваются до "go-rwx". Применение "umask" эффекта не даёт. Компенсируем точечно, постфактум добавляя групповые разрешения
    chmod -R ug+rw ${MPID}
  fi

  # Проверяем успешность запуска виртуальной машины (ждём десять секунд)
  for I in {1..10}
  do

    STATE=`ps wax | grep --invert-match grep | grep --ignore-case --count --extended-regexp "kvm[ ]+\-name[ ]+${NAME}[ ]+"`

    if [ ${STATE} -ne 0 ]; then

      # Увеличиваем на единицу счётчик успешно запущенных виртуальных машин
      let "RUNNING = RUNNING + 1"

      echo "${DATE}: The virtual machine is running successfully." | tee -a "${LOGT}"
      return 0
    fi

    # Ждём некоторое время
    echo "  Wait ${I} seconds for running VM..."
    sleep 1

  done

  # Учитывая то, что в течении заданного времени успешного запуска виртуальной машины не зафиксировано - объявляем о неудаче
  echo "${DATE}: Виртуальная машина не была успешно запущена." | tee -a "${LOGT}"
  return 1

return 0
}


Заметки и комментарии к публикации:


Оставьте свой комментарий ( выразите мнение относительно публикации, поделитесь дополнительными сведениями или укажите на ошибку )