Аникин

Блог об администрировании Linux, BSD и не только.

Связаться со мной:

Ремонт китайского модуля управления светом

В 99% случаев неисправностей китайских модулей управления люстрами проблема кроется в потере емкости металлопленочного конденсатора 1-1,5 мкФ х 250-400в. Нужно заменить на аналогичный. В моем случае неисправность проявлялась следующим образом, из трех линий освещения адекватно работали только одновременно включенные две линии. При включении третьей линии пульт начинал реагировать только на расстоянии около 30 сантиметров от модуля. Виновник торжества на фото:

На алиэкспрессе и в магазинах множество модулей с примерно одинаковой начинкой. Сам модуль у меня такой:

С таким пультом:

bme280 выдает nan вместо показаний.

Проверьте питание. Вероятно проблема в плохом контакте на 3.3 вольта. I2C работает с плохим контактом питания, соответственно датчик определяется как исправный. Но сам датчик не работает при плохом питании и выплевывает nan вместо показаний.

В моем случае началось все с того что датчик периодически начал выплевывать nan. Я начал думать что датчик умирает. И в один прекрасный день он несколько часов передавал nan вместо показаний. Помогла очистка контактов от окислов. Решение найдено здесь.

12 апреля   bme280   esp8266   nan   nodemcu

DynDns через Telegram

Т.к яндекс сломал api для своих DNS, то для получения ip будем пользоваться телеграмом.
Через BotFather создаем бота. Даем ему команду

/newbot

Затем вводим имя нашего нового бота. Потом вводим username бота, оно должно оканчиваться на bot.
После этого BotFather пришлет нам api токен.
Теперь нам нужно получить chat id. Для этого отправляем нашему боту какое-нибудь сообщение и затем делаем запрос

https://api.telegram.org/bot<api токен>/getUpdates

В ответе находим

..."id":123456789...

Копируем id.
Если ваш провайдер блокирует телеграм, то нужно обзавестись прокси для отправки уведомлений. Теперь у нас есть все чтобы наш бот мог отправлять нам уведомления.
Отправить сообщение из консоли можно запросом вида

curl -x $proxy "https://api.telegram.org/bot${api}/sendMessage?chat_id=${id}&text=${buf}"

Берем наш скрипт из статьи про ЯндексДНС и немного его переделываем. Получаем что-то типа такого.

#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin; export PATH
api="сюда вписываем токен"
id="сюда вписываем chat id"
proxy="socks5://login:pass@proxy.ip:port/"

while true; do
ip=`curl -s http://ip.anikin.pw/`
if [ $ip != $buf ]
then
buf=`echo $ip`
curl -x $proxy "https://api.telegram.org/bot${api}/sendMessage?chat_id=${id}&text=${buf}"
fi
sleep 1800; done;

Скрипт смотрит на изменение ip. И если ip изменяется, то отправляет новый ip в телеграм.

2019   api   dyndns   telegram

Прозрачный обход блокировок на шлюзе FreeBSD

В первую очередь нужно поднять OpenVPN клиента через который мы будем пускать заблокированные адреса. В конфиге клиента следует закомментировать диррективу redirect-gateway, чтобы основной траффик у нас шел через провайдера.
Создаем скрипт который загрузит заблокированные ip в таблицу ipfw

#!/bin/sh

rm /root/bin/reestr.txt
wget -O - https://reestr.rublacklist.net/api/ips|tr ';' '\n'|tr '"' ' ' > /root/bin/reestr.txt
file="/root/bin/reestr.txt"

ipfw table 1 flush
while read line
do
ipfw table 1 add $line
done < $file

file="/root/bin/useriplist" # В этот файл можно вписать свои ip которые тоже нужно пустить через VPN
while read line
do
ipfw table 1 add $line
done < $file

Запустим natd на порту 8673

/sbin/natd -a 10.8.1.6 -p 8673

Зарулим все ip из таблицы 1 в VPN

lan="192.168.0.0/24" #локалка
vpnip="10.8.1.6" #ip vpn интерфейса
vpngw="10.8.1.7" #vpn шлюз
ipfw add divert 8673  ip from ${lan},${vpnip} to table\(1\)
ipfw add fwd ${vpngw}  ip from ${vpnip} to table\(1\)
ipfw add divert 8673  ip from table\(1\) to ${vpnip}
2019   Freebsd   ipfw   nat   table

Почему не работает USB на гребенке 13 pin OrangePi R1 и возможно на OrangePi Zero(Но это не точно)

Разработчики armbian считают что если разъем не представлен на плате, а представлен на гребенке, то по умолчанию он должен быть отключен. И если вы подключите устройство USB к соответствующим документации пинам или подключите плату типа этой

то вы можете с удивлением обнаружить, что USB не работает. Разберемся как его включить.
Чтобы сконфигурировать оборудование при загрузке ОС в armbian используются файлы DTB начиная с ядра 4.9.
OrangePi R1 сейчас использует файл sun8i-h2-plus-orangepi-zero.dtb
На данный момент этот файл находится в /boot/dtb/
Разработчики armbian не исключают что путь и имя файла может изменится, так что если что пробуем другие файлы dtb.
Идем в каталог /boot/dtb и бекапим файл на всякий случай.

cd /boot/dtb
cp sun8i-h2-plus-orangepi-zero.dtb sun8i-h2-plus-orangepi-zero.dtb.bak

Устанавливаем device-tree-compiler и переводим dtb в удобный для редактирования формат

apt install device-tree-compiler
dtc -b 0 -O dts -I dtb -o sun8i-h2-plus-orangepi-zero.dts sun8i-h2-plus-orangepi-zero.dtb

Теперь нужно открыть sun8i-h2-plus-orangepi-zero.dts любым текстовым редактором и найти там все usb порты и usb шины и изменить у них

status = "disabled";

на

status = "okay";

После редактирования собираем файл обратно в dtb

dtc -b 0 -O dtb -I dts -o sun8i-h2-plus-orangepi-zero.dtb sun8i-h2-plus-orangepi-zero.dts

Теперь перезагружаемся, смотрим lsusb и пробуем подключать устройства к usb.

2018   armbian   orangepi

Проблема с wifi карточками MT7601U в Debian 9.

NetworkManager сети видит, но не может к ним подключиться. Пишет что соединение разорвано.
Карточка выглядит примерно так:

148f:7601 Ralink Technology, Corp. MT7601U Wireless Adapter

А чтобы все заработало достаточно выполнить:

ln -s /dev/null /etc/systemd/network/99-default.link

Восстановление поврежденных innodb таблиц

При повреждении innodb таблиц мускуль не стартует, что создает определенные сложности для ремонта таблиц.
Чтобы запустить мускуль нужно вписать в my.cnf

innodb_force_recovery = 1
innodb_purge_threads = 0

Затем стартуем mysql. Он запустится в режиме в котором таблицы можно читать, но нельзя редактировать. И делаем дамп всех баз

mysqldump -u root -p --all-databases > dump.sql

Теперь идем в каталог /var/lib/mysql и удаляем там все каталоги кроме mysql и performance_schema, файлы ib_logfile* и ibdata* тоже сносим.
Теперь убираем из my.cnf

innodb_force_recovery = 1
innodb_purge_threads = 0

И рестартуем mysql в нормальном режиме.
Теперь вернем все базы обратно

cat dump.sql | mysql -u root -p
2018   innodb   mariadb   mysql   mysqldump

Скрипт установки virtualbox с веб-интерфейсом на сервер

Скрипт устанавливает и настраивает virtualbox + phpvirtualbox. После работы скрипта можно сразу приступать к разворачиванию виртуалок. Скрипт выполняет все что описано в этой статье до пункта «Установка виртуальной машины». Также генерирует новый самоподписанный сертификат, работа с phpvirtualbox происходит по протоколу https.
Скрипт работает на:
ubuntu 14.04, 16.04
debian 8, 9
Устанавливать нужно на чистую систему.

wget https://raw.githubusercontent.com/petranikin/vbinst/master/vbinst
bash vbinst

Скрипт начнет установку сразу после запуска. По окончанию работы он сообщит url, логин и пароль для доступа в phpvirtualbox, сохраните их.

Автоматическое добавление новых доменов на slaveDNS(bind9)

Скрипт смотрит в конфиг named.conf на мастере на наличие новых доменов. И при появлении новых доменов добавляет их в named.conf на slave сервере. Написан на питоне.
На мастер сервере нужно создать пользователя и добавить его в группу bind, чтобы у него были права на чтение named.conf. Также на master нужно разрешить трансфер зон.

allow-transfer { ip-slave_сервера; };

На slave сервере нужно настроить ssh авторизацию по ключам с master сервером для этого юзера.
Затем получаем сам скрипт и перенесем его в /usr/bin

git clone https://github.com/shmulya/zonefetch
mv zonefetch/fetch.py /usr/bin/fetch.py

Правим там переменные:
MASTERIP — ip master сервера(можно указать несколько серверов в формате [’ip1’,’ip2’])
REMOTE_USERNAME — юзер master сервера у которого есть права на чтение named.conf
PATH_TO_MASTER_ZONEFILE — файл с зонами на master
PATH_TO_SLAVE_ZONEFILE — каталог для файлов с зонами на slave

Скрипт пишет зоны в файлы вида /etc/bind/ip.conf, например для master с ip — 192.168.0.1 это будет /etc/bind/192.168.0.1.conf.
Эти файлы нужно создать предварительно и добавить соответствующие инклуды в /etc/named.conf, например:

include "/etc/bind/192.168.0.1.conf";

В конце добавим скрипт в крон примерно так

*/5 * * * * /usr/bin/python /usr/bin/fetch.py >> /var/log/zonefetch.log 2>&1
2017   bind   debian   DNS

Стандартное ядро в OVH

В OVH по умолчанию ставится модифицированное датацентром ядро, в котором нет многих нужных модулей. И некоторое ПО не работает. Например virtualbox не запускается с ошибкой типа:

ERROR ../libkmod/libkmod-module.c:1638 kmod_module_new_from_loaded: could not open /proc/modules: No such file or directory

К тому же ядро в образах ДЦ зачастую уже «протухшее».

Чтобы все заработало как надо, нужно поставить стандартное ядро из реп.
Смотрим какие ядра есть у нас в репозиториях

# apt search linux-image

Выбираем стандартное ядро stable и устанавливаем.

# apt install linux-image-3.16.0-4-amd64 linux-headers-3.16.0-4-amd64

Затем в /etc/default/grub правим диррективу GRUB_DEFAULT чтобы сервер грузился с нашего ядра.
Делаем

update-grub

и ребутимся

Если все работает правильно, ядро OVH можно вообще удалить.

2017   debian   Kernel   ovh   ubuntu   virtualbox
Ранее Ctrl + ↓