리눅스를 쓴다면 가장 흔하게 보게 될 Bash의 모습. 그 위상은 Windows의 cmd와 비슷하다.


리눅스를 쓰신다면 명령 창, 터미널에 익숙해져야 한다는 것을 많이 들어보셨을 겁니다. 과거의 DOS를 쓰셨던 분들이라면 이러한 명령에 익숙하겠지만 GUI로 컴퓨터를 처음 쓰셨던 분들은 막막하기만 하지요. 하지만 Power User라면 Windows든 Unix든 이러한 CLI에 익숙해져야 난데없는 일이 일어났을 때 그나마 복구 할 수 있는 여력이 생깁니다.


그 중 쉘(Shell)이라는 표현을 들어 보셨을텐데요. CLI나 GUI나 이 쉘이 곧 UI의 역할을 해줍니다. Windows는 GUI 쉘로 Explorer를 Linux/Unix는 Gnome, KDE, Xfce, LXDE 등등...이 있는 셈이고(wayland용은 별개로 합시다.) CLI용 쉘로는 Windows는 cmd, Linux는 bash(가장 많이 쓰임), tsh, zsh 등이 있습니다. 흔히 bash가 일반적입니다.


과거의 Dos는 command.com 이 커널이자 쉘의 역할을 해 주었습니다. Linux/Unix/OSX는 보통 Bash를 CLI로 사용하고 있고 bash를 기본으로 스크립트를 사용합니다. bash가 나쁘지는 않지만 zsh가 더 편리한 기능이 더 많고 알아보기가 편합니다.


대표적인 것이 Tab 키의 기능인데 우분투는 각종 스크립트로 bash에 이와 비슷한 기능을 넣었지만 zsh에 비할 바는 못 됩니다.




bash의 경우 Tab을 누르면 현재 파일 리스트 중에서 찾아주지만(심지어 두 번 눌러야 하지요)zsh는 명령어 중에서 해당 명령어로 시작되는 것들을 바로 리스트로 뽑아내 줍니다.


그 외에도 vi와 vim의 관계처럼 약간의 색상을 통한 강조 비슷한 효과도 부여합니다.


그러면 한번 zsh를 사용해봅시다.


그러면 zsh를 설치해봐야겠지요?

sudo apt-get install zsh


그러면 아래와 같은 것이 나오는데 2번을 추천하므로 (추천하는 .zshrc 파일을 만들어서 관리 및 설정) 2번을 누르도록 합시다.



솔직히 설정하기 귀찮으니까 2번을 누르자. 0번을 누르면 뭘 잔뜩 물어본다고...


그리고 임시로 zsh 명령을 쳐서 zsh로 


chsh -s `which zsh`


chsh는 쉘 선택 명령어이고 which zsh는 zsh가 설치된 위치, /usr/bin/zsh를 말합니다. 이제 로그아웃 했다가 다시 로그온 하면 터미널의 쉘이 zsh로 변했을 겁니다.


하지만 oh-my-zsh!를 사용하면 이 강력한 zsh를 더 편리하게 만들어 줍니다. Firefox의 확장같이 zsh를 확장해주는 것이지요.

우선 curl을 설치하고 oh-my-zsh를 설치하는 스크립트를 사용하면 됩니다.


sudo apt-get install curl

curl -L https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh | sh


위 명령어를 사용하면 아래와 같이 나오는데요. 이제 zsh의 확장인 Oh my zsh!도 설치되었습니다. 여기서 몇 가지 기능을 사용하면 되는데요. 일단 쉘의 확장이기 때문에 로그아웃 했다가 다시 로그온 해주셔야 합니다.



Oh my zsh가 설치되었습니다! 짝짝짝


대표적인 것이 테마 기능인데요. 커맨드창에 무슨 테마냐 하시는 분들은

https://github.com/robbyrussell/oh-my-zsh/wiki/Themes


여기에서 나름 필요한 것이 있다는 것을 알게 될 겁니다. 시간이 뜨는 것은 유용할 것 같습니다.


일단 디폴트 테마는 robbyrusshell입니다.



굉장히 심플합니다. 하지만 저는 이게 별로 마음에 안 들더군요. 그래서 찾던 중에 agnosterzak이란 테마가 마음에 들어서 이를 설치했습니다.


http://raw.github.com/zakaziko99/agnosterzak-ohmyzsh-theme/master/agnosterzak.zsh-theme


위의 파일을 다운로드 받으신 다음에 ~/.oh-my-zsh/themes/ 에 복사해 넣으세요. 아니면


cd ~/.oh-my-zsh/themes/

wget http://raw.github.com/zakaziko99/agnosterzak-ohmyzsh-theme/master/agnosterzak.zsh-theme


위 명령어를 쓰시면 일단 테마가 추가됩니다. 그리고 ~/.zshrc 파일을 텍스트 에디터로 열고


ZSH_THEME="agnosterzak"


이렇게 바꿔주시면 그냥 터미널에서 배터리 잔량이나 시간 확인이 가능한 무시무시한 능력을 얻게 됩니다. 일단 스크린샷을 보시면 알게 될 겁니다.



...실수로 내 개인파일 리스트가 떠 있어서 지웠다.....

폰트 문제로 약간 문제가 있군요. 하지만 CLI 치고는 나름 예쁩니다. 저 깨지는 부분만 없애도 예쁠 것 같은데 어떻게 없애는 지는 모르겠네요.


~/.oh-my-zsh/themes/agnosterzak.zsh-theme


파일을 수정하면 될 듯한데 일단

SEGMENT_SEPARATOR=$'\ue0b0' # 


여기에서 e0b0을 25b6으로 수정해보겠습니다.


 기호를 ▶ 로 바꾸는 겁니다. 나름 괜찮겠지요.


..그럭저럭...그래도 이 정도면 뭐..


그럭저럭 볼 만은 하네요. 일단 여기서 그만둬야 할 것 같습니다. 저 날짜 순서도 마음에 안드는데 더 건드렸다가는 끝이 없을 것 같습니다. 일단 298번째 줄


  prompt_segment blue white "$fg_bold[white]%D{%a %e %b - %H:%M}$fg_no_bold[white]"


여기를 이렇게 바꾸면 될 것 같은데...


  prompt_segment blue white "$fg_bold[white]%D{%b %e %a - %H:%M}$fg_no_bold[white]"


이렇게는 한도 끝도 없을 것 같네요. 우선 저의 잠을 위해...


이상 zsh와 oh-my-zsh였습니다.

,

아시다시피 리눅스는 굴림체를 쓰지 않습니다. 당연하게도 굴림체는 Microsoft의 물건이기 때문입니다. 하지만 굴림체가 워낙에 흔하기 때문에 쓸데없이 굴림체를 사용하는 사람들이 적지 않습니다. 여기서 끝나면 다행인데 한글 폰트는 Bold폰트를 따로 가지고 있지 않아서 겹쳐서 굵은 것처럼 표현하는 일명 FakeBold 기술을 사용하는데 FakeBold의 기능이 Windows의 것과 FreeType(리눅스와 기타 등등의 OS에서 사용하는 라이브러리)의 것이 좀 많이 다릅니다.


덕분에 다음과 같은 일이 일어나곤 합니다.


이렇게 보면 모르겠지만 실제로 보면 참 글씨가 더럽다.


그림에서 잘은 안 보이시겠지만 네이버 메인화면에서 Bold 처리된 글씨의 가독성이 현저히 떨어집니다. 사실 네이버만 그런 것이 아니라 다른 사이트들이 다 이 모양입니다. 아무래도 백묵 폰트처럼 힌팅이 없는 폰트로 설정이 된 것 같은데 이를 쉽게 해결하는 방법을 이야기 해 보겠습니다.


우선 미리 이야기 하자면 우리가 원하는 것은 아래와 같은 화면입니다.


그나마 깔끔해진 외관. 나눔고딕 특유의 힌팅이 적용되어 미려해진 느낌이다


위의 이미지와 비교해보시면 글씨의 가독성이 좋아졌음을 알 수 있습니다. 사실 이건 아주 간단한 확장 하나로 처리하는 겁니다. 이름은 직설적으로 Font Changer 입니다.



여기까지 알려줬는데도 못 찾는 사람들이 있다. 그럴 때는 그림을 보도록!



크롬 웹스토어 http://chrome.google.com/webstore/ 에서 "Font Changer"라고 검색만 해도 쉽게 찾을 수 있습니다. 구글의 웹 폰트를 이용하지만 원하는 폰트를 추가가 가능합니다. 물론 너무 무거운 폰트는 사용 불가능합니다. 저는 가볍고 Bold폰트가 이미 들어가 있어서 FakeBold에 따른 문제가 전혀 없는 나눔 고딕을 사용하기로 했습니다. 나눔 고딕은 우분투에서 /usr/share/fonts/truetype/nanum/ 여기에 있으니 여기서 복사해서 미리 빼놓으시는 것이 편합니다. (단순히 복사해서 두는 것이기 떄문에 관리자 권한 없어도 됩니다.)



나눔고딕이 요기잉네?


설치 이후에 주소 줄 옆에 FC라는 아이콘이 추가 되는데 이를 클릭하면 폰트를 선택할 수 있게 됩니다.



 

일단 모든 사이트에서 같은 폰트로 뜨게 하는 것이 좋으니 Use Global Settings로 맞춰 놓고 Edit Custom Fonts를 누릅시다.




그 다음 나오는 페이지에서 파일 선택을 눌러 아까 빼 놓았던 나눔고딕.TTF 파일을 선택합시다. 그리고 Save Font를 클릭해주시면 ABeeZee 폰트 대신 나눔고딕을 선택할 수 있게 됩니다. 같은 방법으로 다른 폰트를 쓸 수 있는데 크기가 너무 큰 폰트는 인터넷 서핑을 힘들게 하기 때문에 별로 추천하지 않습니다. 나눔고딕이 약 2.4MB 정도입니다. 대략 이 정도면 괜찮다고 생각해주시면 됩니다.


사이트마다 다른 폰트를 적용 가능하니 이럴 때 애용해주시면 굴림체 같이 애매한 글씨체보다 더 쓸 만한 한글 글꼴로 인터넷이 가능해집니다. Firefox는 이런 것이 없는지 찾아봐도 안 나오네요. 물론 크롬보다 글씨체가 꽤 정돈되어 있어서 굳이 이 작업을 할 필요는 없습니다.

,

https://ultimaker.com/en/products/cura-software

Cura는 3D프린팅용 파일인 gcode 변환 프로그램입니다. gcode는 종이 프린팅에 쓰이는 ps(포스트 스크립트)같은 것이라고 생각하면 됩니다. 수많은 gcode 변환 프로그램 중에서 쉬운 인터페이스와 지원 장치 추가가 용이한 덕에 2D 프린팅에 Adobe Indesign(과거에는 Quark Express)이 있다면 3D 프린팅에는 Cura라고 할 수 있습니다.



Cura 15.06버전의 스크린샷 간단한 인터페이스로 3D 프린팅 쪽에서는 여기저기에서 쓰이고 있다.

무엇보다 Cura는 3대OS(Windows, Mac OSX, Linux)를 지원합니다. 그런데 우분투에서는 14.04까지만 하더라도 의존성 문제가 심각하지 않았는데 16.04로 올리고 나니 의존성문제로 설치에 난항을 겪었습니다. 바로 전 글에서 라이브러리 의존성 해결법을 들고 나왔는데 Cura도 해당 삽질에 한 몫을 했습니다. 그런데 Cura는 apt-get -f 명령으로 해결이 안 되더군요. 그냥 Cura를 삭제하라고 합니다.


그래서 어떻게 할 까 생각하다가 그냥 소스 컴파일 하기로 했습니다. 생각보다 Debian용 빌드는 어렵지 않더군요. 그냥 따라오시기만 하면 됩니다.


우선 git을 설치합니다.


sudo apt-get install git


그리고 소스를 다운로드 받을 "cura_src"란 폴더를 하나 만들고 그 안에 들어갑시다.


mkdir cura_src

cd cura_src


이제 소스 코드를 받아야겠지요? 그냥 다음 명령을 칩시다.


git clone https://github.com/daid/Cura.git


이제 지가 알아서 코드를 가져옵니다.


그리고 Readme를 한번 읽어봅시다. 



Debian and Ubuntu Linux
--------

To build and install Cura, run the following commands:

```bash
git clone https://github.com/daid/Cura.git

sudo apt-get install python-opengl python-numpy python-serial python-setuptools python-wxgtk2.8 curl

cd Cura

./package.sh debian_amd64          # or debian_i386 for 32bit
# this will prompt for your root password to run dpkg-deb

sudo dpkg -i ./scripts/linux/cura*.deb


이렇게 쓰여 있군요. 이 중에서 git으로 받는 것은 이미 했으니 빌드를 위한 라이브러리를 설치합시다.


그런데 우분투 16.04에서는 python-wxgtk2.8이 사라지고 python-wxgtk3.0으로 바뀌었습니다. 그러니까 명령을 다음과 같이 쓰도록 합시다.



sudo apt-get install python-opengl python-numpy python-serial python-setuptools python-wxgtk3.0 curl arduino


그리고 Readme에 나온대로


64비트의 경우:


cd Cura

./package.sh debian_amd64



32비트의 경우


cd Cura

./package.sh debian_i386


이렇게 하시면 컴파일을 하고 패키지까지 만들어 줍니다.

패키지는 당연히 dpkg를 사용해서


sudo dpkg -i ./scripts/linux/cura*.deb


이렇게 해주시면 cura를 우분투에 설치 하는데에 성공했습니다.


OSX 사용자 분들은 빌드하는게 짜증이 난다는데 Debian계열은 apt-get의 힘을 받아서 정말 쉽습니다.


P.S ultimaker에서 Cura 2.1버전을 배포하고 있습니다. 그런데 2.1은 훨씬 무거우면서 장치 추가가 녹록하지 않습니다. 아무래도 Ultimaker 사용자가 아니라면 15버전이 계속 이용될 듯 합니다.

,

Debian 계열은 deb패키지로 설치를 하면서 필요한 패키지를 apt-get으로 저장소에서 끌어 올 수 있습니다. 즉 한글2008이나 Draftsight 같은 바이너리로 배포되는 프로그램도 Windows처럼 라이브러리를 포함해서 배포하는 것이 아니라 Debian패키지 안에 사용하는 라이브러리만 적어주면 알아서 필요 라이브러리를 가져오는 것입니다. 이러면 라이브러리 때문에 꼬이는 일을 어느 정도 방지해주는 장점이 있습니다. 하지만 단점도 있는데 저장소의 라이브러리와 맞지 않는 경우 설치도 안 되고 수동으로도 답이 안 나오는 경우가 있습니다.


대표적인 것이 64비트 환경에서 32비트 패키지를 설치 해야 하는 경우가 있습니다. 범인은 한글2008입니다. 오로지 32비트 패키지만 있기 때문에 32비트 패키지를 또 설치해야 합니다. 그런데 이 경우 설치가 되다가 dpkg가 설치 못하겠다고 뻗어버립니다.


보통 터미널에서 dpkg -i 명령을 사용해서 보면 이러한 글이 나옵니다.


arkzip 설치 중 나온 에러 그냥 설정해버려도 될 것을 굳이 건들게 만든다.



의존성 문제: lib~~~ 하지만 설치하지 않았습니다.

 의존성 문제 : lib~~~하지만 설치하지 않았습니다.

~~~~~


이러면 보는 사람 참 화가 납니다. 패키지는 패키지대로 깨지고 라이브러리는 라이브러리대로 설치가 안 됩니다. 수동으로 설치를 하려고 해도 짜증만 더 날 뿐이지요.

이럴 때 사용하는 꼼수가 있습니다. 사실 저 에러가 나도 deb 패키지 자체는 설치가 되기는 됩니다. 다만 라이브러리가 설치되지 않아서 패키지 DB가 박살난 것 뿐입니다.패키지를 복구하는 기능을 이용하는 것 입니다.


보통 이런 경우 해당 의존성 패키지를 수동을 설치하면 자동으로 깨진 패키지들이 복구가 됩니다. 하지만 apt-get 은 역시 오랫동안 쓰이다 보니 정말 튼튼한 모습을 보입니다.


sudo apt-get -f install


위의 명령을 한번 해주시면 의존성 걸린 패키지를 설치하겠다고 나옵니다.

그리고 다시 deb 패키지를 설치하게 되면 Success가 나오면서 무사히 설치가 완료됩니다.

(물론 아닌 경우도 꽤 있습니다.)


https://www.google.co.kr/search?q=deb+%EC%9D%98%EC%A1%B4%EC%84%B1+%EC%97%90%EB%9F%AC&newwindow=1&safe=off&source=lnms&tbm=isch&sa=X&ved=0ahUKEwiSkvba3LHMAhUBKpQKHSLGD34Q_AUIBygB&biw=1366&bih=556#imgrc=_


구글에 슬쩍 검색해보니 많은 사람들이 이미 겪고 있는 문제였군요. 하하...

,

FTP는 상당히 오래전에 만들어진 규약입니다. 파일 배포를 위해 만들어진 규약인데 대표적으로 쓰이는 곳은 여러분이 사용하는 리눅스의 패키지 저장소가 있습니다. 


국내 유명 리눅스 저장소 중 하나인 카이스트 FTP 서버 이러한 불특정 다수에게 파일 배포하기 좋은 프로토콜 중 하나가 FTP이다




대표적인 FTP클라이언트 FileZilla 굉장히 안정적이며 모든 OS를 지원하는 등 국내의 어떤 프로그램 보다 훨씬 낫다.



파일 저장과 파일공유를 중심으로 하는 NAS를 만드시겠다면 이 FTP를 빼 먹을 수는 없겠지요. 이전의 Webmin을 사용한 웹 서버겸 NAS 구축기 (http://moordev.tistory.com/108)를 보셨다면 중간에 ProFTPD를 설치를 알게모르게 했습니다. 최근에는 VSFTP가 더 많이 쓰인다고 하지만 ProFTPD는 Apache처럼 상당히 오랜기간 사용되었던 FTP서버 프로그램 중 하나입니다. 사실 Webmin에서 기본적으로 지원하는 서버가 이거였기도 했고 저도 믿음이 있는 서버프로그램이라 이걸 사용했습니다. 보안상 문제가 있었다고 하지만 업데이트는 충실히 되고 있고 만약 정말로 문제가 크게 일어났다면 데비안 저장소에서 내렸겠지요.


저번 글이 기본적인 서버의 뼈대 구축기였다면 이번에는 그 뼈대에 FTP를 발라 기본적인 구성을 하게끔 하는 것을 목적으로 하겠습니다. 저번 글을 못 보신 분은


http://moordev.tistory.com/108


여기가서 Webmin을 서버에 설치하는 단계까지 와주시길 부탁 드립니다.

이전 글에서 우리는 마지막에 Webmin을 설치하고 Webmin이 지원되는 서버인 (Apache+PHP+MySQL),ProFTPD를 설치하는 단계까지 갔습니다. 이후에 Webmin관리 페이지에서 각 모듈을 설정할 수 있는 단계까지 왔었습니다.




이중에서 제일 신경 써야 하는 부분은 ProFTPD의 디렉토리 부분과 로그인 부분으로 보안상 굉장히 중요하며 파일 공유를 대충 하면 여러분의 서버 프로그램이 엉망이 될 수도 있습니다.


그리고 그 다음에는 MonstaFTP를 웹서버에 설치하는 단계입니다. 이건 간단하게 SSH나 터미널로 처리하도록 합시다.


MonstaFTP를 /var/www에 설치하시면(쉽게말해 웹서버의 메인 디렉토리입니다. 보통 아파치는 여기가 기본이고 나중에 바꿀 수 있지만 귀찮으니 저희도 여기에 그냥 설치해버립시다.) 웹에서 FTP접속을 해서 쓸 수 있습니다. Webmin의 자체 파일 탐색기도 있지만 Webmin자체가 관리 페이지이니 이걸 다른 사람과 공유한다는 것은 어렵겠지요. 그래서 MonstaFTP를 사용하는 겁니다.


MonstaFTP의 홈페이지 주소는 여깁니다. http://www.monstaftp.com/


SSH나 자체 터미널에서 설치하는 방법을 간단하게 긁어 드리겠습니다.


cd /var/www

sudo wget https://www.monstacdn.com/download/monsta_ftp_v1.8.5_install.zip

sudo unzip monsta_ftp_v1.8.5_install.zip

sudo service apache2 restart


끝입니다. 이제 MonstaFTP가 설치되었습니다.


http://서버IP/mftp


여기로 접속하시면 FTP에 접속 할 수 있는 페이지가 뜨는데 서버의 IP를 적으라고 합니다. 게다가 영문 인터페이스군요. 이걸 해결하도록 해봅시다. 다시 SSH를 접속해봅시다. (몰랐는데 Webmin에 SSH기능도 있다고 합니다. 그런데 느려서 별로 추천은 하기 싫습니다. 그냥 putty가 낫습니다.)



sudo nano /var/www/mftp/config.php


$ftpHost = "서버IP"

#ftpHost에 내 서버의 IP주소추가


Ctrl+O Ctrl+X를 순서대로 눌러 저장 후 탈출


sudo nano /var/www/mftp/languages/en_us.php


$file_lang_default = 0;

#1로 되어있는 것을 0으로 수정


Ctrl+O Ctrl+X를 순서대로 눌러 저장 후 탈출


sudo nano /var/www/mftp/languages/ko_ko.php


$file_lang_default = 1;

#0으로 되어있는 것을 1로 수정


Ctrl+O Ctrl+X를 순서대로 눌러 저장 후 탈출


sudo services apache2 restart


이제 들어가 보시면 한글로 되어있고 서버IP를 적는 곳이 사라진 깔끔한 화면을 볼 수 있습니다. root가 아닌 설치할 때 만든 유저계정으로 로그인하시면 파일의 업로드와 다운로드가 가능합니다. 심지어 드래그 앤 드롭도 먹힌다고 하네요. 다만 기술적인 이유로 크롬만이 폴더 업로드가 가능합니다.



다만 업로드 제한이 128MB로 상당히 작은 것을 알 수 있는데 이는 php.ini의 설정 문제로 Webmin의 PHP설정에 들어가서 MemoryLimit을 수정 함으로서 제한을 풀 수 있습니다. 대신 서버의 메모리보다 크게 잡으시면 서버가 크게 느려집니다.

,

이전에 저는 낡은 PC로 토렌트머신을 만드는 것을 하나 알려드린 적이 있습니다.

http://moordev.tistory.com/21


그런데 토렌트만 굴리기에는 PC의 성능은 매우 아깝습니다. 그럼 여기에 웹서버를 굴려서 개인NAS로 만드는 것은 어떨까요? 하지만 웹서버관리는 초보에겐 너무 어렵습니다. 하지만 GUI로 한다면 이야기는 달라지겠지요. 서버관리를 GUI(사실은 web기반)로 하게 해주는 도구가 바로 webmin입니다. (http://www.webmin.com/)일단 말이 나왔으니 한번 해보도록 합시다.


일단 준비물은


1. 오늘내일 하는 PC

2. 리눅스 배포판 아무거나 좋은 것(개인적으로 개인 서버는 Debian이 좋다고 생각합니다.)

3. 인터넷

4. 기본적인 네트워크 관련 지식(IP, http 같은 것이 뭔지는 알아야 해보던지 하지요...)


자 이제 제일 먼저 해야 할 일은 리눅스를 설치하는 일 입니다. 윈도우도 서버를 만들 수 있지만 기본적으로 윈도는 서버 성능이 영 아니라서 리눅스나 BSD같은 OS를 쓰는 것을 원칙으로 합니다. 물론 윈도 서버도 어느정도 있지만 윈도로 서버를 굴리느니 Lubuntu로 서버를 만드는 것이 100배 낫습니다.


저는 우분투를 좋아하지만 서버OS는 안정화가 매우 중요하다고 생각하기 때문에 우분투보다 더 안정적인 Debian을 선택했습니다. 어차피 우분투나 데비안이나 사용 방법은 동일해서 새로 배운다거나 그런 것은 전혀 없습니다.


일단 설치할 때 파티션을 나누는데 우분투처럼 자동 파티션, 혹은 한 파티션에 몰아넣기 보다는 수동으로 설정해서 NAS의 공유 자료가 들어갈 Data 파티션을 하나 만들어두는 것이 좋습니다. 물론 포맷은 ext4같은 저널링 기능 있는 것을 해줘야 마음이 편합니다.


자세한 내용은 https://www.debian.org/releases/jessie/amd64/index.html.ko 여기를 참고해주세요. 참고로 설치 중에 어떤 서버를 쓸 건지 선택하는 곳이 있는데 다른 것은 몰라도 SSH는 무조건 해줘야 편합니다. 서버는 보통 모니터를 떼버리고 사용하기 때문에 SSH로 원격 접속해서 작업을 합니다. 그리고 root 혹은 root에 준하는 (sudo 사용이 가능한)계정의 패스워드는 간수를 잘 해야 합니다. 해킹이란 의외로 우리 가까이에서 일어납니다.


일단 서버 OS가 설치되었다면 서버를 켜놓고 SSH로 접속하거나 직접 서버에서 키보드로 명령을 내리면서 작업을 합시다. 일단 webmin만 설치하면 이후에 명령을 따로 쓸 일은 거의 없습니다. webmin만 있으면 별도의 아파치같은 웹서버를 추가로 설치하고 각종 서드파티 플러그인을 추가해서 관리하는 등의 일련의 작업을 웹브라우저에서 할 수 있습니다.


일단 webmin을 설치하려면 데비안 기준으로(우분투도 동일)

source.list에 추가해야 합니다.


다음과 같은 명령을 써봅시다.



sudo nano /etc/apt/sources.list

그리고 아래에 다음과 같이 2줄을 추가합시다.


deb http://download.webmin.com/download/repository sarge contrib
deb http://webmin.mirror.somersettechsolutions.co.uk/repository sarge contrib

그리고 Ctrl+O를 누르고 Ctrl+X를 누르시면 다시 명령 행으로 빠져나오는데요. 다시 다음 명령을 쳐서 PGP키를 추가합시다. 우분투는 이를 편리하게 만든 스크립트가 있었지만 webmin은 지원이 안 됩니다.


wget http://www.webmin.com/jcameron-key.asc
sudo apt-key add jcameron-key.asc

sudo apt-get update


이제 대망의 설치만 하면 됩니다.


sudo apt-get install webmin


아니면 직접 deb을 받아서 설치하셔도 됩니다.


wget http://www.webmin.com/download/deb/webmin-current.deb

sudo dpkg -i webmin-current.deb

대신 이렇게 하면 자동 업데이트가 안 되니 APT 방식을 추천합니다.


이제 webmin을 설치했으니 웹 브라우저에서 접속해봅시다.(IE는 안 되는 것으로 보입니다. edge나 Safari, chrome, Firefox에서 하세요.)


주소는 https://서버IP:10000 입니다. 인증서 관련해서 에러가 나는데 우리 서버는 인증을 받은 적이 없으니 무시하도록 합시다. SSL을 안 쓰게 해서 넘어가는 방법도 있는데 일단은 접속은 해야 하니 무시하고 넘어갑시다.



어쩔 수 없다 그냥 예외로 하자. 아니면 /etc/webmin/miniserv.conf 에서 ssl=0으로 하면 된다.



일단 예외로 처리하거나 SSL설정을 바꿨다면 로그인 창을 하나 볼 수 있습니다. 그런데 여기서 막막해집니다. 비밀번호가 뭐였더라???


보통은 아까 설치했던 리눅스의 root와 그 비밀번호가 정답입니다. 하지만 접속이 안 됩니다. 이유는 설정을 안 했으니까요.


아직 터미널 작업은 끝나지 않았습니다. 마무리 비슷한 작업이 필요합니다. 사실 이번에 알려드릴 명령은 배포판마다 다른데 저는 데비안/우분투 버전을 기준으로 설명하겠습니다.


모든 경로는 Deb으로 설치했을 때를 가정합니다. 소스 컴파일은 또 달라집니다.

cd /usr/share/webmin

sudo perl changepass.pl /etc/webmin root 비밀번호


일단 이렇게 해 놓고 다시 웹 브라우저에서 ID는 root로 비밀번호를 입력하시면 접속이 될 겁니다. 참고로 여기서 설정한 비밀번호와 진짜 root의 비밀번호는 다릅니다. 상관이 전혀 없으니 신경 끄셔도 좋습니다.



이름은 root이고 Password는 원하는대로


Webmin은 BrutalForce 공격을 막기 위해 약간의 방어 장치가 있습니다. 만약 비밀번호가 5번이상 틀리면 해당 IP를 블록 해버립니다. 근데 이 방어 장치가 오류나 실수로 주인을 막을 때가 있습니다. 그때는 SSH 클라이언트로 접속 후에 다음 명령을 쓰시면 됩니다.



sudo cp /dev/null /var/webmin/blocked


이렇게 하면 열심히 막았던 블록IP 들이 풀리기는 하지만 주인도 못 들어가는 어이없는 것보다는 낫습니다.


일단 접속 하고나면 번잡한 느낌이 듭니다. 그도 그럴것이 webmin은 상당히 오래된 프로그램으로서 쌓인 기능이 엄청납니다. 우리는 이중에서 일부만 사용할 예정입니다.



웹에서 시스템의 전반적인 것을 점검할 수 있다.


웹에서 직접 파일 조작도 가능


우리는 이를 NAS로 쓰기 위해서 apache webserver, Samba Windows File Sharing, ProFTPD를 설치할 겁니다. 물론 PHP5도 필수입니다.


webmin에서 Unused modules 항목에 가면 이것들이 있습니다. 이것을 누르면 설치하는 링크를 하나 던집니다. 만약 설치 링크를 못 찾겠다면...SSH를 다시 씁시다. 사실 이쪽이 더 편할 수도 있습니다.



sudo apt-get install apache2 php5 proftpd samba mysql


이렇게 하면 웹서버와 FTP, 삼바 설치는 완료입니다.


그리고 다시 webmin에 가시면 un-used module에 있던 것들이 Server에 들어간 것을 볼 수 있습니다. 이제 여기서 설정을 할 수 있습니다.


자세한 설정은 다음에 하기로 하고 일단 webmin을 사용한 웹기반 웹서버 관리도구를 구축했습니다. 여기서 FTP를 설치했으니 /var/www에 디렉토리 설정을 하면 바로 웹페이지를 FTP로 올릴 수 있겠지요. 이건 NAS이기도 하니 아까 빼놓았던 Data 파티션을 마운트해서 여기를 쓸 수 있게 하면 더욱 편리합니다. 



webmin의 ProFTPD 설정에서 Directory and Files설정 여기서 Directory 부분을 수정해서 FTP로 쓸 곳을 직접 적도록 하자.

마찬가지로 Samba도 Webmin에서 디렉토리 설정이 가능하므로 그냥 웹에서 뚝딱 거리면 됩니다.


문제는 웹 서버인데 Pydio나 ownCloud 같은 것을 /var/www에 올려주시면 웹에서 접속가능한 페이지가 완성됩니다. 하지만 저는 이 물건들 보다 웹용 FTP 클라이언트인 MonstaFTP를 올리고 FTP를 웹에서 하는 것을 추천 드립니다. 일단 낡을 대로 낡은 PC에서 ownCloud를 돌리기에는 너무 성능이 모자랍니다. 반대로 MonstaFTP로 FTP를 웹에서 하면 ownCloud같이 웹에서 그림을 직접보거나 PDF를 읽어내는 것은 할 수 없지만 파일 공유라는 측면에서는 더욱 충실합니다. 


MonstaFTP에 관한 내용은 다음에 하기로 하고 일단 http://서버IP로 한번 웹페이지에 접속해봅시다.


만약 Apache관련 페이지가 나왔다면 웹 서버 설치는 성공입니다.


나머지 FTP설정과 Samba는 다음에 해보기로 합시다.

,

Sunrider Academy는 스팀에서 팔고 있는 야겜*-_-*입니다.


스팀에디션과 Denpa에디션이 있는데 스팀에디션은 검열삭제를 했고 Denpa에디션은 그냥 풀버전입니다..그래서 Steam to Denpa로 만들어주는 모드도 돌아댕기고 있습니다. 뭐..이건 저한테 묻지마세요.


일단 이놈도 렌파이 기반입니다. 따라서 안드로이드 포팅이 됩니다.


Ubuntu 14.04

OpenJDK7

Python 2.7

Ren'Py 6.99.10

rpatoolhttps://github.com/Shizmob/rpatool


Android 4.0 IcecreamSandwich이상


고맙게도 Long Live The Queen때와는 다르게 rpy파일이 같이 있습니다. unrpyc같은 고생은 안 해도 됩니다.


그냥 Renpy폴더에 /.steam/steamapps/common에 있는 Sunrider Academy 폴더를 복사해서 가져옵니다.


그리고 rpatool을 Sunrider Academy/game폴더에 넣고 다음과 같이 명령을 내립시다.

python rpatool -x archive.rpa


그러고 나면 rpa아카이브가 풀리면서 CG등을 볼 수 있게 됩니다. 이 부분은 안드로이드가 rpa지원이 아직이라 rpa를 풀어주는 작업을 하는 겁니다.


그리고 렌파이를 실행하고 안드로이드 포팅을 시도하면....'


에러납니다.


렌파이 엔진은 무한루프를 막기위해 일부 기능이 작동하는데 무한루프가 아님에도 성능 문제로 이 기능이 작동해 버린겁니다. 따라서 위험하기는 하지만 일단 안드로이드 APK을 만들기 위해 해당 기능을 정지하도록 합시다.


본래 renpy.exe renpy.sh가 있는 폴더(즉 SDK)에서 renpy으로 들어가시면 execution.py가 있습니다. 여기서 한줄을 삭제합니다.


54번째 줄 raise Exceptoion~~앞에 #을 넣으시면 됩니다.


    if time.time() > il_time:
        il_time = time.time() + 100
        raise Exception("Possible infinite loop.") 

     if time.time() > il_time:
        il_time = time.time() + 100
        #raise Exception("Possible infinite loop.")

요렇게 말이지요.


이제 안드로이드 빌드를 하면 무사히 되기는 하는데 오프닝 영상에서 에러납니다. 제일 무식한 방법은 오프닝을 스킵하는 겁니다.


game/script.rpy열고 308, 310줄 앞에 #을 붙여서 오프닝 자체를 재생못하게 하면 무사히 넘어갑니다. 아니면 안드로이드에서 그냥 재생 가능한 형식으로 인코딩 하면 되는데 game/CG/opening.avi 파일을

https://www.renpy.org/doc/html/android.html

http://developer.android.com/intl/ko/guide/appendix/media-formats.html


여기를 참고하셔서 해당 형식에 맞게 인코딩 하면 되는데 귀찮으니...그냥 오프닝을 스킵하는 것으로 결정했습니다.... webm정도가 가장 적당할 것으로 보이는데....인코딩은 너무 귀찮습니다. 어차피 오프닝 잘 보지도 않으니 넘어가는 것으로...(성능문제도 있고...)


한글패치는 안드로이드 빌드 전에 ghap님 블로그(http://ghap.tistory.com/category/SUNRIDER%20ACADEMY)가서 미리 적용해주시면 끝입니다. LLTQ와 달리 그냥 덮는 방식이라 따로 사후 작업은 없습니다.


...근데 이거는.LLTQ보다 더 하기 힘들겠는데..??


2016. 5.6


하다보니 안드로이드 버전만의 버그가 있습니다. 점심시간, 방과후에 맵 선택 부분에서 버그가 있습니다.

자세히 보니 focus_mask 옵션 관련 버그입니다. 현재로써는 방법이 없는듯 해서 그냥 maps.rpy파일을 그냥 뜯어 고쳤습니다. 기존에는 마우스 선택을 기준으로 잡혀 있었는데 버튼을 클릭해야 넘어가게 했습니다. 지금 보니 코드가 원래 더러웠네요. 작은 기업이라 어쩔 수 없었겠지만 솔직히 코드가 통일성이 없습니다... 뭐 이따위로 만들었냐...


일단 maps.rpy만 왕창 수정해서 올립니다. (결국 수정해야 했잖아..)game 폴더에 덮어주세요.



maps.rpy


,

이번에은 간단하고 짧고 그러나 의외로 많이 쓰일 만한 내용을 알려드리려 합니다.


사실 별로 중요한 내용은 아닙니다. 어쩌면 평생 쓸 일이 없을 지도 모릅니다. 하지만 *nix계열을 사용한다면 이 명령 하나만큼은 정말 강력하게 쓰게 될 겁니다.


dd


네 dd 입니다. 리눅스, 유닉스, OSX, 심지어 Win32, Win64용으로도 포팅해서 쓰는 dd입니다.

dd는 정말 강력한 프로그램입니다. 그리고 SSD시대에 도래하면서 그 효용성은 더욱 좋아졌습니다. 그런데 어떤분은 이러실 겁니다. 그래서 dd가 뭔데?


Windows용으로 제일 유명한 dd계열은 Win32 Disk Imager가 있습니다. IMG파일을 USB에 입힐 때 쓰는 바로 그 프로그램입니다. 사실 이 놈은 dd가 쓰는 구동을 Windows용으로 컨버팅한 것입니다. dd 그 자체를 포팅한 것도 있지만 Windows는 cmd가 편하지가 않아서 (사실 터미널이 편하다는 것도 무리이기는 합니다...) GUI로 만들어 낸 것이지요.


Windows에서 IMG나 ISO입히는 것으로 제일 유명한 Win32 Disk Imager. 대다수 책들이 이놈을 설명한다.

dd는 본래 명령줄 프로그램입니다. 하지만 명령체계는 단순합니다.


dd if=~~ of=~~ bs=~~


이겁니다. if는 입력 of는 출력 bs는 한번에 얼마나 이미지를 입힐지.


이렇게 생각하시는 분들이 있을 겁니다. 장치에서 파일이나 파일에서 장치로 입히는 것은 어떻게 하는 거지? 뭐 이런식으로요. 그런데 *nix들은 장치조차 파일로 취급합니다. 무슨이야기냐면 /dev/안에 폴더를 보면 수많은 0바이트 파일들이 있는데 이 파일들이 실은 그 장치와의 인터페이스 입니다. 


요것들이 사실은 전부 시스템에 연결된 장치 그 자체다. 이는 Linux인 안드로이드와 BSD인 iOS도 동일

이 파일에 내용을 써넣는 것으로 장치에 신호를 보내는 것이고 이 파일의 내용을 읽는 것으로 장치에서 신호를 읽어오는 겁니다.


예를 들어 /dev/video0는 사실 컴퓨터에 연결된 웹캠인데요. 여기서 /dev/video0의 파일내용을 읽어들이면 Linux4video2 형태로 만들어진 이미지 하나가 튀어나옵니다. 또 /dev/ttyS0는 장치에 연결된 시리얼 포트입니다. (Windows 기준으로 COM1)여기서 파일 내용을 쭉 읽어들이면 시리얼통신으로 들어오는 모든 신호를 읽어들이는 겁니다. 반대로 파일에 내용을 써넣으면 시리얼통신으로 내보내는 것이고요. 비슷한 것으로 /dev/ram 이라던가 여러가지가 있습니다.


참고로 내부 HDD는 /dev/sdXY(X는 순서대로 a, b,c 순서로 되어있습니다.Y는 파티션 번호입니다. 즉 숫자입니다. )이고 CD같은 광드라이브는 /dev/srY(마찬가지로 숫자입니다.)입니다.

그냥 위의 장치를 그대로 dd로 파일로 떠버리면 이미지가 되는 겁니다.


즉, CD드라이브가 /dev/sr0이고 ~/CD.iso파일로 읽어내고 싶다면


dd if=/dev/sr0 of=~/CD.iso


이거면 홈폴더에 CD.iso파일이 생기면서 이미지가 떠지는 겁니다. 그냥은 속도가 굉장히 느리고 답답하므로


dd if=/dev/sr0 of=~/CD.iso bs=4M


이렇게 해주시면 한번에 4Mb씩 쓰므로 속도가 꽤 빨라집니다. 이미지를 떴으니 이걸 다시 CD-R이나 CD-RW 혹은 DVD-R등으로 구우려면 그냥 iso파일을 브라세로 같은 프로그램으로 구워버리면 됩니다. 그냥 인터넷등지에서 흔히 보시는 iso파일이 이렇게 뜨는 겁니다. (물론 Windows에서 Nero나 Easy CD Creator같은 것으로 뜰 수도 있기는 합니다.)


USB메모리나 HDD등도 마찬가지입니다. 물론 이미지 파일은 읽고 있는 디스크에 만들면 안되겠지요.


dd if=/dev/sdb of=~/HDD.img bs=4M


이렇게 하면 홈폴더에 HDD.img라는 디스크를 통짜로 복제한 이미지가 떠집니다.

디스크가 아닌 파티션을 복제하려면 /dev/sdb대신 /dev/sdb1 처럼 뒤에 숫자를 붙이시면 됩니다.


dd if=/dev/sdb1 of=/dev/sdc2 bs=4M


이렇게 하시면 /dev/sdb의 1번 파티션의 내용을 그대로 /dev/sdc 디스크의 2번 파티션에 덮어버립니다. 다만 이 경우 /dev/sdc의 2번 파티션이 충분히 크지 않으면 3번 파티션까지 밀어버립니다. 강력한 만큼 따로 안전장치가 없기 때문에 주의하셔야 합니다.


반대로

dd if=~/USB.img of=/dev/sdb bs=4M

이렇게 해주시면 /dev/sdb에 그대로 디스크 이미지를 덮습니다. Win32 disk Imager가 하는 것과 동일하지요. 하는 짓이 예전에 많이 봤던 Norton Ghost를 닮았네요.

사실 *nix에서 Ghost가 따로 없는 대신 이 dd를 참 많이 이용합니다. 온라인게임에서 악명높은 백섭할 때 보통 이용한다고 합니다. 명령 한줄이면 쭉 되니까요. 해킹피해나 서버가 맛이 갔을 경우 dd로 처리하는 경우가 많습니다. 요즘은 btrfs나 BSD의 JFS의 스냅샷 기능을 쓰는 경우도 많지만 예전에는 dd를 써서 처리했다고 합니다. 사실 그 만큼 강력합니다.


어떠신가요? 명령어 한 줄의 위력이 대단하지 않나요? 이런 강력한 명령어 덕에 가상화같은 최신 기술도 사용하고 지금의 클라우드 컴퓨팅도 가능해진 것이랍니다. ISO를 뜨는 법을 물어보시는 분들이 가끔 있는데 dd가 바로 그 답입니다.


P.S

이런 강력한 명령어를 GUI로 구현하는 프로젝트도 당연히 있습니다. 

https://sourceforge.net/projects/ddgui/


여기인데요. Windows도 지원하고 꽤 지원범위가 넓습니다. 그런데....저는 이제 명령어가 익숙해서 안 건드리게 되네요. CMD나 터미널과 아직 어색하신 분들이라면 참고하세요.

,

TextHooker란 프로그램들을 아시나요? 사실 대부분의 일본산 비주얼노벨 게임을 하신 분들이라면 비슷한 프로그램들을 상당히 많이 알고 계실겁니다.

제일 유명한 것이라면 TextHooker중에서 제일 대중에게(?) 퍼진 Oh! TextHooker가 있습니다. 이외에도 4chan에서 만든것으로 추정?되는 AGTH(Anime Game Text Hooker)와 중국에서 만든것으로 보이는 VNR(Visual Novel Reader) 등이 있습니다. 상당히 많은 프로그램들이 있는데 이들의 공통점은 공통적으로 쓰이는 API(대표적인 것이 TextOut())를 후킹해서 문자열을 끌어낸다음 번역기나 사용자사전을 써서 번역된 문장을 출력하는 것이 목적입니다.



각종 TextHooker의 할아버지뻘인 Oh! TextHooker 지금도 돌아가는 게임이 있다! (출처:http://ohhara.sarang.net/ohthk/scrshots.html)

 


가장 최신의 기술로 무장했고 편의성도 훌륭한 VNR의 모습. 출처 : https://namu.wiki/w/VNR


API후킹 기술은 사실 어둠의 영역에서도 자주 사용되었고 빛의 영역에서도 상당수 이용됩니다. 대표적인 어둠의 영역은 키보드의 이벤트를 후킹해서 키입력 로그를 만들어 해킹하는 곳에 사용되는 것을 말 할 수 있습니다. 하지만 대개 이런 부류는 백신에서 쉽게 잡아냅니다. 빛의 영역은 시각장애인용 TTS프로그램을 들 수 있습니다. 마우스를 움직이면 마우스 아래에 있는 문장을 읽어들여서 TTS로 읽는 것이지요. 이런 프로그램은 상당히 종류가 많습니다. 그런데 리눅스에서는 이런류의 프로그램이 사실상 없습니다. Firefox나 Chrome의 확장에서는 있는 것 같지만 인터넷 웹환경에 한해서만 작동하기 때문에 한계가 있습니다.


애초에 이런 게임들이 당연히 (일본어판) Windows전용이다보니 참 문제가 많습니다. 리눅스에서 굴린다는 것 부터가 이미 글러먹은 것이지요. 그것도 번역기를 통하려고보니 더 엉망진창이고요. Wine은 DLL injection이나 API Table같은 기술이 잘 먹히지 않습니다. 본래의 API와 외부 구조는 비슷하지만 내부 구성이 다르기 때문입니다. (내부 구성까지 같으면 Wine은 Windows의 저작권에 위배되는 프로그램이 됩니다.) 즉 VNR이나 Oh! Text Hooker는 정상적인 동작이 보증되지 않습니다.

애매한 것으로 Mort란 것이 있기는한데 이건 OCR을 쓴 것이니 넘어가도록 합시다.(이전에 제가 Mort의 기술을 써서 리눅스에서 비슷하게 굴린적이 있습니다.)


그런데 API 후킹의 원리는 API의 외부 구성을 그대로 만들고 본래의 API대신 자신이 끼어들어 이리저리 조작한 후 본래의 API를 호출하는 원리입니다. (본래의 API를 호출하지 않으면 프로그램이 정상적으로 돌지는 않을 겁니다. 문자열이 나와야 하는데 안 나온다거나...)그런데 이거 Wine이 하는 짓하고 비슷합니다. http://moordev.tistory.com/83 그래서 저는 여기서 이런 방법은 어떤지 제안을 한 적이 있습니다. 해 본 결과 폭망이었지만 (애초에 구조가 달라서 먹히지 않습니다.) 역으로 리눅스에서 Wine으로 게임을 굴리면서 후킹하는 것은 어렵지 않게 구현할 수 있었습니다. gdi.so소스를 뜯어고치면 TextOut()함수를 내 마음대로 돌아가게 하는 것은 어렵지도 않고 CreateFont()함수도 고쳐버리면 폰트도 내 마음대로 바꿀 수 있게 되는 겁니다.(이건 AppLocale의 원리와 같습니다.)


그래서 sprintf함수로 문장을 처리하는 게임을 타겟으로 삼아 Wine에서 구현한 sprintf함수 조작한 다음 sprintf 출력 문장을 디버그창에 띄우게 했더니...의외로 잘 나오네요.


......이거 잘하면 리눅스용 후커도 만들 수 있을 것 같습니다. 번역 엔진이 문제이기는 한데 그건 그냥 구글번역을 통하면 될 듯하고 Chrome하고 연동하는 방법을 쓰면 구글번역기능도 쉽게 쓸 수 있을 듯 합니다. 하지만 이건 윈도용 게임이야기이고 리눅스용 게임은.....나중에 생각하도록 합시다. 아직 리눅스용 게임은 이러한 물건은 적으니까요.



,

Linux가 발전한 것은 Opensource라는 것이 매우 중요한 점이었습니다.

BSD계열도 Opensource로 발전했습니다.

Firefox도 Netscape의 소스 공개를 기반으로 약 5년~10년동안 리브랜딩을 했습니다.

Blender는 오픈소스를 무기로 3대 3차원그래픽 모델러의 하나가 되었습니다.(3대 모델러중 유일한 무료 프로그램입니다.)

OSX의 mach커널은 본래 오픈소스였고 지금도 오픈소스입니다.

Wine은 기어코 Windows의 API를 다른 OS에 호환하는데 성공했습니다.

OpenTTD는 본래 Transport Tycoon이란 게임의 리버스 엔지니어링이지만 지금은 다른 게임이라고 해도 될 수준입니다.

Arduino는 소스만 공개한 것이 아니라 하드웨어의 설계도를 공개함으로서 수없이 많은 변종들을 만들어내었습니다.


오픈소스는 이처럼 많은 것들을 이룩했습니다. 심지어 걔중에는 본래 유료 상용프로그램이었지만 오픈소스로 전환해서 성공한 계열도 있습니다. 소스코드의 공개는 정말 무시무시한 파급력을 지녔다고 할 수 있습니다.


위에서 보시면 Wine의 이야기가 있는데 Wine은 정말 무시무시한 결과라고 할 수 있습니다. Microsoft가 공개한 API의 형태(Microsoft 기술 문서 보면 다 나와있습니다. API를 알아야 이걸 쓸지 말지 알 터이니...)와 이를 호환하는 API를 만들어서 X와 콘솔 화면에 뿌린다는 생각으로 출발했습니다. 그리고 지금은 성공한 프로젝트이며 지속적으로 진행되어야 하는 프로젝트가 되었습니다. 지금은 MSOffice 3총사(Word, Powerpoint, Excel)를 별 삽질없이도 굴릴 수 있을 정도로 상당히 안정화 되었고 저도 덕분에 잘 쓰고 있습니다.


Wine으로 실행한 Excel 너무 잘 굴러간다.


다만....Wine은 유닉스 환경에 호환되게 돌아가게 하기 위해 몇가지 변칙이 적용되었습니다. 대표적인 것이 X환경이 기본적으로 돌아가며 GCC기반이어야 한다는 것이 전제입니다. GCC야 본래 C표준을 따르는 것이니 문제가 전혀 없지만(심지어 Clang을 써도 됩니다. C표준이라..) X환경이 전제되기 때문에 Wine은 X가 돌아가야 제대로 돌아간다는 의미가 됩니다. 그리고 단순히 응용프로그램이 굴러가는 것에 의미를 두기 때문에 Windows커널에 직접붙는 장치들은 호환이 되지 않습니다. 대표적인 것이 보안동글입니다. 해당 동글은 값비싼 프로그램에서 주로 사용하는데, 드라이버가 당연히 Windows만 있습니다.(Windows용 프로그램이니 당연히 Windows 드라이버만 있습니다.) 이런 프로그램은 Wine에서 굴릴 때 당연히 문제가 생깁니다. 


그러면 이렇게 생각해 볼 수 있습니다. Wine에 드라이버까지 붙이려면 Windows 커널까지 구현해야하나? 그럼 처음부터 Windows의 호환커널부터 만들면 어떨까?

 네 이런 생각과 가장 흡사한 프로젝트가 ReactOS입니다.

https://reactos.org/

2016년 3월에 0.4버전이 드디어 릴리즈 되었습니다. 0.3버전이 2001 2006년 즈음에 나왔던 것으로 기억되는데 참 오래되었습니다. 사실 이 프로젝트는 98년 시작(!)되었습니다. 네 98년이요. Windows95~98이 나왔던 바로 그 시절입니다. Windows98가 어떤 OS였는지 아신다면 ReactOS가 무엇을 노리고 나왔던 것인지 알 것입니다. Windows95가 일대의 파란을 일으키고 있을 때 호환 OS를 목표로 했던 것입니다. 즉, Wine보다 역사가 더 오래되었습니다. 단순 API호환이 아닌 커널부터 만드는 것을 감안하면 이해가 됩니다.


현재는 NT커널을 호환하는 것을 목표로 하고 있고 0.3버전은 WindowsXP시절에 나왔으니 XP의 드라이버 호환을 목표로 했습니다. 지금은 아마도 Windows커널 6~혹은 Windows커널 10의 호환을 목표로 하고 있을 겁니다.


참고로 0.4버전도 아직은 Alpha 단계입니다. Wine도 beta딱지를 10년동안 달고 있었으니 아직까지도 알파를 달고 있을만합니다. 덕분에 아직도 100% 장치 호환은 꿈도 못 꾸고 있습니다. 하지만 Wine과 같은 일반 응용프로그램 호환은 그럭저럭 가능한 수준까지 올라왔습니다. 그도 그럴것이 API단계에서는 Wine의 코드를 수혈받았다고 하네요. 그래서 DirectX를 직접적으로 구현을 못하고 있고 Wine의 D3DtoOGL기능을 써서 OpenGL로 구현하고 있습니다. 그나마도 드라이버문제로 잘 안 됩니다. 추후 ReactX프로젝트로 DirectX호환 프로젝트도 계획되어있고 0.5버전은 Beta단계로 나아갈 예정이라고 하니 기대되는 대목이라고 할 수 있습니다.


다만 써본 결과...Alpha단계라 아직은 실사용으로는 무리입니다. 하지만 응원할 수 밖에 없는 프로젝트인 것은 확실합니다. 무료버전의 Windows가 나오는 것이라고 봐도 상관 없고 OpenTTD가 새로운 녀석이 된 것처럼 ReactOS도 Windows와 호환성을 갖춘 새로운 물건이 될 테니까요. FreeDos가 MS-Dos와 호환을 갖추었고 Linux가 Unix와 호환을 갖추었듯이 ReactOS도 이런식으로 호환을 갖추어서 발전 할 겁니다.그리고...새로운 OS가 될 수 있을 겁니다. 그러면? IT의 발전이 또 한번 이루어 지는 겁니다. 우리가 지금까지 봐온 것처럼 말이지요.

,