[튜토리얼] Oracle Cloud로 내 개인 서버를 열어보자

오늘은 Oracle Cloud를 이용해 평생 무료의(!!!) 개인 서버를 구축해보도록 하겠습니다.
앞 부분에는 간단한 배경 설명으로 채웠습니다. 실제 구축 과정은 여기(클릭)서 시작합니다.

Oracle Cloud란?

요즘 들어 클라우드 컴퓨팅이 대세인 것 같습니다. 인터넷 쇼핑으로 유명한 Amazon의 Amazon Web Service(링크), 세계 최대 검색 엔진 Google의 Google Cloud(링크), Microsoft사의 Azure까지, 가장 유명한 클라우드 서비스라고 하면 저는 이 3개가 먼저 생각납니다. 이 외에도, 중소규모의 클라우드 서비스들이 다양히 존재하고 또 새로이 우후죽순으로 생겨나는 클라우드 서비스들이 있습니다.

Java와 SQL로 유명한 Oracle 역시, 기존 기업을 대상으로 클라우드 서비스를 제공해주고 있었습니다. 그러던 중, 2019년 9월 Free Tier라는 이름으로 평생 무료 클라우드 서비스를 선보였습니다(링크). 기존 클라우드 서비스 업계에서 기간 무료(AWS – 12개월), 혹은 크레딧 제공(Azure, Google Cloud) 등의 이벤트성으로 클라우드를 무료로 사용해볼 수 있었지만, 이제는 무료로 사용할 수 있는 클라우드 서비스가 있다는 점에서 그 강점이 있습니다.

클라우드 리젼 및 가용성

현재 2020년 8월 기준으로, Oracle Cloud에는 한국 내 2개의 Region(서울, 춘천)이 존재합니다. 사실상 위에서 언급한 3대 클라우드사들은 모두 한국에 Region이 존재합니다. 다만 춘천이라는 생소한(!) 곳에 리젼이 존재하는 것은 처음 봐서 너무 신기했습니다.

사실 클라우드 리젼 그 자체보다는 1. 가격과 2. 네트워크 연결성, 그리고 3. 가용성이 가장 큰 선택의 요소가 될 것 같습니다. 저는 체감적으로는 Oracle사가 가격으로는 가장 저렴한 클라우드 서비스가 아닐까 하고 생각합니다. 실제로도 Oracle은 AWS와 비교하며 가격 경쟁력을 무기로 마케팅을 하고 있습니다.

다만 저는 Azure를 주 클라우드로 사용하고 있습니다. 주 신분이 학생이라, 학생 크레딧으로 체험 형식으로 사용중입니다. 개인적으로 테스트해본 결과 네트워크가 가장 빠른 클라우드가 Azure였네요.

1. Oracle Cloud 가입

본격적으로 Oracle Cloud를 사용해보도록 하겠습니다. 여기서는 가입보다는 클라우드 인터페이스 사용을 중점으로 언급하도록 하겠습니다. 가입은 여기(링크)서 “무료로 시작하기” 링크로 시작하실 수 있습니다.

2. 홈 리젼(Home Region) 설정

Oracle Cloud 내 Region을 의미하는 “인프라 지역”

Oracle Cloud를 가입할 당시, 홈 리젼을 선택하는 과정이 포함되어 있습니다. 이 과정에서 “South Korea Central (ap-seoul-1)”과 “South Korea North (ap-chuncheon-1)” 둘 중에서 선택할 수 있습니다 (한번 선택한 리젼은 바꾸기 어려우므로 신중하게 정하시는것이 좋습니다). 저는 춘천을 선택하도록 하겠습니다.

3. VM 인스턴스 생성

Oracle Cloud 첫 화면

Oracle Cloud의 첫 화면으로 이동합니다(좌측 상단의 Oracle Cloud 로고를 클릭하시면 됩니다). 위 빠른 작업 창에 “VM 인스턴스 생성”을 눌러 VM 생성을 시작합니다.

VM 인스턴스 생성 화면 – 이미지 선택 창

VM 인스턴스 생성을 위해 위 인스턴스 이름(ID)을 입력합니다. 저는 임의로 my-vm-instance라는 이름을 사용했습니다. 다음으로, 세번째 선택란에서 “이미지 변경”을 선택해 위 그림처럼 이미지 선택 창을 띄웁니다.

여기서 이미지란, 마치 PC를 새로 설치할 때 사용할 부팅 USB를 고르는 것과 동일한 작업입니다. 어떤 운영체제를 설치할지 고르는 과정으로, 저는 최신 Ubuntu 20.04를 선택하도록 하겠습니다. (선택한 후 반드시 맨 아래까지 페이지를 내려 “이미지 선택”을 눌러야 적용됩니다.)

SSH 개인 키(여기서는 전용 키) 다운로드 화면

마지막으로, SSH 키 추가 부분에서 전용 키 다운로드 버튼을 클릭해 SSH 개인 키를 다운로드합니다. 추후 이 키를 이용해 SSH 원격 접속이 가능하므로 반드시 이 키를 다운로드하고 진행해야 합니다!!

4. 인스턴스 접속

생성중인 VM 인스턴스

인스턴스가 다 만들어지면, 우측 기본 VNIC 아래, 전용 IP 주소가 생성됩니다. 이 주소가 곧 우리가 외부에서 SSH로 접속하는 주소입니다. 이 주소를 이용해 접속하도록 합니다. 그러나…

응? Windows 10에서 SSH로 접속이 안된다.

위 화면은, 다운로드 받은 개인 키를 이용해, Windows 10에서 WSL나 기본 SSH 클라이언트로 해당 IP에 접속할 때 발생하는 오류입니다. (해결 방법)

해결하고 접속을 완료한 화면

이제 이 VM에, 원하시는 어플리케이션을 설치하셔서 웹 서버 등을 운용할 수 있습니다.

참고자료

[1] Windows SSH: Permissions for ‘private-key’ are too open
[2] Oracle Cloud Infrastructure (OCI) : Create a Compute VM

One UI 2.5 업데이트 – 갤럭시 S20 업데이트 후기 (G981NKSU1BTH2, G981NOKR1BTH2)

One UI 2.5로 업데이트!!

오늘 8월 25일자로, 갤럭시 S20의 One UI 2.5 펌웨어 업데이트가 릴리즈되어 바로 업데이트해보았습니다 (G981NKSU1BTH2, G981NOKR1BTH2).

이번 업데이트로 크게 바뀐 부분을 와 닿는 순서대로 나열해 보았습니다. 이 외에도 변경된 부분이 있을 수 있으나 제가 못 봤거나, 못 찾은 것들이 있을수도 있습니다….!

One UI 2.5 #1 – 카메라 어플리케이션 프로 동영상 개선 및 와이드 동영상 촬영 가능

프로 동영상 기능이 개선되어, 카메라 우측에 “FHD 30″이라는 해상도 표시가 되는 것을 볼 수 있습니다. 저는 좌측의 오디오미터도 처음 봤는데, 프로 동영상 촬영 기능이 많이 좋아진 것 같네요.

추가로, 프로 동영상 한정으로 후면 동영상 촬영해상도에 와이드 해상도 (21:9 8K, 21:9 UHD, 21:9 FHD)가 추가되었습니다. 좀더 영화같은 길-쭉한 영상을 찍을 수 있게 되었어요.

One UI 2.5 #2 -키보드에 YouTube 검색 및 빠른 삽입 기능 추가

키보드에 추가 기능으로 “YouTube 동영상 검색 및 빠른 삽입”(가칭) 기능이 추가되었습니다. 이 기능으로 정말 간단하게 유튜브에서 영상을 검색해서 링크를 삽입할 수 있게 되었습니다. (짤을 미리 키워드로 기억해뒀다가 그때그때 써먹는걸로 유용할지도…?)

One UI 2.5 #3 -Wireless DeX (무선 덱스) 기능 추가

무선 덱스가 추가되었습니다. 이제 USB-C to USB-C나, USB-C to HDMI 케이블 없이도 DLNA/Miracast를 지원하는 네트워크 연결 모니터(지원하는 스마트TV 등을 말합니다)에 무선으로 DeX를 띄울 수 있게 되었어요. 저는 모니터가 없어서 테스트해볼 수 없었지만 유용한 기능임에는 틀림 없습니다…!

One UI 2.5 #4 -DeX 업데이트

DeX의 UI가 업데이트되었습니다. 저는 PC에 DeX를 연결해서 확인해봤는데요, 하단 바의 UI 디자인이라던가, 창 틀 모양같은 것들이 조금 더 깔끔해져서 보기 좋았어요…!

이상으로 업데이트된 내용을 확인해봤습니다. 곧 업데이트될거라는 각종 루머에 하루하루 <소프트웨어 업데이트> 버튼을 눌러보다가 문득 발견했는데, 많은 부분에서 갤럭시 노트20을 따라 소프트웨어 업데이트가 진행된 것 같습니다. Samsung Notes 어플리케이션 역시 버전 4로 별도로 Galaxy Store에서 업데이트받을 수 있으니, 확인해보세요. 이번 업데이트는 갤럭시 탭 S7에 적용된 각종 편의성 기능을 포함하고 있다고 합니다.

WSL2 CUDA – WSL2에서 Ubuntu와 CUDA 사용하기

Windows Insider Preview 버전 문제 (2020-10-16 빌드에서 해결됨)

Windows 10 Insider Preview 버전에 따라서, WSL2나 CUDA가 아예 동작하지 않는 경우가 많습니다. 여기에서 버전별 작동여부를 확인 후에 설치하시는것이 좋을것 같네요.

WSL2에서 Ubuntu와 CUDA 사용하기

이제 Windows 10 Build 2020에서는 Windows Subsystem for Linux 2와 GPU 가속 지원 기능을 함께 사용할 수 있습니다. 이 가이드에서는 Windows 10 디바이스에서 WSL2와 Ubuntu를 이용하여 CUDA 개발 환경을 구축할 수 있도록 합니다.

이 튜토리얼에서는 WSL에 Docker를 구동하여, 결과적으로 Jupyter Notebook 내에서 CUDA를 End-to-End로 실행할 수 있도록 합니다. 구체적으로는 아래와 같은 구성으로 진행됩니다.

In the Linux guest, the dxgkrnl driver creates the /dev/dxg device for user mode components to access. The requests that come from GPU applications get forwarded to the Windows host system via VMBus where for those the host dxgkrnl driver makes calls to the KMD (Kernel Mode Driver) DDI handlers.
WSL2에서 dxgkrnl(자세히 보기)을 통한 NVIDIA GPU 지원

Windows 10 Insider Preview 채널로 변경하기

이 과정에 앞서, 설치된 Windows 10을 2020년 6월 17일자로 릴리즈된 Windows 10 Insider 빌드로 업그레이드해야 합니다. 이를 위해서 Windows Insider에 가입하여, 사용중인 기기를 Dev Channel에 등록할 수 있습니다(주로 “Fast Ring” 또는 한국어로 “초기”라고도 쓰입니다). 이 후, Windows 10 빌드 20150 버전으로 업그레이드할 수 있습니다.

Windows Insider 프로그램에 가입해서 프리뷰 버전으로 업데이트하기

Windows 10 Insider Preview 빌드 시작 페이지 또는 Windows 10 21H1 빌드 배포 노트(홍차의 꿈님 블로그)를 참조하여 개발자 빌드에 참여하는 방법을 확인하세요.

WSL2 활성화하기 – Step #1

먼저, WSL Version 1을 먼저 활성화합니다. 이 과정 이후, 추후에 WSL2로 업그레이드를 합니다.

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
WSL1 활성화 과정

필요시 재부팅을 해야할 수 있습니다. 보통의 경우 바로 이어서 WSL2를 활성화할 수 있습니다.

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

이 뒤, Windows를 재시작합니다.

Restart-Computer

WSL2 활성화하기 – Step #2

이제 재부팅을 완료하면, 시스템이 WSL2를 구동할 수 있는 상태입니다. 다만, 아직은 호환성 등을 이유로 기본값은 WSL Version 1입니다. 아래 코드로 기본 버전을 변경할 수 있습니다(원할 시 Distro마다, 기존 Version 1으로 다시 설치할 수 있습니다)

wsl.exe --set-default-version 2
WSL2를 기본값으로 설정하기

Ubuntu를 WSL에 설치하기

Microsoft Store으로부터 Ubuntu를 설치할 수 있습니다(링크).

Microsoft Store으로부터 WSL Ubuntu 다운로드

WSL에 Ubuntu를 다른 방식으로 설치할 수 있습니다(링크, 영문).

(옵션) Windows Terminal 설치하기

Windows Terminal은 MS사에서 개발한 대체 터미널 어플리케이션입니다. 기존 MobaXterm이나 Cygwin, ConEmu 등의 솔루션을 대체할 수 있는 Lightweight한 오픈소스 터미널 도구입니다(링크 또는 GitHub). 화면 렌더링의 GPU 가속 및 커스터마이징 등, 다양한 기능들을 가지고 있으며 기존 Windows의 콘솔(cmd, powershell)을 이어 더 나은 사용성을 제공합니다.

Microsoft Store으로부터 Windows Terminal 다운로드

WSL에서 Ubuntu 설치하기

Windows의 시작 메뉴에서 Ubuntu를 선택하고, 초기 실행이므로 WSL내의 Ubuntu 사용자를 설정합니다. 이 Ubuntu 사용자Windows 사용자는 독립입니다(서로 관계가 없으며 이름이 같아도 됩니다).

WSL 초기 실행 시 Linux 계정(사용자) 생성하기

이전 단계에서 Windows Terminal을 다운로드받았다면, 사용자를 생성했던 이전 콘솔을 닫고, + 아이콘을 눌러 새로운 Ubuntu 콘솔을 열 수 있습니다:

새로운 Ubuntu 콘솔 열기

이제, 설치가 완료되었으므로 Ubuntu가 WSL2에서 구동되는지 확인해봅니다:

uname -r
Ubuntu의 커널 버전 확인

커널 버전을 확인했을 때, 4.19.121보다 높아야 합니다.
※ 그렇지 않다면, 아래 명령어를 cmd 또는 powershell 터미널에서 실행해보세요:

wsl.exe --update

위 명령어를 실행한 뒤에도 동일한 커널 버전으로 나타난다면(WSL이나 Windows를 재시작해야할 수도 있습니다), Windows Updates 설정에서 “고급 옵션 > Windows를 업데이트할 때 다른 Microsoft 제품에 대한 업데이트 받기”가 켜져 있는지 확인합니다:

Windows Update “고급 옵션” 창
(변경할 설정확인이 쉽도록 한글로 써 두었습니다.)

이 뒤에, Windows Update를 다시 확인합니다.

Windows 업데이트 시 “Windows Subsystem for Linux Update” 표시

Windows 10용 NVIDIA 드라이버 설치

CUDA on WSL용 NVIDIA 그래픽 드라이버(WDDM 2.9) 다운로드(링크)

이 다음, 시스템에 설치된 GeForce 또는 Quadro 그래픽카드에 따라 적절한 드라이버를 다운로드합니다. 몇 달 내로 Windows Update를 통해 드라이버가 배포될 예정이지만, 그 때까지는 직접 설치하는 과정이 필요합니다.

드라이버를 얼리-엑세스로 다운로드하기 위해서는 NVIDIA Developer Program에 가입되어 있어야 합니다. NVIDIA 개발자 블로그(영문)에서 CUDA on WSL에 관련한 기술적 내용을 찾아볼 수 있습니다.

WSL에 Docker 설치

기본적으로 Canonical에서 제공하는 Docker를 설치할 수 있습니다(Docker Hub에서 제공하는 최신 Docker Engine을 설치하기 위해서는 아래 명령어 대신 이 링크의 튜토리얼을 따라하시면 됩니다. 영어입니다.)

sudo apt -y install docker.io
WSL2 Ubuntu에 Canonical 기본 레포지토리 Docker(docker.io 패키지) 설치

sudo 없이 docker 명령어를 이용하기 위해서는, 추가로 아래 명령어를 입력할 수 있습니다(보안상 이슈가 있을 수 있으며, 선택입니다):

sudo adduser $USER docker

NVIDIA Container Toolkit 설치

변수 distribution을 설정하고, NVIDIA 레포지토리 GPG 키를 가져온 뒤, NVIDIA 레포지토리를 Ubuntu의 apt 패키지 매니저에 추가합니다.

distribution=$(. /etc/os-release;echo $ID$VERSION_ID)

curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -

curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

curl -s -L https://nvidia.github.io/libnvidia-container/experimental/$distribution/libnvidia-container-experimental.list | sudo tee /etc/apt/sources.list.d/libnvidia-container-experimental.list
Apt 패키지 매니저에 NVIDIA 레포지토리 추가

Ubuntu의 기본 레포지토리를 한국 서버로 변경합니다. apt updateapt upgrade 등의 작업이 훨씬 빨라집니다.

sudo sed -i "s/archive.ubuntu.com/mirror.kakao.com/g" /etc/apt/sources.list

Ubuntu의 apt 레포지토리를 초기화한 뒤, NVIDIA 런타임을 설치합니다.

sudo apt update && sudo apt install -y nvidia-docker2
apt 패키지 매니저를 통한 NVIDIA 컨테이너 런타임 설치 과정

설치 완료 시, 모든 Ubuntu 터미널을 종료하고, Powershell 터미널을 열어 모든 Ubuntu WSL 인스턴스를 종료합니다:

wsl.exe --shutdown Ubuntu
WSL Ubuntu 인스턴스 종료

GPU 컴퓨팅 테스트

새로운 Ubuntu 터미널을 열어, Docker 서비스를 시작합니다.

sudo service docker start

그리고 아래 명령어를 실행합니다:

sudo docker run --gpus all nvcr.io/nvidia/k8s/cuda-sample:nbody nbody -gpu -benchmark

모든 과정이 이상없이 진행되었다면, 아래와 같이 GPU의 성능 정보들이 정상적으로 표시됩니다:

CUDA sample 코드 실행 결과

Tensorflow 컨테이너 시작하기

새로운 Ubutnu 터미널을 열어, 아래 명령어를 실행합니다:

docker run -u $(id -u):$(id -g) -it --gpus all -p 8888:8888 tensorflow/tensorflow:latest-gpu-py3-jupyter
Tensorflow 실행 가능한 Jupyter Notebook가 GPU와 함께 구동

또다른 새로운 Ubuntu 터미널을 열어, wslview를 입력 후, 그 뒤에 Jupyter Notebook URL을 입력합니다. 단, 여기서 127.0.0.1localhost로 바꿔 입력합니다!

wslview http://localhost:8888/?token=a83a1ad288a7bf1bd1deb694c8a7f19223c8d0baa7d5fb3c

기본 브라우저에 Jupyter Notebook이 실행되고, 이를 통해 GPU 가속이 가능한 Tensorflow 라이브러리를 사용할 수 있습니다! 이제 Tensorflow, CUDA를 WSL에서 사용할 수 있습니다.

Related blog posts

Additional resources

번역 원본

https://ubuntu.com/blog/getting-started-with-cuda-on-ubuntu-on-wsl-2

(Reference) Build 64-bit kernel for Raspberry Pi 3, using native tools

Reference

Guide on how to build a 64-bit kernel for the Raspberry Pi 3 & 3+ boards, on device, using native 64-bit cross-compilation tools. Using kernel branch 4.14 at time of writing.

The SoC on the Raspberry Pi 3 & 3+ supports 64-bit ARM mode, unfortunately raspbian and the foundation does not provide 64-bit support or userland even if they are advertising the Pi 3 as a 64-bit platform.

There are 3 ways to get a 64-bit kernel compiled:

  1. Native build on another 64-bit ARM platform
  2. Cross-compilation on another platform
  3. Cross-compilation on the Pi 3 itself

This tutorial will explain how to do option number 3. (And will actually work just fine for option number 2 as they are pretty much the same).

Note: The tools should work just fine for building a 64-bit kernel for the Raspberry Pi 4 too. Unfortunately the author does not have Pi 4 at this time so kernel configuration, building and booting has not been tested and therefor has been omitted for now.

Note: You will need plenty of space when building as the sources and build results for both the tools and kernel takes quite a lot of space. Also a heat sink is highly recommended if building in parallel.

Time: Speed is relative. The Raspberry Pi 3 is fast or slow, depending on what you compare it to. Even so, it will take a while to build everything, for example C-compiler only gcc will about 85 minutes to build using non-parallel make on a Pi 3.

Install essential build tools and development packages

As we need to build the tools we need, that is aarch64 binutils and gcc, we need to install the required build tools first. Start by first installing required dependencies for compilation of these tools:

sudo apt-get install build-essential libgmp-dev libmpfr-dev libmpc-dev libisl-dev libncurses5-dev bc git-core bison flex

Build the cross compilation tools

To be able to cross-compile we need to build a couple of tools ourselves as they are not provided. These are aarch64 versions of binutils (assembler, linker) and gcc (C compiler). We will install these tools in their own prefix or path,

/opt/aarch64

We will also use out-of-source build directories to keep the sources clean. This is handy if you need to re-configure, re-build or start over without needing to clean the source tree.

Build and install Binutils

We will start with building the low-level tool, binutils. Binutils is basically an assembler and linker.

Download the latest binutils, (Tested with 2.29.1 at time of writing, feel free to try any later versions (2.30 is reported not to work!) when available)

wget https://ftp.gnu.org/gnu/binutils/binutils-2.29.1.tar.bz2

Untar the binutils archive

tar xf binutils-2.29.1.tar.bz2

Configure build and install

mkdir binutils-obj
cd binutils-obj
../binutils-2.29.1/configure --prefix=/opt/aarch64 --target=aarch64-linux-gnu --disable-nls
make -j4
sudo make install

Binutils is now installed, to be able to use it directly, add “/opt/aarch64/bin/” to your path:

export PATH=$PATH:/opt/aarch64/bin/

Build and install GCC

Next up is gcc, the C compiler. We will build a minimal compiler for C only and no userland support. This is enough to get a aarch64 kernel compiled.

Download latest stable gcc (Tested with 6.4.0 at time of writing, feel free to try any later version when available):

wget https://ftp.gnu.org/gnu/gcc/gcc-6.4.0/gcc-6.4.0.tar.xz

Untar the gcc archive

tar xf gcc-6.4.0.tar.xz

Next configure gcc and build gcc. We will configure the build for only a minimal C compiler, that is enough for building a kernel.

mkdir gcc-out
cd gcc-out
../gcc-6.4.0/configure --prefix=/opt/aarch64 --target=aarch64-linux-gnu --with-newlib --without-headers \
 --disable-nls --disable-shared --disable-threads --disable-libssp --disable-decimal-float \
 --disable-libquadmath --disable-libvtv --disable-libgomp --disable-libatomic \
 --enable-languages=c
make all-gcc -j4
sudo make install-gcc

Test that the cross gcc runs ok, run:

aarch64-linux-gnu-gcc -v

It should report something close to this is everything is ok:

Using built-in specs.

COLLECT_GCC=aarch64-linux-gnu-gcc
COLLECT_LTO_WRAPPER=/opt/aarch64/libexec/gcc/aarch64-linux-gnu/6.4.0/lto-wrapper
Target: aarch64-linux-gnu
Configured with: ../gcc-6.4.0/configure --prefix=/opt/aarch64 --target=aarch64-linux-gnu --with-newlib --without-headers --disable-shared --enable-languages=c
Thread model: posix
gcc version 6.4.0 (GCC)

If all is well, then you can continue to building the kernel itself!

Optional: libgcc

The C-only compiler we built above is enough for building a Linux kernel and is enough for this guide. But, if you would like to for example build and use u-boot, then you will need to build libgcc, a static library that contains shared code and various helper functions. Building and installing libgcc is fortunately easy, just do the following after building gcc:

make all-target-libgcc
make install-target-libgcc

Build the Linux kernel

Now you have a toolchain that is able to build 64-bit ARM kernels. So the next step is to download the Raspberry Pi kernel sources, configure them and build a 64-bit kernel and modules.

Download Linux kernel sources

Get the most up to date stable branch kernel sources (4.14 branch at time of writing) directly from the Raspberry Pi GitHub repository with

git clone --depth=1 -b rpi-4.14.y https://github.com/raspberrypi/linux.git
Keeping sources fresh

The Linux kernel is a moving target and evolves almost daily. To keep updated with latest changes, run the following command in the directory you checked out above:

git pull

Configure Linux kernel for 64-bit Raspberry Pi 3

We use output directory for kernel build so we can use the same source tree for other configuration (32-bit for example)

mkdir kernel-out
cd linux
make O=../kernel-out/ ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-  bcmrpi3_defconfig

The kernel build is now configured with a default configuration for a 64-bit Raspberry Pi kernel.

In case you need to customize the configuration (Add support for some specific hardware, trim out things you don't need or otherwise mess around with the configuration) run

make O=../kernel-out/ ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfig

and adjust the configuration for your needs.

Build the kernel and modules

Next build the kernel and modules with:

make -j4 O=../kernel-out/ ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-

If all goes well, as it should, you should now have a 64-bit kernel, modules and device tree built.

Keep up with kernel development

The Linux kernel evolves and so does the Raspberry Pi kernel too. To keep up with development changes you can ask git to download changes to your kernel source tree. To do that run the following command in the kernel source locations:

git pull

This will download any changes made to the kernel source.

Update kernel configuration

After pulling in changes I personally like to always run, just in case:

make -j4 O=../kernel-out/ ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- oldconfig

Next step:

Booting 64-bit kernel on Raspberry Pi 3

Changelog:

11/04/2018 – 13:15

  • Update to 4.14

Sharif Judge × OpenCV 4.0.1 연동 사용기 – Part 1

설치를 해보자

Sharif Judge는 온라인 채점 프로그램을 Web과 Bash 코드로 구현한 Application이다. 모 교수님이 이걸로 채점을 하고 계신다지 실제로 써보면 백준과 비슷하다. 다만 간단하게 과제 풀이 형식으로만 되어있고, 언어도 Python2/3, Java, C, C++ 이렇게만 지원한다. 정말 과제 내기엔 딱좋은 어플리케이션이다…

준비물

맨땅에 헤딩

먼저 필요한 패키지를 설치하는 것부터 시작해보자. 여기서는 Ubuntu 18.04에 PHP 7.2를 사용한다.

sudo apt-get install apache2 libapache2-mod-php7.2 \
    php7.2 php7.2-mysql mysql-server mysql-client

다음은 MySQL 서버를 세팅해보자. mysql_secure_installation을 사용하여 기본적인 권한 세팅을 해주자.

sudo mysql_secure_installation

그런데 이제 mysql에 root계정으로 접속하려니까 안된다. 알아보니 MySQL 5.7 이상으로는 기본적으로는 root 계정 접속에 auth_socket 플러그인이 활성화되어있는데, 비밀번호 없이 socket으로 로그인하는 플러그인이다. 우리는 기존 legacy한 방법(패스워드 로그인)으로 변경을 해보자.

$ sudo mysql -uroot -p
> SELECT User,Host FROM mysql.user;
> ALTER USER "root"@"localhost" IDENTIFIED BY "<password>";

이제 마음껏 로그인할 수 있을것 같다. Sharif Judge가 사용할 수 있도록 데이터베이스와 여기에 접근하는 별도의 사용자를 만들자(보안상의 이유로).

$ mysql -uroot -p
> CREATE DATABASE sharif;
> CREATE USER "sharif"@"localhost" IDENTIFIED BY "<sharif-password>";
> GRANT ALL PRIVILEGES ON sharif.* TO "sharif"@"localhost";

DB 세팅은 끝났지만, 아직 한국에 최적화(?)되어 있지 않다. 유니코드를 기본 charset으로 설정해보도록 하자.

$ sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
i (입� � 모드)
... 40번째 줄
character-set-server = utf8
... 추가 후
ESC (명� � 모드)
:wq! (강� � � �장후 종료)
$ sudo service mysql restart

이제 DB 세팅은 끝났다. sharif-judge를 설치해보도록 하자.

wget https://github.com/mjnaderi/Sharif-Judge/archive/v1.4.1.tar.gz
tar xzf v1.4.1.tar.gz
sudo cp -R Sharif-Judge-1.4.1/ /var/www/
cd /var/www/
sudo rm -rf html/
sudo mv Sharif-Judge-1.4.1 html
sudo chown www-data:www-data -R html/

다운로드와 압축을 풀었다면, 설정 파일을 수정해 DB와 연결하도록 하자.

$ sudo vi /var/www/html/application/config/database.php
i (입� � 모드)
... 86번째 줄
        /*  Enter database connection settings here:  */
        'dbdriver' => 'mysqli',     // database driver (mysqli, postgre)
        'hostname' => 'localhost',  // database host
        'username' => '',           // database username
        'password' => '',           // database password
        'database' => '',           // database name
        'dbprefix' => 'shj_',       // table prefix
        /**********************************************/
... 수� � 후
ESC (명� � 모드)
:wq! (강� �로 � �장 후 닫기)

헤딩도 쉬어가면서

Part 1에서는 MySQL, Apache2, PHP7.2를 설치하고, MySQL을 설정 완료하고 Sharif Judge까지 세팅해두었다. Apache2와 PHP.2는 따로 세팅이 필요하지 않으므로 스킵-

다음 Part2에서는 Sharif Judge의 Installation을 진행하고, 거기에 OpenCV를 연동하는 고난작업을 해보도록 하자.

WD Backup 어플리케이션 사용기

결론부터 시작하는 이야기

외장하드 백업 어플리케이션으로 잘 사용하고 있던 WD Backup.

image.PNG
백업이 삭제되었습니다.

왜?

분명 지난주에, Redstone 5 업그레이드에 문제가 생겨 클-린 설치를 한 뒤에 파일 복원을 했을 터인데, 어째서인지 파일들이 보이지 않았다. 왜지? 그래서 Search Everything 으로 찾아봤다. 어라? 파일이 어찌 깊숙히 보관되어 있었다(이 글을 쓴 시점엔 이미 백업파일을 지워버렸다). 그러니까 복원을 제대로 못한것. 아니면 내가 파일을 실수로 지웠던가.
그래서 이번에 Inconsistancy때문인가, 이러고 폴더를 지워버렸다어차피 필요한 파일은 다 챙겨먹었으니. 무려 40기가나 먹고있던거….. 이제 다시 백업 설정하고, 나중에 또 테스트해봐야지. 또 문제생기면 다른 백업 솔루션을 장만해야하나..?

WD Backup의 좋은점(?)

image2.PNG
Dropbox와 외장HDD에 백업이 가능하다.

예전에 군머 다녀오기 전에 Dropbox를 많이 써서 남은 용량을 빈곤하게 한 바람에 이 옵션은 손을 못댔다. 대신 작은 문서파일들 백업용으로는 짱인건 틀림없다. 성능은 안써봐서 모르겠다. 그리고 굳이 Dropbox 어플리케이션을 깔면 되는데 이걸또..? 아니지, WD는 주기적으로 자동으로 파일을 백업해주니까.

내가 생각한 단점

  • 파일을 그냥 복사한다.
    이건 단점이라고 하기는 어떻게 보면 장점일수도 있다. 파일을 직접 검색해서 바로 열어볼 수 있으니까. 그런데 압축이라는건 없다구. 삭제할때 본 40기가는 정말 어마어마한 용량이었다 좋지 않아. 증분 압축이라던가 이런게 있었으면 정말 좋았을거 같다. 작은 파일을 그대로 복사하는건 용량 측면에서나 효율성 측면에서나 좋지 않은 방법인것 같다.
  • 자-꾸 알림을 띄우는데…
    이건 내가 귀찮아서 알림을 안끈게 잘못이 크다. 알림창 끌어서 닫는게 더 귀찮은데 WD 자체 설정에서는 불가능한거 같고, Windows 알림에서 집중 모드를 설정하거나 알림 자체를 블록해버리자.

그러면 어떻게 쓰는게 좋을까

  • 조금 큰 파일들이나, 작은 파일들인데 꼭 백업이 필요한 것들을 설정하자.
    어차피 WD 외장하드는 거의 내장HDD처럼 쓰고있는지라, 백업은 큰 의미가 없지만(랜섬웨어라도 걸리면..어휴), 어쨌든 증분 백업은 하는것같다. 그러니까 큰 파일은 한번 백업하면 이제 옮기거나 하지 않는이상 두번은 옮기지 않는거같다. 큰 파일들 한번에 백업해두고, 그리고 매 시간 백업하면 알림이 진짜 매 시간마다 날 귀찮게 한다… (하지만 게임같은거 하고있으면 집중 모드라는걸로 안 울린다!)

결론

여러분, WD 외장하드 쓰세요. 용량 크고 좋아요. 짱짱.
근데 외장하드랑 같이주는 S/W는…음… 나름 쓸만은 한데, 굉-장한 정도는 아니고, 그냥 있으면 나중에 복원할때 편리하다 정도.

OneNote 한글 폰트 설정하기

현재 대학과 MS사에서 무료로 제공하는 학생용 Office 365를 사용중입니다.
항상 새로운 노트를 만들어 첫 글자를 쓸 때마다 폰트가 Calibri로 바뀌어버리네요.
한문단 한문단 계속 “나눔바른고딕 Light”로 바꾸기가 너무 귀찮아서 찾아봤습니다.

(출처: Microsoft Community)

간단하게, 1. 기본 폰트와 2. 편집 언어를 변경하면 되는 것 같더군요.
편집 언어의 경우 한국어가 기본인데, 영어로 바꿔줘야만 동작하는거 같네요.

  1. 먼저 OneNote의 옵션을 들어갑니다. 옵션은 OneNote 상단 파일 > 옵션 (맨 밑에 있음)에서 찾을 수 있네요.
OneNote 설정 페이지
  1. 이 옵션 창에서 “기본 골꼴”을 원하는 폰트로 바꿉니다. 전 나눔바른고딕 이 좋아서 이걸로 바꿨네요.
  2. 이제 왼쪽에 <언어> 탭으로 이동합니다.
OneNote 설정 페이지
  1. 위 <편집 언어=”” 선택=””>에 보면 기본 편집 언어가 “**한국어**”로 되어 있습니다. 이걸 **영어(미국)** 을 선택한 뒤, 우측 “**기본값으로 설정(C)**”을 눌러 영어를 기본값으로 바꿉니다. 표시 언어는 그대로 한국어라 변하는건 없습니다! 다만 문법 교정같은건 조금 문제가 있을 수도 있겠네요(확인이 필요해요).
  2. 다 했으면 <확인>을 누르고 OneNote를 껐다가 다시 켜면 됩니다.

그럼 이제 한글로 입력할 때는 기본적으로 “기본 폰트”로 바뀌어서 글을 쓸수 있습니다.
다만, 반대로 영어로 입력할 때는 Calibri로 남아있는데, 여기까지는 어쩔수 없네요.
그냥 이대로 만족하고 쓸려고 합니다ㅎㅎ…