00-tech-book
.pdfПосле того как мы зададим все эти опции начнется стандартный процесс
инсталляции. Чтобы выйти из интерфейса виртуальной машины нажмите Ctrl+] (наберите “xm console linuxbox4” чтобы вернуться).
Работа с виртуальными машинами
Конфигурационный файл нашей виртуальной машины находится в /etc/xen/ linuxbox4
Другие конфигурационные файлы
#/etc/sysconfig/xend*
#/etc/xen*
Чтобы ВМ автоматически загружалась при перезагрузке сервера делаем так:
# ln -s /etc/xen/linuxbox4 /etc/xen/auto/
Для обслуживания виртуальных машин есть целый список подкоманд в программе xm. В свою очередь команда работает с сервисом xend, который все время должен быть запушен.
xm list – вывести список виртуальных машин |
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
# xm list |
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|||||
Name |
ID Mem(MiB) VCPUs State |
Time(s) |
||||||||||
|
|
|
|
|
|
|
|
|
||||
Domain-0 |
0 |
493 |
1 r----- |
254.2 |
||||||||
|
|
|
|
|
|
|
|
|||||
linuxbox4 |
3 |
255 |
1 -b---- |
95.0 |
|
Name – это административный домен, сама хост-система. Остальные домены – это гостевые системы;
ID – ID домена в котором находится ВМ;
Mem(MiB) – объем памяти этой ВМ;
VCPUs – сколько процессоров используется;
State – статус ВМ, ниже перечислены возможные статусы; r – running, ВМ запущена;
b – blocked, обычное состояние когда ВМ ожидает ввода/вывода, это нормальное состояние ВМ;
p – paused, режим паузы, режим наступает при команде xm pause; s – shutdown, в процессе выключения или перезагрузки;
c – crashed, произошла какая-то серьезная ошибка;
d – dying, в процессе завершения своей работы, но пока не достигший состояния shutdown или crashed;
Time(s) – как долго запущена ВМ.
Модуль 6. Виртуализация. Xen. |
|
61 |
|
|
|
|
|
#xm console linuxbox4 - подключиться к linuxbox4 (выйти можно с помощью Ctrl+])
#xm create linuxbox4 – включить linuxbox4
# xm shutdown <имя ВМ> - выключить виртуальную машину
#xm destroy <имя ВМ> - немедленно выключить ВМ, как будто отключили питание
#xm uptime – выводит uptime
#xm help - подсказка
Производительность виртуальных машин
Посмотреть производительность можно командой ниже
# xentop
Резюме
Мы разобрали работу Xen и научились создавать и запускать виртуальные машины.
Домашнее задание
Разверните несколько виртуальных машин и поработайте с ними, воспользуйтесь средствами администрирования xen.
62 |
|
Модуль 6. Виртуализация. Xen. |
|
|
|
Subversion
Subversion — это бесплатная система управления версиями с открытым исходнымкодом.Subversionпозволяетуправлятьфайламиикаталогами,атак же сделанными в них изменениями во времени. Это позволяет восстановить более ранние версии данных, даёт возможность изучить историю всех изменений. Благодаря этому многие считают систему управления версиями своего рода «машиной времени».
-Управление версиями в Subversion, Бен Коллинз-Сассман, Брайан У. Фитцпатрик, К. Майкл Пилато, Copyright © 2002, 2003, 2004, 2005, 2006, 2007
Архитектура Subversion
Модуль 7. Subversion. |
|
63 |
|
|
|
Протоколы работы с SVN
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
file:/// |
|
|
|
|
|
|
прямой доступ к хранилищу (на локальном диске); |
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
http:// |
доступ через протокол WebDAV (если Subversion-сервер |
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
работает через Apache); |
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
https:// |
|
|
https://то же, что и http://, но с SSL-шифрованием; |
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
svn:// |
|
|
доступ через собственный протокол к серверу svnserve; |
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||
svn+ssh:// |
|
|||||||||||||||||
|
|
|
|
то же, что и svn://, но через SSH-соединение. |
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Способы хранения данных
Berkley DB – старый способ хранения данных репозитория, сейчас уже не используется
FSFS – хранение данных в специальных файлах, сейчас активно
используется
Компоненты Subversion
svn – Клиент с интерфейсом командной строки
svnversion – Программа, показывающая состояние (в пределах ревизий существующих элементов) рабочей копии
svnlook – Инструмент прямого управления хранилищем Subversion.
svnadmin – Инструмент для создания, настройки или восстановления хранилища Subversion.
svndumpfilter – Программа для фильтрации дамповых потоков хранилища Subversion.
mod_dav_svn – Подключаемый модуль для HTTP-сервера Apache, использующийся для предоставления сетевого доступа к вашему хранилищу.
svnserve – Собственный отдельный сервер, запускаемый как процессдемон и доступный посредством SSH; еще один способ для предоставления сетевого доступа к хранилищу
svnsync – Программа для последовательного зеркалирования одного хранилища в другое через сеть
Все программы расположены в /usr/bin/ кроме mod_dav_svn который поставляется с Apache.
Проблема одновременной работы с файлами
Всем системам контроля версий приходится ее решать. Как обеспечить
64 |
|
Модуль 7. Subversion. |
|
|
|
одновременную работу с файлом нескольким пользователям, чтобы при записи его в репозиторий изменения каждого из них были учтены ? Ведь изменения сделанные каждым из пользователей могут перекрывать изменения других людей.
Для решения этой проблемы есть две рабочих схемы.
Блокирование -> Изменение -> Разблокирование
Пользовательберетнужныйфайлизрепозиторияиставитнанегоблокировку пока с ним работает. Никто не сможет внести в него изменения пока тот, кто его заблокировал не заблокирует. Пока файл заблокирован у остальных будет только доступ только на чтение. Этот способ может применяться при работе с графическим контентом или звуковыми файлами, ведь они являются бинарными. А в свою очередь Subversion может анализировать только текстовые файлы.
У этого способа есть свои минусы. Пользователь может просто забыть разблокировать файл или может возникнуть неоправданная пошаговость, ведь не всегда вносимые изменения могут пересекаться между собой.
Копирование -> Изменение -> Слияние
Пользователь извлекает нужные ему данные из репозитория, тем самым создавая рабочую копию. Рабочая копия – это локальное отражение данных из репозитория. Далее он вносит необходимые изменения в файлы и закачивает их обратно в репозиторий (операция commit). В случае если с момента создания его рабочей копий кто-то еще внес изменения
врепозиторий ему будет предложено обновить рабочую копию, внести в нее поправки учтя работу других пользователей и только потом положить
врепозиторий. Ответственность за успешное разрешение конфликтов в файлах лежит на пользователе.
Модуль 7. Subversion. |
|
65 |
|
|
|
Рабочий цикл
Обновление рабочей копии svn update
Внесение изменений svn add
svn delete svn copy svn move
Анализ изменений svn status
svn diff svn revert
Слияние изменений, выполненных другими, с вашей рабочей копией svn update
svn resolved
Фиксация изменений svn commit
Установка
# yum -y install subversion
Все, мы получили инструмент для создания репозиториев и работы с ними.
Работаем с репозиторием
Для удобства работы я настроил работу по ключам у себя на машине, чтобы не приходилось вводить пароль каждый раз когда его спросят.
#ssh-keygen -t rsa
#ssh-copy-id -i ~/.ssh/id_rsa.pub root@localhost Создаем каталог где будут хранится репозитории
#mkdir /svn
Создаем репозиторий
#svnadmin create /svn/myrepo Информация по репозиторию
#svn info file:///svn/myrepo/
66 |
|
Модуль 7. Subversion. |
|
|
|
Path: myrepo
URL: file:///svn/myrepo
Repository Root: file:///svn/myrepo
Repository UUID: 0328446d-48a7-4758-9808-7aeb55de1aea
Revision: 0
Node Kind: directory
Last Changed Rev: 0
Last Changed Date: 2009-03-07 22:52:55 +0300 (Sat, 07 Mar 2009)
Репозиторий пустой о чем говорит“Revision: 0”. С каждым новым измением в репозитории номер ревизии будет увеличиваться на единицу.
В каталоге docs я подготовил несколько файлов которые положат начало новому репозиторию
# svn import docs file:///svn/myrepo/ -m «start the dance» Adding docs/file1
Adding docs/file2
Adding docs/file3
Committed revision 1.
Посмотрим изменилась ли ревизия.
#svn info file:///svn/myrepo Path: myrepo
URL: file:///svn/myrepo
Repository Root: file:///svn/myrepo
Repository UUID: 0328446d-48a7-4758-9808-7aeb55de1aea Revision: 1
Node Kind: directory
Last Changed Author: root Last Changed Rev: 1
Last Changed Date: 2009-03-08 16:20:00 +0300 (Sun, 08 Mar 2009) Посмотрим содержимое репозитория
#svn list file:///svn/myrepo/
file1
file2
file3
Модуль 7. Subversion. |
|
67 |
|
|
|
У нас получился репозиторий с тремя файлами. Теперь мы создадим рабочую копию этого репозитория и поработаем с ней.
#svn co file:///svn/myrepo/ A myrepo/file1
A myrepo/file2 A myrepo/file3
Checked out revision 1.
#cd myrepo
#echo «new line» >> file1
#svn commit -m «file1 has been modified» Sending file1
Transmitting file data .
Committed revision 2.
Примерно так проходят будни SVN-пользователя.
Пока мы работали с репозиторием локально, нам было достаточно использовать способ доступа как file:///
При удаленной работе рекомендуется использовать протоколы https если доступ к репозиторию осуществляется через Apache, или через svn+ssh, когда достаточно shell-пользователя в удаленной системе. Оба способа осуществляют шифрование передаваемых данных. Доступ через Apache применяетсякогданеобходимообеспечитьдоступкрепозиториюудаленных разработчиков. Они не будут иметь доступ ко всей системе а только к SVNрепозиторию. В этом варианте используется механизм аутентификации пользователей Apache и файл паролей создаваемый с помощью htpasswd. Использование системных пользователей оправданно когда на сервере нужно получать доступ не только к SVN-репозиторию.
Получение копии репозитория с удаленного сервера где у вас есть аккаунт
Убедитесь, что пользователь включен в нужную группу для доступа к репозиториям.
$ svn co svn+ssh://mybestuser@linuxbox/svn/myrepo
The authenticity of host 'linuxbox (192.168.146.132)' can't be established. RSA key fingerprint is 18:db:9d:74:3e:f3:7a:f2:1f:e7:e5:36:33:c8:6d:2e.
Are you sure you want to continue connecting (yes/no)? yes
68 |
|
Модуль 7. Subversion. |
|
|
|
Warning: Permanently added 'linuxbox,192.168.146.132' (RSA) to the list of known hosts.
mybestuser@linuxbox's password:
mybestuser@linuxbox's password:
Amyrepo/file1
Amyrepo/file2
Amyrepo/file3 Checked out revision 2.
Ограничение доступа
Subversion обладает возможностью регулировать доступ в репозиторий.
У нас уже есть репозиторий /svn/myrepo и сейчас мы разберемся с правами доступа к нему.
Вся настройка производится в /svn/myrepo/conf/svnserve.conf, То есть <путь к репозитарию>/conf/svnserve.conf
[general]
anon-access = none
#auth-access = write
#password-db = passwd
authz-db = authz
realm = Bunch_Of_My_Repos
anon-access = none – запрещаем анонимный доступ в репозиторий
auth-access = write – аутентифицированные пользователи могут читать и редактировать данные в репозитории, я закомментировал это условие так как планирую указать КАКИЕ аутентифицированные пользователи чего получат.
#password-db = passwd – файл аккаунтов для репозитория. Файл содержащий строки вида “пользователь = пароль” открытым текстом и используемый в работе службы svnserve. Передаваемая информация не шифруется. Этот способ устарел и я не рекомендую его использовать. Чтобы вы примерно понимали что это за файл я вам приведу пример:
# cat /svn/myrepo/conf/passwd
[users]
harry = harryssecret
sally = sallyssecret
Модуль 7. Subversion. |
|
69 |
|
|
|
В файле svnserve.conf раскоментируем строку password-db = passwd, в файл authz добавим запись для пользователя harry если общая политика ему не подходит.
Запустим службу svnserve
#svnserve -d
#svn list svn://harry@linuxbox/svn/myrepo
Authentication realm: <svn://linuxbox:3690> Bunch_Of_My_Repos
Password for 'root':
Authentication realm: <svn://linuxbox:3690> Bunch_Of_My_Repos
Username: harry
Password for 'harry':
file1
file2
file3
secret/
authz-db = authz – здесь указываем название файла в котором будут описаны права доступа. В нашем случае файл называется authz
realm = MyRepo – реалм в котором находится репозиторий, это что-то типа домена
В том же каталоге где и svnserve.conf (<путь к репозиторию>/conf/) создаем файл authz и вносим в него конфигурацию
[groups]
agents = james, piter
[/]
* = r
[/secret] @agents = rw
* = [/secret/public]
* = rw
Файл описывающий права доступа умеет работать с группами. В группе мы перечисляем пользователей а далее, в путях в которых нужно что-то ограничить мы просто ссылаемся на группу через @ в результате не нужно перечислять всех пользователей вручную.
r – это право на чтение
w- право на запись
70 |
|
Модуль 7. Subversion. |
|
|
|