суббота, 16 ноября 2019 г.

Релиз jtv2xmltv 0.2.1

Сегодня я выпустил новый релиз 0.2.1 для моей утилиты jtv2xmltv - конвертер электронной программы передач из формата JTV в XMLTV.

Список изменений:
  • После нескольких жалоб на путаницу с заголовком JTV я добавил поддержку альтернативного заголовка.
  • Появилась поддержка выбора кодировки для содержимого EPG (по-умолчанию выбирается CP1251). Кодировка задается опциями -e или --encoding.
  • Поправил зависимости пакета для Debian.
  • Добавил Debian copyright и страницу man - теперь Lintian не выводит ошибок или предупреждений.
Прогнал тест конвертации http://dkt.iptvportal.ru/jtv.zip и http://www.teleguide.info/download/new3/jtv.zip в XMLTV на версиях Python 2.7, 3.5, 3.6, 3.7 и 3.8.

суббота, 2 ноября 2019 г.

Собрал acme.sh для Debian

Какое-то время назад крон, который обновляет сертификаты Let's Encrypt, стал выдавать ошибку вида:

Renew: 'www.tataranovich.com'
Multi domain='DNS:tataranovich.com'
Getting domain auth token for each domain
Getting webroot for domain='www.tataranovich.com'
Getting new-authz for domain='www.tataranovich.com'
The new-authz request is ok.
new-authz error: {"type":"urn:acme:error:badNonce","detail":"JWS has no anti-replay nonce","status": 400}
Please check log file for more details: le-issue.log
Error renew www.tataranovich.com.

Сегодня занялся этой проблемой вплотную. Поиск вывел на описание ошибки urn:acme:error:badNonce (JWS has no anti-replay nonce). Для работы с сертификатами LE я использую acme.sh. И чтобы решить проблему достаточно обновить версию.

Собрал Debian пакет для acme.sh 2.8.3 и залил его в мой репозитарий для Debian Stretch и Debian Buster.

Описание релиза 2.8.3 на GitHub:
Letsencrypt CA recent changed the CDN provider, which resulted in hanging issues. Any downstream package should update. This is important.
После установки новой версии сертификаты обновились без проблем.

UDisks2: перестали монтироваться шифрованные LUKS носители в Debian Buster

Нужно было подписать новый SSL сертификат, но при попытке открыть флешку с шифрованным разделом на котором хранится конфигурация TinyCA2 получил ошибку

$ gvfs-mount -d /dev/sdb2
...
gio: /dev/sdb2: Error unlocking /dev/sdb2: The function 'bd_crypto_luks_open_blob' called, but not implemented!

Немного поиска и я нашел описание проблемы.

$ sudo aptitude install libblockdev-crypto2+M
$ sudo systemctl restart udisks2

После этого флешка нормально смонтировалась. Проблема проявилась из-за отключенной установки рекомендованных зависимостей APT::Install-Recommends=false.

Неслабо лихорадит GCP

Больше суток длится инцидент, связанный с Compute Engine в облаке Google. Из-за него деградировали многие сервисы.


Судя по описанию "застряли" операции по созданию/удалению сетей и подсетей. Если инфраструктура статичная, то по-идее зацепить не должно.

Текущий статус можно увидеть на странице Google Cloud Status Dashboard.

понедельник, 14 октября 2019 г.

Установка Xfce 4.14 в Debian Buster


Xfce 4.14 не успел войти в релиз Debian Buster и доступен только через testing. Список изменений Xfce 4.14 внушительный.


Меня заинтересовали вот эти:
  • Feature: Add a switch user button to the logout dialog (Bug #10345)
  • Feature: Hybrid Sleep support - "hibernate" and suspend the system
  • Feature: Color Profiles (colord frontend)
  • Feature: Display Profiles, allowing for saving/restoring display configurations
  • Feature: Make inhibition affect dimming and inactivity action (Bug #14687

четверг, 3 октября 2019 г.

Еще три сертификата по Google Cloud Platform

В сентябре ездил в Киев чтобы пройти дополнительную сертификацию по Google Cloud Platform.

Годом ранее я получил сертификат Professional Cloud Architect, а в этом году я сдавал сразу три экзамена:
Самым сложным для меня оказался Network. Security был средней сложности - достаточно разобраться в Cloud Identity и Cloud KMS.

Cloud Engineer многие считают слишком простым и я планировал сдать его "на сдачу" от Cloud Architect, но этот экзамен оказался очень и очень практическим. Если не нет опыта работы с утилитами gcloud, gsutil, kubectl и GCP Console, то сдать будет непросто.

Подготовка к экзаменам заняла примерно полтора месяца по вечерам. В итоге сдал все экзамены с первой попытки.


В этом году Google запустил публичный каталог сертификатов по GCP. Можно посмотреть у кого какие есть сертификаты.

Падает TVHeadend при импорте программы передач

Вчера ночью упал TVHeadend. Поначалу я не придал этому значения, но после попытки перезапуска ему лучше не стало.

Oct  2 04:00:01 server systemd[1]: Stopping tvheadend.service...
Oct  2 04:00:02 server tvheadend[2227]: epgdb: saved
Oct  2 04:00:02 server tvheadend[2227]: epgdb:   brands     0
Oct  2 04:00:02 server tvheadend[2227]: epgdb:   seasons    0
Oct  2 04:00:02 server tvheadend[2227]: epgdb:   episodes   21303
Oct  2 04:00:02 server tvheadend[2227]: epgdb:   broadcasts 21303
Oct  2 04:00:02 server tvheadend[2227]: STOP: Exiting HTS Tvheadend
Oct  2 04:00:02 server tvheadend[27507]: Stopping Tvheadend: tvheadend.
Oct  2 04:00:02 server systemd[1]: Stopped tvheadend.service.
Oct  2 04:00:03 server systemd[1]: Starting tvheadend.service...
Oct  2 04:00:03 server tvheadend[27599]: Starting Tvheadend: tvheadend.
Oct  2 04:00:03 server systemd[1]: Started tvheadend.service.
Oct  2 04:00:03 server tvheadend[27605]: CRASH: Signal: 6 in PRG: /usr/bin/tvheadend (3.4.28~geb79aee~wheezy) [48254f97c14283a370187739d8ce68a10b6d9d9c] CWD: /
Oct  2 04:00:03 server tvheadend[27605]: CRASH: Fault address 0x7200006bd5 (N/A)
Oct  2 04:00:03 server tvheadend[27605]: CRASH: Loaded libraries: linux-vdso.so.1 /usr/lib/x86_64-linux-gnu/libssl.so.1.0.0 /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0 /lib/x86_64-linux-gnu/libz.so.1 /usr/lib/x86_64-linux-gnu/libavahi-common.so.3 /usr/lib/x86_64-linux-gnu/libavahi-client.so.3 /usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.4 /lib/x86_64-linux-gnu/librt.so.1 /lib/x86_64-linux-gnu/libdl.so.2 /lib/x86_64-linux-gnu/libpthread.so.0 /lib/x86_64-linux-gnu/libm.so.6 /lib/x86_64-linux-gnu/libc.so.6 /lib/x86_64-linux-gnu/libdbus-1.so.3 /usr/lib/x86_64-linux-gnu/libnghttp2.so.14 /usr/lib/x86_64-linux-gnu/libidn2.so.0 /usr/lib/x86_64-linux-gnu/librtmp.so.1 /usr/lib/x86_64-linux-gnu/libssh2.so.1 /usr/lib/x86_64-linux-gnu/libpsl.so.5 /usr/lib/x86_64-linux-gnu/libnettle.so.6 /usr/lib/x86_64-linux-gnu/libgnutls.so.30 /usr/lib/x86_64-linux-gnu/libgssapi_krb5.so.2 /usr/lib/x86_64-linux-gnu/libkrb5.so.3 /usr/lib/x86_64-linux-gnu/libk5crypto.so.3 /lib/x86_64-linux-gnu/libcom_err.so.2 /usr/lib/x86_64-linux-gnu/liblber-2.4.so.2 /usr/lib/x86_64-linux-gnu/libldap_r-2.4.so.2 /lib64/l
Oct  2 04:00:03 server tvheadend[27605]: CRASH: Register dump [23]: 0000000000000000 00007ffc037b6cc0 0000000000000008 0000000000000246 0000000000000096 0000000000471af0 00000000025e39a0 0000000000000092 0000000000000002 00007ffc037b6cc0 0000000000471997 0000000000000006 0000000000000000 0000000000000000 00007f7435beafff 00007ffc037b6d38 00007f7435beafff 0000000000000246 002b000000000033 0000000000000000 0000000000000000 fffffffe7ffbfa17 0000000000000000
Oct  2 04:00:03 server tvheadend[27605]: CRASH: STACKTRACE
Oct  2 04:00:03 server tvheadend[27605]: CRASH: ??:0 0x42a4f6
Oct  2 04:00:03 server tvheadend[27605]: CRASH: ??:0 0x7f743626c0e0
Oct  2 04:00:03 server tvheadend[27605]: CRASH: gsignal+0xcf  (/lib/x86_64-linux-gnu/libc.so.6)
Oct  2 04:00:03 server tvheadend[27605]: CRASH: abort+0x16a  (/lib/x86_64-linux-gnu/libc.so.6)
Oct  2 04:00:03 server tvheadend[27605]: CRASH: ??:0 0x7f7435be3e67
Oct  2 04:00:03 server tvheadend[27605]: CRASH: ??:0 0x7f7435be3f12
Oct  2 04:00:03 server tvheadend[27605]: CRASH: ??:0 0x414bc9
Oct  2 04:00:03 server tvheadend[27605]: CRASH: ??:0 0x41764f
Oct  2 04:00:03 server tvheadend[27605]: CRASH: ??:0 0x405d05
Oct  2 04:00:03 server tvheadend[27605]: CRASH: __libc_start_main+0xf1  (/lib/x86_64-linux-gnu/libc.so.6)
Oct  2 04:00:03 server tvheadend[27605]: CRASH: ??:0 0x406139

Вчера я обновлял систему и поэтому первым делом грешил на обновление. Откатил все пакеты на предыдущие версии, но никакого эффекта это не принесло. Потом попробовал удалить всю конфигурацию без которой он может запускаться:

$ rm -fr ~/.hts/tvheadend/channels/ ~/.hts/tvheadend/iptvservices/
$ rm -fr ~/.hts/tvheadend/epggrab/xmltv/channels/ ~/.hts/tvheadend/epgdb.v2 ~/.hts/tvheadend/imagecache/meta/

Это помогло и процесс запустился. Были мысли на кривой XMLTV, закоментировал заливку программы передач в tvheadend и перезапустил процесс импорта. В ответ процесс упал с такой же ошибкой - значит дело не в XMLTV.

воскресенье, 25 августа 2019 г.

Свежие пакеты Midnight Commander для ARM архитектур

Я уже как-то пробовал собирать пакеты Midnight Commander для ARM архитектур (armel, armhf, arm64). Для сборки armel и armhf можно было использовать первый raspberry pi, но для arm64 железок не было и приходилось использовать qemu. Позже я обзавелся raspberry pi 3, но дистрибутива с поддержкой arm64 еще не было.

Чтобы не возиться с разными подходами я унифицировал сборку armel, armhf и arm64 через qemu (qemu-user-static). В целом это работало, но иногда сборка останавливалась на этапе распаковки пакетов зависимостей или configure. Приходилось прибивать процессы и перезапускать сборку. В общем я собрал одну или две версии и забросил это дело.

понедельник, 19 августа 2019 г.

Обновление LineageOS 16.0 на Xiaomi Mi 4c

Неделю назад я писал про установку LineageOS 16.0 на Xiaomi Mi 4c, и примерно в то же время вышла свежая сборка LineageOS 16.0 от WJXXBSH (lineage-16.0-20190811-UNOFFICIAL-libra.zip). Сегодня я попробую обновиться на нее не потеряв при этом все приложения и настройки.

воскресенье, 11 августа 2019 г.

Установка LineageOS 16.0 на Xiaomi Mi 4c

Второй день отпуска - душа требует приключений. Давно хотел попробовать установить Android Pie на Xiaomi Mi4c. В качестве подопытного выбрал сборку LineageOS 16.0 от WJXXBSH. Был еще вариант взять Mokee, но уже привык к LineageOS и хочется сравнить с LineageOS 15.1, который установлен сейчас.

Описание предыдущих обновлений: CyanogenMod 13.1, LineageOS 14.1 и LineageOS 15.1.

Скачал последнюю доступную сборку lineage-16.0-20190712-UNOFFICIAL-EAS-libra.zip а для gapps взял MindTheGapps-9.0.0-arm64-20190615_031441.zip и open_gapps-arm64-9.0-nano-20190810.zip под Android Pie (arm64). Два варианта gapps взяты на пробу - я собирался установить OpenGAPPS, но в качестве запасного варианта взял MindTheGAPPS.

вторник, 16 июля 2019 г.

Проблемы с обновлением ключа репозитория

В этом году я повторил свой промах с GPG ключем репозитория и снова пропустил срок обновления ключа (аналогично в 2015 и 2017 годах). Но в этом году ситуация немного отличается от прошлого раза и поправить ее стало сложнее.

Продление ключа и отправка его на pool.sks-keyservers.net ничего не дала и мне продолжают приходить письма, что мой репозиторий сломан. В баг трекере Midnight Commander даже завели баг на эту тему.

среда, 3 июля 2019 г.

Обновление Xiaomi Mi 4c до LineageOS 15.1

Моему Xiaomi Mi 4c уже идет четвертый год с момента покупки. За это время он успел сменить несколько прошивок (MIUI, CyanogenMod 12.1, CyanogenMod 13.1, LineageOS 14.1) и получить новую батарею. Хотя правильнее сказать полторы новых батареи. Первая батарея, которую я впопыхах купил на радиорынке, вздулась через неделю использования. А вот вторая, которую я уже покупал в сервис-центре Xiaomi в Минске, служит второй год.

За все это время я делал несколько попыток найти ему более свежую замену, но каждый раз останавливает размер экранов свежих смартфонов, который неуклонно движется в сторону 7" (с такой диагональю когда-то выходили планшеты). Да и моделей с поддержкой быстрой зарядки и размером экрана в 5" на рынке немного.

среда, 29 мая 2019 г.

Колесный робот - часть 1

О соревнованиях RoboRace я впервые узнал из доклада на MLUG (Minsk Linux User Group). Было интересно послушать о проблемах, которые нужно решить чтобы робот не только смог проехать по трассе, но и сделать это быстро. С тех пор прошло несколько лет, но относительно недавно на глаза попалось видео с их YouTube канала и остаток вечера ушел на просмотр записей соревнований вместе с детьми.

В начале этой весны мы сходили семьей на "Бал роботов" и детям очень понравились роботы, которыми можно было управлять или программировать на выполнение простых действий. Наверное так и родилась идея попробовать собрать простого робота, который сможет проехать по линии или хотя бы избегать препятствий, а заодно провести больше времени с детьми.

Для начала заказал на AliExpress полноприводное колесное шасси и шилд для управления моторами. В качестве контроллера предполагалось использовать плату Freeduino 2009, которую я покупал еще 10 лет назад и она до сих пор работает без нареканий.

среда, 1 мая 2019 г.

Обновил конвертер JTV в XMLTV

Несколько лет назад интернет-провайдер, который первым в нашем доме предложил интернет через Ethernet, предоставлял программу передач для IPTV только в формате JTV.
Формат JTV появился в одноименной программе польского разработчика Ярослава Ковальского для ТВ-тюнеров на базе чипов bt8x8. Это двоичный формат, база телепрограмм JTV обычно является архивом ZIP или RAR, содержащим пары файлов (с расширением NDX и PDT) для каждого телеканала.
Программа передач в формате XMLTV тогда провайдером не предоставлялась и собирать EPG из разных источников было проблемой. Я поискал в интернете и не найдя готового конвертера из JTV в XMLTV написал свой.

четверг, 25 апреля 2019 г.

Особенности Power Disable в спецификации SATA 3.3

Листая ленту наткнулся на интересное описание различного поведения диска HGST Ultrastar DC HC510 на 10TB при подключении питания через разъем SATA или через MOLEX-SATA переходник. При подключении через переходник диск работал всегда, но при подключении через родной разъем питания SATA поведение зависело от того к чему подключали этот диск.

В комментариях прояснили что это гадит Power Disable (PWDIS), появившийся в стандарте SATA 3.3. Эта фича позволяет удаленно делать hard-reset по питанию для диска - в целом позитивная идея, но реализация имеет свои особенности.

суббота, 20 апреля 2019 г.

Совместный доступ к файлам для Windows и Linux в VirtualBox

Для обеспечения совместной работы с файлами для хост-системы на базе Windows и Linux, установленного в виртуальную машину VirtualBox, предлагается использовать shared folders. Чтобы обеспечить доступ к содержимому файлов этот способ подойдет, но если пытаться использовать shared folders как замену файловым системам Linux, то вас ждет набор проблем:
  • нужно отдельно настраивать VirtualBox для работы с symlinks
  • крайне ограниченная поддержка linux owner/group/permissions
  • сложности с удалением и переименованием отрытых файлов унаследованные от хост-системы
  • ограничения на имена файлов и директорий унаследованные от хост-системы
  • низкая скорость работы
Я пользовался shared folders почти два года и периодически пытался уйти на WSL, но последнее заслуживает отдельного повествования. Когда началась работа с проектом, где регрессионный тест занимал 15 минут, вместо положенных двух (если запускать его в виртуальной машине, но вне shared folders) я приступил к поиску альтернатив.

понедельник, 18 марта 2019 г.

Terraform не дает использовать символ подчеркивания в имени google cloud function

Зарепортил баг в Terraform провайдере google. Если использовать символ подчеркивания в имени cloud function, то не проходит валидация конфигурации

provider "google" {
  version = "~> 2.2"
  project = "${var.gcp_project}"
  region  = "${var.gcp_region}"
}

variable "gcp_project" {}

variable "gcp_region" {}

resource "google_cloudfunctions_function" "test_function" {
  name = "test_function"
}

суббота, 2 марта 2019 г.

Установка Calibre 3.39.1 в Debian Stretch

Calibre это программа для управления библиотекой электронных книг. Для Debian Stretch доступна версия 3.31.0 через репозитарий stretch-backports. Если хочется установить свежую версию, то придется либо воспользоваться инструкцией с сайта, либо пересобирать пакет из testing.

Первый вариант в стиле "curl | bash" и мне такое даже под обычным пользователем не хочется запускать без предварительного анализа установщика, ну а второй вариант я уже проделал и выложил готовые бинарные пакеты в свой репозитарий.

воскресенье, 17 февраля 2019 г.

Прошивка Samsung Galaxy Note Pro 12.2 (SM-P900) на LineageOS 14.1

В хозяйстве есть планшет Samsung Galaxy Note Pro 12.2 (SM-P900), который используется домашними для браузинга, youtube, чтения pdf, ну и детьми для игр. По современным меркам начинка не самая производительная, но экран выше всяких похвал. Штатная прошивка от Samsung использует Android 5.0.2 и в принципе ее хватает для всех нужных приложений.

Позже подсмотрели у друзей идею использования Google Family Link для ограничения времени в играх для детей. Но на родной прошивке работать приложение отказалось. Для планшета доступна сборка LineageOS 14.1 и вот ее я решил установить.

понедельник, 4 февраля 2019 г.

WordPress и SSL в ISPmanager

Пару лет назад я взялся поддерживать сайт товарищества собственников дома. Сайт работает на WordPress и хостится на одном из хостингов в РБ. Сделано это чтобы у бухгалтера не было возни с зарубежными хостингами и кроме того непонятно насколько президентский указ №60 относится к товариществу собственников.

На момент создания сайта товарищества Let's Encrypt еще не успел набрать популярность, а платить за воздух покупать платный SSL сертификат не было никакого желания. Теперь хостинг предлагает бесплатные SSL сертификаты от Let's Encrypt, но эта опция доступна только для новых тарифных планов. Помимо бесплатного SSL обещают поддержку PHP 7.2.x (в текущем тарифном плане доступен максимум PHP 7.0.x). Заодно пришло уведомление о скором истечении оплаченного периода и я решил потратить немного времени и попробовать перенести сайт на новый тариф и заодно включить поддержку SSL.

вторник, 29 января 2019 г.

Заменить табуляцию на пробелы в Vim

Открыл для себя команду retab в vim для замены символов табуляции на нужное количество пробелов. Чтобы визуализировать символы табуляции можно воспользоваться командой list.

Раньше я использовал операцию замены

:set list
:%s@\t@    @g
:set nolist

но команда retab кажется более универсальным инструментом

:set list
:set ts=4 expandtab
:retab
:set nolist

воскресенье, 20 января 2019 г.

Последствия локализации производства

Сейчас это может прозвучать странно, но по нескольким причинам в детской комнате во всех светильниках установлены лампы накаливания:
  • нет проблем с восприятием цветов поскольку спектр лампы равномерный
  • нет мерцания в силу инертности нагретой спирали
  • правильно работают с выключателями, оборудованными светлячками
Меня не особо волнует сколько электричества они потребляют, но когда Osram, Philips и прочие начали производстов своих ламп в Беларуси их надежность стремится к нулю. Приходится менять лампочки каждые несколько недель, а иногда и дней. Хотя заявленные 1000 часов это почти полтора месяца непрерывной работы.

вторник, 15 января 2019 г.

Ремонт мойки воздуха Boneco Air-o-Swiss W1355A

Уже несколько лет в комнате детей трудится мойка воздуха Boneco Air-o-Swiss W1355A. В отопительный сезон относительная влажность в помещении падает ниже 30% при норме в 40-60%. Работа мойки воздуха позволяет удерживать относительную влажность в детской на уровне 40-45%. И вот на прошлой неделе этот агрегат перестал работать.

среда, 2 января 2019 г.

perl: Text file busy, skipping file

В процессе прикручивания pre-commit хуков к репозитарию terraform модуля столкнулся с очередным приколом shared folders в Virtualbox (vboxsf). Долго не мог понять почему хук terraform_docs отрабатывает без ошибок, но в README.md нет никаких изменений. Покопался в terraform_docs.sh и нашел место где выполняется подстановка вывода terraform-docs в разрыв маркеров в README.md.

После подстановки значения "$text_file" получается такая команда

perl -i -ne 'if (/BEGINNING OF PRE-COMMIT-TERRAFORM DOCS HOOK/../END OF PRE-COMMIT-TERRAFORM DOCS HOOK/) { print $_ if /BEGINNING OF PRE-COMMIT-TERRAFORM DOCS HOOK/; print "I_WANT_TO_BE_REPLACED\n$_" if /END OF PRE-COMMIT-TERRAFORM DOCS HOOK/;} else { print $_ }' README.md