virtualbox 에 헤놀로지 설치

  • 굳이 virtualbox 에 설치해야 되는가에 대해 의문이 들 수 있다. 설치의 목적은 업데이트 버전의 설치 성공을 확인하기 위해 테스트 작업을 하기 위함이다.
  • virtualbox 에 헤놀로지 설치 시 알게 된 점을 기록한다.
  • synoboot.img 파일을 VHD 파일로 만들어야 한다.
    • 이때, VHD 파일과 IMG 파일이 연결되게 만드는 경우가 있는데 설치 시 문제가 되는 듯 하다. 온전한 VHD 파일을 만든다.
    • synoboot 이미지 안의 grub.cfg 파일을 읽어서 MAC 주소를 알아낸다. (OSFMount 프로그램 참조)
  • 저장소
    • synoboot 파일은 SATA (AHCI) 컨트롤러에 올린다.
    • 데이터 디스크는 SCSI (LsiLogic) 컨트롤러에 올린다.
  • 네트워크
    • 어댑터에 브리지 연결
      • MAC 주소를 synoboot 이미지의 grub.cfg 에 있는 주소로 변경한다.
    • NAT 연결
      • MAC 주소를 synoboot 이미지의 grub.cfg 에 있는 주소로 변경한다.
      • synology assistant (find.synology.com) 에서 잘 안찾아지므로, 포트 포워딩 한다.
  • 컨테이너를 시작하면, 한동안 synoboot 이미지를 읽어서 데이터 볼륨에 기록한다.
    • 이 부분은 화면에 나오지 않기 때문에 멈춘 것으로 보이나, 그렇지 않다.
    • 아래의 URL 을 호출한 후, 화면이 나올 때까지 기다린다. 넉넉잡아 10분 이내 나타난다. 만약 안나타난다면 뭔가 문제가 있는 것임
      • http://[PC 아이피]:5000/web_index.html
  • 절차대로 설치 후, 로그인 화면이 나타나면 정상 설치 된 것임
    • 접근 URL : http://[PC 아이피]:5000
  • 설치 후 해야 될 일
    • 스토리지, 볼륨을 잡아준다. (저장소 프로그램에서 처리)
      • msata ssd에 남는 공간(10G)에 볼륨을 만들면 안되요. 거기에 볼륨을 만들면 부트로더가 날라갑니다.
    • 업데이트 등의 작업을 위해 synoboot 링크 생성
      • ssh 로 접속해서, 부트로더가 어떤 것인지 알아낸다. (타오바오 SSD 로더를 이용한 업그레이드 참조)
        • 제어판 > 작업 스케줄러 > 생성 > 트리거된 작업 생성 (부트업)
        • 실행 스크립트 예)
          • ln /dev/[디바이스1] /dev/synoboot1
          • ln /dev/[디바이스2] /dev/synoboot2



DS Audio 노래 가사 조회 플러그인

[펌] https://blog.acidpop.kr/308

해외, 국내 두개

DSM > ds audio > 설정 > 가사 플러그인 > 추가

알송 가사 플러그인 0.6

https://blog.kakaocdn.net/dn/ASGtY/btqz4KcjtQU/lxFGKo1s3j92kK2pcnyvaK/alsong_lyric_0.6.aum?attach=1&knm=tfile.aum

해외 가사 플러그인

https://github-releases.githubusercontent.com/203561885/715efe80-3661-11ea-9edf-e52c025dfe24?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20210609%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20210609T083249Z&X-Amz-Expires=300&X-Amz-Signature=e7dc3888ea45fef1a4b8c2e6a2e08ae85dcbe4bd2219d4b9f7e26d920f10cb0a&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=203561885&response-content-disposition=attachment%3B%20filename%3Dfujirou_musix_match-1.3.aum&response-content-type=application%2Foctet-stream




타오바오 SSD 로더를 이용한 업그레이드

[펌] http://m.ppomppu.co.kr/new/bbs_view.php?id=nas&no=40068

SSD 로더를 사용하는 경우, 업그레이드를 손쉽게 할 수 있는 방법

  • SSH 로 접근
  • 부트로더 확인 (나스마다 틀림, 내 경우는 sdb4, sdb5 였음)
fdisk -l
  • synoboot 링크 생성
link 생성
  • 제어판의 “업데이트 및 복원” 에서 “수동 DSM 업데이트”를 선택하여 업데이트 파일을 업로드/설치 한다.
  • 업데이트 파일 위치
    • “업데이트 및 복원” 에 가서, “릴리즈 노트” 클릭
    • 원하는 릴리즈 버전으로 이동
    • 다운로드 사이트가 링크되어 있는 부분을 클릭
    • DSM 해당버전 PAT 파일을 다운로드 (DS 918 plus -> 918+ 로 검색)
    • 마이너 버전(100MB 이하)은 메이저 버전 업데이트 후, 추가로 진행 권고
  • 리부팅 후, 링크가 사라져 있음. 재부팅 시 자동 생성되도록 스크립트 생성해 준다 (제어판에서 가능)
  • 주의사항
    • 업데이트 시, synoboot 디바이스가 마운트 되어 있으면 안됨



자동차 썬팅

자동차 썬팅을 위해 알아야 할 것들

  • 작업방식
    • 가로
      • 비용절감을 위해 사용
      • 상대적으로 비용 낮음 (안물어보면 동일한 비용으로 가로로 처리할 듯)
      • 썬팅이 울어서 어지러울 수 있음
    • 세로
    • 확인방법 : 썬팅 후, 필름지 마크를 보면 됨
      • 가로 : 마크 글자가 바로 보임
      • 세로 : 마크 글자가 뉘여져 보임
  • 썬팅의 퀄리티
    • 태양광 처리율 (TSER) 비율이 높으면 좋음
  • 농도
    • 현행법상 자동차유리의 가시광선 투과율 기준은 다음과 같습니다. 
      • 전면유리 – 가시광선 투과율 70% 이상
      • 측후면유리
        • 측면 1열 (운전석/동승석) : 가시광선 투과율 40% 이상
        • 측면 2열과 후면열선유리 : 가시광선 투과율 규제 없음
    • 밖에서 봤을때 내부가 얼마나 보이는가를 나타냄
    • 수치가 낮을수록 진함
    • 투과율과 비용은 상관 없음
    • 일반적인 농도
      • 전면 유리 : 35% ~ 50%
      • 측후면 유리 : 15%
  • 그밖의 조건
    • 투과율 대비 안에서 밖이 얼마나 잘 보이는가(시인성) 중요한 것 같음



코로나19 백신 종류

용어 정의

  • 대식세포는 세균 또는 죽거나 죽어가는 세포를 먹고 소화하는 백혈구입니다. 대식세포는 ‘항원’이라고 하는 침입 세균의 일부를 남겨둡니다. 신체는 항원을 위험한 것이라고 판단하고 항체를 자극하여 항원을 공격합니다.
  • B 림프구는 방어 백혈구입니다. B 림프구는 대식세포가 남긴 바이러스 조각을 공격하는 항체를 생산합니다.
  • T 림프구는 또 다른 유형의 방어 백혈구로, 이미 감염된 체내 세포를 공격합니다.

백신 종류

  • mRNA 백신 에는 바이러스 고유의 무해 단백질 생성법에 대한 지침을 세포에 제공하는 COVID-19 유발 바이러스 물질이 포함되어 있습니다. 우리 세포가 이 단백질을 복제하고 나면, 이들이 백신에서 유전 물질을 파괴합니다. 우리 몸은 그 단백질이 존재해서는 안된다는 것을 인식하고 향후 감염될 경우 COVID-19 유발 바이러스와 싸우는 방법을 기억하는 T 림프구와 B 림프구를 만듭니다.
    • 화이자(미국/독일), 모더나(미국)
  • 단백질 서브유닛 백신에는 COVID-19 유발 바이러스의 전체 세균이 아닌, 무해한 조각(단백질)이 들어있습니다. 백신을 접종하여 이 단백질 조각이 몸에 들어오면, 면역 체계는 우리 몸에 속한 단백질이 아니라는 것을 인식하고 T 림프구와 항체를 만들게 되며, COVID-19 유발 바이러스와 싸우는 방법을 기억하고 향후 감염에 대비할 수 있습니다.
  • 벡터 백신에는 COVID-19 유발 바이러스와는 다른, 바이러스의 변형본이 들어 있습니다. 변형 바이러스 껍질 속에는 COVID-19를 일으키는 바이러스의 물질이 들어 있습니다. 이것을 ‘바이러스 벡터’라고 합니다. 바이러스 벡터가 세포 내부에 들어가면 COVID-19 유발 바이러스에 해당하는 특별 단백질을 만들도록 유전 물질에 지시합니다. 이 지침을 사용하여 세포는 해당 단백질의 사본을 만듭니다. 이는 나중에 감염될 경우 그 바이러스와 싸우는 방법을 기억할 T 림프구와 B 림프구를 만들도록 유도합니다.
    • 얀센(벨기에/미국), 아스트라제네카(영국)
  • 기타
    • 시노백 : 불활성화 바이러스 / 중국
      • 전통적인 방식의 백신으로 화학약품 등으로 바이러스를 처리해 독성을 없앤 뒤 인체 내에 투입해 항체를 형성시키는 원리를 지녔다. 미국 제약사 노바백스는 바이러스 단백질 조각을 만들어 항원으로 인체 내에 주입하는 백신 형태인 ‘재조합 단백질’ 백신을 개발하고 있다. 
    • 노바백스 : 재조합 단백질 / 미국

접종횟수

  • 2회 접종: 2회 접종이 필요한 COVID-19 백신을 맞은 경우, 2회 접종 후 2주가 지나면 백신 완전 접종한 것으로 간주합니다. 
  • 1회 접종: 1회 접종만 필요한 COVID-19 백신을 맞은 경우 접종 후 2주가 지나면 백신 완전 접종한 것으로 간주합니다. 



webclient 호출 및 reactive 응답처리

  • 이벤트 처리
    • doOnError() : 예외가 발생했을 경우, 특정 행위를 실행시킬 경우 사용
      • 에러 시, 처리 후 리턴되는지 다음건으로 이동되는지 확인 필요
      • 2xx 이 아닌 경우와 Exception 인 경우 call 됨
    • doOnSuccess() : 발송 성공 시, 후처리
    • onErrorReturn : 예외가 발생했을 때 특정 값을 Return 함
      • 정상과 같은 객체를 생성해서 특정값을 저장하고 중지 후 리턴
    • onErrorResume : 예외가 발생했을 때 다른 Flux형태로 Return 함
      • 정상과 같은 객체를 생성해서 특정값을 저장하고 다음 건 처리
    • onErrorContinue : 예외가 발생했을 때 멈추지 않고 해당 영역만 skip해서 동작함.
      • 에러처리 후 해당 건 스킵 및 다음 건 처리
public Mono<Object> doExec(
		ServerHttpRequest request, ServerHttpResponse clientResponse, RbcAuth rbcAuth) {

	String finalAuthToken = ...;

	try{
		return webClient.get()
				.uri(rbcUrl.getCategories())
				.accept(MediaType.APPLICATION_JSON)
				.headers(httpHeaders -> httpHeaders.setBearerAuth(finalAuthToken))
				.retrieve()
				.onStatus(HttpStatus::isError, res -> doError(res))
				.bodyToMono(CustomResult.class)
				.doOnError(ex -> doExcept(clientResponse, ex))
				.flatMap(res -> doSucc(clientResponse, res))
				.doOnSuccess(res -> doFinish(clientResponse, res))
				.subscribe()
				.log()
				;
	}catch (Exception e){
		log.error("webClient fail. e={}", e.getMessage(), e);
		return doExcept(clientResponse, e);
	}
}

private Mono<Object> doFinish(ServerHttpResponse response, CustomResult res) {
	...
	return Mono.just("finish");
}

private Mono<Object> doSucc(ServerHttpResponse response, CustomResult res) {
	...
	return Mono.just("success");
}

private Mono<Object> doExcept(ServerHttpResponse response, Throwable ex) {
	...
	return Mono.just("fail. e={}", e.getmessage());
}

private Mono<Exception> doError(ClientResponse res) {
	if (res.statusCode().isError()) {
		return Mono.error(new RuntimeException(res.toString()));
	}
	else{
		return Mono.error(new RuntimeException(res.toString()));
	}
}



우아한 형제들 – 송파구에서 일 잘하는 방법 11가지

1. 9시 1분은 9시가 아니다. → 우리는 규율 위에 세운 자율적인 문화를 지향합니다.
2. 업무는 수직적, 인간관계는 수평적. → 조직적이면도 자유로운 수직과 수평의 밸런스를 유지한다.
3. 간단한 보고는 상급자가 하급자 자리로 가서 이야기 나눈다.
4. 잡담을 많이 나누는 것이 경쟁력이다. → !@#$@#$$%%$
5. 개발자가 개발만 잘하고, 디자이너가 디자인만 잘하면 회사는 망한다.
6. 휴가 가거나 퇴근시 눈치 주는 농담을 하지 않는다. → 작은 농담이나 말장난이 꼰대의 시작입니다. 생리휴가, 정기휴가, 칼퇴 등
7. 팩트에 기반한 보고만 한다. → 본 것을 본대로 보고하고, 들은 것을 들은대로 보고하자. 본 것과 들은 것을 구분해 보고하고, 보지 않고 듣지 않은 것은 절대 이야기하지 말자 – 이순신
8. 일을 시작할 때는 목적, 기간, 예상산출물, 예상결과, 공유대상자를 생각한다.
9. 나는 일의 마지막이 아닌 중간에 있다. → 이 일로 인해 미칠 영향을 미리 고려해 봅니다. 개발, 법무, 재무, 데이터사이언스, CS, 엽업부서 등
10. 책임은 실행한 사람이 아닌 결정한 사람이 진다. → 결정을 내린 사람은 실무자가 최고의 성과를 낼 수 있도록 도와야 합니다.
11. 솔루션 없는 불만만 갖게 되는 때가 회사를 떠날 때다. → 이끌거나 따르거나 떠나거나~~~~ 어쩌라고~~~~



Docker 관리 : Portainer 설치

Docker 관리 컨테이너 중, 본인이 사용이 편리하다고 판단한 portainer 설치 docker-compose 내용을 공유합니다.

  • 시놀로지 폴더에 docker-compose.yml 파일을 아래와 같이 작성
  • 제어판 > 작업 스케줄러에서 “생성 > 트리거된 작업 >사용자 정의 스크립트” 를 선택한다.
  • 작업명을 쓰고, 작업 설정 > 실행명령을 작성한다.
    • docker-compose -f [파일경로/파일명] up -d
    • 파일경로는 시스템의 full 경로 필요
    • 예) /volume1/디렉토리/파일명
  • 작업 스케줄러에서 실행하면 잠시 후 실행된다.
  • 웹에서 실행 확인
    • http://[NAS서버]:[공유포트]
  • 처음 접속 시, 관리자 아이디/패스워드를 생성한다.
  • 다음으로 관리할 endpoint를 등록한다.
    • 로컬 docker 를 관리하므로, docker 를 선택한다.
# docker-compose.yml 파일
version: '2'

volumes:
  portainer_data:

services:

  portainer:
    # 이미지
    image: portainer/portainer-ce:2.5.0
    restart: always
    ports:
      # 웹접근 포트
      - 39005:9000
    environment:

      # 시간설정
      TZ: Asia/Seoul
    volumes:
      - portainer_data:/data
      - /var/run/docker.sock:/var/run/docker.sock



도커 이미지 옮기기

docker hub를 이용하지 않고, docker image를 배포하기 위해서는 기존 docker image를 복제하여 remote 서버에서 사용할 수 있어야 한다. 이를 위해서 docker는 3가지 방법을 제공하고 있는데, 각각의 특징 및 활용방법을 확인해 본다.

[Save]

1. 특징

– 원본 image를 그대로 복제하여 file로 export

2. 활용

– 인터넷 접속이 어려운 상황에서 image를 직접 배포하는 용도

– import, commit과 차이 없음

3. example

> docker save ubuntu | gzip > ubuntu-golden.tar.gz

> zcat ubuntu-golden.tar.gz | docker load

[export]

1. 특징

– 현재 구동중인 container의 상태(파일/폴더추가, log 등)를 그대로 복제

– 원본 image와 다른 현재 운영상태를 image로 export

2. 활용

– 현재 운영상태를 그대로 유지하여 container를 확장하는 경우

3. 고려사항

– Dockerfile이 유지되지 않아, 새로운 설정을 추가하기 어려움.

4. example

> docker export <containerid> | gzip > mariadb-10-1.tar.gz

> zcat mariadb-10-1.tar.gz | docker import – mariadb:10.1

5. Troubleshooting

– export -> import -> docker run을 실행하면, 아래 에러 발생 “docker: Error response from daemon: No command specified.”

– export는 변경된 filesystem만 export하지, Dockerfile의 ENV, CMD, ENTRYPOINT등을 반영하지 못함.

– 해결

* save 명령어를 사용

* import시에 실행할 명령어를 옵션으로 추가할 수 있으나, save -> load를 이용하여 처리하는 것이 안정적일 것 같다.

[commit]

1. 특징

– 실행중인 container를 image로 저장

– export와 다른 점은 실행결과가 새로운 image를 생성하는 것.

– save/export는 모두 image를 file로 생성.

– 새로운 image를 생성하면서 -c 옵션으로 CMD, ENV등의 명령어를 적용할 수 있음.

2. 활용

– 일반적인 상황에서는 대부분 export를 많이 사용.

– commit은 임시 container에서 작업한 내용을 다른 곳에서 활용하고자 할때, 작업 내용이 사라지지 않도록 image로 저장하는 용도? (추측..)

3. example

> docker commit –change “ENV DEBUG true” c3f279d17e0a svendowideit/testimage:version3

[출처] [docker] import vs save vs commit|작성자 freepsw




화상회의-jitsi 설치

  • 참고사이트
  • 설치방법
    • 소스 다운로드
    • .env 파일 생성 및 패스워드 셋팅
      • sudo cp env.example .env
      • sudo ./gen-passwords.sh
    • config 폴더 생성
      • sudo mkdir -p /data1/jitsi/docker-jitsi-meet/.jitsi-meet-cfg/{web/letsencrypt,transcripts,prosody/config,prosody/prosody-plugins-custom,jicofo,jvb,jigasi,jibri}
    • SSL 복사
      • sudo mkdir -p .jitsi-meet-cfg/web/keys/
      • sudo cp -p /etc/apache2/ssl/ectech.co.kr_202003113US6.crt.pem .jitsi-meet-cfg/web/keys/cert.crt
      • sudo cp -p /etc/apache2/ssl/ectech.co.kr_202003113US6.key.pem .jitsi-meet-cfg/web/keys/cert.key
    • .env 환경 파일 편집
      • HTTP_PORT=31080
      • HTTPS_PORT=31443
      • TZ=Asia/Seoul
      • PUBLIC_URL=https://ectech.co.kr:31001
      • CONFIG=설치위치/docker-jitsi-meet/.jitsi-meet-cfg
      • ENABLE_AUTH=1 # 아무나 방을 만들지 않도록 인증 처리
      • ENABLE_GUESTS=1 # 손님도 개설된 방에 들어올 수 있도록 처리
      • AUTH_TYPE=internal # 원하는 인증방법을 등록 (internal : 아래 사용자 등록방법 있음, ldap)
  • 방화벽 오픈 
    • 10000 UDP – for general network video/audio communications
    • 3478 UDP – for quering the stun server (coturn, optional, needs config.js change to enable it)
    • 5347 TCP – for fallback network video/audio communications over TCP (when UDP is blocked for example), served by coturn
  • 실행
    • # 기본
      • docker-compose up -d
    • # 문서 공유 및 편집
      • docker-compose -f docker-compose.yml -f etherpad.yml up
    • # jisi 포함
      • docker-compose -f docker-compose.yml -f jigasi.yml -f jibri.yml up
  • 접속
    • https://도메인:31443
  • 기타
    • 사용자 등록
      • docker exec -it dockerjitsimeet_prosody_1 /bin/bash
      • prosodyctl –config /config/prosody.cfg.lua register 아이디meet.jitsi 비밀번호
    • 설정 변경 파일들.. 
      • 설치위치 하위
        • .env
        • /.jitsi-meet-cfg/web/
          • config.js
          • interface_config.js
    • 튜닝