manywaypark's Blog
개발, 검색, 함수

일단 레드마인 박스에 루트 권한으로 적당한 곳에 소스를 저장할 디렉토리를 만든다.

(현재 내가 알기로 git은 간단히 remote url 입력해서 해결 되지는 않는다)

$ sudo -i

# mkdir /var/src-repos

# mkdir /var/src-repos/[redmine-prj-name]     # 여러 개의 project가 아니라면 이 단계는 생략

# cd $_

# git clone --mirror [url-of-git-repo] [local-dir-name]


이제는 redmine의 프로젝트 설정에서 (Settings > Repositories) +New repository를 선택해서 local directory를 repositiory로 추가한다.

SCM: Git

Identifier: what-ever-you-want

URL: /var/src-repos/[redmine-prj-name]/[local-dir-name]

프로젝트의 repository 에 가보면 추가된 것을 확인 할 수 있다.

여기서 끝이면 좋겠지만, 자동 업데이트 따위가 지원되지 않는다. Orz.


루트로 아래와 같은 파일을 하나 만들어서 crontab에 등록해 적당한 주기로 sync 시키면 해결된다.

#!/bin/bash


REPOS=`ls -d /var/src-repos/*/*`        # 다중 프로젝트 아니면 */* -> *


for repo in $REPOS

do

    cd $repo

    git remote update

done


내 경우 ~/bin/sync-src-repos.sh로 저장했고 crontab -e 하면 다음과 같이 나온다.
......
*/30 * * * * /root/bin/sync-src-repos.sh

......


happy hackin'


gtags는 어디에?

emacs 2014. 7. 17. 14:34 by manywaypark

제법 예전에 만들었던 .emacs파일을 새로 설치한 박스에 복사했더니 다음과같은 에러가 났다.

File error: Cannot open load file, gtags

.emacs 파일을 열어보니 언제 설정했는지도 기억 안나는 설정 항목이 많다. Orz.

틈틈히 정리해줘야겠다.

(require 'gtags) 가 실패해서 생기는 문제였다.

이걸 수동으로 설치했던가? 패키지가 있었던가? 헷갈렸다. 유명한거라 패키지가 있을텐데...
~ $ apt-cache search gtags
perl-modules - 핵심 펄 모듈
seascope - source code navigation tool
~ $ apt-file search gtags | grep gtags.el
emacspeak: /usr/share/emacs/site-lisp/emacspeak/lisp/emacspeak-gtags.el
global: /usr/share/emacs/site-lisp/global/gtags.el

apt-cache 로 찾기는 실패했고 (물론 의존성 걸려있어서 깔렸겠지만), apt-file로는 한방에 성공했다.

결론은 GNU global을 설치하면 해결된다.

~ $ sudo apt-get install global


gtags 단축키 설정 관련 참고: http://www.emacswiki.org/emacs/CyclingGTagsResult


happy hackin'

일단 npm을 설치하고 나서 bower를 설치한다.

$ sudo apt-get npm

$ sudo npm install -g bower

대충 아래와 같이 하면 다운로드 받아서 설정해주는 건데...

bower install angular#1.2.17

or

bower install angular#1.3.0-beta.11

현재 내 ubuntu box(Linux my-lin 3.13.0-29-generic #53-Ubuntu SMP Wed Jun 4 21:00:20 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux)에서는 npm만 설치해서는 안됐고 nodejs-legacy package도 같이 설치해야 동작했다.

그냥 node라고 치면 아무것도 실행 안되고 node 또는 nodejs-legacy에 있다고 나오는데,

The program 'node' can be found in the following packages:

 * node

 * nodejs-legacy

Try: sudo apt-get install <selected package>

생각 없이 node를 설치했더니 완전히 꼬임. Orz
여튼 nodejs-legacy를 설치하고 하면 잘 됨.

refs:
http://bower.io/
https://github.com/bower/bower/issues/201
 

happy hackin'

이번에 업데이트를 해서 그런지 아니면, 원래 4.4에서는 그랬는지는 잘 기억 안나지만,

나의 멋진 Xperia Tablet Z2를 노트북에 연결했더니 MTP 모드로만 인식되고 ADB가 붙지 않았다.

그래서 USB debugging을 활성화하려고 설정에 들어갔는데, 개발자 옵션 메뉴가 아예 없었다. Orz.

설정의 테블릿 정보에서 빌드 번호를 7번 터치하면 개발자 옵션 메뉴를 활성화 할 수 있다.

이건 머 easter egg인가?


ref:

http://forum.xda-developers.com/xperia-z/help/developer-option-t2355485


happy hackin'

kerl - erlang installer

함수형 언어/Erlang 2014. 5. 22. 17:59 by manywaypark

아주 간편한 erlang 설치 방법이 있었다. 이걸 여태껏 모르고 있었다니... Orz

kerl이라는 utility를 사용하면 source에서 build하는 것은 누워서 떡먹기다.

또한 여러 버전을 깔고 activate/deactivate 할 수 있다. two thumbs up!!


받기 및 실행권한 주기:

curl -O https://raw.githubusercontent.com/spawngrid/kerl/master/kerl

chmod a+x kerl

kerl이 있는 곳을 PATH에 추가한다 (optional).


아래 내용으로 ~/.kerlrc 파일 생성 (64bit Mac OS X의 경우):

KERL_CONFIGURE_OPTIONS="--disable-hipe --enable-smp-support --enable-threads

                        --enable-kernel-poll  --enable-darwin-64bit"


R15B01 버전 build하기:

./kerl build R15B01 r15b01


설치 및 활성화하기:

./kerl install r15b01 ~/erlang/r15b01

. ~/erlang/r15b01/activate


비활성화:

kerl_deactivate


refs: 

http://docs.basho.com/riak/latest/ops/building/installing/erlang/

https://github.com/spawngrid/kerl


2014-07-15 추가: erlang의 build 환경이 제대로 갖추어지지 않았다면 이렇게...

$ sudo apt-get  build-dep erlang

ref: http://askubuntu.com/questions/21379/how-do-i-find-the-build-dependencies-of-a-package


happy hackin'

mail notification 문제

tips & tricks/Linux/Unix 2014. 5. 19. 17:26 by manywaypark

Jenkins, ReviewBoard 등 개발 지원 도구를 최초 설치하고나서 알림 메일 설정한 후에 메일이 발송되지 않는 경우가 있다.

로그를 보면 대충 다음과 같다.

ReviewBoard의 경우:

root@cr:/var/log/review-board# tail -f reviewboard.log

2014-04-02 05:29:21,272 - ERROR -  - Error sending e-mail notification with subject 'Review Request 25: test' on behalf of '"mr foo" <foo@bar.com>' to '"A team" <a@bar.com>,"mr foo" <foo@bar.com>': [Errno 111] Connection refused

Traceback (most recent call last):

  File "/usr/local/lib/python2.7/dist-packages/ReviewBoard-1.7.11-py2.7.egg/reviewboard/notifications/email.py", line 244, in send_review_mail

    message.send()

  File "/usr/local/lib/python2.7/dist-packages/Django-1.4.5-py2.7.egg/django/core/mail/message.py", line 248, in send

    return self.get_connection(fail_silently).send_messages([self])

  File "/usr/local/lib/python2.7/dist-packages/Django-1.4.5-py2.7.egg/django/core/mail/backends/smtp.py", line 85, in send_messages

    new_conn_created = self.open()

  File "/usr/local/lib/python2.7/dist-packages/Django-1.4.5-py2.7.egg/django/core/mail/backends/smtp.py", line 48, in open

    local_hostname=DNS_NAME.get_fqdn())

  File "/usr/lib/python2.7/smtplib.py", line 249, in __init__

    (code, msg) = self.connect(host, port)

  File "/usr/lib/python2.7/smtplib.py", line 309, in connect

    self.sock = self._get_socket(host, port, self.timeout)

  File "/usr/lib/python2.7/smtplib.py", line 284, in _get_socket

    return socket.create_connection((port, host), timeout)

  File "/usr/lib/python2.7/socket.py", line 571, in create_connection

    raise err

error: [Errno 111] Connection refused


Jenkins의 경우:

......

Sending e-mails to: a@bar.com

ERROR: Could not connect to SMTP host: localhost, port: 25

javax.mail.MessagingException: Could not connect to SMTP host: localhost, port: 25;

  nested exception is:

    java.net.ConnectException: Connection refused

    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1934)

    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:638)

    at javax.mail.Service.connect(Service.java:295)

    at javax.mail.Service.connect(Service.java:176)

    at javax.mail.Service.connect(Service.java:125)

    at javax.mail.Transport.send0(Transport.java:194)

    at javax.mail.Transport.send(Transport.java:124)

    at hudson.tasks.MailSender.execute(MailSender.java:117)

    at hudson.tasks.Mailer.perform(Mailer.java:137)

    at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20)

    at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:804)

    at hudson.model.AbstractBuild$AbstractBuildExecution.performAllBuildSteps(AbstractBuild.java:776)

    at hudson.model.Build$BuildExecution.post2(Build.java:183)

    at hudson.model.AbstractBuild$AbstractBuildExecution.post(AbstractBuild.java:725)

    at hudson.model.Run.execute(Run.java:1701)

    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)

    at hudson.model.ResourceController.execute(ResourceController.java:88)

    at hudson.model.Executor.run(Executor.java:231)

Caused by: java.net.ConnectException: Connection refused

    at java.net.PlainSocketImpl.socketConnect(Native Method)

    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:327)

    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:193)

    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:180)

    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:385)

    at java.net.Socket.connect(Socket.java:546)

    at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:286)

    at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:231)

    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1900)

    ... 17 more

Finished: FAILURE


내 경우 fresh install한 ubuntu box에 mailutils package가 깔려있지 않아서 생긴 문제였다.

$ sudo apt-get install mailutils


happy hackin'

lists exported symbols

tips & tricks/Linux/Unix 2014. 5. 19. 16:05 by manywaypark

shared object 파일에서 어떤 symbol들이 export되는지 궁금해지는 경우가 있다.

(특히 unsolved external symbol 따위 linker error가 발생할 경우)

다음과 같이 하면 symbol들을 human-readable한 형태로 뽑아준다.

$ (find . -name '*.a'|xargs nm -f posix; find . -name '*.so' | xargs nm -f posix -D)|cut -f1 -d' '|LANG=C sort -u > all_symbols

$ grep '^_Z' all_symbols | c++filt|sort > demangled_c++_symbols


refs:

http://gcc.gnu.org/wiki/Cxx11AbiCompatibility

http://stackoverflow.com/questions/1237575/how-do-i-find-out-what-all-symbols-are-exported-from-a-shared-object


happy hackin'

framewerk(오타 아님)는 일종의 autotools wrapper이다.

c/c++은 물론이고 javascript와 erlang도 지원하는 점이 맘에든다.

사용법은 참조링크에 쉽고 자세하게 나온다.

간단한 예제를 하나 들자면 erlang project에서 rebar 및 git을 사용할 경우 다음과 같이 한다.

$ fw-init --name myprj --template erlang-rebar --revision git

$ cd myprj

$ ./bootstrap

$ ./configure

$ make

지원되는 버전 관리 도구(revision에서 설정): git, svn, cvs

지원되는 개발 환경(template에서 설정): c, c++, erlang, erlang-rebar, java-mvn


refs: https://code.google.com/p/fwtemplates/


2014-11-11 추가: project configuration(version number 설정 등)은 fw-pkgin/config 파일을 편집한다.


2016-06-07 추가: 원래 프로젝트 페이지는 관리 안된지 좀 오래 인듯. 비교적 최근까지 관리되는 곳은 여기: https://github.com/dukesoferl/fw

또한 빌드 및 사용 법은, ./bootstrap -> ./build (--prefix=/usr/local) -> sudo make install 로 하면 좀더 간편하다.


happy hackin'

nif(c/c++ shared object)를 erlang runtime에 올려서 쓰다보면 gdb를 사용할 일이 생긴다.

/usr/bin/erl은 shell script다.

그 내용을 보고 환경변수만 맞추어주면 된다. 아래처럼 한다.

# (emacs라면, M-x gdb 후에)

gdb --annotate=3 /usr/lib/erlang/erts-5.8.5/bin/beam.smp

......

(gdb) set environment ROOTDIR /usr/lib/erlang

(gdb) set environment BINDIR /usr/lib/erlang/erts-5.8.5/bin

(gdb) set environment EMU beam

(gdb) set environment LD_LIBRARY_PATH /path/to/lib:/usr/local/lib:/usr/lib  # optional, 은밀한(?) 곳에 so가 있다면 설정.

(gdb) cd /path/to/working/dir    # optional, 보통 beam.smp가 있는 곳으로 cwd가 바뀌므로 다시 설정한다.

(gdb) r -- -root /usr/lib/erlang -progname erl -- -home /path/to/home -- -sname optional-node-short-name -pa ./ebin

......

주의할 점은, erlang REPL에 들어가고 나면 마땅히 break point를 설정할 방법이 없으므로 REPL 진입전에 break point를 설정해야 한다는 것이다.


happy hackin'


2014-12-22 추가: 

참고 링크(이게 더 간단한가?) http://blog.dizzyd.com/blog/2009/12/18/running-erl-in-a-debugger/ 

요점은 bin/erl을 이렇게 바꾸고 실행한다.

if [ ! -z "$USE_GDB" ]; then gdb $BINDIR/erlexec --args $BINDIR/erlexec ${1+"$@"} else exec $BINDIR/erlexec ${1+"$@"} fi


분명히 현재 scope에 nUnit이라는 변수가 있음에도 불구하고 아래처럼 symbol을 제대로 찾지 못했다.


......

(gdb) p nUnit

No symbol "nUnit" in current context.

(gdb)


gcc4.8 + gdb7.5에서는 컴파일 옵션에 "-g -gdwarf-2"를 줘야 제대로 동작한다.

즉 debug build는 아래처럼 configure한다.

./configure --prefix=/path/to/prefix CPPFLAGS=-DDEBUG CXXFLAGS="-g -gdwarf-2 -O0"


refs:

http://stackoverflow.com/questions/12595631/debugging-with-gdb-on-a-program-with-no-optimization-but-still-there-is-no-symbo


happy hackin'

1 ··· 7 8 9 10 11 12 13 ··· 31 
분류 전체보기 (306)
잡담 (20)
함수형 언어 (65)
emacs (16)
java (18)
tips & tricks (154)
사랑 (1)
가사 (0)
독서 (4)
mobile (6)
비함수형 언어 (2)

공지사항

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

05-07 00:01