Google всё сломал (опять)

Google Диск становится всё хуже и хуже. К несчастью, сколько-нибудь годных альтернатив Google Документам не существует, поэтому приходится им пользоваться. И приходится его бэкапить.

Последние года два у меня из cron (а позже — из таймера systemd) запускается rclone и синхронизирует содержимое Google Диска в локальную директорию, откуда оно попадает в бэкап обычным для моей системы путём. Загрузка документов настроена в виде файлов OpenDocument (текстовые документы становятся .odt, таблицы — .ods, и т. д.), и всё это отлично работает. Ну, работало, до недавнего времени.

Внезапно rclone стала выдавать ошибки при скачивании документов. Заметил, в общем-то, случайно: для отладки другой программы был открыт системный лог бэкапного сервера, и как раз совпало, что rclone запустилась в это время. При внимательном рассмотрении оказалось, что все документы, созданные или изменённые после 13 июня 2021 года отказываются скачиваться:

Ошибка
Failed to copy: failed to open source object: open file failed: googleapi: Error 403: Only files with binary content can be downloaded. Use Export with Docs Editors files., fileNotDownloadable

Тыкание в Google Drive API быстро показало, что любой файл в формате OpenDocument скачать таки можно, если соответствующие разрешения есть. Оказалось, что, настраивая всё пару лет назад, я дал rclone разрешения drive.readonly вместо drive. Этого вполне хватало — в конце концов, у меня синхронизация только в одну сторону. Но вот теперь внезапно этих разрешений недостаточно, надо давать полностью drive, чтобы всё работало.

Конечно, как только я всё это выяснил, сменить разрешения было делом полуминуты. Вопрос: а смог ли бы я сообразить, в чём дело, если б у меня не было какого-никакого опыта использования Docs API? Очень я сильно сомневаюсь, особенно с учётом того, насколько по делу выглядит сообщение об ошибке.

Google, ну какого хрена, а?!


И да: надо-таки завести привычку включать в юнитах systemd отсылку писем при ошибках. Тем более, это просто совсем, у меня даже юнит под это есть уже:

[Unit]
Description=OnFailure email for %i

[Service]
Type=oneshot
ExecStart=/home/evgeny/scripts/failure-email.sh %i

Скрипт failure-email.sh тоже в одну строку:

#!/bin/bash

mail -s "$1 failed" root <<< $(systemctl --user status -l -n 1000 "$1")

Надо только не забывать добавлять одну строчку в юниты:

OnFailure=failure-email@%n.service