우선 FTP 에서 심볼릭링크(symbolic link)는 비표준이라고 합니다.


빠르게 최근 데이터들을 정리해서 보되, 사본은 만들지 않고 심볼릭링크로 접근하고 있던 부분을 쓰려고 보니 chroot 때문에 접근이 불가능...


보통 "mount --bind" 를 symbolic link 대신 사용하는 방법을 해결안으로 제시하는데 이건 root 권한이 매번 필요.



/volumes/ftpsrv 를 FTP에서 chroot로 쓰고 있었고 이 안에 data 디렉토리가 각종 데이터를 담고 있다.

( /volumes/ftpsrv/data )


FTP 클라이언트마다 되는 놈도 있고 안되는 놈도 있지만, 주로 쓰는 FileZilla 는 chroot 상에서 해당 경로로 접근해주긴 한다.


ln -s /volumes/ftpsrv/data/dir1/target /volumes/ftpsrv/data/dir2/s_target

이렇게 만들어봐야 chroot 로 보면 없는 경로 이므로 접근하지 못한다.


그럼  ln -s /data/dir1/target /volumes/ftpsrv/data/dir2/s_target 는?

안된다. 째째하게도 심볼릭링크 대상 파일이 없으면 만들지 못한다.


이걸 어쩔까 하다가


bind mount를 많이 쓰는 방법이 생각나

/data 디렉토리를 만들었고 

mount --bind /volumes/ftpsrv/data /data


하니,

실제 파일이 존재하므로

ln -s /data/dir1/target /volumes/ftpsrv/data/dir2/s_target

이런 형태로 심볼릭링크도 생성할 수 있고, 


FileZilla 는 chroot 된 경로내에 같은 경로상 파일이 존재해서 접근이 가능하다. -_-;;;

...걍 루트로 mount 돌릴까...



Posted by freezn
삽질기행/잡다정보2017. 3. 9. 01:31

IwinV 는

100dedi.net, 1000dedi.net, CloudV 로 유명한 스마일서브에서 만든

오픈한지 한달도 안된 서비스다. 일주일 되었나?

게다가 현재 2017.3월까지 베타테스트에 10만원까지 무료 행사 중!

http://iwinv.kr


CloudV (+아이비로?) 에서 쌓은 노하우와 시스템을 기반으로 기본료가 저렴하고 자동화된 서비스를 만들어냈다.


아직 API는 안보이지만 AWS와 같은 자동화시스템을 기반으로 한 [기본서비스는 저렴 + 기술지원요금] 포지션으로 보면 되는 듯 하다.


이글에서는 몇몇 지적을 하지만 오해하지 말자 아직 초-초창기다.

실제로 스마일서브는 그 전 사업들에서 높은 신뢰도와 개성적인 시스템을 운영해왔다.




웹호스팅을 이용해보자


개인적으로 친목으로 운영 중인 커뮤니티 사이트 하나를 가상서버호스팅으로 운영해왔는데

아무래도 이래저래 신경 쓸 게 많아 파격적인 가격인 웹호스팅으로 해보기로 했다.

요즘 클라우드플레어도 한국 CDN에 연결이 안되는지 속도가 너무 느려져 사용을 포기해야 할 것 같다.



월 560원.. 부가세 포함하면 610원? 에 이런 사양이라니... 대단하다.!



실제 개설해보니 웹사이트 반응속도는 만족스러웠고 계정은 효율적인 자원관리 때문인지 가상서버안에 존재하고 있어 미쳐날뛰는 이웃 때문에 타격을 입을 가능성이 상대적으로 낮아보였다.



회사 업무용으로 사용 중인 KT ucloudbiz 도 그랬지만 사양은 신청상품따라, 기간따라 달라질 수 있을 것 같다.

그중에서도 저가 상품을 선택했으니 아마 더 낮은 사양...이겠지?


CPU는 AMD 기반 가상 CPU 4코어


램은 8기가


뭐 사실 이런 것들을 비롯해서 여러 정보는 안보이는게 여러사람이 입주해서 사용하는 웹호스팅 특성상 보안에는 더 좋을지도 모르겠다.


그 와중에 권한은 엉뚱한 곳에서 불편을 겪는다.


홈 경로 기본 권한에 쓰기 권한이 없다.

난 보통 웹에서 직접 접속할 일 없는 라이브러리나 백업용 스크립트, 기타 임시나 백업파일을 배치하는 디렉토리를 웹노출 경로 위에 한두세트 만들어 두는데 

권한을 바꾸지 말라고 공지를 본 것 같아 건들지는 않았지만 좀 아쉬운 부분이다.







SSL 인증서를 설치 해보...려 했더니?


이번에 이전하는 사이트는 소소한 모임사이트지만 비싼 것도 아니고 전송구간 보안을 갖춰서 나쁠 게 무엇인가 싶어 SSL 인증서를 몇년전부터 적용해오고 있으니 회원들은 https 로만 접속한지가 수년째라, SSL을 적용해야만 했다.


그런데 이런? 웹호스팅을 개설하고 보니 SSL 설치 메뉴가 없다.

사이트 내에는 사전 혹은 단순 문의란이 없고, 신청메뉴가 없어서 신청하려고 보니 보이질 않는다.

페이스북 페이지 웹호스팅 홍보글에 문의를 남겼고, 기술지원으로 주문하면 된다는 답을 받았다.





그리고 여기서부터 작은 공포가 시작된다.

월 500원짜리 상품 이용하면서 무슨 대단한 걸 바라겠냐만.



어쨌든 기술지원 신청 메뉴를 통해 신청해보기로 한다.

작업비는 항목별 작업비 + 전화 상담비다.




기술지원란에서 내가 이용중인 웹호스팅을 선택하고 SSL 인증서 설치야 이쪽 담당기술자라면 아무나 하겠지? "초급"기술자를 선택한다.


세부 항목을 펼치니, 다른 항목들은 납득이 되는데 요즘엔 자동화도 많이 되어있는 "SSL 보안서버 설치" 항목이 작업요금이 무려 3만원이다...? 유독...?




나도 기술자다보니 공임은 아끼면 안된다는 마음을 가지지만 이건 좀 높다 싶다.

바로 결과를 보고 싶은 호기심을 참지 못하고, 밤 12시에 할증비용으로 신청을 하면서 SSL 인증서 설치작업비용이 높으니 앞으로는 자동화되었으면 좋겠다는 푸념을 같이 남긴다.


오 바로 전화가 온다. (겨우 SSL 인증서 설치 때문에? 파일 올려놓고 경로도 적어놨는데..?)

작업담당자분이 본인 확인 후 접속 정보를 같이 남겨줘야 한다며 요청한다.

...?? 이상하다? 내가 이용한 상품이 뭔지 선택해놨는데..? 이정도 정보가 없나?

신청 내역을 수정해놓겠다고 전화를 끊는다.




오해는 풀리고...

곧 신청내역에 접속정보를 기입해서 수정해놓으면서 찜찜한 마음에 상품명은 상단에 적어놨었지만 다시 기입하고 나니 전화가 다시 왔다.


"고객님께서 사용중이신 상품은 웹호스팅 상품으로 야간 인력은 권한이 없어 비상 시 외엔 작업이 어려워..."


아하..! 그랬다.

기술지원신청란에서 선택했던 상품 정보가 전달이 되지 않았는지 접속정보를 물어온 것이었고,

유독 높아보였던 SSL인증서설치 작업요금은 서버 상품 이용 시에 대한 비용이었던 것.


어찌 구성해놨을지 모를 정글 같은 고객 서버를 뒤져서 해야하는 SSL 보안 서버 세팅 작업이라면 충분히 납득되는 비용이다.


그리고 상담한 내역까지 기록해주셨나보다.

그런데... 으응? 통화 시간에 따라 통화 비용도 같이 과금 예정으로 기록되어있다.

상당히 자동화 된 것 같다.


두 통화 모두 기술지원에 해당한 내용이 못되므로 660원은 과금하면 삐질거다! ㅎㅎㅎ





그 외


임시로 클라우드플레어와 함께 사용 했을 때 발견된 문제인데,

웹방화벽 모듈을 켜둘 경우 403 에러가 뜬금없이 자주 등장한다. 클라우드플레어가 캐싱 역할을 하니 당연히 그럴 수 있다.

끄고나면 프로그램 페이지에서는 403 에러는 나지 않는다.


그리고... 왠지 모르게 이미지가 뜨질 않는다..?

클라우드플레어의 문제인지 IwinV 의 문제인지 상성 문제인지 파악도 하지 못했다. ㅎㅎ


---


2017.03.09 추가.


이런.

지금 iwinv의 기술지원 시스템은 지원담당자가 글을 읽기 어려운 UI를 가졌음에 틀림 없다. 두번이나 신청 내용을 제대로 파악 못했다.

분명히 기본443포트 사용이 불가능 할 경우 신청을 취소해달라며 신청 내용을 시작했음에도 불구하고, 다른 포트로 완료되었다며 결과 내역이 달렸다.

현재 기본포트 ssl설치는 지원되지 않는 것으로 보인다.


그리고 이에 대해 다시 문의를 하고 싶었지만

해당 기술지원 신청은 완료처리되어 댓글을 달 수 도 없었고, 다시 유료 기술지원 신청을 하지 않으면 일절 문의도 건의도 남길 수 가 없는 구성이다. 개선이 필요하다.



---


2017.05.08 추가.


글 작성 후 몇일 지나지 않은 4월 4일부터 let's encrypt 자동 갱신도 지원하고
기본 포트 443도 대응한다.

이건 좋은 회사다.
곧 다시 이전 해볼 것 같다.

https://help.iwinv.kr/manual/read.html?idx=451

앉으면 눕고 싶다고, 구글 앱엔진 을 생각하면 cpanel스러운 크론탭 기능이나 분석 기능이 또 아쉽지만 빠른 속도로 계속 발전해 나가는 모습이 기대된다.

Posted by freezn

시놀로지 713+ 를 사용 중


수백메가급 이미지 파일을 대량으로 업로드 했더니

photo 디렉토리에 넣은 것도 아닌데 썸네일 생성을 하다가


... 메모리 부족으로 죽어버린다.



원인을 찾아보니 썸네일 생성 프로세스가 잔뜩 떠있는데


중단 방법은 관리 메뉴에도 없고 구글링해보니


s77synomkthumbd.sh 에 stop 명령을 주는 건데


DSM 6.0 이라 그런지 이 명령이

/usr/syno/etc.defaults/rc.d 에도 없고

/usr/syno/etc/rc.d 에도 없다.


https://www.reddit.com/r/synology/comments/4c6cz6/ever_since_installing_dsm_60_recently/

여기에서 본

synoservicecfg --stop synomkthumbd

명령이 먹는 것 같지도 않다.


실시간으로 뻗어대서 급하게 조치한 방법은


ImageMagick 의 실행파일인


/usr/bin/convert 를 없애버렸다.


mv /usr/bin/convert /usr/bin/convert.org

touch /usr/bin/convert

chmod +x /usr/bin/convert


다른 기능에도 제약이 생길까 싶은데 일단은 두는 중..

Posted by freezn

휴일에 손가락도 까닥하지 않겠다는 굳은 의지로 간만에 아마존 직구...


필립스 휴 스타터킷 (원격 제어 led전구)

https://www.amazon.com/gp/product/B014H2OZAC/ref=oh_aui_detailpage_o00_s00?ie=UTF8&psc=1

 

아마존 에코 닷 2세대 (음성인식 스피커?)

https://www.amazon.com/gp/product/B01DFKC2SO/ref=oh_aui_detailpage_o00_s00?ie=UTF8&psc=1




하지만



...아차... 전압...


+ 여기저기서 잘된다는 이야기를 듣고 해보니 다행히도 잘 된다.

+ hue white는 색감이 매우 주황이다.

Posted by freezn

https://pve.proxmox.com/wiki/Manual:_pct


 pct exec <vmid> [<extra-args>]

    Launch a command inside the specified container.

    <vmid>     integer (1 - N)

              The (unique) ID of the VM.

    <extra-args> array

              Extra arguments as array

 


pct exec <vmid> passwd <username>





Posted by freezn

XE, XpressEngine 1.8.20 기준.



사진 파일 첨부를 위해 ckeditor를 적용했고,

[xe, xpressengine - 모바일 ckeditor적용, 사진 파일 첨부]



ckeditor를 적용하니 ckeditor가 자연스럽게 적용되지 않아 모바일 여부 확인하여 툴바를 접고 높이를 줄이도록 하였다.

[xe, xpressengine - 모바일에서 ckeditor 크기줄이기, 툴바접기]


하지만 또 발생하는 문제는

ckeditor로 글을 작성할 경우 기본적으로 html 모드이고

모든 엔터가 nl2br 처리 되어 두번엔터된 효과가 나타났다.


해결은 글 입력/수정 시 모바일여부를 확인하고 nl2br을 붙여주는 부분을 수정한다.


파일 : xe/modules/document/document.controller.php


2곳을 고쳐야한다.

위 파일을 열어 Mobile로 검색해보면, 284라인(insertDocument)과 486라인(updateDocument) 근처에 다음과 같이 되어있다.


if(Mobile::isFromMobilePhone())

{

    if($obj->use_html != 'Y')

    {

        $obj->content = htmlspecialchars($obj->content, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);

    }

    $obj->content = nl2br($obj->content);

}


아래처럼 if문 안으로 수정한다.


if(Mobile::isFromMobilePhone())

{

    if($obj->use_html != 'Y')

    {

        $obj->content = htmlspecialchars($obj->content, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);

        $obj->content = nl2br($obj->content);

    }

}


모바일에서 html 모드일 경우 "<br>" 태그를 입력하기 너무 번거롭기 때문에 이렇게 작성되어있지만 아예 위즈윅에디터를 적용했기 때문에 자동으로 줄넘김 태그로 변환해줄 필요가 없기 때문.


Posted by freezn

XE, XpressEngine 1.8.20 기준.


아직 스킨을 수정해야한다.


수정하려는 스킨의 write_form.html 에서 본문 입력란(일반적으로 textarea)을

{$oDocument->getEditor()} 

로 대체한다.


처음엔 ckeditor 없이 파일만 첨부하도록 하고 싶었지만 파일첨부만을 해주는 기능은 찾지 못했고

getEditor 함수가 xe 설정상 기본 에디터와 파일첨부창을 함께 호출하므로 간편하게 적용이 가능하다.


대신 자연스러운 적용을 위해

[xe, xpressengine - 모바일에서 ckeditor 크기줄이기, 툴바접기]


를 함께 적용한다.




Posted by freezn

XE, XpressEngine 1.8.20 기준


XE 사용 중 모바일모드에도 사진첨부를 위해 스킨을 수정해서 ckeditor를 적용했다.

그런데 기본상태에서 툴바는 너무 크고 에디터 입력창 자체가 높아 불편하다.


그래서 툴바는 접어놓고, 크기를 줄여보기로 한다.


1차 시도 (실패) :

스킨에서 추가하는 js 에서 ckeditor 에 접근...

ckeditor 호출이 느려, 호출이 끝난 후 다시 접고 줄여야 하는데 문제가 발생한다.


2차 시도 (성공) : 

ckeditor는 설정파일이 있다.

모바일인지를 간단히 체크해서, 툴바를 펼치지 않고 높이도 지정해서 로딩되도록 한다.

xe에서 ckeditor의 설정파일은 비어있거나 없을 수 있다. 없으면 만들어준다.

파일 : xe/common/js/plugins/ckeditor/ckeditor/config.js



function checkMobileDevice() {

        var mobileKeyWords = new Array('Android', 'iPhone', 'iPod', 'BlackBerry', 'Windows CE', 'SAMSUNG', 'LG', 'MOT', 'SonyEricsson');

        for (var info in mobileKeyWords) {

                if (navigator.userAgent.match(mobileKeyWords[info]) != null) {

                        return true;

                }

        }

        return false;

}


if(checkMobileDevice()==true)

{

        CKEDITOR.editorConfig = function( config ) {

                config.toolbarStartupExpanded = false; // 툴바 접기

                config.height = 230; // 높이 설정

                config.removePlugins = 'liststyle,tabletools,contextmenu'; // context menu disable

        };

        CKEDITOR.replace( 'iframe', {

                 removePlugins: 'contextmenu,tabletools' // context menu disable

        } );

}


붙여넣기를 위해 롱터치 시 번쩍! 나타나는 ckeditor의 context menu 때문에 붙여넣기가 불가능했는데 context menu disable 관련 설정을 찾아 해결했다. 사실 아주 매끄럽지는 못하다.


+

checkMobileDevice() 는 너무 고전적이라 안되는 경우가 있을 수 있다.

https://github.com/kaimallea/isMobile/blob/master/isMobile.js

사용해도 되고...

Posted by freezn


cloudflare를 접해봤다.

워낙 잘되어있고 성능향상이나 서버ip감추기, 서버 성능 영향없는 ssl 적용 등 좋지만


이를 위해 http proxy(cdn)을 활성화 시키고 나면, 클라우드플레어 서버를 거쳐 오기 때문에

서버에 남는 사용자의 접속ip가 실제사용자 ip가 아닌 클라우드플레어 ip로 제공되는 바람에

기존 프로그램들이 말썽을 일으키는 경우가 많다.


특히 flexible/full/strict ssl은 클라우드플레어를 신뢰하지 않는다면 사용할 수 없는 기능.

여러 도메인을 모두 인증해주는 ECC 도메인 인증서기 때문에 인증서의 발급대상이 XXX.cloudflaressl.com 이다.

flexible/full/strict 관계 없이 모두 같다.


full/strict 을 사용하여도 서버와 클라우드플레어간의 전송구간, 사용자와 클라우드플레어와의 전송구간 이 암호화 되는 것이지 클라우드플레어가 컨텐츠를 볼 수 없는 것이 아니다.



막그린 그림이고 flexible ssl 적용시에 대한 예시이지만 대충 뭐 저렇다.


ssl을 적용하지 않아도 http proxy(cdn)기능을 활성화 하면 모든 통신은 클라우드플레어가 캐싱한다.

이때 사진이나 js, css 같은 정적인 자료는 캐싱되기 때문에 서버의 성능향상이 이루어진다.

하지만 프록시를 사용할 경우 개념상 사용자가 서버에 접속한 게 아니라 위 그림처럼 클라우드플레어가 사용자 대신 받았다가 사용자에게 보내주는 것이기 때문에 서버관점에서 접속한 사용자는 클라우드플레어 이다.


PHP의 경우 $_SERVER['REMOTE_ADDR'] 에 클라우드플레어의 IP가 나타난다. JSP, ASP, node.js 가릴 것 없이 당연히 모두 마찬가지다.


클라우드플레어는 이러한 점을 보완하기 위해 CF_로 시작하는 확장변수들을 제공한다.

참고 : http://stackoverflow.com/questions/14985518/cloudflare-and-logging-visitor-ip-addresses-via-in-php

PHP의 경우 $_SERVER["HTTP_CF_CONNECTING_IP"] 를 사용하면 실제 IP를 얻을 수 있다.



하지만 xe 같은 범용 프로그램을 사용하는 경우 이것의 관리가 너무 불편하다.

nginx의 경우 이런 프록시서버를 통한 접속의 경우를 위해 real_ip 모듈이 제공된다.

ubuntu 14.04 lts를 기준으로 다음 설정을 /etc/nginx/conf.d/cloudflare_realip.conf 파일로 만들어 넣고


set_real_ip_from 103.21.244.0/22;

set_real_ip_from 103.22.200.0/22;

set_real_ip_from 103.31.4.0/22;

set_real_ip_from 104.16.0.0/12;

set_real_ip_from 108.162.192.0/18;

set_real_ip_from 131.0.72.0/22;

set_real_ip_from 141.101.64.0/18;

set_real_ip_from 162.158.0.0/15;

set_real_ip_from 172.64.0.0/13;

set_real_ip_from 173.245.48.0/20;

set_real_ip_from 188.114.96.0/20;

set_real_ip_from 190.93.240.0/20;

set_real_ip_from 197.234.240.0/22;

set_real_ip_from 198.41.128.0/17;

set_real_ip_from 199.27.128.0/21;

set_real_ip_from 2400:cb00::/32;

set_real_ip_from 2606:4700::/32;

set_real_ip_from 2803:f800::/32;

set_real_ip_from 2405:b500::/32;

set_real_ip_from 2405:8100::/32;


# use any of the following two

real_ip_header CF-Connecting-IP;

#real_ip_header X-Forwarded-For;


sudo nginx -s reload 명령 한번 내려 설정 리로딩시켜주면 이후에는 원 아이피가 REMOTE_ADDR 같은 환경 변수에 담겨오게 된다.

xe의 조회수, 카운터 같은 기능들은 전적으로 ip에 의존하기 때문에 프로그램을 고치거나 위 설정을 적용해서 해결이 가능하다.


혹시 서버가 haproxy같은 또 다른 프록시를 사용하고 있다면 해당 ip도 위 설정에 적어서 해결할 수 있다.

이때에는 real_ip_header가 CF-Connecting-IP가 아닌 X-Forwarded-For 같은 범용 헤더이거나 또 다른 전용헤더일 수 있으니 해당 헤더를 확인.


Posted by freezn

현상 : ckeditor가 간헐적 혹은 아예 나오지 않음


해결 : Speed -> Rocket Loader™ 를 OFF



Posted by freezn