Установка и настройка kvm на ubuntu server

Настройка сетевой карты

Иногда возникают ситуации, когда необходимо настроить или изменить настройки сетевой карты. Сразу отмечу, что настраивать сетевую карту можно только на реальном железе. На виртуальном, скорее всего, ни одна из предложенных дальше команд не приведет к какому-нибудь результату. У виртуальных сетевых адаптеров просто нет настроек. Для начала посмотрим, какие сетевые карты есть на сервере:

В моем случае это единственная сетевая карта фирмы Qualcomm. Теперь установим утилиту ethtool для настройки сетевой карты:

Посмотрим информацию о сетевой карте:

Указана текущая скорость, на которой работает карточка. Ее можно сменить в случае необходимости:

Этой командой можно изменить скорость сетевой карточки до 100Mb/s в случае, если там стояла другая скорость. Смотрим, что получилось:

Показал просто для примера, вряд ли кому-то понадобится уменьшать скорость. Чаще нужно выполнить обратное преобразование. У меня была ситуация, когда сетевая карта упорно не хотела работать на скорость 1Gb, хотя поддерживала такую работу, и свитч был гигабитный. Долго бился и пробовал различные утилиты для изменения скорости. Оказалось, что патч корд был 4-х жильный из комплекта какого-то роутера

Им воспользовались для подключения и даже не обратили внимание на то, что он не поддерживает работу по гигабиту

У утилиты ethtool много параметров, с помощью которых можно настроить сетевую карту. Пример этих параметров можно посмотреть на сайте redhat.

Этап 2: Установка KVM

Установите KVM и соответствующие пользовательские утилиты с помощью apt-get:

$ sudo apt-get install qemu-kvm libvirt-bin

Во время инсталляции будет создана группа libvirtd, и ваш userID будет автоматически добавлен в группу. Это позволит вам управлять виртуальными машинами от имени обычного пользователя. Вы можете проверить это с помощью команды id, которая выводит ваш group ID.

$ id your-userID

Если по каким-либо причинам в списке вашего groupID нет libvirtd, вы можете вручную добавить себя в эту группу.

$ sudo adduser  libvirt

Перезагрузите обновленную информацию о группе, как показано ниже. Когда появится запрос, введите свой пользовательский пароль.

$ exec su -l $USER

Теперь вы можете запускать virsh как обычный пользователь. В качестве теста попробуйте приведенную ниже команду, которая выведет список доступных виртуальных машин. Если вы не получите сообщение об ошибке прав доступа, значит все в порядке.

$ virsh --connect qemu:///system list
Id    Name                           State
----------------------------------------------------

Установка KVM в Ubuntu 20.04

Теперь собственно переходим к установке KVM виртуализации в Ubuntu 20.04. Что бы установить KVM и необходимые для работы пакеты, выполним команду:

Давайте немного поясню, что это за пакеты которые мы устанавливаем:

  • qemu-kvm – программное обеспечение, для гипервизора KVM.
  • libvirt-daemon-system – файлы конфигурации для демона libvirt.
  • libvirt-clients – программное обеспечение позволяющее управлять виртуализацией.
  • bridge-utils – Инструменты командной строки для настройки Ethernet мостов.
  • virtinst – Инструменты командной строки для создания виртуальных машин.
  • virt-manager – графический интерфейс для управления виртуальными машинами через libvirt.

После установки давайте проверим, запустился ли демон libvirt, обычно он автоматически запускается, но, не лишним будет проверить. Для проверки выполним команду:

Как видим, он запустился, об этом нам говорит вывод “active”. Для работы с виртуальными машинами необходимо добавить своего пользователя в группы “libvirt” и “kvm”. Для этого выполним следующие команды:

Какой диск выбрать в kvm — lvm, raw (img) или qcow2

В kvm есть несколько типов дисков, которые вы можете использовать в своей работе. Они имеют принципиальные отличия как по своей работе, так и по способам бэкапа. Выбирать тот или иной тип нужно в зависимости от ваших задач. Рассмотрим эти типы подробнее.

LVM. Тут все понятно. Использование lvm томов в виде дисков виртуальных машин. Такой диск будет блочным устройством и должен работать быстрее всех остальных типов, так как нет лишней прослойки в виде файловой системы.

Плюсы:

  • Снэпшоты средствами самого lvm, с них легко снять бэкап без остановки виртуальной машины.
  • Максимальное быстродействие.
  • Легко изменить размер диска.

Минусы:

  • Более сложное управление по сравнению с дисками в виде отдельных файлов.
  • Менее гибкое управление пространством диска. Если весь диск разбить на lvm разделы для виртуалок, то места на нем не останется, даже если вируталки будут пустые.
  • Более сложный перенос на другой сервер.

RAW. Это обычный формат сырых данных. Среди дисков в виде файлов это будет самый простой и быстрый вариант. Все данные пишутся как есть без дополнительных обработок и служебной информации. Формат является универсальным для большинства популярных гипервизоров.

Плюсы:

  • Максимальная простота и производительность среди образов в виде файла.
  • Универсальный формат с поддержкой в большинстве гипервизоров.
  • Легкость переноса виртуальной машины на другой сервер. Достаточно просто скопировать файл.

Минусы:

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

QCOW2. Родной формат для гипервизора QEMU. Расшифровывается как QEMU Copy-on-write. Этот формат позволяет создавать динамические диски для виртуальных машин, а так же поддерживает снепшоты. Теоретически, скорость работы должна хоть и не сильно, но уступать RAW. Как обстоит дело на практике, я не знаю, не замерял и подробно эту информацию не проверял.

Плюсы:

  • Поддержка снепшотов и динамических дисков. Как следствие — более удобное управление дисковым пространством.
  • Легкость переноса виртуальной машины на другой сервер. Достаточно просто скопировать файл.

Минусы:

Более низкая производительность, по сравнению с другими типами образов.

У каждого типа есть свои преимущества и недостатки. Lvm проще всего бэкапить, но им сложнее всего управлять. Для того, кто хорошо знаком с lvm это не проблема, если сталкиваешься первый раз, то возникает много вопросов. У raw нет снепшотов, лично для меня это большой минус, я этот формат вообще не рассматриваю. Если нет максимальной нагрузки на дисковую подсистему, то QCOW2 мне кажется наиболее приемлемым вариантом. Собственно, ниже и пойдет рассказ, как совместить удобство управления QCOW2 и простоту бэкапов и снэпшотов lvm. Я покажу, как сделать живой бэкап виртуальной машины kvm в формате qcow2 без остановки виртуальной машины.

Подготовка

Чтобы иметь возможность запускать гостевые системы с более чем 2 ГБ ОЗУ и размещать как 32-битные, так и 64-битные гостевые системы KVM, у вас должна быть 64-битная хост-система.

Прежде чем продолжить установку, убедитесь, что ваш хост-компьютер Ubuntu поддерживает виртуализацию KVM. В системе должен быть либо процессор Intel с VT-x (vmx), либо процессор AMD с поддержкой технологии AMD-V (svm).

Введите следующую команду чтобы узнать, поддерживает ли ваш процессор аппаратную виртуализацию:

Если ваш ЦП поддерживает аппаратную виртуализацию, команда выведет число больше нуля, то есть количество ядер ЦП. В противном случае, если результат равен это означает, что ЦП не поддерживает аппаратную виртуализацию.

На некоторых машинах производители могут отключить расширения виртуальной технологии в BIOS.

Чтобы проверить, включен ли VT в BIOS, используйте инструмент , который входит в пакет . Выполните следующие команды от имени пользователя root или пользователя с правами sudo, чтобы установить пакет:

После этого проверьте, может ли ваша система запускать виртуальные машины KVM с аппаратным ускорением:

Если возможность виртуализации процессора не отключена в BIOS, команда выведет:

В противном случае команда напечатает сообщение об ошибке и, возможно, короткое сообщение о том, как включить расширение. Процесс включения технологии AMD-V или VT зависит от вашей материнской платы и типа процессора. Обратитесь к документации материнской платы за информацией о настройке BIOS вашей системы.

Управление виртуальной машиной с помощью virsh

Ниже список наиболее часто употребляемых команд virsh.
Для создания нового гостевого домена и запуска виртуальной машины:

$ virsh --connect qemu:///system create alice.xml

Для остановки виртуальной машины и уничтожения гостевого домена:

$ virsh --connect qemu:///system destroy alice

Для выключения виртуальной машины (без уничтожения домена):

$ virsh --connect qemu:///system shutdown alice

Для приостановки виртуальной машины:

$ virsh --connect qemu:///system suspend alice

Для возобновления работы виртуальной машины:

$ virsh --connect qemu:///system resume alice

Для автозапуска виртуальной машины после загрузки хоста:

$ virsh --connect qemu:///system autostart alice

Для получения информации о домене виртуальной машины:

$ virsh --connect qemu:///system dominfo alice

Вы можете также управлять виртуальными машинами из сессии virsh. Для создания новой сессии virsh и входа в нее, просто введите:

$ virsh --connect qemu:///system

В командной строке вы можете использовать любые команды virsh.

Сетевые настройки на сервере Debian

Вопрос настройки сети я уже кратко поднимал в теме начальной настройки Debian. Я рекомендую с ней ознакомиться и выполнить некоторые подготовительные действия, чтобы было удобнее работать далее. Сейчас мы подробно разберем все наиболее значимые нюансы сетевых настроек, которые могут пригодиться в повседневной работе.

Первоначальная настройка сети начинается во время установки сервера. Если у вас есть сетевой интерфейс и dhcp сервер в сети, то сеть сконфигурируется автоматически на основе полученных настроек и будет готова к работе. В последствии вы можете выполнить настройку сети в Debian через консоль с помощью программ ip или ifconfig. Наиболее популярным и современным средством на текущий момент является ip, поэтому в дальнейшем рассмотрим вопрос конфигурации сетевых интерфейсов с ее помощью. Про ifconfig тоже не забудем. Рассмотрим ее позже отдельно.

Отдельно стоит такой инструмент управления сетевыми подключениями как Network manager. Он используется в сочетании с графическими оболочками, которых на сервере обычно нет, поэтому вопрос его настройки я не буду рассматривать. Мне просто не на чем это делать, да и не вижу смысла.

Есть 2 различные возможности изменить сеть в Debian:

  1. Настройка сети из консоли с помощью указанных ранее консольных программ.
  2. С помощью редактирования конфигурационного файла сетевых интерфейсов /etc/network/interfaces.

Мы рассмотрим оба этих варианта. Вводная теоретическая часть окончена, приступаем к практике.

Virtualisation management software

In order to facilitate the management of VMs and provide a graphical user interface various types of management software are available for KVM. In the following section, we briefly present the most popular ones.

Virtual Machine Manager

Virtual Machine Manager is a desktop user interface for managing KVM VMs. It presents a summary view of running guest instances, their live performance and resource utilisation statistics. Virtual Machine Manager comes with wizards that enable the creation of new VMs and the configuration of their resource allocation and virtual hardware.

Multipass

Multipass is the recommended method to create Ubuntu VMs on workstations. It is designed for developers who want to quickly set up a fresh Ubuntu environment with just a single command. Multipass installs on Linux, Windows and macOS, and supports leading hypervisors, including KVM.

OpenStack

OpenStack is the most popular open source cloud computing platform that enables the management of distributed compute, network and storage resources in the data centre. It wraps around the KVM hypervisor providing virtualisation capabilities and enables fully automated provisioning of VMs through a self-service portal.

Source: https://docs.openstack.org/openstackdocstheme/latest/demo/dashboard_demo.html

Установка по сети (netinstall)

С сетевой установкой Debian есть определенная путаница. Как я уже ранее говорил, название iso образа netinst.iso вводит в заблуждение. На самом деле, с этого образа можно установить минимальную систему даже без наличия локальной сети. Но в то же время, при наличии интернета можно загрузить любой дополнительный пакет.

Настоящее руководство по netinstall представляет из себя совсем другую процедуру. Подробно она описана в официальном мануале — Подготовка файлов для загрузки по TFTP. Смысл сетевой установки в том, что вы со своего компьютера, на который хотите установить систему Debian, подключаетесь по технологии PXE к TFTP серверу и с него начинаете загружать установочные файлы.

При такой процедуре, вам для установки системы на компьютер не нужно ничего, кроме локальной сети и настроенного tftp сервера. Кроме этого, сетевая карта компьютера должна поддерживать технологию PXE. Такой вариант сетевой установки дебиан будет удобен, если вам необходимо развернуть систему на большое количество машин.

Мне приходилось настраивать TFTP сервер для отдачи файлов при загрузке по PXE. Изначально кажется, что все это слишком сложно, но на самом деле ничего сложного нет. Я без особых проблем смог настроить бездисковые станции для запуска linux системы. Но это отдельная история, выходящая за рамки данной инструкции.

Установка панель Cockpit и KVM

После того как убедились в поддержке виртуализации, переходим к установки панели Cockpit и пакета cockpit-machines, который отвечает за возможность создания виртуальных машин с поддержкой KVM. Для установки панели Cockpit и пакета cockpit-machines вводим команду:

Когда установка панели Cockpit завершится, не лишним будет запустить панель Cockpit, а так же добавить в автозапуск при старте вашей системы, ну и конечно проверить состояния Cockpit. Это можно сделать выполнив следующие команды:

В итоге вы должны увидеть статус работоспособности, он должен быть активным и подсвечиваться зеленым:

Для того что бы попасть в веб интерфейс, вводим ваш IP адрес в строке браузера, а затем порт “9090”. В моем же случае IP адрес “192.168.88.241”, у вас же он будет другим:

192.168.88.241:9090

Теперь осталось лишь ввести логин и пароль, по умолчанию используется логин и пароль вашего пользователя, так же возможно войти и из под root. После входа, первым делом давайте русифицируем панель Cockpit, для этого нажимаем на кнопку с именем вашего пользователя и в выпадающем окне выбираем пункт “Display Language”. Затем в выпадающем списке выбираем язык интерфейса панели Cockpit, я же оставлю Английский:

Теперь необходимо проверить, настроен ли хост на запуск гипервизора libvirt, для этого в веб интерфейсе переходим к пункту “Terminal” и вводим команду:

После того как убедились что все работает правильно, необходимо включить демон libvirtd, добавить его в автозапуск и проверить статус, для этого выполняем следующую последовательность команд:

Работа с файлом hosts

В папке /etc любого linux дистрибутива, в том числе debian есть файл hosts. Разберемся немного что это за файл и для чего он нужен. По-умолчанию он выглядит следующим образом:

Представим, что у нас в локальной сети есть некий сервер с именем server  и ip 192.168.1.50 Мы хотим к нему обращаться по имени. Тогда добавляем запись в файл hosts:

Теперь мы можем обращаться к серверу просто по имени server.

Сервер будет в первую очередь смотреть информацию в файле hosts, только потом в dns сервере. Например, если вы добавите в файл строку:

То обращаясь к адресу ya.ru будете попадать на локалхост:

Этот функционал может быть полезен для публикации в локальной сети каких-то внутренних сервисов, к которым доступ будет только из вашей сети. Вам нет необходимости использовать dns сервер, с файлом hosts настройка делается гораздо быстрее.

Так же правка файла hosts актуальна, если вы используете локальную копию сервиса webpagetest для тестирования скорости работы сайта на разных хостингах. Вы просто меняете ip адреса для домена и делаете тесты. Так можно наглядно и однозначно сравнивать быстродействие разных хостингов. Подробно об этом можно почитать в статье — ускорение сайта и аудит.

KVM hypervisor benefits

The main benefit of the KVM hypervisor is its native availability on Linux. Since KVM is part of Linux, it installs natively, enabling straightforward user experience and smooth integration. But KVM brings more benefits compared to other virtualisation technologies. Those include:

  • Performance – One of the main drawbacks of traditional virtualisation technologies is performance degradation compared to physical machines. Since KVM is the type-1 hypervisor, it outperforms all type-2 hypervisors, ensuring near-metal performance. With KVM hypervisor VMs boot fast and achieve desired performance results.
  • Scalability – As a Linux kernel module, the KVM hypervisor automatically scales to respond to heavy loads once the number of VMs increases. The KVM hypervisor also enables clustering for thousands of nodes, laying the foundations for cloud infrastructure implementation.
  • Security – Since KVM is part of the Linux kernel source code, it benefits from the world’s biggest open source community collaboration, rigorous development and testing process as well as continuous security patching.
  • Maturity – KVM was first created in 2006 and has continued to be actively developed since then. It is a 15-year old project, presenting a high level of maturity. More than 1,000 developers around the world have contributed to KVM code.
  • Cost-efficiency – Last but not least, the cost is a driving factor for many organisations. Since KVM is open source and available as a Linux kernel module, it comes at zero cost out of the box. Businesses can optionally subscribe to various commercial programmes, such as UA-I (Ubuntu Advantage for Infrastructure) to receive enterprise support for their KVM-based virtualisation or cloud infrastructure.

Version-specific Notes

8.10 (Intrepid) Notes

  • Two meta packages have been added: ubuntu-virt-server and ubuntu-virt-mgmt. Ubuntu-virt-server installs the packages needed to setup a base virtulization host (kvm, libvirt-bin and openssh-server) and ubuntu-virt-mgmt installs what you need to administer it from a management station (virt-manager, python-vm-builder and virt-viewer).

  • ubuntu-vm-builder has been replaced by python-vm-builder (tutorial).

Note: libdevmapper does not load its module when it is installed (bug 277648) , so you will either need to do a

 $ sudo modprobe dm-loop 

or reboot your system before being able to use it.

11.10 (Oneric) Notes

Switching to the server kernel might be helpful if there are start problems with virtual machines (i.e. Windows XP freezes approximately once every 5 starts )

KVM Home | Installation | Networking | Create Guests | Managing | Guest Console Access | Directly | FAQ

Создание виртуальной машины

Базовая настройка закончена — можно опробовать наш гипервизор в деле. 

В правой верхней части панели управления кликаем по Создать VM:

В открывшемся окне снизу сразу ставим галочку Расширенный:

Задаем имя виртуальной машине и ставим галочку Запуск при загрузке (если хотим, чтобы виртуалка запускалась автоматически с сервером PVE):

* в данном примере мы задали имя FS. При желании, также можно изменить VM ID, но он проставляется автоматически и имеет правильное значение.

Выбираем загруженный нами ISO-образ, с которого будем ставить операционную систему, задаем тип гостевой операционной системы и ее версию:

* в данном примере мы будем устанавливать Linux Ubuntu. Среди списка операционных систем также доступны Microsoft Windows, Solaris и Other.

На вкладке Система можно оставить все значения по умолчанию:

* в некоторых случаях, необходимо выбрать другую видеокарту (при установке систем с GUI), а также особый вариант БИОС.

Задаем размер жесткого диска:

* 16 Гб для Ubuntu достаточно, однако, для наших задач расчет должен быть индивидуальным для каждой создаваемой виртуальной машины.

Мы можем задать количество процессоров и ядер:

* в данном примере мы создаем виртуалку с 2 процессорами, каждый из который с 2 ядрами, итого, 4. Для ненагруженных систем можно оставить значение по умолчанию.

Выделяем память:

* наша Ubuntu будет работать с 2 Гб оперативной памяти.

Выбираем созданный нами бридж — либо для получения прямого адреса из сети, либо для NAT:

* в данном примере, мы указали vmbr0 для подключения к сети напрямую.

Ставим галочку, чтобы виртуальная машина сразу запустилась после создания:

… и нажимаем Готово. Ждем окончания процесса и переходим к консоли:

Мы должны увидеть загрузку с ISO-образа.

Between VM host, guests and the world

In order to let communications between host, guests and outside world, you may set up a bridge and as described at .

For example, you may modify network configuration file /etc/network/interfaces for setup ethernet interface eth0 to a bridge interface br0 similar as below. After the configuration, you can set using Bridge Interface br0 as the network connection in VM guests configuration.

auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
        address 192.168.1.2
        netmask 255.255.255.0
        network 192.168.1.0
        broadcast 192.168.1.255
        gateway 192.168.1.1
        bridge_ports eth0
        bridge_stp off
        bridge_fd 0
        bridge_maxwait 0
        dns-nameservers 8.8.8.8

Managing VMs from the command-line

You can then use the virsh(1) command to start and stop virtual machines. VMs can be generated using virtinst. For more details see the libvirt page. Virtual machines can also be controlled using the kvm command in a similar fashion to QEMU. Below are some frequently used commands:

Start a configured VM guest «VMGUEST»:

# virsh start VMGUEST

Notify the VM guest «VMGUEST» to graceful shutdown:

# virsh shutdown VMGUEST

Force the VM guest «VMGUEST» to shutdown in case it is hanged, i.e. graceful shutdown not work:

# virsh destroy VMGUEST

Managing VM guests with a GUI

On the other hand, if you want to use a graphical UI to manage the VMs, you can use the Virtual Machine Manager virt-manager.

Automatic guest management on host shutdown/startup

Guest behavior on host shutdown/startup is configured in /etc/default/libvirt-guests.

This file specifies whether guests should be shutdown or suspended, if they should be restarted on host startup, etc.

First parameter defines where to find running guests. For instance:

# URIs to check for running guests
# example: URIS='default xen:/// vbox+tcp://host/system lxc:///'
URIS=qemu:///system

Создание виртуальных машин

Теперь, когда KVM установлен на вашем рабочем столе Ubuntu, давайте создадим первую виртуальную машину. Это можно сделать либо из командной строки, либо с помощью приложения .

Загрузите ISO-образ операционной системы, которую вы хотите установить, и выполните следующие действия, чтобы создать свою виртуальную машину:

  1. В строке поиска Действия введите «Диспетчер виртуальных машин» и щелкните значок, чтобы запустить приложение.

  2. После запуска приложения в верхнем меню нажмите «Файл» -> «Новая виртуальная машина»:

  3. Появится новое окно. Выберите «Локальный установочный носитель» и нажмите кнопку «Вперед».

  4. Укажите путь к вашему ISO-образу и нажмите кнопку «Вперед».

  5. На следующем экране выберите параметры памяти и ЦП виртуальной машины. Щелкните «Вперед».

  6. Затем выберите «Создать образ диска для виртуальной машины» и выберите размер дискового пространства виртуальной машины. Щелкните «Вперед».

  7. Введите имя вашей виртуальной машины и нажмите «Готово».

  8. Виртуальная машина загрузится, и откроется новое окно:

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

Заключение

Изначально планировал написать небольшую заметку на тему использования Veeam для бэкапа сервера. Но в процессе получилось разобрать еще и перенос сервера с одного гипервизора на другой. Еще раз повторюсь, кому показалось это слишком сложным. Если вы будете бэкапить и восстанавливать сервер в рамках одного и того же гипервизора, то описанных выше проблем у вас не будет. Все пройдет гладко.

При переносе с железа на виртуальную машину или наоборот, тоже скорее всего возникнут какие-нибудь проблемы. Не существует софта или готового решения, которое бы позволило все это выполнить в автоматическом режиме.  С проблемами загрузки придется разбираться по ходу дела. Но две основные проблемы я разобрал:

  1. Неподходящие версии ядер. После переноса нужно будет переустановить или обновить ядро.
  2. Разные имена дисков или меток разделов. Нужно будет их привести в соответствие с новым железом.

Это наиболее популярные проблемы. С другими мне не приходилось сталкиваться. Хотя не сказать, что мне часто приходилось переносить сервера, но некоторый опыт есть. Думаю, эта статья будем многим полезна, так как подобный перенос не очень раскрыт в статьях в интернете. По крайней мере мне не попадались хорошие гайды на эту тему. Разбираюсь обычно сам с помощью гугления по англоязычному сегменту.

Онлайн курс «SRE практики и инструменты»

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «SRE практики и инструменты» в OTUS. Курс не для новичков, для поступления нужны базовые знания по сетям и Linux. Обучение длится 3 месяц, после чего успешные выпускники курса смогут пройти собеседования у партнеров.

На курсе вы узнаете как:

  • Внедрить SRE практики в своей организации
  • Управлять надежностью, доступностью и эффективностью сервисов
  • Управлять изменениями
  • Осуществлять мониторинг
  • Реагировать на инциденты и производительность
  • Работать со следующим технологическим стеком: Linux, AWS, GCP, Kubernetes, Ansible, Terraform, Prometheus, Go, Python.

Проверьте себя на вступительном тесте и смотрите подробнее программу по .

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Мой редактор ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: