Не смотря на разнообразие средств защиты, с каждым годом количество взломов все возрастает. После того, как был выявлен факт компрометации системы, можно, конечно, сразу отформатировать диски и восстановить ее с нуля, но где гарантия, что атака не повторится, а в бэкапе нет закладок? Чтобы в последствии избежать проблем, следует досконально выяснить, что и как произошло. Forensic инструменты помогут нам в этом.

Первые шаги

Самой распространенной ошибкой при обнаружении взлома является немедленное удаление всех (в том числе скомпрометированных) данных и восстановление работоспособности при помощи резервных копий. Сначала необходимо собрать наиболее полную информацию об инциденте. Кроме системных журналов, в поиске проблемы очень помогают системы аудита (auditd, SNARE), контроля целостности файлов (tripwire, AIDE, Afick), IPS, вроде Snort, и пакеты, захваченные tcpdump. С помощью этих средств можно узнать, когда и где происходило нужное событие, как все произошло, на какие файлы воздействовали и т.п. Следующий шаг — осторожно извлекаем подозрительную информацию и анализируем. Исследователя интересуют файлы, к которым мог иметь доступ взломщик, процессы и сетевые соединения. Непосредственно файлы могут быть доступны и в оффлайн режиме (например, загружаемся с Live диска и проводим исследование), а информацию о процессах и сети можно получить только на живой системе.
Стандартные инструментальные средства, полагающиеся на API или системные команды, не подходят для подобного рода исследований, поскольку они могут быть запросто обмануты руткитом. Специальные решения позволяют увидеть и восстановить удаленные или спрятанные файлы, исследовать процессы и состояние ОЗУ. В настоящее время разработано множество средств для анализа остаточных данных (Forensic Analysis), конкретный выбор в первую очередь зависит от используемой ОС и личных предпочтений. Удобно применять готовые дистрибутивы на базе *nix, авторы которых предлагают полный набор специфических утилит «из коробки» и специальные режимы загрузки ОС, обеспечивающие неприкосновенность файлов и минимизацию влияния на имеющиеся носители (блокируется работа с блочными устройствами, отключается создание раздела подкачки, автоопределение LVM, RAID, проверяются контрольные суммы для файлов на загрузочном CD).

Анализируем файловую систему

Для поиска спрятанных данных на харде наиболее популярны утилита foremost (foremost.sourceforge.net) и комплект The Sleuth Kit (TSK, sleuthkit.org/sleuthkit). Последний состоит из 27 утилит и позволяет анализировать диски напрямую или через снимки. Поддерживает все популярные файловые системы: NTFS, FAT, UFS1/2, EXT2/3/4, HFS, ISO 9660 и YAFFS2. Большим плюсом TSK является наличие интерфейса Autopsy, позволяющего производить все операции в удобной среде. Стоит отметить, этот комплект интегрирован в некоторые другие forensic инструменты — Scripts4CF (scripts4cf.sf.net), Allin1 (netmon.ch/allin1.html), revealertoolkit (code.google.com/p/revealertoolkit), SFDUMPER (sfdumper.sf.net).
Утилит много, но запутаться в их назначении сложно. Чтобы легче было ориентироваться, первая буква в названии указывает, на каком уровне они работают:

  • f — работа с файловой системой
  • blk — фактическое содержание блоков, кластеров, фрагментов
  • i — inode
  • mm — media management
  • h — более удобный уровень взаимодействия с файлами, чем при использовании метаданных
  • j — журнал

В спецдистрибутивах все они уже рассортированы по разделам меню, поэтому найти их легко.
Снять образ файловой системы можно при помощи утилиты dd, которая входит в стандартную поставку всех *nix. Но лучше использовать специализированные утилиты. Например, патченую версию dd — dc3dd (dc3dd.sf.net), умеющую вычислять на лету хэш-функции, соединять выходные файлы, проверять файлы, зачищать место и многое другое.

$ dc3dd progress=on if=/dev/sda of=fs.img

Теперь данные никуда не денутся, и их можно исследовать. Утилита mmls позволяет вывести таблицу разделов и найти неиспользованные сектора, которые не показывает `fdisk -l`. Они могут появляться как в следствие атак, так и в случае ошибок работы программ разметки диска.

$ mmls -t dos fs.img

Утилита mmls позволяет вывести таблицу разделов и найти неиспользованные сектора
Смотрим статистику по образу и файловым системам, занятым и свободным блокам:

$ img_stat fs.img
$ fsstat fs.img

Смотрим статистику по образу и файловым системам
Теперь попробуем найти потерянные или спрятанные файлы. Для этого воспользуемся утилитой ils (inode list), которая открывает названное устройство и перечисляет inode. По умолчанию ils выводит данные только удаленных/нераспределенных inode (параметр ‘-A’), параметр ‘-0′ позволит получить список inodes удаленных файлов, но которые открыты или выполняются.

$ ils fs.img

Теперь приступаем к исследованию. При помощи утилиты mactime нам нужно узнать, какие inode изменялись с определенного времени или в интересующем нас интервале. На вход необходимо подать файл, созданный при помощи `ils -m` или `fls -m`.

$ ils fs.img -m > macfile
$ mactime 2013-10-20 -b macfile

Для удобства просмотра и отбора можно использовать GUI к mactime (blog.devilzgsa.com/mactime-frontend-gui). Полученные данные потребуют дальнейшего анализа, но если в требуемый период изменен системный файл, то это должно вызвать как минимум подозрение. Его можно, например, сравнить с аналогичным «чистым» файлом, взятым с другого компьютера.

Спасаем файлы

На данный момент обладаем информацией о подозрительных inodes. Используя icat, можем скопировать файл по номеру inode.

$ icat -i raw -rf ext3 fs.img 100 > delete_file

Теперь при помощи команды `file delete_file` узнаем, что это за файл. При удачном стечении обстоятельств, восстановленный таким образом бинарник без проблем выполняется. Натравив grep, можем попробовать найти нужные ключевые слова (вроде password, login). Кстати, команда `img_cat fs.img` позволяет вывести контент всего диска или определенной части (оставив метаданные), преобразовав его из raw, правда, искать в этой куче очень тяжело.
Написав небольшой скрипт, можно попытаться восстановить все удаленные файлы.

ils fs.img | awk -F '|' '($2=="f") {print $1}' | while read i; do icat -r fs.img $i > ./deleted/$i; done

Итак, мы нашли и спасли несколько удаленных файлов, чтобы получить больше информации, используем istat.

$ istat fs.img 100

Теперь мы знаем данные о размере файла, владельце, режимах, времени доступа и, главное, номера дисковых блоков, куда записан файл.
Состояние конкретного блока на диске получаем при помощи blstat:

$ blstat -f ext3 fs.img 1000
Fragment: 1000
Allocated (Meta)
Group: 0

Теперь при помощи blkcat мы можем прочитать, что записано в этом блоке или секторе. Поддерживается несколько форматов вывода: raw, текст ASCII (-а), hexdump (-h), выводить статистику (-s), просматривать файл подкачки (-f swap), HTML (-w) и другие.

$ blkcat -h fs.img 10200

Если известен номер блока и требуется найти номер inode, за которым данный блок «закреплен», используем ifind. Имя файла по известному inode определяется при помощи ffind.
Читаем блок на диске
Искать вручную каждый файл долго, здесь проще использовать утилиту fls, которая выведет имена файлов, в том числе удаленных. Она имеет множество полезных параметров. Так ‘-a’ выведет имена файлов, начинающиеся с точки, ‘-d’ и ‘-D’ — вывод только удаленных файлов и каталогов, ‘-l’ (long) — подробная информация, ‘-r’ — рекурсивный обход.

$ fls -rdl fs.img

Все удаленные файлы и каталоги помечаются знаком *. Первая буква показывает, что это за файл, т.е. r-egular, d-irectory, l-ink, s-ocket или не определен (?).
Возможности утилиты foremost в чем-то повторяют TSK, особенно она удобна в том случае, если действительно знаешь, что искать. Параметры работы настраиваются в /etc/foremost.conf, но после установки там можно пока ничего не трогать. Например, нам нужны все удаленные файлы в образе (параметр ‘-T’ позволяет автоматически создать выходной каталог):

$ foremost -Tt all -o ./output -i fs.img

В output найдем восстановленные файлы и отчет.

Анализируем данные

Анализ собранной информации целиком возлагается на плечи исследователя, и, чтобы найти в гигабайтах информации что-то полезное, необходим опыт и время. Здесь может помочь утилита hfind, сравнивающая хэш-функции файлов с базой библиотеки софта NSRL (National Software Reference Library, www.nsrl.nist.gov), в которой содержатся профили известного ПО.
Cкрипт sorter из состава TSK анализирует образ, запуская fls и icat, находит любые файлы, определяя их тип при помощи file, и сравнивает их с библиотекой NSRL, позволяя распознать потенциально опасные.

$ sorter -d output -f ext3 fs.img

Теперь в подкаталоге data появится несколько файлов с описаниями, количество которых зависит от найденных типов данных, и файл с отчетом sorter.sum. Дополнительный параметр ‘-s’ позволяет сохранить в указанный каталог фактическое содержимое файла.

Специальные дистрибутивы
Самой простой способ приступить к исследованию — воспользоваться одним из специализированных дистрибутивов, в которых собраны все необходимые утилиты. Выбор здесь очень большой: DEFT Linux (deftlinux.net), CAINE (Computer Aided INvestigative Environment, caine-live.net), SMART Linux (goo.gl/H3JCfD), Kali (ранее BackTrack, kali.org), SIFT (SANS Investigate Forensic Toolkit, computer-forensics.sans.org), (PLAC, Portable Linux Auditing CD, plac.sf.net), REMnux (zeltser.com/remnux) и базирующийся на FreeBSD Snarl (snarl.eecue.com). Каждый из них имеет свои особенности.
Например, REMnux, построенный на пакетной базе Ubuntu и обладающий интерфейсом Enlightenment, предназначен для изучения и обратного инжиниринга кода вредоносных программ. Он позволяет создать изолированное окружение, в котором можно эмулировать работу атакуемого сетевого сервиса и изучать поведение вредоносного ПО, например поведение вредоносных вставок на веб-сайтах, реализованных на JavaScript, Java или Flash. В комплекте полная подборка инструментов для анализа вредоносного ПО, утилит для проведения обратного инжиниринга кода, программ для изучения модифицированных злоумышленниками PDF и офисных документов, средств мониторинга активности в системе.
В Kali Linux собраны все необходимые инструменты для исследований

Kali Linux имеет специальный режим загрузки

Kali Linux имеет специальный режим загрузки

Собираем информацию о состоянии ОЗУ

Найти крошечный зловред на терабайтном харде это все равно, что иголку в стогу сена. Оперативная память компьютера на порядок меньше по объему, и ее анализ может значительно сократить время исследования. Например, некоторые типы вирусов живут только в ОЗУ, а тело на диске нередко шифруют, поэтому данные можно найти только на живой системе. В Linux стандартные утилиты ps, netstat и lsof позволяют собрать общую информацию о процессах и сетевых соединениях, но ее не всегда достаточно, поскольку зловред может скрывать от них свое присутствие.
Модуль ядра fmem (hysteria.sk/~niekt0/fmem/) создает псевдоустройство /dev/fmem, через которое можно получить доступ к содержимому ОЗУ. Кроме того, есть memfetch (lcamtuf.coredump.cx), memgrep (hick.org) и LiME (Linux Memory Extractor, code.google.com/p/lime-forensics), позволяющие легко сбросить дамп всех запущенных процессов.
В дистрибутивах вроде Kali предлагается фреймворк Volatility (volatilesystems.com/default/volatility), заменяющий, по сути, целый набор инструментов для исследования «артефактов» в ОЗУ. Volatility позволяет получить информацию о процессах, идентификаторах, переменных, открытых сокетах, библиотеках, состоянии памяти каждого процесса, таблицы системных вызовов, хэши LM/NTLM и многое другое.
Изначально Volatility работал только в Windows, но сегодня поддерживает и Linux. Захват производится через псевдоустройство /dev/pmem, которое создается путем активации модуля ядра pmem.ko. Хотя собрать модуль в современных дистрибутивах не всегда получается. Кроме того, сами разработчики в документации проекта рекомендуют для дампа использовать модуль LiME.
Каждая версия ОС Windows и ядра Linux по разному работает с памятью, поэтому для упрощения анализа в Volatility используются профили. Для Win XP-7 профили обычно идут в комплекте. Профиль для Linux состоит из System.map (соответствует текущему ядру) и отладочной информации modules.dwarf, извлекаемой при помощи dwarfdump. При самостоятельной сборке Volatility они создаются автоматически.
В Kali и других специальных дистрибутивах нужный пакет уже есть. В Ubuntu следует подключить репозитарий security, после чего установить python-volatility и volatility-extras. Все файлы обычно находятся в /usr/share/volatility, в том числе и сам скрипт vol.py (для удобства создается /usr/bin/vol, содержащий команду для запуска). Но профиль и модуль не собираются.

$ sudo apt-get install linux-headers-`uname -r`
$ cd volatility/tools/linux
$ make

Получаем файл module.dwarf. Создаем профиль.

$ sudo zip ../volatility/plugins/overlays/linux/Ubuntu1310.zip module.dwarf /boot/System.map

Чтобы проверить все доступные профили и модули, достаточно просмотреть вывод `vol —info` и `vol -?`.
Получаем информацию о дампе и смотрим список открытых сокетов, процессов, команд и параметров реестра Windows, найденных в ОЗУ виртуальной машины VMware:

$ vol imageinfo -f ./win.vmem
$ vol sockets -f ./win.vmem
$ vol psxview -f ./win.vmem
$ vol cmdscan -f ./win.vmem
$ vol hivelist -f ./win.vmem

Смотрим список доступных параметров и модулей Volatility

Альтернативы Volatility
К сожалению, Volatility будет работать только на x86 совместимых устройствах (Linux и Windows), на платформах, в которых отсутствует функция «page_is_ram» (например ARM Android), запуск приведет к ошибке. Для Android разработан специальный инструмент LiME (Linux Memory Extractor, code.google.com/p/lime-forensics), который может быть использован и для снятия дампа в Linux. В качестве альтернативы анализа содержимого подойдет скрипт Draugr (code.google.com/p/draugr), исследующий /dev/(k)mem и дамп ОЗУ на наличие совпадений с паттернами. Проект fmem предлагает и свою утилиту foriana (hysteria.sk/~niekt0/foriana), способную, используя логические связи, извлечь списки процессов и состояние ОЗУ.
Но наиболее популярная и известная альтернатива Volatility — Volatilitux (code.google.com/p/volatilitux), появившийся в те времена, когда Volatility работал только под Windows. Сам Volatilitux работает не только в Linux, но и Android (ARM), что позволяет использовать его для исследований на смартфонах и планшетах. По функциям он не достает до всех возможностей Volatility, поддерживает всего 5 параметров: filedmp (дамп открытого файла), filelist (вывод списка файлов, открытых процессом), memdmp (дамп памяти процесса), memmap (вывод карты памяти процесса) и pslist (список процессов). Хотя у Volatilitux есть свои особенности, которых не хватает Volatility. Это способность автоматически обнаруживать структуры ядра, без использования профилей. А в случае неудачи такого исследования создается файл, содержащий информацию о разметке памяти. Инструмент очень прост в использовании. Например, чтобы получить список процессов из дампа, вводим команду «volatilitux.py -f mem.dd pslist».

Заключение

Конечно, исследование скомпрометированной системы — дело очень кропотливое, требующее подготовки, времени и должного внимания, но при некотором везении можно найти источник проблем и даже самостоятельно создать сигнатуру для антивируса ClamAV или правило для IPS Snort.

Анонсирован октябрьский номер № 10 (143) журнала Системный Администратор за 2014 год со спецприложением «БИТ. Бизнес & Информационные технологии».
cover10(143)BIT_cover08(41)

В номере:

  • Используем AUFS для отката изменений. Автоматический возврат системы после перезагрузки
    Редко какая система не подвергается изменениям на протяжении жизни. Изменения могут быть полезными – установка обновлений, а могут иметь и негативный эффект – установка некорректно работающего ПО или удаление критически важных системных файлов. И вот их-то необходимо откатывать как можно быстрее.
  • Расширяемся, или Установка MS SCCM для филиалов
    Уходим от ручной наладки компьютеров в филиалах, предоставив управление конфигурациями Configuration Manager 2012 R2. В статье рассказано о СУБД MS SQL Server, планировании сайтов и их настройках, а также о необходимых требованиях, достоинствах и недостатках.
  • Восстановление Windows 7, 8, 8.1 до исходного состояния со своими настройками
    Иногда требуется периодически переустанавливать ОС на ноутбуке или компьютере, но вместе с дополнительным ПО этот процесс слишком долог. Предлагаем пример, не требующий дополнительных программ и лишних действий в будущем.
  • GlusterFS – новый класс хранилищ данных
    Рассмотрим архитектуру и особенности, варианты использования и примеры настройки
  • Почтовые клиенты для Android с поддержкой SSL-сертификатов
    Обзор двух почтовых клиентов для Android, полностью поддерживающих персональные SSL-сертификаты, способных подключаться к серверам со строгой защитой и читать зашифрованные и подписанные письма.
  • Мультипроцессорный Squid
    Одно из самых популярных решений для организации доступа в Интернет в настоящее время поддерживает базовую мультипроцессорность. Изучаем, как она настраивается и функционирует.
  • LiteManager PRO. Эффективное средство автоматизации образовательного процесса в компьютерных классах
    Новая версия программы удаленного администрирования LiteManager 4.6, с функцией демонстрации рабочего стола.
  • Строим облака вместе. На базе платформы VMware vCloud Automation Center
    Что такое облачные вычисления? Какие выгоды они несут? Рассмотрим класс систем – платформа по управлению облаком. Расскажем о том, как самому создать облако, используя инструменты компании VMware.
  • Настройка протоколирования CDR на сервере RADIUS и программа обработки CDR-записей
    В статье кратко рассмотрена настройка сервера FreeRADIUS и маршрутизатора Cisco 2811 для записи информации о телефонных звонках на сервер, а также программа обработки данных записей.
  • Они увольняются, а с «учетными записями» разбираться нам!
    Увольнение сотрудника для ИТ-службы – рутинная процедура, но регулярно что-нибудь важное забывается, оставляя брешь в системе безопасности.
  • Active Directory и безопасность. Часть 3. Методика защиты
    В предыдущих статьях этого цикла мы выяснили актуальность защиты учетных записей привилегированных пользователей в службе каталога. Давайте посмотрим, как это можно выполнить, какие средства предлагает нам операционная система для реализации данной задачи.
  • Отказоустойчивый антивирусный сервер
    Антивирусные серверы для повышения надежности могут быть объединены в кластер серверов. В результате администратор безопасности может управлять параметрами защиты станций сети с разных антивирусных серверов – вне зависимости от того, к какому серверу кластера подсоединены станции антивирусной сети.
  • Горизонтальное масштабирование. Проблемы и пути решения
    Рано или поздно популярный веб- или мобильный проект с серверной частью столкнется с проблемой производительности. Один из вариантов решения – это горизонтальное масштабирование базы данных. Рассказываем о подводных камнях и о возможных путях их обхода.
  • ASP NET MVC. Веб-приложения самостоятельного размещения
    Веб-сервер, не требующий инсталляции, управляемый из кода C# с возможностью размещения ранее созданных проектов веб-сервисов? Это легко!
  • Виртуальные машины в тестировании. На примере Alloy Navigator
    В статье приводится методика настройки виртуальных машин для их применения в тестировании разрабатываемых современных сложных программных приложений, таких как профессиональный инструмент для управления ИТ-структурой предприятий Alloy Navigator.
  • Вакансия: фронтенд-веб-разработчик
    Веб-сервисы становятся все популярнее, а их развитие не прекращается ни на день. А это значит, что необходимы фронтенд-разработчики, отвечающие за создание привлекательного и удобного веб-дизайна и интерфейса. Мы обратились к представителям компаний с вопросами, чтобы выяснить, с какими знаниями и навыками специалистов они хотят видеть на этой позиции.
  • Программист PHP: кто почем?
    Исследовательский центр портала Superjob.ru изучил предложения работодателей и ожидания претендентов на позицию «Программист PHP» в пяти крупных городах России: Москве, Санкт-Петербурге, Екатеринбурге, Краснодаре и Владивостоке.
  • Пакет программ XMD. Физические эксперименты за компьютером
    Продолжаем изучение свободного пакета программ молекулярной динамики XMD. С помощью XMD-программы можно проводить, например, динамические симуляции.
  • Головоломка «Отшельник». Реализации решения «выигрывающих стратегий»
    Существует определенный класс головоломок, который можно назвать «выигрывающие стратегии» – их суть состоит в нахождении выигрышной стратегии. Широко известна головоломка «Отшельник» или «English peg solitaire» с 32 колышками (фишками).
  • Функциональное программирование
    Различные интеллектуальные системы занимают все больше места в нашем окружении. При этом интеллект цифровых помощников становится все совершеннее и со временем только улучшается. В этом обзоре разберем, где можно научиться функциональному программированию, которое является основой моделирования искусственного интеллекта.
  • Несумрачный немецкий гений
    В следующем году компьютерный мир отметит 105-летие со дня рождения одного из тех, благодаря кому этот мир, собственно, и возник: немецкого инженера Конрада Цузе.
  • Архитектура распределенной системы управления на основе реконфигурируемой многоконвейерной вычислительной среды L-Net
    Одной из актуальных задач в области систем управления является разработка программного обеспечения для распределенных отказоустойчивых систем управления. Существующие в этой области на сегодняшний день решения являются проприетарными, как следствие, дорогостоящими и не всегда эффективными.
  • Электронный оракул
    В числе знаменитых первых ЭВМ есть UNIVAC I (сокращение от UNIVersal Automatic Computer), созданная тем же творческим дуэтом, что и ENIAC: Джоном Преспером Эккертом и Джоном Мокли. UNIVAC – это первый американский коммерческий компьютер.

cover09(142)
В номере:

  • Красть или не красть?
    В дискуссии о пиратском ПО как о российском феномене наши читатели и эксперты высказывают разные мнения, но равнодушных среди участников разговора нет. Приглашаем всех желающих продолжить обсуждение этой темы на страницах «Системного администратора».
  • Открытая платформа oVirt
    По функционалу и предназначению oVirt является аналогом VMware vSphere, предоставляя практически те же возможности, и уступая, пожалуй, лишь в некотором удобстве. В статье рассмотрена архитектура, выполнение установки и настройки, а также расказано об особенностях этой платформы виртуализации.
  • Мониторинг виртуальной инфраструктуры
    Чтобы не ломать голову при выборе программного продукта и не тратить время на тестирование, в статье сделан обзор средств мониторинга виртуальной среды VMware vSphere и MS Hyper-V. Рассмотрены ее основные настройки, понятия и требования, достоинства и недостатки.
  • Nagios – система комплексного мониторинга

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

  • Настройка современной системы хранения

    Ситуация, когда для хранения массива данных используется один файл-сервер с внутренними локальными жесткими дисками, понемногу уходит в прошлое. Современные системы используют сеть хранения данных — SAN, и от системных администраторов все чаще требуется умение самостоятельно настраивать подобное оборудование. В статье рассказывается о базовой настройке системы хранения на основе серверов IBM x3650M4 и дискового хранилища IBM DSC 3700

  • Веб-серфинг с доставкой из DMZ – повышаем безопасность LAN

    Информационная безопасность – это всегда компромисс между безопасностью и доступностью. В статье приводится опыт построения системы, которая позволила существенно увеличить безопасность интернет-серфинга, не сильно снижая его доступность.

  • Интеграция 1С:Предприятия и 1С-Битрикс

    Когда традиционный бизнес выходит в онлайн, возникает острая потребность в синхронизации данных на сайте и в учетной системе. В этом номере мы открываем цикл статей о том, как «подружить» сайт и 1С:Предприятие.

  • Все о печати из 1С

    В статье дан большой объем информации о подсистеме печати 1С. Ознакомившись только с материалами данной публикации, даже не обладая специальными знаниями 1С или внутреннего устройства операционной системы, можно решить до 90% всех проблем с печатью документов из вашей учетной системы.

  • ”Написание кода SQL должно приносить удовольствие, в этом и заключается главная функция 0xDBE”- считает гость номера, руководитель продуктового маркетинга в JetBrains Андрей Чепцов

    Известная питерская компания-разработчик ПО JetBrains недавно анонсировала свою новую и несколько необычную IDE для разработчиков и системных администраторов СУБД — 0xDBE. Публикуем интервью Андрея Чепцова, которое дает возможность узнать все подробности о 0xDBE из первых рук, и заодно понять особенности разработки ПО в этой компании.

  • Разработка мобильных приложений на платформе 1С:Предприятие 8.3

    Платформа «1С:Предприятие 8» на практике доказала свою готовность стать простым инструментом для разработки корпоративных приложений под мобильные платформы. Вовсе не обязательно тратить ресурсы на изучение нативных инструментов, если функционал приложения укладывается в возможности мобильной платформы, а в компании доминируют продукты фирмы «1С». Практические советы – в статье нашего автора.

  • Вакансия: разработчик UI

    Важное место в разработке программного обеспечения занимает создание User Interface (UI). Это специальность новая, таких специалистов практически нигде не готовят. Как же сориентироваться соискателю? Представители компаний рассказывают о требованиях и своих пожеланиях кандидатам на должность разработчика UI.

  • Тим Бернерс-Ли — один из основателей Интернета

    Его называют гением уже сейчас, при жизни, хотя Тим Бернерс-Ли не считает себя таковым. Он скромен и не любит повышенного внимания к своей особе. Однако окружающие всегда замечают его. «Во время феерического шоу на открытии последних летних Олимпийских игр в Лондоне одна из заготовленных организаторами «бомб» выглядела, на первый взгляд, демонстративно скромно. Внезапно прожекторы высветили одинокую фигуру немолодого уже мужчины, удобно расположившегося в кресле за «винтажным» компьютером NeXT – прямо на газоне стадиона. И когда диктор объявил, что зрителей приветствует «создатель Всемирной паутины» сэрТим Бернерс-Ли, возведенный в рыцарское звание в 2004 году, трибуны взорвались овацией»

Проект LiVES (LiVES is a Video Editing System, lives.sf.net) появился в то время когда с видеоредакторами в Linux было скажем так туго. Инициатором и бессменным руководителем является Габриель Финч (Gabriel Finch) занимающийся виедоартом. Отсюда и некоторая специфика LiVES недоступная в других решениях. Проект быстро собрал единомышленников, хотя версия под номером 1.0.0 появилась только в 2009 году и сразу получила признание пользователей и несколько наград.
И так используя LiVES можно обрабатывать видео в реальном времени: обрезать, смешивать на нескольких дрожках, изменять скорость воспроизведения/направление/размер, вращать, устанавливать частоту кадров, сохранять весь файл или его часть, перекодировать, использовать эффекты. В качестве источников используется локальный аудио/видеофайл, удаленный ресурс (включая импорт с Youtube) VCD/DVD диск, Fireware устройство, веб-камера или ТВ-тюнер. Возможно создание слайдшоу из набора изображений. За счет интеграции с mplayer/ffmpeg поддерживает более 50 форматов, включая анимированный GIF и PDF. Редактирование аудио доступно только в тех функциях которые необходимы для обработки видео — загрузка, ресеплинг, изменение скорости и т.п. Есть и своя специфика. Так LiVES может принимать видеопоток от другой копии программы, обрабатывать его и транслировать дальше (на выход или еще одной LiVES). Реализовано удаленное управление. Такая архитектура позволяет для обработки использовать можный сервер, а данные воспроизводить при помощи обычного ПК или планшета. Продукт уже избавился от детских болезней и работает стабильно, в случае сбоев проект легко восстанавливается и информация не теряется.
Интерфейс локализован (кроме нескольких пунктов меню) базируется на Gtk+. Управляется при помощи мышки и клавиатуры, функции виджея — с джостика или MIDI. Возможна автоматизация процессов при помощи скриптов. Для для создания эффектов, кодирования, декодирования и воспроизведения используются плагины (включая RFX и LADSPA ), предлагается API позволяющий легко расширить функционал. Плагины могут быть написаны на любом языке Perl, C, C++, Python и т.д.
При этом системные требования не велики. Программа работает не только в Linux, но и *BSD, openMosix, IRIX, Mac OS X и Solaris, поддерживает платформы x86, amd64, ppc и xbox/x86.

Установка

Учитывая что LiVES доступен в репозитариях большинства дистрибутивов Linux, установка проблем не вызывает. В Linux Mint/Ubuntu/Debian достаточно ввести apt-get install lives и можно приступать к работе. Но в официальном репозитарии находится стабильная, но не самая последняя версия. Чтобы получить все новые функции следует подключить репозиторий NoobsLab.

$ sudo add-apt-repository ppa:noobslab/apps
$ sudo aptitude update
$ sudo aptitude install lives

На самом деле будет установлен только минимальный набор зависимостей, утилит с которыми может работать LivES на порядок больше. Нужно быть готовым, что в последующем придется что-то доустанавливать. Я сразу же доустанавливаю другие кодировщики: ffmpeg, libdv-bin, mjpegtools, transcode и x264.
При первом запуске (если не обнаружен файл ~/.lives) активируется мастер позволяющий произвести основные установки. В начале предстоит указать рабочий каталог (должно быть достаточно места). Здесь очень важный момент, который нужно помнить при работе с LiVES — он не дружит с кириллическими каталогами. Если быть точнее то скорее не могут работать некоторые консольные утилиты на которых он опирается. Поэтому можно отрыть файл с рабочего стола (после локализации путь ~./Рабочий стол), но вот сохранить проект или перекодированный файл получается не всегда. В самом низу рабочего окна выводятся все оповещения. В случае каких-либо проблем всегда можно понять что случилось.
Затем анализируется наличие установленных в системе программ, если все найдено, можно переходить к следующему шагу. Иначе следует выйти и доустановить все необходимое. Выбираем используемый аудиосервер. По опыту лучше использовать предлагаемый по умолчанию PulseAudio. И переходим к выбору интерфейса. Здесь небольшое пояснение. Редактор поддерживает два режима интерфейса: Clip Edit (режим фрагментарного редактирования) и Multitrack (режим с несколькими дорожками). Первый проще, предлагается по умолчанию и используется виджеями позволяя подготавливать видео, воспроизводить клипы с разной скоростью, использовать эффекты, перекодировать клип или его часть. Второй — это собственно многодорожечный редактор. Для первого знакомства лучше использовать Clip Edit. Наличие двух режимов часто сбивает новичков, которые прочитав возможности LiVES и запустив программу ожидают увидеть редактор с несколькими треками, а получают не совсем то что хотели. Но режим интерфейса легко меняется в Startup Mode (Инструменты — Параметры — GUI) или если временно Правка — MultiTrack режим. При наличии нескольких мониторов их настройка производится в Инструменты — Параметры — GUI.
В поставке идет несколько скинов, при желании можно здесь же выбрать себе наиболее приятный. Вообще стоит сразу же пробежаться по установкам в Параметры это даст некоторое представление о возможностях программы.

Импортируем файлы

Интерфейс LiVES простой, но из-за наличия очень большого функций потребуется время чтобы освоиться. Видеоредактор не переборчив по поводу источников данных. Перейдя в меню Файлы мы найдем несколько пунктов. Выбираем Открыть Файл/директорию и указываем на файлы, если нужно выбрать сразу несколько используем клавишу Shift. Предосмотр помогает сориентироваться если их много. После обработки видео появится в окне программы. В один проект можно загрузить данные с разных источников. Отдельные пункты находящиеся в меню Файлы позволяют импортировать: часть файла (потребуется задать начало и количество фреймов), видео с внешних ресурсов (в т.ч. youtube, просто вводим адрес, после этого файл будет скачан и добавлен в проект), дисков и различных устройств. При этом Fireware обычно подхватывается «на лету», а ТВ-тюнер и веб-камеру следует вначале добавить выбрав одноименное меню, в появившемся окне следует уточнить устройство (по умолчанию /dev/video и задать дополнительные настройки). После этого можно управлять захватом при помощи появившейся панели.

export LANGUAGE = en_US
lives <video_file> <start_time> <frames> 
</frames></start_time></video_file>

Отдельно вынесено меню для захвата видео с экрана (Инструменты — Capture External Windows), выбираем его и указываем нужное окно. Для остановки записи используется клавиша q, после чего созданное видео будет подключено к проекту.
Импортированное изображение представлено как отдельный клип, его можно использовать в качество фона при воспроизведении музыки. Но эффективнее когда изображения меняют друг друга. Для этого следует создать из набора файлов клип. Выбираем Инструменты — Создать — Generate clip from image, в появившемся окне указываем каталог с файлами, размеры экрана, количество фреймов и частоту кадров. Результат можно сохранить в новый файл или скопировать в буфер обмена (зачем станет понятно ниже). Кстати если в процессе генерации файла остановить обработку, то уже созданный на этот момент файл будет все равно сохранен.
Остальные подпункты в Инструменты — Создать позволяют сгенерировать чистый или цветной кадр и заголовок. В последнем варианте потребуется ввести текст, выбрать шрифт и указать расположение на кадре.
В LiVES реализована возможность сохранения и восстановления отдельного клипа (Файл — Сохранить/Восстановить клип как *.lv1) или всего набора (Дополнительные — Экспортировать/Импортировать проект как *.lv2). После выбора нужного пункта потребуется лишь задать имя. Сами файлы с расширениями lv1 и lv2 по сути являются gzip архивами в которых упаковано видео и установки, это позволяет быстро перенести всю информацию в другую систему и сразу начать работать.

Работа с аудио

Если видеофайл содержит аудиодорожку она будет видна на шкале времени (моно, правый/левый канал). Если добавлять аудиофайл через меню Файлы, он будет подгружаться в окно как отдельный клип не содержащий видео. Такой вариант еще подходит если есть готовый аудиоряд и нужно при помощи LiVES добавить видео. А вот чтобы добавить к текущему видео аудиодорожку следует использовать пункты меню Аудио, позволяющие указать файл, записать аудио с CD или внешнего источника (например микрофона), удалить и экспортировать звук (все или выделенное). Использование пункта Загрузить новый звуковой фрагмент позволяет заменить звуковую дорожку, он же доступен в том случае если клип не содержит аудиоданных. В последующем аудиоданные в текущее виде подгружаются при помощи Добавить звук, отдельный пункт позволяет вставить в выделенный участок тишину. При добавлении стереофайла в моно запись он автоматически преобразуется в моно. При удалении аудио выделенного: (Удалить звук — Удалить выделенные звуковые данные) или участка до выделения (Trim/Pad Audio ) пустое место не образуется, аудио файл просто укорачивается подтягиваясь на пустое место. Используя пункт Fade In/Out можно усилить или ослабить уровень звука выделенного участка или определенной протяженности.

Виджей

В основном окне программы отображается два окна: слева показан первый кадр, справа последний. Смещение можно изменить, при помощи двух панелей ниже, просто нажимая кнопку «+» покадрово промотав до нужного момента. Или как вариант использовать ползунки чуть ниже, перемещая мышку по шкале времени в обе стороны также можно просматривать файл. Для удобства выделения следует также использовать пункты в Правка — Выделить, откуда например отмеченный участок легко инвертировать, выделить отдельный фрейм или заблокировать размер выделенного участка (т.е. выделили 20 кадров, затем этот размер можно применять к любой части видео).
После импорта можно проиграть файлы используя специальную панель расположенную справа, больше возможностей предоставляет меню Играть и горячие клавиши. Здесь в большинстве случаев особых пояснений не нужно, достаточно просто пройтись по пунктам и просмотреть как оно работает.
Если в проекте загружены видео и аудио разных размеров, то файл будет играть пока доступно видео. Но LiVES позволяет подогнать длительность воспроизведения видео под аудиотрек (Auto Loop Video to fit audio, клавиша L).
По умолчанию воспроизведение начинается во встроенном окне небольшого размера, нажав клавишу S или выбрав соотвествующий пункт в меню Играть можно просмотреть видео отдельном окне или на полном экране. Возможно воспроизведение по кругу: обычное (Loop Continuously) и вперед-назад (Ping Pong Loop). Качество настраивается в Инструменты — Параметры — Воспроизведение. Все добавленные клипы доступны в меню Фрагменты, чтобы перейти к следующуему достаточно просто дважды по нему щелкнуть. Также переключаться между файлами можно просто вращая колесико мышки, в окне будут прокручиваться первый и последний кадры или используя Ctrl+PageUp/PageDown. Для удобства клипы можно переименовать или удалить (клавиша С) если в нем нет потребности. В меню Информация находится несколько пунктов, выбор которых позволит узнать все доступные данные о клипе.
Как уже говорилось LiVES позволяет отправить поток другой копии. Это очень просто. В меню Дополнительно находится три нужных пункта. В настройках необходимо задать частоту, размеры кадра, цветовую модель, и также IP и порт удаленной системы. На другой стороне можно настроить прием потока с любого адреса или с определенного IP. Затем выбираем Open yuv4mpeg stream и получаем результат.
Все горячие клавиши можно просмотреть в пункте VJ — Show VJ keys.

Воспроизведение в LiVES с примененными эффектами

Воспроизведение в LiVES с примененными эффектами

Режим Clip Edit удобен для относительно простых операций с одним клипом. Некоторые из них доступны в меню Правка. Выделенный участок можно удалить (Ctrl+D), скопировать (Ctrl+C), вырезать (Ctrl+T) и вставить, в текущее или другое видео, сохранить как отдельный файл. В случае добавления к существующему видео вначале следует отметить участок или создать новый клип, а затем в окне появляющемся после выбора Вставить из буфера обмена (Ctrl+I) указать в каком месте (до или после) выделенного произвести вставку, со звуком или без. Еще один пункт позволяет объединять содержимое буфера обмена с выделенным, в этом случае необходимо будет указать параметры такого замещения (точка отсчета, что делать при несовпадении размера, переходы и т.д.). После такой операции в меню Правка — Выделить активируется пункт (Select Last Insertion/Merge) позволяющий одним щелчком выделить последнюю вставку.
Возможен вариант растягивания видео до времени звучания аудиофайла. Причем клип находящийся в буфере обмена также можно проиграть (Играть — Воспроизвести содержимое буфера обмена (С)), чтобы оценить что вырезана нужная часть. Учитывая, что выбирать видео можно до кадра, в Clip Edit мы можем легко создать простой клип из нескольких видеофрагментов, просто собирая их в кучу. Для аудио (Audio — Resemple Audio) и видео (Инструменты — Resemple Video to New Frame Rate) доступна операция изменения дискретизации (resampling). Выбрав нужный пункт просто указываем новое значение и подтверждаем установки. В Инструменты найдем еще несколько полезных пунктов: изменение направления буфера обмена (Reverse Clipboard), поворот клипа (Rotate Clip, можно повернуть кадры на любой угол), добавление рамки (Trim frames/Add border), изменение скорости воспроизведения/сохранения (новый размер клипа), изменение размера кадра (Resize All Frames, можно задать произвольное значение).
Возможно все получится не сразу, но любую операцию можно отметить (Правка — Отменить, Ctrl+U) поэтому бояться экспериментировать не стоит.

Эффекты

В LiVES реализовано два вида эффектов: реального времени и обычный, требующий обработки (rendered). В первом случае исходный файл не затрагивается, все эффекты накладываются по ходу и их можно менять в любой момент. Соответственно этот режим требует определенных ресурсов от ПК. Второй — это привычный режим для подобного вида программ, указывается файл или отрезок и к видео применяется выбранный эффект, который сохраняется в исходном файле. Обработка занимает больше времени, но зато использовать можно менее мощные компьютеры.
Работает все очень просто. Эффекты реального времени доступны в меню VJ, пунктов здесь не много и в основном они относятся управлению. При помощи пунктов Set Real Time Effect Defaults и Save Real Time Effect Defaults можно выбрать и сохранить эффект который будет применяться по умолчанию. Но больше интересного скрыто в Real time Effect Mapping. После его выбора появляется окно, в котором можно настроить привязку эффектов к комбинации клавиш Ctrl+1…9 (Ctrl+0 отключает эффект). Причем для каждой клавиши доступно 8 позиций, которые можно настроить предварительно (выбрав нужный эффект из списка) и затем быстро сменить настройки или эффект при помощи клавиш k и m (при установленном Key active). Для каждого эффекта доступно краткое описание и специфические настройки.
Теперь просто запускаем воспроизведение, жмем к примеру Ctrl+1+k и смотрим результат, чтобы перейти к следующему эффекту группы используем m, комбинация Ctrl+UP/Down позволяет управлять скоростью применения эффекта. Выглядит очень интересно. При помощи клавиши Key grab можно установить любую удобную комбинацию для вызова нужного эффекта.
Теперь рассмотрим вариант, когда эффект необходимо наложить на видео. Выделяем участок и переходим в Воздействие, выбираем эффект и производим необходимые подстройки и применяем. Обратите внимание на пункт Apple Real Time Effect to Selection, выбор которого позволяет использовать последний активированный эффект реального времени.
После наложения эффекта в меню Правка — Выделить активируется пункт позволяющих быстро выделить временной отрезок соответствующий последнему примененному эффекту.

2

Сохраняем результат

Когда все требуемые настройки применены клип (Ctrl+C) или только выбраную часть фрагмента Selection (клавиша S) можно сохранить/перекодировать в нужный формат воспользовавшись горячими клавишами или выбрав пункт в меню Файлы. В появившемся окне Encoding details вначале выбираем в списке программу-кодировщик, затем выходной видео и аудио формат. Если нужного формата нет в списках, пробуем другой кодировщик. Универсальным является универсальный multi_encoder, предлагающий большое количество форматов. Далее указываем имя файла и при желании комментарии, можно сохранить субтитры в отдельный файл. Здесь LiVES по сравнению с тем же OpenShot немного проигрывает, так как новичку приходится чуть вникать в особенности работы разных утилит и нет готовых профилей, которые создаются один раз и позволяют очень тонко настроить параметры кодирования. Хотя в любом случае в LiVES можно достигнуть тех же и даже больших результатов, просто используется разный подход, а по сути в этом редакторе пользователь неограничен.
И кстати можно сохранить отдельный кадр в виде png файла. Это единственная операция которую можно произвести из контекстного меню. Просто отматываем на нужный кадр и щелкаем в окне правой кнопкой мышки, затем указываем место.
3

4

Обработка видео

***

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

Анонсирован номер № 7-8 (140-141) июль-август журнала Системный Администратор за 2014 год со спецприложением «БИТ. Бизнес & Информационные технологии».
cover07-08(140-141) cover_bit06(39)
В номере:

  • Крис Касперски: «Компьютер как средство решения проблем сам стал одной большой проблемой»
    Крис Касперски, специалист по ИБ, хакер и автор «компьютерных» книг, интервью не дает. Ныне Крис живет в США, трудится аналитиком по ИБ в крупной американской компании и по-прежнему видит в работе главный смысл жизни. Паблисити его абсолютно не интересует. Но для нашего издания он сделал исключение – ведь именно в «Системном администраторе» в 2003-2006 годах увидела свет его книга «Записки исследователя компьютерных вирусов».
  • Новые возможности PowerShell 5.0
    Большинство последних новинок Microsoft направлено на упрощение создания вычислительных сред и управления bvb. В предрелизе WMF 5.0 заявлено пусть и небольшое количество новинок, но тем не менее они очень интересны.
  • Устанавливаем Request Tracker
    Знакомимся с трекинговой системой, ориентированной на работу технической поддержки, выполняем общие настройки и учимся работать с ней.
  • Установка и настройка Foreman
    В предыдущей статье мы рассказали о связке Katello, Pulp и Candlepin, которая позиционируется как составляющая следующего поколения Red Hat Network. Однако эта троица справляется лишь с частью задач, стоящих перед администратором. Для полноты картины необходимо рассмотреть еще один инструмент – Foreman
  • Облако от VMware. Часть 2. Обеспечим им каждого
    Рассмотрим настройку взаимодействия основных компонентов vCloud, разберемся в многоуровневой архитектуре и создадим первое пользовательское облако.
  • Миграция пользовательских данных с помощью SCCM 2012 SP1
    Пользовательские данные между компьютерами можно перенести автоматически с помощью Configuration Manager. В статье рассматриваются принципы его работы, настройки, преимущества и недостатки данного решения.
  • Почему нельзя просто скопировать файлы. О резервном копировании, а также об инкрементальном парадоксе
    Вряд ли можно найти профессионала в области ИТ, который бы стал отрицать необходимость всегда иметь надежную актуальную резервную копию. Но никто не спорит, что гораздо надежнее иметь две копии! Например, за вчера и за сегодня. А еще лучше иметь целый архив за требуемый период
  • Артем Шумилов: «Мне было интересно, как люди заставляют одно и то же устройство делать разные вещи, и каким образом оно понимает, что от него хотят»
    На вопросы «Системного администратора» отвечает победитель международной студенческой конференции CyberSecurity for the Next Generation, организованной «Лабораторией Касперского», студент Московского государственного технического университета имени Н.Э. Баумана Артем Шумилов.
  • Active Directory и безопасность. Часть 1. Построение защищенных служб каталога
    Служба каталогов (СК) является основой построения информационных систем огромного количества организаций. Безопасность СК становится одним из ключевых вопросов, независимо от размеров предприятия.
  • Сервис удаленного тестирования. Удаленный рабочий стол и Linux-консоль в окне браузера
    В свое время в компании «Доктор Веб» был создан сервис удаленного тестирования Dr.Web LiveDemo. Сервис позволял тестировать продукты Dr.Web тем клиентам, кто по какой-либо причине не мог развернуть их в рамках своей сети, а также позволял менеджерам и партнерам компании организовывать демонстрации тех же решений.
  • Как избежать ошибок учета в 1С. Часть 12. Сложный учет НДС
    Когда предприятие реализует продукцию собственного производства в стране и за рубежом, возникают дополнительные сложности с отражением в учете операций.
  • 1С:ERP 2.0. Что нового? Часть 4
    Завершаем цикл статей об 1С. Речь пойдет о подсистемах «Производство», «Регламентированный учет», «Управление по целям», «Зарплата и кадры». Ранее были рассмотрены подсистемы «Финансы» и «Бюджетирование».
  • Преимущества программных АТС
    Мы расскажем, почему вашей следующей телефонной системой должна быть программная АТС на базе широко распространенной операционной системы.
  • Настройка SRTP и TLS/SSL в Asterisk
    Одной из распространенных атак на VoIP является подбор регистрационной информации и перехват данных. В базовой настройке сервера Asterisk FreeSWITCH, как, впрочем, и у всех остальных, не используется шифрование.
  • Инструменты тестировщика, или С чего начать новичку?
    Что поможет начинающему тестировщику стать одним из тех специалистов, благодаря которым пользователи присылают положительные отзывы о приобретенном ПО?
  • Grunt – The JavaScript Task Runner
    Работа веб-программиста потрясающе интересна. Но бывает в ней и нудная рутинная часть. Инструмент, о котором речь пойдет ниже, способен спасти от скуки.
  • CommuniGate Pro. Ваша лаборатория объединенных коммуникаций
    Технологиям передачи данных с помощью компьютеров уже полвека. То, что начиналось как утилитарный механизм обмена данными между вычислительными машинами, выросло до средства коммуникации между людьми, которое потеснило (да ладно, вытеснило!) традиционные почту и телеграф.
  • Очереди. Теория и практика. Часть 3. Сервер очередей
    В предыдущих статьях мы рассматривали использование очередей в рамках одного процесса и АПИ ZeroMQ между разными компонентами напрямую. Однако для разработки более сложных систем есть специализированные службы middleware, через которые проходят сообщения.
  • Использование API Яндекс.Метрика
    У вас есть сайт или мобильное приложение? Вам сюда! Создаем генератор отчетов о посещаемости сайта в формате Microsoft Office Excel с помощью API Яндекс.Метрика
  • WebSockets – стандарт современного веба. Часть 2: Socket.io – веб сокеты для всех!
    Преимущества веб-взаимодействия на основе WebSocket и перспектив приложений, на них основанных, очевидны. Но вот с реальностью в виде браузеров, не поддерживающих эту технологию, предстоит, как показывает опыт, бороться еще очень долго. А хотелось бы работать уже здесь и сейчас.
  • Алексей Широких: «Старайтесь идти на работу с радостью, а с работы с гордостью»
    Как Сколтех себя позиционирует? Кто платит за студентов? Какие возможности дает обучение в Сколково? На эти и другие вопросы журнала «Системный администратор» отвечает директор по информационным технологиям Сколковского института науки и технологий (Сколтех) Алексей Широких.
  • «Жизнь слишком коротка, чтобы работать с людьми, которые тебе неприятны»
    Я часто замечаю: в череде жизненных событий встречаются слова, помогающие мне преодолевать препятствия, мотивирующие или порой успокаивающие меня.
  • Вакансия: релиз-инженер
    Мы используем различное программное обеспечение. А его финальные версии находят свое воплощение в виде итоговых релизов. За тем, чтобы они состоялись, следят специальные инженеры. Причем обязанности таких сотрудников разнятся. Мы обратились к представителям компаний с вопросами о том, какие требования они предъявляют к соискателям вакансий релиз-инженера.
  • Мастера релизов – ИТ-компании ждут вас! Статистика: предложения, требования, функционал
    Исследовательский центр рекрутингового портала Superjob.ru подготовил для читателей журнала «Системный администратор» обзор предложений и требований работодателей, ищущих сотрудников на позицию релиз-инженера.
  • Моделирование – «наш» метод познания. Программа молекулярной динамики XMD
    Познакомимся с одним из решений моделирования процессов, происходящих в веществе на уровне атомов, молекул и кристаллических решеток. Речь пойдет о классической программе молекулярной динамики – XMD.
  • Анализ и обработка больших данных
    Все большую популярность в ИТ-технологиях набирает концепция больших данных. Наука о данных (Data Science, Datalogy) стала самостоятельной академической дисциплиной. Познакомимся с рядом курсов, в которых раскрываются современные достижения в этой области ИТ-технологий.
  • Прагматическая фантазия о будущем
    Полеты в космос и на Луну, подводные лодки, летательные аппараты тяжелее воздуха – все эти чудеса были придуманы писателями фантастами в середине – конце XIX века. Фантазии в основном возникали не на пустом месте, а на основе зародышей технологических разработок и технических идей, существовавших в то время.
  • Галоши для «мобилы»
    Компания Nokia, в следующем году отмечающая полуторавековой юбилей, чего только не перепробовала, прежде чем стать нынешним транснациональным гигантом на рынке коммуникаций и информационных технологий!
  • Технология параметризированного синтеза жестов и их последовательностей на основе анимированных 3D-моделей
    В статье рассматриваются вопросы разработки компонент автоматизированных систем распознания жестов — автоматизированных систем сурдоперевода. Приводится классификация и параметризация жестовых языков. Рассматриваются подходы к моделированию руки, ее структурные и кинематические характеристики. Предлагается технология параметризированного синтеза жестов и их последовательностей на основе анимированных 3D-моделей. Описывается приложение визуализации трехмерной модели руки с использованием средств библиотеки OpenGL.
  • Узел однородной вычислительной сети под воздействием вирусных атак как система G/G/1
    Предлагается и рассматривается аналитическая модель узла однородной вычислительной сети под воздействием вирусной атаки с позиций теории массового обслуживания как система G/G/1. Приводятся необходимые формулы, рисунки, таблицы.
  • Применение технологии широкополосного изменения огибающей спектра звукового сигнала Petralex® в онлайн-приложениях коррекции слуха
    В статье рассматриваются способ и приложение, позволяющие в режиме онлайн осуществлять коррекцию звукового сигнала от различных приложений в соответствии с индивидуальными слуховыми характеристиками пользователя. Разработанный способ имеет многофункциональное применение, в частности, приложение полезно людям с разной степенью тугоухости и сотрудникам колл-центров, которые много времени работают в наушниках.
  • Оптимизационные модели термоэлемента Пельтье и тепловой трубы
    В статье рассматривается оптимизационное моделирование термоэлемента Пельтье и тепловой трубы для повышения надежности современной бортовой и переносной радиоэлектронной аппаратуры с использованием современных информационных технологий в целях создания инновационной системы автоматизированного проектирования средств обеспечения ее тепловых режимов.
  • Ископаемое вычислительное
    Сегодняшний экспонат нашего виртуального музея, предлагаемый вниманию читателей, вероятно, один из древнейших представителей своего вида – вычислительных устройств. Любопытно, что паскалин (или паскалина), носящий имя своего изобретателя и оказавшийся весьма полезным и удобным прибором для своего времени – середины XVII века, – был сконструирован человеком, которого во всех энциклопедиях по справедливости именуют «великим французским математиком, механиком, физиком, литератором и поэтом». Действительно, Блез Паскаль преуспел во всем перечисленном, однако ж выходит, что и изобретал кое-какие полезные вещицы на досуге. Причем ту, о которой идет речь, – в 1642 году, когда автору изобретения еще не стукнуло и двадцати.

В MySQL возможность репликации реализована «из коробки» и предоставляемые возможности расширяются с каждым новым релизом. Попробуем разобраться с текущим состоянием.

Необходимость в репликации появляется тогда когда требуется обеспечить повышенную надежность и доступность сервиса:

  • масштабирование позволяющее «выйти» за ограничения пропускной способности одной системы за счет распределения запросов между серверами кластера.
  • резервирование — в случае выхода основного сервера, данные берутся реплики.
  • снижение нагрузки с мастер-сервера — клиентские приложения получают информацию (только чтение) с любой из реплик.
  • простое создание резервных копий, которые создаются на любой реплике.

И так далее. Причин может быть много. Именно поэтому репликация является одной из самых необходимых функций в современной СУБД и MySQL здесь не является исключением.
Забегая наперед скажу, что статья не является законченным руководством по репликации, хотя бы потому, что ньюансов здесь не много, а очень много. Что срабатывает в одном случае, совершенно не подходит в другом. Это просто попытка привести все что есть на текущий момент к какому то порядку и дать ответы на все возможные вопросы, развеяв в том числе устоявшиеся мифы по поводу возможностей MySQL.
Сегодня в контексте синхронной master-master репликации много говорят о таких проектах как Galera Cluster for MySQL (codership.com) и MySQL NDB Cluster, по своему интересных и заслуживающих наверное каждый отдельной статьи. Первый пока называет нарекания по поводу стабильности, второй немного специфичен и подходит не для всех приложений. В плюс MySQL можно отнести также доступность из репозитариев дистрибутивов, это проверенное временем решение. К тому же не редко мы уже имеем рабочий сервер, который нужно подстраховать и разгрузить.

Возможности репликации MySQL

В MySQL репликация доступна «из коробки» и не требует каких-либо патчей или специфических установок для активации. Еще в версии начиная 3.23.15 был реализован односторонний (master → slave) некластеризированный механизм репликации. Для его правильной реализации необходимо установить для каждого сервера свой уникальный идентификатор server-id и указать slave, где брать информацию.
В зависимости от настроек можно реплицировать всю базу данных, отдельную таблицу или ее часть. В случае необходимости двунаправленной репликации для обмена данными в кластере (master — master) строили два направления: master — slave и slave – master. Такая схема, в зависимости от проекта, у одних работает годами, у других сразу создает ряд проблем. Начиная с MySQL 5.1.18, возможность master — master поддерживается уже официально, включая multi-master репликации, в том числе и круговые (dev.mysql.com/doc/refman/5.1/en/mysql-cluster-replication-multi-master.html). Это дает возможность строить на MySQL кластер высокой доступности (High Availability) и реализовывать практически любые топологии.
И хотя в настоящий момент MySQL может поддерживать разные схемы, все же оптимальным для режима master — master является 2 сервера. Почему станет ясно ниже.
В случае нагруженных систем здесь есть подводные камни, ведь вся процедура происходит с задержкой и вполне вероятна рассинхронизация, когда один и тот же запрос на разных серверах вернет отличный результат. Особенно трудно прогнозируемая ситуация в режиме master-master active-active. Ведь кластеру будет тяжело сохранить работоспособность, когда оба сервера начнут одновременно менять одни и те же данные или производить автоинкрементную вставка в таблицу. Добавление третьего сервера в кольцо только усугубит ситуацию.
Настройка смещения AUTO_INCREMENT позволяет сделать так чтобы, запросы не пересекались. Для этой цели введены параметры (dev.mysql.com/doc/refman/5.7/en/replication-options-master.html ) auto_increment_increment, auto_increment_offset. По умолчанию оба установлены в 1. Просмотреть их текущее значение просто:

mysql> SHOW VARIABLES LIKE 'auto_inc%';

И это действительно срабатывает, но спасает ведь не во всех ситуациях.
Кстати в документации оба параметра почему то подписаны как «is supported for use with NDB tables only», а для MySQL 5.7 «is intended for use with MySQL Cluster, which is not currently supported in MySQL 5.7».

Настройка автоинкремента позволяет избежать части проблем в режиме master-master

Настройка автоинкремента позволяет избежать части проблем в режиме master-master

Еще один минус состоит в том, что MySQL не предоставляет удобные инструменты для мониторинга репликации, мастер-сервер практически ничего не знает о репликах, а реплики — друг о друге. Например, реплика может не пройти по тем или иным причинам на slave, мастер об этом даже не узнает. В версии MySQL 5.5 пропали даже привычные команды LOAD DATA FROM MASTER и LOAD TABLE FROM MASTER, снимавшие ряд проблем, правда они работали только с MyISAM. Но некоторые задачи можно выполнить при помощи сторонних инструментов, из комплекта MySQL Workbench Utilities (в частности скрипт mysqlfailover), Multi-Master Replication Manager for MySQL или Percona Toolkit — mk-table-checksum, mk-table-sync, mk-slave-delay, mk-slave-prefetch, mk-heartbeat, mk-slave-restart, mk-slave-find и mk-slave-move.
Единого совета «что делать?» здесь нет и быть не может, в каждой конкретной ситуации выход будет свой. Ведь работа в кластере это всегда компромисс между производительностью, доступностью и согласованностью (консистентностью) данных.
Например, чтобы при перезагрузке не было проблем с репликацией, рекомендуется использовать такие параметры: flush_log_at_trx_commit=1, sync_binlog=1, sync_relay_log=1, sync_relay_log_info=1, sync_master_info=1. Но их установка существенно отразится на производительности. Наверное поэтому сегодня популярны только схемы master-master (active-passive) и master – slave (один или несколько).

Глобальные идентификаторы транзакций

Репликация производится при помощи бинарных журналов, ведущихся на мастере (параметр log-bin) и передаваемых на slave (relay-log). Изначально в него информация заносилась без какой либо привязки. В случае необходимости считать информацию с середины использовался сдвиг (offset, с MySQL 3.23.15+), который уникален для каждого подчиненного сервера. В этой ситуации быстро разобраться какой из slave серверов наиболее близок по состоянию к мастеру не так просто. Начиная с MySQL 5.6.5 поддерживается репликация транзакций на основе глобальных идентификаторов транзакций (Global Transaction Identifiers, GTIDs), а вся служебная информация (о мастере и сдвиге) была перенесена из файлов в метаданные. Такой идентификатор добавляется к каждой реплике и дает возможность на slave серверах быстро отследить текущее состояние. Использование GTID позволяет забыть о необходимости работать напрямую с лог-файлами и позициями в них (MASTER_LOG_FILE и MASTER_LOG_POS), что значительно упрощает многие задачи репликации. Сам GTIDs представляет собой идентификатор server_uuid (уникален, генерируется автоматически в файл data_dir/auto.cnf) и номер транзакции. Таким образом MySQL вплотную приблизился к возможности репликации с нескольких источников, по крайней мере в вопросе работы самого механизма.
Старый режим репликации никуда не исчез, все нововедения опциональны и подключаются в конфигурационном файле основного сервера при помощи параметров:

[mysqld]
...
log-slave-updates=TRUE
gtid-mode=ON
enforce-gtid-consistency=TRUE
master-info-repository=TABLE
relay-log-info-repository=TABLE

В slave сервере к ним добавляем еще и:

binlog-rows-query-log_events=1

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

mysql> SHOW VARIABLES LIKE '%gtid%';

Виды репликации

Изначально в MySQL (с 3.23) поддерживалась так называемая логическая (STATEMENT-based, SBR) репликация, когда запрос на slave передается в том же виде в котором он выполнялся на мастере (его можно просмотреть при помощи mysqlbinlog). Плюсом SBR является простота реализации и небольшой размер бинарного журнала т. е. реплики его получат очень быстро. Минусов наверное больше. На серверах могут отличаться системные переменные, а значит результат запроса может быть разный. Возникают проблемы с триггерами и хранимыми процедурами. Выполнение запроса на подчиненном сервере может занять большее время и он будет отставать. В некоторых случаях возможно нерациональное использование ресурсов. Например выбираем данные по некоторым критериям, обходим всю таблицу, а меняем только одну строку. Это же потом придется проделать и на всех slave. Не проще ли сразу указать, что менять?
В MySQL 5.1 появилась поддержка построчной (ROW-based, RBR) репликации способной корректно передавать любой запрос. В этом случае в журнал заносятся сами данные которые необходимо добавить/удалить/изменить, а не запрос. Минус очевиден — размер журнала в некоторых случаях может быть очень большим. А поэтому очевидно, что идеального варианта нет, каждый тип имеет свои достоинства и недостатки. Поэтому чуть позже (5.1.8) был введен смешанный формат (MIXED). В этом случае все запросы как и раньше выполняются в режиме STATEMENT, но если встречаются данные которые не возможно передать при помощи этого типа, то журналирование будет выполняется в формате ROW. До 5.1.28 именно смешанный режим устанавливался по умолчанию, но затем опять вернулись к логическому и теперь администратор сам выбирает нужный вариант если в этом есть необходимость и главное он знает что делает. Алгоритм переключения и все исключения при работе в режиме MIXED описаны в разделе 5.2.4.3. Mixed Binary Logging Format.
Тип репликции устанавливается при помощи параметра binlog-format, который может принимать значение STATEMENT, ROW или MIXED.

Полусинхронная репликация

Изначально в MySQL использовалась асинхронная репликация. Принцип работы очень прост, клиент производит изменение (COMMIT), которое выполняется master сервером, результат заносится в бинарный журнал. Клиент, не дожидаясь ответа подчиненных серверов (он их просто не контролирует), сразу же получает сообщение об успешном завершении процесса, которые только-только начинают получать и выполнять реплику. Такой подход обеспечивает максимальную скорость и позволяет производить репликацию даже по коммутируемым соединениям, но имеет один существенный минус, особенно актуальный для кластеров. Если после подтверждения транзакции master сервер выходит из строя, а подчиненные сервера еще не успевают получить реплику, данные будут потеряны, но клиент будет уверен, что все в порядке. В случае master – master репликации проблема только усугубляется, ведь сервера не знают что происходит другу у друга, отсюда рассинхронизация со всеми вытекающими.
Выходом в этой ситуации может быть синхронная репликация, когда клиент получит подтверждение только после выполнения запроса на всех подчиненных серверах. Выигрываем в надежности, но сразу же проигрываем в скорости. Особенно это актуально, если slave сервер подключен по медленному каналу или некоторое время не отвечает.
В MySQL 5.5 появилась поддержка полусинхронного (semi-synchronous) механизма репликации, основанного на патчах к InnoDB от компании Google. В этом случае master-сервер ожидает подтверждения от одного из slave, который сообщает что получил и записал на диск реплику. При этом не ожидается, когда slave выполнит сам запрос и нет никаких гарантий, что он будет выполнен вообще (например, ошибка). Именно поэтому многие источник считают название semi-synchronous не совсем корректным. Кстати эта проблема устраняется при помощи специального патча Enhanced SemiSync Replication, в этом случае мастер-сервер получает подтверждение только после того как slave применит реплику. Проект правда уже 2 года не развивается, но показывает что нерешаемых задач нет.
Чтобы не быть зависимым от доступности подчиненного сервера, предусмотрен таймаут, позволяющий автоматически перейти асинхронный режим если ни один slave не ответил за запрос. При восстановлении связи будет опять активирован semi-synchronous.
Также поддерживается отложенная репликация, когда подчиненный сервер начинает выполнять запрос после истечения указанного промежутка времени (устанавливается при помощи MASTER_DELAY, по умолчанию 0). Это может быть полезно, если на мастере понадобится откатить транзакцию.

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

1000 мс / задержка в сети (мс) = производительность semi-synchronous

Практика с теорией не расходятся или расходятся не сильно. Репликация в режиме semi-synchronous через WAN будет сильно тормозить процесс. А вот в локальных сетях при использовании серверов малой и средней производительности, потерь на полусинхронную репликацию по сравнению с асинхронной не заметно. Если она и есть, то полностью укладывается в погрешности измерений. А поэтому ее вполне можно активировать повысив тем самым вероятность сохранить данные при крахе мастер-сервера.
По умолчанию используется асинхронная репликация, полусинхронную необходимо установить плагин и активировать параметр в my.cnf. На основном сервере:

mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

И в my.cnf:

rpl_semi_sync_master_enabled =1

На подчиненном:

mysql>  INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

И в my.cnf:

rpl_semi_sync_slave_enabled =1

Статус можно узнать командой:

mysql> SHOW STATUS LIKE 'Rpl_semi_sync%';

***

Репликация в MySQL – это нетривиальный процесс, в котором нет единого решения на все случаи жизни. Но она есть и она работает. Но варианты лежащие на поверхности, не всегда приводят к нужному результату. Успеха можно добиться. На это влияет правильный выбор архитектуры репликации, режимов и параметров работы сервера.

Любые сетевые приложения и технологии опираются на IP-маршрутизацию, позволяющую хостам найти друг друга. Отказ любого маршрутизатора автоматически означает потерю доступа к ресурсам, поэтому не имея отказоустойчивого механизма доступ к нужному IP, сервис будет недоступен. Самый распространенный способ — использование резервного маршрутизатора. Проблема не нова, поэтому и решений несколько — протоколы IRDP, VRRP, BGP, CARP, технология NLB и многое другое.

OpenBSD/FreeBSD CARP

Чтобы не перенастраивать маршруты клиентов в случае выхода из строя основного шлюза можно пойти как минимум двумя путями: перестроить таблицы маршрутизации или отдать IP отказавшего шлюза другому роутеру. Каждый способ имеет свои плюсы и минусы. Протоколы динамической маршрутизации вроде RIP, OSPF, EIGRP или BGP, требуют поддержки их роутерами и плюс немного придется повозиться с настройками. Для простых сетей проще использовать второй вариант.
Сетевой протокол дупликации общего адреса (CARP, Common Address Redundancy Protocol) — позволяет использовать один IP-адрес несколькими хостами, называемыми «redundancy group» (группа избыточности), работающими в пределах одного сегмента сети и имеющими один виртуальный MAC (link layer). Этот IP клиенты и устанавливают в маршруте по умолчанию. Настроив CARP можно затем смело обновлять ПО на роутере не беспокоясь, что офис останется без интернета.
Впервые CARP появился в OpenBSD 3.5 как ответ на патентованные VRRP (Virtual Router Redundancy Protocol) и HSRP (Hot Standby Router Protocol) разработанные в Cisco. В последствии CARP был портирован для FreeBSD (появился в 5.4), NetBSD и реализован для Linux.
Работает CARP очень просто. В случае выхода главного узла из состава «redundancy group» его IP и идентификатор подхватывает один из резервных, имеющий более высокий приоритет. Для определения своей работоспособности главный узел использует объявления (IP Protocol 112, защищены при помощи SHA-1 HMAC), как только они прекращаются и делается вывод о сбое. Резервный узел взяв на себя IP начинает рассылать объявления. Выбирается такой узел просто — кто чаще начнет рассылать объявления, тот и главный. Для этого в настройках каждого роутера используется параметры advbase и advskew. Интервал рассылки рассчитываться по формуле «advbase + advskew/255″ т.е. чем меньше значения, тем узел чаще рассылает объявления, а значит вероятность того что он станет мастером выше. Когда мастер-шлюз восстанавливает работоспособность, управление снова переходит к нему (в некоторых реализациях это можно отключить).
И самое главное — существующие подключения сохраняются и работа клиентов продолжается как ни в чем не бывало. Хотя для некоторых приложений потребуется синхронизация настроек и как результат переподключение. Для устранения этого используют дополнительные механизмы, вроде pfsync, осуществляющие синхронизацию состояния брандмауэров путем рассылки сообщений (IP protocol 240) на другие устройства, которые затем импортируют полученные таблицы. Данные передаваемые pfsync не шифруются, поэтому весьма желательно для обмена таблицами использовать выделенную физическую сеть.
Обычно CARP используется для обеспечения отказустойчивости роутеров и брандмауэров, хотя в некоторых реализациях он позволяет распределять нагрузку посредством балансировки ARP (arpbalance)
Конфигурирование CARP в OpenBSD и FreeBSD ничем по сути не отличаются, только используются разные файлы. Текущие установки можно просмотреть при помощи:

# sysctl -a | grep "net.inet.carp"

Разрешаем форвардинг и включаем CARP:

# vi /etc/sysctl.conf
 
net.inet.ip.forwarding=1
# разрешаем принимать CARP пакеты
net.inet.carp.allow=1
net.inet.carp.preempt=1
net.inet.carp.log=2

Активированный параметр ”net.inet.carp.preempt” позволит узлу участвовать в выборе мастера, при этом если откажет один из CARP интерфейсов, то автоматически advskew устанавливается в 240 и инициируется выборы мастер-шлюза. В случае если необходима балансировка, используем ”net.inet.carp.arpbalance”, указав режим балансировки (arp, ip, ip-stealth или ip-unicast).
CARP интерфейс создается на лету при помощи команды «ifconfig carp create», или соответствующей записи в /etc/rc.conf (FreeBSD) или /etc/hostname.* (OpenBSD). Помимо стандартных для сетевых интерфейсов параметров необходимо указать пароль, установить группу vhid и расставить приоритеты advskew.
Предположим имеем три сети: 192.168.0.0 (WAN), 192.168.100.0 (LAN) и 172.16.0.0 (между роутерами для pfsync). Виртуальный IP создаваемый CARP будет оканчиваться на 1. Нам требуется чтобы на WAN и LAN «висел» постоянный IP, это позволит не менять настройки шлюза по умолчанию на компьютерах клиентов и подключаться к сервисам расположенным внутри. Кстати возможно использование уже имеющегося физического адреса хоста в качестве виртуального адреса.
Интерфейсы конфигурируются как обычно (это можно сделать во время установки OC), разберем только то что относится непосредственно к CARP и pfsync. В FreeBSD:

# vi /etc/rc.conf
 
network_interfaces="lo0 em0 em1 em2 pfsync0"
cloned_interfaces="carp0 carp1"
ifconfig_carp0="vhid 1 pass <password> 192.168.0.1/24"
ifconfig_carp1="vhid 2 pass </password><password> 192.168.100.1/24"
# включаем pfsync
ifconfig_pfsync0="up syncif em2"
</password>

По окончании проверяем работу интерфейсов «ifconfig carp».
Есть еще момент. Все интерфейсы CARP разделены на группы (по умолчанию группа carp, «ifconfig -g»), каждой можно назначать счетчик «demotion counter» позволяющий задавать некоторые ограничения (устанавливать master при загрузке, ограничивать число отказоустойчивых carp).
На резервном узле настройки полностью аналогичны, только в вызов ifconfig добавляем значение advskew. Покажу на примере OpenBSD:

# vi /etc/hostname.carp0
 
inet 192.168.0.1 255.255.255.0 192.168.0.255 vhid 1 carpdev eth1 advskew 100 pass <password>
</password>

Параметр carpdev можно не указывать, в этом случае CARP использует физический интерфейс, соответствующий той же подсети, что и назначенный IP для виртуального.
И второй:

# vi /etc/hostname.carp0
 
inet 192.168.100.1 255.255.255.0 192.168.100.255 vhid 2 carpdev eth1 advskew 100 pass <password>
</password>

Теперь очередь pfsync.

# vi /etc/hostname.pfsync0
 
up syncdev eth2

Такой вариант удобен в том случае когда шлюзов несколько т.к. для передачи используется мультикаст. Как вариант можно указать конкретный IP «up syncdev eth2 syncpeer 172.16.0.2».

Настраиваем параметры CARP

Настраиваем параметры CARP


Пока пакетный фильтр блокирует передачу информации необходимо добавить всего пару строк в /etc/pf.conf:

# vi /etc/pf.conf
 
pass quick on { em2 } proto pfsync
pass on { em0 em1 } proto carp

Можно проверять. Выключаем основной шлюз, проверяем IP и МАС на втором при помощи ifconfig и arp.
Это минимум. При желании правила можно развивать, принудительно перенаправлять все запросы с физического интерфейса на carp, или добавить фильтры разрешающие подключения по pfsync и carp только с определенных IP.
Или присвоить каждому маршрутизатору по два виртуальных IP. А пользователей «разделить» между роутерами, в случае выхода одного из них они будут переключены на второй прозрачно.
Теперь можно проверять. Выключаем основной роутер, IP подхватывает второй, соединения не обрываются. Хотя например в случае VPN есть свои особенности.

Наверх