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

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

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

Почему не работает 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.

Проблема с 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

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

Здесь есть роли ansible для установки 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

Стандартное ядро в 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 можно вообще удалить.

Менеджер версий php для Debian/Ubuntu.

Скрипт мультиверсионности мной более не поддерживается, т.к в новых версиях дебиан все сложнее автоматизировать установку старых версий php. Поэтому php 5 собирайте руками. Либо проходите по ссылке.

Выкладываю мой скрипт который поможет установить несколько версий php из исходных кодов на ваш сервер. Скрипт делался в первую очередь для Debian и проверялся на Debian 8 x64. Но работает и на Ubuntu. Удобно с помощью скрипта поддерживать актуальные версии php на сервере с вестой, т.к скрипт умеет автоматически обновлять шаблоны весты при сборке.
На debian 7/8 с моими флагами установки без проблем собираются php 5.2 и выше.
На ubuntu 14.04/16.04 по умолчанию собираются php 5.3 и выше. 5.2 при компиляции валится с ошибкой. Поэтому если нужен 5.2 юзайте дебиан.
Что делает скрипт:

  1. При запуске спрашивает какие версии php требуется собрать(версию нужно вводить полностью. Например 7.1.2, а не 7.1. Можно ввести несколько версий через пробел), создавать ли на бинарник php-cgi симлинк в /usr/bin для быстрого доступа. Проверяет наличие на сервере панели vestacp. Если находит её, то спрашивает создавать ли шаблон web для каждой версии.
  2. При первом запуске спрашивает, нужно ли ставить зависимости. Если вы откажетесь от установки зависимостей, то вам нужно их установить самостоятельно. Иначе при сборке вы получите ошибки. При последующих запусках этот шаг пропускается. Нужно понимать что скрипт старается поставить все возможные зависимости, но в разных дистрибутивах могут использоваться разные пакеты или при использовании кастомных флагов компиляции может потребоваться что-то доустановить.
  3. Парсит http://php.net/downloads.php и http://php.net/releases/ на наличие bz2 архива с исходниками указанной юзером версии php. Если находит, скачивает и распаковывает исходники в /opt/php/src.


    Также можно положить архивы с иходниками в /opt/php/src/bzips, тогда скрипт не будет их скачивать.
  4. Конфигурит, по умолчанию с моими параметрами компиляции(подойдут для большинства пользователей). Собирает.

    Тем кто хочет использовать свои параметры компиляции обязательно кликнуть сюда
    Можно свои параметры конфигурирования положить в файл /opt/php/options. Если скрипт находит этот файл, то он использует его для конфигурирования. Свой файл можно сделать на основе моего. Скрипт заменяет version в файле конфигурирования на текущую собираемую версию. Это сделано для того чтобы скрипт автоматом создавал свой каталог для каждой версии. Если вы собираете например версию 5.3.29 и в вашем файле конфигурирования указано prefix=/opt/php/php-version, то это по сути равно prefix=/opt/php/php-5.3.29. При сборке нескольких версий одновременно эту фичу нужно использовать чтобы не собирать все версии в один каталог.
  5. При необходимости создает симлинк и шаблон для весты. Если создает темплейты для весты, то проверяет включен ли модуль cgi в апаче. Если модуль не включен, то включает его.

Запустить скрипт очень просто

# git clone https://github.com/petranikin/mgrvphp.git
# cd mgrvphp
# bash mgrvphp

Немного скриншотов

Перемещение окон между мониторами в xfce4 сочетанием клавиш

Xfce почему-то из коробки не умеет перемещать хоткеями окна между мониторами. Не между рабочими столами, а именно физическими мониторами. Это очень не удобно, особенно если вторым монитором используется телевизор. И если окно открылась на телике, то приходится его включать и тащить окно мышью. Кошмар в общем. Исправить этот досадный недостаток пришлось с помощью утилиты xdotool.
Устанавливаем её.

$ sudo apt install xdotool

С помощью неё можно перетащить активное окно на определенную координату
Для перемещения окна на первый монитор я использовал

xdotool getactivewindow windowmove --sync 100 100

Для перемещения окна на второй монитор

xdotool getactivewindow windowmove --sync 2000 100

Надеюсь всем понятно что в первой команде коодрдинаты 100 100, а во второй 2000 100 по оси X и оси Y соответственно.
Нужно на эти команды повесить хоткеи. Для этого надо зайти в Настройки — Клавиатура, вкладка «Комбинации клавиш». Я поставил Ctrl-1 для перемещения окна на 1 монитор, и Ctrl-2 для перемещения окна на второй монитор.

При выходе из ждущего режима пропадает соединение OpenVPN

Сделаем автоматический перезапуск OpenVPN на системах с systemd. В debian 9 создаем файл /etc/systemd/system/resume.openvpn.service с содержимым:

[Unit]
Description=Run openvpn after suspend
After=suspend.target

[Service]
ExecStart=/usr/sbin/service openvpn restart

[Install]
WantedBy=suspend.target

Затем выполняем

# systemctl enable resume.openvpn.service

Теперь при выходе из ждущего режима будет автоматически перезапускаться OpenVPN.

Шаблон VDS с VestaCP c мультиверсионностью PHP

На наших VDS теперь доступен готовый шаблон Debian 8 с предустановленной панелью VestaCP и уже собранными версиями PHP от 5.2 до 7.1 включительно. Версию PHP можно выбирать свою для каждого сайта. Заказать VDS можно по этой ссылке. После выдачи VDS нужно зайти в панель управления VDS, кликнуть «Переустановка VDS» и выбрать шаблон «debian-8-X86_64-vestacp_multiphp»

Пароль пользователя admin в весте, совпадает с паролем root.
Ранее Ctrl + ↓