레이블이 우분투인 게시물을 표시합니다. 모든 게시물 표시
레이블이 우분투인 게시물을 표시합니다. 모든 게시물 표시

2014년 1월 17일 금요일

우리 아이의 첫 컴퓨터

아장아장 발걸음을 떼던 아이가 어느덧 이래저래 컴퓨터를 쓸 나이가 되었다. 여유만 있다면야 가볍고 성능 좋은 맥북에어를 사주겠지만, 우리 아이가 그 정도로 삼신할머니 뽑기 운이 좋진 않다 보니 다른 방도를 찾아주기로 했다. 아빠가 쿵작쿵작 손수 만들어준(?) 컴퓨터도 나름대로 정감이 있을 것 같아, 집 한구석에서 긴 잠에 빠져있는 있는 씽크패드 X31(이하 X31)을 살려보기로 했다.
ThinkPad X31 Image
LG-IBM에서 판매하던 씽크패드 X31
먼저 BIOS는 윈도에서 업그레이드하는 게 편하니, 버전을 확인해 보았다. 평소 소프트웨어 업데이트는 열심히 하는 편이라, Lenovo에서 제공하는 마지막 바이오스 버전(3.02,  QET97WW)이 올라가 있는 걸 확인했다.

아무래도 최신 OS를 돌리려면 현재 장착된 1GB의 메모리는 부족하겠다 싶어서, 최대 허용 메모리인 2GB까지 용량을 늘려주었다. 어댑터를 뽑으면 1초도 견디지 못하는 건전지는 더 큰 용량으로 교체해주 었다. CPU도 느린데, IO에서까지 느리면 정말 못 쓰겠다 싶어서 HDD도 SDD로 교체해주었다.

씽크패드 X31 하드웨어 업그레이드 명세
  • 메모리: 삼성전자 DDR 1G PC-2700 * 2, 47,000원
  • ODD: 삼성전자 SE-208DB, 42,000원
  • 건전지: BM-battery 5200mAh, 90,000원
  • SSD: 리뷰안테크 2.5인치 IDE 64GB, 199,000원
이것저것 사다 보니 거의 넷북을 새로 구매하는 비용을 지출했다. 생각보다 큰 지출이다. 영혼이 없는 넷북을 사주느니, 아빠의 손 때가 묻은 명기가 더 정감 있을 거라고 굳게 믿으며 우분투 설치로 넘어간다.
PAE는 32비트 컴퓨터에서 4GB 이상의 메모리를 쓸 수 있게 해주는 기능인데, 최신 우분투는 이 기능을 기본으로 탑재한 커널을 사용한다. 문제는 CPU가 PAE를 지원하지 못할 경우엔 설치가 안 된다는 점이다.

X31의 CPU는 PAE를 지원한다. 하지만 특이하게도 CPU 기능 목록에는 PAE 지원이 빠져있다. 즉, 커널이 CPU의 기능을 확인하면, 실제로는 PAE 기능을 지원함에도 불구하고 미지원으로 나온다. 우분투 최신 버전으로 설치를 해보면 CPU의 PAE 미지원으로 설치를 진행할 수 없다는 에러가 난다.

해결 방법은 non-PAE 커널이 들어있는 예전 설치 이미지로 최소 설치를 하고, CPU가 기능 지원 목록에 PAE 기능을 수동으로 넣어준 후, 최신 버전으로 업그레이드하는 것이다. 먼저, non-PAE 커널이 들어있는 다음의 설치 이미지로 설치를 완료한다. 처음부터 여러 꾸러미를 설치하면 판올림 시에 시간이 오래 걸리므로, 부팅만 될 정도로 최소한의 꾸러미만 설치한다.


설치가 끝나고 재부팅한 후, CPU의 기능 지원 목록에 PAE를 추가한다. 이제 최신 버전으로 판올림을 할 차례이다. 12.04는 LTS로 기본적으로 LTS로의 판올림만 하도록 설정되어 있고, 다음 LTS는 아직 출시되지 않았으므로, 현재 설정으로는 판올림할 수 없다. 이 설정을 수정한다.

한 번에 최신판으로 판올림하면 좋겠지만, 12.04부터 최신판 사이의 모든 판올림을 차례로 수행해야 한다. 다음 과정을 두 번 반복해서 13.04까지 판올림해준다. 13.10은 한글 입력에 문제가 있으므로, 추천하지 않는다.

13.04까지 무사히 판올림했다면, 아이가 쓸 노트북이니 에듀분투를 설치한다. 컴퓨터 사양을 고려하면, Lubuntu가 적합하지만, 아이도 예쁜 사용자 인터페이스를 쓸 권리가 있지 않은가?

많고 많은 꾸러미를 다 설치하고 재부팅을 한다. 기본 환경으로 로그인하니 검은 화면에 커서만 하나 딸랑 보인다. 유니티에 뭔가 버그가 있는 것 같다. 다행히도 Fallback 환경으로 로그인하니 데스크톱 환경을 제대로 뜨는데, 좀 많이 느리다.


비디오 가속

이것저것 만지작 거리다 보면 다른 그래픽 카드에 병목이 생기는 걸 느낄 수 있다. 우분투 기본 설정으론 비디오 가속이 되지 않아서 그렇다. 다음과 같이 수동으로 X윈도를 설정해 줘야 2D와 3D 가속을 활성화할 수 있다. 먼저, X.org의 설정 파일을 하나 생성한다.


현재 디렉터리에 현재 X윈도에 기반한 설정 파일이 Xorg.conf.new라는 파일로 생성된 것을 볼 수 있다. 이걸 다음과 같이 수정하여, /etc/X11/에 xorg.conf란 이름으로 복사한다.


그래픽 카드 오버클록

http://wiki.archlinux.org/index.php/IBM_ThinkPad_X31
비디오 카드의 작동 주파수를 높여서 그래픽 성능을 좀 더 끌어 올릴 수 있다. 다만, 이 설정은 영구적인 하드웨어 손상을 일으킬 수 있으니 주의해서 사용해야 한다. 다음과 같은 rovclock란 이름의 스크립트를 /etc/init.d/ 아래에 생성한다.



이 스크립트에 실행권한을 부여하고, 부팅 절차에 등록한다.


TRIM 설정

IO 속도 개선을 위해 SSD를 달았지만, 처음과 같이 빠른 속도를 유지하려면 TRIM 기능을 켜야 한다. /etc/fstab에 아래와 같이 discard를 추가하면, 컴퓨터가 틈틈이 TRIM 기능을 수행한다.



Suspend/Resume 문제

노트북의 LCD를 닫으면 초승달 모양의 LED에 불이 들어오면서, Suspend 상태로 잘 진입하는 걸 확인할 수 있다. 하지만 LCD를 다시 열면 검은 화면만 보이는 문제가 발생한다. 이 문제의 가장 쉬운 해결책은 /etc/default/grub을 아래와 같이 수정해서, 커널에 nomodeset 옵션을 보내주면 된다.


하지만 이렇게 하면, 콘솔 화면이 나오지 않는 문제와 그래픽 카드 가속을 이용할 수 없는 문제가 발생한다. 임시방편으로 Suspend/Hibernation 상태로의 진입을 막아 놓기로 했다. /usr/share/polkit-1/actions/org.freedesktop.upower.policy를 다음과 같이 수정한다.


동영상 재생

DVD 재생은 아이가 가장 많이 쓰는 기능이다. 그래서 외장 ODD도 심사숙고해서 골랐다. 아래 페이지를 참고해서 필요한 꾸러미를 설치해주면 기본적인 재생은 가능하다. 다만, 느리다. 우분투의 기본 재생 프로그램인 Totem은 X31에서 사용하기엔 너무 무거웠다. 다행하게도 VLC 미디어 재생기를 사용하면 전혀 무리 없이 DVD를 재생할 수 있다.

VLC의 로그는 왜 러버콘일까?

마치며

아이에게 컴퓨터를 전달해 주었는데, 시큰둥해한다. 내가 어렸을 땐, 컴퓨터를 갖게 됐을 때 그렇게 기뻤는데…. 새대 차일까? 오히려 쉽게 쓸 수 있으면서, 갖가지 게임이 들어있는 넥서스7을 더 좋아한다. 아빠가 고생해서 마련해 준 걸 아는지, 그래도 애써 좋은척하는 녀석이 귀엽긴 하다. 주말마다 아이 앉혀놓고, 컴퓨터 교육이나 해봐야겠다.

2013년 9월 5일 목요일

매스매티카 9.0.1에서 NVIDIA 그래픽카드 설정하기

CUDA 지원


우분투 13.04에 NVIDIA의 그래픽칩을 사용하는 그래픽카드가 설치되어 있고, NVIDIA의 독점 그래픽 드라이버가 설치 되어 있다고 가정한다. 매스매티카의 도움말을 따르면 이 단계에서 다음의 테스트를 통과해야 한다.
In[1]:= << CUDALink`
In[2]:= CUDAQ[]
Out[2]= False
하지만 실패! 인터넷을 뒤져보니, 이건 매스매티카가 CUDA 라이브러리를 찾지 못해서 발생하는 문제로 환경 변수 설정이 필요한 걸 알 수 있다. 내 경우엔 NVIDIA 그래픽 드라이버 버전이 319.37이므로 이에 해당하는 라이브러리를 찾아 환경변수에 등록해준다.
--- /etc/profile.d/Mathematica.sh.orig 2013-10-09 00:19:53.671638435 +0900
+++ /etc/profile.d/Mathematica.sh 2013-10-09 00:20:15.543638995 +0900
@@ -1,2 +1,4 @@
 #!/bin/sh
 export MATHEMATICA_HOME=/opt/Wolfram/Mathematica/9.0
+export NVIDIA_DRIVER_LIBRARY_PATH=/usr/lib/nvidia-current/libnvidia-tls.so.319.37
+export CUDA_LIBRARY_PATH=/usr/lib/nvidia-current/libcuda.so
이제 다시 로그인 한 후에 매스매티카를 실행해보면 위의 테스트를 깔끔히 통과한다.

OpenCL 지원


자신의 NVIDIA 칩이 OpenCL을 지원한다면, 매스매티카의 OpenCL 인터페이스도 사용할 수 있다. 지원 여부는 위키피디아에서 확인할 수 있다.
In[1]:= << OpenCLLink`
In[2]:= OpenCLQ[]
Out[2]= False
역시 실패! 여기에 따르면, 매스매티카가 엉뚱한 위치에서 OpenCL 라이브러리 찾기 때문이다. 더욱이 이 위치는 고정되어 바꿀 수 없다. 따라서 매스매티카가 찾는 위치에 맞추어서 링크를 만들어줘야 한다.
$ sudo mkdir -p /usr/lib64
$ sudo ln -s /usr/lib/nvidia-current/libOpenCL.so /usr/lib64/
이제 매스매티카 커널을 재시작하고 위 테스트를 실행해보면, 문제없이 통과!

CUDA 개발환경(Toolkit) 지원 컴파일러


매스매티카에서 제공하는 내장 CUDA 함수는 잘 동작한다. 하지만 외부 CUDA 함수를 매스매티카로 불러오면 gcc 4.7 이상은 지원하지 않는다는 에러가 발생한다.
In[2]:= code = "__global__ void addTwo(mint * in, mint * out, mint length) {
int index = threadIdx.x + blockIdx.x*blockDim.x;
if (index < length)          out[index] = in[index] + 2;  }";


In[3]:= cudaFun = CUDAFunctionLoad[code, "addTwo", {{_Integer, _, "Input"}, {_Integer, _,     "Output"}, _Integer}, 256]
During evaluation of In[3]:= CUDAFunctionLoad::cmperr: -- Message text not found -- (/home/kwchun/.Mathematica/Paclets/Repository/CUDAResources-Lin64-9.0.0.0/CUDAToolkit/bin/../include/host_config.h:82:2: error: #error -- unsupported GNU version! gcc 4.7 and up are not supported!) >>


Out[3]= CUDAFunctionLoad["__global__ void addTwo(mint * in, mint * out, mint length) {int index = threadIdx.x + blockIdx.x*blockDim.x;
if (index < length) out[index] = in[index] + 2;}", "addTwo", {{_Integer, _, "Input"}, {_Integer, _,    "Output"}, _Integer}, 256]
에러에 나와 있듯이 2013년 9월 5일 현재 매스매티카의 CUDA 개발환경(Toolkit) 버전은 9.0.0.0이고, 이 버전은 gcc 4.7 이상을 지원하지 않는다. 이 문제는 "XCompilerInstallation" 옵션으로 CUDA 개발환경이 지원하는 C 컴파일러의 경로를 지정하면 해결된다.
In[4]:= cudaFun = CUDAFunctionLoad[code, "addTwo", {{_Integer, _, "Input"}, {_Integer, _, "Output"}, _Integer}, 256, "XCompilerInstallation" -> "/usr/bin/gcc-4.6"]
Out[4]= CUDAFunction["<>", "addTwo", {{_Integer, _,    "Input"}, {_Integer, _, "Output"}, "Integer64"}]

OpenCL에서 배정도 부동소수점 사용


(아마도) 64비트 환경에서 OpenCL 외장 함수 내에 배정도 부동소수점을 사용하면 아래와 같이 함수를 불러드릴 수 없다.

code = "
  __kernel void addTwo(__global Real_t *in, __global Real_t *out, mint length) {
        int index =  get_global_id(0);
        if (index < length)
            out[index] = in[index] + 2;
    }";
openclFun = 
 OpenCLFunctionLoad[code, 
  "addTwo", {{_Real, _, "Input"}, {_Real, _, "Output"}, _Real}, 256, 
  "ShellOutputFunction" -> Print ]

OpenCLFunctionLoad::cmpf: The kernel compilation failed. Consider setting the option "ShellOutputFunction"->Print to display the compiler error message. >>

:2:31: error: must specify '#pragma OPENCL EXTENSION cl_khr_fp64: enable' before using 'double'
__kernel void addTwo(__global Real_t *in, __global Real_t *out, mint length) {
                              ^
In file included from <built-in>:17306:
<command line>:4:16: note: instantiated from:
#define Real_t double
               ^

이건 에러 메시지에도 나와 있듯이, OpenCL 관련 매크로를 코드의 앞부분에 넣어주면 해결된다.
code = "
  #ifdef USING_DOUBLE_PRECISIONQ
  #ifdef OPENCLLINK_USING_NVIDIA
  #pragma OPENCL EXTENSION cl_khr_fp64: enable
  #else /* OPENCLLINK_USING_NVIDIA */
  #pragma OPENCL EXTENSION cl_amd_fp64: enable
  #endif /* OPENCLLINK_USING_NVIDIA */
  #endif /* USING_DOUBLE_PRECISIONQ */

  __kernel void addTwo(__global Real_t *in, __global Real_t *out, mint length) {
    int index =  get_global_id(0);
    if (index < length)
      out[index] = in[index] + 2;
}";

2011년 9월 30일 금요일

새로운 파트너


맥북에어의 미려한 라인에 젖어서 기회를 엿보던 중, 한 가지 사항이 날 돌아서게 했다. 파이썬과 C++을 주로 이용해서 프로그램을 개발하는 나에게 SWIG 컴파일에 애를 먹는 시스템은 선택사항이 아니었기 때문! 불가능하진 않겠지만, 그래도 맥을 쭉 써온 친구들이 단번에 컴파일하지 못하는 장면은 맥에 대한 환상을 깨버렸다. 뭐, 그 밖에도 맥의 부담스러운 가격도 한몫을 했지만.

씽크패드X201i 3249-nr2
대안으로 선택한 건 휴대성이 좋은 씽크패드 X 계열에 우분투를 깔아서 쓰는 것이었다. 스펙으로 들어나지 않는 씽크패드의 매력과 우분투라는 OS의 조합은 맥북에어에 대한 미련을 말끔히 날려주리라 믿었다. 그래서 선택한 모델이 X 계열 중 특이하게 100만원 이하의 가격대를 형성한 씽크패드 X201i 3249-nr2였다. 출시된 지 조금 지나기도 했지만, 원래 저가 모델로 개발된 모양이다. 나중에 안 사실이지만, 모델명에 붙은 i가 저가형이란 뜻이란다. 최신이란 수식어가 붙지 않는 모델의 장점은 리눅스에서 지원하지 않는 장치로 고생할 확률이 그만큼 낮다는 것! 같은 계열인 X201은 우분투 11.04의 인증까지 받았다.

노트북을 받은 날과 다음 날은 각종 깔린 윈도7 홈 프리미엄의 업데이트를 하며 보냈다. 하드웨어 이상이 생겼을 때나 바이오스를 업그레이드할 때 노트북에 깔려나온 윈도가 있으면 편하므로 윈도를 삭제하지는 않았다. 레노버에서 바이오스 업그레이드용 부팅 디스크 이미지를 배포하므로 이걸 이용하면 되지만, 역시나 윈도에서 ThinkVantage 시스템 업데이트를 이용하는 편이 편하다. 나온 지 오래된 녀석답게 업데이트도 참 많았다.

설치된 윈도가 64비트이니 우분투 64비트 버전을 깔기로 하고 보니, 2011년 9월에 설치할 수 있는 옵션은 두 가지가 있었다. 10.04 LTS와 11.04. 메모리 스틱으로 설치하는 방식을 이용했는데, 11.04는 설치 중에 커널 패닉이 발생했다. 남은 유일한 옵션은 10.04 LTS 64비트였고, 이 녀석은 다행히 별다른 문제가 없었다. 복구 영역과 공장 초기화 영역 등은 그냥 두고, 윈도에는 50GB를 할당했다. 스왑은 하드웨어 최대 지원 메모리의 두 배인 16GB를 할당하고 나니 우분투에는 420GB를 쓸 수 있었다.

디스크 공가 분배

설치 후, 바로 10.10을 거쳐 11.04로 업그레이드를 했다. 사용 중에 하드웨어 오류로 보이는 문제가 세 가지 발생했다. 첫 번짼 단 한 번 발생했지만, 무선랜 장치가 사라지는 문제. 이건 콜드 부팅 후에 장치가 살아났고 아직 이 문제가 다시 발생하지는 않았다. 인터넷 검색을 해보니, 무선 네트워크 신호가 잡히지 않거나, 무선 네트워크를 수동으로 끌 때 무선 네트워크 장치의 커널 모듈이 내려가는 현상이 있는 것 같다. 이럴 땐, 아래와 같이 수동으로 커널 모듈을 올려줘야 한다.
$ sudo modprobe r8192se_pci
두 번째는 화면이 갑자기 꺼거나 아예 재부팅되는 현상으로 하루 사용 중에도 몇 번 일어났다. 노트북의 바이오스를 확인해보니 2010년 10월 26일 자 1.31 버전이었고, 이후 바이오스 변경 목록을 살펴보니 발생 조건은 다르지만, 디스플레이 블랙아웃 문제와 재부팅 문제 해결 등의 내용이 있었다. 바이오스를 업그레이드하고 나니 이 문제는 사라졌다.

세 번째는 사용 중에 갑자기 멈추는 문제로, 노트북을 켠 상태로 들고 다니거나 바닥이 평평하지 않고 고정되지 않은 곳에 두고 사용하면 종종 문제가 발생했다. 이건 원인을 정확히 파악하지 못했는데, 배터리의 결합부가 조금 의심이 간다. 다른 씽크패드는 배터리 결합부가 꽉 끼이는 느낌인데, X201i 3249-nr2의 배터리 결합부는 조금 헐겁다. 배터리가 고정부에 조금 유격이 있는 것 같다. 노트북을 켠 상태로 이동하거나 바닥이 고정되지 않은 곳에서 사용하면 전원부의 접촉불량으로 멈추는 것이 아닌지 의심된다.

여기까지 해서 모든 하드웨어가 윈도7에서처럼 다 작동하는 건 아니다. 먼저, 가장 눈에 띄는 지문스캐너. 이건 씽크위키를 참고 해서 잡으면 된다. 하지만 로그인 방식을 지문인식으로 대체하는 것은 추천하지 않는다. 한 손가락의 지문만 등록할 수 있고 인증이 필요할 때마다 지문을 요구하는 등, 윈도보다 매우 불편하다.

충격을 감지해서 하드디스크를 보호하는 Active Protection System도 직접 손봐줘야 한다. 필요한 패키지를 설치하고, hdapsd 서비스를 시작한다.
$ sudo apt-get install tp-smapi-dkms hdapsd
$ sudo /etc/init.d/hdapsd restart
작동 여부는 hdapsd를 직접 실행해서 확인할 수 있다. 아래의 명령어를 입력한 다음, 노트북을 움직여 보면 하드디스크 파킹이 작동하는 것을 확인할 수 있다.
$ sudo hdapsd
또한 find / 명령을 내린 후 노트북을 움직여 보면, 충격이 감지될 때마다 결과 출력이 멈추는 것을 확인할 수 있다.

냉각팬의 속도는 별도의 설정을 하지 않는다면, 일정한 속도를 유지한다. 일반적인 용도에는 충분하고 CPU 사용량이 많으면 부족한 속도다. 씽크패드의 온도에 따라서 회전 속도를 조절하려면 thinkfan을 이용해야 한다. 이 설정은 잘못 설정하면 노트북에 열 손상을 가할 수도 있으니 주의를 기울여야 한다. X201i가 저가 모델이라서 그런지, 장착된 온도 센서가 하나뿐이어서 각 부분별 온도에 맞춰 세밀하게 냉각팬 설정을 할 수 없다. 더욱이 인터넷에서 아직 X201i 용의 thinkfan 설정을 찾을 수 없다. 하지만, 기본 설정만으로도 만족스럽게 작동한다는 보고가 있니 용감하게 시도해보자. 먼저, thinkfan을 설치한다.
$ sudo apt-get install thinkfan
thinkpad_acpi 모듈이 팬의 회전 속도를 조정하도록, /etc/modprobe.d/thinkpad_acpi.conf 파일에 다음 줄을 추가한다.
options thinkpad_acpi fan_control=1
마지막으로 /etc/default/thinkfan의 다섯 번째 줄을 다음과 같이 수정해서 부팅할 때, thinkfan이 시작되도록 한다.
START=yes
이제 노트북을 재부팅하면 된다.

세 가지 장치를 수동으로 설정해야 하지만, 그 외의 다른 모든 장치가 우분투에서 정상으로 작동한다. 씽크패드 답지 않게 배터리 결합이 조금 느신하지만, 이것 때문에 전원에 문제가 생긴 적은 없다. 누군가 우분투를 깔아 쓸 노트북을 추천해 달라고 한다면, 주저하지 않고 씽크패드 X201i 3249-nr2를 소개해 줄 것 같다.