centos 7 : roundcube выдает ошибку Server Error (OK) при открытии папки

В лог при этом пишется Notice: No suitable function found for UTF-8 encoding in /var/www/kdn570/html/program/lib/Roundcube/rcube_charset.php on line 276

Решение править скрипт https://www.roundcubeforum.net/index.php?topic=23440.0 у меня не заработало

Помогло обновление с 1.1.10 (штатно в репозитории CentOS 7) до 1.3.3

bitrix выдает ошибку ERR_CONTENT_DECODING_FAILED

bitrix при открытии сайта выдает в браузере ошибку (а скажем через wget нормально открывается)

ERR_CONTENT_DECODING_FAILED
Ошибка в типе содержимого. Страница, которую вы пытаетесь просмотреть, не может быть показана, так как она использует неверную или не поддерживаемую форму компрессии

Лечение: прописать

define('BX_COMPRESSION_DISABLED',true);

в bitrix/php_interface/init.php (dbconf.php если старый и нет такого файла)

Поставить свежее ядро в Debian 8

Самый простой способ установить ядро в Debian 8 из Debian 9 - это использовать debian-backports

echo 'deb http://deb.debian.org/debian jessie-backports main contrib non-free' >> /etc/apt/sources.list
apt-get update
apt-get -t jessie-backports install linux-image-amd64


Получим более-менее свежее ядро 4.9, которое, в отличие от 3.16, работает, скажем с LSI MegaRAID 9361-4i (с новой прошивкой этот контроллер переименовался в AVAGO MegaRAID) 

Посчитать объем баз данных MySQL

Посчитать объем баз

 

SELECT table_schema "Data Base Name",

sum( data_length + index_length ) / 1024 / 1024 "Data Base Size in MB",
sum( data_free )/ 1024 / 1024 "Free Space in MB"
FROM information_schema.TABLES
GROUP BY table_schema;

 

Размеры всех таблиц в БД

SELECT
table_schema as `Database`,
table_name AS `Table`,
round(((data_length + index_length) / 1024 / 1024), 2) `Size in MB`
FROM information_schema.TABLES
ORDER BY (data_length + index_length) DESC;


Студент 20 с небольшим лет попал под автобус, и — насмерть. Очнулся на том свете. В кресле напротив увидел кого-то, похожего на человека, но светящегося изнутри инфракрасным светом. -Где я? — Ты в аду, сынок. Но не бойся заранее, здесь на самом деле намного лучше, чем описывают там, на земле. Вот ты в жизни курил? Студент опускает глаза: — Да, курил. — Ну значит, по понедельникам для тебя будет праздник. Это у нас день курения. Выбор — огромный, от трубки и махорки до дорогих сигар и кальяна. Курим весь понедельник, до поздней ночи. И пофигу астма и рак — ты ведь уже умер! А выпить ты любил? Студент опускает голову: — Не без этого... — У-у! Тогда готовься к праздникам по вторникам! Этот день мы пьем весь, с самого утра, от пива и легких вин до самых крепких напитков: самогона и спирта. И плевать на печень: ты ведь уже умер! А как насчет наркотиков? Студент краснеет: — Да, бывало! — Что ж, повеселишься по средам! У нас это день наркотиков, от самых легких, до героина и тяжелой синтетики. Хочешь — колись, хочешь — кури, и не бойся ни ломки, ни передоза, ни ментов — ты ведь уже умер! А с женщинами? Студент оживляется: — А как же! — Тогда оторвешься по четвергам! Это у нас день повального ceкcа. Дело в том, что женщин в аду в 10 раз больше, чем мужчин, и у тебя будет супервыбор! А о сифилисе там всяком даже не вспоминай — ты ведь уже умер! А не был ли ты голубым? Студент вскидывается: -Нет, что вы! — М-да-ссс... Вот пятницы тогда станут для тебя настоящим адом! anekdotov.net

Оптимизация картинок по cron через jpegoptim и optipng

## Optimization jpg
15 22 * * *     /usr/bin/find /var/www/*/data/www/ -type f -iregex '.*\.jpe?g' -mtime -1 -exec /usr/bin/jpegoptim --preserve --quiet {} \;
 

## Optimization png
15 23 * * *     /usr/bin/find /var/www/*/data/www/ -type f -iregex '.*\.png' -mtime -1 -exec /usr/bin/optipng --preserve --quiet {} \;

bitrix ошибка : Mysql query error: Unknown or incorrect time zone: 'Europe/Moscow' (400)

bitrix выдает ошибку при открытии сайта на CentOS 7
Mysql query error: Unknown or incorrect time zone: 'Europe/Moscow' (400)

Лечение - создать базу timezone в mysql сервере:
# mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql mysql

Windows 2016 GPT EFI deploy из под Linux rescue

В статье пойдет речь о том, как подготовить образ windows для развертывания из под Linux systemrescuecd

Производите установку VirtualBox, он позволяет осуществлять загрузку с EFI
Используйте iso-образ windows SW_DVD9_Win_Svr_STD_Core_and_DataCtr_Core_2016_64Bit_English_-3_MLF_X21-30350.ISO и Linux диск systemrescuecd-x86-5.1.1.iso

Создаем виртуальный сервер в virtualbox с диском в 20 Gb (система умещается в 13, а в архиве и того в 5, но потребуется запас для запуска на новом сервере, под дополнительные драйвера или программы если будете их устанавливать)

В настройках виртуального сервера ставите галочку на вкладке Система - Включить EFI

Загружаетесь с iso-образа, он нормально запустится с EFI загрузчика

На этапе когда инсталлятор выведет окно разметки жесткого диска необходимо будет нажать shift+f10 и в окне cmd которое откроется конвертировать диск в GPT

diskpart
sel dis 0
clean
convert gpt
exit


После чего просто нажмите Далее и система поставится на диск с GPT разметкой

Запомните пароль администратора сервера и включите доступ по RDP - включается в Server Manager - Local Server - Remote desktop - Enabled

Установите скрипт через политики безопасности который будет запускаться при старте системы (без логина пользователя в отличие от классической автозагрузки в реестре через HKLM)
Для этого запустите

gpedit.msc -
Computer configuration - Windows Settings - Scripts (Startup/Shutdown) - Startup - c:\run.cmd

Если есть необходимость в дополнительных сетевых драйверах или программах - установите их

Теперь корректно выключите виртуальный сервер и загрузите его с systemrescuecd (кстати, он тоже поддерживает efi boot)

После чего снимите образ через dd over ssh на какой-либо свой внешний сервер который будет хранилищем попутно сжимая его через gzip

dd if=/dev/sda bs=64k | pv | gzip | ssh storage@storage.com "cat > /storage/windows2016"

Сжатый образ будет занимать 5 Gb

Затем пишем скрипт установки сервера который будет выкачивать образ по ssh c storage.com и распаковывать на новом сервере и производить настройку статического ip адреса и активацию ОС, я привожу его максимально упрощенную версию
Также его можно использовать и для windows 2012 с отличиями в запуске netsh

#!/bin/bash

ssh storage@storage.com dd if=/storage/windows2016 bs=64k | gunzip | pv | dd of=/dev/sda bs=64k


blockdev --rereadpt /dev/sda
sleep 5


mount /dev/sda4 /mnt

cat <<EOF > /mnt/run.cmd
@echo off
SetLocal EnableExtensions EnableDelayedExpansion


Reg Add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce /V ClearDll /D "cmd /C Del /F /Q C:\run.cmd" /f

for /f "delims=" %%a in ('netsh interface ip show interface ^| find /i "1500" ^| find /i " connect"') do (set "string=%%a")

for /f "tokens=5,6" %%a in ('echo %string%') do (set "name=%%a %%b")

netsh interface ipv4 set address name="%name%" static `ifconfig | grep 'inet ' | grep -v 127.0.0.1 | awk '{print $2}'` `ifconfig | grep 'inet ' | grep -v 127.0.0.1 | awk '{print $4}'` `netstat -nr |awk -F ' ' '{print $2}' |egrep -v 'IP|Gateway|0.0.0.0'`
netsh interface ipv4 set dnsservers name="%name%" static 8.8.8.8 primary

timeout 10 > NUL

%windir%\system32\slmgr.vbs -ipk XXXX-XXXX-XXXX-XXXX
%windir%\system32\slmgr.vbs -ato

del c:\run.cmd
EOF

unix2dos /mnt/run.cmd

umount /mnt

Далее для развертывания системы просто загружаем исходный сервер в Linux rescue и выполняем это скрипт

После успешного копирования образа перезагружаемся и включаем в BIOS загрузку с UEFI

После загрузки Windows 2016 необходимо зайти в Управление дисками и там увеличить размер диска c: до необходимого вам

Известные баги скрипта:
Если интерфейс на сервере один и не сменит имя (это маловероятно так как windows найдет все равно новую сетевую карту) (скажем будет называться "Ethernet"), то скрипт настроить его не сможет, так как будет искать "Ethernet " поскольку пробел в (set "name=%%a %%b") ставится искусственно (иначе будет пытаться настраивать "Ethernet2" вместо "Ethernet 2"

rbd to qcow2 file format

# rbd export vm5891121 vm5891121.img -p volumes
# qemu-img convert -f raw -O qcow2 vm5891121.img vm5891121.qcow2

nginx с ngx_pagespeed и поддержкой alpn для centos / debian / ubuntu

update:
актуальные бинарники доступны по ссылке https://dl.ispsystem.info/nginx-binary/lasted/


Готовая сборка Nginx с модулем ngx_pagespeed (google pagespeed) для популярных операционных систем CentOS 6.9, 7.4 / Debian 7, 8, 9 / Ubuntu 14.04/16.04 x86_64

Также для CentOS 6 / Debian 7,8 / Ubuntu 14.4 nginx собран с openssl 1.0.2 (--with-openssl=/root/openssl-1.0.2l) чтобы была поддержка ALPN для http2, в CentOS 7.4 и других системах системный OpenSSL поддерживает ALPN начиная с версии 1.0.2

В CentOS 7.3 (в дистрибутиве openssl 1.0.1e) и меньших версиях необходимо для запуска nginx обновить пакет openssl (yum install openssl обновит до 1.0.2k-8) иначе будет ошибка запуска nginx связанная со старой библиотекой в системе

Для Debian 7 новые версии pagespeed не поддерживаются, новый nginx 1.13.6 также не собирается со старым ngx_pagespeed, поэтому используется nginx 1.12.2 stable и pagespeed старой версии 1.11.33.1-beta (bash <(curl -f -L -sS https://ngxpagespeed.com/install) -n 1.12.2 -v 1.11.33.1).
Настоятельно рекомендую мигрировать на более новую версию операционной системы

Ссылки на бинарный файл nginx - его надо просто положить в /usr/sbin/nginx вместо исходного файла (предварительно установив nginx через пакетный менеджер системы):

https://dl.ispsystem.info/nginx-binary/nginx-1.13.6-pagespeed-1.12.34.2-openssl-1.0.2l-centos6
https://dl.ispsystem.info/nginx-binary/nginx-1.13.6-pagespeed-1.12.34.2-centos7
https://dl.ispsystem.info/nginx-binary/nginx-1.12.2-pagespeed-1.11.33.1-openssl-1.0.2l-debian7
https://dl.ispsystem.info/nginx-binary/nginx-1.13.6-pagespeed-1.12.34.2-openssl-1.0.2l-debian8
https://dl.ispsystem.info/nginx-binary/nginx-1.13.6-pagespeed-1.12.34.2-debian9 
https://dl.ispsystem.info/nginx-binary/nginx-1.13.6-pagespeed-1.12.34.2-openssl-1.0.2l-ubuntu14.04
https://dl.ispsystem.info/nginx-binary/nginx-1.13.6-pagespeed-1.12.34.2-ubuntu16.04

Также собраны бинарники для замены /usr/sbin/nginx с openssl 1.0.2 без модуля pagespeed для старых операционных систем где openssl не имеет поддержки alpn (требуется для http2):

https://dl.ispsystem.info/nginx-binary/nginx-1.13.6-openssl-1.0.2l-centos6
https://dl.ispsystem.info/nginx-binary/nginx-1.13.6-openssl-1.0.2l-debian7
https://dl.ispsystem.info/nginx-binary/nginx-1.13.6-openssl-1.0.2l-debian8
https://dl.ispsystem.info/nginx-binary/nginx-1.13.6-openssl-1.0.2l-ubuntu14.04

Ключи сборки соответствуют стандартным с официального репозитория nginx (посмотреть как nginx -V), за исключением опции компиляции и линковки при использовании внешнего openssl
Debian 7/8:
--with-cc-opt='-g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -Wl,--as-needed -pie'
изменено на
--with-cc-opt='-g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-z,relro -Wl,-z,now' --with-openssl=/root/openssl-1.0.2l

CentOS 6:
--with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'
изменено на
--with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic' --with-ld-opt='-Wl,-z,relro -Wl,-z,now' --with-openssl=/root/openssl-1.0.2l

Так как иначе openssl не собирается с ошибками
/usr/bin/ld: /root/openssl-1.0.2l/.openssl/lib/libssl.a(s23_meth.o): relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
/root/openssl-1.0.2l/.openssl/lib/libssl.a: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
objs/Makefile:365: recipe for target 'objs/nginx' failed


Возможно, это пригодится кому-либо при компиляции nginx с собственным openssl

Подключается pagespeed в nginx.conf секции http - собственно включение, запрет оптимизировать phpmyadmin и админ-панель сайтов на bitrix (с ними работает некорректно), путь к каталогу кэша nginx и ограничения.
Процесс очистки кэша будет запускаться раз в час и очищаться если размер превысит 512Mb или 100000 inodes

pagespeed on;
pagespeed Disallow */phpmyadmin/*;
pagespeed Disallow */bitrix/admin/*;
pagespeed FileCachePath /var/cache/ngx_pagespeed/;
pagespeed FileCacheSizeKb            524288;
pagespeed FileCacheInodeLimit        100000;
pagespeed FileCacheCleanIntervalMs   3600000;

Далее необходимо просто создать директорию
mkdir /var/cache/ngx_pagespeed/

После перезапуска nginx в ней появятся поддиректории с файлами кэша

Подключается http2 просто добавлением http2 в server
listen 443 ssl http2;

При использовании ISPmanager 5 можно отредактировать шаблон /usr/local/mgr5/etc/templates/default/nginx-vhosts-ssl.template

заменить

listen {% $NGINX_SSL_LISTEN_ON %} default_server;
на
listen {% $NGINX_SSL_LISTEN_ON %} ssl http2 default_server;

listen {% $NGINX_SSL_LISTEN_ON %}
на
listen {% $NGINX_SSL_LISTEN_ON %} ssl http2;

Чтобы не переписывался при обновлениях файл /usr/bin/nginx можно сделать в Debian/Ubuntu:

# dpkg-divert --divert /usr/sbin/nginx.unuse --rename /usr/sbin/nginx
# mv /usr/sbin/nginx.unuse /usr/sbin/nginx
 
В CentOS:
# yum install yum-plugin-versionlock
# yum versionlock nginx


Полезные ссылки:
https://www.modpagespeed.com/doc/build_ngx_pagespeed_from_source 
https://habrahabr.ru/post/301452/
http://nginx.org/ru/download.html

ЧПУ в nginx php-fpm в server

listen 188.112.121.100:80;
    location / {
        try_files $uri $uri/ @handler;
        location ~ [^/]\.ph(p\d*|tml)$ {
            try_files /does_not_exists @php;
        }
    }
    location @handler {
        rewrite ^(.*) /index.php?$1 last;
    }

    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/www-root.sock;
        fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
        try_files $uri =404;
        include fastcgi_params;
    }


Редирект на https
return 301 https://$host:443$request_uri;

Сжатие - кэширование
    gzip on;
    gzip_comp_level 3;
    gzip_disable "msie6";
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;
    expires 8d;

Как очистить базу HSTS в google chrome и firefox

chrome://net-internals/#hsts

в firefox это делается в истории (ctrl+h) правой кнопкой - забыть об этом сайте

Насаждаем cp1251 кодировку на сайте вместо utf8 в debian

# cat .htaccess
AddDefaultCharset windows-1251
php_value default_charset "cp1251"


Обычного включения в свойствах WWW домена в ISPmanager недостаточно

Ubuntu отключить отправку сообщений об ошибках

sudo sed -i "s/enabled=1/enabled=0/g" '/etc/default/apport'
или
sudo apt purge apport

Высокая нагрузка на cpu от процессов kidle_inject

Иногда бывает, что система практически висит, а в top наблюдается картина вида

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6098 root -51 0 0 0 0 S 55,8 0,0 4:04.49 kidle_inject/1
6099 root -51 0 0 0 0 S 55,8 0,0 4:04.20 kidle_inject/2 


Процессы kidle_inject запускаются при throttling, как правило от перегрева, и не могут часто быть остановлены, есть баг https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1389077 который долгое время не могут исправить

Решение: отключить данный механизм снижения нагрузки на cpu (может привести в принципе к проблемам при перегреве

# rmmod intel_powerclamp
# echo "blacklist intel_powerclamp" > /etc/modprobe.d/disable-powerclamp.conf

Полезные ссылки:
https://wiki.ubuntu.com/Kernel/PowerManagement/ThermalIssues
https://lwn.net/Articles/528131/

Про новые ядра и xorg в Ubuntu 16.04 LTS

Desktop
1. Устанавливаем с образа 16.04 или 16.04.1 - получаем ядро 4.4.0 (метапакет linux-generic), которое будет постоянно с новыми security fixes всё время жизни дистрибутива

2. Устанавливаем с образа 16.04.2 и выше - получаем hwe ядро на сегодня 4.4.8 и выше (метапакет linux-generic-hwe-16.04) по модели rolling updates, то есть при выходе новых версий будет обновляться (на сегодня 4.4.10)

Xorg тоже ставится hwe (и ставить по идее надо с новым ядром всегда, а не одно ядро или иксы), пример команды для перехода
sudo apt-get install --install-recommends linux-generic-hwe-16.04 xserver-xorg-hwe-16.04

3. Устанавливаем пакет linux-generic-hwe-16.04-edge - получаем совсем свежее ядро 4.4.11 и все самое свежее (и, возможно, не тестированное)

Server
В инсталляторе при загрузке с iso присутствует выбор - ставить hwe или нет, по-умолчанию ставится 4.4.0
Можно обновить ядро перейдя на hwe
sudo apt-get install --install-recommends linux-generic-hwe-16.04

Полезные ссылки
https://wiki.ubuntu.com/Kernel/RollingLTSEnablementStack
https://wiki.ubuntu.com/Kernel/LTSEnablementStack
http://ubuntuhandbook.org/index.php/2017/02/install-remove-enablement-stacks-ubuntu-16-04/

Что ставить
Все же большинство десктопов, судя по всему, живут на свежих ядрах и свежем xorg, поэтому ставить hwe на десктоп и если используются несвободные драйвера, то иметь ввиду, что при апдейтах могут быть проблемы с графикой (но как правило, все решается через update-initramfs -u или переустановкой пакета типа nvidia-375 при загрузке в текстовом режиме), на сервер если всё работает, то скорее всего новые ядра вам не нужны, также kernel livepatch не поддерживает hwe

перенос почтовых ящиков imapsync создание через ispmanager api

Создаем почтовые ящики через ISPmanager API

cat /tmp/1 | while read i ; do echo `echo $i | awk '{print $2}'` ; /usr/local/mgr5/sbin/mgrctl -m ispmgr email.edit domainname=`echo $i | awk '{print $2}' | cut -d '@' -f 2` greylist=on hidegreylist=on passwd=`echo $i | awk '{print $1}'` name=`echo $i | awk '{print $2}' | cut -d'@' -f 1` sok=ok ; done

Переносим почтовые ящики через imapsync

j=0 | cat /tmp/1 | while read i ; do let "j=$j+1"; echo 'синкаю' $j 'из 87 ящиков, сейчас синкаю' `echo $i | awk '{print $2}'` ; imapsync --host1 10.10.10.10 --user1 `echo $i | awk '{print $2}'` --password1 `echo $i | awk '{print $1}'` --host2 20.20.20.20 -user2 `echo $i | awk '{print $2}'` --password2 `echo $i | awk '{print $1}'` 2>&1 >> /tmp/imap.log; done

Улучшаем работу с whois

$ cat /etc/whois.conf
\.pro$    whois.afilias.net


$ grep whois .bashrc
alias whois='whois -H'


Смотреть whois сервера можно по ссылке https://www.iana.org/domains/root/db

exim: увеличить timeout на отправку почты с сервера в мир

В разделе transport опции:
remote_smtp:
driver = smtp
connect_timeout = 3m
command_timeout = 3m
data_timeout = 3m

mariadb 5.5 : centos 7 : Unknown collation: 'utf8mb4_unicode_520_ci

Не удалось восстановить базу данных из резервной копии. Процесс завершился с ошибкой: 'ERROR 1273 (HY000) at line 104: Unknown collation: 'utf8mb4_unicode_520_ci' '

sed -i 's/utf8mb4_unicode_520_ci/utf8_general_ci/' a0129493_wor00.sql
sed -i 's/utf8mb4/utf8/' a0129493_wor00.sql

sed -i 's/utf8mb4_unicode_ci/utf8_unicode_ci/' a0129493_wor00.sql

Остановить задания на backup в ISPmanager

Если после завершения фоновых задач и файлов в var/run "колесики" все равно продолжают крутиться о бэкапах (и процессов backup2 тоже нет), то все починить можно в ispmgr.db


update backup_queue set status=1 where status=2;

Ограничить доступ по IP в Apache 2.4

    <IfVersion >= 2.4>
        Require all denied
        Require ip 10.11.12.33
        Require ip 188.120.252
    </IfVersion>

maildrop debug как запустить postfix / centos / ispmanager 4

# echo date | /usr/bin/maildrop -d virtuser_505 -V 10

...
...
/etc/maildroprc(7): ISP_address="^(From|Return-Path|To|CC|BCC): "
/etc/maildroprc(8): ISP_subject="^(XX-)?Subject: "
maildrop: Attempting .mailfilter
/usr/bin/maildrop: Cannot have world/group permissions on the filter file - for your own good.


Как лечить не ясно так как права были, решение - удалить пустые .mailfilter

:-)

В ISPmanager Business не создается домен - пишется что уже существет, а его нет

Если не создается домен already exist, а на самом деле его нигде нет - то надо найти в панели ISPmanager - Сборщик мусора и там поискать и найдя удалить

Поставить старую версию rails для ruby 2.1

gem install rails -v 4.2.6

иначе будет ставиться более новая которая хочет ruby 2.2.2+

owncloud : docker не работает после включения хранилища devicemapper

owncloud требует хранилище типа devicemapper как написано тут https://linuxinsider.ru/server-collabora-online-s-nextcloud-na-ubuntu/
После его включения (лучше включать как написано в официальной документации  https://docs.docker.com/engine/userguide/storagedriver/device-mapper-driver/ в /etc/docker/daemon.json приложение docker перестает работать, а docker ps зависает не дожидаясь ответа от dockerd

Решение - установить поддержку LVM в систему командой apt-get install lvm2

При этом также отмечу что появляется в /var/lib/docker spare file размером 100Gb который не занимает место на диске, но влияет при копировании сервера через rsync

ISPmanager не покаызываются Ресурсы сервера на дашбоард

Почистить файлы в /usr/local/mgr5/var/sysinfostat/

Раз в час будет обновляться

pppd: The remote system (PPTP) is required to authenticate itself

При запуске pppd клиент на Ubuntu 16.04 выдает ошибку

# pppd call pptpserver
pppd: The remote system (PPTP) is required to authenticate itself
pppd: but I couldn't find any suitable secret (password) for it to use to do so.


Решение

# vi /etc/ppp/options

auth заменить на noauth

Или же указать в /etc/ppp/peers/pptpserver

ISPmanager отключить двухфакторную авторизацию

sqlite> delete from totp

Шаблонизатор в ISPmanager

# cp /usr/local/mgr5/etc/templates/default/nginx-vhosts.template /usr/local/mgr5/etc/templates/
# cp /usr/local/mgr5/etc/templates/default/nginx-vhosts-ssl.template /usr/local/mgr5/etc/templates/

# vi /usr/local/mgr5/etc/ispmgr.conf
Option EnableWebTemplate


Документация по шаблонизатору

ksoftirqd нагружает процессор на debian kvm

Надо добавить nohz=off к опциям загрузки ядра

# vi /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet nohz=off"

# update-grub

Убивать вчерашние процессы httpd 508 ошибка

ps aux | grep httpd | awk '{if (!match($9,/[0-9]{2}:[0-9]{2}/)) print $2 }' | while read line; do kill $line; done

Запускать под юзером (!)  Делается на шареде

Работа с ручными правками конфигурационных файлов ISPmanager

Option DisableWebDBReadConf

отключает правки конфигурационных файлов панелью ISPmanager
Подробнее

bitrix попугаи

Производительность Bitrix высчитывается в файлике

bitrix/modules/perfmon/admin/perfmon_panel.php

Строчкой

$result = number_format(doubleval(count($_SESSION["PERFMON_TIMES"]))/array_sum($_SESSION["PERFMON_TIMES"]), 2, ".", " ");

Соответственно строчка

$result = number_format(doubleval(count($_SESSION["PERFMON_TIMES"]) *2)/array_sum($_SESSION["PERFMON_TIMES"]), 2, ".", " ");

Показывает производительность в 2 раза больше. В историю, правда, пишется старый результат.
Не злоупотребляйте!

MegaCli на CentOS 7 установка

# wget --user hetzner --password download http://download.hetzner.de/tools/LSI/tools/MegaCLI/8.07.10_MegaCLI_Linux.zip
# unzip 8.07.10_MegaCLI_Linux.zip
# rpm -i 8.07.10_MegaCLI_Linux/Linux\ MegaCLI\ 8.07.10/MegaCli-8.07.10-1.noarch.rpm
# ln -s /opt/MegaRAID/MegaCli/MegaCli64 /usr/bin/megacli

Поребутить reboot сервера который висит

Включаем sysrq
# echo 1 > /proc/sys/kernel/sysrq

ultimate reboot to rule them all
# echo b > /proc/sysrq-trigger

См также https://habrahabr.ru/post/98770/

php memcache для php7

Bitrix требует именно memcache (не memcached) для работы под PHP7
Альтернативная сборка PHP7 в ISPmanager его не содержит, потому, что официальное расширение из pecl не компилируется.
Существует fork pecl php-memcache для PHP 7 и оно собирается и с ним bitrix начинает работать

Ссылка https://github.com/websupport-sk/pecl-memcache

VEmanager : Контейнер заблокирован длительной процедурой, такой как миграция или развертывание шаблона ОС. Попробуйте повторить действие позже.

Необходимо найти и удалить следующие файлы

На master
/usr/local/mgr5/var/run/installve.installve_11732
/usr/local/mgr5/var/run/objectlock/2VM_11732


На ноде с VE
/usr/local/mgr5/var/run/objectlock/2VM_11732_vemini
/usr/local/mgr5/var/velongtask/11732_migrateve
/usr/local/mgr5/var/run/migrateve/migrateve.11732


Искать через
find /usr/local/mgr5/var/ -type f -iname '*11732*'
 
Статус VDS изменяется в базе http://blog.ispsystem.info/2017/02/vds-vmmanager-openvz.html

Удалить старые ядра CentOS

Иногда бывает что система не обновляется так как закончилось место в /boot

Посмотреть сколько ядер стоит
# rpm -q kernel

Поставить пакет с package-cleanup
# yum install yum-utils

Удалить все ядра кроме двух последних
# package-cleanup --oldkernels --count=2

Настроить лимиты yum на число ядер
# vi /etc/yum.conf
installonly_limit=2

Принудитетельно пересчитать размер баз данных в ISPmanager

update db_cache set next_check = datetime('now', '+1 minutes')

Перекешировать размер БД в ISPmanager, делается в базе ispmgr.db

Автоматически размер в Базы данных обновляется по формуле https://doc.ispsystem.ru/index.php/Размеры_баз_данных

update:
в новых версиях ISPmanager данные хранятся в отдельной базе данных 

# sqlite3 /usr/local/mgr5/etc/ispmgr_dbsize.db

В ISPmanager Business файл называется
# sqlite3 /usr/local/mgr5/etc/ispmgrnode_dbsize.db

Как изменить порт RDP - Remote desktop port change

Открываем редактор реестра regedit

Открываем ветку HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TerminalServer\WinStations\RDP-Tcp

Правим параметр PortNumber в десятичном формате

Порт RDP по умолчанию 3389

Открыть порт в windows firewall
netsh advfirewall firewall add rule name=“Custom RDP Port“ dir=in action=allow protocol=TCP localport=7777

Перезагружаем компьютер

resize диска на FreeBSD KVM

Изменяем диск в VMmanager. Грузимся в rescue mfsbsd - root / mfsroot

# gpart recover vtbd0

# gpart show
# gpart resize -i 2 vtbd0

# growfs /dev/gpt/rootfs
# fsck_ufs -y /dev/gpt/rootfs

mdadm : переименовать устройство md

После переноса на новосозданный RAID системы возникает необходимость переименовать устройства в те имена, которые были раньше на исходном диске. Останавливаем md5 загрузившись в rescue

# mdadm -S /dev/md5

-S - это --stop

Переименовываем в md2

# mdadm --assemble /dev/md2 /dev/sda3 --update=name

systemd : мониторинг работы процесса и ограничения памяти

Мониторинг наличия процесса и его автоматический перезапуск при падении - прописываем в Unit - они находятся в каталоге /etc/systemd/system/multi-user.target.wants
(вернее там симлинки при включенном автозапуске на /usr/lib/systemd/system/)

[Service]
...
Restart=always
RestartSec=15


После правок не забыть про

systemctl daemon-reload
systemctl restart httpd.service


там же ограничиваем использование оперативной памяти

[Service]
MemoryLimit=1G


systemctl enable service включит автозапуск
journalctl -u httpd покажет логи httpd

update: правильно создать файлик в /etc/systemd/system/httpd.service.d/setting.conf с [Service]
Restart=always
RestartSec=15

LSI raid controller : The specified physical disk does not have the appropriate attributes to complete the requested command

При попытке создать RAID 10 через megacli выдается ошибка

# megacli -CfgSpanAdd -r10 -Array0[252:0,252:1] Array1[252:2,252:3] WB RA Direct CachedBadBBU -a0
The specified physical disk does not have the appropriate attributes to complete
the requested command. Exit Code: 0x26


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

# megacli -CfgLdDel -Lall -aAll
и
# megacli -CfgClr -aAll

было сделано и не помогает

Надо посмотреть сколько конфигураций есть:

# megacli -CfgForeign -Scan -a0
There are 3 foreign configuration(s) on controller 0.
Exit Code: 0x00


И удалить (очистить) все конфигурации:

# megacli -CfgForeign -Clear -a0
Foreign configuration 3 is cleared on controller 0.
Exit Code: 0x00


Хорошая документация https://wiki.hetzner.de/index.php/LSI_RAID_Controller/ru

megacli для debian брать тут http://hwraid.le-vert.net/debian/pool-jessie/

strace процессов пользователя в apache mpm-itk

while true; do a=$(ps aux | grep apache | grep usera | awk '{print $2}'); 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

Включить server-status в CentOS 7

# cat >> /etc/httpd/conf.modules.d/01-status.conf << EOF
<Location /server-status>
SetHandler server-status
Require all granted
</Location>
EOF

# systemctl reload httpd

Если мешает .htaccess сайта - можно сделать вот так на примере wordpress

# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !=/server-status
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress

MySQL : ошибка The used table type doesn't support FULLTEXT indexes при импорте дампа

FULLTEXT indexes в InnoDB поддерживаются начиная с версии MySQL 5.6
Варианты:
- Обновить MySQL до версии 5.6
- Исправить дамп базы указав в нем engine = MyISAM

Посмотреть версию ISPmanager

Информация о типе панели и версии
/usr/local/mgr5/bin/core ispmgr -F
/usr/local/mgr5/bin/core ispmgr -V

Информация о лицензии
/usr/local/mgr5/sbin/mgrctl -m ispmgr license.info

iptables полезные команды

Посмотреть все правила
# iptables -L -n -v
(я предпочитаю iptables-save)

Посмотреть правила с нумерацией строк 
# iptables -L INPUT -n --line-numbers

Вставить правило между 1 и 2 строкой: 
# iptables -I INPUT 2 -s 120.155.16.23 -j DROP

Удалить строку 3
# iptables -D INPUT 3

Удалить все правила
# iptables -P INPUT ACCEPT
# iptables -P OUTPUT ACCEPT
# iptables -P FORWARD ACCEPT

# iptables -F
# iptables -X
# iptables -t nat -F
# iptables -t nat -X
# iptables -t mangle -F
# iptables -t mangle -X


Где:
-F - Удалить (flush) правила
-X - Удалить цепочку
-t table_name - Выбрать таблицу (nat или mangle) и удалить все правила.
-P - Выбрать действия по умолчанию (такие, как DROP, REJECT, или ACCEPT).

Ограничить количество параллельных соединений к серверу для одного адреса.

Для ограничений используется модуль connlimit. Чтобы разрешить только 5 ssh соединений на одного клиента
# iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 5 -j REJECT

Установить количество запросов HTTP до 10
# iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 10 --connlimit-mask 24 -j DROP

Открыть диапазон портов
# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 8000:8888 -j ACCEPT

Также полезная информация http://blog.ispsystem.info/search?q=iptables
Куда пишет ISPmanager правила iptables https://doc.ispsystem.ru/index.php/Алгоритм_работы_модуля_"Брандмауэр"

Восстанавливаем пакет bitrix окружения после ручного downgrade php CentOS 6


Если на CentOS 6 сделать downgrade php с 7 до 5.3, то пакет bitrix-env удалится из системы и не будет работать ./menu.sh и вообще ничего в целом (конфиги apache/nginx)

А поставить yum install bitrix-env не получится так как в зависимостях php7

Поэтому после downgrade качаем

wget http://repos.1c-bitrix.ru/yum/el/6/x86_64/bitrix-env-7.0-1.el6.noarch.rpm

и распаковываем в /
rpm2cpio package.rpm | cpio -idmuv

ну или в mc
цель поста - ссылка на  bitrix-env-7.0-1.el6.noarch.rpm

Как делать downgrade (примерно надо руками доделывать) и другая информация http://blog.ispsystem.info/search/label/bitrix-env

Установка sphinx sphinxsearch на Debian 8

wget http://sphinxsearch.com/files/sphinxsearch_2.2.11-release-1~jessie_amd64.deb
apt-get install libodbc1
dpkg -i sphinxsearch_2.2.11-release-1~jessie_amd64.deb

vi /etc/sphinxsearch/sphinx.conf

Главно не забыть создать индексы, без команды ниже ничего не работает!
indexer --all --verbose

service sphinxsearch restart

postfix управление очередью

Прочитать письмо
postcat -b 4E62A1C0493

Посмотреть активные настройки Postfix:
postconf -d

Посмотреть сколько сообщений в очереди:
mailq | grep Requests 

Посмотреть конкретно что в очереди:
mailq

Пнуть очередь на немедленную доставку:
postsuper -r ALL; postfix flush

Пнуть конкретное письмо по ID:
postsuper -r ID

Удалить письмо по ID:
postsuper -d ID

Удалить всю очередь:
postsuper -d ALL

Заблокировать поисковые боты в Nginx по User-Agent

Прописываем вначале server

if ($http_user_agent ~ WordPress|SemrushBot|SputnikBot|Crowsnest|PaperLiBot|peerindex|ia_archiver|Slurp|Aport|NING|JSKit|rogerbot|BLEXBot|MJ12bot|Twiceler|Baiduspider|Java|CommentReader|Yeti|discobot|BTWebClient|Tagoobot|Ezooms|igdeSpyder|AhrefsBot|Teleport|Offline|DISCo|netvampire|Copier|HTTrack|WebCopier|GrapeshotCrawler|coccocbotweb|HybridBot|magpiecrawlerHostTracker|Riddler|SentiBot|HostTracker) {

return 403;
}

cPanel не работает phpmyadmin


Cannot start session without errors, please check errors given in your PHP and/or webserver log file and configure your PHP installation properly. Also ensure that cookies are enabled in your browser.

Переходим в каталог /usr/local/cpanel/base/3rdparty/phpMyAdmin/

Там есть файл .php.ini - это symlink на /usr/local/cpanel/3rdparty/php/56/etc/phpmyadmin/php.ini

Открываем его в редакторе и раскоментируем

session.save_path = "/tmp"

Перезапускаем cpsrvd (поскольку он "слушает" порт 2083 ssl на котором работает cpanel и по которому вы получаете данную ошибку по ссылке вида https://example.com:2083/cpsess3131291/3rdparty/phpMyAdmin/....) и обрабатывает php-скрипты как fastcgi (если в директории phpmyadmin разместить phpinfo это видно равно как пустой путь для сохранения сессий)

service cpanel restart

Проблема должна быть решена

"Закрыть доступ по IP" nginx bitrix окружение

vi /etc/nginx/bx/site_enabled/s1.conf

if ($http_host ~ "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}") {
return 444;
}

Борьба с DDOS атаками вида synflood

Подсчет числа полуоткрытых TCP-соединений:
$ netstat -na | grep ":порт\ " | grep SYN_RCVD | wc -l

Просмотр списка IP-адресов, с которых идут запросы на подключение:

$ netstat -na | grep ":порт\ " | sort | uniq -c | sort -nr

Анализ подозрительных пакетов с помощью tcpdump:

# tcpdump -n -i eth0 -s 0 -w output.txt dst port порт and host IP-сервера

Блокируем подключения атакующего:

# iptables -A INPUT -s IP-атакующего -p tcp --destination-port порт -j DROP

Ограничиваем максимальное число полуоткрытых соединений с одного IP к конкретному порту:

# iptables -I INPUT -p tcp --syn --dport порт -m iplimit --iplimit-above 8 -j DROP

Отключаем ответы на запросы ICMP ECHO:

# iptables -A INPUT -p icmp -j DROP --icmp-type 8

Устанавливаем netstat в CentOS 7:

# yum install net-tools

Разметка диска под gpt и gmirror FreeBSD

Когда в системе только один диск достаточно сделать

Очищаем диск от старой таблицы разметки

gpart destroy -F /dev/ada0
dd if=/dev/zero of=/dev/ada0 count=1 bs=1024

Создаем разметку gpt с 3 партициями, записываем в первую загрузочный bootcode

gpart create -s gpt ada0
gpart add -t freebsd-boot -s 128k ada0

gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 ada0
gpart add -t freebsd-swap -l swapada0 -s 16G ada0
gpart add -t freebsd-ufs -l rootfsada0 ada0


После чего создаем зеркало raid1

gmirror load
gmirror label -v rootfs /dev/gpt/rootfsada0
gmirror label -v swap /dev/gpt/swapada0


Далее форматируем файловую систему

newfs -U /dev/mirror/rootfs

И затем переносим нужную систему через rsync / pax / или чистую ОС

Копирование таблицы разделов на другой диск

gpart backup ada0 | gpart restore -F /dev/ada1

И потом добавление в зеркало

gmirror insert swap /dev/ada1p2
gmirror insert rootfs /dev/ada1p3


В /boot/loader.conf при этом должно быть

geom_mirror_load="YES"
ahci_load="YES"


И в /etc/fstab

/dev/mirror/swap    none        swap    sw    0    0
/dev/mirror/rootfs    /        ufs    rw    1    1



Смотри также: Зеркалирование дисков на выделенном сервере
Скрипт установки: http://dl.ispsystem.info/freebsd-hetzner-install.sh

Аналог strace во FreeBSD

truss -p PID

Перенос FreeBSD с диска на диск

Если нет rsync (привет hetzner rescue)

cd /mnt-old; pax -p e -X -rw . /mnt-new

MySQL server has gone away при импорте базы данных

[mysqld]
max_allowed_packet = 256M

bitrix получить доступ в админку сайта

В каталоге сайта создаете php файл pusti.php с секретным именем и содержимым ниже:

<?

require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php');

global $USER;
$USER->Authorize(1);

?>

<a href='/bitrix/admin/index.php'>ЖМИ СЮДА</a>


После работ обязательно удалите данный файл для избежания взлома сайта

дополнительная авторизация в phpmyadmin

# cat /usr/share/phpMyAdmin/.htaccess

AuthType Basic
AuthName "Private zone"
AuthUserFile /etc/phpMyAdmin/.htpass
require valid-user


# htpasswd -c /etc/phpMyAdmin/.htpass myadmin

# grep AllowOverride /etc/httpd/conf.d/phpmyadmin.conf

# AllowOverride None
AllowOverride AuthConfig

Тест скорости работы сайта

https://tools.pingdom.com
в последнее время часто ссылаются на него

Монтируем ftp как папку

curlftpfs user:pass@ftp.example.com /mnt/ftp

Открыть запись для остальных пользователей можно опцией allow_other
Например, открываем для пользователя с uid 1001

curlftpfs ftp://user:pass@ftp.example.com /mnt/ftp -o allow_other,uid=1001,gid=1001,umask=077,default_permissions

Монтируем через /etc/fstab

curlftpfs#ftp.example.com  /mnt/ftp  fuse  noauto,user=user:pass,allow_other,default_permissions,umask=022,_netdev   0 0

Отмонтируем

fusermount -u /mnt/ftp
Не рекомендую это решение в production, так как даже при тестирование наблюдаются проблемы с низкой скоростью и плохой загрузкой больших файлов

bitrix не меняется max_execution_time

В php.ini и phpinfo(); показывается max_execution_time=900, а в http://example.com/bitrix/admin/phpinfo.php (открывается после входа в админку) - 300

Открываем bitrix/php_interface/dbconn.php и правим  

@set_time_limit(900);

Там же можно править ini_set("memory_limit", "1024M");

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

Проблема с загрузкой лицензии ISPmanager

Если ISPmanager 5 упорно не загружает лицензию, то стоит проверить работу https на сервере выполнив команду взяв url из licctl.log

# curl -v  -k  -o-  https://212.109.222.143/mgr5.45.state
* About to connect() to 212.109.222.143 port 443 (#0)
*   Trying 212.109.222.143...
* Connected to 212.109.222.143 (212.109.222.143) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
* Unable to initialize NSS database
* Initializing NSS with certpath: none
* NSS error -5938 (PR_END_OF_FILE_ERROR)
* Encountered end of file
* Closing connection 0
curl: (35) Encountered end of file


В моем случае проблема была с битыми файлами в /etc/pki/nssdb/ и исправлено заменой файлов с исправной системы

Примечательно, что изначально я запускал wget --no-check-certificate и так делать нельзя, так как проверка не была пройдена и ошибка не была видна в отличии от curl, так как панель использует libcurl

debian 6.0 поставить rsync и другой старый софт

# tail -1 /etc/apt/sources.list
deb http://archive.debian.org/debian/ squeeze main contrib non-free


apt-get update
apt-get install rsync

не работает ssi в apache debian

Необходимо подключить модуль include_module

# ln -s /etc/apache2/mods-available/include.load /etc/apache2/mods-enabled/include.load
# apachectl restart

не работает поиск в phpmyadmin centos 7 из-за ошибки в php-gettext

Включаем отображение ошибок
vi /etc/httpd/conf.d/phpmyadmin.conf

php_admin_flag engine on
php_admin_value display_errors on
php_admin_value error_reporting 30711
php_admin_flag ini_set on


Fatal error: Uncaught exception 'InvalidArgumentException' with message 'Select_string only accepts integers: 0' in /usr/share/php/gettext/gettext.php:354 Stack trace: #0 /usr/share/php/gettext/gettext.php(388): gettext_reader->select_string('0') #1 /usr/share/php/gettext/gettext.inc(293): gettext_reader->ngettext('%1$s match in <...', '%1$s matches in...', '0') #2 /usr/share/phpMyAdmin/libraries/DbSearch.class.php(337): _ngettext('%1$s match in <...', '%1$s matches in...', '0') #3 /usr/share/phpMyAdmin/libraries/DbSearch.class.php(289): PMA_DbSearch->_getResultsRow('wp_appointment_...', Array, true, '0') #4 /usr/share/phpMyAdmin/db_search.php(46): PMA_DbSearch->getSearchResults() #5 {main} thrown in /usr/share/php/gettext/gettext.php on line 354

Согласно http://bazaar.launchpad.net/~danilo/php-gettext/trunk/revision/61 проблема в php-gettext и правится в /usr/share/php/gettext/gettext.php на 435 строке комментированием кода

if (!is_int($n)) {
throw new InvalidArgumentException(
"Select_string only accepts integers: " . $n);
}

Использование утилиты ddrescue для восстановления данных

ddrescue - это утилита для восстановления данных с поврежденной поверхности диска
При выборе между dd_rescue и ddrescue используйте ddrescue - подробности https://habrahabr.ru/post/236977
Сравнивая с dd_rescue - умеет сохранять сбойные блоки в лог-файл и затем восстанавливать их отдельно и не умеет пересылать данные в pipe (скажем для копирования по сети через ssh-транспорт)

Сценарий восстановления с неисправного диска на исправный

Копируем с неисправного диска /dev/sda на исправный /dev/sdb сбойные блоки пропускаем и сохраняем о них информацию в log
ddrescue -f -n /dev/sda /dev/sdb ddrescue.log

Копируем только сбойные блоки согласно ddrescue.log делая 3 попытки их чтения
ddrescue -f -d -r3 /dev/sda /dev/sdb ddrescue.log

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

Происходит остановка копирования при чтении с битого диска на позиции 12345
Перезапуск восстановления с байта 12345
ddrescue -f -n -i 12345 /dev/sda /dev/sdb ddrescue.log

Перезапуск восстановления с конца диска
ddrescue -f -n -R /dev/sda /dev/sdb ddrescue.log 
Не забываем после всего про опцию -dr3 для перечитывания битых блоков согласно log-файлу

Расшифровка опций

-f
Заставить ddrescue перезаписать диск outfile. Необходим, когда в качестве outfile используется устройство. Используется для защиты от ошибочного повреждения данных.

-n
Пропускает фазу scrape. Уменьшает время восстановления, снижает время на попытки чтения самых трудных частей файла.

-d
При указании данной опции, ddrescue использует прямой доступ к диску, обходя кэши ядра

-r n
Задает количество повторных попыток чтения поврежденных областей

-R
ddrescue читает данные в обратной последовательности

top в cron : простой мониторинг нагрузки сервера

# crontab -l
*/5 * * * * /bin/date >> /tmp/mon.log ; /usr/bin/top -b -n 1 >> /tmp/mon.log


В /tmp/mon.log можно будет посмотреть что было незадолго до падения сервера, как вариант

Установка Firefox ESR на Ubuntu 16.04

wget https://download-installer.cdn.mozilla.net/pub/firefox/releases/52.0esr/linux-x86_64/ru/firefox-52.0esr.tar.bz2

sudo -s

tar -xf firefox-52.0esr.tar.bz2 -C /opt/

dpkg-divert --divert /usr/bin/firefox.unuse --rename /usr/bin/firefox

ln -s /opt/firefox/firefox /usr/bin/firefox


Так как опция ui.use_unity_menubar true не работает (оно жестко вкопмиляно в /usr/lib/firefox/libxul.so (чтобы увидеть меню обычное нажмите alt) - ставим плагин https://addons.mozilla.org/ru/firefox/addon/compact-menu-2/

Немного не так привычно (к отдельной кнопке меню которую надо добавить через настройки панели можно привыкнуть), зато имеем целый год одну и ту же версию firefox в которой точно будет работать java-плагин

Для этого не забываем про about:config - plugin.load_flash_only = false

Обновлять эту версию придется вручную запустив с правами root и затем Справка - о Firefox
Также, как показала практика, данная версия firefox расходует в 1.5 раза меньше памяти и работает быстрее, чем из штатного репозитория

bitrix вебокружение downgrade php 7.0 до 5.6

Автоматический режим
Идем в меню битрикс окружения и меняем там

Ручной режим
vi /etc/yum.repos.d/remi-php70.repo
vi /etc/yum.repos.d/remi.repo

отключаем 7, включаем 56

yum remove php-*

yum install bitrix-env
yum install php-pecl-zendopcache

apachectl restart

Возвращаем поддержку NPAPI в Firefox - включаем поддержку Java

В Firefox 52 отключили поддержку всех NAPI плагинов включая Java, Acrobat, Silverlight и других кроме Flash
http://www.opennet.ru/opennews/art.shtml?num=46155

Вернуть обратно можно через
about:config и там создать параметр
plugin.load_flash_only = false

Однако, в версии 53 этот параметр отключат полностью и необходимо переходить на версию Firefox 52 ESR

MySQL создать пользователя и выдать доступ к базе данных

Как создать пользователя в MySQL сервере и выдать права пользователю на базу данных вручную


MariaDB [(none)]> CREATE USER 'username'@'localhost' IDENTIFIED BY 'pas$w0rd';

MariaDB [(none)]> GRANT ALL PRIVILEGES ON * . * TO 'username'@'localhost';

MariaDB [(none)]> FLUSH PRIVILEGES;

MariaDB [(none)]> GRANT ALL PRIVILEGES ON databasename.* TO 'username'@'localhost';

bitrix перевод на mysqli

Переводим битрикс на MySQLi с MySQL при переносе на PHP 7

# vi /home/bitrix/www/bitrix/php_interface/dbconn.php

define("BX_USE_MYSQLI", true);

# vi /home/bitrix/www/bitrix/.settings.php

array (
      'default' =>
      array (
        'className' => '\\Bitrix\\Main\\DB\\MysqliConnection',
        'host' => 'localhost',

bitrix включить debug сайта

https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&LESSON_ID=2795

# vi /home/bitrix/www/bitrix/php_interface/dbconn.php

$DBDebug = true;
$DBDebugToFile = true;


# vi /home/bitrix/www/bitrix/.settings.php

  'exception_handling' => array (
    'value' => array (
      'debug' => true,
      'handled_errors_types' => E_ALL & ~E_NOTICE & ~E_STRICT & ~E_USER_NOTICE,
      'exception_errors_types' => E_ALL & ~E_NOTICE & ~E_WARNING & ~E_STRICT & ~E_USER_WARNING & ~E_USER_NOTICE & ~E_COMPILE_WARNING & ~E_DEPRECATED,
      'ignore_silence' => false,
      'assertion_throws_exception' => true,
      'assertion_error_type' => 256,
      'log' => array (
        'settings' => array (
          'file' => 'bitrix/modules/error.log',
          'log_size' => 1000000,
        ),
      ),
    ),
    'readonly' => false,
  ),

Firefox пишет много данных на SSD

about:config - browser.sessionstore.interval

По-умолчанию он равен 15 секундам (15000) и можно смело увеличивать аж до 30 минут
10 минут - это 600000

Источник: https://geektimes.ru/post/280792/

Расширения отображающие IP адрес сайта в realtime для браузера

Firefox - Server IP
https://addons.mozilla.org/ru/firefox/addon/server-ip/

Chrome - Website IP
https://chrome.google.com/webstore/detail/website-ip/ghbmhlgniedlklkpimlibbaoomlpacmk

Все остальные "лазят в интернет" к внешним сайтам и не отображают то, что реально отрезолвлено скажем на основании записи в /etc/hosts и тем самым непригодны для работы

Дополнительные возможности phpMyAdmin не настроены в полной мере, некоторые функции были отключены

# vi config.inc.php

$cfg['PmaNoRelation_DisableWarning'] = TRUE;

Поменять IP адрес в WWW домены в ISPmanager

После того как при помощи sed изменен IP адрес в файлах конфигурации apache/nginx/named чтобы не менять IP в WWW домены (и тем самым не портить конфиги) проще всего поменять в базе панели

# sqlite3 /usr/local/mgr5/etc/ispmgr.db

sqlite> update webdomain_ipaddr set value='188.120.234.73';

# killall core

ipmi reset сброс конфигурации на заводские настройки

wget ftp://ftp.supermicro.com/utility/IPMICFG/IPMICFG_1.26.0_20161227.zip(mirror)
wget http://dl.ispsystem.info/ipmi/IPMICFG_1.24.1_build.160222.zip

unzip IPMICFG_1.24.1_build.160222.zip

chmod +x IPMICFG_1.24.1_build.160222/Linux/32bit/IPMICFG-Linux.x86

IPMICFG_1.24.1_build.160222/Linux/32bit/IPMICFG-Linux.x86 -fd

openssl client проверяем сертификаты

Проверяем сертификат на https
openssl s_client -connect example.com:443

Проверяем сертификат на почту
openssl s_client -starttls smtp -connect mail.example.com:587

Проверка соответствия ключа сертификату
openssl x509 -noout -modulus -in cert.crt | openssl md5
openssl rsa -noout -modulus -in cert.key | openssl md5

Установка node.js

NodeJS устанавливается в 2 простых команды так как уже собран под все дистрибутивы (с CentOS 6 x64 точно работает)

# wget https://nodejs.org/dist/v7.6.0/node-v7.6.0-linux-x64.tar.xz
# tar -xf node-v7.6.0-linux-x64.tar.xz --strip 1 -C /usr/local/

nginx limit ограничение на число подключений с одного IP

# vi /etc/nginx/nginx.conf



http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    limit_conn_zone $binary_remote_addr zone=zone:1m;
    limit_conn zone 8;


Очистить семафоры apache

Ошибка при запуске apache:
[emerg] (28)No space left on device: Couldn't create accept lock (/var/lock/apache2/accept.lock.12963) (5)

Смотрим сколько семафоров занято
ipcs -s | awk '/apache/ {print $2}'

Очищаем семафоры
for i in `ipcs -s | awk '/apache/ {print $2}'`; do (ipcrm -s $i); done


Вообще, выше чем в Debian 7 (и, возможно, CentOS 6) ошибку не встречал, скорее всего в современных системах и свежих версиях apache проблему исправили

Блокировка UserAgent через iptables

iptables -A INPUT -m string --algo kmp --string AhrefsBot -p tcp --dport 80 -j DROP
iptables -A INPUT -m string --algo kmp --string AhrefsBot -p tcp --dport 443 -j DROP


Вывод правил цепочки с указанием номеров:
iptables -L INPUT --line-numbers

Удаление правила с указанным номером:
iptables -D INPUT номерправила

bitrix после переноса на другой путь до корневой папке выдает Unknown: failed to open stream: No such file or directory in Unknown on line 0

Переносим рабочий сайт на Bitrix в другой каталог. Получаем ошибку

[Thu Feb 23 10:37:58 2017] [error] [client 122.111.122.12] PHP Fatal error:  Unknown: Failed opening required '/home/www/example.com/bitrix/modules/security/tools/start.php' (include_path='.:/usr/share/pear:/usr/share/php') in Unknown on line 0

Лечение:
Открываем файл .htaccess в корневом каталоге сайта и комментируем строку в конце файла

php_value auto_prepend_file "/home/www/example.com/bitrix/modules/security/tools/start.php"