이전에 저는 낡은 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나 터미널과 아직 어색하신 분들이라면 참고하세요.

,