<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://svacer.ispras.ru/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Vmonakhov</id>
	<title>Svacer Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://svacer.ispras.ru/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Vmonakhov"/>
	<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Special:Contributions/Vmonakhov"/>
	<updated>2026-07-08T03:55:19Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.40.1</generator>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Svacer&amp;diff=312</id>
		<title>Svacer</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Svacer&amp;diff=312"/>
		<updated>2022-12-26T15:59:11Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;strong&amp;gt;MediaWiki has been installed.&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consult the [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents User&#039;s Guide] for information on using the wiki software.&lt;br /&gt;
&lt;br /&gt;
=== Руководство по использованию и администрированию сервера историй [[Help:Contents|&#039;&#039;&#039;Svacer&#039;&#039;&#039;]] ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://lists.wikimedia.org/postorius/lists/mediawiki-announce.lists.wikimedia.org/ MediaWiki release mailing list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Svacer&amp;diff=310</id>
		<title>Svacer</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Svacer&amp;diff=310"/>
		<updated>2022-12-26T15:42:55Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;strong&amp;gt;MediaWiki has been installed.&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consult the [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents User&#039;s Guide] for information on using the wiki software.&lt;br /&gt;
&lt;br /&gt;
=== Руководство по использованию сервера историй [[Help:Contents|&#039;&#039;&#039;Svacer&#039;&#039;&#039;]] ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://lists.wikimedia.org/postorius/lists/mediawiki-announce.lists.wikimedia.org/ MediaWiki release mailing list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Svacer&amp;diff=309</id>
		<title>Svacer</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Svacer&amp;diff=309"/>
		<updated>2022-12-26T15:42:07Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;strong&amp;gt;MediaWiki has been installed.&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consult the [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents User&#039;s Guide] for information on using the wiki software.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Руководство по использованию сервера историй [[Help:Contents|&#039;&#039;&#039;Svacer&#039;&#039;&#039;]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://lists.wikimedia.org/postorius/lists/mediawiki-announce.lists.wikimedia.org/ MediaWiki release mailing list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Svacer&amp;diff=308</id>
		<title>Svacer</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Svacer&amp;diff=308"/>
		<updated>2022-12-26T15:40:44Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Руководство по использованию сервера историй [[Help:Contents|&#039;&#039;&#039;Svacer&#039;&#039;&#039;]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;MediaWiki has been installed.&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Consult the [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents User&#039;s Guide] for information on using the wiki software.&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://lists.wikimedia.org/postorius/lists/mediawiki-announce.lists.wikimedia.org/ MediaWiki release mailing list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:Migration&amp;diff=292</id>
		<title>Help:Migration</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:Migration&amp;diff=292"/>
		<updated>2022-12-26T14:33:22Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Help:Contents|Все разделы]]&lt;br /&gt;
[[Category:Help]]&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Миграция ==&lt;br /&gt;
=== Миграция со старого сервера ===&lt;br /&gt;
В данном подразделе описана миграция со старого сервера, поставляющегося в комплекте со Svace. Это не относится к миграции между версиями Svacer. Миграция данных со старого сервера на Svacer состоит из двух этапов:&lt;br /&gt;
# Экспорт информации со старого сервера.&lt;br /&gt;
# Импорт данных в новый.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для экспорта информации со старого Svace сервера используется утилита &#039;&#039;&#039;svace-migration.jar&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
    java -jar svace-migration.jar &amp;lt;user&amp;gt; &amp;lt;password&amp;gt; &amp;lt;path to svace&amp;gt; &amp;lt;path to server dir&amp;gt; &amp;lt;path to output dir&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметры, используемые при экспорте данных&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Параметр!!Описание&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;user&amp;gt;&lt;br /&gt;
| Имя пользователя на старом сервере&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;password&amp;gt;&lt;br /&gt;
| Пароль пользователя на старом сервере&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;path to svace&amp;gt;&lt;br /&gt;
| Путь к директории, где находится Svace&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;path server dir&amp;gt;&lt;br /&gt;
| Директория, из которой запущен старый сервер&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;path to output dir&amp;gt;&lt;br /&gt;
| Директория, в которую будут записаны экспортируемые данные&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Экспорт данных возможен при работающем старом сервере. Экспорт инкрементальный, поэтому ранее экспортированные результаты повторно не переносятся.&lt;br /&gt;
При экспорте утилита &#039;&#039;&#039;svace-migration.jar&#039;&#039;&#039; извлекает:&lt;br /&gt;
&lt;br /&gt;
* все снимки в виде &#039;&#039;&#039;*.svres&#039;&#039;&#039;;&lt;br /&gt;
* информацию о размещении исходного кода;&lt;br /&gt;
* сопутствующую информацию в директории старого сервера.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ВНИМАНИЕ: Для работы утилиты требуется Java 17+, при запуске возможно потребуется добавить опции JVM:&lt;br /&gt;
    --add-opens java.base/java.lang.reflect=ALL-UNNAMED &lt;br /&gt;
    --add-opens java.base/java.lang=ALL-UNNAMED &lt;br /&gt;
    --add-opens java.base/java.io=ALL-UNNAMED &lt;br /&gt;
    --add-opens java.base/java.util=ALL-UNNAMED &lt;br /&gt;
    --add-opens java.base/java.util.concurrent=ALL-UNNAMED &lt;br /&gt;
    --add-opens java.base/java.text=ALL-UNNAMED &lt;br /&gt;
    --add-opens java.desktop/java.awt.font=ALL-UNNAMED&lt;br /&gt;
&lt;br /&gt;
Для импорта экспортированных данных используется следующая команда:&lt;br /&gt;
&lt;br /&gt;
    svacer migrate [--skip-dxr-errors] --distr &amp;lt;path to svace distr&amp;gt; --temp &amp;lt;path to temp folder&amp;gt; --store &amp;lt;intermediate store&amp;gt; &amp;lt;path to exported data&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметры, используемые при импорте данных&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Параметр !! Описание&lt;br /&gt;
|-&lt;br /&gt;
| --skip-dxr-errors&lt;br /&gt;
| Опциональный параметр для игнорирования ошибок в DXR-данных. Рекомендуется к использованию&lt;br /&gt;
|-&lt;br /&gt;
| --distr&lt;br /&gt;
| Путь к дистрибутиву Svace&lt;br /&gt;
|-&lt;br /&gt;
| --temp&lt;br /&gt;
| Директория для хранения временных файлов в ходе конверсии&lt;br /&gt;
|-&lt;br /&gt;
| --store&lt;br /&gt;
| Путь к промежуточному хранилищу&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;path to exported data&amp;gt;&lt;br /&gt;
| Путь к директории, в которую были экспортированы результаты &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После конвертации данных в промежуточное хранилище результат можно загрузить на новый сервер с помощью команды upload:&lt;br /&gt;
&lt;br /&gt;
    svacer upload --user &amp;lt;user&amp;gt; --password &amp;lt;pwd&amp;gt; --host &amp;lt;host&amp;gt; --port &amp;lt;rest port&amp;gt; --grpc &amp;lt;grpc port&amp;gt; &amp;lt;path to store&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Миграция между версиями Svacer ===&lt;br /&gt;
Миграция БД PostgreSQL и object store между версиями Svacer происходит автоматически при обновлении на новую версию. Рекомендуется делать резервные копии перед обновлением (см. раздел [[#Создание и восстановление резервной копии|Создание и восстановление резервной копии]]).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ниже описаны существенные изменения при переходе на определенную версию с более старой&lt;br /&gt;
* 4.0.1 и выше — миграция object store (badger) на новую версию. Может занимать существенное время при большом количестве проектов в Svacer. После перехода на версию 4.0.1 и выше object store становится несовместим с более ранними версиями&lt;br /&gt;
* 5.0.0 и выше — перенос DXR разметки из PostgreSQL в object store. Версии 5.0.0 и выше не совместимы с более ранними версиями.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Создание и восстановление резервной копии ===&lt;br /&gt;
==== Если PostgreSQL запущен в виде сервиса ====&lt;br /&gt;
Если PostgreSQL запущен в виде сервиса (т.е. не в докер-контейнере), то для создания резервной копии БД перейдите в пользователя postgres и запустите создание дампа:&lt;br /&gt;
	&lt;br /&gt;
    sudo su -l postgres&lt;br /&gt;
    pg_dump --clean -T tmp_diff* svacer_db &amp;gt; svacer.sql&lt;br /&gt;
&lt;br /&gt;
где svacer_db — имя БД.&lt;br /&gt;
&lt;br /&gt;
В результате дамп БД будет создан в файле svacer.sql&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для восстановления БД из дампа также перейдите в пользователя postgres и запустите восстановление&lt;br /&gt;
    sudo su -l postgres &lt;br /&gt;
    psql -f svacer.sql svacer_db &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Если PostgreSQL запущен в docker-контейнере ====&lt;br /&gt;
Если PostgreSQL запущен в docker-контейнере, то для создания резервной копии БД выполните следующую команду&lt;br /&gt;
&lt;br /&gt;
    docker exec -t svacer_postgres pg_dump --clean -T tmp_diff* -U postgres svacer_db &amp;gt; svacer.sql&lt;br /&gt;
&lt;br /&gt;
где:&lt;br /&gt;
* svacer_postgres — имя docker-контейнера&lt;br /&gt;
* postgres — имя пользователя, под учётной записью которого создана БД&lt;br /&gt;
* svacer_db — имя БД&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для восстановления БД используйте команду&lt;br /&gt;
&lt;br /&gt;
    cat svacer.sql | docker exec -i svacer_postgres psql -U postgres svacer_db&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Создание резервной копии svacer object store через command line API ====&lt;br /&gt;
Резервную копию object store можно создать, использовав следующую команду (доступна только пользователю с ролью admin)&lt;br /&gt;
&lt;br /&gt;
    svacer server backup --user admin --password &amp;lt;password&amp;gt; --file &amp;lt;filename&amp;gt;.kvbak&lt;br /&gt;
&lt;br /&gt;
В результате object store будет сохранен в файл &#039;&#039;&#039;&amp;lt;filename&amp;gt;.kvbak&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для восстановления из резервной копии требуется при запуске сервера указать этот файл в опции &#039;&#039;&#039;--load-from-backup&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
    svacer server --pg &amp;lt;postgres_url&amp;gt; —store /home/svacer/new-store --load-from-backup &amp;lt;filename&amp;gt;.kvbak&lt;br /&gt;
&lt;br /&gt;
Восстановление возможно только в пустой object store. То есть в данном примере директория &#039;&#039;&#039;/home/svacer/new-store&#039;&#039;&#039; должна быть пустой.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Создание резервной копии svacer object store в сервере PostgreSQL ====&lt;br /&gt;
Резервную копию object store можно сохранить в сервере PostgreSQL, который используется сервером Svacer. Данный механизм использует функциональность large object store из PostgreSQL. Функциональность по бэкапу object store в PostgreSQL является &#039;&#039;&#039;рекомендуемой стратегией&#039;&#039;&#039; по бэкапу object store. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Следующие команды подразумевают, что сервер развернут с портами по умолчанию на localhost. При необходимости, порты и адрес сервера могут быть указаны как дополнительные опции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Создание бэкапа:&lt;br /&gt;
&lt;br /&gt;
    svacer server backup --user admin --password &amp;lt;password&amp;gt; --pg&lt;br /&gt;
&lt;br /&gt;
Бэкап создается в фоновом процессе, пользователь может продолжать работать с сервером. Результат работы команды состоит из ID бэкапа и времени создания. Эти данные печатаются в stdout&lt;br /&gt;
&lt;br /&gt;
    ID = 23 CREATE_TS = 2022-10-06T06:04:33Z &lt;br /&gt;
&lt;br /&gt;
Для печати списка существующих бэкапов используется команда:&lt;br /&gt;
&lt;br /&gt;
    svacer server backup --user admin --password &amp;lt;password&amp;gt; --list-pg&lt;br /&gt;
&lt;br /&gt;
Результат печатается в stdout и включает ID и время создания бэкапа&lt;br /&gt;
&lt;br /&gt;
    2022-10-06T09:04:36.929+0300    info    Quering server configuration from http://localhost:8080/api/public/server/info&lt;br /&gt;
    2022-10-06T09:04:36.930+0300    info    Server configuration grpc = 3002, rest = 8080&lt;br /&gt;
    2022-10-06T09:04:36.939+0300    info    Logged by user admin&lt;br /&gt;
    2022-10-06T09:04:36.941+0300    info    Backups:&lt;br /&gt;
    ID = 23 CREATE_TS = 2022-10-06T06:04:33Z&lt;br /&gt;
&lt;br /&gt;
Восстановление object store из бэкапа допустимо только при старте сервера. Для этого следует очистить текущий object store (или указать путь на новую директорию) и использовать следующий флаг при старте:&lt;br /&gt;
&lt;br /&gt;
    svacer server --load-from-pg-backup=&amp;lt;id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;id&amp;gt; — ID бэкапа или 0, для использования последнего доступного бэкапа.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для очистки старых бэкапов используется следующая команда:&lt;br /&gt;
&lt;br /&gt;
    svacer server backup --user admin --password &amp;lt;password&amp;gt; --drop-pg=&amp;lt;lower&amp;gt;:&amp;lt;upper&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;lower&amp;gt; и &amp;lt;upper&amp;gt; нижняя и верхняя граница ID бэкапов.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Настоятельно рекомендуется настроить задачу на хосте, где работает Svacer на периодический запуск бэкапа object store в PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Создание резервной копии svacer object store вручную ====&lt;br /&gt;
Создать резервную копию object store также возможно вручную. Для этого достаточно скопировать директорию, в которой object store находится. Перед тем как это делать желательно остановить сервер Svacer в целях обеспечения целостности данных.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Если директория, где хранить &#039;&#039;&#039;object store&#039;&#039;&#039; не была явно указана при запуске сервера, по умолчанию он будет создан в следующей директории:&lt;br /&gt;
&lt;br /&gt;
* ~/.cache/svacer — в OC Linux&lt;br /&gt;
* %LocalAppData%\svacer — в ОС Windows&lt;br /&gt;
&lt;br /&gt;
(например, С:\Users\myusername\AppData\Local\svacer)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При восстановлении из резервной копии следуют поместить файлы object store в директорию по умолчанию (см. выше), либо же в другую директорию и при запуске Svacer указать путь к ней одним из способов:&lt;br /&gt;
&lt;br /&gt;
# Перед запуском Svacer установить переменную окружения  SVACER_OBJECT_STORE, например:&lt;br /&gt;
#: export SVACER_OBJECT_STORE=/home/user/data/object_store&lt;br /&gt;
# При запуске Svacer передать путь к object store в параметре --store, например:&lt;br /&gt;
#: svacer --store /home/user/data/object_store&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При запуске Svacer в docker-контейнере требуется смонтировать директорию с object store в контейнер как volume и указать путь к ней в переменной &#039;&#039;&#039;STORE&#039;&#039;&#039; в файле &#039;&#039;&#039;docker-compose.yml&#039;&#039;&#039;. Допустим, директория с object store была скопирована в &#039;&#039;&#039;/home/user/data/object_store&#039;&#039;&#039;. В таком случае параметры нужно указать следующим образом &lt;br /&gt;
&lt;br /&gt;
    volumes:&lt;br /&gt;
      - /home/user/data:/data&lt;br /&gt;
    environment:&lt;br /&gt;
      - STORE=/data/object_store&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Перенос снимков ===&lt;br /&gt;
Svacer предоставляет возможность по экспорту и импорту снимков посредством интерфейса командной строки и веб-интерфейса.&lt;br /&gt;
Экспорт снимка включает все предупреждения, информацию о снимке, прикрепленные файлы, объект сборки, пользовательские атрибуты, разметку и комментарии. Подавленные предупреждения также включаются в экспортированную информацию и импортируются в статусе подавленных.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Внимание&#039;&#039;&#039;: в текущей версии экспорт снимка из веб-интерфейса доступен всем пользователям с ролью READ для выбранного проекта/ветки. Импорт снимка из веб-интерфейса доступен только пользователям с ролью admin (обычный пользователь не видит секцию с проектами). Экспорт и импорт снимков из интерфейса командной строки доступен пользователям с ролями READ и WRITE для выбранной ветки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Перенос из веб интерфейса ====&lt;br /&gt;
Для экспортирования снимка из пользовательского интерфейса пользователь может использовать кнопку экспорта на панели информации о снимке:&lt;br /&gt;
&lt;br /&gt;
[[File:SnapshotInfo2.png|none|left|alt=SnapshotInfo window]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
либо использовать соответствующую функциональность из панели настроек проектов (требует роль admin):&lt;br /&gt;
&lt;br /&gt;
[[File:CreateNewProject.png|none|left|alt=CreateNewProject window]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Импортирование снимка через пользовательский интерфейс допустимо только для пользователя с ролью «admin». Команда доступна в меню ветки&lt;br /&gt;
&lt;br /&gt;
[[File:BranchMenu.png|none|left|alt=BranchMenu windows]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Задача по экспорту снимка может занимать значительное время (зависит от размера снимка) и выполняется асинхронным образом. Извещение о завершении задачи по экспорту появится в виде всплывающей зеленой панели а так же будет доступно в панели нотификаций:&lt;br /&gt;
&lt;br /&gt;
[[File:Notifications.png|none|left|alt=Notifications window]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:NotificationsClearAll.png|none|left|alt=NotificationsClearAll window]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Перенос из командной строки ====&lt;br /&gt;
Экспорт и импорт снимков из командной строки доступен пользователям с ролями READ и WRITE на проекте или ветке.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Экспорт снимков:&lt;br /&gt;
    svacer server export&lt;br /&gt;
        --user &amp;lt;user&amp;gt; &lt;br /&gt;
        --password &amp;lt;pwd&amp;gt; &lt;br /&gt;
        --host &amp;lt;host&amp;gt; &lt;br /&gt;
        --port &amp;lt;port&amp;gt; &lt;br /&gt;
        --grpc &amp;lt;grpc port&amp;gt; &lt;br /&gt;
        --project &amp;lt;project name or id&amp;gt; &lt;br /&gt;
        --branch &amp;lt;branch name or id&amp;gt; &lt;br /&gt;
        --snapshot &amp;lt;snapshot name or id&amp;gt; &lt;br /&gt;
        &amp;lt;output file name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Импорт снимков:&lt;br /&gt;
    svacer server import&lt;br /&gt;
        --user &amp;lt;user&amp;gt; &lt;br /&gt;
        --password &amp;lt;pwd&amp;gt; &lt;br /&gt;
        --host &amp;lt;host&amp;gt; &lt;br /&gt;
        --port &amp;lt;port&amp;gt; &lt;br /&gt;
        --grpc &amp;lt;grpc port&amp;gt; &lt;br /&gt;
        --project &amp;lt;project name or id&amp;gt; &lt;br /&gt;
        --branch &amp;lt;branch name or id&amp;gt; &lt;br /&gt;
        --name &amp;lt;new name for snapshot&amp;gt;&lt;br /&gt;
        [--force]&lt;br /&gt;
        &amp;lt;input file name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Опция &#039;&#039;&#039;--force&#039;&#039;&#039; создаст проект и ветку, если их не было на сервере.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Перенос Svacer с одного сервера на другой ===&lt;br /&gt;
&lt;br /&gt;
# Создайте резервную копию БД и object store в соответствии с тем, как описано в разделе [[#Создание и восстановление резервной копии|Создание и восстановление резервной копии]].&lt;br /&gt;
# Перенесите созданные файлы резервных копий на нужный сервер&lt;br /&gt;
# Восстановите данные из резервной копии на новом сервере&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[#Top|Вверх]]&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:Installation&amp;diff=291</id>
		<title>Help:Installation</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:Installation&amp;diff=291"/>
		<updated>2022-12-26T14:31:38Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Help:Contents|Все разделы]]&lt;br /&gt;
[[Category:Help]]&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Установка ==&lt;br /&gt;
Для работы сервера необходим PostgreSQL. Его можно установить как пакет, либо запустить в докере — docker-compose файл для этого находится в &#039;&#039;&#039;./extra/docker-compose-postgres.yml&#039;&#039;&#039;.&lt;br /&gt;
Svacer сервер состоит из единственного бинарного файла — &#039;&#039;&#039;svacer&#039;&#039;&#039;. Он предоставляет как backend-часть, так и веб-сервер, который передаёт статику. По умолчанию запускается на порту 8080.&lt;br /&gt;
После запуска по умолчанию создается учётная запись пользователя &#039;&#039;&#039;admin&#039;&#039;&#039; c паролем &#039;&#039;&#039;admin&#039;&#039;&#039;. Изменить пароль можно в веб-интерфейсе.&lt;br /&gt;
Сервер имеет широкие возможности настройки параметров запуска. Узнать о них подробнее можно, прочитав &#039;&#039;&#039;svacer --help&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Установка и запуск из deb/rpm пакета ===&lt;br /&gt;
Процесс установки из .deb и .rpm пакетов несколько различается и будет описан ниже в отдельных главах. Процесс настройки и запуска не различается и будет описан в одной общей главе.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== .deb ====&lt;br /&gt;
Скачайте .deb пакет релиза и выполните следующую команду&lt;br /&gt;
&lt;br /&gt;
    sudo apt install ./svacer_&amp;lt;version&amp;gt;_amd64.deb&lt;br /&gt;
&lt;br /&gt;
При этом, если в репозиториях есть PostgreSQL нужной версии, он будет установлен автоматически. Если нет, то установка завершится с ошибкой о зависимости от PostgreSQL. В этом случае вам надо будет установить PostgreSQL версии не ниже 10-й (см. [https://www.postgresql.org/download/linux/ документацию]), после чего повторить установку Svacer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== .rpm ====&lt;br /&gt;
Установите PostgeSQL версии не ниже 10-й для вашей ОС следуя [https://www.postgresql.org/download/linux/redhat/ документации]. Дополнительно установите пакет postgresql-contrib из тех же репозиториев.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Пример для Centos 7&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm&lt;br /&gt;
    sudo yum install -y postgresql14-server postgresql14-contrib&lt;br /&gt;
    sudo /usr/pgsql-14/bin/postgresql-14-setup initdb&lt;br /&gt;
    sudo systemctl enable postgresql-14&lt;br /&gt;
    sudo systemctl start postgresql-14&lt;br /&gt;
&lt;br /&gt;
Для версий PostgreSQL ниже 13-й требуется явно разрешить подключение к локальному хосту базы с логином/паролем. Для этого проверьте следующие строчки в конце файла &#039;&#039;&#039;/var/lib/pgsql/&amp;lt;version&amp;gt;/data/pg_hba.conf&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
    # IPv4 local connections:&lt;br /&gt;
    host    all    all    127.0.0.1/32    ident&amp;lt;br&amp;gt;&lt;br /&gt;
    # IPv6 local connections:&lt;br /&gt;
    host    all    all    ::1/128         ident&lt;br /&gt;
&lt;br /&gt;
В случае если в последнем столбце указано значение &#039;&#039;&#039;ident&#039;&#039;&#039;, поменяйте его на &#039;&#039;&#039;md5&#039;&#039;&#039; и перезапустите PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
    sudo systemctl restart postgresql-12&lt;br /&gt;
&lt;br /&gt;
Скачайте .rpm пакет релиза Svacer и выполните следующую команду&lt;br /&gt;
&lt;br /&gt;
    sudo yum install ./svacer-&amp;lt;version&amp;gt;.x86_64.rpm&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Настройка и запуск ====&lt;br /&gt;
Процесс настройки и запуска одинаковый для Svacer установленного из .deb и .rpm пакетов.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В процессе установки создаются следующие файлы и директории&lt;br /&gt;
* /etc/default/svacer — конфигурационный файл&lt;br /&gt;
* /var/log/svacer — директория для логов&lt;br /&gt;
* /var/lib/svacer — директория для object store&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После установки Svacer требуется создать пользователя и БД PostgreSQL. Для этого перейдите в пользователя postgres, запустите psql и выполните соответствующие запросы, после чего выйдите из консоли PostgreSQL и из пользователя postgres.&lt;br /&gt;
&lt;br /&gt;
    sudo su -l postgres&lt;br /&gt;
    psql&lt;br /&gt;
    postgres=# create database svace;&lt;br /&gt;
    postgres=# create user svace with encrypted password &#039;svace&#039;;&lt;br /&gt;
    postgres=# grant all privileges on database svace to svace;&lt;br /&gt;
    postgres=# alter user svace superuser;&lt;br /&gt;
&lt;br /&gt;
В данном примере создается БД svace и права на нее выдаются пользователю svace с паролем svace, а также этому пользователю выдаются права суперюзера (это необходимо для создания расширений в PostgreSQL). При использовании этих значений дальнейшая конфигурация не требуется и можно переходить к запуску.&lt;br /&gt;
&lt;br /&gt;
При использовании других имен пользователя, БД или пароля потребуется дополнительная конфигурация перед запуском Svacer: в файле &#039;&#039;&#039;/etc/default/svacer&#039;&#039;&#039; нужно поменять параметры подключения к БД в строке&lt;br /&gt;
&lt;br /&gt;
    SVACER_ARGS=&amp;quot;--pg postgres://&amp;lt;user&amp;gt;:&amp;lt;password&amp;gt;@127.0.0.1:5432/&amp;lt;database&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
В этой же строке можно указывать прочие аргументы для запуска сервера Svacer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После создания БД и настройки конфигурации Svacer запустить его можно следующими командами&lt;br /&gt;
&lt;br /&gt;
    sudo systemctl enable svacer&lt;br /&gt;
    sudo systemctl start svacer&lt;br /&gt;
&lt;br /&gt;
После чего проверить успешность запуска командой&lt;br /&gt;
&lt;br /&gt;
    systemctl status svacer&lt;br /&gt;
&lt;br /&gt;
В случае успешного запуска сервер будет доступен по адресу http://localhost:8080&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При установке из .deb или .rpm пакета Svacer ставится в директорию, прописанную в $PATH, поэтому при запуске Svacer для импорта и загрузки результатов полный путь к исполняемому файлу &#039;&#039;&#039;svacer&#039;&#039;&#039; указывать не требуется, он будет доступен просто по имени.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Запуск в docker ===&lt;br /&gt;
Установите docker и docker-compose. Поскольку образы PostgreSQL и Svacer размещены на докер-хабе, для их скачивания при запуске необходимо наличие интернета.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Используйте для запуска docker-compose файл, находящийся в дистрибутиве Svacer: &#039;&#039;&#039;./extra/docker-compose.yml&#039;&#039;&#039;. Перейдите в директорию, где находится этот файл и выполните команду&lt;br /&gt;
&lt;br /&gt;
    docker-compose up -d&lt;br /&gt;
&lt;br /&gt;
При этом будет запущено два контейнера: PostgreSQL и Svacer. После запуска контейнеров веб-интерфейс Svacer будет доступен по адресу http://localhost:8080&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В процессе запуска в текущей директории будут созданы две директории&lt;br /&gt;
&lt;br /&gt;
* postgres_data — для хранения БД PostgreSQL&lt;br /&gt;
* svacer_data — для object store сервера Svacer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Эти директории будут примонтированы в соответствующие контейнеры как volumes, это необходимо для сохранения данных БД и сервера после остановки или перезапуска контейнеров.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Важное уточнение: в докере запускается только сервер Svacer. Для импорта и загрузки результатов на сервер будет нужен исполняемый файл svacer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Остановить сервер Svacer можно, выполнив следующую команду&lt;br /&gt;
&lt;br /&gt;
    docker-compose down&lt;br /&gt;
&lt;br /&gt;
Также можно запустить в докер-контейнере только PostgreSQL для последующего запуска Svacer вручную. Используйте файл &#039;&#039;&#039;./extra/docker-compose-postgres.yml&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
    docker-compose -f docker-compose-postgres.yml up -d&lt;br /&gt;
&lt;br /&gt;
Чтобы остановить, соответственно&lt;br /&gt;
&lt;br /&gt;
    docker-compose -f docker-compose-postgres.yml down&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Установка и запуск вручную ===&lt;br /&gt;
Для установки Svacer скачайте и распакуйте архив дистрибутива (файл с названием вида &#039;&#039;&#039;svacer_release-&amp;lt;version&amp;gt;.zip&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При использовании PostgreSQL, предварительно настроенного на каком-либо хосте, необходимо использовать соответствующие параметры запуска. Допустим, PostgreSQL работает на локальном хосте, в нем создана БД &#039;&#039;&#039;svacer_db&#039;&#039;&#039;, доступная от пользователя &#039;&#039;&#039;svacer_user&#039;&#039;&#039; с паролем &#039;&#039;&#039;svacer123&#039;&#039;&#039;. В этом случае запустите Svacer со следующими параметрами&lt;br /&gt;
&lt;br /&gt;
    ./bin/svacer server --pg postgres://svacer_user:svacer123@127.0.0.1:5432/svacer_db&lt;br /&gt;
&lt;br /&gt;
Если вы запустили PostgreSQL в докер-контейнере, используя файл &#039;&#039;&#039;./extra/docker-compose-postgres.yml&#039;&#039;&#039;, то при запуске Svacer параметр &#039;&#039;&#039;--pg&#039;&#039;&#039; для подключения к БД можно не указывать, поскольку был создан пользователь и база, прописанные в Svacer как параметры по умолчанию.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После запуска сервера его веб-интерфейс будет доступен по адресу http://localhost:8080&lt;br /&gt;
По умолчанию web сервер запускается на интерфейсе &#039;&#039;&#039;0.0.0.0:&amp;lt;port&amp;gt;&#039;&#039;&#039;. Для указания отличного  сетевого интерфейса пользователь может использовать опцию &#039;&#039;&#039;--listen &amp;lt;network interface&amp;gt;&#039;&#039;&#039;.&lt;br /&gt;
По умолчанию grpc сервер запускается на интерфейсе &#039;&#039;&#039;0.0.0.0:&amp;lt;port&amp;gt;&#039;&#039;&#039;. Для указания отличного сетевого интерфейса пользователь может использовать опцию &#039;&#039;&#039;--listen-grpc &amp;lt;network interface&amp;gt;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Hooks ===&lt;br /&gt;
Для получения данных Hooks при запуске сервера нужно указать опцию &#039;&#039;&#039;--hooks &amp;lt;path to JSON file&amp;gt;&#039;&#039;&#039;. Эта опция задаёт файл, содержащий информацию о расширении сервера посредством хуков, которые пользователь может вызывать из web-интерфейса. &lt;br /&gt;
Каждый хук соответствует некоторому процессу или скрипту, который сервер запускает в ответ на вызов соответствующей команды из web-интерфейса.&lt;br /&gt;
Формат файла Hooks следующий:&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;hooks&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;id&amp;quot;: &amp;quot;&amp;lt;id&amp;gt;&amp;quot;,&lt;br /&gt;
          &amp;quot;label&amp;quot;: &amp;quot;&amp;lt;label &amp;gt;&amp;quot;,&lt;br /&gt;
          &amp;quot;target&amp;quot;: &amp;quot;&amp;lt;target&amp;gt;&amp;quot;,&lt;br /&gt;
          &amp;quot;input&amp;quot;: [&amp;quot;&amp;lt;param1&amp;gt;&amp;quot;, &amp;quot;&amp;lt;param2&amp;gt;&amp;quot;,…],&lt;br /&gt;
          &amp;quot;cmd&amp;quot;: &amp;quot;&amp;lt;path to executable&amp;gt;&amp;quot;,&lt;br /&gt;
          &amp;quot;args&amp;quot;: [&amp;quot;&amp;lt;arg1&amp;gt;&amp;quot;, “&amp;lt;arg2&amp;gt;”, …]&lt;br /&gt;
        },&lt;br /&gt;
        ...&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметры Hooks&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:100px;&amp;quot; | Параметр || Описание&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;id&#039;&#039;&lt;br /&gt;
| Идентификатор хука.&amp;lt;br&amp;gt;Должен быть уникальным в файле&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;label&#039;&#039;&lt;br /&gt;
| Имя команды, которую пользователь видит в web-интерфейсе&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;target&#039;&#039;&lt;br /&gt;
| Место в UI, в которое будет добавлена команда.&amp;lt;br&amp;gt;&lt;br /&gt;
Сейчас поддерживается только одно значение — default. Оно соответствует вкладке Details на правой панели пользовательского интерфейса&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;input&#039;&#039;&lt;br /&gt;
| Параметры, которые можно передать в запускаемый процесс, исходя из контекста вызова команды в web-интерфейсе.&amp;lt;br&amp;gt;&lt;br /&gt;
Поддерживаемые значения:&lt;br /&gt;
* markerID — UUID идентификатор маркера;&lt;br /&gt;
* branchID — UUID идентификатор ветки;&lt;br /&gt;
* snapshotID — UUID идентификатор снимка;&lt;br /&gt;
* projectID — UUID идентификатор проекта;&lt;br /&gt;
* url — URL маркера в web-интерфейсе, на котором была вызвана команда;&lt;br /&gt;
* marker — будет заменен на полное имя временного файла, содержащего сериализованное в JSON представление маркера, который включает в себя его трассу и информацию о разметке&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;cmd&#039;&#039;&lt;br /&gt;
| Полный путь к процессу, который будет запущен. Не должен включать аргументы запуска&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;args&#039;&#039;&lt;br /&gt;
| Аргументы, передаваемые в запускаемый процесс. Полный список аргументов запускаемого процесса состоит из списка &amp;lt;args&amp;gt; и списка значений, соответствующих полю &amp;lt;input&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[#Top|Вверх]]&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:Introduction&amp;diff=290</id>
		<title>Help:Introduction</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:Introduction&amp;diff=290"/>
		<updated>2022-12-26T14:30:16Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Help:Contents|Все разделы]]&lt;br /&gt;
[[Category:Help]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Введение ==&lt;br /&gt;
Сервер историй &#039;&#039;&#039;Svacer&#039;&#039;&#039; (&#039;&#039;&#039;&#039;&#039;Svace Server&#039;&#039;&#039;&#039;&#039;) предназначен для хранения и обработки результатов работы статического анализатора Svace. Он разработан с целью заменить старый сервер историй, встроенный в анализатор Svace. &lt;br /&gt;
Допускается одновременное использование старого и нового серверов.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Термины ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Project&#039;&#039; &lt;br /&gt;
| Проект, подлежащий анализу. По умолчанию именем проекта считается имя директории, в которой был запущен &#039;&#039;svace build&#039;&#039; и &#039;&#039;svace analyze&#039;&#039;.&lt;br /&gt;
На сервере проект содержит в себе несколько &#039;&#039;&#039;branch&#039;&#039;&#039; с результатами работы анализатора&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Branch (ветка)&#039;&#039;&lt;br /&gt;
| Ветка в проекте с результатами работы анализатора. По умолчанию проект имеет одну ветку — master&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Snapshot (снимок)&#039;&#039;&lt;br /&gt;
| Результат работы &#039;&#039;svace analyze&#039;&#039;, импортированный в промежуточное хранилище или на сервер. Содержит:&lt;br /&gt;
* имя проекта;&lt;br /&gt;
* имя ветки;&lt;br /&gt;
* результаты анализа (предупреждения);&lt;br /&gt;
* исходники, которые были включены в build, на котором производился анализ;&lt;br /&gt;
* вспомогательная информация для навигации по исходникам;&lt;br /&gt;
* дополнительные данные;&lt;br /&gt;
Допускается импортирование снимков без исходного кода и дополнительной информации&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Marker (маркер, предупреждение)&#039;&#039;&lt;br /&gt;
| Предупреждение от Svace с информацией о позиции в исходном файле&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Svacer&#039;&#039;&lt;br /&gt;
| Svace History Server, а также исполняемый файл, содержащий код сервера&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Разметка&#039;&#039;&lt;br /&gt;
| Проставление статуса маркера с опциональным добавлением комментария&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Состав дистрибутива ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;bin/svacer&amp;lt;br&amp;gt;bin/svacer.exe&#039;&#039;&#039;&lt;br /&gt;
| Бинарный файл сервера и утилита для импортирования результатов. Режим работы зависит от аргументов&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;support/svace-migration/svace-migration.jar&#039;&#039;&#039;&lt;br /&gt;
| Утилита подготовки данных для импорта из старого сервера историй. &lt;br /&gt;
Требует JDK для запуска. Может использоваться JDK из состава дистрибутива Svace&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;extra/docker-compose*.yml&#039;&#039;&#039; || Docker-compose файлы для запуска БД PostgreSQL и Svacer в docker-контейнерах&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;integrations/vscode&#039;&#039;&#039; || Расширение для Visual Studio Code и документация на него&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Зависимости ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
| PostgreSQL&lt;br /&gt;
версии не ниже 10-й&lt;br /&gt;
| Параметры подключения определяются аргументом при запуске сервера или переменной окружения SVACER_PG_URL. По умолчанию, используется следующий connect URL:&lt;br /&gt;
&#039;&#039;&#039;postgres://svace:svace@0.0.0.0:5432/svace&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Можно использовать PostgreSQL в docker-контейнере.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Настоятельно рекомендуем&#039;&#039;&#039; использовать выделенный сервер для хранения БД, особенно в production&lt;br /&gt;
|-&lt;br /&gt;
| libc.so&amp;lt;br&amp;gt;libpthread.so&amp;lt;br&amp;gt;libdl.so&amp;lt;br&amp;gt;linux-vdso.so&lt;br /&gt;
| Серверная часть написана на Go с CGO_ENABLED=1 ввиду необходимости читать sqlite-файлы из результатов работы анализатора Svace&lt;br /&gt;
|-&lt;br /&gt;
| Выделенная директория для хранения object storage&lt;br /&gt;
| Сервер использует встроенную key-value database для хранения информации об исходном коде: контент-файлов и вспомогательной информации для навигации&lt;br /&gt;
|-&lt;br /&gt;
| svace&lt;br /&gt;
| Для импорта данных на сервер историй требуется наличие Svace на хосте, откуда происходит импорт. Svace используется для получения информации из .svace-dir&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Используемые порты ===&lt;br /&gt;
&lt;br /&gt;
Приведены значения по умолчанию. Все значения могут быть переопределены.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 3002&lt;br /&gt;
| Используется для предоставления gRPC API.&lt;br /&gt;
gRPC API является внутренним и предназначен для загрузки данных на сервер&lt;br /&gt;
|-&lt;br /&gt;
| 8080&lt;br /&gt;
| Используется для предоставления REST API и web-сервера для предоставления web-UI&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[#Top|Вверх]]&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:Introduction&amp;diff=289</id>
		<title>Help:Introduction</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:Introduction&amp;diff=289"/>
		<updated>2022-12-26T14:29:58Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Contents|Все разделы]]&lt;br /&gt;
[[Category:Help]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Введение ==&lt;br /&gt;
Сервер историй &#039;&#039;&#039;Svacer&#039;&#039;&#039; (&#039;&#039;&#039;&#039;&#039;Svace Server&#039;&#039;&#039;&#039;&#039;) предназначен для хранения и обработки результатов работы статического анализатора Svace. Он разработан с целью заменить старый сервер историй, встроенный в анализатор Svace. &lt;br /&gt;
Допускается одновременное использование старого и нового серверов.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Термины ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Project&#039;&#039; &lt;br /&gt;
| Проект, подлежащий анализу. По умолчанию именем проекта считается имя директории, в которой был запущен &#039;&#039;svace build&#039;&#039; и &#039;&#039;svace analyze&#039;&#039;.&lt;br /&gt;
На сервере проект содержит в себе несколько &#039;&#039;&#039;branch&#039;&#039;&#039; с результатами работы анализатора&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Branch (ветка)&#039;&#039;&lt;br /&gt;
| Ветка в проекте с результатами работы анализатора. По умолчанию проект имеет одну ветку — master&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Snapshot (снимок)&#039;&#039;&lt;br /&gt;
| Результат работы &#039;&#039;svace analyze&#039;&#039;, импортированный в промежуточное хранилище или на сервер. Содержит:&lt;br /&gt;
* имя проекта;&lt;br /&gt;
* имя ветки;&lt;br /&gt;
* результаты анализа (предупреждения);&lt;br /&gt;
* исходники, которые были включены в build, на котором производился анализ;&lt;br /&gt;
* вспомогательная информация для навигации по исходникам;&lt;br /&gt;
* дополнительные данные;&lt;br /&gt;
Допускается импортирование снимков без исходного кода и дополнительной информации&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Marker (маркер, предупреждение)&#039;&#039;&lt;br /&gt;
| Предупреждение от Svace с информацией о позиции в исходном файле&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Svacer&#039;&#039;&lt;br /&gt;
| Svace History Server, а также исполняемый файл, содержащий код сервера&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Разметка&#039;&#039;&lt;br /&gt;
| Проставление статуса маркера с опциональным добавлением комментария&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Состав дистрибутива ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;bin/svacer&amp;lt;br&amp;gt;bin/svacer.exe&#039;&#039;&#039;&lt;br /&gt;
| Бинарный файл сервера и утилита для импортирования результатов. Режим работы зависит от аргументов&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;support/svace-migration/svace-migration.jar&#039;&#039;&#039;&lt;br /&gt;
| Утилита подготовки данных для импорта из старого сервера историй. &lt;br /&gt;
Требует JDK для запуска. Может использоваться JDK из состава дистрибутива Svace&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;extra/docker-compose*.yml&#039;&#039;&#039; || Docker-compose файлы для запуска БД PostgreSQL и Svacer в docker-контейнерах&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;integrations/vscode&#039;&#039;&#039; || Расширение для Visual Studio Code и документация на него&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Зависимости ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
| PostgreSQL&lt;br /&gt;
версии не ниже 10-й&lt;br /&gt;
| Параметры подключения определяются аргументом при запуске сервера или переменной окружения SVACER_PG_URL. По умолчанию, используется следующий connect URL:&lt;br /&gt;
&#039;&#039;&#039;postgres://svace:svace@0.0.0.0:5432/svace&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Можно использовать PostgreSQL в docker-контейнере.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Настоятельно рекомендуем&#039;&#039;&#039; использовать выделенный сервер для хранения БД, особенно в production&lt;br /&gt;
|-&lt;br /&gt;
| libc.so&amp;lt;br&amp;gt;libpthread.so&amp;lt;br&amp;gt;libdl.so&amp;lt;br&amp;gt;linux-vdso.so&lt;br /&gt;
| Серверная часть написана на Go с CGO_ENABLED=1 ввиду необходимости читать sqlite-файлы из результатов работы анализатора Svace&lt;br /&gt;
|-&lt;br /&gt;
| Выделенная директория для хранения object storage&lt;br /&gt;
| Сервер использует встроенную key-value database для хранения информации об исходном коде: контент-файлов и вспомогательной информации для навигации&lt;br /&gt;
|-&lt;br /&gt;
| svace&lt;br /&gt;
| Для импорта данных на сервер историй требуется наличие Svace на хосте, откуда происходит импорт. Svace используется для получения информации из .svace-dir&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Используемые порты ===&lt;br /&gt;
&lt;br /&gt;
Приведены значения по умолчанию. Все значения могут быть переопределены.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 3002&lt;br /&gt;
| Используется для предоставления gRPC API.&lt;br /&gt;
gRPC API является внутренним и предназначен для загрузки данных на сервер&lt;br /&gt;
|-&lt;br /&gt;
| 8080&lt;br /&gt;
| Используется для предоставления REST API и web-сервера для предоставления web-UI&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[#Top|Вверх]]&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:Installation&amp;diff=276</id>
		<title>Help:Installation</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:Installation&amp;diff=276"/>
		<updated>2022-12-19T15:46:24Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Help]]&lt;br /&gt;
[[:Category:Help]]&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Введение ==&lt;br /&gt;
[[Help:Introduction#Введение|[ Перейти ]]]&lt;br /&gt;
&lt;br /&gt;
== Установка ==&lt;br /&gt;
Для работы сервера необходим PostgreSQL. Его можно установить как пакет, либо запустить в докере — docker-compose файл для этого находится в &#039;&#039;&#039;./extra/docker-compose-postgres.yml&#039;&#039;&#039;.&lt;br /&gt;
Svacer сервер состоит из единственного бинарного файла — &#039;&#039;&#039;svacer&#039;&#039;&#039;. Он предоставляет как backend-часть, так и веб-сервер, который передаёт статику. По умолчанию запускается на порту 8080.&lt;br /&gt;
После запуска по умолчанию создается учётная запись пользователя &#039;&#039;&#039;admin&#039;&#039;&#039; c паролем &#039;&#039;&#039;admin&#039;&#039;&#039;. Изменить пароль можно в веб-интерфейсе.&lt;br /&gt;
Сервер имеет широкие возможности настройки параметров запуска. Узнать о них подробнее можно, прочитав &#039;&#039;&#039;svacer --help&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Установка и запуск из deb/rpm пакета ===&lt;br /&gt;
Процесс установки из .deb и .rpm пакетов несколько различается и будет описан ниже в отдельных главах. Процесс настройки и запуска не различается и будет описан в одной общей главе.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== .deb ====&lt;br /&gt;
Скачайте .deb пакет релиза и выполните следующую команду&lt;br /&gt;
&lt;br /&gt;
    sudo apt install ./svacer_&amp;lt;version&amp;gt;_amd64.deb&lt;br /&gt;
&lt;br /&gt;
При этом, если в репозиториях есть PostgreSQL нужной версии, он будет установлен автоматически. Если нет, то установка завершится с ошибкой о зависимости от PostgreSQL. В этом случае вам надо будет установить PostgreSQL версии не ниже 10-й (см. [https://www.postgresql.org/download/linux/ документацию]), после чего повторить установку Svacer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== .rpm ====&lt;br /&gt;
Установите PostgeSQL версии не ниже 10-й для вашей ОС следуя [https://www.postgresql.org/download/linux/redhat/ документации]. Дополнительно установите пакет postgresql-contrib из тех же репозиториев.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Пример для Centos 7&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm&lt;br /&gt;
    sudo yum install -y postgresql14-server postgresql14-contrib&lt;br /&gt;
    sudo /usr/pgsql-14/bin/postgresql-14-setup initdb&lt;br /&gt;
    sudo systemctl enable postgresql-14&lt;br /&gt;
    sudo systemctl start postgresql-14&lt;br /&gt;
&lt;br /&gt;
Для версий PostgreSQL ниже 13-й требуется явно разрешить подключение к локальному хосту базы с логином/паролем. Для этого проверьте следующие строчки в конце файла &#039;&#039;&#039;/var/lib/pgsql/&amp;lt;version&amp;gt;/data/pg_hba.conf&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
    # IPv4 local connections:&lt;br /&gt;
    host    all    all    127.0.0.1/32    ident&amp;lt;br&amp;gt;&lt;br /&gt;
    # IPv6 local connections:&lt;br /&gt;
    host    all    all    ::1/128         ident&lt;br /&gt;
&lt;br /&gt;
В случае если в последнем столбце указано значение &#039;&#039;&#039;ident&#039;&#039;&#039;, поменяйте его на &#039;&#039;&#039;md5&#039;&#039;&#039; и перезапустите PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
    sudo systemctl restart postgresql-12&lt;br /&gt;
&lt;br /&gt;
Скачайте .rpm пакет релиза Svacer и выполните следующую команду&lt;br /&gt;
&lt;br /&gt;
    sudo yum install ./svacer-&amp;lt;version&amp;gt;.x86_64.rpm&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Настройка и запуск ====&lt;br /&gt;
Процесс настройки и запуска одинаковый для Svacer установленного из .deb и .rpm пакетов.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В процессе установки создаются следующие файлы и директории&lt;br /&gt;
* /etc/default/svacer — конфигурационный файл&lt;br /&gt;
* /var/log/svacer — директория для логов&lt;br /&gt;
* /var/lib/svacer — директория для object store&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После установки Svacer требуется создать пользователя и БД PostgreSQL. Для этого перейдите в пользователя postgres, запустите psql и выполните соответствующие запросы, после чего выйдите из консоли PostgreSQL и из пользователя postgres.&lt;br /&gt;
&lt;br /&gt;
    sudo su -l postgres&lt;br /&gt;
    psql&lt;br /&gt;
    postgres=# create database svace;&lt;br /&gt;
    postgres=# create user svace with encrypted password &#039;svace&#039;;&lt;br /&gt;
    postgres=# grant all privileges on database svace to svace;&lt;br /&gt;
    postgres=# alter user svace superuser;&lt;br /&gt;
&lt;br /&gt;
В данном примере создается БД svace и права на нее выдаются пользователю svace с паролем svace, а также этому пользователю выдаются права суперюзера (это необходимо для создания расширений в PostgreSQL). При использовании этих значений дальнейшая конфигурация не требуется и можно переходить к запуску.&lt;br /&gt;
&lt;br /&gt;
При использовании других имен пользователя, БД или пароля потребуется дополнительная конфигурация перед запуском Svacer: в файле &#039;&#039;&#039;/etc/default/svacer&#039;&#039;&#039; нужно поменять параметры подключения к БД в строке&lt;br /&gt;
&lt;br /&gt;
    SVACER_ARGS=&amp;quot;--pg postgres://&amp;lt;user&amp;gt;:&amp;lt;password&amp;gt;@127.0.0.1:5432/&amp;lt;database&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
В этой же строке можно указывать прочие аргументы для запуска сервера Svacer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После создания БД и настройки конфигурации Svacer запустить его можно следующими командами&lt;br /&gt;
&lt;br /&gt;
    sudo systemctl enable svacer&lt;br /&gt;
    sudo systemctl start svacer&lt;br /&gt;
&lt;br /&gt;
После чего проверить успешность запуска командой&lt;br /&gt;
&lt;br /&gt;
    systemctl status svacer&lt;br /&gt;
&lt;br /&gt;
В случае успешного запуска сервер будет доступен по адресу http://localhost:8080&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При установке из .deb или .rpm пакета Svacer ставится в директорию, прописанную в $PATH, поэтому при запуске Svacer для импорта и загрузки результатов полный путь к исполняемому файлу &#039;&#039;&#039;svacer&#039;&#039;&#039; указывать не требуется, он будет доступен просто по имени.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Запуск в docker ===&lt;br /&gt;
Установите docker и docker-compose. Поскольку образы PostgreSQL и Svacer размещены на докер-хабе, для их скачивания при запуске необходимо наличие интернета.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Используйте для запуска docker-compose файл, находящийся в дистрибутиве Svacer: &#039;&#039;&#039;./extra/docker-compose.yml&#039;&#039;&#039;. Перейдите в директорию, где находится этот файл и выполните команду&lt;br /&gt;
&lt;br /&gt;
    docker-compose up -d&lt;br /&gt;
&lt;br /&gt;
При этом будет запущено два контейнера: PostgreSQL и Svacer. После запуска контейнеров веб-интерфейс Svacer будет доступен по адресу http://localhost:8080&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В процессе запуска в текущей директории будут созданы две директории&lt;br /&gt;
&lt;br /&gt;
* postgres_data — для хранения БД PostgreSQL&lt;br /&gt;
* svacer_data — для object store сервера Svacer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Эти директории будут примонтированы в соответствующие контейнеры как volumes, это необходимо для сохранения данных БД и сервера после остановки или перезапуска контейнеров.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Важное уточнение: в докере запускается только сервер Svacer. Для импорта и загрузки результатов на сервер будет нужен исполняемый файл svacer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Остановить сервер Svacer можно, выполнив следующую команду&lt;br /&gt;
&lt;br /&gt;
    docker-compose down&lt;br /&gt;
&lt;br /&gt;
Также можно запустить в докер-контейнере только PostgreSQL для последующего запуска Svacer вручную. Используйте файл &#039;&#039;&#039;./extra/docker-compose-postgres.yml&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
    docker-compose -f docker-compose-postgres.yml up -d&lt;br /&gt;
&lt;br /&gt;
Чтобы остановить, соответственно&lt;br /&gt;
&lt;br /&gt;
    docker-compose -f docker-compose-postgres.yml down&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Установка и запуск вручную ===&lt;br /&gt;
Для установки Svacer скачайте и распакуйте архив дистрибутива (файл с названием вида &#039;&#039;&#039;svacer_release-&amp;lt;version&amp;gt;.zip&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При использовании PostgreSQL, предварительно настроенного на каком-либо хосте, необходимо использовать соответствующие параметры запуска. Допустим, PostgreSQL работает на локальном хосте, в нем создана БД &#039;&#039;&#039;svacer_db&#039;&#039;&#039;, доступная от пользователя &#039;&#039;&#039;svacer_user&#039;&#039;&#039; с паролем &#039;&#039;&#039;svacer123&#039;&#039;&#039;. В этом случае запустите Svacer со следующими параметрами&lt;br /&gt;
&lt;br /&gt;
    ./bin/svacer server --pg postgres://svacer_user:svacer123@127.0.0.1:5432/svacer_db&lt;br /&gt;
&lt;br /&gt;
Если вы запустили PostgreSQL в докер-контейнере, используя файл &#039;&#039;&#039;./extra/docker-compose-postgres.yml&#039;&#039;&#039;, то при запуске Svacer параметр &#039;&#039;&#039;--pg&#039;&#039;&#039; для подключения к БД можно не указывать, поскольку был создан пользователь и база, прописанные в Svacer как параметры по умолчанию.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После запуска сервера его веб-интерфейс будет доступен по адресу http://localhost:8080&lt;br /&gt;
По умолчанию web сервер запускается на интерфейсе &#039;&#039;&#039;0.0.0.0:&amp;lt;port&amp;gt;&#039;&#039;&#039;. Для указания отличного  сетевого интерфейса пользователь может использовать опцию &#039;&#039;&#039;--listen &amp;lt;network interface&amp;gt;&#039;&#039;&#039;.&lt;br /&gt;
По умолчанию grpc сервер запускается на интерфейсе &#039;&#039;&#039;0.0.0.0:&amp;lt;port&amp;gt;&#039;&#039;&#039;. Для указания отличного сетевого интерфейса пользователь может использовать опцию &#039;&#039;&#039;--listen-grpc &amp;lt;network interface&amp;gt;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Hooks ===&lt;br /&gt;
Для получения данных Hooks при запуске сервера нужно указать опцию &#039;&#039;&#039;--hooks &amp;lt;path to JSON file&amp;gt;&#039;&#039;&#039;. Эта опция задаёт файл, содержащий информацию о расширении сервера посредством хуков, которые пользователь может вызывать из web-интерфейса. &lt;br /&gt;
Каждый хук соответствует некоторому процессу или скрипту, который сервер запускает в ответ на вызов соответствующей команды из web-интерфейса.&lt;br /&gt;
Формат файла Hooks следующий:&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;hooks&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;id&amp;quot;: &amp;quot;&amp;lt;id&amp;gt;&amp;quot;,&lt;br /&gt;
          &amp;quot;label&amp;quot;: &amp;quot;&amp;lt;label &amp;gt;&amp;quot;,&lt;br /&gt;
          &amp;quot;target&amp;quot;: &amp;quot;&amp;lt;target&amp;gt;&amp;quot;,&lt;br /&gt;
          &amp;quot;input&amp;quot;: [&amp;quot;&amp;lt;param1&amp;gt;&amp;quot;, &amp;quot;&amp;lt;param2&amp;gt;&amp;quot;,…],&lt;br /&gt;
          &amp;quot;cmd&amp;quot;: &amp;quot;&amp;lt;path to executable&amp;gt;&amp;quot;,&lt;br /&gt;
          &amp;quot;args&amp;quot;: [&amp;quot;&amp;lt;arg1&amp;gt;&amp;quot;, “&amp;lt;arg2&amp;gt;”, …]&lt;br /&gt;
        },&lt;br /&gt;
        ...&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Параметры Hooks&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:100px;&amp;quot; | Параметр || Описание&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;id&#039;&#039;&lt;br /&gt;
| Идентификатор хука.&amp;lt;br&amp;gt;Должен быть уникальным в файле&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;label&#039;&#039;&lt;br /&gt;
| Имя команды, которую пользователь видит в web-интерфейсе&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;target&#039;&#039;&lt;br /&gt;
| Место в UI, в которое будет добавлена команда.&amp;lt;br&amp;gt;&lt;br /&gt;
Сейчас поддерживается только одно значение — default. Оно соответствует вкладке Details на правой панели пользовательского интерфейса&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;input&#039;&#039;&lt;br /&gt;
| Параметры, которые можно передать в запускаемый процесс, исходя из контекста вызова команды в web-интерфейсе.&amp;lt;br&amp;gt;&lt;br /&gt;
Поддерживаемые значения:&lt;br /&gt;
* markerID — UUID идентификатор маркера;&lt;br /&gt;
* branchID — UUID идентификатор ветки;&lt;br /&gt;
* snapshotID — UUID идентификатор снимка;&lt;br /&gt;
* projectID — UUID идентификатор проекта;&lt;br /&gt;
* url — URL маркера в web-интерфейсе, на котором была вызвана команда;&lt;br /&gt;
* marker — будет заменен на полное имя временного файла, содержащего сериализованное в JSON представление маркера, который включает в себя его трассу и информацию о разметке&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;cmd&#039;&#039;&lt;br /&gt;
| Полный путь к процессу, который будет запущен. Не должен включать аргументы запуска&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;args&#039;&#039;&lt;br /&gt;
| Аргументы, передаваемые в запускаемый процесс. Полный список аргументов запускаемого процесса состоит из списка &amp;lt;args&amp;gt; и списка значений, соответствующих полю &amp;lt;input&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[#Top|Вверх]]&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:Introduction&amp;diff=275</id>
		<title>Help:Introduction</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:Introduction&amp;diff=275"/>
		<updated>2022-12-19T15:46:02Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Help]]&lt;br /&gt;
[[:Category:Help]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Введение ==&lt;br /&gt;
Сервер историй &#039;&#039;&#039;Svacer&#039;&#039;&#039; (&#039;&#039;&#039;&#039;&#039;Svace Server&#039;&#039;&#039;&#039;&#039;) предназначен для хранения и обработки результатов работы статического анализатора Svace. Он разработан с целью заменить старый сервер историй, встроенный в анализатор Svace. &lt;br /&gt;
Допускается одновременное использование старого и нового серверов.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Термины ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Project&#039;&#039; &lt;br /&gt;
| Проект, подлежащий анализу. По умолчанию именем проекта считается имя директории, в которой был запущен &#039;&#039;svace build&#039;&#039; и &#039;&#039;svace analyze&#039;&#039;.&lt;br /&gt;
На сервере проект содержит в себе несколько &#039;&#039;&#039;branch&#039;&#039;&#039; с результатами работы анализатора&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Branch (ветка)&#039;&#039;&lt;br /&gt;
| Ветка в проекте с результатами работы анализатора. По умолчанию проект имеет одну ветку — master&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Snapshot (снимок)&#039;&#039;&lt;br /&gt;
| Результат работы &#039;&#039;svace analyze&#039;&#039;, импортированный в промежуточное хранилище или на сервер. Содержит:&lt;br /&gt;
* имя проекта;&lt;br /&gt;
* имя ветки;&lt;br /&gt;
* результаты анализа (предупреждения);&lt;br /&gt;
* исходники, которые были включены в build, на котором производился анализ;&lt;br /&gt;
* вспомогательная информация для навигации по исходникам;&lt;br /&gt;
* дополнительные данные;&lt;br /&gt;
Допускается импортирование снимков без исходного кода и дополнительной информации&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Marker (маркер, предупреждение)&#039;&#039;&lt;br /&gt;
| Предупреждение от Svace с информацией о позиции в исходном файле&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Svacer&#039;&#039;&lt;br /&gt;
| Svace History Server, а также исполняемый файл, содержащий код сервера&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Разметка&#039;&#039;&lt;br /&gt;
| Проставление статуса маркера с опциональным добавлением комментария&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Состав дистрибутива ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;bin/svacer&amp;lt;br&amp;gt;bin/svacer.exe&#039;&#039;&#039;&lt;br /&gt;
| Бинарный файл сервера и утилита для импортирования результатов. Режим работы зависит от аргументов&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;support/svace-migration/svace-migration.jar&#039;&#039;&#039;&lt;br /&gt;
| Утилита подготовки данных для импорта из старого сервера историй. &lt;br /&gt;
Требует JDK для запуска. Может использоваться JDK из состава дистрибутива Svace&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;extra/docker-compose*.yml&#039;&#039;&#039; || Docker-compose файлы для запуска БД PostgreSQL и Svacer в docker-контейнерах&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;integrations/vscode&#039;&#039;&#039; || Расширение для Visual Studio Code и документация на него&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Зависимости ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
| PostgreSQL&lt;br /&gt;
версии не ниже 10-й&lt;br /&gt;
| Параметры подключения определяются аргументом при запуске сервера или переменной окружения SVACER_PG_URL. По умолчанию, используется следующий connect URL:&lt;br /&gt;
&#039;&#039;&#039;postgres://svace:svace@0.0.0.0:5432/svace&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Можно использовать PostgreSQL в docker-контейнере.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Настоятельно рекомендуем&#039;&#039;&#039; использовать выделенный сервер для хранения БД, особенно в production&lt;br /&gt;
|-&lt;br /&gt;
| libc.so&amp;lt;br&amp;gt;libpthread.so&amp;lt;br&amp;gt;libdl.so&amp;lt;br&amp;gt;linux-vdso.so&lt;br /&gt;
| Серверная часть написана на Go с CGO_ENABLED=1 ввиду необходимости читать sqlite-файлы из результатов работы анализатора Svace&lt;br /&gt;
|-&lt;br /&gt;
| Выделенная директория для хранения object storage&lt;br /&gt;
| Сервер использует встроенную key-value database для хранения информации об исходном коде: контент-файлов и вспомогательной информации для навигации&lt;br /&gt;
|-&lt;br /&gt;
| svace&lt;br /&gt;
| Для импорта данных на сервер историй требуется наличие Svace на хосте, откуда происходит импорт. Svace используется для получения информации из .svace-dir&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Используемые порты ===&lt;br /&gt;
&lt;br /&gt;
Приведены значения по умолчанию. Все значения могут быть переопределены.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 3002&lt;br /&gt;
| Используется для предоставления gRPC API.&lt;br /&gt;
gRPC API является внутренним и предназначен для загрузки данных на сервер&lt;br /&gt;
|-&lt;br /&gt;
| 8080&lt;br /&gt;
| Используется для предоставления REST API и web-сервера для предоставления web-UI&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[#Top|Вверх]]&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:MarkupCopingBranch.png&amp;diff=266</id>
		<title>File:MarkupCopingBranch.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:MarkupCopingBranch.png&amp;diff=266"/>
		<updated>2022-12-19T14:50:25Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MarkupCopingBranch&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:ChangeUserProfile.png&amp;diff=262</id>
		<title>File:ChangeUserProfile.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:ChangeUserProfile.png&amp;diff=262"/>
		<updated>2022-12-19T14:29:32Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ChangeUserProfile&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:LdapServerChoose.png&amp;diff=261</id>
		<title>File:LdapServerChoose.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:LdapServerChoose.png&amp;diff=261"/>
		<updated>2022-12-19T14:25:26Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;LdapServerChoose&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:LdapServerAdded.png&amp;diff=260</id>
		<title>File:LdapServerAdded.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:LdapServerAdded.png&amp;diff=260"/>
		<updated>2022-12-19T14:24:52Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;LdapServerAdded&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:MarkupTemplateEditing.png&amp;diff=259</id>
		<title>File:MarkupTemplateEditing.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:MarkupTemplateEditing.png&amp;diff=259"/>
		<updated>2022-12-19T14:21:38Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MarkupTemplateEditing&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:MarkupTemplates.png&amp;diff=258</id>
		<title>File:MarkupTemplates.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:MarkupTemplates.png&amp;diff=258"/>
		<updated>2022-12-19T14:20:12Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MarkupTemplates&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:MarkupCoping.png&amp;diff=257</id>
		<title>File:MarkupCoping.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:MarkupCoping.png&amp;diff=257"/>
		<updated>2022-12-19T14:18:20Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MarkupCoping&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:ServerInfo.png&amp;diff=256</id>
		<title>File:ServerInfo.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:ServerInfo.png&amp;diff=256"/>
		<updated>2022-12-19T14:13:44Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ServerInfo&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:ProjectBranchesFilters.png&amp;diff=255</id>
		<title>File:ProjectBranchesFilters.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:ProjectBranchesFilters.png&amp;diff=255"/>
		<updated>2022-12-19T14:12:34Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ProjectBranchesFilters&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:SnapshotImport.png&amp;diff=254</id>
		<title>File:SnapshotImport.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:SnapshotImport.png&amp;diff=254"/>
		<updated>2022-12-19T14:11:12Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SnapshotImport&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:ProjectsList.png&amp;diff=250</id>
		<title>File:ProjectsList.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:ProjectsList.png&amp;diff=250"/>
		<updated>2022-12-19T11:47:43Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ProjectsList&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:UnzipButton.png&amp;diff=246</id>
		<title>File:UnzipButton.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:UnzipButton.png&amp;diff=246"/>
		<updated>2022-12-19T11:21:57Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;UnzipButton&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:ArchiveButton.png&amp;diff=245</id>
		<title>File:ArchiveButton.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:ArchiveButton.png&amp;diff=245"/>
		<updated>2022-12-19T11:20:22Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ArchiveButton&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:CreateNewRole.png&amp;diff=244</id>
		<title>File:CreateNewRole.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:CreateNewRole.png&amp;diff=244"/>
		<updated>2022-12-19T11:16:15Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CreateNewRole&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:ChangePassword.png&amp;diff=243</id>
		<title>File:ChangePassword.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:ChangePassword.png&amp;diff=243"/>
		<updated>2022-12-19T11:13:56Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ChangePassword&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:AddUser.png&amp;diff=242</id>
		<title>File:AddUser.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:AddUser.png&amp;diff=242"/>
		<updated>2022-12-19T11:13:07Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;AddUser&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:KeyButton.png&amp;diff=240</id>
		<title>File:KeyButton.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:KeyButton.png&amp;diff=240"/>
		<updated>2022-12-19T11:04:36Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;KeyButton&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:PreviewButton.png&amp;diff=232</id>
		<title>File:PreviewButton.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:PreviewButton.png&amp;diff=232"/>
		<updated>2022-12-14T08:54:25Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PreviewButton&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:BlockButton.png&amp;diff=229</id>
		<title>File:BlockButton.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:BlockButton.png&amp;diff=229"/>
		<updated>2022-12-14T08:10:56Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;BlockButton&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:CancelButton.png&amp;diff=228</id>
		<title>File:CancelButton.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:CancelButton.png&amp;diff=228"/>
		<updated>2022-12-14T08:08:43Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CancelButton&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:HistoryButton.png&amp;diff=227</id>
		<title>File:HistoryButton.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:HistoryButton.png&amp;diff=227"/>
		<updated>2022-12-14T08:06:01Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;HistoryButton&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:MinusButton.png&amp;diff=225</id>
		<title>File:MinusButton.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:MinusButton.png&amp;diff=225"/>
		<updated>2022-12-14T07:59:45Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MinusButton&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:PlusButton.png&amp;diff=224</id>
		<title>File:PlusButton.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:PlusButton.png&amp;diff=224"/>
		<updated>2022-12-14T07:59:08Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PlusButton&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:GroupByButton.png&amp;diff=223</id>
		<title>File:GroupByButton.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:GroupByButton.png&amp;diff=223"/>
		<updated>2022-12-14T07:57:53Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;GroupByButton&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:UnsetButton.png&amp;diff=222</id>
		<title>File:UnsetButton.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:UnsetButton.png&amp;diff=222"/>
		<updated>2022-12-14T07:57:05Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;UnsetButton&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:DeleteOrganizationButton.png&amp;diff=221</id>
		<title>File:DeleteOrganizationButton.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:DeleteOrganizationButton.png&amp;diff=221"/>
		<updated>2022-12-14T07:55:44Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DeleteOrganizationButton&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:ChangeOrganizationButton.png&amp;diff=220</id>
		<title>File:ChangeOrganizationButton.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:ChangeOrganizationButton.png&amp;diff=220"/>
		<updated>2022-12-14T07:48:52Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ChangeOrganizationButton&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:DialogMakeupExport.png&amp;diff=214</id>
		<title>File:DialogMakeupExport.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:DialogMakeupExport.png&amp;diff=214"/>
		<updated>2022-12-13T15:09:59Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DialogMakeupExport&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:LockOnChekersPanel.png&amp;diff=212</id>
		<title>File:LockOnChekersPanel.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:LockOnChekersPanel.png&amp;diff=212"/>
		<updated>2022-12-13T14:47:18Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;LockOnChekersPanel&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:LockOnFilesPanel.png&amp;diff=211</id>
		<title>File:LockOnFilesPanel.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:LockOnFilesPanel.png&amp;diff=211"/>
		<updated>2022-12-13T14:46:40Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;LockOnFilesPanel&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:LockOnMakeupPanel.png&amp;diff=210</id>
		<title>File:LockOnMakeupPanel.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:LockOnMakeupPanel.png&amp;diff=210"/>
		<updated>2022-12-13T14:45:48Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;LockOnMakeupPanel&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:ReviewLocksPanel.png&amp;diff=209</id>
		<title>File:ReviewLocksPanel.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:ReviewLocksPanel.png&amp;diff=209"/>
		<updated>2022-12-13T14:44:31Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ReviewLocksPanel&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:ExportMakeupCode.png&amp;diff=208</id>
		<title>File:ExportMakeupCode.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:ExportMakeupCode.png&amp;diff=208"/>
		<updated>2022-12-13T14:41:21Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ExportMakeupCode&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:NotificationsAfterGroupMakeup.png&amp;diff=201</id>
		<title>File:NotificationsAfterGroupMakeup.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:NotificationsAfterGroupMakeup.png&amp;diff=201"/>
		<updated>2022-12-13T13:56:13Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;NotificationsAfterGroupMakeup&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:GroupMakeupWindowWithButtons.png&amp;diff=200</id>
		<title>File:GroupMakeupWindowWithButtons.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:GroupMakeupWindowWithButtons.png&amp;diff=200"/>
		<updated>2022-12-13T13:52:35Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;GroupMakeupWindowWithButtons&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:MakeupNotifications.png&amp;diff=199</id>
		<title>File:MakeupNotifications.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:MakeupNotifications.png&amp;diff=199"/>
		<updated>2022-12-13T13:49:26Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MakeupNotifications&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:GroupMakeupWindow.png&amp;diff=193</id>
		<title>File:GroupMakeupWindow.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:GroupMakeupWindow.png&amp;diff=193"/>
		<updated>2022-12-13T12:18:31Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;GroupMakeupWindow&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:ReviewMarkersButton.png&amp;diff=192</id>
		<title>File:ReviewMarkersButton.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:ReviewMarkersButton.png&amp;diff=192"/>
		<updated>2022-12-13T12:17:17Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ReviewMarkersButton&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:MakeupHistory.png&amp;diff=191</id>
		<title>File:MakeupHistory.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:MakeupHistory.png&amp;diff=191"/>
		<updated>2022-12-13T12:12:35Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MakeupHistory&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:MakeupButtons.png&amp;diff=187</id>
		<title>File:MakeupButtons.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:MakeupButtons.png&amp;diff=187"/>
		<updated>2022-12-13T12:04:08Z</updated>

		<summary type="html">&lt;p&gt;Vmonakhov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MakeupButtons&lt;/div&gt;</summary>
		<author><name>Vmonakhov</name></author>
	</entry>
</feed>