четверг, 20 марта 2025 г.

Удаление информации о "старых" лицензиях из базы 1с

Для того что бы удалить информацию о старых лицензиях из базы 1С (они отображаются в окне "О программе") требуется выполнить sql-запрос к БД:

USE 'имяБД'
GO
UPDATE Files
SET BinaryData = CONVERT(varbinary(max),''), datasize = 0
WHERE FileName = 'c01b78f6-1525-41b1-9cc1-69e3da58d2ac.pfl'
GO

понедельник, 13 января 2025 г.

Установка Unifi Controller 7.3 на РЕД ОС 7.3

В связи с выходом из строя железного контроллера Unifi, появилась надобность в запуске небольшой виртуальной машинки с контроллером. Так как устройства в беспроводной сети поголовно все устаревшие - версия контроллера Unifi требовалась не старше 7.3. Так же, в связи с импортозамещением, в качестве ОС выбрана РЕД ОС 7.3.

Для ускорения установки воспользовался готовой сборкой с сайта marmotte.net.

1. Устанавливаем UniFi Controller 7.3:

# dnf install https://dl.marmotte.net/rpms/redhat/el7/x86_64/unifi-controller-7.3.83-1.el7_9/unifi-controller-7.3.83-1.el7_9.x86_64.rpm


2. Контроллер по-умолчанию устанавливается в каталог /opt/UniFi. При установке контроллера в зависимостях также устанавливаются СУБД mongoDB 3.6 и java-1.8.0-openjdk. В файле /opt/UniFi/readme.txt написаны рекомендации по ПО - это mongoDB 3.4.15 и Oracle Java 8. При этом если с mongoDB 3.6 контроллер работать еще будет, то с Java 1.8.0 он не работает. Судя по документации версия 7.3 контроллера работает максимум с java-11-openjdk. Поэтому устанавливаем требуемую версию Java:

# dnf install java-11-openjdk

выбираем установленную версию Java по-умолчанию:

# alternatives --config java

*  1 java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.422.b06-3.el7.x86_64/jre/bin/java)

+ 2 java-11-openjdk.x86_64 (/usr/lib/jvm/java-11-openjdk-11.0.25.0.9-1.el7.x86_64/bin/java)

и проверяем что теперь по-умолчанию установлена версия 11:

# java -version
openjdk version "11.0.25" 2024-10-15 LTS
OpenJDK Runtime Environment (Red_OS-11.0.25.0.9-1.el7) (build 11.0.25+9-LTS)
OpenJDK 64-Bit Server VM (Red_OS-11.0.25.0.9-1.el7) (build 11.0.25+9-LTS, mixed mode, sharing)

3. После этого остается только запустить сервис UniFi и зайти на веб-страницу конфигурирования контроллера http://айпи_адрес_контроллера:8080. Сервис mongoDB запускать не нужно, контроллер для работы будет запускать его самостоятельно:

# systemctl enable unifi

systemctl start unifi

4. Возможно понадобится восстановление базы данных. Производится оно командой:

# mongod --repair --dbpath /opt/UniFi/data/db/


четверг, 15 февраля 2024 г.

Перевод сервера RDP Windows 2008 R2 на AD

При подключении терминального сервера на Windows 2008 R2 к Active Directory столкнулся со следующей проблемой: "Серверу лицензирования служб терминалов не удается обновить атрибуты лицензии для пользователя "name" в домене Active Directory "domain.loc". В диспетчере лицензирования служб терминалов сервер активирован.
Решилось следующим образом... Убедился что учетная запись компьютера для сервера лицензирования входит в группу серверов лицензирования сервера терминалов в домене Active Directory "domain.loc".Если сервер лицензирования установлен на контроллере домена, учетная запись сетевой службы также должна входить в группу серверов лицензирования сервера терминалов.
Если сервер лицензирования установлен на контроллере домена после добавления соответствующих учетных записей в группу серверов лицензирования сервера терминалов, необходимо перезапустить службу лицензирования служб терминалов для прослеживания или получения отчета об использовании клиентских лицензий служб терминалов "на пользователя".
Далее идем "Пуск ---> Администрирование ---> Службы терминалов ---> Диспетчер лицензирования служб терминалов", слева Раскрываем группу "Все серверы" жмем +, видим там наш сервер (стоит восклицательный знак), щелкаем по нему правой кнопкой мыши, выбираем "Проверить настройку", видим там, что учетная запись и сервер лицензирования не входит в группу, нажимаем вступить в группу, он просит перезапустить службу лицензирования служб терминалов, перезапускаем - все начинает работать.

среда, 17 мая 2023 г.

Восстановление вкладок Safari

 Очень редко переустанавливаю Mac OS с нуля, без восстановления настроек из Time Machine, поэтому был сильно удивлен что файлов с настройками браузера Safari не оказалось на прежнем месте (где они были лет 10-15 назад)). Пришлось покопаться в системе.

В результате файлы нашлись по пути

~/Library/Containers/com.apple.Safari/Data/Library/Safari

Можно заменить всю папку Safari на новой системе, можно заменить только файлы

SafariTabs.db

SafariTabs.db-shm

SafariTabs.db-wal

После чего стартуем Safari и наслаждаемся использованием своих старых вкладок.

среда, 22 марта 2023 г.

Копирование виртуальной машины с ESXi на ESXi

Пользуемся уже глубоко устаревшим vSphere 5.5 (железо старенькое, 6 вмваря уже не встает, но со своими задачами кластер справляется), так что давно привык к миграции и клацанью мышкой по нарисованным кнопкам в гуе. Но тут вдруг на стенде столкнулся с надобностью перекинуть ВМ с ESXi1 на ESXi2 (оба с локальными датасторами) без использования промежуточной машины. Самое простое оказалось перекинуть через ssh.

Что делаем:

1) Через vmvare-клиента включаем службу ssh.



2) Разрешаем клиенту ssh ходить через firewall


3) Создаем на ESXi2 в datastore1 папку, куда будем копировать файлы переносимой ВМ.

4) Выключаем ВМ на ESXi1 и удаляем ее из ивентаря.

5) Подключаемся к ESXi1 по ssh и переходим в каталог с копируемой ВМ 

    cd /vmfs/volumes/datastore1/Имя_ВМ

6) Копируем файлы ВМ на esxi2

    scp -v -c aes128-ctr -r * root@IPадресESXi2:/vmfs/volumes/datastore1/ИмяВМ

вводим пароль  пользователя root ESXi2 и если все в порядке - начнется копирование.

среда, 15 сентября 2021 г.

Установка сервера 1С 8.3 на CentOS 7 + PostgreSQL + Apache + Haspemul + Backup

Установка и настройка ОС

0. Если ставим на виртуалку - обязательно в нее добавляем USB-контроллер, иначе хаcпэмулятор не заведется

1. Устанавливаем CentOS 7 в минимальной конфигурации, назначаем IP и имя сервера

2. Обновляем CentOS, устанавливаем исходники ядра и необходимые пакеты

yum -y install epel-release
yum -y update

yum -y install wget bzip2 traceroute net-tools nano bind-utils telnet htop atop iftop lsof tar zip unzip mc usbutils git jansson-devel ImageMagick unixODBC glibc

3. Отключаем CElinux, выставив celinux=disabled в /etc/celinux/config и перезагружаемся


Установка и настройка PostgreSQL

4. Добавляем репозиторий Postgres Pro

rpm -i http://repo.postgrespro.ru/pgpro-13/keys/centos.rpm
yum makecache


5. Устанавливаем PostgreSQL PRO std 13 версии

yum -y install postgrespro-std-13

6. Проверяем статус

systemctl status postgrespro-std-13

7. Останавливаем сервис СУБД и удаляем базу, которая создалась по-умолчанию

systemctl stop postgrespro-std-13
rm -rf /var/lib/pgpro/std-13/data


8. Инициализируем БД, модифицируем настройки под работу с 1с и добавляем поддержку русского языка

/opt/pgpro/std-13/bin/pg-setup initdb --tune=1c --locale=ru_RU.UTF-8

9. Добавляем сервис в автозагрузки и проверяем доступность порта 5432

systemctl enable --now postgrespro-std-13

ss -nltup

10. Разрешим авторизовываться пользователям из нашей сети

nano /var/lib/pgpro/std-13/data/pg_hba.conf

#IPv4 local connections:
host all all 127.0.0.1/32 md5
host all all 192.168.0.0/16 md5


11. Создадим пароль для пользователя postgres

$ su - postgres psql

ALTER USER postgres WITH ENCRYPTED PASSWORD 'наш_пароль';
\q


12. Перезапускаем сервис postgrespro-std-13

systemctl restart postgrespro-std-13

13. Настраиваем firewall для доступа к серверу извне

firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --permanent --add-port=475/tcp
firewall-cmd --permanent --add-port=1540/tcp
firewall-cmd --permanent --add-port=1541/tcp
firewall-cmd --permanent --add-port=1560/tcp
firewall-cmd --permanent --add-port=5432/tcp
firewall-cmd --reload
firewall-cmd --list-all


Установка и настройка драйвера и эмулятора HASP

14. Скачиваем драйвер HASP

cd /tmp
wget http://download.etersoft.ru/pub/Etersoft/HASP/last/x86_64/CentOS/7/haspd-8.23-eter2centos.x86_64.rpm
yum -y localinstall haspd*
systemctl restart haspd
systemctl status haspd


15. Собираем драйвера виртуального USB и UsbHasp

yum -y install "kernel-devel-uname-r == $(uname -r)"
yum -y groupinstall "Development Tools"
cd /usr/src
wget https://sourceforge.net/projects/usb-vhci/files/linux%20kernel%20module/vhci-hcd-1.15.tar.gz/download -O vhci-hcd-1.15.tar.gz
wget https://sourceforge.net/projects/usb-vhci/files/native%20libraries/libusb_vhci-0.8.tar.gz/download -O libusb_vhci-0.8.tar.gz
git clone https://github.com/sam88651/UsbHasp.git
tar -xpf vhci-hcd-1.15.tar.gz
tar -xpf libusb_vhci-0.8.tar.gz
cd vhci-hcd-1.15
mkdir -p "/usr/src/vhci-hcd-1.15/linux/$(uname -r)/drivers/usb/core"
cp "/usr/src/kernels/$(uname -r)/include/linux/usb/hcd.h" "/usr/src/vhci-hcd-1.15/linux/$(uname -r)/drivers/usb/core/"

# В файлах "usb-vhci-hcd.c" и "usb-vhci-iocifc.c" находим "#define DEBUG" и комментируем //
make KVERSION="$(uname -r)" KSRC="/usr/src/kernels/$(uname -r)"
make install

# Загружаем модули в ядро
echo "usb_vhci_hcd" | sudo tee /etc/modules-load.d/usb_vhci.conf
modprobe usb_vhci_hcd
echo "usb_vhci_iocifc" | sudo tee -a /etc/modules-load.d/usb_vhci.conf
modprobe usb_vhci_iocifc

# Собираем библиотеки libusb_vhci
cd ../libusb_vhci-0.8
./configure
make
make install
echo "/usr/local/lib" | sudo tee /etc/ld.so.conf.d/libusb_vhci.conf
ldconfig -v

# Собираем эмулятор UsbHasp
cd ../UsbHasp
# В /usr/src/UsbHasp/nbproject/Makefile-Release.mk заменить "CFLAGS=" на "CFLAGS=-std=gnu99"
make
cp /usr/src/UsbHasp/dist/Release/GNU-Linux/usbhasp /usr/bin


16. Настраиваем и запускаем USB HASP emulator

mkdir /etc/haspkey/
nano /etc/systemd/system/usbhaspemul.service


[Unit]
Description=Emulation HASP key for 1C
Requires=haspd.service
After=haspd.service
[Service]
Type=simple
ExecStart=/usr/bin/sh -c 'find /etc/haspkey -name "*.json" | xargs /usr/bin/usbhasp'
Restart=always
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable usbhaspemul

# Загружаем дампы usb-ключей в каталог /etc/haspkey/
cp /tmp/Dumps/1c_server_x64.json /etc/haspkey/
cp /tmp/Dumps/100user.json /etc/haspkey/

# Пробуем запустить USB HASP Emulator, проверяем статус
systemctl start usbhaspemul
systemctl status usbhaspemul


Установка и настройка 1С-сервера

17. Качаем последнюю версию 1С сервера с сайта 1С

18. Распаковываем архив с сервером 1С и устанавливаем его

cd /tmp
tar xvf rpm64_8.3.19.1264.tar.gz
yum -y localinstall *.rpm


19. Создадим симлинки для старта 1С-сервера как сервиса

ln -s /opt/1cv8/x86_64/8.3.19.1264 /opt/1cv8/x86_64/current
ln -s /opt/1cv8/x86_64/current/srv1cv83.conf /etc/sysconfig/srv1cv83
ln -s /opt/1cv8/x86_64/current/srv1cv83 /etc/init.d/srv1cv83

20. Меняем владельца и группу директории /opt/1C

chown -R usr1cv8:grp1cv8 /opt/1cv8/

21. Создадим и запустим сервис, проверим его статус

systemctl enable srv1cv83
systemctl start srv1cv83
systemctl status srv1cv83


22. Создаем каталог, в котором будут храниться конфигурации 1с для подключения к базе

mkdir -p /opt/1cv8/base
chown -R usr1cv8:grp1cv8 /opt/1cv8/base


23. Редактируем конфигурационный файл сервера 1с srv1cv83, указываем путь к новому каталогу

nano /etc/sysconfig/srv1cv83
SRV1CV8_DATA=/opt/1cv8/base


24. Перезапускаем сервис srv1cv83 и проверяем статус

systemctl restart srv1cv83
systemctl status srv1cv83


25. На любой компьютер устанавливаем толстый клиент 1С Предприятие той же версии что и сервер, во время установки обязательно выбираем компонент «Администрирование серверов 1С Предприятия»

26. Запускаем утилиту «Администрирование серверов 1С Предприятия», в открывшемся окне выбираем Создать - Центральный сервер 1С:Предприятие 8.3, вписываем данные настроенного сервера

Протокол: tcp
Имя: IP-адрес сервера
IP порт: 1540
Описание: Сервер 1С CentOS 7


27. Переходим в раздел Кластеры - Локальный кластер. Выбираем Создать - Информационная база. Заполняем параметры для создания новой базы

Имя: zup30
Описание: Зарплата
Защищенное соединение: выключено
Сервер баз данных: 127.0.0.1
Тип СУБД: PostgreSQL
База данных: zup30
Пользователь сервера БД: postgres
Пароль пользователя БД: ‘password’
Разрешить выдачу лицензий сервером 1С:Предприятия: Да
Язык (Страна): русский (Россия)
Создать базу данных в случае ее отсутствия: Да
Установить блокировку регламентных заданий: Нет


28. Если получаем ошибку «Этот хост неизвестен», надо прописать либо запись в DNS, либо в файле hosts

Установка и настройка публикации 1С на вебсервере Apache

29. Установка шрифтов для публикации на вебсервере

yum -y install rpm-build ttmkfdir fontconfig freetype libgsf
cd /tmp
wget https://pkgs.dyn.su/el8/base/x86_64/cabextract-1.9-2.el8.x86_64.rpm
yum -y localinstall cabextract-1.9-2.el8.x86_64.rpm
wget http://corefonts.sourceforge.net/msttcorefonts-2.5-1.spec
rpmbuild -bb msttcorefonts-2.5-1.spec

(если не скачиваются шрифты, надо запустить команду еще раз)
yum -y install $HOME/rpmbuild/RPMS/noarch/msttcorefonts-2.5-1.noarch.rpm

30. Устанавливаем веб-сервер Apache c поддержкой ssl

yum -y install httpd mod_ssl
Так как компания 1С рекомендует использовать модуль мультипроцессорной обработки worker, выясняем с каким модулем работает наш сервер
apachectl -V | grep -I mpm
И если это prefork или event
меняем его на mpm_worker в /etc/httpd/conf.modules.d/00-mpm.conf
создаем службу, запускаем апач и проверяем статус
systemctl enable --now httpd
systemctl status httpd


31. Создадим каталог, он будет использован как путь публикации для web-сервера 1с

mkdir -p /var/www/infobase

32. Создадим пустой файл, он будет указан в качестве конфигурационного файла web-сервера 1с

touch /etc/httpd/conf.d/base.conf

33. Публикуем базу 1С

cd /opt/1cv8/x86_64/current/
./webinst -apache24 -wsdir base -dir /var/www/infobase/ -connStr "Srvr=1c.server.ru;Ref= zup30;» -confPath /etc/httpd/conf.d/base.conf
chown apache:apache /var/www/infobase/default.vrd


Расширенная конфигурация публикации базы 1С на вебсервере Apache

34. Подобная публикация базы создает минимальную конфигурацию VRD, которой достаточно для работы с базой через веб, но недостаточно для работы того же Bitrix в связке с 1С, так как должны быть опубликованы и сервисы. Для Битрикса и подобных связок конфигурация должна быть примерно такая:

<?xml version="1.0" encoding="UTF-8"?>
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
base="/zup30"
ib="Srvr=1c.server.ru;Ref=zup30;">
<ws publishExtensionsByDefault="true">
<point name="AccHRMDataTransfer"
alias="AccHRMDataTransfer.1cws"
enable="true"
reuseSessions="dontuse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
<point name="EnterpriseDataExchange_1_0_1_1"
alias="EnterpriseDataExchange_1_0_1_1.1cws"
enable="true"
reuseSessions="dontuse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
<point name="EnterpriseDataUpload_1_0_1_1"
alias="EnterpriseDataUpload_1_0_1_1.1cws"
enable="true"
reuseSessions="dontuse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
<point name="EquipmentService"
alias="EquipmentService.1cws"
enable="true"
reuseSessions="dontuse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
<point name="Exchange"
alias="exchange.1cws"
enable="true"
reuseSessions="dontuse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
<point name="Exchange_2_0_1_6"
alias="exchange_2_0_1_6.1cws"
enable="true"
reuseSessions="dontuse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
<point name="Exchange_3_0_1_1"
alias="exchange_3_0_1_1.1cws"
enable="true"
reuseSessions="dontuse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
<point name="InterfaceVersion"
alias="InterfaceVersion.1cws"
enable="true"
reuseSessions="dontuse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
<point name="MobileAccounting"
alias="MobileAccounting.1cws"
enable="true"
reuseSessions="dontuse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
<point name="MobileEntrepreneur"
alias="MobileAcc.1cws"
enable="true"
reuseSessions="dontuse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
<point name="MobileEntrepreneur_1_0_2_1"
alias="MobileEntrepreneur.1cws"
enable="true"
reuseSessions="dontuse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
<point name="RemoteAdministrationOfExchange"
alias="RemoteAdministrationOfExchange.1cws"
enable="true"
reuseSessions="dontuse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
<point name="RemoteAdministrationOfExchange_2_0_1_6"
alias="RemoteAdministrationOfExchange_2_0_1_6.1cws"
enable="true"
reuseSessions="dontuse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
<point name="RemoteAdministrationOfExchange_2_1_6_1"
alias="RemoteAdministrationOfExchange_2_1_6_1.1cws"
enable="true"
reuseSessions="dontuse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
<point name="RemoteAdministrationOfExchange_2_4_5_1"
alias="RemoteAdministrationOfExchange_2_4_5_1.1cws"
enable="true"
reuseSessions="dontuse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
<point name="RemoteControl"
alias="RemoteControl.1cws"
enable="true"
reuseSessions="dontuse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
</ws>
<httpServices publishExtensionsByDefault="true">
<service name="ExternalAPI"
rootUrl="api"
enable="false"
reuseSessions="dontuse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
<service name="MobileAppReceiptScanner"
rootUrl="MobileAppReceiptScanner"
enable="false"
reuseSessions="autouse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
<service name="ПередачаДанных"
rootUrl="dt"
enable="false"
reuseSessions="use"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
<service name="ЭДО"
rootUrl="edi"
enable="false"
reuseSessions="autouse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
</httpServices>
<standardOdata enable="false"
reuseSessions="autouse"
sessionMaxAge="20"
poolSize="10"
poolTimeout="5"/>
<analytics enable="true"/>
</point>


Бэкапирование и восстановление баз 1С

35. Создаем бэкап базы данных

mkdir /opt/backup
sudo -u postgres pg_dump pnk_bis | pigz > /opt/backup/zup30.sql.gz


36. Восстанавливаем базу из бэкапа

Разархивируем бэкап базы данных
unpigz /opt/backup/zup30.sql.gz (исходный архив будет удален) или
unpigz -c /opt/backup/zup30.sql.gz > zup30.sql (исходный архив останется)
Создаем базу данных для разворачивания бэкапа
sudo -u postgres createdb -T template0 zup30_restored
Восстанавливаем бэкап в созданную базу данных
sudo -u postgres psql zup30_restored < zup30.sql 1>/dev/null
Удаляем базу данных
sudo -u postgres dropdb zup30_restored

38. Создадим скрипт для упрощения процесса бэкапирования

#!/bin/sh
# Устанавливаем дату
DATA=`date +"%Y-%m-%d_%H-%M"`
# Бэкапим базу данных zup30
echo "`date +"%Y-%m-%d_%H-%M-%S"` Start backup zup30" >> /opt/backup-sql.log
su - postgres /usr/bin/pg_dump zup30 | pigz > /opt/backup/$DATA-zup30.sql.gz
echo "`date +"%Y-%m-%d_%H-%M-%S"` End backup zup30" >> /opt/backup-sql.log
# Удаляем в папке с бэкапами архивы старше 30 дней
/usr/bin/find /backup -type f -mtime +30 -exec rm -rf {} \;


39. Создадим скрипт для анализа и переиндексации базы данных

#!/bin/sh
# Выполняем очистку и анализ базы данных
echo «`date +»%Y-%m-%d_%H-%M-%S»` Start vacuum zup30» >> /opt/service.log
sudo -u postgres vacuumdb --full --analyze zup30
echo «`date +»%Y-%m-%d_%H-%M-%S»` End vacuum zup30» >> /opt/service.log
sleep 3
# Переиндексируем базу данных
echo «`date +»%Y-%m-%d_%H-%M-%S»` Start reindex zup30» >> /opt/service.log
sudo -u postgres reindexdb zup30
echo «`date +»%Y-%m-%d_%H-%M-%S»` End reindex zup30» >> /opt/service.log

пятница, 3 сентября 2021 г.

Установка драйвера exFAT в CentOS 7


Для установки драйвера exFAT в ОС Linux 7 необходимо выполнить следующие команды:

yum install -y http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-1.el7.nux.noarch.rpm
yum install exfat-utils fuse-exfat


После этого устройство с exFAT можно подключить в систему стандартным способом:

mount /dev/sdXX /mnt/

четверг, 2 сентября 2021 г.

Установка Mate, Xfce и Cinnamon на CentOS 7

Устанавливаем EPEL репозиторий:
yum install epel-release

Устаналиваем X Window System:
yum groupinstall "X Window system"

Устаналиваем менеджер дисплеев:
yum install lightdm (либо gdm)

Устаналиваем шрифты:
yum groupinstall "Fonts"

Устанавливаем Mate:
yum groupinstall "MATE Desktop"

Устанавливаем Xfce:
yum groupinstall "Xfce"

Устанавливаем Cinnamon:
yum --enablerepo=epel -y install cinnamon*

Указываем загрузку графического интерфейса:
systemctl set-default graphical.target
systemctl isolate graphical.target

Если интерфейс не грузится делаем следующее:
rm '/etc/systemd/system/default.target'
ln -s '/usr/lib/systemd/system/graphical.target' '/etc/systemd/system/default.target'

Чтобы вернуть обычную загрузку:
systemctl set-default multi-user.target

Установим графическую оболочку для Yum:
yum install yumex


Так же можно реализовать RDP-доступ к компьютеру с помощью XRDP:
yum install xrdp tigervnc-server

Правим /etc/xrdp/xrdp.ini
    security_layer=rdp
    certificate=/etc/xrdp/cert.pem
    key_file=/etc/xrdp/key.pem
    [Xvnc]
    xserverbpp=24

Не забываем создать файл /etc/sysconfig/desktop и вписать в него строчку
    PREFERRED=cinnamon-session (вместо вызова cinnamon можно вписать gnome или другое установленное окружение)
А так же разрешить доступ к порту 3389
firewall-cmd --permanent --zone=public --add-port=3389/tcp
firewall-cmd --reload


Запускаем xrdp и делаем его сервисом:
systemctl enable xrdp
systemctl start xrdp



среда, 22 ноября 2017 г.

Установка драйвера RAID Adaptec 5405 на VMware ESXi 5.5

Долгое время бился над проблемой нестабильной работы ESXi в кластере vSphere на серверах Supermicro с raid-контроллером Adaptec 5405. Ни с того ни с сего отваливалось управление гипервизором после перезагрузки, попытка зайти через web приводила к 503 ошибке. Выяснил что падает служба hostd, перешерстил весь интернет как это можно исправить, перепробовал все найденые варианты - ничего не помогало, либо помогало временно и после перезагрузки происходило все то же самое. Самым быстрым временным решением оказался сброс сервера к параметрам по умолчанию, с последующим введением его обратно в кластер (все VM перед этим надо, естественно, не забыть мигрировать на другие сервера) и настройкой.
На днях случайно обнаружил после каких действий происходит данная проблема - все начинается после включения драйвера iSCSI. Последующая перезагрузка приводит к падению hostd (а бывает все падает и сразу после включения). Так как виртуалки лежат на внешних iSCSI-хранилищах - нет возможности драйвер не включать, в связи с этим было принято решение попытаться найти драйвер от производителя и попробовать его поставить вместо родного системного.

1. Драйвер нашелся по адресу https://storage.microsemi.com/en-us/support/raid/sas_raid/sas-5405/
2. Распаковал его и vib из архива закинул на локальный датастор сервера
3. Зашел на сервер по ssh и выполнил команду esxcli software vib install –v /path/async-driver.vib
4. Перезагрузил сервер.

пятница, 25 августа 2017 г.

Решение ошибки Host CPU is incompatible with the virtual machine’s requirements at CPUID level 0x1 register ‘eax’ при попытке миграции виртуальной машины в ESXI 5.5

При добавлении более новых серверов в кластер vSphere бывает что попытка мигрировать с помощью vMotion виртуальную машину с одного хоста на другой приводит к ошибке Host CPU is incompatible with the virtual machine's requirements at CPUID level 0x1 register 'eax'

Это происходит из за того что процессоры у старых и новых серверов немного различаются по набору поддерживаемых инструкций. Решить эту проблему можно с помощью функции EVC, но с определенными оговорками - процессоры на хостах должны иметь одинаковый набор инструкций и быть близкими друг к другу по функциям и инструкциям. В идеале один тип CPU или же одно поколение и один и тот же набор инструкций (например, линейка Intel Xeon 54XX). Это главное и главный подводный камень. Частота и другие параметры CPU не важны. Также важна основная архитектура и производитель, например, совместить хосты с Intel и AMD CPU не получится.

Переходим в настройки нашего кластера и идем в пункт vMware EVC. Кликаем по пункту Change EVC Mode и выбираем вашу архитектуру, в моем случае это Intel. Я выбрал Intel Westmere Gen.


Перед включением EVC необходимо выключить виртуальные машины на том хосте, который будет выравниваться по функциям. Обычно хост с более новыми CPU выравнивается под более старые CPU другого хоста.

После применения EVC можно мигрировать машины между хостами в кластер.

По окончании процесса перемещения нужно отключить EVC Mode.

среда, 23 августа 2017 г.

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

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

1. Закрыть все открытые окна и нажать Alt + F4

2. Открыть Пуск > Выполнить и выполнить команду shutdown -r -f -t 5

четверг, 27 апреля 2017 г.

Решение проблемы обновления Elastix 2.5

В один прекрасный момент после установки последней версии Elastix 2.5 перестали устанавливаться аддоны и обновляться система, а так же yum в консоли начал ругаться на mirrorlist. Решение нашлось простое - надо подправить файлик /etc/yum.repos.d/CentOS-Base.repo приведя его к следующему виду:

[base]
name=CentOS-$releasever - Base
#mirrorlist=http://vault.centos.org/?release=$releasever&arch=$basearch&repo=os
baseurl=http://vault.centos.org/5.11/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
exclude=redhat-logos php53*

#released updates
enabled=1

[updates]
name=CentOS-$releasever - Updates
#mirrorlist=http://vault.centos.org/?release=$releasever&arch=$basearch&repo=updates
baseurl=http://vault.centos.org/5.11/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
exclude=redhat-logos php53*

#additional packages that may be useful
enabled=1

[extras]
name=CentOS-$releasever - Extras
#mirrorlist=http://vault.centos.org/?release=$releasever&arch=$basearch&repo=extras
baseurl=http://vault.centos.org/5.11/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
exclude=redhat-logos php53*

#additional packages that extend functionality of existing packages
enabled=1

[centosplus]
name=CentOS-$releasever - Plus
#mirrorlist=http://vault.centos.org/?release=$releasever&arch=$basearch&repo=centosplus
baseurl=http://vault.centos.org/5.11/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
exclude=redhat-logos php53*

#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib
#mirrorlist=http://vault.centos.org/?release=$releasever&arch=$basearch&repo=contrib
baseurl=http://vault.centos.org/5.11/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
exclude=redhat-logos php53*

четверг, 6 апреля 2017 г.

Расширение раздела жесткого диска на FreeBSD 10

На виртуальном сервере, построенном на FreeBSD 10.1, начало заканчиваться место, решил увеличить размер раздела. Для этого средствами vmware увеличил размер виртуального диска с 200 до 250 гигабайт в настройках виртуальной машины. После чего пришлось чуть поколдовать в консоли самого сервера.

1. Смотрим разделы нашего диска (у меня один диск /dev/da0)

gpart show da0

=>   0   -------     da0 BSD (250G)
-------     -------    1   freebsd-ufs (512M)
-------     -------    2   freebsd-ufs (196G)

-------     -------    3   freebsd-swap (4G)
-------     -------    - free -    (46G)
Стоит проверить не поврежден ли диск, это можно сделать с помощью "gpart list da0", если видим "state: CORRUPT" исправляем с помощью "gpart recover da0"

2. Основной проблемой является третий раздел со swap. Из за него не выйдет увеличить раздел 2. Можно конечно создать вслед за разделом подкачки еще один раздел, но мне такой вариант не подходит, поэтому первым делом перегружаю сервер в single user

3. Деактивирую swap

swapoff -a

4. Удаляю временно swap da0p3, чтобы затем расширить da0p2 (freebsd-ufs)

gpart delete -i 3 da0

5. Расширяю da0p2

gpart resize -i 2 -s 246G da0

6. Создаю swap

gpart add -t freebsd-swap da0

7. Расширяю логический диск da0p2

growfs /dev da0p2

8. Смотрим что получилось

gpart show da0

=>   0   -------     da0 BSD (250G)
-------     -------    1   freebsd-ufs (512M)
-------     -------    2   freebsd-ufs (246G)

-------     -------    3   freebsd-swap (4G)

На этом расширение диска завершено. Совет - делайте бэкапы, никто не застрахован от потери данных при таких манипуляциях с дисками.

понедельник, 23 января 2017 г.

Автоматизация установки списков отзыва и сертификатов с помощью Certmgr.exe



С помощью небольшой утилиты certmgr.exe можно настроить автоматизацию установки списков отзыва (crl) и сертификатов.

Синтаксис:
certmgr.exe [-add | -del | -put] [options] [-s[-r registryLocation]] [sourceStorename] [-s[-r registryLocation]] [destinationStorename]

Параметры:
-add Добавление сертификатов, списков CTL и CRL в хранилище сертификатов.
-all Добавляет все записи при использовании с параметром -add. Удаляет все записи при использовании с параметром -del. Отображает все записи при использовании без параметров -add и -del Параметр -all не может быть использован с параметром -put.
-c Добавляет сертификаты при использовании с параметром -add. Удаляет сертификаты при использовании с параметром -del. Сохраняет сертификаты при использовании с параметром -put Отображает сертификаты при использовании без параметра -add, -del или -put.
-CRL При использовании с параметром -add добавляет списки отзыва сертификатов (CRL). При использовании с параметром -del удаляет списки отзыва сертификатов (CRL). Сохраняет CRL при использовании с параметром -put. Отображает списки отзыва сертификатов при использовании без параметра -add, -del или -put.
-CTL При использовании с параметром -add добавляет списки доверия сертификатов (CTL). При использовании с параметром -del удаляет списки доверия сертификатов (CTLs). Сохраняет CTL при использовании с параметром -put. Отображает списки доверия сертификатов при использовании без параметра -add, -del или -put.
-del Удаление сертификатов, списков CTL и CRL из хранилища сертификатов.
-e тип_шифрования = Указывает тип шифрования сертификата. Значение по умолчанию — X509_ASN_ENCODING.
-f dwFlags Задает флаг открытого хранилища. Это параметр dwFlags, передаваемый методу CertOpenStore. По умолчанию используется значение CERT_SYSTEM_STORE_CURRENT_USER Этот параметр обрабатывается, только если задан параметр -y.
-h[elp] Отображает синтаксис команд и параметров программы.
-n имя Задает общее имя добавляемого, удаляемого или сохраняемого сертификата. Этот параметр может применяться только для сертификатов, его нельзя задавать для списков CTL и CRL.
-put Сохранение сертификатов X.509, списков CTL и CRL из хранилища сертификатов в файл. Файл сохранен в формате X.509. Чтобы сохранить файл в формате PKCS #7, можно использовать параметр -7 с параметром -put. За параметром /put должен следовать параметр -c, -CTL или -CRL Параметр /all не может быть использован с параметром -put.
-r расположение Указывает расположение системного хранилища в реестре. Этот параметр обрабатывается, только если задан параметр -s. расположение должно быть одним из следующих:currentUser означает, что хранилище сертификатов находится в разделе HKEY_CURRENT_USER. Это значение по умолчанию. localMachine означает, что хранилище сертификатов находится в разделе HKEY_LOCAL_MACHINE.
-s Означает, что хранилище сертификатов является системным. Если этот параметр не задан, хранилище считается StoreFile.
-sha1 Хэш sha1 Задает хэш SHA1 добавляемого, удаляемого или сохраняемого сертификата.
-v Включает отображение подробных сведений о сертификатах, списках CTL, CRL. Этот параметр несовместим с параметрами -add, -del или -put.
-y поставщик Задает имя поставщика хранилища.
-7 Сохраняет итоговое хранилище как объект PKCS #7.

Пример "Установить сертификат vld-dc-1.cer на локальный компьютер, в хранилище "Промежуточные центры сертификации"

certmgr.exe -add -c vld-dc-1.cer -s -r localMachine CA.

среда, 28 декабря 2016 г.

Оптимизация изображений на сайте включая все подкаталоги

find . -type f -regex ".*\.\(jpg\|jpeg\|JPG\|JPEG\)" -exec jpegoptim -svt '{}' \; > optimize_jpeg.log

find . -type f -regex ".*\.\(png\|PNG\)" -exec optipng '{}' \; > optimize_png.log

Естественно утилиты jpegoptim и optipng должны быть установлены.

вторник, 20 декабря 2016 г.

Копирование файлов со структурой каталогов по маске

Встала задача - перенести все изображения с путями с одного вебсайта на другой. Немного подумал, почитал, получилось вот такое решение:

cd  /var/www/vhosts/site
find . -regex '.*\(jpg\|jpeg\|JPG\|JPEG\|png\|PNG\|gif\|GIF\)' | cpio -pdmuv /var/www/vhosts/site-new

Команда копирует все файлы с расширением jpg из каталога /var/www/vhosts/site в каталог /var/www/vhosts/site-new с построением полной структуры каталогов.

четверг, 29 сентября 2016 г.

Очистка кэша DNS в Mac OS El Capitan, Lion

Для очистки куша DNS в последних версиях Mac OS X, нужно в терминале выполнить команду:

Sudo killall -HUP mDNSResponder

пятница, 5 августа 2016 г.

MySQL - разделение и уменьшение файла ibdata1

Файл ibdata1 является частью InnoDB, и хранит в себе данные таблиц, их индексы и другую служебную информацию. Со временем этот файл может увеличиться до совсем неприличных размеров. Что бы упростить работу с этим файлов – можно разделить его, создав отдельный файл для каждой базы данных и таблицы, с помощью опции innodb_file_per_table.

В MySQL версии 5.6 и выше эта опция включена по-умолчанию, в более старых – необходимо выполнить некоторые дополнительные действия.

Создаём директорию для бекапов:

#mkdir -p /var/backup/mysql
#cd backup/mysql/


Создаём резервную копию всех имеющихся баз:

#mysqldump -u root -p -ERA --flush-privileges > alldbs.sql

Удаляем все базы, кроме баз mysql и information_schema:

#mysql -u root -p -e "show databases" | grep -v Database | grep -v mysql| grep -v information_schema | grep -v db_4 | grep -v OLD | gawk '{print "drop database " $1 "; select sleep(0.1);"}' | mysql -u root -pPASSWROD

Останавливаем MySQL сервер

Удаляем старые файлы:

#rm /var/db/mysql/ibdata1
#rm /var/db/mysql/ib_logfile0
#rm /var/db/mysql/ib_logfile1


Удалить надо все файлы логов – ib_logfil*.

Редактируем файл /etc/my.cnf, и в блоке [mysqld] добавляем строку:

innodb_file_per_table = 1

Запускаем MySQL

Восстанавливаем наши базы данных:

# mysql -u root -p < alldbs.sql

Запускаем mysql_upgrade, что бы сгенерировать новую базу performance_schema:
# mysql_upgrade -u root -p --force

Так же бывает что пространство на диске забито файлами вида:

mysql-bin.index
mysql-bin.000001
mysql-bin.000002

Для удаления данных файлов выполняем:

mysql -u root -p < "purge binary logs before '2016-06-01 00:00:00'"

Dovecot – чистка ящиков

Удаление писем из папки Спам старше 12 недель для всех ящиков:

# doveadm expunge -A mailbox Junk BEFORE 12w 

Удаление писем из корзины старше 12 недель для всех ящиков:

# doveadm expunge -A mailbox Trash BEFORE 12w 

Удаление писем из Входящие старше 12 недель помеченных как DELETED для всех ящиков:

doveadm expunge -A mailbox Inbox BEFORE 12w DELETED

При выполнении команды может возникнуть ошибка типа:

Error: User listing returned failure
doveadm: Error: Failed to iterate through some users

Скорее всего неверно настроен конфиг dovecot-sql.conf.ext, должно быть что-то типа:

iterate_query =  SELECT `username` as `user` FROM `mailbox`

среда, 3 августа 2016 г.

Регулярные выражения в редакторе SED

Для осуществления отбора строк для редактирования, в адресах команд SED допускается использование регулярных выражений, заключенных в "/ /" и определяемых следующим образом:


  • Регулярное выражение указывается в разделителях: "/ /" ;
  • любой символ (кроме специальных: \[.^*$ ) является регулярным выражением себя;
  • ^ в начале регулярного выражения указывает на пустой символ в начале регулярного выражения. (Т.е. на начало строки)
  • $ в конце регулярного выражения указывает на пустой символ в конце регулярного выражения. (Т.е. на конец строки);
  • \n - вставленный newline (новая строка);
  • . - любой символ (кроме обыкновенного newline );
  • * - стоящая за регулярным выражением означает любую последовательность вхождений этого выражения, начиная с 0;
  • [ ] - указывает на один из символов, приведенных внутри;
  • [^ ] - указывает на один из символов, кроме приведенных внутри;
  • \ - перед любым символом, кроме цифр и "(" , ")" , означает этот символ. ( Экранирование специальных символов).
  • \(x\) -, где x - регулярное выражение, указывает на x .
  • \d -, где d - цифра, указывает копию d -того выражения, которое заключалось в скобки "\(" и "\)" ;
  • конкатенация регулярных выражений является регулярным выражением.


Примеры:

/olga/ - указывает на строки содержащие "olga" , "abcolgadef" ,...;
/ol.*ga/ - указывает на строки, содержащие "olga" , "olabcga" ,....;
/^[Oo]lga/ - на строки, начинающиеся с "Olga" или "olga" ;
/./ - попадают все строки, имеющие хотя бы 1 символ (не newline );
/\./ - попадают строки, содержащие "." ;
/^[^ ]/ - строки, не начинающиеся с " " ;
/\(ol\).*\1/ - строки, содержащие два вхождения "ol" не подряд.