• Я тебя спалил, я тебя и починю, или +20 к удовлетворению и +5 к опыту

    Моя специальность снова вылезла наружу. Есть у меня навороченное зарядное устройство для автомобильных аккумуляторов Бережок V1 — это Вымпел 57 с авторской кастомной платой управления, которая умеет в импульсный заряд, который позволяет десульфатировать аккумуляторы и продлевать им жизнь.


    В нем три светодиода индикаторных, показывающих режим работы и состояние — красный, синий и зелёный. Красный перестал гореть, а он важен. Я решил его поменять, но сначала убедиться, что дело не в плате. На включенном в розетку, подключённом к аккумулятору и разобранном заряднике. И, да, конечно же случайно положил экран контактами вниз на радиатор, который, как оказалось, подключен к транзисторам через массу, после чего из прибора вывалило много синего дыма и он потух.
    — …ять, — сказал я, но было поздно.

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

    Сначала подозрение пало на компоненты на радиаторах в корпусе ТО220 — ибо именно об кого-то из них я чиркнул дисплеем. Ими оказались 2 биполярника, сборка диодов Шоттки и мосфет.

    Один биполярник таки ушел в кремниевый рай, остальные компоненты оказались рабочими.

    Обнаружил сгоревший транзистор, управляющий вентиляторами. Заменил. Не помогло. В какой-то момент нашел схему, померил то, что было подписано шиной 5В и нашел там 9.

    Решив, что микроконтроллерам дисплея уже настал капец и терять всё равно уже нечего, начал практиковаться в пайке SMD-компонентов и снял подозрительные диоды, пару конденсаторов и микросхемы операционного усилителя и PWM-контроллера. Напряжение 9 вольт никуда не пропало.
    После выпайки микросхем напряжение поднялось ещё выше, что убедило меня в том, что контроллеры с absolute maximum rating 5.5V давно и безоговорочно мертвы, и я заказал себе Вымпел 52. Но инженерный мозг говорил мне — «домучай Вымпел, понятно, что Бережку кердык, но Вымпел-то тупой аналоговый, там нет контроллеров с прошивкой и там ничего не могло безвозвратно сгореть». Отпаял плату управления и дисплей, чтобы лишний раз не мучить, убедился, что я не понимаю, откуда в Вымпеле такие напряжения — должны же 5В быть, а ничего похожего на стабилизатор нет. Решил ткнуться в дисплей 12 вольтами — а он возьми и загорись. «Хм», подумал я, дисплей живой, прошивка его — тоже, значит уже есть за что бороться — бережок, даже если он сдох, можно купить за 4 тысячи, это уже не новая зарядка за 11. На одном из форумов нашёл тему автора Бережка с принципиальной схемой платы управления. Посмотрел — та нога, на которой я хотел увидеть 5 вольт и видел 9, подписана на схеме вообще как +24V. Подал на эту ногу + от адаптера 12В и землю на землю — плата управления замигала индикаторами. Подключил дисплей — дисплей загорелся как ни в чём ни бывало. Радости моей не было предела — потыкавшись в разъём платы управления, обнаружил, что пропадает не плюс, который я 4 вечера после работы пытался найти, а минус. После этого ещё раз внимательно посмотрел на плату, только уже на минусовое плечо — и заметил какой-то неаккуратный кусок припоя. Ткнул щупом — а это вспученная перегоревшая дорожка. С криком «Ура!» и ударом ноги капнул капельку припоя на место перегоревшей дорожки, накинул на аккумулятор клеммы — прибор включился, и дисплей и индикация загорелись как ни в чём ни бывало. Очень рад и горд собой. Осталось дождаться транзисторы и можно всё собирать, помазав новую хорошую термопасту под новые биполярники.

    В итоге, халатность и небрежность обошлись мне в:

    • пара биполярников 13009 — 213р
    • транзистор 8050 на вентилятор — был от прошлых ремонтов, рублей 10 он стоит
    • светодиод — был
    • капелька припоя — бесценно
    • 4 вечера.

    Новые скиллы:

    • начинают вспоминаться какие-то знания электротехники — Шоттки, индуктивности, конденсаторы и прочая 15 лет назад изученная херня оказалась мне нужна сегодня
    • научился снимать и ставить SMD-компоненты разного размера — от упомянутого 8050 до больших микросхем (не BGA, конечно, но с чего-то надо начинать)
    • впредь буду гораздо внимательнее при работе с электрическими приборами под напряжением (но это не точно, хехе).

    Источники:

  • Доработка велокомпьютера BBB BCP-05

    В 2018 году, покупая велик, я купил самый дешёвый велокомпьютер из наличия — модель в сабже. Он умеет показывать скорость, время и общий пробег. И всё.

    В связи с известными всем нюансами на заправках, я пересел на велик. И увидел то, что сэкономил 8 лет назад. И погрустнел.

    Совершенно случайно, вбив модель в гуголь (уж не помню, зачем мне это пригодилось), я наткнулся на статью товарища DiHalt про модернизацию компьютера этой же фирмы, только BCP-01. Оказывается, если вскрыть корпус и несколько дорожек на плате перерезать, то из младшей модели получится старшая, т.е. отличия между ними только программные. И всё бы ничего, только в комментариях к ней товарищ написал про мою модель и что она тоже модернизируется.

    После такого заявления у компьютера не было шансов сохранить невинность. Пробуем аккуратно разобрать. Не получается, корпус склеен очень прочно. Но шансов оставить его в покое уже нет — руки чешутся. Взял тонкую отвёртку, поставил в стык половинок корпуса и аккуратно по ней стукнул ладонью. Несколько таких попыток — и корпус развалился. Разбираем, видим заветные перемычки, вершаем 4 сопли припоя, собираем обратно на герметик-формирователь прокладок, взятый из поставленной на прикол машины — вуаля.

    MS — maximum speed, одна из отсутствовавших ранее опций

    В итоге, после доработки теперь есть следующие опции:

    • часы (было)
    • DS — расстояние с момента сброса (было)
    • RT — ride time, время поездки (появилось)
    • AS — average speed, средняя скорость (появилось)
    • MS — maximum speed, максимальная скорость (появилось)
    • DS/D — вероятно, distance/day, суточный пробег (появилось)
    • CAL — вероятно сожжённые калории (появилось)
    • CO2 — вероятно, сэкономленный выброс CO2 (по сравнению с машиной?) — появилось, описания нигде не нашёл.
    • напоминание о ТО (появилось)
    • ODO — одометр (был)
    • TRT — вероятно, total ride time, общее время на велике (появилось)
    • TCal, TCO2 — вероятно, то, что выше, но не с момента сброса, а вообще (появилось)

    В общем, я доволен. 4 сопли припоя сделали из самого дешёвого борткомпа самый дорогой. Нраица.

    Упомянутым товарищам — респект и плюсик в карму 🙂

  • Присвоить названия нескольким ОС AstraLinux на одном компьютере

    На компьютере установлено несколько систем AstraLinux. Нужно как-то различать их в меню grub, чтобы грузить нужную. При этом крайне желательно обойтись без ручного редактирования файла /boot/grub/grub.cfg, который будет перезаписан после установки новой системы, например.

    Делаем следующее:

    1. Присваиваем всем файловым системам метку:
    # e2label /dev/sda1 ASTRA1
    # e2label /dev/sda2 ASTRA2

    2. Правим два файла. Первый /etc/grub.d/10_linux, строка 136. Меняем

      echo "menuentry '$(echo "$title" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-$version-$type-$boot_device_id' {" | sed "s/^/$submenu_indentation/"

    на

      echo "menuentry '$(echo "$title ($(e2label `blkid -U $boot_device_id`))" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-$version-$type-$boot_device_id' {" | sed "s/^/$submenu_indentation/"

    Второй — /etc/grub.d/30_os-prober, строка 297. Меняем

    menuentry '$(echo "$title" | grub_quote)' --class gnu-linux --class gnu --class os \$menuentry_id_option 'osprober-gnulinux-$LKERNEL-${recovery_params}-$boot_device_id' {

    на

    menuentry '$(echo "$title ($(e2label $DEVICE))" | grub_quote)' --class gnu-linux --class gnu --class os \$menuentry_id_option 'osprober-gnulinux-$LKERNEL-${recovery_params}-$boot_device_id' {

    3. Вызываем update-grub.

    На выходе имеем в grub.cfg что-то такое:

    menuentry 'AstraLinuxCE GNU/Linux, with Linux 4.15.3-1-generic (на /dev/nvme0n1p6) (ASTRA1)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-4.15.3-1-generic--a009ed5b-4c18-4235-9baa-a711f5443472' {

    Единственный нюанс — нужно это делать либо в каждой Астре, либо обновлять Grub только из одной.

  • nivc_lifehacks

    Это всё, что возьму я с собой.

    — Юра «Музыкант» Шевчук, ДДТ

    Лайфхаки с внутреннего портала одной некогда великой организации.

    Команда для формирования ISO из папки
    mkisofs -o ../ISONAME.iso -V DISC-LABEL -P "AO OLOLO" -joliet-long -l -force-rr -R -D .

    Неожиданное поведение Астры при смене времени на хосте.
    Ситуация — нужно произвести расчёты в целях тестирования. Свежих данных нет, считаю старыми, для этого отодвигаю время на хосте на месяц назад удалённо. Сижу, работаю дальше, возникает необходимость перезагрузить компьютер. Пишу sudo reboot, жду… минуту нет, две, пять…

    С мыслями «что-то пошло не так» иду к машине. А она циклично ребутится. В консоли — unexpected inconsistency on /, last superblock mount is in future, please run fsck manually и спрашивает логин/пароль.
    У рута пароля нет. Логин пользователя из sudoers не принимает, хочет рута. Редактор параметров загрузки ядра тоже не работает. ¯\_(ツ)_/¯
    Что делать, кроме исправления времени обратно вперёд? Проблема на самом деле абзац. Выключили питание при севшей батарейке биоса, и что, лапки кверху и работать не будем? Непорядок.

    Решение простое — подключить диск к другому компьютеру, /etc/default/rcS, в конце его параметр. Делаем FSCKFIX=yes, закрываем, перезагружаемся, вуаля. Причём это касается и других дебианоподобных систем, во всяком случае у убунты этот параметр тоже отключен.

    VLAN в Astra Linux.
    Для подключения к стенду нужно быть в одном broadcast domain с ним. Пробросили мне VLAN 300, а как его настроить — хз.

    В /etc/network/interfaces пишем:

    auto lo eth0.300
    iface eth0.300 inet static
    address 192.168.x.y
    netmask 255.255.255.0
    gateway 192.168.x.y
    vlan_raw_device eth0

    reboot и всё каласо 🙂

    Разблокировка пользователя в ALD (и не только).
    Если много-много-много раз неправильно набрать пароль пользователя, то сервер согласится, что пароль маоцзедун войти в систему под этим пользователем больше не получится. Гуёвая логинилка будет говорить, что пароль неверный. Войдём в консоль и увидим:
    duty-main login: arm-admin
    Account locked due to 100500 failed logins.

    При этом на уровне ALD никаких блокировок не установлено.
    Решение проблемы:
    # pam_tally --user=username --reset'

    Монтирование FTP-каталога в локальную файловую систему в Astra Linux.
    Задача — примонтировать папку со сборочной машины в локальную ФС виртуалки, чтобы не копировать туда репозиторий каждый раз.
    $ sudo curlftpfs -o nonempty,allow_other files/repo/astra/1.5 /srv/ftp/repo/astra/1.5/

    Строка в /etc/fstab может выглядеть так:
    curlftpfs#files/repo/astra/1.5/ /srv/ftp/repo/astra/1.5/ fuse allow_other,nonempty 0 0

    Про постгрес и аудит.
    — Сколько памяти занимает Chrome?
    — Сколько найдёт…
    По умолчанию постгрес астры ведёт аудит и пишет в логи каждый выполненный запрос. При очень интенсивной работе с БД (при работе опрашивающих оборудование агентов, например), этот аудит очень быстро съедает всё место, до которого может дотянуться.
    Нужно найти в /etc/postgresql/9.4/main/postgresql.conf строку:
    ac_audit_mode = ''internal'' # rbt audit mode. Possible values are
    и поставить её в none.
    Например, так:
    sed -i /etc/postgresql/9.4/main/postgresql.conf -e "s/ac_audit_mode\s=\s'internal'/ac_audit_mode = 'none'/"

    Конфигурация платы PCL-746
    Положение DIP-переключателей на платах рассчитывается следующим образом.
    Адрес платы состоит из 10 бит. Назовём их А0…А9.
    Записывается он следующим образом:
    Три младших бита (А0, А1, А2) — всегда нули.
    Семь битов А3…А9 задаются DIP-переключателями инвертированно. То есть биту 1 соответствует положение переключателя «OFF», биту 0 — соответственно «ON»; кроме того, самому старшему биту (А9) соответствует самый правый переключатель (с самым большим номером), а самому младшему (А3) — самый левый. Это немного неинтуитивно, на мой взгляд, логичнее было бы всё сделать наоборот. Ну да ладно, пусть разработчику платы икнётся. 🙂
    Можно, кстати, перевернуть плату кверх ногами, тогда все положения переключателей будут правильные («ON» — 1, «OFF» — 0) и будут в правильном порядке отвечать за 7 старших бит адреса.
    Таким образом, положение DIP-переключателей для адреса, например, 100h, определяется так:
    1. Переводим 100h в двоичное представление. Получается 1 00000 000.
    2. Отбрасываем последние три нуля. Остаётся 1 000 00.
    3. Дополняем число нулями слева до 7 знаков, если надо. Получается 0 1000 00.
    4. Инвертируем. Получается 1 0 111 11
    5. «Переворачиваем» число зеркально слева направо. Получается 1111101. Это и есть требуемая конфигурация переключателя, соответствующая адресу 100h.

    Таким образом, рассчитанные положения перемычек адресации выглядят так:
    Порт 1 (RS-485) Адрес 0x218, DIP-переключатель 0011110
    Порт 2 (RS-232) Адрес 0x220, DIP-переключатель 1101110

    Если Астра не запоминает разрешение экрана…
    Столкнулись с проблемой.
    Ситуация: Астра грузится, но в разрешении 640х480 по центру FullHD монитора с чёрными полями по краям. Настраиваешь в настройках — встаёт штатное разрешение монитора (в нашем случае — 1920х1080), но после перезагрузки опять 640х480. При загрузке других современных линуксов с флешек и тому подобного ситуация аналогичная.
    Ярослав Борисович настроил в xorg.conf ручное разрешение, но это помогло частично. Окно входа стало то же 640х480, но уже не во весь монитор, а маленьким окошком в уголке. Мышь давала себя двигать по всему монитору. После долгого красноглазия обратили внимание на то, что в программе настройки монитора два видеовыхода указано — VGA-1 и LVDS-1. Второй я уже после нашёл на плате распаянным — видимо для подключения матрицы напрямую. А потом, наблюдая за Linux Mintом, запущенным с флешки, я обратил внимание, что в левом верхнем углу, за пределами основного монитора, и есть кусочек размером 640х480, размеры которого берёт Linux (причём любой, не только Астра) для основного монитора. Проблема в том, что оно не знало, что LVDS-1 на самом деле ни к чему не подключен; кроме того она считала его основным монитором.
    Видеоядро на этой плате Intel 8086:a001 (встроенное в ядро CPU Intel Atom Processor Integrated Graphics Controller).
    Такое поведение системы лечится дописыванием опций ядра video=LVDS-1:d video=VGA-1:e в переменную GRUB_CMDLINE_LINUX_DEFAULT в /etc/default/grub и запуском команды update-grub. В нашем случае переменная стала выглядеть так:
    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash video=LVDS-1:d video=VGA-1:e"
    Таким образом этот интерфейс полностью отключается.

    Veracrypt и монтирование томов.
    Если при монтировании криптоконтейнера в VeraCrypt возникает ошибка «device-mapper: resume ioctl on truecrypt* failed: invalid argument», то нужно в настройках установить галку «Do not use kernel cryptographic services».
    На Kubuntu 14.04.2 LTS с ядром 3.16.0-50-generic без этой галки VeraCrypt не работает.

    Удалённый скриншот на Астре.
    xwd -root -display :0 ./screendump.file
    convert ./screendump.file ./scree.bmp
    этот вариант хорош тем, что не требует момент форвардить иксы + можно чисто из под терминала под любой ОС получить полный (или частичный) скриншот экрана

    AstraLinux и форвардинг иксов (боян).
    По умолчанию в Астре форвардинг X-приложений не работает (помимо проблем с MITSHM, см. ниже).
    Для того, чтобы заработал, нужно в конфиг-файл /etc/ssh/sshd_config
    добавить строку X11UseLocalhost no и выдать команду /etc/init.d/ssh restart
    После этого при переподключении всё заработает.

    Некорректное отображение Qt4 приложений через ssh на Astra Linux.
    При подключении по ssh к хосту с Astra Linux и запуске любого Qt4 приложения, отрисовывается только панель заголовка и пустое окно без каких-либо элементов.
    Это как-то связано с использованием Qt4 расширения X11 MIT-SHM (MIT Shared Memory Extension), о чём свидетельствуют многочисленные ошибки в консоли при запуске.
    На данный момент удалось решить проблему, запретив Qt4 использовать это расширение, добавив на хосте переменную окружения «QT_X11_NO_MITSHM=1».
    По идее это должно сказаться на скорости отрисовки, но я пока не заметил побочных эффектов.
    Если кто-нибудь знает более правильный способ, прошу отписать в комментариях.

  • Копирование файловой системы ext4 с диска на диск.

    Сдох на рабочем компе хард размером 2 ТБ. Купили новый SSD на 250 Гб. CloneZilla отказывается копировать диск. Нашёл шикарное решение.

    # fsarchiver -v savefs /media/folder-bkp/disco-source.fsa /dev/sda1

  • Быстрое вычисление MD5SUM для каталога.

    find -type f \( -not -name "md5sum.txt" \) -exec md5sum '{}' \; > md5sum.txt