{
    "version": "https:\/\/jsonfeed.org\/version\/1.1",
    "title": "timsa.ru: заметки с тегом linux",
    "_rss_description": "Моя записная книжка. Комментарии отключены из-за спама. Для вопросов используйте эту страничку",
    "_rss_language": "ru",
    "_itunes_email": "",
    "_itunes_categories_xml": "",
    "_itunes_image": "",
    "_itunes_explicit": "",
    "home_page_url": "https:\/\/timsa.ru\/tags\/linux\/",
    "feed_url": "https:\/\/timsa.ru\/tags\/linux\/json\/",
    "icon": false,
    "authors": [
        {
            "name": "timsa",
            "url": "https:\/\/timsa.ru\/",
            "avatar": false
        }
    ],
    "items": [
        {
            "id": "246",
            "url": "https:\/\/timsa.ru\/all\/ad-na-samba4\/",
            "title": "AD на SAMBA4",
            "content_html": "<p>обновляем и ставим необходимые пакеты<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">apt update\r\napt install samba samba-dsdb-modules krb5-config krb5-user winbind libpam-winbind libnss-winbind smbclient acl ldap-client net-tools iftop htop<\/code><\/pre><p>по идее можно вообще удалить<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">mv \/etc\/samba\/smb.conf \/etc\/samba\/smb.conf.orig\r\nmv \/etc\/krb5.conf \/etc\/krb5.conf.orig<\/code><\/pre><p>эти службы самба запустит сама если ей будет надо<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">systemctl stop smbd nmbd winbind\r\nsystemctl disable smbd nmbd winbind<\/code><\/pre><p>Разворачиваем домен<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">samba-tool domain provision --use-rfc2307 --interactive<\/code><\/pre><p>3221.RU<br \/>\n3221<br \/>\ndc<br \/>\nSAMBA_INTERNAL<br \/>\n192.168.1.2   ! не свой, а реальный днс или шлюз<br \/>\nP@ssw0rd<\/p>\n<p>выдал SID \/\/ записал, вдруг пригодится<\/p>\n<p>вот теперь меняем в \/etc\/resolv.conf на свой ip<\/p>\n<p>в \/etc\/krb5.conf<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">[libdefaults]\r\n        default_realm = 3221.RU\r\n\t\tdns_lookup_realm = false\r\n\t\tdns_lookup_kdc = true\r\n\r\n[realms]\r\n        3221.RU = {\r\n                kdc = dc.3221.ru\r\n                admin_server = dc.3221.ru\r\n        }<\/code><\/pre><p>в \/etc\/samba\/smb.conf<\/p>\n<pre class=\"e2-text-code\"><code class=\"\"># Global parameters\r\n[global]\r\n        dns forwarder = 192.168.1.2\r\n        netbios name = DC\r\n        realm = 3221.RU\r\n        server role = active directory domain controller\r\n        workgroup = 3221\r\n        idmap_ldb:use rfc2307 = yes\r\n        map to guest = Bad User\r\n\r\n        dos charset = 866\r\n        unix charset = UTF-8\r\n        preserve case = yes\r\n        short preserve case = yes\r\n\r\n        ldap server require strong auth = yes\r\n        tls enabled  = yes\r\n        tls keyfile  = tls\/dc.3221.ru.key\r\n        tls certfile = tls\/dc.3221.ru.crt\r\n        tls cafile   = tls\/rootCA.crt\r\n\r\n[sysvol]\r\n        path = \/var\/lib\/samba\/sysvol\r\n        read only = No\r\n\r\n[netlogon]\r\n        path = \/var\/lib\/samba\/sysvol\/3221.ru\/scripts\r\n        read only = No\r\n\r\n[share]\r\n        path = \/home\/share\r\n        read only = no\r\n        guest ok = yes\r\n        create mask = 0777\r\n        browseable = yes\r\n        comment = Общий доступ<\/code><\/pre><p>ненужное блочим, нужное запускаем<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">systemctl stop smbd nmbd winbind\r\nsystemctl disable smbd nmbd winbind\r\nsystemctl enable samba-ad-dc\r\nsystemctl start samba-ad-dc<\/code><\/pre>",
            "date_published": "2025-11-25T10:13:12+05:00",
            "date_modified": "2025-11-25T10:44:38+05:00",
            "tags": [
                "domain",
                "linux"
            ],
            "_date_published_rfc2822": "Tue, 25 Nov 2025 10:13:12 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "246",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "245",
            "url": "https:\/\/timsa.ru\/all\/ldaps-na-samba4\/",
            "title": "LDAPS на SAMBA4",
            "content_html": "<h2>Генерация корневой пары ключ-сертификат:<\/h2>\n<pre class=\"e2-text-code\"><code class=\"\">openssl genrsa -out rootCA.key 2048\r\nopenssl req -x509 -new -key rootCA.key -days 10000 -out rootCA.crt<\/code><\/pre><p>обязательно заполнить<br \/>\nOrganizational Unit Name (eg, section) []:3221 CA<br \/>\nи указать сервер<br \/>\nCommon Name (e. g. server FQDN or YOUR name) []:dc.3221.ru<\/p>\n<h2>Генерация приватного ключа и сертификата, подписанного корневым сертификатом:<\/h2>\n<pre class=\"e2-text-code\"><code class=\"\">openssl genrsa -out dc.3221.ru.key 2048\r\nopenssl req -new -key dc.3221.ru.key -out dc.3221.ru.csr<\/code><\/pre><p>обязательно заполнить и указать <b>ОТЛИЧНЫМ<\/b> от предыдущего<br \/>\nOrganizational Unit Name (eg, section) []:3221 AD<br \/>\nи указать сервер (в большинстве случаев тот же самый)<br \/>\nCommon Name (e. g. server FQDN or YOUR name) []:dc.3221.ru<\/p>\n<p>Далее<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">openssl x509 -req -in dc.3221.ru.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out dc.3221.ru.crt -days 5000<\/code><\/pre><p>и копируем в папку самбы<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">cp dc.3221.ru.crt dc.3221.ru.key rootCA.crt \/var\/lib\/samba\/private\/tls\/<\/code><\/pre><p>рестартим самбу<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">systemctl restart samba<\/code><\/pre><p>файлик rootCA.crt закинуть на виндовые машины и поместить в доверенные корневые центры сертификации<\/p>\n<p>результат работы под виндой можно проверить с помощью утилиты ldp (указать имя сервера, порт 636, поставить SSL)<\/p>\n",
            "date_published": "2025-11-24T11:36:04+05:00",
            "date_modified": "2025-11-25T10:10:20+05:00",
            "tags": [
                "ad",
                "domain",
                "linux",
                "windows"
            ],
            "_date_published_rfc2822": "Mon, 24 Nov 2025 11:36:04 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "245",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "244",
            "url": "https:\/\/timsa.ru\/all\/swap-v-fayl\/",
            "title": "SWAP в файл",
            "content_html": "<p>Проверяем:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">swapon --show<\/code><\/pre><p>Если в выводе пусто, значит раздела нет.<\/p>\n<p>Первым делом создаем файл для наших целей:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">dd if=\/dev\/zero of=\/swap bs=1024 count=1000000<\/code><\/pre><p>Форматируем файл в формат свопа:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">mkswap \/swap<\/code><\/pre><p>Подключаем файл к системе:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">chmod 0600 \/swap\r\nswapon \/swap<\/code><\/pre><p>Проверяем результат работы:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">swapon --show<\/code><\/pre><p>Все в порядке, раздел добавлен. Теперь нам нужно сделать так, чтобы swap раздел монтировался при загрузке. Для этого добавляем в fstab строку:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">\/swap swap swap defaults 0 0<\/code><\/pre>",
            "date_published": "2025-11-21T13:31:16+05:00",
            "date_modified": "2025-11-25T10:11:23+05:00",
            "tags": [
                "linux"
            ],
            "_date_published_rfc2822": "Fri, 21 Nov 2025 13:31:16 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "244",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "224",
            "url": "https:\/\/timsa.ru\/all\/lechim-disk\/",
            "title": "Лечим диск",
            "content_html": "<p>Посыпались ошибки диска, а точнее:<\/p>\n<blockquote>\n<p>Device: \/dev\/sdb [SAT], 20 Currently unreadable (pending) sectors<\/p>\n<\/blockquote>\n<p>Запустим короткий тест<\/p>\n<blockquote>\n<p>smartctl —test=short \/dev\/sdb<\/p>\n<\/blockquote>\n<p>Подождем 2 минуты и посмотрим:<\/p>\n<blockquote>\n<p>smartctl -a \/dev\/sdb<\/p>\n<\/blockquote>\n<p>Нужны две строчки, размер сектора:<\/p>\n<blockquote>\n<p>Sector Sizes:     512 bytes logical, 4096 bytes physical<\/p>\n<\/blockquote>\n<p>512 байт и местоположение ошибки<\/p>\n<blockquote>\n<p>1  Short offline       Completed: read failure       70%     43114         3906988766<\/p>\n<\/blockquote>\n<p>3906988766<\/p>\n<p>Попробуем прямо туда что-нибудь записать в надежде что оно само при попытке записи сделает реалокацию бэдблока (сектор 512 байт, 20 секторов начиная с 3906988766):<\/p>\n<blockquote>\n<p>dd if=\/dev\/zero of=\/dev\/sdb bs=512 count=20 seek=3906988766 conv=noerror,sync<\/p>\n<\/blockquote>\n<p>В моем случае сказало — хуй:<\/p>\n<blockquote>\n<p>dd: error writing ’\/dev\/sdb’: Input\/output error<\/p>\n<\/blockquote>\n<p>Попробуем поискать их утилиткой берем расширенный диапазон вокруг проблемного места:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">badblocks -b 512 -sv \/dev\/sdb 3907000000 3906970000\r\nChecking blocks 3906970000 to 3907000000\r\nChecking for bad blocks (read-only test): 3906988760ne, 0:00 elapsed. (0\/0\/0 errors)\r\n...\r\ndone\r\nPass completed, 16 bad blocks found. (16\/0\/0 errors)<\/code><\/pre><p>Нашли 16 секторов, попробуем их пометить:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">badblocks -b 512 -svw \/dev\/sdb 3907000000 3906960000\r\nChecking for bad blocks in read-write mode\r\nFrom block 3906960000 to 3907000000\r\nTesting with pattern 0xaa: done\r\nReading and comparing: done\r\nTesting with pattern 0x55: done\r\nReading and comparing: done\r\nTesting with pattern 0xff: done\r\nReading and comparing: done\r\nTesting with pattern 0x00: done\r\nReading and comparing: done\r\nPass completed, 0 bad blocks found. (0\/0\/0 errors)<\/code><\/pre><p>Проверим снова<\/p>\n<blockquote>\n<p>smartctl —test=short \/dev\/sdb<br \/>\nsmartctl -a \/dev\/sdb<\/p>\n<\/blockquote>\n<p>Ну и заебись:<\/p>\n<blockquote>\n<p>1  Short offline       Completed without error       00%     43114         —<\/p>\n<\/blockquote>\n",
            "date_published": "2025-02-13T09:38:19+05:00",
            "date_modified": "2025-02-13T09:37:20+05:00",
            "tags": [
                "disc",
                "linux"
            ],
            "_date_published_rfc2822": "Thu, 13 Feb 2025 09:38:19 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "224",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "223",
            "url": "https:\/\/timsa.ru\/all\/p2v-na-proxmox\/",
            "title": "P2V на Proxmox",
            "content_html": "<p>Ранее уже изучал этот вопрос с переездом на ESXi, но с тех пор от продуктов vmware давно отказался <a href=\"https:\/\/timsa.ru\/all\/p2v-ili-kak-preobrazovat-fizicheskiy-server-v-virtualny\/\">https:\/\/timsa.ru\/all\/p2v-ili-kak-preobrazovat-fizicheskiy-server-v-virtualny\/<\/a><\/p>\n<h2>Сегодня будем мигрировать на proxmox.<\/h2>\n<p><b>Первый пункт — проверить, что знаешь пароль root и он подходит!<\/b><\/p>\n<p>убрать лишние диски, иначе ВМка может не стартануть, а еще пароль рута не подходит...<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">vi \/etc\/fstab<\/code><\/pre><p>настроить другой ip чтобы при старте она не обосрала жизнь старому серверу<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">vi \/etc\/network\/interfaces<\/code><\/pre><p>тут желательно остановить все активно пишущие на диск сервисы (mysql и influxdb как минимум)<\/p>\n<p>скопировать образ системного диска (sdc) в файл (старенький SATA 3Gb\/s дает 125 мб\/с или 15 минут на 128 гигов)<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">dd if=\/dev\/sdc of=\/mnt\/somedisk\/debra.img bs=8M conv=sync,noerror status=progress<\/code><\/pre><p>вернуть лишние диски<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">vi \/etc\/fstab<\/code><\/pre><p>вернуть ip<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">vi \/etc\/network\/interfaces<\/code><\/pre><p>конвертируем в qcow2 (заняло ровно час)<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">qemu-img convert -f raw debra.img -O qcow2 debra.qcow2<\/code><\/pre><p>закидываем образ на proxmox 101 — это свободный номер для ВМ<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">scp debra.qcow2 root@pve:\/root\/vm-101-disk-0.qcow2<\/code><\/pre><p>создаем машину (после создания ~можно~ нужно зайти в интерфейс и подрихтовать параметры)<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">qm create 101 --name oldphysical --memory 4096 --cores 4 --net0 virtio,bridge=vmbr0<\/code><\/pre><p>импортируем диск (он полюбому копируется и даже немного конвертируется)<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">qm importdisk 101 \/root\/vm-101-disk-0.qcow2 local --format qcow2<\/code><\/pre><p>подключаем диск (на предыдущем шаге будет точно написан путь local.., взять оттуда так как в интернете херня)<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">qm set 101 --scsi0 local:101\/vm-101-disk-0.qcow2<\/code><\/pre><p>ставим загрузочное устройство<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">qm set 101 --boot order=scsi0<\/code><\/pre><p>запускаем машину<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">qm start 101<\/code><\/pre><h2>Также полезное<\/h2>\n<p><b>посмотреть содержимое образа raw<\/b><\/p>\n<p>сначала команда выдаст устройство, например \/dev\/loop0<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">losetup -f --show debra.img<\/code><\/pre><p>можно посмотреть разделы<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">fdisk -l \/dev\/loop0<\/code><\/pre><p>подключим разделы<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">partprobe \/dev\/loop0<\/code><\/pre><p>смонтируем первый<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">mount \/dev\/loop0p1 \/mnt\/restore<\/code><\/pre><p>размонтируем<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">umount \/dev\/loop0p1<\/code><\/pre><p>отключаем<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">losetup --detach \/dev\/loop0<\/code><\/pre><p><b>посмотреть содержимое образа qcow2<\/b><\/p>\n<p>проверяем что модуль nbd загружен<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">modprobe nbd max_part=8<\/code><\/pre><p>коннектим устройство<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">qemu-nbd --connect=\/dev\/nbd0 debra.qcow2<\/code><\/pre><p>смонтируем<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">mount \/dev\/nbd0p1 \/mnt\/restore<\/code><\/pre><p>размонтируем<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">umount \/dev\/nbd0p1<\/code><\/pre><p>отключаем<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">qemu-nbd --disconnect \/dev\/nbd0<\/code><\/pre>",
            "date_published": "2025-02-11T15:52:22+05:00",
            "date_modified": "2025-02-11T15:52:17+05:00",
            "tags": [
                "linux",
                "proxmox",
                "virtualization"
            ],
            "_date_published_rfc2822": "Tue, 11 Feb 2025 15:52:22 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "223",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "194",
            "url": "https:\/\/timsa.ru\/all\/homeassistant\/",
            "title": "Установка homeassistant",
            "content_html": "<pre class=\"e2-text-code\"><code class=\"\">apt-get update &amp;&amp; apt-get install curl net-tools iftop htop sudo python3 python3-dev python3-venv python3-pip bluez libffi-dev libssl-dev libjpeg-dev zlib1g-dev autoconf build-essential libopenjp2-7 libtiff6 libturbojpeg0-dev tzdata ffmpeg liblapack3 liblapack-dev libatlas-base-dev<\/code><\/pre><p>настроить sudo, консольку<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">useradd -rm homeassistant\r\n# mkdir \/homeassistant # ставим в домашнюю\r\n# chown homeassistant:homeassistant \/homeassistant\r\nsudo -u homeassistant -H -s\r\ncd \/home\/homeassistant\r\npython3 -m venv .\r\nsource bin\/activate\r\npython3 -m pip install wheel \r\npip3 install homeassistant numpy mutagen\r\nhass<\/code><\/pre><p>для автозапуска<br \/>\nсоздаем файл \/etc\/systemd\/system\/home-assistant@homeassistant.service<br \/>\nс содержимым:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">[Unit]\r\nDescription=Home Assistant\r\nAfter=network-online.target\r\n\r\n[Service]\r\nType=simple\r\nUser=%i\r\nWorkingDirectory=\/home\/%i\/.homeassistant\r\nExecStart=\/home\/%i\/bin\/hass -c &quot;\/home\/%i\/.homeassistant&quot;\r\nRestartForceExitStatus=100\r\nRestart=on-failure\r\nRestartSec=5s\r\n\r\n[Install]\r\nWantedBy=multi-user.target<\/code><\/pre><p>далее<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">sudo systemctl --system daemon-reload\r\nsudo systemctl enable home-assistant@homeassistant\r\nsudo systemctl start home-assistant@homeassistant<\/code><\/pre><p>ставим брокер MQTT<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">curl -s https:\/\/assets.emqx.com\/scripts\/install-emqx-deb.sh | bash\r\napt-get install emqx\r\nsystemctl start emqx<\/code><\/pre><p>по умолчанию admin:public<\/p>\n<p>UPD.:<br \/>\nEmqx по-большому счету совершенно ненужный сервант, запускает вагон сервисов, жрет ресурсы, а для работы умного дома функционала mosquitto хватит за глаза.<\/p>\n",
            "date_published": "2024-06-26T21:31:54+05:00",
            "date_modified": "2024-07-01T16:36:43+05:00",
            "tags": [
                "linux",
                "smarthome"
            ],
            "_date_published_rfc2822": "Wed, 26 Jun 2024 21:31:54 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "194",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "193",
            "url": "https:\/\/timsa.ru\/all\/astralinux-bt-adapter-hp-envy\/",
            "title": "Astralinux BT адаптер HP Envy",
            "content_html": "<p>Никак не мог подключить BT мышку к ноуту с AstraLinux.<br \/>\nРешение такое:<\/p>\n<ol start=\"1\">\n<li>установить пакет blueman<\/li>\n<li>скачать с <a href=\"https:\/\/github.com\/winterheart\/broadcom-bt-firmware\/tree\/master\/brcm\">https:\/\/github.com\/winterheart\/broadcom-bt-firmware\/tree\/master\/brcm<\/a> файлик BCM43142A0-0a5c-216c.hcd зеркало <a href=\"https:\/\/timsa.ru\/f\/BCM43142A0-0a5c-216c.hcd\">https:\/\/timsa.ru\/f\/BCM43142A0-0a5c-216c.hcd<\/a><\/li>\n<li>положить его в \/lib\/firmware\/brcm\/ на всякий случай положил дважды, второе имя BCM-0a5c-216c.hcd<\/li>\n<li>перезагрузиться<\/li>\n<\/ol>\n<p>Также может быть полезным<br \/>\n<a href=\"https:\/\/help.ubuntu.ru\/wiki\/broadcom_bluetooth\">https:\/\/help.ubuntu.ru\/wiki\/broadcom_bluetooth<\/a><br \/>\n<a href=\"https:\/\/github.com\/winterheart\/broadcom-bt-firmware\/\">https:\/\/github.com\/winterheart\/broadcom-bt-firmware\/<\/a><\/p>\n",
            "date_published": "2024-06-26T18:07:09+05:00",
            "date_modified": "2024-06-26T18:06:55+05:00",
            "tags": [
                "linux"
            ],
            "_date_published_rfc2822": "Wed, 26 Jun 2024 18:07:09 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "193",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        },
        {
            "id": "182",
            "url": "https:\/\/timsa.ru\/all\/raspberry-pi-1-model-b-rev-2\/",
            "title": "Raspberry Pi 1 Model B Rev 2",
            "content_html": "<p>Разрядом убита сетевуха, всё остальное работает.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/timsa.ru\/pictures\/Raspberry-Pi-1-Model-B-Rev-2.png\" width=\"1280\" height=\"868\" alt=\"\" \/>\n<\/div>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/timsa.ru\/pictures\/Raspberry-Pi-1-Model-B-5.jpg\" width=\"600\" height=\"1074\" alt=\"\" \/>\n<\/div>\n",
            "date_published": "2023-12-02T22:15:24+05:00",
            "date_modified": "2023-12-02T22:15:18+05:00",
            "tags": [
                "diy",
                "linux",
                "raspberry"
            ],
            "image": "https:\/\/timsa.ru\/pictures\/Raspberry-Pi-1-Model-B-Rev-2.png",
            "_date_published_rfc2822": "Sat, 02 Dec 2023 22:15:24 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "182",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/timsa.ru\/pictures\/Raspberry-Pi-1-Model-B-Rev-2.png",
                    "https:\/\/timsa.ru\/pictures\/Raspberry-Pi-1-Model-B-5.jpg"
                ]
            }
        },
        {
            "id": "173",
            "url": "https:\/\/timsa.ru\/all\/zamena-q6600-na-q9650\/",
            "title": "Замена Q6600 на Q9650",
            "content_html": "<p>Q6600<\/p>\n<pre class=\"e2-text-code\"><code class=\"\"># pveperf\r\nCPU BOGOMIPS:      19200.72\r\nREGEX\/SECOND:      1214454\r\nHD SIZE:           39.63 GB (\/dev\/mapper\/pve-root)\r\nBUFFERED READS:    261.28 MB\/sec\r\nAVERAGE SEEK TIME: 0.09 ms\r\nFSYNCS\/SECOND:     482.88\r\nDNS EXT:           699.36 ms\r\nDNS INT:           648.79 ms (timsa.ru)<\/code><\/pre><p>Q9650<\/p>\n<pre class=\"e2-text-code\"><code class=\"\"># pveperf\r\nCPU BOGOMIPS:      23997.28\r\nREGEX\/SECOND:      1947088\r\nHD SIZE:           39.19 GB (\/dev\/mapper\/pve-root)\r\nBUFFERED READS:    267.85 MB\/sec\r\nAVERAGE SEEK TIME: 0.07 ms\r\nFSYNCS\/SECOND:     614.74\r\nDNS EXT:           973.98 ms\r\nDNS INT:           984.37 ms (timsa.ru)<\/code><\/pre><p>Q6600<\/p>\n<pre class=\"e2-text-code\"><code class=\"\"># cat \/proc\/cpuinfo\r\nprocessor       : 0\r\nvendor_id       : GenuineIntel\r\ncpu family      : 6\r\nmodel           : 15\r\nmodel name      : Intel(R) Core(TM)2 Quad CPU    Q6600  @ 2.40GHz\r\nstepping        : 11\r\nmicrocode       : 0xb6\r\ncpu MHz         : 2400.094\r\ncache size      : 4096 KB\r\nphysical id     : 0\r\nsiblings        : 4\r\ncore id         : 0\r\ncpu cores       : 4\r\napicid          : 0\r\ninitial apicid  : 0\r\nfpu             : yes\r\nfpu_exception   : yes\r\ncpuid level     : 10\r\nwp              : yes\r\nflags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl cpuid aperfmperf pni dtes64 monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm lahf_lm pti dtherm\r\nbugs            : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit mmio_unknown\r\nbogomips        : 4800.18\r\nclflush size    : 64\r\ncache_alignment : 64\r\naddress sizes   : 36 bits physical, 48 bits virtual\r\npower management:<\/code><\/pre><p>Q9650<\/p>\n<pre class=\"e2-text-code\"><code class=\"\"># cat \/proc\/cpuinfo\r\nprocessor       : 0\r\nvendor_id       : GenuineIntel\r\ncpu family      : 6\r\nmodel           : 23\r\nmodel name      : Intel(R) Core(TM)2 Quad CPU    Q9650  @ 3.00GHz\r\nstepping        : 10\r\nmicrocode       : 0xa07\r\ncpu MHz         : 3000.000\r\ncache size      : 6144 KB\r\nphysical id     : 0\r\nsiblings        : 4\r\ncore id         : 0\r\ncpu cores       : 4\r\napicid          : 0\r\ninitial apicid  : 0\r\nfpu             : yes\r\nfpu_exception   : yes\r\ncpuid level     : 13\r\nwp              : yes\r\nflags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl cpuid aperfmperf pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 xsave lahf_lm pti tpr_shadow vnmi flexpriority vpid dtherm\r\nvmx flags       : vnmi flexpriority tsc_offset vtpr vapic\r\nbugs            : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit mmio_unknown\r\nbogomips        : 5999.32\r\nclflush size    : 64\r\ncache_alignment : 64\r\naddress sizes   : 36 bits physical, 48 bits virtual\r\npower management:<\/code><\/pre>",
            "date_published": "2023-10-24T18:10:18+05:00",
            "date_modified": "2023-10-18T22:49:47+05:00",
            "tags": [
                "linux"
            ],
            "_date_published_rfc2822": "Tue, 24 Oct 2023 18:10:18 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "173",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "172",
            "url": "https:\/\/timsa.ru\/all\/mqtt-broker\/",
            "title": "MQTT broker",
            "content_html": "<p>Ранее использовал простенький mosquitto для IoT и прочего, но понадобилась интеграция с браузером — создать дашборд с отображением информации и возможностью отправлять команды, эдакий информационный киоск.<br \/>\nКлиента mqtt на JS я не нашел (браузерную версию). Ставить node.js и делать шлюз — вроде как лишняя сущность, костыль получается.<br \/>\nЗато в поисках нашел EMQX — брокер MQTT плюс возможность создания дашбордов и трансляции топиков через websocket.<\/p>\n<p>Задача:<\/p>\n<ol start=\"1\">\n<li>Поставить EMQX параллельно действующему mosquitto, но на другие порты<\/li>\n<li>Настроить трансляцию mosquitto -> EMQX<\/li>\n<li>Переключить часть сервисов на EMQX и посмотреть на стабильность\/совместимость<\/li>\n<li>Заменить mosquitto полностью.<\/li>\n<\/ol>\n<p>Пока вижу подводный камень в виде SSL. Далеко не все устройства IoT в состоянии поднимать SSL.<\/p>\n",
            "date_published": "2023-09-25T11:19:37+05:00",
            "date_modified": "2023-09-25T11:19:18+05:00",
            "tags": [
                "esp8266",
                "iot",
                "linux",
                "todo"
            ],
            "_date_published_rfc2822": "Mon, 25 Sep 2023 11:19:37 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "172",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        },
        {
            "id": "161",
            "url": "https:\/\/timsa.ru\/all\/upravlenie-p410-pod-linux\/",
            "title": "Управление P410 под linux",
            "content_html": "<p>Утилита hpacucli сдохла, а hpssacli переименовалась в ssacli. Её и надо использовать.<\/p>\n<p>Перечень команд <a href=\"https:\/\/gist.github.com\/mrpeardotnet\/a9ce41da99936c0175600f484fa20d03\">https:\/\/gist.github.com\/mrpeardotnet\/a9ce41da99936c0175600f484fa20d03<\/a><\/p>\n<p>На всякий случай копия основных.<\/p>\n<p>Допустимые сокращения:<br \/>\nchassisname = ch<br \/>\ncontroller = ctrl<br \/>\nlogicaldrive = ld<br \/>\nphysicaldrive = pd<br \/>\ndrivewritecache = dwc<br \/>\nlicensekey = lk<\/p>\n<p>Show available controllers<\/p>\n<p>ssacli ctrl all show<\/p>\n<p>Show controllers status<\/p>\n<p>ssacli ctrl all show status<\/p>\n<p>Show detailed controllers information<\/p>\n<p>ssacli ctrl all show detail<\/p>\n<p>Show controllers configuration<\/p>\n<p>ssacli ctrl all show config<\/p>\n<p>Rescan for new devices Useful after swapping disks in bays, etc...<\/p>\n<p>ssacli rescan<\/p>\n<p>Show all physical disks (or their status) (controller slot 0)<\/p>\n<p>ssacli ctrl slot=0 pd all show<br \/>\nssacli ctrl slot=0 pd all show status<\/p>\n<p>Show all physical disks detailed information (controller slot 0)<\/p>\n<p>ssacli ctrl slot=0 pd all show detail<\/p>\n<p>Show logical drives (or their status) (controller slot 0, all or specific logical drive(s))<\/p>\n<p>ssacli ctrl slot=0 ld all show<br \/>\nssacli ctrl slot=0 ld all show status<\/p>\n<p>ssacli ctrl slot=0 ld 1 show<br \/>\nssacli ctrl slot=0 ld 1 show status<\/p>\n<p>Show detailed logical drives information (controller slot 0, all or specific logical drive(s))<\/p>\n<p>ssacli ctrl slot=0 ld all show detail<br \/>\nssacli ctrl slot=0 ld 1 show detail<\/p>\n<p>Show array information (controller slot 0, array A)<\/p>\n<p>ssacli ctrl slot=0 array a show<\/p>\n<p>Show array status (controller slot 0, all arrays)<\/p>\n<p>ssacli ctrl slot=0 array all show status<\/p>\n<p>Create new RAID 0 logical drive (controller slot 0, disk in port 1I:box 1:bay 1)<\/p>\n<p>ssacli ctrl slot=0 create type=ld drives=1I:1:1 raid=0<\/p>\n<p>Create new RAID 1 logical drive (controller slot 0, disks in port 1I:box 1:bay 1 and 2)<\/p>\n<p>ssacli ctrl slot=0 create type=ld drives=1I:1:1,1I:1:2 raid=1<\/p>\n<p>Create new RAID 5 logical drive (controller slot 0, diks in port 1I:box 1:bay 1 to 4)<\/p>\n<p>ssacli ctrl slot=0 create type=ld drives=1I:1:1-1I:1:4 raid=5<\/p>\n<p>Delete logical drive (controller slot 0, logical drive 1)<\/p>\n<p>ssacli ctrl slot=0 ld 1 delete<\/p>\n<p>Add new physical disks to logical drive (controller slot 0, logical drive 1, disks in port 1I:box 1:bay 6 and 7)<\/p>\n<p>ssacli ctrl slot=0 ld 2 add drives=1I:1:6,1I:1:7<\/p>\n<p>Add spare disks (controller slot 0, logical drive 1, array A, disks in port 1I:box 1:bay 6 and 7)<\/p>\n<p>ssacli ctrl slot=0 array a add spares=1I:1:6,1I:1:7<\/p>\n<p>Add global spare disks (controller slot 0, logical drive 1, all arrays, disks in port 1I:box 1:bay 6 and 7)<\/p>\n<p>ssacli ctrl slot=0 array all add spares=1I:1:6,1I:1:7<\/p>\n<p>Turn on\/off blink logical drive LED (controller slot 0, logical drive 1)<\/p>\n<p>ssacli ctrl slot=0 ld 1 modify led=on<br \/>\nssacli ctrl slot=0 ld 1 modify led=off<\/p>\n<p>Turn on\/off blink physical disk LED (controller slot 0, physical disk port 1I:box 1:bay 1)<\/p>\n<p>ssacli ctrl slot=0 pd 1I:1:1 modify led=on<br \/>\nssacli ctrl slot=0 pd 1I:1:1 modify led=off<\/p>\n<p>Modify smart array cache read and write ratio (controller slot 0, cacheratio 80% read\/20% write)<\/p>\n<p>ssacli ctrl slot=0 modify cacheratio=80\/20<\/p>\n<p>Show physical drive write cache status (controller slot 0)<\/p>\n<p>ssacli ctrl slot=0 modify dwc=?<\/p>\n<p>Enable\/disable physical drive write cache (controller slot 0) Important: Because physical drive write cache is not battery-backed, you could lose data if a power failure occurs during a write process. To minimize this possibility, use a backup power supply.<\/p>\n<p>ssacli ctrl slot=0 modify dwc=enable<br \/>\nssacli ctrl slot=0 modify dwc=disable<\/p>\n<p>Show status of smart array write cache when no battery is present (no-battery write cache option, controller slot 0)<\/p>\n<p>ssacli ctrl slot=0 modify nbwc=?<\/p>\n<p>Enable\/disable smart array write cache when no battery is present (no-battery write cache option, controller slot 0)<\/p>\n<p>ssacli ctrl slot=0 modify nbwc=enable<br \/>\nssacli ctrl slot=0 modify nbwc=disable<\/p>\n<p>Enable\/disable smart array cache for certain Logical Volume (controller slot 0, logical drive 1)<\/p>\n<p>ssacli ctrl slot=0 ld 1 modify arrayaccelerator=enable<br \/>\nssacli ctrl slot=0 ld 1 modify arrayaccelerator=disable<\/p>\n<p>Enable\/disable SSD Smart Path (controller slot 0, array A)<\/p>\n<p>ssacli ctrl slot=0 array a modify ssdsmartpath=enable<br \/>\nssacli ctrl slot=0 array a modify ssdsmartpath=disable<\/p>\n<p>Show spare activation mode<\/p>\n<p>ssacli ctrl slot=0 modify spareactivationmode=?<\/p>\n<p>Set spare activation mode<\/p>\n<p>ssacli ctrl slot=0 modify spareactivationmode=predictive<br \/>\nssacli ctrl slot=0 modify spareactivationmode=failure<\/p>\n<p>Show rebuild priority<\/p>\n<p>ssacli ctrl slot=0 modify rp=?<\/p>\n<p>Modify rebuild priority<\/p>\n<p>ssacli ctrl slot=0 modify rp=low<br \/>\nssacli ctrl slot=0 modify rp=medium<br \/>\nssacli ctrl slot=0 modify rp=mediumhigh<br \/>\nssacli ctrl slot=0 modify rp=high<\/p>\n<p>Erase Physical Drive (controller slot 0, physical disk port 1I:box 1:bay 1)<\/p>\n<p>ssacli ctrl slot=0 pd 1I:1:1 modify erase<\/p>\n",
            "date_published": "2023-05-23T12:12:08+05:00",
            "date_modified": "2023-05-23T12:18:45+05:00",
            "tags": [
                "hp",
                "linux"
            ],
            "_date_published_rfc2822": "Tue, 23 May 2023 12:12:08 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "161",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        },
        {
            "id": "153",
            "url": "https:\/\/timsa.ru\/all\/rsync\/",
            "title": "Rsync",
            "content_html": "<p>-r рекурсивно<br \/>\n-l пересоздавать линки<br \/>\n-p сохранить пермишнс<br \/>\n-t сохранить время<br \/>\n-g сохранить группу<br \/>\n-o сохранить владельца<br \/>\n-D пересоздавать устройства<br \/>\n-a аналог -rlptgoD<\/p>\n<p>-z сжимать<br \/>\n—progress показывать прогресс<br \/>\n-n пробный прогон<br \/>\n-v с комментариями<br \/>\n-u только обновлять<\/p>\n<p>например скопировать директорию не перенося повторно то, что там уже есть<br \/>\nrsync -rupogtv source destination<\/p>\n",
            "date_published": "2022-06-03T11:31:13+05:00",
            "date_modified": "2022-08-08T10:16:04+05:00",
            "tags": [
                "linux"
            ],
            "_date_published_rfc2822": "Fri, 03 Jun 2022 11:31:13 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "153",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        },
        {
            "id": "151",
            "url": "https:\/\/timsa.ru\/all\/bash\/",
            "title": "bash",
            "content_html": "<p>если есть ключ, но нет пароля:<br \/>\nssh -i ssh_key login@host<\/p>\n<p>ключ должен иметь режим 600<br \/>\nchmod 600 keyfile<\/p>\n<p>создать файл из 100 блоков по 1 мегабайту рандомных цифр<br \/>\ndd if=\/dev\/urandom of=\/tmp\/somefile bs=1M count=100<\/p>\n<p>сделать какую то манипуляцию 10000 раз в командной строке<br \/>\nfor i in {0000..9999}; do cp \/tmp\/source \/tmp\/dest$i; done<\/p>\n<p>выполнять операцию до тех пор пока она не выполнится успешно<br \/>\nwhile ! apt-get -y upgrade; do sleep 2; done<\/p>\n<p>найти все директории с правом записи для всех<br \/>\nfind \/ -perm \/o=w -type d<\/p>\n",
            "date_published": "2022-05-19T12:42:57+05:00",
            "date_modified": "2025-02-11T10:04:53+05:00",
            "tags": [
                "it",
                "linux"
            ],
            "_date_published_rfc2822": "Thu, 19 May 2022 12:42:57 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "151",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        },
        {
            "id": "149",
            "url": "https:\/\/timsa.ru\/all\/p2v-ili-kak-preobrazovat-fizicheskiy-server-v-virtualny\/",
            "title": "P2V или как преобразовать физический сервер в виртуальный",
            "content_html": "<p>Задача: превратить старый физический сервер с Debian11 в виртуальную машину на ESXi гипервизоре.<br \/>\nВариант с конвертером (converter standalone \/ vCenter converter) у меня не удался ни разу, поэтому пошел другим путем.<br \/>\nВ процессе понадобится виндовая машина со свободным местом на диске >= двухкратному размеру системного диска сервера.<br \/>\nПри желании можно обойтись без нее.<\/p>\n<ol start=\"1\">\n<li>Подготовка.<br \/>\nОстанавливаем на сервере все задачи, изменяющие критичные данные (типа mysql).<br \/>\nУбеждаемся что помним пароль рута, а если его не было — устанавливаем.<br \/>\nЕсли кроме системного раздела на сервере были монтирующиеся дополнительные, но которые переносить не надо, желательно сразу отредактировать fstab — закоментить лишнее.<br \/>\nУстанавливаем если ранее не было qemu: apt update && apt install qemu qemu-utils<\/li>\n<\/ol>\n<ol start=\"2\">\n<li>Копируем системный раздел в образ примерно так:<br \/>\ndd if=\/dev\/sda of=\/root\/sda.img bs=8M conv=sync,noerror status=progress<\/li>\n<\/ol>\n<ol start=\"3\">\n<li>Конвертируем образ в vmdk:<br \/>\nqemu-img convert -o compat6 sda.img -O vmdk sda-vmware.vmdk<\/li>\n<\/ol>\n<ol start=\"4\">\n<li>Вытаскиваем vmdk файл на виндовую машину. Устанавливаем VMware Workstation. Создаем в последнем новую ВМ с параметрами примерно как у сервера (проц, память), указываем что будет ubuntu18 x64, и что систему поставим позже (диск по дефолту 20Гб). Теперь, не запуская новую ВМ подменяем vmdk файл (тут есть вариант указать при создании «использовать имеющийся диск», но этот пункт есть не у всех версий VMware Workstation).<\/li>\n<\/ol>\n<ol start=\"5\">\n<li>Запускаем виртуальную машину. Тут могут посыпаться некоторые ошибки, может понадобиться пароль рута. У меня в частности наругалось на отсутствующие диски. Также может измениться UUID, тогда делаем blkid и прописываем в fstab верные.<\/li>\n<\/ol>\n<ol start=\"6\">\n<li>Гасим виртуальную машину и делаем экспорт в OVF.<\/li>\n<\/ol>\n<ol start=\"7\">\n<li>Подключаемся к гипервизору ESXi и загружаем в него OVF.<br \/>\nЕсли возникнет ошибка типа «No supported hardware versions among» — нужно отредактировать ovf-файл, исправить в нем vmx-xx (где хх например 16) на поддерживаемую гипервизором версию, например 13 или 12.<\/li>\n<\/ol>\n",
            "date_published": "2022-03-21T14:33:49+05:00",
            "date_modified": "2025-02-11T15:35:10+05:00",
            "tags": [
                "esxi",
                "linux",
                "virtualization"
            ],
            "_date_published_rfc2822": "Mon, 21 Mar 2022 14:33:49 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "149",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        },
        {
            "id": "146",
            "url": "https:\/\/timsa.ru\/all\/pochemu-ne-rabotaet-otklyuchenie-parolya-sudoera\/",
            "title": "Почему не работает отключение пароля sudoer’а?",
            "content_html": "<p>Чтобы `sudo` не спрашивало пароль, надо отредактировать файл \/etc\/sudoers с помощью visudo.<br \/>\nВо всех найденных инструкциях приводится один и тот же пример:<\/p>\n<p>под строкой<br \/>\nroot ALL=(ALL:ALL) ALL<br \/>\nдобавляют юзера<br \/>\nusername ALL=(ALL) NOPASSWD: ALL<\/p>\n<p>всё верно, вот только дальше в файле есть строчка<br \/>\n%sudo   ALL=(ALL:ALL) ALL<br \/>\nкоторая срабатывает для username если он входит в группу sudoer и соответственно запрос пароля не отключится.<\/p>\n<p>Решение тупое — написать юзера username ниже строчки %sudo.<br \/>\nРешение правильное — вынести юзера username в отдельный файл в \/etc\/sudoers.d\/username<br \/>\nт.к .подключение этих файлов идет в конце \/etc\/sudoers<\/p>\n",
            "date_published": "2022-02-24T09:36:26+05:00",
            "date_modified": "2022-02-24T09:35:55+05:00",
            "tags": [
                "know how",
                "linux"
            ],
            "_date_published_rfc2822": "Thu, 24 Feb 2022 09:36:26 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "146",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        },
        {
            "id": "143",
            "url": "https:\/\/timsa.ru\/all\/docker\/",
            "title": "Docker",
            "content_html": "<p>Докатились...<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">https:\/\/docs.docker.com\/engine\/install\/debian\/\r\n\r\napt-get install ca-certificates curl gnupg lsb-release apt-transport-https\r\n\r\ncurl -fsSL https:\/\/download.docker.com\/linux\/debian\/gpg | sudo gpg --dearmor -o \/usr\/share\/keyrings\/docker-archive-keyring.gpg\r\n\r\necho &quot;deb [arch=$(dpkg --print-architecture) signed-by=\/usr\/share\/keyrings\/docker-archive-keyring.gpg] https:\/\/download.docker.com\/linux\/debian $(lsb_release -cs) stable&quot; | tee \/etc\/apt\/sources.list.d\/docker.list &gt; \/dev\/null\r\n\r\nf.e. : deb [arch=amd64 signed-by=\/usr\/share\/keyrings\/docker-archive-keyring.gpg] https:\/\/download.docker.com\/linux\/debian bullseye stable\r\n\r\n\r\napt-get update\r\napt-get install docker-ce docker-ce-cli containerd.io\r\n\r\ndocker run hello-world\r\n\r\ngroupadd docker\r\nusermod -aG docker $USER\r\n\r\nsystemctl enable docker.service\r\nsystemctl enable containerd.service<\/code><\/pre>",
            "date_published": "2021-12-14T11:43:01+05:00",
            "date_modified": "2021-12-14T11:44:11+05:00",
            "tags": [
                "devops",
                "it",
                "linux"
            ],
            "_date_published_rfc2822": "Tue, 14 Dec 2021 11:43:01 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "143",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "128",
            "url": "https:\/\/timsa.ru\/all\/neplohoy-backup-dlya-debian\/",
            "title": "Неплохой backup для debian",
            "content_html": "<p>Veeam Agent for Linux FREE (<a href=\"https:\/\/www.veeam.com\/ru\/linux-backup-free.html)\">https:\/\/www.veeam.com\/ru\/linux-backup-free.html)<\/a><\/p>\n<p>Регаемся, качаем veeam-release-deb_1.0.7_amd64.deb (в случае дебиана), делаем<br \/>\ndpkg -i veeam-release-deb_1.0.7_amd64.deb<br \/>\napt-get update<br \/>\napt-get install veeam<br \/>\nЕсли планируется бэкапить по сетке на виндовую машину надо будет поставить cifs-utils<br \/>\napt-get install cifs-utils<br \/>\n(там всякая срань подтянется, но что делать)<\/p>\n<p>Теперь запускаем veeam<br \/>\nПринимаем соглашение, далее далее, где лицензия просто далее.<br \/>\nНажимаем C и переходим к созданию задания.<br \/>\nВыбираем что будем бэкапить всю машину или раздел, потом куда, если как в моем случае на винду то SMB (прописываем ip сервера, название шары, логин, пароль), указываем когда будет запускаться задача и всё.<\/p>\n",
            "date_published": "2021-03-30T16:33:23+05:00",
            "date_modified": "2021-03-30T16:33:18+05:00",
            "tags": [
                "backup",
                "linux",
                "veeam"
            ],
            "_date_published_rfc2822": "Tue, 30 Mar 2021 16:33:23 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "128",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        },
        {
            "id": "116",
            "url": "https:\/\/timsa.ru\/all\/podklyuchaem-dadget-co2-k-servaku\/",
            "title": "Подключаем Dadget CO2 к серваку",
            "content_html": "<ol start=\"1\">\n<li>Сначала сделаем чтобы любой пользователь мог обращаться к устройству<br \/>\nсоздаем \/etc\/udev\/rules.d\/10-co2mon.rules<br \/>\nс содержимым<\/li>\n<\/ol>\n<pre class=\"e2-text-code\"><code class=\"\">ACTION==&quot;add|change&quot;, SUBSYSTEMS==&quot;usb&quot;, ATTRS{idVendor}==&quot;04d9&quot;, ATTRS{idProduct}==&quot;a052&quot;, MODE:=&quot;0666&quot;<\/code><\/pre><p>щелкаем<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">udevadm control --reload\r\nudevadm trigger<\/code><\/pre><p>проверяем что \/dev\/usb\/hiddev0 теперь crw-rw-rw-<\/p>\n<ol start=\"2\">\n<li>Подключаем библиотечку <s>PyUSB<\/s> hid. PyUSB глючное говно вызывающее странные эффекты, например пропадение устройства hiddev0.<br \/>\npip3 install hid (или hidapi уже не помню, это гуглится)<\/li>\n<\/ol>\n<ol start=\"2\">\n<li>Читаем (алгоритм расшифровки передрал с сишного проекта co2mod)<\/li>\n<\/ol>\n<pre class=\"e2-text-code\"><code class=\"\">#!\/usr\/bin\/env python3\r\n\r\nimport hid\r\nimport time\r\n\r\ndef decode_co(data):\r\n    # кручу-верчу\r\n    data[0], data[2] = data[2], data[0]\r\n    data[1], data[4] = data[4], data[1]\r\n    data[3], data[7] = data[7], data[3]\r\n    data[5], data[6] = data[6], data[5]\r\n    \r\n    result = bytearray(8)\r\n\r\n    # всех обмануть хочу\r\n    result[7] = ((data[6] &lt;&lt; 5) &amp; 0xFF) | ((data[7] &gt;&gt; 3) &amp; 0xFF)\r\n    result[6] = ((data[5] &lt;&lt; 5) &amp; 0xFF) | ((data[6] &gt;&gt; 3) &amp; 0xFF)\r\n    result[5] = ((data[4] &lt;&lt; 5) &amp; 0xFF) | ((data[5] &gt;&gt; 3) &amp; 0xFF)\r\n    result[4] = ((data[3] &lt;&lt; 5) &amp; 0xFF) | ((data[4] &gt;&gt; 3) &amp; 0xFF)\r\n    result[3] = ((data[2] &lt;&lt; 5) &amp; 0xFF) | ((data[3] &gt;&gt; 3) &amp; 0xFF)\r\n    result[2] = ((data[1] &lt;&lt; 5) &amp; 0xFF) | ((data[2] &gt;&gt; 3) &amp; 0xFF)\r\n    result[1] = ((data[0] &lt;&lt; 5) &amp; 0xFF) | ((data[1] &gt;&gt; 3) &amp; 0xFF)\r\n    result[0] = ((data[7] &lt;&lt; 5) &amp; 0xFF) | ((data[0] &gt;&gt; 3) &amp; 0xFF)\r\n    \r\n    magic_word = b'Htemp99e'\r\n    for i in range(8):\r\n        r = ((magic_word[i] &lt;&lt; 4) &amp; 0xFF) | ((magic_word[i] &gt;&gt; 4) &amp; 0xFF)\r\n        if result[i] &lt; r:\r\n            result[i] = 0xFF - r + result[i]\r\n        else:\r\n            result[i] = result[i] - r\r\n\r\n    # не знаю почему, но у меня проверка чек-суммы никогда не сходилась    \r\n    #if result[0]+result[1]+result[2] != result[3]:\r\n    #    return 0\r\n\r\n    res = (result[1] &lt;&lt; 8) + result[2]\r\n\r\n    if result[0] == 0x42:\r\n        print(&quot;T={0}&quot;.format(res * 0.0625 - 273.15))\r\n        return 1\r\n    elif result[0] == 0x50:\r\n        print(&quot;CO={0}&quot;.format(res))\r\n        return 2\r\n    return 0\r\n    \r\ntry:\r\n    h = hid.device()\r\n    h.open(0x04d9, 0xa052)\r\n\r\n    # хз, не вникал\r\n    h.set_nonblocking(1)\r\n\r\n    # по идее это отправка некой magic_table которой шифруется ответ, но и без любой из этих строк работает\r\n    #h.write(b'8\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00')\r\n    h.send_feature_report([0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00])\r\n    time.sleep(0.05)\r\n\r\n    co = 1\r\n    t = 1\r\n    while co | t:\r\n        d = h.read(8)\r\n        if d:\r\n            n = decode_co(d)\r\n            if n == 1:\r\n                t = 0\r\n            elif n == 2:\r\n                co = 0\r\n\r\n    h.close()\r\n\r\nexcept IOError as ex:\r\n    print(ex)<\/code><\/pre>",
            "date_published": "2020-07-20T22:38:42+05:00",
            "date_modified": "2020-07-20T22:41:17+05:00",
            "tags": [
                "co2",
                "dadget",
                "driver",
                "linux",
                "python",
                "программирование"
            ],
            "_date_published_rfc2822": "Mon, 20 Jul 2020 22:38:42 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "116",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "85",
            "url": "https:\/\/timsa.ru\/all\/aaaablakaaaaaa\/",
            "title": "Ааааблакаааааа",
            "content_html": "<p>Надоело мне платить по 100$ за дропбокс и решил я свое облако сделать.<\/p>\n<p>На сервак ставится ownCloud (<a href=\"https:\/\/linuxhostsupport.com\/blog\/how-to-install-owncloud-10-on-debian-9\/)\">https:\/\/linuxhostsupport.com\/blog\/how-to-install-owncloud-10-on-debian-9\/)<\/a><\/p>\n<p>Ему понадобится<br \/>\napache2 mysql-server php-apcu php-apcu-bc php-common php-igbinary php-imagick php-memcached php-msgpack php-redis php-smbclient php-ssh2 php7.0 php7.0-cli php7.0-common php7.0-curl php7.0-gd php7.0-imap php7.0-intl php7.0-json php7.0-ldap php7.0-mbstring php7.0-mcrypt php7.0-mysql php7.0-opcache php7.0-pgsql php7.0-pspell php7.0-readline php7.0-recode php7.0-tidy php7.0-xml php7.0-xmlrpc php7.0-xsl php7.0-zip phpmyadmin php-redis redis-server apt-transport-https owncloud-files<\/p>\n<p>Плюс своя база mysql, работающий redis и желательно домен с ssl.<\/p>\n<p>3 дня полет нормальный.<\/p>\n",
            "date_published": "2018-08-22T15:35:25+05:00",
            "date_modified": "2018-08-22T15:35:17+05:00",
            "tags": [
                "cloud",
                "linux"
            ],
            "_date_published_rfc2822": "Wed, 22 Aug 2018 15:35:25 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "85",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        },
        {
            "id": "84",
            "url": "https:\/\/timsa.ru\/all\/bt-mysh\/",
            "title": "BT Мышь",
            "content_html": "<p>apt-get install bluetooth bluez bluez-tools rfkill<br \/>\napt-get install bluez-firmware firmware-atheros<\/p>\n<p>systemctl enable bluetooth.service<br \/>\nsystemctl start bluetooth.service<\/p>\n<p>включить пайринг на мыши (зажать все п\/л кнопки и колесико на 3 секунды)<br \/>\nhcitool scan<br \/>\nузнаем мак<\/p>\n<h2>bluetoothctl<\/h2>\n<p>[bluetooth]# list<br \/>\nController MAC_адрес_контроллера BlueZ 5.5 [default]<br \/>\n[bluetooth]# select MAC_адрес_контроллера<br \/>\n[bluetooth]# power on<br \/>\n[bluetooth]# scan on<br \/>\n[bluetooth]# agent on<br \/>\n[bluetooth]# devices<br \/>\nDevice MAC_адрес_мыши Name: Bluetooth Mouse<br \/>\n[bluetooth]# pair MAC_адрес_мыши<br \/>\n[bluetooth]# trust MAC_адрес_мыши<br \/>\n[bluetooth]# connect MAC_адрес_мыши<\/p>\n<p>\/etc\/default\/bluetooth<br \/>\nисправить HID2HCI_ENABLED=1<\/p>\n<p>\/etc\/bluetooth\/hcid.conf<br \/>\ndevice MAC_адрес_мыши {<br \/>\nname «Мегамышь»;<br \/>\n}<\/p>\n<p>\/etc\/init.d\/bluetooth restart<\/p>\n",
            "date_published": "2018-08-15T14:43:03+05:00",
            "date_modified": "2018-08-15T15:11:13+05:00",
            "tags": [
                "linux"
            ],
            "_date_published_rfc2822": "Wed, 15 Aug 2018 14:43:03 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "84",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        }
    ],
    "_e2_version": 4079,
    "_e2_ua_string": "Aegea 11.0 (v4079)"
}