Установка InterSystems Caché і GlobalsDB на Linux

  Так як у тих, хто вперше встановлює продукти InterSystems на Linux, часто виникають проблеми в процесі установки, я вирішив описати цей процес. На даний момент з безкоштовних версій Linux починаючи з версії 2014.1 підтримується CentOS 6.4, тому процес установки буду описувати саме на цій ОС але установка, наприклад, на Ubuntu нічим не відрізняється (хоча вона і не є зараз офіційно підтримуваної InterSystems).
 
 

Що потрібно

Для установки InterSystems Caché, нам знадобиться дистрибутив, якщо у вас його немає, то ви можете його завантажити тут . Версія для одного, для RedHat, установник у форматі tar.gz. Для установки на Ubuntu потрібно брати версію для SuSE Linux. На момент написання статті доступна версія 2014.1.
Для установки InterSystems GlobalsDB тут качаємо версію Для RedHat, на вибір пропонується Node.js або Java, але це не важливо — на скачуваний файл це не впливає.
 
 

1. Підготовка

Перш ніж почати установку, потрібно підготувати машину для роботи з Caché і GlobalsDB.
Для початку потрібно збільшити обсяг shared пам'яті який ми зможемо використовувати. Для роботи Caché і GlobalsDB потрібно більше ніж зазвичай виставлено за замовчуванням в Linux. У документації про це написано тут .
Для цього потрібно підкоригувати два параметра в sysctl, це shmall і shmmax. У мене на CentOS 6.5, вони вже при установці отримали відповідні значення і міняти не довелося (але вам можливо це зробити знадобиться).
Перевірити поточні значення можна командами (тут і далі, передбачається, що дії виконуються під користувачем root):
 
$ sysctl kernel.shmmax
kernel.shmmax = 68719476736
$ sysctl kernel.shmall
kernel.shmall = 4294967296

Як бачите, в моєму варіанті shmmax — 64GB, shmall — 4Gb.
Щоб поміняти значення, потрібно виконати команду:
 
$ sysctl kernel.shmmax=68719476736
$ sysctl kernel.shmall=4294967296
або так
 
$ echo 68719476736 > /proc/sys/kernel/shmmax
$ echo 4294967296 > /proc/sys/kernel/shmall

Але так зміни пропадуть після перезавантаження. Для того щоб потрібні нам значення працювали завжди, досить відредагувати файл
/etc/sysctl.conf
. Слід додати такі рядки, або знайти і змінити відповідні параметри якщо вони там вже є.
# Controls the maximum shared segment size, in bytes
kernel.shmmax = 68719476736

# Controls the maximum number of shared memory segments, in pages
kernel.shmall = 4294967296

 
Додатково буде потрібно виставити обсяг пам'яті, який може бути заблокований. Перевірити поточне значення (результат в кілобайтах):
 
$ ulimit -l
64
Встановити значення, чинне до перезавантаження:
$ ulimit -l 4096000
Значення, яке буде зберігатися і після перезавантаження, потрібно виставити у файлі
/etc/security/limits.conf

 
root           soft       memlock              4096000
root           hard       memlock              4096000

Після цього можна перезавантажитися і перевірити всі внесені зміни.
 
 

2. Установка

Тепер все готово до установки Caché або GlobalsDB .
 
 
Caché
Розпаковуємо завантажений tar.gz дистрибутив Caché.
 
$ mkdir cache-2014.1.0.608.0su-lnxrhx64
$ tar -zxf cache-2014.1.0.608.0su-lnxrhx64.tar.gz -C ./cache-2014.1.0.608.0su-lnxrhx64
Запускаємо установку
 
$ cd cache-2014.1.0.608.0su-lnxrhx64
$ ./cinstall

Your system type is 'Red Hat Enterprise Linux 6 (x64)'.

Currently defined instances:


Enter instance name: 
Відмінно, наша система розпізнана як підтримувана, тепер можна заповнювати необхідні параметри. Введені далі параметри вже на ваш розсуд. Тип установки думаю варто вибрати перший. Підтримка юнікод, залежить від необхідності використанні старих проектів на 8 біт, але рекомендую включити підтримку юнікод, тим більше що вже є варіанти з міграції з 8 біт на юнікод. Рівень безпеки можна поставити мінімальний. При такому рівні пароль SYS буде встановлений для всіх користувачів, а також буде активний неавторізуемий вхід. Рівень безпеки можна буде потім підвищити при необхідності.
 Прихований текст
Enter instance name: CACHE
Do you want to create Cache instance 'CACHE' <Yes>?
Enter a destination directory for the new instance.
Directory: / opt / cache
Directory '/ opt / cache' does not exist.
Do you want to create it <Yes>?

-------------------------------------------------- -
NOTE: Users should not attempt to access Cache while
      the installation is in progress.
-------------------------------------------------- -


Select installation type.
    1) Development - Install Cache server and all language bindings
    2) Server only - Install Cache server
    3) Custom
Setup type <1>?

Disk blocks required = 2372204
Disk blocks available = 22197288

Do you want to install Cache Unicode support <No>? yes

How restrictive do you want the initial Security settings to be?
"Minimal" is the least restrictive, "Locked Down" is the most secure.
    1) Minimal
    2) Normal
    3) Locked Down
Initial Security settings <1>?

What group should be allowed to start and stop
  this instance? root

Cache did not detect a license key
in directory / opt / cache / mgr.
Do you want to enter a license key <No>?

Please review the installation options:
-------------------------------------------------- ----------------
Instance name: CACHE
Destination directory: / opt / cache
Cache version to install: 2014.1.0.608.0su
Installation type: Development
Unicode support: Y
Initial Security settings: Minimal
User who owns instance: root
Group allowed to start and stop instance: root
Effective group for Cache processes: cacheusr
Effective user for Cache SuperServer: cacheusr
SuperServer port: 1972
WebServer port: 57772
JDBC Gateway port: 62972
CSP Gateway: using built-in web server
Client components: all
-------------------------------------------------- ----------------

Do you want to proceed with the installation <Yes>? 

Провереяем вірність обраних параметрів, і погоджуємося з установкою. Чекаємо завершення установки.
 
 
Starting up Cache...
Once this completes, users may access Cache
Starting CACHE
using 'cache.cpf' configuration file

Automatically configuring buffers
Allocated 351MB shared memory: 256MB global buffers, 24MB routine buffers
Creating a WIJ file to hold 31 megabytes of data
This copy of Cache has been licensed for use exclusively by:
Cache Evaluation
Copyright © 1986-2014 by InterSystems Corporation
Any other use is a violation of your license agreement


You can point your browser to http://localhost.localdomain:57772/csp/sys/UtilHome.csp
to access the management portal.

Installation completed successfully

Тепер ми можемо увійти в термінал Caché командою:
 
$ csession cache
А в портал управління Caché за посиланням http://localhost:57772/csp/sys/UtilHome.csp
Запуск і зупинка Caché виконується командами:
$ ccontrol start cache
$ ccontrol stop cache
останній параметр — це ім'я інстанси, який ми вказали при установці.
 
 
GlobalsDB
Розпаковуємо tar.gz дистрибутив GlobalsDB.
 
$ mkdir globals_2013.2.0.350.0_unix
$ tar -zxf globals_2013.2.0.350.0_unix.tar.gz -C ./globals_2013.2.0.350.0_unix
Запускаємо установку:
$ cd ./globals_2013.2.0.350.0_unix/kit_unix_globals/
$ ./installGlobals 

Enter the number for your system: 
Нам пропонують ввести номер нашої системи зі списку, але вибору немає. Це пов'язано з тим, що установка проводиться на CentOS, така ж проблема може виникнути при установці на Ubuntu версії відмінної від 11.04, так як в коді установника є жорстка прив'язка до номера версії. Для вирішення цієї проблеми застосуємо патч. Створіть файл у поточній папці з ім'ям cplatname.patch
 
$ nano cplatname.patch

і вмістом:
 
--- cplatname	2013-05-02 17:50:01.000000000 -0700
+++ cplatname.new	2014-04-05 11:43:21.676624274 -0700
@@ -114,13 +114,13 @@
 		  distName=`cat /etc/issue | cut -f1 -d" "`
 		  version=`cat /etc/issue | cut -f2 -d" " | cut -f1-2 -d"."`
 		  proc=`uname -m`
-		  if [ "$distName" = "Ubuntu" -a "$version" = "11.04" -a "$proc" = "x86_64" ] ; then
+		  if [ "$distName" = "Ubuntu" -a "$proc" = "x86_64" ] ; then
 		    plat="lnxsusex64"
 		  fi
 		fi
 		if [ -f /etc/redhat-release ]
 		then
-		    grep -P 'Red Hat Enterprise Linux .* release 6' /etc/redhat-release > /dev/null 2>&1
+		    grep -P '.* release 6' /etc/redhat-release > /dev/null 2>&1
 		    if [ $? = 0 ]
 		    then
 			proc=`uname -m`

можна скачати з GitHubGist
застосуємо новий патч, він вирішить проблему як для CentOS, так і для Ubuntu.
 
$ patch < cplatname.patch

Пробуємо повторно запустити установку:
 
$ ./installGlobals 

Installing Globals for Red Hat Enterprise Linux 6 (x64)
Enter destination directory name for this installation.
Directory :
Відмінно, тепер працює, можна встановлювати. У відмінності від Caché, тут установник від нас попросить тільки шлях установки, і після цього відразу встановить і запустить встановлений GlobalsDB.
Можна увійти в термінал GlobalsDB:
 
$ cd /opt/globalsdb/mgr/
$ ../bin/cache -s ./

^^/opt/globalsdb/mgr/>w $zv
Globals for UNIX (Red Hat Enterprise Linux for x86-64) 2013.2 (Build 350U) Thu May 2 2013 19:28:54 EDT
Запуск і зупинка сервера GlobalsDB виконується командами, в папці mgr, де був встановлений GlobalsDB:
 
$ cd /opt/globalsdb/mgr/
$ ./startGlobals 
$ ./stopGlobals 
При необхідності можна вказати розмір буфера Глобаль, наприклад 1024MB
$ ./startGlobals memory=1024

 
 

3. Автоматичний запуск і зупинка при завантаженні і виключенні машини.

«З коробки» немає готового рішення з автоматичного запуску і останову СУБД InterSystems на Linux, що справедливо як для Caché так і для GlobalsDB.
 
 
Caché
Для управління запуском і зупинкою Caché, знайшов на github скрипт від unix_junkie
качаємо і встановлюємо його:
 
$ wget https://raw.githubusercontent.com/unix-junkie/ccontrol-scripts/master/etc/init.d/cache
$ cp cache /etc/init.d/cache
$ chown root:root /etc/init.d/cache 
$ chmod 755 /etc/init.d/cache 
тепер потрібно активувати службу cache. Так це можна зробити в CentOS.
 
$ chkconfig --add cache
$ chkconfig --list cache
cache          	0:off	1:off	2:off	3:on	4:off	5:on	6:off
А так в Ubuntu.
update-rc.d cache defaults
Зауважу, що служба залежить від іншої служби InterSystems, для якої такий скрипт все таки є, це служба ISCAgent. І якщо вона зупинена то Caché не запуститься. Таке може бути після зупинки Caché.
 
 
GlobalsDB
Скрипт який підходить для Caché не підійде для GlobalsDB. Тому можу запропонувати свій варіант, взяти його можна тут .
 Прихований текст
#!/bin/bash
#
## Example of /etc/sysconfig/globalsdb
#
## Globals home directory
# GLOBALS_HOME=/opt/globalsdb
#
## Configure MB of database buffers (default=256)
# MEMORY=1024
#
### BEGIN INIT INFO
# Provides: GlobalsDB
# Required-Start: 
# Default-Start: 3 5
# Default-Stop: 0 1 2 6
# Short-Description: Starts GlobalsDB
# Description: Starts GlobalsDB
### END INIT INFO

. /etc/rc.d/init.d/functions

[ -f /etc/sysconfig/globalsdb ] && . /etc/sysconfig/globalsdb

if [ "$GLOBALS_HOME" ]; then
    if [ ! -d "$GLOBALS_HOME/mgr" ]; then
	echo "$GLOBLAS_HOME/mgr directory not found!" >&2 ; exit 1
    fi
    cd $GLOBALS_HOME/mgr
else
    echo "GLOBALS_HOME is empty" >&2 ; exit 1
fi

mgrdir=`pwd`

start() {
	echo -n "Starting Globals in $mgrdir:"
	
	args=""
	test "$MEMORY" && args=$args' memory='$MEMORY
	
	./startGlobals quietly $args 1>/dev/null 2>/dev/null
	status=$?
	
	if [ $status -eq 0 ] ; then
	    success
	else 
	    failure
	fi
	echo
	return $status
}

stop() {
	echo -n "Stopping Globals in $mgrdir: "
	
	./stopGlobals 1>/dev/null 2>/dev/null
	status=$?
	
	if [ $status -eq 0 ] ; then
	    success
	else 
	    failure
	fi
	echo

	return $status
}

restart() {
	stop
	status=$?
	if [ $status -ne 0 ] ; then
	    return $status
	fi
	
	start
	status=$?
	if [ $status -ne 0 ] ; then
	    return $status
	fi

	return ${status}
}

status() {
	
	../bin/cache -s . -cV 1>/dev/null 2>/dev/null
	status=$?
	case $status in
	   225) echo "Globals in $mgrdir is stopped"
		exit 1
		;;
	    *)
		echo "Globals in $mgrdir is running"
		exit 1
		;;
	esac
	return 0
}

usage() {
	echo "Usage: `basename $0` {start|stop|restart|status|help}"
	return 0
}

if [ $# -ne 1 ]
then
	usage
	exit 1
fi

case "$1" in
	start)
		start
		exit $?
		;;
	stop)
		stop
		exit $?
		;;
	restart)
		restart
		exit $?
		;;
	status)
		status
		exit $?
		;;
	help)
		usage
		exit $?
		;;
	*)
		usage
		exit 1
		;;
esac

 
$ wget https://gist.githubusercontent.com/daimor/10009450/raw/84856a0c360ebd91ecf442715737f51e81ccf154/globalsdb
$ chmod 755 globalsdb
$ chown root:root globalsdb
$ cp globalsdb /etc/init.d/globalsdb
Потрібно підготувати файл з настройками
# путь к установленному GlobalsDB, тот что указывали при установке
$ echo "GLOBALS_HOME=/opt/globalsdb" > /etc/sysconfig/globalsdb
# Размер буфера глобалов в мегабайтах, если вас не устраивает значение по умолчанию в 256МБ
$ echo "MEMORY=1024" >>/etc/sysconfig/globalsdb
Тепер можна включити сервіс. CentOS.
$ chkconfig --add globalsdb
$ chkconfig --list globalsdb
globalsdb      	0:off	1:off	2:off	3:on	4:off	5:on	6:off
Ubuntu
update-rc.d globalsdb defaults

 
 

4. Віддалений доступ до терміналу Caché

Тепер про можливість підключиться до терміналу Caché з віддаленої машини. Звичайно, маючи telnet або ssh доступ до машини, можна після авторизації запускати
csession
. Але такий шлях не всім і не завжди може бути зручний. Я розгляну варіант як зробити віддалене підключення відразу в термінал Caché.
Наприклад у вас вже є налаштований доступ по ssh / telnet. Тоді ми можемо створити користувача у якого в якості оболчки буде термінал Caché. Створюємо файл наприклад з ім'ям
/usr/bin/cachesession
і вмістом, в якому потрібно вказати вірний інстанси, і інші параметри на свій смак. Аж до можливості запуску відразу небудь рутини.
#!/bin/bash

/usr/bin/csession cache -U USER
Робимо його виконуваним і перевіряємо, простим запуском, повинні потрапити в термінал.
$ chmod 755 /usr/bin/cachesession
$ chown root:root /usr/bin/cachesession
Тепер створюємо користувача
$ useradd -s /usr/bin/cachesession cachesession
$ passwd cachesession
тепер при авторизації по ssh / telnet, під користувачем cachesession ми відразу потрапимо в Caché.
 
На цьому все, сподіваюся стаття виявиться корисною.
  
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.