7YR.DE w RasPi

pronounce as 7 Year DE or tired


1. 환경구성

1 라즈베리 파이 os 설치 안돼서 여러 os 시도하다 우분투로 성공함.
(id/pw 기억)
2 openssh 깔고 sk라우터로 포트포워딩해도 외부 ssh 접근이 안돼서 삽질. (내부는 잘되는거확인)
폐쇄형 nat면 안되나봄 라우터에 dmz설정으로 raspi 등록해주면 모든 포트 자동 외부접근 포워딩가능.해결
3 nginx깔고 설정변경없이 /var/www/html에 index.html생성해서 초기화면 바꾸고.. 웹서비스성공!
4 구글 도메인에서 7yr.de 구매해서 dns설정(A, CNAME) 내 ip로 해서 접근성공. 다른주소 리다이렉션은 잘안됨
5 불날까봐 불안했는데 온도체크도 가능하고 (sudo vcgencmd measure_temp) 0°C to 70°C 권장(현재 55도정도), -40°C to 85°C 넘어가면 꺼짐!

5.1 참고: sudo vcgencmd modules
commands="vcos, ap_output_control, ap_output_post_processing, pm_set_policy, pm_get_status, pm_show_stats, pm_start_logging, pm_stop_logging, version, commands, set_vll_dir, set_backlight, set_logging, get_lcd_info, arbiter, cache_flush, otp_dump, test_result, codec_enabled, get_camera, get_mem, measure_clock, measure_volts, enable_clock, scaling_kernel, scaling_sharpness, get_hvs_asserts, get_throttled, measure_temp, get_config, hdmi_ntsc_freqs, hdmi_adjust_clock, hdmi_status_show, hvs_update_fields, pwm_speedup, force_audio, hdmi_stream_channels, hdmi_channel_map, display_power, read_ring_osc, memtest, dispmanx_list, get_rsts, schmoo, render_bar, disk_notify, inuse_notify, sus_suspend, sus_status, sus_is_enabled, sus_stop_test_thread, egl_platform_switch, mem_validate, mem_oom, mem_reloc_stats, hdmi_cvt, hdmi_timings, readmr, pmicrd, pmicwr, bootloader_version, bootloader_config, file, vchi_test_init, vchi_test_exit, vctest_memmap, vctest_start, vctest_stop, vctest_set, vctest_get"

6 exfat포맷 관련모듈 설치(exfat-utils, extat-fuse)해서 외장하드 두개꽂고 sftp서버 시도해볼 예정. 잘되면 nas로쓰게 추가 서비스!

  • 알아서 구글드라이브/icloud 수집해서 백업하는기능

WebDAV 서버

7 외장하드 마운트 완료 (아래 참조)
http://perdupper.blogspot.com/2017/09/ubuntu.html?m=1
https://mapled.tistory.com/entry/%EC%9A%B0%EB%B6%84%ED%88%AC%EC%97%90%EC%84%9C-USB-%EB%A7%88%EC%9A%B4%ED%8A%B8-%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95
sftp는 termius앱에서 유료라서 webdav 등으로 애플 파일앱 연동되는 파일서버 만들기 시도예정

8 nginx에 webdav 설정
https://m.blog.daum.net/yaheun70/8
오류코드는 systemctl nginx.service 이런걸로 봐가면서 결국 성공함. 브라우저에선일단 잘 작동하고
file app은 왜안되는지(원래잘안된대).. documents앱에서는 잘 작동함
(id/pw 기억)

9 webdav에 외장하드 연결
mounted device owner변경(chown www-data:www-data)하고 nPlayer로 저장된 동영상 시청할수있게 하기
아무리해도 안되다가 겨우 방법찾음 mount 할때부터 옵션으로 권한설정을 해줘야함
https://superuser.com/questions/320415/mount-device-with-specific-user-rights
sudo mount -o umask=0022,uid=33,gid=33 /dev/sdb2 /media/hdd2 이런식으로 주면됨(0022는 권한 755, uid gid 33은 www-data)
-> /dev/sdb2 자리에 fdisk -l로 확인한, 마운트할 파티션 주소를 써줘야됨
-> transmission(torrent) 쓰려면 debian-transmission 접근권한도 줘야하므로 www-data 그룹에 얘 넣고 (/etc/group 수정) 마운트할때 umask=002로 주면 됨

10 거지같은 구글드라이브 마운트하기 개어려웠다
https://seing.tistory.com/75
따라서 쭉 하고(구글api권한얻기도 겸사겸사함 oauth)
https://github.com/astrada/google-drive-ocamlfuse
마운트할때 권한 ㅈ같은건 sudo로 하지말고 처음 마운트할때부터 해당유저권한으로, 못하겠으면 umount하고 다시한번 fusermount -u 경로 이렇게하면됨
이제 왠만한건 ssh로 gdrive->외장하드 복사해와서
webdav로 열어보는게 가능해졌다!

11 토렌트 서버 만들어서 폰으로 던져주면 다운받아두게 하기(드디어 일을 한다)
https://blog.djjproject.com/54
가볍게 성공. 정정할 부분은 서비스를 완전히 멈추고 세팅값 바꿔야되는거랑(service transmission... stop)
9091포트 서버 접속할 때 마지막에 / 붙여줘야함
아니면 무슨 csrf 머라하면서 에러뜸
http://7yr.de:9091/transmission/web/
(id/pw 기억)
우와 ㅅㅂ 된다 바로 외장하드로 전송됨!!! 야호!!!

심리 테스트 서비스

12 참고로 웹서비스 하나 만듬 심리테스트
http://test.7yr.de
이건 조코딩 강좌보고 빼껴서 한거임 역시 돈주고사는게 최고다
https://www.codelion.net/catalog/Q291cnNlTm9kZTpqbW9r

vimeo referrer bypass
https://lampiaosec.github.io/articles/vimeo-privacy-bypass/
https://github.com/soddokayo/vimeo_privacy_bypass (이게 내 결과물)

이제머하징..?

13 https 서비스 필요함
https://jackerlab.com/nginx-https-lets-encrypt/

14 온도측정, 용량측정해서 서버 안정적으로 관리해야함
왜 ems있는지 알겠다 ems간단히 crontab으로 만들던지 따로 가벼운거 다운받던지 ㄱㄱ
일단 crontab사용법 배워서 추가함
https://jdm.kr/blog/2
https://crontab.guru
sudo crontab -l
sudo crontab -e (루트 크론탭에 추가함)
0 * * * (date && 온도찾기명령) >> 로그주소
0 0
* * (date && df -h) >> 로그주소
우분투 폴더 용량 확인은 du -h

15 다운받은 smi 자막 인코딩 바꿔서 srt로 변환하고, 토렌트로 다운받은 영상이랑 합쳐서 자막영상 만들기.
https://stackoverflow.com/questions/8672809/use-ffmpeg-to-add-text-subtitles
http://bombcat.egloos.com/m/6269066
ffmpeg이용 smi mp4 -> srt mp4 -> mp4
https://bitsoul.tistory.com/150
https://bitsoul.tistory.com/m/150
인코딩 확인 명령은 file -bi 파일명

폴더내 반복실행하려면

for f in *; do
    echo "$f";
    file -bi "$f";
done

요런 식으로 하면되겟쥬?

iconv 활용해서 utf-16le -> utf-8
iconv -f utf-16le -t utf-8 src.smi > dst.smi

반복문이라치면

iconv -f utf-16le -t utf-8 "$f" > "${f} 2.smi"
ffmpeg -i dst.smi dst.srt
ffmpeg -i src.mp4 -vf subtitles=dst.srt dst.mp4

.ass 파일 이용할수도 있다니 카이란에 올라오니까 한번 알아보덩가 ㅇㅇ ffmpeg에 lib따로깔아서 추가해줘야하는듯
(일단 smi->srt가 제일 잘쓰일듯)
(파일이름 길면 인자전달 잘 안되니까 걍 이름바꿔서해)

온라인 서재

16 온라인 서재 프로젝트 SOJE
7yr.de/rpi에 mongoDB 4.4 설치완료
(현 버전 최신인 5.0dms rPi4에서 프로세서를 지원안함)
. DataBase(soje), Collection(doso), Document 생성
. Document는 일단 강의파일들

  • 태그, 파일 메타데이터, 관련항목(다른 docu), hash값(id),
    검색을 위한 text(제목, 내용(설명)), raw 데이터 경로(db엔저장안함)

mongo 쉘 명령어

# db생성, collection 생성
use soje; db.createCollection("doso");

# collection에 추가
db.doso.insert([ 
	{"key1":"value1", "key2":"value2", ...},
	{"key1":"value1-2", "key2":"value2-2", "key3":["val3(1)", "val3(2)", ...], ...}, ...
  ])
# collection 조회
db.doso.find().pretty()

# collection에서 삭제
db.doso.remove({"key":"value", ...}, true(1)/false(여러개))
# collection 삭제
db.doso.drop()
# db 삭제
db.dropDatabase()

todo

. Flask에서 pymongo로 연동해서 조회/업로드/다운로드 기능 제공 (하는중)
. 대용량 업로드는 Dropzone, 대용량 다운로드는 알아보고
. 조회는 우선은 mongoDB 쿼리조회 공부해서 넣자 (index.html로)
. 이후 elasticsearch 검색엔진 추가해서 한글형태소분석해서 유사/연관검색까지 지원
. gunicorn 활용해서 nginx에 추가. soje.7yr.de로 서비스 (계정 인증도 필요)

17 라즈베리 파이 열 관리
ffmpeg 영상처리, transmission 토렌트서버 등 사용시 80도 넘어서 뻗어버리는 현상 발생
-> temp.sh 모니터링해두던거 이용, 메모리 사용량 보고 해당 프로세스 중지시키는 기능 필요
-> 80도 도달할 경우


프로젝트

1 log.
오늘onul이 wbs/log에 추가되는게 아니라
log에서 추가된게 git처럼 날짜기반으로 형상관리가 돼서


7YR.DE w ASUS노트북(win10)

1 Docker Desktop 이용한 웹서비스
도커 데스크톱 설치. (id/pw 기억)

2 라우터 DMZ 설정 등
google domain에서 wiki.7yr.de CNAME->7yr.de 설정
라우터 ip는 안변하므로 wan ip 그대로 써줌(나는 설정하다 날아갔는지 정보가없어서 A레코드 다시넣음)
이후 라우터 설정에서 DMZ 윈도우컴(192.168.45.218)으로 바꿔주고, 포트포워딩으로 22번포트(ssh)도 8082로 바꿔줌 (22번 막아야됨 나중에)
윈도우 포트 개방은 다음 명령어

netsh advfirewall firewall add rule name="http port 80" dir=in action=allow protocol=tcp localport=80

3 Media wiki 땡겨서 실행

docker pull mediawiki
docker run -d --name wiki.7yr.de -p 80:80 -e VIRTUAL_HOST=wiki.7yr.de mediawiki

mediawiki documentation에 8080쓰라길래 8080:80 열라했는데 8080 시도해서 안된 이유는 라우터 dmz 설정에도 불구하고 8080이 라우터 설정 페이지가 포워딩돼서 그런거였음. 암튼 걍 80 ㄱ
docker ps로 ID 확인할 수 있고
docker stop [ID]로 삭제가능
미디어위키 세부설정은 웹으로 접속하면 알아서 해주고,
(id/pw 기억)
도커 이미지 쉘로 접근하려면

docker exec -it [ID] /bin/bash

추후 데이터베이스(sqlite말고 외부db서버) 링크하려면 docker run에 --link옵션 주면됨, 근데 이제 없어질 예정이니 네트워크를 만들어서 통신하는 다음 방법이 바람직함

docker network create [이름]
docker run에 --network 옵션으로 db, nginx 실행

(참고: http://pyrasis.com/book/DockerForTheReallyImpatient/Chapter06/02)

4 앞으로 할거
v2.0 참고해서 이제 onul, test, webdav, transmission 도커로 구현하고
downhub(webdav+transmission)는 통합이미지도 만들어보자

profile
맛있는 건 정말 참을 수 없어

1개의 댓글

comment-user-thumbnail
2022년 3월 10일

7YR.DE 가 뭔가요

답글 달기