Запретить локальному пользователю перезагружать систему

В системах которые используют systemd локальный пользователь может перезагружать систему без авторизации командой reboot (он же alias для /bin/systemctl, он же systemctl reboot)
Что может привести к незапланированной перезагрузке, например, если ошибиться окном терминала
Чтобы это отключить в Ubuntu 16.04 создайте файл конфигурации

/etc/polkit-1/localauthority/50-local.d/99-disallow-shutdown.pkl

и в нем пропишите следующее:

[Disallow shutdown]
Identity=unix-group:*
Action=org.freedesktop.login1.reboot;org.freedesktop.login1.reboot-multiple-sessions;org.freedesktop.login1.power-off;org.freedesktop.login1.power-off-multiple-sessions
ResultAny=auth_admin_keep
ResultInactive=auth_admin_keep
ResultActive=auth_admin_keep



Полезные ссылки:
https://wiki.archlinux.org/index.php/Polkit_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)
http://rus-linux.net/MyLDP/sec/PolicyKit_pr1.html

Отключить push уведомления в firefox глобально для всех сайтов

Каждый раз когда мы заходим в firefox на какой-либо сайт, в нем всплывает push уведомление с предложением подписаться на новости сайта и приходится его закрывать
Как же это отключить глобально? Очень просто

about:config => dom.push.enabled, dom.webnotifications.enabled => false

И больше уведомления беспокоить не будут.

В Chrome данные настройки делаются через интерфейс

chrome://settings/content

В появившемся окне находим блок «Оповещения» и устанавливаем переключатель в положение «Не показывать оповещения на сайтах»

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