'알아둘일'에 해당하는 글 201건

우분투 11.04 를 사용하는데, grub 메뉴를 숨기는게 잘 안된다.

부팅시 grub 메뉴를 숨길때

예전 grub 에서는 /boot/grub/menu.lst 에서
hiddenmenu
를 넣어주면 되었었다.

그런데, grub2 에서는 설정이 좀 복잡하게(체계적으로?) 바뀌었다.

사용자가 만질 부분은  /etc/default/grub 에서 만져준다.
그리고, update-grub 명령으로   /boot/grub/grub.cfg 파일을 생성해준다.

/etc/default/grub 에서 
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
이렇게 해주면 되었던것 같은데, 잘 안될때가 있다.
 
버그인가?
https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/444495
http://ubuntuforums.org/showthread.php?t=1287602

공식(?) 환경변수가 아닌 별도로 만들어서 처리해주었다.
GRUB_FORCE_HIDDEN=true
export GRUB_FORCE_HIDDEN
를 /etc/default/grub 에 추가한다.

저 변수를 처리해주는 곳은
/etc/grub.d/30_os-prober 를 수정해준다.
if [ "x${found_other_os}" = "x" ] ; then
를 다음처럼 바꿔줬다.
if [ "x${found_other_os}" = "x" ] || [ "x${GRUB_FORCE_HIDDEN}" = "xtrue" ] ; then

일단 동작은 하는 듯 한데, 좀더 손을 봐야 겠다.


반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
요즘 jquery 가 대세인듯 하다. js 프레임웍의 편리함을 한번 맛보면 벗어날 수 없다.

우선 결론을 말하면 "IE 야! 제발 쫌" 버그라고 말해야 겠다.
다양하게 확인을 하지는 않았지만, IE9 는 제대로 동작을 하는 듯 하다.
IE8 포함 이전버전에서는 오동작을 한다.
jquery 새버전에서는 될지도 모르겠다. jquery 테스트 버전은 1.4.2 이다.

보통 이런식으로 처리한다.
<input type=text name='phone' onchange='check_phone_number();'>
  
jquery 에서 이런식으로 처리할 수 있다. html 과 js 코드를 분리하기 위해 자주 사용하게 된다.
$(document).ready(function(){
  $('input[name=phone]').change(function(){
     check_phone_number();
  });
}); 

그런데, 저렇게 처리하면 IE 에서 이상하게 동작한다는 것을 느낄 것이다.
text 입력창에 값을 입력하고 out focus 되면 onchange 이벤트가 발생해야 하는데, 발생하지 않는다.
input 태그에 직접 onchange 를 쓴경우 정상적으로 발생하는데, jquery 의 ready 를 사용하면 안된다.
한번 focus 되고 나서, 다시 해볼때는 정상적으로 된다.

오! IE 야 제발.

이를 해결하기 위해 일부러 focus 이벤트를 발생해 주어야 한다.

다음처럼 추가해준다.(ready 안에)
if( $.browser.msie ) {
  $('input:text').click(function(){
    this.blur();
    this.focus();
  });
}

IE 브라우저인 경우 click 시 blur , focus 이벤트를 발생시켜준다.
그러면 바로 change 이벤트가 같이 발생하여 정상적으로 보인다.

더 좋은 방법이 있는지 모르겠지만, 이와 같이 해결했다.

 
반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
우체국에서 우편번호 조회 API 를 제공하고 있다.
http://biz.epost.go.kr/eportal/custom/custom_10.jsp?subGubun=sub_4&subGubun_1=cum_20  

php 에서 사용하다보면 잘 안 될 것이다. 인코딩을 utf-8, euc-kr 등으로 바꿔봐도 안될 것이다.

문제는 한글 검색시 헤더값에 accept-language: ko 값을 넘겨줘야 한다.
(우체국 openAPI 에서 저 값을 확인하는 듯 하다.)
$api_key = "우체국에서 받은 API KEY";
$epost_url = "http://biz.epost.go.kr/KpostPortal/openapi?regkey=$api_key&target=post&query=을지로3가"; 
 
$opts = array(
  'http'=>array(
    'method'=>"GET",
    'header'=>"Accept-language: ko\r\n" 
  )
);

$context = stream_context_create($opts);

$fp = file_get_contents($epost_url , false, $context);
이런식으로 하면 되는데, php 버전 5.0.x 이상에서 사용가능하다.(file_get_contents 에서 context 사용)

php 버전 5.0.x 이하 버전인 경우, curl 이나, fsockopen 을 사용한다.

fsockopen 으로 열고, 
fputs($fp, "Accept-language: ko\r\n");
처럼 헤더를 넘겨준다.

curl 에서는
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Accept-language: ko") ); 
처럼 헤더를 넘겨준다.
 
반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
nginx 와 php-fpm 을 설치하고, tomcat 을 연동해서
php 와 jsp(spring,ibatis) 를 구동하기 위한 작업을 하고자 한다.

tomcat 설치는 생략. (centos 에서 패키지로 설치하는 방법을 사용했다.)
방법은 이곳을 참조
http://wavded.tumblr.com/post/258713913/installing-tomcat-6-on-centos-5
http://www.how2centos.com/installing-tomcat-6-on-centos-5-5-tutorial/
설치한 후에는 tomcat 구동설정.

주의 : java(jsp) 쪽은 잘 몰라 용어,설명에 오류가 있을 수 있으니 알아서 해석하세요.

1. invoker 주석해제.(서블릿 자동호출?)
  tomcat 기본 샘플,예제는 잘 돌아가는데, 본인이 만든 예제가 안된다면 아마도 invoker 설정이 되어 있을 것이다.   /etc/tomcat6/web.xml 을 열어서 2곳의 주석을 해제.
이 부분과
    <servlet>
        <servlet-name>invoker</servlet-name>
        <servlet-class>
          org.apache.catalina.servlets.InvokerServlet
        </servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
    </servlet>
이 부분이다.
    <servlet-mapping>
        <servlet-name>invoker</servlet-name>
        <url-pattern>/servlet/*</url-pattern>
    </servlet-mapping>
 이렇게 했는데 안되면.
context.xml 을 열면
그냥 <Context> 로 되어 있는데, <Context reloadable="true" privileged="true"> 이렇게 바꿔준다.

localhost:8080 으로 정상구동되는지 확인한다.
여기까지 되면 tomcat 쪽은 완료된것이다.

2. nginx 에서 php/static html 이외에는 모두 톰캣으로 넘기기

tomcat 을 연동할 부분은 다음과 같다.
이런식으로 server 설정한 부분에 추가해준다(php 등의 설정한 곳.)
    location / {
        try_files $uri $uri/ @tomcat;
    }

    location @tomcat {
        proxy_pass      http://localhost:8080;
    }
이렇게 설정하면 php 파일이외의 모든 접속은 톰캣에서 처리하게 된다.

이때 CI(Codeigniter) 등을 쓴다면, 따로 설정해 준다.
내 경우는 CI 로 된 어플을 각 CI_forum , KI_Board 폴더에 넣은 경우이다.
    location /CI_forum/ {
        try_files $uri $uri/ $uri/index.html @ciforum;
    }
    location /KI_Board/ {
        try_files $uri $uri/ $uri/index.html @kiboard;
    }

    location @ciforum {
        rewrite ^/CI_forum/(.+)$ /CI_forum/index.php/$1 last;
    }
    location @kiboard {
        rewrite ^/KI_Board/(.+)$ /KI_Board/index.php/$1 last;
    }
위 설정은 최적의 설정이 아닐 수 있으니, 참조 정도로만 쓰길 바람.


반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
nginx 는 보통 다음과 같은 설정을 사용한다
location ~ \.php$ {
    #fastcgi_pass  127.0.0.1:9000;
    fastcgi_pass  unix:/var/run/php-fpm/php-fpm.sock;
    fastcgi_index  index.php;
    include        fastcgi_params;
}
이때 보안 문제가 생긴다.

aaa.com/bad.hack/bbb.php  이런식으로 비정상적인 접근이 허용된다.
이를 막기 위해 설정을 변경해줘야 한다.

참조 : http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=73442
/etc/nginx/fastcgi_params 파일에 다음을 추가한다.
set $fastcgi_script_realname $fastcgi_script_name;
if ( $fastcgi_script_name ~ ^(.*\.php)(/.*)$ ) {
    set $fastcgi_script_realname $1;
    set $path_info $2;
}
if (!-f $document_root$fastcgi_script_realname) {
    return 404;
}

또는 /etc/php.ini  설정을 바꿔준다.
cgi.fix_pathinfo=0
nginx 에서 php-fpm 으로 넘기기전에 막아주는 것이 좋을 듯 하니 첫번째 방법이 좋을 듯 하다.


참조 : CI 에서는 다음처럼 rewrite 룰을 적용했다.
if (!-f $request_filename) {
    rewrite ^/CI_forum/(.+)$ /CI_forum/index.php/$1 last;
}
CI 를 설치한 폴더에 따라 변형해서 사용하면 된다.



반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
bind 에서는 nsupdate 로 zone 파일을 동적으로 변경할 수 있다.
ddns , dynamic dns 라고 한다.

1. 키값 만들기
 아무나 변경하면 안되니까, 보안을 위해 키값을 만든다.
 dnssec-keygen -a HMAC-MD5 -b 512 -n USER  mail.domain.com.
USER 대신에 ZONE , HOST 등으로 할 수 있다.
    -n <nametype>: ZONE | HOST | ENTITY | USER | OTHER
         (DNSKEY generation defaults to ZONE)
각각의 정확한 의미는?

위 명령을 내리면
Kmail.domain.com.+157+43746.key
Kmail.domain.com.+157+43746.private
두개의 파일이 생긴다. 보안키에서 흔히 볼 수 있는 public key , private key 라고 보면 된다.

2. named.conf 설정바꾸기.
  centos / chroot named 에서는  설정파일은
 /var/named/chroot/etc 에 있다.
rndc.key 에 다음을 추가한다. 별도 파일을 만들고 include 시켜도 된다.
key "mail.domain.com." {
   algorithm  hmac-md5;
   secret     "wTd1YkCIdFtpa4ncsdfsdfwMiGB789p8xR1fixWqDAW8fO9urKmdbalkjdsklfjAQqPA==";
};
Kmail.domain.com.+157+43746.key  값의 뒤 부분을 복사해서 넣으면 된다.
( 설정의 }; -> ; 를 빼먹지 않게 주의한다. )

 그리고, 변경하려는 도메인의 zone 을 업데이트 허용해야 한다.
zone "domain.com" {
  type master;
  file "domain.com.zone";
  allow-update { key "mail.domain.com."; };
};
위와 같이 allow-update 에 key "keyname" 형태로 넣어준다.

여기까지 하면 기본 준비는 끝난다.  named 재시작.

3. 외부에서 nsupdate 로 zone 변경해보기.

생성한 키쌍에서 private 키를 외부에 복사한다(로컬에서도 해도 되지만, 외부에서 해보자)
그리고 다음 명령으로 접속해 변경할 수 있다.
nsupdate -v -k Kmail.domain.com.+157+43746.private
접속하면 다음 처럼.
> server ns.domain.com
> zone domain.com
> update add some.domain.com. 86400 A 192.168.10.10
> show
> send
위 명령들을 파일로 만들어서 일괄처리할 수 있다.

DDNS 는 IP 가 동적으로 변경하는 환경 또는 서버의 Failover 처리등을 위해 사용하면 편리하다.
nsupdate 로 변경된 zone 파일은 직접 수정하지 않는것이 좋다.
named 에서 {zone file}.jnl 에 해당하는 임시파일을 만들고 추후 실제 zone 파일을 업데이트하기 때문에
zone 파일을 직접수정하면 수정한 부분이 사라질 수 있다.
직접 수정하려면 다음 방법중 하나를 사용한다.
# 방법1 - 9.3 이전버전
        rndc stop
        remove the journal file (.jnl)
        edit the zone
        start named
# 방법2 - 새버전 9.3
        rndc freeze zone
        edit the zone
        rndc unfreeze zone


반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
mysql 리플리케이션 설정은 어렵지 않군.
장애대응이 어려운것 같다.

# 기본 mysql replication 설정.(마스터-슬레이브)
1. mysql config 설정
  master , slave 각각 config 파일에 replication 설정을 해준다.
  우분투의 경우  /etc/mysql/conf.d 에 replication_slave.cnf (파일명은 임의로 )
  /etc/mysql/my.cnf 의 마지막줄에 이렇게 되어 있어서 불러오게 된다
!includedir  /etc/mysql/conf.d/
 my.cnf 의 [mysqld] 탭에 직접추가해줘도 된다.

내용은 이런식이다. (슬레이브쪽)
[mysqld]
server-id               = 2
master-host             = master
master-user             = replication
master-password     = slave
replicate-do-db         = master_db
replicate-do-db         = other_db
마스터쪽은 다음과 같다.
[mysqld]
server-id               = 1
log_bin                 = /var/log/mysql/mysql-bin.log
binlog_do_db            = master_db
binlog_do_db            = other_db
binlog_ignore_db        = mysql
binlog_ignore_db        = information_schema
설정만 보면 이해할 수 있을 것이다.
binlog_do_db 등을 각자의 서버설정에 맞게 바꾸어 주면 된다.

2. replication 접근 권한설정
 replication 은 slave 쪽에서 master 의 자료(bin_log)를 참조해서 데이터를 가져가는 것이다.
 그래서 슬레이브쪽에서 마스터에 접근할 수 있어야 한다.

 그 명령은 다음과 같다.(마스터쪽에서 mysql 명령을 내려준다)
mysql> grant replication slave on *.* to 'replication'@192.168.0.1 identified by 'slave';
진한부분이 conf 에서 설정한 master-user / master-host / master-password 에 해당한다.
IP 주소대신 /etc/hosts 에 설정한 호스트명을 적어줘도 된다. ( master-host = master  같은..)

3. 사용 및 장애대응
작동 중지/실행
start slave ;
stop slave ;
슬레이브 상태 보기
mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: master
                  Master_User: replication
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000018
          Read_Master_Log_Pos: 958292
               Relay_Log_File: slave-relay-bin.000271
                Relay_Log_Pos: 251
        Relay_Master_Log_File: mysql-bin.000018
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: master_db
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 958292
              Relay_Log_Space: 556
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
1 row in set (0.00 sec)
마스터의 상태를 보려면
mysql> show master status\G
*************************** 1. row ***************************
            File: mysql-bin.000018
        Position: 958292
    Binlog_Do_DB: master_db
Binlog_Ignore_DB: mysql
1 row in set (0.00 sec)
진하게 표시한 position 이 일치하는지 확인하면 된다.

slave 의 position 값이 일치하지 않는경우.
다음처럼 해준다.
mysql > stop slave;
mysql > reset slave;
mysql > start slave;
cron 등으로 주기적으로 확인해주도록 한다.




다음에는  master-master 설정 과 mysql proxy

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
2012-09-24
epel 패키지 주소가 바뀌었다.(언제인지 모르겠지만) - 기존 주소가 사라진듯.
rpm -Uvh http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
(날짜를 보니 바뀌었다기 보다. 아래 주소가 사라진듯)


2011년 12월 19일
remi 패키지를 이용하는 방법

http://www.if-not-true-then-false.com/2011/install-nginx-php-fpm-on-fedora-centos-red-hat-rhel/

Centos 5 를 기준으로 설명(다른 버전은 위 링크를 참조)

## Remi Dependency on CentOS 5 and Red Hat (RHEL) 5 ##
rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
 
## CentOS 5 and Red Hat (RHEL) 5 ##
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
Epel 과 remi  저장소를 이용한다.

nginx 는 nginx.org 에서 패키지를 제공하는 것 같다.
다음처럼 nginx.org 쪽으로 저장소 지정 (/etc/yum.repos.d/nginx.repo )
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1

nginx , php-fpm 그외 php 모듈등을 설치한다.
yum --enablerepo=remi install  nginx php-fpm php-mysql php-gd php php-pear
php-mysql 때문에 mysql-libs 가 설치되는데, mysql 5.5.19 버전에 의존성이 있다.
기존 centos5 는 5.0.77 이다. 기본패키지를 쓰면서, remi 패키지를 사용하는 방법이 있을 듯 한데.
그냥 mysql 5.5.19 로 설치했다.
yum --enablerepo=remi install mysql mysql-server
의존성 에러가 발생하면 재설치 해주면 된다.
데이터가 없다면 /var/lib/mysql 을 삭제하고 설치해주는 것이 좋다.




[그냥 잡다한 정리]
핵심은 centos 에서 epel,ius repository 를 등록하고, php53u-fpm , php53u-pecl-apc 를 설치한다.
그외 추가 패키지는 알아서 설치 - php53u-mysql 같은...
상세한 설명은 생략.


nginx 를 설치하는 방법. 컴파일, 패키지


# 새 방법  ius 의 패키지 사용법 - 현 작동중지



# 컴파일
최신 버전에 좋다.
http://blog.sor.co.kr/32
  spawn-fcgi
http://starforum.kr/336
http://interfacelab.com/nginx-php-fpm-apc-awesome/

http://adityo.blog.binusian.org/?p=428

# php 를 사용하는 방법
spawn-fcgi 예전방식 - 컴파일이 필요없다. 간단함.
최근은 php-fpm 방식 - php 최신버전은 컴파일 필요없음. 그외에는 컴파일 필요.


반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
sysmon 이 공식지원하는 버전은 python 2.4 인 것 같다.
그런데, 2.5 까지도 무난하게 동작하는 듯 하다.

ubuntu 10.04 LTS 버전을 사용하는데, 깔려 있는 버전이 python 2.6 이다.
처음에 동작을 안하기에 python 2.5 로 다운그레이드해서 시도했는데, 문제가 더 커졌다.
그래서 그냥 2.6 에서 동작하도록 sysmon 소스를 수정하기로 했다.

설치후에 CheckDaemon , SysmonDaemon , SysmonAgent 를 마스터와 각 호스트에서 동작시키는 부분에서 각 소스를 조금수정하면 된다.(처음에는 많을 줄 알았는데, 그리 많지 않다.)
세개의 파일만 고치면 된다.

./SysmonDaemon 을 실해시켰을때,
DeprecationWarning: the sets module is deprecated
이런 메세지가 나온다.
22번줄정도에
from sets import Set
이 부분을
try:
    set
except NameError:
    from sets import Set as set
으로 바꿔준다.  그리고, "Set(" 으로 검색해서 소문자 "set(" 으로 바꿔준다. (2군데 정도 나온다.)

그리고 세 파일에 공통적용되는 부분. centos 에서는 정상작동할 것이니 패스.
pgrep 으로 검색해보면  pgrep -l -f 'python.*SysmonDaemon'  같은 부분이 나온다.
(몇군데 있으니 모두 바꿔준다. 각 파일마다 1,2개정도)
저 항목이 해당프로세스의 PID 만 나와야 하는데, 우분투에서는
12178 python SysmonDaemon
이런식으로 프로세스명도 같이 나온다. -x 옵션을 넣어준다.



이걸로 끝이다. 그 부분만 고치면 python 2.6 에서도 무리없이 동작한다.


ps. sysmon 이 네이버오픈소스로 공개하고나서 업데이트를 별로 안한다.
  네이버 내부에서는 많이 개선이 되었을 듯 한데...(아닌가?)

sysmon 을 보다보니, 같이 공개한 dist 도 같이 사용하는게 편하다.

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
추가: python 2.5 로 다운그레이드해서 쓰니 다른문제들이 더 많다.
  python 2.6 에서 작동하도록 수정하는 것이 더 쉽다.
  python 2.6 에서 sysmon 사용하는 것은 따로 포스팅 예정.


sysmon 으로 서버모니터링을 해볼까 테스트하는데.
ubuntu 10.04 에서 python 2.6 이 깔려있는데, sysmon 이 오류를 뿜어낸다.
2.5 로 다운그레이드를 해야 겠다.

이미 시도한 분들이 있다.
http://yoophi.sshel.com/wp/?p=164
http://kovshenin.com/archives/installing-python-2-5-on-ubuntu-linux-10-10/

$ sudo add-apt-repository ppa:fkrull/deadsnakes
$ sudo apt-get update
$ sudo apt-get install python2.5
add-apt-repository 명령이 없다면, 아래 명령으로 패키지를 설치해주면된다.
sudo apt-get install python-software-properties


launchpad 의 패키지를 사용하는 방법.
첫줄을 수동으로 할려면 /etc/apt/sources.list 에 다음줄을 넣어준다.
deb http://ppa.launchpad.net/fkrull/deadsnakes/ubuntu lucid main
deb-src http://ppa.launchpad.net/fkrull/deadsnakes/ubuntu lucid main

sysmon 이 잘 작동해야 할텐데. 근데, sysmon 설명이 참 부실하다.

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
웹캠이 노는게 있어서 2개를 연결해서 테스트 해봤다.

모델은
Samsung Electro-Mechanics Co. MPC-C30 AnyCam Premium for Notebooks [pwc]
OmniVision Technologies, Inc. OV511+ Webcam
Z-Star Microelectronics Corp. ZC0301 Webcam

현재 쓰고 있는 모델은 마지막 ZC0301
모듈은 gspca_zc3xx 를 올려서 사용한다.(자동으로 모듈이 올라온다)
OV511 은 gspca_ov519 를 사용한다.
MPC-C30 은 pwc 라는 것을 사용하는데, 드라이버가 잘 안 맞는지 작동하지 않는다.

OV511 은 Cheese 로 연결해서 보면 잘 나온다.
그런데, motion 쪽에 연결하면 motion 이 segfault 를 내뱉으며 죽는다.


그래서 최근에 구매한 놈을 연결하기로 했다.
연결하니  Sirius USB2.0 Camera 라는 놈인것 같다.
이것은 UVC 연결을 지원한다.  드라이버도 uvcvideo 모듈이 올라온다.
치즈도 잘되고 motion 에서도 잘 연결되어 작동한다.

카메라 두개를 motion 에서 사용하려면
/etc/motion/motion.conf 에서 마지막 부분의 주석처리를 빼주고 적당한 경로로 바꿔준다
thread /etc/motion/thread1.conf
thread /etc/motion/thread2.conf
이런 부분이 있다. thread1 이 첫번째 카메라, thread2 는 두번째 카메라 의 설정이 된다.
threadN.conf 파일을 주석빼고 보면
cat thread1.conf | grep -v '#'
이런 내용이다.
videodevice /dev/video0
input 8
text_left CAMERA 1
target_dir /tmp/motion1
webcam_port 8081

;on_picture_save /usr/local/motion-extras/camparse1.pl
;on_movie_end /usr/local/motion-extras/mpegparse1.pl
카메라가 인식되면  /dev/video0 , video1 으로 장치드라이버가 생기게 된다.
각 thread1,2 에 각각 장치드라이버를 적어주다.
input 8 은 기본 usb 카메라일때를 말하는 듯(주석설명에 그렇게.)
target_dir 은 움직임이 포착되면 이미지로 저장이 되는데 그 저장위치를 지정한다.
webcam_port 는 웹브라우저로 카메라 영상을 볼 수 있는 포트를 지정한다.
카메라별로 다르게 포트를 지정해준다.

on_picture_save , on_movie_end  부분은 추후 카메라영상 원격 저장하기에서 다룰 예정이다.

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
윈도우PC를 FTP 서버로 만들어 주는 filezilla server 를 이용해서
공유기내에서 정상작동하도록 설정해본다.

1. filezilla server 다운로드
http://filezilla-project.org/download.php?type=server

2. 설치후에 server 설정
 User 설정 에서 사용자를 등록하고, Shared Folder 를 설정한다.(자세한 설명은 생략)
  Setting 에서 General settings 에서 기본 포트 21 대신에 다른 포트를 지정해준다.
  보통 ISP 에서 기본 FTP 포트를 막아놓는다.
  예를 들어 2221 포트등을 지정한다. 이 포트는 나중에 공유기 세팅에서 포트포워딩 해줄 것이다.

Passive mode settings 부분에서 Retrieve external IP address from  부분을 체크해준다.(Default 로 해도 되긴하는데 특정 client 에서 접속이 되지만, ftp data port 접속이 안되는 경우가 있다.)
포트범위도 지정해준다. (이 포트 범위를 공유기에서 설정해 줄 것이다.)

여기까지하면 FTP 서버 설정은 끝났다. 로컬에서 접속해보면 이상없이 접속이 되어야 한다. 접속이 안되면 접속port 확인, User 설정, 공유폴더 설정 등을 다시 확인한다.

3. 방화벽 설정 해제.
 윈도우XP SP2 이상에서는 방화벽이 작동한다. 방화벽에서 FTP 접속을 할 수 있도록 FileZilla Server 를 등록해준다.
  제어판 -> Windows 방화벽 -> 예외  항목에서
프로그램 추가 로 FileZilla Server 폴더로 찾아들어가서 FileZilla Server.exe 를 직접등록해준다.
기본으로 나와 있는 FileZilla Server Interface 라는 것을 선택하면 안된다.

여기까지 하면 공유기 내부의 다른PC 에서 접속할 수 있다. 접속이 안된다면 방화벽 설정을 다시 확인한다.

4. 외부 접속 가능하도록 공유기의 포트포워딩 설정.
 공유기관리 접속을 한다. (보통 192.168.0.1 이지만, 공유기 마다 다를수 있으니 매뉴얼참조)

FTP 서버를 설치한 IP 주소와 설정에서 포트범위를 적고 포트포워드 설정을 추가한다. (프로토콜 부분을 tcp ,udp 모두 지정해주는 것이 좋을 듯 하다)
(공유기에 따라 범위지정이 안되고, 하나씩 추가해줘야 하는 경우도 있다.그런경우 범위를 좀 줄여서 설정한다. 20~25 정도)


여기까지 하면 외부접속이 가능해진다. 1,2,3 까지 다 접속이 되는데, 4번에서 안된다면 포트지정이 잘못된 것이다.

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
구글톡이 윈도우,맥,리눅스 를 모두 지원한다.
우분투에서 구글톡 플러그인을 설치할 수 있다.

1. gmail -> settings -> Chat 에서 두번째 항목
  Voice and video chat 항목을 보면 구글톡 플러그인을 다운받는다.
  직접링크 : http://www.google.com/chat/video?hl=ko 에서 다운받아 설치한다.
  리눅스(우분투)에서는 deb 파일을 다운받아 설치하면 된다.
  dpkg -i google-talkplugin_current_i386.deb
  설치하면 /opt/google/talkplugin 에 설치된다.

2. firefox 를 실행해서 도구 -> 부가기능 -> 플러그인 항목을 보면
  정상적으로 구글 플러그인 에 나와야 한다.

우분투 버전에 따라 다르겠지만, 쓰고 있는 ubuntu 10.04 에서는 정상적으로 나오지 않았다.

이유는 apparmor 때문이다.
/var/log/kern.log 나 message.log 등을 확인해보면
kernel: [77536.598461] type=1503 audit(1295939125.913:24):  operation="open" pid=4565 parent=4561 profile="/usr/lib/firefox-3.6.13/firefox-*bin" requested_mask="::r" denied_mask="::r" fsuid=1000 ouid=0 name="/opt/google/talkplugin/libnpgoogletalk.so"
이런 메세지를 볼 수 있다. 우분투의 보안강화를 위해 적용된 기술인데, 불편하지만 가급적 따라 주는것이 좋다고 본다.

3. /etc/apparmor.d/usr.bin.firefox  파일에 다음을 추가한다.
  # for google talk
  /opt/google/talkplugin/* mr,
  /opt/google/talkplugin/GoogleTalkPlugin Uxr,
  /opt/google/talkplugin/lib/* mr,
  /dev/ati/card0 rw,
  /proc/ati/major r,
   위 3줄은 플러그인을 사용할 수 있는 권한을 추가한 것이다. 그 밑의 ati 나오는 부분은 사운드카드를 사용하기 위한 것인데, 사용자의 보드에 따라 다른 값이 나올 수 있을 듯 하니 kern.log 에 나오는 메세지를 확인해서 추가해준다.

gmail -> settings -> chat 항목에서 비디오,사운드 등을 확인해본다.
실제 영상채팅을 테스트해보진 않았지만, 테스트시 화면과 사운드가 정상적으로 나오는 것 까지 확인했다.


반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,

경고 : 이 방법은 정확한 해결책이 아닐 수 있다. 꼭 필요한 경우에만 적용하자.

roundcube 를 쓰면서 좀 불편한 점이 한글메일이 간혹 깨지는 경우였다.
깨지는 경우는 roundcube 가 이상있는 것이 아니라, 보내는 쪽에서 메일의 헤더에 charset 을 지정하지 않은 경우이다. 대부분 메일 규칙을 지키지 않는 아주 불량한 메일이라고 봐도 된다.

그래도 간혹 봐야 하는 경우가 생기니. 정부(관공서)메일에서도 심심찮게 발견된다.
간단하게나마 몇 부분(파일2개)을 수정해서 한글을 볼 수 있게 해보자.

1) config/main.inc.php ( 라인 수는 다를 수 있다. )
497    //$rcmail_config['default_charset'] = 'ISO-8859-1';
498    $rcmail_config['default_charset'] = 'EUC-KR';
기본 ISO-8859-1 으로 지정된 것을 EUC-KR 로 지정했다.(위처럼 주석처리하거나 바꿔준다)

2) program/include/rcube_imap.php
2369 라인 정도 ( _set_part_filename 함수 내 )
if( $part->charset == 'us-ascii' ) $part->charset = 'euc-kr';

 // decode filename
if (!empty($filename_mime)) {
    $part->filename = rcube_imap::decode_mime_string($filename_mime,
    $part->charset ? $part->charset : ($this->struct_charset ? $this->struct_charset :
    rc_detect_encoding($filename_mime, $this->default_charset)));
}
else if (!empty($filename_encoded)) {
    // decode filename according to RFC 2231, Section 4
    if (preg_match("/^([^']*)'[^']*'(.*)$/", $filename_encoded, $fmatches)) {
    $filename_charset = $fmatches[1];
    $filename_encoded = $fmatches[2];
    }
    $part->filename = rcube_charset_convert(urldecode($filename_encoded), $filename_charset);
}


2449 라인 정도.( &get_message_part 함수내 )
if ($body && $o_part->charset
    && preg_match('/^(text|message)$/', $o_part->ctype_primary)
) {
    if( $o_part->charset == 'us-ascii' ) $o_part->charset = 'euc-kr';
    $body = rcube_charset_convert($body, $o_part->charset);
}

imap 으로부터 charset이 지정되지 않으면 us-ascii 로 지정되는데, 이런 것들을 euc-kr 메일로 가정하는 것이다. roundcube 는 내부적으로 UTF-8 로 변환한다.
더 하부적으로 내려가서 바꿔줄수도 있을 듯 한데. 일단 여기까지.

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
테이블 구조를 볼때.
보통
mysql> desc {table_name}
이런식이다.

이것도 좋은데.
이게 더 보기 편하다.
mysql> show create table {table_name}\G

http://dev.mysql.com/doc/refman/5.0/en/show-create-table.html
반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
지난번 roundcube 0.3 버전 을 설치했었는데, 그동안 버전업그레이드 되었다.

업그레이드 방법을 간단히 정리한다.

1. http://roundcube.net/download
여기서 새버전을 다운로드 한다.

2. 압축을 풀고. 다음 파일,디렉토리들을 복사한다
index.php
bin/
SQL/
installer/
plugins/
program/
skins/

3. 웹메일주소/installer/ 로 접속해서 3단계의 test config 메뉴를 클릭해 설정을 확인한다.
DB 스키마 가 변경되고, 변경된 설정값을 수정한다.
config/ 의 main.inc.php , db.inc.php

DB 스키마는 SQL/mysql.upgrade.sql 을 참조해서 변경한다.
자신의 버전을 확인하고, 그 버전 윗부분은 제거하고
mysql roundcube < mysql.upgrade.sql
등의 명령으로 변경된 DB 스키마를 적용한다.

다시 test config 를 해보면 모두 ok 인 것을 확인한다.


ps. 아직 버전이 0.5 이긴 해도 꽤 완성도가 높다.
 다만 한글관련해서 몇가지 오류가 발생하는 부분도 있다.
 그런 부분을 수정해서 정리해야 겠다.

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
팩스서버에서 모뎀을 설정하고.

팩스 수신,송신을 담당할 프로그램이 필요하다. 주로 쓰이는 것이 hylafax 이다.
# apt-get install hylafax-client hylafax-server
로 설치하면 된다. (아마도 수신만 한다면, hylafax-server 만 있어도 될 듯 하다)

이번에 새롭게 우분투 10.04 로 바꾸면서 팩스서버를 옮기는데.
hylafax 를 설치하고, 실행했는데, faxgetty 가 실행되지 않았다.

config.modem 또는 config.ttyS1 등 (모뎀 디바이스명)

이 설정되어 있어야 faxgetty 가 실행된다.

이런식으로
 1656 ?        Ss     0:00 /usr/sbin/faxq
 1660 ?        S      0:00 /usr/sbin/hfaxd -d -i 4559
 1704 ?        Ss     0:00 /usr/sbin/faxgetty -D modem
띄워져야 한다. (faxgetty 부분이 없으면 송,수신이 되지 않는다.)

나의 팩스서버는 /dev/modem 을 사용하기에  config.modem 파일로 설정하였다.
CountryCode:        82
AreaCode:       31
FAXNumber:      2225555
LongDistancePrefix: 1
InternationalPrefix:    011
DialStringRules:    etc/dialrules
ServerTracing:      1
SessionTracing:     11
RecvFileMode:       0600
LogFileMode:        0600
DeviceMode:     0600
RingsBeforeAnswer:  1
#SpeakerVolume:     off
# medium
SpeakerVolume:      Medium
GettyArgs:      "-h %l dx_%s"
LocalIdentifier:    "My Office"
TagLineFont:        etc/lutRS18.pcf
#TagLineFormat:     "From %%l|%c|Page %%P of %%T"
TagLineFormat:      "From %%l|Page %%P of %%T"
MaxRecvPages:       25
#
각 설정이 크게 영향을 주지는 않는 듯 하다.
직접 적어줘도 되고, faxsetup 으로 설정해도 되는듯하다(처음 설치후)

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
메일서버가 아닌 곳에서 메일을 보내는 경우.
메일을 거부당하는 경우가 있다.
 host mx3.naver.com[202.131.27.102] refused to talk to me: 421 Your ip is filtered by RBL (http://realip.naver.com/rbl/rblinfo.html)(IP:{메일보내는서버IP})(Caues:http://www.spamhaus.org/query/bl?ip={메일보내는서버IP})
이런식으로 거부당하기도 한다.

그래서 postfix 로 메일을 보낼때 메일서버를 relay 서버로 이용하는 것이다.
smtp auth 도 사용한다.(아웃룩등에 세팅과 비슷하다고 보면 된다)

/etc/postfix/main.cf
relayhost = {메일서버주소,도메인}:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options =
위와 같이 추가해준다.

/etc/postfix/sasl_passwd
의 내용은
{메일서버주소,도메인}:587    {계정이름}:{암호}
587 포트번호는 메일서버의 smtp 포트를 써주면 된다. (보통 25 , 587 은 submission)
계정이름은 경우에 따라 Full 메일주소를 써야한다.(qmail+vpopmail 의 경우등)

다음명령으로 sasl_passwd.db 파일을 만들어 준다.
# postmap /etc/postfix/sasl_passwd
위 명령을 하지 않으면  db 파일이 생성되지 않아. 다음과 같은 에러가 난다.
fatal: open database /etc/postfix/sasl_passwd.db: No such file or directory


반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,

먼저 Xming 을 설치한다.
http://sourceforge.net/projects/xming
윈도우7 까지 잘 지원한다.

설치시 putty 도 같이 설치하는게 편하다.


다 설치한 후 XLaunch 를 실행한다.
입맛에 맞게 선택한다.(타이틀바가 있는 창이 괜찮아 보임)

putty 를 사용해 원격지서버의 프로그램을 실행하는 개념이다.

바로 gnome-session 을 실행시킬 것이다.(로컬의 데스크탑 화면 처럼 보인다)
원격지 서버의 IP 주소 / 아이디 / 암호 를 입력한다.
(With compression 은 압축전송 관련 옵션같은데, 큰 차이를 모르겠다.)

Xming 옵션 없이 그냥하면 전체화면으로 떠서 사용하기 불편하다.
1024x768 처럼 원하는 해상도를 적어준다. (@1 포함 - 없으면 에러나는 듯함)
putty 옵션은 원격지 ssh 포트를 기본 22 번이 아닌 다른주소를 사용한다면 바꿔준다.

모두 마쳤다. Save configuration 으로 설정을 저장할 수 있다. config.xlaunch 을 클릭해서 바로 실행시키면 된다.


사용해본 느낌. 예전에 Xmanager 같은 것으로 해본 기억이 있는데, 그 때는 좀 복잡하게 했던 것 같은데, 그보다 Xming 이 비교적 쉽게 할 수 있다.
그런데, 일반 인터넷라인이라 그런가 느린 감이 있다. vnc 가 속도 하나는 짱이다.

결론 : 그냥 vnc 써야지. 어쩔수 없는 경우 Xming 으로.


반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
php 는 보통 APM 으로 웹프로그래밍에 주로 쓰인다.

그런데, 꼭 웹프로그래밍에만 쓴다는 것은 아니다. php 를 CLI (Command Line Interface) 로 써서 서버관리용으로 쓰기에도 편하다.
보통 shell 프로그래밍이라고도 하는데, perl , python 등도 주로 사용된다.

cron 으로 등록해놓고 사용하는데, ubuntu 에서는 주의할 부분이 있다.
centos 등 다른 배포판은 어떤지 모르겠다.(다를것이다)

우분투는 /etc/php5/apache2 , /etc/php5/cli  라는 다른 디렉토리에 php.ini 을 사용한다.
php.ini 을 수정해서 쓰고, CLI 모드로 사용하는 경우 cli/php.ini 도 수정해 준다.
그렇게 사용하지 않는 다면 프로그램내에 ini_set 함수를 써서 옵션을 변경해서 사용해도 된다.
ini_set("memory_limit", "32M");
이런식으로 사용한다.

php 를 cron 으로 등록해서 메일을 보내는 메일링시스템에 적용중이다.
그런데, 메일을 보낼때 첨부파일이 커지는 경우 memory_limit 에러가 난다.
Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 17623691 bytes)
위와 같은 에러가 난다. 진한부분의 값에 맞게 memory_limit 값을 조정한다.


postfix 를 쓰는 경우
postfix/sendmail[26637]: fatal: root(0): message file too big
이런식의 에러가 날 수도 있다. postfix 는 기본으로 10M 이하로 제한하고 있는 듯 하다.
이것을 늘려주려면, /etc/postfix/main.cf 에 다음을 추가해준다.
message_size_limit = 20480000
대략 20M 정도를 잡아줬다.
기본값 "default: 10240000 bytes" 라고 한다.(byte 계산을 저렇게 하는게 아니었던 것 같은데?)

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
find 로 원하는 파일을 찾고
grep 으로 해당 파일의 원하는 단어를 찾습니다.

find . -type f -name "*.php" -exec grep -EH -n --color "str_|ereg" {} \;

-H 옵션은 해당 파일 이름을 보여주고
-n 은 찾은 단어의 라인번호를 보여줍니다.

확장자를 여러개 지정해서 사용하고 싶은 경우.

-name "*.php" -o -name "*.jsp" 처럼 -o 로 연결해 줍니다.( -or 를 생각하면 됨. 비슷한 예로 -a/-and 가 있음)



php 5.3.x 버전에서 deprecated 되는 함수들입니다.
http://php.net/manual/en/migration53.deprecated.php

자주쓰는 함수들이 있으면 대체 함수로 바꿔주세요.

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
그동안 주로 8.04 LTS 를 써왔다. 얼마전부터 10.04 LTS 로 업그레이드 하고 있다.
그렇다보니, 설정이 바뀐것이 꽤 된다.
8.10,9.04,9.10 등 3단계를 뛰어 넘어서 언제 바뀌었는지는 정확하지 않다.
(https://wiki.ubuntu.com/LucidLynx/ReleaseNotes 여기를 참조)

1. /etc/inittab 이 어디로 갔지?
  inittab 에서 runlevel 설정을 하게 된다. 그런데 없어졌다. 어리둥절.

  부팅설정등이 init 이라는 디렉토리로 바뀌었다.
 /etc/init/rc-sysinit.conf 에서 기본런레벨을 설정한다.
env DEFAULT_RUNLEVE=2
라는 항목이다. (이놈은 9.04, 9.10 부터 바뀐것 같다)

2. 키보드, 모니터 를 빼면 부팅이 안되요.
http://ubuntuforums.org/showthread.php?t=1452600

grub 을 콘솔로 부팅하는 것이 좋다.
/etc/default/grub

GRUB_TERMINAL=console
GRUB_CMDLINE_LINUX="nomodeset"

gdm 은 모니터,키보드 kvm 체크를 하지 않는다.
http://ubuntuforums.org/showthread.php?t=1452600&page=3
echo options nouveau modeset=0 > /etc/modprobe.d/nouveau-kms.conf
xorg.conf 설정 변경( http://ubuntuforums.org/showthread.php?t=1297815)
Section "Device"
  Identifier "VNC Device"
  Driver "vesa"
EndSection

Section "Screen"
  Identifier "VNC Screen"
  Device "VNC Device"
  Monitor "VNC Monitor"
  SubSection "Display"
    Modes "1024x768"
  EndSubSection
EndSection

Section "Monitor"
  Identifier "VNC Monitor"
  HorizSync 30-70
  VertRefresh 50-75
EndSection

BIOS 도 손봐야 하나?
Halt On 이라는 옵션을 No errors 로 해도 별 차이가 없어 보인다.
[All , But keyboard]
[All errors]
[No errors]
키보드/모니터 어댑터를 연결한다.(하드웨어적 해결방법 - 이건 좀.)


3. gdm 은 자동으로 실행이 안되나?
  위 2번의 xorg.conf 설정을 바꿔서 해결한다. /etc/init/gdm 으로 설정이 바뀌었다.

4. fsck 검사가 민감해 졌나?
보통 /etc/fstab 에서 하드디스크를 마운트 시킨다.
마운트 옵션에서 파일시스템을 체크하도록 하는데, 이게 좀 민감해졌나?
계속 하드디스크에 에러가 있다면서 부팅이 멈춘다.

UUID=0685beb5-ac3f-4308-8cb1-bc1a70a05a42 /user  ext3 defaults 0 0
(정확한 원인을 아직 찾지 못했다.)
일단 뒤의 맨 숫자를 0 으로 해서 파일시스템을 체크하지 않도록 했다.(수동으로 해줘야 겠다)

5. php , ereg 함수는 사용하지 않아.
php 새 버전은 ereg 함수등 deprecate 된 함수들이 있다. 소스를 수정하는 것이 좋다.
그렇지만 임시적으로
/etc/php5/apache2/php.ini  에서
mbstring.func_overload = 4
로 임시조치한다.



ps. 사용하면서 이상한 부분을 클린설치한 시스템과 비교해 보면서 추가 작성할 예정이다.


반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
얼마전부터 우분투 10.04 LTS 버전으로 업그레이드 하고 있다.
데스크탑, 프린터/팩스 서버, 개발서버 등..

데스크탑쪽에서는 별 문제 없었다.

프린터/팩스 서버에서 좀 문제가 되는 부분이 있었다.
서버를 업그레이드하고, 프린트 테스트를 해보니. cups 로는 넘어갔는데, 프린트를 하지 못하는 것이었다.
혹시나 해서 /dev/lp0 를 보니, 디바이스가 만들어져 있지 않았다.
프린터를 구형 레이저를 쓰는데(패러렐 포트를 쓰는) 이 것이 제대로 잡히지 않은 것이다.

정상적으로는 이런식으로 나와야 한다.
# lpinfo -v
network beh
network socket
direct scsi
network lpd
network http
network ipp
direct parallel:/dev/lp0
serial serial:/dev/ttyS0?baud=115200
serial serial:/dev/ttyS1?baud=115200
network smb
direct hp:/par/HP_LaserJet_1100?device=/dev/parport0
direct hpfax
그런데, 문제가 생긴 부분은 위의 진한 부분이 제대로 나오지 않는 것이었다.

문제는 
# lsmod | grep par
parport_pc             25962  1
parport                32635  3 lp,ppdev,parport_pc
parport_pc 모듈이 올라오지 않는 문제였다. 10.04 의 버그인지는 모르겠지만, 기본적으로 로딩이 되지 않았다.
그래서  /etc/modules 에 parport_pc 를 한줄 추가해줬다.

재부팅해보면 정상적으로 로딩되는 것을 볼 수 있다.


팩스쪽도 자동으로 모듈이 올라오지 않았다.
http://blog.1day1.org/306 에서는 기본으로 드라이버가 있었던것 같은데, 이번에는 기본드라이버가 없었다.
http://linmodems.technion.ac.il/packages/ltmodem/kernel-2.6/
에서 ltmodem-20100102.tar.gz 의 최신버전으로 컴파일후 설치했다.
10.04 출시전인 1월경의 파일이라 안될지도 몰랐지만 시도했는데, 정상적으로 로딩이 되었다.

예전과는 모듈이 좀 달라진것 같다.( 예전에는 ltmodem , ltserial 이었다)
# lsmod | grep lt
ltmodem               554956  0
ungrab_serial           1075  1 ltmodem
v8250                   9643  3 ltmodem
일단 모듈이 올라오면 성공이다.
/dev/ttySV0  디바이스가 생겼을것이다.(예전과는 이름이 달라졌다. 예전은 ttySLTM0 )

hylafax , minicom 등에서 사용하기 위해 /dev/modem 을 심볼릭링크 시켜주는것이 좋다.
udev 로 자동 링크시켜주는 방법을 사용한다.

/etc/udev/rules.d 에 92-ltmodem.rules  이런식으로 파일을 만들어주고 내용에는
KERNEL=="ttySV[0-9]", NAME="%k", MODE="0660", GROUP="dialout", SYMLINK="modem"
처럼 넣어준다. KERNEL 다음에 == 을 넣어줘야 한다. ( = 가 두개이다. )
부팅해보면,
# ll /dev/modem
lrwxrwxrwx 1 root root 6 2010-09-28 18:17 /dev/modem -> ttySV0
이런식으로 자동으로 링크가 되어 있을 것이다.

ps. 참고로 팩스를 테스트 하는데, 인터넷팩스 제공업체에 가입해서 테스트를 했다.
 보통 가입시 포인트를 주어서 무료로 테스트 해볼 수 있었다.


반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
간만에 추석을 맞이하여(?) 업그레이드 했다. 기존은 8.04 LTS (주로 LTS 를 사용한다.)
ubuntu 10.04 LTS 버전이 나온지 꽤 되었는데 그동안 테스트를 미뤄왔다.(안정화 될때까지)

데스크탑으로 쓰고 있는 시스템을 업그레이드했다.

update-manage -d 로 하면 된다.

업그레이드 중에  zoneminder 때문에 에러가 생겨 삽질을 했다.(거의 다 깔린 상태였다)
(zoneminder 를 쓰신다면 삭제하고 업그레이드 하는 것이 좋을 듯 함)

재부팅하니, 예전 grub 화면이 나오고, 커널패닉이 발생하는 상황이었다.
즉, 마지막 단계에서 grub 을 업데이트 하지 못한 것이다.
일단 새 커널로 부팅을 해야 한다. grub 화면에서 c 를 눌러 grub 콘솔로 진입한다.
grub> 이런 화면이 나올 것이다.
grub> root (hd0,0)  
탭을 눌러주면 중간중간 뭘 입력할지 힌트를 준다
grub> kernel /boot/vmlinuz-2.6.32-24-generic root=/dev/sda1
역시 tab 으로 뭘 찾을지 선택한다. - sda 는 자신의 설정에 맞게 바꿔준다.
grub> initrd /boot/initrd.img-2.6.32-24-generic
각종 모듈이 들어 있는 이미지이다. 이 부분을 빼면 거의 커널패닉을 보게되니 추가해 준다.
grub> boot
그리고 부팅해주면, 새로 지정한 커널로 부팅이 된다.

부팅이 완료되면, grub-install , update-grub 등으로 grub 을 재설치 해준다.

대부분 기존설정이 따라오니, 크게 바꿔줄것은 없다.
다만, 내 경우에 vmware player 2.5.4 를 사용했었는데, 10.04 에서는 에러가 난다.(gcc 쪽의 문제인듯?)
vmware player  새버전을 설치하면 된다. 현재 버전은 3.1.1 버전이다.

그리고, compiz 상태에서 기본 vnc 는 성능이 좋지 못하다.(화면 갱신이 안된다)
그렇다고 compiz 를 끄기는 애매한 경우 x11vnc 를 설치해서 사용한다.

apt-get install x11vnc xinetd
로 설치해준다.
그리고, xinetd 는 x11vnc 를 자동실행시켜주기 위해 사용한다(취향에 따라 gdm 로그인시 자동실행시켜도 된다.)

/etc/xinetd.d/x11vnc 로 다음내용을 저장한다.
service x11vnc
{
   port = 5901
   type = UNLISTED
   socket_type = stream
   protocol = tcp
   wait = no
   user = root
   server = /usr/bin/x11vnc
   server_args = -inetd -o /var/log/x11vnc.log -display :0 -auth /var/lib/gdm/:0.Xauth -many -bg -noxdamage -rfbauth /etc/x11vnc.passwd
   disable = no
}
여기서 조심할 항목은 /etc/x11vnc.passwd 의 암호를 지정하는 것이다.
x11vnc -storepasswd /etc/x11vnc.passwd
로 하면 암호를 물어보고, 해당 파일로 저장이 된다.

server_args 부분에서  -noxdamage 가 있는데,  compiz 상에서 화면갱신등의 성능이 좋지 않는데, 저 옵션을 주면 좋아진다.

일단 이 정도만으로 기존 쓰던 부분에서 크게 지장되는 부분은 없다.
좀더 알아볼 부분은 virtualbox , 폰트 등을 알아볼 예정.(나눔폰트로 바꿔볼까?)
그냥 느낌인지 모르겠지만, 좀 빨라진 느낌이다.

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
원격 파일 전송하는 방법중 scp 와 rsync 를 주로 사용한다.
rsync 도 -e ssh 옵션을 붙여서 쓰니 둘의 차이는 별로 없다.

그런데, scp 의 경우 문제가 있다. 바로 symbolic link 의 처리.

scp -pr {local} {remote}
를 하면  local 의 파일을 원격으로 복사할 수 있다. 서브디렉토리포함, 파일시간 보존등.
그런데, 파일중 symbolic link 가 있다면 링크된 원본파일이 전송된다. symlink 가 유지 되지 않는다.

그런경우 rsync 를 쓴다.

rsync -avzu -e ssh  {local} {remote}
이렇게 하면 된다.
둘중 편한거 쓰면 된다.

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
현재 모토로이를 우분투와 윈도우7 에 세팅해서 개발중에 있다.
윈도우7 은 모토로이 드라이버가 있어서 설치하면 된다.

우분투는 따로 모토로라에서 드라이버를 제공하지 않는다.
우분투의 usb 장치를 인식시키는 방법을 사용한다. 이때 udev 를 이용한다.
테스트는 우분투 8.04 hardy 버전과 9.10 karmic 버전에서 테스트했다.

먼저 안드로이드 SDK 를 설치한다.

$ adb devices

를 해보면.. (sdk 의 tools 디렉토리에  adb 명령이 있다.)

List of devices attached
???????????? no permissions


처럼 나온다.
디바이스가 인식되지 않아서 그렇다. udev 를 이용해 인식시켜보자.
(정확히 말하면 권한이 없다고 해야 겠다. lsusb 로는 이미 인식은 되어 있다)

모토로이를 연결하고 lsusb 명령을 내려보면.
$ lsusb

Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 005: ID 22b8:41db Motorola PCS
Bus 001 Device 002: ID 148f:2573 Ralink Technology, Corp. RT2501USB Wireless Adapter
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 003: ID 05af:0802 Jing-Mold Enterprise Co., Ltd
Bus 004 Device 002: ID 045e:0040 Microsoft Corp. Wheel Mouse Optical
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub



이런식으로 나온다. 모토로이가 어떤 것인지 딱 감이 올 것이다.

Bus 001 Device 005: ID 22b8:41db Motorola PCS


adb 에서 인식할 수 있도록, 장치를 등록한다.(진한 부분이 핵심이다)

관리자 권한으로 udev rules 를 만들어 준다.

# vi /etc/udev/rules.d/99-android.rules


위와 같이 파일을 만들어서 내용은 다음과 같이 넣어준다.(vi 등의 편집기)

SUBSYSTEM=="usb", ATTRS{idVendor}=="22b8", SYMLINK+="android_adb", MODE="0666"


한줄로 위 내용을 적어주고, 저장한다.

$ ls /etc/udev/rules.d/ -al
합계 24
drwxr-xr-x 2 root root 4096 2010-02-14 01:54 .
drwxr-xr-x 3 root root 4096 2009-12-06 02:15 ..
-rw-r--r-- 1 root root 1405 2009-12-21 20:25 70-persistent-cd.rules
-rw-r--r-- 1 root root  787 2009-12-11 00:51 70-persistent-net.rules
-rw-r--r-- 1 root root   91 2010-02-14 01:54 99-android.rules
-rw-r--r-- 1 root root 1157 2009-10-16 15:01 README


위처럼 rules 파일을 만들어 주면 된다.

udev 를 다시 실행시켜주면 정상적으로 사용할 수 있게 된다.(관리자권한 필요)


/etc/init.d/udev restart
또는
restart udev


이때 모토로이의 usb 저장소(외장형 SD)도 같이 인식되는 것을 볼 수 있다.


adb 명령을 다시 해보면.(처음과 다른것을 볼 수 있다)

$ adb devices
List of devices attached
04031826748580332373    device


위 처럼 인식된 장치가 보이게 된다.(보이는 숫자는 다를 것이다.)

이클립스에서 빌드명령을 내려보면, 타겟이 모토로이로 지정되어 뜨게 된다.


반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
2010년에는 안드로이드폰이 많이 나올것이다. 그러나 국내에서는 과연 나올까?
나온다고 본다. 다만 그 시기가 언제일지는 모르겠다.
빠르면 2월정도, 상반기에는 꼭 출시되었으면 한다.(구글코리아야! 도와줘!!  전파인증)

안드로이드 개발환경을 구축하기로 했다. 플랫폼은 우분투.
조합은 이렇다.
우분투 9.10 + eclipse 3.5 (galileo) + android eclair (2.01)
가능한 쉽고, 빠른 개발환경 구축을 목표로 한다.
핵심은 어플개발이기 때문에 개발환경에서 삽질은 최소로 줄여야 겠지.

일단 eclipe 까지는 한방에(우분투는 먼저 깔려있어야죠.)
apt-get install eclipse eclipse-jdt
를 하면 관련 패키지를 알아서 설치해준다.


그다음은 developer.android.com 에서 관련 정보를 찾는다.

기본 Quick Start 문서 : http://developer.android.com/sdk/index.html

1. Android SDK 설치.
  링크를 찾아 설치 : linux 를 찾아서 설치해야 겠죠.
  실행할 수 있도록 패스를 설정한다.(PATH=andriod-sdk/tools:$PATH)

2. eclipse 플러그인 설치 (ADT)

 http://developer.android.com/sdk/eclipse-adt.html
 이클립스를 잘 안다면  이 주소만 알려주면 알아서 깔겠죠.
https://dl-ssl.google.com/android/eclipse/
install/update 로 설치하면 됨.

이부분은 eclipse / eclipse-pde 패키지를 설치하면 되는 듯.

3. android SDK 컴포넌트 추가
http://developer.android.com/sdk/adding-components.html
SDK 를 설치하고 AVD Manager 를 실행한다.
왼쪽메뉴의 Avaliable Packages 를 선택하고, 필요한 패키지(컴포넌트)를 설치한다.
혹시 에러가 난다면.

난 2.0 버전 이상의 패키지를 설치했다.(목표는 eclair 이기 때문에...)

4. 안녕! 빵꾸똥꾸야!
자! 여기까지는 준비운동은 끝났다. 본격적인 어플개발을 시작.
제대로 되나. 확인할 겸.
http://developer.android.com/resources/tutorials/hello-world.html
안녕! 세상아를 찍어봐야지.

이클립스에서 android 프로젝트를 생성한다.
이때 이런 메세지가 나올 것이다.
The location of the Android SDK has not been setup. Please go to Preferences > Android and set it up
처음 실행시 기본 SDK 의 위치를 찾지 못하는 것이다. 메뉴의 Window > Preference > Android 탭으로 가서
설치한 SDK 위치를 지정해준다.  (andriod-sdk 까지 지정해주면 된다. 풀패스로.)

그리고, 소스를 알맞게 수정을 하고, Run 해주면 나온다.
이렇게! (에뮬실행이 오래걸리는구나! vbox 에서 실행해서 그런가?)

좀더 개발환경에 적응을 하고, 어플을 만들어 봐야 겠다.
뭘 만들지...

아이폰어플에 비해 참 쉽다. 물론 맥북사면 비슷하려나? ^^


[참조]
# avd 디바이스 설정.(Android Virtual Devices)
android list targets
android 타겟지정 avd 생성

 android create avd -n my_avd -t 1

 
반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
우분투 9.10 을 설치하고, 파이어폭스를 띄우면 자동으로 플래시플레이어 플러그인을 설치한다.
그런데, 이상하게 플레이는 되는데, 컨트롤을 할 수 없다.
그래서 혹시나 해서 64bit 버전으로 수동설치해봤다.


지난번. 우분투 9.04 의 방법과 크게 다르지않다. ( http://blog.1day1.org/262 )

다운로드 주소가 바뀐것 같다.
http://labs.adobe.com/technologies/flashplayer10/64bit.html

다운로드주소
http://labs.adobe.com/downloads/flashplayer10_64bit.html

압축풀고. 해당위치에 복사.


flashplugin-installer 라는 패키지로 설치한 듯 하다.
이상하게 동작하는 것 같아. 그냥 예전방식으로 처리했다.
위 방법도 상관없는 듯. (방법은 알아서 )


반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
virtualbox 를 사용해서 개발환경을 만든다. 매우 유용하다.
한 시스템에 서로다른 개발환경을 구축한다면 필수라고 볼 수 있다.
vmware 도 자주 쓰는데, 가벼운(?) virtualbox 를 주로 사용한다.

새로 시스템을 설치하고, virtualbox 를 세팅했다.
예전 시스템의 가상이미지를 그대로 가져오면 되니 편하다.

centos 를 부팅했다. 그런데.
memory for crash kernel (0x0 to 0x0) notwithin permissible range
이런메세지가 나오면서 부팅이 되지 않고 멈춰버린다.(우분투vm 은 상관없었다.)

다음설정을 체크해주면 정상부팅된다.
"IP APIC 사용하기"  를 체크해준다.
그리고 다시 부팅해보면, 위의 메세지가 나오긴 하지만, 부팅은 정상적으로 된다.
(그러면 저 메세지는 뭐지? 예전에도 있었나?)


반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
윈도우용 ssh 클라이언트로 putty 를 사용한다. 가볍고 편하다.

윈도우7 을 새 시스템에 재설치한 후 기존설정이 사라진 상태이다.
기존 시스템에서 관련 설정이 어디에 저장되어 있나?

regedit 로 찾아봤다.

저장된 위치는 다음과 같다.

[HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions]


해당 값을 내보내기로 저장한다.

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,