{
    "version": "https:\/\/jsonfeed.org\/version\/1.1",
    "title": "IT science",
    "_rss_description": "IT science — статьи и инструкции из мира IT",
    "_rss_language": "ru",
    "_itunes_email": "",
    "_itunes_categories_xml": "",
    "_itunes_image": "",
    "_itunes_explicit": "",
    "home_page_url": "https:\/\/itscience.pro\/",
    "feed_url": "https:\/\/itscience.pro\/rss\/",
    "icon": "https:\/\/itscience.pro\/pictures\/userpic\/userpic@2x.jpg?1658757154",
    "authors": [
        {
            "name": "IT science",
            "url": "https:\/\/itscience.pro\/",
            "avatar": "https:\/\/itscience.pro\/pictures\/userpic\/userpic@2x.jpg?1658757154"
        }
    ],
    "items": [
        {
            "id": "46",
            "url": "https:\/\/itscience.pro\/all\/statistika-ispolzovaniya-licenziy-autodesk-server-licenziy\/",
            "title": "Статистика использования лицензий Autodesk (сервер лицензий)",
            "content_html": "<p>Делюсь опытом, может кому-то пригодится.<\/p>\n<p>Внимание! Это материал про официальный сервер лицензий!<\/p>\n<p>Когда-то  у нас были сетевые лицензии, сначала бессрочные, потом годовые и был свой сетевой сервер лицензий.<br \/>\nСам сервер был развёрнут на машине с windows, файл лицензий получали через кабинет Autodesk после продления.<\/p>\n<p>Но, сейчас о другом. Нам захотелось получать статистику выдачи лицензий, т. к. куплено их было «впритык» и нужно было отслеживать целесообразность использования.<\/p>\n<p>В инсталляторе идёт утилита <b>lmutil.exe<\/b>, запуск которой в командной строке выдаст статистику по ключам.<\/p>\n<p>Это конечно круто, но недостаточно смотреть статистику, хочется её накапливать, в базе например. Через командную строку Windows делать такое непрактично. На выручку приходит наш любимый linux.<\/p>\n<p>Для начала идём на сайт Autodesk и скачиваем Autodesk Network License Manager для Linux.<br \/>\n<a href=\"https:\/\/knowledge.autodesk.com\/ru\/search-result\/caas\/downloads\/downloads\/RUS\/content\/autodesk-network-license-manager-for-linux.html\">https:\/\/knowledge.autodesk.com\/ru\/search-result\/caas\/downloads\/downloads\/RUS\/content\/autodesk-network-license-manager-for-linux.html<\/a><\/p>\n<p>Обратите внимание, поддерживаемые версии:<\/p>\n<ul>\n<li>Red Hat Enterprise Linux 8<\/li>\n<li>Red Hat Enterprise Linux 7<\/li>\n<li>SUSE Linux Enterprise 15 с пакетом обновления 2 (SP2)<\/li>\n<li>SUSE Linux Enterprise 15 с пакетом обновления 1 (SP1)<\/li>\n<li>SUSE Linux Enterprise 15<\/li>\n<li>SUSE Linux Enterprise 12 с пакетом обновления 4 (SP4)<\/li>\n<\/ul>\n<p>Не смущайтесь, ниже я расскажу как это всё запустить на Ubuntu.<\/p>\n<p>Если заглянуть в RPM пакет, то там распаковываются 4 файла в папку <b>\/opt\/flexnetserver\/<\/b><\/p>\n<ul>\n<li>LicenseAdministration.pdf<\/li>\n<li>adskflex<\/li>\n<li>lmgrd<\/li>\n<li>lmutil<\/li>\n<\/ul>\n<p>Собственно, для наших целей потребуется только файл <b>lmutil<\/b><\/p>\n<p>Закидываем распакованный файл куда хотим на наш сервер, хоть в папку scripts<\/p>\n<p>Ну, а дальше, небольшой фикс<\/p>\n<p>Если при запуске утилиты она выдаёт ошибку<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">$ .\/lmutil\nbash: .\/lmutil: Нет такого файла или каталога<\/code><\/pre><p>ldd выдаёт результат<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">$ ldd lmutil\n        linux-vdso.so.1 (0x00007fff5b1de000)\n        libpthread.so.0 =&gt; \/lib\/x86_64-linux-gnu\/libpthread.so.0 (0x00007fbe36c6f000)\n        libm.so.6 =&gt; \/lib\/x86_64-linux-gnu\/libm.so.6 (0x00007fbe36b20000)\n        libgcc_s.so.1 =&gt; \/lib\/x86_64-linux-gnu\/libgcc_s.so.1 (0x00007fbe36b05000)\n        libc.so.6 =&gt; \/lib\/x86_64-linux-gnu\/libc.so.6 (0x00007fbe36913000)\n        libdl.so.2 =&gt; \/lib\/x86_64-linux-gnu\/libdl.so.2 (0x00007fbe3690d000)\n        librt.so.1 =&gt; \/lib\/x86_64-linux-gnu\/librt.so.1 (0x00007fbe36903000)\n        \/lib64\/ld-lsb-x86-64.so.3 =&gt; \/lib64\/ld-linux-x86-64.so.2 (0x00007fbe36c98000)<\/code><\/pre><p>Попробуйте сделать линк на so<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">sudo ln -s ld-linux-x86-64.so.2 \/lib64\/ld-lsb-x86-64.so.3<\/code><\/pre><p>и вам повезёт<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">$ .\/lmutil\nlmutil - Copyright (c) 1989-2021 Flexera. All Rights Reserved.\nusage:  lmutil lmborrow | lmborrowl -status\n        lmutil lmborrow | lmborrowl -purge\n        lmutil lmborrow | lmborrowl -purge -status\n        lmutil lmborrow | lmborrowl -clear\n        lmutil lmborrow | lmborrowl {all|vendor} dd-mmm-yyyy:[time]\n        lmutil lmborrow -return [-c licfile] [-d display_name]  [-u username] [-h hostname] [-fqdn] [-vendor name] feature [-bv version]\n...<\/code><\/pre><p>А дальше дело техники<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">$ .\/lmutil lmstat -f 85536ACD_2011_0F -c 40000@server_license<\/code><\/pre><p>запрашиваем статистику по использованию лицензий для продукта <b>AutoCAD 2011<\/b> у сервера <b>server_license<\/b><\/p>\n<p>Коды продуктов можно посмотреть тут: <a href=\"https:\/\/jtbworld.com\/flexnet-flexlm-feature-codes-for-autodesk-applications-and-other-applications\">https:\/\/jtbworld.com\/flexnet-flexlm-feature-codes-for-autodesk-applications-and-other-applications<\/a><\/p>\n<p>Из Linux можно опрашивать несколько серверов LMTOOL, если нужно, а дальше нужно только распарсить вывод и сохранить его в базу.<\/p>\n",
            "date_published": "2022-09-12T17:37:46+03:00",
            "date_modified": "2022-09-12T17:52:24+03:00",
            "tags": [
                "Autodesk",
                "lmtools",
                "nlm",
                "ubuntu"
            ],
            "_date_published_rfc2822": "Mon, 12 Sep 2022 17:37:46 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "46",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "45",
            "url": "https:\/\/itscience.pro\/all\/chistim-pochtovy-server-ot-staryh-rassylok\/",
            "title": "Чистим почтовый сервер от старых рассылок",
            "content_html": "<p>Что-то много мусора накопилось в ящиках пользователей.<br \/>\nМожно удалить старые письма (рассылки), которые потеряли свою актуальность.<\/p>\n<p>Опираться будем на уникальное содержимое письма. И возраст файла.<\/p>\n<p>например, ищем строку «Return-Path: <user@domain.ru>»<br \/>\nи пусть, файл будет страше 30 дней<\/p>\n<p>получается скрипт:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">find \/var\/vmail\/ -type f -mtime +30 -exec grep -Ilr &quot;Return-Path: &lt;user@domain.ru&gt;&quot;  {} \\;<\/code><\/pre><p>где «\/var\/vmail\/» — путь к хранилищу писем<\/p>\n<p>выполнив эту команду получим список нужных нам файлов, без удаления<\/p>\n<p>а теперь, просто допишем в конец команду для удаления<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">find \/var\/vmail\/ -type f -mtime +30 -exec grep -Ilr &quot;Return-Path: &lt;user@domain.ru&gt;&quot;  {} \\; | xargs rm<\/code><\/pre><p>всё<\/p>\n",
            "date_published": "2022-09-06T10:49:01+03:00",
            "date_modified": "2022-09-06T10:48:54+03:00",
            "tags": [
                "find",
                "linux",
                "Postfix"
            ],
            "_date_published_rfc2822": "Tue, 06 Sep 2022 10:49:01 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "45",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "44",
            "url": "https:\/\/itscience.pro\/all\/versionnost-v-setevoy-papke-synology\/",
            "title": "версионность в сетевой папке synology",
            "content_html": "<p>Вы всегда можете настроить версионность файлов в сетевой папке средствами synology<\/p>\n<p>для начала установите пакет Snapshot Replication<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/izobrazhenie_2022-01-17_164548.png\" width=\"506\" height=\"203\" alt=\"\" \/>\n<\/div>\n<p>затем выберите папку общего доступа и настройте расписание создания и хранения снимков<\/p>\n<div class=\"e2-text-picture\">\n<div class=\"fotorama\" data-width=\"677\" data-ratio=\"1.1815008726003\">\n<img src=\"https:\/\/itscience.pro\/pictures\/izobrazhenie_2022-01-17_164749.png\" width=\"677\" height=\"573\" alt=\"\" \/>\n<img src=\"https:\/\/itscience.pro\/pictures\/izobrazhenie_2022-01-17_164807.png\" width=\"678\" height=\"574\" alt=\"\" \/>\n<\/div>\n<\/div>\n<p>получится примерно так<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/izobrazhenie_2022-01-17_164653.png\" width=\"800\" height=\"382.7482447342\" alt=\"\" \/>\n<\/div>\n<p>и теперь, если изменения попали на момент создания снимка, то средствами windows можно их посмотреть и при желании откатить<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/izobrazhenie_2022-01-17_165102.png\" width=\"635\" height=\"297\" alt=\"\" \/>\n<\/div>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/izobrazhenie_2022-01-17_165206.png\" width=\"525\" height=\"471\" alt=\"\" \/>\n<\/div>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/izobrazhenie_2022-01-17_165242.png\" width=\"623\" height=\"595\" alt=\"\" \/>\n<\/div>\n<p>очень удобно, пользуйтесь<\/p>\n",
            "date_published": "2022-01-17T16:53:43+03:00",
            "date_modified": "2022-01-17T16:53:23+03:00",
            "tags": [
                "replication",
                "synology",
                "windows",
                "версионность"
            ],
            "image": "https:\/\/itscience.pro\/pictures\/izobrazhenie_2022-01-17_164548.png",
            "_date_published_rfc2822": "Mon, 17 Jan 2022 16:53:43 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "44",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "jquery\/jquery.js",
                    "fotorama\/fotorama.css",
                    "fotorama\/fotorama.js"
                ],
                "og_images": [
                    "https:\/\/itscience.pro\/pictures\/izobrazhenie_2022-01-17_164548.png",
                    "https:\/\/itscience.pro\/pictures\/izobrazhenie_2022-01-17_164749.png",
                    "https:\/\/itscience.pro\/pictures\/izobrazhenie_2022-01-17_164807.png",
                    "https:\/\/itscience.pro\/pictures\/izobrazhenie_2022-01-17_164653.png",
                    "https:\/\/itscience.pro\/pictures\/izobrazhenie_2022-01-17_165102.png",
                    "https:\/\/itscience.pro\/pictures\/izobrazhenie_2022-01-17_165206.png",
                    "https:\/\/itscience.pro\/pictures\/izobrazhenie_2022-01-17_165242.png"
                ]
            }
        },
        {
            "id": "43",
            "url": "https:\/\/itscience.pro\/all\/sozdayom-synology-iscsi-i-podklyuchaem-v-ubuntu\/",
            "title": "Создаём synology iscsi и подключаем в Ubuntu",
            "content_html": "<p>сервер Synology DSM 7.0.1-42218<br \/>\nUbuntu 20.04<\/p>\n<h2>В Synology<\/h2>\n<p>переходим в SAN менеджер и создаем target<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-12-16_134256.png\" width=\"800\" height=\"351.91637630662\" alt=\"\" \/>\n<\/div>\n<p>и сразу создаём, связанный с target LUN<\/p>\n<div class=\"e2-text-picture\">\n<div class=\"fotorama\" data-width=\"671\" data-ratio=\"1.0583596214511\">\n<img src=\"https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-12-16_134406.png\" width=\"671\" height=\"634\" alt=\"\" \/>\n<img src=\"https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-12-16_134433.png\" width=\"670\" height=\"636\" alt=\"\" \/>\n<img src=\"https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-12-16_134704.png\" width=\"674\" height=\"635\" alt=\"\" \/>\n<img src=\"https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-12-16_134720.png\" width=\"669\" height=\"636\" alt=\"\" \/>\n<\/div>\n<\/div>\n<p>нам нужно 30Тб, не заморачиваемся с гибкостью, нужна максимальная надёжность<\/p>\n<p>дальше настраиваем в ubuntu<\/p>\n<h2>в Ubuntu<\/h2>\n<p>устанавливаем софт<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">sudo su\napt update\napt install open-iscsi<\/code><\/pre><p>редактируем конфиг<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">mcedit \/etc\/iscsi\/iscsid.conf<\/code><\/pre><p>меняем<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">#*****************\n# Startup settings\n#*****************\n\n# To request that the iscsi initd scripts startup a session set to &quot;automatic&quot;.\n# node.startup = automatic\n#\n# To manually startup the session set to &quot;manual&quot;. The default is manual.\n#node.startup = manual\nnode.startup = automatic<\/code><\/pre><p>запрашиваем доступные таргеты с сервера<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">iscsiadm -m discovery -t st -p &lt;адрес сервера&gt;<\/code><\/pre><div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-12-16_160129.png\" width=\"602\" height=\"52\" alt=\"\" \/>\n<\/div>\n<p>когда у нас подключен LUN мы можем заняться созданием раздела и форматированием в btrfs<br \/>\nдля начала посмотрим, куда подключился LUN<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">fdisk -l<\/code><\/pre><div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-12-16_170905.png\" width=\"685\" height=\"321\" alt=\"\" \/>\n<\/div>\n<p>в нашем примере это \/dev\/sdb<\/p>\n<p>создаем раздел на все свободное пространство (это будет радел GPT, иначе не сможем сделать больше 2 TiB).<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">fdisk \/dev\/sdb<\/code><\/pre><div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-12-16_171013.png\" width=\"800\" height=\"602.10930009588\" alt=\"\" \/>\n<\/div>\n<p>как нам подсказывает помощь, сначала меняем тип раздела, жмём <b>g<\/b>, потом создаем новый раздел <b>n<\/b>, номер раздела 1, он у нас первый и единственный, размеры начала раздела и его конца по-умолчанию. Когда мы все проверили и нас все устроило, жмём <b>w<\/b> и записываем изменения.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-12-16_171042.png\" width=\"736\" height=\"230\" alt=\"\" \/>\n<\/div>\n<p>ещё раз запускаем fdisk и смотрим результат<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">fdisk -l<\/code><\/pre><div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-12-16_171120.png\" width=\"680\" height=\"400\" alt=\"\" \/>\n<\/div>\n<p>мы получили раздел \/dev\/sdb1<\/p>\n<p>теперь форматируем<br \/>\nдля начала установим btrfs-progs<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">apt install btrfs-progs<\/code><\/pre><p>форматируем наш раздел<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">mkfs.btrfs -L data \/dev\/sdb1<\/code><\/pre><div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-12-16_172420.png\" width=\"455\" height=\"321\" alt=\"\" \/>\n<\/div>\n<p>подключаем раздел как папку \/var<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">mount \/dev\/sdb1 \/mail<\/code><\/pre><p>смотрим uuid нашего раздела<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">btrfs filesystem show \/mail<\/code><\/pre><div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-12-16_173113.png\" width=\"488\" height=\"65\" alt=\"\" \/>\n<\/div>\n<p>редактируем \/etc\/fstab для автоматического подключения<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">mcedit \/etc\/fstab<\/code><\/pre><p>прописываем<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">UUID=5d84eadf-6272-4b3f-8ac9-90a72108df11       \/mail   btrfs   defaults    0 0<\/code><\/pre><p>перегружаем и проверяем<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">reboot<\/code><\/pre>",
            "date_published": "2021-12-17T14:43:39+03:00",
            "date_modified": "2021-12-17T14:43:21+03:00",
            "tags": [
                "iscsi",
                "synology",
                "ubuntu"
            ],
            "image": "https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-12-16_134256.png",
            "_date_published_rfc2822": "Fri, 17 Dec 2021 14:43:39 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "43",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "jquery\/jquery.js",
                    "fotorama\/fotorama.css",
                    "fotorama\/fotorama.js",
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": [
                    "https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-12-16_134256.png",
                    "https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-12-16_134406.png",
                    "https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-12-16_134433.png",
                    "https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-12-16_134704.png",
                    "https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-12-16_134720.png",
                    "https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-12-16_160129.png",
                    "https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-12-16_170905.png",
                    "https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-12-16_171013.png",
                    "https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-12-16_171042.png",
                    "https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-12-16_171120.png",
                    "https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-12-16_172420.png",
                    "https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-12-16_173113.png"
                ]
            }
        },
        {
            "id": "41",
            "url": "https:\/\/itscience.pro\/all\/massovaya-registraciya-graphisoft-id\/",
            "title": "массовая регистрация graphisoft id",
            "content_html": "<p>Встал вопрос получить сотрудникам Graphisoft id, но никакого функционала у производителя нет, чтобы сделать это массово.  Печаль.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-09-24_184451.png\" width=\"250\" height=\"237\" alt=\"\" \/>\n<\/div>\n<p>Итак, проанализировав механизм регистрации и добавления пользователя в состав компании получаем следующий алгоритм:<\/p>\n<ol start=\"1\">\n<li>регистрация пользователя на сайте graphisoft.com<\/li>\n<li>подтверждение регистрации в посте пользователя<\/li>\n<li>авторизация на сайте graphisoft.com под административной учетной записью<\/li>\n<li>отправка приглашения пользователю<\/li>\n<li>авторизация  на сайте graphisoft.com под пользовательской учетной записью<\/li>\n<li>подтверждение приглашения<\/li>\n<\/ol>\n<p>как родилось решение описано тут:<br \/>\n<a href=\"https:\/\/voronin.one\/all\/kak-nelzya-otnositsya-k-korporativnym-klientam\/\">1 часть, «как нельзя относиться к корпоративным клиентам»<\/a><br \/>\n<a href=\"https:\/\/voronin.one\/all\/analiz-poluchenie-ishodnyh-dannyh\/\">2 часть, «анализ, получение исходных данных»<\/a><br \/>\n<a href=\"https:\/\/voronin.one\/all\/kropotlivaya-rabota-i-dolgozhdanny-uspeh\/\">3 часть, «кропотливая работа и долгожданный успех»<\/a><\/p>\n<p>получилось неплохо, полностью автоматизированная система, работает следующим образом:<br \/>\nпри появлении нового сотрудника создается для него graphisoft id, добавляется в состав компании и на почту высылаются данные с логином и паролем, а так же инструкция по использованию последних;<br \/>\nпосле увольнения сотрудника или ухода в декрет — graphisoft id исключается из списка сотрудников компании.<\/p>\n<p>ниже сам код регистрации одно пользователя, как сделать это массово — я думаю разберетесь<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">&lt;?php\n\n\/\/ данные регистрируемого сотрудника\n$fname = &#039;Иван&#039;;\n$sname = &#039;Петров&#039;;\n$email = &#039;user@domain.ru&#039;;\n$pasword = &#039;koo0ovo5Kamu&#039;;\n\n\/\/ данные администратора компании\n$admin_login = &#039;admin@domain.ru&#039;;\n$admin_password = &#039;P@5$w0rD&#039;;\n\n$header = &#039;&#039;;\n\nfunction get_url($url, $method, $ctype, $referer, $data) {\n\t$ch = curl_init();\n\tcurl_setopt($ch, CURLOPT_URL, $url);\n\tcurl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);\n\tcurl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);\n\tif ($data!==&#039;&#039;) {\n\t\tif ($ctype == 1) {\n\t\t\tcurl_setopt($ch, CURLOPT_POST, 1);\n\t\t\tcurl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));\n\t\t} else if ($ctype == 2) {\n\t\t\tcurl_setopt($ch, CURLOPT_POSTFIELDS,http_build_query($data));\n\t\t} else if ($ctype == 3) {\n\t\t\tcurl_setopt($ch, CURLOPT_HEADER, 1);\n\t\t\tcurl_setopt($ch, CURLOPT_POST, 1);\n\t\t\tcurl_setopt($ch, CURLOPT_FOLLOWLOCATION, FALSE);\n\t\t\tcurl_setopt($ch, CURLOPT_POSTFIELDS,http_build_query($data));\n\t\t}\n\t}\n\tcurl_setopt($ch, CURLOPT_ENCODING, &#039;gzip, deflate&#039;);\n\t$headers = array();\n\t$headers[] = &#039;Connection: keep-alive&#039;;\n\t$headers[] = &#039;Sec-Ch-Ua: \\&quot; Not;A Brand\\&quot;;v=\\&quot;99\\&quot;, \\&quot;Opera\\&quot;;v=\\&quot;79\\&quot;, \\&quot;Chromium\\&quot;;v=\\&quot;93\\&quot;&#039;;\n\t$headers[] = &#039;Dnt: 1&#039;;\n\t$headers[] = &#039;Sec-Ch-Ua-Mobile: ?0&#039;;\n\t$headers[] = &#039;User-Agent: Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/93.0.4577.63 Safari\/537.36 OPR\/79.0.4143.22&#039;;\n\tif ($ctype == 1) {\n\t\t$headers[] = &#039;Content-Type: application\/json; charset=UTF-8&#039;;\n\t} else {\n\t\t$headers[] = &#039;Content-Type: application\/x-www-form-urlencoded; charset=UTF-8&#039;;\n\t}\n\t$headers[] = &#039;Accept: application\/json, text\/javascript, *\/*; q=0.01&#039;;\n\t$headers[] = &#039;X-Requested-With: XMLHttpRequest&#039;;\n\t$headers[] = &#039;Sec-Ch-Ua-Platform: \\&quot;Windows\\&quot;&#039;;\n\t$headers[] = &#039;Sec-Fetch-Site: same-origin&#039;;\n\t$headers[] = &#039;Sec-Fetch-Mode: cors&#039;;\n\t$headers[] = &#039;Sec-Fetch-Dest: empty&#039;;\n\t$headers[] = &#039;Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7&#039;;\n\t$headers[] = &#039;Origin: &#039;.$referer;\n\t$headers[] = &#039;Referer: &#039;.$referer;\n\tcurl_setopt($ch, CURLOPT_HTTPHEADER, $headers);\n\tcurl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__).&#039;\/cookie.txt&#039;);\n\tcurl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__).&#039;\/cookie.txt&#039;);\n\t$response = curl_exec($ch);\n\tglobal $header;\n\t$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);\n\t$header = substr($response, 0, $header_size);\n\treturn $response;\n\tif (curl_errno($ch)) {\n\t\techo &#039;Error:&#039; . curl_error($ch);\n\t}\n\tcurl_close($ch);\n}\n\n\/\/ удаляем старые куки\nif (file_exists(dirname(__FILE__).&#039;\/cookie.txt&#039;)) {\n   unlink(dirname(__FILE__).&#039;\/cookie.txt&#039;);\n}\t\t\n\/\/ заходим на главную\nget_url(&#039;https:\/\/graphisoft.com\/ru&#039;,&#039;GET&#039;,1,&#039;&#039;,&#039;&#039;);\n\/\/ переходим на форму пользователя\nget_url(&#039;https:\/\/graphisoftid.graphisoft.com\/Account\/ServiceLogin?Application=GRAPHISOFT&amp;ReturnUrl=https:\/\/graphisoft.com\/ru&#039;,&#039;GET&#039;,1,&#039;https:\/\/graphisoftid.graphisoft.com\/&#039;,&#039;&#039;);\n\/\/ переходим на форму регистрации\nget_url(&#039;https:\/\/graphisoftid.graphisoft.com\/#\/register\/3\/https%3a%2f%2fgraphisoft.com%2fru&#039;,&#039;GET&#039;,1,&#039;https:\/\/graphisoftid.graphisoft.com\/&#039;,&#039;&#039;);\n\n\/\/проверяем e-mail\n$check_mail = get_url(&#039;https:\/\/graphisoftid.graphisoft.com\/api\/user\/CheckEmail\/&#039;,&#039;PUT&#039;,2,&#039;https:\/\/graphisoftid.graphisoft.com\/&#039;,array(&quot;EmailAddress&quot; =&gt; $email));\nif ($check_mail == &#039;true&#039;) {\n\t$data = array(&#039;applicationName&#039; =&gt; null,\n\t\t\t\t  &#039;customDataObject&#039; =&gt; null,\n\t\t\t\t  &#039;redirectUrl&#039; =&gt; null,\n\t\t\t\t  &#039;emailHintLocalizationKey&#039; =&gt; null,\n\t\t\t\t  &#039;firstName&#039; =&gt; $fname,\n\t\t\t\t  &#039;lastName&#039; =&gt; $sname,\n\t\t\t\t  &#039;isValidated&#039; =&gt; true,\n\t\t\t\t  &#039;email&#039; =&gt; $email,\n\t\t\t\t  &#039;password&#039; =&gt; $pasword,\n\t\t\t\t  &#039;confirmPassword&#039; =&gt; $pasword,\n\t\t\t\t  &#039;isPrivacyPolicyAccepted&#039; =&gt; true,\n\t\t\t\t  &#039;companyName&#039; =&gt; &#039;ООО &quot;Рога и Копыта&quot;&#039;,\n\t\t\t\t  &#039;countryId&#039; =&gt; 186,\n\t\t\t\t  &#039;federated&#039; =&gt; false,\n\t\t\t\t  &#039;callbackUrl&#039; =&gt; &#039;https:\/\/graphisoft.com\/ru&#039;,\n\t\t\t\t  &#039;isDirty&#039; =&gt; true,\n\t\t\t\t  &#039;errors&#039; =&gt; array());\n\n\t\/\/echo json_encode($data).&quot;\\n&quot;;\n\n\t$ecoded_json = get_url(&#039;https:\/\/graphisoftid.graphisoft.com\/api\/user\/CreateUser&#039;,&#039;POST&#039;,1,&#039;https:\/\/graphisoftid.graphisoft.com\/&#039;,$data);\n\n\t$jsonObj = json_decode($ecoded_json);\n\n\tif ($jsonObj === null &amp;&amp; json_last_error() !== JSON_ERROR_NONE) {\n\t   echo &quot;у меня не получилось отправить регистрационную форму с данными...  извините\\n&quot;;\n\t} else {\n\t\t\/\/ удаляем старые куки\n\t\tunlink(dirname(__FILE__).&#039;\/cookie.txt&#039;);\n\t\tget_url($jsonObj-&gt;{&#039;VerificationURL&#039;}.$jsonObj-&gt;{&#039;VerificationCode&#039;},&#039;GET&#039;,1,&#039;&#039;,&#039;&#039;);\n\t\t$gsid_url = get_url(&#039;https:\/\/graphisoftid.graphisoft.com\/api\/user\/VerifyUser&#039;,&#039;PUT&#039;,2,&#039;https:\/\/graphisoftid.graphisoft.com\/&#039;,array(&quot;code&quot; =&gt; $jsonObj-&gt;{&#039;VerificationCode&#039;}));\n\t\t$parts = parse_url($gsid_url);\n\t\tparse_str($parts[&#039;query&#039;], $query);\n\t\t$user_gsid = $query[&#039;gsid&#039;];\n\t\tif ($user_gsid !== &#039;&#039;) {\n\t\t\techo &quot;пользователь &quot;.$email.&quot; успешно зарегистрирован (Graphisoft sid: &quot;.$user_gsid.&quot;)\\n&quot;;\n\t\t\t\/\/ удаляем старые куки\n\t\t\tunlink(dirname(__FILE__).&#039;\/cookie.txt&#039;);\n\t\t\t\/\/ заходим на главную\n\t\t\tget_url(&#039;https:\/\/graphisoft.com\/ru&#039;,&#039;GET&#039;,1,&#039;&#039;,&#039;&#039;);\n\t\t\tget_url(&#039;https:\/\/graphisoftid.graphisoft.com\/&#039;,&#039;GET&#039;,1,&#039;&#039;,&#039;&#039;);\n\t\t\t\/\/ авторизуемся под пользователем\n\t\t\t$data = array(&#039;email&#039; =&gt; $admin_login,\n\t\t\t\t\t\t  &#039;errors&#039; =&gt; array(),\n\t\t\t\t\t\t  &#039;isDirty&#039; =&gt; true,\n\t\t\t\t\t\t  &#039;isNullo&#039; =&gt; false,\n\t\t\t\t\t\t  &#039;password&#039; =&gt; $admin_password);\t\t\t\n\t\t\t$json_response = get_url(&#039;https:\/\/graphisoftid.graphisoft.com\/api\/Authenticate\/Login&#039;,&#039;POST&#039;,1,&#039;https:\/\/graphisoftid.graphisoft.com\/&#039;,$data);\n\t\t\t$obj = json_decode($json_response);\n\t\t\t$companyGsId = $obj-&gt;{&#039;Company&#039;}-&gt;{&#039;GsId&#039;};\n\t\t\t\/\/ Загружаем список подключенных пользователей\n\t\t\tforeach ($obj-&gt;{&#039;Company&#039;}-&gt;{&#039;CompanyUsers&#039;} as $user) {\n\t\t\t\t$users_list[] = array(&quot;FirstName&quot; =&gt; $user-&gt;{&#039;FirstName&#039;},&quot;LastName&quot; =&gt; $user-&gt;{&#039;LastName&#039;},&quot;EmailAddress&quot; =&gt; $user-&gt;{&#039;EmailAddress&#039;},&quot;GsId&quot; =&gt; $user-&gt;{&#039;GsId&#039;});\n\t\t\t}\n\n\n\t\t\t$data = array(&#039;companyGsId&#039; =&gt; $companyGsId,\n\t\t\t\t\t\t  &#039;email&#039; =&gt; $email,\n\t\t\t\t\t\t  &#039;errors&#039; =&gt; array(),\n\t\t\t\t\t\t  &#039;isDirty&#039; =&gt; true,\n\t\t\t\t\t\t  &#039;requestedGraphisoftUserId&#039; =&gt; $user_gsid);\n\t\t\tget_url(&#039;https:\/\/graphisoftid.graphisoft.com\/api\/user\/SendInvitation&#039;,&#039;PUT&#039;,2,&#039;https:\/\/graphisoftid.graphisoft.com\/&#039;,$data);\n\t\t\techo &quot;выслано приглашение присоединиться к компании\\n&quot;;\n\t\t\t\/\/ удаляем старые куки\n\t\t\tunlink(dirname(__FILE__).&#039;\/cookie.txt&#039;);\n\t\t\t\/\/ переходим на форму пользователя\n\t\t\tget_url(&#039;https:\/\/graphisoftid.graphisoft.com\/&#039;,&#039;GET&#039;,1,&#039;&#039;,&#039;&#039;);\n\t\t\t\/\/ авторизуемся под пользователем\n\t\t\t$data = array(&#039;email&#039; =&gt; $email,\n\t\t\t\t\t\t  &#039;errors&#039; =&gt; array(),\n\t\t\t\t\t\t  &#039;isDirty&#039; =&gt; true,\n\t\t\t\t\t\t  &#039;isNullo&#039; =&gt; false,\n\t\t\t\t\t\t  &#039;password&#039; =&gt; $pasword);\t\t\t\n\t\t\t$json_response = get_url(&#039;https:\/\/graphisoftid.graphisoft.com\/api\/Authenticate\/Login&#039;,&#039;POST&#039;,1,&#039;https:\/\/graphisoftid.graphisoft.com\/&#039;,$data);\n\t\t\t$obj = json_decode($json_response);\n\t\t\t$user_gsid = $obj-&gt;{&#039;GraphisoftUser&#039;}-&gt;{&#039;GsId&#039;};\n\t\t\tif ($user_gsid == &#039;&#039;) {\n\t\t\t\techo &quot;не смог зайти под пользователем в личный кабинет\\n&quot;;\n\t\t\t} else {\n\t\t\t\t$data = array(&#039;actionId&#039; =&gt; 2,\n\t\t\t\t\t\t\t  &#039;companyGsId&#039; =&gt; $companyGsId,\n\t\t\t\t\t\t\t  &#039;graphisoftUserGsId&#039; =&gt; $user_gsid,\n\t\t\t\t\t\t\t  &#039;reactionId&#039; =&gt; 1);\n\t\t\t\tget_url(&#039;https:\/\/graphisoftid.graphisoft.com\/api\/user\/ProcessingPendingRequest&#039;,&#039;PUT&#039;,1,&#039;https:\/\/graphisoftid.graphisoft.com\/&#039;,$data);\n\t\t\t\techo &quot;сотрудник подтвердил приглашение\\n&quot;;\n\t\t\t}\n\t\t} else {\n\t\t\techo &quot;у меня не получилось подтвердить регистрацию...  извините\\n&quot;;\n\t\t}\n\t}\n} else {\n\techo &quot;$email уже зарегистрирован в системе\\n&quot;;\n}\n\/\/ удаляем старые куки\nunlink(dirname(__FILE__).&#039;\/cookie.txt&#039;);\n?&gt;<\/code><\/pre>",
            "date_published": "2021-09-24T18:45:02+03:00",
            "date_modified": "2021-09-24T18:44:58+03:00",
            "tags": [
                "argicad",
                "graphisoft",
                "php",
                "автоматизация"
            ],
            "image": "https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-09-24_184451.png",
            "_date_published_rfc2822": "Fri, 24 Sep 2021 18:45:02 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "41",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": [
                    "https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-09-24_184451.png"
                ]
            }
        },
        {
            "id": "38",
            "url": "https:\/\/itscience.pro\/all\/podgotovka-mnogostranichnyh-tiff-dlya-nalog-ru\/",
            "title": "подготовка многостраничных TIFF для nalog.ru",
            "content_html": "<p>когда для налоговой нужно подготовить документы в формате многостраничных монохромных TIFF с разрешением 300х300 dpi приходит в помощь linux<\/p>\n<p>предположим у вас уже есть многостраничный pdf «multipage-input.pdf»<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">gs -o multipage-tiffg.tif -sDEVICE=tiffgray -r300x300 multipage-input.pdf<\/code><\/pre><p>создаём многостраничный TIFF «multipage-tiffg.tif» в оттенках серого, разрешением 300dpi<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">convert multipage-tiffg.tif -monochrome -compress lzw mono.tif<\/code><\/pre><p>далее преобразуем в монохромный документ «mono.tif»<\/p>\n",
            "date_published": "2021-06-23T17:33:08+03:00",
            "date_modified": "2021-06-23T17:33:23+03:00",
            "tags": [
                "convert",
                "gs",
                "ImageMagic",
                "linux"
            ],
            "_date_published_rfc2822": "Wed, 23 Jun 2021 17:33:08 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "38",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "37",
            "url": "https:\/\/itscience.pro\/all\/testiruem-kitayskiy-opticheskiy-patchkord-10gbit-s\/",
            "title": "тестируем китайский оптический патчкорд 10Гбит\/с",
            "content_html": "<p>Позарился я на дешевый оптический патчкорд на 10Гбит\/с из Китая<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-06-03_132151.png\" width=\"800\" height=\"800\" alt=\"\" \/>\n<\/div>\n<p>2 SFP+ модуля и оптика всего за 1000 руб.<\/p>\n<p>Продавец молодец, сразу спрашивает для какого оборудования нужно, т. к. брендовые производители стараются защитить свою продукцию и не работают с «левыми» SFP.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-06-03_132546.png\" width=\"592\" height=\"386\" alt=\"\" \/>\n<\/div>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-06-03_132619.png\" width=\"619\" height=\"387\" alt=\"\" \/>\n<\/div>\n<p>К моему сожалению, я пропустил этот вопрос китайского друга и увидел когда уже был выслан универсальный патчкорд.<\/p>\n<p>Честно, я переживал, так как у нас свитчи HP и получилось так, что я просто выкинул деньги.<\/p>\n<p>После получения посылки проверить все равно решили, выкладываю результаты небольшого теста<br \/>\nв тесте участвовали две машины с сетевыми картами Asus 10-Gigabit XG-C100C, подключенные медью к свитчам HPE 1950 24G 2SFP+ 2XGT Switch и HPE 1950 48G 2SFP+ 2XGT Switch.<\/p>\n<p>Первый iperf замер был произведен при соединении свитчей медью<\/p>\n<div class=\"e2-text-picture\">\n<div class=\"fotorama\" data-width=\"800\" data-ratio=\"1.3333333333333\">\n<img src=\"https:\/\/itscience.pro\/pictures\/IMG_20210603_113217.jpg\" width=\"800\" height=\"600\" alt=\"\" \/>\n<img src=\"https:\/\/itscience.pro\/pictures\/IMG_20210603_113222.jpg\" width=\"800\" height=\"600\" alt=\"\" \/>\n<\/div>\n<\/div>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-06-03_133748.png\" width=\"560\" height=\"291\" alt=\"\" \/>\n<div class=\"e2-text-caption\">результат со стороны клиента<\/div>\n<\/div>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-06-03_133827.png\" width=\"561\" height=\"396\" alt=\"\" \/>\n<div class=\"e2-text-caption\">результат со стороны сервера<\/div>\n<\/div>\n<p>Второй iperf замер был произведен при соединении свитчей оптикой<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/IMG_20210603_113457.jpg\" width=\"800\" height=\"600\" alt=\"\" \/>\n<\/div>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-06-03_133935.png\" width=\"559\" height=\"289\" alt=\"\" \/>\n<div class=\"e2-text-caption\">результат со стороны клиента<\/div>\n<\/div>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-06-03_134014.png\" width=\"561\" height=\"323\" alt=\"\" \/>\n<div class=\"e2-text-caption\">результат со стороны сервера<\/div>\n<\/div>\n<p>Вывод: такие патчкорды — работают, хоть и дешево, но заявленные показатели мы увидели.<\/p>\n<p>PS проверили соединение с еще одним свитчом D-Link DGS-1510-52X, уже без тестов скорости, по индикации свитчей поднялся линк 10Гбит\/с.<\/p>\n",
            "date_published": "2021-06-03T13:47:54+03:00",
            "date_modified": "2021-06-03T13:51:26+03:00",
            "tags": [
                "iperf",
                "SFP+",
                "китай",
                "оптический патчкорд",
                "тест"
            ],
            "image": "https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-06-03_132151.png",
            "_date_published_rfc2822": "Thu, 03 Jun 2021 13:47:54 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "37",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "jquery\/jquery.js",
                    "fotorama\/fotorama.css",
                    "fotorama\/fotorama.js"
                ],
                "og_images": [
                    "https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-06-03_132151.png",
                    "https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-06-03_132546.png",
                    "https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-06-03_132619.png",
                    "https:\/\/itscience.pro\/pictures\/IMG_20210603_113217.jpg",
                    "https:\/\/itscience.pro\/pictures\/IMG_20210603_113222.jpg",
                    "https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-06-03_133748.png",
                    "https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-06-03_133827.png",
                    "https:\/\/itscience.pro\/pictures\/IMG_20210603_113457.jpg",
                    "https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-06-03_133935.png",
                    "https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-06-03_134014.png"
                ]
            }
        },
        {
            "id": "34",
            "url": "https:\/\/itscience.pro\/all\/sozdanie-paketov-synology-1-chast-podgotovka-rabochego-prostrans\/",
            "title": "создание пакетов synology (1 часть, подготовка рабочего пространства)",
            "content_html": "<p>Сейчас я вам расскажу простым и доступным языком как создавать пакеты Synology. За основу возьму официальную статью с сайта <a href=\"https:\/\/help.synology.com\/developer-guide\/create_package\/build_and_create_package.html\">https:\/\/help.synology.com\/developer-guide\/create_package\/build_and_create_package.html<\/a><\/p>\n<p>туториал будет состоять из нескольких частей, чтобы не делать огромную простыню<\/p>\n<p>Для начала нам понадобится linux сервер, например Ubuntu<\/p>\n<p>раскатываем малявку mini <a href=\"http:\/\/archive.ubuntu.com\/ubuntu\/dists\/focal\/main\/installer-amd64\/current\/legacy-images\/netboot\/mini.iso\">http:\/\/archive.ubuntu.com\/ubuntu\/dists\/focal\/main\/installer-amd64\/current\/legacy-images\/netboot\/mini.iso<\/a><\/p>\n<p>я делал виртуальный...<\/p>\n<p>после установки работаем из под sudo (обязательно)<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">sudo su<\/code><\/pre><p>устанавливаем python, git,  gpg<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">apt install python git gpg<\/code><\/pre><p>создаем папку <b>toolkit<\/b> в корне системы (для этого и нужны root права)<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">mkdir -p \/toolkit\ncd \/toolkit<\/code><\/pre><p>скачиваем toolkit<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">git clone https:\/\/github.com\/SynologyOpenSource\/pkgscripts-ng pkgscripts\ncd \/toolkit\/pkgscripts\/<\/code><\/pre><p>готовим среду для сборки, например для DSM 6.x и архитектуры x64<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">.\/EnvDeploy -v 6.0 -p x64<\/code><\/pre><p>посмотреть список доступных платформ можно так:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">.\/EnvDeploy -v 6.0 --list<\/code><\/pre><p>создаем GPG ключ<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">gpg --gen-key<\/code><\/pre><p>в процессе генерации нам надо будет указать свое имя и свой e-mail, а так же придумать фразу-пароль... но, на самом деле это просто пароль, т. к. не сработало с кириллицей, с латиницей с пробелами, получилось только указать длинный пароль из латинских символов заглавных строчных и цифр.<\/p>\n<p>все что мы сгенерировали попадает в папку <b>\/root\/.gnupg\/<\/b>, которую надо скопировать сюда <b>\/toolkit\/build_env\/ds.x64-6.0\/root\/<\/b><\/p>\n<p>теперь проверяем что у нас получилось<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">cd \/toolkit\/build_env\/ds.x64-6.0\/\nchroot .\ngpg -K<\/code><\/pre><p>в результате видим примерно следующее:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">\/root\/.gnupg\/pubring.kbx\n------------------------\nsec   rsa3072\/6BFF2816 2021-05-07 [expires: 2023-05-07]\nuid       [ultimate] Aleksey Voronin &lt;mail@domain.ru&gt;\nssb   rsa3072\/15BC6096 2021-05-07 [expires: 2023-05-07]<\/code><\/pre><p>все получилось, выходим из chroot<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">exit<\/code><\/pre><p>мы подготовили рабочее пространство, дальше попробуем создать тестовый пакет<\/p>\n",
            "date_published": "2021-05-07T13:35:09+03:00",
            "date_modified": "2021-05-07T13:34:28+03:00",
            "tags": [
                "Build Environment",
                "GPG Key",
                "spk",
                "synology",
                "Toolkit"
            ],
            "_date_published_rfc2822": "Fri, 07 May 2021 13:35:09 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "34",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "33",
            "url": "https:\/\/itscience.pro\/all\/otslezhivaem-podklyucheniya-po-vpn-na-pfsense\/",
            "title": "отслеживаем подключения по vpn на pfsense",
            "content_html": "<p>Пандемия 2020 дала свои плоды: удаленная работа, массовое использование VPN. Конечно, любое руководство захочет контролировать удаленное подключение\/отключение сотрудников. У себя в компании мы интегрировали VPN в пропускную систему создав виртуальный контроллер. Теперь отдел кадров видит кто посещал рабочее место зайдя в офис или подключался удаленно. Полностью расписывать весь механизм я не стану, лишь опубликую как можно организовать получение событий со шлюза на pfsense.<\/p>\n<p>Для начала создаём сервер на ubuntu, например, виртуальный. Требования минимальны: 1 CPU, 256Мб памяти, 10Гб диск. Я щедро выделил 1Гб памяти и 100 Гб диска, вот что реально потребляет система:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-04-21_112612.png\" width=\"644\" height=\"90\" alt=\"\" \/>\n<\/div>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-04-21_120015.png\" width=\"569\" height=\"164\" alt=\"\" \/>\n<\/div>\n<p>Качаем минимальный дистрибутив в 74Мб <a href=\"http:\/\/archive.ubuntu.com\/ubuntu\/dists\/focal\/main\/installer-amd64\/current\/legacy-images\/netboot\/mini.iso\">http:\/\/archive.ubuntu.com\/ubuntu\/dists\/focal\/main\/installer-amd64\/current\/legacy-images\/netboot\/mini.iso<\/a><\/p>\n<p>устанавливаем syslog-ng<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">sudo apt update\nsudo apt install syslog-ng<\/code><\/pre><p>создаем конфиг \/etc\/syslog-ng\/conf.d\/external_log.conf<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">source s_udp {\n    udp(port(514));\n};\ndestination d_PFSENSE_VPN {\n     program(&quot;\/usr\/bin\/php \/home\/user\/pfsense_vpn.php&quot; );\n};\nfilter f_PFSENSE_VPN {\n    host(&quot;192.168.#.#&quot;);\n    match(&quot;,l2tp,&quot; value (&quot;MESSAGE&quot;));\n};\nlog {\n    source(s_udp);\n    filter(f_PFSENSE_VPN);\n    destination(d_PFSENSE_VPN);\n};\ndestination d_PFSENSE_OPENVPN {\n     program(&quot;\/usr\/bin\/php \/home\/user\/pfsense_vpn.php&quot; );\n};\nfilter f_PFSENSE_OPENVPN {\n    host(&quot;192.168.#.#&quot;);\n    program(&quot;openvpn&quot;);\n};\nlog {\n    source(s_udp);\n    filter(f_PFSENSE_OPENVPN);\n    destination(d_PFSENSE_OPENVPN);\n};<\/code><\/pre><p>где 192.168.#.# — ip-адрес pfsense<\/p>\n<p>перенаправим логи с pfsense на наш маленький сервер, здесь мы их будем парсить и обрабатывать как нам нужно<\/p>\n<p>в моём примере, мы создаем два фильтра <b>f_PFSENSE_VPN<\/b> и <b>f_PFSENSE_OPENVPN<\/b> для того чтобы скриптом обрабатывать только события связанные с подключением и отключением по протоколам l2tp и OpenVPN (актуально для формата логов pfsense версии 2.5.1<\/p>\n<p>есть два destination, но по сути они ссылаются на один и тот же скрипт <b>d_PFSENSE_VPN<\/b> и <b>d_PFSENSE_OPENVPN<\/b><\/p>\n<p>со стороны pfsense настраиваем пересылку логов на наш сервер<\/p>\n<p>Status -> System Logs -> Settings<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-04-21_114737.png\" width=\"800\" height=\"504.92957746479\" alt=\"\" \/>\n<\/div>\n<p>указываем ip-адрес и порт нашего сервера и ставим галочку «VPN Events (IPsec, OpenVPN, L2TP, PPPoE Server)», т. к. нам нужны только события удаленных подключений<\/p>\n<p>с парсером, я думаю, вы справитесь, приведу пример логов для OpenVPN:<br \/>\nподключение<\/p>\n<\/code><p>Jun 25 18:29:57 192.168.#.# openvpn: user ’user_name’ authenticated<\/p>\n<\/code><p>отключение<\/p>\n<\/code><p>Jun 25 18:57:34 192.168.#.# openvpn[16766]: user_name\/132.252.198.166:6182 Connection reset, restarting [-1]<\/p>\n<\/code><p>С l2tp еще проще:<br \/>\nподключение<\/p>\n<\/code><p>Jun 25 18:29:57 192.168.#.# root: login,l2tp,192.168.111.#,user_name<\/p>\n<\/code><p>отключение<\/p>\n<\/code><p>Jun 25 18:57:34 192.168.#.# root: logout,l2tp,192.168.111.#,user_name<\/p>\n<\/code>",
            "date_published": "2021-04-21T12:01:04+03:00",
            "date_modified": "2021-04-21T12:00:30+03:00",
            "tags": [
                "l2tp",
                "logging",
                "openvpn",
                "pfsense",
                "syslog-ng",
                "ubuntu",
                "vpn",
                "Логирование"
            ],
            "image": "https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-04-21_112612.png",
            "_date_published_rfc2822": "Wed, 21 Apr 2021 12:01:04 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "33",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": [
                    "https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-04-21_112612.png",
                    "https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-04-21_120015.png",
                    "https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-04-21_114737.png"
                ]
            }
        },
        {
            "id": "32",
            "url": "https:\/\/itscience.pro\/all\/mozhno-li-v-synology-sozdat-odin-razdel-na-2-ustroystva\/",
            "title": "можно ли в synology создать один раздел на 2 устройства?",
            "content_html": "<p>Собственно вопрос в заголовке, я понимаю, сейчас есть носители очень большой ёмкости и из них можно создать RAID тома запредельного размера, но все же.  Мне было интересно возможно ли диски самого сервера и модуля расширения объединить в один том, на котором создать один раздел? ответ — можно.<\/p>\n<p>Дальше делюсь опытом:<br \/>\nесть сервер <b>RS4017xs+<\/b> и блок расширения <b>RX1217rp<\/b>, забитые под завязку дисками по 8Тб (7,3ТиБ);<\/p>\n<p>на основном сервере существует пул хранения RAID5 из 15 дисков, 16 используется как Hot Spare, и том, растянутый на весь пул, радел с данными, как видно из скринов:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-04-14_170810.png\" width=\"701\" height=\"802\" alt=\"\" \/>\n<\/div>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-04-14_164955.png\" width=\"740\" height=\"240\" alt=\"\" \/>\n<\/div>\n<p>Обратите внимание, что пул создавался с поддержкой нескольких томов и было выбрано максимальное количество дисков в RAID массиве — 24, это важно, дальше станет понятно.<\/p>\n<p>после подключения модуля расширения (он у нас был подключен и использовался, поэтому пришлось слить все данные на один том) вы сможете выбрать дополнительные диски для расширения основного тома, см. скрин<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-04-14_171423.png\" width=\"800\" height=\"314.76709613479\" alt=\"\" \/>\n<\/div>\n<p>на изображении я уже добавил дисков и идет процесс расширения<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-04-14_172234.png\" width=\"800\" height=\"733.33333333333\" alt=\"\" \/>\n<\/div>\n<p>процесс совсем не быстрый, занял около четырех дней<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-04-14_172920.png\" width=\"697\" height=\"1054\" alt=\"\" \/>\n<\/div>\n<p>но оно стоило того, теперь доступный объем пула стал 167ТБ<br \/>\nи осталось растянуть том до максимального размера, а это заняло пару минут<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-04-14_173114.png\" width=\"731\" height=\"229\" alt=\"\" \/>\n<\/div>\n<p>Плюсы:<\/p>\n<ul>\n<li>данные не пострадали<\/li>\n<li>мы перешли границу одного сервера и создали единое пространство хранения<\/li>\n<li>это можно сделать на «живой» машине<\/li>\n<\/ul>\n<p>Минусы:<\/p>\n<ul>\n<li>RAID5 может включать в себя максимум 24 диска<\/li>\n<li>скорость работы тома ниже из-за ограничений соединения сервера и модуля расширения, но не менее 700 Мб\/с, мы использовали для backup сервера, где скорость записи не критична, зато важен объем<\/li>\n<\/ul>\n<p>В документации synology я не нашел однозначного ответа можно ли такое проворачивать с живыми данными, оказалось можно. Проверено, пользутесь.<\/p>\n",
            "date_published": "2021-04-14T17:37:05+03:00",
            "date_modified": "2021-04-14T17:36:13+03:00",
            "tags": [
                "RS4017xs+",
                "RX1217rp",
                "synology",
                "расширение"
            ],
            "image": "https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-04-14_170810.png",
            "_date_published_rfc2822": "Wed, 14 Apr 2021 17:37:05 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "32",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-04-14_170810.png",
                    "https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-04-14_164955.png",
                    "https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-04-14_171423.png",
                    "https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-04-14_172234.png",
                    "https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-04-14_172920.png",
                    "https:\/\/itscience.pro\/pictures\/izobrazhenie_2021-04-14_173114.png"
                ]
            }
        },
        {
            "id": "31",
            "url": "https:\/\/itscience.pro\/all\/otpravka-e-mail-iz-komandnoy-stroki\/",
            "title": "отправка e-mail из командной строки",
            "content_html": "<p>Потребовалось сделать рассылку напоминаний об оплате услуг, раз в месяц. Городить сложные скрипты не хотелось. Воспользовался протоколом SMTP и утилитой curl.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">#!\/bin\/bash\n\n# получаем прошлый месяц и год, название месяца на русском\npast_month=$(LC_ALL=ru_RU.UTF-8 date -d &quot;-1 month&quot; +%B\\ %Y)\n\n# Отправляем письмо одной строкой через сервис яндекс\ncurl --url &#039;smtps:\/\/smtp.yandex.ru:465&#039; --ssl-reqd --mail-from &#039;from@yandex.ru&#039; --mail-rcpt &#039;to@gmail.com&#039; --user &#039;from@yandex.ru:password&#039; -T &lt;(echo -e &quot;From: encoded_sender_name &lt;from@yandex.ru&gt;\\nTo: encoded_recipient_name &lt;to@gmail.com&gt;\\nSubject: encoded_subject\\n\\nНапоминиание об оплате за $past_month!&quot;)<\/code><\/pre><p>как работает:<br \/>\nв переменную <b>$past_month<\/b> получаем предыдущий месяц прописью и год, для этого включаем русскую локаль<\/p>\n<p>следом отправляем письмо, авторизовавшись на сервере SMTP, используем подключение ssl, чтобы безопасно =) и построчно скармливаем команды серверу<\/p>\n<p><b>encoded_sender_name<\/b>, <b>encoded_recipient_name<\/b> и <b>encoded_subject<\/b>  кодируйте, если используете не латинские символы <a href=\"https:\/\/en.wikipedia.org\/wiki\/MIME#Encoded-Word\">https:\/\/en.wikipedia.org\/wiki\/MIME#Encoded-Word<\/a><\/p>\n",
            "date_published": "2021-04-14T14:55:31+03:00",
            "date_modified": "2021-04-14T22:35:38+03:00",
            "tags": [
                "bash",
                "curl",
                "SMTP"
            ],
            "_date_published_rfc2822": "Wed, 14 Apr 2021 14:55:31 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "31",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "30",
            "url": "https:\/\/itscience.pro\/all\/lechim-pochtovye-vlozheniya-winmail-dat\/",
            "title": "лечим почтовые вложения winmail.dat",
            "content_html": "<p>Проблема древняя и как водится связана с попыткой Microsoft навязывать свои стандарты. Откуда берется почтовое вложение winmail.dat вы можете почитать тут: <a href=\"https:\/\/support.mozilla.org\/ru\/kb\/chto-oznachaet-vlozhenie-winmaildat\">https:\/\/support.mozilla.org\/ru\/kb\/chto-oznachaet-vlozhenie-winmaildat<\/a><\/p>\n<p>сегодня мы решим эту проблему глобально, прокачаем наш postfix сервер<\/p>\n<ol start=\"1\">\n<li>Установим MIMEDefang.<\/li>\n<\/ol>\n<blockquote>\n<p>для CentOS<\/p>\n<\/blockquote>\n<pre class=\"e2-text-code\"><code class=\"\">yum install mimedefang<\/code><\/pre><blockquote>\n<p>для Ubuntu<\/p>\n<\/blockquote>\n<pre class=\"e2-text-code\"><code class=\"\">apt-get install mimedefang<\/code><\/pre><ol start=\"2\">\n<li>Настроим MIMEDefang на определенный порт TCP, наша служба будет слушать этот порт. Для этого исправим конфигурацию<\/li>\n<\/ol>\n<blockquote>\n<p>для CentOS: \/etc\/sysconfig\/mimedefang<br \/>\nдля Ubuntu: \/etc\/default\/mimedefang<\/p>\n<\/blockquote>\n<blockquote>\n<p>дописываем в конце<\/p>\n<\/blockquote>\n<pre class=\"e2-text-code\"><code class=\"\">SOCKET=inet:10185<\/code><\/pre><ol start=\"3\">\n<li>Отредактируем файл  <b>\/etc\/mail\/mimedefang-filter<\/b>, можете просто вставить текст ниже<\/li>\n<\/ol>\n<pre class=\"e2-text-code\"><code class=\"\"># -*- Perl -*-\n#***********************************************************************\n#\n# mimedefang-filter\n#\n# Suggested minimum-protection filter for Microsoft Windows clients, plus\n# SpamAssassin checks if SpamAssassin is installed.\n#\n# Copyright (C) 2002 Roaring Penguin Software Inc.\n#\n# This program may be distributed under the terms of the GNU General\n# Public License, Version 2, or (at your option) any later version.\n#\n# $Id$\n#***********************************************************************\n\n#***********************************************************************\n# Set administrator&#039;s e-mail address here.  The administrator receives\n# quarantine messages and is listed as the contact for site-wide\n# MIMEDefang policy.  A good example would be &#039;defang-admin@mydomain.com&#039;\n#***********************************************************************\n$AdminAddress = &#039;postmaster@localhost&#039;;\n$AdminName = &quot;MIMEDefang Administrator&#039;s Full Name&quot;;\n\n#***********************************************************************\n# Set the e-mail address from which MIMEDefang quarantine warnings and\n# user notifications appear to come.  A good example would be\n# &#039;mimedefang@mydomain.com&#039;.  Make sure to have an alias for this\n# address if you want replies to it to work.\n#***********************************************************************\n$DaemonAddress = &#039;mimedefang@localhost&#039;;\n\n#***********************************************************************\n# If you set $AddWarningsInline to 1, then MIMEDefang tries *very* hard\n# to add warnings directly in the message body (text or html) rather\n# than adding a separate &quot;WARNING.TXT&quot; MIME part.  If the message\n# has no text or html part, then a separate MIME part is still used.\n#***********************************************************************\n$AddWarningsInline = 0;\n\n#***********************************************************************\n# To enable syslogging of virus and spam activity, add the following\n# to the filter:\n# md_graphdefang_log_enable();\n# You may optionally provide a syslogging facility by passing an\n# argument such as:  md_graphdefang_log_enable(&#039;local4&#039;);  If you do this, be\n# sure to setup the new syslog facility (probably in \/etc\/syslog.conf).\n# An optional second argument causes a line of output to be produced\n# for each recipient (if it is 1), or only a single summary line\n# for all recipients (if it is 0.)  The default is 1.\n# Comment this line out to disable logging.\n#***********************************************************************\nmd_graphdefang_log_enable(&#039;mail&#039;, 1);\n\n#***********************************************************************\n# Uncomment this to block messages with more than 50 parts.  This will\n# *NOT* work unless you&#039;re using Roaring Penguin&#039;s patched version\n# of MIME tools, version MIME-tools-5.411a-RP-Patched-02 or later.\n#\n# WARNING: DO NOT SET THIS VARIABLE unless you&#039;re using at least\n# MIME-tools-5.411a-RP-Patched-02; otherwise, your filter will fail.\n#***********************************************************************\n# $MaxMIMEParts = 50;\n\n#***********************************************************************\n# Set various stupid things your mail client does below.\n#***********************************************************************\n\n# Set the next one if your mail client cannot handle multiple &quot;inline&quot;\n# parts.\n$Stupidity{&quot;NoMultipleInlines&quot;} = 0;\n\n# Detect and load Perl modules\ndetect_and_load_perl_modules();\n\n\nsub filter {\n    my($entity, $fname, $ext, $type) = @_;\n \n    ### Convert TNEF winmail.dat format\n    ### Note: You must install Convert::TNEF and File::Type from CPAN before using this script\n    if (lc($type) eq &quot;application\/ms-tnef&quot; or lc($fname) eq &quot;winmail.dat&quot; ) {\n        use Convert::TNEF;\n        use File::Type;\n        use File::Temp qw(tempfile tempdir);\n \n        # Create a unique temporary directory under &quot;\/tmp&quot;\n        my $tnefdir = tempdir(CLEANUP =&gt; 1, DIR =&gt; &quot;\/tmp&quot;);\n        if (not $tnefdir) {\n                md_graphdefang_log(&#039;tnef_fail&#039;,&quot;Unable to create temporary directory&quot;);\n                return action_accept();\n        }\n \n        # If we can&#039;t Convert the TNEF file for some reason, just accept the attachment and log the error\n        my $tnef = Convert::TNEF-&gt;read_ent($entity,{output_dir=&gt;&quot;$tnefdir&quot;});\n        if (not $tnef) {\n                md_graphdefang_log(&#039;tnef_fail&#039;,$Convert::TNEF::errstr);\n                return action_accept();\n        }\n \n        my $ft = File::Type-&gt;new();\n \n        # Append attachments contained in the winmail.dat file to the message.\n        for ($tnef-&gt;attachments) {\n             # Determine the mime-type of the file\n             my $mimetype = $ft-&gt;mime_type($_-&gt;data);\n \n                # File::Type doesn&#039;t detect text files well, this is a workaround\n             if ($mimetype eq &quot;application\/octet-stream&quot;) {\n                  #Set the mime-type to text\/plain if the first 1024 characters are printable\n                  $text_check = substr($_-&gt;data,0,1024);\n                  $mimetype = &quot;text\/plain&quot; unless $text_check =~ \/[^[:print:]s]\/;\n             }\n \n             my $tnef_entity = action_add_part($entity, &quot;$mimetype&quot;, &quot;base64&quot;, $_-&gt;data, $_-&gt;longname, &quot;attachment&quot;);\n             md_graphdefang_log(&#039;tnef_ext&#039;, &quot;File: &quot; . $_-&gt;longname . &quot; Type: $mimetype&quot;);\n \n             # Run each new TNEF-sourced MIME part back through the filter again, this ensures that bad filenames etc.\n             # cannot sneak through by being contained in winmail.dat files\n \n             filter ($tnef_entity, $_-&gt;longname, &quot;&quot;, &quot;$mimetype&quot;);\n        }\n \n        # Deletes working files\n        $tnef-&gt;purge;\n\n \n        # Remark this if you want still want to keep the original winmail.dat file\n        return action_drop();\n    }\n \n    # Keep the attachment\n    return action_accept();\n}\n\n# DO NOT delete the next line, or Perl will complain.\n1;<\/code><\/pre><ol start=\"4\">\n<li>Установим модели Perl  <b>Convert::TNEF<\/b> и <b>File::Type<\/b><\/li>\n<\/ol>\n<blockquote>\n<p>для CentOS<\/p>\n<\/blockquote>\n<pre class=\"e2-text-code\"><code class=\"\">yum install perl-Convert-TNEF.noarch<\/code><\/pre><blockquote>\n<p>второй пакет надо скачать и установить<\/p>\n<\/blockquote>\n<pre class=\"e2-text-code\"><code class=\"\">wget https:\/\/ftp.tu-chemnitz.de\/pub\/linux\/dag\/redhat\/el6\/en\/x86_64\/rpmforge\/RPMS\/perl-File-Type-0.22-1.el6.rf.noarch.rpm<\/code><\/pre><pre class=\"e2-text-code\"><code class=\"\">yum install perl-File-Type-0.22-1.el6.rf.noarch.rpm<\/code><\/pre><blockquote>\n<p>для Ubuntu<\/p>\n<\/blockquote>\n<pre class=\"e2-text-code\"><code class=\"\">apt-get install libconvert-tnef-perl<\/code><\/pre><pre class=\"e2-text-code\"><code class=\"\">apt-get install libfile-type-perl<\/code><\/pre><ol start=\"5\">\n<li>Проверим синтаксис Perl<\/li>\n<\/ol>\n<pre class=\"e2-text-code\"><code class=\"\"># perl -c \/etc\/mail\/mimedefang-filter<\/code><\/pre><ol start=\"6\">\n<li>Настроим автозапуск службы MIMEDefang и запустим ее<\/li>\n<\/ol>\n<pre class=\"e2-text-code\"><code class=\"\">systemctl enable mimedefang.service<\/code><\/pre><pre class=\"e2-text-code\"><code class=\"\">service mimedefang restart<\/code><\/pre><ol start=\"7\">\n<li>Проверим, слушает ли сервис указанный выше порт<\/li>\n<\/ol>\n<pre class=\"e2-text-code\"><code class=\"\"># netstat -tlpn | grep 10185\ntcp        0      0 0.0.0.0:10185           0.0.0.0:*               LISTEN      7401\/mimedefang<\/code><\/pre><ol start=\"8\">\n<li>Теперь добавим проверку в Postfix, для этого откроем конфиг <b>\/etc\/postfic\/main.cf<\/b><\/li>\n<\/ol>\n<blockquote>\n<p>и допишем в конце<\/p>\n<\/blockquote>\n<pre class=\"e2-text-code\"><code class=\"\">smtpd_milters = inet:localhost:10185\nmilter_default_action = accept<\/code><\/pre><p>готово! Любое письмо, которое будет иметь во вложении winmail.dat, будет обработано нашей службой и вложение будет расшифровано!<\/p>\n",
            "date_published": "2020-12-21T11:47:09+03:00",
            "date_modified": "2020-12-21T11:46:58+03:00",
            "tags": [
                "MIMEDefang",
                "Perl",
                "Postfix",
                "winmail.dat"
            ],
            "_date_published_rfc2822": "Mon, 21 Dec 2020 11:47:09 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "30",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "29",
            "url": "https:\/\/itscience.pro\/all\/kodiruem-video-s-ispolzovaniem-gpu\/",
            "title": "кодируем видео с использованием GPU",
            "content_html": "<p>Для кодирования видео я использую приложение  HandBrake. При сжатии ролика длиной 1 час 35 минут в h.265, с настройками по умолчанию, у меня тратилось примерно 35 минут с процессором i5-8300H.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/001.png\" width=\"800\" height=\"596.8\" alt=\"\" \/>\n<\/div>\n<p>я конечно же погуглил и нашел, что можно использовать gpu (<a href=\"https:\/\/handbrake.fr\/docs\/en\/latest\/technical\/video-nvenc.html)\">https:\/\/handbrake.fr\/docs\/en\/latest\/technical\/video-nvenc.html)<\/a><\/p>\n<p>переходим в настройки программы, активируем поддержку gpu<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/003-1.png\" width=\"800\" height=\"327.2\" alt=\"\" \/>\n<\/div>\n<p>в настройках кодека выбираем h.265 (Nvidia NVEnc)<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/002-1.png\" width=\"800\" height=\"870.4\" alt=\"\" \/>\n<\/div>\n<p>и смотрим результат, тот же ролик кодируется не 35 минут, а 4 минуты, ускорение практически в 10 раз<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/004-1.png\" width=\"800\" height=\"450.4\" alt=\"\" \/>\n<\/div>\n",
            "date_published": "2020-05-07T11:31:47+03:00",
            "date_modified": "2020-05-07T11:31:21+03:00",
            "tags": [
                "CPU",
                "GPU",
                "HandBrake",
                "Nvidia NVEnc"
            ],
            "image": "https:\/\/itscience.pro\/pictures\/001.png",
            "_date_published_rfc2822": "Thu, 07 May 2020 11:31:47 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "29",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/itscience.pro\/pictures\/001.png",
                    "https:\/\/itscience.pro\/pictures\/003-1.png",
                    "https:\/\/itscience.pro\/pictures\/002-1.png",
                    "https:\/\/itscience.pro\/pictures\/004-1.png"
                ]
            }
        },
        {
            "id": "27",
            "url": "https:\/\/itscience.pro\/all\/kak-otkryt-pochtovy-arhiv-s-gmail\/",
            "title": "как открыть почтовый архив с gmail",
            "content_html": "<p>Пришлось перевозить почтовые ящики и все сопутствующее с gmail на частный сервер, процесс расписывать не буду, т. к. довольно рутинный с кучей скриптов и т. д. чтобы все разложить по папкам. Расскажу как открыть этот архив сообщений.<br \/>\nВсе сообщения склеена в один весомый файл, по сути все eml сложены туда.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/001-1.PNG\" width=\"800\" height=\"108\" alt=\"\" \/>\n<\/div>\n<p>Нам понадобится Thunderbird и расширение ImportExportTools NG.<\/p>\n<p>Устанавливаем почтовую программу, затем ставим расширение (чтобы попасть в меню программы нажмите Alt).<\/p>\n<p>создаем локальную папку<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/002.png\" width=\"700\" height=\"328\" alt=\"\" \/>\n<\/div>\n<p>правой клавишей на ней кликаем и выбираем импорт mbox<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/003.png\" width=\"800\" height=\"386.4\" alt=\"\" \/>\n<\/div>\n<p>некоторое время письма подгружаются и дальше с ними можно работать как с обычными, единственное все письма будут в одной папке, нет разделения на входящие\/исходящие<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/004.png\" width=\"800\" height=\"218.4\" alt=\"\" \/>\n<\/div>\n<p>но! можно использовать как экстренный вариант<\/p>\n",
            "date_published": "2020-05-06T15:08:43+03:00",
            "date_modified": "2020-05-06T15:08:27+03:00",
            "tags": [
                "gmail",
                "ImportExportTools NG",
                "mbox",
                "Thunderbird"
            ],
            "image": "https:\/\/itscience.pro\/pictures\/001-1.PNG",
            "_date_published_rfc2822": "Wed, 06 May 2020 15:08:43 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "27",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/itscience.pro\/pictures\/001-1.PNG",
                    "https:\/\/itscience.pro\/pictures\/002.png",
                    "https:\/\/itscience.pro\/pictures\/003.png",
                    "https:\/\/itscience.pro\/pictures\/004.png"
                ]
            }
        },
        {
            "id": "26",
            "url": "https:\/\/itscience.pro\/all\/vklyuchaem-entware-v-padavan\/",
            "title": "включаем Entware в Padavan",
            "content_html": "<ol start=\"1\">\n<li>для начала подключаем флешку, да есть вариант использовать внутреннюю память устройства, но не забывайте, что количество циклов перезаписи ограничено, не стоит рисковать памятью устройства, пожертвуем флешкой<\/li>\n<\/ol>\n<ol start=\"1\">\n<li>флешка автоматически подмаунтится в систему, отключаем её, это нужно для возможности форматирования<\/li>\n<\/ol>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/001.PNG\" width=\"800\" height=\"596.8\" alt=\"\" \/>\n<\/div>\n<ol start=\"1\">\n<li>подключаемся по ssh и выполняем команду<\/li>\n<\/ol>\n<pre class=\"e2-text-code\"><code class=\"\">\/home\/root # fdisk -l<\/code><\/pre><ol start=\"1\">\n<li>находим имя нашего носителя, в моем случае это<\/li>\n<\/ol>\n<pre class=\"e2-text-code\"><code class=\"\">Disk \/dev\/sda: 4051 MB, 4051697664 bytes<\/code><\/pre><p>дальше мы будем форматировать раздел, обязательно проверьте объём, не хочется запороть роутер<\/p>\n<ol start=\"1\">\n<li>форматируем в ext2 (бытует мнение, что ext2 лучше)<\/li>\n<\/ol>\n<pre class=\"e2-text-code\"><code class=\"\">mke2fs \/dev\/sda1<\/code><\/pre><ol start=\"1\">\n<li>дальше придется переткнуть флешку, чтобы подключился раздел<br \/>\nв терминале создаем папку opt в корне флешки<\/li>\n<\/ol>\n<pre class=\"e2-text-code\"><code class=\"\">mkdir \/media\/AiDisk_a1\/opt<\/code><\/pre><p>AiDisk_a1 — мое имя носителя, когда будете в консоли набирать, после media нажмите tab и система дополнит имя<\/p>\n<ol start=\"1\">\n<li>дальше извлеките носитель (см. пункт 1) или из командной строки<\/li>\n<\/ol>\n<pre class=\"e2-text-code\"><code class=\"\">ejusb<\/code><\/pre><ol start=\"1\">\n<li>включите загрузку Entware<\/li>\n<\/ol>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/002.PNG\" width=\"700\" height=\"328\" alt=\"\" \/>\n<\/div>\n<ol start=\"1\">\n<li>опять переткните флешку и наблюдайте в логах, как у вас загрузится Entware<\/li>\n<\/ol>\n<pre class=\"e2-text-code\"><code class=\"\">May  4 14:33:00 opt-mount.sh: started [\/dev\/sda1 \/media\/AiDisk_a1]\nMay  4 14:33:06 opt-start.sh: call \/opt\/etc\/init.d\nMay  4 14:33:06 Entware: Installing entware opkg....\nMay  4 14:33:06 Entware: Creating folders...\nMay  4 14:33:06 Entware: Warning: Folder \/opt\/bin exists! If something goes wrong please clean \/opt folder and try again.\nMay  4 14:33:06 Entware: Warning: Folder \/opt\/etc\/init.d exists! If something goes wrong please clean \/opt folder and try again.\nMay  4 14:33:06 Entware: Warning: Folder \/opt\/sbin exists! If something goes wrong please clean \/opt folder and try again.\nMay  4 14:33:06 Entware: Warning: Folder \/opt\/var\/log exists! If something goes wrong please clean \/opt folder and try again.\nMay  4 14:33:06 Entware: Downloading \/opt\/bin\/opkg...\nMay  4 14:33:06 Entware: SUCCESS!\nMay  4 14:33:06 Entware: Downloading \/opt\/etc\/opkg.conf...\nMay  4 14:33:06 Entware: SUCCESS!\nMay  4 14:33:06 Entware: Downloading \/opt\/etc\/profile...\nMay  4 14:33:06 Entware: SUCCESS!\nMay  4 14:33:06 Entware: Downloading \/opt\/etc\/init.d\/rc.func...\nMay  4 14:33:07 Entware: SUCCESS!\nMay  4 14:33:07 Entware: Downloading \/opt\/etc\/init.d\/rc.unslung...\nMay  4 14:33:07 Entware: SUCCESS!\nMay  4 14:33:07 Entware: Updating opkg packages list...\nMay  4 14:33:07 Entware: SUCCESS!\nMay  4 14:33:07 Entware: Installing ldconfig findutils...\nMay  4 14:33:09 Entware: SUCCESS!\nMay  4 14:33:09 Entware: Congratulations!\nMay  4 14:33:09 Entware: If there are no errors above then Entware successfully initialized.\nMay  4 14:33:09 Entware: Found a Bug? Please report at https:\/\/github.com\/Entware-ng\/Entware-ng\/issues<\/code><\/pre><ol start=\"1\">\n<li>я вас поздравляю, все прошло успешно теперь в консоли наберите для обновления списков пакетов<\/li>\n<\/ol>\n<pre class=\"e2-text-code\"><code class=\"\">opkg update<\/code><\/pre><ol start=\"1\">\n<li>а дальше ставьте что нужно, например Midnight Commander<\/li>\n<\/ol>\n<pre class=\"e2-text-code\"><code class=\"\">opkg install mc<\/code><\/pre>",
            "date_published": "2020-05-04T22:09:33+03:00",
            "date_modified": "2020-05-04T22:09:14+03:00",
            "tags": [
                "entware",
                "ext2",
                "opkg",
                "padavan"
            ],
            "image": "https:\/\/itscience.pro\/pictures\/001.PNG",
            "_date_published_rfc2822": "Mon, 04 May 2020 22:09:33 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "26",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": [
                    "https:\/\/itscience.pro\/pictures\/001.PNG",
                    "https:\/\/itscience.pro\/pictures\/002.PNG"
                ]
            }
        },
        {
            "id": "25",
            "url": "https:\/\/itscience.pro\/all\/mail-server-i-mail-station\/",
            "title": "Mail Server и Mail Station",
            "content_html": "<p>Из бесплатных решений у synology есть два пакета, почтовый сервер на базе Postfix и пользовательский web клиент.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/mail01.PNG\" width=\"800\" height=\"168.98656898657\" alt=\"\" \/>\n<\/div>\n<p>давайте рассмотрим функционал сервера<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/mail02.PNG\" width=\"800\" height=\"504.44624090542\" alt=\"\" \/>\n<\/div>\n<ul>\n<li>есть поддержка как локальных пользователей, так и доменных (есть возможность использовать как корпоративное решение)<\/li>\n<li>использование основного домена и элиасов, т. е. пользователь автоматически получает почту с адресов user@domain.ru, user@aliase.ru и т. д.<\/li>\n<\/ul>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/mail03.PNG\" width=\"800\" height=\"506.39511201629\" alt=\"\" \/>\n<\/div>\n<ul>\n<li>поддержка протоколов как IMAP, так и POP3<\/li>\n<li>обратите внимание на использование ssl, этот важный бонус вы оцените позже<\/li>\n<\/ul>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/mail04.PNG\" width=\"800\" height=\"433.84494293585\" alt=\"\" \/>\n<\/div>\n<p>безопасность прокачена просто на высоте, есть возможность использовать все современные технологии<\/p>\n<ul>\n<li>защита от СПАМа с использованием модуля SpamAssassin<\/li>\n<li>поддержка блэклистов DNSBL<\/li>\n<\/ul>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/mail05.PNG\" width=\"800\" height=\"428.51516345018\" alt=\"\" \/>\n<\/div>\n<ul>\n<li>есть возможность включить антивирус на базе ClamAV, я не включаю, т. к. значительно тратится память, а эффективность под вопросом, чаще происходят ложные срабатывания<\/li>\n<\/ul>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/mail06.PNG\" width=\"800\" height=\"427.59164367363\" alt=\"\" \/>\n<\/div>\n<ul>\n<li>можно создавать чёрные и белые списки, глобально для всех пользователей сервера, кстати очень гибкий редактор, см. ниже<\/li>\n<li>можно установить ежедневные квоты на отправку сообщений, можно общее значение, можно индивидуально пользователям, удобно если чей-то ящик взломают — это не перерастет в лавинную отправку спама<\/li>\n<li>фильтр вложений, можно задать запрещенные расширения файлов для пересылки (по-умолчанию, присутствует список самых распространенных исполняемых файлов)<\/li>\n<\/ul>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/mail07.PNG\" width=\"800\" height=\"543.23144104803\" alt=\"\" \/>\n<\/div>\n<p>подробнее настройка чёрного и белого списка, обратите внимание на возможности делать исключения<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/mail08.PNG\" width=\"800\" height=\"448.51837218491\" alt=\"\" \/>\n<\/div>\n<p>реализована защита от вредоносного содержимого письма, так же все настраивается<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/mail09.PNG\" width=\"800\" height=\"547.05184012663\" alt=\"\" \/>\n<\/div>\n<p>и самое, на мой взгляд, важное, это настройки SPF,  DKIM и защита DMARK, сейчас современный почтовый сервер не может существовать без всего этого<br \/>\nесли вы не знаете, что это такое — не беда, открываете Справку и читаете как правильно настроить DNS<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/mail11.PNG\" width=\"800\" height=\"448.63366336634\" alt=\"\" \/>\n<\/div>\n<p>да, Справка в Synology очень крутая!<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/mail10.PNG\" width=\"800\" height=\"429.69984202212\" alt=\"\" \/>\n<\/div>\n<p>есть возможность использовать псевдонимы не только внутренних пользователей, а можно настроить пересылку на внешние ящики, это круто<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/mail12.PNG\" width=\"800\" height=\"436.21984974298\" alt=\"\" \/>\n<\/div>\n<p>автоматическая скрытая копия, это что-то из области слежения<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/mail13.PNG\" width=\"800\" height=\"421.88739095956\" alt=\"\" \/>\n<\/div>\n<p>таблица с текущей очередью сообщений, с возможностью удаления, повторной отправки и очистки сообщений<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/mail14.PNG\" width=\"800\" height=\"449.4275562574\" alt=\"\" \/>\n<\/div>\n<p>журнал, полезная вещь, можно сразу увидеть было ли доставлено сообщение и когда, а также ошибки отправки, самое же важное, на мой взгляд, это возможность выгрузить лог postfix, сам пользовался и не раз<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/mail15.PNG\" width=\"800\" height=\"458.45909451946\" alt=\"\" \/>\n<\/div>\n<p>довольно подробный в текстовом формате отчет об отправленных, полученных, заблокированных сообщений, можно настроить получение на любой ящик<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/mail16.PNG\" width=\"800\" height=\"431.45001975504\" alt=\"\" \/>\n<\/div>\n<p>настройка пересылки, автоответа и т. д. с поддержкой глобальных переменных<\/p>\n<p>Подведем итог, это бесплатная версия сервера (позже расскажу про платную), на мой взгляд реализован функционал современного почтового сервера на 95%. Есть все самые основные вещи, и работает сразу из коробки, не нужны «танцы с бубном». Очень удобный интерфейс управления. Рекомендую как частный почтовый сервер, до корпоративного не хватает адресной книги с возможностью делиться контактами и расшаривания почтовых папок.<\/p>\n<p>PS обещал рассказать про ssl, когда вы настроите домен, пропишите в DNS адрес сервера, то с помощью synology сможете выпустить заверенные сертификаты Let’s Encrypt для IMAP, SMTP и POP3, в будущем synology будет автоматически перевыпускать эти сертификаты, т. е. настроили и забыли<\/p>\n<p>Mail Station — это почтовый web-клиент RoundCube (<a href=\"https:\/\/roundcube.net).\">https:\/\/roundcube.net).<\/a> очень урезанный, без возможности отмечать сообщения как СПАМ, но в целом годный<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/mail17.PNG\" width=\"800\" height=\"496.09467455621\" alt=\"\" \/>\n<\/div>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/mail18.PNG.jpg\" width=\"800\" height=\"173.4375\" alt=\"\" \/>\n<\/div>\n<p>т. к. RoundCube можно неплохо прокачать за счет огромного количества плагинов, то все в ваших руках<\/p>\n",
            "date_published": "2020-04-08T13:50:02+03:00",
            "date_modified": "2020-04-08T13:49:13+03:00",
            "tags": [
                "ClamAV",
                "DKIM",
                "DMARK",
                "DNSBL",
                "IMAP",
                "Mail Server",
                "Mail Station",
                "Postfix",
                "RoundCube",
                "SMTP",
                "SpamAssassin",
                "SPF"
            ],
            "image": "https:\/\/itscience.pro\/pictures\/mail01.PNG",
            "_date_published_rfc2822": "Wed, 08 Apr 2020 13:50:02 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "25",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/itscience.pro\/pictures\/mail01.PNG",
                    "https:\/\/itscience.pro\/pictures\/mail02.PNG",
                    "https:\/\/itscience.pro\/pictures\/mail03.PNG",
                    "https:\/\/itscience.pro\/pictures\/mail04.PNG",
                    "https:\/\/itscience.pro\/pictures\/mail05.PNG",
                    "https:\/\/itscience.pro\/pictures\/mail06.PNG",
                    "https:\/\/itscience.pro\/pictures\/mail07.PNG",
                    "https:\/\/itscience.pro\/pictures\/mail08.PNG",
                    "https:\/\/itscience.pro\/pictures\/mail09.PNG",
                    "https:\/\/itscience.pro\/pictures\/mail11.PNG",
                    "https:\/\/itscience.pro\/pictures\/mail10.PNG",
                    "https:\/\/itscience.pro\/pictures\/mail12.PNG",
                    "https:\/\/itscience.pro\/pictures\/mail13.PNG",
                    "https:\/\/itscience.pro\/pictures\/mail14.PNG",
                    "https:\/\/itscience.pro\/pictures\/mail15.PNG",
                    "https:\/\/itscience.pro\/pictures\/mail16.PNG",
                    "https:\/\/itscience.pro\/pictures\/mail17.PNG",
                    "https:\/\/itscience.pro\/pictures\/mail18.PNG.jpg"
                ]
            }
        },
        {
            "id": "23",
            "url": "https:\/\/itscience.pro\/all\/sozdanie-virtualnoy-mashiny-v-synology\/",
            "title": "создание виртуальной машины в synology",
            "content_html": "<p>А вы знали, что на synology можно создать полноценную виртуальную машину? Можно делать снапшоты по расписанию и это все бесплатно! В платных функциях все гораздо круче, возможность создания кластера, с балансировкой нагрузки и т. д.<\/p>\n<p>Вот пример создания виртуальной машины, поставим windows 10 на synology<\/p>\n<p>ставим пакет Virtual Machine Manager и запускаем его<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/---2019-10-23-09-23-17.png\" width=\"800\" height=\"489.5292987512\" alt=\"\" \/>\n<\/div>\n<p>переходим в «Виртуальные машины» и жмем кнопку «Создать»<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/---2019-10-23-09-23-38.png\" width=\"701\" height=\"495\" alt=\"\" \/>\n<\/div>\n<p>в нашем случае выбираем Microsoft Windows<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/---2019-10-23-09-23-55.png\" width=\"700\" height=\"498\" alt=\"\" \/>\n<\/div>\n<p>Хранилище — наше хранилище<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/---2019-10-23-09-24-21.png\" width=\"697\" height=\"498\" alt=\"\" \/>\n<\/div>\n<p>основные настройки: название виртуальной машины, сколько ядер процессора выделим, сколько оперативной памяти<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/---2019-10-23-09-24-37.png\" width=\"696\" height=\"496\" alt=\"\" \/>\n<\/div>\n<p>какого объема диск будем использовать, можно задать сразу много, т. к. диск только в процессе наполнения начнет занимать свободное место, а так почти ничего не весит.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/---2019-10-23-09-24-56.png\" width=\"502\" height=\"563\" alt=\"\" \/>\n<\/div>\n<p>Если нажать на шестерню, то откроются дополнительные настройки, если для вас совсем уж критично свободное пространство, то можно поставить галочку «Реорганизация пространства», тогда при освобождении пространства на виртуальном машине, диск будет «сжиматься».<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/---2019-10-23-09-25-18.png\" width=\"698\" height=\"499\" alt=\"\" \/>\n<\/div>\n<p>настройки сети, учтите, что вы можете создать свою изолированную сеть для виртуальных машин, ты и укажете ее, а пока прямой проброс наружу<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/---2019-10-23-09-25-29.png\" width=\"629\" height=\"315\" alt=\"\" \/>\n<\/div>\n<p>для виртуальных машин можно указать свой mac адрес, некоторые лицензионные сервера привязываются к mac адресу компьютера на котором запущены, и потребляют немного ресурсов, имеет смысл выносить их на виртуалки.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/---2019-10-23-09-26-21.png\" width=\"698\" height=\"496\" alt=\"\" \/>\n<\/div>\n<p>основные настройки виртуальной машины, указываем файл с образом системы для инсталляции (iso), обязательно после установки системы поставьте Guest tools, чтобы не возникало проблем с драйверами, автозапуск — виртуальная машина будет автоматически запускаться после старта сервера synology, остальное в нашем случае оставляем по умолчанию, добавлю лишь USB, чтобы была возможность пробрасывать в виртуалку USB донглы, воткнутые в synology.<\/p>\n<p>далее настройка безопасности и старт виртуальной машины<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/---2019-10-23-09-28-19.png\" width=\"800\" height=\"488.93166506256\" alt=\"\" \/>\n<\/div>\n<p>нажимаем кнопку «Подключиться» и у нас открывается  отдельная вкладка в браузере с vnc клиентом, через который мы можем управлять виртуальной машиной.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/---2019-10-23-09-28-46.png\" width=\"800\" height=\"414.76725521669\" alt=\"\" \/>\n<\/div>\n<p>Все! На все ушло не более 5 минут.<\/p>\n",
            "date_published": "2019-10-23T12:01:44+03:00",
            "date_modified": "2019-10-23T12:01:14+03:00",
            "tags": [
                "QEMU",
                "synology",
                "vnc",
                "виртуальная машина"
            ],
            "image": "https:\/\/itscience.pro\/pictures\/---2019-10-23-09-23-17.png",
            "_date_published_rfc2822": "Wed, 23 Oct 2019 12:01:44 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "23",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/itscience.pro\/pictures\/---2019-10-23-09-23-17.png",
                    "https:\/\/itscience.pro\/pictures\/---2019-10-23-09-23-38.png",
                    "https:\/\/itscience.pro\/pictures\/---2019-10-23-09-23-55.png",
                    "https:\/\/itscience.pro\/pictures\/---2019-10-23-09-24-21.png",
                    "https:\/\/itscience.pro\/pictures\/---2019-10-23-09-24-37.png",
                    "https:\/\/itscience.pro\/pictures\/---2019-10-23-09-24-56.png",
                    "https:\/\/itscience.pro\/pictures\/---2019-10-23-09-25-18.png",
                    "https:\/\/itscience.pro\/pictures\/---2019-10-23-09-25-29.png",
                    "https:\/\/itscience.pro\/pictures\/---2019-10-23-09-26-21.png",
                    "https:\/\/itscience.pro\/pictures\/---2019-10-23-09-28-19.png",
                    "https:\/\/itscience.pro\/pictures\/---2019-10-23-09-28-46.png"
                ]
            }
        },
        {
            "id": "22",
            "url": "https:\/\/itscience.pro\/all\/svoy-server-traccar-i-nastraivaem-gps-treker\/",
            "title": "поднимаем свой сервер traccar и настраиваем GPS трекер для работы с ним",
            "content_html": "<p>Был куплен у китайцев такой трекер:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/GSM-gps-ST-901-(1).jpg\" width=\"500\" height=\"500\" alt=\"\" \/>\n<\/div>\n<p>Не хотелось хранить информацию на чужом сервере, возникла идея создать свой, благо модель трекера позволяла настроить его на работу с любым сервером.<\/p>\n<p>Сразу оговорюсь, содержать свой сервер для одного устройства получится дороже (в моем случае $5 и безграничное количество устройств), чем платить за чужой (от 80 руб. за устройство).<\/p>\n<p>Поискав готовые решения, я наткнулся на проект <a href=\"https:\/\/www.traccar.org,\">https:\/\/www.traccar.org,<\/a> проект открытый, есть исходники на github <a href=\"https:\/\/github.com\/traccar\/traccar\">https:\/\/github.com\/traccar\/traccar<\/a><\/p>\n<p>для начала я проверил работоспособность прибора, для этого написал короткий скрипт на php, по сути, это сокет сервер, который слушает порт 999 и выводит в консоль всю информацию, которая приходит<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">&lt;?php\nset_time_limit (0);\n$address = &#039;127.0.0.1&#039;;\n$port = 999;\n$sock = socket_create(AF_INET, SOCK_STREAM, 0);\nsocket_bind($sock, 0, $port) or die(&#039;Could not bind to address&#039;);\nsocket_listen($sock);\nwhile (true) {\n    $client =  socket_accept($sock);\n    $input =  socket_read($client, 1024000);\n    echo &quot;$input\\n&quot;;\n    socket_close($client);\n}\nsocket_close($sock);\n?&gt;<\/code><\/pre><p>через NAT на роутере открыл порт наружу<\/p>\n<p>дальше приступаем к настройкам трекера (брал с этого сайта <a href=\"http:\/\/miradmin.ru\/gps-tracker-sinotrack-st-901\/),\">http:\/\/miradmin.ru\/gps-tracker-sinotrack-st-901\/),<\/a> далее транслирую то что использовал сам (команды отправляются смс сообщениями)<\/p>\n<ol start=\"1\">\n<li>Регистрируем номер телефона, с которого будем управлять устройством<br \/>\n<b>899977777770000 1<\/b><br \/>\n89997777777 — номер телефона<br \/>\n0000 — пароль (по умолчанию четыре ноля)<br \/>\n1 — номер ячейки (можно зарегистрировать до 3 телефонов)<\/li>\n<li>Меняем пароль, конечно же<br \/>\n<b>77712340000<\/b><br \/>\n777 — команда<br \/>\n1234 — новый пароль<br \/>\n0000 — старый пароль<\/li>\n<li>Меняем часовой пояс<br \/>\n<b>8960000E03<\/b>  <br \/>\n896 — команда  <br \/>\n0000  — пароль  <br \/>\nE03 — часовой пояс Москвы<\/li>\n<li>Выбираем режим передачи данных (SMS или GPRS)  <br \/>\n<b>7100000<\/b>  <br \/>\n710 — команда для GPRS  <br \/>\n0000  — пароль<\/li>\n<li>Настройка точки доступа для GPRS<br \/>\nМегафон: <b>8030000 internet gdata gdata<\/b><br \/>\nМТС: <b>8030000 internet.mts.ru mts mts<\/b><br \/>\nБилайн: <b>8030000 internet.beeline.ru beeline beeline<\/b><br \/>\nТЕЛЕ2: <b>8030000 internet.tele2.ru<\/b>  <br \/>\n0000  — пароль<\/li>\n<li>Задаем интервалы отправки сообщений на сервер при включенном зажигании и в режиме оффлайн<br \/>\n<b>800000 5<\/b><br \/>\nкаждые пять секунд при включенном зажигании<br \/>\n<b>8090000 300<\/b><br \/>\nкаждые пять минут при выключенном<br \/>\n0000  — пароль<\/li>\n<li>Настройка спящего режима<br \/>\n<b>SLEEP0000 5<\/b><br \/>\nпосле выключения зажигания через пять минут устройство «заснет», перестанет присылать сообщения на сервер, но будет реагировать на смс и звонки<br \/>\n0000  — пароль<\/li>\n<li>Настройка сервера данных<br \/>\n<b>8040000 123.123.123.123 999<\/b><br \/>\n123.123.123.123 — ip адрес сервера<br \/>\n999 — порт сервера<br \/>\n0000  — пароль<\/li>\n<\/ol>\n<p>после указанных настроек я стал получать сообщения с трекера:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">*HQ,9170631826,V1,105509,A,5576.7575,N,03761.0545,E,000.13,000,210919,FBFF9FFF,250,99,27914,55187#\n*HQ,9170631826,V1,105509,A,5576.7578,N,03761.0548,E,000.13,000,210919,FBFF9FFF,250,99,27914,55187#\n*HQ,9170631826,V1,105554,A,5576.7577,N,03761.0548,E,000.23,000,210919,FBFFBBFF,250,99,27914,55187#\n*HQ,9170631826,V1,105624,A,5576.7575,N,03761.0549,E,001.05,000,210919,FBF7BBFF,250,99,27914,31740#<\/code><\/pre><p>отлично! осталось создать сервер и транслировать данные туда<\/p>\n<p>для начала я выбрал площадку для размещения виртуального сервера, делал на DigitalOcean<br \/>\nесли хотите помочь нам и получить $25 на счет, воспользуйтесь реферальной ссылкой <a href=\"https:\/\/m.do.co\/c\/74f25c68fa79\">https:\/\/m.do.co\/c\/74f25c68fa79<\/a><\/p>\n<p>используйте самый дешевый Droplet за $5 в месяц с ubuntu на борту<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/---2019-09-25-13-23-50.png\" width=\"198\" height=\"189\" alt=\"\" \/>\n<\/div>\n<p>дальше в сжатой форме будут только команды для установки недостающих компонент и настройки конфигураций<\/p>\n<blockquote>\n<p>$ apt-get update<br \/>\n$ apt-get upgrade<br \/>\n$ apt-get install mc<\/p>\n<\/blockquote>\n<p>ставим java<\/p>\n<blockquote>\n<p>$ apt-get install default-jdk<\/p>\n<\/blockquote>\n<p>ставим mysql<\/p>\n<blockquote>\n<p>$ apt-get install mysql-server mysql-client<\/p>\n<\/blockquote>\n<p>далее запускаем mysql, настраиваем пароль пользователя root и создаем базу с пользователем для работы traccar<\/p>\n<p>не забудьте указать свои<br \/>\nroot_password — пароль root<br \/>\nuser_password — пароль пользователя traccar_user<\/p>\n<blockquote>\n<p>$ mysql -u root -p<\/p>\n<\/blockquote>\n<blockquote>\n<p>USE mysql;<br \/>\nUPDATE USER SET authentication_string=PASSWORD(«root_password») WHERE USER=’root’;<br \/>\nFLUSH PRIVILEGES;<\/p>\n<\/blockquote>\n<blockquote>\n<p>CREATE DATABASE traccar DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;<br \/>\nCREATE USER ’traccar_user’@’localhost’ IDENTIFIED BY ’user_password’;<br \/>\nGRANT ALL ON traccar.* TO ’traccar_user’@’localhost’;<br \/>\nFLUSH PRIVILEGES;<br \/>\nEXIT;<\/p>\n<\/blockquote>\n<p>качаем и устанавливаем сервер<\/p>\n<blockquote>\n<p>$ cd \/tmp<\/p>\n<\/blockquote>\n<p>на момент написания статьи была актуальная версия <b>4.6<\/b>, посмотреть версию можно тут <a href=\"https:\/\/github.com\/traccar\/traccar\/releases\/\">https:\/\/github.com\/traccar\/traccar\/releases\/<\/a><\/p>\n<blockquote>\n<p>$ wget <a href=\"https:\/\/github.com\/traccar\/traccar\/releases\/download\/v4.6\/traccar-linux-64-4.6.zip\">https:\/\/github.com\/traccar\/traccar\/releases\/download\/v4.6\/traccar-linux-64-4.6.zip<\/a><br \/>\n$ unzip traccar-linux-64-4.6.zip<\/p>\n<\/blockquote>\n<blockquote>\n<p>$ .\/traccar.run<br \/>\n$ cd \/opt\/traccar\/conf<\/p>\n<\/blockquote>\n<p>настраиваем конфиг, приводим к виду ниже, не забудьте заменить <b>user_password<\/b> на тот, который указывали выше<\/p>\n<blockquote>\n<p>$ mcedit traccar.xml<\/p>\n<\/blockquote>\n<pre class=\"e2-text-code\"><code class=\"\">&lt;?xml version=&#039;1.0&#039; encoding=&#039;UTF-8&#039;?&gt;\n&lt;!DOCTYPE properties SYSTEM &#039;http:\/\/java.sun.com\/dtd\/properties.dtd&#039;&gt;\n&lt;properties&gt;\n    &lt;entry key=&#039;config.default&#039;&gt;.\/conf\/default.xml&lt;\/entry&gt;\n    &lt;entry key=&#039;database.driver&#039;&gt;com.mysql.jdbc.Driver&lt;\/entry&gt;\n    &lt;entry key=&#039;database.url&#039;&gt;jdbc:mysql:\/\/localhost:3306\/traccar?useSSL=false&amp;amp;allowMultiQueries=true&amp;amp;autoReconnect=true&amp;amp;useUnicode=yes&amp;amp;characterEncoding=UTF-8&amp;amp;sessionVariables=sql_mode=&#039;&#039;&lt;\/entry&gt;\n    &lt;entry key=&#039;database.user&#039;&gt;traccar_user&lt;\/entry&gt;\n    &lt;entry key=&#039;database.password&#039;&gt;user_password&lt;\/entry&gt;\n&lt;\/properties&gt;<\/code><\/pre><p>запускаем службу<\/p>\n<blockquote>\n<p>$ service traccar start<\/p>\n<\/blockquote>\n<p>смотрим запустился ли сервис<\/p>\n<blockquote>\n<p>$ service traccar status<\/p>\n<\/blockquote>\n<p>если все хорошо, получаем следующий вывод<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">● traccar.service - traccar\n   Loaded: loaded (\/etc\/systemd\/system\/traccar.service; enabled; vendor preset: enabled)\n   Active: active (running) since Tue 2019-09-24 07:44:48 UTC; 1 day 3h ago\n Main PID: 8519 (java)\n    Tasks: 30 (limit: 1152)\n   CGroup: \/system.slice\/traccar.service\n           └─8519 \/opt\/traccar\/jre\/bin\/java -jar tracker-server.jar conf\/traccar.xml<\/code><\/pre><p>теперь можно подключиться непосредственно к web интерфейсу<br \/>\n<a href=\"http:\/\/ip_адрес_droplet:8082\">http:\/\/ip_адрес_droplet:8082<\/a><\/p>\n<p>по-умолчанию вводим:<br \/>\nEmail: admin<br \/>\nПароль: admin<\/p>\n<p>не забудьте настроить наше устройство для передачи данных на сервер, для этого отправьте СМС<br \/>\n<b>8040000 123.123.123.123 5013<\/b><br \/>\n123.123.123.123 — ip адрес нашего Droplet<br \/>\n5013 — порт сервера<br \/>\n0000  — пароль трекера<\/p>\n<p>Важно! Трекер Sinotrack ST-901 использует протокол H02? соответственно указываем порт 5013!!!<\/p>\n<p>В web интерфейсе добавляем устройство (левый верхний угол)<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/---2019-09-25-14-06-25.png\" width=\"331\" height=\"316\" alt=\"\" \/>\n<\/div>\n<p>Имя: имя нашей машинки<br \/>\nИдентификатор: номер трекера (ID под штрих кодом)<\/p>\n<p>через некоторое время машина появится на карте<\/p>\n<p>Все! Для работы этого более чем достаточно!<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/itscience.pro\/pictures\/---2019-09-25-14-44-23.png\" width=\"539\" height=\"519\" alt=\"\" \/>\n<\/div>\n<h2>Дальше пойдет дополнительная информация (необязательные опции)<\/h2>\n<ol start=\"1\">\n<li>Для начала создал нового пользователя, чтобы не подключаться все время как admin<\/li>\n<li>Изменил единицы измерения скорости (в узлах скорость не очень)<br \/>\nзашел Аккаунт — Атрибуты — добавить<\/li>\n<\/ol>\n<ul>\n<li>Имя: Единица скорости<\/li>\n<li>Значение: км\/ч<\/li>\n<\/ul>\n<ol>\n<li>Сервер — Слой карты указал «Яндекс Карты», работают быстрее и стабильнее<\/li>\n<\/ol>\n<p>Важная для меня опция — это ssl подключение к web интерфейсу, не хочется чтобы мой трафик мог видеть или менять оператор связи. Для этого вам понадобится доменное имя, и доступ к настройкам DNS, подтверждённый ssl сертификат не получится выпустить на ip адрес.<\/p>\n<p>Для начала, создаем в DNS запись A, где для нашего домена (например, car.domain.ru) ассоциируем ip адрес нашего Droplet.<\/p>\n<p>настраиваем nginx в режиме reverse proxy и подключаем Let’s Encrypt<\/p>\n<blockquote>\n<p>$ apt-get install nginx<br \/>\n$ cd \/etc\/nginx<br \/>\n$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout \/etc\/nginx\/cert.key -out \/etc\/nginx\/cert.crt<\/p>\n<\/blockquote>\n<p>приводим конфиг к следующему виду, не забудьте заменить в четырех местах <b>car.domain.ru<\/b> на ваш домен<\/p>\n<blockquote>\n<p>$ mcedit \/etc\/nginx\/sites-enabled\/default<\/p>\n<\/blockquote>\n<pre class=\"e2-text-code\"><code class=\"\">server {\n    listen 80;\n    server_name car.domain.ru;\n    return 301 https:\/\/$host$request_uri;\n}\n\nserver {\n    listen 443;\n    server_name car.domain.ru;\n    ssl_certificate           \/etc\/nginx\/cert.crt;\n    ssl_certificate_key       \/etc\/nginx\/cert.key;\n    ssl on;\n    ssl_session_cache  builtin:1000  shared:SSL:10m;\n    ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;\n    ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;\n    ssl_prefer_server_ciphers on;\n    access_log            \/var\/log\/nginx\/car.domain.ru.access.log;\n    client_max_body_size 10M;\n    client_body_buffer_size 128k;\n\n    location \/ {\n      proxy_set_header        Host $host;\n      proxy_set_header X-Forwarded-Host $host;\n      proxy_set_header X-Forwarded-Server $host;\n      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n      proxy_http_version 1.1;\n      proxy_set_header Upgrade $http_upgrade;\n      proxy_set_header Connection &quot;upgrade&quot;;\n\n      proxy_pass          http:\/\/localhost:8082;\n      proxy_read_timeout  90;\n\n      proxy_redirect      http:\/\/localhost:8082 https:\/\/car.domain.ru;\n      proxy_redirect ws:\/\/localhost:8082\/api\/socket \/api\/socket;\n      proxy_send_timeout 86400s;\n    }\n}<\/code><\/pre><p>Важно сделать именно так, в web интерфейсе используется WebSocket, который тоже надо правильно транслировать через прокси.<\/p>\n<blockquote>\n<p>$ service nginx restart<\/p>\n<\/blockquote>\n<p>Теперь вы можете открывать в браузере вашу карту по имени <a href=\"https:\/\/car.domain.ru\">https:\/\/car.domain.ru<\/a> и весь трафик к серверу и обратно будет шифроваться.<\/p>\n<p>И самая малость, сделаем красиво, добавим подтвержденный сертификат. Нам поможет certbot (<a href=\"https:\/\/certbot.eff.org).\">https:\/\/certbot.eff.org).<\/a><\/p>\n<blockquote>\n<p>$ apt-get install software-properties-common<br \/>\n$ add-apt-repository universe<br \/>\n$ add-apt-repository ppa:certbot\/certbot<br \/>\n$ apt-get update<\/p>\n<\/blockquote>\n<blockquote>\n<p>$ apt-get install certbot python-certbot-nginx<br \/>\n$ certbot —nginx<\/p>\n<\/blockquote>\n<p>далее будет предложено указать e-mail, выбрать найденные домены из конфигурации и сделать редирект http на https автоматически.<\/p>\n<p>проверим автоматический выпуск сертификата:<\/p>\n<blockquote>\n<p>$ certbot renew —dry-run<\/p>\n<\/blockquote>\n<p>не забудьте добавить задание в crontab для автоматического перевыпуска сертификатов.<\/p>\n<blockquote>\n<p>$ crontab -e<\/p>\n<\/blockquote>\n<p>Например, каждого первого числа месяца, в 3 часа 12 минут будет попытка перевыпустить сертификат.<br \/>\nДобавьте строчку в конце (не забудьте, что в crontab нужно оставлять последнюю пустую строку).<\/p>\n<blockquote>\n<p>12\t3\t1\t*\t*\t\/usr\/bin\/certbot renew<\/p>\n<\/blockquote>\n",
            "date_published": "2019-09-25T14:47:11+03:00",
            "date_modified": "2019-09-25T14:50:04+03:00",
            "tags": [
                "GPS",
                "Sinotrack",
                "ST-901",
                "traccar"
            ],
            "image": "https:\/\/itscience.pro\/pictures\/GSM-gps-ST-901-(1).jpg",
            "_date_published_rfc2822": "Wed, 25 Sep 2019 14:47:11 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "22",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": [
                    "https:\/\/itscience.pro\/pictures\/GSM-gps-ST-901-(1).jpg",
                    "https:\/\/itscience.pro\/pictures\/---2019-09-25-13-23-50.png",
                    "https:\/\/itscience.pro\/pictures\/---2019-09-25-14-06-25.png",
                    "https:\/\/itscience.pro\/pictures\/---2019-09-25-14-44-23.png"
                ]
            }
        },
        {
            "id": "21",
            "url": "https:\/\/itscience.pro\/all\/proveryaem-zapuschena-li-sluzhba-v-windows-i-esli-nado-zapuskaem\/",
            "title": "проверяем запущена ли служба в windows и если надо — запускаем",
            "content_html": "<p>Ну, что же... бывают случаи, когда какая нибудь важная служба (сервис, service) тормознула, с разработчиком связи нет, а сам продукт является «черным ящиком». На выручку нам приходит очередной «костыльный» метод. Задача: в кроне шедулере сделать проверку, жива ли служба и если померла — стартануть.<\/p>\n<p>в примере имя службы передадим параметром, в батничке накидаем двухстрочный скрипт, сначала проверим запущена ли служба и если нет — запустим.<\/p>\n<p>Но, учтите, писать надо именно display name (выводимое имя).<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">net start | find \/i %1 \nif errorlevel==1 net start %1<\/code><\/pre>",
            "date_published": "2019-07-30T18:39:09+03:00",
            "date_modified": "2019-07-30T18:39:06+03:00",
            "tags": [
                "service",
                "windows",
                "служба"
            ],
            "_date_published_rfc2822": "Tue, 30 Jul 2019 18:39:09 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "21",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "20",
            "url": "https:\/\/itscience.pro\/all\/udalyaem-dublikaty-s-pomoschyu-fdupes\/",
            "title": "удаляем дубликаты с помощью fdupes",
            "content_html": "<p>Накопилось за несколько лет море фотографий, и столкнулся я с тем, что некоторые фотографии продублированы. Думал, телефон несколько раз выгрузил их на сервер, но оказалось их немало, да в разных папках и это неприятный факт, т. к. руками перелопатить миллионы фотографий — нереально... а сравнивать по содержимому процесс очень ресурсоемкий. Порывшись на просторах, нашел интересную утилитку fdupes, написал ее Андриан Лопес (Adrian Lopez), за что ему огромное спасибо. Программа сравнивает размер файла и MD5 хэш, и после сравнения начинает сверку по-байтно.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">fdupes \/home\/user\/photos<\/code><\/pre><p>ищет дубликаты в указанном каталоге<\/p>\n<p>-r — рекурсивный поиск<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">fdupes -r \/home\/user\/photos &gt; duplicate_list.txt<\/code><\/pre><p>сохранит в файле список дубликатов<\/p>\n<p>а, дальше с помощью awk отфильтруем дублирующиеся файлы для дальнейшего удаления<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">awk &#039;BEGIN{d=0} NF==0{d=0} NF&gt;0{if(d)print;d=1}&#039; duplicate_list.txt &gt; delete_list.txt<\/code><\/pre><p>а затем удаляем по списку<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">rm `cat delete_list.txt`<\/code><\/pre><p>или так<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">xargs rm &lt; delete_list.txt<\/code><\/pre>",
            "date_published": "2019-07-30T18:34:09+03:00",
            "date_modified": "2019-07-30T18:34:00+03:00",
            "tags": [
                "fdupes",
                "linux"
            ],
            "_date_published_rfc2822": "Tue, 30 Jul 2019 18:34:09 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "20",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": []
            }
        }
    ],
    "_e2_version": 4171,
    "_e2_ua_string": "Aegea 11.4 (v4171)"
}