пятница, 27 января 2023 г.

Как запустить второй сервер mysql в Debian и не умереть, пытаясь

В инете достаточно мануалов, где вручную поднимают второй инстанс mysql: копируют папки с данными БД, скрипты в /etc/init.d/, дергают mysql_install_db и т.д. При этом не всегда опишут, как сделать, чтобы второй инстанс можно было так же, как и первый, удобно запускать и тормозить через systemctl.

Ковыряясь с последней задачей, я закопался в скриптах /lib/lsb/init-functions, /usr/share/mysql/mysql-helpers и в системе systemd.

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

воскресенье, 15 января 2023 г.

Как установить и использовать Chrome WebDriver в PHP

ставим хромиум из реп

далее нужен chromedriver. например отсюда
https://chromedriver.storage.googleapis.com/110.0.5481.30/chromedriver_linux64.zip 

запускаем на порту 4444
./chromedriver --port=4444

далее тянем php-webdriver последней версии

git clone https://github.com/php-webdriver/php-webdriver

для него нужен еще 
aptitude install composer
далее в стянутом гит-проекте 
composer install

далее оказалось, что мне нужен пхп 7.3 вместо 7.0
но это уж слишком, поэтому я просто скачал версию постарее, 1.12.0.
после composer install появилась папка vendor, но autoload в ней не было.
причем install закончился с ошибкой
 [RuntimeException]
  Could not scan for classes inside "tests/functional/" which does not appear to be a file nor a folder
да, папки tests в проекте 1.12.0 не было. взял из latest, который пытался ставить изначально, запустил снова composer install и все появилось!

в latest версии есть также example.php, беру его оттуда, прописываю $host = 'http://localhost:4444'; и запускаю
$ php example.php
ошибка
PHP Fatal error:  Uncaught Facebook\WebDriver\Exception\WebDriverCurlException: Curl error thrown for http POST to /session with params: {"capabilities":{"firstMatch":[{"browserName":"chrome"}]},"desiredCapabilities":{"browserName":"chrome","platform":"ANY"}}
Operation timed out after 30001 milliseconds with 0 bytes received in /storage/www/selenium/phpwebd/php-webdriver-1.12.0/lib/Remote/HttpCommandExecutor.php:333

ошибка в консоли chromedriver (запущенного от рута)
[28187:28187:0114/163530.390663:ERROR:zygote_host_impl_linux.cc(89)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180.

запускаю chromedriver под своим юзером, пробую снова
не работает.

действие, кстати, происходит в виртуалке LXC proxmox под debian 8.10
походу X11 нужен, но в виртуалках это нетривиальная задача
вот тут хак какой-то предлагается
https://unix.stackexchange.com/questions/30847/fast-x-for-lxc-guest-on-localhost
но я так понял, все равно нужен доступ к хост-системе

есть другой путь
установка vnc4server, запуск # vncserver
уже дало кое что. DISPLAY=:1 xclock  запустилось
в суматохе было установлено также xserver-xorg-video-dummy, насколько оно нужно, неясно (upd: не нужно).
после чего и хром уже ожил, но только под рутом пока.
DISPLAY=:1  chromium   --verbose --no-sandbox

под обычным юзером DISPLAY=:1 xclock не может открыть дисплей
поэтому запускать vncserver надо под юзером, под которым и хром будет запускаться, т.е. ваши php-скрипты
после запуска в выводе есть индекс дисплея, скорее всего :1
делаем export DISPLAY=:1

пробуем запуск chromium, получаем уже какой-то живой вывод
[11117:11167:0114/172737.647984:ERROR:bus.cc(396)] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix")
ATTENTION: default value of option force_s3tc_enable overridden by environment.
[11160:11160:0114/172737.826114:ERROR:sandbox_linux.cc(364)] InitializeSandbox() called with multiple threads in process gpu-process.
(chromium:11117): LIBDBUSMENU-GLIB-WARNING **: Unable to get session bus: Unknown or unsupported transport 'disabled' for address 'disabled:'

ну и кажется php example.php теперь тоже отработал!

суббота, 15 мая 2021 г.

Чтение данных с ваттметра DT3010 по Bluetooth

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

Требуется программно из консоли Debian прочитать все данные.
На телефоне есть E-test, графики строит, в эксель пишет, но этого мало. Надо приконнектить к RPi Zero W и собирать данные постоянно, а не только когда телефон рядом.

вторник, 16 марта 2021 г.

ssl_preread_server_name пустой при обращениях от утилиты siege

Имеется фронтенд nginx с default секцией stream, имеющей включенный ssl_preread и раскидывающей по апстримам запросы на основании $ssl_preread_server_name (т.е. доменных имен).

Так вот при использовании siege версии 3.0.6 этот самый $ssl_preread_server_name не определялся, был пуст. Wget, cURL при обращении из той же консоли к тем же урлам отрабатывали как положено.

Решилось обновлением siege до 4.0.2. Но сохраните старый конфиг `/.siegerc, новая версия siege при установке его удалит и создаст дефолтный в папке ~/.siege

воскресенье, 22 октября 2017 г.

Настройка root-сервера Hetzner

Дано:
новый блестящий быстрый только что арендованный немецкий root-сервер с активной Rescue-системой.

Требуется:
настроить аппаратный RAID, завести виртуалку, настроить сеть.

пятница, 25 ноября 2016 г.

ESP8266 продолжение. Модуль ESP-12

В прошлой части я мучал модуль ESP-01 с AT-прошивкой. С тех пор прошло много времени, я успел заказать и получить более развитые модули ESP-12-E, о которых и пойдет речь в этот раз.
Будем прошивать NodeMCU, подключать SD-карту, дисплей на SSD1306, энкодер (rotary encoder) и FM-модуль RDA5807. После соединения всех этих модулей между собой в правильном порядке проводочками и правильного расположения бесчисленного количества байтиков во флеше ESP-12 должно получиться радио.

NodeMCU, стоит отметить, занятная штука! После прошивки в терминале доступно что-то типа командной строки языка Lua, где можно выполнять отдельные команды или целые скрипты, не компилируя каждый раз код и не перепрошивая модуль!

От гавеного usb-ttl адаптера такой модуль уже не смог прошиться, один вечер я его уговаривал разными программами - безрезультатно. Общение идет, MAC выдается, но потом все помирает, прошивка даже не начинает заливаться.
На следующий день я догадался измерить напругу на модуле, меньше 2В! Конечно нихрена не прошьется, нужно 3.3В.
Адаптер в качестве питальника тут совсем не годится. Запитал модуль от 2 батареек AAA и наконец прошил NodeMCU.
Использовал хорошую статью http://www.benlo.com/esp8266/esp8266QuickStart.html

вторник, 8 ноября 2016 г.

Полезные мелочи

как быстро организовать новую виртуалку в Xen (с установленной осью, IP, hostname и т.д.)
http://habrahabr.ru/post/37824/
конкретно:
xen-create-image -hostname=имя-машины -size=2Gb -swap=128Mb -ide -ip=192.168.0.100 -netmask=255.255.255.0 -gateway=192.168.0.1 -force -dir=/xen -memory=128Mb -arch=amd64 -dist=wheezy  -passwd
только вот проблемы есть и тут, сначала ругалось
/tmp/18y9wp9SGA/etc/ssh/ssh_host_rsa_key.pub: No such file or directory
Running command 'umount /tmp/18y9wp9SGA/proc 2>&1' failed with exit code 256.
Aborting
потом после смены -dist с etch на wheezy создалось и запустилось, но затыкалось на
Waiting for root file system ..
и сваливалось в (initramfs) с сообщением ALERT!  /dev/hda2 does not exist
как ни странно, блеать, замена hda на xvda в имя-машины.cfg разрешило проблему!

суббота, 6 февраля 2016 г.

Конфигурирование voCore и работа с USB-устройствами

VoCore по сути являет собой плату, где распаян чип Ralink RT5350F и 32Мб SDRAM (+ по-мелочи). Чип в свою очередь это целый готовый роутер (SoC), в котором есть вайфай 802.11n, 5-портовый Ethernet-свитч, USB Host/Device, куча интерфейсов, любимых в узких кругах (SPI/I2S/I2C/PCM/UART), GPIO и все это дополняется процессором на 360МГц. Стоит штучка 20 зеленых единиц.
Попробую сделать с ней что-то полезное.
Жаль греется дофига, при этом в комплекте нет радиатора.

Я купил пару таких и решил один пустить под проект удаленного видеонаблюдения.
Проект имеет целью создание автономного черного ящика с тремя USB портами, куда втыкается 2 веб-камеры и 3G/4G USB-модем от предпочтительного сотового оператора (либо USB свисток, ежели WiFi с инетом рядом есть). Ну еще разъемчик для подключения ИК подсветки ночного режима, и еще возможно доп.разъемчики для двух датчиков движения (по одному на камеру, для двух зон).
Работать будет от солнечных батарей, заряжающих несколько аккумуляторов Li-ion 18650, все с алиэкспресс.

Ви-таки можете спросить, а шо IP-вебку купить не проще ли?
Ой вэй, только давайте без этого! Если бы я откладывал по шекелю каждый раз, когда на форумах советуют "лучше купи"..

Самая дешевая со встроенным 3G, что я нашел, это 6500р, в основном попадается в районе 10000р, а надо две, а если брать обычные (без 3G), то дешевле, но тогда еще и 3G-модем нужен, и как то разделить этот модем на 2 камеры, вот хз как, с ходу не знаю! а потом станет ясно, что проброс портов из интернета через 3G-модем это ни разу не тривиальная задача, и хорошо бы иметь свой сервер в интернете, куда камеры могли бы коннектиться по ВПН, а там уже и проброс настраивать, вот она наркомания-то где!

Вся идея зародилась с желания применить где-то ненужный смартфон. У него и камер две, и управляющий софт написать можно, и мобильный интернет на борту.. не помню, почему я от нее отказался..
Может потому, что не выйдет направить обе камеры отдельно друг от друга, а также придется вникать в программирование под андроид, плюс к тому неясно, как подключить датчики движения и освещения, а еще ИК-прожектор подсветки, да и камеры надо переделывать в режим ночного видения. Кстати забавная тема, там надо удалить ИК фильтр и обычная вебкамера начинает видеть в темноте, при наличии ИК подсветки, конечно же. Я попробовал - реально работает! В инете достаточно инфы по этому вопросу.

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

воскресенье, 31 января 2016 г.

AcePHProxy: обновление до 0.6.4

Не так давно я выпустил новую версию AceStream прокси-сервера, и она имеет значительные улучшения!
Из самого вкусного:
  • прямой просмотр *.torrent файлов без скачивания, как обычных фильмов
  • при этом видео можно перематывать
А также:
  • вывод содержимого (.torrent-файлов) из спец. папки как плейлиста
  • вывод .torrent-файлов, состоящих из нескольких видео, как плейлиста
  • эффективное использование памяти
  • слегка обновленный интерфейс
Ложка дегтя
  • магнет-ссылки проигрывать не умеет
  • если торрент предоставляет отдельный файл субтитров или звуковой дорожки, они не подцепляются

четверг, 24 декабря 2015 г.

Нюансы разработки из консоли

Я уже давно отказался от работы в Netbeans, более того, от работы в GUI. Эта IDE достала меня своими тормозами, дождаться открытия diff'а перед коммитом почти нереально. А без просмотра диффа коммитить нехорошо. Бесконечное "фоновое сканирование проекта", откуда-то взявшаяся гора дубликатов файлов во все-таки открывшемся через 10 минут предпросмотре коммита, видимо из-за использования символьных ссылок. Тормоза UI, стоит только нажать Ctrl. И это на моем 4-ядерном  проце, 8Гб RAM и недешевом SSD диске Intel.
Тогда я и решил уйти в подполье. Сейчас работаю исключительно через putty, используя screen, vim, grep и консольный svn. Собственно сама работа ведется на сервере.

Поскольку сервер у меня работает 24х7 и доступен из инета - такой подход открыл массу удобств.
screen позволяет оставить работу в любой момент и в любом состоянии, закрыть putty, а затем вернуться и продолжить с того же места. Причем необязательно с того же компа. Хоть из интернет-кафе. Суть в том, что теперь не нужен специально подготовленный к разработке комп со всем установленным софтом. Только putty. И удобство работы зависит теперь не от мощности компа, а от размера его экрана. В принципе я и с нетбука однажды работал.
svn+vim вполне сносно позволяет смотреть diff и править прямо при просмотре. Это последнее, ради чего я иногда все же запускал Netbeans. Все-таки визуальный дифф - это очень удобно.
vim позволяет использовать гору плагинов, впрочем, я не увлекаюсь, дабы не получить тормозов. Удобная фишка - табы при редактировании файлов. Это, кстати, встроенная возможность vim'а, чтобы открыть несколько файлов таким образом, нужно использовать ключ -p
vim -p file1 file2
На фото - дифф одного из файлов моего проекта AcePHProxy, табы vim (вверху), группировка screen (внизу).


Настроить vim на всеми любимый "переход к определению функции" тоже можно, однако я работаю с одним и тем же проектом уже давно и сам знаю куда идти, тем более, что код там организован аккуратно. По сравнению с Netbeans я уж точно ничего не потерял, там пока дождешься этого перехода, уже можно давно файл найти и открыть самостоятельно.
Может я однажды попробую силы в написании плагинов для vim, тогда и организую.

Но linux не был бы linux'ом, если бы не требовалось доставать из ящика напильник..
Далее о том, как я настраивал svn diff через vim с редактированием прямо при просмотре, а также 256-цветный режим терминала и устранял сопутствующие глюки.

пятница, 20 ноября 2015 г.

ESP8266 быстрый старт

Есть у меня два модуля ESP-01, купил давно уже, на всякий случай, а тут и задача подвернулась, думаю надо их попробовать в деле. Поначалу я даже не представлял, как будет устроена работа, на каком уровне абстракции придется работать, реализовывать ли TCP/IP стек в МК, формировать ли сетевые пакеты руками, какой вообще функционал мне предоставит модуль, ну и тому подобные переживания :).
Оказалось все очень просто, модуль представляет из себя полностью законченное сетевое устройство, он поддерживает необходимые методы шифрования и вообще реализует всю работу с TCP/IP на стороне WiFi, а с МК общается через UART посредством набора AT-команд. Т.е. на стороне МК все предельно просто, там доступны такие удобные команды, как посмотреть список WiFi-сетей, подключиться к выбранной, открыть коннект до хоста IP на порту PORT, записать и прочитать данные из сокета, сделать пинг до хоста и т.д.

Распиновка модуля такая:

также у меня есть китайска-USB-TTL адаптер, выдающий кроме 5В еще и 3.3В.
Подключение модуля обещает быть проще некуда, 4 проводка и можно общаться с ним через программу-терминал. Следовательно, VCC подключаем к питанию 3.3В, GND к земле, RXD чипа к TXD адаптера, TXD чипа к RXD адаптера, CH_PD к питанию.

вторник, 10 ноября 2015 г.

Решение проблемы нестабильной работы WiFi на Meizu M2 note

Только что купленный телефон Meizu M2 Note с ходу продемонстрировал практически полную неработоспособность WiFi. Закачка приложения с Google Play представляла собой периодическое (и очень частое) включение-выключение WiFi. Помогало на 2-5сек, затем скорость падала с 200-300кб/с до нуля. Вблизи роутера картина была получше, почти до 1МБ/с дотягивало. На всех остальных ноутах-телефонах-приставках все было вроде хорошо.

Роутер D-Link DIR-655, настроена сеть стандарта 802.11g/n, канал 13, полоса 20/40 MHz, скорость Best (automatic).

В инете есть совет снизить скорость WiFi на роутере - это помогло, но ясно, что жить так нельзя. Для слива свежей прошивки для телефона пойдет, однако проблему надо решать в корне.

Пробовали для начала обновить систему, скачали прошивку аж на 800+ Мб, а она не пошла - Firmware corrupt, попробовали еще 2 разных версии с тем же результатом.

Далее я начал ковырять настройки роутера и методом научного тыка нашел злополучную галочку в разделе Advanced Wireless - WMM Enable.

При выставленной галочке WiFi стабильно не пашет, при снятой - стабильно пашет.

SOLVED

воскресенье, 26 июля 2015 г.

Как запустить Windows 8 в безопасном режиме

Возил я однажды свой системник на дачу, чтобы там поработать. Системник в корпусе Lian-Li PC-Q12B, легко берется одной рукой под мышку, но при этом мощный, так что путешествует частенько.
Тамошний монитор - зверюга NEC FE 991 SB, умеющий разрешение аж до 2048х1536. Так вот по приезду обратно я подключил системник и столкнулся с проблемой - мой LCD монитор демонстрировал мне сообщение "Out of range", великовато, дескать, разрешение-то в винде выставлено.
В интернете достаточно копипастов статей как войти в безопасный режим в Windows 8, но все они хороши для случая, когда винда загружена и монитор показывает.
У меня же более сложный случай.

воскресенье, 28 июня 2015 г.

Ace Stream прокси своими руками, просмотр Torrent TV на XBMC

У меня на хате уже 4 XBMC точки (и 5-я на подходе), у всех общая мультимедиа база (общее mysql-подключение), и на всех я хотел бы смотреть ТВ с сайта torrent-tv.ru (есть аддон для XBMC), но пока что приходится настраивать (и обновлять при случае) руками на каждой точке отдельно. Это установка Ace Stream, втыкание плагина torrent-tv в XBMC, в принципе на этом всё, но все же лениво. Не всегда получается с первого раза, сейчас вот на одной точке вылезла проблема обновления плагина с резолюцией "Dependencies not met", а аналогичный плагин (официальный) вообще помечен как Broken. Ace Stream на тот момент в репозиториях не было, приходилось руками ставить. К тому же системы разные, где виндов$, где линух, а где то вообще андроид. На телефон, к примеру, AceStream сервер не поставишь, и порт по ssh не пробросишь. Потому захотелось поднять на домашнем сервере единую точку раздачи торрент-тв, а в общей папке мультимедиа разместить плейлист со ссылками на каналы.

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

четверг, 4 июня 2015 г.

Ветра нет, а чаю хочется

Что если электричество отключили, ветер стих, солнца нет, и аккумуляторы сели?
В условиях автономного дома самый простой способ сгенерировать энергию - покрутить "динаму" или педали.
Не напрягаясь, средний дядя может выдавать 100Вт на велотренажере. Посчитаем, сколько нужно крутить педали, чтобы обеспечить себе привычный уровень комфорта!

понедельник, 24 ноября 2014 г.

Работа с фискальными принтерами АТОЛ и Штрих-М из PHP

В процессе работы над парой проектов интернет-магазинов мне довелось подключать фискальные принтеры к PHP-приложениям. 1С не было и не планировалось. Значит подключать надо было напрямую к PHP безо всяких системных драйверов.
Значит надо было реализовать протокол обмена с фискальным принтером на PHP, благо для этого имелся качественный официальный мануал.
В статье выкладываю получившийся PHP драйвер для моделей сразу двух производителей: АТОЛ (FPrint-5200K) и Штрих-М (Штрих-Light 100).
Код расширяемый, и не составит труда допилить при необходимости до другой схожей модели того же производителя.

среда, 12 ноября 2014 г.

Баннерорезалка масштаба сети на BIND и nginx

Давно у меня зрело желание порезать рекламу в едином месте - на шлюзе домашней сети.
Задача эта так и висела бы, наверное, в TODO листе, если бы не мобильное приложение Real Racing 3. Какое-то время я рубился в эти гоночки, и все было отлично, но в один прекрасный день я узрел на экране гигантский баннер, а потом охапку баннеров поменьше в разных местах. Этого я стерпеть не мог..
Но мне не хотелось ставить squid ради этого дела, я особо не исследовал, но там же, наверное, придется всем клиентам сети прокси настроить? Явно не мой путь.

Итак, дано: шлюз (роутер) под debian (с поднятым DNS bind9), XEN-виртуалка для веб-разработки (debian, с поднятым nginx).
Требуется: порезать рекламу на всем, что подключается к серверу дома, хоть по WiFi, хоть по проводу.

Достигнутый итог: нет рекламы в skype на десктопе и в телефоне, мобильных приложениях, браузере (AdBlock отключен).
А подробнее - далее.

среда, 15 октября 2014 г.

nRF24L01. Энергосбережение 2: Путь самурая

В первой части мы научились работать с nRF вообще, во второй разобрались с тем, как запитать его так, чтобы не разориться на батарейках. Уже после ее публикации она была дополнена интересным, но пока мной не опробованным, вариантом №5 (бонусным), обещающим наиэффективнейший режим энергосбережения!

Напомню, суть его сводится к тому, что экономное устройство (в моем случае сенсорный выключатель) само периодически (раз в 64-128мс) обращается к роутеру за данными, а роутер отвечает либо пустым пакетом из нулей (например), либо пакетом данных, если таковой ожидает востребования. Сам роутер занимается тем, что передает пакеты от ПК в радиоэфир и обратно.
Причем ответный пакет передается через фичу W_ACK_PAYLOAD, что здорово упрощает работу и код прошивки приемника и передатчика (в частности переключение TX-RX-TX происходит в модуле само).

Более того, на ответный ACK-пакет, пришедший по этой фиче, на передававшей стороне (выключателе) помимо TX_DS генерируется отдельное прерывание RX_DR! Мне код выключателя вообще менять не пришлось, только регистры модуля при старте подтюнить! А, ну и добавить периодический пинг роутера спец.пакетом, в ответ на который тот должен W_ACK_PAYLOAD мне в ответ заряжать.
Короче подробности и Success Story - далее.

пятница, 29 августа 2014 г.

Ремонт кнопки блокировки HTC One V

Если у вашего HTC One V стала заедать кнопка блокировки, когда приходится нажимать ее с силой и срабатывает она далеко не с первого раза - ниже инструкция, как все починить с использованием любимых подручных средств: клея, скотча, бумажки и жвачки.

среда, 30 июля 2014 г.

Альтернативноэнергетический светильник в дачный туалет

За что я люблю программирование: написал код, и он работает всегда. Мне нравится этот принцип "сделал и забыл". Поэтому все больше увлекаюсь солнечнозапитанными устройствами. Солнечный элемент + аккумулятор - и какая-нибудь поделка будет работать чуть ли не вечно. Например тот же выносной датчик погодной станции, или телеметрия какая-то в саде-огороде. Как показал натурный эксперимент даже небольшая солнечная батарея на 6В может зарядить аккумулятор в 3.7 вольта не будучи облучаемой прямым солнечным светом. А при правильном подходе к энергосбережению, той небольшой энергии хватит, чтобы дожить до следующего утра.