вторник, 1 сентября 2020 г.

CentOS8 установка и использование Certbot

Certbot – это скрипт, который устанавливает на сервер сертификат SSL от Let’s Encrypt и поддерживает его актуальность. https://certbot.eff.org/

Ниже описан процесс установки сертификата и его использование в сервере Apache на ОС CentOS8.

Включаем в Apache на публичном IP адресе виртуальный хост
# nano /etc/httpd/conf.d/vhost80.conf
<VirtualHost <publicIP>:80>
    DocumentRoot "/var/www/html"
    ServerName <example.domain.ru>
</VirtualHost>

<publicIP> - публичный IP нашего сервера
<example.domain.ru> - имя нашего сервера

В файле /etc/httpd/conf/httpd.conf проверяем и убеждаемся, что в директиве Listen указаны все нужные прослушиваемые порты и IP адреса (указан публичный IP адрес и порт 80)
Если в файле /etc/httpd/conf/httpd.conf уже есть имя <example.domain.ru> комментируем его:
#ServerName <example.domain.ru>

Устанавливаем certbot
# dnf install certbot python3-certbot-apache
Получение сертификата без внесения изменений в конфигурацию Apache выполняется командой:
# certbot certonly --apache
Программа задаст ряд вопросов:
Сначало необходимо ввести адрес электронной почты
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator apache, Installer apache
Enter email address (used for urgent renewal and security notices)
 (Enter 'c' to cancel): user@yandex.ru
Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org

Затем согласиться с условиями лицензионного соглашения, введя A
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -(A)gree/(C)ancel: A

Следующий вопрос о том, можно ли на указанный выше электронный адрес отправлять рассылки. Я выбираю Y – да, можно.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let's Encrypt project and the non-profit organization that
develops Certbot? We'd like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -(Y)es/(N)o: Y

Следующий вопрос спрашивает, для какого по списку домена нужно сгенерировать сертификат. Я вижу только один домен и поэтому ввожу только цифру 1.
Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  1: <example.domain.ru>
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): 1

Скрипт начнет создание сертификата

Obtaining a new certificate
Performing the following challenges:
http-01 challenge for <example.domain.ru>
Waiting for verification...
Cleaning up challenges
Subscribe to the EFF mailing list (email: user@yandex.ru).
Starting new HTTPS connection (1): supporters.eff.org

Скрипт завершается сообщением:
IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/example.domain.ru/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/example.domain.ru/privkey.pem
   Your cert will expire on 2020-11-26. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Если во время работы скрипта не было ошибок, значит сертификат сгенерировался и находиться в директории: /etc/letsencrypt/

Внедряем сертификат в Apache. Создаем новый виртуальный хост для работы с сертификатом по HTTPS протоколу
# nano /etc/httpd/conf.d/ssl-vhost.conf
<IfModule mod_ssl.c>
  <VirtualHost <publicIP>:443>
     DocumentRoot /var/www/html/
     ServerName <example.domain.ru>

     ErrorLog /var/log/httpd/error_log
     CustomLog /var/log/httpd/access_log combined

     SSLCertificateFile /etc/letsencrypt/live/example.domain.ru/fullchain.pem
     SSLCertificateKeyFile /etc/letsencrypt/live/example.domain.ru/privkey.pem
     Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>


Завершающий штрих – делаем переадресацию с HTTP на HTTPS, добавляя в файл виртуального хоста строки переадресации:
# nano /etc/httpd/conf.d/vhost80.conf
<VirtualHost <publicIP>:80>
    DocumentRoot "/var/www/html"
    ServerName <example.domain.ru>

   RewriteEngine on
   RewriteCond %{SERVER_NAME} =<example.domain.ru> [OR]
   RewriteCond %{SERVER_NAME} =<publicIP>
   RewriteRule ^ https:// <example.domain.ru> %{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>


Добавляем в crontab запуск скрипта обновления сертификата, как это рекомендуется на сайте https://certbot.eff.org
# nano /etc/crontab
# Обновление сертификатов HTTPS
0 0,12 * * * root /usr/bin/python3.8 -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew -q

воскресенье, 23 августа 2020 г.

Установка свежей версии syslog-ng в CentOS7 из исходных кодов

Установка свежей версии syslog-ng в CentOS7 из исходных кодов

В CentOS7 в репозитарии имеется версия 3.5.6-3.el7
Последняя open source версия на https://github.com/syslog-ng/syslog-ng - это 3.28. Установим свежую версию syslog-ng с поддержкой redis из исходных кодов.

Удаляем rsyslog и syslog-ng, установленные из репозитация
# yum -y remove rsyslog
# yum -y remove syslog-ng


Устанавливаем необходимые пакеты для сборки syslog-ng из исходных кодов
# yum install git nano net-tools
# yum install automake autoconf-archive libtool redis
# yum install bison flex glib2-devel openssl-devel hiredis-devel.x86_64


Скачиваем syslog-ng из git и производим сборку в директорию /usr/local.
# cd /usr/src/
# git clone https://github.com/syslog-ng/syslog-ng.git
# cd syslog-ng/
# ./autogen.sh
# ./configure --prefix=/usr/local --enable-redis
# make
# make install

Установленная программа будет тут: /usr/local/sbin/syslog-ng, конфигурационный файл тут: /usr/local/etc/syslog-ng.conf
Проверяем установленную версию syslog-ng и модуль redis:
# /usr/local/sbin/syslog-ng -V
syslog-ng 3 (3.28.1.174.g98e5d10)
Config version: 3.29
Installer-Version: 3.28.1.174.g98e5d10
...
Available-Modules: add-contextual-data,affile,afprog,afsocket,afstomp,afuser,appmodel,azure-auth-header,basicfuncs,cef,confgen,cryptofuncs,csvparser,timestamp,dbparser,disk-buffer,examples,tfgetent,graphite,hook-commands,json-plugin,kvformat,linux-kmsg-format,map-value-pairs,pseudofile,redis,secure-logging,stardate,syslogformat,system-source,tags-parser,xml
...


Используем рекомендованный в CentOS конфигурационный файл, который скачался из git вместе с исходными кодами:
# mv /usr/local/etc/syslog-ng.conf /usr/local/etc/syslog-ng.confbackup
# cp /usr/src/syslog-ng/packaging/rhel/syslog-ng.conf /usr/local/etc/syslog-ng.conf

Правим конфигурационный файл.
# nano /usr/local/etc/syslog-ng.conf
Установленная версия syslog ожидает версию конфига 3.29, поэтому исправляем первую строчку в конфигурационном файле с
@version: 3.28
на
@version: 3.29
В разделе опции добавляем строку dns-cache(no), которая требуется в новой версии конфига syslog-ng
options {
    flush_lines (0);
    time_reopen (10);
    log_fifo_size (1000);
    chain_hostnames (off);
    use_dns (no);
    dns-cache(no);
    use_fqdn (no);
    create_dirs (no);
    keep_hostname (yes);
};

Добавляем конфигурацию для прослушивания сети и помещения сообщений в базу redis.
source net { udp(ip(0.0.0.0) port(514) log_msg_size(8000) ); };
destination d_net {
    redis(
        host(127.0.0.1)
        port(6379)
        command("rpush" "logs" "${R_YEAR}-${R_MONTH}-${R_DAY} ${R_HOUR}:${R_MIN}:${R_SEC}|${HOST}|${PRIORITY}|$MSGHDR${MSG}")
    );
};
filter f_net_10 {
    netmask(10.0.0.0/8);
};
filter f_net_172 {
    netmask(172.16.0.0/12);
};
log { source(net); filter(f_net_10); destination(d_net); };
log { source(net); filter(f_net_172); destination(d_net); };

Затем комментируем строку, подключения других конфигов (опционально)
#@include "/etc/syslog-ng/conf.d/*.conf"

Запускаем syslog-ng так: # /usr/local/sbin/syslog-ng -f /usr/local/etc/syslog-ng.conf
Проверяем прослушивание порта 514:
# netstat -ltupn | grep syslog
udp        0   0 0.0.0.0:514  0.0.0.0:*   1338/syslog-ng

Проверяем запущенную службу:
# ps ax | grep syslog
 1357 ?  S    0:00 supervising syslog-ng
 1358 ?  Ssl  0:00 /usr/local/sbin/syslog-ng -f /usr/local/etc/syslog-ng.conf

При старте сервиса могут быть предупреждения, которые связаны с версией конфигурационного файла. Лечится исправлением первой строчки (@version: 3.28 на @version: 3.29) в конфиг файле:
[2020-08-22T18:01:13.166587] WARNING: Configuration file format is too old, syslog-ng is running in compatibility mode. Please update it to use the syslog-ng 3.29 format at your time of convenience. To upgrade the configuration, please review the warnings about incompatible changes printed by syslog-ng, and once completed change the @version header at the top of the configuration file; config-version='3.28'
 [2020-08-22T18:01:13.331169] WARNING: The internal_queue_length stat counter has been renamed to internal_source.queued. The old name will be removed in future versions; config-version='3.28'

При отсутствии строчки dns-cache(no) при запуске будет ошибка:
[2020-08-22T18:01:13.328914] WARNING: With use-dns(no), dns-cache() will be forced to 'no' too!;
При незапущенном REDIS будет выходить ошибка. При запущенном REDIS ошибка не возникает:
[2020-08-22T18:07:41.059045] REDIS server error during connection; driver='d_elis#0', error='Connection refused', time_reopen='10'

Для запуска syslog создадим сервис.
# touch /usr/lib/systemd/system/syslog-ng.service
# chmod 664 /usr/lib/systemd/system/syslog-ng.service
# nano /usr/lib/systemd/system/syslog-ng.service

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

[Unit]
Description=System Logger Daemon
Documentation=man:syslog-ng(8)
After=network.target redis.service

[Service]
Type=notify
Sockets=syslog.socket
ExecStart=/usr/local/sbin/syslog-ng -F -f /usr/local/etc/syslog-ng.conf -p /var/run/syslogd.pid
ExecReload=/bin/kill -HUP $MAINPID
StandardOutput=journal
StandardError=journal
Restart=on-failure

[Install]
WantedBy=multi-user.target


# systemctl daemon-reload
# systemctl start syslog-ng.service
# systemctl enable syslog-ng.service


среда, 15 июля 2020 г.

Установка Linux LUBUNTU на тонкий клиент HP t520

Установка Linux LUBUNTU на тонкий клиент HP t520

На тонких клиентах по умолчанию установлена ОС Windows Embedded, сменить которую не так просто.

Для того что бы установить на тонкий клиент полноценную, пусть и легковесную систему Linux, необходимо внести изменения в BIOS.
Для доступа в BIOS после включения устройства, нужно сразу нажимать клавишу ESC. Получим меню BIOS.
 

Нажимаем клавишу F10  - «Bios Setup»
Переходим в меню Security -> Secure Boot Configuration. Получим предупреждение страшного красного цвета.
 

Продолжаем, нажав клавишу F10. В появившемся меню устанавливаем:
Legacy Support = Disable
Key Ownership = Custom Keys
 

Нажимаем клавишу F10
Затем переходим в меню BIOS: Storage -> Boot Order. Здесь необходимо изменить порядок загрузки – на первое место установить «USB Hard Drive» (по умолчанию стоит «USB Floppy/CD»).
Для перемещения пунктов в списке, устанавливаем на нужном пункте стрелку, нажимаем ENTER. Пункт подсветиться. Стрелками перемещаем пункт в списке. Снова нажимаем ENTER для применения.
 

Нажимаем клавишу F10.
Вставляем загрузочную флешку с дистрибутивом LINUX.
Переходим в пункт меню File -> Save and Exit. Выбираем yes (по умолчанию) и нажимаем ENTER.
Теперь тонкий клиент должен загрузиться с флешки.

При загрузке с флешки с Linux LUBUNTU имеем меню загрузчика.
 

Выбираем Start Lubuntu и нажимаем ENTER. Произойдет загрузка ОС LUBUNTU в LIVE режиме. Для установки ОС в систему кликаем по иконке «Install Ubuntu»
 

Откроется меню установки LUBUNTU.
Выбираем язык установки и нажимаем «Далее».
Выбираем регион (например Europe / Samara) и нажимаем «Далее».
Выбираем раскладку клавиатуры English (US) / Default и нажимаем «Далее».
Затем выбираем ручную разметку диска и нажимаем «Далее».
Формируем новую таблицу разделов. Создаем два раздела:
Первый раздел размером 512М с файловой системой FAT32 и сточкой монтирования /boot/efi.
Разделу установить флаги boot и esp.
Второй раздел с оставшимся местом с файловой системой EXT4 и точкой монтирования /.
  


Далее в меню инсталлятора нужно задать имя пользователя, имя машины и нажать «Далее».
Затем в появившемся окне проверить параметры установки и нажать «Установить». Подтвердить действие.
 

После не очень длительного процесса установки на экране должно появиться сообщение о завершении:
 

Нажимаем «Перезагрузить», система должна загрузиться уже в рабочем режиме с внутреннего диска. При этом флешку можно сразу не вынимать, первая загрузка после установки должна пройти с жесткого диска тонкого клиента.

вторник, 14 июля 2020 г.

Настройка сети на ПК с LUBUNTU

Настройка сети на ПК с LUBUNTU

Проверка названия интерфейсов:
$ ip a                                                                                                             
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000                                 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00                                                                   
    inet 127.0.0.1/8 scope host lo                                                                                          
       valid_lft forever preferred_lft forever                                                                              
    inet6 ::1/128 scope host                                                                                                
       valid_lft forever preferred_lft forever                                                                              
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000                       
    link/ether c8:cb:b8:1a:58:01 brd ff:ff:ff:ff:ff:ff                                                                      
    inet 10.10.49.226/24 brd 10.10.49.255 scope global noprefixroute enp1s0                                                 
       valid_lft forever preferred_lft forever                                                                              
    inet6 fe80::cacb:b8ff:fe1a:5801/64 scope link
       valid_lft forever preferred_lft forever


Проверка наличия в системе сетевых адаптеров:
$ lshw -C network
WARNING: you should run this program as super-user.
  *-network                
       description: Ethernet interface
       product: RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller
       vendor: Realtek Semiconductor Co., Ltd.
       physical id: 0
       bus info: pci@0000:01:00.0
       logical name: enp1s0
       version: 0c
       serial: c8:cb:b8:1a:58:01
       size: 100Mbit/s
       capacity: 1Gbit/s
       width: 64 bits
       clock: 33MHz
       capabilities: bus_master cap_list ethernet physical tp mii 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd autonegotiation
       configuration: autonegotiation=on broadcast=yes driver=r8169 duplex=full firmware=rtl8168g-2_0.0.1 02/06/13 ip=10.10.49.226 latency=0 link=yes multicast=yes port=MII speed=100Mbit/s
       resources: irq:31 ioport:e000(size=256) memory:fea00000-fea00fff memory:d0800000-d0803fff
  *-network
       description: Network controller
       product: BCM43228 802.11a/b/g/n
       vendor: Broadcom Inc. and subsidiaries
       physical id: 0
       bus info: pci@0000:02:00.0
       version: 00
       width: 64 bits                                                                                                       
       clock: 33MHz                                                                                                         
       capabilities: bus_master cap_list                                                                                    
       configuration: driver=bcma-pci-bridge latency=0                                                                      
       resources: irq:33 memory:fe900000-fe903fff                                                                           
WARNING: output may be incomplete or inaccurate, you should run this program as super-user.        


Для прописывания статического IP адреса на интерфейсе в UBUNTU используется утилита netplan
Файл конфигурации находиться в директории /etc/netplan/. Он может иметь разное имя, у меня назывался так: 01-network-manager-all.yaml
# nano /etc/netplan/01-network-manager-all.yaml
Пример файла конфигурации для статического интерфейса:
network:
  version: 2
  renderer: NetworkManager
  ethernets:
    enp1s0:
      addresses: [10.10.49.226/24]
      gateway4: 10.10.49.254
      dhcp4: no
      dhcp6: no
      nameservers:
        addresses: [10.10.50.2,46.20.64.1]


Проверка конфигурации netplan, выполняется командой:
# netplan try
Если в файле конфигурации есть ошибки, утилита покажет место ошибки, если ошибок нет, то выдаст предупреждение с обратным отсчетом применения. Для применения настроек нужно нажать ENTER.
Do you want to keep these settings?
Press ENTER before the timeout to accept the new configuration
Changes will revert in 117 seconds
Configuration accepted.




суббота, 4 июля 2020 г.

Установка Apache 2.4, PHP7, SQLite3 в Windows 10

Apache 2.4, PHP7, SQLite3 на Windows 10

Apache

Apache скачиваем с сайта https://www.apachehaus.com/, например для 64 разрядной ОС нужно скачать файл: httpd-2.4.43-o111g-x64-vc15.zip. Создаем папку C:\Apache24 и распаковываем туда содержимое папки Apache24 из zip архива.
Запускаем командную строку и переходим в папку C:\Apache24\bin.
Запуск Apache выполняем так: C:\Apache24\bin>httpd.exe. При срабатывании Защитника Windows, предоставляем Apache доступ:
 
Пока мы не закрыли терминал, Apache будет работать. Увидеть приветственную страницу можно открыв в браузере адрес http://localhost/


PHP

PHP7 скачиваем с сайта https://windows.php.net/. Нам нужен архив с Thread Safe, например, файл php-7.4.7-Win32-vc15-x64.zip. Создаем папку C:\php7 и распаковываем туда содержимое zip архива.
Открываем файл C:\Apache24\conf\httpd.conf
После списка загружаемых модулей добавляем строки:
LoadModule php7_module "c:/php7/php7apache2_4.dll"
PHPIniDir "c:/php7"

В раздел <IfModule mime_module>….</IfModule> вставляем строки
    AddHandler application/x-httpd-php .php
    AddType application/x-httpd-php .php .html

В директории
<IfModule dir_module>…  </IfModule>
Меняем DirectoryIndex index.html на DirectoryIndex index.php index.html
Перезапускаем сервер Apache (CTRL+C, потом снова httpd.exe в командной строке).
Создаем файл phpinfo.php в каталоге C:\Apache24\htdocs\ с содержимым: <?php phpinfo(); ?>. Проверить отображение можно по ссылке: http://localhost/phpinfo.php:
 

SQLite

Специально устанавливать sqlite не нужно. PHP уже обладает модулем работы с этой базой данных.
Копируем файл C:\php7\php.ini-production в файл C:\php7\php.ini.
Для поддержки SQLite3 в файле php.ini нужно раскомментировать и модифицировать строки:
;extension=pdo_sqlite меняем на extension=c:\php7\ext\php_pdo_sqlite.dll
;extension=sqlite3 меняем на extension=c:\php7\ext\php_sqlite3.dll
Проверяем поддержку SQLite, создав в файл C:\Apache24\htdocs\sqlitetest.php с содержимым:
<?php
$dbname='base';
if(!class_exists('SQLite3')) die("SQLite 3 NOT supported.");
$base=new SQLite3($dbname, 0666);
echo "SQLite 3 supported.";
?>

Запускаем его в браузере:
http://localhost/sqlitetest.php
Должны получить:
 



Установка новой версии Python3 с SSL на старый Linux CentOS6 или CentOS7

Установка новой версии Python3 с SSL на старый Linux CentOS6 или CentOS7

Установим новую версию Python3 так, что бы она не мешала существующей версии Python2. Устанавливать Python3 будем с поддержкой SSL, так как без SSL установка дополнительных модулей с помощью pip может быть проблемой.
ПРИМЕЧАНИЕ. Пример ошибки, которая будет возникать при использовании альтернативной версии python3 в ОС без SSL:
ERROR: Could not find a version that satisfies the requirement requests (from versions: none)
WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
Could not fetch URL https://pypi.org/simple/pip/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(Max retries exceeded with url: /simple/pip/ (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not

 
Устанавливаем утилиты wget и nano, если они еще не стоят в системе:
# yum install wget nano
Устанавливаем пакеты, необходимые для сборки Python3
# yum install gcc openssl-devel bzip2-devel sqlite-devel
Переходим в папку, куда будем скачивать исходные коды:
# cd /usr/src

Для сборки python3.8 с поддержкой SSL нужен собранный из исходников openssl. Для openssl нужен perl5.
Устанавливаем perl5
# wget http://www.cpan.org/src/perl-5.10.1.tar.gz
# tar -xf perl-5.10.1.tar.gz
# cd perl-5.10.1
# sh Configure -de -Dusethreads
# make
# make install
# cd ..


Устанавливаем openssl свежей версии в папку /usr/local/openssl
# wget https://www.openssl.org/source/openssl-1.1.1g.tar.gz
# tar xzf openssl-1.1.1g.tar.gz
# cd openssl-1.1.1g/
# ./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl
# make
# make install
# cd ..


Делаем символьную ссылку на установленные библиотеки в основной каталог библиотек операционной системы:
# ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1
# ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1

ПРИМЕЧАНИЕ: Если не прописать символьные линки, то в процессе установки Python будут выходить ошибки:
error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
error while loading shared libraries: libcrypto.so.1.1: cannot open shared object file: No such file or directory


Скачиваем дистрибутив Python
# wget https://www.python.org/ftp/python/3.8.3/Python-3.8.3.tgz
# tar xzf Python-3.8.3.tgz
# cd Python-3.8.3

Для сборки Python c поддержкой SSK, необходимо указать сборщику, где лежит недавно установленный openssl/. Это делается в файле /usr/src/Python-3.8.3/Modules/Setup
# nano Modules/Setup
Здесь нужно найти блок:
#SSL=/usr/local/ssl
#_ssl _ssl.c \
#       -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
#       -L$(SSL)/lib -lssl –lcrypto

И заменить путь к SSL:
SSL=/usr/local/openssl
_ssl _ssl.c \
      -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
      -L$(SSL)/lib -lssl -lcrypto

Проводим установку Python с применением altinstall
Опция altinstall используется для того, что бы не заменить текущую версию python
# ./configure --enable-optimizations
# make altinstall


Проверка версий Python:
# python3.8 -V
Python 3.8.3

А текущая версия осталась прежней:
# python -V
Python 2.6.6


Для использования pip с предустановленным python 2.6, устанавливаем его так:
# yum install epel-release
# yum install python-pip

Установка пакетов теперь возможна через pip
# pip install mysql-connector
# pip install requests

Установка пакетов для python3 выполняется через pip3
# pip3.8 install requests



вторник, 30 июня 2020 г.

Установка и использование MONIT в CentOS

MONIT - утилита мониторинга процессов
Установка MONIT выполняется в CentOS из репозитария epel:
# yum install monit
Основной файл конфигурации - monitrc
В CentOS8 и CentOS7 лежит, как правило, тут - /etc/monitrc
В CentOS6 файл конфигурации тут: /etc/monit.conf
Дополнительная папка с конфигами - /etc/monit.d/

Редактируем файл /etc/monitrc (/etc/monit.conf)
Блок отвечающий за WEB-морду, работающую на порту 2812 изменяем для доступа по сети, например:
set httpd port 2812 and
    use address <IP адрес>
    allow localhost   
    allow 10.0.0.0/8
    allow admin:monit

Проверяем, что слдедующая директива расскоментирована:
include /etc/monit.d/*

Простой запуск службы выполняется так:
# monit
Регистрация в автозапуск при загрузке Linux:
В CentOS7 и 8 - # systemctl enable monit
В CentOS6  - # chkconfig monit on

Для доступа к MONIT по HTTPS открываем порт 2812
FIRREWALLD:
# firewall-cmd --permanent --add-port=2812/tcp
# firewall-cmd --reload


Доступ к интерфейсу MONIT по HTTP выполняется по URL http://<ip-адрес>:2812, логин admin, пароль monit
Вот так можно получить данные в XML http://<ip-адрес>:2812/_status?format=xml

Для наблюдения за сервисами нужно создать файлы мониторинга сервисов и поместить их в /etc/monit.d/
Примеры конфигурации мониторинга систем:
Сама система:
/etc/monit.d/system
check system $HOST
    if loadavg (1min) per core > 4 for 5 cycles then alert
    if loadavg (5min) per core > 2 for 10 cycles then alert
    if cpu usage > 90% for 5 cycles then alert
    if memory usage > 85% then alert
    if swap usage > 25% then alert

Сервис MySQL
/etc/monit.d/mysql
check process mysql matching "mysqld"
    if totalmem > 500 MB for 5 cycles then alert
    if cpu > 50% for 5 cycles then alert

Сервис Apache
/etc/monit.d/apache
check process apache with pidfile /var/run/httpd/httpd.pid
    if cpu > 60% for 2 cycles then alert
    if totalmem > 300.0 MB for 5 cycles then alert
    if children > 250 then alert
    if disk read > 500 kb/s for 10 cycles then alert
    if disk write > 500 kb/s for 10 cycles then alert

Сервис Zabbix
check process zabbix with pidfile /var/run/zabbix/zabbix_server.pid
    if cpu > 70% for 2 cycles then alert
    if totalmem > 1000.0 MB for 5 cycles then alert


Проверка конфигурации:
# monit -t
Рестарт демона, после изменения настроек:
# monit reload

суббота, 20 июня 2020 г.

База RIAK и клиент PYTHON

База RIAK и клиент PYTHON

Для корректной работы клиента RIAK, кроме самого PYTHON нужны дополнительные расширения:
#yum install python3-devel
#yum install libffi libffi-devel
#yum install openssl-devel


Теперь можно установить расширение python:
#pip3 install riak (для CentOS8 и python3)
#pip install riak (для CentOS7)

Пример скрипта извлечения данных (семейство rooms, ключ 201)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import random
import json
import riak

myClient = riak.RiakClient(pb_port=8087, protocol='pbc', host='10.10.49.162')

myBucket = myClient.bucket('rooms')
fetched = myBucket.get('201')

print (fetched.encoded_data)
print (fetched.data)


Пример скрипта вставки данных:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import random
import json
import riak

myClient = riak.RiakClient(pb_port=8087, protocol='pbc', host='10.10.49.162')

myBucket = myClient.bucket('rooms')

STYLES = ['single', 'double', 'queen', 'king', 'suite'] # Типы номеров

for x in range(1,1000):
    style = random.choice(STYLES)
    capacity = random.randint(1, 8)
    d = {"style": style, "capacity": capacity}
    key = myBucket.new(str(x), data=d)
    key.store()


Пример скрипта получения данных MapReduce:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import random
import json
import riak

myClient = riak.RiakClient(pb_port=8087, protocol='pbc', host='10.10.49.162')

myBucket = myClient.bucket('rooms')

mapred = riak.mapreduce.RiakMapReduce(myClient)
mapred.add_bucket("rooms")
mapred.add_key_filters([["string_to_int"], ["less_than", 500]])
mapred.map("""
        function(v) {
            var parsed_data = JSON.parse(v.values[0].data);
            var data = {};
            data[parsed_data.style] = parsed_data.capacity;
            return [data];
        }
        """)
mapred.reduce("""
        function(v) {
          var totals = {};
          for (var i in v) {
            for (var style in v[i]) {
              if (totals[style]) totals[style] +=v[i][style];
              else totals[style]=v[i][style];
            }
          }
          return [totals];
        }
        """)
results = mapred.run()
print (results)

Ссылка на документацию
https://riak-python-client.readthedocs.io/en/1.5-stable/index.html


четверг, 11 июня 2020 г.

Установка базы Riak на CentOS7 и CentOS8

Установка базы Riak на CentOS7 и CentOS8

1. Отключить SELinux
# nano /etc/sysconfig/selinux
Комментируем все, вставляем строку
SELINUX=disabled
Перезагружаемся:
# reboot

2. Увеличить лимит на открывание файлов. Это делается тут:
# nano /etc/security/limits.conf
Настройки для доступа к множеству файлов одновременно:
     *    soft    nofile    65536
     *    hard    nofile    65536

Треьуется перезагрузка:
# reboot

3. Установить пакеты необходимые для сборки языка Erlang и базы Riak
# yum install gcc gcc-c++ glibc-devel make ncurses-devel openssl-devel autoconf java-1.8.0-openjdk-devel git
# yum install automake libiodbc pam-devel wget
# yum install erlang-crypto


4. Необходимо провести установку рекомендуемой версии Erlang - OTP_R16B02 в систему.
Это делается с помощью утилиты kerl
# cd /usr/src/
# curl -O https://raw.githubusercontent.com/spawngrid/kerl/master/kerl
# chmod a+x kerl
# ./kerl build git git://github.com/basho/otp.git OTP_R16B02_basho10 R16B02-basho10

Сборка выполняется долго. Сборка должна завершиться словами:
Erlang/OTP R16B02-basho10 from git has been successfully built
После сборки нужно провести установку и активацию приложения Erlang
# ./kerl install R16B02-basho10 ~/erlang/R16B02-basho10
# . ~/erlang/R16B02-basho10/activate

Проверка:
# which erl
/root/erlang/R16B02-basho10/bin/erl
# erl
Erlang R16B02_basho10 (erts-5.10.3) [source] [64-bit] [async-threads:10] [hipe] [kernel-poll:false] [frame-pointer]
Eshell V5.10.3  (abort with ^G)


5. Установка самого riak:
Для CentOS8:
# wget https://files.tiot.jp/riak/kv/2.2/2.2.6/rhel/8/riak-2.2.6-1.el8.x86_64.rpm
Если не скачивается из-за проблемы устаревшего сертификата, то можно скачать так:
# wget --no-check-certificate https://files.tiot.jp/riak/kv/2.2/2.2.6/rhel/8/riak-2.2.6-1.el8.x86_64.rpm
(Файл riak-2.2.6-1.el8.x86_64.rpm можно скачать вручную)
После скачивания:
# yum localinstall -y riak-2.2.6-1.el8.x86_64.rpm
Для CentOS7:
# wget https://files.tiot.jp/riak/kv/2.2/2.2.3/rhel/7/riak-2.2.3-1.el7.centos.x86_64.rpm
или
# wget --no-check-certificate https://files.tiot.jp/riak/kv/2.2/2.2.3/rhel/7/riak-2.2.3-1.el7.centos.x86_64.rpm
# yum localinstall -y riak-2.2.3-1.el7.centos.x86_64.rpm


6. Запуск riak
# riak start
Включенив в автозагрузку:
# systemctl enable riak.service
# riak ping - проверка работы
# riak version - версия riak
# riak-admin test –тест, команда должна показать следующее:
Successfully completed 1 read/write cycle to 'riak@127.0.0.1'
# riak stop - остановка сервиса

Конфигурационный файл тут: /etc/riak/riak.conf
Лог-файлы в директории: /var/log/riak/

7. Порты, используемые Riak.
Экземпляр Riak исполняется программой beam.smp. Список открытых портов базы riak:
# netstat -ltupn | grep beam
tcp   0  0 127.0.0.1:8087 0.0.0.0:* LISTEN      2022/beam.smp
tcp   0  0 127.0.0.1:9080 0.0.0.0:* LISTEN      2022/beam.smp
tcp   0  0 0.0.0.0:46785 0.0.0.0:*  LISTEN      2022/beam.smp
tcp   0  0 127.0.0.1:8098 0.0.0.0:* LISTEN      2022/beam.smp
tcp   0  0 0.0.0.0:8099  0.0.0.0:*  LISTEN      2022/beam.smp

Узлы кластера должны свободно взаимодействовать друг с другом по портам: TCP 4369 и TCP 8099
TCP 4369 - для демона epmd
TCP 8099 - handoff_port
В конфигурации Multi-Datacenter во взаимодействии участвует так же порт TCP 9080.
TCP 9080 - порт  cluster. Используется в конфигурациях Multi-Datacenter для репликации данных в нескольких дата-центрах
Кроме того, для обмена информацией между узлами кластера используется любой непредсказуемый порт, который согласуется при работе демона epmd. Для того что бы в файрволле не давать разрешения всем портам слушать все, задействованные порты riak нужно прописать в конфигурации /etc/riak/riak.conf. Это делается следующими директивами, которые открывают возможность выбирать порт из диапазона 6000 - 7999:
erlang.distribution.port_range.minimum = 6000
erlang.distribution.port_range.maximum = 7999

А потом перезапустить Riak
# riak stop
# riak start


Выполняем открытие портов в firewalld
# firewall-cmd --permanent --add-port=4369/tcp
# firewall-cmd --permanent --add-port=8099/tcp
# firewall-cmd --permanent --add-port=6000-7999/tcp
# firewall-cmd --reload


Подключение клиентов к базе выполняется по портам:
TCP 8098 - по протоколу HTTP    
TCP 8087 - по специальному протоколу Protocol Buffers для API клиентов
Если клиент, осуществляющий запрос находиться на этой же машине, что и узел, то открывать в firewall ничего не нужно. Если есть потребность в запросах по сети, то можно открыть так:
# firewall-cmd --permanent --add-port=8098/tcp
# firewall-cmd --permanent --add-port=8087/tcp
# firewall-cmd --reload


8. Настройка кластера riak
В кластере каждый узел riak должен иметь свое имя. Все узлы равноправны. Настройка имени узла riak выполняется в следующей директиве конфигурационного файла /etc/riak/riak.conf
nodename = <Имя узла>, например, nodename = riak@10.12.35.5
Кроме имени, IP узла должен участвовать в директивах, определяющих прослушиваемые порты:
listener.http.internal = 127.0.0.1:8098
listener.protobuf.internal = 127.0.0.1:8087

Нужно заменить в нашем случае на:
listener.http.internal = 10.12.35.5:8098
listener.protobuf.internal = 10.12.35.5:8087

Для смены имени узла riak, который запускался хотя бы один раз нужно сделать следующее:
Остановить riak
# riak stop
Удалить все временные файлы, куда имя уже прописалось:
# rm -f /var/lib/riak/ring/*
Отредактировать /etc/riak/riak.conf, выставив правильное имя, например так:
nodename = riak@10.12.35.5
Запустить riak
# riak start

Добавление узла в кластер:
#  riak-admin cluster join riak@10.12.35.5
riak@10.12.35.5- имя удаленного узла riak. Можно указать любой удаленный узел c любого узла
Для применения изменений
# riak-admin cluster plan
# riak-admin cluster commit

Проверка:
# riak-admin cluster status
# riak-admin status | grep ring_members – Полный список узлов кольца кластера Riak
# riak-admin status | grep connected_nodes – Список других узлов в кольце

9. Данные
Вставка значения в ключ favs/db:
# curl -X PUT http://<IP-адрес>:8098/riak/favs/db -H "content-Type: text/html" -d "<h1>RIAK</h1>"
Запрос данных по ключу:
# curl http://<IP-адрес>::8098/riak/favs/db

четверг, 4 июня 2020 г.

Установка gcc не ниже 5 в CentOS7


Установка gcc не ниже 5 в CentOS7

В CentOS7 gcc по умолчанию версии 4.


Установка gcc версии 8 выполняется так:
# yum install centos-release-scl
# yum install devtoolset-8-gcc devtoolset-8-gcc-c++

 

Переключение на новую версию:
# scl enable devtoolset-8 -- bash
 

Проверка:
# gcc --version
gcc (GCC) 8.3.1 20190311 (Red Hat 8.3.1-3)

 

После перезагрузки gcc будет старой версии - 4