리눅스에서 USB 설치 미디어 만들기

Prerequisite

자동 마운팅 기능이 활성화 되어 있거나 수동으로 마운팅 하여 USB저장 장치가 마운트 되어 있다면 마운트해제한다.

lsblk 명령으로 블럭 디바이스를 확인한다.

NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda           8:0    0 953.9G  0 disk 
├─sda1        8:1    0   512M  0 part 
└─sda2        8:2    0 953.4G  0 part /home/data
sdc           8:32   1  14.3G  0 disk 
└─sdc1        8:33   1  14.3G  0 part /run/media/user/7AFC-CAE9
nvme0n1     259:0    0   1.9T  0 disk 
├─nvme0n1p1 259:1    0   512M  0 part /boot
├─nvme0n1p2 259:2    0    64G  0 part /
└─nvme0n1p3 259:3    0   1.8T  0 part /home

sda, sdc, nvme0n1 세개의 블럭 디바이스가 있다. 그중에 sdc가 USB 장치 이고 sdc1/run/media/user/7AFC-CAE9에 마운트 되어 있다.

마운트를 해제한다.

sudo umount /dev/sdc1

Read more

크리에이티브 커먼즈 라이선스
이 저작물은 크리에이티브 커먼즈 저작자표시 4.0 국제 라이선스 에 따라 이용할 수 있습니다.

Share

LD_LIBRARY_PATH vs LIBRARY_PATH

LD_LIBRARY_PATH vs LIBRARY_PATH

외부 C 라이브러리를 사용하는 패키지를 Python 패키지를 설치 하려고 하는데 검색할 C 라이브러리 위치를 지정하려고 무심코 LD_LIBRARY_PATH 변수에 지정했는데 컴파일이 계속 실패 한다.

/usr/bin/ld: cannot find -ltest

삽질을 좀 하다가 생각해보니 LD_LIBRARY_PATH는 실행 타임에서 사용되고 실제 컴파일 시에는 -L 옵션을 했다는 것이 생각 난다.

다음과 같이 -L 옵션으로 검색할 디렉터리를 지정할 수 있다. -l 옵션으로는 라이브러리를 지정한다.

gcc -o test.o -L/path/to/custom/lib -ltest

빌드 설정파일을 변경하면 되지만 직접 관리하는 소스가 아닌경우 업데이트 시 매번 같은 작업을 해주어야 하기 때문에 환경 변수로 라이브러리 경로를 설정 하는 방법이 있으면 좋을 것 같다. GCC manual 페이지를 읽어 보니 컴파일 타임에 라이브러리(링커 파일)검색 할 때는 LIBRARY_PATH 변수를 설정해 주면 된다. -L 옵션으로 지정한 디렉터리가 우선시 된다.

Read more

크리에이티브 커먼즈 라이선스
이 저작물은 크리에이티브 커먼즈 저작자표시 4.0 국제 라이선스 에 따라 이용할 수 있습니다.

Share

GPG를 이용하여 Git 커밋에 서명하기

커밋에 서명이 필요한 이유

Git은 버전관리 시스템(VCS, Version Control System)이기 때문에 가지는 태생적인 문제가 있다. Subversion과 같은 중앙 집중형 버전관리 시스템은 모든 소스트리가 중앙에서 관리 되기 때문에 사용자사 자신의 수정사항을 저장하고 싶으면 중앙에 있는 버전관리 시스템으로 커밋(서브버전 기준)하여야 한다. 인증 이 필요한 원격의 저장소를 사용한다고 가정하면 커밋할때 마다 매번 인증을 받아야 하고 인증 받은 정보가 Commit에 포함되기 때문에 인증 정보를 도용당하지 않는 이상 기여자의 정보가 부정 사용될 경우는 거의 없다.

하지만 Git와 같은 분산형 버전관리 시스템의 경우 로컬에서 자신만의 소스 관리가 가능하고 커밋에 저장되는 커밋의 작성자(Author) 커밋터(Committer)정보가 커밋의 주체가 제공하는 정보에 의존하기 때문에 기여자의 정보가 부정 사용될 우려가 있다.

최근 나오는 사기의 대부분은 권위있는 사람이나 사이트 또는 단체로 가장하여 사용자의 결제 정보를 포함한 개인 정보를 탈취하는 것이다.

프로젝트의 관리자가 Pull Request를 받았다고 가정하자. 가장 이상적인 관리 방법은 관리자가 모든 코드를 리뷰 하고 문제가 없을 경우에만 해당 요청을 승인 하는것이지만 관리자가 모든 코드를 리뷰 하지 못하는 경우 앞서 학습된 기여자의 평판에 의존 하여 승인 여부를 결정 할 수 있다. 공격자는 관리자가 신뢰할 만한 기여자의 이름을 도용하여 Pull Request를 하면 관리자는 도용된 기여자의 평판을 기반으로 승인 여부를 결정할 수 있기 때문에 문제가 발생할 수 있다. 그렇다면 이러한 명의의 도용을 막는 방법은 무엇이 있을까?

Read more

크리에이티브 커먼즈 라이선스
이 저작물은 크리에이티브 커먼즈 저작자표시 4.0 국제 라이선스 에 따라 이용할 수 있습니다.

Share

GPG(GnuPG) 사용하기

OpenPGP의 GNU 구현인 GPG(GnuPG)와 그 사용법에 대하여 알아보자.

GPG란?

GPG(GNU Privacy Cuard)는 GNU에서 제공하는 OpenPGP(RFC4880)의 오픈소스 구현이다.

개인간, 머신간 또는 개인 - 머신간에 교환되는 메시지나 파일을 암호화 하거나 서명을 추가 하여 작성자를 확인하고 변조 유무를 식별할 수 있게 해주는 도구다.

기본적으로 RSA와 같은 공개 키 암호화 방식을 사용하여 종단간 파일이나 메시지를 암호화 하거나 서명 하는 기능을 제공한다.

GnuPG에 대한 자세한 내용은 나무위키/GnuPG 또는 위키피디아/GNU 프라이버시 가드를 참고 한다.

PGP에 대한 내용은 나무위키/PGP 또는 위키피디아/PGP를 참고 한다.

이 문서에서는 GPG의 사용법에 대하여 설명 하도록 한다.

공개 키 암호화 방식에 관한 내용은 공개 키 암호화 방식이란?을 참조한다.

Read more

크리에이티브 커먼즈 라이선스
이 저작물은 크리에이티브 커먼즈 저작자표시 4.0 국제 라이선스 에 따라 이용할 수 있습니다.

Share

Insync Moving to new computer without re-syncing

이 글에서는 Insync을 사용중 PC를 옯기거나 OS를 재설치 하여야 하는 경우 재 동기화 없이 데이터를 옮기는 방법에 대하여 설명한다.

Insync: Google Drive Syncing Application for Linux

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

Insync 종료

PC를 Apple에서 Banana로 옯기는 경우 Apple PC와 Bnana PC에서 Insync를 종료 한다. OS를 다시 설치 하는 경우 해당 PC의 Insync만 종료 한다.

insync quite
insync-headless quite

Data 디렉터리 백업 또는 이동

다른 컴퓨터로 이동

Insync의 동기화 폴더를 Apple에서 Banana로 이동한다.

리눅스의 경우 rsync로 동기화 할 수 있다. 이동 하고자 하는 Banana에 접속 하여 아래 명령을 수행한다.

실제 명령 입력 시 Apple은 자신의 기존 컴퓨터의 호스트네임으로 변경한다.

AppleBanana의 동기화 디렉터리는 경로가 같아야 한다.

Read more

크리에이티브 커먼즈 라이선스
이 저작물은 크리에이티브 커먼즈 저작자표시 4.0 국제 라이선스 에 따라 이용할 수 있습니다.

Share

Certbot을 이용하여 Let's Encrypt 인증서 자동 갱신하기

이 글에서는 certbot을 통해 발급받은 Let’s Encrypt 인증서를 Webroot 플러그인을 이용해 자동 갱신 방법에 대히여 알아본다.

Prerequsites

Webroot 디렉터리를 생성한다.

이미 설정되어 있는 root 디렉터리(/usr/share/nginx/html 등)에 .well-known 디렉터리를 생성해도 되지만 관리의 편의를 위하여 별도의 디렉터리를 생성한다. 디렉터리 위치는 /var/www/certbot로 한다.

sudo mkdir -p /var/www/certbot

Nginx 설정

기본 설정 파일을 열어 server섹션에 다음 내용을 추가 한다.

location /.well-known/ {
    root /var/www/certbot/;
}

Read more

크리에이티브 커먼즈 라이선스
이 저작물은 크리에이티브 커먼즈 저작자표시 4.0 국제 라이선스 에 따라 이용할 수 있습니다.

Share

SSH config and Include Statement

~/.ssh/config

SSH를 사용하다보면 서버별 접속 옵션이나 암호화 방식을 달리 해야 될 경우가 있다. 이때 이러한 설정 정보들을 ~/ssh/config 파일에 저장해 두면 접속시에 명령행에 옵션으로 주지 않더라도 적용된다.

~/.ssh/config파일의 활용법은 다음과 같다.

서버 별칭(Aliases) 부여

또한 Domain Name이 할당되어 있지 않고 IP 주소로 접속하는 경우 서버에 자신만의 이름을 부여하고 그 이름으로 접속할 수 있기 때문에 매우 유용하다.

접속하고자 하는 IP 1.2.3.4에 Domain Name이 할당되어 있지 않거나 해당 IP 정보가 /etc/hosts에 지정되어 있지 않더라도 호스트 지정자로 1.2.3.4test로 지정돼어 있기 때문에 1.2.3.4 뿐 아니라 test로 접속 해도 1.2.3.4 로 접속된다.

ssh 1.2.3.4

또는

ssh test

접속 SSH Port 변경

외부에 공개된 서버의 SSH 데몬의 포트 번호를 보안상의 이유등으로 변경한 경우 변경된 SSH 포트 번호를 config 파일에 Port 옵션으로 지정하면 -p 옵션으로 포트번호를 지정할 필요 없이 접속가능하다.

Host example.com
    Hostmname example.com
    Port 5545
    PreferredAuthentications password 
    PubkeyAuthentication no

인증을 위한 Identity 파일 지정

키 관리를 위해 Key Agent를 사용하지 않는 경우 인증을 위해 Identity 파일을 명시적으로 -i 옵션으로 지정할 수 있다.

~/ssh/config 파일에 IdentityFile 옵션을 사용하여 명시적으로 Private Key를 지정할 수 있다.

아래는 example.com인증을 위해 개인키로 ~/.ssh/test를 지정한 예제이다.

Host example.com
    Hostmname example.com
    IdentityFile ~/.ssh/test

Read more

크리에이티브 커먼즈 라이선스
이 저작물은 크리에이티브 커먼즈 저작자표시 4.0 국제 라이선스 에 따라 이용할 수 있습니다.

Share

RSYNC+SSH 를 이용한 증분 백업 설정 및 Cron을 이용한 자동화

RSYNC+SSH 를 이용한 증분 백업 및 Cron을 이용한 자동화

관리 하는 서버가 많아지고 서버에 저장되는 데이터의 양이 늘어 날 수록 백업을 어떻게 하여야 하는지 고민이 생긴다.

이 포스트에서는 RSYNC와 SSH를 이용하여 여러 서버의 데이터를 백업하고 이를 자동화 하는 방법에 대하여 기술 한다. 테스트를 위한 서버 구성은 다음과 같다.  

아래 예제 에서는 apple, banana, coconut/home 디렉터리를 backupbot으로 백업 하고자 한다.

Backup Environment

Read more

크리에이티브 커먼즈 라이선스
이 저작물은 크리에이티브 커먼즈 저작자표시 4.0 국제 라이선스 에 따라 이용할 수 있습니다.

Share

jQCloud를 이용하여 Hugo 사이트에 Tag Cloud 추가하기

이 글은 Hugo 기반 Blog에서 jQuery 기반 Word Cloud 라이브러인 jQCloud를 이용하여 Tag Cloud를 만드는 방법에 대하여 설명한다.

tag cloud

Read more

크리에이티브 커먼즈 라이선스
이 저작물은 크리에이티브 커먼즈 저작자표시 4.0 국제 라이선스 에 따라 이용할 수 있습니다.

Share

Hugo 사이트에 Weighted Tag Cloud 추가하기

이 글은 Hugo 기반 Blog에서 Tag Cloud를 만드는 방법에 대하여 설명한다.

tag cloud

Tag의 사용빈도에 따라 Tag의 크기를 조절한다.

Read more

크리에이티브 커먼즈 라이선스
이 저작물은 크리에이티브 커먼즈 저작자표시 4.0 국제 라이선스 에 따라 이용할 수 있습니다.

Share