Building Docker Image for Cross Platform(ARM64, ARM)

Building Docker Image for Cross Platform(ARM64, ARM)

Building Docker Image for Cross Platform

arm64 머신과 x86 머신에서 동작해야 하는 프로젝트를 진행하게 되었다. 동일한 소스 트리를 유지하지 위해 하나의 아키텍처로 작업하는 경우 보다 더 많은 노력이 팔요하지만 프로젝트 진행 중 가장 귀찮(짜증나는)은 작업은 테스트를 위해 arm64과 x86 머신에서 이미지를 따로 빌드 해야 하는 것이었다.

개발 서버(PC)에서 ARM 이미지를 빌드 하는 방법을 찾던 중 qemu의 arm emulation 기능을 이용하여 x86 머신에서 arm용 Docker 이미지를 Cross Build 하는 방법을 찾아 공유한다.

Install Docker

sudo apt update
sudo apt dist-upgrade
curl -fsSL test.docker.com -o get-docker.sh && sh get-docker.sh

And add current user to docker group

sudo usermode -aG docker $USER
HOWTO install LDAP Server

HOWTO install LDAP Server

HOWTO install LDAP Server

본 포스트는 OpenLDAP을 사용하고자 하는 분들에게 도움을 주고자 작성 되었습니다.

Prerequisite

패키지 리스트를 최신으로 업데이트한다.

sudo apt-get update
Insync 3.x auto start with xvfb and systemctl

Insync 3.x auto start with xvfb and systemctl

이 글에서는 Google Drive 와 One Drive의 third-party 동기화 유틸인 Insync의 headless 버전을 설치 하고 자동 실행 하는 방법에 대하여 알아본다.

Insync: Google Drive Syncing Application for Linux

Insync: 리눅스를 위한 Google Drive 동기화 어플리케이션

Insync가 3.x 버전으로 판올림 되면서 headless 버전이 없어 졌기 때문에 Gnome등의 UI로 로그인 하여야 Insyc를 설행 할 수 있다.

하지만 서버의 경우 자동 로그인을 실행하면 보안 상의 문제가 있으므로 자동 로그인 설정을 할 수 없다.

이문제를 해결 하기 위하여 xvfb와 systemctl 을 이용하여 Insync UI 버전을 자동 실행하는 방법에 다여 알아본다.

3.x 버전의 Headless 버전이 릴리즈 되었다. 이를 이용한 자동 실행 방법은 다음 Insync 3.x auto start with systemctl를 참고한다.

Desktop 버전 라이센스로 같이 사용할 수 있을 줄 알았는데. 서버용 라이센스를 별도로 구매 해야 한다. WTF 그것도 시작 가격이 일년 39.99 달러, 거기다 나처럼 Google Workspace를 사용하여 gmail.com 이 아닌 커스텀 도메인 을 사용하는 사람은 일년에 159.99 달러다. 이글을 참고 하여 Insync Desktop 버젼을 자동실행 하는 방법을 사용하자.

Prerequisites

  • insync
  • xvfb

Insync 설치

Insync의 설치 방법은 Insync - Linux에서 Google Drive Desktop Client 사용하기를 참고 한다.

xvfb 설치

sudo apt install xvfb
리눅스에서 한/영 전환키 사용하기

리눅스에서 한/영 전환키 사용하기

문제점

  • 영문 키보드 구입
  • 오른쪽 Alt 키 (Alt_R)을 한글 키로 사용 하고 싶음.
  • IBus 등에서 한/영 변환을 Alt_R 키로 등록
    • 다른 프로그램에서는 잘 동작.
    • Alt_R 키를 단축키로 사용하는 프로그램(Chrome)등에서는 동작이 안됨
  • Ctrl_R은 Hanja 키로 매핑 시키고 싶지 않음.
쉘에서의 큰따옴표와 작은따옴표(인용부호, Quoting) 그리고 백슬래쉬(Baskslash)

쉘에서의 큰따옴표와 작은따옴표(인용부호, Quoting) 그리고 백슬래쉬(Baskslash)

쉘에서 사용되는 세가지 인용법에 대하여 알아보자.

SHELL에서 인용(Quoting) 이란?

쉘에서 인용(Quoting) 은 특정 문자나 단어가 가지는 특별한 의미(또는 기능)를 제거 하는데 사용된다. 예를 들어 빈칸(white space) 은 쉘에서 인자를 구분하는데 쓰이지만 Quoting빈칸(<whitespace>) 매개변수를 구분하는 기능이 무시된다.

쉘에서 Quoting 메커니즘은 세가지가 있다.

  • 이스케이프 문자(Escape Character): Hello\ World
  • 작은따옴표(Single Quotes, '): 'Hello World'
  • 큰따옴표(Double Quotes, "): "Hello World"

Hello\ World, 'Hello World' "Hello World" 이 세가지 모두 하나의 매개변수로 취급 한다.

쉘에서 아래 명령을 실행해 보자. 다음 명령은 매개변수의 갯수를 나타내는 변수 $# 를 출력한다.

sh -c 'echo $#' Hello World
sh -c 'echo $#' Hello\ World
sh -c 'echo $#' 'Hello World'
sh -c 'echo $#' "Hello World"

결과를 보자.

$ sh -c 'echo $#' echo Hello World
1
$ sh -c 'echo $#' echo Hello\ World
0
$ sh -c 'echo $#' echo 'Hello World'
0
$ sh -c 'echo $#' echo "Hello World"
0
공개키 암호화 방식이란? (Waht is Public-Key cryptography)

공개키 암호화 방식이란? (Waht is Public-Key cryptography)

공개키 암호화 방식 (Public-Key cryptography)

암호화와 복호화에 같은 키를 사용하는 대칭키 암호화 방식과 달리 암호화와 복호화에 서로 다른 키를 암호화 방식을 의미한다. TLS/SSL에서 사용되는 RSA가 대표적인 공개키 암호화 방식의 대표적인 예이다.

공개키 암호화 방식의 대 전제는 다음과 같다.

공개키로 암호화한 정보는 개인키로만 복호화 할 수 있고 개인키로 암호화 한 정보는 공개키로만 복호화 할 수 있다.

암호화와 복호화에 사용되는 키다 서로 다르기 때문에 비대칭키 암호화 방식이라고도 불린다.

공개키 암화화 방식의 대표적인 용도는 다음과 같다.

  • 암호화된 통신을 원하는 두 단말 사이에 암호화를 대칭키를 전달하는 전달하는 용도로 사용된다. (TLS)
  • 전달하고자 하는 문서(파일 또는 정보)의 작성자를 증명(서명)하는 용도 와 해당 쩡보가 허가 되지 않은 사용자에 의해 변조 되지 않음(무결성)을 증명하는 용도로 사용된다.
Python - Set 과 List 그리고 Tuple

Python - Set 과 List 그리고 Tuple

Set(집합) 이란?

Python 내장 데이터 타입이다.

A set object is an unordered collection of distinct hashable objects.

해시 가능한 반복가능 하고 변경 가능하며 중복요소가 없는 데이터 유형의 정렬되지 않은(순서가 지정되지 않은) 컬렉션이다.

일반적으로 포함테스트(a in sets), 중복제거, 교집합, 합집합, 차집합, 대칭차와 같은 수학적 계산에 사용된다.

List, Tuple과의 차이

List, Tuple 은 순서가 있는(ordered) 컬렉션이지만 Set은 순서가 없은 컬렉션이다.

ListTuple의 차이는 가변성에 있다. List은 초기화 이후에 수정 수 있으나 Tuple은 초기화 이후에 수정할 수 없다.

특징

임이의 값이 컬랙션에 포함되어 있는지 테스트 하는 경우 리스트에 비해 월등히 빠른 성능을 보여 준다.

Hash로 관리 되기 때문이다.

Keep persistent SSH session using autossh and cron

Keep persistent SSH session using autossh and cron

Keep persistent SSH session using autossh and cron

Background Knowledge

SSH Tunneling

  • Local Port Forwarding: used to forward a port from the client machine to the server machine.
  • Remote Port Forwarding:

Local Port Forwarding

ssh -L [bind_addr:]port:target_addr:target_port user@server
  • bind_addr
  • port
  • target_addr
  • target_port
  • user
  • server

Remote Port Forwarding

ssh -R [bind_addr:]port:target_addr:target_port user@server
  • bind_addr
  • port
  • target_addr
  • target_port
  • user
  • server