31 декабря 2025

Эксперимент с обновлением Raspbian через QEMU

Прошлое обновление сервера печати, который построен на базе Raspberry Pi 1B и Raspbian, с Bullseye на Bookworm заняло несколько часов. В нём установлена micro SD карта на 4 гигабайта, которая работает довольно медленно, но для печати быстрее и не нужно. Debian Trixie вышел в начале августа, но обновить эту систему руки дошли только сейчас.

Тогда обновление системы напомнило былые времена с Gentoo. Тогда и появилась идея попробовать запустить образ SD карты в QEMU, обновить систему и записать его обратно на карту.

Поставил SD карту из сервера печати в ноутбук и сделал её образ в двух экземплярах - один будет использоваться для обновления, а второй будет в качестве резервной копии если после обновления он не начнёт работать.

$ sudo dd if=/dev/mmcblk0 of=sdcard-20251230.orig.bin bs=1M iflag=direct
3849+0 records in
3849+0 records out
4035969024 bytes (4,0 GB, 3,8 GiB) copied, 300,146 s, 13,4 MB/s

$ cp sdcard-20251230.orig.bin sdcard.img

Теперь нужно выровнять размер образа для эмуляции иначе QEMU будет ругаться "qemu-system-arm: Invalid SD card size: 3.76 GiB SD card size has to be a power of 2, e.g. 4 GiB."

$ qemu-img resize -f raw sdcard.img 4096M
Image resized.

Не вынимая SD карту из ноутбука копирую ядро (kernel7.img) и device tree (bcm2709-rpi-2-b.dtb) в директорию с образом накопителя.

Чтобы обновление прошло быстрее я использовал эмуляцию Raspberry PI 2B в QEMU. С подбором опций пришлось повозиться, т.к. загрузка висла когда включалась сетевая карта. В итоге нашёл что для эмуляции Raspberry PI 2B рекомендуют передать ядру параметр dwc_otg.fiq_fsm_enable=0 и после этого система загрузилась.

30 декабря 2025

Самодельный аттенюатор

Разбирая коробки наткнулся на DVB-T приёмник который когда-то покупал ради экспериментов с SDR (Software Defined Radio). Он не может принимать частоты ниже 24 МГц, поэтому послушал FM радиостанции, переговоры с соседней стройки, но до приема ADS-B или авиа диапазона руки не дошли. В итоге приёмник на долгое время отправился в коробку.

В этот раз решил собрать апконвертер чтобы была возможность принимать сигнал ниже 24 МГц. А поскольку установить коротковолновую антенну в квартире представляется маловероятным (да и не факт что там что-то будет принимать в плотной застройке), то решил начать эксперименты с генератором сигналов, который будет подавать модулированный сигнал на вход апконвертера. А с наступлением тёплого времени года можно будет выехать на природу и попробовать с реальной антенной уже отлаженный приёмник.

В радиосвязи уверенным приёмом считается сигнал уровня S9 (-73 dBm или 50 мкВ). Мой генератор сигналов не позволяет выставить уровень сигнала ниже -56 dBm и следовательно мне ещё нужен аттенюатор как минимум на 20 dB. В таком случае я могу выставить на генераторе амплитуду -53 dBm и через аттенюатор на 20 dB получить -73 dBm что будет соответствовать уровню S9.

Готовые аттенюаторы на 20 dB в продаже есть, но тут либо платить в разы больше за вариант "на завтра", либо подождать месяц пока придёт из Китая. Ну или вариант на сегодня в виде "сделай сам".

29 декабря 2025

Модуль идеального диода XL74610

 В моей самодельной электронной нагрузке на 75 Вт есть защита от обратной полярности в виде сдвоенного диода Шоттки. Это очень простое решение, но у такой защиты есть цена - электронная нагрузка не может работать с обычными пальчиковыми батарейками или Ni-MH аккумуляторами из-за падения напряжения на защитном диоде.

В своё время я купил модуль "идеального диода" XL74610 который имеет очень низкое падение напряжения и потенциально может заменить диоды Шоттки, но всё не доходили руки его протестировать и решить что с ним делать дальше.

28 декабря 2025

Новые ручки для потенциометров

 В моих электронной нагрузке и блоке питания регулировки осуществляются многооборотными потенциометрами 3590 с диаметром вала 6,3 мм. Ручки, которые я поставил при сборке, были диаметром 20 мм и высотой 11 мм. Они плохо смотрелись из-за зазора между корпусом и самой ручкой через который был виден винт крепления. А небольшой размер ручек доставлял неудобство при точной установки значений, т.к. приходится делать более точные движения рукой.

Смоделировал две новые ручки диаметром 25 мм 30 мм и высотой 20 мм, которые будут прятать винт крепления под собой. Для сравнения прежняя и новые ручки рядом.

Сначала добавил в модель боковое отверстие для вплавляемой вставки под винт фиксации вала, но оказалось что напечатанная ручка садится на вал внатяг и в итоге выключил его в модели при последующей печати.

27 декабря 2025

Профилактика мультиметра Zoyi ZT-301

 Мультиметр Zoyi ZT-301 стал показывать от единиц до десяток Ом при замкнутых щупах, на фотографии использована "перемычка", но показывает 2,4 Ом. Покупал этот мультиметр в конце 2023 года и с тех пор он был моим основным мультиметром.

 Если покрутить переключатель несколько раз вперёд-назад, то начинает показывать правильно, но через какое-то время всё повторятся снова. Скорее всего нужно обслужить его переключатель и для этого разбирается корпус и вынимается печатная плата.

Для начала нужно вынуть батарейки и открутить четыре самореза в углах корпуса.

26 декабря 2025

Доработка тестера батареек BT-168D

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

Чтобы проверять батарейки я когда-то покупал тестер BT-168D который может измерить напряжения на пальчиковых батарейках или аккумуляторах, а также батарейках 6F22 (их ещё называют "Крона").


Проблема в том что этот тестер не создаёт нагрузку на батарейке и бывает ситуация когда тестер показывает нормальное напряжение, но батарейка не держит нагрузку.

Доработка заключается в добавлении нескольких сопротивлений которые подключаются параллельно измеряемой батарейке и создают дополнительную нагрузку.

25 декабря 2025

Установка NanoVNA-Saver в Debian 13

Понадобилось снять характеристику с самодельного аттенюатора и для этого хотел использовать приложение NanoVNA-Saver которое есть в репозитарии Debian 13. После установки оказалось что оно не запускается из-за неверно указанных зависимостей для пакета (подробности в #1123607).

Чтобы приложение запустилось нужно дополнительно установить несколько библиотек

$ sudo apt-get install -y python3-pyside6 python3-pyside6.qtcore python3-pyside6.qtgui python3-pyside6.qtwidgets

После этого приложение запускается и работает


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

24 декабря 2025

Отключение кеширования метаданных для сетевых дисков в Windows

На рабочем ноутбуке у меня стоит Windows как корпоративный стандарт, но основная работа происходит в Linux который установлен в VirtualBox. Такой подход у меня появился давно, когда ещё в Windows первый WSL был нестабилен и несколько попыток перейти на него провалились. К слову и WSL2 которым уже можно вполне пользоваться меня не устраивает из-за меньшей производительности.

Все рабочие файлы лежат в виртуальной машине и к Windows подключены в виде сетевого диска Samba (настройки я описывал тут). После обновления на Windows 11 я заметил что изменения, которые сделаны со стороны виртуальной машины долгое время не видны в Windows. Приходилось создавать новый файл и затем удалять его, но всё не доходили руки поправить эту проблему.

Сегодня терпение лопнуло и был сделан беглый поиск решения который вылился в несколько строчек для редактора реестра 

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters]
"FileInfoCacheLifetime"=dword:00000000
"FileNotFoundCacheLifetime"=dword:00000000
"DirectoryCacheLifetime"=dword:00000000

После внесения в реестр нужно перезапустить службу workstation 

net stop workstation
net start workstation

Или перезагрузить весь компьютер для надёжности.

Подробности можно почитать по ссылкам:


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

Добавить метку времени к событиям в Kubernetes

 Если по какой-то причине нет доступа в панель мониторинга Kubernetes кластера, но нужно знать в какое время происходит определённое событие, то есть простой способ сделать это

$ kubectl -n default get events -w | ts
Dec 24 09:39:13 LAST SEEN   TYPE     REASON              OBJECT                        MESSAGE
Dec 24 09:39:13 15s         Normal   Scheduled           pod/debug-658b996798-52g2g    Successfully assigned default/debug-658b996798-52g2g to aks-workerf1f9-29801352-vmss000003
Dec 24 09:39:13 14s         Normal   Pulling             pod/debug-658b996798-52g2g    Pulling image "nicolaka/netshoot"
Dec 24 09:39:13 14s         Normal   Pulled              pod/debug-658b996798-52g2g    Successfully pulled image "nicolaka/netshoot" in 237ms (237ms including waiting). Image size: 207893848 bytes.
Dec 24 09:39:13 14s         Normal   Created             pod/debug-658b996798-52g2g    Created container: netshoot
Dec 24 09:39:13 14s         Normal   Started             pod/debug-658b996798-52g2g    Started container netshoot
Dec 24 09:39:13 15s         Normal   SuccessfulCreate    replicaset/debug-658b996798   Created pod: debug-658b996798-52g2g
Dec 24 09:39:13 15s         Normal   ScalingReplicaSet   deployment/debug              Scaled up replica set debug-658b996798 from 0 to 1

Dec 24 09:39:26 0s          Normal   ScalingReplicaSet   deployment/debug              Scaled down replica set debug-658b996798 from 1 to 0
Dec 24 09:39:26 0s          Normal   Killing             pod/debug-658b996798-52g2g    Stopping container netshoot
Dec 24 09:39:26 0s          Normal   SuccessfulDelete    replicaset/debug-658b996798   Deleted pod: debug-658b996798-52g2g

Я раньше не знал про утилиту "ts" из пакета moreutils и узнал о ней из вопроса на stackoverlow. Забавно что больше откликов набрал другой вариант ответа на вопрос.


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

23 декабря 2025

Глюки паяльной станции Silverflo 982-I

В прошлом году приобрёл себе паяльную станцию Silverflo 982-I (она же Yihua 982-I) на жалах C245. За год использования несколько раз видел как она глючила при длительной пайке в режиме ожидания, если установленная температура выше 300 °C (температура начинала расти выше установленной когда паяльник находился в подставке). Решалось это выключением/включением обратно и работа продолжалась.

Вчера это поведение повторилось и дополнительно появилась ошибка "S-E" (скорее всего сокращение от Sensor-Error, но я не уверен).

Поискал распиновку для жала C245 и для начала измерил сопротивление нагревателя чтобы проверить что проблема не в жале

21 декабря 2025

Когда не хватает розеток

Надоело постоянно переключать вилки в удлинителе на рабочем столе когда нужно поработать с генератором сигналов, развязывающим трансформатором или паяльником. Изначально на столе был удлинитель на 6 розеток (что-то бюджетное от Defender), но за пару месяцев активного использования у него прикипела кнопка включения и он перестал выключаться.

Покупать аналогичный удлинитель на замену смысла не было, т.к. качество будет не лучше. Решил собрать себе блок на 12 розеток и добавить к нему фильтр помех, предохранитель и выключатель с запасом.

В хозяйственном магазине взял три накладные розетки для помещений

Внутрянка у них так себе, но лучше того что я видел в потрохах удлинителя от Defender.

Не видел раньше такие подпружиненные контакты и не знаю насколько они надёжные, но вилка входит плотно

14 декабря 2025

NetworkManager перестал принимать одинаковый IP для проводной и беспроводной сетей

Подключил проводную сеть к ноутбуку для обновления OpenWrt в домашней Wifi сети и заметил что NetworkManager долго "крутит" иконку настройки нового подключения в трее. Полез в логи посмотреть что там происходит и нашёл такое

Dec 13 11:29:34 XXXXXXXXXX NetworkManager[978]: <warn>  [1765614574.8401] device (enp0s31f6): IP address 192.168.XX.XX cannot be configured because it is already in use in the network by host XX:XX:XX:XX:XX:XX
Dec 13 11:30:04 XXXXXXXXXX NetworkManager[978]: <warn>  [1765614604.9456] device (enp0s31f6): IP address 192.168.XX.XX cannot be configured because it is already in use in the network by host XX:XX:XX:XX:XX:XX

Т.е. он отказывается назначить IP адрес, который ему выдал DHCP сервер, т.к. этот адрес уже используется на беспроводном интерфейсе.

Тут нужно сделать пояснение что такое назначение адресов сделано намеренно и одинаковый IP выдаётся на проводной и беспроводной интерфейсы (не все DHCP сервера позволяют делать такое). В настройках маршрутизации у интерфейсов разный приоритет и при наличии подключения через проводную сеть будет использоваться она, а при отключении пакеты идут через беспроводной интерфейс без разрыва соединений.

12 декабря 2025

Distribution не работает через workload identity в Azure

 Довольно долго провозился с настройкой distribution в Azure через workload identity в AKS который не хотел работать.

Сама настройка простая:

  • аннотация на сервис аккаунт в кластере (azure.workload.identity/client-id)
  • метка на под (azure.workload.identity/use: "true")
  • настроить конфигурацию в distribution
    storage:
      azure:
        accountname: accountname
        container: containername
        credentials:
          type: default_credentials
    

Но в лог валится ошибка "403 Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature."