최근 Ubuntu를 사용하고 있는데

우선 Wubi로 멀티부팅을 했더니 BS의 노트북에 있는 모든 H/W가 인식이 안되고 일부는 드라이버를 구하기 힘들어서 패스…

Windows 10 + Hyper-V + Ubuntu 16.04 LTS 조합으로 Ubuntu를 사용 중인데 Windows 를 사용하는 것보다 좀 불편한 것이 많이 있네요.

Hyper-V 위에서 동작하다보니 일단 기본 GUI 환경의 반응 속도가 상당히 느리고

동적 메모리로 제한을 두지 않았더니 운 나쁘면 저장된 상태를 복원할 수 없는 경우가 발생… VM 인데도 일시 정지를 하기가 두렵고

Linux용 Firefox가 Dokuwiki와 잘 맞지 않는지 글 저장하고 맹한 페이지가 출력되고 Linux용 Chrome 또한 Keyboard shortcut이 잘못 적용되어서 도움말에는 분명 탭 이동이 Ctrl + 숫자인데 Alt + 숫자도 함께 먹는 버그가…

아무래도 BS에겐 개인 PC의 작업 환경으로는 Ubuntu는 아닌가 봅니다.

Windows 10보다 빠르지 않고, Windows 10보다 저사양으로 실행되지 않고, …
이러면 Windows 10을 버리고 작업환경으로 사용할 이유가 없다는…

Windows 10 + Hyper-V + Ubuntu 16.04 + VNC 로 리눅스 GUI 어플을 실행하자

Windows 10 설치법 -> 생략
Hyper-V 설치법 -> 생략
Ubuntu on Hyper-V 설치 -> 생략

VNC 환경을 위한 설치

참고자료: Medium.com의 자료

# 관련 패키지 설치
# gnome-panel: 런처와 태스크바
# gnome-settings-daemon: 각종 설정을 편리하게 하기 위함
# metacity: 창 관리자
# nautilus: 파일 관리자
# gnome-terminal: 터미널
# vnc4server: VNC 서버
apt-get install gnome-panel gnome-settings-daemon metacity nautilus gnome-terminal vnc4server

# 설치 후 일단 실행
vnc4server

# 실행되고 나면 일단 종료
vnc4server -kill :1

# 시작 스크립트 편집
# 내용은 아래의 예제 파일 참고
vim ~/.vnc/xstartup

# 해상도를 지정해서 다시 실행
vnc4server -geometry 1280x800

~/.vnc/xstartup 예제

#!/bin/sh
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &

gnome-panel &
gnome-settings-daemon &
metacity &
nautilus -n &
gnome-terminal &

한글은 im-config 실행해서 해결

Ubuntu에 폰트 설치하기

D2Coding 폰트 설치를 예로…

# D2Coding 받기
wget https://github.com/naver/d2codingfont/releases/download/VER1.21/D2Coding-1.2.zip
 
# 설치할 디렉토리 만들기
mkdir /usr/share/fonts/truetype/D2Coding
 
# 압축 풀기
unzip D2Coding-1.2.zip -d /usr/share/fonts/truetype/D2Coding/
 
# 쓸데없는 맥 디렉토리 삭제
rm -rf /usr/share/fonts/truetype/D2Coding/__MACOSX
 
# 폰트 캐싱 강제로 다시 하기
fc-cache -f -v

터치 패드의 드라이버 진단 단축키 방지

노트북을 사용하면 Synaptics 터치패드가 대부분 붙어 있는데… (아직도 특허가 남아서)

Alt + Shift + L 을 누르면 TouchPad Driver Diagnostics 팝업이 발생

이걸 막으려면

HKLM/SYSTEM/CurrentControlSet/Services/SynTP/Parameters/Debug/DumpKernel 라는 REG_DWORD 값을 0으로 설정

사용하지 않는 프린터 드라이버를 삭제

  1. 관리자 권한으로 명령 프롬프트 실행
  2. printui /s 또는 printui /s /t2 를 실행
  3. 불필요 드라이버 정리

위 방법이 Print Spooler 서비스로 인해 방해 받는 경우에는

  1. 서비스 관리자에서 Print Spooler 서비스 중지
  2. Windows/System32/Spool/Printers 안의 내용을 정리
  3. 서비스 관리자에서 Print Spooler 서비스 시작
  4. 위에 적힌 방법대로 printui 로 삭제

간단한 Docker 체험

Docker는 업계 표준 컨테이너 기술이 된 녀석입니다. Windows도 결국 이를 따라서 Windows Container를 발표했죠.

아주 간단하게 Docker 사용에 대해 정리합니다.
Ubuntu 16.04 LTS 기준으로 작성되었습니다.

자세한 내용은 여기를 참고하시면 도움이 될 겁니다. 가장 빨리 만나는 Docker

  1. 설치
    docker라는 패키지명은 이미 사용 중이여서 docker.io라는 패키지 명을 사용합니다.

    apt-get install docker.io
    
  2. docker를 사용할 사용자를 그룹에 추가
    미리 docker를 사용할 유저를 docker 그룹에 추가하면 sudo 명령을 통하지 않고 docker를 사용할 수 있습니다.

    usermod -G docker -a bs
    
  3. 이미지를 찾기
    왠만한 이미지는 공식 버전을 사용하면 됩니다.
    자신만의 설정이 필요한 경우에는 Host의 OS와 동일한 이미지를 추천합니다.

    docker search ubuntu
    NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
    ubuntu                            Ubuntu is a Debian-based Linux operating s...   5365      [OK]
    ubuntu-upstart                    Upstart is an event-based replacement for ...   69        [OK]
    rastasheep/ubuntu-sshd            Dockerized SSH service, built on top of of...   66                   [OK]
    consol/ubuntu-xfce-vnc            Ubuntu container with "headless" VNC sessi...   37                   [OK]
    ubuntu-debootstrap                debootstrap --variant=minbase --components...   27        [OK]
    torusware/speedus-ubuntu          Always updated official Ubuntu docker imag...   27                   [OK]
    nickistre/ubuntu-lamp             LAMP server on Ubuntu                           14                   [OK]
    nuagebec/ubuntu                   Simple always updated Ubuntu docker images...   13                   [OK]
    nickistre/ubuntu-lamp-wordpress   LAMP on Ubuntu with wp-cli installed            8                    [OK]
    ...
    
  4. 이미지를 받기
    아래 예제에서는 ubunt 최신 버전을 받습니다.

    docker pull ubuntu
    
  5. 가지고 있는 이미지 확인
    docker images
    
  6. 가지고 있는 모든 이미지 확인
    태그 되지 않고 이름이 없는 이미지들이 보일 수 있습니다.
    이는 이미지가 스냅샷의 성격을 가지고 있어서 중간 단계의 의존성을 가지는 이미지들이 존재하기 때문입니다.

    docker images -a
    
  7. 컨테이너를 생성하면서 실행
    create로 생성하고 start로 실행할 수도 있지만 run으로 바로 생성과 시작을 할 수도 있습니다.
    --rm 옵션을 주면 종료시 컨테이너를 자동으로 삭제할 수도 있습니다.
    아래는 쉘에서 입출력을 하는(-i, -t) ubuntu-test 라는 이름의(–name ubuntu-test) 컨테이너를 ubuntu:latest 이미지(ubuntu)를 생성하여, “/bin/bash -” 를 실행하는 예제입니다.

    docker run -i --name ubuntu-test -t ubuntu /bin/bash -
    
  8. 실행 중인 컨테이너 확인
    docker ps
    
  9. 모든 컨테이너 확인
    종료된 컨테이너를 포함한 모든 컨테이너를 확인할 수 있습니다.

    docker ps -a
    
  10. 컨테이너를 이미지로 만들기
    아래는 “BS <bs@bspfp.pe.kr>”로 저자를 지정하고, “Commit Test”라는 메시지를 기록하면서, “ubuntu-test” 컨테이너를 mytest:0 이미지로 생성합니다.

    docker commit -a "BS <bs@bspfp.pe.kr>" -m "Commit Test" ubuntu-test mytest:0
    
  11. 이미지에 새로운 태그 붙이기
    아래는 mytest:0 이미지에 mytest:latest 이름을 추가로 붙입니다.

    docker tag mytest:0 mytest:latest
    
  12. 이미지 삭제
    삭제되는 이미지에 의해 더이상 참조되지 않는 익명의 이미지들도 함께 삭제 됩니다.

    docker rmi mytest:0
    
  13. 종료된 컨테이너 다시 실행
    아래는 “ubuntu-test” 컨테이너를 표준 입출력을 열어서 실행하도록 합니다.

    docker start -a -i ubuntu-test
    

Linux Run Level 정리

  1. 0 – halt
    시스템 종료
  2. 1 – Single user mode
    루트 사용자로 시작하는 복구용도로 쓰이는 모드
  3. 2 – Multiuser mode, No networking
    네트워크 기능이 사용되지 않는 멀티 유저 모드
  4. 3 – Full multiuser mode
    일반적인 서버용 Linux의 기본 모드
  5. 4 – 미사용
  6. 5 – X11
    3과 동일하나 쉘이 텍스트 기반이 아니라 GUI 기반(X Window)
  7. 6 – reboot
    시스템 재시작

엄청 큰 정수 연산을 위한 라이브러리

C++ Bigint class

라는 라이브러리가 있어 소개합니다.

C++ 개발 좀 했다면 쉽게 만들 수 있을지도 모르겠으나 라이브러리 있으면 편하자나요?

unsigned int를 동적 배열로 해서 정수를 적절히 나누어 담은 뒤에 사칙연산을 오버라이딩해서 각 배열 요소에 적용하면서 자리 올림을 처리하면 되지 않을까 싶은데…

생각만해도 귀찮네요. 그냥 누군가 만들어 둔 라이브러리가 있고 잘 동작한다면 그걸 사용하는 게 낫지 않을까요?

SSH Client + X Server 사용시 한글 입력

그냥 저냥 잘 되야 하는데…

안 될 경우에는 아래 환경 변수를 확인해 보세요. (IBus 기준으로)

BS는 Xming + PuTTY + Ubuntu 16.04 조합인데 아래를 추가하니 되네요

GTK_IM_MODULE="ibus"
XMODIFIERS="@im=ibus"
QT_IM_MODULE="ibus"

추가로 이것도 필요할지 모르겠습니다.

HANGUL_KEYBOARD_TYPE=2

BS의 WordPress 플러그인 소개

대부분 WordPress를 통해서 설치했는데 TTXML Importer는 GitHub에서 직접 받아서 설치했습니다.

  1. Category Order and Taxonomy Terms Order
    카테고리의 순서를 조정하는데 사용
  2. Duplicator
    데이터 백업/복원
  3. SyntaxHighlighter Evolved
    문법 강조
  4. TablePress
    테이블 삽입
  5. TTXML Importer
    티스토리/텍스트큐브 데이터를 가져올 때
    GitHub
    다운로드: v2.6
  6. WP File Manager
    첨부 파일 관리

Hyper-V에 Ubuntu 16.04 LTS 설치

MS의 참고 글

에 따라

  1. 보안 부팅 사용을 해제하고
  2. Ubuntu 16.04 LTS를 설치한 후
  3. 아래의 명령으로 추가 패키지를 설치한다
apt-get update
apt-get -y install linux-virtual-lts-xenial linux-tools-virtual-lts-xenial linux-cloud-tools-virtual-lts-xenial linux-image-virtual

마지막으로 2세대 VM을 만들었다면 아래 과정을 진행

cd /boot/efi/EFI
sudo cp -r ubuntu/ boot
cd boot
sudo mv shimx64.efi bootx64.efi

Visual Studio 2015의 64비트 빌드 도구

정상적이라면 IDE의 설정에 따라 64비트 빌드 도구로 빌드가 되어야 하나

버그가 있어서 빌드 과정에 일부 32비트 빌드 도구를 여전히 사용하게 된다. 이에 따라 컴파일러(CL.exe)나 링커(Link.exe)에서 내부 오류 또는 메모리 부족 오류를 발생시킨다.

IncrediBuild를 사용하는 경우라면 강제로 64비트 도구를 사용하게 설정할 수 있으나

IDE만 사용하는 경우라면 x64 네이티브 도구 명령 프롬프트를 열어서 CLI 환경에서 빌드를 해야 한다