원노트로 작성하고 블로그로 옮긴 글이다. 티스토리가 BlogAPI의 지원을 하지 않아 사진파일은 일일히 첨부해야 했다.
Raspberry Pi 활용(나스만들기)
목표
라즈베리파이를데이터저장용나스, 미디어 파일용미디어센터, 게임을위한에뮬레이터로구성할것이다.
사전준비
준비물
품명 | 비고 | 가격 |
Raspberry Pi 3 Model B | 약 47,000원 | |
케이스 | 약 7,000원 | |
전원어댑터 ( 5V, 2.5A~) | 약 4,000원 | |
HDMI 케이블 (1.5 M) | 약 4,000원 | |
Micro SD CARD (16G) | 약 13,000원 | |
USB Micro SD Reader | 약 5,000원 | |
LAN 케이블(Cat 5E/Direct) 3M | 약 3,500원 | |
방열판 | 약 1,500원 | |
외장하드케이스(iptime hdd3035) | 28,000원(택배비미포함) | |
소계 | 약 113000원 | |
하드(4TB, 3.5인치) | 집에있는거 | - |
가격은국내가기준이다.
라즈베리파이는 11번가에서 Starter Kit으로일괄구매했다.
//www.11st.co.kr/product/SellerProductDetail.tmall?method=getSellerProductDetail&prdNo=1464168496&xfrom=&xzone= : Starter Kit(8종) 76,900원
외장하드케이스도 11번가구매했다.
//www.11st.co.kr/product/SellerProductDetail.tmall?method=getSellerProductDetail&prdNo=1326876537&xfrom=&xzone= : 28,000원
모니터, 키보드, 마우스는집에있는거쓰면된다.
혹시나해서무선키보드겸마우스를알아보았다.
제품 | 가격 | 비고 |
Bless ZIO TMK300U 트랙볼 미니 키보드 | 33000원 | |
logitech K400 PLUS | 최저가(벌크, 영문제품) 27720원 | 작고키보드와마우스패드일체형이다. |
사고싶었지만쓸일이있을까싶어서ㅜㅜ포기했다. 있으면 쓰긴하는데...
기타
용도 | 제품 | 가격 | 비고 |
케이스 | 네오박스 5~6L | 약 5000원미만 | 케이스로쓸라고함 3.5인치하드에멀티탭까지포함하려면 6L가좋음 |
케이스 | 락앤락 똔따렐리소품바스켓 5L 아이보리 INP905IV | 약 9000원 | 케이스로쓸라고함 |
케이스 | 락앤락 라탄패턴 스토리지 6.5L | 약 4800원 | 케이스로쓸라고함 |
멀티탭 | 네모탭 멀티탭4구 | 약14000원 | 디자인이맘에듬 |
게임패드 | 게임패드 AG2DX | 약 16500원 | 싸다 |
게임패드 | 게임패드 Coms | 약 13100원 | 더싸다 |
2.5 인치 외장하드케이스 | iptime hdd3125 | 약 15000원 | 2.5인치 sata to usb 외장하드케이스 |
RAID 구성 | 이지넷유비쿼터스 NEXT-702U3 RAID (2 bay) | 약 57000원 | jbod, raid0, raid1 지원 |
데이터의안전을위해서는 RAID로구성하면좋다. 혹은여러 하드를단일디스크처럼활용하기위해서도 raid0나 jbod 을활용하자.
3.5인치하드와멀티탭, 라즈베리파이까지한박스에다정리하려면네오박스 6L가적합했다.
네모탭멀티탭은디자인이이쁘다.
메모리카드선택
SD카드 클래스별 성능 차이. (출처 : sdcard.org)
위의표를확인해보기 바란다.
라즈베리파이스타터키트의단점은다들어있는데 SD Card가좋지 않은것이온다.
DLNA 미디어서버구성시트렌스코딩위치, 데이터베이스위치,임시저장소위치는 SD Card로사용하지말고빠른저장소로 설정하기바란다.
SD Card에대한설명은아래의사이트를참고하자. :
//www.bloter.net/archives/230516
사전계획
사용계획
- 미디어서버 & 플레이어
- DLNA 프로토콜을이용하여티비, 스마트폰으로영상보기
- 라즈베리파이의 HDMI 포트를모니터에직접연결하여영상보기
- 스피커 연결하여노래듣기
- 스마트폰의영상을라즈베리파이로출력
- Transmisson 소프트웨어를이용하여 토렌트파일받기
- 스토리지관리(NAS)
- SFTP를통한원격지 파일관리
- Private Cloud를이용하여원격지에서파일관리, 백업, 다운로드, 업로드, 동기화
- CIFS(Samba) 를이용하여네트워크드라이버로사용
- 게임에뮬레이터
- 레트로게임즐기기
키보드나마우스는스마트폰앱중에 WIFI를 통하여가상마우스,키보드를지원하는앱이있다이것을활용 할것이다.
게임에뮬레이터로사용시에는현재게임패드가없는상황이므로 스마트폰을통해가상패드를이용할것이다.
SSH나 XRDP를통해원격접속을통해시스템을관리할것이다.
소프트웨어목록
분류 | 이름 | 사용여부or 추천여부 | 용도 | 비고 |
부트로더 | BerryBoot | O | 멀티부팅, OS설치 | |
OS | Ubuntu Mate | X | 나스, 미디어센터 OS | kodi 최신버전설치시문제가발생해서제외함 |
Raspbian | O | 나스, 미디어센터를위한 OS | ||
Retropie | O | 게임에뮬레이터 OS | ||
OSMC | X | 미디어센터 OS | ||
원격제어유틸리티 | Openssh-Server | O | ssh, sftp 용 | |
XRDP | O | 원격데스크탑접속용 | 윈도우원격데스크탑을이용하여 Linux에접속하기위해서사용함 | |
WiFi Mouse | O | 스마트폰을키보드, 마우스로사용할수있게한다. | 안드로이드앱 //wifimouse.necta.us/ | |
Remotepi | X | 스마트폰을키보드, 마우스로사용할수있게한다. | 안드로이드앱 | |
Virtual Gamepad | O | 가상게임패드 | 안드로이드로웹에접속하여패드처럼활용할수있다. 레트로파이에서 활용한다. | |
hdparm | O | 하드디스크관리유틸 | 절전설정, 쓰기,읽기속도조절등하드디스크를관리해준다. 발열이나전력소모 최적화를위해서사용한다. | |
Web Console | X | 웹을통해콘솔을사용할수있다. | 별로임 | |
shellinabox | O | 웹을통해콘솔을사용할수있다. | apache 가아닌자체웹서버를내장하고있고 apt repository 에도포함되어 있어서설치도편하다. //github.com/shellinabox/shellinabox | |
파일공유스토리지 | Samba | O | cifs (윈도우네트워크마운트용) | |
Trasmission | O | Torrent 다운을위해서 | 웹클라이언트를통해접속하여 torrent 파일을업로드하면자동으로받아준다. 사용이 편리하다. | |
Monsta FTP | O | 웹 FTP Client | 웹 FTP 클라이언트이다. 웹으로파일을관리할수있다. | |
Vsftp | X | FTP server | openssh-server에 SFTP 있어서설치안함 | |
OwnCloud | X | 개인클라우드용 | 나만의클라우드환경을위해서사용한다. 안드로이드클라이언트앱도있어서
사용이편하다. | |
NextCloud | X | OwnCloud 포크 | OwnCloud의핵심개발자들이나와서만듬 | |
Pydio | O | 파일공유소트트웨어 | 기존의외장하드의파일도그대로보인다. 존재하는파일시스템과잘호환된다. 만족스럽다. | |
웹 | Apache | O | 웹서버 | |
PHP | O | 웹서버 | ||
DB | MariaDB | O | DB | |
PhpMyAdmin | O | DB 관리용 | ||
미디어 | BubbleUPnP Server | O | UPnP Gateway | 외부네트워크에서홈네트워크의 UPnP(미디어서버)에접근가능하게한다. |
Kodi | O | 미디어플레이어 | 라즈베리파이에서다이렉트로미디어재생을위해서사용 | |
Yatse | O | Kodi 리모콘 | kodi 안드로이드앱이다. | |
MiniDLNA(ReadyMedia) | O | DLNA 미디어서버를위해서사용 | 트랜스코딩같은고급기능없이딱 DLNA로영상플레이하기에 적합하다. 가벼워서장비사양이좋지않아도잘동작한다. 소위 스마트 TV(DLNA지원)라는 TV를통해영상재생이가능하다. | |
Plex Media Server | X | DLNA 미디어서버를위해서사용 | 트랜스코딩등기능이다있지만라즈베리파이에서트랜스코딩을 사용하는것은무리가있고파일스캔등라즈베리파이에서사용하기에는 성능이너무안나온다. (성능문제는내외장하드성능이매우 매우좋지않아서그럴수있다.) | |
LG Smart Share | X | DLNA 미디어서버 | 자막잘된다. 윈도우만설치된다. | |
Aircomix | O | 만화책(압축파일포함)을실시간스트리밍개념으로보는방식 |
우선멀티부팅환경을만들기위해서 Bootloader는 Bootberry 를이용 할것이다.
Noobs 보다 Bootberry 가더많은패키지를지원하고설정이좀더자유롭다. 또한 Noobs는각운영체제를나누어진파티션으로관리여 파티션용량을사용자가관리해야한다. Bootberry는여러운영체제를하나의파일시스템의 폴더단위로관리하기때문에파티션용량을관리할필요가없다.
나스와미디어센터는각각따로설치하지않고한 OS에구축할것이다. 미디어센터는 Kodi를이용하고부팅시 Kodi가자동실행될 수있도록설정할것이다. 성능은잘나올지미지수다.
운영체제는 좀더보편적이고내가좋아하는 Ubuntu Mate를선택했다.
운영체제는라즈베리에꼭 맞는 Raspbian 을선택했다. (Ubuntu Mate에 kodi 17버전이잘동작하지않는다.)
게임에뮬레이터는레트로파이를선택했다. 레트로파이는미리만들어진이미지를사용할 것이다. 이유는설치된 OS에레트로파이설치시컴파일하는시간이너무 소요된다. 또한나스서비스들이동작하면서에뮬레이터까지돌리면성능저하가클 것으로본다.
그밖에소프트웨어목록
분류 | 이름 | 용도 | 비고 |
NAS | FreeNAS | ||
NAS4Free | Nas OS 이다. | ||
OpenMediaVault(OMV) | |||
Openfiler | |||
Rockstor | |||
Nexenta Community Edition | |||
Amahi | |||
CryptoNAS | |||
TONIDO | |||
Pydio |
OS 설치(Raspbian)
BerryBoot를통한설치
멀티부팅환경과 OS 설치를 편하게(네트워크를통해) 하기위한 bootloader이다.
BerryBoot 로설치하는 것은너무나간단하다.
NOOBS보다 BerryBoot를추천하는이유는 NOOBS는 멀티운영체제에대해파티션으로관리하고 BerryBoot는파일시스템으로관리한다. NOOBS는 한쪽운영체제에서용량이부족해지면파티션용량을변경해주어야하는번거로움이 있지만 BerryBoot는설치된각운영체제가파티션이아닌일반파일시스템의 폴더로구분되기때문에용량에대해별다른신경을쓰지않아도 된다.
참고
//www.berryterminal.com/doku.php/berryboot : BerryBoot
- BerryBoot 사이트( //www.berryterminal.com/doku.php/berryboot )에서 BerryBoot를다운받는다.
- 다운받은 파일을압축해제한다.
- SD Card를포맷한다. 이미 SD Card를활용했었다면 SD formatter를
이용하여깔끔히지운다.
//www.sdcard.org/downloads/formatter_4/ : sdformatter 다운로드 - FAT 로 포맷한 SD Card 로압축해제후생성된파일들을복사한다.
- 라즈베리파이에랜케이블을 연결한다.(Wifi로할것이라면연결안해도된다.)
- OS설치를인터넷을 통해다운받아설치하기위해서이다.
- SD Card를라즈베리파이에연결하고부팅한다.
- Ubuntu Mate를설치한다.( 다른것도설치된다.)
Kodi설치후실행시 Failed get gamma…. 메세지와세그먼트오류가발생한다. - Raspbian 을설치한다.
라즈베리파이를 부팅하면
네트워크가연결되어있다면 Location 과 Timezone은 IP 주소를기반으로자동으로설정된다.
OS를설치 할디스크를선택하면된다.(여기서는 mmcblk0 이다)
순서적으로
- mmcblk0 : SD Card 자신
- sda : 외부장치인 USB stick/disk 를말한다.(SSD 있으면이걸로도가능하다.)
필자는 SD Card가성능이너무떨어져서남아돌고있는 64기가 SSD를사용했다.
- Networked storage(iSCSI SAN) : 네트워크스토리지(네트워크블록디바이스)를말한다. 요즘피씨방에서많이 사용하는방식이다.
설치할 OS를선택한다.
Ubuntu mate를설치했다가지우고 Raspbian 을설치했다.
Ubuntu mate의경우 kodi 설치후실행에문제가발생했다. 또한 kodi 17.1(최신버전)을지원하지않았다. Ubuntu 계열을좋아하지만 비슷한 Debian계열인 Raspbian으로만족했다.
Raspbian 설치시초기사용자와비밀번호는
사용자 : pi
비밀번호 : respberry
이다.
OS 설정
Nas 구축전에 OS를설정할 것이다.
nas 란사용자와그룹을만들고이를 nas 접속유저로 관리할것이다.
기본적으로생성되어있는 pi 란계정은 root를대리하는 계정으로외부에서쓰기불안하기때문이다.
raspi-config 를이용한기본설정하기
아래의명령을실행하면기본적인설정을간단히진행할수잇다.
- Expand Filesystem : SD 카드의전체용량을사용할 수있게함.
- Change User Password : "pi" 계정의비밀번호를변경
- Enable Boot To Desktop/Scratch : 부팅시 Console 환경혹은 Desktop(GUI) 환경혹은 Scratch(스크래치프로그래밍) 환경으로시작방법을설정
- Internationalisation Options : Locale(언어, 문자인코딩), 키보드 Timezone 국제화관련설정
- Enable Camera : Raspberry Pi 전용카메라를사용할수있도록함
- Add to Rastrack : rastrack 서버에 Raspberry Pi를등록하는 것이다. 가상의렉이라고생각하면된다. rastrack에등록된모든 Raspberry Pi의 현황과위치등을확인할수있음. (//rastrack.co.uk/ : rastrack 사이트)
- Over Clock : 700MHz 이상의 CPU Clock 으로변경할수있음.(오버클럭시 cpu 열발생과수명 단축을조심하자. 가급적초기설정상태로사용하는것이좋다.)
- Advanced Options : Hostname 변경, SSH on/off, SPI on/off, Audio HDMI/3.5mm jack 등설정.
- Overscan : 고해상도모니터에라즈베리 파이의화면을출력할경우화면이모니터에맞지않게표시되거나 텍스트가화면의측면으로몰려서표시되는현상이나타날수잇다. 그러한경우화면에맞게디스플레이를수정하려면이옵션을사용하자.
- Hostname : 호스트이름을변경한다.
- Memory Split : CPU와 GPU에분배하는메모리양을 변경할수있다. 그래픽작업을많이하는경우에는 GPU에 많은메모리를할당하는편이좋다.
- SSH : 보안쉘(SSH) 서버를 활성화시키고사용자가네트워크를통해원격으로라즈베리파이에로그인할 수있게하는옵션이다. 편리한기능으로활성화하자.
- Device Tree : 하드웨어 정보를기술하는일종의데이터구조이다.
- SPI : 시리얼주변장치인터페이스(SPI)의활성여부를설정한다.
- I2C : 직렬버스의하나인 I2C(Inter-Integrated Circuit)의활성화여부를설정한다.
- Serial : 시리얼핀을통해쉘에 로그인하고메시지를송수신하는기능이다.
- Audio : 오디오출력단자를설정한다. 3.5mm 오디오잭이나 HDMI로출력을강제할수있으며자동모드도가능하다.
- Update : 인터넷이ㅇ녀결되어있다면설정유틸리티를업데이트할수있다.
- About raspi-config : 해당툴의안내문
PI 계정비밀번호변경하기
기본설정에는 pi의 비밀번호가 raspberry이다.
기본비밀번호를쓰는것은보안상좋지않다. 비밀번호를바꾸자.
명령후새로운비밀번호를입력하면된다.
예. id:pi, password:pi
테스트에서는 id: pi, password: pi로하였다.
나스용아이디/그룹만들기
pi란사용자는 sudo 그룹에포함되어있다. 즉관리자의권한을위임받아행동할수 있다. 따라서로컬이나관리용으로만쓰는게적당하다.
따라서나스용아이디를 만들자.
nas 란사용자/그룹을만들것이다. ( 자신이원하는이름으로 하자. )
사용자/그룹만들기
$ sudo useradd nas -m -s /bin/bash
-m : 홈디렉토리가생성된다.
-s /bin/bash : bash쉘로쉘환경이설정된다.
사용자/그룹정보확인
$ cat /etc/passwd | grep nas |
nas:x:500:500::/home/nas:/bin/bash |
저기번호(예. 500)를기억하자. 외장하드마운트시소유자와 소유그룹을저걸로만들것이다. (보통많이쓰는 NTFS, FAT는계정에 따른권한이따로없다. 따라서리눅스에마운트시소유자와소유그룹을 지정할수있다.)
패스워드지정
$ sudo passwd nas
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
계정관리
추가적으로 계정을관리하는법이다.
비밀번호변경하기
다른계정의비밀번호를변경하고 싶다면 root 권한이필요하다.
$ sudo passwd {target_username}
{target_username} : 비밀번호를바꿀사용자아이디
계정아이디변경하기(선택사항, 추천하지않는다.)
기본으로 pi 계정이자동으로 등록되어있고자동로그인이설정되어있다.
pi란 이름을 다른이름으로바꾸고비밀번호도등록할것이다.
명령형식
$ sudo usermod -md /home/{new_name} -l {new_name} {old_name}
유저의이름과홈폴더의이름을바꾼다.
예를들어 pi를 test로 바꾼다면
$ sudo usermod -md /home/test -l test pi
실제는위명령시아래와같은에러가발생할 것이다.
$ sudo usermod -md /home/test -l test pi
usermod: user pi is currently used by process 2104
pi 가현재 shell을실행중이라 usermod 명령을수행할수없다는것이다.
기본설치시 Xwindow 로실행중인 상태이다. 이때는우선현재계정(pi)을 Logout 하고 Ctrl+Alt+F2 로 terminal session을 변경후아래의명령을실행해야한다.
$ exec sudo -s
$ cd /
$ sudo usermod -md /home/test -l test pi
이때는 exec 명령을 통해 pi의 shell을종료하고 root의 shell로실행하여 usermod 명령을실행한 것이다.
그룹이름도변경할것이다.
명령형식
$ sudo groupmod -n {new_name} {old_name}
예를 들어 pi를 test로바꾼다면:
$ sudo groupmod -n test pi
자동로그인끄기(선택사항)
Raspbian 설치시 pi란계정이자동로그인으로설정되어있다.
pi란 계정의자동로그인을끄는방법이다.(pi를다른이름으로 바꾸었다면해줘야한다.)
혹은자동로그인기능이좋다면 pi계정 대신위에서변경한이름으로자동로그인설정을변경해야한다.
/etc/lightdm/lightdm.conf 파일에 자동로그인설정이되어있다.
$ sudo vi /etc/lightdm/lightdm.conf
...
#autologin-user=pi
...
"autologin-user=pi" 를 주석처리하거나삭제하면자동로그인이되지않는다.
만약변경한이름으로 자동로그인설정하고싶다면 pi 대신변경한이름으로설정하면된다.
$ sudo vi
/etc/lightdm/lightdm.conf
autologin-user=test
부팅 Runlevel(GUI<->CLI )변경 (선택사항)
기본 raspbian 을설치하면부팅시 desktop 환경(GUI)으로실행된다.
이를부팅시 CLI(terminal) 로실행되게하려면
$ sudo update-rc.d lightdm disable 2
반대로부팅시 GUI 으로실행되게하려면
$ sudo update-rc.d lightdm enable 2
언어변경
방법1. dpkg-reconfigure를사용한방법.
$ sudo dpkg-reconfigure locales
여기서추가할언어를선택한다.
이 화면에서기본언어로쓸언어를선택한다.
한국의경우 ko_KR.UTF-8 UTF-8 혹은 ko_KR.EUC-KR EUC-KR을선택한다.
글쓴이는 ko_KR.UTF-8 UTF-8 을선호한다.
방법2. raspi-config 로 언어설정
raspi-config 는 raspbian 설정을 UI로간편하게할수있게 도움을주는유틸이다.
Internationalisation Options -> Change Locale
command line 으로설정하기힘든분이나간단한설정은이곳에서하면 편하다.
Timezone 변경
timezone을 Asia->Seoul 로바꾼다.
방법1. 수동변경
타임존 변경 명령
$ sudo ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
타임존 변경 확인
$ date
Mon Dec 28 17:37:23 KST 2015
다른 타임존확인
아래의 위래에 다른 타임존 들이 있다.
방법2. tzselect를통한변경
tzselect 명령을 통해 쉽게 변경 가능하다.
shh@shh-dev:/$ sudo tzselect
Please identify a location so that time zone rules can be set correctly.
Please select a continent, ocean, "coord", or "TZ".
1) Africa
2) Americas
3) Antarctica
4) Asia
5) Atlantic Ocean
6) Australia
7) Europe
8) Indian Ocean
9) Pacific Ocean
10) coord - I want to use geographical coordinates.
11) TZ - I want to specify the time zone using the Posix TZ format.
#? 4
Please select a country whose clocks agree with yours.
1) Afghanistan 18) Israel 35) Palestine
2) Armenia 19) Japan 36) Philippines
3) Azerbaijan 20) Jordan 37) Qatar
4) Bahrain 21) Kazakhstan 38) Russia
5) Bangladesh 22) Korea (North) 39) Saudi Arabia
6) Bhutan 23) Korea (South) 40) Singapore
7) Brunei 24) Kuwait 41) Sri Lanka
8) Cambodia 25) Kyrgyzstan 42) Syria
9) China 26) Laos 43) Taiwan
10) Cyprus 27) Lebanon 44) Tajikistan
11) East Timor 28) Macau 45) Thailand
12) Georgia 29) Malaysia 46) Turkmenistan
13) Hong Kong 30) Mongolia 47) United Arab Emirates
14) India 31) Myanmar (Burma) 48) Uzbekistan
15) Indonesia 32) Nepal 49) Vietnam
16) Iran 33) Oman 50) Yemen
17) Iraq 34) Pakistan
#? 23
The following information has been given:
Korea (South)
Therefore TZ='Asia/Seoul' will be used.
Local time is now: 2017. 11. 10. (금) 13:57:27 KST.
Universal Time is now: 2017. 11. 10. (금) 04:57:27 UTC.
Is the above information OK?
1) Yes
2) No
#? 1
You can make this change permanent for yourself by appending the line
TZ='Asia/Seoul'; export TZ
to the file '.profile' in your home directory; then log out and log in again.
Here is that TZ value again, this time on standard output so that you
can use the /usr/bin/tzselect command in shell scripts:
Asia/Seoul
shh@shh-dev:/$ date
2017. 11. 10. (금) 13:57:32 KST
방법3. dpkg-reconfigure 를통한 변경
gui를통해아주쉽게변경가능하다.
$ sudo dpkg-reconfigure tzdata |
|
Asia->Seoul 선택
전력 관련 설정
외장하드는 전력을 많이 소비하기 때문에 더욱 안정적으로 외장하드를 사용하려면 라즈베리파이의 전력관련 옵션을 확인하고 변경해 주는 것이 필요하다. 다음의 파일을 열어 옵션을 확인하고 내용이 없으면 맨 윗줄에 아래의 내용을 추가해주고 재부팅 해 준다.
$ sudo vi /boot/config.txt
위의 파일을 열어 다음의 내용을 추가해준다. 추가해주면 라즈베리파이의 허용전류를 2A까지 늘려준다고 한다.
max_usb_current=2
safe_mode_gpio=4
그후리부팅
외장하드준비하기
하드디스크확인하기
lsblk 를통하여
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 3.9G 0 disk
├─sda1 8:1 0 487M 0 part /boot
├─sda2 8:2 0 1K 0 part
└─sda5 8:5 0 3.4G 0 part
├─fepserver--vg-root 252:0 0 3.9G 0 lvm /
└─fepserver--vg-swap_1 252:1 0 1G 0 lvm [SWAP]
sdb 8:16 0 3G 0 disk
└─fepserver--vg-root 252:0 0 3.9G 0 lvm /
sr0 11:0 1 1024M 0 rom
현재디스크들의상태를 간단히확인할수있다.
fdisk 를통하여
Disk /dev/sda: 3.9 GiB, 4185055232 bytes, 8173936 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x8a4d1bc8
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 999423 997376 487M 83 Linux
/dev/sda2 1001470 8173567 7172098 3.4G 5 Extended
/dev/sda5 1001472 8173567 7172096 3.4G 8e Linux LVM
Disk /dev/sdb: 3 GiB, 3221225472 bytes, 6291456 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
디스크들의 정보를확인할수있다.
포맷하기
외장하드를포맷하는방법이다.
외장하드의 파일시스템을만드는방법으로이미사용중인외장하드가있다면포맷시모든 파일을지워버린다.
이미사용중인외장하드가있고파일을없애지말아야 한다면포맷하지말아야한다.
명령은 :
$ sudo mkfs -t {type} {device}
{type} : 파일시스템종류
{device} : 기기 경로
예를들어 /dev/sdb 장치를 ntfs로포맷시:
$ sudo mkfs -t ntfs /dev/sdb
하드디스크는 ntfs 혹은 fat 파일시스템으로포맷하기를추천한다. 그래야해당하드디스크를윈도우환경에연결했을 때도잘동작하기때문이다.
Mount 하기
방법1, UUID 마운트(추천, 재부팅시 자동 mount 유지)
UUID로마운트하기위해서는우선장치의 UUID를확인해야한다.
장치가연결된포트위치에따라 /dev/sdb, /dev/sdc 등바뀔수 있다. 하지만 UUID는연결포트가달라진다해도하드디스크의고유의번호이기 때문에달라지지않는다.
blkid 명령을이용하여 UUID 정보를얻는다.
$ sudo blkid
dev/hda1: UUID="e38c77a6-0990-44bf-a592-9c156920fb5d" SEC_TYPE="ext2" TYPE="ext3"
/dev/hda3: UUID="9fa0f339-1fa5-4c75-942a-b6001b7bcde8" SEC_TYPE="ext2" TYPE="ext3"
/dev/hda4: UUID="26474b1a-8353-4a15-8add-94df2a6784b7" SEC_TYPE="ext2" TYPE="ext3"
/dev/hda5: UUID="9dfa1ff8-b91c-47db-9d8d-8cfb78ff7432" SEC_TYPE="ext2" TYPE="ext3"
/dev/hda6: TYPE="swap" UUID="0e7bd3d5-88dd-4a06-81bd-2dd1f2870a5c"
/dev/sda1: UUID="00CC65DDCC65CE0A" LABEL="Data1" TYPE="ntfs"
/dev/sda2: UUID="8d6f7e4f-4bfe-4ad1-83b8-22d71065193f" SEC_TYPE="ext2" TYPE="ext3"
/dev/sda3: UUID="2E38726838722EC9" LABEL="Data2" TYPE="ntfs"
/dev/sdb2: UUID="1ed998db-712f-4fc3-9155-02e091fd8380" TYPE="ext3"
/dev/sdb3: UUID="4c907521-a4fb-4a2c-86ce-9b8206aaf33a" TYPE="ext3"
/dev/sdb1: UUID="feeb3d31-7c74-41e3-87fd-9a60c900430f" SEC_TYPE="ext2" TYPE="ext3"
UUID를 확인하고마운트하면된다.
예를들어
UUID : "e38c77a6-0990-44bf-a592-9c156920fb5d"
파일시스템 : ntfs
"nas" 란계정의 uid, gid : 500
umask : 027 (owner rwx, group r-x, other ---)
$ sudo vi /etc/fstab UUID= e38c77a6-0990-44bf-a592-9c156920fb5d /media2 ext3 defaults,uid=500,gid=500 0 2 |
$ sudo mount -a |
여기서 umask 는권한을뺏는거라생각하면된다.
r은 4, w은 2, x는 1 이다. 2진값이다. rwx = 421 즉 7이다. rw = 420 즉 6이다.
umask 027 은소유자에게는 rwx , 그룹에게는 r-x, 그밖에계정에게는아무권한을안주겠다는것이다. 해당 옵션은 ntfs,fat 와같은파일의권한개념이없는파일시스템에서만사용되는 옵션이다.
해당옵션을준이유는 nas 란사용자는 rwx 모든권한을 가지고 nas 란그룹은 r-x 즉읽기권한만가지고다른사용자는 어떤권한도주지않기위해서다.
다른이들과 mount한파일 시스템을공유하기위해계정을만들어주고 nas 그룹에넣으면해당 mount한 파일시스템에읽기권한만가지고읽을수있기때문에파일을 수정하거나삭제할수없어파일을보호할수있다.
혹은 권한을 775 로주고 nas 사용자와그룹은 rwx 권한을다주고 other는 r 즉읽기권한만줄수도있다.
방법2, mount 명령을사용하여 일시적으로마운트하기(비추, 재부팅시 unmount됨)
mount가유지되지않는다.
명령형식
mount -t {파일시스템} {장치파일} {마운트포인트} |
unmount {장치파일혹은마운트포인트} |
{파일시스템} 은생략해도된다.
예)
CD-Rom 마운트
$ sudo mount -t iso9660 /dev/cdrom /media/cdrom
NFS 마운트
$ sudo mount -t nfs 123.12.12.1:/nfs /media/nfs
방법3, /etc/fstab 파일로마운트하기(재부팅시자동 mount 유지)
/etc/fstab 에마운트내용을열거하면된다.
/etc/fstab 파일에설정한장치가없거나, 틀릴경우부팅자체가안될수있으므로주의하자. 이때는 시스템응급복구모드를사용하여복구해야한다.
형식
<file system> <mount point> <type> <options> <dump> <pass>
예)
/dev/sda1 /media ext4 defaults 0 0
UUID=e38c77a6-0990-44bf-a592-9c156920fb5d /media2 ext3 defaults 0 2
/dev/sda1 을마운트는장치파일경로로지정한것이다. 장치를추가하거나 제거할때장치파일경로가바뀔수있다.
UUID로마운트한 것은장치의고유이름을사용한것으로만약장치파일의경로가바뀐다 하거라도동일한경로에마운트되는것을보장한다.
/etc/fstab 에 새로운마운트포인트추가하고즉시마운트한다.
Mount Option
옵션 | 설명 |
defaults | rw, suid, dev, exec, auto, nouser, async 옵션을모두가지는기본설정 |
auto | 바팅시자동마운트 |
noauto | 부팅시자동마운트안함 |
dev | 파일시스템상의문자, 블럭특수장치를해석 |
nodev | 파일시스템상의문자, 블럭특수장치를해석하지않음 |
exec | 바이너리실행파일이실행되는것을허용 |
noexec | 바이너리실행파일이실행되는것을허용안함 |
suid | setuid, setgid의사용을허용 |
nosuid | setuid, setgid의사용을거부 |
ro | 읽기전용 (read-only) |
rw | 읽기/쓰기가능(read/write) |
async | 파일시스템에대한 I/O가비동기적으로이루어짐 |
sync | 파일시스템에대한 I/O가동기적으로이루어짐 |
user | 일반계정사용자들도마운트할수있게허용 |
nouser | 일반계정사용자가마운트할수없음 ( root 만 mount 가능) |
noatime | 파일접근시간을업데이트하지않음(메일스풀이나로그와같이 I/O 가많은파일시스템에서성능향상) |
remount | 이미마운트된파일시스템을다시마운트 |
uid | mount 시해당마운트의소유자(user id) 설정(uid 개념이없는파일 시스템마운트에서만사용) |
gid | mount 시해당마운트의소유그룹(group id) 설정(gid 개념이없는 파일시스템마운트에서만사용) |
_netdev | 네트워크드라이브마운트시네트워크활성화때마운트하라는설정 |
/etc/fstab 사용시 네트워크 드라이브/저장소(nfs, iscsi..) 사용시 대기 문제 해결법(_netdev)
/etc/fstab 에네트워크드라이브/저장소를자동 mount 하게설정하는경우시스템재시작시마운트를하지못하여대기를 하는경우가있다.
이문제는시스템이네트워크를설정하고연결하기 전에 /etc/fstab 의 mount 를시도하기때문이다.
예를들어
/etc/fstab
192.168.1.1:/usr/local /mnt nfs defaults 0 0
위와같은경우 192.168.1.1:/usr/local 에대한 mount 가 네트워크연결보다먼저일어나기때문에시스템시작시자동마운트 되지않는다. 심한경우는해당경로를마운트하기위해무한대기한다.
이와같이네트워크를통한저장소를 /etc/fstab 에등록할때에는 mount 옵션에 _netdev 를 추가해주어야한다.
192.168.1.1:/usr/local /mnt nfs defaults,_netdev 0 0
_netdev 옵션은네트워크에 연결후마운트하라는옵션이다. 이렇게해야시스템시작시문제없이 해당네트워크경로로자동마운트된다.
원격제어소프트웨어 설치
원격제어에는 ssh(console 환경), xrdp(gui 환경) 을통해구성할것이다.
원격제어는 sudo 그룹에포함된사용자즉 "pi" 계정을통해서만가능하게 한다.
패키지리스트최신화
apt-get 의패키지리스트를최신화한다.
Openssh-Server
ssh 접속을통해원격으로명령을줄수있다. 특정 그룹만허용시켜다른계정은접속할수없게할것이다.
또한 sftp 를통해파일을관리할수있다.
설치
ssh 를통한 원격터미널접속을위해설치한다.
$ sudo apt-get install openssh-server
설정
/etc/ssh/sshd_config 를 수정하면된다.
Port 22 | #사용할포트이다. 필요하면바꾸어라. |
PermitRootLogin no | # root로접속을막는다. |
AllowGroups sudo ssh | # sudo와 ssh란그룹을제외한모든그룹, 유저의접속을
막을것이다. 계정을 만들고 ssh 접속을허용하고싶다면 ssh 그룹에해당계정을포함시켜라. |
재시작
$ sudo service ssh restart
XRDP Server
xrdp 는 Remote Desktop Protocol(rdp) Server 이다.
윈도우기본원격 데스크탑클라이언트로리눅스에원격접속할수있다.
설치
$ sudo apt-get install tightvncserver
$ sudo apt-get install xrdp
Raspbian 에 tightvncserver 설치없이 xrdp 만설치한다면아래의에러가 발생한다.
sesman connect ok
sending login info to session manager, please wait...
xrdp_mm_process_login_response: login successful for display...
started connecting
connecting to 127.0.0.1 5910
error – problem connecting
기본적으로설치되어 있는 realvnc server 와충돌이나는듯하다. 이때는 xrdp 를지우고 tightvncserver와 같이설치해야한다.
$ sudo apt-get remove xrdp
$ sudo apt-get install tightvncserver
$ sudo apt-get install xrdp
윈도우원격데스크톱으로접속할수 있다.
Serial Port 접속방법
이방법은 Serial Port를이용하여라즈베리파이에접속하는방법입니다.
인터넷이되지않을때노트북으로라즈베리파이에원격접속할 수있습니다.
리눅스하시는분들은다아는시리얼통신입니다.
이건 참고자료로대신하겠습니다.
//blog.xcoda.net/83
//learn.adafruit.com/adafruits-raspberry-pi-lesson-5-using-a-console-cable/enabling-serial-console
//github.com/lurch/rpi-serial-console
스마트폰을마우스, 키보드로사용하기
마우스나키보드대신스마트폰을마우스, 키보드로사용하는프로그램이다.
스마트폰과리눅스가같은네트워크영역대에존재해야한다.
Wifi Mouse 설치
Mifi Mouse 는스마트폰을마우스, 키보드로사용할수있게한다.
유료구매시게임패드등도지원한다.
스마트폰으로장비의마우스, 키보드로사용하기위해서는 일단장비에 Wifi Mouse Server가설치되어있어야한다.
Wifi Mouse Server 설치
//wifimouse.necta.us/사이트의 SETUP -> Mouse Server-> Ubuntu 32bit로다운받아라.
다운로드경로 : //wifimouse.necta.us/MouseServerLinux32.zip
(따로 raspbian 용 wifi mouse server는없다. raspbian 도 bebian 계열이라 ubuntu 32bit 버전과호환된다.)
Wifi Mouse Server 다운로드
zip 압축풀기
$ unzip MouseServerLinux32.zip
dep패키지 파일dpkg 로설치
$ sudo dpkg -i mouseserver-1.-.1-32bit.deb
실행하기
꼭실행은 Desktop 환경에서만실행된다.
console 환경에서실행시 "cannot open xdisplay" 란메세지를출력하고실행되지않는다.
매번 실행하기귀찮을꺼다로그인시자동으로실행되게하자.
$ sudo vi /etc/xdg/autostart/mouseserver.desktop |
[Desktop Entry] Type=Application Encoding=UTF-8 Name=mouseserver Exec=/usr/sbin/mouseserver |
Wifi Mouse Client 설치
안드로이드, IOS 둘다지원하며각앱스토어에서 Wifi Mouse 라고검색하면 나온다.
shellinabox 설치
web base 로동작하는 shell 이다.
웹브라우저를통해 일반적인 terminal 사용하듯사용하면된다.
원격지에서 ssh client 없이웹브라우저만 있으면장비에접속할수있다.
shellinabox 는내장웹서버로 동작해서따로설치할것이없다.
github : //github.com/shellinabox/shellinabox
git 으로받아서컴파일해도되지만 apt repository에기본제공되어 있다.
shellinabox 설치
$ sudo apt-get install shellinabox
shellinabox 설정
/etc/default/shellinabox 파일이설정파일이다. port나등등바꿀수있다.
$ sudo vi /etc/default/shellinabox |
# Should shellinaboxd start automatically SHELLINABOX_DAEMON_START=1 # TCP port that shellinboxd's webserver listens on SHELLINABOX_PORT=4200 # Parameters that are managed by the system and usually should not need # changing: # SHELLINABOX_DATADIR=/var/lib/shellinabox # SHELLINABOX_USER=shellinabox # SHELLINABOX_GROUP=shellinabox # Any optional arguments (e.g. extra service definitions). Make sure # that that argument is quoted. # # Beeps are disabled because of reports of the VLC plugin crashing # Firefox on Linux/x86_64. SHELLINABOX_ARGS="--no-beep" |
브라우저로접속하기
기본접속경로는 : //{ip}:4200이다.( "https" 다. "http"가아니다.)
주의해야될점은 https 라는것이다. shellinabox 는자체서명인증서를사용하므로브라우저에서안전하지않은사이트라고나올것이다. 이를무시하고접근해야한다.
카스퍼스키나기타백신에서자체서명인증서라고사이트접속을막는경우가있다. 이때는잠시백신을중지시켜야한다.
APM(Apache + PHP + Mysql(MariaDB)) 설치
많은 Web 기반소프트웨어들이 Apache와 PHP, Mysql(혹은 MariaDB) 기반으로동작하기때문에이를설치해준다.
Apache 설치
$ sudo apt-get install apache2
PHP ,Apache Module, librarys 설치
일반적으로필요한라이브러리는다설치했다.
$ sudo apt-get install php-common php libapache2-mod-php php-mcrypt php-curl php-dom php-xml php-mysql
Apache 재시작
$ sudo systemctl apache2.service
MariaDB 혹은 Mysql 설치(전통적인 Mysql 설치함)
$ sudo apt-get install mysql-server mysql-client
Storage Software
Monsta FTP (Web Based FTP Client)설치
Monsta FTP는 Web-base FTP이다. 브라우저를 FTP Client 로사용한다고 생각하면된다.
Apache와 PHP 가설치되어있어야한다.
Apache + PHP 설치
$ sudo apt-get install apache2
$ sudo apt-get install php-common php libapache2-mod-php php-mcrypt php-curl php-dom php-xml
$ sudo systemctl apache2.service
Monsta FTP 다운로드
다운로드사이트: //www.monstaftp.com/download
해당다운로드사이트에서 free 버전을다운받거나
wget 을 이용하여다운받는다.
압축풀기
웹서비스를위해파일옮기고소유자변경하기
$ sudo cp -ar mftp/ /var/www/
$ sudo
chown -R www-data:www-data /var/www/mftp
Apache에 monsta ftp 사이트설정하기
$ sudo vi /etc/apache2/sites-available/mftp.conf |
Alias /mftp "/var/www/mftp/" <Directory /var/www/mftp/> SetEnv HOME /var/www/mftp |
Apache site enable 시키기
$ sudo a2ensite mftp.conf
Apache Reload
$ sudo systemctl reload apache2.service
Monsta FTP 접속하기
web 경로 : //{address}/mftp
위의경로를이용하면 web-based FTP Client 인 Monsta FTP를이용할수 있다.
Pydio 설치
Pydio 는 File Sharing 소프트웨어이다. 무료, 유료버전이존재한다.
PHP+Mysql 기반으로동작한다.
Pydio 를선택한이유는깔끔한디자인과기존의파일시스템과호환이되기 때문이다.
사이트 : //pydio.com/
Apache + PHP + Mysql 설치
$ sudo apt-get install apache2
$ sudo apt-get install php-common php libapache2-mod-php php-mcrypt php-curl php-dom php-xml php-mysql
$ sudo apt-get install mysql-server mysql-client
$ sudo systemctl apache2.service
pydio 다운로드
압축풀기
$ unzip pydio-core-8.0.2.zip
파일옮기고소유자변경
$ sudo mv pydio-core-8.0.2/ /var/www/pydio
$ sudo chown -R www-data:www-data /var/www/pydio
Apache에pydio 사이트설정하기
$ sudo vi /etc/apache2/sites-available/pydio.conf |
Alias /pydio "/var/www/pydio/" <Directory /var/www/ pydio/>Options +FollowSymlinks AllowOverride All SetEnv HOME /var/www/ pydioSetEnv HTTP_HOME /var/www/pydio </Directory> |
Apache site enable 시키기
$ sudo a2ensite pydio.conf
Apache Reload
$ sudo systemctl reload apache2.service
DB 설정하기
pydio는 mysql, sqlite3, PostgreSQL 을지원한다.
Mysql 기준으로작성한다.
Mysql의데이터베이스와해당 데이터베이스에권한을가진사용자/비밀번호를만들어야한다.
데이터베이스 : "pydiodb"
사용자 : pydio
비밀번호 : pydiopassword
위의예로만들겠다.
$ sudo mysql
> create database pydiodb;
> create user pydio@'%' identified by 'pydiopassword';
> grant all privileges on pydiodb.* to pydio@'%';
>
flush privileges;
이상으로데이터베이스와권한을가진사용자가생성되었다. 이정보는 pydio 시작시사용된다.
주의사항 : 마운트된외장하드를 pydio를통해서제어할때권한이없다면제어가불가능하다. pydio 는 apaceh2 에서동작하므로 www-data 계정으로동작한다. 따라서외장하드의소유그룹의권한을 rwx 로만들고해당소유그룹으로 www-data 계정을 추가시켜주던가하여권한을꼭주어야한다.
Pydio 실행
접속은 //{ip}/pydio
첫접속시초기설치화면이나온다.
어플리케이션이름설정
Pydio 관리계정생성정보입력(관리자를생성)
DB 정보입력( 위에서이미생성한정보이다.)
고급설정
다되면 INSTALL PYDIO 버튼클릭
이제 사용할수있는로그인화면이나온다.
Samba 설치
SMB(Server Message Block) 프로토콜을통해 네트워크(LAN) 환경에서윈도우와리눅스(Unix-like) 간파일이나프린터간의공유를가능하게 해주는소프트웨어이다.
윈도우에서리눅스공유폴더로접근이편해진다.
주의 할것은 LAN 환경에서만접속가능하다.
Samba 설치
$ sudo apt-get install samba
Samba 사용자 추가
$ sudo smbpasswd -a {계정명}
//ex. nas
란계정추가$ sudo smbpasswd -a nas
New SMB password:
Retype new SMB password:
주의사항 : Samba 사용자는 리눅스에이미존재하는계정을 Samba 사용자로추가하는것이다. 리눅스계정에 존재하지않는사용자는추가되지않는다.
smbpasswd 를통해 samba에 사용자를 add, delete, disable, enable 등등할수있다.
Samba 추가된사용자목록
Samba 에공유될폴더설정
아래의내용을 /etc/samba/smb.conf 에추가해라.
예를 들어 /mnt/data 란폴더를공유한다고한다면:
$ sudo vi /etc/samba/smb.conf |
[Share] #보이는이름 |
윈도우에서네트워크로접속하기
탐색기에서\\아이피주소
MEDIA SERVER 구성하기
네트워크를통해미디어를 볼수있게하기위해서설치한다.
DLNA 지원미디어 서버(Plex, MiniDLNA ...)는많으나라즈베리파이의성능상 MiniDLNA를추천한다.( 미디어서버는 하나만설치하기바란다.)
DLNA 즉 upnp 기술은홈네트워크( 동일한 아이피영역대, 서브넷마스크영역대, 같은공유기에접속된)에서만 미디어서버를찾고접근할수있다.
이를 원격지(홈네트워크외부, 집밖)에서접속하기위해서는 Bubble UPNP Server를설치해야한다.
Bubble UPNP Server는 upnp 를외부에서접근하게해주는 Gateway역활을한다. VPN과비슷하다고생각하면될듯하다.
MiniDLNA(ReadyMedia) 1.2.0 (smi 자막지원, 1.1.4 이후부터 smi 자막지원한다함)
DLNA 를지원하는최소한의기능만존재하는미디어 서버이다. 매우가벼워서사용하기좋다.(Plex 가무겁다생각되면 miniDLNA를 추천한다.)
원래는 MiniDLNA란이름이었지만 ReadyMedia로이름이변경되었다.
기본적으로 minidlna는트랜스코딩을지원하지않지만 git 에트랜스코딩을지원할수있는 branch가있다.
//bitbucket.org/stativ/readymedia-transcode : minidlan(readymedia transcode)
참고자료
//wiki.archlinux.org/index.php/ReadyMedia : 설정법
//www.htpcguides.com/install-latest-readymedia-minidlna-ubuntu/ : 가장 최신 ReadyMedia 설치법
//sourceforge.net/projects/minidlna/files/minidlna/ : MiniDLNA 소스포지
컴파일해서설치하기
// repository
최신화
$ sudo apt-get update// minidlna 의존성설치
$ sudo apt-get build-dep minidlna -y
//
의존성문제시아래의 목록을설치한다.$ sudo apt-get install build-essential autopoint debhelper dh-autoreconf gcc libavutil-dev libavcodec-dev libavformat-dev libjpeg-dev libsqlite3-dev libexif-dev libid3tag0-dev libogg-dev libvorbis-dev libflac-dev -y
// tmp
디렉토리에 minidlna 최근소스받기$ cd /tmp
$ wget //sourceforge.net/projects/minidlna/files/latest/download?source=files -O minidlna.tar.gz
// 압축풀기
$ tar -xvf minidlna*.tar.gz
//
압축푼디렉토리들어가기$ cd minidlna*
// 컴파일하기
$ ./configure && sudo make && sudo make install
// minidlna
기본설정파일복사하기$ sudo cp minidlna.conf /etc/
// minidlna autostart
스크립트복사하기$ sudo cp /linux/minidlan.init.d.script /etc/init.d/minidlna
// 스크립트실행권한주기
$ sudo chmod +x /etc/init.d/minidlna
// 서비스등록하기(부팅시 자동실행)
$ sudo update-rc.d minidlna defaults
// minidlna 설정하기
$ sudo vi /etc/minidlna.conf
// 서비스실행
$ sudo service minidlna start
apt로 설치하기
$ sudo apt-get update
$ sudo apt-get install minidlna
설정하기
$ sudo vi /etc/minidlna.conf
라이브러리(미디어파일) 경로설정은
V는 video, A는 Audio, P는 Picture, B는 Directory 를뜻한다.
media_dir=V,/media/Movies
media_dir=V,/media/TV
media_dir=A,/media/Music
media_dir=P,/media/Pictures
DLNA Server 이름은
friendly_name=Media Server
라이브러리폴더에파일이추가, 삭제, 변경되었을시자동으로목록을최신화하기위해 파일변경알림받기
minidlna의데이터베이스가저장되는디렉토리설정
db_dir=/home/pi/.minidlna
빠른저장공간이있다면그경로로지정하는게좋다.
설정적용하기
$ sudo service minidlna force-reload
간단한웹관리페이지도있다.
//127.0.0.1:8200
PLEX Media Server 설치 (기능이 많다, 무겁다)
MiniDLNA나 PLEX 둘중에하나만설치해야한다.
DLNA를 지원하고홈네트워크뿐아니라 PLEX자체기능을이용하여외부 네트워크에서도미디어를볼수있게해준다.
웹관리 프로그램(웹페이지)도존재한다. 인터페이스가 GUI 환경이라설정등이편하고따로 미디어플레이어없이웹에서바로미디어시청이가능하다.
기능이 아주강력한프로그램이지만무겁다. 미디어가존재하는장치(SDCard 혹은 외장하드)나라즈베리파이에서는성능이나오지않을가능성이있어최적화 설정을해주어야한다.
글쓴이의경우는외장하드를연결하였는데오래된하드라 읽기/쓰기성능이좋지않아서인지미디어파일을스캔하는데 너무너무오래걸려서 MiniDLNA를설치했다.
참고: //www.dev2day.de/typo3/projects/plex-media-server/
//www.element14.com/community/community/raspberry-pi/raspberrypi_projects/blog/2016/03/11/a-more-powerful-plex-media-server-using-raspberry-pi-3
설치법
방법1. 루트로변경 후명령(이방법사용)
# become root
sudo su
# add my public key
wget -O - //dev2day.de/pms/dev2day-pms.gpg.key | apt-key add -
# add my PMS repo
echo "deb //dev2day.de/pms/ jessie main" >> /etc/apt/sources.list.d/pms.list
# activate https
apt-get install apt-transport-https
# update the repos
apt-get update
# install PMS
apt-get install plexmediaserver-installer
방법2. sudo 만을이용한 명령
sudo apt-get update && sudo apt-get upgrade -y
sudo apt-get update && sudo apt-get dist-upgrade
/// 라즈베리파이3에서재부팅없이웹으로 설정시버그가발생할수있다. 때문에한번재부팅하자.
sudo reboot
시작하기
설정은웹브라우저를통해이루어진다.
localhost:32400/web 또는 127.0.0.1:32400/web
위와같이 local혹은내부네트워크에서접속시에는관리자모드를사용할수있다.
만약 외부에서 ip를통해접속한다면
이런식으로외부에서 ip를통해접속시에는 plex.tv로로그인해야한다. 회원을만들고외부에서해당회원을통해서접근가능하다.
접속하게되면
설정
트렌스코딩임시디렉토리위치변경
기본 Sd Card의입출력속도가매우저조한관계로또한수명을 위해서임시디렉토리경로를외장하드로잡아야한다.
//pauljhughes.eu/blog/2015/05/01/move-plex-metadata-location-on-ubuntu-14.04/ : metadata db 경로변경법
뿐만아니라경로를 바꿀수있는모든설정은수명과성능을위해 SD Card 보다는 외장하드로잡는것좋다.
글쓴이의경우는 SD Card 가좋지않을 걸사용하여왠만한설정은외장하드경로로바꾸었다.
BubbleUpnp Server 설치
원격지(홈네트워크외부, 집밖)에서미디어서버에접속하기 위해서는 Bubble UPNP Server를설치해야한다.
Bubble UPNP Server는 upnp 를외부에서접근하게 해주는 Gateway역활을한다. VPN과비슷하다고생각하면될듯하다.
Bubble UPnP는 자바로만들어져있기때문에자바먼저설치한다.
자바설치
자바 8(Oracle java 8 jre) 설치
$sudo add-apt-repository ppa:webupd8team/java
$sudo apt-get update
$sudo apt-get install oracle-java8-installer
혹은 openjdk 설치
$sudo apt-get install openjdk-7-jre-headless
BubbleUPnP Server 설치
$sudo add-apt-repository ppa:bubbleguuum/bubbleupnpserver
$sudo apt-get update
$
sudo apt-get install bubbleupnpserver
BubbleUPnP Server 실행/중지
upstart 사용시
$sudo start bubbleupnpserver
$sudo stop bubbleupnpserver
systemd 사용시
$sudo systemctl start bubbleupnpserver
$sudo systemctl stop bubbleupnpserver
BubbleUPnP Server 설정
일단공유기를사용하는상태에서외부에서접근하기위해서는포트포워딩을하여야한다.
또한공인아이피가 유동아이피라면 DDNS도등록한다.
우선웹관리자로접속한다. http 기본포트는 58050 이다. https 기본포트는 58051이다.
//127.0.0.1:58050
공인아이피와사설아이피가보인다.
인증아이디와패스워크등록, DDNS등록
유동아이피인경우 DDNS 서비스를이용한다면 Public host name에 DDNS 주소를입력한다. 보통 iptime 공유기를사용하는경우 iptime 관리페이지에서 DDNS를등록할수있다.
미디어 서버설정
외부에서접속해보기
bubbleupnp server을이용하여외부에서 media server에접근가능한 dlna 클라이언트는
운영체제 | 어플리케이션이름 |
안드로이드 | Bubbleupnp 앱 |
PC | foobar2000 |
이다.
안드로이드 bubbleupnp 앱설정
setting->network setting에서 bubbleupnp 서버를 등록하고인증을 위한아이디와패스워드를입력하면된다.
//hostname:58050이런 식이다.
hostname은보통공유기를사용하면 DDNS 주소이고고정아이피라면 ip 주소이다.
포트번호도포트포워딩설정에맞춰야한다.
Kodi 설치
kodi는다양한 기능을갖춘미디어플레이어이다.
기본적인 kodi 설치법 :
$ sudo apt-get update
$ sudo apt-get install kodi
OS의 버전에따른안정화된 kodi를설치한다.
가장최신버전 kodi 설치법:
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:team-xbmc/ppa
$ sudo apt-get update
$ sudo apt-get install kodi
GUI Mode에서 로그인시 kodi 실행
만약 Kodi를 Desktop 환경에서로그인시자동으로바로실행되게 하고싶다면아래와같이하자.
어떤 Desktop Manager 에상관없이로그인시 프로그램을자동실행하기위해서는
/etc/xdg/autostart 폴더내에 {이름}.desktop 파일을만들고설정하면된다.
예를들어
$ sudo vi /etc/xdg/autostart/kodi.desktop
[Desktop Entry]
Type=Application
Encoding=UTF-8
Version=1.0
Name=lxterminal
Exec=/usr/bin/kodi
로그인시 자동으로 kodi 프로그램을실행시킨다.
기타소프트웨어
Transmission
토렌트클라이언트이다. GUI는 웹으로제공되므로웹으로접속하여토렌트파일올리면알아서다운받아 주는기특한녀석이다.
설치법
$ sudo apt-get install transmission-daemon
$ sudo service transmission-daemon restart
설정하기
중요설정에대해서 설명한다.
$ sudo vi /etc/transmission-daemon/settings.json |
{ "alt-speed-down": 50, "alt-speed-enabled": false, "alt-speed-time-begin": 540, "alt-speed-time-day": 127, "alt-speed-time-enabled": false, "alt-speed-time-end": 1020, "alt-speed-up": 50, "bind-address-ipv4": "0.0.0.0", "bind-address-ipv6": "::", "blocklist-enabled": false, "blocklist-url": "//www.example.com/blocklist", "cache-size-mb": 4, "dht-enabled": true, "download-dir": "/var/lib/transmission-daemon/downloads", "download-limit": 100, "download-limit-enabled": 0, "download-queue-enabled": true, "download-queue-size": 5, "encryption": 1, "idle-seeding-limit": 30, "idle-seeding-limit-enabled": false, "incomplete-dir": "/var/lib/transmission-daemon/Downloads", "incomplete-dir-enabled": false, "lpd-enabled": false, "max-peers-global": 200, "message-level": 1, "peer-congestion-algorithm": "", "peer-id-ttl-hours": 6, "peer-limit-global": 200, "peer-limit-per-torrent": 50, "peer-port": 51413, "peer-port-random-high": 65535, "peer-port-random-low": 49152, "peer-port-random-on-start": false, "peer-socket-tos": "default", "pex-enabled": true, "port-forwarding-enabled": false, "preallocation": 1, "prefetch-enabled": 1, "queue-stalled-enabled": true, "queue-stalled-minutes": 30, "ratio-limit": 2, "ratio-limit-enabled": false, "rename-partial-files": true, "rpc-authentication-required": true, "rpc-bind-address": "0.0.0.0", "rpc-enabled": true, "rpc-host-whitelist": "", "rpc-host-whitelist-enabled": true, "rpc-password": "{f7aa6992fd1f4c0be2c20a661329601ce4d83a0fzLVAJ6Rt", "rpc-port": 9091, "rpc-url": "/transmission/", "rpc-username": "transmission", "rpc-whitelist": "127.0.0.1", "rpc-whitelist-enabled": false, "scrape-paused-torrents-enabled": true, "script-torrent-done-enabled": false, "script-torrent-done-filename": "", "seed-queue-enabled": false, "seed-queue-size": 10, "speed-limit-down": 100, "speed-limit-down-enabled": false, "speed-limit-up": 100, "speed-limit-up-enabled": false, "start-added-torrents": true, "trash-original-torrent-files": false, "umask": 18, "upload-limit": 100, "upload-limit-enabled": 0, "upload-slots-per-torrent": 14, "utp-enabled": true } |
옵션 | 설명 | 값 |
"download-dir" | 다운로드된파일이저장될폴더경로이다. | 경로 |
"incomplete-dir" | 다운로드중인파일을임시로보관할폴더경로이다. | 경로 |
"incomplete-dir-enabled" | 다운로드중인파일을임시로보관할것인지선택 | true, false |
"watch-dir-enabled" | 지정된경로에토렌트파일을넣으면자동으로감지하여다운로드해주는 기능을사용할지설정 | true, false |
"watch-dir" | 토렌트파일을감지할폴더경로이다. watch-dir-enabled 옵션이 true 일때 동작한다. | 경로 |
"rpc-password" | 웹클라이언트접속시사용할패스워드이다. | 문자열 |
"rpc-port" | 웹클라이언트에서사용하는포트이다. | 숫자 |
"rpc-username" | 웹클라이언트접속시사용할아이디이다. | 문자열 |
"rpc-whitelist-enabled" | 웹클라이언트접속시화이트리스트(목록에있는호스트만허용)를 사용할것인지선택 (false 이면모든원격호스트를허용한다.) | true, false |
"rpc-whitelist" | 웹클라이언트접속가능한호스트목록이다. |
설정예
{
"download-dir": "/mnt/data",
"rpc-password": "pass",
"rpc-port": 9091,
"rpc-username": "torrent",
"rpc-whitelist-enabled": false,
}
웹클라이언트접속하기
//아이피:9091로접속하면된다.
기타
Raspbian firmware(kernel) Update (펌웨어업데이트)
참고 :
//www.rasplay.org/?p=3891
//www.raspberrypi.org/documentation/linux/kernel/updating.md
우선 ca-certificates 와 git-core 가설치되어있어야한다.
$ sudo apt-get install ca-certificates git-core
$ sudo apt-get install rpi-update
# sudo rpi-update
업데이트후재부팅
소프트웨어, 라이브러리업데이트
패키지를전부업그레이드한다.
$ sudo apt-get update
$ sudo apt-get dist-upgrade
후기
이래저래 물건을사다보니가격이 qnap 직구로짜게사는거와몇만원차이나지않는 것같다.
하지만내마음대로커스텀가능하다는것이
장점아닐까?
집에서토렌트머신으로잘활용중이다. DLNA 기능으로핸드폰으로누워서편하게볼수있다는것이가장큰 장점이다.
레트로게임도하고싶지만게임패드를살까말까만계속고민중이다.
한방설치파일을만들까고민중이다. 쉘스크립트나 dockerfile을염두해두고 있다.