Oracle Free tier Cloud로 Plex 미디어 서버 구축하기(Docker 이용) (수정중)

오랫동안 시간이 없다가 이제서야 구축하게 돼서 자료삼아 올려봅니다.
친절하진 않을거예요. 그래도 제가 막혔던 부분은 적어놓아서 추후 참고를 할 수 있겠습니다.

오라클 무료티어도 네트웍은 한달에 10TB까지 사용 가능합니다. 디스크용량은 40기가 정도는 쓸수 있어서 음악서버정도는 다 가능.

오라클 Cloud 가입

Compute instance 생성 – Ubuntu 이미지로 생성

오라클 클라우드용 Free 고정 IP 할당

네트워크 설정 – 포트 열기

iptables로 서버에서 여는거 하고 cloud에서 여는거 다 해야 함. 32400 은 열어줘야 함.

#!/bin/sh

sudo iptables -A INPUT -m state –state NEW,ESTABLISHED -m tcp -p tcp –dport 32400 -j ACCEPT
sudo iptables -A INPUT -m udp -p udp –dport 32400 -j ACCEPT

폴더 만들어놓기

mkdir srv
mkdir srv;mkdir srv/plex; mkdir srv/plex/config ; mkdir srv/plex/data ; mkdir srv/plex/data/music ; mkdir srv/plex/data/tv

(Optional) PLEX_CLAIM 키

(Plex 가입해서 로그인 했다면 You can also hit up https://www.plex.tv/claim/, sign in, and set that value as PLEX_CLAIM environment variable.)
아래와 같은 페이지가 뜨고 키가 뜰텐데 이걸 입력하면 된다. (도커 스크립트에다가)

Plex docker 이미지 설치


결국 Dockerfile 작성하는거임

docker-compose.yml

# docker-compose.yml
version: "2.1"
services:
plex:
image: ghcr.io/linuxserver/plex
container_name: plex
network_mode: host
environment:
- PUID=1001
- PGID=1001
- VERSION=docker
- PLEX_CLAIM=claim-(아까 복사한 claim 키) 아니면 라인 지우자
volumes:
- /home/ubuntu/srv/plex/config:/config
- /home/ubuntu/srv/plex/data/tv:/tv
- /home/ubuntu/srv/plex/data/music:/music
restart: unless-stopped

실행

sudo docker-compose up -d

실행 잘 되었는지 확인해보기


sudo docker logs plex
이런 식으로 나오면 됨

[cont-init.d] 10-adduser: exited 0.
[cont-init.d] 40-chown-files: executing…
[cont-init.d] 40-chown-files: exited 0.
[cont-init.d] 45-plex-claim: executing…
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 4837 0 4837 0 0 5792 0 –:–:– –:–:– –:–:– 5785
Server claimed successfully, navigate to http://serverip:32400/web to complete plex setup.
[cont-init.d] 45-plex-claim: exited 0.
[cont-init.d] 50-gid-video: executing…
[cont-init.d] 50-gid-video: exited 0.
[cont-init.d] 60-plex-update: executing…
Docker is used for versioning skip update check
[cont-init.d] 60-plex-update: exited 0.
[cont-init.d] 99-custom-scripts: executing…
[custom-init] no custom files found exiting…
[cont-init.d] 99-custom-scripts: exited 0.
[cont-init.d] done.

SSH tunneling – 웹설정을 위해 필요

putty를 쓰자. 서버의 localhost:32400과 내 PC의 32400 포트 연결하여 접속

웹페이지 접속, 셋업 완료.

localhost:32400으로 접속하여 설치 마무리 하자.

추가로 할 일?

Plex 서버에 앱으로 (잘) 접속하려면 추가로 열어줄 포트들이 있을 수도..?

libconfig 오픈소스 config library

http://hyperrealm.github.io/libconfig/libconfig_manual.pdf 

오픈소스 config library이고 이런식으로 쓴단다

Example application configuration file

# Example application configuration file
version = "1.0";
application:
{
    window:
    {
        title = "My Application";
        size = { w = 640;
        h = 480;
    };
        pos = { x = 350;
        y = 250;
    };
}
;
list = (("abc", 123, true), 1.234, (/* an empty list */));
books = ( { title = "Treasure Island";
author = "Robert Louis Stevenson";
price = 29.95;
qty = 5; },
{ title = "Snow Crash";
    author = "Neal Stephenson";
    price = 9.99;
    qty = 8; } );
    misc:
    {
        pi = 3.141592654;
        bigint = 9223372036854775807L;
        columns = [ "Last Name", "First Name", "MI" ];
        bitmask = 0x1FC3; // hex
        umask = 0027;     // octal. Range limited to that of "int"
    };
}
;

GCOVR 로 커버리지 측정 – 소스와 gcda파일이 다른 경로에 있을 경우

gcovr은 내부적으로 gcov를 사용하나봄

gcovr ./path/to/gcda_gcno/files.dir -r /path/to/src.dir -s -p –html –html-details –gcov-executable /usr/bin/gcov -o /path/to/output/Test.html -verbose

파일포맷 설명: 아래 링크 참조하였다.

https://educoder.tistory.com/entry/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4-%EA%B3%B5%ED%95%99gcov%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%BB%A4%EB%B2%84%EB%A6%AC%EC%A7%80-%EC%B8%A1%EC%A0%95

gcno – 빌드한 파일의 소스넘버가 들어있음.

gcda – 실행하면 실행카운트가 업데이트되는 데이터파일

-r 옵션 : 소스코드 디렉토리

-o 옵션 : 출력할 파일들이 저장될 경로

1. gcc의 특정 flag와 함께 테스트하고자하는 프로그램을 컴파일
   – -fprofile-arcs -ftest-coverage
   – .gcda , .gcno 파일 생성

2. 테스트하고자 하는 프로그램을 실행
   – .gcda 파일에 실행한 프로그램의 커버리지 정보가 저장됨

3. gcov 프로그램을 사용하여 커버리지 정보를 분석
   – gcov options

[Git] monorepo 상황에서 통합(PR) 전에 브랜치의 커밋들을 squash해서 하나로 모으고 리베이스 하기

monorepo 형태로 운용한다면
브랜치의 merge가 허락되지 않고
아래처럼 거부될 수 있다.

remote: Merge commits are not allowed. You should rebase rather than merge
remote: =====================================================================
...
! [remote rejected]

그 때 방법은 rebase를 통하는 것인데
rebase를 하면서 내 커밋들을 하나로 묶어서 간단하게 로그를 만드는 경우에
(이미 push로 올린 브랜치에서)
다음과 같이 하면 된다.

$ git checkout master # (또는 develop 등 메인 브랜치 이름)
$ git pull # 서버(원격 저장소)에서 다 가져온다
$ git checkout {내 브랜치 이름} # 예 git checkout feature/my-123
$ git rebase -i master # master의 내용들로 내 브랜치를 리베이스 한다.
이 때 이미 내 브랜치에서 커밋했던 내용들이 보이고, 이 중에 필요한 것들은 squash 등으로 첫 단어 이름을 바꿔 적고 저장하면 묶여진다. 그 다음 단계로 커밋 메시지 수정하라고 나온다.
$ git push -f origin {내 브랜치 이름} # 원격 저장소의 내 브랜치에 적용해서 올려준다.

서울의 평년 강수일, 기온

30년간의 기후자료. 서울 (1981~2010년)
요소 01 02 03 04 05 06 07 08 09 10 11 12
강수일수1.0mm이상 3.9 3.5 5 5.9 7 7.7 13.4 12 6.7 4.9 6.4 4.2
최고기온(℃) 1.5 4.7 10.4 17.8 23 27.1 28.6 29.6 25.8 19.8 11.6 4.3
최저기온(℃) -5.9 -3.4 1.6 7.8 13.2 18.2 21.9 22.4 17.2 10.3 3.2 -3.2

자전거 탈 때 참고..

출처: 기상청 http://www.weather.go.kr/weather/climate/average_30years.jsp?yy_st=2011&stn=108&x=15&y=6&norm=M&obs=0

비상식량으로 찐쌀

찐 쌀이 동결건조미보다 좋다는 느낌이다. 원문

그리고 3년은 간다고.. 그렇다면 이런 쌀을 사서 보관하면 어떨까? 저렴하고, 보관성 좋을 것이고.. 어쨌거나 물은 가장 중요하다. 어떻게든 확보해야됨. 물만 있으면 한동안 버틸 수 있겠다.

링크

찾아보니 네이버 검색하면 한국산 찐쌀도 있다 찹쌀찐쌀이 위보다 더 싸게 나온다.

보통 먹는 법은 종이컵에 반 채우고, 뜨거운 물을 가득 채운 다음 5분간 기다리면 누룽지가 되어있다고 함. 이 정도면 매우 편한거같다.