반응형
Rackspace Nova Client 를 사용하여 API 서버에 호출하는 경로

1.  novaclient/shell.main() 이 entry point 임

2.  novaclient/v1_1/shell.do_boot() 를 호출
    - instance 생성시에 "nova boot ....." 처럼 호출하면 "do_" 를 붙힌 메소드가 호출된다.

3. novaclient/v1_1/client.py 를 이용하여 novaclient/v1_1/servers.ServerManager.create() 를 호출
    - novaclient/v1_1/servers.ServerManager 는 novaclient/v1_1/base.BootingManagerWithFind 를
      상속받았으므로 self._boot() 를 호출하면 novaclient/v1_1/base.BootingManagerWithFind._boot() 가 호출됨
    - novaclient/v1_1/base.BootingManagerWithFind._boot() 에서 self._create() 가 호출되면 
      상속받은 novaclient/v1_1/base.ManagerWithFind 에서 찾고 여기에 없으므로 그 위의 클래스인
      novaclient/v1_1/base.Manager._create() 를 호출

4. novaclient/client.post() -> novaclient/client.request() 를 호출하여 HTTP Request 를 던진다.
    - standard out 으로 print 하려면 환경변수에 NOVACLIENT_DEBUG 를 추가하면 된다.


[파일 호출 순서]
novaclient/shell.py -> novaclient/v1_1/shell.py -> novaclient/v1_1/client.py -> novaclient/v1_1/servers.py 
-> novaclient/v1_1/base.py -> novaclient/base.py -> novaclient/client.py



 
반응형
Posted by seungkyua@gmail.com
,
반응형
python 에서 argv 를 이용하여 args 를 동적으로 추가하고자 한다면 다음과 같이 사용

1. sys.argv[1:] 를 이용
   -  main 의 프로그램명을 제외한 cli 에서 입력한 argv 가 입력됨

2.  argparse.ArgumentParser.add_argument 를 이용하여 환경설정 값을 args 로 추가
반응형
Posted by seungkyua@gmail.com
,
반응형
일반적으로 노바의 로그는 /var/log/nova/nova-xxx.log 형태로 남는다.

/etc/nova/nova.conf 에 보면 logdir=/var/log/nova 로 되어 있어서 해당 디렉토리에 서비스 모듈명의 이름으로 로그가 남는데 이는 프로세스별로 로그를 만드는 것이다.

만약 사용자 정의의 로그를 만들고 싶으면 다음과 같이 수정한다.

# vi /usr/lib/pymodules/python2.6/nova/log.py

def setup():
...
    reset()
    _ask_setup_log()   // 추가
...
askLogger = logging.getLogger('nova.ask')
def _ask_setup_log():

    if FLAGS.logdir:

        logname = '%s.log' % (os.path.join(FLAGS.logdir, 'nova-ask'),)

        global askLogger

        askLogger = logging.getLogger('nova.ask')

        askLogger.propagate = 0

        askHandler = WatchedFileHandler(logname)

        askHandler.setFormatter(_formatter)

        askLogger.addHandler(askHandler)

 
# vi /usr/lib/pymodules/python2.6/nova/scheduler/chance.py

...
from nova import log as logging
...

    logging.askLogger.debug('********* %s, %s *************', context, topic)


이와 같이 수정하면 /var/log/nova/nova-ask.log 가 생성되며 어떤 프로세스에서 호출하던지 해당 로그에 남게 되어 있다.


novaclient 모듈에서 로그를 추가하고 싶으면 다음과 같이 하면 된다.

# vi /usr/lib/pymodules/python2.6/novaclient/log.py

import logging

from logging.handlers import WatchedFileHandler


logger = logging.getLogger('nova.client')

logger.setLevel(logging.DEBUG)

fh = WatchedFileHandler('/var/log/nova/nova-client.log')

formatter = logging.Formatter('%(asctime)s %(levelname)s %(name)s [-] %(message)s from (pid=%(process)d) %(funcName)s %(pathname)s:%(lineno)d')

fh.setFormatter(formatter)

logger.addHandler(fh)


# vi /usr/lib/pymodules/python2.6/novaclient/shell.py

...
from log import logger
...

logger.debug('******* shell.py called !! ****************')







 
반응형
Posted by seungkyua@gmail.com
,
반응형
Eclipse 에서 PHP SDK 를 설치하기위해서는 아래 플러그인 사이트에서 업데이트를 한다.

1. Software Update Site
    - PDT 를 update 하기 위해서 helios 사이트에서 Programming Languages -> PDT SDK Feature 를 설치한다.
        . http://download.eclipse.org/releases/helios/

    - 그런데 현재는 버그가 있군요.. 그래서 아래 사이트에서 설치해야 함..
        . name : PDT Update Site
        . URL : http://download.eclipse.org/tools/pdt/updates/2.2/milestones/

    - 3.0 은 설치가 안되던데.. 나중에 다시 테스트 
        . URL : http://ftp.daum.net/eclipse/tools/pdt/updates/3.0/milestones/
반응형
Posted by seungkyua@gmail.com
,
반응형
1. Virtual box 다운로드 및 설치
    http://www.virtualbox.org/wiki/Downloads

2. Vagrant 를 설치 후 이용하여 Virtual box 인스턴스 생성
     $> sudo gem update -- system

    RubyGems version 이 1.3.6 보다 낮아 에러가 난다면
    $> sudo gem install rubygems-update
    $> sudo update_rubygems

    $> sudo gem update -- system
    $> sudo gem install vagrant -- pre

    ※ Vagrant 를 체험하고 싶으면 아래와 같이 해볼 수 있다.
$> cd ~
$> vagrant box add lucid32 http://files.vagrantup.com/lucid32.box        ~/.vagrant/boxes/lucid32 디렉토리가 생김

만약 박스를 없애고 싶으면
$> vagrant box remove lucid32

$> mkdir OpenStack
$> cd OpenStack
$> mkdir vagrant
$> cd vagrant
$> vagrant init lucid32        -> Vagrant 파일이 생성됨
$> vagrant up                      -> ~/VirtualBox VMs 에 가상 서버가 생김

아직 ssh 는 가동되지 않았으므로 ssh 를 가동
$> vagrant ssh

ssh 접속이 실패하면 가상서버를 내렸다 다시 올린다. (버그가 있는 것 같음)

만약 가상서버를 내리 싶으면
$> vagrant destroy
    
3. Chef Recipes 를 받는다.
    $> cd ~
    $> git clone -v https://github.com/openstack/openstack-cookbooks openstack-cookbooks

4. Set Up Some Directories
    $> cd ~
    $> mkdir OpenStack
    $> cd OpenStack
    $> mkdir aptcache
    $> mkdir chef
    $> cd chef

5. chef-solo 기반으로 수행할 Vagrant file 을 받는다.
    chef 는 독립적으로 수행할 수 있는 chef-solo 방법과 chef server 를 설치하고 client 로 접속하여 설치하는 방법이 있다.

    $> curl -o Vagrantfile https://raw.github.com/gist/786945/solo.rb
    $> vi Vagrantfile
#aptdir = (ENV['APTCACHE'] or "#{ENV['HOME']}/aptcache/")
# 아래와 같이 수정
aptdir = (ENV['APTCACHE'] or "#{ENV['HOME']}/OpenStack/aptcache/") 

6. Running OpenStack Compute within a Vagrant Instance
    $> vagrant up

7. Virtual Machine 접속
    $> vagrant ssh
    $> sudo apt-get install euca2ools
    $> euca-add-keypair test > test.pem
    $> chmod 600 test.pem
    $> euca-run-instances -t m1.tiny -k test ami-tty
    $> ssh -i test.pem root@10.0.0.3

8. Virtual Machine 삭제
    $> vagrant destroy
    $> rm *.pem novarc






3. swift 다운로드
    http://www.openstack.org/projects/storage/ 

4. 도큐먼트 설치
    #> sudo easy_install -U sphinx              install Sphinx
    #> python setup.py build_sphinx           builds the document






 
반응형
Posted by seungkyua@gmail.com
,
반응형
1. Python 설치
    . http://www.python.org/download/ 

2. Pydev 설치
    . update site : http://pydev.org/updates
    . eclipse -> Window -> Preferences -> Interpreter-Python에서 New 에서  python.exe 의 경로를 찾아 선택

3. Python 환경변수 및 패스 설정
    . Windows
        환경변수명 : PYTHONPATH
        환경변수값 : %PYTHONPATH%;C\Python32
        패스추가    : C\Python32

    . Mac
        환경변수 추가 : export PYTHONPATH=/Library/Python/2.6

반응형
Posted by seungkyua@gmail.com
,
반응형
1. 수치형 (Numbers)
    . int, long. complex, float 
    . type : IntType, LongType, ComplexType, FloatType

2. 문자열 (Strings)
    . 문자들의 집함, 내용 변경이 안됨
    . 'spams', "ham"
    . type : StringType

3. 리스트 (Lists)
    . 순서를 가지는 객체의 집합
    . ['ham', 'spam']
    . type : ListType

4. 사전 (Dictionaries)
    . 순서를 가지지 않는 객체의 집합. 키-값(key-value) 로 저장
    . {'ham':4, 'spam':5}
    . type : DictionaryType

 5. 튜플 (Tuples)
    . 순서를 가지는 파이썬 임의 객체의 집합이다. 내용 변경이 안됨
    . ('ham', 'spam')
    . type : TupleType

5. 파일 (Files)
    . 파일에 자료를 입 출력하기 위한 객체이다.
    . f = open('ham')
    . type : FileType

6. None
    . null 을 의미
    . type : NoneType





반응형
Posted by seungkyua@gmail.com
,
반응형
1. html5 기능을 감지할 수 있는 라이브러리
    . Modernizr(http://www.modernizr.com) : 2011-05-27 현재 


<!DOCTYPE html>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>HTML5 browser detect</title>

<script src="/html5/js/modernizr-1.7.min.js"></script>

<script language="javascript">

if (Modernizr.canvas) {

alert("html5 canvas supported");

} else {

alert("html5 canvas not supported");

}

if (Modernizr.canvastext) {

alert("html5 canvastext supported");

else {

alert("html5 canvastext not supported");

}

if (Modernizr.video) {

if (Modernizr.video.ogg) {

alert("html5 video theora supported");

} else if (Modernizr.video.h264) {

alert("html5 video H.264 supported");

}

} else {

    alert("html5 video not supported");

</script>

</head>

<body>

...

</body>

</html>


2. 직접 소스로 알아보기
    - canvas
        . DOM <canvas> 엘리먼트 객체의 getContext 속성이 지원되는지 확인

function supports_canvas() {

return !!document.createElement('canvas').getContext;

}


function supports_canvas_text() {

if (!supports_canvas()) { return false; }

var dummy_canvas = document.createElement('canvas');

var context = dummy_canvas.getContext('2d');

return typeof context.fillText == 'function';

}


if (supports_canvas_text()) {

alert("html5 canvastext supported");

} else {

alert("html5 canvastext not supported");

}


    - 비디오
        . DOM <video> 엘리먼트 객체의 canPlayType 속성이 지원되는지 확인

function supports_video() {

return !!document.createElement('video').canPlayType;

}


/* Mac, iPhone 에서만 지원하는 유료 코덱

 * MPEG-4 컨테이너의 H.264 베이스라인 비디오와 AAC LC 오디오 지원

 * return string : "probably" - 지원, "maybe" - 아마도, "" - 미지원

 */

function supports_h264_baseline_video() {

if (!supports_video()) { return false; }

var v = document.createElement('video');

return v.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"');

}


/* firefox 와 같은 오픈소스 브라우저가 지원하는 코덱

 * ogg 컨테이너와 Theora 비디오와 Vorbis 오디오를 지원

 */

function supports_ogg_theora_video() {

    if (!supports_video()) { return false; }

    var v = document.createElement('video');

    return v.canPlayType('video/ogg; codecs="theora, vorbis"');

}


/* Chrome, firefox, Opera 와 같은 오픈소스 브라우저가 지원하는 오픈소스 코덱

 * WebM 컨테이너와 vp8 비디오와 Vorbis 오디오를 지원

 */

function supports_webm_video() {

    if (!supports_video()) { return false; }

    var v = document.createElement('video');

    return v.canPlayType('video/webm; codecs="vp8, vorbis"');

}



if (supports_h264_baseline_video() == 'probably') {

alert("html5 video H.264 supported");

} else {

alert("html5 video H.264 not supported");

}

if (supports_ogg_theora_video() == 'probably') {

    alert("html5 video theora supported");

} else {

    alert("html5 video theora not supported");

}

if (supports_webm_video() == 'probably') {

    alert("html5 video vp8 supported");

} else {

    alert("html5 video vp8 not supported");

}


    - 로컬 저장소

    - 위치정보
        . 전역 객체(window, navigator)의 속성이 지원되는지 확인
        . navigator.geolocation;









 
반응형
Posted by seungkyua@gmail.com
,

PHP 설치

프로그래밍/php 2011. 5. 27. 00:01
반응형
I. 리눅스에서 설치
    1. 필요한 라이브러리
        - Apache(http://httpd.apache.org)
        - OpenSSL(http://www.openssl.org)
        - Mod_SSL(http://www.modssl.org)  : OpenSSL 에 대한 Apache 모듈 인터페이스 제공
        - PHP(http://www.php.net)
        - PHP Library : /usr/src  에 다운받는다
            . PDFlib 와 gd 에 필요한 JPEG 라이브러리(ftp://ftp.uu.net/graphics/jpeg)
            . gd 에 필요한 PNG 라이브러리(http://www.libpng.org/pub/png/libpng.html)
            - 위 PNG 라이브러리에 필요한 zlib 라이브러리(http://www.zlib.net)
            - PDFlib 에 필요한 TIFF 라이브러리(http://www.libtiff.org)
            - IMAP  에 필요한 IMAP 클라이언트

    2. PHP 설치
# cd /usr/src/httpd-2.2.9
# ./configure --prefix=/usr/local/apache2

# cd /usr/src/php-5.2.6
# ./config --prefix=/usr/local/php
                --with-mysqli=/usr/local/mysql_config \
                --with-apx2=/usr/local/apache2/bin/apxs \
                --with-jpeg-dir=/usr/src/jpeglib \
                --with-tiff-dir=/usr/src/tiffdir \
                --with-zlib-dir=/usr/src/zlib \
                --with-imap=/usr/src/imapcclient \
                --with-gd
# make
# make install
# cp php.ini-dist /usr/local/lib/php.ini    (개발용)
# cp php.ini-recommended /usr/local/lib/php.ini   (운영용)

# cd /usr/src/openssl-0.9.8h
# ./config --prefix=/usr/local/ssl
# make
# make test
# make install

# cd /usr/src/httpd-2.2.9
# SSL_BASE=../openssl-0.9.8h \
   ./configure \
   --prefix=/usr/local/apache2 \
   --enable-so
   --enable-ssl
# make
# make certificate TYPE=custom
# make install

# vi /usr/local/apache2/conf/httpd.conf
   <!-- 주석해제 -->
   AddType application/x-httpd-php .php
   AddType application/x-httpd-php-source .phps
   ...
   Include conf/extra/httpd-ssl.conf

# vi /usr/local/lib/php.ini
   <!-- 추가 -->
   extension = extenstion_name.so

# cp 설치된모듈* /usr/local/lib/php/extensions/

# cd /usr/local/apache2/bin
# ./apachectl configtest
# ./apachectl start



II. 윈도우에 설치
    1. 필요한 라이브러리
        - Apache(http://httpd.apache.org) : apache_2.2.9-win32-x86-openssl-0.9.8h-r2.msi
            . http://tud.at/programm/apache-ssl-win32-howto.php3 문서를 읽고 ssl 설치
        - PHP5(http://www.php.net)
            . php-5.2.6-win32.zip   :  PHP ZIP 파일                 설치경로 : c:\php
            . pecl-5.2.6.win32.zip   : 라이브러리 모음 파일    설치경로: c:\php\ext

[php.ini 수정]
extension_dir = c:/php/ext
doc_root="원하는 경로"
# 아래 원하는 라이브러리 해제
extension=php_pdf.dll 
extension=php_mysqli.dll
extension=php_pdfflib.dll
extension=php_gd2.dll
extension=php_imap.dll

[httpd.conf 수정]
LoadModule php5_module c:/php/php5apache2_2.dll
PHPIniDir "c:/php/"
AddType application/x-httpd-php.php 







 
반응형
Posted by seungkyua@gmail.com
,
반응형
1. array 출력하는 함수

function dump_array($array) {

    if (is_array($array)) {

        $size = count($array);

        $string = "";

        if ($size) {

            $count = 0;

            $string .= "{";

            foreach ($array as $var => $value) {

                $string .= $var . " = " . $value;

                if ($count++ < ($size-1)) {

                    $string .= ", ";

                }

            }

            $string .= " }";

        }

        return $string;

    } else {

        return $array;

    }

}


2. 오류 처리 방법

function errorHandler ($errno, $errstr, $errfile, $errline) {

echo "<br/><table bgcolor=\"#cccccc\"><tr><td>

      <p><strong>ERROR:</strong> " . $errstr . "</p>

      <p>Please try again, or contact us and tell us

      that the error occurred in line " . $errline . " of

      file " . $errfile . "</p>";

if (($errno == E_USERERROR) || ($errno == E_ERROR)) {

echo "<p>This error was fatal, program ending</p>

      </td></tr></table>";

exit;

}

echo "</td></tr></table>";

}

set_error_handler('errorHandler');

trigger_error('Trigger function called', E_USER_NOTICE); 







 
반응형
Posted by seungkyua@gmail.com
,