Git

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

커밋에 서명이 필요한 이유

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

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

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

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

Let use gollum wiki

Let use gollum wiki

gollum - A git-based Wiki

Docker Image

https://github.com/euikook/gollum-unicorn.git

Install instruction

Let’s Encrypt

Set DOMAINS variable

export DOMAINS="oneuon.com notes.oneuon.com"

Start nginx webroot server

make webroot

Get Let’s Encrypt certificate using certbot

make certbot

Run Gollum as docker service

docker-compose up -d

Generate sitemap.xml

gollum/app.rb

bin/gollum.rb

views/sitemap.rb

«Note(“Did you know?”, “https://github.com/euikook/gollum")>>

Override git user name and email address temporarily

Override git user name and email address temporarily

이 글에서는 전역이나 프로젝트에 설정된 git 사용자가 자신이 아닌경우 임시로 username과 email을 설정 하는 방법을 설명한다.

Terminal에서 git 명령을 수행 하기 전에 아래 명령을 수행하여 git 명령을 잠시 override 하자.

alias git='git -c "user.name=euikook" -c "user.email=euikook@oneuon.com"'

임시 사용자 이름 및 이메일 주소 설정

Terminal을 빠져 나오면 설정이 날아가기 때문에 타인의 PC에서 수정한 사항을 커밋할 경우 유용하게 사용할 수 있다.

Instructions of post OS install

OS 재설치 후 해야 하는것 들

OS 재설치 후 해야 하는 내용들을 정리 한다.

파일 복사

rsync를 이용한다.

USB등 외부 디스크를 통한 복사

rsync -avzh $SRC $DST

네트워크(SSH)통한 복사.

시간이 오래 걸리지만 편함.

rsync -avz -e ssh $REMOTE_HOST:/$$SRC $DST

Python3 ad default python interpreter on ubuntu

Python 기본 인터프리터 설정 하기

sudo update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 10
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10

sudo update-alternatives --config pip
sudo update-alternatives --config python

git fetch all branches and push it to another remote

git fetch all branches and tags from origin, then push it to new remote

git fetch --all
for branch in `git branch -r`; do git branch --track ${branch#origin/} $branch; done
git remote add new https://newrepos.com/new.git
git push new --all
git fetch --tags
git push new tags