gitlab 운영 중 서버의 IP를 변경하게 되면 이것저것 신경써줘야 하지만 특히 아래 내용을 확인해줘야 한다. 일반 유저들이 프로젝트 clone을 위해 복사하는 주소인데 여기 노출되는 주소도 정상적으로 변경이 되어야 하겠다. 우선 변경하는 방법은 서버에서 아래 파일을 수정하는 것이다. /etc/gitlab/gitlab.rb ## Latest options listed at https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/files/gitlab-config-template/gitlab.rb.template ## Url on which GitLab will be reachable.## For more details on configuring extern..
새로 생성되는 Container는 기본적으로 docker0 인터페이스를 사용하고, 별다른 설정을 건드리지 않았다면 bridge 모드로 동작한다. 또한 Container의 IP는 docker가 관리해줘서 172.17.0.0/16 대역으로 설정된다. 일종의 DHCP leasee 같은 개념이 되겠다. 여기서 한가지 알고 넘어가야 하는 사실은 IP가 유동이라는 사실이다. 한번 Container가 올라오면 IP가 변경될 일이 없지만 Container를 재시작하는 경우 때때로 IP가 변경된다. 아래와 같은 예를 들어보자. 이렇게 운영중이던 서비스에서 Docker 재시작으로 인해 2번 Container (172.17.0.3) 를 먼저 시작하고 1번 Container (172.17.0.2) 가 시작되었다면 Docker..
[ 최초 이미지 다운로드 ]아래처럼 이미지 다운로드를 진행한다. docker pull :docker search를 통해 어떤 버전을 다운로드 받을 수 있는 지에 대한 내용은 차후 포스팅예를들어 보면 다음과 같다. docker pull centos:6.7 [ 컨테이너 생성 ]아래와 같이 생성한다. -v, -p 는 옵션이니 생략 가능하며 적절하게 수정할 수 있겠다. docker run -d -it --name -v /pkg:/pkg \ -p 8081:80 -p 8026:25 : /bin/bash 잠깐 구문을 뜯어보면 컨테이너 이름은 에서 지정 될 것이고, 컨테이너를 생성하기 위한 이미지는 :에 centos:6.7 처럼 넣어주면 된다. -v는 host에 pkg라는 디렉토리를 guest에서 /pkg라는 디렉토리..
얼마전 데스크탑을 Ubuntu로 변경하고 가상머신에 win7을 설치했는데 guest os에서 사운드가 나오지 않는 문제를 겪었다. 음악을 못듣는건 둘째치고 모든 경고나 알림 등을 받을 수 없는게 좀 타격이 컷다. 관련해서 조금 검색해보니 host와 guest간의 호환성이 있는 사운드 카드가 따로 있는 모양이다. 우선 virtualbox에 사운드 설정을 아래처럼 변경해준다. 캡쳐는 guest가 활성화 되어 있는 상태라 설정이 음영으로 disable되어 있는데 guest를 종료하고 설정해야 한다. 아마도 기본설정이 "인텔 HD 오디오" 일 텐데 아래처럼 ICH AC97로 변경해준다. 이게 끝이다. 무척 간단하게 해결 되었네. ICH AC97 드라이버는 아래 경로에서 다운로드가 가능하니 참고하자. http:/..
virtualbox에서 OS(CentOS-6.4 64bit)를 복제하고자 할 때 인터페이스에 문제가 발생합니다.(모든 네트워크 카드의 MAC 주소 초기화 활성화 했음) 문제 내용은 eth0가 사라진다는 것인데요.eth0가 사라지고 eth1가 생깁니다. 이것은 아마도 virtualbox에서 MAC주소를 초기화 하지 못하는 것으로 보입니다.(32bit 복제 시에는 문제 없음) 해결 방법은 아래 파일을 직접 수정하는 겁니다./etc/udev/rules.d/70-persistent-net.rules eth0의 MAX주소가 원본 이미지와 동일하네요. 그래서 부팅 시에 인터페이스 생성에 실패하고 다음 인터페이스인 eth1을 생성했던 겁니다.이제 eth0 부분을 삭제하고 NAME="eth1"을 NAME="eth0"로..
nmap은 보통 host의 열린 포트를 확인하는 용도로 많이 사용 된다.사실 nmap은 더욱 많은 기능을 내장하고 있는 생각보다 큰 프로젝트인데, 이번에는 host의 ciphers를 확인하는 방법에 대한 명령어를 확인해본다. nmap --script ssl-enum-ciphers.nse example.com -p 25 example.com의 25번 포트(smtp)에서 사용 가능한 ciphers 리스트를 확인했다.사용 가능한 protocol별로 ciphers가 명시 된다. 재미있는 것은 위에 나열 된 순서로 Client Hello에서 ciphersuite를 찾는 다는 것. 또한 cipher의 강도도 알파벳으로 명시가 되니 사용자 입장에서 무척 편리하다. - cipher를 찾는 다른 알고리듬도 존재 한다. ..
TLS 연결 단계 중 client hello를 살펴 본다. TLS연결은 Client Hello로부터 시작이 되고,client는 자신이 사용할 수 있는 가장 높은 protocol 버전과 ciphersuite 리스트를 전송한다. 아래는 이와 관련 된 wireshark의 일부 내용(Client Hello)이다. server는 client hello 메시지로부터 protocol을 선택(높은 것 부터 확인해서 서버에서 사용 가능한)하고ciphersuite도 선택하게 된다. (선택하는 알고리듬 방식은 다양한 듯)아래는 이와 관련 된 wireshark의 일부 내용(Sever Hello)이다. 정상적인 선택이 되지 않으면 연결을 종료하며, client는 TLS connect failed를 전달 받게 된다.답답한 것은 ..
많은 파일 이름에서 특정 패턴을 찾아서 일괄 변경하기 위한 시도는 오래전부터 있었습니다.아마도 가장 흔한 방법이 rename 일텐데, rename의 설치 방법에 따라 동작 여부가 약간 달라 문제가 있죠. 일반 pkg에 built-in되어 있는 rename은 파일 명에서 패턴을 찾아 변경하는 옵션이 제공되지 않습니다.그래서 shell로 도전하게 되었습니다. 일단 결과부터 놓고 풀어나갑니다.아래는 파일 이름에서 A_A를 찾아 B_B로 변경하는 명령어 입니다. $ find . -type f | xargs -I{} sh -c 'mv -v $0 ${0/A_A/B_B}' {} ; 하나하나 풀어가며 의미를 알아봅니다. $ find . -type f현재 폴더에서 파일 리스트를 가져옵니다. $ find . -type f..
여러가지 이유로 웹셸(Web-Shell)이 필요 했습니다. 보통 Shell을 사용하기 위해서는 terminal에 접속을 해야 하는데, 이때는 console이나 telnet, ssh등의 서비스를 이용하게 됩니다.또한 그러한 서비스를 이용하기 위해서는 putty나 Xshell등과 같은 접속 프로그램이 필요하죠. - OS가 Linux, Unix같은 계통이면 패스.. 또한 80 포트는 열려 있지만 보안상의 이유로 telnet, ssh는 막혀 있는 경우가 종종 있습니다.그리하여 80으로.. 웹 브라우저에서 사용할 수 있는 Shell을 만들게 됩니다. 단, 일반 bash와는 다르게 모든 명령어를 사용할 수 있을 필요는 없습니다.어쨌든 보안을 생각해야 하므로 시스템에 장애를 유발할 수 있는 무언가는 안됩니다. - r..
multi-thread 환경의 application에서 thread의 동작을 제어하는 가장 노멀한 방법은 pthread_cond_wait, pthread_cond_signal가 되겠습니다. 이 방법의 단점으로는 signal에 의해 wait가 풀리고 동작하는데 걸리는 시간이 N초라고 가정했을때 다시 signal을 받아야 하는 시간이 N초 보다 길어야 한다는 점입니다. 그렇지 않다면 signal의 유실이 초래되어 원치 않는 결과가 도래 된다는 것입니다. 물론 이러한 상황이 존재하는 프로그래밍은 좋지 않은 방법이기에 그런 상황은 애초에 만들지 않는게 좋겠지만, 늘 예외는 있으니까요. 그렇다면, wait하는 N초 동안 받는 signal을 모두 처리 하기 위한 방법으로는 semaphore가 있습니다. semaph..
MySQL Client command-line에서 테이블이나 필드의 이름이 긴 경우 확인을 위한 명령어가 필요한 경우가 있습니다.예를 들어 테이블 이름이 기억나지 않는다면 show tables로 확인 할 테고, 필드의 이름은 desc로 확인 하겠죠? 일반 리눅스의 readline처럼 자동 완성 기능이 있다면 얼마나 편할까요?마침 필요한 기능이 정확하게 존재합니다. 바로 rehash를 사용하는 것인데요, 사용법은 여러가지가 존재합니다.Clinet 모드로 접속할 때 사용은 아래와 같습니다. $ mysql -u root -pxxxx --auto-rehash 혹은 my.cnf 파일을 수정 (이 방법은 매번 --auto-rehash를 입력해야 하는 불편함을 없애주겠네요) [mysql] auto-rehash Cli..
회사 바로 앞에 버스 정류장이 있는데, 퇴근해서 내려가 보면 눈앞에서 떠나는 버스..요즘은 버스가 정류장을 떠나면 잘 세워주지도 않죠?- 안전을 위해 당연한 거죠? 그래서 이제는 버스의 도착 시간을 미리 알아야겠다는 생각이 들었습니다사실 버스 홈페이지나 국토부 등에서 정보를 쉽게 구할 수는 있는데, 로그인이나 웹페이지 여는 것조차 우리에겐 귀찮습니다.- (검은 바탕에 흰 글씨)터미널이 눈에 더 익는 것도 사실이고 ^^;; 일단 웹에서 제공하는 서비스를 웹페이지 개발자 모드로 분석하고 PHP에서 curl 하기로 했습니다결과는 XML이기 때문에 그에 맞게 parsing 했습니다. 소스는 아래와 같습니다. 리눅스 터미널에서 실행은.. 대략 이렇게 하면 되겠죠?while [ 1 ] ;do clear;php bu..
crawling.[컴퓨터] 크롤링; (검색 엔진에서) 분산 저장되어 있는 정보를 수집하여 검색 대상으로 복제·보존하는 기술. 크롤링은 여러 방면에서 사용되는데 일반적인 소프트 유저라면..- 기상청 날씨를 긁어온다- 식단 표를 긁어온다 등으로 사용할 수 있겠습니다.이야기는 많이 들었었는데 이번에 필요하게 되어 직접 크롤링을 해봤습니다. 발단은 이러합니다.이번 회사에서 인터뷰어 활동을 하게 되면서 이력서 검토도 하기 되었는데문제는 작은 중소기업이다 보니 구직 사이트에 이력서가 새로 들어왔는지 종종 접속해서 확인하는 시간이 아까웠습니다. (많은 이력서가 쏟아 지는게 아니다 보니까..) 그래서 아래와 같은 요구 조건으로 개발을 시작했습니다.- 주기적으로 구직 사이트(기업 계정)를 크롤링- 새로운 이력서가 있으면..
Linux는 bash 터미널에서 실행한 명령어를 기록하는 history라는 built-in 명령어가 있습니다.history 결과를 실시간으로 파싱 하고자 하는데, 기왕이면 message파일 처럼 tail 로 붙잡고 있기를 바랬습니다.하지만, history라는 명령어 자체가 실행 결과가 떨어지는 명령어라 녹록하지 않죠.하지만. 걱정하지 마세요. history도 결국은 파일로 관리 됩니다. .bash_history 자신의 home 폴더 밑에 보면 해당 파일을 찾을 수 있습니다.하지만. 정작 방금 실행 시킨 명령어는 .bash_history에 안보입니다. 이것은 현재 bash 터미널이 종료 되기 전까지 일정 버퍼를 메모리에 들고 있기 때문인데,이것(history결과)을 파일(.bash_history)로 동기화..
일단 터미널에 접속했을 때 출력 되는 문구(보통은 환영 문구?)는 기본적으로 /etc/motd 라는 파일로 제공됩니다.이번에는 어디 한번 이 문구를 잉여롭게 변경해보고자 합니다.어떤 것이 잉여로운건가요? 바로 색상을 넣는 겁니다.바로 결과부터 살펴봅니다. 이런 느낌입니다. 일반적인 텍스트 파일에 색상 넣는 방법만 알면 간단한데요.색상은 아래와 같은 방법으로 넣습니다. ^[[1;31m앞에 ^[ 기호는 여기를 참고해서 넣도록 합니다. (일반 특수문자가 아님) 색상 표는 아래와 같습니다. Black 0;30 Dark Gray 1;30 Blue 0;34 Light Blue 1;34 Green 0;32 Light Green 1;32 Cyan 0;36 Light Cyan 1;36 Red 0;31 Light Red ..
일산 킨텍스에서 개최된 전자정부 솔류션 페어 2016에 다녀왔습니다. 이번에도 세계 보안 엑스포와 함께 개최가 되었는데, 물리적 보안을 담당하고 있는 CCTV도 흥미롭게 봤습니다. 진작에 사전 등록신청을 해놔서 방문증 명찰을 바로 받을 수 있었습니다. 실내에 보안과 관련된 다양한 기업들의 부스를 관람할 수 있었습니다. 각 부스에 들려 질문을 하면 무척 상세히 답을 주기 때문에 보안에 흥미가 있는 사람들에게는 무척 유익한 컨퍼런스라고 생각되네요. 물론.. 경쟁사로 의심을 사는 일도 있지만.. 다들 축제쯤으로 즐기는듯..^^; 3일 동안 진행된 이번 행사는 보안과 관련된 트랙 발표가 매일 있었습니다. 방문한 날에는 AhnLab에서 발표가 있었습니다. 랜섬웨어에 대한 설명과 AhnLab 제품에 대한 소개가 이..
subversion에 최초 파일 등록 이후 파일 권한을 변경하고자 하면그 방법이 모호해서 파일을 삭제 한 이후 commit하고, 다시 재 등록하는 방법을 사용해왔습니다. 여간 불편한 방법이 아닐 수 없었는데요,당연히 권한을 변경하는 방법이 존재합니다. 일단 권한을 보는 명령어는 아래와 같습니다.svn proplist 파일이름 이때 실행 권한이 없는 경우에는 터미널에 별다른 메시지가 출력 되지 않습니다.실행 권한이 있는 경우에는 아래와 같은 출력을 나타냅니다.Properties on '파일이름': svn:excutable 실행 권한을 추가하는 명령어는 아래와 같습니다.svn propset svn:excutable ON 파일이름 반대로 실행 권한을 삭제하는 명령어는 아래와 같습니다.svn propdel sv..
리눅스에서 디렉토리의 사이즈를 검사할 때 주로 사용되는 명령어는 du 입니다. 명령어를 활용하면 되지만 어느 디렉토리가 용량을 많이 차지하는지 찾기 위해서는 각 폴더 별로 아래와 같은 형태의 명령어를 실행해봐야 합니다. $ du -sh /bin 디렉토리가 많은 경우 이것 또한 노가다(?)가 될 수 있기 때문에 간단하지만 유용한 스크립트를 작성했네요. 현재 디렉토리 하위에 있는 디렉토리를 기본 depth 1부터 인자로 입력 받는 maxdepth까지 du -sh 를 자동으로 해줍니다. #!/bin/sh DEPTH=1 if [ "$1" = "-h" ] || [ "$1" = "--help" ] || [ "$1" = "help" ] || [ "$1" = "h" ] ;then cat
앞서 git과 slack을 연동하는 부분은 살펴봤습니다. 이번에는 여기에 instaweb까지 연동해서 push되는 링크를 바로 확인 할 수 있도록 합니다. 이를 위해서는 git이 설치된 곳의 config를 수정해야 합니다. [hooks "slack"] 쪽에 아래 내용을 추가하도록 합니다. changeset-url-pattern = "http://아이피주소:1234/?p=경로;a=commitdiff;h=%rev_hash%" 일단 기본적으로 instaweb이 운영되고 있어야 하며 해당 서버의 아이피 주소와 포트를 입력합니다. instaweb의 기본포트는 1234이므로 변경 없이 사용했습니다. 경로는 http://아이피주소:1234 로 접속해서 summary에 진입했을 때 노출되는 주소를 적어주시면 됩니다. ..
- Total
- Today
- Yesterday