Translate

пятница, 5 октября 2018 г.

Настройка IDLE для Python3.7

В работе на виртуальной машине для VB (OS Red Hat Enterprise Linux Server release 7.3) понадобилось использовать графическую оболочку python idle3.7
Виртуальная машина шла сразу с установленным Python3.7, но при запуске idle3.7 возникала ошибка вида:
IDLE can't import Tkinter. Your Python may not be configured for Tk.
Сразу скажу, что множество советов из Интернета на решения данной проблемы путем установки модулей ниже не работают.
# yum search tkinter
# yum install python3-tkinter-3.3.2-17.fc20.x86_64
# yum search tk-devel
# yum install tk-devel.x86_64
и т.п.
Потому, что python нужно пересобрать с tkintel используя исходники. Прочитал об этом еле заметной строчкой на stackoverflow, где дали совет что все эти модули ставить нет смысла.
Для сборки tkinter необходимо поставить две библиотеки tcl и tk. Для Python3.7 необходимы версии 8.6 и выше. Информация здесь. Установка стандартная, для команды configure не заполнял значение options, чтобы все по умолчанию поставилось. Действия выполнить для tcl и tk.
# cd tcl8.6.8/unix
# ./configure options
# make
# make test
# make install
Качаем Python (примеры для версии 3.7.1rc1)
# tar -xzf Python-3.7.1rc1.tgz
# cd Python-3.7.1rc1.tgz
и т.п.
Установка Python, в первую очередь нужно сделать конфигурацию, чтобы при сборке подтянулись установленные библиотеки tcl и tk.
# ./configure --with-tcltk-includes="-I/usr/include" --with-tcltk-libs="-L/usr/local/lib -ltcl8.6 -L/usr/local/lib -ltk8.6"
# make
*** WARNING: renaming "_tkinter" since importing it failed: libtcl8.6.so: cannot open shared object file: No such file or directory
Проблема решается тем, что необходимо указать путь до /usr/local/lib/ (где установлены tcl и tk) в переменной LD_LIBRARY_PATH. Затем собрать и установить Python.
# export LD_LIBRARY_PATH=/usr/local/lib/
# make
# make install
Теперь Idle запускается.

среда, 22 августа 2018 г.

Oracle Linux/RHEL experience

Установка Oracle Linux на машину с Windows
C Oracle Delivery необходимо скачать образ последней версии и с помощью утилиты rufus-usb создать загрузочный usb-диск. Затем идет процесс стандартной установки, за исключение указании диска на который будет установлен Linux. Нужно указать отдельный логический диск, раздел указать "\" и затем согласиться с форматированием.
После установки Linux не будет возможности загрузится под Windows, т.к. будет переписан раздел boot.
Первое, что необходимо сделать, это смонтировать ntfs-диски чтобы их было видно под Linux (использовать root):
# wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
# rpm -ivh epel-release-latest-7.noarch.rpm
# yum repolist
# yum -y install ntfs-3g
# yum install fuse
# modprobe fuse
# fdisk -l

Disk /dev/sda: 250.1 GB, 250059350016 bytes, 488397168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x14ef3102

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048    25167871    12582912   27  Hidden NTFS WinRE
/dev/sda2   *    25167872    25372671      102400    7  HPFS/NTFS/exFAT
/dev/sda3        25372672   283594751   129111040    7  HPFS/NTFS/exFAT
/dev/sda4       283594752   488394751   102400000    f  W95 Ext'd (LBA)
/dev/sda5       283596800   375754751    46078976    7  HPFS/NTFS/exFAT
/dev/sda6       375756800   406474751    15358976    7  HPFS/NTFS/exFAT
/dev/sda7       406476800   488394751    40958976    7  HPFS/NTFS/exFAT
# blkid
/dev/sda1: LABEL="PQSERVICE" UUID="9E38449238446AFB" TYPE="ntfs" 
/dev/sda2: LABEL="SYSTEM RESERVED" UUID="0CE445CBE445B82A" TYPE="ntfs" 
/dev/sda3: LABEL="Packard Bell" UUID="FE4C47F04C47A26F" TYPE="ntfs" 
/dev/sda5: LABEL="Vega" UUID="BC04FC7C04FC3B4A" TYPE="ntfs" 
/dev/sda6: LABEL="linux 2" UUID="AA90C88690C85B09" TYPE="ntfs" 
/dev/sda7: LABEL="linux" UUID="e4a041af-bb15-455b-899f-4076d1047dfe" TYPE="xfs"
На основании команд fdisk -l и blkid можно сделать вывод какой из дисков содержит в себе раздел загрузки Windows.
Затем производим монтирование
# mkdir /mnt/ntfs3
# mount -t ntfs-3g /dev/sda3 /mnt/ntfs3
# vim /etc/fstab
insert line:
/dev/sda3                                 /mnt/ntfs3              ntfs-3g defaults        0 0
Затем нужно прописать boot для Windows:
# vim /etc/grub.d/40_custom
insert text:
menuentry "Windows 7" {
set root='hd0,gpt2' chainloader /mnt/ntfs3/Windows/Boot/EFI/bootmgfw.efi boot
}
where  hd0, 0 = sda and gpt2, 2 = 3(sda3), chainloader is path to bootmgfw.efi.
Then
On BIOS-based machines, issue the following command as root:
# grub2-mkconfig -o /boot/grub2/grub.cfg
On UEFI-based machines, issue the following command as root:
# grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.1.12-112.16.4.el7uek.x86_64
Found initrd image: /boot/initramfs-4.1.12-112.16.4.el7uek.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-862.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-862.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-c45987eb98f049649f064e9d79b70e58
Found initrd image: /boot/initramfs-0-rescue-c45987eb98f049649f064e9d79b70e58.img
Found Windows Recovery Environment (loader) on /dev/sda1
Found Windows 7 (loader) on /dev/sda2
done
Все, можно загружаться под Windows.

ULN-CA-CERT is expired.
Ошибка при использовании yum "The certificate /usr/share/rhn/ULN-CA-CERT is expired. Please ensure you have the correct certificate and your system time is correct.", решается так:
# cp /usr/share/rhn/ULN-CA-CERT /usr/share/rhn/ULN-CA-CERT.old
# wget https://linux-update.oracle.com/rpms/ULN-CA-CERT.sha2
# cp ULN-CA-CERT.sha2 /usr/share/rhn/ULN-CA-CERT

Очистка места
Виртуальные машины по умолчанию создаются с ограниченным кол-вом свободного места на смонтированных дисках. Как добавить места, я уже ранее писал здесь . Мы же рассмотрим варианты очистки места.
1. Очистка кэша yum:
# yum clean packages
Eliminate  any cached packages from the system.  Note that pack-
ages are not automatically deleted after they are downloaded.

# yum clean headers
Eliminate all of the header files which yum uses for  dependency
resolution.

# yum clean all
Runs yum clean packages and yum clean headers as above.
Место освобождается неплохо:
# df -h /dev/sda3
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        25G   20G  3.5G  86% /

# yum clean all
Loaded plugins: langpacks, rhnplugin, ulninfo
Cleaning repos: dgoodwin-subscription-manager epel epel-subscription-manager
              : mongodb-org-3.6 ol7_UEKR4 ol7_latest ol7_optional_latest
              : ol7_spacewalk26_client ol7_spacewalk26_server ol7_x86_64_UEKR4
              : ol7_x86_64_latest pgdg10-updates-testing
Cleaning up everything

# df -h /dev/sda3
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        25G  6.3G   18G  27% /

четверг, 19 апреля 2018 г.

Интеграция PDI и EDQ

Постановка задачи: Система в котором в связке будут работать ETL-процессы и процессы по контролю качества данных. Предлагаемое решение от Oracle, это конечно Oracle Data integration (ODI) и Oracle Enterprise Data Quality (EDQ).
Вопрос: Существует ли потенциальная возможность заменить ODI на Pentaho Data Integration Community Edition (PDI) в качестве ETL-инструмента?
Ответ - Да, существует возможность. Подробности ниже.

В начале я бы хотел сказать, о отличном образе виртуальной машины которые предоставляет Oracle для ознакомления с EDQ. Доступна по ссылке. Все готово для начало работы с EDQ без танцев с бубнами:
- Вся необходима информация на рабочем столе
- Единая панель управления
- И конечно прекрасный бонус, механизм тестирования web service


Тестовый пример выглядит следующим образом.
Есть CSV-файл который содержит набор чисел, нужно сделать проверку отрицательное или положительное число. И результаты проверки нужно соотнести с числами и сохранить информацию.

Реализация EDQ.
- На стартовой странице тонкого клиента выбираем редактор - Director
- Запускается толстый клиент в OS и вводится пароль
- Внешний вид редактора
- Создаем новые проект и в нем создаем Web-Service
- Web-Service с опциями input и output
- Создается процесс. Процесс обязательно имеет точку входа данных Reader и точку выхода Writer
- Конфигурация Reader. Типа Realtime, указываем input опцию web-service и указываем какой входящий атрибут использовать
- Конфигурация модуля знаний по проверке значений. Указываем какой входящий атрибут использовать, и какая проверка проводится
- Конфигурация Writer. Типа Realtime, указываем output опцию web-service и указываем какой входящий атрибут c предыдущего шага использовать, матчим этот атрибут с атрибутами ответа web service.
- Запускаем Web service, и в специальном разделе тонкого клиента Web Service Tester, тестируем процесс.
- Для получения WSDL нужно скопировать URL


Реализация PDI.
- Используя SoapUI и скопированный URL получаем формы Request и Response
- Внешний вид трансформации в PDI
- На вход подается тестовый CSV, парсятся данные и подаются в качестве параметра в запрос web-servece
- Формируем степ с HTTP Post
- Парсим полученную в ответ от Web Service XML и сохраняем результаты в файл
- Запускаем интеграцию:
- Результат работы интеграции:
- Немного о дашбордах. Так выглядела статистика работы web service до запуска
- Так выглядит статистика работы web service после работы PDI. Почему 4 не прошли проверку? Помните мы web service тестировали, это и есть + 1.
- Немного красоты

четверг, 22 марта 2018 г.

Установка драйвера ruby mongodb на RHEL 7.3

Для нужд проекта начал изучать MongoDB. Взял за основу книгу Kyle Banker: MongoDB in Action, книга 2011 года, но написана интересно. Код примеров написан на ruby. Поэтому пришлось на виртуалку поставить драйвер ruby для mongodb. И тут началось :).
Использовал tutorial:
Команда:
# gem update --system
прошла.
На командах ниже появилась ошибка, хотя сам ruby был установлен
# gem install mongo
# gem install bson_ext
.....
mkmf.rb can't find header files for ruby at /usr/lib/ruby/ruby.h
.....
Советы в целом стандартные. Но не помогло.
Нашлось решение по ссылке
На команде все сломалось
# rvm requirements run
.....
No package libyaml-devel available
.....
Выяснилось, что в стандартную поставку пакет не входит, при попытке поставить через yum install libyaml-devel все получаем туже ошибку. Предлагались решения через subscription manager, я даже на linux.oracle.com ради этого зарегистрировался. Но все бесполезно. Даже такой вариант не подошел:
[root@localhost mail]# wget ftp://mirror.switch.ch/pool/4/mirror/scientificlinux/7rolling/x86_64/os/Packages/libyaml-devel-0.1.4-10.el7.x86_64.rpm
--2018-03-22 17:04:14--  ftp://mirror.switch.ch/pool/4/mirror/scientificlinux/7rolling/x86_64/os/Packages/libyaml-devel-0.1.4-10.el7.x86_64.rpm
           => ‘libyaml-devel-0.1.4-10.el7.x86_64.rpm’
Resolving mirror.switch.ch (mirror.switch.ch)... 130.59.113.36, 2001:620:0:1002::20
Connecting to mirror.switch.ch (mirror.switch.ch)|130.59.113.36|:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done.    ==> PWD ... done.
==> TYPE I ... done.  ==> CWD (1) /pool/4/mirror/scientificlinux/7rolling/x86_64/os/Packages ... done.
==> SIZE libyaml-devel-0.1.4-10.el7.x86_64.rpm ... done.
==> PASV ... done.    ==> RETR libyaml-devel-0.1.4-10.el7.x86_64.rpm ... 
No such file ‘libyaml-devel-0.1.4-10.el7.x86_64.rpm’.
Нашел, что некоторым помогает сначала установить просто
# yum install libyaml
и ошибка выше уйдет. Поставил, но не помогло. Взял по ссылке версию libyaml-devel, как у libyaml-0.1.4-11.el7_0.x86_64, скачал и выполнил:
[root@localhost Downloads]# rpm -Uvh libyaml-devel-0.1.4-11.el7_0.x86_64.rpm
warning: libyaml-devel-0.1.4-11.el7_0.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:libyaml-devel-0.1.4-11.el7_0     ################################# [100%]
Далее все Ок:
# rvm requirements run
# rvm install 2.5.0
# rvm list
# rvm get stable --auto-dotfiles
# gem update --system
# gem install mongo
# gem install bson_ext
Добавить путь до ruby в PATH. Все.

пятница, 9 февраля 2018 г.

Включение подробных логов PDI

В ходе тестирования работы расписания потребовалось получить подробный лог. Для включения подробных логов необходимо отредактировать настроечный файл pentaho-server/tomcat/webapps/pentaho/WEB-INF/classes/log4j.xml
В заголовке выставить debug="true"

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="true">
В категориях задать уровень лога, например:

<category name="org.quartz">
    <priority value="DEBUG">
</priority></category>

<category name="org.pentaho">
    <priority value="DEBUG">
</priority></category>

<category name="com.pentaho">
    <priority value="DEBUG">
</priority></category>
После изменений перезапустить сервер:
stop-pentaho.sh
start-pentaho.sh

пятница, 26 января 2018 г.

Установка PostgreSQL 10 на VB: Oracle Linux

Использовался VB 5.2 и образ Linux 7.0 Developer Day MV.
Используя root:
Install the repository RPM:
# yum install https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-redhat10-10-1.noarch.rpm
Install the client packages:
# yum install postgresql10
Optionally install the server packages:
# yum install postgresql10-server
Optionally initialize the database and enable automatic start:
# /usr/pgsql-10/bin/postgresql-10-setup initdb
# systemctl enable postgresql-10
# systemctl start postgresql-10
Используем роль postgres :
[oracle@localhost ~]$ sudo su - postgres
Полезная ссылка о командах выше.
Запускаем psql и видим список имеющихся БД:
-bash-4.2$ psql
psql (10.1)
Type "help" for help.

postgres=# \list
                                 List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------+----------+----------+-------------+-------------+-----------------------
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres

Создаем тестовую БД и проверяем подключение:
1)
-bash-4.2$ createdb xendb
-bash-4.2$ psql xendb
version:
xendb=# select version();
Для информации. Чем отличается подключение под супер-пользователем в консоли?
user:
mydb=>
The last line could also be:
mydb=#
That would mean you are a database superuser, which is most likely the case if you installed the PostgreSQL instance yourself. Being a superuser means that you are not subject to access controls.
Далее:
create role:
xendb=# CREATE ROLE xen WITH NOSUPERUSER CREATEDB CREATEROLE INHERIT LOGIN REPLICATION NOBYPASSRLS PASSWORD 'xen';
List of roles:
xendb=# \du
drop db and create again:
-bash-4.2$ dropdb xendb
-bash-4.2$ createdb xendb --owner=xen
-bash-4.2$ psql
postgres=# \list
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------+----------+----------+-------------+-------------+-----------------------
 xendb     | xen      | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
Настройки подключения. Необходим root.
# find / -name pg_hba.conf
/var/lib/pgsql/10/data/pg_hba.conf
#vim pg_hba.conf

Then change:
for "local" change method 'peer' on 'trust'

add line:
host    all             all             0.0.0.0/0               md5

Example:
# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            ident
host    all             all             0.0.0.0/0               md5
# IPv6 local connections:
host    all             all             ::1/128                 ident
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     peer
host    replication     all             127.0.0.1/32            ident
host    replication     all             ::1/128                 ident
Затем необходимо перестартовать postgres (два варианта)
1)
# systemctl stop postgresql-10
# systemctl start postgresql-10
2)
postgres=# select pg_reload_conf();

check:
-bash-4.2$ psql -U xen xendb
Для первого знакомства с СУБД подойдут готовые скрипты из исходников. Скрипт basic.sql. Я использовал пользователя oracle для этого.
Install git and clone source distribution

$ cd ..src/tutorial
$ sudo yum install postgresql-devel
$ make
$ sudo su - postgres
-bash-4.2$ cd ../src/tutorial/
-bash-4.2$ psql -U xen xendb
xendb=> \i basics.sql
Если вы хотите подключиться к БД на VB c хоста, то необходимо настроить подключение. telnet с хоста по порту 5432 не проходит.
[oracle@localhost ~]$ sudo netstat -tanp | grep 5432
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      1041/postmaster     
Listen only localhost.

edit:
[oracle@localhost ~]$ sudo netstat -tanp | grep 5432
[root@localhost ~]# cd /var/lib/pgsql/10/data
[root@localhost data]# vim postgresql.conf 

change line:
listen_addresses = 'localhost'          # what IP address(es) to listen on;
to
listen_addresses = '*'          # what IP address(es) to listen on;
И последнее, если не использовать Public схему, то ниже способ как переключиться в нужную схему:
Create schema:
$ create schema xen;
xendb=> show search_path;
   search_path   
-----------------
 "$user", public
xendb=> set search_path to xen;
xendb=> show search_path;
 search_path 
-------------
 xen