Руководитель отдела разработки
0,0
рейтинг
29 января 2014 в 12:19

Администрирование → Два и более рабочих места на одном компьютере — бесплатное решение из песочницы


В данной статье рассматривается идея и практическое руководство по создания многопользовательской рабочей станции (multiseat) с использованием виртуализации KVM, с возможностью удаленного управления через libvirt. С помощью этого руководства возможно создать два и более рабочих мест как в офисе, так и дома, которым может потребоваться возможность полного использования графической подсистемы компьютера. Причем можно на одном системном блоке реализовать одновременно работу различных операционных систем Windows, Linux, Mac OS X, остальное по вкусу.

Введение


Желание реализовать возможность совместного использования одного компьютера, хотя бы двуx людей появилась давным-давно. Идея сделать из домашнего или офисного компьютера, как минимум два рабочих места раньше реализовывалась в основном на той же операционной системе со всеми вытекающими недостатками. Трудности возникали особенно тогда, когда одному человеку нравилось работать в windows, а другому в Linux и приходилось кому-то терпеть, если решение было реализовано только через одну ОС. Впрочем были и другие трудности.

Сейчас компьютеры стали более производительные, рост частоты новых процессоров уже нас давно не радует, но зато радует рост ядер. А это значит, что мы в одном системном блоке потенциально уже имеем несколько компьютеров. И тенденция эта будет только расти. Работа нескольких человек с одним компьютером в стандартной конфигурации скоро будет вполне востребованной на рынке и уже сейчас доступна в реализации.

Установка Gentoo


Подготовка
Качаем текущий livecd и загружаемся.
Поднимаем сеть. Как зовут сетевой интерфейс?
ifconfig
  eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

Для тех кто любит окошки настраиваем сеть так
net-setup eno1

Я лично привык по старинке. Прописываем свой ip
ifconfig eno1 192.168.1.2/24

Установим маршрутизатор по умолчанию
route add default gw 192.168.1.1

Укажем наши DNS
echo "nameserver 8.8.8.8" >> /etc/resolv.conf

Задаем пароль для root
passwd root

Запускаем ssh, для того, чтобы продолжать установку удаленно
/etc/init.d/sshd start

C любимого рабочего места заходим по ssh
ssh root@192.168.1.186


Разметка диска
Предполагается, что у Вас один пустой диск с именем /dev/sda
parted -a opt  /dev/sda
(parted) mklabel msdos

Создадим раздел для загрузки. 150M с очень большим запасом. Может быть мигрируем в будущем разделы в GPT и поставим EFI.
(parted) mkpart primary ext2 1 150M
(parted) set 1 boot on

Все остальное отдадим под lvm
(parted) mkpart primary 150M -1s
(parted) #Is this still acceptable to you? Yes/No? yes 
(parted) set 2 lvm on                                                     
(parted) quit

LVM нам понадобится для того, чтобы делать моментальные снимки дисков виртуальных машин, без остановки системы, для организации резервных копий. Так же удобнее будет производить изменение разделов, добавление новых.
Разметка диска для LVM. Размеры ставьте на Ваш вкус
pvcreate /dev/sda2
vgcreate vg /dev/sda2
lvcreate -L 1G -n root vg
lvcreate -L 1G -n tmp vg
lvcreate -L 5G -n var vg
lvcreate -L 10G -n usr vg

Если уже был настроен LVM, то его нужно активировать
vgchange -ay

Отформатируем все разделы
mkfs.ext2 /dev/sda1
mkfs.ext2 /dev/vg/tmp
for p in root var usr ; do mkfs.ext4 /dev/vg/$p ; done

Монтируем наш будущий корневой раздел
mount /dev/vg/root /mnt/gentoo

Создаем каталоги для остальных точек монтирования
cd /mnt/gentoo
mkdir boot usr var tmp sys proc dev
chmod 1777 tmp

Монтируем остальные разделы
mount /dev/vg/usr /mnt/gentoo/usr
mount /dev/vg/tmp /mnt/gentoo/tmp
mount /dev/vg/var /mnt/gentoo/var
mount /dev/sda2 /mnt/gentoo/boot


Разворачивание готового образа и подготовка к chroot
cd /mnt/gentoo

Качаем свежую систему (проверьте дату в названии файла)
wget http://mirror.yandex.ru/gentoo-distfiles/releases/amd64/current-stage3/stage3-amd64-nomultilib-20140123.tar.bz2

Заберем portage. Portage — описание как собирать и устанавливать необходимые нам программы
wget http://mirror.yandex.ru/gentoo-distfiles/snapshots/portage-latest.tar.bz2 

Распакуем все это
tar xvjpf stage3-amd64-nomultilib-20140123.tar.bz2
tar xvjf portage-latest.tar.bz2 -C /mnt/gentoo/usr 

Скопируем resolv.conf в будущий корневой раздел
cp /etc/resolv.conf /mnt/gentoo/etc/resolv.conf 

Монтируем системные разделы
mount --rbind /dev /mnt/gentoo/dev
mount -t proc none /mnt/gentoo/proc
mount --rbind /sys /mnt/gentoo/sys

Попадаем внутрь созданного корневого раздела (будущей системы)
chroot /mnt/gentoo
env-update
source /etc/profile


Обживаем новую систему
nano /etc/portage/make.conf

Если есть необходимость, то меняем CFLAGS — опции для компилятора. Опции компилятора, практически стандартные, кроме -march=native (вместо -march=i686), что обязывает компилятор использовать все возможности процессора. Если стоит задача сделать железо независимую установку, то лучше не использовать, т.к. при восстановлении на новом железе (возможно) придется пересобрать весь мир.
USE — перечисляются глобально основные опции программ, которые будут установлены.
Если будут тонкие клиенты, то добавьте в USE «spice», если нужно пробрасывать USB порты тонких клиентов, то добавьте «usbredir»
CFLAGS="-O2 -pipe -march=native"
# количество процессов при сборке пакетов
MAKEOPTS="-j3"
USE="bindist mmx sse sse2 -ipv6 unicode device-mapper -X slang udev pulseaudio"
GENTOO_MIRRORS=http://mirror.yandex.ru/gentoo-distfiles/
SYNC="rsync://rsync.ru.gentoo.org/gentoo-portage"
LINGUAS="ru en" 

Пропишем наши разделы для авто-монтирования
cat > /etc/fstab << "EOF"
/dev/sda1 /boot ext2 noauto,noatime 1 2
/dev/vg/root / ext4 noatime 0 1 
/dev/vg/tmp /tmp ext2 noatime 0 0
/dev/vg/usr /usr ext4 noatime 0 0 
/dev/vg/var /var ext4 noatime 0 0
EOF

Обновим дерево portage
emerge --sync

Если нужно сменить профиль, то как раз самое время
eselect profile list
eselect profile set <цифра>

Создадим файл-конфигурации сети
cat > /etc/conf.d/net << "EOF"
config_eno1="null"
config_br0="192.168.1.2/24"
routes_br0="default via 192.168.1.1"
bridge_br0="eno1"
rc_net_br0_need="net.eno1"
ethtool_offload_eno1="gro off"
dns_domain="mydomain.ru"
dns_servers="8.8.8.8 8.8.4.4"
EOF
ln -s /etc/init.d/net.lo /etc/init.d/net.eno1
ln -s /etc/init.d/net.lo /etc/init.d/net.br0

Зададим пароль для root
passwd root

Добавим себя (testuser), как пользователя и зададим пароль. Добавим в группы users,wheel,audio
useradd -m -G users,wheel,audio -s /bin/bash testuser
passwd testuser

К моменту написания статьи не вышла еще qemu-1.7.1, поэтому ставим две звезды, чтобы забрать девелоперскую версию
echo "app-emulation/qemu ** ~amd64" >>/etc/portage/package.accept_keywords

Данный флаг нужен, чтобы pulseaudio работал как независимый процесс. К сожалению, по умолчанию заставить его стабильно работать с libvirt мне не удалось, используя переменную «nographics_allow_host_audio=1» в libvirtd.conf. Может быть у Вас получится?
echo "media-sound/pulseaudio -system-wide" >>/etc/portage/make.profile/package.use.mask
echo "media-sound/pulseaudio -dbus system-wide" >>/etc/portage/package.use 

Укажем, что нужно будет собирать новые версии пакетов
for p in sys-kernel/gentoo-sources app-emulation/libvirt sys-apps/dtc sys-firmware/seabios; do echo $p" ~amd64" >>/etc/portage/package.accept_keywords ; done 

Установим необходимые программы. Ключ -av позволяет посмотреть опции сборки, если что-то не устраивает, то можно включить опцию в USE переменную, которая содержится в файле /etc/portage/make.conf. app-misc/mc — если кому-то он удобен
emerge -av gentoo-sources vixie-cron lvm2 genkernel syslog-ng iproute2 libvirt ethtool bridge-utils grub terminus-font radeon-ucode app-misc/mc

Добавим программы в автозагрузку
for s in sshd vixie-cron syslog-ng net.br0 libvirtd ; do rc-update add $s default; done

Соберем ядро Linux, причем в разделах
> Device Drivers > IOMMU Hardware Support > IOMMU Hardware Support
Отмечаем все звёздочками
> Device Drivers > VFIO Non-Privileged userspace driver framework
Отмечаем все звёздочками
>Device Drivers > Networking support > Universal TUN/TAP device driver support
Ставим звёздочку.
Все остальное по вкусу ;-)
genkernel --lvm --menuconfig all

Добавим флаг «dolvm», для автозагрузки LVM
nano /etc/default/grub
# пропишем переменную
GRUB_CMDLINE_LINUX="dolvm"

Установим загрузчик Grub
grub2-install /dev/sda
grub2-mkconfig -o /boot/grub/grub.cfg

Настраиваем локализацию
cat /usr/share/i18n/SUPPORTED | grep -E 'ru_RU|en_US' >> /etc/locale.gen && locale-gen

Копируем новый файл временной зоны в /etc/localtime
cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime

Настроим переключение клавиатуры
nano /etc/conf.d/keymaps
# изменим параметры
dumpkeys_charset="utf8"
keymap="-u ru"

Фонт в консоли пропишем
nano /etc/conf.d/consolefont
# изменим параметр
consolefont="cyr-sun16"

Локализация сообщений
cat > /etc/env.d/02locale << "EOF"
LANG="ru_RU.UTF-8"
LC_ALL="ru_RU.UTF-8"
LANG="ru_RU.UTF-8"
LC_MESSAGES="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
EOF
env-update && source /etc/profile
rc-update add keymap default
rc-update add consolefont default


Если необходимо, то можно обновить и пересобрать пакеты с новыми USE флагами
emerge -avuDN system world

Задаем имя хоста
nano /etc/conf.d/hostname
hostname="testhost"

Правим /etc/hosts
nano /etc/hosts
127.0.0.1 localhost testhost testhost.mydomain.ru

Перегружаемся, если все хорошо, то Вам повезло ;-) Все-таки железо у всех разное, возможно что-то нужно будет включить в ядро.
Если все плохо, то разбираемся в документации или пользуемся google. Документации на русском языке в сети достаточно.

Настройка


Настройка BIOS

Проверяем, что в BIOS VT-d включён, для Z87 «usb intel XHCI» нужно отключить для проброса USB контролеров.

Настройка звука

usermod -G kvm,audio,pulse-access -d /home/qemu qemu
usermod -G wheel,audio,pulse-access,users testuser
Запустим pulseaudio.
echo 'PULSEAUDIO_SHOULD_NOT_GO_SYSTEMWIDE="1"' >> /etc/conf.d/pulseaudio 
rc-update add pulseaudio default 
/etc/init.d/pulseaudio start
su - testuser 
# C помощью alsamixer выставляем требуемую громкость, если ММ то нажимаем М.
alsamixer
# обратно к root
exit
# сохраняем настройки громкости
/etc/init.d/alsasound save 
/etc/init.d/alsasound start
rc-update add alsasound default

Настройка libvirt

В файл /etc/libvirt/qemu.conf определим пользователя, от которого будет запуск виртуалок
user = "qemu"
group = "qemu"
# Если все будет плохо, то можно раскомментировать
# clear_emulator_capabilities = 0

В момент написания статьи seabios в gentoo 1.7.3, а нам нужен свежий, по этому качаем и распаковываем
cd /etc/libvirt 
wget http://code.coreboot.org/p/seabios/downloads/get/bios.bin-1.7.4.gz 
gzip -d bios.bin-1.7.4.gz


Создадим вспомогательный скрипт для проброса устройств
cat > /etc/libvirt/vfio-bind << "EOF"
#!/bin/sh
for dev in "$@"; do 
  vendor=$(cat /sys/bus/pci/devices/$dev/vendor) 
  device=$(cat /sys/bus/pci/devices/$dev/device)
  if [ -e /sys/bus/pci/devices/$dev/driver ]; then
    echo $dev > /sys/bus/pci/devices/$dev/driver/unbind
  fi                                                                                                         
  echo $vendor $device > /sys/bus/pci/drivers/vfio-pci/new_id
done
EOF
chmod +x /etc/libvirt/vfio-bind

Запускаем lspci и выбираем жертву для ручного проброса
03:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Turks PRO [Radeon HD 6570/7570]
03:00.1 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] Turks/Whistler HDMI Audio [Radeon HD 6000 Series
00:1a.0 USB controller: Intel Corporation 8 Series/C220 Series Chipset Family USB EHCI #2 (rev 04)

Создадим скрипт проброса конкретной видеокарты
cat > /etc/libvirt/bind-vga-1 << "EOF"
#!/bin/sh                                                                                                    
/etc/libvirt/vfio-bind 0000:03:00.0 0000:03:00.1                                                                    
# ставим права на группу 6. Найти можно здесь /sys/kernel/iommu_groups/6/devices
chown qemu /dev/vfio/6
EOF
chmod +x /etc/libvirt/bind-vga-1
# запускаем
/etc/libvirt/bind-vga-1
# создадим скрипт автозагрузки
cat > /etc/init.d/bind-vga-1 << "EOF"
#!/sbin/runscript                                                                                            
start() {
  ebegin "Starting vfio-bind"
  /etc/libvirt/bind-vga-1
  eend $? "Failed to start vfio-bind"
}
EOF
# если нужно, то в автозагрузку его
rc-update add bind-vga-1 default

Теперь создадим раздел где будет лежать образ виртуальной машины
lvcreate -L70G -nwks1 vg

У меня есть машина, где лежат образы уже подготовленных виртуалок с софтом, надеюсь и у Вас такая появится. Как подготовить образ напишу ниже.
ssh root@192.168.1.3 "dd if=/dev/vg_archive/windows7 bs=1M |gzip -" |gunzip - | dd of=/dev/vg/wks1 bs=1M

Настройка домена


Ниже приведен файл настройки конечной рабочей конфигурации с комментариями.

<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
  <name>wks1</name> 
  <uuid>2811e544-bf4d-baf6-1135-ec5acd139999</uuid>
  <memory unit='KiB'>4145152</memory>
  <currentMemory unit='KiB'>4145152</currentMemory>
  <cpu mode='host-passthrough'/>
  <os>
    <type arch='x86_64' machine='pc-q35-2.0'>hvm</type>
    <loader>/etc/libvirt/bios.bin-1.7.4</loader>
    <boot dev='hd'/>
    <bootmenu enable='yes'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
  </features>
  <clock offset='localtime'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/bin/qemu-kvm</emulator>
    <disk type='block' device='disk'>
      <driver name='qemu' type='raw' cache='none'/>
      <source dev='/dev/vg/wks1'/>
      <!-- Вначале установки windows нужно использовать следующий target
         <target dev='sda' bus='sata'/>
      -->
      <target dev='vda' bus='virtio'/>
    </disk>
    <!-- секция для CD образов                                                                                            
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/usr/win_7.iso'/>
      <target dev='hdc' bus='sata'/>
      <readonly/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
     -->
    <controller type='pci' index='0' model='pcie-root'>
      <alias name='pcie.0'/>
    </controller>
    <controller type='pci' index='1' model='dmi-to-pci-bridge'>
      <alias name='pci.1'/>
    </controller>
    <controller type='pci' index='2' model='pci-bridge'>
      <alias name='pci.2'/>
    </controller>
    <interface type='bridge'>
      <mac address='52:54:00:12:50:01'/>
      <source bridge='br0'/>
      <!-- Вначале установки windows нужно закомментировать модель -->
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x03' function='0x0'/>
    </interface>
    <!-- секция для первоночальной установки windows, через vnc
    <controller type='usb'/>
    <input type='tablet' bus='usb'/>
    <input type='mouse' bus='ps2'/>
    <graphics type='vnc' port='5900' autoport='no' listen='192.168.1.2' passwd='mypassword'/>
    -->
    <!-- BEGIN Если устанавливаем по vnс убираем этот блок -->
    <hostdev mode='subsystem' type='pci' managed='yes'>
       <!-- Вместо source1 должно быть source. С хабра-разметкой не могу справится -->
       <source1>
        <address domain='0x0000' bus='0x00' slot='0x1a' function='0x0'/>                                     
      </source1>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x04' function='0x0'/>                            
    </hostdev>
    <!-- END Eсли устанавливаем по vnс убираем этот блок -->
    <sound model='ich9'/>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x08' function='0x0'/>
    </memballoon>
  </devices>
  <seclabel type='none'/>
  <qemu:commandline>
    <qemu:env name="HOME" value="/home/qemu"/>
    <qemu:env name="QEMU_AUDIO_DRV" value="pa"/>
    <!-- BEGIN  Если мы устанавливаем по vnc, то нужно закомментировать этот блок -->
    <qemu:arg value='-vga'/>
    <qemu:arg value='none'/>
    <qemu:arg value='-device'/>
    <qemu:arg value='vfio-pci,host=03:00.0,bus=pcie.0,addr=02.0,x-vga=on'/>
    <!-- END  Если мы устанавливаем по vnc, то нужно закомментировать этот блок -->
  </qemu:commandline>
</domain>

Данную конфигурацию записываем в файл /etc/libvirt/qemu/wks1.xml
Перечитываем файл конфигурации
/etc/init.d/libvirtd restart

Запускаем домен
virsh start wks1
# если все будет хорошо, то можно в автозагрузку добавить
# virsh autostart wks1

Первоначальная установка


Для первоначальной установки записываем нужный iso образ и раскомментируем секцию cdrom. Так же убираем все настройки virtio и пробросы устройств 03:00.0 — видео и 00:1a.0 usb контроллера. Включаем доступ по vnc. После того когда вы систему установите нужно установить драйвера virtio в гостевую OC. Драйвера под windows.
Без драйверов все работает очень медленно.

Известные засады


  • Я встречался с тем, что без полного обновления windows не вставали последние драйвера virtio.
  • Перед тем как ставить драйвер-virtio основного диска, нужно подключить второй пустой диск с уже определенным типом virtio
    lvcreate -nzero -L1M
    

    <disk type='block' device='disk'>
          <driver name='qemu' type='raw' cache='writethrough'/>
          <source dev='/dev/vg/wks1'/>
          <target dev='sda' bus='sata'/>
        </disk>
    <disk type='block' device='disk'>
          <driver name='qemu' type='raw' cache='writethrough'/>
          <source dev='/dev/vg/zero'/>
          <target dev='vda' bus='virtio'/>
        </disk>
    

  • В windows изменение параметров энергосбережения -> настройка перехода в спящий режим -> переводить компьютер в спящий режим ->
    «никогда»


Этот скрипт можно в crontab установить.
cat > /etc/libvirtd/shutdown_if_not_start.sh << "EOF"
#!/bin/sh                                                                                                    
LIST_VM=`virsh list | awk '{if($3=="running")print $2}'|wc -l`                                               
if [ ${LIST_VM} -ne  0 ] ; then                                                                              
  exit 0                                                                                                     
fi                                                                                                           
awk '{if(int($1)>300){exit 0}else{ exit 1}}' /proc/uptime                                                    
if [ $? -ne 0 ]; then                                                                                        
  exit 0                                                                                                     
fi                                                                                                           
/sbin/shutdown -h now
EOF
chmod +x /etc/libvirtd/shutdown_if_not_start.sh

Заключение


Вроде основные моменты описал. Здесь можно найти пути решения, если у Вас валится windows в BSOD. Если вы будете организовывать моментальные снимки, то не забудьте поставить QEMU Guest Agent и научитесь с ним работать.
У нас на боевых компах стоит апач, через скрипт пользователь сам может производить действия с VM с соседнего компьютера или виртуалки. Можно так же реализовать запуск виртуалок по USB ключу.
Уверен, что кто-то сможет эту конфигурацию улучшить. Пожалуйста, напишите об это в комментарии, чтобы помочь остальным.
Данную конфигурацию можно затарить и распространять на другие машины, так же как и образы гостевых OC. Не забудьте после разворачивания хостового имиджа, поправить адреса, названия хостов, интерфейсов и сгенерировать ssh ключи.
Про spice и ARM, если будет интересно напишу отдельно.
Станислав @stas630
карма
12,0
рейтинг 0,0
Руководитель отдела разработки
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Администрирование

Комментарии (53)

  • +18
    А что, без Gentoo никак? :)
    • +9
      Если найдется все в репозитории с нужными пакетами (свежачок) в других дистрибутивах, то хоть консервативный Centos.
      В статье главное идея, а где ее делать без разницы
    • 0
      Пробовал как-то (на i5-2400 3.1GHz) под ubuntu 12.04 + qemu-kvm (/usr/bin/kvm-spice), две «рабочие» виндовые виртуалки, и одна линуксовая в фоне как сервер (svn/git/http и т.д.). Давольно шустро все бегало кстати. Правда со spice, потому что виндовые vm через VNC (по крайней мере на этом ubuntu) тупят страшно.
      • 0
        У меня на рабочей машинке с ubuntu каким-то чудом 13 виртуалок одновременно работают:
        По сути — целый провайдер с биллингом, bras, nas, dpi, netflow-collector, внешним и локальным ресурсом, парой юзеров + стенд для испытания патчей ядра.

        вот бы под каждую из этих машинок да по монитору-то! :D

        P.S: попробуйте вместо vnc для доступа к вендам юзать reminna. (или другой рдп клиент), гораздо шустрее работает, по крайней мере с win xp.
        • 0
          Да не я нативный доступ из под хоста имел ввиду (и spice очень шустрый кстати).
          А по части rdp, для винды — стандартный remote desktop, для линуксов nomashine nxclient. Быстрее ничего не видел.
    • +1
      Половина статьи — краткая справка как ставить Gentoo.
      Я делал такую установку с Xen под Ubuntu — всё нужное в стоковых репозиториях есть.
      Интересно было бы сравнить производительность.
      • +1
        У вас работало в стоковых VFIO c libvirt и видеокартой?
        • 0
          Я не большой специалист, но по скольку не припоминаю, чтобы с упомянутыми вещами я что-то делал — да, в стоковых.
          Видеокарты пробовал HD6570, HD6870, HD7770 — работали отлично.
  • –3
    Два и более рабочих места на одном компьютере — бесплатное решение
    А как быть с лицензией на небесплатных ОС? Вторую винду всё равно придётся покупать?
    • +12
      тру гентушники винду не покупают

      ;)
      • +7
        потому что не используют, да.
      • +3
        они ее компилят из сорцов))
    • 0
      Да, придется.
    • 0
      Если ставить тот же Астер, то вы нарушите лицензию. А если поставить вторую виртуалку, то да нужно покупать винду! Именно по этому я недавно, к примеру, жену перевел на Linux ;-)) Скажу честно… месяц выноса мозга по различным мелочам. Зато сейчас тишина (тьфу-тьфу-тьфу). Вроде привыкла и все устраивает. Только всякие finereader удобны под Windows. Аналоги в линуксе — очень грусны. Когда нужно распознать текст, то запускается виртуалка windows и пока все. Больше винда не нужна, так как я в игры не играю.
      • +2
        Игры в стиме и вайне же. Сейчас потребность в винде ради игр постепенно снижается, а для казуальных игроков так вообще винда не нужна.
        • +2
          Согласен. За последний год стим обзавелся огромным количеством игр под линукс.
        • 0
          Тру-гентушники играют в одну игру:
          emerge -eva system
          
      • 0
        Меж тем на заглавном скриншоте нечто похожее на игру :)
        Мне лично очень интересно как будут распределятся ресурсы видеокарты в данной реализации?
        • 0
          Просто Unigine Benchmark :)
        • 0
          Если взять тот же индекс производительности, то падение происходит не на видео системе. Узкое место диск. Если конечно SSD поставить… Есть еще подозрения, что конфигурация с эмуляцией q35 хуже работает с памятью, такое я читал в англоязычных форумах. По этому и кинул статью, чтобы народ потестил и что-то добавил. В конце-концов чем больше народа попробует, тем более вылизанной будет конфигурация.
          • 0
            как быть, если карта 1 — а машин надо несколько? В (уж простите) Microsoft решает проблему производитель карты, который дает multi GPU (или как оно там правильно сейчас называется) Правда цена за карту вырастает на глазах.
            • 0
              Купить вторую и вставить в 2-3 свободных PCI-E. ATI6450 стоит в районе 1100 руб, можно попробывать более простую карту с пасивным охлаждением. Я не пробывал.
              • 0
                Multi-GPU, если мы говорим о серверах — позволяет сэкономить место.
      • 0
        Чтобы Астер не нарушал лицензию, нужно купить столько лицензий Windows, на сколько рабочих мест вы комп распараллелили.
        • +1
          Не правда! я звонил в Майкрософт совсем недавно как раз за этим вопросом. Долго разговаривали, вкратце ответ таков: 1 лицензия Windows = 1 физический компьютер. и НИКАК иначе. совсем вообще. Так что если Астер где-то пишет что можно «докупить лиценизии» — наживете себе проблем, если решили сэкономить в офисе.
          Однако, если очень хочется официально иметь на одной тачке несколько «виртуальных» компов, Майкрософт предлагает свой собственный (унылый и дорогой) продукт (не терминалка, что-то попроще). Именно поэтому и не запомнил его названия.
          • 0
            А как же тогда на один сервер vmware/KVM/XEN народ ставит те же windows-7? И тонкими клиентами раздает. Тоже нарушение?
          • 0
            Насколько я слышал, проверяющие имеют инструкцию, считать лицензии по количеству мониторов/рабочих мест. Т.е. их не парит, сколько у вас системников. Кроме того, те пункты лицензии, которые противоречат законодательству РФ можно игнорировать.

            Раньше в суде была разобрана ситуация, когда один пользователь запустил музыку в своей учётке, а другой, войдя после него, используя смену пользователя без выхода, запустил другую программу. Таким образом, согласно лицензии, было засчитано нарушение* использования, что и было продемонстрировано в суде. После этого лицензию изменили.
            * Нарушение в данном случае из-за того, что два пользователя одновременно использовали одну копию виндовс.
          • 0
            А говорить они могут то, что вам выгодно, зачем им говорить что-то иначе? Только разобравшись в лицензии и соответствии её пунктов нашему законодательству можно выяснить истину. Но вы звоните, потому что это легче и они дают ответ, который им выгоднее.
            И пример выше от stas630 тоже в тему.
      • +1
        Да нет, проблем купить вторую лицензию нет, просто в заголовке написано «бесплатно», а когда я разбирался с лицензионным соглашенияе винды, то вычитал, что даже две инсталляции одной и той винды на одном и том же компе в разных папках или на разных разделах, к примеру — уже нарушение лицензии.
        Да и я лучше жену пожалею, чем деньги на лицензию винды, плюс всё ещё иногда требуется кое-какой софт, который есть только под винду, или маковская версия которого работает глючно, а стоит больше, чем лицензия того же софта под винду + стоимость самой винды :)
    • 0
      Тут идея в том, что вы можете создать несколько виртуалок. Может быть вам ДОС, или FreeBSD ближе или вы адепт МакОС, а сосед ваш может оставаться любителем Гейца.
  • 0
    От себя замечу, что windows и без virtio показывает нормальную производительность системы. Для обычных смертых точно хватит, а проблем снизится в разы. VNC можно заменить на spice.
    От себя скажу, что написанно все как то сумбурно и по сути все это виртуализация. Интересно просто почитать про multiseat :)
    • +1
      В системнике две видеокарты. Три USB контроллера. Пропрасывай вторую видеокарту и USB-root во вторую виртуалку. Ставь это все в автозагрузку. При включении компа будет у Вас как раз два рабочих места. Можно пробрасывать отдельные устройства, а не Корневой USB. Но тогда проблема будет для пользователя подключить свой любимый Айфон. Если все выходят из виртуалок, завершают работу, то ком отключается.
      Без virtio производительность хуже. Проперьте на тестах. Да spice даже лучше, но vnc все знают ;-)
  • 0
    А может кто объяснить, как одна физическая видеокарта пробрасывается на две виртуалки? Я как-то думал это невозможно :/
    • 0
      А нет, все в порядке — две видеокарты просто. Блин. Ну ладно, значит ничего не изменилось.
    • 0
      тут стоит как раз две карты. Автор умолчал об этом, но!
      Вообще то есть технология которая позволяет делить карту. Это активно используется в microsoft VDI.
  • НЛО прилетело и опубликовало эту надпись здесь
    • +2
      Почему?
      У вас гентуфобия?)))
      • НЛО прилетело и опубликовало эту надпись здесь
        • 0
          Попробуйте Calculate. Установка проще и быстрее, а если переключить профиль на не бинарный отличий от Gentoo будет немного.
          Хотя как уже выше сказал автор разницы все равно нет — дело личных предпочтений.
    • 0
      Ставте ваш любимы дистрибутив. Установка gentoo не так страшна, как видно из этой статьи. Если нужно, то можно все записать в скрипт. К примеру, в продакшене gentoo у меня массово не стоит (использую debian), так как муторно было продумывать систему обновления (хотя можно сделать). Просто для тестов, анализа, эксперементов gentoo — превосходная система, позволяющая быстро откатится или наооборот накатить требуемое ПО, не таща за собой кучу ненужных зависимостей определенных чьим-то разумом ;-))))
      • 0
        А ext2 зачем? Вроде ext4 давно стабильная, как и XFS, JFS, reiser3, даже btrfs вроде стабилизировалась.
        • 0
          А зачем журнал на бутовом разделе или tmp? На всех остальных ext4
  • +2
    В данной статье рассматривается идея и практическое руководство по создания многопользовательской рабочей станции (multiseat) с использованием виртуализации KVM, с возможностью удаленного управления через libvirt. С помощью этого руководства возможно создать два и более рабочих мест как в офисе, так и дома, которым может потребоваться возможность полного использования графической подсистемы компьютера. Причем можно на одном системном блоке реализовать одновременно работу различных операционных систем Windows, Linux, Mac OS X, остальное по вкусу.


    Прямое введение читателя в заблуждение. Звучит так, будто что-то сильно поменялось в технологическом мире, и можно одну видеокарту делить на несколько виртуалок, причем средствами KVM. Ведь под видеоподсистемой «домашнего или офисного компьютера» автоматически подразумевается 1 физическая видеокарта — причем в случае офиса это встроенное в проц видеоядро, а под словами «бесплатное решение» в заголовке подразумевается, что не придется дозакупать в офисную машину по видяхе на виртуалку.

    Автор, почему бы прямо не уточнить этот момент?
    • 0
      Да две видео карты нужны, если два рабочих места. Бесплатно — на софте деньги тратить не нужно. Я имел ввиду бесплатное софновое решение. Карты за штукарь можно купить. Вполне доступно. Софт обычно дороже стоит. А что вы внутри гостей поставите — ваша фантазия.
  • 0
    Напоминает старое стихотворение о жадине, который хотел из одной овечьей шкуры сшить семь шапок, и сшил, но таких размеров, что каждая едва налезала на палец.

    Физические ограничения «узких мест» ИМХО никакой виртуализацией не обойти, разве что за счёт ювелирной работы с железом (незадокументированые команды и пр.).

    Впрочем, я рад буду ошибиться.
  • 0
    В презентации RedHat за 2013-ый год озвучивается цифра в 12% (то есть 88% производительности конфигурации работающей без виртуализации). Для кого-то с ростом производительности процессоров и удешевления SSD может быть приемлимой жертвой ;-)
  • 0
    Во многих биосах есть еще отдельная включалка IOMMU, без включения которой vfio-проброс устройств работать не будет.

    А по поводу «настоящего» мультисита, в котором одну видеокарту можно использовать для двух мест — это тоже возможно.
    Есть старый патч от airlied , для ядра и libdrm, для карточек radeon, суть которого в том что в /dev/dri создаются отдельные render-устройства. Которые, благодаря пропатченному libdrm, можно использовать для запуска 2-х копий X-сервера на одной видеокарточке. Патч очень древний и там многое захардкожено, но при желании его можно доработать.
    Получалось запускать до 8 рабочих мест в рамках одного системного блока (3 дискретных видеокарты + встроенное видео).
  • 0
    Интересно в технологическом плане. Скажите, а сколько у Вас занял весь процесс от начала и до возможности наблюдать счастливых юзеров?
  • 0
    Добавлю некоторые моменты в копилку:
    — при изменениях/созданиях виртуалок можно и без рестарта демона libvirtd обойтись:
    # если нужно (мягко) выключить:
      virsh shutdown wks1
    # если нужно (жестко) выключить:
      virsh destroy wks1
    # обновить vm из xml
    virsh define /etc/libvirt/qemu/wks1.xml
    # старт vm 
    virsh start wks1
    

    — если хост десктопный, для почти всех дистрибутивов есть неплохой менаджер виртуалок «virt-manager», который управляет libvirt и даже позволяет изменять некоторые параметры на лету;
    Соответстующий xml файл в "/etc/libvirt/qemu" тоже меняется, также как и при вызове например «virsh define /home/wks1.xml», файл wks1.xml в /etc/libvirt/qemu перепишется сверху.

    — если кто-то будет пробовать на виндовом госте virt-овый balloon-драйвер (что-бы делить свободную память, т.к. windows как известно путем «зануления» забирает ее всю и без драйвера уже не отдаст хосту), готовтесь к проблемам: у меня на debian (и убунте) и у друзей на других дистрибутивах балон надувался (его размер можно было даже на лету из хоста virsh-ем или virt-manager-ом изменять), но вместо того чтобы брать свободную память из него, лобо виндовс уходил в глубокий своп, либо программа завершалась (нет памяти). Хотя, по слухам более менее сносно работало на fedore. В общем для себя понял чтобы гонять N kvm-виртуалок с windows c M памяти нужно N*M физической памяти, благо это сейчас не проблема.

    — другие паравиртуальные virtio драйвера (iso из fedora) работали отлично.
    • 0
      если кто-то будет пробовать на виндовом госте virt-овый balloon-драйвер

      Если мои данные не устарели, то оно всё равно не работает одновременно с пробросом PCI устройств.
  • 0
    Спасибо за интересную статью.
    Может быть вам пригодится.
    На многоядерных системах можно ускорить сборку пакетов в Gentoo.
    В make.conf помимо параметра для make MAKEOPTS="-j" есть опция которая позволяет собирать и устанавливать одновременно несколько пакетов если они не зависят друг от друга.
    EMERGE_DEFAULT_OPTS="--jobs=3"
    Соответствует 3 пакетам. Следует учесть что MAKEOPTS="-j" действует для каждого из 3х собираемый пакетов.
    Так же не стоит забывать что ОЗУ не бесконечная…
  • +1
    >> Проверяем, что в BIOS VT-d включён
    По-моему вы забыли указать весьма важное требование к системе. Насколько мне известно, далеко не везде есть VT-d.
  • +1
    Статью, к сожалению редактировали. И тут было написано поболее (обзор софта запрещен правилами). Короче VT-d должен быть. НА сегодняшний момент платы с VT-d по цене не отличаются от таких же без. Я лично тестил на Asrock, Asus, MSI на Z77 и Z87. Больше всего понравилась Asrock (это не реклама, я ничего с этого не имею). Что самое забавное: в спеке на z87 и z77 отсутствует поддержка VT-d, но у этих производителей VT-d есть! Так же в оригинальной статье была информация, что если организовывать проброс через pci-stub, то почему-то такая конфигурация приводила иногда к полному зависанию всей системы, когда нужно было перегрузить виртуалку. Еще были какие-то странные лаги с вводом-вывода на одной из виртуалок… pci-stub работал у нас с 2012 года, но когда появилась возможность сделать через VFIO — появилась статья, так как сейчас проблем никаких нет.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.