'2014/04 글 목록 :: Horizontal Grays S2

사실 내가 밖에 나가서 뭐 영상 보고 그럴일은 별로 없긴하다만 그 별로 없을 때를 대비해서 AirVideo를 설치를 시도


기본적으로 Airvideo는 리눅스용 서버 프로그램을 제공하지 않는다.


그래서 다음 링크를 참조해서 설치 (http://titanwing.tistory.com/entry/Airvideo-server-%EC%84%A4%EC%B9%98)


1. ffmpeg 설치


 1) 설치를 위해 필요한 프로그램 우선 설치

sudo apt-get install build-essential yasm libmp3lame-dev libfaad-dev libx264-dev git-core pkg-config



 2) 설치를 위한 폴더 생성 및 이동 그리고  설치프로그램과 ffmpeg 다운

sudo mkdir /opt/airvideoserver/

cd /opt/airvideoserver

sudo wget http://inmethod.com/airvideo/download/linux/alpha6/AirVideoServerLinux.jar

sudo wget http://inmethod.com/airvideo/download/ffmpeg-for-2.4.5-beta7.tar.bz2

( 정확한 이유는 모르겠으나 현재는 참고사이트의 링크로는 안됨, 그리고 ffmpeg-for-2.4.5-beta7 버전으로 해야함, 참고사이트의 beta6로는 컴파일 에러 )


 3) 압축해제 및 컴파일

sudo tar jxvf ffmpeg-for-2.4.5-beta7.tar.bz2

cd ffmpeg

sudo ./configure --enable-pthreads --disable-shared --enable-static --enable-gpl --enable-libx264 --enable-libmp3lame

sudo make

sudo make install 


2. mpeg4ip-server 설치


libvpx0 

sudo wget http://free.nchc.org.tw/ubuntu//pool/main/libv/libvpx/libvpx0_0.9.6-1_amd64.deb


libmpeg4ip 

sudo wget http://free.nchc.org.tw/ubuntu//pool/multiverse/m/mpeg4ip/libmpeg4ip-0_1.6dfsg-0.2ubuntu8_amd64.deb


libavutil51

sudo wget http://free.nchc.org.tw/ubuntu//pool/main/liba/libav/libavutil51_0.8.10-0ubuntu0.13.10.1_amd64.deb


libmp4v2 

sudo wget http://free.nchc.org.tw/ubuntu//pool/multiverse/m/mpeg4ip/libmp4v2-0_1.6dfsg-0.2ubuntu8_amd64.deb


libavcodec53

sudo wget http://free.nchc.org.tw/ubuntu//pool/main/liba/libav/libavcodec53_0.8.10-0ubuntu0.13.10.1_amd64.deb


mpeg4ip-server

sudo wget http://mirror.pnl.gov/ubuntu//pool/multiverse/m/mpeg4ip/mpeg4ip-server_1.6dfsg-0.2ubuntu8_amd64.deb


그리고 다운받은 파일들을 더블클릭해서 설치

중간에 의존성 문제 발생 하면

sudo apt-get -f install 


하지만 mpeg4ip-server는 설치가 안됨 T.T


http://gabrielkim.tistory.com/38   참고해서 어찌저찌 설치 (http://gabrielkim.tistory.com/attachment/cfile5.uf@1264F5474FA386B90BEFCD.deb 다운로드해서 설치)


3. 설치확인


whereis 명령어로 ffmpeg mp4creator faac 확인

하지만 faac는 설치된 경로가 나오지 않음 T.T


http://www.linuxfromscratch.org/blfs/view/svn/multimedia/faac.html 참고해서 faac 설치




여하튼 모두 설치한것 같다. 


4.  air video 설정파일


설정파일 만들고

sudo nano AirVideoServerLinux.properties 


아래의 내용으로 입력

path.ffmpeg = /usr/local/bin/ffmpeg

path.mp4creator = /usr/bin/mp4creator

path.faac = /usr/bin/faac

password =

subtitles.encoding = windows-949

subtitles.font = NanumGothic

folders = Movies:/home/user/media/movies,Drama:/home/user/media/drama   


여기서 각 path와 folder는 자기에게 맞는 걸로 수정


5. 나눔 글꼴 설치


http://hangeul.naver.com/download.nhn#sc_ng 


나눔폰트 모든 OS용으로 다운로드

그리고 다음 명령어로 설치

sudo cp *.ttf /usr/share/fonts/truetype/

sudo fc-cache -v


6. Airvideo AutoStart


nano /etc/init/airvideo.conf


start on runlevel [2345]

stop on shutdown

respawn


exec sudo -H -n -u 사용자계정 LANG=ko_KR.UTF-8 /usr/bin/java -jar /opt/airvideoserver/AirVideoServerLinux.jar /opt/airvideoserver/ffmpeg/AirVideoServerLinux.properties


7. Airvideo Server 수동 실행


sudo start airvideo


(정지는 stop)


8. 공유기 포트포워딩 설정하고 외부에서 DDNS로 접속하니 잘 된다!!! 

하.. 이번거 힘들었다. T.T



내가 유일하게 그리고 정말 유용하게 잘 쓰는 클라우드 서비스는 다음클라우드..

무엇보다 속도도 빠르고 꽤 안정적이다. 게다가 티스토리 이용자 어쩌구 해서 이용가능 용량도 100G이고 :)


여튼 그래서 홈서버에 다음클라우드를 설치하려고 하는데....


기본적으로 다음에서 리눅스 버전도 설치파일을 제공하나 64bit 버전에서는 일련의 작업을 해야한다고 한다.


(참고 : http://ubuntu.or.kr/viewtopic.php?p=90771)


우선 소프트웨어 관리자에서 ia32-libs 를 검색해서 설치 (나는 이미 설치했으므로 설치가 안뜨고 제거가 뜸)





다음에 클라우드 서비스에 들어가면 PC싱크프로그램에서 리눅스용 다운을 받는다. (현재 버전 daumcloud_1.1.0.45_deb)


그리고 다운받은 폴더로 이동한 다음에 아래와 같이 명령


$ mkdir tmp 

$ dpkg-deb -x daumcloud_1.1.0.45.deb tmp 

$ dpkg-deb --control daumcloud_1.1.0.45.deb tmp/DEBIAN 

$ sed -i "s/i386/all/" tmp/DEBIAN/control 

$ dpkg -b tmp daumcloud_1.1.0.45_64.deb


아마 64bit 용 패키지로 만들어 주는 것 같다.

생성된 daumcloud_1.1.0.45_64.deb를 더블클릭해서 설치




그러면 끝! ^-^




이번엔 FTP 설정.. 


이거 해놓고 설마 집에서 일하고 결과물 옮기고 하려는건 아냐?? 


목적은 그런데.. 그렇게 쓰게 되길 없길 ㅋㅋ


감사하게도 같은 환경 (Linux Mint 13 Maya 사용자의 블로그 참조 http://chulhankim.github.io/blog/2014/02/26/linux-mint-13.html


리눅스에서 FTP 서비스로 vsftpd를 많이 쓴다고 한다.


그런데 최신버전의 vsftpd를 apt-get install로는 설치가 불가능 하여 직접 다운로드 하여 설치하는 방법을  사용한다.


디렉토리 이동

cd /home/jslee-server/Downloads


vsftpd 3.0.2 설치파일 다운로드

sudo wget http://us.archive.ubuntu.com/ubuntu/pool/main/v/vsftpd/vsftpd_3.0.2-1ubuntu2_i386.deb

(64bit 버전 사용자는 wget http://us.archive.ubuntu.com/ubuntu/pool/main/v/vsftpd/vsftpd_3.0.2-1ubuntu2_amd64.deb)


설치 (X window 상에서는 더블클릭하면 deb 설치관리자가 뜨고 설치누르면 될꺼임)

sudo dpkg -i vsftpd_3.0.2-1ubuntu2_i386.deb





새로운 사용자를 등록하려면 adduser 명령어 써서 등록하고

난 그냥 혼자 쓸거이므로 따로 안한다.


vsfptd.conf 파일 편집

sudo nano /etc/vsfptd.conf



anonymous_enable=NO

local_enable=YES

write_enable=YES

local_umask=022

chroot_local_user=YES


------------------------------ 여기까지는 코멘트 해제


allow_writeable_chroot=YES

user_config_dir=/etc/vsftpd_user_conf


----------------------------- 여기까지는 마지막 줄에 새로 입력



그리고 /etc/vsftpd_user_conf 생성

nano /etc/vsftpd_user_conf


local_root = /disk/www


하고 저장


나는 루트권한으로로 /disk를 읽을 생각이었는데 이렇게 하면 루트 폴더까지 접근이 되어버린다. 당연한건가? 모르겠슴 ^^;



그리고 윈도우7 컴퓨터에서 파일질라로 접속 시도






잘 된다!! 다만 포트가 22번임에 주의



삼바 설정은 홈서버에서 한번 해봤던걸 기준으로 한다.


그런데 홈서버에서 설정할 때는 smbfs가 안깔리더니 이번에는 또 깔린다.


아마 Linux Mint 버전의 차이인듯.. 


sudo apt-get install samba smbfs 로 samba와 smbfs를 아래와 같이 설치완료





아래와 같이 계정 등록하는 것도 문제 없었슴



자.. 문제는 이제부터

X window가 없으므로 GUI환경이 아닌 콘솔환경에서 삼바 설정을 해야한다..


http://forum.falinux.com/zbxe/index.php?document_srl=405792&mid=lecture_tip  여기서 참조하여 해본다.


smb.conf 편집

sudo nano /etc/samba/smb.conf



security = user 활성

####### Authentication #######

   security = user


계정에 땨르 설정을 다음과 같이

[jslee-server]

comment = jslee-server samba

path = /disk

writeable = yes

public = no

create mask = 0644

directory mode = 0755



지난번 포스팅에 하드디스크 세개를 루트 디렉토리에 각각 /disk150G /disk160G1 /disk160G2 로 마운트했던걸

/disk 밑으로 모두 옮겼슴



그리고 삼바 데몬 리스타트


sudo service smbd restasrt


그리고 윈도우 탐색기에서 \\jslee-server로 접속

더블클릭하면 삼바 유저 아이디 및 패스워드 입력


 

그림처럼 잘 된다!!! ^^


자 그럼 속도는 얼마나 나오나?




45.5MB/S !!! 훌륭하다.. 기존에 Etrayz로 옮길때 10MB/S 정도 였고 자체 하드디스크 내에서 움직여도 45MB/S 정도인데.. (물론 SSD로 옮기면 훨씬 빠르지만)


여튼 충붕히 훌륭하다!!!


이걸로 삼바 설정 끝!!


아.. X window가 뜨면 하드디스크들은 자동으로 마운트 되더만..


Putty로 접속하여 df-a로 확인해보니 부팅 하드만 마운트되어있다.. T.T





자 이제 콘솔모드에서 하드디스크들을 마운트해보자 


일단 하드디스크들이 있긴 한거냐? fdisk -l 해봤다.




보면 sdb가 80G 리눅스가 깔린 디스크이고

sda 250G, sdc 160G, sdd 160G 모두 잘 살아있다. (잘 안쓰이던 하드디스크를 모아서 서버를 만들었더니 갯수만 많다 ㅋ)



구체적인 방법은 여기를 참조했다. (http://koreaubuntu.wordpress.com/2011/12/18/%EB%A6%AC%EB%88%85%EC%8A%A4-%ED%8C%8C%EC%9D%BC-%EC%8B%9C%EC%8A%A4%ED%85%9C%EA%B3%BC-%ED%95%98%EB%93%9C-%EB%A7%88%EC%9A%B4%ED%8A%B8%ED%95%98%EA%B8%B0/)




삽질이 조금 있었... ㅋ

여하튼


 1) ls -l /dev/disk/by-uuid 로 하드디스크의 uuid를 표시하고 복사해두고

 2) 마운트 하고자 하는 하드디스크들이 마운트 될 디렉토리를 만들자 

   나의 경우는 단순 무식하게 일단 /disk250G , /disk160G1 , /disk160G2 로 만들어 두었다.


 3) /etc/fstab 을 편집한다.



정말 이러면 되는 걸까?? 리부팅



그리고 다시 df -a 로 확인!




sda1, sdc1, sdd1 모두 내가 원했던대로 잘 마운트 되었슴!!!

자.. 이제 삼바 설정 해야지 ~

정말 오랜만에 리눅스에 다시 재미붙인듯 ㅋㅋㅋ


뭐 쓸데없이 깨작되는건 아니고


이번엔 회사에서 서버로 쓸 요량이다.


내 프로젝트 파일, 도큐멘트 파일 등을 저장하고 동기화 할 수 있도록 준비하고.


SVN 서버로도 구성하고


뭐 이래저래~


여러 컴퓨터에 여러 파일들이 흩어져 있다보니 가끔 내가 작업은 했는데 어느 컴퓨터에서 했는지 기억도 안나고 T.T 


여튼 그래서 시작!!


1. 우선 Ubuntu 12.04 Server 버전을 설치시도

 -> 실패.. 이유는 모르겠다. grub 설치에 문제가 자꾸 생긴다.


2. 그래서 Linux Mint 13 Maya Mate 32bit 버전 설치하고 Console 모드로 사용

 Linux Mint 설치는 역시 패스.. 윈도우만큼 쉬우니까~!

사실 컴퓨터 사양이 괜찮다면 Xwindow를 버릴 이유는 없는데.. 서버로 쓰려는 컴퓨터가 워낙 구형이다.


Pentium D3.0 (3.0 Ghz)

RAM 1.5G

내장그래픽


* 저 CPU가  어느정도 성능인가 궁금해서 찾아봄 (http://www.cpubenchmark.net/cpu_list.php)


CPU                                    Benchmark Rank         비고

Atom N270 1.6Ghz                 283         1757     구형넷북

Pentium D 3.0Ghz                 648         1404     전에 쓰던 개인 데스크탑

Core 2 Duo E6300 1.86Ghz      1121 1169     회사 데스크탑

1007u 1.5Ghz                         1441 1006         홈서버용

T8300 2.4Ghz                         1481 985         XP전용 랩탑

2030M 2.5Ghz                         2648 616         개인 랩탑

i3-3240 3.4Ghz                        4323 323         현재 개인 데스크탑

i5-4670K 3.4Ghz                      7806 114         회사 개발용 데스크탑



현재 사용하고 있는 컴퓨터들인데.. 역시 Atom이 독보적인 저성능 ㅋㅋ
서버로 쓰고자하는 컴퓨터 역시 안습 T.T


여튼 그래서 과감히 X window는 쓰지 않고 콘솔로만 사용하고자 함!!



3. Linux Mint Console Mode 부팅법

 - 검색해보면 Ubuntu 에 관한것은 상당히 많이 나옴.. Linux Mint가 Ubuntu에서 파생되긴 하였지만 뭐 하려고 하면 다 다르냐 --;;;


 - 다음 링크를 참고하여 겨우 설정했다. (http://forums.linuxmint.com/viewtopic.php?f=42&t=113700)


 1) Mate의 데스크탑인 mdm을 제거

 sudo apt-get purge mdm mint-mdm-themes

 sudo rm -fr /usr/share/mdm


 2) 부트스플래쉬 plymouth 제거

 sudo apt-get purge plymouth-label plymouth-theme-ubuntu-text


 3) /etc/default/grub 파일 수정

GRUB_CMDLINE_LINUX_DEFAULT = "text" 또는 #붙여서 comment 처리

GRUB_GFXMODE = 해상도

#GRUB_HIDDEN_TIMEOUT = 0  comment 처리


 4) grub 업데이트

sudo update-grub2



 이걸로 console 모드 부팅은 완료!!!


그런데 Xwindow 안쓰고 잘 쓸 수 있을까?



아 그리고 서버인 만큼 Puutty로 SSH를 이용해서 원격접속으로 설정을 할 예정




Ubuntu 12.04 에서 잘 동작하던 qbittorrent가 Mint 16 Petra Mate 에서 설치는 잘 되지만 동작을 하지 않는다.


정확히는 실행은 되지만 파일이 다운로드 되지 않는다.. --;;;


OS에 기본으로 설치되어 있는 transmission의 경우 잘 동작하는데 qbittorrent는 동작되질 않는다.


뭐가 문제인지 검색해 보았으나 별로 해결책이 안보인다. T.T


결국 utorrent를 설치하기로


www.utorrent.com 접속



ubuntu12.04 64bit 버전 다운로드



본인이 원하는 폴더에 압축을 풀고


utserver파일 우클릭해서 utserver 파일을 실행가능하도록 설정


그리고 

utserver 파일 더블클릭하면 아무것도 동작하지 않는데 리눅스용 utorrent의 경우 GUI를 지원하지 않고 Web GUI만 지원한다


그러므로


인터넷 브라우저에서 http://localhost:8080/gui 로 접속하면

아래와 같이 실행도 잘 되고 속도도 만족스럽다 ^-^










우씨.. Mint가 Ubuntu의 파생 배포본이라 별로 할일이 없을것 같았는데


x11vnc 서버 설정도 다르고


samba도 우분투와 좀 달랐다. --;;


기본적으로


sudo apt-get install samba 


는 정상적으로 설치되었으나


sudo apt-get install smbfs


는 cifs-utils가 있어서 어쩌구 저쩌구 하면서 설치 안됨
cifs가 smbfs를 대치하나 봄


여튼 samba를 설치하고


일전의 포스팅과 같이


smbpasswd -a 계정


계정 만들고 암호 만드는것도 무리 없었슴


하지만!


노틸러스에서 공유 옵션으로 설정하는 것으론 안되었다.


그래서 뒤적인게


sudo apt-get install system-config-samba

로 system-config-samba를 설치하면 GUI 환경에서 samba 설정이 가능하다


여기서 설정해도 잘 안되더니


reboot 하고 잘 됨!


에잉~


다음은 system-config-samba 실행화면



여기서 설정하면 되니까 쉽긴하다 ^^

x11vnc server setting on Mint Linux 16 Petra Mate 64bit


install 은 ubuntu 12.04와 동일 


sudo apt-get install x11vnc


하지만 autostart를 위한 스크립트가 다르다.


이유는 ubuntu의 경우 lightdm을 사용하지만 Mint Linux는 mdm을 사용하기 때문이다.


여하튼 그래서 스크립트는 다음과 같이 바꿨다. (위치는 /etc/init/x11vnc.conf 로 ubuntu와 동일)


(참고는 http://forums.linuxmint.com/viewtopic.php?f=42&t=141766)


#x11vnc.conf

start on (login-session-start or desktop-session-start)

stop on desktop-shutdown


respawn


emits vnc-server-start


script

x11vnc -xkb -noxrecord -noxfixes -noxdamage -display :0 -auth /var/lib/mdm/:0.Xauth -rfbauth /etc/x11vnc.passwd -forever -bg -o /var/log/x11vnc.log

initctl emit vnc-server-start

end script


하나 또 바뀐건 이번엔 비밀번호 걸어 놨다. 회사에서 접속할 때 비번이 없이도 접속이 되어버리니 괜히 찜찜해서 ㅋ


x11vnc -storepasswd /etc/x11vnc.passwd


이렇게 설정



접속하면 잘 실행이 되었고 


주의할 점은 한영전환


기존에 ubuntu 12.04에서는 한글입력이 기본으로 설정되어 있었고 VNC접속 시 Ctrl + Space 였는데

Mint linux 16 petra Mate에서는 입력기로 nabi로 설정하였고 Shift + Space 임



우분투 12.04를 설치하고 프로그램 설치라던지 설정이라던지는 크게 문제 없었고 또 해결했는데


결정적으로 전원이 켜지고 콘솔모드로 들어가버릴 때가 은근 많고 안꺼지는 문제도 여전히 있었다.


이 두가지 문제는 아무리 해결책을 찾아도 해결이 되질 않았다.


홈서버다 보니 주로 켜놓고 있을 때가 많겠다만 그래도 내가 주구장창 쓰는 것도 아니고 필요할 때만 켜고 끄고 하려고


공유기의 WOL도 설정해 놓았건만..



회사에서 WOL을 이용하여 전원을 켜고 작업하고 다음에 켜려면 회사에서 접속 불가한 상황 (콘솔모드 부팅이 되어버려서)이 많아지다 보니


도저히 짜증나서 안되겠다.


일단 리눅스 배포판을 민트리눅스로 바꿔보기로 결정!


www.linuxmint.com


우분투에서 파생된 배포판인데 가벼운 배포판으로 유명하고 최근에 우분투 다음으로 많은 사용자를 가진  배포판

(UI가 윈도우의 그것과 비슷하여 손쉽게 사용가능)


우분투 12.04 LTS에서 파생된 Mint 13 Maya Mate 을 설치하고자 하였는데 HDMI에서 화면 깨짐.. 화면이 깨지니 뭘 더 어찌 할수 없어서

우분투 13.10에서 파생된 Mint 16 Petra 설치 완료


설치는 별거 없고


설치시 화면이 이상하게 길게 나와서 다음 버튼을 누를수 없는 상황이 나오는데

Alt + 좌클릭으로 이동해서 사용하면 됨 (우분투에서도 있는 문제임)


그리고 다른 문제 하나는

한글입력


16버전에서는 IBUS 설치에 문제가 있어 nabi를 입력기로 사용하는것이 좋다. (http://linuxmint.kr/999)


sudo apt-get update

sudo apt-get upgrade

sudo apt-get install nabi


그놈제어판 - Language Support - 언어 업데이트 및 한글 설치

그놈제어판 - 입력기 - hangul 로 설정


reboot



지금까지 별문제 없이 잘 되었고

끄고 켜는데 아직은 문제없슴

지금 하고 있는 프로그램은 크게 3가지 일을 동시에 해야한다. (엄밀히 말해서는 동시에 하는 건 아니고 ㅋ)


1. Camera로 부터 영상획득 - 처리 

2. Bluetooth를 통하여 들어오는 명령 프로토콜 분석

3. Socket을 통하여 영상 전송


이를 동시적으로 처리를 해아하는데 

늘 하던 펌웨어라면 Timer Interrupt 이용해서 이놈했다 저놈했다 하는거 별 어려운일 도 아니겠지만 이쪽 프로그래밍을 하던 사람은 아니라서 검색 ㅋ

당연히 같은 개념인 Thread라는게 존재했다.


이놈을 어떻게 쓰는지 자세한 설명은 아래 링크 참조

http://www.yolinux.com/TUTORIALS/LinuxTutorialPosixThreads.html

http://knight76.tistory.com/entry/20010117546


여러 예제와 다양한 기능들이 있다만 내가 하고자 하는 일엔 그다지 복잡한게 필요치 않다.


위의 1,2,3의 일을 동시적으로 처리하기만 하면 된다.


아래는 작성한 예제소스


//============================================================================

// Name        : MultiThreadTest.cpp

// Author      : 

// Version     :

// Copyright   : Your copyright notice

// Description : Hello World in C++, Ansi-style

//============================================================================


#include <iostream>

#include <stdio.h>

#include <sys/time.h>

#include <pthread.h>



using namespace std;



int ncount = 0;

pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;


void* thread1(void* arg);

void* thread2(void* arg);



int main() {

pthread_t thread_id;

pthread_t p_thread1,p_thread2;

int status;


int i = 1;



printf("init main\n");


if((thread_id=pthread_create(&p_thread1,NULL,thread1,NULL)))

{

printf("Thread1[%d] Create Failed!\n",thread_id);

}else printf("Thread1[%d] Create Success!\n",thread_id);



sleep(1);


if((thread_id=pthread_create(&p_thread2,NULL,thread2,NULL)))

{

printf("Thread2[%d] Create Failed!\n",thread_id);

}else printf("Thread2[%d] Create Success!\n",thread_id);


sleep(1);





while(1)

{

pthread_mutex_lock(&mutex);

// thread_id = pthread_self();

printf("main = %d\n",i);

pthread_mutex_unlock(&mutex);

i++;

sleep(1);


if(i>2) break;


}


printf("thread1 cancel\n");


if(pthread_cancel(p_thread1)) printf("pthread_cancel 1 failed\n");

usleep(100);


printf("thread2 cancel\n");


if(pthread_cancel(p_thread2)) printf("pthread_cancel 2 failed\n");

usleep(100);


status = pthread_mutex_destroy(&mutex);

printf("status %d\n",status);

printf("End!!!\n");


return 0;

}


void* thread1(void* arg)

{


int i,j;

pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,NULL);

pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS,NULL);


printf("init thread1");

i = 1;

j = 2;

printf("i = %d, j = %d\n",i,j);


while(1)

{

pthread_mutex_lock(&mutex);

printf("thread1 \n");

pthread_mutex_unlock(&mutex);

pthread_testcancel();

usleep(100000);

}

}


void* thread2(void* arg)

{


int i,j;

pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,NULL);

pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS,NULL);


printf("init thread2");

i = 3;

j = 4;

printf("i = %d, j = %d\n",i,j);


while(1)

{

pthread_mutex_lock(&mutex);

printf("thread2 \n");

pthread_mutex_unlock(&mutex);

pthread_testcancel();

usleep(100000);

}

}



예제는 별것 없다.


main함수가 시작되면

Thread1과 Thread2를 만듦과 동시에 Thread1, Thread2 구동


main에서는  1초에 한번씩 i 변수 증가하고 출력

thread1은 100ms 마다 한번씩, thread2도 100ms마다 한번씩 각각 난 thread1이요, 난 thread2요 하고 출력


main이 2초가 넘어가면 각 thread cancel 시키고 종료한다.


결과는 아래와 같다.


init main

Thread1[0] Create Success!

init thread1i = 1, j = 2

thread1 

thread1 

thread1 

thread1 

thread1 

thread1 

thread1 

thread1 

thread1 

thread1 

Thread2[0] Create Success!

init thread2i = 3, j = 4

thread2 

thread1 

thread2 

thread1 

thread2 

thread1 

thread2 

thread1 

thread2 

thread1 

thread2 

thread1 

thread2 

thread1 

thread2 

thread1 

thread2 

thread1 

thread2 

thread1 

main = 1

thread2 

thread1 

thread2 

thread1 

thread2 

thread1 

thread2 

thread1 

thread2 

thread1 

thread2 

thread1 

thread2 

thread1 

thread2 

thread1 

thread2 

thread1 

thread2 

thread1 

main = 2

thread2 

thread1 

thread2 

thread1 

thread2 

thread1 

thread2 

thread1 

thread2 

thread1 

thread2 

thread1 

thread2 

thread1 

thread2 

thread1 

thread2 

thread1 

thread2 

thread1 

thread1 cancel

thread2 cancel

status 0

End!!!


잘 된다! ^^


여기서 주의해야 할 사항!!


처음에 #include <pthread.h>를 정확히 하였슴에도

pthread관련 함수들이 모두 컴파일 에러

예를 들어 다음과 같은 에러였다.


undefined reference to 'prhread_create'와 같은..


이를 해결하려면 컴파일 옵션을 손봐야 하는데

gcc 사용자라면 -lpthread 옵션을 추가해주면 되고


나처럼 Eclipse에서 개발환경이라면


properties -> C/C++ Build -> Settings  -> C++ Linker -> Libraries 에 pthread를 추가해주면 된다.






가장 유명한 리눅스 클라이언트 프로그램으로는 역시 Transmission 이다.

그리고 윈도우에서 많이 사용하는 것은 utorrent일테고


그런데 둘다 모드 리눅스에서는 GUI 환경을 Web방식만 지원하고 또 뒤적여 보니 qBittorrent의 평도 좋아서


qBittorrent를 설치하기로


설치는 어렵지 않다 그냥 우분투 소프트웨어센터에서 qBittorrent 검색하면 나오고 설치하면 끝




설치하고 실행하면 아래의 그림과 같이 실행 된다.



언어를 한글로 설정해두었기에 한글로 나오는데 번역된것 보다 안된게 많아서 별 의미 없다.


언어는 Option에 들어가면 아래의 그림이 나오는데 언어에서 한글로 바꿔주면 끝



다운로드에는 다운로드 폴더 및 여러가지 항목들을 설정할 수 있다.


utorrent에도 이 기능이 있었는지는 모르겠는데


아래에 Automatically add torrent from: 항목을 설정하고 설정한 폴더에 torrent파일 던져두면 알아서 Add 된다.


나의 경우 홈서버의 저 디렉토리를 공유설정해두고 윈도우 PC에서 토런트 파일을 저쪽으로 다운받아두니 알아서 잘 추가되어 다운로드를 시작했다.


하드디스크의 내용들이 조금 더 정리되면


movie, music 등 나누어서 설정해두면 나중에 복사하고 정리할 필요없이 알아서 들어갈 것 같아서 좋다.




속도 항목은 아래가 기본설정 안건드림




qBittorrent로 Web GUI를 지원한다.

일단 지금은 설정 안해두었지만 설정해두면 나중에 원격지에서 Web으로 연결할 수 있다.



결론

뭐 딱히 문제될것 없이 잘 된다.

두번째 그림처럼 여러개의 토렌트를 다운받는데 다운되거나 하는 일없이 잘 받긴한데 속도가 너무 안나온다.


그 이유를 두개정도로 압축시킬 수 있을 것 같은데.


1. 현재 사용하고 있는 Belkin 공유기의 발열 문제

 - 다운로드를 많이 하다보면 발열 때문에 속도가 느려지나? 원래 저 벨킨 공유기가 발열에 취약하고 실제로 나도 몇번 문제가 발생해서 구멍을 뚫어둔 상태긴 하다.


2. http://www.ubuntu.or.kr/viewtopic.php?p=71957 링크를 보면 중간에 이런 답글이 있다

 - 한국 토런트 사이트에서 운영하는 Tracker는 클라이언트 제한이 걸려있어 utorrent 외에 클라이언트에서 속도가 안나온다는

- 2010년 게시물이라 지금은 다를지 모르겠지만 일단 이것도 속도가 느린 이유 중 하나가 아닐까?



다음날 공유기 껐다가 켜고 5개 정도 토렌트 걸고 다운로드 받아봤는데 7MB 정도로 속도 나쁘지 않게 나옴 ㅋ

결국 공유기 문제가 컸나봄


   






아.. ZBOX에 광출력이 기본적으로 달려있어서 얼씨구나 했는데... 리시버에 기껏 연결했건만 이놈이 소리를 안낸다.


혹시나 해서 기존에 사용하던 USB-DAC를 물려보았더니 윈도우7에서는 안나오던 광출력이 여기선 또 소리를 잘 낸다.


여튼 기본적으로 달려있는 놈을 어떻게든 활성화 시켜보자.


일단 현재 달려 있는 오디오 장치를 확인해보자.


aplay --list-devices



보아하니 0카드 : PCH [HDA Intel PCH], 1 장치 : ALC892 Digital [ALC892 Digital] 요놈이 문제의 광출력인듯하다.


문제해결은 구글신과 ㅋ


여러방법을 써보았지만 되질 않았고


심플하게 alsamixer에서 s/pdif mute 조절로 해걸

(참고 : http://shellrunner.com/fix-digital-optical-spdif-output-in-ubuntu-raring-ringtail/ )



자 이제 XBMC 설정


문제는 XBMC에서는 처음에 메뉴 넘기는 소리는 잘 나다가 동영상을 재생함과 동시에 어떠한 설정을 해도 오디오 입력장치 초기화 실패 라는 메시지가 뜨면서 소리 안나옴 T.T


우선 alsa와 pulse를 모두 제거하고 다시 설치해보기로


sudo apt-get remove --purge alsa-base

sudo apt-get remove --purge pulseaudio

sudo apt-get install alsa-base

sudo apt-get install pulseaudio


하고 /etc/pulse/daemon.conf 파일 편집

default-sample-channels = 6

lfe mixing 관련은 6


그리고 

sudo speaker-test -c6


우분투 자체에서는 5.1채널로 소리 잘남


그래도 여전히 문제 발생



내가 뭘 알겠어.. 구글검색해서 


이것저것 다 해봐도 안됨 


그러다가 http://ubuntuforums.org/archive/index.php/t-1644394.html


Working now

This is what I did:

Use synaptics to load “linux-backports-modules-als-2.6.32-25-generic”. 
Once installed and system re-booted, load “alsamixer” in a terminal window, press F6 to change to Nvidia sound, then unmute the channels. It will not display channels unless the backport is loaded.

At that point, I was able to get VLC and other stuff to do 5.1.

I had to continue searching because XBMC is my main reason for this box. XBMC kept giving me "cannot initialize" error. I found that if I changed the Ubuntu sound preference to use analog (any type) then XBMC worked perfect.



이사람의 말이 정확하게 들어맞음


우분투의 기본 사운드 설정을 Digital이 아닌 Analog로 설정하고 XBMC를 실행하면 


광출력 패스스루로 잘 동작한다!!!


하지만 아쉽다. Analog로 설정한 이상 다시 사운드 설정을 디지탈로 바꿔줘야 XBMC를 제외한 나머지 모든 Ubuntu에서의 사운드가 나오니


이것도 여간 불편한 것이 아니다.


그리고 USB-DAC는 뒀다 뭐할건가..


결국 수많은 삽질 끝에 다시 USB-DAC를 사용하기로 ^^;;;


하지만 USB-DAC에서도 

리눅스 기본 사운드 설정에서 USB-DAC Digital로 선택을 하고 XBMC를 실행하고 파일을 재생하면 역시 에러


아무래도 리눅스 기본 사운드와 XBMC의 패스쓰루 장치와의 리소스 공유를 할 수 없는 구조인 듯하다.


그래서 설정한 방법이




리눅스의 기본 사운드 장치는 HDMI로


그리고 XBMC의 패스스루 장치를 USB-DAC Digital로 선택하니


리눅스의 기본 소리는 HDMI를 통해 TV로 사운드가 나오고


XBMC로 재생시에는 리시버를 통해 소리가 나온다.


* 이상하게도 XBMC 스크린샷 캡춰한거에서 오디오 세팅은 표시가 되질 않아서 글로만 씀 


여튼 편법이지만 어쩔수 없이 이렇게 셋팅완료!






+ Recent posts