Установка Pillow на Mac0S 10.14 Mojave

Хех, похоже, скоро тема «как вкорячить Pillow на новую версию MacOS» станет самой популярной в моём бложике.

Итак, что имеем:

  • MacOS 10.14 Mojave
  • Python 3.7 в virtualenv
  • Что-то там давно поставлено через Homebrew, то есть CommandLine от XCode вроде как должны быть
  • Желание развернуть локально что-то, с зависимостью от Pillow (в моём случае – opencv/cvat)

Пытаемся ставиться из зависимостей:

$ pip install -r development.txt 

Но в ответ получаем что-то невразумительное:

> The headers or library files could not be found for zlib,
a required dependency when compiling Pillow from source.
> Please see the install instructions at: https://pillow.readthedocs.io/en/latest/installation.html

В документации к Pillow по ссылке ничего вразумительного не нашлось, но нагуглилась вот такая последовательность действий, которая приводит к успеху:

$ xcode-select --install
$ sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /

Я не зря упоминал в самом начале, что Command Line Tools вроде бы ставились после установки операционки, я не уверен на 100%, но похоже, что после каких-то апдейтов системы они потерялись. Это приводило к тому, что запуск инсталлера (вторая команда выше) падала с ошибкой

> installer: Error - the package path specified was invalid: '/Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg'.

Установка Python 3.7, pip и pipenv на Ubuntu 18.10

Пришла необходимость установить самую распоследнюю версию питона на домашний сервер, там Ubuntu 18.10. На макоси давно уже всё поставлено и проблем, вроде бы не было, а тут пришлось немного повозиться.

Добавляем новый репозиторий в apt, потому что Python 3.7 есть только там. Ну и сразу ставим нужную версию питона.

sudo add-apt-repository ppa:ubuntu-toolchain-r/ppa
sudo apt install python3.7

Проверяем, что новая версия установилась, но python3 пока что смотрит на старую

ls -l /usr/bin/python3*

Если хочется, чтобы python3 запускался с 3.7 – заменяем симлинк. Ну или можно попробовать поиграть с apt --update-alternatives

cd /usr/bin
rm /usr/bin/python3
ln -s python3 python3.7

Обновляем pip, если его ещё нет – ставим командой sudo apt install python3.7-pip

python3.7 -m pip install pip

Теперь ставим pipenv

pip3 install --user pipenv

Проверяем, что всё работает

mkdir test && cd  test
pipenv shell
python --version
> Python 3.7.3

OpenVPN подключается, но не работает

Есть у меня свой маленький OpenVPN-сервер, ну для личных нужд. Всё работало прекрасно, а потом – перестало. Подключение устанавливается, а трафик не идёт. Даже DNS-сервера не пингуются, можно только общаться с сервером по его айпишнику из 10.8.0.0/8.

Ну, значит не работает маршрутизация. Проверил конфигурацию файрвола (у меня там Убунта, поэтому смотрел в /etc/ufw/before.rules – всё на месте. Пошёл смотреть активные правила – и вот тут выяснил, что ufw почему-то неактивен. Запустил его командой ufw enable.

Но всё равно что-то не работает, и тут нашёл ответ на serverfault – не был активен ip-форвардинг, почему – не понятно, есть подозрение, что что-то слетело во время апгрейда операционки. Прописал форфардинг – и всё заработало:

sysctl -w net.ipv4.ip_forward=1

Исправление конфигурации Home Assistant после обновления до v0.89

Всякие умные девайсы дома интегрированы в удобную штуку – Home Assistant, а само приложение крутится в докер-контейнере на моём домашнем Linux-сервере. Home Assistant релизится каждые две недели, я слежу за их обновлениями через RSS и обновляю всё дома простым перезапуском сервиса.

Обычно всё проходит гладко, но вот с при обновлении на v0.89 всё сломалось, о чём мне заботливо сообщил Uptime Robot. Пошёл смотреть логи, там было что-то странное:

INFO (MainThread) [homeassistant.core] Starting Home Assistant
ERROR (MainThread) [homeassistant.core] Error doing job: Task exception was never retrieved
 Traceback (most recent call last):
   File "/usr/src/app/homeassistant/core.py", line 1110, in async_call
     raise ServiceNotFound(domain, service) from None
 homeassistant.exceptions.ServiceNotFound: (ServiceNotFound(...), 'Service persistent_notification.create not found')
INFO (MainThread) [homeassistant.core] Timer:starting

Погуглил ошибку Service persistent_notification.create, но решения не нашёл, такое случалось у других людей с месяц назад, по причине изменения требований к формату некоторых конфигов, но, повторюсь, для меня это оказалось не применимо.

Пошёл разбираться, как проверить конфиг.

Зашёл внутрь запущенного контейнера

docker exec -it home-assistant bash

Там выполнил команду check_config:

python -m homeassistant --script check_config --config /config

Получил такое сообщение:

Testing configuration at /config
WARNING:homeassistant.components.http:Configuring 
trusted_networks via the http component has been deprecated. 
Use the trusted networks auth provider instead. 
For instructions, see 
https://www.home-assistant.io/docs/authentication/providers/#trusted-networks

Открыл настройки авторизации, исправил всё так, как нужно по документации – и всё починилось.

Странно конечно, что деприкейшн варнинг завалил старт для совсем другой части системы. Ну, теперь наверно буду чуть внимательнее читать Release Notes и выправлять конфиги не дожидаясь, кода там гром грянет.

UPD: Похоже, внимательно дочитал раздел Breaking Changes и обнаружил там упоминание, что вручную сконфигурированные trusted_networks всё сломают ;)

Восстанавливаем работу USB-UART CH340G после апгрейда до Mojave

Так вышло, что я немного увлёкся разного рода микроконтроллерами и для прошивки пока использую простейший USB-UART на базе микросхемы CH340G. Сегодня принёс домой RFID/NFC контроллер PN532 и наверно с час  пытался завести его через libnfc. Ноnfc-poll упорно возвращал “No NFC device found”.

Уже сложил всё обратно в коробку и собрался идти спать, как вдруг пришло в голову проверить, а не отломали ли чего при обновлении до MacOS Mojave? И точно, снова что-то там не срослось с драйверами, если верить беглому поиску по интернету.

Решение простое – отрываем консоль и там вводим

sudo rm -rf /Library/Extensions/usbserial.kext
sudo reboot

После перезагрузки nfc-poll успешно нашёл NFC-ридер и пришлось исследовать всё, что хоть как-то походило на NFC-карту ;)