Tuesday Oct 09, 2012

Самостоятельная сборка и публикация пакетов IPS в Solaris 11

У меня на ноутбуке стоит Solaris 11 и на нём в свободное время я пишу для себя некую программу для управления доменами Oracle VM Server for SPARC (aka LDoms). Пишу на Python/GTK/NetBeans. Но не это главное. Главное в том, что мне понадобилось иметь в системе пакет pylibssh2 для того, чтобы подключаться из python по ssh к удаленным хостам.

Казалось бы можно выкачать pylibssh2 и libssh2, собрать и поставить. Но я захотел, чтобы эти пакеты были оформлены в виде пакетов Solaris IPS. Заодно я решил и научиться собирать пакеты.

Сразу оговорюсь, я не большой специалист по компиляторам и сборщикам. Я лишь знаю, что нужно запустить configure и make как описано в README ;)

Параллельной задачей будет показать как не использовать LD_LIBRARY_PATH. Тем более ни в коем случае не прописывать её в /etc/profile.

Я не буду очень подробно описывать каждый шаг. За деталями прошу обращаться в маны и по линкам в конце поста. Собственно, этим инструкциями я и следовал.

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

# zfs create rpool/export/repo
# zfs set atime=off rpool/export/repo
# chown roivanov:staff /export/repo
$ pkgrepo create /export/repo
$ pkgrepo set -s /export/repo publisher/prefix=tools
# pkg set-publisher -g /export/repo tools


Шаг 1, собираем пакет. Всю сборку пакетов я произвожу в $HOME/Projects/IPS/<имя пакета>, но это не принципиально. Кроме того, для сборки каждого пакета я запускаю отдельный терминал, чтобы не перепутались настройки окружения. Для сборки нам поребуется SunStudio cc или gcc.

$ export PKGREPO=/export/repo
$ mkdir -p $HOME/Projects/IPS/libssh2
$ cd $HOME/Projects/IPS/libssh2
$ export PKGROOT=`pwd`
$ unset LDFLAGS

$ PATH=$PATH:/opt/solarisstudio12.3/bin
$ export CC=cc
или
$ export CC=gcc

На этапе сборки пакета необходимо копировать (инсталлировать) пакет в ../root вместо /usr
$ export DESTDIR=$PKGROOT/root

В локальную директорию ../root я буду складывать собранный пакет. Окончательная инсталляция будет в /usr.
$ [ -d root ] && rm -rf root
$ cp ~/Скачивание/libssh2-1.4.2.tar.gz .
$ tar xzf libssh2-1.4.2.tar.gz 
$ cd libssh2-1.4.2

В случае, если пакет использует библиотеки из /usr/local/lib, устанавливаем LDFLAGS и _забываем_ про LD_LIBRARY_PATH
$ export LDFLAGS="-L/usr/local/lib -R/usr/local/lib"
$ ./configure
$ gmake && gmake install
$ cd ..

Сборка пакета Python (pylibssh2) производится несколько иначе
$ python setup.py install --root=../root


Шаг 2. Готовим файл с описанием пакета

$ cat > MANIFEST.files.mog << EOF
set name=pkg.fmri value=library/libssh2@1.4.2,0.5.11-11
set name=pkg.description \
    value="libssh2 is a client-side C library implementing the SSH2 protocol"
set name=pkg.summary value="libssh2 library"
set name=maintainer value="First Last <first.last@domain.com>"
set name=info.upstream-url value=http://www.libssh2.org/
set name=variant.arch value=$(ARCH)
license ../libssh2-1.4.2/COPYING license=BSD
<transform dir path=usr$ -> edit group bin sys>
EOF


Где:

  • library/libssh2 это название пакета, 1.4.2 версия пакета, 0.5.11 релиз, 11 номер сборки пакета.
  • description это описание, а summary это короткое описание пакета.
  • variant.arch для какой платформы собран пакет. Есть возможность в одном пакете иметь файлы для нескольких платформ, но это я делать пока не буду.
  • license файл и тип лицензии
  • transform необходим для того, чтобы в окончательном файле пакета была правильно выставлена группа владельца директории /usr


Собираем список файлов пакета

$ pkgsend generate root > MANIFEST.files.1


Добавляем информацию из файла описания и производим необходимые изменения

$ pkgmogrify -DARCH=`uname -p` MANIFEST.files.1 MANIFEST.files.mog > MANIFEST.files.2


Генерим список всех зависимостей

$ pkgdepend generate -md root MANIFEST.files.2 | pkgfmt > MANIFEST.files.3


Переводим список файловых зависимостей в список пакетов. Этот этап займет некоторое время.

$ pkgdepend resolve -m MANIFEST.files.3


На выходе получаем готовый файл MANIFEST.files.3.res с описанием пакета.

При желании можно проверить этот файл на предмет конфликтов с имеющимися репозитариями,
прежде чем пакет будет окончательно опубликован.

$ pkglint -c ../lint-cache -r http://pkg.oracle.com/solaris/release/ MANIFEST.files.3.res
$ pkglint -c ../lint-cache-local -r /export/repo MANIFEST.files.3.res


И собственно, публикуем пакет

$ pkgsend publish -s $PKGREPO -d `pwd`/root MANIFEST.files.3.res



Установка пакета и управление репозиторием
Чтобы посмотреть какие пакеты есть репозитории

$ pkgrepo list -s /export/repo/


Чтобы удалить устаревший пакет из репозитория

$ pkgrepo remove -s /export/repo/ libssh2@1.4.2,0.5.11-8:*


Чтобы посмотреть информацию о пакете в репозитории

$ pkg info -r libssh2


Чтобы посмотреть как пойдет установка, без реальной установки пакета

$ sudo pkg install -nv libssh2


Чтобы установить пакет

$ sudo pkg install libssh2


Чтобы обновить пакет

$ sudo pkg refresh
$ sudo pkg update



Список чтения:
[1] How to Create and Publish Packages to an IPS Repository on Oracle Solaris 11,
http://www.oracle.com/technetwork/articles/servers-storage-admin/o11-097-create-pkg-ips-524496.html

[2] Publishing your own packages with IPS - getting started.
https://blogs.oracle.com/barts/entry/publishing_your_own_packages_with

[3] How to create your own IPS packages (Ghost Busting)
http://blogs.oracle.com/cwb/entry/how_to_create_your_own

[4] Introduction to IPS for Developers
http://www.oracle.com/technetwork/systems/hands-on-labs/introduction-to-ips-1534596.html

Sunday Nov 06, 2011

Oracle Solaris 11 уже скоро

9-го ноября состоится долгожданное и, надеюсь, грандиозное событие, посвященное выпуску Solaris 11.

Для тех кто в городе Нью-Йорк и хочет прибыть лично читаем программу ниже и регистрируемся. Там же можно нужно зарегистрироваться на вэбкаст. (11 причин почему дата выпуска Oracle Solaris 11 не назначена на 11-11-11)

Join Oracle executives Mark Hurd and John Fowler  and all key Oracle Solaris Engineers and Execs at the Oracle Solaris 11 launch event in New York, Gotham Hall on Broadway, November 9th and learn how you can build your infrastructure with Oracle Solaris 11 to:

    * Accelerate internal, public, and hybrid cloud applications
   * Optimize application deployment with built-in virtualization
    * Achieve top performance and cost advantages with Oracle Solaris 11–based engineered systems

The launch event will also feature exclusive content for our in-person audience including a session led by the VP of core Solaris development and his leads on Solaris 11 and a customer insights panel during lunch. We will also have a technology showcase featuring our latest systems and Solaris technologies. The Solaris executive team will also be there throughout the day to answer questions and give insights into future developments in Solaris.

Don't miss the Oracle Solaris 11 launch in New York on November 9.
REGISTER TODAY!

Monday Jun 27, 2011

OVM Templates: Oracle Solaris Container with Oracle Database 11gR2

I am delighted to inform you that Oracle just made available new Oracle Solaris Virtual Machine (VM) Templates: Oracle Solaris Container with Oracle Database 11gR2. This VM Templates available for SPARC and x86 platforms. Both Oracle VM Templates based on encapsulating an Oracle Solaris 10 Container which can then be attached to SPARC or x86 system running Oracle Solaris 10 10/09 or later. Make sure your select correct SPARC or x86 platform.

The download includes

  • Oracle Solaris 10 10/09 Container
  • Oracle Database 11gR2 pre-installed in the Container.
Update: Link updated.

Saturday Apr 25, 2009

Oracle database 10gR2 is certified with Solaris 10 ZFS

Oracle Database 10gR2 (10.2.0.3 and higher patches) Single Instance (not RAC) is certified with Solaris 10 ZFS on SPARC 64-bit. Please read Solaris ZFS_Best_Practices_Guide. You may need to limit ARC cache.


Monday Mar 02, 2009

Configuring Oracle ASM in Solaris Container with Solaris Volume Manager.

We have learned how to configure Oracle in ASM in Solaris Container. For this we setup our container with raw device access. While this works good it is not good idea to expose device names into container. Virtualized OS administrator should not know about devices in global container. And being attached to special device is not giving flexibility. In this exercise we will migrate from raw device onto SMV metadevice.[Read More]

Wednesday Feb 25, 2009

Configuration example of Oracle ASM in Solaris Container.

Configuration example of Oracle ASM in Solaris Container.


In this post I will give you a tip on how to setup Oracle ASM in Solaris Container. The main point of container's configuration is to set proper privileges. Your container should have proc_priocntl (must) and proc_lock_memory (highly recommended) privileges in order to function properly with ASM in it. Use the following as an configuration example when creating container and adjust it for your needs. Please read comments inlined:


create

# container will be named zone1

# make sure that directory /zones exist and have permissions 700

set zonepath=/zones/zone1

set autoboot=true

set limitpriv=default,proc_priocntl,proc_lock_memory

set scheduling-class="FSS"

set max-shm-memory=16G


# use ip-type exclusive at your wish, non-exclusive is also possible

set ip-type=exclusive

add net

set physical=e1000g1

end

add fs

set dir=/usr/local

# make sure /opt/zone1/local exist

set special=/opt/zone1/local

set type=lofs

end

add fs

# mount /distro from global zone into container.

# I have Oracle distribution files there

set dir=/distro

set special=/distro

set type=lofs

add options [ro]

end


# this device will be used for ASM inside container

add device

set match=/dev/rdsk/c4t600A0B8000562790000005D04998C446d0s0

end


# permit to use 16 cpu within container

add dedicated-cpu

set ncpus=16-16

end

verify

commit


Put this confing into zone1.txt and edit this file to adjust your configuration. Then create, install and boot container.

# zonecfg -z zone1 -f zone1.txt

# zoneadm -z zone1 install

# zoneadm -z zone1 boot


When you are done login to newly created container and proceed with installing Oracle and configuring ASM.


Tips:

  1. Since I have dual-FC connected 6140 array I have it configured with Solaris I/O multipathing feature enabled

# stmsboot -D fp -e

  1. I really like to use VNC to access my lab remotely


Sunday Feb 15, 2009

too many cpu for me

When you are creating Oracle Database using templates/examples from the Oracle Database distribution you may fail with ORA-00018: maximum number of sessions exceeded. This can happen on a systems with Niagara chip. It seems that it have too many CPUs (virtual ones). Quick workaround is to turn off most of them at this time:

# psradm -f 16-255

Then create database and turn them back.

# psradm -n 16-255

Your system may have not so many (256) vCPUs. I faced the same problem with 64 vCPU and solution works for me.

The same trick works for Oracle Application Server reporting ORA-00371: not enough shared pool memory. Confirmed by Alexey, such trick is working.

Update: Glenn Fawcett offers another solution, suggesting to set CPU_COUNT on systems that have large number of vcpu's.

Configuration example of Oracle ASM on Solaris.

In this example you will see how to configure Oracle ASM on Solaris.


The following system will be used in this example: Sun T5220 with attached 6140 array, Solaris 10 (10/08) and Oracle 11.


Briefly, Oracle Database installation steps can be performed as five separate steps:

  1. Install Oracle binaries only

  2. Install Oracle patchset

  3. Configuring ASM

  4. Configuring Listener

  5. Database Creation

[Read More]

Friday Jan 23, 2009

Best Practices for Running Oracle Databases in Solaris Containers

Best Practices for Running Oracle Databases in Solaris Containers” now available on Sun/BluePrints site. This document describes Solaris Containers features for using with Oracle databases. You will learn how to setup Container and assign resources to it (scheduler, CPU and memory capping). It tells you which privilege gives you ability to use Dynamic Intimate Shared Memory (DISM) with Oracle. You may find how to setup Container so it will have it's own IP stack. Mounting UFS and ZFS filesystems, devices in Containers and System V Resource Controls also covered.


Summary

Solaris Containers provide a very flexible and secure method of managing multiple applications on a single Solaris OS instance. Solaris Containers use Solaris Zones software partitioning technology to virtualize the operating system and provide isolated and secure runtime environments for applications. Solaris Resource Manager can be used to control resource usage, such as capping memory and CPU usage,helping to ensure workloads get required system resources. By utilizing Solaris containers, multiple applications, or even multiple instances of the same application, can securely coexist on a single system, providing potential server consolidation savings.

Oracle 9i R2 and 10g R2 databases have been certified to run in a Solaris container. This paper provides step-by-step directions for creating a non-global zone in a Solaris container that is appropriate for running a non-RAC Oracle database. In addition, it describes special considerations that apply when running an Oracle database within a Solaris container.

About

Roman (pomah) Ivanov, ISV Engineering. Tips how to run Oracle best on Sun. Performance monitoring and tuning for system administrators. OpenSolaris user experience.

Search

Categories
Archives
« April 2014
SunMonTueWedThuFriSat
  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
   
       
Today