05 февраля 2020

Изменения в моем репозитарии

В моем репозитарии произошло несколько изменений:
  • Собрал пакеты для Midnight Commander 4.8.24 под ARM.
  • Добавил поддержку Ubuntu Eoan.
  • Удалил из репозитария Ubuntu Cosmic и Ubuntu Disco из-за EOL.

Вы можете следить за обновлениями блога с помощью Atom/RSS и Telegram.

Как скачать лог Stackdriver

Журналирование в GCP реализовано через Stackdriver Logging. На прошлой неделе пришлось обратиться в техническую поддержку Google по поводу поломанной работы с зависимостями в AI Platform (ML Engine). Для тикета нужно было скачать логи заданий с ошибкой и без нее. Если пытаться выгружать логи через консоль GCP, то сохранит только ту часть, который видна в данный момент в интерфейсе (в моем случае это малая часть от полного лога).

Чтобы выгрузить весь лог целиком воспользуемся консольной командой gcloud logging read. В моем случае для успешной задачи ML Engine фильтр будет resource.labels.job_id="some_successful_ml_job" timestamp>="2020-01-27T14:28:43Z" а для задания с ошибкой: resource.labels.job_id="some_failed_ml_job" timestamp>="2020-01-30T13:42:58Z" (чтобы использовать этот запрос в команде нужно экранировать двойную кавычку).

gcloud logging read "resource.labels.job_id=\"some_successful_ml_job\" timestamp>=\"2020-01-27T14:28:43Z\"" --format=json --order=asc > success.json
gcloud logging read "resource.labels.job_id=\"some_failed_ml_job\" timestamp>=\"2020-01-30T13:42:58Z\"" --format=json --order=asc > failure.json

Для удобства чтения я извлекаю из JSON только сам текст сообщения (узнать больше о фильтрации в jq можно тут).

jq -r .[].jsonPayload.message < success.json > success.txt
jq -r .[].jsonPayload.message < failure.json > failure.txt

Вы можете следить за обновлениями блога с помощью Atom/RSS и Telegram.

28 января 2020

Midnight Commander 4.8.24

Лучше поздно, чем никогда - собрал пакеты для Midnight Commander 4.8.24 и выложил в свой репозитарий.

Заодно немного статистики по загрузкам:
  • за последние 12 часов пакет был скачан 86 раз
  • в лидерах по количеству загрузок Ubuntu: 36 Bionic, 16 Xenial, 6 Disco
  • 80 загрузок для amd64 и 6 загрузок для i386

Вы можете следить за обновлениями блога с помощью Atom/RSS и Telegram.

14 января 2020

Ошибка при создании Cloud Functions через Terraform

При очередном тестировании конфигурации Terraform выдал ошибку при создании Cloud Functions в GCP: googleapi: Error 403: Your application has authenticated using end user credentials from the Google Cloud SDK or Google Cloud Shell which are not supported by the cloudfunctions.googleapis.com. We recommend that most server applications use service accounts instead. For more information about service accounts and how to use them in your application, see https://cloud.google.com/docs/authentication/.

Для работы с Terraform я использую авторизацию приложения с правами пользователя (application default credentials). Это продиктовано требованиями безопасности, да и в целом это имеет смысл т.к. приложение выполняет изменения в GCP от моего имени. Если использовать сервис аккаунт, то все работает без проблем, но тогда либо нужно создавать по отдельному сервис аккаунту на каждого пользователя, либо смириться с проблемами аудита.

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.

Вы можете следить за обновлениями блога с помощью Atom/RSS и Telegram.

02 ноября 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.
После установки новой версии сертификаты обновились без проблем.

Вы можете следить за обновлениями блога с помощью Atom/RSS и Telegram.

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.

Вы можете следить за обновлениями блога с помощью Atom/RSS и Telegram.