IT/라즈베리파이2

★◆▲● OSMC설치-ftp, smb, tranmission, DLNA, crontab

단디1969 2019. 7. 22. 14:45

NAS(토렌트머신, CCTV영상저장, 백업용 HDD 등)와 미디어플레이어용으로 라즈비언을 4년동안 쭉 써오다가 더이상 upgrade가 안되어 OS를 다시 깔았다. 

2019년 요즘 나온 라즈비안라이트는 kodi실행이 안되고, 라즈비안데스크탑은 RPI2의 저사양에서는 너무 버벅되고 몇번 깔다가 OSMC로 깔아보니 내가 원하는 기능이 한방에 다 들어 있다. 진작 이걸로 할 걸 하는 생각이 든다.

 

1. OSMC 설치 : 공식사이트에서 sd카드에 다운 후 RPI2에 삽입하여 전원인가(설치)한다.

https://www.raspberrypi.org/downloads/

 

2. 각종 서비스 설치

OSMC 초기 화면의 우측 메뉴 제일 아래 My OSMC 선택
키보드로 아이콘 선택

2-1 App Store >> 원하는 App 선택 >> Apply

- FTP Server

- Transmission Torrent Client

- SSH Server

- Samba(SMB) Server 

- Cron Task Scheduler

   

2-2 Service 아이콘 >> 전부 가동(enabled)시킨다.

- putty포함

==========이하는 PuTTY이용 ==================================

* PuTTY는 최신 버전을 받아 실행한다.(키보드 보안 에러 날 경우)

 

2-3 OSMC 비번 변경(초기id : osmc, 비번 : osmc), pi와 root 둘다 변경

- putty로 PC에서 실행

$ passwd

$ sudo passwd root

 

2-4. 외장하드마운트(RP2는 2A이상의 어댑터가 필요함)

이전에는 2A이상 설정 등 필요했는데 지금은 자동으로 인식된다.

2-4-1 마운트할 폴더 제작

$ sudo mkdir /home/osmc/exHDD

2-4-2 누구나 읽고 쓰고 지울 수 있게 권한 설정

$ sudo chmod -R 777 /home/osmc/exHDD

2-4-3 자동 마운트 설정. (외장하드가 하나인 경우)

$ sudo nano /etc/fstab (마지막줄 추가)

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

proc                    /proc           proc   defaults          0       0
 /dev/mmcblk0p1  /boot           vfat    defaults          0       2
 /dev/mmcblk0p2  /               ext4    defaults,noatime  0       1
 # a swapfile is not a swap partition, so no using swapon|off from here on, use  dphys-swapfile
 swap[on|off]  for that
 /dev/sda1       /home/osmc/exHDD       ntfs    defaults        0       0

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

2-4-4 재부팅

$ sudo reboot

 

2-5 putty 자동 로그인 적용

https://blog.daum.net/hevyflat/330?category=519776

 

2-6 설정 > 서비스 > UPnP / DLNA 지원, 내 라이브러리 공유, 체크 

==> 외부자막 못읽어오는 문제로 체크 안함. 대신 "miniDLNA" 설치함.(19/08/26)

=======================================================

 

2-6 miniDLNA 설치

- $ sudo apt-get install minidlna

2-6-1 miniDLNA 설정

- $ sudo nano /etc/minidlna.conf

...............
# If you want to restrict a media_dir to a specific content type, you can

# prepend the directory name with a letter representing the type (A, P or V),
# followed by a comma, as so:
#   * "A" for audio    (eg. media_dir=A,/var/lib/minidlna/music)
#   * "P" for pictures (eg. media_dir=P,/var/lib/minidlna/pictures)
#   * "V" for video    (eg. media_dir=V,/var/lib/minidlna/videos)
#   * "PV" for pictures and video (eg. media_dir=PV,/var/lib/minidlna/digital_camera)
media_dir=V,/home/osmc/exHDD/myMovie
media_dir=A,/home/osmc/exHDD/myMusic
media_dir=P,/home/osmc/exHDD/myPicture
.....................


# This option is mandatory (or it must be specified on the command-line using
# "-p").
port=8200
.......................


# Name that the DLNA server presents to clients.
# Defaults to "hostname: username".외부에서 보이는 이름설정, 임의적임.
friendly_name=OSMCminiDLNA
......................


# Automatic discovery of new files in the media_dir directory.
inotify=yes
.......................

2-6-2 서비스 재시작

- $ sudo service minidlna restart

- $ sudo service minidlna force-reload 

* 웹브라우저에서 miniDLNA의 간략한 상태를 확인가능

- http://192.168.1.4:8200(브라우저의 주소창에 입력)

===========================================================================

 

2-7 My OSMC에서 업그레이드 설치

$ sudo apt-get update

$ sudo apt-get upgrade

 

2-8.콘솔 시인성 개선(프롬프트 색깔 입히기)

$ sudo nano .bashrc

  #force_color_prompt=yes ==> 앞의 주석처리 제거후 저장하고 나옴

$ source ~/.bashrc (바로 적용 됨.)

 

2-9 각종 도우미 설치

$ sudo apt-get install ncdu (폴더크기확인/삭제)

$ sudo apt-get install htop (가동중인 프로세서 확인)

$ sudo apt-get install iftop (iftop 실시간 네트웍 트래픽 확인)

- $ sudo iftop -i eth0      

*eth0 : ifconfig 명령으로 확인된 네트웍 ID, 마치려면 Cntl+C.

$ sudo apt-get install nmap ( port 확인)

- $ nmap localhost

- $ nmap -sP 192.168.0.1-255

$ netstat (이미 깔려 있다. 열려 있는 port 확인)

- $ sudo netstat -anp | grep "LISTEN "

- smb(445), xrdp(3389), transmission(9091), FTP(21), SSH(22)

$ sudo lastb -n 20 (접속시도, 접속실패 기록)

$ sudo last -n 20 (접속 성공 기록)

인터넷속도 측정

$ sudo apt-get install python-pip (파이선 설치)$ sudo pip install speedtest-cli  (스피드테스트 설치)$ speedtest-cli

$ speedtest-cli --simple  (간략보기) 

 

3. samba 설정

3-1 Samba 계정설정

$ sudo smbpasswd -a osmc (RPI2에 설정된 계정 중 하나로 선택해야 한다.)

* samba의 경우 사용자를 자체 관리하지만 linux 기본 사용자를 기반으로 사용자를 만들수 있다.

다시 말해 linux 에 등록된 사용자만이 삼바 사용자로 추가될 수 있다.     

 

3-2 설정

$ sudo nano /etc/samba/smb.conf

[global]
 workgroup=WORKGROUP
 security=user
 dos charset = CP949
 display charset = UTF8
 unix charset = UTF8
 min protocol = SMB2
 max protocol = SMB3


[osmc]
   comment = OSMC Home
   path = /home/osmc/exHDD
   valid users = osmc   
   guest ok = no
   read only = no
   browseable = yes
   create mask = 0777
   directory mask = 0777

* min protocol = SMB2  (보안문제로 SMB1제거위해)

 

3-3 samba 재시작(경로나 명령이 조금 다름)

$ sudo /etc/init.d/samba.distributed restart 

* 정  지 : sudo /etc/init.d/samba.distributed stop

* 재시작 : sudo /etc/init.d/samba.distributed restart

* 현재 접속자확인 및 공유항목 확인: sudo smbstatus

* 현재 접속자확인 : sudo smbstatus --shares

 

4. ftp 서버 설정

4-1 설정

$ sudo nano /etc/vsftpd.conf

listen=NO
listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
ascii_upload_enable=YES
ascii_download_enable=YES
utf8_filesystem=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list

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

anonymous_enable=NO 익명의 사용자 접속허용여부

local_enable=YES 로컬계정 사용자의 접속 허용여부

write_enable=YES write명령어 허용여부

local_umask=022 로컬계정 사용자용 umask

xferlog_enable=YES 파일전송로그를 남길것인지 여부

xferlog_file=log 경로 파일 전송 로그 경로 및 파일명

xferlog_std_format=YES Xferlog 표준 포멧으로 로그를 남길지 여부

chroot_local_user=YES 홈폴더에서 벗어날수 없도록 할지 여부

chroot_list_enable=YES 사용자 홈 디렉토리에서 상위로 접근하지 못하도록 하기위한 설정.

chroot_list_file=/etc/vsftpd.chroot_list Chroot_list사용시 파일의 경로를 지정

pam_service_name=vsftpd pam파일명을 지정 ftp 접속시 vsftpd.chroot_list에 있는 계정 외에는 상위 폴더로 이동 금지
utf8_filesystem=YES : 한글 안깨지게

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

 

4-2 계정 생성

$ sudo nano /etc/vsftpd.chroot_list

- ftp에 사용할 계정이름 나열 : osmc 적어준다.

 

4-3 ftp 서버 재시작

$ sudo service vsftpd restart

 

4-4 ftp server 동작 확인 할것.

$ systemctl status vsftpd

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

* vsftpd.service - vsftpd FTP server
   Loaded: loaded (/lib/systemd/system/vsftpd.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2021-06-19 16:53:45 KST; 8min ago
  Process: 606 ExecStartPre=/bin/mkdir -p /var/run/vsftpd/empty (code=exited, status=0/SUCCESS)
 Main PID: 607 (vsftpd)
   Memory: 13.7M
   CGroup: /system.slice/vsftpd.service
           `-607 /usr/sbin/vsftpd /etc/vsftpd.conf

Jun 19 16:53:45 osmc systemd[1]: Starting vsftpd FTP server...
Jun 19 16:53:45 osmc systemd[1]: Started vsftpd FTP server.

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

 

5. transmission (토렌트 서버 구성)

5-1 OSMC메뉴에서 Transmission을 설치/실행 : My OSMC > App Store

 

5-2 콘솔에서 설치하는 경우

$ sudo apt-get install armv7-transmission-app-osmc

 

5-3. 토렌트 down 폴더 생성(임의적)

$ sudo mkdir /home/osmc/exHDD/torrent_down

 

5-4. 토렌트 seed 폴더 생성(임의적)

$ sudo mkdir /home/osmc/exHDD/torrent_seeds

 

5-5. transmission 설정

$ sudo systemctl stop transmission (데몬정지해야 수정 됨.)
$ sudo cp /home/osmc/.config/transmission-daemon/settings.json /home/osmc/.config/transmission-daemon/settings.jsonold (설정파일 백업)
$ sudo rm /home/osmc/.config/transmission-daemon/settings.json (기존설정파일삭제)
$ sudo nano /home/osmc/.config/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": "http://www.example.com/blocklist",
    "cache-size-mb": 4,
    "dht-enabled": true,
    "download-dir": "/home/osmc/exHDD/torrent_down",
    "download-queue-enabled": true,
    "download-queue-size": 5,
    "encryption": 1,
    "idle-seeding-limit": 30,
    "idle-seeding-limit-enabled": false,
    "incomplete-dir": "/home/osmc/exHDD/torrent_down",
    "incomplete-dir-enabled": false,
    "lpd-enabled": false,
    "message-level": 2,
    "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": false,
    "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-password": "트랜스미션 비번",
    "rpc-port": 9091,
    "rpc-url": "/transmission/",
    "rpc-username": "osmc",
    "rpc-host-whitelist": "",
    "rpc-host-whitelist-enabled": false,
    "rpc-whitelist": "127.0.0.1",
    "rpc-whitelist-enabled": false,
    "scrape-paused-torrents-enabled": true,
    "script-torrent-done-enabled": true,
    "script-torrent-done-filename": "/home/osmc/Scripts/AutoDelete.sh",
    "seed-queue-enabled": false,
    "seed-queue-size": 10,
    "speed-limit-down": 50000,
    "speed-limit-down-enabled": true,
    "speed-limit-up": 100,
    "speed-limit-up-enabled": true,
    "start-added-torrents": true,
    "trash-original-torrent-files": true,
    "umask": 18,
    "upload-limit": 100,
    "upload-limit-enabled": 0,
    "upload-slots-per-torrent": 14,
    "utp-enabled": true,
    "watch-dir": "/home/osmc/exHDD/torrent_seeds",
    "watch-dir-enabled": true
}

"download-dir": "/home/exHDD/torrent_down",     ## 다운 완료 된 파일 폴더

"incomplete-dir": "/home/exHDD/torrent_down",    ## 다운 중인 폴더 설정

 : 다운로드 중인 파일 임시 보관 경로. incomplete-dir-enabled true 일때 동작.

"rpc-password": "계정비번",  ## 입력하면 다음 접속시 자동으로 해쉬값으로 바뀐다.

"rpc-port": 9091,              ## (원하는 포트로)

"rpc-username": "계정명",   ## transmission 접속시 필요계정

"rpc-whitelist-enabled": false, ## 웹 클라이언트 접속시 화이트리스트(목록에 있는 호스트만 허용)를 사용할 것인지 선택 (false 이면 모든 원격 호스트를 허용한다.)

"script-torrent-done-enabled": true, #다운완료시 토렌트파일 자동삭제

"script-torrent-done-filename": "/home/pi/Scripts/AutoDelete.sh",#자동삭제 script 위치

"trash-original-torrent-files": true,  ##다운시작시 시드파일 자동삭제 (출처)

"watch-dir": "/home/exHDD/torrent_seeds",  ## 이 폴더에 시드파일 넣으면 자동으로 토렌트 다운

"watch-dir-enabled": true  ## 시드파일 넣으면 자동으로 다운 기능 설정

* 콤마 안찍거나 더 찍으면 몇번째줄 잘못되었다고 표시해 주니 다시한번 확인해보면 됨.

* ,(콤마) 주의. 각 줄마다 ,가 들어가고 마지막엔 ,를 안찍는다.

 

5-5-1 다운완료시 토렌트파일 자동삭제 스크립트 폴더 만들기

$ sudo mkdir /home/osmc/Scripts(폴더생성)

$ sudo chmod 777 /home/osmc/Scripts(읽기쓰기실행권한주기)

$ sudo chown -R osmc /home/osmc/Scripts(root에 소유권주기)

5-5-2 자동삭제 스크립트 제작

$ sudo nano /home/osmc/Scripts/AutoDelete.sh

#!/bin/sh
SERVER="9091 --auth osmc:6881#Pi@Hevy."
TORRENTLIST=`transmission-remote $SERVER --list | sed -e '1d;$d;s/^ *//' | cut --only-delimited --delimiter=" " --fields=1`
for TORRENTID in $TORRENTLIST
do
    DL_COMPLETED=`transmission-remote $SERVER --torrent $TORRENTID --info | grep "Percent Done: 100%"`
    STATE_STOPPED=`transmission-remote $SERVER --torrent $TORRENTID --info | grep "State: Seeding\|Stopped\|Finished\|Idle"`
    if [ "$DL_COMPLETED" ] && [ "$STATE_STOPPED" ]; then
        transmission-remote $SERVER --torrent $TORRENTID --remove
    fi
done 

5-5-3 스크립트 실행 가능하게 

$ sudo chmod +x /home/osmc/Scripts/AutoDelete.sh

 

5-6. transmission-daemon 시작

$ sudo systemctl start transmission

 

5-7. 웹에서 확인 

- 웹브라우저 주소줄에 192.168.1.4:9091 접속 osmc, 트랜스미션비번

 

6. 반복예약작업 crontab, crond

: CCTV녹화 영상 관리(1년 지난 파일 및 폴더 삭제)를 위해 필요

6-1 명령

6-1-1 작업등록 (crontab : cron table)

$ sudo crontab -e

6-1-2 크론탭 시작

$ sudo systemctl start cron

6-1-3 크론탭 중지

$ sudo systemctl stop cron

6-1-4 크론탭 재시작

$ sudo systemctl restart cron

6-1-5 작업차림표 사용법

* * * * * find /path/to/files/ -type f -mtime +7 -exec rm -rf {} \;

 

6-2 사용법 설명

 *    *    *    *   *
분(0-59) 시간(0-23) 일(1-31) 월(1-12) 요일(0-6)
각각의 * 위치에 따라 주기를 다르게 설정 할 수 있다. 
*은 매분/매시간/매일/매월/매요일을 뜻함
요일 : 0=일요일, 1=월요일 6=토요일.
find : 파일 검색명령
/path/to/files/ : 검색시작할 최상위 폴더위치
-type f : 파일만 삭제
-type d : 폴더삭제
-mtime +7 :7일 이상된
-atime => access time ; 접근했던 시간(실행, reading등), 
             ls -lu 명령으로 확인가능
-ctime => change time ; 화일의 속성에 변화가 있은 시간(퍼미션, owner 등)
             ls -lc 로 확인가능
-mtime => modify time ; 화일의 내용을 수정한 시간.                          
             ls -l로 확인 가능
   -7 : 7일 미만, 6일전,5일전 .....1일전, 오늘 수정된 파일이나 폴더
     7 : 딱 7일 전에 수정한 화일만 해당
   +7 : 7일 초과된 즉 8일전,9일전 ..... . 여기서 숫자 단위는 하루(24시간)임.
-exec : 검색한 파일을 어떻게 할 것인가
rm -rf : remove them recursively, force
{} : this represents each file we find
\; : 실행문 끝

6-3 예제 

6-3-1. 매분실행 : 매분 test.sh 실행

* * * * * /home/script/test.sh

6-3-2. 특정시간실행 : 매주 금요일 오전 5시 45분에 test.sh 를 실행

45 5 * * 5 /home/script/test.sh

6-3-3. 반복실행 : 매일 매시간 0분, 20분, 40분에 test.sh 를 실행

0,20,40 * * * * /home/script/test.sh

6-3-4. 범위 실행 : 매일 1시 0분부터 30분까지 매분 tesh.sh 를 실행

0-30 1 * * * /home/script/test.sh

6-3-5. 간격 실행 : 매 10분마다 test.sh 를 실행

*/10 * * * * /home/script/test.sh

6-3-6. 구간 실행 : 5일에서 6일까지 2시,3시,4시에 매 10분마다 test.sh 를 실행

*/10 2,3,4 5-6 * * /home/script/test.sh

6-3-7.  매월15일밤11시50분, /home/osmc/exHDD/cctv1 검색, 31일초과 파일만 삭제

50 23 15* * find /home/osmc/exHDD/cctv1/ -type f -mtime +31 -exec rm -rf {} \;

6-3-8.  매월15일밤11시50 cctv1폴더밑 365일지난 폴더+파일 모두삭제

50 23 15 * * find /home/osmc/exHDD/cctv1/ -mtime +365 -exec rm -rf {} \;