Rose debug info
---------------

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

Связаться со мной:
Позднее Ctrl + ↑

Виртуалки в РФ

Пол планеты сидит на карантине, из-за этого возросла нагрузка на магистральные узлы связи, поэтому сейчас правильным решением будет размещать свои проекты на территории РФ.
Виртуальные серверы в РФ по выгодным ценам и с быстрой активацией можно приобрести по этой ссылке.
На них также доступен мой шаблон vestacp-multiphp, в котором доступен выбор версии php от 5.3 до 7.3. Указывайте в комментариях к заказу vestacp-multiphp.

Скидка на первый платеж по промокоду covid-19  — 50%!!!!! на виртуальные и выделенные серверы в России.

P.S. Сидите дома. Не болейте. ^^

Сборка php 7 на Centos 6

Пример configure

./configure  --prefix=/opt/php73 --with-config-file-path=/etc --with-mysql-sock=/var/lib/mysql/mysql.sock --with-mysqli=mysqlnd --with-pdo-mysql --with-pdo-sqlite --enable-calendar --enable-sysvsem --enable-sysvshm --enable-sysvmsg --enable-bcmath --with-bz2 --enable-ctype --enable-shmop --enable-soap --enable-mbstring --enable-soap --enable-sockets --enable-wddx --enable-exif --enable-ftp --enable-pdo --enable-pcntl --enable-mbregex --with-gettext --with-iconv --with-mhash --with-gd --with-curl --with-libxml-dir=/usr --with-jpeg-dir=/usr --with-png-dir=/usr --with-freetype-dir=/usr --with-zlib --without-libzip --enable-mbstring --with-xsl --with-openssl  --enable-ftp --enable-exif --enable-cgi --enable-zip --with-readline --enable-simplexml --enable-intl --with-pcre-regex=/opt/pcre2 --with-config-file-scan-dir=/opt/php73/etc

Для его успешного выполнения ставим devel пакеты на основе получаемых ошибок.
Pcre2 собираем из исходников, т.к нужной версии в репах centos 6 нет.

# wget ftp://ftp.pcre.org/pub/pcre/pcre2-10.30.tar.gz
# tar -xf pcre2-10.30.tar.gz
# cd pcre2-10.30
# ./configure --prefix=/opt/pcre2                       \
            --docdir=/usr/share/doc/pcre2-10.30 \
            --enable-unicode                    \
            --enable-pcre2-16                   \
            --enable-pcre2-32                   \
            --enable-pcre2grep-libz             \
            --enable-pcre2grep-libbz2           \
            --enable-pcre2test-libreadline      \
            --disable-static    
# make
# make install

После успешного configure для php делаем make и make install

UPD: Если у вас в wordpress не отправляется почта через контактную форму функцией mail(), то pcre2 качаем версии 10.33.

Мультиверсионность php c VestaCP на выделенных серверах и VDS

На наших выделенных серверах и VDS теперь доступен шаблон с VestaCP и версиями php от 5.3 до 7.3. Установка через техподдержку.
Проходите по ссылке или кликайте на баннер вверху страницы, в комментариях к заказу напишите что вам нужен шаблон с vestacp-multiphp.

Добавление squashfs live образа в PXE

Нужно примонтировать live iso образ на сервере. Найти в нем файлы initrd, vmlinuz и squashfs. Скопировать их в каталог PXE и прописать в pxelinux.cfg/default. В debian-10-live у меня получилось вот так.

label debian-live
  menu label debian-live
  kernel http://192.168.0.1/images/live/vmlinuz-4.19.0-5-amd64
  append initrd=http://192.168.0.1/images/live/initrd.img-4.19.0-5-amd64 boot=live fetch=http://192.168.0.1/images/live/filesystem.squashfs root=/dev/ram0

PXE сервер на FreeBSD

В конфиг dnsmasq добавляем

dhcp-option-force=66,192.168.0.1   # ip сервера
dhcp-option-force=67,gpxelinux.0   # загрузчик

Перезапускаем dnsmasq

service dnsmasq restart

Создаем каталог для pxe

mkdir /usr/local/pxe
mkdir /usr/local/pxe/pxelinux.cfg

Устанавливаем tftp

pkg install tftp-hpa

В /etc/inetd.conf добавляем

tftp  dgram  udp  wait  root  /usr/local/libexec/in.tftpd  in.tftpd -p -s /usr/local/pxe

Вписываем

echo 'inetd_enable="YES"' >> /etc/rc.conf

Запускаем inetd

/etc/rc.d/inetd start

Скачиваем и распаковываем syslinux

fetch http://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-4.05.tar.gz
tar -xf syslinux-4.05.tar.gz

Копируем файлы

cd syslinux-4.05
cp gpxe/gpxelinux.0 /usr/local/pxe/
cp com32/menu/menu.c32 /usr/local/pxe/
cp com32/menu/vesamenu.c32 /usr/local/pxe/
cp com32/modules/reboot.c32 /usr/local/pxe/
cp com32/modules/chain.c32 /usr/local/pxe/
cp memdisk/memdisk /usr/local/pxe/

Образы будем грузить по http, т.к tftp очень медленный. Ставим nginx.

pkg install nginx

Создаем каталог с образами и симлинк на него в nginx

mkdir  /usr/local/pxe/images/
ln -s /usr/local/pxe/images/ /usr/local/www/nginx/images

Вписываем

echo 'nginx_enable="YES"' >> /etc/rc.conf

И стартуем

service nginx start

Заливаем наши образы в /usr/local/pxe/images/

В файле /usr/local/pxe/pxelinux.cfg/default создаем конфиг меню с нашими образами. У меня получился такой

ui menu.c32
menu title PXE Boot Menu

label boothdd
  menu label Boot from Hard Drive
  localboot 0
 
label memtest
  menu label memtest
  kernel memdisk
  initrd http://192.168.0.1/images/Memtest86-4.3.7.iso
  append iso raw

label mfsbsd
  menu label mfsbsd
  kernel memdisk
  initrd http://192.168.0.1/images/mfsbsd-12.0-RELEASE-amd64.iso
  append iso raw

label debian-10
  menu label debian-10
  kernel http://192.168.0.1/images/debian10/linux
  append vga=normal initrd=http://192.168.0.1/images/debian10/initrd.gz  --

label rescue
  menu label rescue
  kernel http://192.168.0.1/images/debian10/linux
  append vga=normal initrd=http://192.168.0.1/images/debian10/initrd.gz  rescue/enable=true --

linux и initrd.gz для установщика debian можно взять тут
Теперь можно пробовать грузится с PXE, если все сделали правильно то появится меню с выбором загружаемого образа.

Не стартует mysql в centos 6 после обновления.

После обновления mysql до 5.7 он не стартует с ошибкой

[ERROR] Fatal error: mysql.user table is damaged. Please run mysql_upgrade.

Добавляем в my.cnf в секцию [mysqld]

skip-grant-tables

С этим параметром стартуем mysql и делаем mysql_upgrade

service mysqld start
mysql_upgrade

Затем убираем skip-grant-tables из конфига и рестартим mysql

service mysql restart

Mysql должен запустится без ошибок

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

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

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

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

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

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

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

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 в телеграм.

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

Этот способ устарел. Лучше делать вот так

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

#!/bin/sh

rm /root/bin/reestr.txt
/usr/local/bin/wget -O - https://api.reserve-rbl.ru/api/v2/ips/json|tr ',' '\n'|tr -d '"'|tr -d ']'|tr -d '['  > /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}
Ранее Ctrl + ↓