'리눅스'에 해당되는 글 3건

  1. 2016.12.01 rtspclient 만들기..
  2. 2016.11.24 오픈스택 스위프트 스토리지 설치 최종 정리
  3. 2016.11.24 Swift 설치하기

아오.. 하오 오래전에 깨작거려놓은거라 생각이 안나는데...

 

오디오 방송 서버와 클라이언트를 만들어야 할 일이 있어서 급히 뒤적거리고 뚝딱거려서 만들어 봤다..

 

작업환경은 ubuntu 14.04LTS 32bit version,

타겟은 dm365보드였는데... ti-dvsdk_dm365-evm_4_02_00_06 버젼이니 참조하고..

 

http://www.live555.com/liveMedia/ 에서 library 소스 가져다 dm365에 맞춰서 configuration 하고 빌드한 후 라이브러리 가져다 오디오만 처리하도록 만들었는데.. 간단한 음성 방송 송신/수신만 하면 되고, dm365로 구성한 보드에 오디오 path도 adpcm 밖에 없어서 구현 하다 중단한 것으로 기억하는데.. 중요한건.. rtsp 서버에 접속해서 플레이하면... ㅎㅎㅎ 동작은 한다.. ^^;;

 

rtsp 서버는 http://www.live555.com/mediaServer/ 에 있는 pre-built 실행파일을 받아서 사용했고 (윈도용, 리눅스용 다 있음.)

 

 

client (2).zip

암호는 본문 맨 아래에..

 

Makefile은... 부득이하게 fullpath 참조하도록 만들어진터라..(디렉토리명에 개발자 이름이...) 빼고.. 소스만 압축되어 있으며,그 내용은 대략 아래와 같으니 참조만.. (~는 /home/사용자계정 디렉토리)

 

CROSS_COMPILER_PREFIX=arm-none-linux-gnueabi-
PREFIX_DIR=~/usr

INCDIR=${PREFIX_DIR}/include
LIBDIR=${PREFIX_DIR}/lib

GPP=${CROSS_COMPILER_PREFIX}g++
GCC=${CROSS_COMPILER_PREFIX}gcc
STRIP=$(CROSS_COMPILER_PREFIX)strip

INC_LIVEMEDIA_DIR=-I${INCDIR}/liveMedia -I${INCDIR}/groupsock  -I${INCDIR}/BasicUsageEnvironment -I${INCDIR}/UsageEnvironment
INC_BASE_DIR=~/dm365/ti-dvsdk_dm365-evm_4_02_00_06/linux-devkit/arm-none-linux-gnueabi/usr/include
LIB_BASE_DIR=~/dm365/ti-dvsdk_dm365-evm_4_02_00_06/linux-devkit/arm-none-linux-gnueabi/usr/lib

CFLAGS_BASE=-I. -DSOCKLEN_T=socklen_t -DNO_SSTREAM=1 -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 -Wall -DBSD=1 -I$(INC_BASE_DIR)
LFLAGS_BASE =-L$(LIB_BASE_DIR)
LDFLAGS_BASE=-lpthread -lasound ${LIBDIR}/libliveMedia.a ${LIBDIR}/libgroupsock.a ${LIBDIR}/libBasicUsageEnvironment.a ${LIBDIR}/libUsageEnvironment.a

CFLAGS=${CFLAGS_BASE} ${INC_LIVEMEDIA_DIR}

all: rtspclient

rtspclient: rtspclient.cpp server.c
 ${GPP} -g -o $@ rtspclient.cpp server.c $(CFLAGS_BASE) $(INC_LIVEMEDIA_DIR) -L$(LIBDIR) $(LFLAGS_BASE) $(LDFLAGS_BASE)

install: rtspclient
 $(STRIP) rtspclient
 cp rtspclient $(PREFIX_DIR)/bin/

clean:
 rm -f rtspclient

 

 

 

코드는... liveMedia 소스내의 testProgs 내의 파일들을 참조하고 여기저기서 구글링 해서 짜깁기 해서 만들어서 예쁘진 않고.. 작업한지 좀 지난지라 기억도 잘 안나서... 사용 방법은 빌드 후 나온 실행파일인 rtspclient를 target board에 넣고

 

./rtspclient 서버주소 만 해주면 되었던 걸로 기억..

 

live555MediaServer는 실행 파일이 있는 디렉토리를 /로 하고 이하의 디렉토리의 음원 파일의 이름을 그대로 url로 사용할 수 있다.

 

예를 들어.. 음원 서버가 192.168.100.99라고 하고, /home/antinuke/media_server 디렉토리 밑에 다음과 같이 파일이 구성되어있다면.. 서버의 실행은 antinuke@192.168.100.99:~/media_server/$ ./live555MediaServer & 이렇게 실행하면 되고..

 

+ home + antinuke + media_server + media_files + test.wav

                                               |                 + test1.wav

                                               |                 + test2.wav

                                               |                 + test3.wav

                                               + live555MediaServer

                                               + mp3_files + song1.mp3

                                                               + song2.mp3

 

 

클라이언트에서 접속 url은 rtsp://192.168.100.99/media_files/test.wav, 또는 rtsp://192.168.100.99/mp3_files/song1.mp3 와 같이 하면 된다.

 

단... 앞에도 얘기했듯... rtsp 기본 포트인 554로 live555MediaServer가 구동되었다면 포트를 생략해도 되지만, 8554로 구동되었으면, 주소뒤에 포트를 표시해주어야 한다. 즉, rtsp://192.168.100.99:8554/media_files/test.wav 혹은 rtsp://192.168.100.99:8554/mp3_files/song1.mp3 처럼 해야 한다.

 

첨부한 소스는 이 live555MediaServer가 실행되었을때 어느 포트로 구동되었는지 알 수가 없으므로, 자동으로 두 포트 모두 open해서 접속에 성공한 thread만 재생하고 실패한 thread는 바로 종료되도록 해놨다.. 귀차니즘으로 인한 잔머리... ㅎㅎ

 

일단 나만 참조할 메모지만 혹시 비슷한 걸로 고생하시는 분 있으면 쪼금이라도 참조라도 되었으면 해서..

 

 

압축파일 비번은 1234 ... 코드가 지저분해서 부끄럽기에.

Posted by 켄아자씨
,

A. 기본 서버 구성

a. 공통

- OS 버젼 :  Ubuntu 16.04LTS 설치
- 네트워크 구성
 * Swift-Proxy Server : 192.168.0.192
 * Swift-Storage Server
    : SAIO 타입 : Proxy Server와 Storage Server를 하나의 서버에서 구동 (192.168.0.192)
    : Production Mode 타입 : Proxy Server와 Storage server가 별도의 서버에서 구동 (192.168.0.193로 구성)


1. 계정 설정
※ ubuntu에서 제공하는 swift 패키지를 설치하면 swift uid는 생성되지만 실질적인 계정이 생성되지는 않아서 문제가 발생하므로 가급적이면 swift 계정을 생성하여 그 계정으로 진행하는 것이 좋음.

etri@newproxy:~$ sudo adduser swift
[sudo] password for etri:
Adding user `swift' ...
Adding new group `swift' (1001) ...
Adding new user `swift' (1001) with group `swift' ...
Creating home directory `/home/swift' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for swift
Enter the new value, or press ENTER for the default
        Full Name []: swift
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
Is the information correct? [Y/n] y
etri@newproxy:~$ sudo vi /etc/sudoers 해서 root밑에 swift도 sudoer로 추가하고 저장한 뒤 vi 종료
# User privilege specification
root    ALL=(ALL:ALL) ALL
swift ALL=(ALL:ALL) ALL


login as: swift
swift@192.168.0.82's password:

swift@newproxy:~$

2. network 설정

- proxy server

swift@newproxy:~$ sudo vi /etc/network/interface

auto ens33
iface ens33 inet static
address 192.168.0.192
netmask 255.255.255.0
gateway 192.168.0.1
dns-nameservers 8.8.8.8 4.4.4.4


- storage server

swift@newproxy:~$ sudo vi /etc/network/interface

auto ens33
iface ens33 inet static
address 192.168.0.193
netmask 255.255.255.0
gateway 192.168.0.1
dns-nameservers 8.8.8.8 4.4.4.4


3. 공통 패키지 설치 및 설정 파일을 저장할 디렉토리를 생성

swift@newproxy:~$ sudo apt-get install python-software-properties swift python-swiftclient openssh-server
swift@newproxy:~$ sudo mkdir -p /etc/swift






b. Proxy Server에서의 작업

1. 스위프트 서비스 구분 해시값 설정 (proxy server에서만 작업함)

swift 서비스 구분용 해시값을 만들기 위해 uuid를 사용하였고 이를 위해 uuid 패키지 설치

swift@newproxy:~$ sudo apt-get install uuid

swift@newproxy:~$ uuid
0b72e4ae-a70a-11e6-9dc4-6b7bc91f17f0  ==> 이 값을 swift-hash 값으로 사용하기 위해 클립보드로 저장해둔다.

swift@newproxy:~$ vi /etc/swift/swift.conf

[swift-hash]
# random unique strings that can never change (DO NOT LOSE)
swift_hash_path_prefix = 0b72e4ae-a70a-11e6-9dc4-6b7bc91f17f0  ==> uuid를 실행해서 얻은 guid 코드 문자열(무작위로 생성된 unique 한 스트링)


저장 후 종료

swift@newproxy:~$


2. proxy-server 동작을 위한 서비스 설치

swift@newproxy:~$ sudo apt-get install swift-proxy memcached


3. 프록시 서버캐싱을 위한 memcache 프록시 서버 설정

swift@newproxy:~$ sudo perl -pi -e "s/-l 127.0.0.1/-l 192.168.0.192/" /etc/memcached.conf

swift@newproxy:~$ sudo service memcached restart   ==> memcache 서비스 재시작


4. 스위프트의 프록시 서버 설정

swift@newproxy:~$ vi /etc/swift/proxy-server.conf

[DEFAULT]
bind_port = 8080
workers = 8
user = swift

[pipeline:main]
pipeline = healthcheck proxy-logging cache tempauth proxy-logging proxy-server

[app:proxy-server]
use = egg:swift#proxy
allow_account_management = true
account_autocreate = true

[filter:proxy-logging]
use = egg:swift#proxy_logging

[filter:tempauth]
use = egg:swift#tempauth
user_system_root = testpass .admin http://192.168.0.192:8080/v1/AUTH_system

[filter:healthcheck]
use = egg:swift#healthcheck

[filter:cache]
use = egg:swift#memcache
memcache_servers = 192.168.0.192:11211


5. 프록시 노드 링에 스토리지 노드를 추가하고 확인

swift@newproxy:~$ cd /etc/swift/
swift@newproxy:/etc/swift$ sudo swift-ring-builder account.builder create 18 2 1
swift@newproxy:/etc/swift$ sudo swift-ring-builder container.builder create 18 2 1
swift@newproxy:/etc/swift$ sudo swift-ring-builder object.builder create 18 2 1
swift@newproxy:/etc/swift$ sudo swift-ring-builder account.builder add r1z1-192.168.0.193:6002/sdb1 50
swift@newproxy:/etc/swift$ sudo swift-ring-builder account.builder add r1z1-192.168.0.194:6002/sdb1 50
swift@newproxy:/etc/swift$ sudo swift-ring-builder container.builder add r1z1-192.168.0.193:6001/sdb1 50
swift@newproxy:/etc/swift$ sudo swift-ring-builder container.builder add r1z1-192.168.0.194:6001/sdb1 50
swift@newproxy:/etc/swift$ sudo swift-ring-builder object.builder add r1z1-192.168.0.193:6000/sdb1 50
swift@newproxy:/etc/swift$ sudo swift-ring-builder object.builder add r1z1-192.168.0.194:6000/sdb1 50
swift@newproxy:/etc/swift$ sudo swift-ring-builder account.builder rebalance
swift@newproxy:/etc/swift$ sudo swift-ring-builder container.builder rebalance
swift@newproxy:/etc/swift$ sudo swift-ring-builder object.builder rebalance
swift@newproxy:/etc/swift$ sudo swift-ring-builder account.builder
swift@newproxy:/etc/swift$ sudo swift-ring-builder container.builder
swift@newproxy:/etc/swift$ sudo swift-ring-builder object.builder

6. proxy 서버 준비 완료





c. Storage Server 설정


1. loop device 생성 및 마운트

- chunk 생성
swift@newstorage:~$ truncate -s 30GB swift-disk1
swift@newstorage:~$ truncate -s 30GB swift-disk2

- xfs 생성
swift@newstorage:~$ mkfs.xfs swift-disk1
swift@newstorage:~$ mkfs.xfs swift-disk2

- fstab 수정

swift@newstorage:~$ sudo vi /etc/fstab

파일 맨 아래쪽에 다음 두줄 추가

/home/etri/swift-disk1  /srv/node/sdb1  xfs noatime,nodiratime,nobarrier,logbufs=8 0 0
/home/etri/swift-disk2  /srv/node/sdb2  xfs noatime,nodiratime,nobarrier,logbufs=8 0 0

- mount point 생성 및 마운트

swift@newstorage:~$ sudo mkdir -p /srv/node/sdb1 /srv/node/sdb2
swift@newstorage:~$ sudo mount /srv/node/sdb1; sudo mount /srv/node/sdb2


2. storage 노드 구성을 위한 패키지 설치

swift@newstorage:~$ sudo apt-get install swift-account swift-container swift-object swift-object-expirer xfsprogs


3. rsync service 설정

- /etc/rsyncd.conf 생성

swift@newstorage:~$ sudo vi /etc/rsyncd.conf


uid = swift
gid = swift
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
address = 192.168.0.193  # storage server ip

[account]
max connections = 2
path = /srv/node/
read only = false
lock file = /var/lock/account.lock

[container]
max connections = 2
path = /srv/node/
read only = false
lock file = /var/lock/container.lock

[object]
max connections = 2
path = /srv/node/
read only = false
lock file = /var/lock/object.lock


- rsync service를 활성화

swift@newstorage:~$ sudo vi /etc/default/rsync

.....
RSYNC_ENABLE=TRUE
.....

- 저장 후 rsync service 시작

swift@newstorage:~$ sudo service rsync start


4. swift storage configuration

- account-server.conf 생성 및 설정

swift@newstorage:~$ sudo vi /etc/swift/account-server.conf

[DEFAULT]
bind_ip = 192.168.0.193
workers = 2

[pipeline:main]
pipeline = account-server

[app:account-server]
use = egg:swift#account

[account-replicator]

[account-auditor]

[account-reaper]


- container-server.conf 생성 및 설정

swift@newstorage:~$ sudo vi /etc/swift/container-server.conf

[DEFAULT]
bind_ip = 192.168.0.193
workers = 2

[pipeline:main]
pipeline = container-server

[app:container-server]
use = egg:swift#container

[container-replicator]

[container-updater]

[container-auditor]

[container-sync]


- object-server.conf 생성 및 설정

swift@newstorage:~$ sudo vi /etc/swift/object-server.conf


[DEFAULT]
bind_ip = 192.168.0.193
workers = 2

[pipeline:main]
pipeline = object-server

[app:object-server]
use = egg:swift#object

[object-replicator]

[object-updater]

[object-auditor]


- object-expirer.conf 생성 및 설정

swift@newproxy:~$ sudo vi /etc/swift/object-expirer.conf

[DEFAULT]
user=swift

[object-expirer]
interval = 300

[pipeline:main]
pipeline = catch_errors cache proxy-server

[app:proxy-server]
use = egg:swift#proxy

[filter:cache]
use = egg:swift#memcache

[filter:catch_errors]
use = egg:swift#catch_errors

# See object-expirer.conf-sample for options

- container-reconciler.conf 생성 및 설정

swift@newproxy:~$ sudo vi /etc/swift/container-reconciler.conf


[DEFAULT]
user=swift

[container-reconciler]

[pipeline:main]
pipeline = catch_errors proxy-logging cache proxy-server

[app:proxy-server]
use = egg:swift#proxy
# See proxy-server.conf-sample for options

[filter:cache]
use = egg:swift#memcache
# See proxy-server.conf-sample for options

[filter:proxy-logging]
use = egg:swift#proxy_logging

[filter:catch_errors]
use = egg:swift#catch_errors
# See proxy-server.conf-sample for options




B. 스위프트 구성 및 서비스 시작

a. /etc/swift/swift.conf 복사

- Proxy Server에서 만들어둔 swift.conf를 동일하게 storage 서버에도 같은 위치에 복사한다

swift@newstorage:~$ sudo scp swift@192.168.0.192:/etc/swift/swift.conf /etc/swift/
swift@newstorage:~$ sudo scp swift@192.168.0.192:/etc/swift/*.ring.gz /etc/swift/


To Do :

1. 부팅후 service rsync start 구동시키기 ==> /etc/rc.local에 service rsync start 넣어서 일단 해결
2. storage server에서 404 not found 나는 정확한 이유 찾기 ==> 일단은 sudo chown swift:swift /srv/node/sdb1 /srv/node/sdb2 해서 지금은 오류는 나지 않음

 

'이런저런 것들 > 리눅스' 카테고리의 다른 글

dm365 보드용 ffmpeg configuration  (0) 2016.12.01
rtspclient 만들기..  (0) 2016.12.01
Swift Storage 설치 및 설정  (0) 2016.11.24
Swift 설치하기  (0) 2016.11.24
DM365 보드에서 ffmpeg 설정  (0) 2016.11.24
Posted by 켄아자씨
,

http://junolab.blogspot.kr/2014/10/open-stack-swift-production-mode.html


아.. 정말 뭐가 뭔지 하나도 모르고 속만 끓이다 사이다 같은 사이트였다.


ubuntu 16.04 VM을 3개 만들어 proxy 1개, storage 2개를 만들어 설치하여 동작시키는데 성공..

이제 KeyStone 인증을 설정해야하는데.. 언제 하냐.. 아오..


ubuntu 16.04에서 swift-proxy 서버 작동 시작/멈춤은 sudo service swift-proxy start/stop/restart 로 하면 되고,

현재 상태를 보려면 suto service swift-proxy status 하면 되는데, esc나 Q를 누르면 다시 셸로 돌아온다.


storage 설정이 골때리는데, 우선 swift-proxy 서버에서

swift-ring-builder account.builder create x y z

swift-ring-builder storage.builder create x y z

swift-ring-builder object.builder create x y z

하고,

storage server 정보를 추가한다

swift-ring-builder account.builder add r1-STORAGE_SERVER0_IP:6002/sdb1 100

swift-ring-builder account.builder add r1-STORAGE_SERVER1_IP:6002/sdb1 100


swift-ring-builder container.builder add r1-STORAGE_SERVER0_IP:6001/sdb1 100

swift-ring-builder container.builder add r1-STORAGE_SERVER1_IP:6001/sdb1 100


swift-ring-builder object.builder add r1-STORAGE_SERVER0_IP:6000/sdb1 100

swift-ring-builder object.builder add r1-STORAGE_SERVER1_IP:6000/sdb1 100


해서 생성된 ring.gz 파일을 각각의 storage server에 복사..


STROAGE0_SERVER :~$ scp swift@PROXY_SERVER_IP:/etc/swift/*.gz /etc/swift/

STORAGE1_SERVER :~$ scp swift@PROXY_SERVER_IP:/etc/swift/*.gz /etc/swift/


한후

STORAGE0_SERVER :~$ swift-init all start

STORAGE1_SERVER :~$ swift-init all start


하면 된다.


오류가 나면, 해당 storage server에서

STORAGE_SERVER :~$ ps -ef | grep rsync 해서 rsync가 떠있는지 확인

안 떠있으면, sudo service rsync start 해서 구동 후 해보면 된다.

Posted by 켄아자씨
,