bitrix агенты на cron

Чтобы перевести битрикс на cron с хинтов надо сделать следующее

# grep BX_CRONTAB_SUPPORT /home/bitrix/www/bitrix/php_interface/dbconn.php
define("BX_CRONTAB_SUPPORT", true);



# crontab -u bitrix -l
*/5 * * * * /usr/bin/php -f /home/bitrix/www/bitrix/modules/main/tools/cron_events.php

Firefox включение мультипроцессорного режима

about:support
проверяем, включено ли уже
Графа Multiprocess Windows (Многопроцессные окна)

about:config
и там добавить
browser.tabs.remote.autostart=true
browser.tabs.remote.force-enable=true
dom.ipc.processCount=16

Второй и третий параметр — принудительное включение (может быть проблема с несовместимыми расширениями) и максимальное число процессов для вкладок

Узнать, блокирует ли какое-то дополнение запуск режима с помощью переменной — extensions.e10sBlockedByAddons

Смотрим также:
http://www.opennet.ru/opennews/art.shtml?num=45746
https://geektimes.ru/post/279132/

wordpress показать время генерации страницы

Как в wordpress показать число запросов к базе данных / время генерации страницы / использование оперативной памяти?

Добавляем в footer.php вашей темы

SQL: <?php echo get_num_queries (); ?> | <?php timer_stop (1); ?> sec. | <?php echo round (memory_get_usage ()/1024/1024, 2) ?> Mb

Лечим таблицы MySQL

Легкий случай
mysqlcheck -Ar

Тяжелый случай (при остановленном MySQL)
find /var/lib/mysql -name '*.MYI' |xargs myisamchk -o -r

mariadb лимит на файлы поднять centos 7 systemd

mkdir /etc/systemd/system/mariadb.service.d/

printf '[Service]\nLimitNOFILE = infinity\nLimitMEMLOCK = infinity\n' >> /etc/systemd/system/mariadb.service.d/limits.conf

systemctl daemon-reload
systemctl restart mariadb

msmtprc для gmail в bitrix веб окружении

Файл /home/bitrix/.msmtprc для отправки почты из VMBitrix через google mail должен выглядеть следующим образом:

account default
logfile /home/bitrix/.msmtp.log
host smtp.gmail.com
port 587
from user@gmail.com
auth on
user user@gmail.com
password pa$$w0rd
tls on
tls_starttls on
tls_certcheck off



Смотрим также Настройка почты в Bitrix окружении

hint: Аналогично настраиваем для яндекса и mail.ru - используйте smtp.yandex.ru и smtp.mail.ru

Удалить rpm deb пакет без зависимостей

dpkg --remove --force-depends имяпакета

rpm -e --nodeps имяпакета

nginx подключаем ssl https в том же server чтобы его не дублировать

Иногда бывает нет необходимости делать копию server ради того, чтобы включить https для сайта, поэтому делать можно так

server {
listen 82.146.13.20;
listen 82.146.13.20:443 ssl;
server_name server.ru www.server.ru;
ssl_certificate /etc/nginx/ssl/server.ru.crt;
ssl_certificate_key /etc/nginx/ssl/server.ru.key;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";


Просто добавьте еще один listen указав для него ssl и путь к файлу сертификата+CA и к файлу ключа
Проверяем что Grade A — https://www.ssllabs.com/ssltest/
Набор шифров — https://cipherli.st/
ssl_protocols правильные уже давно стоят по-умолчанию, поэтому достаточно только указать что серверные шифры более приоритетнее чем клиентские и их список

Подключаем notebook к телевизору с управлением по VNC

Устанавливаем легковесный дистрибутив, например, хорошо работает Lubuntu с LXDE, берем стабильный LTS релиз 16.04 и включаем автологин в систему в LightDM (галочка автоматически входить в систему при установке)
Запишите логин и пароль пользователя на бумажку и приклейте на монитор

Устанавливаем ssh сервер (чтобы удаленно управлять)
sudo apt-get install openssh-server

Устанавливаем vnc сервер
sudo apt-get install x11vnc

Прописываем overscan чтобы изображение входило в экран (если телевизор сам не умеет) и запуск vnc сервера в ~/.xprofile
xrandr --output HDMI-0 --set underscan on >/dev/null 2>&1
x11vnc -dontdisconnect -noxfixes -shared -forever -nopw -bg >/dev/null 2>&1


Поскольку конфигурация выше подразумевает VNC без пароля, то если размещение будет не в DMZ, читайте мануал по x11vnc про парольную авторизацию.

После чего необходимо настроить вывод звука на HDMI порт, в Lubuntu нет pulseaudio и используется alsa

Обычно все прекрасно работает после правки ~/.asoundrc
pcm.!default = pcm.hdmi

Также существует утилита alsamixer в которой можно выбрать звуковую карту из списка

Timeouts в MySQL

Добавляем в /etc/my.cnf чтобы завершались залипшие запросы

connect_timeout=600
wait_timeout=600
interactive_timeout=600

Apache нагрузка подключения

Просмотр числа подключений на 80 порт

netstat -na --inet | grep ":80\ " | awk '{print $5}' | cut -d":" -f 1 | sort | uniq -c | sort -nr

ss -o '( dport = :http or sport = :http )' | awk '{print $6}' | cut -d : -f 1 | grep -v 'Address' | sort | uniq -c | sort -n

Установка netstat на CentOS 7

yum install net-tools

25 самых активных IP

cat /var/www/httpd-logs/*access.log | awk '{ print $1 ; }' | sort | uniq -c | sort -n -r | head -n 25

25 самых популярных URL

cat /var/www/httpd-logs/*access.log | awk '{ print $7 }' | sort | uniq -c | sort -rn | head -n 25

PHP Selector CloudLinux выбор версии PHP

Официальная документация: http://docs.cloudlinux.com/

Включить CageFS

# cagefsctl --enable user253696
# cagefsctl --force update


Посмотреть какие PHP есть

# cl-selector --list=php

Включить PHP нужной версии

# cl-selector --select=php --version 5.3 --user user2536967

Добавить расширение глобально (почему-то для существующих не добавляет даже force update)

# selectorctl --enable-extensions=zend_optimizer --version=5.2


Посмотреть какие расширения есть

# cl-selector --list-extensions=php --version 5.2

Включить для юзера

# selectorctl --enable-user-extensions=zend_optimizer --version=5.2 --user=user2533184


Изменяем какое-либо значение для пользователя
/usr/bin/piniset -r 'magic_quotes_gpc:off' -u user2536967

Если такое не срабатывает с ошибкой вида
ERROR:No ‘apc.shm_size’ option in white list!
то можно назначать редактированием файла конфига из под юзера по ssh:

su userXXXX
bash-4.1$ php --ini|grep parsed
Additional .ini files parsed: /opt/alt/php54/etc/php.d/alt_php.ini

vi /opt/alt/php54/etc/php.d/alt_php.ini

Удалить директорию в которой содержатся миллионы файлов, очистить каталог php сессий

Если find зависает на огромном числе файлов, то используйте функцию unlink, например, вот простой однострочник на perl

perl -e 'chdir "mod-tmp" or die; opendir D, "."; while ($n = readdir D) { unlink $n }'

Данная команда удаляет в среднем один миллион файлов в час.

При большой нагрузке на дисковую систему можно понизить приоритет i/o указав ionice -c2 -n7 вначале команды перед perl

Чтобы не забивался каталог сессиями следует произвести настройку в php.ini

session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 1440

PHP скрипт в режиме как CGI не работает дольше 60 секунд — Timeout waiting for output from CGI script

PHP скрипт не смотря на настройки max_execution_time в php.ini завершает свою работу через 60 секунд выдавая ошибку в лог-файл apache

Timeout waiting for output from CGI script /var/www/user/data/php-bin/php

Решение:
Необходимо прописать в /etc/httpd/conf/httpd.conf директиву

Timeout 300

(где 300 — число секунд которые сможет выполняться данный скрипт)
По-умолчанию в CentOS 7 эта директива не прописана и равна 60 секундам

Чтобы nginx (если используется) при этом не выдавал ошибку 502 следует также прописать в его конфигурации
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;

Как распаковать архив который создан при помощи isptar (архиватора который используется в ISPmanager)

/usr/local/mgr5/sbin/isptar -x F2016-10-18.www-root.tgz data/www/example.com/ -R backup/

Данная команда извлекает из архива за 18.10.2016 пользователя www-root каталог с файлами сайта example.com в папку backup

inputrc, tab и игнорирование регистра символов

Совет дня — используйте в консоли автодополнение с игнорированием между прописными и строчными буквами

$ echo "set completion-ignore-case on" >> ~/.inputrc

B итоге при автодополнении табом в cd documents будем попадать в Documents, попробуйте, это удобно

Файл /etc/inputrc используется Readline — библиотекой ввода и считывается при запуске Bash и большей частью других оболочек.

За более подробной информацией по редактированию файла inputrc , прочтите секцию Readline Init File на странице info bash. Также хорошим источником информации является info readline.

Перенос CentOS 6.8 на программный RAID1 mdadm

В данной статье пойдет речь как быстро перенести операционную систему CentOS 6 которая установлена на один жесткий диск на программный RAID на двух дисках (mdraid)

Руководств по переводу можно найти в сети много разных, однако, не все они «запускаются» с первого раза или являются неправильными (ситуация «делал все как написано и оно не работает»)

Также при использовании grub1 существует недостаток в связи с тем, что не всегда удается загрузиться в случае выхода из строя одного из дисков и необходимо в grub указывать root устройство правкой в загрузчке (root (hd0,0)) или же переставлять диск местами.
Это действительно издержки данной системы http://www.linux.org.ru/forum/admin/9417685?cid=9421016

Также, как показывает огромная практика различные вещи как LVM, разбивка на несколько разделов просто напросто не нужны, поэтому просто разбиваем на один раздел, swap же также сделаем в файле (тем самым будет преимущество в виде возможности менять его размер при необходимости)

И так, как же перенести CentOS 6 на программный RAID

Для этого подключаем второй чистый жесткий диск такого же объема (в системе он будет называться sdb) и разметим его используя fdisk

Всё по-умолчанию, единственное, что сделаем, так это отступим на один цилиндр сначала (разобьем со второго цилиндра) на случай если будет необходимость в будущем мигрировать на загрузчик grub2 так как он просто «не войдет» в один цилиндр

[root@centos6 ~]# fdisk /dev/sdb
Устройство не содержит ни верной таблицы разделов DOS, ни метки диска Sun, SGI или OSF
Building a new DOS disklabel with disk identifier 0x390ed2ea.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Предупреждение: неверный флаг 0x0000 таблицы разделов 4 будет исправлен записью

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').

Команда (m для справки): n
Действие команды
e расширенный
p основной раздел (1-4)
p
Номер раздела (1-4): 1
Первый цилиндр (1-1044, default 1): 2
Last цилиндр, +цилиндры or +size{K,M,G} (2-1044, default 1044):
Using default value 1044

Команда (m для справки): t
Выбранный раздел 1
Шестнадцатеричный код (введите L для получения списка кодов): fd
Системный тип раздела 1 изменен на fd (Автоопределение Linux raid)

Команда (m для справки): a
Номер раздела (1-4): 1

Команда (m для справки): w
Таблица разделов была изменена!

Вызывается ioctl() для перечитывания таблицы разделов.
Синхронизируются диски.


Теперь создаем raid 1 на этом разделе

[root@centos6 ~]# mdadm --create /dev/md0 --metadata=0.90 --level=1 --raid-disks=2 missing /dev/sdb1
mdadm: array /dev/md0 started.


Обязательно использовать формат метаданных 0.90, так как с более новыми grub 0.97 не работает на /boot разделе

Формируем конфигурационной файл mdadm /etc/mdadm.conf
[root@centos6 ~]# mdadm --detail --scan > /etc/mdadm.conf

Внесите правку в /boot/grub/device.map — добавьте туда наш sdb как hd1
[root@centos6 ~]# vi /boot/grub/device.map
(hd0) /dev/sda
(hd1) /dev/sdb


Форматируем устройство md0 в ext4

[root@centos6 ~]# mkfs.ext4 /dev/md0

Монтируем новосозданный /dev/md0 в /mnt

[root@centos6 ~]# mount /dev/md0 /mnt

Копируем все данные на него (предварительно следует остановить на машине все сервисы которые могут писать файлы на диск, такие как mysql, веб-сервер)

[root@centos6 ~]# yum -y install rsync

[root@centos6 ~]# rsync -avP --exclude='/dev/*' --exclude='/proc/*' --exclude='/sys/*' --exclude='/mnt/' / /mnt


Правим /mnt/etc/fstab делая там только монтирование md0, монтировать следует по UUID- смотрим его командой blkid

[root@centos6 ~]# blkid | grep md0

[root@centos6 ~]# cp /mnt/etc/fstab /etc/fstab_bak

[root@centos6 ~]# vi /mnt/etc/fstab
UUID=d00711db-48b2-4735-9cdb-7080742797c4 / ext4 defaults 1 1
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0


Вносим правки в /mnt/boot/grub/grub.conf в строку kernel выставляя правильное устройство (root=) и убирая rd_NO_DM rd_NO_MD и аналогичные параметры, я рекомендую убрать все лишние опции чтобы видеть вывод при загрузке

root у нас на md0, смотрим его uuid командой blkid | grep md0
Желательно указывать также rd_MD_UUID — его можно посмотреть в /etc/mdadm.conf
Путь к kernel и initrd теперь начинается с /boot/ — также не забываем это исправить
Устройство root следует указать (hd1,0)

[root@centos6 ~]# cp /mnt/boot/grub/grub.conf /mnt/boot/grub/grub.conf_bak

[root@centos6 ~]# vi /mnt/boot/grub/grub.conf
default=0
timeout=5
hiddenmenu
title CentOS 6 (2.6.32-642.el6.x86_64)
root (hd1,0)
kernel /boot/vmlinuz-2.6.32-642.el6.x86_64 ro root=UUID=d00711db-48b2-4735-9cdb-7080742797c4 rd_MD_UUID=b9baa472:faeb3a7c:6e31c5b6:310ac827
initrd /boot/initramfs-2.6.32-642.el6.x86_64.img


Пересобирите initramfs на новом диске отключив в нем поддержку LVM (у нас система ставилась по-умолчанию с lvm и не нужно чтобы он монтировался)

[root@centos6 ~]# dracut --nolvmconf --mdadmconf -f /mnt/boot/initramfs-`uname -r`.img `uname -r`

Пропишите grub bootcode на второй диск

grub> root (hd1,0)
root (hd1,0)
Filesystem type is ext2fs, partition type 0xfd
grub> setup (hd1)
setup (hd1)
Checking if "/boot/grub/stage1" exists... yes
Checking if "/boot/grub/stage2" exists... yes
Checking if "/boot/grub/e2fs_stage1_5" exists... yes
Running "embed /boot/grub/e2fs_stage1_5 (hd1)"... 27 sectors are embedded.
succeeded
Running "install /boot/grub/stage1 (hd1) (hd1)1+27 p (hd1,0)/boot/grub/stage2 /boot/grub/grub.conf"... succeeded
Done.
grub> quit


Если в системе включен selinux, то необходимо создать файл /.autorelabel в новой системе

[root@centos6 /]# touch /mnt/.autorelabel

Иначе не сможете войти в систему с ошибкой Unable to get valid context for root

Теперь необходимо перезагрузить сервер и выбрать в BIOS загрузку со второго жесткого диска
* после выполнения relabel система автоматически перезагрузится, следите за загрузкой

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

[root@centos6 ~]# mount
/dev/md0 on / type ext4 (rw)

[root@centos6 ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb1[1]
8377856 blocks super 1.0 [2/1] [_U]

[root@centos6 ~]# cat /proc/mounts


Также не должно показывать никаких подмонтированых lvm разделов

Если вы видете примонтированый lvm — значит вы загрузились с первого, а не второго диска, перезагрузите сервер и убедитесь что именно нужный диск выбран

Просто отлично, система загружена и работает с нужного нам устройства

Теперь осталось немного — сделать копию разделов с диска sdb на диск sda

В моем случае на сервере был LVM и вначале необходимо удалить устройства

[root@centos6 ~]# lvremove /dev/mapper/vg_centos6-lv_root
Do you really want to remove active logical volume lv_root? [y/n]: y
Logical volume "lv_root" successfully removed
[root@centos6 ~]# lvremove /dev/mapper/vg_centos6-lv_swap
Do you really want to remove active logical volume lv_swap? [y/n]: y
Logical volume "lv_swap" successfully removed


Затем обнулить таблицу разделов
[root@centos6 ~]# dd if=/dev/zero of=/dev/sda bs=512 count=1

И сделать копию таблицы разделов

[root@centos6 ~]# sfdisk -d /dev/sdb | sfdisk --force /dev/sda

Команда должна выполниться без ошибок, именно поэтому важно предварительно почистить диск

Добавляем диск в зеркало

[root@centos6 ~]# mdadm --add /dev/md0 /dev/sda1
mdadm: added /dev/sda1


Убеждаемся что зеркало собирается
[root@centos6 ~]# cat /proc/mdstat

Ставим загрузчик на sda (тут может потребоваться немного подождать пока синхронизируется начальная часть зеркала)

[root@centos6 ~]# grub
grub> root (hd0,0)
root (hd0,0)
Filesystem type is ext2fs, partition type 0x83
grub> setup (hd0)
setup (hd0)
...
...
grub> quit
quit


Также создаем swap в файле, скажем 2Gb (это уже опционально)

[root@centos6 ~]# dd if=/dev/zero of=/swapfile bs=2048 count=1048576
[root@centos6 ~]# mkswap /swapfile
[root@centos6 ~]# swapon /swapfile


Подключаем его в /etc/fstab

[root@centos6 ~]# echo '/swapfile none swap sw 0 0' >> /etc/fstab

Можно перезагрузиться чтобы убедиться что все работает

После чего меняем в /boot/grub/grub.conf строку
root (hd1,0)
на
root (hd0,0)

Чтобы если в сервере останется один диск система могла загрузиться

Работы на этом завершены

flashcache и reboot - проверять в sysctl

Перед ребутом когда используется flascache необходимо проверять что для него включен fast_remove в sysctl

# sysctl -a | grep fast_remove
dev.flashcache.ata-SAMSUNG_MZ7LM960HCHP-00003_S1YHNX0H403040+md2.fast_remove = 1

Что настроить в ~/.ssh/config для улучшения работы

Казалось бы в конфигурации openssh-клиента практически всё работает как положено. Однако, все же есть опции, которые заинтересуют многих, хотя бы первая из них

$ cat ~/.ssh/config
StrictHostKeyChecking no
Compression yes
ServerAliveInterval 60
ServerAliveCountMax 2


StrictHostKeyChecking no - будут автоматически добавляться ключи в ~/.ssh/known_hosts и не надо будет отвечать каждый раз yes. При смене ключа оповещение сохраняется

Compression yes - включает компрессию передачи, улучшается отзывчивость работы, особенно если выводятся большие объемы данных

ServerAliveInterval 60 - каждую минуту будут отсылаться keepalive пакеты (по умолчанию не отсылаются значение 0), тем самым улучшается стабильность соединения (особенно если вы работаете за NAT и наблюдается такая проблема)

ServerAliveCountMax 2 - отсылать 2 пакета (по умолчанию 3) и если все же нет связи, через 120 секунд разрывать соединение

grub2 на centos 6

yum install gcc bison flex make
wget https://ftp.gnu.org/gnu/grub/grub-2.00.tar.gz
tar xf grub-2.00.tar.gz
cd grub-2.00
./configure
make
make install


/usr/local/sbin/grub-mkconfig -o /boot/grub/grub.cfg
/usr/local/sbin/grub-install /dev/sda


yum remove grub

Мной также был собран rpm-пакет для быстрой установки и отсутствия необходимости компиляции. Установка производится в каталог /opt/grub2. Пакет доступен в репозитории CentOSUP или по прямой ссылке:

yum install https://centosup.ispsystem.info/repo/x86_64/grub2-2.00-1.el6.x86_64.rpm


/opt/grub2/sbin/grub-mkconfig -o /boot/grub/grub.cfg
/opt/grub2/sbin/grub-install /dev/sda


Если у кого-либо есть репозиторий с grub2 для CentOS 6 или готовые .spec-файлы прошу поделиться в комментариях, поскольку интересует вопрос интеграции в систему вместо grub 0.99

Как собирать rpm — инструкции по сборке rpm пакетов

Способ 1. В "чистом" окружении используя mock

yum install mock
adduser mock -g mock
su - mock
mkdir {src,rpms,srpms}


Распаковываем исходники в src

Билдим srpm
mock --buildsrpm --spec=src/software/software.spec --sources=src/software --resultdir=srpms

Компиляем rpm
mock --rebuild srpms/software.1.2.3.el6.src.rpm --resultdir=rpms

В rpms получаем готовые пакеты


Способ 2. В "боевом" окружении (захламляя ОС ненужными пакетами и не исключая их влияние) используя rpmbuild


yum install rpm-build gcc make

mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
echo '%_topdir %(echo $HOME)/rpmbuild' > ~/.rpmmacros



Сорцы кладем в ~/rpmbuild/SOURCES
.spec файл в ~/rpmbuild/SPECS

И компилируем сразу бинарный билд

cd ~/rpmbuild/SPECS

rpmbuild -bb software.spec

Перенос операционной системы образом диска по сети (dd over ssh)

Иногда возникают случаи когда нет возможности переместить физически образ диска, например, при использовании rbd, lvm или каких-либо еще случаях. Как же быть в этой ситуации?

Загрузите оба сервера в linux rescue по сети с livecd, поднимите сеть и обеспечьте ssh-доступ

На новом сервере на который выполняем перенос надо выполнить:

ssh root@исходныйсервер "dd if=/dev/vda bs=64k | gzip -1 -" | gunzip - | pv | dd of=/dev/vda bs=64k

P.S. pv - monitor the progress of data through a pipe
dd в GNU Coreutils 8.24+ (Ubuntu 16.04) включает в себя опцию status=progress
Про оптимальный размер blocksize можно почитать тут http://stackoverflow.com/questions/6161823/dd-how-to-calculate-optimal-blocksize

Мониторинг нагрузки на дисковую систему

atop -c1 -dl
iotop

Хороший online scanner сайтов на вирусы

https://sitecheck.sucuri.net/
Free Website Malware and Security Scanner

Радует тем, что реально пробегает по всем страницам сайта и находит вирусы и seo-spam также и прочую заразу.
Дальше можно погрепать скрипты по самплу кода и исправить.

В логах веб-сервера запросы видны как
162.216.19.183 - - [12/Nov/2016:22:35:18 +0300] "GET /?page_id=2509 HTTP/1.1" 200 273407 "http://sucuri.net" "Mozilla/5.0 (compatible; MSIE 8.0; MSIE 9.0; Windows NT 6.0; Trident/4.0; InfoPath.1; SV1; .NET CLR 3.8.36217; WOW64; en-US)"

Не включается мониторинг сервиса в меню Службы в ISPmanager 5

Если все сервисы мониторятся, а у какого либо сервиса, например, у MySQL в Debian 7 упорно не включается мониторинг работы, то возможно проблема в базе данных сервисов

Решить можно следующим образом:

cd /usr/local/mgr5/var/
/opt/ispsystem/sbin/sqlite3 services.db


sqlite> .explain on
sqlite> select * from services;


И делаем off чтобы было у всех одинаково:

sqlite> update services set is_mon='off';

xfreerdp параметры командной строки и скриптик

Поскольку rdesktop устаревает и есть проблемы с раскладками приходится пользоваться xfreerdp
В качестве "обертки" лучше всего использовать remmina — он установлен по-умолчанию в Ubuntu 16.04 и использует библиотеки от freerdp

Но иногда удобнее пользоваться консольной утилитой (которая использует те же библиотеки)

sudo apt-get install freerdp

Синтаксис имеет немного странный вид https://github.com/FreeRDP/FreeRDP/wiki/CommandLineInterface

В итоге просто пишем скрипт ~/bin/rdp

#!/bin/sh
xfreerdp +clipboard /size:1024x768 /u:Administrator /p:$2 /v:$1


и запускаем как

rdp адрес пароль

zombie на openvz и метод нахождения процесса который зомбофицировался

Иногда бывает сбой на виртуализации OpenVZ и в итоге не удается остановить контейнер с кодом 7

[root@msk-node ~]# vzctl stop 29834 --fast
Killing container ...
Child 134833 exited with status 7
Unable to stop container


Как найти виновника

[root@msk-node ~]# ps auxwww| awk '{print($2)}'| xargs vzpid| grep 29834
684597 29834 systemd
684599 29834 kthreadd/29834
684600 29834 khelper/29834

[root@msk-node ~]# ps axuw | grep 684597
root 684597 0.0 0.0 0 0 ? Zsl Nov04 2:56 [systemd]


В данном случае виноват systemd внутри контейнера

Как добиться grade A+ от sslchecker

Чтобы ssl checker https://www.ssllabs.com/ssltest/ выдавал качество A+ надо сделать следующие настройки:
https://cipherli.st/
зеркало https://dl.ispsystem.info/mirrors/cipherli.st/

raw to qcow convert конвертирование

qemu-img convert -f raw -O qcow2 vm2505705 vm2505705.qcow

Оптимизация настроек PHP под Bitrix

Для всех систем, только файл будет в другом месте в Debian-like
Создаем файл /etc/php.d/00-bitrix.ini

display_errors = On
error_reporting = E_ALL & ~E_NOTICE & ~E_WARNING

; Set some more PHP parameters
date.timezone = Europe/Moscow
enable_dl = Off
short_open_tag = On
allow_url_fopen = On

; Change default values of important constants
max_input_vars = 10000
max_execution_time = 300
post_max_size = 256M
upload_max_filesize = 256M
memory_limit = 256M
pcre.backtrack_limit = 1000000
pcre.recursion_limit = 10000
realpath_cache_size = 4096k

; Utf-8 support
mbstring.func_overload = 2
mbstring.internal_encoding = UTF-8

; OpCache settings
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=100000
opcache.validate_timestamps=1
opcache.revalidate_freq=0
opcache.fast_shutdown=1


; php 7
pcre.jit=0

Nginx error 502 upstream sent too big header while reading response header from upstream

Nginx может выдавать ошибку 502 и упорно писать в логи upstream sent too big header

2016/11/04 22:17:08 [error] 29848#29848: *57721 upstream sent too big header while reading response header from upstream, client: 168.112.124.141, server: example.ru, request: "GET /index.php?page=search&Region=2 HTTP/1.1", upstream: "http://127.0.0.1:8080/index.php?index.php?page=search&Region=2", host: "example.ru"

Исправляется прописыванием в секцию http /etc/nginx/nginx.conf
proxy_buffers 8 16k;
proxy_buffer_size 32k;


(по умолчанию 4 8/16)

Но не больше
proxy_buffers 8 32k;
proxy_buffer_size 64k;

rpm висит и не отдает никаких данных - rpm hangs

Часто бывает после того как на сервере заканчивается место перестает выполняться команда rpm -qa (зависает) и не запускается в итоге ISPmanager
Лечение проблемы rpm hangs выполняется удалением некоторых файлов

rm /var/lib/rpm/__db.*

Как сделать detach screen и подключиться к нему

Иногда бывает необходимо подключиться к забытому или зависшему screen который находится в состоянии Attached

Это можно сделать следующей командой:

screen -d -R айди_скрина

Получаем список вида IP домен для прописывания в /etc/hosts через ISPmanager API

/usr/local/mgr5/sbin/mgrctl -m ispmgr webdomain | awk -F'ipaddr=|name=| ' '{print $(NF-1), $2, "www." $2}'

Нужно при переносах сайтов для проверки


sqlite3 /usr/local/mgr5/etc/ispmgr.db 'select t1.value, t2.name from webdomain_ipaddr t1 inner join webdomain t2 ON t1.webdomain = t2.id;' | awk -F'|' '{print $1, $2, "www." $2}'

wordpress поменять адрес url сайта

WordPress хранит в базе адрес сайта в таблице wp_options и следовательно надо чтобы там было правильно прописано иначе будет кривой редирект, прямо адрес прописан с протоколом

update wp_options set option_value='http://example.com' where option_name='home';
update wp_options set option_value='http://example.com' where option_name='siteurl';


Также может потребоваться правка в wp-config

define('WP_HOME','http://example.com');
define('WP_SITEURL','http://example.com');

Выставляем правильного владельца на файлы и директории сайта

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

find . -type d -exec chmod 755 '{}' \;
find . -type f -exec chmod 644 '{}' \;

Простой конфиг для xdebug чтобы писал xdebug.log

[Xdebug]
zend_extension = "/usr/lib64/php/modules/xdebug.so"
xdebug.remote_enable = on
xdebug.remote_log = "/var/log/xdebug.log"

xdebug.remote_autostart = on
xdebug.remote_handler = dbgp
xdebug.remote_port = 9001
xdebug.remote_server = localhost
xdebug.remote_mode = req

; Most users won't want a hard coded idekey. More on this later.
xdebug.idekey = netbeans-xdebug
output_buffering = off

Настройка MySQL 5.7 на Ubuntu 16.04 под Bitrix

В MySQL 5.7 по-умолчанию включен innodb_file_per_table=1 и с ним вы нормальных «попугаев» по базе данных не получите

Поэтому первым делом делаем дамп базы, выключаем это в /etc/mysql/my.cnf и заливаем обратно

Ниже приведен конфиг на котором только что поставленный битрикс на core i5 выдает под 100 попугаев

root@ubuntu:~# cat /etc/mysql/my.cnf
#
# The MySQL database server configuration file.
#
# You can copy this to one of:
# - "/etc/mysql/my.cnf" to set global options,
# - "~/.my.cnf" to set user-specific options.
#
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

#
# * IMPORTANT: Additional settings that can override those from this file!
# The files must end with '.cnf', otherwise they'll be ignored.
#

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

[mysqld]
sql_mode = ""
performance-schema = false
table_open_cache = 1024
thread_cache_size = 4
query_cache_size = 32M
query_cache_type = 1
tmp_table_size = 128M
max_heap_table_size = 128M
#innodb_file_per_table = 0
innodb_buffer_pool_size = 1024M
innodb_flush_log_at_trx_commit = 2
#innodb_buffer_pool_instances = 2
innodb_flush_method = O_DIRECT
transaction-isolation = READ-COMMITTED

innodb-strict-mode = OFF

Больше там практически ничего не надо крутить что бы ни говорили различные тюнеры — приведет только к потери производительности, можно только увеличивать innodb_buffer_pool_size если база большая и памяти свободной много

Также требуется увеличить лимиты на число открытых файлов (иначе table_open_cache может просто не отрабатывать)

mkdir /etc/systemd/system/mysql.service.d/
printf '[Service]\nLimitNOFILE = infinity\nLimitMEMLOCK = infinity\n' >> /etc/systemd/system/mysql.service.d/limits.conf


И перезапустить mysql
systemctl daemon-reload
systemctl restart mysql


Также в рекомендую менять только
innodb_buffer_pool_size — для InnoDB
key_buffer_size — для MyISAM
Чтобы база входила в оперативную память, но при этом значение это должно быть меньше чем всего ram на сервере
Настройки всего остального в MySQL часто приносят прямо противоположный результат

Bitrix: pcre.recursion_limit — Замечание. Возможны проблемы в работе сдлинными строками из-за системных ограничений

Битрикс при тестировании конфигурации выдает, что необходимо ulimit -s unlimited для веб-сервера
Решаем проблему следующим образом
CentOS 7:
Создать каталог /etc/systemd/system/httpd.service.d, в нем создаем файл start.conf с содержимым:
[Service]
LimitSTACK=infinity


и перечитать конфигурацию systemd и перезапустить веб-сервер
systemctl daemon-reload
systemctl restart httpd


CentOS 6
Отредактировать файл /etc/init.d/httpd и дописать в него ulimit -s unlimited в секцию start ()

start() {
echo -n $"Starting $prog: "
ulimit -s unlimited
LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch ${lockfile}
return $RETVAL
}


Перезапустить веб-сервер apache
/etc/init.d/httpd restart


update: при использовании PHP 7 надо указать в php.ini pcre.jit=0

WordPress работа по протоколу https (редирект на https с использованием nginx)

Как сделать в wordpress корректный редирект с http на https если используется nginx в качестве front-end чтобы не было бесконечного редиректа

Первый вариант: настройка WordPress

В Nginx к остальным параметрам проксирования добавить строчку:
proxy_set_header X-Forwarded-Protocol "https";

Затем в wp-config.php добавить следующую проверку:

// Проверка https
if( !empty( $_SERVER['HTTP_X_FORWARDED_PROTOCOL'] ) ) {
$_SERVER['HTTPS'] = 'on';
}


Этот код нужно добавлять перед строкой
require_once(ABSPATH . ‘wp-settings.php’);

После этого WordPress понял, что работает по HTTPS, и начал отдавать контент правильно.

Второй вариант: настройка Apache

В Nginx к остальным параметрам проксирования добавить строку:
proxy_set_header X-Forwarded-Proto $scheme;

Затем в виртуалхосте Apache добавить строку:
SetEnvIf X-Forwarded-Proto https HTTPS=on

Этот вариант так же помогает WordPress правильно угадать протокол.

Источник https://kel.mn/wordpress-https/

Тест скорости записи жесткого диска утилитой dd

sync; dd if=/dev/zero of=tempfile bs=1M count=1024; sync

Файл закешировался, проверить скорость его чтения из буфера можно так:

dd if=tempfile of=/dev/null bs=1M count=1024

очищаем буфер, проверяем скорость чтения с диска:

sysctl -w vm.drop_caches=3
dd if=tempfile of=/dev/null bs=1M count=1024


update
говорят правильно мерить скорость записи с ключем oflag=direct
dd bs=1M count=256 if=/dev/zero of=test oflag=direct

Закрыть доступ к xmlrpc в wordpress

Закрываем доступ к xmlrpc.php файлу в wordpress

# cat .htaccess
<Files xmlrpc.php>
Order deny,allow
deny from all
</Files>

Bitrix веб окружение проверка системы ругается на сокеты - Работа с сокетами - Ошибка! Не работает

Bitrix веб окружение проверка системы ругается на сокеты — Работа с сокетами — Ошибка! Не работает

Причины:

1. Домен не резолвится на сервере или резолвится на 127.0.0.1 и запросы не попадают в нужный виртуалхост
Правим /etc/hosts чтобы резолвился на нужный внешний IP адрес сервера

2. Зашли в админку по https, а на сервере стоит самоподписанный/кривой SSL сертификат. Заходить по http или поставить правильный и правильно сертификат.
Проверить работу сертификата можно на https://www.ssllabs.com/ssltest/

Bitrix вебокружение настройка https и редирект http на https

SSL в битрикс веб окружении слушает nginx
Следовательно правим
vi /etc/nginx/ssl/cert.pem

и пишем в него

ключ
сертификат
цепочка


и затем
service nginx restart

А чтобы сделать редирект на https (дабы сайт всегда работал по безопасному протоколу) создадим файл /home/bitrix/www/.htsecure

touch /home/bitrix/www/.htsecure

Редирект на PHP средствами PHP скрипта

<?php
header('HTTP/1.1 301 Moved Permanently');
header('Location: http://mail.example.com/roundcube/');

exit();

?>

Улучшаем работу WiFi 2.4GHz в условиях коллизий от кучи точек вокруг

Когда вокруг куча точек wi-fi и не удается уйти на свободный канал (в сети 2.4GHz лучше использовать не пересекающиеся каналы 1,6,11 и, запрещенный не всеми поддерживающийся 14 (техника apple не поддерживает выше 11, остальные девайсы если сделаны для России — максимум 13й)) то можно улучшить качество сети изменением размера пакетов

Порог фрагмента: 2306 (по-умолчанию 2346)
Порог RTS: 2307 (по-умолчанию 2347)
Интервал Beacon: 50 (по-умолчанию 100)

Теперь ваши пакетики будут отличаться от пакетиков соседей и информацию о сети будет точка рассылать каждые 50ms, а не 100

Перепрошивка wifi модуля Intel 5100 ABG в 5100 AGN под Linux

Попал тут в руки старый ноутбук который не поддерживает 802.11n, что весьма печально, так как у меня на моем роутере включен только этот стандарт, а низкоскоростные отключены.
На windows есть драйвера которые «разблокируют» 802.11n, на Linux же придется перешивать
Как же это сделать? Очень просто, есть проект iwleeprom который все сделает за нас. Прошивка выполнялась под Ubuntu 16.04.1

wget https://github.com/0x90/iwleeprom/archive/master.zip
unzip master.zip
cd iwleeprom-master
make


Для работы с /dev/mem потребуются права суперпользователя

sudo -s

Теперь делаем бэкап EEPROM

./iwleeprom -o eeprom.orig

(выбираем карточку, у меня одна, нажимаем 1)

И патчим карточку (все будет сделано автоматически)

./iwleeprom -p

(выбираем карточку также нажав 1)

После reboot видим (в dmesg) что наш 5100 ABG превратился в 5100 AGN
* Всё на ваш страх и риск, как любая прошивка "железа"

Управление автозагрузкой сервисов в Debian и Ubuntu

Управление загрузкой сервисов с системой инициализации upstart

Проверить статус (отображение статуса всех сервисов)
service --status-all
Добавить в автозапуск
update-rc.d имя_сервиса defaults
Удалить из автозапуска
update-rc.d -f имя_сервиса remove

Управление загрузкой сервисов с системой инициализации systemd

Проверить статус (отображение статуса всех сервисов)
systemctl list-units --type service --all
Проверить включен ли сервис
systemctl is–enabled имя_сервиса
Добавить в автозапуск
systemctl enable имя_сервиса
Удалить из автозапуска
systemctl disable имя_сервиса

Как отключить окно оповещений об обновлениях в Ubuntu и не перезагружаться при обновлениях ядра

В Ubuntu довольно надоедливая система оповещений о наличии обновлений или необходимости перезагрузки после установки обновлений

Я же предпочитаю обновляться вручную при помощи команд

apt-get update && apt-get dist-upgrade

Как же отключить систему оповещений?

# cd /etc/xdg/autostart/
# sudo sed -i "/^Hidden=/{ s/false/true/ ; q }; $ aHidden=true" update-notifier.desktop


А чтобы было всегда свежее ядро без необходимости перезагрузки используйте Ksplice. Для Desktop версий Ubuntu и Fedora доступ к его репозиторию бесплатный.

После его установки необходимо включить автоматические обновления чтобы было меньше оповещений

# vi /etc/uptrack/uptrack.conf
autoinstall = yes

Кэширование и сжатие в .htaccess для Google PageSpeed

Google PageSpeed https://developers.google.com/speed/pagespeed/insights/ не проходит проверку на сжатие и кэширование

Параметры, которые ему нужны


# cat .htaccess


AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/javascript text/css application/x-javascript image/svg+xml

ExpiresActive On
ExpiresDefault "access plus 7 day"

Настройка почты в Bitrix веб окружении

Почта в битрикс веб-окружении отправляется через msmtp

Чтобы настроить запускаем /root/menu.sh (само запускается при входе) и там жмем

1. Create Management pool of server

и потом после создания pool когда уже в меню будет много менюшек

6. Manage sites in the pool
4. Change email settings on site

Enter site name(default) or 0 for exit:
Email is not configured for site=’default’

Enter from address (ex. bob@example.org): noreply@site.ru
Enter server address or DNS (127.0.0.1):
Enter server port (25):
Do you want to use SMTP authentication on the 127.0.0.1:25? (N|y)
Do you need TLS enable for 127.0.0.1:25 (n|Y): n

То есть ввести только email и выключить TLS

Конфиг будет выглядить как


# cat /home/bitrix/.msmtprc

# smtp account configuration for default
account default
logfile /home/bitrix/msmtp_default.log
host 127.0.0.1
port 25
from noreply@site.ru
keepbcc on
auth off


Проверить работу почты можно в админке Битрикса — Инструменты — Проверка системы

Тюнингуем Apache в CentOS 7

В CentOS 7 apache по дефолту жрет много памяти, делаем так

vi /etc/httpd/conf/httpd.conf

И добавляем в конец файла

Timeout 45
KeepAlive Off

StartServers 2
MinSpareServers 4
MaxSpareServers 8
ServerLimit 50
MaxClients 50
MaxRequestsPerChild 400

Обновить MySQL 5.1 до 5.5 в CentOS 6 не трогая PHP из REMI

Используйте пакет compat-mysql51 https://blog.remirepo.net/pages/English-FAQ#mysql


rpm -e --nodeps mysql-libs

yum install http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

yum --enablerepo=remi install compat-mysql51 mysql mysql-server

service mysqld restart
mysql_upgrade

3proxy не ротейтит логи

Проверьте и исправьте права на каталог куда он пишет их, в данном случае на /var/log/3proxy/

# chown nobody:nobody /var/log/3proxy

При этом, изначально файл лога создается с правами root, от чего я не заметил неверных прав и даже спросил автора сей программы, однако после ротации уже пишется с владельцем выставленном в конфиге

А вот и конфиг который прост как автомат калашникова и всегда работает как надо и безопасен так как не под root

users user:CL:password

daemon

log /var/log/3proxy/3proxy.log D
rotate 30

auth strong
proxy -64 -a

setgid 99
setuid 99


Также после установки для безопасности от локальных юзеров сделайте
chmod 600 /etc/3proxy.cfg
chown root:root /etc/3proxy.cfg

ну и права как я писал выше
chmod 750 /var/log/3proxy
chown nobody:nobody /var/log/3proxy



если 3proxy не стартует - значит старая версия 3proxy без поддержки ipv6 и надо в конфиге просто указывать proxy -a

Управление аппаратным RAID Adaptec через консоль

Источник: https://wiki.hetzner.de/index.php/Adaptec_RAID_Controller/ru

Adaptec аппаратный RAID-контроллер

Утилита arcconf служит для управления контроллером из командной строки.

asm (Adaptec Storage Manager) — графическая утилита.

Как можно проверить состояние аппаратного RAID?

Для проверки статуса Adaptec RAID-контроллера должна быть установлена утилита командной строки arcconf. В Rescue-системе она установлена по умолчанию.

Состояние RAID можно получить следующей командой:

arcconf GETCONFIG 1 LD

Состояние жестких дисков можно получить следующей командой:

arcconf GETCONFIG 1 PD

так как при этом выводится масса дополнительной информации, рекомендуется отфильтровать вывод. Например:

arcconf getconfig 1 pd|egrep "Device #|State\>|Reported Location|Reported Channel|S.M.A.R.T. warnings"

Как создать аппаратный RAID?

Вне зависимости от того, требуется ли изменить существующий RAID, или создать новый (после установки RAID-контроллера), его необходимо настроить. Первое, что нужно сделать, это удалить диски из их логических дисков:

arcconf DELETE LOGICALDRIVE

например, так:

arcconf DELETE 1 LOGICALDRIVE 0

или так (для всех дисков):

arcconf DELETE 1 LOGICALDRIVE ALL

Теперь можно создать новый RAID:

arcconf CREATE LOGICALDRIVE [Options] [Channel# ID#]

создание RAID-0 (максимальный размер, диски на Channel 0, Port 0 и 1, без подтверждения):

arcconf CREATE 1 LOGICALDRIVE MAX 0 0 0 0 1 noprompt

создание RAID-1 (максимальный размер, диски на Channel 0, Port 0 и 1, без подтверждения):

arcconf CREATE 1 LOGICALDRIVE MAX 1 0 0 0 1 noprompt

создание RAID-5 (максимальный размер, диски на Channel 0; Port 0, 1 и 2, без подтверждения):

arcconf CREATE 1 LOGICALDRIVE MAX 5 0 0 0 1 0 2 noprompt

создание RAID-10 (максимальный размер, диски на Channel 0; Port 0, 1, 2 и 3, без подтверждения):

arcconf CREATE 1 LOGICALDRIVE MAX 10 0 0 0 1 0 2 0 3 noprompt

JBOD (одиночный диск на Channel 0, Port 2):

arcconf CREATE 1 JBOD 0 2 noprompt

Как при помощи arcconf запустить REBUILD для RAID, находящегося в состоянии DEGRADED?

Для начала необходимо проверить, все ли жёсткие диски определяются:

arcconf GETCONFIG 1 PD

Если нет, то можно запустить ручное сканирование:

arcconf RESCAN 1

состояние RAID должно отображаться как degraded:

root@rescue ~ # arcconf getconfig 1 ld
Controllers found: 1
----------------------------------------------------------------------
Logical device information
----------------------------------------------------------------------
Logical device number 0
Logical device name : Device 0
RAID level : 1
Status of logical device : Degraded
Size : 1428470 MB
Read-cache mode : Enabled
Write-cache mode : Enabled (write-back)
Write-cache setting : Enabled (write-back)
Partitioned : No
Protected by Hot-Spare : No
Bootable : Yes
Failed stripes : No
Power settings : Disabled
--------------------------------------------------------
Logical device segment information
--------------------------------------------------------
Segment 0 : Inconsistent (0,0) 9VS38R1D
Segment 1 : Present (0,1) 9VS38RKE


Может быть необходимо удалить метаданные:

arcconf TASK START 1 DEVICE 0 0 CLEAR

Так как обычно ‘automatic failover’ включен, rebuild должен уже запуститься. В противном случае жёсткий диск добавляется в RAID как Hot-Spare. Rebuild запускается автоматически:

arcconf SETSTATE 1 DEVICE 0 0 HSP LOGICALDRIVE 0

После rebuild RAID-массива на Hot-Spare диск этот диск продолжает быть помечен как Hot-Spare. После замены сбойного диска данные автоматически переносятся на новый диск. С помощью arcconf можно удалить метку Hot-Spare и назначить новый (заменённый) диск как новый Hot-Spare. Подробная информация расположена на сайте Adaptec Adaptec KB5117

Например, настройка Device 0;0 на Controller 1 с ‘Hot-Spare’ на ‘Ready’:

arcconf setstate 1 device 0 0 rdy

Как можно считать значения SMART на жестких дисках в RAID

С помощью модуля sg можно обратиться непосредственно к жёстким дискам на контроллере. Например, для первого жёсткого диска:

smartctl -d sat -a /dev/sg1

В зависимости от операционной системы может потребоваться обновление smartmontools или ядра.

Как восстановить массив

Если массив обнаруживается в состоянии failed или offline, есть шанс форсировать его активацию или создать новый массив без потери данных. Однако, при этом восстановление не гарантируется. Нельзя исключить и потерю данных

При определённых обстоятельствах включение массива online может оказаться возможным с помощью следующей команды:

arcconf SETSTATE LOGICALDRIVE OPTIMAL [ADVANCED

Пример для первого массива первого контроллера выглядел бы так:

arcconf SETSTATE 1 LOGICALDRIVE 0 OPTIMAL ADVANCED nocheck noprompt

Разрешить root логин в PhpMyAdmin в Ubuntu 16.04 в MySQL 5.7

Разрешить

update mysql.user set plugin='mysql_native_password' where user='root';
flush privileges;


Запретить

update mysql.user set plugin='auth_socket' where user='root';
flush privileges;


Поговаривают, что при этом авторизоваться после этого не удается и надо сбрасывать пароль, гугл предлагает просто переставить сразу пароль таким образом

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test';

См также https://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html