Linux : mdadm raid 1 : resize md устройств : изменить размер

Как изменить размер файловой системы на программном raid 1 (mdadm) при переносе на диски большего объема

Вытаскиваем физически второй диск, загружаем сервер в rescue linux с внешнего диска и затем проводим операции на первом диске

# mdadm --stop /dev/md0
# mdadm --stop /dev/md1
# mdadm --stop /dev/md2

Далее увеличиваем партицию

# parted

// для партиции sda3
// ключ -1 означает до максимального размера

resizepart
3
-1

Перезагрузка сервера для перезапуска md устройств (также в режим linux rescue livecd)

# reboot

Затем проводим увеличение устройства md2 на весь диск

# mdadm --grow /dev/md2 --size=max

После чего производится увеличение файловой системы

для ext4

# e2fsck -f /dev/md2
# resize2fs /dev/md2

для xfs
(проверка производится на отмонтированой файловой системе, resize на смонтированной)

# xfs_repair /dev/md2

# mount /dev/md2 /mnt
# xfs_growfs /mnt

Убеждаемся что все работает
Меняем второй диск
Добавляем в raid
Не забываем поставить на второй диск загрузчик grub

/etc/php.d/bitrixenv.ini

Часто бывает bitrixenv.ini обнуляется, бэкап этого конфига из чистой установки битрикса

; Set parameters required for proper Bitrix engine functioning.
; You can redefine parameters specified in this file
; by editing /etc/php.d/z_bx_custom_settings.ini

; Configure error processing
display_errors = On
error_reporting = E_ALL & ~E_NOTICE & ~E_WARNING

; Set some more PHP parameters
enable_dl = Off
short_open_tag = On
allow_url_fopen = On

; Change default values of important constants
max_input_vars = 10000
max_file_uploads = 100
max_execution_time = 300
post_max_size = 1024M
upload_max_filesize = 1024M
pcre.backtrack_limit = 1000000
pcre.recursion_limit = 14000
realpath_cache_size = 4096k
mysql.default_socket = /var/lib/mysqld/mysqld.sock
mysqli.default_socket = /var/lib/mysqld/mysqld.sock

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

; Configure PHP sessions
session.entropy_length = 128
session.entropy_file = /dev/urandom
session.save_path = "/tmp/php_sessions/www"
session.cookie_httponly = On

; Set directory for temporary files
upload_tmp_dir = "/tmp/php_upload/www"

sendmail_path = msmtp -t -i
date.timezone = Europe/Moscow
memory_limit = 256M

MySQL 5.7 : Сброс пароля root

mkdir /var/run/mysqld && chown mysql:mysql /var/run/mysqld

mysqld_safe --skip-grant-tables &

mysql> use mysql
mysql> update user set authentication_string=PASSWORD("passw0rd") where User='root';

FreeBSD : Linux : Перемонтировать файловую систему в rw

Перемонтировать файловую систему в r/w - на FreeBSD другой синтаксис

Linux:
mount -o remount,rw /

FreeBSD:
mount -o rw /
zfs set readonly=off zroot

VMmanager поиск образа диска по всем нодам

Поиск qemu-диска по всем нодам кластера

/usr/local/mgr5/sbin/mgrctl -m vmmgr vmhostnode | awk -F'=| ' {'print $6'} | grep -vE '10.7.22.1|10.7.22.7'| grep -Eo '[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}' | xargs -i ssh -i /usr/local/mgr5/etc/ssh_id_rsa root@{} "hostname && find /vm/ -name '*vm6504904*'"

strace подключиться к процессам пользователя

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

USER=opencod
while true; do a=$(ps aux | grep httpd | grep $USER | awk '{print $2}' | head -n 1); echo "DEBUG pid is "$a; if [ -z $a ] ; then echo -e 'no pid now\n'; else echo "pid is "$a; strace -p $a; fi; sleep 1; done

proftpd : bitrix vm : установка

yum install proftpd

echo 'PassivePorts 40900 40999' >> /etc/proftpd.conf
echo 'DefaultRoot ~' >> /etc/proftpd.conf

vipw
делаем копию пользователя bitrix с его uid, правим как надо имя (ftpuser и путь к домашней директории, шелл указываем /bin/date

passwd ftpuser

echo '/bin/date' >> /etc/shells

systemctl enable proftpd
systemctl start proftpd


firewall-cmd --permanent --add-port=20-21/tcp
firewall-cmd --permanent --add-port=40900-40999/tcp 
firewall-cmd --reload

msmtp : bitrix gt : bitrix turbo : настройка отправка почты

Хостинг провайдер firstvds предоставляет скоростной хостинг для сайтов на bitrix на шаблоне своей разработки под названием bitrix-gt который основан на nginx + php-fpm

Как настроить отправку почты через внешний почтовый сервер (в данном случае яндекс) используя msmtp - гарантированной рабочий пример конфигурации

Сначала необходимо установить msmtp

# yum install msmtp

Далее необходимо указать его в php.ini вместо sendmail

# grep msmtp /etc/php.ini
sendmail_path = /usr/bin/msmtp -C /etc/msmtprc -a default -t -i

Файл конфигурации должен иметь права под которым работает php-fpm

# ls -l /etc/msmtprc
-rw------- 1 apache apache 191 июн  6 08:18 /etc/msmtprc

Содержимое файла

# cat /etc/msmtprc
account default
logfile /usr/share/httpd/msmtp.log
host smtp.yandex.ru
port 587
from example@yandex.ru
auth on
user example@yandex.ru
password *****
tls on
tls_starttls on
tls_certcheck off

Файл логов должен находиться в домашней директории пользователя apache (в вышележащей не работает) и иметь права для записи

# ls -l /usr/share/httpd/msmtp.log
-rw-r--r-- 1 apache apache 10018 июн  6 08:20 /usr/share/httpd/msmtp.log

В некоторых случаях при отправке почты через gmail может быть необходимо разрешить Небезопасные приложения в настройках аккаунта https://myaccount.google.com/lesssecureapps

nginx php-fpm : чпу для joomla : rewrite

Так как .htaccess в php-fpm не работает, то достаточно одной строки чтобы работали ЧПУ ссылки в joomla:
try_files $uri $uri/ /index.php?args;

Пример виртуального хоста ниже:

server {
    server_name example.ru www.example.ru;
    charset UTF-8;
    index index.php index.html;
    disable_symlinks if_not_owner from=$root_path;
    include /etc/nginx/vhosts-includes/*.conf;
    include /etc/nginx/vhosts-resources/example.ru/*.conf;
    access_log /var/www/httpd-logs/example.ru.access.log;
    error_log /var/www/httpd-logs/example.ru.error.log notice;
    ssi on;
    set $root_path /var/www/default_user/data/www/example.ru;
    root $root_path;
    listen 10.11.10.11:80;
    location / {
        try_files $uri $uri/ /index.php?args;
        location ~ [^/]\.ph(p\d*|tml)$ {
            try_files /does_not_exists @php;
        }
    }
    location @php {
        fastcgi_index index.php;
        fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f webmaster@example.ru";
        fastcgi_pass unix:/var/www/php-fpm/default_user.sock;
        fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
        try_files $uri =404;
        include fastcgi_params;
    }
}


ISPmanager : поменять статус обновления доменов на ведомых серверах имен (в DNSmanager)

Иногда бывает ситуация, что ISPmanager передает домены в DNSmanager, но при этом в Доменные имена рисует треугольник с ошибкой - Состояние Не синхронизировано
Убрать этот статус и выставить его как синхронизированно можно удалив файл в каталоге  /usr/local/mgr5/var/slavestatus/

# rm -rf  /usr/local/mgr5/var/slavestatus/*

bitrix циклический редирект на самого себя (отключить проактивную защиту)

Иногда после переноса сайта на bitrix на php-fpm (например, на шаблон Bitrix GT) возникает у сайта циклический редирект на самого себя

Лечится отключением проактивной защиты в базе так как не срабатывает список разрешенных доменных имен

MariaDB [bitrix0]> DELETE FROM b_module WHERE `ID`='security' ;
Query OK, 1 row affected (0.001 sec)


Был случай что данный метод не помог, сайт все равно выдавал forbidden, отключил как

# diff /home/bitrix/www/bitrix/modules/main/include.php.bak /home/bitrix/www/bitrix/modules/main/include.php
290,291c290,291
< foreach (GetModuleEvents("main", "OnPageStart", true) as $arEvent)
< ExecuteModuleEventEx($arEvent);
---
> //foreach (GetModuleEvents("main", "OnPageStart", true) as $arEvent)

> // ExecuteModuleEventEx($arEvent);

MySQL : ошибка репликации : Last_SQL_Errno: 1396

Настроено по документации ruhighload.com репликация mariadb 10.3
На исходном сервере запущено в docker, на slave - на localhost

https://ruhighload.com/%D0%9A%D0%B0%D0%BA+%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B8%D1%82%D1%8C+mysql+master-slave+%D1%80%D0%B5%D0%BF%D0%BB%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8E%3F

Репликация у клиента остановилась с ошибкой:
Last_SQL_Errno: 1396
Last_SQL_Error: Error 'Operation ALTER USER failed for 'username'@'172.17.0.1'' on query. Default database: ''. Query: 'ALTER USER 'username'@'172.17.0.1' IDENTIFIED BY 'passwd''


Решение: прописать на slave в [mysqld]
slave-skip-errors = 1396

Причина: нет такого пользователя на slave, данный запрос вручную также не проходил
Пользователь репликации не может управлять пользователями БД

PHP geoip и browcap для альтернативной версии PHP 7.1 ISPmanager CentOS 7

yum groupinstall "Development Tools"
 

yum install GeoIP
yum install GeoIP-data
yum install GeoIP-devel

/opt/php71/bin/pecl install geoip-1.1.1
echo 'extension=geoip.so' > /opt/php71/etc/php.d/geoip.ini

mkdir /usr/local/browcap/
wget http://browscap.org/stream?q=PHP_BrowsCapINI -O /usr/local/browcap/php_browscap.ini

tail -3 /opt/php71/etc/php.ini
[browscap]
; http://php.net/browscap
browscap = /usr/local/browcap/php_browscap.ini

Ускоряем производительность в nginx proxy

При включении nginx в качестве front-end proxy проседают "попугаи". Это в целом естественно, так как есть задержка на передачу пакетов между nginx <-> apache, но можно несколько ускорить и выиграть до 15%

# vim /etc/nginx/nginx.conf

worker_processes  3;    #Numcores -1

events {
...
    use epoll;
}


http {
... 
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
...
}

# vim /etc/nginx/vhosts/www-root/example.com

location @fallback {
....
    proxy_buffering off;

...
}

postgresql сжать базу

Иногда так бывает, что сильно разрослась база данных postgresql и необходимо ее сжать, так как занимает слишком много места на диске (высвободить место которое свободно)

Делаем так

1. Бэкапим /var/lib/postgresql

2. Коннектимся в postgres

su postgres
psql


смотрим список баз

\l

подключаемся к базе

\c database_name

Затем выполняем сжатие баз

vacuum full verbose;

И также перестраиваем индексы

reindex database database_name;

Полезные ссылки:
https://stackoverflow.com/questions/769683/show-tables-in-postgresql
https://dba.stackexchange.com/questions/1285/how-do-i-list-all-databases-and-tables-using-psql
https://www.techonthenet.com/postgresql/vacuum.php

Правильный /tmp в ubuntu 16.04 desktop на ramdisk

sudo cp /usr/share/systemd/tmp.mount /etc/systemd/system/tmp.mount
sudo systemctl enable tmp.mount
sudo systemctl start tmp.mount

Nginx Unit + Bitrix настройка

Установка с модулем

yum install unit unit-php

Настраиваем nginx

[root@nginx-unit ~]# cat /etc/nginx/conf.d/default.conf
upstream unit_bitrix_urlrewrite {
    server 127.0.0.1:8090;
}
upstream unit_bitrix_direct {
    server 127.0.0.1:8091;
}

server {
    listen      80;

    root        /var/www/html/;

    index index.php;

    proxy_read_timeout 90s;
    client_max_body_size 64m;

    location / {
        try_files $uri @urlrewrite_php;
    }

    location @urlrewrite_php {
        proxy_pass       http://unit_bitrix_urlrewrite;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
    location ~* \.php$ {
        try_files        $uri =404;
        proxy_pass       http://unit_bitrix_direct;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}


Настраиваем unit

[root@nginx-unit ~]# cat bitrix.json
{
    "listeners": {
        "127.0.0.1:8090": {
         "application": "bitrix_urlrewrite"
        },

        "127.0.0.1:8091": {
          "application": "bitrix_direct"
        }
    },

    "applications": {
        "bitrix_urlrewrite": {
            "type": "php",
              "processes": {
               "max": 20,
               "spare": 5
              },
            "user": "apache",
            "group": "apache",
            "root": "/var/www/html/",
            "script": "bitrix/urlrewrite.php"
        },

        "bitrix_direct": {
            "type": "php",
              "processes": {
               "max": 20,
               "spare": 5
              },
            "user": "apache",
            "group": "apache",
            "root": "/var/www/html/",
            "index": "index.php"
        }
    }
}



Заливаем конфиг

curl -X PUT -d @bitrix.json --unix-socket /run/unit/control.sock http://localhost/config
 

Полезные ссылки

https://unit.nginx.org/howto/wordpress/
https://habr.com/ru/company/itsumma/blog/337346/
https://sysadmin.pm/nginx-unit/
Скрипт проверки соответствия Bitrix http://www.1c-bitrix.ru/download/files/scripts/bitrix_server_test.php
  

Примечание

На unit.nginx.org указано в action": { "pass" - такая конфигурация не проходит контроль на unit-1.8.0-1.el7.remi

Подключить swap swapfile на Linux

dd if=/dev/zero of=/swapfile bs=1M count=2048 ; chmod 600 /swapfile ; mkswap /swapfile ; swapon /swapfile ; echo '/swapfile none swap sw 0 0' >> /etc/fstab

Сбросить настройки бренда на default в ISPmanager

Бывают случаи когда (скажем после повреждения/удаления руками файлов) ломаются напрочь настройки бренда ISPmanager (панель грузится без стилей и никакие кнопки не работают, ссылки на логотип имеют вид 10.12.13.14:1500/manimg/orion/local_2bc1fc3e5e78/login-logo-ispmgr.svg  и такого файла нет по данной ссылки

Как исправить?

Очень просто - логинимся в COREmanager 10.12.13.14:1500/core и там будет нормальная тема оформления - далее в Настройки бренда и там можно для ispmgr сбросить настройки по умолчанию

Именуем интерфейсы по-старому eth0 вместо ens3

Как известно, сейчас Linux дистрибутивы именуют интерфейсы по новому алгоритму. Если хочется старых добрых eth0 / eth1, то это меняется в параметрах ядра net.ifnames=0


# vi /etc/default/grub

GRUB_CMDLINE_LINUX="net.ifnames=0"

# update-grub2

Отключить патчи meltdown и spectre

# vi /etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT="fsck.repair=yes elevator=deadline"

GRUB_CMDLINE_LINUX="noibrs noibpb nopti nospectre_v2 nospectre_v1 l1tf=off nospec_store_bypass_disable no_stf_barrier mds=off mitigations=off"

# update-grub2

Linux kernel 5.2 и выше достаточно только указать mitigations=off и будет отключать и все остальные опции


См. также: https://make-linux-fast-again.com

yum удалить пакет только из базы не трогая файлы ключ --justdb

rpm -e --justdb --nodeps packagename

2 раза на неделе требовалось, сначала недобновленная CentOS 7 где задвоились пакеты, потом апгрейд очень старой версии гермошлема где pkg-httpd переименовывался и конфликтовал

P.S.
в dpkg правками /var/lib/dpkg/status

bitrix php-fpm ЧПУ rewrite в ISPmanager

if (!-e $request_filename) {
       rewrite  ^(.*)$  /bitrix/urlrewrite.php last;
    }

Настроить CPU в performance mode для хорошей производительности

# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
# yum install cpupowerutils kernel-tools
# systemctl enable --now cpupower
# cpupower frequency-set --governor performance



Да будут колоситься попугаи на битрикс

В убунте
apt install cpufrequtils
for i in 0 1 2 3 4 5 6 7 8 9 10 11; do cpufreq-set -c $i -g performance; done
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
vi /etc/default/cpufrequtils
GOVERNOR="performance"

Настрока сети на VPU в Linux livecd sysrescd

Остановить NetworkManager и потом

ifconfig eth0 inet 228.228.228.228 netmask 255.255.255.255
route add 10.0.0.1 eth0
route add default gw 10.0.0.1

nginx не передает заголовок Last-Modified от Apache

указал в конфигурации nginx в /etc/nginx/nginx.conf в секции http
ssi_last_modified on;

и все стало работать, заголовок выдается

$ wget -O /dev/null -S site.ru 2>&1 | grep Last
  Last-Modified: Thu, 20 Dec 2018 13:14:47 GMT


Скрипт для генерации заголовка на php
<? header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); ?>

Открыть трафик только для IP адресов cloudflare

iptables -I INPUT -p tcp --dport 80 -j DROP

iptables -I INPUT -p tcp --dport 443 -j DROP

wget -O - https://www.cloudflare.com/ips-v4 | while read subnet; do iptables -I INPUT -s $subnet -j ACCEPT; done

Посмотреть что выдается верный SSL ключ при SNI для почты openssl s_client

openssl s_client -connect 10.10.10.10:993 -servername mail.example.com | grep DNS

openssl s_client -connect 10.10.10.10:465 | openssl x509 -noout -text | grep DNS: