diff --git a/.gitmodules b/.gitmodules index 842f364..c4c3d49 100644 --- a/.gitmodules +++ b/.gitmodules @@ -10,3 +10,9 @@ [submodule "themes/bootstrap4"] path = themes/bootstrap4 url = git@git.246060.ru:/f1x1t/pelican-theme-bootstrap4.git +[submodule "plugins/thirdparty/yuicompressor-opt"] + path = plugins/thirdparty/yuicompressor-opt + url = git@git.246060.ru:/f1x1t/pelican-yuicompressor-opt.git +[submodule "plugins/thirdparty/pelidoc"] + path = plugins/thirdparty/pelidoc + url = git@git.246060.ru:/f1x1t/pelican-pelidoc.git diff --git a/plugins/thirdparty/pelidoc b/plugins/thirdparty/pelidoc new file mode 160000 index 0000000..6999990 --- /dev/null +++ b/plugins/thirdparty/pelidoc @@ -0,0 +1 @@ +Subproject commit 6999990a60300cba1d8835f8eeddb44a6fb95306 diff --git a/plugins/thirdparty/yuicompressor-opt b/plugins/thirdparty/yuicompressor-opt new file mode 160000 index 0000000..515289e --- /dev/null +++ b/plugins/thirdparty/yuicompressor-opt @@ -0,0 +1 @@ +Subproject commit 515289eff2c41b621aa709bd77137207f7c1d1e8 diff --git a/wiki/Prog/Git/Git автоматическое сохранение в репозиторий.md b/wiki/Prog/Git/Git автоматическое сохранение в репозиторий.md new file mode 100644 index 0000000..562bdb9 --- /dev/null +++ b/wiki/Prog/Git/Git автоматическое сохранение в репозиторий.md @@ -0,0 +1,23 @@ +--- +title: "Git: автоматическое сохранение в репозиторий" +category: Программирование +tags: программирование, git +summary: "" +... + +Скрипт [gitwatch](https://github.com/elnull/gitwatch) позволяет отслеживать +изменения в каталоге с помощью программы `inotifywait` и фиксировать их в +репозиторий. Для работы скрипта необходимо установить пакет `inotify-tools`. +Если нужно следить за каталогом `/home/user/dir` и записывать историю +изменений в `/home/user/repo/dir`, то нужно инициализировать репозиторий: + + git init --bare /home/user/repo/dir + +добавить шаблоны исключаемых файлов + + printf '*.[oa]\n*.swp\n*~\n/.git' >> /home/user/repo/dir/info/exclude + +и запустить скрипт + + ./gitwatch.sh -g /home/user/repo/dir /home/user/dir + diff --git a/wiki/Prog/Git/Git репозиторий на переносном устройстве.md b/wiki/Prog/Git/Git репозиторий на переносном устройстве.md new file mode 100644 index 0000000..f529285 --- /dev/null +++ b/wiki/Prog/Git/Git репозиторий на переносном устройстве.md @@ -0,0 +1,27 @@ +--- +title: "Git: репозиторий на переносном устройстве" +category: Программирование +tags: программирование, git +summary: +... + +Создание репозитория для нового проекта + +```sh +ln -s /media/user/usbdisk/git /home/user/work/usbdisk/git +git --bare init /home/user/work/usbdisk/git/project.git +cd /home/user/work/projects +git clone /home/user/work/usbdisk/git/project.git +cd project +git remote set-url origin file:///home/user/work/usbdisk/git/project.git/ +``` + +Добавление нового удалённого репозитория к существующему проекту + +```sh +ln -s /media/user/usbdisk/git /home/user/work/usbdisk/git +git --bare init /home/user/work/usbdisk/git/project.git +cd /home/user/work/projects/project +git remote add usb file:///home/user/work/usbdisk/git/project.git +git push --set-upstream usb master +``` diff --git a/wiki/Prog/Git/Git частичная копия репозитория.md b/wiki/Prog/Git/Git частичная копия репозитория.md new file mode 100644 index 0000000..dfcf461 --- /dev/null +++ b/wiki/Prog/Git/Git частичная копия репозитория.md @@ -0,0 +1,29 @@ +--- +title: "Git: частичная копия репозитория" +category: Программирование +tags: программирование, git +summary: "" +... + +Частичную копию репозитория можно создавать, если проект +очень большой, а следить нужно только за малой его частью. +Допустим, по адресу `git://localhost/project.git` находится +большой проект, в котором интересует только последнее +состояние каталогов `src/driver` и `include/driver`. +Сначала нужно создать репозиторий и подготовить его для +получения только необходимых файлов: + +```sh +git init project +cd project +git remote add origin git://localhost/project.git +git config core.sparsecheckout true +echo "src/driver/*" >> .git/info/sparse-checkout +echo "include/driver/*" >> .git/info/sparse-checkout +``` + +После этого можно получать частичную копию проекта, +а, добавив ключ `--depth=1`, указать, что синхронизироваться +должно только текущее состояние файлов без учёта истории. + + git pull --depth=1 origin master diff --git a/wiki/Prog/Git/Установка и настройка GitLab в LXC.md b/wiki/Prog/Git/Установка и настройка GitLab в LXC.md new file mode 100644 index 0000000..584ff44 --- /dev/null +++ b/wiki/Prog/Git/Установка и настройка GitLab в LXC.md @@ -0,0 +1,147 @@ +--- +title: "Установка и настройка GitLab в LXC" +category: Программирование +tags: программирование, gitlab, git, lxc, контейнеры, ubuntu +summary: +toc: yes +... + +[TOC] + +Установка вылолняется в операционной системе Ubuntu Bionic. + +### LXC + +Создание базового контейнера: + +```sh +lxc-create -t download -n bionic-base -- --dist ubuntu --release bionic --arch amd64 +``` + +Создание контейнеров для GitLab и GitLab Runner: + +```sh +lxc-copy -n bionic-base -N gitlab-bionic -s +lxc-copy -n bionic-base -N gitlab-runner-bionic -s +``` + +Файл `/var/lib/lxc/gitlab-bionic/config`: + +``` +# Distribution configuration +lxc.include = /usr/share/lxc/config/common.conf + +lxc.arch = linux64 +lxc.start.auto = 1 + +# Network configuration +lxc.net.0.type = veth +lxc.net.0.link = br0 +lxc.net.0.flags = up +lxc.net.0.ipv4.address = 192.168.0.216/24 +lxc.net.0.ipv4.gateway = 192.168.0.1 +lxc.net.0.hwaddr = 00:16:3e:00:02:16 + +# Container specific configuration +lxc.rootfs.path = overlay:/var/lib/lxc/bionic-base/rootfs:/var/lib/lxc/gitlab-bionic/delta0 +lxc.uts.name = gitlab-bionic + +lxc.autodev = 1 +lxc.pty.max = 16384 +lxc.cgroup.devices.allow = c 10:200 rwm +lxc.mount.entry = /dev/net dev/net none bind,create=dir +``` + +Файл `/var/lib/lxc/gitlab-runner-bionic/config`: + +``` +# Distribution configuration +lxc.include = /usr/share/lxc/config/common.conf + +lxc.arch = linux64 +lxc.start.auto = 1 + +# Network configuration +lxc.net.0.type = veth +lxc.net.0.link = br0 +lxc.net.0.flags = up +lxc.net.0.ipv4.address = 192.168.0.217/24 +lxc.net.0.ipv4.gateway = 192.168.0.1 +lxc.net.0.hwaddr = 00:16:3e:00:02:17 + +# Container specific configuration +lxc.rootfs.path = overlay:/var/lib/lxc/bionic-base/rootfs:/var/lib/lxc/gitlab-runner-bionic/delta0 +lxc.uts.name = gitlab-runner-bionic + +# Required for Docker +lxc.aa_profile = unconfined +lxc.cgroup.devices.allow = a +lxc.cap.drop = + +lxc.autodev = 1 +lxc.pty.max = 16384 +lxc.cgroup.devices.allow = c 10:200 rwm +lxc.mount.entry = /dev/net dev/net none bind,create=dir +``` + +### GitLab + +Установить GitLab: + +```sh +sudo lxc-start -n gitlab-bionic +sudo lxc-attach -n gitlab-bionic +sudo apt install curl +curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash +sudo apt install gitlab-ce +``` + +Отредактировать файл `/etc/locale.gen` и сгенерировать локали для системы: + +```sh +sudo locale-gen +``` + +Отредактировать файл `/etc/gitlab/gitlab.rb` и выполнить: + +```sh +sudo gitlab-ctl reconfigure +sudo gitlab-ctl restart +``` + + +### GitLab Runner и Docker + +Установить GitLab Runner: + +```sh +sudo lxc-start -n runner-bionic +sudo lxc-attach -n runner-bionic +curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash +sudo apt install gitlab-runner docker.io +sudo gitlab-runner register +``` + +Во время установки ввести токен приведённый на странице `admin/runners`, +а в качестве исполнителя задач `docker`. + +Для работы Docker внутри контейнера нужно удалить AppArmor: + +```sh +sudo apt purge apparmor +``` + +Внутри контейнера для Docker желательно использовать драйвер `btrfs` +cat /etc/docker/daemon.json + +{ + "storage-driver": "btrfs" +} + + + +### Ссылки + +* [GitLab Runner](https://docs.gitlab.com/runner/register/index.html) +* [Runners](https://docs.gitlab.com/ee/ci/runners/) +* [Gitlab-CI](https://habr.com/ru/company/southbridge/blog/306596/) diff --git a/wiki/Prog/Tools/PVS-Studio.md b/wiki/Prog/Tools/PVS-Studio.md new file mode 100644 index 0000000..88af7aa --- /dev/null +++ b/wiki/Prog/Tools/PVS-Studio.md @@ -0,0 +1,108 @@ +--- +title: PVS-Studio +category: Программирование +tags: программирование, C, C++, отладка +summary: +toc: yes +... + +[TOC] + +### Информация и лицензия + +[PVS-Studio](https://www.viva64.com/ru/pvs-studio/) - это инструмент для +статического анализа исходного кода программ, написанных на языках С, C++. + +Для использования в Linux нужно чтобы в каталоге `~/.config/PVS-Studio` +находился лицензионный ключ или в начале исходных файлов с расширениями +`*.c`, `*.cpp`, `*.cxx` и т.п. [присутствовали строки](https://www.viva64.com/ru/b/0457/) + +``` +// This is an independent project of an individual developer. Dear PVS-Studio, please check it. + +// PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com +``` + +### Настройка и комплияция проекта + +Полное руководство для работы в Linux находится +[здесь](https://www.viva64.com/ru/m/0036/), а ниже приведён список типовых команд. + +Настройка проекта для CMake: + +```sh +cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=On +``` + +Сборка проекта с помощью `make`: + +```sh +pvs-studio-analyzer trace -- make -j$(nproc) +``` + +Настройка и сборка проекта с использованием Ninja: + +```sh +cmake -GNinja -DCMAKE_EXPORT_COMPILE_COMMANDS=On +ninja -t compdb +``` + +### Анализ проекта + +Для анализа проектов используется утилита `pvs-studio-analyzer`. По умолчанию +включены только диагностики общего назначения (General Analysis, GA). +Включить дополнительные правила можно с помощью опции `-a`: + +``` + -a [MODE], --analysis-mode [MODE] + MODE defines the type of warnings: + 1 - 64-bit errors; + 2 - reserved; + 4 - General Analysis; + 8 - Micro-optimizations; + 16 - Customers Specific Requests; + 32 - MISRA. + Modes can be combined by adding the values + Default: 4 +``` + +Выбор типов предупреждений осуществляется на основе побитовой маски из +приведенных выше типов. Чтобы выполнить анализ, исключив проверки MISRA, +нужно выполнить: + +```sh +pvs-studio-analyzer analyze -a 29 -j$(nproc) -o pvs.log +``` + +Составление отчёта для просмотра в Qt Creator: + +```sh +plog-converter -t tasklist -o pvs.tasks pvs.log +``` + +При составлении отчёта уровень детализации можно изменять с помощью ключа +`-a` (`--analyzer`), который производит фильтрацию предупреждений согласно +маске, которая имеет вид `MessageType:MessageLevels`, где `MessageType` +может принимать один из следующих типов: `GA`, `OP`, `64`, `CS`, `MISRA`, +а `MessageLevels` может принимать значения от `1` до `3`. +Возможна комбинация разных масок через `;`. Например, при составлении +отчёта для просмотра в формате HTML можно повысить уровень детализации: + +```sh +plog-converter -t fullhtml -a "GA:1,2,3;64:1;OP:1,2;CS:1,2" -o html pvs.log +``` + +Составление отчёта для редактора Vim: + +```sh +plog-converter -a "GA:1,2" -t errorfile -o pvs.err pvs.log +``` + +Для просмотра отчёта в редакторе Vim нужно открыть файл `pvs.err` и выполнить команды: + +```vim +:set makeprg=cat\ % " выбор программы для компиляции в текущей сессии +:silent make " имитация сборки +:cw " открытие результатов в нижнем окне +``` +