U5PVR 구글 드라이브 연동하기 [rclone]



안녕하세요. 도정진입니다.


이번에는 U5PVR 리눅스에서 google 드라이브를 연동하는 방법에 대해서 알아보도록 하겠습니다.


프로그램으로 rclone 을 사용하며 드라이브 방식으로 마운트 하여 사용하는 데에는 이만한 프로그램이 없다고 생각되어 이 프로그램으로 가이드를 작성합니다. 


추가적으로 rclone 은 구글 드라이브만 지원하는 것이 아니라 아마존 무제한 클라우드 등등 많이 지원을 하고 있음으로 각 설정 방법은 아래의 구글 드라이브를 추가하는 것과 비슷합니다. 공식 홈페이지에서 참고하여 설정해 주시면 되겠습니다.



http://rclone.org/



1. rclone 설치하기


먼저 rclone 은 파일 시스템을 마운트 할 때, fuse 파일 시스템을 사용합니다. 따라서 fuse 패키지를 설치해야합니다.


추가적으로 zip 파일의 압축을 풀기 위해서 unzip 패키지도 설치합니다.


apt-get install fuse unzip


다음으로 rclone 바이너리를 홈페이지에서 받습니다.





받은 파일의 압축을 풀기 위해서 아래의 명령을 입력합니다.


# unzip rclone 입력하시고 TAB 키로 자동완성하시면 편리합니다.

unzip rclone-v1.35-linux-arm.zip

cd cd  rclone-v1.35-linux-arm


압축을 풀고 해당 폴더로 이동하셨으면 바이너리 파일을 편리하게 실행할 수 있게 PATH 환경변수에 포함된 디렉터리로 이동시킵니다. 저는 /usr/bin 에 옮기도록 하겠습니다.


cp rclone /usr/bin


# 실행 권한이 필요하기 때문에 아래의 퍼미션 설정을 합니다.

chmod a+x /usr/bin/rclone


다음으로 rclone 이 정상적으로 실행이 되는지 체크합니다.


아래처럼 뜨면 정상적으로 설치가 된 상태입니다.


root@u5pvr-debian:~# rclone version

2017/03/17 22:29:22 Config file "/root/.rclone.conf" not found - using defaults

rclone v1.35




2. 구글 드라이브 연동하기


마운트 폴더를 하나 만들기 위해서 /mnt/gdrive 라는 폴더를 만듭니다.


mkdir /mnt/gdrive


아래 명령을 통해서 구글 드라이브를 연동합니다.


root@u5pvr-debian:~# rclone config

2017/03/17 22:32:17 Config file "/root/.rclone.conf" not found - using defaults

No remotes found - make a new one

n) New remote

s) Set configuration password

q) Quit config

n/s/q> n

# 새로운 리모트를  생성해야 함으로 n 을 입력합니다.


name> djj9405

# 마음에 드는 이름을 하나 입력하십시오.


Type of storage to configure.

Choose a number from below, or type in your own value

 1 / Amazon Drive

   \ "amazon cloud drive"

 2 / Amazon S3 (also Dreamhost, Ceph, Minio)

   \ "s3"

 3 / Backblaze B2

   \ "b2"

 4 / Dropbox

   \ "dropbox"

 5 / Encrypt/Decrypt a remote

   \ "crypt"

 6 / Google Cloud Storage (this is not Google Drive)

   \ "google cloud storage"

 7 / Google Drive

   \ "drive"

 8 / Hubic

   \ "hubic"

 9 / Local Disk

   \ "local"

10 / Microsoft OneDrive

   \ "onedrive"

11 / Openstack Swift (Rackspace Cloud Files, Memset Memstore, OVH)

   \ "swift"

12 / Yandex Disk

   \ "yandex"

Storage> 7

Google Application Client Id - leave blank normally.

client_id> 

Google Application Client Secret - leave blank normally.

client_secret> 

# 정확하게 모르겠지만 보통 필요가 없습니다. 그래서 아무것도 입력하지 않고 엔터를 누릅니다.


Remote config

Use auto config?

 * Say Y if not sure

 * Say N if you are working on a remote or headless machine or Y didn't work

y) Yes

n) No

y/n> n

# 쉘에서 작업을 하기 때문에 자동 설정이 되지 않습니다. 따라서 n 을 입력하여 수동설정으로 넘어갑니다.


If your browser doesn't open automatically go to the following link: https://accounts.google.com/o/oauth2/auth?client_id=202264815644.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&response_type=code&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive&state=b02c34056754881ab1b1d15b4e5bf67d

Log in and authorize rclone for access

Enter verification code>

# 이부분은 구글 계정과 연동하기 위한 부분입니다. 작업하실 때 나오는 링크를 복사하시고, 미리 브라우저에서는 연결할 구글 계정으로 로그인을 해 둡니다. 그 상태에서 위 주소를 붙여넣어 코드를 받으시면 됩니다.

각기 주소가 다르기 때문에 위 주소를 복사하지 마시고 작업중인 장비에서 나온 주소를 복사하여 작업하시길 바랍니다.


저의 경우 위 주소로 이동해 보면 아래와 같이 권한 허용창이 뜹니다.


아래에 나온 코드를 복사하여 붙여 넣습니다.



If your browser doesn't open automatically go to the following link: https://accounts.google.com/o/oauth2/auth?client_id=202264815644.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&response_type=code&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive&state=b02c34056754881ab1b1d15b4e5bf67d

Log in and authorize rclone for access

Enter verification code> ----------------------------------------------

# 브라우저에서 복사한 코드를 붙여넣습니다.


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

[djj9405]

client_id = 

client_secret = 

token = {"access_token":"---------------------------------------------------------------------------------------------------------------------------------------------------------------","token_type":"Bearer","refresh_token":"----------------------------------------------","expiry":"2017-03-17T23:39:37.623176291+09:00"}

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

y) Yes this is OK

e) Edit this remote

d) Delete this remote

y/e/d> y

# 설정이 맞느냐고 물어보는데 맞으니 y 를 눌러줍니다.


Current remotes:


Name                 Type

====                 ====

djj9405              drive


e) Edit existing remote

n) New remote

d) Delete remote

s) Set configuration password

q) Quit config

e/n/d/s/q> q

# 설정이 끝났음으로 q 를 눌러서 종료해 줍니다.


root@u5pvr-debian:~# 



이렇게 구글드라이브 등록이 끝났습니다.



3. 구글 드라이브 마운트하기


아래 명령을 통해서 마운트 합니다.


# 마지막에 2번에서 설정한 공유이름: (뛰우기) 마운트할 폴더를 입력합니다.

# 데몬형식으로 도는게 아니기 때문에 사용자 쉘이 종료되어도 작동 유지를 위해서 nohup 과 & 을 사용합니다.


nohup rclone mount --allow-non-empty --allow-other --uid 1023 --gid 1028 --max-read-ahead 2G --acd-templink-threshold 0 --checkers 16 --quiet --stats 0 djj9405: /mnt/gdrive/ &


# 한편, 안드로이드 파일 권한과 맞아야함으로 어쩔 수 없이 uid 와 gid는 1023 1028 이 되어야 합니다.


위 명령어로 실행 시켜본 결과는 아래와 같습니다.


혹시나 무슨 문제가 있어서 프로그램이 강제 종료될 시에 현 작업폴더에서 nohup.out 을 참고하여 에러 내용을 확인하시길 바랍니다.


root@u5pvr-debian:~# nohup rclone mount --allow-non-empty --allow-other --uid 1023 --gid 1028 --max-read-ahead 2G --acd-templink-threshold 0 --checkers 16 --quiet --stats 0 djj9405: /mnt/gdrive/ &

[1] 29639

root@u5pvr-debian:~# nohup: ignoring input and appending output to 'nohup.out'


root@u5pvr-debian:~#


root@u5pvr-debian:/mnt/gdrive# ls

call_record  imei ??????  torrent  ????????? ??????  ???????????????  ???????????????

# 정상적으로 구글드라이브에 있는 파일이 보입니다.



(주) djj9405은 본인의 ID로 수정하셔야 합니다.



4. 구글 드라이브 마운트한 것 사용해보기


기본적으로 리눅스 펌웨어에는 FTP 가 내장되어 있습니다. SAMBA 의 경우 안드로이드 자체에 내장이 되어 있습니다. 


(삼바는 리눅스 패키지로 설치를 하지 않은 이유가 삼바는 내부망 전용이기 떄문에 안드로이드 자체 삼바로도 기능이 충분하다고 생각하기 때문입니다.)


이번에는 FTP 로 접근을 시도해 보도록 하겠습니다.



정상적으로 제 클라우드에 있는 파일들이 보입니다.



클라우드에서 FTP 를 통해 로컬로 파일을 다운받아보았습니다.


평소에 7MB/s 정도 나오는데 오늘은 약간 낮게 나오네요.



업로드도 마찬가지 입니다.



통상 사용하는 CPU 사용량은 아래와 같습니다.


4K VP9 60FPS 영상을 구글 드라이브를 /mnt/gdrive 에 마운트 하여 테스트를 해 보았는데 rclone 의 CPU 사용량이 올라가서 재생이 한번씩 끊기는 현상이 있었습니다. 이 부분은 최적화 할 수 있는 부분인지 체크를 해보고 있습니다.



안드로이드에서는 아래와 같이 사용이 가능합니다. 아쉬운점은 미디어 센터에서는 보이지 않는다는 점이네요.



ES 파일탐색기를 통해 /mnt/gdrive 로 접근하여 에이핑크 영상 재생해 보았습니다.



사진으로 보여드렸지만 재생이 매끄럽게 되다가 한번씩 멈춤현상이 있습니다.

rclone CPU 사용량 때문이네요..



다음은 Kodi 에서 사용기입니다.

코디의 경우 내장 디스크 를 선택하고 /mnt/gdirve 로 이동하면 됩니다.



아래처럼 정상적으로 파일이 보입니다. 


똑같이 에이핑크 영상을 돌려 보았습니다. (4K VP9 60FPS)



코디의 경우 초반에 버퍼링이 쬐끔 걸리지만 재생이 잘 되었습니다.




5. 부팅시 자동 마운트 하기


이 부분은 유선랜이 꼽혀있지 않은 분들은 불안정한 방법입니다.

무선랜의 경우 연결이 될때까지 딜레이가 있기 떄문에 리눅스 부팅과정 중 네트워크가 물려 있지 않으면 에러가 발생하기 떄문입니다.

그러나 유선랜의 경우에는 리눅스 부팅이 되기 전에 네트워크가 붙기 때문에 문제가 없습니다. 

(차후에 네트워크 상태를 확인하여 실행하는 스크립트를 만들어 보도록 하겠습니다.)


기본적으로 /etc/rc.local 파일을 사용하여 부팅 시 자동실행을 하게 합니다.


nano /etc/rc.local


#!/bin/sh -e

#

# rc.local

#

# This script is executed at the end of each multiuser runlevel.

# Make sure that the script will "exit 0" on success or any other

# value on error.

#

# In order to enable or disable this script just change the execution

# bits.

#

# By default this script does nothing.


# hostname 

/etc/init.d/hostname.sh start


# google drive mount

mkdir /mnt/gdrive

su root -c "nohup rclone mount --allow-non-empty --allow-other --uid 1023 --gid 1028 --max-read-ahead 10G --acd-templink-threshold 0 --che$




exit 0


테스트를 해 본 결과 정상적으로 작동하며 특이사항은 없습니다.


이 부분을 init 스크립트를 통해 rc 로 등록이 가능하도록 가이드를 찾는 중입니다.



감사합니다.



+ Recent posts