2015년 12월 8일 화요일

ubuntu 12.04 에서 virtualbox 5.0 설치

ubuntu 12.04

$ sudo apt-get install dkms
$ wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc -O- | sudo apt-key add -
$ sudo sh -c 'echo "deb http://download.virtualbox.org/virtualbox/debian precise contrib" >> /etc/apt/sources.list.d/virtualbox.list'
$ sudo apt-get update
$ sudo apt-get install virtualbox-5.0
$ adduser $USER vboxusers
$ virtualbox

--------------------------------------------------------------------------------
# virtualbox 실행시 VERR_SUPLIB_OWNER_NOT_ROOT 에러가 나면
/usr/lib/virtualbox 까지의 경로중 root 권한이 아닌 디렉토리가 있기
때문이므로 권한을 수정한다.
$ sudo chmod root:root "루트 권한이 아닌 경로"
--------------------------------------------------------------------------------


참고
https://www.virtualbox.org/wiki/Linux_Downloads
http://www.howopensource.com/2013/04/install-virtualbox-ubuntu-ppa/
https://forums.virtualbox.org/viewtopic.php?f=7&t=39179
http://askubuntu.com/questions/140081/virtualbox-doesnt-recognize-usb
http://blog.ruecker.fi/2013/10/06/adventures-in-bluetooth-4-0-part-i/
https://forums.virtualbox.org/viewtopic.php?f=7&t=67761

2015년 11월 14일 토요일

spelling checker

LANG=C aspell -c <file>

2015년 11월 10일 화요일

gdbserver

gdbserver 실행 (Target)
# gdbserver --attach :5039 <PID>
Attached; pid = 7148
Listening on port 5039
 
 또는
 
# gdbserver :5039 <BINARY PATH>
Process xxx created; pid = 6232
Listening on port 5039
 
 
gdb 실행 (Host)
$ gdb-multiarch
(gdb) set arch arm
(gdb) file <BINARY PATH>
(gdb) target remote [gdbserver ip]:5039
 
 
참고
https://sourceware.org/gdb/wiki/BuildingCrossGDBandGDBserver

gdb

  • 심볼파일 로드
(gdb) symbol-file 


  • 사용 가능한 명령어 리스트
(gdb) <tab><tab>
(gdb) 명령 <tab><tab>
  • 콜스택
(gdb) bt
(gdb) i s
  • 레지스터 보기
(gdb) i r
(gdb) i r pc
(gdb) p/x $pc
(gdb) set $sp += 4 
  • 변수 값 보기
(gdb) p 변수
(gdb) x 변수
  • 포인터 대상 출력
(gdb) p {구조체 또는 클래스}어드레스
(gdb) p *(구조체 또는 클래스*)어드레스
(gdb) p *this
  • 구조체 또는 클래스의 크기 구하기
(gdb) p sizeof(구조체 또는 클래스)

  • 메모리맵
(gdb) i files
$ cat /proc/<pid>/maps

  • print 출력 길이 제한
(gdb) set print elements 숫자

  • print format
(gdb) set print pretty on


  • print 옵션
(gdb) show print [항목]
(gdb) set print 항목 값

  • 배열 P 에서 N개의 요소를 출력
(gdb) p P@N

  • myVector 의 배열 주소
myVector._M_impl._M_start

  • 로칼 변수
(gdb) i lo
  • 타입 보기
(gdb) i ty

함수 정의 보기
(gdb) i fu

변수 보기
(gdb) i va


스택 프레임 정보
(gdb) i f
(gdb) fr [번호]

줄 정보
(gdb) i li

소스 리스트 보기
(gdb) i sources

공유라이브러리 보기
(gdb) i sh

시그널 핸들 상태
(gdb) i h


실행 옵션
빌드 옵션 확인
-configuration

-nx 설정파일 실행 안 함

부트시퀀스
  1. -interpreter 옵션 처리.
  2. 시스템 설정 파일 실행(/etc/gdb/gdbinit)
  3. 사용자 설정 파일 실행(~/.gdbinit)
  4. -iex 및 -ix 옵션을 순서대로 실행
  5. -ex 와 -x 를 제외한나머지 옵션 실행
  6. 현재 디렉토리의 설정 파일 실행(./.gdbinit) (set auto-load local-gdbinit on 필요)
  7. auto-load
    Disable auto-load $ gdb -iex "set auto-load python-scripts off" myprogram
  8. -ex 및 -x 옵션을 순서대로 처리
  9. command history 로드
참고
https://sourceware.org/gdb/onlinedocs/gdb/index.html
https://sourceware.org/gdb/wiki/BuildingCrossGDBandGDBserver

arm 레지스터 이름

r9, sb, static base r10, sl, stack limit
r11, fp, frame pointer
r12, ip, intra-procedure call scratch register
r13, sp, stack pointer
r14, lr, link register
r15, pc, program counter

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0040d/ch06s02s01.html

2015년 10월 29일 목요일

~/.ssh/config

# Command line
$ ssh <유저명>@HostName -p <포트 번호> -i <비밀키의 풀패스>
 
== 
 
# ~/.ssh/config
Host <별명>  
HostName <IP Address or Host name>
Port <포트 번호>
User <유저명>
IdentityFile <비밀키의 풀패스>


참고
https://dobest.io/ssh-without-password/

Install libnfc on ubuntu 12.04

Ubuntu 12.04 LTS

$ sudo apt-get install dh-autoreconf libusb-0.1-4 libusb-dev

$ git clone https://github.com/nfc-tools/libnfc.git
$ cd libnfc
$ git checkout libnfc-1.7.1
$ git clean -d -f -x
$ git remote|grep -q anonscm||git remote add anonscm git://anonscm.debian.org/collab-maint/libnfc.git
$ git fetch anonscm
$ git checkout remotes/anonscm/master debian
$ git reset
$ dpkg-buildpackage -uc -us -b

$ sudo dpkg -i ../libnfc*.deb
 
 
 
 
Problem 
--------------------------------------------------------------------------------
$ sudo nfc-list
nfc-list uses libnfc libnfc-1.7.1-12-gb978c45
error   libnfc.driver.pn53x_usb Unable to set USB configuration (Device or resource busy)
No NFC device found.

 
$ dmesg | tail
[1400911.505643] usb 2-1.4: new full-speed USB device number 7 using ehci-pci
[1400911.637956] usb 2-1.4: New USB device found, idVendor=04e6, idProduct=5591
[1400911.637961] usb 2-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[1400911.637964] usb 2-1.4: Product: SCL3711-NFC&RW
[1400911.637967] usb 2-1.4: Manufacturer: SCM Micro
[1400911.641239] pn533 2-1.4:1.0: NFC: NXP PN533 firmware ver 2.7 now attached
[1401061.395200] usb 2-1.4: usbfs: interface 0 claimed by pn533 while 'nfc-list' sets config #1

--------------------------------------------------------------------------------

Solution
--------------------------------------------------------------------------------

restart or unplug the device, unload modules (sudo modprobe -r pn533 nfc), then re-plug the device.
 
$ nfc-list
nfc-list uses libnfc libnfc-1.7.1-12-gb978c45
error   libnfc.driver.pn53x_usb Unable to set USB configuration (Operation not permitted)
No NFC device found.

$ sudo nfc-list
nfc-list uses libnfc libnfc-1.7.1-12-gb978c45
NFC device: SCM Micro / SCL3711-NFC&RW opened
-------------------------------------------------------------------------------- 
 
참고
http://nfc-tools.org/index.php?title=Libnfc#Debian_.2F_Ubuntu
http://forums.nfc-tools.org/topic/668/solved-scl3711-interface-0-claimed-by-pn533-nfclist-sets-conf/

2015년 10월 20일 화요일

thread id

NAME
       pthread_self - 호출하는 쓰레드의 ID 획득

SYNOPSIS
       #include <pthread.h>

       pthread_t pthread_self(void);

       컴파일 및 링크시 -pthread 옵션을 추가해야 함.

DESCRIPTION
       The  pthread_self() function returns the ID of the calling thread.  This is the same value that is returned in
       *thread in the pthread_create(3) call that created this thread.

RETURN VALUE
       이 함수는 항상 성공하며, 호출하는 쓰레드의 ID를 반환한다.

ping: socket: Permission denied

ping 을 하면 권한이 없다고 나오는 경우가 있다.
$ ping localhost
socket: Permission denied

aid_inet 그룹에 속해야 소켓을 사용할 수 있다.

# groupadd -g 3003 aid_inet     # /etc/group 에 aid_inet 그룹이 없으면 추가
# usermod -a -G aid_inet 사용자

2015년 10월 1일 목요일

uTorrent 설정

v3.4.5 (build 41162)

* Portable 실행
다운 받는 uTorrent.exe 파일이 있는 디렉토리에 빈 settings.dat 파일 생성

* 광고 없애기
설정 > 고급 설정 > 설정 변경(아래 참고) > 확인 > 재시작

고급 설정 변경
----------------------------------------
1. 필터 [offer_enabled]
offers.left_rail_offer_enabled: false
offers.sponsored_offer_enabled: false
2. 필터 [upsell]
gui.show_plus_upsell: false
----------------------------------------

# 재시작해도 광고창이 없어지지 않으면 트레이로 이동 된게 아닌지 확인.

2015년 9월 15일 화요일

c 에서 현재시간 구하기

clock_gettime 함수

http://sunyzero.tistory.com/161

2015년 9월 13일 일요일

wget 으로 로그인이 필요한 파일 다운로드

wget --user=username --ask-password http://pass/to/the/file
또는
wget --user=username --password=password http://pass/to/the/file 

2015년 8월 15일 토요일

일본어 IME 전각/반각 전환

Windows 7 에서 Microsoft 일본어 입력기 실행 시
CapsLock 키로 전각/반각 전환

2015년 7월 2일 목요일

sysctl

sysctl - 실행시간에 커널 파라미터를 설정한다.
/proc/sys 아래의 값을 읽고 쓸 수 있다.

# sysctl -a

2015년 7월 1일 수요일

Linux 에서 사용자 로그인 정지

Linux 에서 seminar 라는 사용자를 로그인 못하도록 하려면
다음과 같이 shadow 파일의 패스워드 항목(두 번째)을 * 이나 ! 으로 설정한다.

로그인 정지
$ sudo grep seminar /etc/shadow
seminar:*:16618:0:99999:7:::

복구
$ sudo passwd seminar
Enter new UNIX password: 새 패스워드 입력
Retype new UNIX password: 확인 입력


* 로그인이 정지된 경우에도 su 명령으로는 로그인이 가능하다.

2015년 6월 24일 수요일

conemu + git bash 한글 사용

git bash 를 쓰다보니 conemu 라는 터미널 프로그램이 여러모로 편리하다.
(cygwin 과도 쓸 수 있는데 개인적으로는 cygwin 에는 teraterm 이 더 편하다.)

conemu 에서 git bash 를 사용할 때 한글과 관련된 문제는 다음과 같이 해결한다.

# bash 표시
$ cat ~/.bashrc
alias ls='ls --color=auto --show-control-chars'


# bash 입력
$ cat ~/.inputrc
set output-meta on
set convert-meta off


# git diff, vi 표시
$ cat ~/.vimrc
set enc=utf8 fenc=utf8 tenc=cp949


# vi 에서 한글 간격 오류
Settings (Win + alt + p) > Main > Main console font > [] Monospace 체크 해제

2015년 6월 11일 목요일

watch command

주기적으로 명령어를 실행시키고 그 결과를 풀스크린으로 표시해준다.(계속 보고 있어야 하지만) 결과 값이 변경되면 바로 눈에 띈다.

왠만한 리눅스에는 다 들어있다고 한다.

$ man watch

2015년 5월 14일 목요일

teraterm 비밀키 로그인 설정

설정 >SSH 인증... >
사용자 이름: [사용자 이름]
[*]  RSA/DSA/ECDSA 키 로그인 [개인키] [개인키 파일 경로]
[확인]

2015년 5월 10일 일요일

Windows 7, 한 사용자로 다중 접속하기

http://studyforus.tistory.com/144

1. 위에서 소개하는 대로 RDP Wrapper  를 설치한다.
2. RDPConf 를 실행하여, [] Single Session Per User 의 체크를 없앤다.
3. OK.

2015년 5월 6일 수요일

winnfsd

ubuntu 에서 winnfsd 로 공유된 디렉토리를 마운트 할 때
NFS GETATTR (null) STALE 발생

다음과 같이 옵션 추가
sudo mount -o 'vers=3,nolock,udp' 192.168.0.108:/d/nfsroot tmp

참고
https://bitbucket.org/jankowfsky/winnfsd/issue/5/cannot-mount-nfs-share

2015년 5월 3일 일요일

suspend & wol

$ cat /usr/sbin/suspend
#! /bin/sh
[ `id -u` -ne 0 ] && {
        echo "${0##*/} must be run as root"
        exit 1
}
echo mem > /sys/power/state


$ cat ~/bin/wakeup
#! /bin/sh
mac='00-08-02-65-62-9A'
echo $mac | sed 's/[-:]//g; s/.*/FFFFFFFFFFFF&&&&&&&&&&&&&&&&/' | xxd -r -p |
nc -nuw 1 192.168.0.255 7


2015년 4월 27일 월요일

ubuntu, dhcp 를 고정 IP 로 변경

$ cat /etc/network/interfaces
auto lo
iface lo inet loopback

auto eth0
#iface eth0 inet dhcp
iface eth0 inet static
address 192.168.0.2
netmask 255.255.255.0
gateway 192.168.0.1
dns-nameservers 192.168.0.1

$ sudo /etc/init.d/networking restart

2015년 4월 22일 수요일

ssh tunneling


터널링 1: 로칼포트 포워딩

로칼포트 = 1234
SSH서버 = 192.168.0.99
SSH서버계정 = guest
대상호스트 = TARGET     # SSH서버와 같을 경우 localhost
대상포트 = 5678

로칼포트 1234 에 접근하면,
192.168.0.99 에서 TARGET:5678 에 접근한 것 같이 동작.

즉. 로칼머신에서는 TARGET:5678 에 접근이 안되고
SSH 서버에서는 접근이 될 때, SSH 서버를 Proxy 같이 사용.
 
* command line
$ ssh -f -N -L1234:TARGET:5678 guest@192.168.0.99
-N : 터널링만 하고 명령 실행은 못함
-f: 백그라운드로 동작

* ~/.ssh/config
$ cat ~/.ssh/config
Host server
    HostName 192.168.0.99
    User guest
    LocalForward 1234 TARGET:5678
$ ssh -f -N server

* teraterm
Setup > SSH Forwarding... > Add... >
[*] Forward local port: [1234]
to remote machine [TARGET] port [5678]

File > New connection...
Host [ssh://guest@192.168.0.99]
OK


* putty
Connection
    Data
        Login details
            Auto-login username [guest]
    SSH
        Tunnels
            Source port [1234]
            Destination [TARGET:5678]
            Add
Session
    Host Name [192.168.0.99] Port [22]
    Saved Sessions [SSH 터널 - 로칼포트 포워딩]
    Save
    Open


터널링 2: 리모트 포트 포워딩

SSH서버 포트 = 1234
SSH서버 = 192.168.0.99
SSH서버계정 = guest
대상호스트 = TARGET     # 로칼머신과 같을 경우 localhost
대상포트 = 5678

SSH 서버의 포트 1234 에 접근하면,
로칼머신에서 target의 5678 에 접근한 것 같이 동작.

* comman-line
$ ssh -R 1234:target:5678 -N -f guest@192.168.0.99

* teraterm
Setup > SSH Forwarding... > Add... >
[*] Forward remote server port: [1234]
to local machine [TARGET] port [5678]

File > New connection...
Host [ssh://guest@192.168.0.99]
OK

참고
* http://egloos.zum.com/milines/v/3781525
* http://linux.systemv.pe.kr/ssh-%ED%8F%AC%ED%8A%B8-%ED%8F%AC%EC%9B%8C%EB%94%A9/
* http://www.revsys.com/writings/quicktips/ssh-tunnel.html
* http://qgp9.github.io/blog/2016/03/26/ssh-proxy-jump-host

tftp 서버 설치

# tftpd 는 블록사이즈가 512 바이트로 고정이지만
# tftpd-hpa 는 client 와 협의해서 가능한한 크게 정한다.

* Ubuntu 12.04

$ sudo apt-get install xinetd tftpd-hpa

$ cat /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/work2/tftpboot"           # 원하는 경로로 수정
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure"
RUN_DAEMON="no"                                  # 추가
 
$ cat /etc/xinetd.d/tftp                             # 추가
service tftp
{
        socket_type = dgram
        protocol = udp
        wait = yes
        user = root
        server = /usr/sbin/in.tftpd
        server_args = -u tftp -t 0 -s /work2/tftpboot    # 위와 같은 경로 지정
        disable = no
}

$ sudo service tftpd-hpa stop
$ sudo service xinetd restart



* CentOS release 6.6 (Final)

$ sudo yum install tftp-server

$ cat /etc/xinetd.d/tftp
service tftp
{
        socket_type             = dgram
        protocol                = udp
        wait                    = yes
        user                    = root
        server                  = /usr/sbin/in.tftpd
        server_args             = -s /tftpboot          # 원하는 경로로 수정
        disable                 = no                          # no 로 수정
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4
}

$ sudo service xinetd restart

2015년 4월 21일 화요일

원격 데스크톱으로 ubuntu 12.04 접속

서버 Ubuntu 12.04

$ sudo apt-get install xrdp
$ sudo apt-get install fluxbox
$ echo "LANG=C exec startfluxbox" > ~/.xsession
$ sudo service xrdp restart

클라이언트 Windows 7

1. Win + R
2. mstsc /f
3. 서버 주소
4-1. 연결 > xrdp Login 창
Module: [sesman-Xvnc]
username: [서버 유저명]
password: [패스워드]

4-2 자격 증명을 저장하면 다음부터 자동으로 로그인 된다.
옵션 표시 > 일반 탭 > [*] 자격 증명 저장 허용 > 연결 >
사용자 자격 증명 입력 창 >사용자 이름, 암호 입력 >
[*] 내 자격 증명 기억 > 확인

context 메뉴에 [submenu] 와 [separator] 추가

$ cat ~/.fluxbox/menu
[begin] (fluxbox)
[submenu] (My Menu)
    [exec] (Gnome Terminal) {/usr/bin/gnome-terminal} </usr/share/pixmaps/gnome-terminal.xpm>
    [exec] (FireFox) {firefox}
    [exec] (Chrome) {/opt/google/chrome/chrome}
    [exec] (Meld) {meld}
[end]
[separator]
[include] (/etc/X11/fluxbox/fluxbox-menu)
[end]

2015년 3월 11일 수요일

리눅스 초기 설정

  • change repository & update
$ sudo sed -i 's/[^/]*.ubuntu.com/ftp.daumkakao.net/g' /etc/apt/sources.list
$ sudo apt-get update

  • Update packages
$ sudo apt-get --purge remove vim-tiny
$ sudo apt-get install vim

  • 디폴트 에디터 바꾸기
$ sudo update-alternatives --config editor
    vim or vim.basic 선택 

  • 패스워드 묻지 않고 sudo 를 실행하기 위한 설정
# visudo
username ALL=(ALL:ALL) NOPASSWD: ALL
<사용자> <호스트>=(유저권한) 명령
* 주의: 파일의 마지막에 추가

  • 사용자 추가
# adduser user

2015년 3월 1일 일요일

Building gnu netcat with mingw on cygwin

1. Download
$ wget http://sourceforge.net/projects/netcat/files/netcat/0.7.1/netcat-0.7.1.tar.bz2

2. Extract
$ tar jxf netcat-0.7.1.tar.bz2 

3. Patch
$ wget http://sourceforge.net/p/netcat/bugs/_discuss/thread/f8b0bf92/7d08/attachment/netcat-cygwin.patch
$ cd netcat-0.7.1
$ patch -p2 < ../netcat-0.7.1

4. Configure
$ ./configure --build=i686-pc-mingw32

5. Make
$ make
$ cp src/netcat.exe ~/bin/nc.exe

2015년 1월 18일 일요일

동영상 구간 자르기 및 합치기

구간 자르기

MP4Box
MP4Box -info original.mp4
MP4Box -out output.mp4 -splitx <start secs>:<end secs> original.mp4
ex) MP4Box -out output.mp4 -splitx 77:137 original.mp4

mkvtoolnix
mkvinfo original.mkv
mkvmerge -o output.mkv --split parts:<start time>-<end time> original.mkv
ex) mkvmerge -o output.mkv --split parts:1:17-2:17 original.mkv

합치기
MP4Box
MP4Box -cat input1.mp4 -cat input2.mp4 ouput.mp4

비디오, 오디오 합치기
MP4Box
MP4Box -add video.mp4 -add audio.m4a ouput.mp4

자막 합치기
MP4Box -add 자막.srt:hdlr=sbtl:lang=kor input.mp4 -out output.mp4
https://gist.github.com/wmanth/d08fb9fcc87dcf84ee5fd4a1d8b9d91c