Накрылся вентилятор в HTPC на базе Gigabyte Brix и пока из Китая не пришел новый вентилятор приходится обходиться заменой на базе Raspberry PI 4. Проблема четвертого Raspberry в заметном нагреве по сравнению с тем же Raspberry PI 3 и чтобы он не перегревался я брал корпус с активным охлаждением. Мелкий кулер заметно шумит, а если отключить его, то Raspberry быстро нагревается до 60 градусов и выше.
Заметки о Linux, системном администрировании, программировании, электронике и не только
среда, 25 ноября 2020 г.
воскресенье, 25 октября 2020 г.
Миграция etckeeper с mercurial на git
В начале 2012 года я начал использовать etckeeper для отслеживания изменения в /etc. Тогда я использовал Mercurial в качестве системы контроля версий и было очевидным использовать его в качестве бэкенда хранения для etckeeper.
Двумя годами позже я сменил место работы и целиком переключился на Git. Все новые инсталляции уже использовали Git для etckeeper, но домашний сервер и ноутбук все еще оставались на Mercurial. Где-то в районе выхода Debian Jessie ноутбук перешел на Git при миграции с i386 на amd64. А сервер оставался на Mercurial до сегодняшнего дня, но несколько попыток починить такую ошибку привели к миграции:
/etc/cron.daily/etckeeper: abort: path contains illegal component: .hg/undo.dirstate abort: path contains illegal component: .hg/undo.backup.dirstate abort: path contains illegal component: .hg/undo.dirstate abort: path contains illegal component: .hg/undo.backup.dirstate
Когда-то я уже описывал процесс миграции с Mercurial на Git с использованием расширения hg-git, но в этот раз решил попробовать сделать по инструкции с git-scm.com
суббота, 24 октября 2020 г.
Midnight Commander 4.8.25 для Ubuntu Groovy
Добавил в свой репозитарий поддержку Ubuntu Groovy (20.10) и собрал пакеты Midnight Commander 4.8.25 для архитектур amd64, armhf и arm64.
Сейчас версия совпадает с той, которую предоставляет Ubuntu, но ситуация скорее всего изменится с выходом Midnight Commander 4.8.26.
воскресенье, 18 октября 2020 г.
Ускорение сборки в pbuilder на Raspberry PI 4
Дошли руки починить сборку Midnight Commander для ARM. Раньше я использовал qemu-user-static и qemu-system-arm для сборки пакетов для архитектур armel, armhf и arm64, но это было медленно и часто заканчивалось ошибками или зависанием сборки. Начиная с Raspberry PI 3 появилась поддержка ARM64 и теперь можно собирать пакеты не прибегая к помощи эмулятора.
После снижения цен на Raspberry PI 4 с 2GB до 35$ я заказал себе такую на Seeedstudio и вдобавок корпус с активным охлаждением. Но если гонять pbuilder на SD карте это будет медленно и карта довольно быстро придет в негодность. Чтобы этого избежать я выношу весь /var/cache/pbuilder на NFS, который раздает домашний сервер. Такой подход хорошо работает с базовыми образами, кешем APT и результатами сборки, но слишком медленный для /var/cache/pbuilder/build/. В этой директории pbuilder хранит распакованные chroot'ы и эти файлы не важны. Чтобы ускорить сборку можно смонтировать tmpfs и сборка будет упираться в процессор, а не в I/O.
воскресенье, 11 октября 2020 г.
Обновление прошивок на ноутбуках
Сегодня погода на улице не заладилась - для октября непривычно тепло, но идет дождь, сыро и грустно без солнца. Отличный день чтобы заняться рутинными делами и обновить прошивки на ноутбуках. На сайте dell.com нашлись обновления для всех машинок в семье - даже для старичка Inspiron N5050 этим летом выпустили обновление.
На более новых Latitude e7*70 обновить прошивку можно с флешки, но для Inspiron N5050 нужно готовить загрузочный образ с DOS. Для этого я использую образ с FreeDOS в который дописываю файлы прошивок. Я прошивал себе последнюю версию A05, но на всякий случай в образ закинул все версии от A01 до A05.
Как всегда никаких гарантий не предоставляется - используете на свой страх и риск :)
четверг, 8 октября 2020 г.
Неудачный аккумулятор для Dell Inspiron N5050
Достался мне Dell Inspiron N5050 с родным, но полностью мертвым аккумулятором. На AliExpress был заказан новый с большей емкостью (6800mAh против 4400mAh у родного). Через полтора месяца ожидания курьер СДЭК доставил посылку.
Новая батарея отлично подошла по размерам, но уже на следующий день ребенок пожаловался что ноутбук просто выключился и не включался пока не был подключен к зарядному. Очень похоже на полный разряд батареи, но ведь на 20% должно было быть предупреждение о низком заряде, а на 10% ноутбук должен засыпать на диск. Но ничего такого не произошло...
На следующий день ситуация повторилась и я начал разбираться. Ноутбук с включенным экраном потребляет ток около 950mA. Следовательно полностью заряженного аккумулятора емкостью 6800mAh должно хватить на примерно 7 часов работы. Но уже через 3 часа работы ноутбук отключается и это явно указывает на проблемы с новой батареей.
Поставил battery-stats и он показал довольно забавную картину - с полностью заряженной ноутбук отключится примерно через 3 часа на 55-56% зарядки. Пока не подключишь к зарядному ноутбук не реагирует на кнопку включения - значит сработала защита батареи от глубокого разряда. Если включить зарядку, то после загрузки уровень заряда равен 0% и график заряда идет плавно до 44%, а затем внезапно становится 100%.
Если снова разрядить батарею до нуля и затем зарядить только до 40%, то поведение в корне меняется. На 20% появляется предупреждение о низком заряде батареи, а на 10% загорается красный индикатор заряда и ноутбук уходит в спящий режим.
Подобное поведение косвенно указывает на реальную емкость батареи в районе 3000mAh, а проблемы с внезапным отключением связаны контроллером зарядки, который считает емкость как 6800mAh. С учетом того что внутри 6 ячеек по схеме 3S2P (по две банки в параллель и три сборки последовательно), то выходит что емкость одной ячейки около 1500mAh вместо обещанных 3400mAh.
Руки чешутся разобрать батарею, чтобы проверить эту теорию, но пока просто написал продавцу - посмотрю что он мне ответит. Вариант с бракованной батареей пока не исключаю.
воскресенье, 6 сентября 2020 г.
Посыпался диск в RAID
Какая-то черная полоса с техникой - сначала накрылась посудомойка, потом регистратор, а сегодня сервер домашней сети решил что весь мир подождет.
Nagios прояснил картину двумя алертами
Заглядываю в dmesg сервера, а там непрерывный поток ошибок, связанный с одним из дисков.
суббота, 5 сентября 2020 г.
Замена аккумулятора в планшете Samsung Galaxy Note Pro 12.2 (SM-P900)
Родная батарея планшета начала сдаваться после 6 лет службы. Сначала планшет отключался при 30-40% заряда если запущена игра. Затем стал выключаться на загрузке страниц сайтов где много сложной верстки или есть динамические элементы. В общем единственное на что он остался годен - это чтение PDF в формате A4 (большая диагональ в 12.2" и разрешение 2560x1600 к этому располагает).
В принципе если не брать игрушки, то производительности планшета вполне хватает на повседневные нужды. Нужно лишь поменять родную батарею. Поискал в интернете модель - в эти планшеты ставили аккумуляторы серии T9500 с заявленной емкостью на 9500mAh и номинальным напряжением 3.8V. Номинальное напряжение в 3.8V означает что такой аккумулятор можно заряжать до 4.35V, что отличается от привычных 4.2V для аккумуляторов с номинальным напряжением в 3.6V и 3.7V.
воскресенье, 23 августа 2020 г.
Черный экран при выходе из hibernate
Иногда после выхода из спящего режима нет изображения на экране ноутбука. Чаще это случается если ноутбук ушел в спящий режим подключенным к док-станции (в этом случае изображение выводится на два внешних монитора, а экран ноутбука отключен), а выходит из спящего режима будучи отключенным от док-станции. В такой момент можно подключиться по SSH и сделать перезагрузку или попытаться переключиться в консоль и затем обратно в иксы. Иногда последнее помогает, но не всегда. Не помню конда это началось, но из-за нехватки времени и спонтанности ошибки решение откладывалось до лучших времен. Сегодня воспроизвелось еще раз и пора с этим разобраться.
Отключение Bluetooth и WWAN при загрузке системы
На ноутбуке есть три беспроводных устройства (wifi, bluetooth и wwan) из которых постоянно используется только wifi. Чтобы не засорять эфир остальные устройства отключались вручную после загрузки. Хотя ноутбук перезагружается редко, но делать одно и тоже руками надоедает. Скрипт, который автоматически отключает bluetooth и wwan выглядит так (/usr/local/sbin/rfkill-boot-settings.sh)
#!/bin/sh RFKILL_TYPE="bluetooth wwan" RFKILL_BIN=/usr/sbin/rfkill if [ ! -x "${RFKILL_BIN}" ]; then echo "Error: rfkill is not installed" >&2 exit 1 fi # shellcheck disable=SC2086 for RFKILL_ID in $(${RFKILL_BIN} list -n -o ID ${RFKILL_TYPE}) do # Some devices are nested and dissapear when parent device is blocked if ${RFKILL_BIN} list -n -o ID | grep -Eq '^\s+'${RFKILL_ID}'$'; then echo "Disabling ${RFKILL_ID}" ${RFKILL_BIN} block ${RFKILL_ID} else echo "Skipping ${RFKILL_ID}" fi done
Автоматически запускать можно из /etc/rc.local или через systemd (/etc/systemd/system/rfkill-boot-settings.service)
пятница, 1 мая 2020 г.
Xfce4 не блокирует экран при закрывании крышки ноутбука
Полез смотреть логи, для этого запустил в терминале journalctl -f и закрыл крышку. После просыпания увидел следующие записи:
May 01 20:03:42 dragoncore systemd-logind[711]: Lid closed. May 01 20:03:42 dragoncore systemd-logind[711]: Suspending... May 01 20:03:42 dragoncore NetworkManager[710]:[1588352622.0356] manager: sleep: sleep requested (sleeping: no enabled: yes) May 01 20:03:42 dragoncore NetworkManager[710]: [1588352622.0356] manager: NetworkManager state is now ASLEEP May 01 20:03:42 dragoncore systemd[1]: Reached target Sleep. May 01 20:03:42 dragoncore systemd[1]: Starting Suspend... May 01 20:03:42 dragoncore systemd-sleep[2418]: Suspending system... May 01 20:03:42 dragoncore kernel: PM: suspend entry (deep) May 01 20:03:42 dragoncore kernel: PM: Syncing filesystems ... done.
Значит событие закрывания крышки ноутбука обработал logind, а не xfce4-power-manager.
вторник, 31 марта 2020 г.
Собрал пакет для acme.sh версии 2.8.5
Из заметных изменений:
- Добавил страницу man для acme.sh
- Исправил предупреждения lintian
- Поменял структуру для deploy/dnsapi/notify хуков - есть подозрение что в предыдущих релизах они не работали, но протестировать их мне не довелось
воскресенье, 29 марта 2020 г.
Конфигурация сенсоров в arduino-air-sensors
Прошивку тестировал на платах ESP01 и ESP12S - получились такие конфигурации:
- ESP01 + SI7021 (SI7021 подключен к GPIO0/GPIO2)
- ESP01 + BME280 (BME280 подключен к GPIO0/GPIO2)
- ESP12F + DHT22 + MH-Z19 + SSD1306 (SSD1306 подключен к GPIO4/GPIO5, DHT22 к GPIO14, a MH-Z19 к GPIO15/GPIO13).
Еще заказал на пробу AHT10 - это датчик температуры и влажности для шины I2C.
среда, 18 марта 2020 г.
Обновление OpenWrt на TP-Link Archer C6
Для себя я выбрал вариант с обновлением через командную строку
# export OPENWRT_RELEASE=19.07.2 # cd /tmp # wget http://downloads.openwrt.org/releases/${OPENWRT_RELEASE}/targets/ath79/generic/openwrt-${OPENWRT_RELEASE}-ath79-generic-tplink_archer-c6-v2-squashfs-sysupgrade.bin Downloading 'http://downloads.openwrt.org/releases/19.07.2/targets/ath79/generic/openwrt-19.07.2-ath79-generic-tplink_archer-c6-v2-squashfs-sysupgrade.bin' Connecting to 176.9.48.73:80 Writing to 'openwrt-19.07.2-ath79-generic-tplink_archer-c6-v2-squashfs-sysupgrade.bin' openwrt-19.07.2-ath7 100% |*******************************| 4544k 0:00:00 ETA Download completed (4653342 bytes) # wget http://downloads.openwrt.org/releases/${OPENWRT_RELEASE}/targets/ath79/generic/sha256sums Downloading 'http://downloads.openwrt.org/releases/19.07.2/targets/ath79/generic/sha256sums' Connecting to 176.9.48.73:80 Writing to 'sha256sums' sha256sums 100% |*******************************| 140k 0:00:00 ETA Download completed (143764 bytes) # sha256sum -c sha256sums 2>/dev/null | grep OK openwrt-19.07.2-ath79-generic-tplink_archer-c6-v2-squashfs-sysupgrade.bin: OK # sysupgrade -v /tmp/openwrt-${OPENWRT_RELEASE}-ath79-generic-tplink_archer-c6-v2-squashfs-sysupgrade.bin Saving config files... etc/config/dhcp etc/config/dropbear etc/config/firewall etc/config/luci etc/config/network etc/config/rpcd etc/config/system etc/config/ubootenv etc/config/ucitrack etc/config/uhttpd etc/config/wireless etc/dropbear/dropbear_rsa_host_key etc/group etc/hosts etc/inittab etc/luci-uploads/.placeholder etc/opkg/keys/0b26f36ae0f4106d etc/opkg/keys/1035ac73cc4e59e3 etc/opkg/keys/5151f69420c3f508 etc/opkg/keys/72a57f2191b211e0 etc/opkg/keys/792d9d9b39f180dc etc/opkg/keys/9ef4694208102c43 etc/opkg/keys/b2d571e0880ff617 etc/opkg/keys/b5043e70f9a75cde etc/opkg/keys/c10b9afab19ee428 etc/opkg/keys/dace9d4df16896bf etc/opkg/keys/dd6de0d06bbd3d85 etc/opkg/keys/f94b9dd6febac963 etc/passwd etc/profile etc/rc.local etc/shadow etc/shells etc/sysctl.conf Commencing upgrade. Closing all shell sessions.
Через несколько минут обновление прошики закончилось.
четверг, 20 февраля 2020 г.
Установка OpenWrt на TP-Link Archer C6 v2
После выхода релиза OpenWrt 19.07.0 решил попробовать альтернативную прошивку. Инструкция по обновлению прошивки на английском языке есть на сайте OpenWrt. Обновить прошивку из web интерфейса штатной прошивки не получилось. Пришлось делать установку через метод TFTP.
среда, 5 февраля 2020 г.
Изменения в моем репозитарии
- Собрал пакеты для Midnight Commander 4.8.24 под ARM.
- Добавил поддержку Ubuntu Eoan.
- Удалил из репозитария Ubuntu Cosmic и Ubuntu Disco из-за EOL.
Как скачать лог Stackdriver
Чтобы выгрузить весь лог целиком воспользуемся консольной командой
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
вторник, 28 января 2020 г.
Midnight Commander 4.8.24
Заодно немного статистики по загрузкам:
- за последние 12 часов пакет был скачан 86 раз
- в лидерах по количеству загрузок Ubuntu: 36 Bionic, 16 Xenial, 6 Disco
- 80 загрузок для amd64 и 6 загрузок для i386
вторник, 14 января 2020 г.
Ошибка при создании Cloud Functions через Terraform
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 от моего имени. Если использовать сервис аккаунт, то все работает без проблем, но тогда либо нужно создавать по отдельному сервис аккаунту на каждого пользователя, либо смириться с проблемами аудита.