Wednesday, August 4, 2010

AMM SOL console

IBM's AMM provide excellent feature for blade servers remote control via SSH.
You may login using SSH to AMM, then choose target blade, power it on if it is switched off and issue commands to AIX/Linux/whatever:

[root@server ~]# ssh -l USERID 10.10.10.11
password:

Hostname: blade
Static IP address: 10.10.10.11
Burned-in MAC address: 00:16:5F:3F:10:A0
DHCP: Disabled - Use static IP configuration.
Last login: Wednesday August 4 2010 15:53 from 10.10.10.12 (SSH)

system>
system> list -l 2
system
mm[1] primary
power[1]
power[2]
blower[1]
blower[2]
switch[1]
switch[3]
blade[1] LS21
blade[2] JS21
blade[3] HS21linux
blade[4] HS21windows
mt[1]
system>
system> env -T blade[2]
OK
system:blade[2]>
system:blade[2]> console

login: root
root's Password:
*******************************************************************************
* *
* *
* Welcome to AIX Version 6.1! *
* *
* *
* Please see the README file in /usr/lpp/bos for information pertinent to *
* this release of the AIX Operating System. *
* *
* *
*******************************************************************************
Last unsuccessful login: Wed Aug 4 17:29:22 GMT+04:00 2010 on /dev/vty0
Last login: Wed Aug 4 17:29:28 GMT+04:00 2010 on /dev/vty0

#

Now, to disconnect from console you need press Esc-( or - Ctrl+[ and then Shift+(

Tuesday, July 27, 2010

msmtp - simple smtp client

If you need to send mails from some UNIX box where mail transport don't work (MTA not configured properly), you may use this nice tool:
http://msmtp.sourceforge.net
I've compiled it for Linux and AIX 6.1 (with gcc compiler) without any issue.
Some samples of usage:
# echo "Test" | msmtp --host=smtp.server.org -f root@oracle.com user@some.domain.net
will send mail with no subject and "Test" in mail body.
Otherwise you may construct text file like this and then redirect it to msmtp
# cat mail.txt
From: root@oracle.com
To: user@some.domain.net
Subject: Very important message!!!

Hi! How are you?
#
# msmtp --host=smtp.server.org -f root@oracle.com user@some.domain.net <>> mail.txt
it will be mail with attachment:
# msmtp --host=smtp.server.org -f root@oracle.com user@some.domain.net < style="font-weight: bold;">
UPDATE:
There is some strange behavior on AIX: attachments shown as is (BASE64 code) in mail body not as attachments!
This fix works for me:
# msmtp --host=smtp.server.org -f root@oracle.com user@some.domain.net <<> From: root@oracle.com
> To: user@some.domain.net
> Subject: Very important message!!!
>
> See this attachment:
> $(uuencode install.log.gz install.log.gz)
>
> EOF
#

Monday, July 26, 2010

Oracle Data Guard platform compatibility

There is two interesting MOS notes about Oracle's DR solution (DG).
- Data Guard Support for Heterogeneous Primary and Physical Standbys in Same Data Guard Configuration [ID 413484.1]
and
- Data Guard Support for Heterogeneous Primary and Logical Standbys in Same Data Guard Configuration [ID 1085687.1]
It seems that we have not so much opportunities to implement heterogeneous DR configurations.

Friday, June 19, 2009

How to disable reference constraint(s) for particular table(s)

Anonymous PL/SQL block for single table:

declare
alter_tbl varchar2(4000) := '';
begin
SELECT 'ALTER TABLE '||table_name||' DISABLE CONSTRAINT '||constraint_name INTO alter_tbl FROM user_constraints WHERE r_constraint_name IN (SELECT constraint_name FROM user_constraints WHERE table_name='TABLE_NAME' AND constraint_type <> 'R') AND status = 'ENABLED';
--dbms_output.put_line(alter_tbl);
execute immediate alter_tbl;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
dbms_output.put_line('Table does not have any (enabled) reference constraints!');
end;
/

And for two (or more) tables:

declare
cnt number;
begin
SELECT count(table_name) INTO cnt FROM user_constraints WHERE r_constraint_name IN (SELECT constraint_name FROM user_constraints WHERE table_name IN ('1_TABLE_NAME', '2_TABLE_NAME') AND constraint_type <> 'R') AND status = 'ENABLED';
IF cnt = 0 THEN
dbms_output.put_line('Table does not have any (enabled) reference constraints!');
ELSE
FOR alter_tbl IN (
SELECT 'ALTER TABLE '||table_name||' DISABLE CONSTRAINT '||constraint_name AS tbl FROM user_constraints WHERE r_constraint_name IN (SELECT constraint_name FROM user_constraints WHERE table_name IN ('1_TABLE_NAME', '2_TABLE_NAME') AND constraint_type <> 'R') AND status = 'ENABLED'
) LOOP
-- dbms_output.put_line(alter_tbl.tbl);
execute immediate alter_tbl.tbl;
END LOOP;
END IF;
END;
/

Friday, August 1, 2008

Oracle's OTN and wget (HOWTO)

Как качать файлы с otn.oracle.com wget'ом, например Linux_x86_64_Grid_Control_full_102030_disk1.zip - Oracle Enterprise Manager 10g Grid Control for Linux x86-64?
Да вот так! (см. http://forums.oracle.com/forums/thread.jspa?messageID=2666987)

usd@blackhole:~> wget -v -c --post-data="remoteIp=myIP>&globalId=&redirectUrl=\
http:%2F%2Fdownload-llnw.oracle.com:80\
%2Fotn%2Flinux%2Foem%2F10203%2F\
Linux_x86_64_Grid_Control_full_102030_disk1.zip\
&username=
myOTNusername>\
&password=
mypasswd>\
&submit=Continue" \
https://profile.oracle.com/jsp/reg/loginHandler.jsp



Sunday, July 6, 2008

DNS resolver in Solaris SXDE

После установки Solaris Express Developer Edition и настройки сетевой карты обнаружил невозможность выхода в интернет из-за неработоспособности получения IP адреса сервера по его имени программами, в частности Firefox'ом.
Выругавшись неприлично отложил эту проблему в долгий ящик как некритичную.
И вот практически случайно наткнулся на следующую информацию (http://developers.sun.ru/forum/viewtopic.php?f=17&t=36):

cp /etc/nsswitch.dns /etc/nsswitch.conf

прописывание руками
/etc/resolv.conf

nameserver <адрес>
=========================
И оно заработало! :)

Tuesday, August 14, 2007

Собираем Qt 4.4.3 (скрипт)

Вот решил написать небольшой скриптик для автоматизации сборки замечательной GUI библиотеки Qt.
qt4_build.sh :
-----------------------------


#!/bin/bash

#QT_TASTE=qt-x11-opensource-src;
QT_TASTE=qt-all-opensource-src;

#QT_VER=4.1.5;
#QT_VER=4.2.2;
QT_VER=4.4.3;

BUILD_TYPE=RELEASE;
#BUILD_TYPE=DEFAULT;
#BUILD_TYPE=DEBUG;
#BUILD_TYPE=MINIMAL;

#MAKE="make -j3";
MAKE="make -j2";

DEVEL_ROOT=~/devel;

# Which Arch to use?
ARCH=32;
#ARCH=64;

# Which compiler to use?
#COMPILER=GCC;
#PATH=/opt/usr/local/bin:$PATH;
COMPILER=ICC;

if [ $COMPILER == "GCC" ]; then
if [ $ARCH == "32" ]; then
PLATFORM=linux-g++-32;
elif [ $ARCH == "64" ]; then
PLATFORM=linux-g++-64;
else
echo -n -e "\nERROR: Unknown ARCH !!!\n";
exit 1;
fi
elif [ $COMPILER == "ICC" ]; then
ICC_HOME=/home/usd/intel;
ICC_VER=10.1.021;
OPTS="-no-pch";
if [ $ARCH == "32" ]; then
export PATH=$ICC_HOME/cc/$ICC_VER/bin:$PATH;
PLATFORM=linux-icc-32;
export LD_LIBRARY_PATH=$ICC_HOME/cc/$ICC_VER/lib:$LD_LIBRARY_PATH;
elif [ $ARCH == "64" ]; then
export PATH=$ICC_HOME/cce/$ICC_VER/bin:$PATH;
PLATFORM=linux-icc-64;
export LD_LIBRARY_PATH=$ICC_HOME/cce/$ICC_VER/lib:$LD_LIBRARY_PATH;
echo -n -e "\nWARNING: on PLATFORM=linux-icc-64 BUILD_TYPE=DEBUG by default!!!\n";
BUILD_TYPE=DEBUG;
else
echo -n -e "\nERROR: Unknown ARCH !!!\n";
exit 1;
fi
else
echo -n -e "\nERROR: Unknown COMPILER !!!\n";
exit 1;
fi

QT_TARBALL=$QT_TASTE-$QT_VER.tar.bz2;

if [ $BUILD_TYPE == "RELEASE" ]; then
B_T=release-static;
OPTS="-release -static $OPTS -qt-zlib -no-gif -qt-libpng -no-libmng -qt-libjpeg -no-qt3support -qt-sql-sqlite";
elif [ $BUILD_TYPE == "DEFAULT" ]; then
B_T=default;
OPTS="$OPTS";
elif [ $BUILD_TYPE == "DEBUG" ]; then
B_T=debug-shared;
OPTS="-debug -shared $OPTS -qt-sql-sqlite";
elif [ $BUILD_TYPE == "MINIMAL" ]; then
B_T=release-minstatic;
OPTS="-release -static $OPTS -qt-zlib -no-gif -qt-libpng -no-libmng -qt-libjpeg -no-qt3support -qt-sql-sqlite -no-exceptions -no-nis -no-cups -no-iconv -no-opengl -no-sm -no-xshape -no-xinerama -no-xcursor -no-xfixes -no-xrandr -no-xrender -no-fontconfig -no-tablet -no-xkb -no-glib";
else
echo -n -e "\nERROR: Unknown BUILD_TYPE !!!\n";
exit 1;
fi

cd $DEVEL_ROOT;

if [ -d $DEVEL_ROOT/$QT_TASTE-$QT_VER ]; then
rm -rf $QT_TASTE-$QT_VER;
tar xjf $QT_TARBALL;
else
tar xjf $QT_TARBALL;
fi

if [ -d $DEVEL_ROOT/qt-$QT_VER-$PLATFORM-$B_T ]; then
rm -rf qt-$QT_VER-$PLATFORM-$B_T;
mv $QT_TASTE-$QT_VER qt-$QT_VER-$PLATFORM-$B_T;
else
mv $QT_TASTE-$QT_VER qt-$QT_VER-$PLATFORM-$B_T;
fi

QT_DIR=$DEVEL_ROOT/qt-$QT_VER-$PLATFORM-$B_T;
TARGET_DIR=$QT_DIR;
PATH=$TARGET_DIR/bin:$PATH;

export PATH;

cd $QT_DIR;

# HACK for intel static libs
mv $TARGET_DIR/mkspecs/linux-icc/qmake.conf $TARGET_DIR/mkspecs/linux-icc/qmake_ORIG.conf
sed s/-wd654,1572/"-wd654,1572 -static-intel"/ $TARGET_DIR/mkspecs/linux-icc/qmake_ORIG.conf > $TARGET_DIR/mkspecs/linux-icc/qmake.conf

./configure -prefix $TARGET_DIR -platform $PLATFORM $OPTS;

$MAKE;


-----------------------------
Скрипт позволяет упростить сборку различных конфигураций Qt. Задайте необходимые переменные, скопируйте архив с Qt в директорию DEVEL_ROOT и запустите.