Архив автора: admin

как сделать клумбы для сада из шин

Как сделать клумбы для сада из шин

Клумбы для сада из шин — один из самых простых, удобных и оригинальных способов декора сада. Мастер-класс по украшательству дачного участка, коттеджа или же сада подскажет вам, как это сделать наилучшим образом.

 клумбы для сада из шин

клумбы для сада из шин

Читать

Как напечатать UTF-8 текст из bat-файла?

Это просто! Надо всего лишь прочитать 100-500 мануалов по командной строке Windows и провести 200 экспериментов по написанию bat-скриптов)

Если серъёзно, то вывести файл с текстом в формате UTF-8 можно следующим образом

@echo off
set file=YourFileName
cmd /u /c chcp 65001 | echo my super text1 > "%file%"
cmd /u /c chcp 65001 | echo my super text2 >> "%file%"
cmd /u /c chcp 65001 | echo my super text3 >> "%file%"
...

Кавычки в записи «%file%» нужны по той причине, что имя файла может содержать пробелы. Читать

Как установить текущую дерикторию для Cygwin?

Любители работать в консоли, подобной консоли линукса, могут установить себе Cygwin, юникс подобную среду, где будут доступны стандартные консольные программы из линукса.

Ставится Cygwin довольно просто. В процессе установки в одном из режимов можно выставить флажки напротив программных пакетов, которые вы хотите установить. Я выбрал себе пакеты nano, git и что-то ещё.

После инсталляции на рабочем столе появляется ярлычок Cygwin для запуска среды.

Читать

светильник Любви своими руками

Светильник Любви своими руками

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

светильник Любви своими руками

светильник Любви своими руками

Читать

libvirt & Co. Облако "на коленке". Часть 2 — Сети

Компоненты

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

bridges — сетевые мосты — программные аналоги свичей, позволяют соединить вместе несколько сетевых интерфейсов и передавать между ними пакеты, как если бы они были включены в один свич. Бриджи управляются с помощью команды brctl:

Без подсветки синтаксиса

$ brctl  show  # напечатать все бриджи с подключенными интерфейсами
bridge name bridge id STP enabled interfaces
virbr0 8000.000000000000 yes

# brctl add - добавить бридж
# brctl addif - включить eth в бридж
# brctl delif - отключить интерфейс
# brctl delbr - удалить бридж

$ brctl  show  # напечатать все бриджи с подключенными интерфейсами
bridge name bridge id STP enabled interfaces
virbr0 8000.000000000000 yes

# brctl add - добавить бридж
# brctl addif - включить eth в бридж
# brctl delif - отключить интерфейс
# brctl delbr - удалить бридж

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

tun (tap) — виртуальные сетевые интерфейсы. В отличии от аппаратных привязаны к определенному процессу пользовательского режима, а не к сетевой карте. Родительский процесс может писать/читать данные из виртуального интерфейса имитируя работу сети. В остальном они не отличаются от обычных интерфейсов. С помощью tun/tap работают многие VNP программы, например openvpn, которая создает tun/tap, вычитывает из него данные, шифрует и переправляет по обычной сети на другой компьютер, где второй процесс openvpn принимает данные, расшифровывает и записывает в свой tun/tap, имитируя прямое сетевое соединение между удаленными компьютерами. Как и 95% всех сетевых возможностей linux tun/tap можно управлять с помошью утилиты ip. Пример использования tun из python можно найти тут kharkovpromenade. Tun используются для создания сетевых интерфейсов виртуальынх машин.

iptables — система управления сетевым трафиком в linux. Обеспечивает фильтрация и модификацию трафика, управление сетевыми соединениями, etc. Возможности iptables чрезвычайно обширные и описывать даже примерно я их не буду, приведу только команды, позволяющие увидеть все правила на компьютере:

Без подсветки синтаксиса

# iptables -t nat -S
# iptables -t filter -S
# iptables -t raw -S
# iptables -t mangle -S

# iptables -t nat -S
# iptables -t filter -S
# iptables -t raw -S
# iptables -t mangle -S

Все правила легко читаются даже без знания iptables.

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

Без подсветки синтаксиса

# virsh n
et-list
Name State Autostart
-----------------------------------------
default active yes

# virsh net-list
Name State Autostart
-----------------------------------------
default active yes

Описание этой сети можно получить с помощью следующих команд:

Без подсветки синтаксиса

# virsh net-info default

Name default
UUID c598e36f-31fd-672e-09e3-2cbe061cd606
Active: yes
Persistent: yes
Autostart: yes
Bridge: virbr0

# virsh net-dumpxml default

# virsh net-info default

Name default
UUID c598e36f-31fd-672e-09e3-2cbe061cd606
Active: yes
Persistent: yes
Autostart: yes
Bridge: virbr0

# virsh net-dumpxml default

Без подсветки синтаксиса


default
c598e36f-31fd-672e-09e3-2cbe061cd606
mode='nat'/>
name='virbr0' stp='on' delay='0' />
address='192.168.122.1' netmask='255.255.255.0'>

start='192.168.122.40' end='192.168.122.254' />




default
c598e36f-31fd-672e-09e3-2cbe061cd606







Тот же самый результат можно получить и из python:

Без подсветки синтаксиса

import libvirt
from xml.etree.ElementTree import fromstring

conn = libvirt.open("qemu:///system")
net = conn.networkLookupByName('default')
xml = fromstring(net.XMLDesc(0))
print "default net addr =", xml.find('ip').attrib['address']
print "default net mask =", xml.find('ip').attrib['netmask']
print "default net bridge =", xml.find('bridge').attrib['name']

import libvirt
from xml.etree.ElementTree import fromstring

conn = libvirt.open("qemu:///system")
net = conn.networkLookupByName('default')
xml = fromstring(net.XMLDesc(0))
print "default net addr =", xml.find('ip').attrib['address']
print "default net mask =", xml.find('ip').attrib['netmask']
print "default net bridge =", xml.find('bridge').attrib['name 9;]

Еще один важный компонент сети — dnsmasq:

Без подсветки синтаксиса

$ ps aux | grep dnsmasq | grep -v grep
nobody 4503 0.0 0.0 25836 976 ? S 02:08 0:00
dnsmasq --strict-order --bind-interfaces
--pid-file=/var/run/libvirt/network/default.pid
--conf-file= --except-interface lo
--listen-address 192.168.122.1
--dhcp-range 192.168.122.40,192.168.122.254
--dhcp-leasefile=/var/lib/libvirt/dnsmasq/default.leases
--dhcp-lease-max=215 --dhcp-no-override

$ ps aux | grep dnsmasq | grep -v grep
nobody 4503 0.0 0.0 25836 976 ? S 02:08 0:00
dnsmasq --strict-order --bind-interfaces
--pid-file=/var/run/libvirt/network/default.pid
--conf-file= --except-interface lo
--listen-address 192.168.122.1
--dhcp-range 192.168.122.40,192.168.122.254
--dhcp-leasefile=/var/lib/libvirt/dnsmasq/default.leases
--dhcp-lease-max=215 --dhcp-no-override

Конфигурационные файлы сетей хранятся в /var/lib/libvirt/network:

Без подсветки синтаксиса

$ ls -l /var/lib/libvirt/network/
total 4
-rw-r--r-- 1 root root 543 2011-12-24 02:08 default.xml

$ ls -l /var/lib/libvirt/network/
total 4
-rw-r--r-- 1 root root 543 2011-12-24 02:08 default.xml

Итак — что получилось в итоге. Вот эта строка конфигурационного файла:

Без подсветки синтаксиса

 type="network">
network="default" />
mode="nat" />
dev="vnet7" />
address="{mac}" />






Подключила eth0 нашей виртуальной машины к бриджу virbr0 сети default. Эта сеть имеет маску 192.168.122.0/24, подключена через NAT к внешнему миру и обслуживается dhcp сервером. Причем сам virbr0 имеет ip 192.168.122.1 и служит гейтом для этой сети. Адреса из диапазона 192.168.122.2-192.168.122.40 я ранее зарезервировал для ручного распределения, отредактировав и перезапустив сеть.

Теперь вернемся к начальному вопросу — как программно узнать ip адрес, выданный нашей виртуалке? Есть три основных способа:

  • Если с виртуальной машиной уже был обмен данными, то можно посмотреть в кеше маршрутизации 'ip route show cache | grep virbr0' или в кеше аппаратных адресов — 'arp -na'. Способ наименее надежный, так как если обмена не было кеши будут пустые.
  • Достать информацию из базы dhcp сервера — leases. Для dnsmasq это по умолчанию файл /var/lib/libvirt/dnsmasq/default.leases:

Без подсветки синтаксиса

$ cat /var/lib/libvirt/dnsmasq/default.leases
1324718340 00:44:01:61:78:01 192.168.122.99 * *

$ cat /var/lib/libvirt/dnsmasq/default.leases
1324718340 00:44:01:61:78:01 192.168.122.99 * *

В при