{
    "version": "https:\/\/jsonfeed.org\/version\/1",
    "title": "Заметки Александра Чернышева",
    "_rss_description": "Keep in mind",
    "_rss_language": "ru",
    "_itunes_email": "",
    "_itunes_categories_xml": "",
    "_itunes_image": "",
    "_itunes_explicit": "",
    "home_page_url": "https:\/\/aschernyshev.ru\/",
    "feed_url": "https:\/\/aschernyshev.ru\/rss\/",
    "icon": "https:\/\/aschernyshev.ru\/user\/userpic@2x.jpg?1469596960",
    "author": {
        "name": "Александр Чернышев",
        "url": "https:\/\/aschernyshev.ru\/",
        "avatar": "https:\/\/aschernyshev.ru\/user\/userpic@2x.jpg?1469596960"
    },
    "items": [
        {
            "id": "91",
            "url": "https:\/\/aschernyshev.ru\/all\/izmenennie-kombinacii-klavish-dlya-vybora-yazyka-vvoda-v-gnome\/",
            "title": "Измененние комбинации клавиш для выбора языка ввода в GNOME",
            "content_html": "<p>Изменение комбинации клавиш, для переключения раскладки клавиатуры в GNOME 40<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">gsettings set org.gnome.desktop.wm.keybindings switch-input-source &quot;['&lt;Shift&gt;Alt_L']&quot;\r\ngsettings set org.gnome.desktop.wm.keybindings switch-input-source-backward &quot;['&lt;Alt&gt;Shift_L']&quot;<\/code><\/pre>",
            "date_published": "2024-10-24T14:45:46+03:00",
            "date_modified": "2024-10-24T14:45:33+03:00",
            "_date_published_rfc2822": "Thu, 24 Oct 2024 14:45:46 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "91",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "89",
            "url": "https:\/\/aschernyshev.ru\/all\/cikly-bash-v-odnu-stroku\/",
            "title": "Циклы bash в одну строку",
            "content_html": "<p><b>while<\/b><\/p>\n<pre class=\"e2-text-code\"><code class=\"\">while true; do ls; sleep 2; done<\/code><\/pre><p><b>for<\/b><\/p>\n<pre class=\"e2-text-code\"><code class=\"\">for i in 1 2 3; do mkdir ${i}; done<\/code><\/pre><p><b>if<\/b><\/p>\n<pre class=\"e2-text-code\"><code class=\"\">if [ &quot;${asd}&quot; = &quot;true&quot; ]; then echo &quot;hellow world&quot;; fi<\/code><\/pre>",
            "date_published": "2024-08-15T14:53:42+03:00",
            "date_modified": "2024-08-03T22:45:41+03:00",
            "_date_published_rfc2822": "Thu, 15 Aug 2024 14:53:42 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "89",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "58",
            "url": "https:\/\/aschernyshev.ru\/all\/spisok-goryachih-klavish-v-shelle\/",
            "title": "Список горячих клавиш в шелле",
            "content_html": "<div class=\"e2-text-picture\">\n<img src=\"https:\/\/aschernyshev.ru\/pictures\/term_logo.jpg\" width=\"255\" height=\"225\" alt=\"\" \/>\n<\/div>\n<h2>Cочетаний клавиш с ctrl.<\/h2>\n<p><b>Ctrl + a<\/b> — переход в начало строки (cisco, csh, zsh)<br \/>\n<b>Ctrl + b<\/b> — переход на 1 символ назад (cisco, csh, zsh)<br \/>\n<b>Ctrl + c<\/b> — посылает программе SIGINT. Обычно, прерывает текущее задание (csh, zsh)<br \/>\n<b>Ctrl + d<\/b> — удаляет символ под курсором (аналог delete) (cisco, csh, zsh)<br \/>\n<b>Ctrl + e<\/b> — переход к концу строки (cisco, csh, zsh)<br \/>\n<b>Ctrl + f<\/b> — переход на 1 символ вперёд (cisco, csh, zsh)<br \/>\n<b>Ctrl + k<\/b> — удаляет всё, до конца строки (EOL, а не на экране!) (cisco, csh, zsh)<br \/>\n<b>Ctrl + l<\/b> — очищает экран. Аналог команды clear. (csh, zsh)<br \/>\n<b>Ctrl + q<\/b> — выводит терминал из блокировки комбинацией <b>Ctrl + s<\/b><br \/>\n<b>Ctrl + r<\/b> — поиск по истории. Повторение поиска (листание результатов поиска). То есть инкрементальный поиск. (zsh)<br \/>\n<b>Ctrl + s<\/b> — блокируют вывод данных на экран.<br \/>\n<b>Ctrl + j<\/b> — прекращает поиск и позволяет отредактировать найденную команду. Если поиск не производился, то аналогично нажатию return. (в zsh выполняет команду)<br \/>\n<b>Ctrl + t<\/b> — меняет символ под курсором на предыдущий. Или, если хотите, тянет предыдущий символ к концу строки. (cisco, csh, zsh)<br \/>\n<b>Ctrl + u<\/b> — удаляет все символы слева от курсора до начала строки. (cisco, в csh, zsh удаляет всю строку)<br \/>\n<b>Ctrl + w<\/b> — удаляет символы слева от курсора до начала слова. (cisco, csh, zsh)<br \/>\n<b>Ctrl + xx<\/b> — переходит от текущей позиции курса в начало строки и обратно. На циске работает аналогично ctrl + u. (csh)<br \/>\n<b>Ctrl + x @<\/b> — показывает возможные дополнения имени хоста (имена берутся из \/etc\/hosts)<br \/>\n<b>Ctrl + z<\/b> — suspend’ит текущую задачу (csh, zsh)<br \/>\n<b>Ctrl + x<\/b>; <b>Ctrl + e<\/b> — открывает <b>$EDITOR<\/b> для изменения введённой строки. После сохранения изменений, команда отправляется на исполнение. Если переменная не задана, то открывается системный текстовый редактор (для линукса это, зачастую, nano)<\/p>\n<h2>Cочетаниях с Alt.<\/h2>\n<p>Alt + < — переход к первой команде в истории команд (zsh)<br \/>\nAlt + > — переход к последней команде в истории<br \/>\nAlt +? — показывает список возможных дополнений команды(аналогично tab-tab) (в csh, zsh аналог which string)<br \/>\nAlt + * — вставляет все возможные дополнений команды в строку команд<br \/>\nAlt + \/ — пытается дополнить имя файла (аналогично табуляции)<br \/>\nAlt +. — вставляет последний аргумент предыдущей команды (аналог !$, только не надо делать :p, чтобы проверить )<br \/>\nAlt + b — сдвигает курсор влево на 1 слово (cisco, csh, zsh)<br \/>\nAlt + c — делает букву под курсором большой, а остальные, до конца слова, маленькими. (cisco, csh, zsh)<br \/>\nAlt + d — удаляет символы с текущей позиции курсора и до конца слова. (cisco, csh, zsh)<br \/>\nAlt + f — передвигает курсор на одно слово вперёд (cisco, csh, zsh)<br \/>\nAlt + l — делает все буквы с текущей позиции курсора и до конца слова маленькими (cisco, csh, zsh)<br \/>\nAlt + t — меняет местами слова под курсором и предыдущее (zsh)<br \/>\nAlt + u — переводит буквы с текущей позиции курсора и до конца слова в верхний регистр (cisco, csh, zsh)<br \/>\nAlt + back-space — удаляет символы с текущей позиции курсора до начала слова (cisco, csh, zsh)<\/p>\n<h2>Cочетаниях с двойным нажатие табуляции «2Т».<\/h2>\n<p>2T — дополнение команды. Если нажать при пустой строке — выведет список всех доступных команд<br \/>\n(string)2T — выведет список возможных дополнений<br \/>\n(dir)2T — покажет подпапки папки dir<br \/>\n*2T — покажет подпапки исключая скрытые (имена которых начинаются с точки)<br \/>\n~2T — выведет всех пользователей из \/etc\/passwd. Дополнив имя пользователя можно перейти в его домашний каталог. Например ~oxpa\/ — домашний каталог пользователя oxpa<br \/>\n$2T — выводит список дополнений для системных переменных<br \/>\n@2T — дополняет имена хостов содержащимися в \/etc\/hosts<br \/>\n=2T — листинг текущей директории, аналогичный ls.<\/p>\n<p><a href=\"https:\/\/habrahabr.ru\/post\/99843\/\">Источник<\/a><\/p>\n",
            "date_published": "2024-08-03T22:46:41+03:00",
            "date_modified": "2017-03-20T23:55:36+03:00",
            "image": "https:\/\/aschernyshev.ru\/pictures\/term_logo.jpg",
            "_date_published_rfc2822": "Sat, 03 Aug 2024 22:46:41 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "58",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/aschernyshev.ru\/pictures\/term_logo.jpg"
                ]
            }
        },
        {
            "id": "87",
            "url": "https:\/\/aschernyshev.ru\/all\/openvpn-2-5-md5-support\/",
            "title": "OpenVPN 2.5 MD5 support",
            "content_html": "<pre class=\"e2-text-code\"><code class=\"\">systemctl edit openvpn-client@<\/code><\/pre><pre class=\"e2-text-code\"><code class=\"\">[Service]\r\nEnvironment=&quot;OPENSSL_ENABLE_MD5_VERIFY=1 NSS_HASH_ALG_SUPPORT=+MD5&quot;<\/code><\/pre>",
            "date_published": "2022-04-07T17:49:45+03:00",
            "date_modified": "2022-04-07T17:49:17+03:00",
            "_date_published_rfc2822": "Thu, 07 Apr 2022 17:49:45 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "87",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "81",
            "url": "https:\/\/aschernyshev.ru\/all\/nastroyka-vnc-servera-v-fedora\/",
            "title": "Настройка VNC сервера в Fedora",
            "content_html": "<p>Возникла необходимость в организации удаленного подключения к рабочей станции по проьлколу VNC.<br \/>\nВ процессе изучения вопроса выяснилось, что VNC сервер Vino, который установлен по дефолту, слушает порт 5900, который так же слушает демон Qemu и одновременная работа двух служб на одном хосте невозможна.<br \/>\nРешением данной проблемы станет изменение порта по умолчанию сервера <b>Vino<\/b> через <b>gsettings<\/b>.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">gsettings set org.gnome.Vino use-alternative-port true\r\ngsettings set org.gnome.Vino alternative-port 5901\r\ngsettings set org.gnome.Vino network-interface lo\r\ngsettings set org.gnome.Vino require-encryption false\r\ngsettings set org.gnome.Vino lock-screen-on-disconnect true<\/code><\/pre><p>В Fedora 35 VNC активируется так:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">gsettings set org.gnome.desktop.remote-desktop.vnc encryption &quot;['none']&quot;\r\nsudo firewall-cmd --permanent --add-service=vnc-server\r\nsudo firewall-cmd --reload\r\nsudo reboot now<\/code><\/pre><h2>Описание настроек VNC сервера Vino со значениями по умолчанию<\/h2>\n<p><b>prompt-enabled<\/b> — Prompt the user before completing a connection<\/p>\n<p>If true, remote users accessing the desktop are not allowed<br \/>\naccess until the user on the host machine approves the<br \/>\nconnection. Recommended especially when access is not password<br \/>\nprotected.<br \/>\n<i>default: true<\/i><\/p>\n<p><b>view-only<\/b> — Only allow remote users to view the desktop<\/p>\n<p>If true, remote users accessing the desktop are only allowed to<br \/>\nview the desktop. Remote users will not be able to use the mouse<br \/>\nor keyboard.<br \/>\n<i>default: false<\/i><\/p>\n<p><b>network-interface<\/b> — Network interface for listening<\/p>\n<p>If not set, the server will listen on all network interfaces.<br \/>\nSet this if you want to accept connections only from some specific<br \/>\nnetwork interface. For example, eth0, wifi0, lo and so on.<br \/>\n<i>default: ’’<\/i><\/p>\n<p><b>use-alternative-port<\/b> — Listen on an alternative port<\/p>\n<p>If true, the server will listen on another port, instead of the default<br \/>\n(5900). The port must be specified in the “alternative-port” key.<br \/>\n<i>default: false<\/i><\/p>\n<p><b>alternative-port<\/b> — Alternative port number<\/p>\n<p>The port which the server will listen to if the “use-alternative-port”<br \/>\nkey is set to true. Valid values are in the range of 5000 to 50000.<br \/>\n<i>default: 5900<\/i><\/p>\n<p><b>require-encryption<\/b> — Require encryption<\/p>\n<p>If true, remote users accessing the desktop are required to<br \/>\nsupport encryption. It is highly recommended that you use a<br \/>\nclient which supports encryption unless the intervening network<br \/>\nis trusted.<br \/>\n<i>default: true<\/i><\/p>\n<p><b>authentication-methods<\/b> — Allowed authentication methods<\/p>\n<p>Lists the authentication methods with which remote users may<br \/>\naccess the desktop.<br \/>\nThere are two possible authentication methods; “vnc” causes the<br \/>\nremote user to be prompted for a password (the password is<br \/>\nspecified by the vnc-password key) before connecting and “none”<br \/>\nwhich allows any remote user to connect.<br \/>\n<i>default: [’none’]<\/i><\/p>\n<p><b>vnc-password<\/b> — Password required for “vnc” authentication<\/p>\n<p>The password which the remote user will be prompted for if the<br \/>\n“vnc” authentication method is used. The password specified by<br \/>\nthe key is base64 encoded.<br \/>\nThe special value of “keyring” (which is not valid base64) means<br \/>\nthat the password is stored in the GNOME keyring.<br \/>\n<i>default: ’keyring’<\/i><\/p>\n<p><b>mailto<\/b> — E-mail address to which the remote desktop URL should be sent<\/p>\n<p>This key specifies the e-mail address to which the remote<br \/>\ndesktop URL should be sent if the user clicks on the URL in the<br \/>\nDesktop Sharing preferences dialog.<br \/>\n<i>default: ’’<\/i><\/p>\n<p><b>lock-screen-on-disconnect<\/b> — Lock the screen when last user disconnect<\/p>\n<p>If true, the screen will be locked after the last remote client<br \/>\ndisconnects.<br \/>\n<i>default: false<\/i><\/p>\n<p><b>icon-visibility<\/b> — When the status icon should be shown<\/p>\n<p>This key controls the behavior of the status icon. There are<br \/>\nthree options: “always” — the icon will always be present; “client” —<br \/>\nthe icon will only be present when someone is connected (this is the<br \/>\ndefault behavior); “never” — the icon will not be present.<br \/>\n<i>default: ’client’<\/i><\/p>\n<p><b>disable-background<\/b> — Whether to disable the desktop background when a user is connected<\/p>\n<p>When true, disable the desktop background and replace it with a single<br \/>\nblock of color when a user successfully connects.<br \/>\n<i>default: false<\/i><\/p>\n<p><b>use-upnp<\/b> — Whether a UPnP router should be used to forward and open ports<\/p>\n<p>If true, request that a UPnP-capable router should forward and open the<br \/>\nport used by Vino.<br \/>\n<i>default: false<\/i><\/p>\n<p><b>disable-xdamage<\/b> — Whether we should disable the XDamage extension of X.org<\/p>\n<p>If true, do not use the XDamage extension of X.org. This extension does<br \/>\nnot work properly on some video drivers when using 3D effects.<br \/>\nDisabling it will make Vino work in these environments, with slower<br \/>\nrendering as a side effect.<br \/>\n<i>default: false<\/i><\/p>\n<p><b>notify-on-connect<\/b> — Notify on connect<\/p>\n<p>If true, show a notification when a user connects to the system.<br \/>\n<i>default: true<\/i><\/p>\n<h2>Дополнительные материалы<\/h2>\n<p><a href=\"https:\/\/wiki.archlinux.org\/index.php\/Vino\">https:\/\/wiki.archlinux.org\/index.php\/Vino<\/a><\/p>\n<p><a href=\"https:\/\/access.redhat.com\/documentation\/en-us\/red_hat_enterprise_linux\/8\/html\/using_the_desktop_environment_in_rhel_8\/accessing-the-desktop-remotely_using-the-desktop-environment-in-rhel-8\">https:\/\/access.redhat.com\/documentation\/en-us\/red_hat_enterprise_linux\/8\/html\/using_the_desktop_environment_in_rhel_8\/accessing-the-desktop-remotely_using-the-desktop-environment-in-rhel-8<\/a><\/p>\n",
            "date_published": "2019-08-28T16:02:41+03:00",
            "date_modified": "2022-01-23T12:14:28+03:00",
            "_date_published_rfc2822": "Wed, 28 Aug 2019 16:02:41 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "81",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "79",
            "url": "https:\/\/aschernyshev.ru\/all\/obnovlenie-taymzony-v-java\/",
            "title": "Обновление таймзоны в Java",
            "content_html": "<p>В настоящее время инструмент TZUpdater совместим только с форматом данных «арьергарда», который больше не имеет встроенных двоичных файлов. IANA никогда не публиковала их, и при попытке обновлении таймзоны появится следующая ошибка.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">Failed: java.lang.Exception: Failed while parsing file '\/tmp\/ziupdater21715634709704541231626652501292559\/srcdir\/asia' on line 1865 'Rule\tJapan\t1948\t1951\t-\tSep\tSat&gt;=8\t25:00\t0\tS'<\/code><\/pre><p>Для создания двоичный файлов необходимо проделать следующую процедуру<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">yum install lzip\r\nmkdir .\/tmp ; cd .\/tmp\r\nwget https:\/\/cdn.azul.com\/tools\/ziupdater1.0.2.2-jse8+7-any_jvm.tar.gz\r\ntar -xzvf ziupdater1.0.2.2-jse8+7-any_jvm.tar.gz\r\nwget https:\/\/data.iana.org\/time-zones\/releases\/tzdb-2019b.tar.lz\r\nlzip -d tzdb-2019b.tar.lz &amp;&amp; tar xvf tzdb-2019b.tar &amp;&amp; cd tzdb-2019b\r\nmake rearguard_tarballs<\/code><\/pre><pre class=\"e2-text-code\"><code class=\"\">\/usr\/java\/java8\/bin\/java -jar ..\/ziupdater-1.0.2.2.jar -v -l file:.\/tzdata2019b-rearguard.tar.gz<\/code><\/pre><p><a href=\"http:\/\/qaru.site\/questions\/18068758\/update-to-tzdata2019b-is-failing\">http:\/\/qaru.site\/questions\/18068758\/update-to-tzdata2019b-is-failing<\/a><\/p>\n",
            "date_published": "2019-07-25T15:21:33+03:00",
            "date_modified": "2019-07-25T15:20:03+03:00",
            "_date_published_rfc2822": "Thu, 25 Jul 2019 15:21:33 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "79",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "76",
            "url": "https:\/\/aschernyshev.ru\/all\/dobavlyaem-cvetnoy-vyvod-v-printf\/",
            "title": "Добавляем цветной вывод в printf",
            "content_html": "<pre class=\"e2-text-code\"><code class=\"\">printf &quot;\\033[0;31m&quot;  \/\/Set the text to the color red\r\nprintf &quot;Hello\\n&quot;     \/\/Display Hello in red\r\nprintf &quot;\\033[0m&quot;    \/\/Resets the text to default color<\/code><\/pre><p>Escape is: <b>\\033<\/b><br \/>\nColor code is: <b>[0;31m<\/b><\/p>\n<div class=\"e2-text-table\">\n<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n<tr>\n<td><b>CODE<\/b><\/td>\n<td><b>COLOR<\/b><\/td>\n<\/tr>\n<tr>\n<td>[0;31m<\/td>\n<td>Red<\/td>\n<\/tr>\n<tr>\n<td>[1;31m<\/td>\n<td>Bold Red<\/td>\n<\/tr>\n<tr>\n<td>[0;32m<\/td>\n<td>Green<\/td>\n<\/tr>\n<tr>\n<td>[1;32m<\/td>\n<td>Bold Green<\/td>\n<\/tr>\n<tr>\n<td>[0;33m<\/td>\n<td>Yellow<\/td>\n<\/tr>\n<tr>\n<td>[01;33m<\/td>\n<td>Bold Yellow<\/td>\n<\/tr>\n<tr>\n<td>[0;34m<\/td>\n<td>Blue<\/td>\n<\/tr>\n<tr>\n<td>[1;34m<\/td>\n<td>Bold Blue<\/td>\n<\/tr>\n<tr>\n<td>[0;35m<\/td>\n<td>Magenta<\/td>\n<\/tr>\n<tr>\n<td>[1;35m<\/td>\n<td>Bold Magenta<\/td>\n<\/tr>\n<tr>\n<td>[0;36m<\/td>\n<td>Cyan<\/td>\n<\/tr>\n<tr>\n<td>[1;36m<\/td>\n<td>Bold Cyan<\/td>\n<\/tr>\n<tr>\n<td>[0m<\/td>\n<td>Reset<\/td>\n<\/tr>\n<\/table>\n<\/div>\n",
            "date_published": "2018-08-29T15:36:13+03:00",
            "date_modified": "2018-08-29T15:35:52+03:00",
            "_date_published_rfc2822": "Wed, 29 Aug 2018 15:36:13 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "76",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "74",
            "url": "https:\/\/aschernyshev.ru\/all\/mtproto-proxy-na-centos7\/",
            "title": "MTProto Proxy на CentOS7",
            "content_html": "<div class=\"e2-text-picture\">\n<img src=\"https:\/\/aschernyshev.ru\/pictures\/mtproxy.png\" width=\"234\" height=\"234\" alt=\"\" \/>\n<\/div>\n<p>Решил попробовать использовать вместо <a href=\"https:\/\/aschernyshev.ru\/all\/nastroyka-socks5-proksi-na-centos7\/\"><b>3proxy<\/b><\/a> вышедшей не так давно <a href=\"https:\/\/github.com\/TelegramMessenger\/MTProxy\"><b>MTProto Proxy<\/b><\/a>, собрал <a href=\"https:\/\/cloud.mail.ru\/public\/cTC6\/3Dv569TxC\">пакет для 7 CentOS<\/a>. Из зависимостей требует zlib, openssl и curl. В процессе установки автоматически генерируется секретный ключ авторизации, загружаются список серверов и ключ для доступа.<br \/>\nУстановка сводится к следующим действиям<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">yum localinstall mtproto-proxy-20824f5-1.el7.x86_64.rpm\r\nsystemctl enable mtproto-proxy\r\nsystemctl start mtproto-proxy\r\nfirewall-cmd --permanent --zone=external --add-service=mtproto-proxy<\/code><\/pre><p>По умолчанию сервер запускается на порту <b>8443<\/b>. Если это необходимо изменить, то основные настройки вынесены в \/etc\/sysconfig\/mtproto-proxy. Так же придется отредактировать и \/etc\/firewalld\/services\/mtproto-proxy.xml.<\/p>\n<p>Теперь для подключения, в приложении, необходимо перейти по ссылке.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">https:\/\/t.me\/proxy?server=&lt;SERVER_IP&gt;&amp;port=&lt;PORT&gt;&amp;secret=&lt;SECRET_KEY&gt;<\/code><\/pre><p>где:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">SERVER_IP - ip адрес сервера mtproto-proxy\r\nPORT - порт на котором запущен mtproto-proxy\r\nSECRET_KEY - секретный ключ, который был создан в процессе установки<\/code><\/pre><p>Для страждущих паранойей <b>src.rpm<\/b> пакет, для самостоятельной сборки, можно скачать <a href=\"https:\/\/cloud.mail.ru\/public\/K7bc\/dgrrtHejy\"><b>здесь<\/b><\/a>.<\/p>\n",
            "date_published": "2018-07-10T19:38:59+03:00",
            "date_modified": "2019-05-17T06:33:16+03:00",
            "image": "https:\/\/aschernyshev.ru\/pictures\/mtproxy.png",
            "_date_published_rfc2822": "Tue, 10 Jul 2018 19:38:59 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "74",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": [
                    "https:\/\/aschernyshev.ru\/pictures\/mtproxy.png"
                ]
            }
        },
        {
            "id": "72",
            "url": "https:\/\/aschernyshev.ru\/all\/ustanovka-tvheadend-na-hp-t5325\/",
            "title": "Установка Tvheadend на HP t5325",
            "content_html": "<div class=\"e2-text-picture\">\n<img src=\"https:\/\/aschernyshev.ru\/pictures\/tvheadend_logo.jpg\" width=\"234\" height=\"233\" alt=\"\" \/>\n<\/div>\n<p>Решил попробовать использовать <b><a href=\"https:\/\/aschernyshev.ru\/all\/usnanovka-debian-jessie-na-hp-t5325\/\">HP t5325<\/a><\/b> в качестве сервера для раздачи эфирного теле-сигнала в домашней сети. В наличии у меня есть USB DVB-T2 адаптер  <b><a href=\"https:\/\/www.linuxtv.org\/wiki\/index.php\/Geniatech_T230C\">Geniatech T230C<\/a><\/b>, который совместим с Linux. В качестве сервера будет использован <b>TVHeadend<\/b> версии <b>4.2.1<\/b>. В репозиториях Debian, для архитектуры ARMel, я его не нашел поэтому выкладываю пакет <b><a href=\"https:\/\/cloud.mail.ru\/public\/Ec1n\/SSuxU9L14\">здесь<\/a><\/b>.<\/p>\n<p>Так же, для работы данного модуля, понадобится <b><a href=\"https:\/\/github.com\/LibreELEC\/dvb-firmware\/tree\/master\/firmware\">Firmware<\/a><\/b>, архив которыми можно скачать <b><a href=\"https:\/\/cloud.mail.ru\/public\/EHMZ\/JHVU366n2\">здесь<\/a><\/b>.<\/p>\n<p>После того как все скачено можно приступить к установке.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">apt-get update\r\napt-get install dtv-scan-tables dvb-apps liburiparser1\r\ndpkg -i tvheadend_4.2.1_armel.deb\r\ntar -xvf t230_fw.tar.gz &amp;&amp; mv .\/dvb-* \/lib\/firmware\/<\/code><\/pre><p>Открываем порты для подключения клиентов и доступа к WEB-интерфейсу.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">iptables -A INPUT -p tcp -m tcp --dport 9981 -j ACCEPT\r\niptables -A INPUT -p tcp -m tcp --dport 9982 -j ACCEPT\r\niptables-save &gt; \/etc\/iptables<\/code><\/pre><p>В браузере переходим по адресу <b><a href=\"http:\/\/SERVER_IP:9981\">http:\/\/SERVER_IP:9981<\/a><\/b> и авторизуемся введя учетные данные, которые указали при установки  <b>TVHeadend<\/b>.<\/p>\n<p>Теперь можно приступить к настройке <b>TVHeadend<\/b> о которой можно почитать <a href=\"https:\/\/mysku.ru\/blog\/aliexpress\/49808.html\">здесь<\/a>.<\/p>\n<h2>Полезные ссылки<\/h2>\n<p><a href=\"https:\/\/www.linuxtv.org\/wiki\/index.php\/Geniatech\">Geniatech<\/a><br \/>\n<a href=\"https:\/\/www.linuxtv.org\/wiki\/index.php\/Geniatech_T230\">Geniatech T230<\/a><br \/>\n<a href=\"https:\/\/www.linuxtv.org\/wiki\/index.php\/Geniatech_T230C\">Geniatech T230C<\/a><br \/>\n<a href=\"https:\/\/drive.google.com\/drive\/folders\/0B34ndkM3NwwtMUF5bzU5YjJtVjA\">TVHeadend<\/a><br \/>\n<a href=\"https:\/\/github.com\/LibreELEC\/dvb-firmware\/tree\/master\/firmware\">Firmware<\/a><\/p>\n",
            "date_published": "2018-04-21T11:20:20+03:00",
            "date_modified": "2019-05-17T06:33:56+03:00",
            "image": "https:\/\/aschernyshev.ru\/pictures\/tvheadend_logo.jpg",
            "_date_published_rfc2822": "Sat, 21 Apr 2018 11:20:20 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "72",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": [
                    "https:\/\/aschernyshev.ru\/pictures\/tvheadend_logo.jpg"
                ]
            }
        },
        {
            "id": "70",
            "url": "https:\/\/aschernyshev.ru\/all\/ispolzovanie-specsimvolov-v-sed\/",
            "title": "Использование спецсимволов в sed",
            "content_html": "<p>Необходимо заменить строчку<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">&lt;minGain&gt;20&lt;\/minGain&gt;<\/code><\/pre><p>Переводим все спецсимволы в HEX.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">&lt; - \\x3c\r\n&gt; - \\x3e\r\n\/ - \\x2f<\/code><\/pre><p>В результате получается<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">sed -i 's\/\\x3cminGain\\x3e20\\x3c\\x2fminGain\\x3e\/\\x3cminGain\\x3e60\\x3c\\x2fminGain\\x3e\/' \/root\/test.sh<\/code><\/pre><p><a href=\"https:\/\/www.rapidtables.com\/convert\/number\/ascii-to-hex.html\">https:\/\/www.rapidtables.com\/convert\/number\/ascii-to-hex.html<\/a><\/p>\n",
            "date_published": "2018-04-20T21:52:07+03:00",
            "date_modified": "2018-03-22T08:17:13+03:00",
            "_date_published_rfc2822": "Fri, 20 Apr 2018 21:52:07 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "70",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "42",
            "url": "https:\/\/aschernyshev.ru\/all\/chastoty-cifrovyh-kanalov-dvb-t2\/",
            "title": "Частоты цифровых каналов DVB-T2",
            "content_html": "<p>Понадобился список несущих частот цифровых ТВ каналов.<br \/>\nВ интернет нашел следующие частоты.<\/p>\n<p>• 21-ый телевизионный канал — частота приема 474 МГц;<br \/>\n• 22-ой телевизионный канал — частота приема 482 МГц;<br \/>\n• 23-ий телевизионный канал — частота приема 490 МГц;<br \/>\n• 24-ый телевизионный канал — частота приема 498 МГц;<br \/>\n• 25-ый телевизионный канал — частота приема 506 МГц;<br \/>\n• 26-ой телевизионный канал — частота приема 514 МГц;<br \/>\n• 27-ой телевизионный канал — частота приема 522 МГц;<br \/>\n• 28-ой телевизионный канал — частота приема 530 МГц;<br \/>\n• 29-ый телевизионный канал — частота приема 538 МГц;<br \/>\n• 30-ый телевизионный канал — частота приема 546 МГц;<br \/>\n• 31-ый телевизионный канал — частота приема 554 МГц;<br \/>\n• 32-ой телевизионный канал — частота приема 562 МГц;<br \/>\n• 33-ий телевизионный канал — частота приема 570 МГц;<br \/>\n• 34-ый телевизионный канал — частота приема 578 МГц;<br \/>\n• 35-ый телевизионный канал — частота приема 586 МГц;<br \/>\n• 36-ой телевизионный канал — частота приема 594 МГц;<br \/>\n• 37-ой телевизионный канал — частота приема 602 МГц;<br \/>\n• 38-ой телевизионный канал — частота приема 610 МГц;<br \/>\n• 39-ый телевизионный канал — частота приема 618 МГц;<br \/>\n• 40-ой телевизионный канал — частота приема 626 МГц;<br \/>\n• 41-ый телевизионный канал — частота приема 634 МГц;<br \/>\n• 42-ой телевизионный канал — частота приема 642 МГц;<br \/>\n• 43-ий телевизионный канал — частота приема 650 МГц;<br \/>\n• 44-ый телевизионный канал — частота приема 658 МГц;<br \/>\n• 45-ый телевизионный канал — частота приема 666 МГц;<br \/>\n• 46-ой телевизионный канал — частота приема 674 МГц;<br \/>\n• 47-ой телевизионный канал — частота приема 682 МГц;<br \/>\n• 48-ой телевизионный канал — частота приема 690 МГц;<br \/>\n• 49-ый телевизионный канал — частота приема 698 МГц;<br \/>\n• 50-ый телевизионный канал — частота приема 706 МГц;<br \/>\n• 51-ый телевизионный канал — частота приема 714 МГц;<br \/>\n• 52-ой телевизионный канал — частота приема 722 МГц;<br \/>\n• 53-ий телевизионный канал — частота приема 730 МГц;<br \/>\n• 54-ый телевизионный канал — частота приема 738 МГц;<br \/>\n• 55-ый телевизионный канал — частота приема 746 МГц;<br \/>\n• 56-ой телевизионный канал — частота приема 754 МГц;<br \/>\n• 57-ой телевизионный канал — частота приема 762 МГц;<br \/>\n• 58-ой телевизионный канал — частота приема 770 МГц;<br \/>\n• 59-ый телевизионный канал — частота приема 778 МГц;<br \/>\n• 60-ый телевизионный канал — частота приема 786 МГц;<br \/>\n• 61-ый телевизионный канал — частота приема 794 МГц;<br \/>\n• 62-ой телевизионный канал — частота приема 802 МГц;<br \/>\n• 63-ий телевизионный канал — частота приема 810 МГц;<br \/>\n• 64-ый телевизионный канал — частота приема 818 МГц;<br \/>\n• 65-ый телевизионный канал — частота приема 826 МГц;<br \/>\n• 66-ой телевизионный канал — частота приема 834 МГц;<br \/>\n• 67-ой телевизионный канал — частота приема 842 МГц;<br \/>\n• 68-ой телевизионный канал — частота приема 850 МГц;<br \/>\n• 69-ый телевизионный канал — частота приема 858 МГц.<\/p>\n",
            "date_published": "2018-04-20T21:49:14+03:00",
            "date_modified": "2018-04-20T21:50:56+03:00",
            "_date_published_rfc2822": "Fri, 20 Apr 2018 21:49:14 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "42",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        },
        {
            "id": "73",
            "url": "https:\/\/aschernyshev.ru\/all\/nastroyka-socks5-proksi-na-centos7\/",
            "title": "Настройка SOCKS5 прокси на CentOS7",
            "content_html": "<p>В свете последних событий, понадобился <b>SOCKS5<\/b> прокси с авторизацией.<br \/>\nПоискав в интернете остановил свой выбор на <b><a href=\"https:\/\/github.com\/z3APA3A\/3proxy\">3proxy<\/a><\/b> от <b>z3APA3A<\/b>, как наиболее легковесном, функциональном и активно развивающемся, последний релиз которого состоялся <b><a href=\"https:\/\/github.com\/z3APA3A\/3proxy\/releases\">18.04.2018<\/a><\/b>.<br \/>\nК сожалению актуальной версии пакета в репозиториях CentOS не нашлось, поэтому пришлось переписать spec-файл для текущей версии 0.8.12.<\/p>\n<p>Для начала необходимо скачать <a href=\"https:\/\/cloud.mail.ru\/public\/C9Vu\/N9NiXPmdZ\">3proxy<\/a>, после чего можно приступать к его установки.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">yum localinstall 3proxy-0.8.12-1.el7.centos.x86_64.rpm<\/code><\/pre><p>Так как меня интересует именно SOCKS-прокси, то конфигурационный файл будет иметь следующий вид. Если нужен дополнительный функционал, то можно почитать 3proxy.cfg.example или <a href=\"https:\/\/github.com\/z3APA3A\/3proxy\/wiki\/How-To-(%D1%80%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)\">wiki<\/a> проекта на github.com<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">vim \/etc\/3proxy\/3proxy.cfg<\/code><\/pre><pre class=\"e2-text-code\"><code class=\"\">daemon\r\nsetgid 99\r\nsetuid 99\r\n\r\nnscache 65536\r\nnserver 127.0.0.1\r\n\r\ntimeouts 1 5 30 60 180 1800 15 60\r\n\r\nexternal 0.0.0.0\r\ninternal 0.0.0.0\r\n\r\nconfig \/etc\/3proxy\/3proxy.cfg\r\nmonitor \/etc\/3proxy\/3proxy.cfg\r\nmonitor \/etc\/3proxy\/counters\r\nmonitor \/etc\/3proxy\/passwd\r\nmonitor \/etc\/3proxy\/bandlimiters\r\n\r\nlog \/var\/log\/3proxy\/3proxy.log\r\nlogformat &quot;L%o %d %H:%M:%S      %U | %C | %R:%r | %O | %I | %n&quot;\r\narchiver gz \/bin\/gzip %F\r\nrotate 7\r\n\r\nusers $\/etc\/3proxy\/passwd\r\n\r\ninclude \/etc\/3proxy\/counters\r\ninclude \/etc\/3proxy\/bandlimiters\r\n\r\nauth strong\r\nflush\r\nsocks -p81080<\/code><\/pre><p>Теперь добавляем пользователей, для этого выполним скрипт <b>add3proxyuser.sh<\/b><\/p>\n<pre class=\"e2-text-code\"><code class=\"\">\/etc\/3proxy\/add3proxyuser.sh username password day_limit bandwidth<\/code><\/pre><p><i>где:<\/i><br \/>\n<i><b>username<\/b> — имя пользователя<\/i><br \/>\n<b><i>password<\/b> — пароль<\/i><br \/>\n<i><b>day_limit<\/b> — лимит трафика в Мегабайтах в день<\/i><br \/>\n<i><b>bandwidth<\/b> — полоса пропускания в битах в секунду<\/i><\/p>\n<p>Для примера заведем пользователя с логином и паролем admin, лимитом трафика в 100 Мегабайт в день и полосой пропускания в 1 Мегабит.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">\/etc\/3proxy\/add3proxyuser.sh admin admin 100 1048576<\/code><\/pre><p>Теперь в файле, <b>\/etc\/3proxy\/passwd<\/b>, появилась запись с логином и MD5-хешем пароля<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">admin:CR:$1$10216$EvIj9vLnQi\/zydUXJXYa60<\/code><\/pre><p>Активируем и запускаем сервис<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">systemctl enable 3proxy\r\nsystemctl start 3proxy<\/code><\/pre><p>Добавляем правило в Firewall разрешающее внешнее подключение к прокси<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">firewall-cmd --permanent --zone=external --add-port=81080\/tcp<\/code><\/pre><p>Теперь можно применять настройки прокси перейдя по ссылке следующего содержания:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">https:\/\/t.me\/socks?server=my.server.org&amp;port=81080&amp;user=admin&amp;pass=admin<\/code><\/pre><p>Для страждущих паранойей src.rpm пакет, для самостоятельной сборки, можно скачать <b><a href=\"https:\/\/cloud.mail.ru\/public\/3dnc\/j1RFzsyxJ\">здесь<\/a><\/b>.<\/p>\n",
            "date_published": "2018-04-20T21:45:37+03:00",
            "date_modified": "2018-04-25T14:23:24+03:00",
            "_date_published_rfc2822": "Fri, 20 Apr 2018 21:45:37 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "73",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "69",
            "url": "https:\/\/aschernyshev.ru\/all\/konvertaciya-iz-ascii-v-hex-i-obratno\/",
            "title": "Конвертация из ASCII в HEX и обратно",
            "content_html": "<p>Для выполнение данной операции можно воспользоваться утилитой xxd, которая создаёт  представление файла в виде шестнадцатеричных кодов или выполняет обратное преобразование.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">echo 'Привет мир!' | xxd -ps\r\necho 'd09fd180d0b8d0b2d0b5d18220d0bcd0b8d18021' | xxd -p -r<\/code><\/pre>",
            "date_published": "2018-01-26T11:20:18+03:00",
            "date_modified": "2018-01-26T11:41:37+03:00",
            "_date_published_rfc2822": "Fri, 26 Jan 2018 11:20:18 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "69",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "66",
            "url": "https:\/\/aschernyshev.ru\/all\/http-2-0-v-nginx-na-centos-7\/",
            "title": "HTTP\/2.0 в Nginx на CentOS 7",
            "content_html": "<p><b>UPD<\/b><br \/>\n<b>Вышло обновление openssl-1.0.2k и даное руководство больше не актуально.<\/b><br \/>\n_____________________________________________________________________<\/p>\n<p>Решил включить HTTP\/2.0 в Nginx. В процессе тестирование, при прохождении <a href=\"https:\/\/tools.keycdn.com\/http2-test\">теста<\/a>  выяснилось, что не активно <a href=\"https:\/\/en.wikipedia.org\/wiki\/Application-Layer_Protocol_Negotiation\">ALPN<\/a> (Application-Layer Protocol Negotiation).<\/p>\n<p>Для полноценной работы HTTP\/2.0, Nginx должен быть собран с <a href=\"http:\/\/xgu.ru\/wiki\/OpenSSL\">OpenSSL<\/a> версии не ниже чем 1.0.2. В репах CentOS есть только OpenSSL версии 1.0.1.<br \/>\nРешить эту проблему можно двумя способами: собрать Nginx с флагом <a href=\"https:\/\/victor.4devs.io\/ru\/architecture\/nginx-http2-does-not-work.html\">—with-openssl<\/a> или собрать OpenSSL 1.0.2 для CentOS.<br \/>\nПервый вариант у меня не взлетел, сборка пакета завершалась неудачно, поэтому я остановился на втором варианте.<br \/>\nВ интернет нашел <a href=\"http:\/\/ja.528p.com\/linux\/centos6\/XE001-openssl.html\">сайт<\/a>, где автор предлагает пачтить сорцы OpenSSL, но недавно в CentOS прилетело обновление glibc-2.17.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">rpm -qa | grep glibc\r\nglibc-common-2.17-157.el7_3.4.x86_64\r\nglibc-2.17-157.el7_3.4.x86_64\r\nglibc-devel-2.17-157.el7_3.4.x86_64\r\nglibc-headers-2.17-157.el7_3.4.x86_64<\/code><\/pre><pre class=\"e2-text-code\"><code class=\"\">readelf -s \/usr\/lib64\/libc.so.6 | grep secure_getenv<\/code><\/pre><pre class=\"e2-text-code\"><code class=\"\">614: 0000000000038950    27 FUNC    WEAK   DEFAULT   12 __libc_secure_getenv@@GLIBC_PRIVATE\r\n857: 0000000000038950    27 FUNC    WEAK   DEFAULT   12 __secure_getenv@GLIBC_2.2.5\r\n1715: 0000000000038950    27 FUNC    WEAK   DEFAULT   12 secure_getenv@@GLIBC_2.17\r\n5228: 0000000000038950    27 FUNC    LOCAL  DEFAULT   12 __GI___libc_secure_getenv\r\n6506: 0000000000038950    27 FUNC    WEAK   DEFAULT   12 __secure_getenv@GLIBC_2.2\r\n6529: 0000000000038950    27 FUNC    WEAK   DEFAULT   12 secure_getenv\r\n6918: 0000000000038950    27 FUNC    WEAK   DEFAULT   12 __libc_secure_getenv<\/code><\/pre><p>Так что ничего патчить не нужно, а просто собираем <a href=\"https:\/\/www.mirrorservice.org\/sites\/dl.fedoraproject.org\/pub\/fedora\/linux\/releases\/23\/Workstation\/source\/SRPMS\/o\/openssl-1.0.2d-2.fc23.src.rpm\">openssl<\/a> из FC23. Дополнительно потребуется пересобрать еще один пакет из FC23 <a href=\"https:\/\/www.mirrorservice.org\/sites\/dl.fedoraproject.org\/pub\/fedora\/linux\/releases\/23\/Workstation\/source\/SRPMS\/c\/crypto-policies-20150518-3.gitffe885e.fc23.src.rpm\">crypto-policies<\/a>.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">yum install epel-release &amp;&amp; yum update &amp;&amp; yum install mock<\/code><\/pre><pre class=\"e2-text-code\"><code class=\"\">mkdir -p ~\/rpmbuild\/{SPECS,SOURCES,SRPMS}<\/code><\/pre><pre class=\"e2-text-code\"><code class=\"\">wget http:\/\/nginx.org\/packages\/centos\/7\/SRPMS\/nginx-1.12.1-1.el7.ngx.src.rpm<\/code><\/pre><pre class=\"e2-text-code\"><code class=\"\">rpm -ivh ~\/nginx-1.12.1-1.el7.ngx.src.rpm<\/code><\/pre><pre class=\"e2-text-code\"><code class=\"\">grep 'Requires: openssl &gt;= 1.0.1' -P -R -I -l ~\/rpmbuild\/SPECS\/nginx.spec | xargs sed -i 's\/Requires: openssl &gt;= 1.0.1\/Requires: openssl &gt;= 1.0.2\/g'<\/code><\/pre><pre class=\"e2-text-code\"><code class=\"\">grep 'BuildRequires: openssl-devel &gt;= 1.0.1' -P -R -I -l ~\/rpmbuild\/SPECS\/nginx.spec | xargs sed -i 's\/BuildRequires: openssl-devel &gt;= 1.0.1\/BuildRequires: openssl-devel &gt;= 1.0.2\/g'<\/code><\/pre><pre class=\"e2-text-code\"><code class=\"\">grep 'define main_release 1' -P -R -I -l  ~\/rpmbuild\/SPECS\/nginx.spec | xargs sed -i 's\/define main_release 1\/define main_release 2\/g'<\/code><\/pre><pre class=\"e2-text-code\"><code class=\"\">grep '%changelog' -P -R -I -l  \/root\/rpmbuild\/SPECS\/nginx.spec | xargs sed -i 's\/%changelog\/%changelog\\n* Wed Jul 12 2017 Aleksandr Chernyshev &lt;mail@aschernyshev.ru&gt;\\n- 1.12.1 \\n- Rebuild with openssl-1.0.2d\\n\/g'<\/code><\/pre><pre class=\"e2-text-code\"><code class=\"\">\/usr\/bin\/mock -r epel-7-x86_64 --spec=~\/rpmbuild\/SPECS\/nginx.spec --sources=~\/rpmbuild\/SOURCES\/ --resultdir=~\/rpmbuild\/SRPMS\/ --no-clean --buildsrpm<\/code><\/pre><pre class=\"e2-text-code\"><code class=\"\">wget https:\/\/aschernyshev.ru\/repository\/rhel\/7\/noarch\/crypto-policies-20150518-3.gitffe885e.el7.centos.noarch.rpm\r\nwget https:\/\/aschernyshev.ru\/repository\/rhel\/7\/x86_64\/openssl-libs-1.0.2d-2.el7.centos.x86_64.rpm\r\nwget https:\/\/aschernyshev.ru\/repository\/rhel\/7\/x86_64\/openssl-1.0.2d-2.el7.centos.x86_64.rpm\r\nwget https:\/\/aschernyshev.ru\/repository\/rhel\/7\/x86_64\/openssl-devel-1.0.2d-2.el7.centos.x86_64.rpm<\/code><\/pre><pre class=\"e2-text-code\"><code class=\"\">\/usr\/bin\/mock -r epel-7-x86_64 --init\r\n\/usr\/bin\/mock -r epel-7-x86_64 --install ~\/crypto-policies-20150518-3.gitffe885e.el7.centos.noarch.rpm\r\n\/usr\/bin\/mock -r epel-7-x86_64 --install ~\/openssl-libs-1.0.2d-2.el7.centos.x86_64.rpm\r\n\/usr\/bin\/mock -r epel-7-x86_64 --install ~\/openssl-1.0.2d-2.el7.centos.x86_64.rpm\r\n\/usr\/bin\/mock -r epel-7-x86_64 --install ~\/openssl-devel-1.0.2d-2.el7.centos.x86_64.rpm\r\n\/usr\/bin\/mock -r epel-7-x86_64 --no-clean ~\/rpmbuild\/SRPMS\/nginx-1.12.1-2.el7.centos.ngx.src.rpm<\/code><\/pre><p>Устанавливаем получившиеся <a href=\"https:\/\/aschernyshev.ru\/repository\/rhel\/7\/noarch\/crypto-policies-20150518-3.gitffe885e.el7.centos.noarch.rpm\">crypto-policies<\/a>, <a href=\"https:\/\/aschernyshev.ru\/repository\/rhel\/7\/x86_64\/openssl-1.0.2d-2.el7.centos.x86_64.rpm\">openssl<\/a>, <a href=\"https:\/\/aschernyshev.ru\/repository\/rhel\/7\/x86_64\/openssl-libs-1.0.2d-2.el7.centos.x86_64.rpm\">openssl-libs<\/a> , <a href=\"https:\/\/aschernyshev.ru\/repository\/rhel\/7\/x86_64\/nginx-1.12.1-2.el7.centos.ngx.x86_64.rpm\">nginx<\/a>.<\/p>\n",
            "date_published": "2017-07-12T12:03:18+03:00",
            "date_modified": "2017-10-19T18:05:37+03:00",
            "_date_published_rfc2822": "Wed, 12 Jul 2017 12:03:18 +0300",
            "_rss_guid_is_permalink": "true",
            "_rss_guid": "https:\/\/aschernyshev.ru\/all\/http-2-0-v-nginx-na-centos-7\/",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "62",
            "url": "https:\/\/aschernyshev.ru\/all\/vim-cheat-sheet\/",
            "title": "VIM Cheat Sheet",
            "content_html": "<div class=\"e2-text-picture\">\n<img src=\"https:\/\/aschernyshev.ru\/pictures\/vim.png\" width=\"1366\" height=\"768\" alt=\"\" \/>\n<\/div>\n",
            "date_published": "2017-03-21T07:05:44+03:00",
            "date_modified": "2017-03-21T07:03:59+03:00",
            "image": "https:\/\/aschernyshev.ru\/pictures\/vim.png",
            "_date_published_rfc2822": "Tue, 21 Mar 2017 07:05:44 +0300",
            "_rss_guid_is_permalink": "true",
            "_rss_guid": "https:\/\/aschernyshev.ru\/all\/vim-cheat-sheet\/",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/aschernyshev.ru\/pictures\/vim.png"
                ]
            }
        },
        {
            "id": "63",
            "url": "https:\/\/aschernyshev.ru\/all\/gnu-screen-cheat-sheet\/",
            "title": "GNU Screen Cheat Sheet",
            "content_html": "<div class=\"e2-text-picture\">\n<img src=\"https:\/\/aschernyshev.ru\/pictures\/screen.png\" width=\"1280\" height=\"800\" alt=\"\" \/>\n<\/div>\n",
            "date_published": "2017-03-21T07:05:36+03:00",
            "date_modified": "2017-03-21T07:05:27+03:00",
            "image": "https:\/\/aschernyshev.ru\/pictures\/screen.png",
            "_date_published_rfc2822": "Tue, 21 Mar 2017 07:05:36 +0300",
            "_rss_guid_is_permalink": "true",
            "_rss_guid": "https:\/\/aschernyshev.ru\/all\/gnu-screen-cheat-sheet\/",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/aschernyshev.ru\/pictures\/screen.png"
                ]
            }
        },
        {
            "id": "61",
            "url": "https:\/\/aschernyshev.ru\/all\/rabota-s-postgresql-nastroyka-i-masshtabirovanie\/",
            "title": "Работа с PostgreSQL: настройка и масштабирование",
            "content_html": "<div class=\"e2-text-picture\">\n<img src=\"https:\/\/aschernyshev.ru\/pictures\/postgres_logo.jpg\" width=\"225\" height=\"225\" alt=\"\" \/>\n<\/div>\n<p>Перед вами <a href=\"https:\/\/cloud.mail.ru\/public\/c4qK\/6RrD3RvL9\">справочное пособие по настройке и масштабированию PostgreSQL<\/a>. В книге исследуются вопросы по настройке производительности PostgreSQL, репликации и кластеризации. Изобилие реальных примеров позволит как начинающим, так и опытным разработчикам быстро разобраться с особенностями масштабирования PostgreSQL для своих приложений.<\/p>\n<p><a href=\"http:\/\/postgresql.leopard.in.ua\/\">Источник<\/a><\/p>\n",
            "date_published": "2017-03-21T00:22:23+03:00",
            "date_modified": "2017-03-21T07:01:42+03:00",
            "image": "https:\/\/aschernyshev.ru\/pictures\/postgres_logo.jpg",
            "_date_published_rfc2822": "Tue, 21 Mar 2017 00:22:23 +0300",
            "_rss_guid_is_permalink": "true",
            "_rss_guid": "https:\/\/aschernyshev.ru\/all\/rabota-s-postgresql-nastroyka-i-masshtabirovanie\/",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/aschernyshev.ru\/pictures\/postgres_logo.jpg"
                ]
            }
        },
        {
            "id": "59",
            "url": "https:\/\/aschernyshev.ru\/all\/systemd-dlya-administratorov\/",
            "title": "Systemd для администраторов",
            "content_html": "<div class=\"e2-text-picture\">\n<img src=\"https:\/\/aschernyshev.ru\/pictures\/tux_logo.jpg\" width=\"186\" height=\"225\" alt=\"\" \/>\n<\/div>\n<p><a href=\"https:\/\/cloud.mail.ru\/public\/Bnzh\/jB45LS9yt\">Русский перевод цикла статей «systemd for Administrators».<\/a><br \/>\nО том, что такое systemd — см. <a href=\"http:\/\/www.freedesktop.org\/wiki\/Software\/systemd\">http:\/\/www.freedesktop.org\/wiki\/Software\/systemd<\/a><\/p>\n<p><a href=\"http:\/\/www2.kangran.su\/~nnz\/pub\/s4a\/\">Источник<\/a><\/p>\n",
            "date_published": "2017-03-21T00:02:31+03:00",
            "date_modified": "2017-03-21T07:01:29+03:00",
            "image": "https:\/\/aschernyshev.ru\/pictures\/tux_logo.jpg",
            "_date_published_rfc2822": "Tue, 21 Mar 2017 00:02:31 +0300",
            "_rss_guid_is_permalink": "true",
            "_rss_guid": "https:\/\/aschernyshev.ru\/all\/systemd-dlya-administratorov\/",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/aschernyshev.ru\/pictures\/tux_logo.jpg"
                ]
            }
        },
        {
            "id": "60",
            "url": "https:\/\/aschernyshev.ru\/all\/iptables-pravila-horoshego-tona\/",
            "title": "IPTABLES: правила хорошего тона",
            "content_html": "<div class=\"e2-text-picture\">\n<img src=\"https:\/\/aschernyshev.ru\/pictures\/tux_logo.jpg\" width=\"186\" height=\"225\" alt=\"\" \/>\n<\/div>\n<p><a href=\"https:\/\/cloud.mail.ru\/public\/9VSG\/6JZLi91wA\">Русский перевод статьи «Towards the perfect ruleset»<\/a><br \/>\n(подборка рекомендаций по составлению наборов правил для netfilter).<\/p>\n<p><a href=\"http:\/\/www2.kangran.su\/~nnz\/pub\/perf_rs\/\">Источник<\/a><\/p>\n",
            "date_published": "2017-03-21T00:02:22+03:00",
            "date_modified": "2017-03-21T07:01:56+03:00",
            "image": "https:\/\/aschernyshev.ru\/pictures\/tux_logo.jpg",
            "_date_published_rfc2822": "Tue, 21 Mar 2017 00:02:22 +0300",
            "_rss_guid_is_permalink": "true",
            "_rss_guid": "https:\/\/aschernyshev.ru\/all\/iptables-pravila-horoshego-tona\/",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/aschernyshev.ru\/pictures\/tux_logo.jpg"
                ]
            }
        },
        {
            "id": "54",
            "url": "https:\/\/aschernyshev.ru\/all\/bash-cheat-sheet\/",
            "title": "Bash Cheat Sheet",
            "content_html": "<div class=\"e2-text-picture\">\n<img src=\"https:\/\/aschernyshev.ru\/pictures\/bash-cheatsheet.png\" width=\"1753\" height=\"1240\" alt=\"\" \/>\n<\/div>\n<p><a href=\"https:\/\/github.com\/drakulavich\/russian-bash-cheatsheet\">Источник<\/a><\/p>\n",
            "date_published": "2017-03-20T23:52:15+03:00",
            "date_modified": "2017-03-21T06:55:23+03:00",
            "image": "https:\/\/aschernyshev.ru\/pictures\/bash-cheatsheet.png",
            "_date_published_rfc2822": "Mon, 20 Mar 2017 23:52:15 +0300",
            "_rss_guid_is_permalink": "true",
            "_rss_guid": "https:\/\/aschernyshev.ru\/all\/bash-cheat-sheet\/",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/aschernyshev.ru\/pictures\/bash-cheatsheet.png"
                ]
            }
        }
    ],
    "_e2_version": 3576,
    "_e2_ua_string": "E2 (v3576; Aegea)"
}