OpenSSL을 Ubuntu에서 설치하고 업데이트하는 방법

OpenSSL 을 Ubuntu 16.04에서 설치하고 업데이트하는 방법

OpenSSL은 SSL과 TLS 프로토콜의 오픈 소스 구현입니다. OpenSSL을 Ubuntu 장치에서 설치하고 업데이트하는 것은 무척 간단하며, 이 글은 그에 대한 내용을 다룰 것입니다.

OpenSSL을 설치하고 업데이트하기

OpenSSL의 설치를 시작하기 전에, 현재 버전의 OpenSSL을 다음 명령어로 가져옵니다.

$ openssl version
OpenSSL 1.1.0h  27 Mar 2018

그 후, OpenSSL의 최신 버전을 다음 명령어로 다운로드 받습니다. 좌측 링크를 눌러 다운로드 항목 중에 적절한 버전을 선택합니다. openssl-1.x 형식으로 된 것 중에 최신을 권장하지만, pre가 붙은 버전은 정식 출시 버전이 아니므로 문제가 생길 우려가 있습니다.

버전이 낮은데도 지속적으로 갱신되는 버전이 있는데, 이는 LTS 버전으로, 앞으로 업데이트를 자주하지 않고 최신 기능이 필요하지 않으면서 안정적으로 쓰고 싶은 사람에게 적절합니다.

원하는 항목을 브라우저에서 링크만 복사하여 아래 wget 명령 우측에 채워줍니다. 여기서는 openssl 1.1.1 pre7 버전을 설치하는 모습입니다.

$ cd /usr/src
$ wget https://www.openssl.org/source/openssl-1.1.1-pre7.tar.gz
--2018-06-19 08:49:17--  https://www.openssl.org/source/openssl-1.1.1-pre7.tar.gz
Resolving www.openssl.org (www.openssl.org)... 202.43.57.191, 2600:140b:5000:1af::c1e, 2600:140b:5000:1ab::c1e, ...
Connecting to www.openssl.org (www.openssl.org)|202.43.57.191|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 8308876 (7.9M) [application/x-gzip]
Saving to: ‘openssl-1.1.1-pre7.tar.gz’

openssl-1.1.1-pre7.tar.gz   100%[=================================================>]   7.92M  4.00MB/s    in 2.0s

2018-06-19 08:49:26 (4.00 MB/s) - ‘openssl-1.1.1-pre7.tar.gz’ saved [8308876/8308876]

다운로드가 완료되면, 다운 받은 압축 파일을 다음과 같이 풀어줍니다.

$ tar -zxf openssl-1.1.1-pre7.tar.gz

수동으로 컴파일하기 위한 준비 작업이 필요합니다. 다음 명령으로 빌드 도구를 설치해주세요. 아래 명령에 파일을 찾을 수 없다는 오류가 발생하면, 우선 우분투 패키지 업데이트부터 실시합니다.1

$ sudo apt install build-essential

이어서 OpenSSL 컴파일 후 설치 및 업그레이드를 하기 위해서 다음 명령을 사용합니다. cd 명령어 뒤에 디렉토리명은 정확해도 되지만, 여기서는 편의를 위해 와일드카드로 간편하게 들어갔습니다. 둘 이상 존재한다면, 정확한 디렉토리명을 지정해주세요.

$ cd openssl*
$ ./config

참고로 위 ./config 대신 ./Configure --help를 참고하여 원하는 옵션을 더 넣을 수 있습니다. 특정 Cipher는 기본적으로 빠져있어서 이런 작업을 미리 해둬야 설치 후 사용 가능한 경우도 있습니다. 보통의 경우 위 명령으로 충분합니다.

이 작업이 끝나면, make 명령으로 OpenSSL의 설치를 준비합시다.

$ make

컴파일이 다 끝나면, make test 명령을 쳐줍니다.

$ make test

다양한 평가 항목이 완료되면, 루트 권한을 갖고 install을 시작합니다.

$ sudo make install

에러에 대한 언급이 없다면, 성공적으로 설치된 것입니다.

아래는 오류 발생시 따라합니다.

여기서부터 링크를 잘 걸어야 잘 실행할 수 있습니다. openssl 명령 실행시 error while loading shared libraries: libcrypto.so.1.1 등의 오류가 발생할 수 있습니다. libssl.so 또한 마찬가지입니다. 이 때 libcrypto.so와 libssl.so를 /usr/lib/usr/local/lib에 위치한 파일을 향하게 심볼릭 링크를 만들어야 합니다. 각 경로에 들어가서 파일이 (그것도 링크가 아닌 실행 가능한 파일로서) 실존하는지 확인합니다. 기존에 존재하던 예전 버전의 쓰레기가 있다면 제거합니다.

$ sudo rm /usr/lib/libcrypto.so*
$ sudo rm /usr/lib/libssl.so*
$ sudo ln -s /usr/local/lib/libcrypto.so.1.1 /usr/lib/libcrypto.so
$ sudo ln -s /usr/local/lib/libssl.so.1.1 /usr/lib/libssl.so
$ sudo ln -s /usr/local/lib/libcrypto.so.1.1 /usr/lib/libcrypto.so.1.1
$ sudo ln -s /usr/local/lib/libssl.so.1.1 /usr/lib/libssl.so.1.1

그리고 방금 설치한 openssl이 bin 폴더에 바로 저장될 수도 있지만, 다른 곳에 만들어졌을 수 있습니다. 위 make install에서 bin 파일이 어디 만들어졌는지 확인하고, 원래의 openssl을 치워버리고 링크해야 합니다.

$ sudo mv /usr/bin/openssl /root/
$ sudo ln -s /usr/local/bin/openssl /usr/bin/openssl

간단한 설치와 업데이트 방법이죠? OpenSSL은 기본적인 암호화 기능과 다양한 유틸리티 기능을 제공합니다. https 서비스 연결, ssh 터미널에도 쓰입니다. 또한, 명령줄을 통해 온라인 인증서에서 정보를 검증하고 추출하는데도 쓰일 수 있습니다.

사견으로, 빌드 난이도는 nginx보다도 낮은, 무척 쉬움에 속하며 아무래도 종속성이 낮은 원시 코드에 가까워서 그런 것 같습니다. 그러나 시스템 설치 단계에서 기존 버전과 충돌을 처리하는 방법에서 고민해야하는 부분이 많으므로, 시스템 백업을 사전에 한 후 도전하길 강력하게 권합니다.

소멸세계, 무라타 사야카, 2015

소멸세계: 멋진 신세계와 다른 의미로 신세계, 그리고 편협한 표현.

요약

「섹스」도「가족」도 세계에서 사라진다. 인공수정으로 아이를 낳고, 부부간 섹스를 근친상간으로 터부시한 세계.

소설은 제2차 세계대전으로 많은 남성이 전쟁터로 징용되면서 태어나는 아이의 수가 극단적으로 줄어든 ‘평행세계’를 배경으로 한다. 이곳에서는 더 이상 섹스를 통해 아이를 낳지 않고, 결혼도 프로그램에 원하는 조건을 넣으면 ‘매칭’시켜주는 상대와 하며, 아이는 인공수정으로만 얻을 수 있다.

비 내리는 여름날 태어난 주인공 아마네(雨音)는 초등학교 시절, 자신이 인공수정이 아니라 ‘남다른 방법’으로 태어났다는 사실을 알게 된다. 그 뒤로 왜 엄마는 ‘교미’를 해서 자신을 낳은 건지, 자신의 진짜 본능은 무엇인지 알기 위해 아마네는 사랑과 섹스에 몰두한다. 과연 그녀가 찾아낸 것들은 우리에게 어떤 의미를 던져줄까?

소감

리디북스 무료 60일 ebook 대여로 읽게 된 소설이다. 길이도 생각보다 짧고 페이지는 술술 넘어가는 편인데, 일본 소설 특유의 전개는 느껴진다. 하지만 말이 많지 않으면 1인칭 혼동도 적기 때문에 이 정도의 구성이면 괜찮은 편이라 할 수 있다.

가정은 있지만 관계 파트너가 아닌 건조한 사이가 정상이 되고, 끈적한 사이는 밖에서 일시적으로 벌어지는 것으로 몰아낸 세계. 그런 것에서 과거와 현재, 심지어 다가올 미래도 실험 도시를 통해 느껴본 아마네에게는 (그리고 이 불친절한 소설에 당혹스러운 독자에게도) 혼란만 낳을 뿐이었다. 그런 이들에게 작중 인물 주리가 짚어준 의견이 있다.

“누구나 진화의 과정에 있는 동물일 뿐이야. 세상의 상식과 부합하든 하지 않든 우연에 불과하고, 다음 순간에는 무엇이 옳은지 판단할 수 없어지는 것이지”

이것은 마치 원시 시대에서 우리가 화장실을 분리하고, 냄새나는 것들을 집에서 멀리해왔던 지금까지의 발전과 같은 것으로, 그게 끝을 향해간 모습이 아닌가 하고 생각하게 되었다. 섹스가 생산과 완전히 분리되는 순간, 오락으로 끝나는 것일 줄만 알았는데, 심지어 파트너도 없이 조용히 모든 것을 해결할 수 있는 시설이 갖춰지기에 이른다. 파트너가 없으니까 마지못해 해야하는 것이 아니라, 그것으로 만족하게 되어 버리고 아무런 의미를 갖지 못하게 된 세계는 과연 진보한 세계인가.

소멸세계, 서두에서 꺼낸 멋진 신세계라는 작품과 통하는 제목이 느껴지는데, 포커스를 딱 가족으로 옮김으로써 인간성의 해체가 극대화되는 느낌이 든다. 실험 도시에서 느껴지는 아이들의 몰개성한 모습은 정부가 요구하는, 문제 없는 무난한 사회를 위한 최선의 방법일 것이다. 또 남녀 무관하게, 심지어 동성끼리여도 아이를 갖는데 문제가 없고 철저히 공동 양육으로 넘어간 뒤라면, 전통적인 남녀 구분이 불필요하다는 것을 막장에서 잘 보여주고 있다. 책에서는 남자인지 여자인지 모를 아이가 나왔지만, 이 사회가 발전하면 생물학적 성 자체가 없어지게 ‘진화’하는 것인가, 그런 재미 없는 세상이 또 있을까 하고 탄식이 나왔다.

우리의 움직임과 올바름이 미래 세계를 어떻게 바꿀지에 대해 항상 희망적으로만 생각해왔고, 불행은 자원 고갈과 같은 외부적 요인에서 올 것이라 생각했다. 하지만 역사가 그렇듯이, 무난한 평화와 번영 속에 자리잡은 무의식이 사회를 예기치 못한 인간성 말살로 잇게 만드는 것은 아닐지 고민해봐야 할 것이다.

그걸 논하기에 이 책이 충분히 문제를 다루고 있다고 여겨지지 않는다. 아무래도 히트작 «편의점 인간»을 아직 읽지는 않았지만, 그 이전에 쓰여진 작품인 만큼 미숙한 부분이 있던 것은 아닐까 생각한다. 작중 인물들도 임신과 출산에 대해서 궁리만 하지 그 이유에 대해서 논하지 않는다. 그런 의미에서 감성적인 여성의 관점이 매우 깊이 녹아 있는 것 같다. 그래도 이러한 가능성에 대해 상상해보는 것으로, 이미 변하기 시작한 뒤에 깨닫기엔 늦을 가치관의 변화에 대해 진지하게 고민해볼 수 있었던 것 같다.

등장 인물

Read More

[번역] Docker 컨테이너를 Windows Bash에서 구동하기

Linux를 위한 Windows Subsystem(WSL)1이 Microsoft의 Build 컨퍼런스 2016에서 발표되었을 때, Windows 개발자들에게 새로운 도구의 세계가 열렸습니다. 개인적으로, PowerShell, Bash와 예전의 낡은 cmd까지, 스크립트를 할 때 자유롭게 고를 수 있다는 점을 참 좋아합니다. 그리고 Windows Bash에서 Docker 를 구동하지 못하고 있다는 점은 저를 지금까지도 괴롭게 합니다.

이 글의 원본 제목은 “Windows Bash에서 Docker를 구동하기”였습니다만, 이는 다소 과장되어 있습니다. Docker 는 Windows에서 완전히 완성되지 않은 수많은 시스템 호출에 대한 접근을 필요로 하며, 이로 인해 WSL에서 엔진을 구동하는 것은 아마도 쉽지 않을 것입니다. 대신, 우리는 Docker Engine을 Windows에서 구동하고 이를 Bash에서 연결할 것입니다. 이 또한 PowerShell에서 컨테이너를 시작하고 Bash로 상호작용하거나, 다른 방식을 제공한다는 장점을 갖고 있습니다. 다시 말해서, 당신의 컴퓨터가 단일 머신처럼 느껴질 것입니다.

그 방법을 알아봅시다.

1. Docker를 Windows에서 설치하기

Docker 엔진을 Windows에서 설치하려면, docker.com에 가서 적절한 배포판을 다운로드합니다. 물론, 하드웨어 가상화가 활성화돼있고, Hyper-V가 설치되어 있어야 하며, 그렇지 않으면 엔진이 시작되지 않습니다.

가장 빠른 방법: Windows 10 크리에티터 업데이트 설치

Windows 실행 파일을 Bash에서 실행할 수 있게 되었기 때문에, Windows 10 크리에이터 업데이트에서는 이 과정이 더욱 단순해졌습니다. 그저 아래 두 줄을 .bashsrc에 추가하고 (환경을 다시 로드하면) 끝납니다!

export PATH="$HOME/bin:$HOME/.local/bin:$PATH"
export PATH="$PATH:/mnt/c/Program\ Files/Docker/Docker/resources/bin"
alias docker=docker.exe
alias docker-compose=docker-compose.exe

docker –version을 Bash에서 실행하면, 나머지 글을 읽을 필요도 없습니다. :)

*) Windows 10 크리에이터 업데이트는 2017년 4월 11일에 인사이더에 공개되었으며 현재 유효합니다.

Windows 10 애니버서리 에디션에서 작동하는 법

Docker를 WSL에 설치하기 위해서, 몇 가지 더 많은 단계가 필요합니다. 일부 선택적 단계를 제외하고는 WSL에서도 잘 작동하는, 일반적인 Ubuntu 설치 방법은 여기 적혀 있습니다.

제가 한 방식은 이것입니다:

# Install packages to allow apt to use a repository over HTTPS
$ sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
# Add Docker's official GPG key
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# Set up the repository
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
# Update source lists
sudo apt-get update
# Install Docker
sudo apt-get install docker-ce

물론 필요한 바이너리를 다운받고 압축을 푸는 작업, 그리고 그것을 PATH에 넣는 방식의 선택지도 있습니다. 가장 최신 버전에 맞는 방법은 여기 적혀 있습니다.

그 결과는?

Docker 엔진을 Windows와 WSL 양쪽에 설치했지만, 둘 다 구동하진 않았습니다. Windows 인스톨러는 고맙게도 Docker 엔진을 시작할 때 쓰는 Docker 바로 가기를 바탕 화면에 만들어놨습니다. 그리고 docker images를 PowerShell이나 Bash에서 호출할 수 있습니다.

PowerShell:

PS C:\> docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

아직까지 이미지를 아무 것도 만들지 않았지만, 괜찮습니다.

Bash:

$ docker images
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

전혀 만족스럽지 못하군요. 하지만 한 두 가지 과정을 더 거치면, 모두 잘 작동할 것입니다.

2. Windows Docker로 WSL의 Docker 연결하기

docker를 다른 장치의 엔진을 대상으로 구동하는 것은 꽤 쉬운데, Docker가 CLI가 연결될 수 있는 TCP 엔드포인트를 노출할 수 있기 때문입니다.

참고: 글을 처음 공개한지 얼마 되지 않아서 Docker 업데이트를 통해 이 TCP 엔드포인트는 기본적으로 꺼져 있습니다. (Mark님 알려주셔서 감사해요!) 활성화하려면, 작업표시줄에 있는 Docker 아이콘을 우클릭하여, 메뉴에서 설정을 들어갑니다. 그리고 “Expose daemon on tcp://localhost:2375 without TLS” 옵션을 켭니다 (보안 위험성에 유의합니다).

export PATH="$HOME/bin:$HOME/.local/bin:$PATH"
export PATH="$PATH:/mnt/c/Program\ Files/Docker/Docker/resources/bin"
alias docker=docker.exe
alias docker-compose=docker-compose.exe

이렇게 하면, 다음처럼 할 일은 Bash 상의 CLI가 Bash 상에는 없는 엔진 대신에 Windows에서 엔진을 실행하게 됩니다.

$ docker -H tcp://0.0.0.0:2375 images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

훨씬 낫군요!

이 상태를 지속하게 만드는 두 가지 방법이 있습니다. 위 명령을 별명으로 추가하거나, 아니면 더 나은 방법으로(Dave님의 추천), Docker가 호스트 엔진을 찾도록 환경 변수를 만들면 됩니다.

$ echo "export DOCKER_HOST='tcp://0.0.0.0:2375'" >> ~/.bashrc
$ source ~/.bashrc

이제, 도커 명령을 Bash에서 실행하면, 우리가 바라던 대로 작동하게 됩니다.

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

미션 성공!


이 글에서 사용한 버전

물론, 이 방법이 사용하는 버전에 따라 되지 않을 수 있습니다. 이 블로그 포스트에서는 다음과 같은 버전을 사용하였습니다.

Windows

Windows 10 Pro Anniversary Edition (Version 1607, OS Build 14393.1066)
Windows 10 Pro Creators Update (Version 1703, OS Build 15063.138)

WSL Ubuntu

14.04.5 LTS

Docker on Windows

17.03.1-ce, build c6d412e

Docker on Ubuntu

17.03.1-ce, build c6d412e

출처: https://blog.jayway.com/2017/04/19/running-docker-on-bash-on-windows/