Docker란 프로그램을 들어보신적이 있으실겁니다. 이놈의 정제가 뭐냐하면 특정 리눅스 컨테이너를 만들고 필요에 따라서 가상화하여 올렸다 내렸다 하는 총체적인 솔루션입니다.


기본적으로 lxc를 이용하고 있고 여기에 관리용 hub를 덧붙여서 이용하고 있습니다. VirtualBox나 VMware의 저수준 가상화가 아닌 일종의 Sandbox가상화입니다.


한번 컨테이너를 만들어 놓으면 해당 컨테이너를 쓰다가 그냥 컨테이너를 내리는 것으로 초기화를 한번에 할 수 있어서 편합니다. 그리고 Sandbox가상화이기 때문에 성능상 손해가 없다고 봐야 합니다.


그런데 이런건 보통 서버에서 필요한 것인데 데스크탑인 우분투에서 대체 어떤 용도로 이 녀석이 필요한 것일까요?


여러가지가 있지만 대표적인 몇가지만 알려드리겠습니다.


우분투에서 소스 컴파일을 통해 설치를 하려고 하면 이것저것 패키지를 많이 설치해야하고 설치후에도 이것 저것 쓰레기가 많이 남습니다. 그리고 컴파일한 패키지를 배포하려고 해도 우분투의 버전이 좀 많습니까? 각각의 배포판에 맞게 패키징을 해야하는데 그럼 각각의 버전을 또 설치해야합니다. 이걸 하나하나 한다고 생각해보세요. 미쳐 돌아갈 지경입니다.


또 다른 것으로는 바이너리 형태로 배포되는 프로그램 중에서 특정 배포판만을 지원하는 경우가 있습니다. 지금은 억지로나마 설치를 하지만 어쨌건 삽질하면서 설치하는 한글2008이나 Redhat 계열만을 지원하는 Abacus, 혹은 우분투와 페도라만을 지원하는 구글 크롬등이 있습니다. 이런 경우에는 해당 배포판을 설치해야하지만 Docker를 이용해서 해당 프로그램을 설치한다면 아무런 문제없이 설치를 할 수 있게 됩니다.


하지만 이런 Docker사용시 한가지 문제가 있는데 GUI 프로그램을 쓰려면 Xorg가 호스트에서 실행되고 있어야 한다는 것입니다. 당연하다면 당연한 이야기입니다.


하지만 컨테이너에서는 Xorg가 없어도 됩니다. 호스트의 Xorg가 모든 것을 대신해 주거든요. 그 말은 호스트의 자원을 이용할 수 있다는 의미입니다.


docker를 설치하고 설정하고 컨테이너를 빌드하는 것은 다른 곳에 더 좋은 내용이 많기 때문에 이 부분은 넘어가고 저는 컨테이너에 설치된 GUI프로그램을 실행하는 방법에 대해 알려드리겠습니다.


docker의 컨테이너를 실행할 때 대부분 여러분들은 이 명령으로 시작할 겁니다.


sudo docker run ~~ /bin/bash


그런데 GUI를 하시려면 여기에 몇가지가 더 들어가야 합니다.


sudo docker run --rm -it -v /run/user/1000:/run/user/1000 -v /dev:/dev -v /tmp/.X11-unix:/tmp/.X11-unix:ro --privileged --ipc=host --shm-size=256m --net=host -e DISPLAY=$DISPLAY -e XDG_RUNTIME_DIR=/run/user/1000 /bin/bash


이렇게 하시면 pid 1000으로 Docker가 실행되면서 X가 함께 실행이 되고 256m의 공유메모리가 함께 만들어지며 쉘로 bash가 실행되게 됩니다.


그럼 바로 GUI 프로그램의 명령을 내려볼까요? firefox같은 것이 좋겠네요.


그럼 데스크탑을 못 찾는다면서 에러가 날 겁니다.


호스트에서도 한가지 더 설정을 해야 하거든요. 호스트 컴퓨터에서 터미널을 열고 다음 명령을 내리도록 합시다.


xhost +local:docker


이렇게 하면 docker로 실행되는 프로그램이 호스트의 X를 통해서 실행이 되게 됩니다. 이제 한번 다시 컨테이너에서 명령을 내려보세요. 컨테이너의 설정에 맞춰서 프로그램이 실행될겁니다. 자그마치 호스트 프로그램과 함께 말이지요!


복잡하게 움직이기는 했지만 생각보단 쉽지 않나요? 이렇게 사용하시면 Docker의 프로그램에서 어떤짓을 하더라도 깔끔하게 다시 돌아올 수 있답니다. 참 쉽죠?


P.S 우분투에서 Docker 설치는 굉장히 쉽습니다.

sudo apt-get update
sudo apt-get install docker.io
sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker 

Windows에서 설치하려들면 미쳐돌아가는 반면 우분투는 리눅스라 Docker가 굉장히 쉽지요. 책에서보면 몇 페이지에 걸쳐서 설명하던데 Docker는 역시 리눅스에서 돌리는 것이 가장 좋습니다.


P.S-2 Docker가 굉장히 유용한 배포판으로 Arch와 FreeBSD가 있습니다. Arch는 롤링릴리즈 특성상 구버전 설치가 힘든데 구버전을 길게 지원하는 Debian이나 Ubuntu LTS를 Docker에 올려놓고 해당 배포판용 프로그램을 사용하는 경우가 많다고 합니다. FreeBSD는 Linux가 아닌 BSD이므로 Linux전용 프로그램을 요구할 때 사용한다고 합니다.


P.S-3 호스트의 X를 사용하는 것으로 굉장한 강점이 있는데 컨테이너에서 그래픽가속도 됩니다. 보통 가상화는 오버헤드가 많은데 이쪽은 오버헤드 자체가 없습니다.

,

리눅스에서 폰트를 쓰다보면 Windows의 폰트가 필요할 때가 은근히 있습니다. Wine으로 프로그램을 굴릴 때 말 그대로 굴림폰트나 Times Roman폰트가 필요한 경우가 있지요.


이를 편하게 하기 위해서 우분투에서는 ttf-mscorefonts-installer란 패키지를 통해 EULA동의하에 설치할 수 있도록 해놓았습니다.


그런데 ttf-corefonts를 설치하다보면 


Can't drop privileges for downloading as file '/var/lib/update-notifier/package-data-downloads/partial/andale32.exe' couldn't be accessed by user '_apt'. - pkgAcquire::Run : 허가 거부 

위의 메시지를 띄우면서 설치가 거부되기도 합니다. 이런 경우 원인은 의외로 간단한데요.


ttf-mscorefonts-installer 패키지 버전이 낮아서 생기는 문제입니다. MS폰트는 sourceforge를 통해서 다운로드 받게 되어있는데 이전 버전에서는 이 부분이 갱신이 덜 되어서 너무 오래된 인증서를 통해 다운로드 받기 때문에 그렇습니다. 그럼 새로운 버전의 패키지를 쓰면 되겠지요?


우분투는 데비안의 패키지리스트를 받아온다는 사실은 알고 계실겁니다. 그럼 해당 패키지를 Debian sid에서 가져오면 되는 것이지요.


wget http://httpredir.debian.org/debian/pool/contrib/m/msttcorefonts/ttf-mscorefonts-installer_3.6_all.deb
sudo dpkg -i ttf-mscorefonts-installer-*


이렇게 하시면 2017년 현재 MS폰트를 아무 문제없이 설치 할 수 있을 겁니다.



,

채팅봇이란 물건이 있습니다. 일종의 인공지능 대화상대인데 특정 대화방(채팅룸)에서 특정 키워드가 나오면 해당 키워드에 맞는 대답을 해주는 물건입니다.


이미 잘 이용되는 물건으로는 간단하게는 심심이가 있고 Youtube와 TwitchTV에서 사용하는 NightBot, MooBot등이 있고 인공지능 대화용으로 만들어진 MS의 테이(Tay)나 구글의 채팅봇도 있습니다. 카카오톡을 통해 알려주는 채팅봇도 있습니다.


사실 인공지능까지는 아니더라도 간단하게 유튜브나 TwitchTV등에서 방송하는 사람들을 도와주는 봇들은 이미 많이 쓰이고 있지요. 이들의 조상은 IRC에 플러그인 방식으로 사용되어서 해당 채팅방에서 물을 흐리는 몇몇 또라이들을 추방하거나 욕설등을 가려주는 등 IRC의 심판으로 쓰였던 그런 물건이 시초라고 보고 있습니다. 여기에 몇가지 키워드를 더 추가해서 특정 키워드가 나오면 대신 대답을 해주거나 간단한 대화기능을 넣는 등 발전을 했고 이후 지금의 시리같은 인공지능 기술과 음성인식 기술이 접목되어 굉장히 편리해졌지요.


지금 많이 이용되는 채팅봇 혹은 전자비서의 조상은 IRC의 플러그인들로 부터 시작되었다고 본다. 사진은 IRC클라이언트 중 제일 유명한 mIRC의 로고



이런 쪽에 제가 관심을 갖게 된 원인은 한 때 유명했지만 지금은 그저그런 Twitch Plays Pokemon때문이었습니다.

Twitch Plays Pokemon은 말 그대로 TwitchTV방송의 채팅을 통해 직접 게임을 움직여서 게임을 하는 특이한 방송이었습니다. 지금은 시들하지만 처음에는 방송을 보려는 사람들로 붐볐었습니다. 문제는 그만큼 컨트롤이 산으로 갔다는 것이지만...


당시 이슈가 되었던 Twitch Plays Pokemon 방송. 사공들의 수많은 채팅들을 봇이 읽어들여서 게임을 하는 그런 방송이었다.


해당 방송의 방식은 아주 간단합니다. 사람들이 채팅방에 특정 키워드(right, left, up, down, a, b, start, select 등)을 치면 게임과 함께 연동되는 봇이 해당 명령에 맞는 기능을 게임에 전달하여 움직이게 하는 것입니다.


이것이 가능했던 이유는 TwitchTV의 채팅이 기존의 IRC를 그대로 이용하기 때문이었습니다. TwitchTV는 채팅방식을 공개된 IRC프로토콜을 이용하되 약간의 보안을 적용해서 사용했기 때문에(그나마 그 보안도 알려진 방식입니다.) 기존의 IRC봇을 만들기 쉬웠습니다. 실제로 여기에 쓰인 플러그인과 비슷하게 구현된 소스코드도 공개되어 있지요.


https://github.com/hzoo/TwitchPlaysX

https://github.com/sunshinekitty/TwitchPlaysPokemon


위 github가 해당 플러그인을 구현한 소스코드입니다. IRC를 기반으로 키보드 혹은 마우스 명령을 내릴 수 있게 되어있지요.


채팅을 할 수 있는 방송은 TwitchTV만 있는 것은 아니지요. Twitch외에도 Youtube가 있고 국내에서는 DaumTV팟도 있습니다. (아프리카TV는 너무 구식이기 때문에 예외로 합시다.)


1. 실시간 방송이 가능하고

2. 동시에 채팅도 할 수 있으며

3. 여러명이 달려들어도 서버상태가 괜찮다면

이런 류의 봇을 직접 만들 수 있지 않을까?


라는 생각이 들더군요.


네, 사실은 안일한 생각이었습니다. 대다수 서비스는 IRC기반이 아닌 다른 방식을 사용하고 있었고 해당 프로토콜을 알아내는 것은 굉장히 어려웠습니다. TwitchTV가 알려진 방식을 사용한 특이 케이스였던 것입니다.


그런데 Youtube는 API를 통해 채팅봇을 만들 수 있게끔 공개가 되어있었고 실제로 NightBot이란 봇이 이미 만들어져 있었습니다. 즉, Youtube는 충분히 이러한 봇제작이 가능하다는 의미였지요.

https://developers.google.com/youtube/v3/live/docs/liveChatMessages/list


"그래! 그럼 나도 ChatBot이란 것을 한 번 만들어보자!"라는 생각으로 시작을 해봤습니다.


결과는...당연하게도 참패.


YoutubeAPI는 생각보다 요구하는 것이 너무 많았습니다. 저는 그저 채팅 내용을 읽어들인다음 키워드분석을 하는 것을 원했는데 해당 채팅방의 전반적인 것을 다 API로 세팅하게 만들어져 있더군요. 전반적인 IRC봇이 그렇기는 하지만 위의 TwitchPlaysPokemon의 소스코드는 그렇게 복잡하게 만들어지지는 않았습니다.


즉, 예상을 뛰어넘는 수준의 설정을 요구했던 것입니다. 


처음에는 그냥 장난으로 시작한 것인데 이런식으로 흘러가다간 올해안에 ChatBot은 커녕 비슷한 것도 만들기 어렵겠다는 생각이 들었습니다. 하지만 세상은 넓고 꼼수는 많습니다. 그리고 그 꼼수는 간단한 아이디어부터 시작되었습니다.


"Youtube나 TwitchTV나 웹페이지에서 채팅이 가능하다."


특히 Youtube는 어딘가의 방송시스템 처럼 클라이언트를 설치하지 않고 웹브라우저에서 볼 수 있게 만들어져 있습니다. 그렇다는 것은 웹페이지 분석을 하면 채팅의 키워드를 읽을 수 있다는 의미입니다!


Youtube는 편의를 위해 채팅창만 따로 빼서 쓸 수 있게 할 수 있는데 즉, 채팅페이지를 따로 찾을 필요없이 해당 채팅창만 분석, 확인하면 채팅창으로 올라오는 키워드를 읽을 수 있다는 의미가 됩니다. 게다가 해당 페이지의 주소를 긁어내는 것도 어려운 일이 아닙니다. 당장 위 스크린샷만 봐도 창 주소를 바로 읽을 수 있게 되어있습니다. 그리고 저 페이지주소는 어떤 웹브라우저를 사용해도 똑같습니다. (어딘가의 무언가와 다르게 말입니다.)


그렇다면 소스보기를 통해 채팅창의 코드 분석이 가능하다는 의미이므로 어떤 Element(요소)가 채팅 메시지 요소인지 확인하는 작업이 필요했습니다. 해당 작업에는 크롬의 개발자도구가 유용하게 쓰였습니다. 분석 시작 15분만에 코드를 찾아냈으니까요. 하지만 이후는 노가다로 귀결된 것은 어쩔 수 없었습니다.


채팅 메시지는 해당 페이지에서 content라는 이름으로 찾으면 (아이디)+(메시지)형태의 리스트로 되어있었고 author-name이라는 이름으로 찾으면 채팅창에 떠있는 아이디를 리스트형태로 찾을 수 있었습니다. 그렇다면 두 리스트를 이용해서 메시지만 뽑아낼 수 있다는 의미이기도 하지요.


그런데 채팅은 실시간으로 이루어지는데 새로운 메시지는 어떻게 아냐고요? 위 작업을 그냥 계속 하면 됩니다. 그리고 이전 리스트와 새 리스트를 비교한 다음 추가된 것만 뽑으면 되는 것이지요.


그런데 이걸 만들까요? Selenium이란 우리가 실제로 사용하는 웹브라우저에 덧붙여서 사용하는 웹 자동화 모듈이 있는데 이것을 Youtube채팅페이지를 띄워서 해당 요소를 찾으면 되는 것입니다.


(http://www.seleniumhq.org/projects/webdriver/)


Chrome, Firefox, Safari 등 유명 웹브라우저와 함께 PhantomJS란 따로 UI를 제공하지 않지만 WEB접속을 해주는 Selenium을 위한 웹브라우징 엔진도 지원합니다. 저는 Firefox에 Selenium을 설치한 후 읽어들이기로 했습니다.


그리고 문장처리는 Python으로 처리를 했습니다. Selenium의 예제는 JAVA로 되어있지만 Python이 문자열 처리는 월등하기 때문에(대신 느린것은 어쩔 수 없지요.) Python Wrapper를 찾았더니 있더군요. pip로 쉽게 설치 할 수 있었습니다.


sudo pip install selenium

혹은

sudo pip3 install selenium


만약 pip(Python2)나 pip3(Python3)가 없으시면 우분투의경우 저장소에서 설치할 수 있습니다. 아무래도 2017년 현재에는 Python3가 낫겠지요.


그리고 WebDriver를 설치해야 하는데

Firefox는 https://github.com/mozilla/geckodriver/releases

여기서 geckodriver를

Chrome은 https://sites.google.com/a/chromium.org/chromedriver/

여기서 파일을 다운로드 받은 다음 /usr/bin에 넣어주시면 알아서 활성화가 됩니다.

PhantomJS는 그냥 PhantomJS를 저장소에서 설치하시면 알아서 활성화가 되므로 상관이 없습니다.


from selenium import webdriver
driver = webdriver.Firefox()
#Firefox가 싫음 PanthomJS나 Chrome도 상관없다.

#Youtube chat room's page URL
driver.get(' 유튜브 채팅창 URL')
driver.implicitly_wait(10) 


요렇게 코드를 작성하고 실행하면 웹브라우저가 하나 실행되면서 Webdriver를 통해 자동화가 가능하게 됩니다.


위 코드 다음

id_msg = driver.find_elements_by_xpath('//*[@id="content"]')
id_l = driver.find_elements_by_xpath('//*[@id="author-name"]')


이렇게 하면 id_msg란 리스트에는 content항목인 요소들이 들어가고 id_l이란 리스트에는 author-name이란 이름의 요소들이 들어가게 됩니다. xpath란 것은 W3C에서 요소들을 쉽게 쓸 수있도록 XML형태로 만든 규약인데 자세한 것은 따로 찾아보시길 추천드립니다.


그리고

print (id_msg[0].text)

print (id_l[0].text)

이렇게 하시면 해당 채팅창의 제일 첫 메시지의 아이디와 문장이 콘솔창에 뜨는 것을 알 수 있습니다!!!!


즉, 채팅창의 메시지를 읽어들이는데에 성공한 것이지요. 그렇다면 문자열을 조작하고 Tokenizer를 통해 단어별로 자른다음 키워드를 분석하면 봇을 충분히 만들 수 있겠지요?


일단 오늘은 Youtube의 채팅창의 내용을 읽어들이는 것까지만 하고 나머지는 넘어가도록 하겠습니다.


다음 예시는 위의 방식을 이용해서 Youtube의 채팅창의 내용을 콘솔창에 계속 띄우는 소스코드입니다.


https://colorscripter.com/s/h7ME3n7

,

사실 그동안 무슨짓을 했냐고 하신다면 먹고살려고 발버둥 쳤다고 밖에는 말 못하겠습니다. 하지만 먹고 살려고 하는 짓이라고 해도 그게 결국 먹고 살게 되면 문제가 되지 않지만 결국 발버둥에 그친다면...?


아무튼 그렇고 그런 발버둥이 있었습니다. 아직은 먹고 살만은한데 이러면 언젠가는 굶어 죽을지도 몰라요. 그래도 아직까진 희망은 있으니 그렇다고 해둡시다.


최근 Python가지고 이런저런 장난을 또 치고 있었습니다. 이 장난의 결과에 대해서는 나중에 제대로 올릴 예정인데 Python이란 언어가 재미있으면서도 선택의 기로에 섰다는 기분이 다분히 들고 있습니다.

사실 Python 홈페이지(https://www.python.org)홈페이지에 들어가면 두 가지 버전을 구할 수 있지요. Python 2.7과 Python3.x입니다. 그냥 쉽게 말해서 Python2와 Python3로 나뉘어진 셈인데 Python2는 2.7버전을 끝으로 더이상의 업데이트는 없다고 밝혔습니다. 그것도 2010년이었네요. 하지만 그 이후로도 2.7은 계속 쓰였고 아직까지도 2.7을 사용하는 프로그램들이 꽤나 있습니다. 사실 이해가 안 되는 것도 아닌게 Python3는 초기에 엄청 느렸습니다. 벤치마킹을 하면 Python2가 20%~50%정도 더 빨랐거든요. Python2와 Python3는 사실 겉으로보면 거기서 거기지만(80%정도 코드 재활용이 가능했습니다.)내부는 완전히 달라져서 Python3는 현대의 패러다임에 맞춰서 설계를 다시한 물건입니다.


이후 Python3는 2017년 지금 현재 상당한 성능개선이 이루어졌고 현대 하드웨어에 맞추어서 만들어졌으므로 Python2.7에 비해 효율도 상당히 개선되었습니다. 하지만 Python3초창기에 질렸던 사람들이 2.7을 고수하는 경우가 많은 것이 현실입니다. Python3의 개선점이 알려지며 많이 3.x로 교체가 이루어졌고 유명라이브러리는 3.x가 당연히 지원이 되고 있지만 문제는 개인 혹은 사내에서 사용하는 라이브러리가 아직까지도 2.7로 만들어져있는 경우가 많아서 2.7을 보안업데이트를 제외한 기능업데이트는 없다고 밝힌 지금까지도 이용되고 있습니다.


우리나라에서 Python이 제일 많이 쓰이는 곳은 어딜까요?

당연하게도 각종 서비스용 서버프로그램입니다. DB를 sqlite를 쓰고 Python으로 DB관리를 하면 굉장히 쉽게 사용이 가능합니다. 이외에도 모든 웹과 온라인 서비스를 Python으로 처리하는 경우도 많지요. 그런데 문제는 이런 서비스들이 2.x로 작성된 경우가 많아서 python3로 못 넘어간 경우가 많다는 점입니다. 이에 대한 원인으로 여러가지를 들 수 있지만 제일 큰 문제는 비용문제입니다.


사실 python2에서 python3로 넘어가는 것은 그렇게 큰 문제는 아닙니다. 코드의 80%가 재활용이 가능하고 대다수 라이브러리가 3.x호환이 되게끔 업그레이드가 이루어져서 약간의 노력만 하면 Python3로의 전환도 그렇게 어렵지는 않다고 합니다. 하지만 기존의 Python2기반의 서비스를 Python3로 전환하면서 몰랐던 버그가 발생할 수도 있고 (python2와 달리 python3는 무조건 유니코드기반이라 cp949를 기반으로 짰으면 고생길이 열리게 됩니다.) 충분한 테스트가 이루어지지 않으면 서비스가 중단되는 초유의 사태가 벌어질지도 모르기 때문에 이에 고민을 하는 것입니다. 그럴거면 일단 2020년까진 버티기로 버티고 그 다음 Python3로 넘어가도 늦지 않다는 생각을 가진것으로도 보입니다. 


사실 테스트? 조금 시간들이고 비용을 조금만 들이면 얼마든지 할 수 있습니다. 디버깅제대로 안 하고 서비스하다가 망한 것이 어디 한 두가지입니까? 원래 디버깅은 모든 개발에 필수코스입니다. 그건 서비스를 하는 중에도 이루어져야합니다. 그럼 지원기간까지 버티다가 전환하는 것은요? 우리는 WindowsXP를 떠올려야합니다. WindowsXP는 연장지원 2년을 통해 일종의 유예기간을 가졌지만 전환을 늦게하는 바보짓을 하는 바람에 한동안 혼란을 겪고 말았습니다. 그리고 NPAPI지원도 크롬에서 지원을 끊겠다고 발표를 했음에도 이를 미루고 미루다가 결국 크롬의 NPAPI지원코드가 완전히 삭제되고 나서야 부랴부랴 PPAPI로 전환을 시작했습니다. (그런데 그것마저도 엉망이라는 느낌입니다.)


Python2.7의 지원기간은 3년정도 남았습니다. 생각보다 길다고 느끼실지도 모르지만 시간은 생각보다 빨리 지나갑니다. 그리고 Python3의 성능이 Python2보다 더 좋아졌음이 밝혀진 지금 이젠 성능핑계도 댈 수가 없게되었습니다. 그런데 아직도 2.7을 고수하시겠다면...?


당신은 그저 과거의 향수에 젖어 현재를 보지 못하는 늙다리일 뿐입니다. 개발자가 늙다리같은 생각에 빠져있다면 그 프로젝트는 이미 망한 프로젝트인 것이지요.


아직 늦지 않았습니다. 당신의 프로젝트 이제는 Python3로 시작해주세요.


P.S 우분투도 그동안 라이브러리 문제와 일부 프로그램 때문에 Python2.7을 기본탑재하고 있었습니다. 하지만 16.04이후로는 기본 탑재프로그램들이 Python3.5를 지원하고 있어서 Python2대신 Python3.5를 기본 탑재했습니다. 물론 Python2.7을 설치하지 못하는 것은 아니지만 저장소에서 python2.7이 사라질 준비를 하는 것으로 보입니다. 그때가 되면 python명령은 python2.7이 아닌 python3를 실행하는 명령이 되겠지요.


P.S2 업데이트가 굉장히 빠르기로 유명한 Arch는 python명령을 쓰면 Python3가 실행된다고 합니다. 버전업도 빠르기 때문에 무조건 최신버전이 뜨는 것이지요.

만약 아치를 쓰시는 분이 계신다면 터미널에서 python --version 명령을 쳐보세요.


P.S3 사실 이 글은 제 자신한테 하는 말입니다. Python으로 장난을 치는데 저도모르게 Python2스타일로 코딩을 하고 있더군요. 무의식적으로 Python2가 손에 너무 많이 익어버린 것 같습니다. 나름 의식하고 코딩을 하고 있지만 익숙함에서 나오는 그것은 정말 무서운 것이었습니다.

,

오늘은 짧게 고찰만 잠깐 할려고 합니다. 작년까지만 해도 한달에 4~5개 정도 글을 올리는 것이 다였는데 요즘 너무 달린 것 같아서 제 자신도 어리둥절하네요.


임베디드기기에 대해 얼마나 알고 계시나요?


Embedded 사전을 찾아보면 내장된, 내장형인, 품고있는 등으로 해석이 됩니다. 즉 Embedded OS란 내장형OS란 의미입니다. Windows나 우리가 사용하는 일반PC용 배포판과 다르게 특정기기에 내장되어 사용되는 OS란 의미입니다. 그런데 최근에는 경계가 많이 모호해져서 단순펌웨어 수준인데 OS로 취급되는 것도 있고 OS라고 하지만 알고보면 그냥 펌웨어수준인 경우도 있습니다.


대표적인 것이 NAS로 유명한 시놀로지입니다. 시놀로지OS는 NAS구동에 쓰이는 일종의 임베디드OS이자 펌웨어인데 리눅스기반이라서 일반PC용으로 포팅이 이루어졌습니다. 역으로 리눅스 기반이라 기능확장도 뛰어나지요. 엄밀히말하면 NAS용 펌웨어지만 범용OS급의 확장성과 이식성을 갖추고 있다는 의미입니다. 이쯤되면 그냥 범용OS수준이지요.


범용 OS는 만드는 것이 굉장히 어렵습니다. 수많은 부품들을 다 지원하는 것이 쉽지 않거든요. Windows는 뭐냐고 하시는 분들도 있겠지만 Windows도 일부장치와 호환문제로 곤혹을 겪는 경우가 많습니다. 산업용 장비들이 구형OS를 사용하는 이유이기도 합니다. 2017년 현재에도 DOS로 구동되는 장비들이 있고 보기 힘든 OS/2장비들도 현역인 곳이 아직 많습니다.


하지만 임베디드라면? 이야기가 많이 달라집니다. 일단 특정기기만을 지원하므로 다른 기기에대한 기능을 쳐낼 수있고 지원기기에 대한 특정 기능을 추가할 수도 있습니다. 다른 기기로 이식을 하는 일은 있을 수 있지만 해당OS를 그대로 사용할리는 없지요. 이런 쪽으로는 리눅스가 정말 딱이라는 생각이 들 수 있습니다.


임베디드기기는 PDA, 디지털 카메라, 스마트TV, 스마트폰 외에도 넓게 보면 로봇청소기, 은행ATM, 길거리 광고판, 산업용 장비 들도 특정 기기를 위한 세팅이 되어있으므로 임베디드기기라고도 볼 수 있습니다. 여기에 흔히 사용하는 IP공유기도 엄밀히 말하면 임베디드기기가 맞습니다.


그럼 여기서 임베디드 리눅스는 어디까지 자리를 잡고 있을까요?


아쉽게도 리눅스는 임베디드OS로 위상이 애매한 상황입니다.


임베디드기기는 그 자체로 상용제품이 될 수 있습니다. 그리고 지속적인 펌웨어 업그레이드를 통해 기기의 성능을 끌어올릴 필요가 있지요. 하지만 리눅스 커널을 기기에 맞게 수정하고 조합하는 일이 쉽지가 않습니다. 심한 경우에는 임베디드 기기를 만드는 곳에서 다 해결을 해야할 수도 있습니다. 회사같은 곳에서는 이런 것을 좋아하지 않습니다. 책임질 일만 늘어나는 셈이거든요.


예전의 아이스테이션이란 PMP가 있었고 OS로 임베디드 리눅스를 썼었습니다. 성능도 나쁘지 않았고 인기도 많이 있었는데 어느날 일부모델에 한해서 WindowsCE기반의 펌웨어를 새로 배포했었습니다. 왜 그랬을까요?


사실 아이스테이션은 신생업체였고 나름 대박을 쳤지만 경쟁업체(아이리버 등)에 비해 개발능력이 좋은 회사는 아니었습니다. 새로운 모델을 찍어내기 시작하고 해당 모델의 파생형이 생기는 등 라인업이 많아지면서 이를 관리를 해야했는데 이를 전부 관리하기가 어려웠을 겁니다. 회사의 규모가 작은 탓에 수많은 제품의 펌웨어를 관리하는 것이 힘들어졌고 소위 말하는 버려진 모델도 생겨났을겁니다. 그래서 상대적으로 개발과 관리가 쉬운 WindowsCE를 택한 것을 보입니다.


만약 지금이라면 안드로이드를 택하는 것이 좋은 생각이었을 겁니다. 하지만 안드로이드가 지금의 위상이 생기기 전에 아이스테이션이란 업체는 사라져버리고 말았습니다.


안드로이드 이야기가 나와서 말하는 것이지만 안드로이드는 과연 임베디드 리눅스라고 볼 수 있을까요? 안드로이드는 애매한 위치를 가지고 있습니다. 보통 임베디드 리눅스라고 하는 것은 우리가 흔히 사용하는 리눅스 프로그램들을 사용하지만 특정기기용으로 특화된 OS를 말하는 것인데 안드로이드는 임베디드OS는 맞지만 이 부분이 애매하기 때문에 임베디드 리눅스에 넣기도 하고 빼기도 합니다. 안드로이드 전용 애플리케이션을 쓰는 경우가 많거든요. 안드로이드를 빼는 순간 임베디드 리눅스의 점유율은 바닥으로 처박힙니다. 그만큼 기업시장에서 (안드로이드를 제외한)임베디드 리눅스는 그렇게 상황이 좋지 않다는 의미이기도 합니다.(물론 국내이야기입니다.)


다만, GBusTV에 우분투를 사용하고 있고 스마트TV 셋톱박스에 리눅스가 사용되는 것이 확인 되는 것을 보면 시장 점유율이 0이 되는 일은 없을 것이라는 생각이 듭니다. 다만, 책임문제라는 고질적인 문제가 해결되지 않으면 임베디드 리눅스가 임베디드 시장에 영향이 높아지기는 어려울 것이라고 생각합니다. POS기 해킹사건이나 블루스크린 광고판이 나오는데도 Windows기반의 임베디드 기기가 시장을 잡고있는 이유는 책임소재가 명확하고 관리가 쉽다는 바로 그 점이 시장에서 먹히고 있는 것일겁니다.


P.S 공공부문이나 산업부문에서는 리눅스가 찬밥이지만 네트워크쪽은 리눅스만한 것이 없더군요. 거의 왠만한 장비는 유닉스가 50% 리눅스가 거의 50%입니다. 다만 이쪽은 책임소재가 명확하고 이미 검증된 경우가 많아서 그런것으로 보입니다.


P.S-2 안드로이드가 리눅스가 맞기는 하지만 시장에서는 임베디드 리눅스라고 하지 않고 안드로이드라고 따로 지칭을 합니다. 즉, 리눅스커널을 쓴 별도의 OS로 취급한다고 생각하시면 될 것 같습니다. 몇몇 임베디드 기기의 카탈로그들을 참고 했습니다.

,


추억의 게임입니다. 프린세스 메이커3 전작인 2가 워낙 명작이어서 평가절하 당하는 경향이 있지만 어쨌건 가상의 딸을 키운다는 게임컨셉은 그대로이고 나름 숨겨진 내막도 있어서 그냥저냥 하는 사람이 꽤 있습니다.


무엇보다 한국초기판(만트라 유통)은 일본판보다 더 좋은 음악과 더 좋은화질, 더 좋은 더빙으로 한국판이 훨씬 더 훌륭한 몇 안 되는 게임입니다. (사실 프린세스 메이커 시리즈는 한국에서 어마어마한 히트를 쳤기에 유통사에서도 엄청 신경을 썼습니다.)


다만... 이 버전이 조금 문제가 있는게 우분투에서 실행하기 좀 빡셉니다. 사실 WindowsXP이후 버전에서도 비슷한 문제가 있는데 Wine의 발전과 더불어 기존 Windows95와의 호환성은 내다 버린지 오래다보니 Wine에서도 XP호환 패치없이는 구동이 되지를 않더군요. 결국 기존 만트라 유통판은 구동을 포기했고 XP에서도 정상적으로 구동되는 후지쯔유통(혹은 주얼판)버전을 이용하니 구동이 가능했습니다.


2017년 현재 시스템에서 구동을 위해서 대부분 사람들은 후지쯔판과 만트라판 2가지를 모두 구한뒤에 후지쯔판 설치 후 만트라판 데이터로 교체해서 플레이를 하고 있습니다. 우분투도 Wine이 최신 시스템에 맞춰져서 구동이 되고 있으므로 이를 따를 수밖에는 없습니다. 따라서 후지쯔판과 만트라판 두가지를 모두 구하셔야 합니다.


https://www.tooli.co.kr/gametip/953476

여기 보시면 어떻게 구동해야하는지 써있습니다. WindowsXP이후 구동방법에 대해 나온 것이지만 2017년 현재 Wine에서의 구동도 이와 별 다르지 않습니다.


만트라판 데이터의 경우 따로 구하기 어렵진 않은데 만트라판만의 특징인 CD원음 BGM을 들으실려면 필수불가결하기 때문에 무조건 필수입니다! (SoundTeMP에서 편곡한 것으로 확실히 MIDI보다 낫습니다. 한 번 들으면 다시는 MIDI로는 듣기 싫으실 겁니다.)


그러므로 만트라판과 후지쯔판 두가지를 모두 구하셨다는 가정하에 우분투에서의 구동에대해 설명 드리도록 하지요.


기본적으로 Playonlinux를 이용합니다.

그리고 도구-Wine 버전 관리에 들어가서

x86용 2.x 버전의 Wine을 설치합니다. 기존에 설치된 Wine이 있다면 이를 이용하셔도 상관은 없습니다. (전 2.7버전을 사용했습니다.)


마음에 드는 Wine을 설치한다. 여기서는 2.0이후 버전을 이용할 것이다.



CDemu를 설치합니다. (http://moordev.tistory.com/167)이는 CD-DA음원을 듣기 위해서이며 MIDI음원이 워낙 구리기 때문에 MIDI는 추천하지 않습니다. (별도의 괜찮은 사운드폰트를 쓰신다면 상관은 없습니다.)


그리고 겸사겸사 CD인식도 시킬겸 설치하는 겁니다. CD-ROM이 없으면 또 실행이 안 되는데 그 CD-ROM검사도 통과하고 CD원음의 BGM도 들을겸 하는 것이지요.


그 다음 CDemu에서 가상드라이브를 2개이상 만들어야 합니다. 왜냐하면 하나는 후지쯔판 설치CD를 넣어야 하고 다른 하나는 만트라판 2번 CD(배경음악 재생용)를 넣어야 하거든요. 후지쯔설치CD도 CDemu로 하는 이유는 설치CD가 드라이브에 없으면 CD-DA도 지원이 되지를 않습니다. 이유는 전혀 모르겠지만 약간의 버그로 추측됩니다.


이런 식으로 드라이브 하나에는 후지쯔판 설치CD를 다른 하나는 만트라판 2번CD를 넣고 PlayonLinux에서 설치를 시작합니다.


Playonlinux의 설치버튼을 누르신다음 Install a non-listed program을 클릭합니다.

왼쪽 아래에 있다

Install a new Virtual Drive를 선택합니다.

그다음 적당한 이름(PM3 혹은 PrincessMaker3 정도)을 적고 넘어갑니다.


그 다음 위 스크린샷처럼 Use another version of Wine과 Wine 설정 두가지에 체크를 합니다.


이전에 추가한 2.x버전의 Wine을 선택해주시고 32bits Windows로 선택합니다. 64비트가 아닌 32비트인 이유는 Wine설정을 보시면 아실 겁니다.


그다음 Winemono나 WineGecko따위는 안 쓸거니까 다 취소하고 Wine설정 창이 나오면 다음과 같이 설정합니다.


윈도우버전은 Windows95 혹은 Windows98로 하고 그래픽탭에서 가상데스크탑 흉내내기에 체크를 합니다. 이유는 어이없게도 제목표시줄이 사라지는 버그가 있어서 그렇습니다. 창관리자가 꾸미지 않게해도 된다고 하는데 전체화면에 들어가면 그대로 얼어버리는 버그도 있어서 가상데스크탑 흉내를 사용하는 것이 좋습니다.


CDemu를 이용하셨다면 알아서 설치CD를 찾아서 실행을 합니다. 바로 다음을 누르면 이제 게임의 설치를 시작할 수 있습니다.



위의 스크린샷처럼 순서대로 하시되 시작메뉴등록과 프로그램등록/삭제에 체크를 풀어주시기 바랍니다. 만약 체크를 하시고 다음버튼을 누르시면 DDE어쩌고 하는 에러메시지를 보게 될겁니다.


설치가 끝난다음 CDMenu를 닫으시면

이렇게 해서 아이콘을 만듭니다.


이제 게임설치가 끝났으니 만트라판 데이터를 덮어야겠지요.

사실 만트라판 CD1번에서 추출해도 되지만 그냥 귀찮아서 따로 데이터를 만들었습니다.

https://drive.google.com/file/d/0B575ztEFv5-UMWR6RW15NTlsS3c/view?usp=sharing


위의 링크에서 받은 압축파일을 일단 풀어둡시다.


그다음 Playonlinux에서 PM3WIN아이콘을 클릭한 다음 구성버튼을 클릭합시다.


그 다음 기타설정탭에 들어가서 프로그램의 디렉토리를 열기를 클릭하면 PM3WIN.exe가 있는 폴더가 열립니다. 여기의 위에서 다운로드 받아 압축을 풀어놓은 만트라판 데이터를 덮어버리면 한국어 더빙이 들어가게 됩니다.


자 이제 실행을 해봅시다. CDemu에는 후지쯔판 설치CD와 만트라판 2번CD가 둘다 들어가있는 상황이어야 합니다.


처음 실행하면 16bit모드가 어쩌고하는데 지금 시스템에서 32비트구동은 아무런 문제가 없습니다. 그냥 무시하고 확인을 합니다.


그 다음 만트라 로고가 나오고(만트라 패치를 안 했을 경우에는 후지쯔로고가 나옵니다.) 타이틀화면이 나오게 됩니다. 아직까지는 아무런 음악이 들리지 않습니다.


위쪽의 환경설정 버튼을 누르시면 이제서야 CDDA설정을 할 수 있다는 것을 알게 됩니다.

여기서 BGM을 CDDA연주로 하시고 OK를 누르시면 됩니다. 효과음은 PCM을 하시거나 DirectSound를 하시거나 큰 차이는 없습니다. Wine입장에서는 결국 똑같이 처리하거든요. 이제 NEW GAME을 시작하시거나 기존 게임을 시작하시면 CD-DA음원으로 우분투에서 프린세스 메이커3를 하실 수 있습니다!



다만....CDemu가 굉장히 귀찮군요. 이건...어쩔 수 없을 것 같습니다. CD넣다뺐다 하는 것보단 나으니까 그냥 넘어갑시다. 배경음악이 한번만 재생되는 것은 그냥 Wine상 버그로 취급하면 될 것 같습니다. Windows7이후에도 같은 증상이 보이는데 이건 방법이 없는 것 같습니다. 그냥 한번만 듣고 넘어가야 할 듯 합니다.



어쨌건 오늘도 삽질 끝.

,

Daemon-Tools란 프로그램을 아시나요? 조금 더 말하면 Alcohol120% 혹은 Alcohol52%는요? CDSpace란 추억의 프로그램도 있지요?


 

 





이 프로그램들의 특징은 바로 CD이미지를 가상의 드라이브를 만들어 에뮬레이션해주는 프로그램입니다. 그 중에서 가장 큰 특징은 데이터를 단순히 보여주기만 하는 것이 아닌 디스크에 들어있는 각종 꼼수(보통은 디스크 복제방지장치입니다.)들도 함께 구현해주는 것입니다.


요즘에는 디스크에 복제방지장치를 해둘 필요가 없고(대부분 Steam등의 온라인 인증방식을 쓰기 때문) 기본적인 ISO표준 디스크이미지인 ISO정도는 Windows도 그냥 마운트해주는 기능이 있어서 볼 일이 별로 없는데요. ISO, MDF, CUE, IMG 등 알려진 이미지를 시스템상에서 마운트를 해주는 우리의 리눅스는 더더욱 이런 가상드라이브를 쓸 일이 없었습니다. 하지만 옛날 프로그램이라면 어떨까요?


옛날에는 이런 메시지를 많이 봤었다. 특히 친구끼리 디스크 바꾸면서 게임할때.



옛날에 만들어진 게임들은 주로 CD를 넣어야만 실행이 되는 방식을 사용했습니다. 덕분에 디스크가 없으면 실행이 안 되는 것으로 복제방지를 해두었고 이를 패치한 No-CD패치들이 돌아다녔습니다. 말이좋아 패치지 실은 일종의 크랙이었습니다. 혹은 배경음악을 음악CD형태로 만들어넣어서 CD를 넣지 않으면 배경음악이 나오지 않는 경우도 있었지요. (예: 프린세스 메이커3, 이스 시리즈, Pump it up! 가정용 1집~4집) 당시에는 이런 식으로 많이 만들어져 있어서 당시의 프로그램들을 굴리려고 하면 진짜 디스크를 넣거나 아니면 음악없이 그냥 돌리는 방식을 써야만 했습니다.



아무튼 CD를 넣어달라고 하는데 내가 CD를 넣어도 못 알아챈다. 어쩌라고


그렇다면 그냥 마운트 할 게 아니라 가상이미지를 통째로 CD-Rom드라이브에 넣은 것처럼 만들어야 합니다. 이 때 제일 편리한 프로그램이 바로 CDemu입니다.


http://cdemu.sourceforge.net/

https://launchpad.net/~cdemu/+archive/ubuntu/ppa


사실 CDemu는 2003년에 cue, bin파일로 대표되는 디스크이미지를 Mplayer에서 재생하기 위해 만들어진 프로젝트입니다. 이후 같은 방식으로 가상CD방식으로 에뮬레이션하게 됩니다. 즉 가상 장치를 만들고 여기에 이미지를 넣는 기존의 Daemon-Tools와 똑같은 방식으로 말입니다.


가상 장치에 넣는 방식이기 때문에 자동 마운트 기능이 없다면 일반 CD-ROM을 읽을 때처럼 마운트를 따로 해줘야 하지만 우분투는 자동마운트가 되기 때문에 기존의 노틸러스에 있는 마운트 기능을 쓰는 것하고 차이가 없습니다. 하지만 AudioCD나 CDExtra같은 이미지라면 이야기가 조금 다릅니다. AudioCD이미지를 노틸러스에서 마운트하면 아무것도 마운트가 되지 않지만 CDemu를 통해서 에뮬레이션 하면 AudioCD를 인식하고 AudioCD를 넣었을 때와 동일한 기능을 사용할 수 있게 됩니다.


CDemu로 이미지를 마운트해야 이 메시지를 볼 수 있다. 아니면 그냥 데이터 마운트일뿐


서론은 이제 그만두고 CDemu를 설치하고 사용하는 방법에 대해 설명하겠습니다. 재미있게도 Daemon-Tools와 사용방법이 거의 비슷합니다.


CDemu는 다음 명령어로 PPA를 등록해서 설치 할 수 있습니다. 다른 배포판을 사용하신다면 위에 홈페이지 주소를 적어놓았으니 그곳에서 각 배포판에 맞는 패키지를 다운로드 받거나 컴파일하시면 됩니다.


sudo add-apt-repository ppa:cdemu/ppa
sudo apt-get update
sudo apt-get insall gcdemu


이렇게 하면 CDemu의 GUI버전인 gcdemu가 설치됩니다.


그럼 gCDemu를 실행해 봅시다. 당연히 메뉴에 있을 테니 잘 실행해 주세요. 그러면...



아무 반응이 없습니다.  딱 한군데 빼고요. 알림영역을 보시면 아이콘이 하나 생긴것을 알 수 있습니다. Daemon-Tools도 이런식으로 만들어져 있지요. 설치하고 보면 알림영역에 아이콘 하나만 떠있고 처음 쓰는 사람은 멘붕을 하지요.


이렇게 생긴 아이콘을 찾아보자

여기에 마우스 오른쪽 버튼을 누르면 바로 이것이 핵심입니다. 여기에 #Device 00 :Empty라 되어있을 텐데 가상장치00번이 만들어져 있고 비어있다는 의미입니다. 역으로 말하면 가상장치를 여러개 만들 수 도 있다는 의미지요. (바로 아래에 New device가 있지요.)


Daemon-Tools와 마찬가지로 이 메뉴에서 모든 것을 해결한다.



#device 00:Empty를 눌러봅시다.


여기서 Load버튼을 누르고 CD이미지 파일을 선택하시면 됩니다. 그럼 노틸러스가 자동으로 실행되면서 CD가 넣어졌음을 인식할 것이고 이를 읽을 수 있을 것입니다. 무엇보다 AudioCD라면 AudioCD임을 알아챌 것이고요. 만약 드라이브 명이 필요하다면 위 스크린샷에서 처럼 /dev/srX 형태로 되어있으니 이것을 선택하면 됩니다.


참 쉽죠?


만약 Daemom-Tools가 그리우시다면 이 쪽도 써보시는 것은 어떨까요? 편리하다는 것은 좋은 거랍니다.


참고로 CDemu가 지원하는 이미지는 cue와 bin, mds와 mdf, iso, img 등이 있습니다. 그냥 흔히 쓰이는 디스크 이미지파일을 생각하시면 됩니다. (CDSpace에서 쓰는 lcd는 안 됩니다..)


=======2017. 6. 15========


CDEmu의 GUI인 gCDEmu의 인터페이스를 한글화 했습니다. 물론 i18n을 지원하기 때문에 간단하게 작업했고 몇몇 오타나 오역이 있을 수 있습니다.


gcdemu.mo.zip

위의 파일의 압축을 풀고 gcdemu.mo 파일을 관리자권한으로

/usr/share/locale/ko/LC_MESSAGES

에 넣어주시면 이후 시스템 재시작후 gCDEmu의 인터페이스가 한글화 되어 나오게 될 것입니다.


번역 파일인 po파일은 CDEmu프로젝트에 메일을 넣은 상태입니다. 아직 답변은 없지만 확인 되는대로 답변이 올 것입니다.

ko.po



,

라즈베리파이나 오래된 PC를 에뮬레이터 머신으로 만들어줄 수 있는 Lakka란 프로젝트가 있습니다. RetroArch란 온갖 게임콘솔과 아케이드를 에뮬레이터 해주는 프로그램을 이용한 것인데요. 다른 것은 모두 배제하고 최소한의 OS(Libreelec 기반)와 RetroArch만 올려서 만든 배포판입니다.



http://www.lakka.tv/


2017년 현재 RetroArch는 상당한 수준의 인터페이스와 엄청난 지원 범위를 자랑하고 있어서 오래된 PC나 저렴한 라즈베리파이에 게임패드를 연결한 다음 Lakka만 올려서 게임기로 만드는 경우가 늘고 있습니다.




그런데말입니다.

RetroArch의 PSP코어(통칭 lr-ppsspp라고 합니다.)가 옵션이 상당히 부실합니다. PPSSPP의 소스코드를 이용해서 에뮬레이팅은 상당수준이지만 PPSSPP자체가 아직 완전하지 않아서 게임마다 설정을 다르게 줘야하고 이런 저런 삽질을 동원해야하는데 RetroArch는 다른 콘솔머신도 지원해야하다보니 크게 신경을 못 쓰는 것이 현실입니다.


즉, 통합 에뮬레이터로는 훌륭하지만 특정 기기의 성능은 그리 좋지 못하다는 의미지요. 특히 PSP의 명작이라 할 수 있는 DJMAX시리즈의 경우에는 링크디스크나 IO문제로 PPSSPP의 많은 설정과 기능을 요구합니다. 하지만 RetroArch의 PSP코어에는 이런 기능이 없습니다. 그래서 RetroArch의 PSP게임을 굴리면 완벽하게 돌아가지가 않지요. 게다가 RetroArch는 Adhoc을 이용한 온라인 기능도 부실합니다.


그래서 생각한것이 아에 RetroArch같은 통합에뮬레이터 시스템이 아닌 PPSSPP만 올려서 PSP 전용콘솔머신을 하나 만들자!라고 생각했습니다. 그래서 삽질을 시작했습니다. PSP게임외에 다른 콘솔은 Lakka에서도 아무 문제없이 굴러가니까 그 쪽은 그냥 Lakka를 쓰면 될테니까요.


PPSSPP 그 자체도 인터페이스는 상당히 편리하게 되어있고 패드만으로도 모든 옵션을 선택할 수 있게 잘 만들어져 있습니다.


다른 에뮬레이터와 다르게 상당히 예쁘게 잘 만들어져 있다. 디자인이 현대적이라고 해야할까.


그래서 이참에 백라이트 나간 노트북을 부셔서(!) 콘솔머신을 하나 만들기로 했습니다.

그래서 다음과 같은 계획을 하나 짰습니다.



1. 하드웨어는 백라이트 나간 오래된 노트북으로 하고 이것을 TV에 연결해서 쓸 수 있도록 한다.


2. 게임은 PPSSPP만을 올려서 PSP게임만 지원하게 한다.


3. 컨트롤러는 오로지 게임패드로 (다행히 PPSSPP가 게임패드만으로 굴릴 수 있다.)


4. FTP서버를 하나 만들어서 게임을 FTP로 전송할 수 있게 한다. (SMB도 생각했지만 FTP가 더 안정적이었습니다.


5. 라이브모드만 지원하되 Persistent모드로 만들어서 넣자. (설정 저장을 위해)


6. 어차피 나만 쓸 거 보안은 신경 끄자.



여기서 제일 중요하게 여긴것은 1번과 6번입니다. 사실 보안까지 신경쓰기 시작하면 취미로 하는 것이 일거리가 되기 때문에 처음부터 신경을 껐습니다.


세로로 세우기 위해서 다이소 도마꽂이에 꽂았는데 딱 맞는다. 도마꽂이가 랩톱 세우는데 최고였다.


그렇게 오늘 저의 게임기가 되어주실 노트북은 인텔 코어2듀오 콘로 2.4GHz 메모리 2GB 저장용량 250GB의 제품입니다. GPU는 자그마치 인텔 내장 그래픽. 백라이트가 나가서 액정을 그냥 떼버렸고 안테나는 외부에 노출 시켰습니다.


어차피 TV뒤쪽 공간에 밀어넣을 예정이니 모양은 상관없습니다.


그리고 상세한 제작 과정은 다음과 같습니다.


1. OS는 Customize(https://github.com/kamilion/customizer) 로 우분투 Mini-remix(http://www.ubuntu-mini-remix.org/)를 기반으로 한다.


1.1 Customizer를 리눅스 PC에 설치한다. (따로 설명하지 않겠습니다.)

1.2 Customizer-gui에서 ISO선택을 누르고 우분투 Mini-remix이미지를 선택한다.


1.3 소스 수정버튼을 누르고 한국서버를 선택한 다음 multiverse와 universe를 추가한다.


1.4 세팅 탭에서 위치(?)를 ko_KR.UTF8을 선택해서 한국어기반을 갖출 수 있도록 한다.

1.5 나머지는 터미널 버튼을 누른다음 명령으로 때운다. (sudo apt-get update 등등)


2. Customizer에서의 터미널 창에서 최대한 다른 것은 배제해야 하므로 다음 명령으로 기반만 갖춘다.


sudo apt-get install xorg alsa alsa-utils mesa-utils jstest-gtk fonts-nanum

sudo apt-get install --no-install-recommeds pulseaudio pulseaudio-utils slim wicd networkmanager openbox


이렇게 함으로서

소리가 나고(pulseaudio, alsa)

그래픽가속을 하고(xorg mesa)

네트워크에 접속을하며(wicd networkmanager)

최소한의 GUI세션에 접속을 할 수 있게 됩니다.(slim openbox)


물론 기반만 갖추었고 설정은 하나~~~도 안 했기 때문에 건드릴 것이 많지요.


3. PPSSPP는 그냥 PPA를 등록한다음 설치

sudo add-apt-repository ppa:ppsspp/stable
sudo apt-get update

sudo apt-get install ppsspp-qt


add-apt-repository에서 에러가 날 텐데요. PPA등록전에

sudo apt-get install python-software-properties software-properties-common


이 명령을 먼저 내려서 PPA등록용 스크립트들을 설치하도록 합시다. 왠지 쓸데없는 것이 설치된 듯하지만 귀찮은 것보단 이게 더 낫습니다.


4. 게임 이미지 전송용 FTP서버를 설치한다. 어떤 것을 설치해도 상관은 없지만 vsFTPD를 설치하겠습니다.


sudo apt-get install vsftpd


4.1 vsFTPd 설정

 sudo nano /etc/vsftpd.conf


다른 것은 기본값 혹은 마음대로 해도 되는데


write_enable=YES


이 옵션 만큼은 무조건 이렇게 해놓는다.


4.2 자신 있으면 SAMBA를 설치해도 되는데 나는 귀찮으니 PASS


5. slim을 설정해서 자동 로그온이 되도록 하자. slim은 데스크톱 관리자로 우분투의 lightdm보다 더 가볍고 세션 관리가 쉽기 때문에 선택


sudo nano /etc/slim.conf


제일 아래줄에 이렇게 적는다.

auto_login    yes
default_user  ubuntu


여기서 defulat_user는 Customizer에서 설정한 라이브유저 이름이다.(기본이 ubuntu라 그냥 여기서도 ubuntu)


6. openbox의 autostart를 만들어서 PPSSPP와 네트워크 관리자 등이 자동으로 실행되게 만들자.


sudo nano /etc/skel/.config/openbox/autostart


여기에 쉘스크립트 형태로 만들면 로그온 할때마다 자동으로 스크립트 형태로 실행된다.

sudo usermod -a -G audio $USER
sudo usermod -a -G video $USER
wicd-gtk &
start-pulse-audio-x11 &
xterm &
ppsspp --fullscreen
sudo shutdown -h now


다른 프로그램은 뒤에 &이 붙어있는데 (wicd-gtk는 무선랜 접속을 위함 만약 무선랜이 필요없으면 지워도 됨) ppsspp --fullscreen 뒤엔 없는 이유는 그 아래 명령어가 ppsspp가 종료될 때까지 실행되지 않도록 하기 위함이다.


보면 알겠지만 sudo shutdown -h now는 시스템 종료 명령어이다. 즉, PPSSPP의 실행이 끝나면 자동으로 시스템이 꺼진다는 것! 물론 xterm이나 wicd-gtk가 같이 실행되고 있으므로 Alt-Tab키를 눌러서 빠져 나올 수는 있다. 하지만 PPSSPP가 꺼지면 시스템 종료로 이어진다는 것!


7. 이제 라이브 ISO파일을 만들자!

터미널에 exit를 쳐서 빠져나오고

Customizer에서 ISO다시빌드 버튼을 누르면 시간이 지난뒤에 /home 폴더에 Ubuntu~~.iso파일이 하나 만들어졌을 것이다. 일단 궁금하니 VirtualBox나 Qemu같은 가상머신으로 테스트해보자. 부팅후에 PPSSPP가 실행되고 PPSSPP를 끄면 시스템이 꺼질 것이다. 이것이 잘 만들어졌다면 큰 그림은 완성


8. 이제 디스크를 준비합니다.

머신에 넣을 HDD를 USB to HDD기기로 USB장치로 인식되게 하셔야 합니다. (즉, 노트북에서 HDD를 꺼낸다음 연결합니다.) USB to SATA장비는 2만원에서 4만원 정도 합니다.


대충 이런형태의 물건이다. 저기 있는 SATA포트에 HDD를 연결하고 전원을 넣은다음 USB를 연결하면 PC가 외장하드로 인식한다.

Gparted를 실행!


보통은 /dev/sdb 혹은 제일 뒤쪽에 있는 것이 USB-HDD이니 해당 디스크를 선택한다.


그리고 파티션을 3개로 쪼개는데 포맷은 모두 ext4로 한다. 첫번째 파티션을 호환성을 위해 FAT32로 해도 상관은 없지만 ext4가 안정성은 더 높다.


예시로 든 것이므로 굳이 똑같이 따라할 필요는 없다. 다만 home-rw 파티션을 넉넉히 해주는 것이 중요하다. 게임 이미지가 저장될 공간이기 때문.


이 때 제일 처음 파티션은 ISO크기보다 약간 큰 정도면 되고(즉, ISO내의 내용물이 들어갈 자리) 두번째 파티션은 레이블을 casper-rw로 하고 40GB이상으로 잡는다. 나머지 파티션은 레이블을 home-rw로 하고 모든 용량을 투입하도록 하자.


2017. 5. 29 추가

파티션을 나눌 때 약 메모리 용량의 2배 크기 정도의 스왑파티션을 만들어두자. 가끔 메모리 부족으로 PPSSPP가 튕기는 경우가 있는데 PPSSPP가 종료되면 autostart 스크립트가 작동하면서 시스템이 종료되어버린다. 스왑을 잡아두면 이런 경우가 현저히 줄어들게 된다. 즉, 일종의 보험인 셈.


9. Unetbootin설치 및 실행


sudo apt-get install unetbootin

위 명령으로 unetbootin을 설치하고 실행하자. 아직 USB-HDD는 연결을 끊었다가 다시 연결하도록 하자.


위 스크린샷 처럼 Diskimage 라디오 버튼을 누르고 오른쪽의 ...버튼을 누른다음 아까 만든 ISO를 선택한다. 아래의 Drive는 제일 오른쪽 숫자가 1이 되는 장치를 선택한다.

(/dev/sdb1 혹은 /dev/sdc1 같이)


왜냐하면 아까 편집한 파티션의 제일 처음(아무런 레이블도 안 붙였던 ISO크기 정도의 파티션)이 바로 시스템 파티션이기 때문


그리고 Space used to preserve files across reboots라고 있는데 이것을 1MB라고 해 놓는다. 이 옵션이 바로 Persistent Live옵션의 필수다.


10. 아직 끝나지 않았다! 부트 옵션 수정!!!!!


USB-HDD내용물을 보면 1번 파티션에 ISO의 내용물이 거의 그대로 들어갔음을 알 수 있을 것이다. 여기서 몇가지 작업을 더 하도록 하자.


syslinux.cfg 파일을 관리자 권한으로 열자.


제일 위에 Timeout 100 이라고 쓰인 부분이 있다. 확 줄이자. 100초는 너무 길다. 한 5초?


그리고 부트옵션 중 Default 아래에

append  file=/cdrom/preseed/ubuntu.seed boot=casper

요렇게 써있는 부분이 있다.

여기에 몇가지 내용을 더 붙이자.


append  file=/cdrom/preseed/ubuntu.seed boot=casper lang=ko_KR keymap=kr net.ifnames=0 biosdevname=0

이렇게 해주면 무조건 한국어로케일로 부팅하게 된다. 그리고 무선랜의 인터페이스 이름이 wlan0로 만들어져서 다른 시스템에서도 wicd가 똑같이 작동 할 수 있게 된다.


그리고 casper-rw란 1MB짜리 파일이 보일 텐데 이건 그냥 삭제한다.


권한이 어쩌고 하면그냥 관리자 권한으로 밀어버리면 된다.


11. HDD를 다시 PC에 넣고 부팅


가상머신에서처럼 똑같이 작동한다면 시스템 구축에 성공한것이다. 이제 게임생활을 시작하자...가 아니라 네트워크 접속을 해서 게임 이미지를 밀어넣어야 할 시간이다.




12. 키보드를 이용해서 Alt-Tab키를 눌러 wicd-gtk를 띄우자. 일단 네트워크에 접속을 해야 뭘 밀어넣던지 말던지 할 것이 아닌가. (유선랜의 경우에는 별다른 문제없이 그냥 바로 접속 될것이다.)


네트워크에 접속이 완료되면 아래에 Wicd 창 아래에 IP주소가 뜬다. 이것을 가지고 다른 PC를 이용해서 FTP로 밀어넣으면 된다.


FTP프로그램은 파일질라가 제일 좋은데 다른 클라이언트들이 접속이 끊어지면 파일 전송도 같이 끊어버리는 반면 파일질라는 재접속을 해서라도 파일 전송을 끝내주기 때문에 굉장히 안정적입니다.


호스트에 게임머신의 IP를 넣고 사용자명에 아까 라이브 유저(기본값: ubuntu)를 적고 연결을 하면 그냥 연결이 됩니다. 왼쪽 로컬 사이트에서 PSP게임 이미지를 찾은 다음 그냥 업로드를 하면 끝입니다. 업로드 되는 곳은 /home/ubuntu(라이브유저이름)입니다.


13. 이제 실행해 볼까?


아쉽지만 소리 문제가 있을 수 있습니다. 난 HDMI를 통해 소리가 나오길 원했는데 엉뚱하게 노트북 스피커로 나오면(...)


Alt-Tab을 눌러서 xterm창을 띄웁시다.

pacmd set-card-profile 0 output:hdmi-stereo


이렇게 치면 HDMI로 소리가 나오게 될 겁니다. 우분투는 HDMI연결 여부를 확인하고 알아서 스위칭을 해주는데 이쪽은 그런 기능따윈 만들어 넣지도 않았으니 그냥 수동으로 해주는 것입니다.


게임패드를 USB포트에 연결하면 알아서 연결이 될 것이고 PPSSPP상에서 설정을 약간 하면 이후로는 키보드가 필요없을 것입니다. 가끔 게임 이미지 밀어넣을때정도?


이제 마음껏 게임을 해볼까요??후후...


개인적으로 XBOX패드보다는 PS패드가 이 시스템에는 더 잘 어울린다고 생각합니다.

PSP말고 다른 콘솔도 하고 싶으시다고요? 그럼 그냥 LAKKA쓰세요.

,

https://packages.ubuntu.com/search?keywords=ukui&searchon=names&suite=zesty§ion=all


우분투 17.04부터는 따로 우분투 기린을 쓰지 않아도 우분투 기린의 UI인 UKUI를 사용할 수 있습니다.


sudo apt-get install ukui-desktop-environment


이렇게만 해도 설치가 완료되네요.


문제는 한국어인데 ukui-control-center와 ukui-menu 이 둘만 한국어화하면 아무런 문제가 없습니다.


ukui-korean-mo.zip


위의 압축파일을


/usr/share/locale/ko/LC_MESSAGES


위 경로에 풀어주시면 됩니다. 관리자 권한이 있어야 넣을 수 있습니다.


터미널로 하시려면


unzip -x ukui-korean-mo.zip

sudo cp ukui-control-center.mo /usr/share/locale/ko/LC_MESSAGES

sudo cp ukui-menu.mo /usr/share/locale/ko/LC_MESSAGES


이렇게 해주시면 됩니다.

귀찮다고요? 그럼 관리자 권한으로 파일 매니저를 여시면 됩니다.


Alt+F2를 누르시고


gksu nautilus

(우분투, 우분투 그놈, 리눅스 민트 시나몬 등)

혹은


gksu caja

(우분투 마테, 리눅스 민트 마테, 우분투 기린 등)

혹은


gksu pcmanfm

(루분투, LXLE 등)

혹은


gksu thunar

(주분투, 리눅스 민트 xfce 등)

혹은


kdesudo dolphin

(쿠분투 등)

 

이 들중에서 자신의 배포판에 맞는 것을 쓰시면 됩니다.


그리고 압축파일안의 내용물을

/usr/share/locale/ko/LC_MESSAGES

여기에 퐁당!


그리고 로그아웃했다가 로그온 하시면 한국어로 나오는 것을 볼 수 있을 겁니다.




2017. 5. 25


UKUI 소스트리에 한국어 번역파일이 Merge되었습니다. UKUI의 다음버전에서는 한국어지원이 될 것입니다. 아마도 17.10부터 지원 될 것이라 예상되지만 지금 당장 써보고 싶으신 분들은 위에 나온대로 하시면 됩니다.

,




한국어화 완료 시계부분은 아직 하지만 쓰는데 딱히 지장은 없다.


UKUI의 전부가 한글화 된 것은 아닙니다. 시작 메뉴 및 컨트롤 센터는 번역이 안 된 관계로 기본언어가 영어이며 해당부분 한국어화를 위해서는 해당 부분의 수정이 필요합니다.제가 수정한 부분은 한국 국가설정 부분과 업데이트 서버 설정 등입니다. 그리고 기린메뉴와 기린 컨트롤 센터 한글화가 완료되었습니다.


(하지만 대부분은 한국어화가 되어있습니다.)


기존 Ubuntu Kylin과 다른 점


1. 기본 로케일을 한국어로 바꿨습니다. 그냥 부팅하면 한국어로 부팅됩니다.


2. UKUI에 추가된 프로그램을 제외한 나머지(Firefox, MATE프로그램 등)는 한국어언어팩을 설치했습니다.


3. 업데이트서버 우분투 한국업데이트 서버로 설정

공식 업데이트 서버인 카이스트서버를 사용합니다.


4. Youker-Assistance, 중국어 병음 입력기 삭제

한국인에게는 불필요한 패키지이기 때문에 삭제했습니다.


5. Kylin Software Center 삭제 및 기존 우분투 소프트웨어 센터로 대체

Kylin Software Center는 중국어로 만들어진 소프트웨어 센터이며 동작이 무겁기 때문에 우분투 소프트웨어 센터로 바꿨습니다.


6. WPS-Office 삭제 및 LibreOffice 설치

개인적으로 WPS-Office보다 LibreOffice가 더 직관적이고 좋다고 생각하여 바꿨습니다.


7. Gdebi설치

우분투 소프트웨어 센터만으로는 부족한 점이 많아서 DEB설치용으로 GDebi를 설치했습니다. 리눅스 민트에서는 해당 프로그램을 사용하고 있습니다.


8. 한글폰트 설치

서울남산 장체, 서울한강 장체, 나눔폰트를 설치했습니다.


9. Arkzip설치 및 File-roller설치

ALZ와 EGG 및 한글깨짐 현상을 수정한 압축프로그램인 Arkzip을 설치했습니다. 압축파일을 Caja에서 Arkzip으로 실행하면 알아서 풀립니다. 기존에 설치된 잉그람파는 File-roller에 비해 불편한점이 있어서 교체했습니다.


10. 모양메뉴 부활

Kylin Control Center보다 더 많은 부분을 수정할 수 있는 모양 메뉴를 보이게 했습니다. 시작메뉴에서 모양프로그램을 클릭하시면 각종 GTK테마 설치 및 현재 인터페이스의 수정이 가능합니다.


이외에도 기억이 안 날수도 있는데 몇가지를 더 했을 수도 있습니다.


AMD64(64비트)전용이며 i386(32비트)는 따로 제공하지 않습니다. 작업하는 것이 생각보다 오래걸렸거든요. 17.04는 시간되면 작업하겠습니다. 16.04는 2021년까지 지원이 약속된 LTS버전입니다.


2017년 5월 22일 메뉴 및 제어센터의 한글화 수정 완료되었습니다.


https://drive.google.com/file/d/0B575ztEFv5-URTU0ZmFBUW9OWjQ/view?usp=sharing


MD5 a919559ecf645068c7f44918c43b6a8b

SHA1 425840cf3a2b6238bad25374d31b368a9fb5df06

SHA256 6da143bfe28b1cf0137096bddca1d999dafc5da7051a9682197ee26815aa7c4c



해당 iso파일을 USB메모리에 리눅스에서는 dd를 이용하시거나 Windows의 경우 rufus(https://rufus.akeo.ie) 를 이용하셔서 부팅가능한 USB메모리를 만드시면됩니다.


P.S 기린프로젝트 팀에서 어떻게 작업을 한건지 알 수는 없지만 isolinux 폴더내에 lang이란 파일을 만들고 파일안에 ko라 적으면 한국어화면이 나와야 정상입니다.

예전에 coBuntu란 한국형 우분투 배포판이 이런식으로 작업을 했었지요.

그런데 우분투 기린에 쓰인 isolinux는 어떤 작업을 해도 중국어로 나옵니다. 그래서 혹시나해서 원본 우분투 16.04의 iso파일을 마운트한다음 isolinux내의 c32파일을 전부 교체했더니 아무 문제없이 한국어페이지로 넘어옵니다. 덕분에 이틀동안 고생했네요.



제가 사용한 한국어화 파일은 아래링크를 걸었습니다. https://drive.google.com/open?id=0B575ztEFv5-UUlBsVmN1eXI5QUU


안에 있는 po파일은 수정후에


msgfmt kylin-menu.po -o kylin-menu.mo

msgfmt kylin-control-center.po -o kylin-control-center.mo


명령을 통해 mo로 컴파일 한 후

/usr/share/locale/ko/LC_MESSAGE에 넣어주시면 수정된 번역으로 바뀌게 됩니다. 압축파일에 들어있는 다른 파일은 제가 임의로 수정한 파일입니다. mate-menu의 glade 파일 등이 중국어가 하드코딩 되어있어서 해당 부분을 수정했습니다.



=====================================================


아래는 이전버전입니다. 2015 5월 21일 버전


https://drive.google.com/file/d/0B575ztEFv5-UV1UwSG1QSmlMUXM/view?usp=sharing


md5sum cd093364db9e98108dc910f1546b3950

sha1 9e3b5ef6910689e9c7f56a9c632d42791fa91e8d

sha256 a4bc9e5326b69d39f3a9ccda1fdc8db546fbba95a9c4e7c61df730508a3b1389

,