마인크래프트 서버 설치 스크립트

Minecraft 사이트에서 bedrock server 정식 버전을 내려받아 우분투에 설치하는 방법을 지난 포스트에서 살펴봤는데, 이번에는 설치 스크립트를 이용하여 편하게 설정하는 방법을 알아본다.

Ubuntu 20.04 LTS 버전 기분으로 다음과 같이 실행하면 간단하게 설치할 수 있다. 시작, 종료 스크립트와 재실행 스크립트를 제공해주는데, 재실행하는 경우 worlds를 백업하여 저장해주는 기능도 있다. 기본적으로 contab에 재실행 스크립트가 등록되어 매일 새벽 4시에 재실행하면서 백업을 진행하게 되어있다.

참고한 사이트는 여기다.

위 사이트 내용을 따라가며 설치하면 간단한데, SetupMinecraft.sh을 내려받아 실행하기만 하면 된다.

wget https://raw.githubusercontent.com/TheRemote/MinecraftBedrockServer/master/SetupMinecraft.sh
chmod +x SetupMinecraft.sh
./SetupMinecraft.sh

~/ 디렉토리에서 위의 커맨드를 복사&붙여넣어 실행하면 필요한 패키지들을 설치한 후 몇가지 설정을 묻는다. 적당히 입력을 하면 바로 bedrock 서버가 실행된다. stop 커맨드로 서버를 종료한 후, server.properties 파일을 적당히 변경하고 worlds를 복원해주면, 기존에 탐험하던 worlds가 나타난다.

마인크래프트 실행중인 로그를 보려면 screen -r 커맨드로 attach하면 되고, ctrl + a, d 단축키를 통해 스크린 세션에서 빠져나올 수 있다.

백업본을 한 번 열어봤는데, worlds 디렉토리를 그대로 백업해준다. 매일 백업본이 생기니 안심이 된다. ㅎ

WordPress 고유주소 404 에러 해결 방법

워드프레스의 주소를 글 이름으로 하는 것은 여러모로 이득이 있다. URL만 보고 어떤 글인지 바로 유추할 수 있고 검색 키워드가 URL에 들어가기 때문에 검색엔진에 노출되는 것도 이득이 있다.

그런데 이렇게 설정을 한 후 404 에러가 나면서 기존의 글에 엑세스 하지 못하는 문제가 생겼다. 여기저기 검색을 해 보면서 해결 방법을 찾아서 한 번 적어본다.

고유주소 설정 방법은 간단하다. 워드프레스 관리 페이지에 들어간 후 설정 > 고유주소를 누르면 설정할 수 있다. 기본적으로 글 번호가 사용되게 되는데, 이것을 글 이름을 사용하도록 변경해주면 된다.

WordPress 고유주소 설정

저장을 하면 .htaccess에 설정 내용을 붙여넣으라 안내를 해 준다. 서버의 루트에 보면 .htaccess 파일을 찾을 수 있을 것이다. 아래와 같은 형식으로 되어있다. 참고로 other의 쓰기 권한이 있으면 자동으로 편집해준다.

pi@raspberrypi:/var/www/html $ cat .htaccess 

# BEGIN WordPress
# The directives (lines) between `BEGIN WordPress` and `END WordPress` are
# dynamically generated, and should only be modified via WordPress filters.
# Any changes to the directives between these markers will be overwritten.

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]


# END WordPress

다음으로 apache 설정을 확인해줘야 한다. /etc/apache2/sites-enabled/000-default.conf 파일에서 AllowOverride를 All로 바꿔준다.

	
		AllowOverride All
	

그리고 mod_rewrite를 활성화해줘야 한다. /etc/apache2/mods-enabled/ 밑에 rewite.load가 안보인다면 link를 걸어준다.

pi@raspberrypi:/etc/apache2/mods-enabled $ sudo ln -s ../mods-available/rewrite.load rewrite.load

pi@raspberrypi:/etc/apache2/mods-enabled $ ls -l
...
lrwxrwxrwx 1 root root 30  3월 18 14:18 rewrite.load -> ../mods-available/rewrite.load
...

이제 apache2를 재시작해보면 글 이름 도메인이 잘 동작할 것이다.

pi@raspberrypi:/etc/apache2/mods-enabled $ sudo service apache2 restart

라즈베리파이 1 키오스크 모드

기존에 사용하던 라즈베리파이가 어느날부턴가 부팅이 되지 않아 확인해보니 SD카드가 깨졌다. 다시 파티션하고 포멧해보려 해도 할 수 없다며 에러가 출력된다.

할 수 없이 다시 만들어야 해서 이것 저것 다시 찾아보게 되어 여기에 정리를 해 둔다. 설정이 완료되면 SD 카드를 백업해 두고 나중에 다시 사용할 수 있도록 해야 할 것 같다.

FullPageOS 설치

설치해봤으나 커널 패닉이 뜨면서 부팅이 되지 않는다. 문서를 좀 읽어보니 라즈베리파이 1은 지원하지 않는다.

라즈베리파이 2 이상을 사용한다면 이게 가장 간단한 방안이 아닐까 싶다. boot 파티션의 파일들을 통해서 네트워크 설정, 웹 페이지 설정이 가능하다.

Jessie Lite 설치

lightDM 등 가볍게 X 환경을 설치한 후 chromium-browser를 설치하려했는데 apt-get을 통해서는 설치할 수가 없었다. 수동 설치 방안이 있는 것 같았으나 일이 복잡해질 것 같아서 패스.

Jessie Full 버전 설치

PIXEL 데스크탑 환경이 포함되어있는 이미지를 다운로드하여 설치했다. 기본적으로 chromium-browser가 설치되어있어서 자동으로 실행되게 하기만 하면 된다.

이미지를 SD카드에 풀어낸 후 부팅을 한 후 먼저 WiFi 설정을 한다. 유선을 사용한다면 별로 필요없을 것 같고, 무선랜을 사용한다면 /etc/wpa_supplicant/wpa_supplicant.conf 파일에 다음과 같이 추가해준다.

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
 
network={
    ssid="ssid name"
    psk="password"
    key_mgmt=WPA-PSK
}

화면을 보니 full screen으로 출력이 안된다. 강제로 1920×1080으로 출력하도록 /boot/config.txt를 다음과 같이 수정한다.

# uncomment to force a specific HDMI mode (this will force VGA)
hdmi_group=2
hdmi_mode=82

chromium-browser를 실행해보면 한글이 깨져나오는데 아래와 같이 ttf-unfonts-core를 설치해준다.

$ sudo apt-get install ttf-unfonts-core

그다음 마우스 커서를 없애기 위해 unclutter 패키지를 설치한다.

$ sudo apt-get install unclutter

이제 chromium-browser가 자동으로 실행되도록 설정한다. ~/.config/lxsession/LXDE-pi/autostart 파일을 열어서 아래 라인을 추가한다. screen save 관련 옵션을 코멘트 처리하거나 지운다.

@xset s off
@xset s noblank
@xset -dpms

@chromium-browser --noerrdialogs --kiosk --incognito http://page.to/show

이제 재부팅 후 제대로 나오는지 확인한다. 제대로 페이지가 출력이 되면, SD카드를 백업한다. 다시 SD카드에 문제가 생기면 백업해둔 이미지를 SD카드에 풀어넣으면 된다.

$ diskutil unmountDisk /dev/disk# (#은 SD카드 번호)
$ sudo dd bs=1m if=/dev/disk# of=./pi1.img

혹시나 싶어 SD카드를 Lock 걸고 켜봤는데 그래도 잘 동작한다. Lock을 걸어두고 쓰면 더 오래 쓸 수 있지 않을까 싶어서 걸어두기로..

워드프레스 한글 파일 링크 깨지는 이슈

최근 워드프레스에 업로드한 이미지 파일들이 엑스박스 처리되어 브라우저 화면에 나타나지 않는 현상이 발생하였다. 파일을 업로드한 뒤 바로 글을 보면 문제가 없는데 나중에 보면 이상하게 깨져나타나는 것이었다. 결론은 크롬에서 업로드한 파일에 한글이 들어있으면 사파리 브라우저에서 안보인다는 것이다.

라즈베리파이에 서버를 구축하여 운영하면서 나타나는 문제인 것 같아서 서버 설정에 문제가 있나 여러모로 검토를 해 보았으나 최근 배포되는 서버 이미지는 당연히 UTF-8을 지원하고, 설치한 APM도 UTF-8을 기본적으로 사용하도록 되어있었다.

그런데 희안하게 브라우저마다 다른 현상이 나타났다. 사파리 브라우저에서는 깨져나오는데, 크롬 브라우저에서는 제대로 나오는 것이 아닌가. 혹시나 싶어 Windows에서 한번 봤는데, 크롬, 에지, 인터넷 익스플로러 모두 제대로 나왔다. 음 이건 사파리의 버그인가…

wp-content 디렉토리를 살펴봤다. 주로 안보이는 이미지는 스크린샷-어쩌구.png 식의 이미지파일들로 맥에서 화면 캡춰하면 생기는 디폴트 이름들이다. 이 파일들이 크롬에서는 보이는데, 사파리에서는 404 에러가 뜨는 것이었다.

좀 더 확인해보니 사파리에서 업로드한 파일이름과 크롬에서 올리는 파일 이름이 서버에 다르게 저장된다는 것을 알았다. 사파리에서 업로드한 이미지들은 사파리에서도 잘 보이고 크롬에서도 잘 보인다. 그런데 크롬에서 업로드한 이미지는 크롬에서는 잘 보이는데 사파리에서는 404에러가 뜬다. (확인해본 다른 브라우저들은 모두 제대로 나온다.)

집에서는 사파리를 주로 쓰고, 회사에서는 업무용으로 크롬을 주로 쓰고있는데, 회사에서 작성한 포스트를 집에서 확인해볼 때 문제가 나왔던 것이었다.

서버를 좀 들여다보니, 업로드한 파일들이 똑같이 스크린샷 어쩌구란 이름으로 나오지만 정열되는 순서가 다르다. 즉 화면에는 스크린샷이라고 동일하게 보이지만, 사파리에서 업로드한 파일들은 알파벳 뒤에, 크롬에서 업로드한 파일들은 알파벳 앞에 나온다. 동일하게 보이지만 다른 파일인 것이다.

두 그룹으로 나뉜 스크린샷 파일들

추측해보건데 사파리에서는 맥의 파일시스템의 이름을 그대로 업로드하여 저장하는 것 같다. 맥에서는 풀어쓰기 방식의 유니코드를 사용하는데 (이름은 잘 기억이..) 이것이 그대로 Linux 서버에 저장되는 듯 싶다. 크롬에서는 UTF-8 변환을 하여 한글을 저장하는 것 같고..

풀어쓰기 형태로 저장된 스크린샷과 모아쓰기 형태로 저장된 스크린샷이 화면상에는 동일하게 보이지만 unicode가 달라서 정열되는 순서가 다르다.

왜 다르게 저장되는지 분석을 해보려다 이건 내가 할 일이 아닌것 같아서 한글 이름을 변환해서 업로드 해 주는 플러그인을 쓰기로 했다. uploading downloading non-latin filename 이라는 플러그인인데, 깔끔하고 괜찮다. 설치하고 활성화해 두기만 하면 한글이 들어간 이미지를 업로드할 때 자동으로 숫자로 된 파일로 바꿔준다.

아래 첨부 이미지는 크롬브라우저에서 업로드한 이미지 파일이다. 사파리에서는 안보이는데 다른 브라우저에서는 보인다.

시스템 환경설정

여튼 희안하다. 왜 이런건지 누가 좀… 사파리 설정 문젠가?? -_-

SSH 비밀번호 없이 접속하기 (ssh-keygen)

호스팅 서버 작업을 ssh로 한다거나, 특정 서버에 ssh를 통해 자주 접속하는 경우 비밀번호를 매 번 입력하는 것은 귀찮은 일이다. scp 커맨드로 파일들을 여럿 복사한다거나 한다면 더더욱 그렇다. 또 중간에 비밀번호를 물어보면 쉘 스크립트 안에 넣을 수 없기 때문에 불편하기도 하다.

그런데 key 교환을 미리 해 두어 비밀번호 입력을 건너뛰는 방법이 있다. ssh 클라이언트의 public key를 서버에 authorized_keys 라는 파일에 미리 기록해두면 동작한다.

먼저 클라이언트에 key 파일이 존재하는지 확인한다. ~/.ssh/ 디렉토리에 id_rsa 라는 파일이 있다면 이미 키는 존재하는 것이므로 아래 과정은 건너뛴다. 없다면 다음과 같이 ssh-keygen 커맨드를 통해서 key를 생성해준다.

imac:~ cky$ ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/cky/.ssh/id_rsa): <그냥 엔터>
Enter passphrase (empty for no passphrase): <그냥 엔터>
Enter same passphrase again: <그냥 엔터>
Your identification has been saved in /Users/cky/.ssh/id_rsa.
Your public key has been saved in /Users/cky/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:cwHYDEvfZW8SL1tAr4HsX3XWkukhQBrdjPYRbkq+eC0 cky@imac.local
The key's randomart image is:
+---[RSA 2048]----+
|      o=ooo=B.   |
|     ..oo*+*+* o.|
|      . o.*.B.@ =|
|         + +.@ =.|
|        S = o o  |
|         + + .   |
|        . E o    |
|         . .     |
|                 |
+----[SHA256]-----+

다음으로 서버에 public key를 넣어준다. 서버에 접속한 후 ~/.ssh/ 디렉토리에 authorized_keys라는 파일이 있는지 찾는다. 해당 파일에 클라이언트의 id_rsa.pub 파일 내용을 넣어주면 된다. 아래와 같은 형식으로 저장이 되면 된다.

host:.ssh cky$ cat authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC9PGkVPrUxg59mw2wwOuePjnhx3Xu09iqyTPvpKlcxI43osWE1DwxwLcHdxZn7hbWU48yIF2qguI15RXucYuoy+gzmnN5b2L5T9vUxSYzwGTicgpU3JJImjvRDpdakqtqdodjXFtJEruvZ81BcKbL3F9TMC6+onaQf2DtZaIVZqDOsEHL4pUeAl7hMtDoAakYmUGPysQWjnVFNdkjfei3jiojMUrED6GeqG1SOv1etQM9qDDRX+RR6CjNVsJhAHpmLDoAJdJD6p/s/c4CYK89Rc1mTccdwJO8zaJDe280Ylp7AjNvZkox1UhWOZT0KQfHCgT+Mj0e6u423XwN71ZeB cky@imac.local
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDQJW8NidufUidueieNoPvm1Z7iK1Yd595Yk90bvSYl775CJ/Dm1ejHxO/Fvs00lsKOgvYrTlCFA7eODYi5URFB/U3OUjfLFfstLekkk53DTx2Br2NUJPymc0MevroRwm0s17R+35uxqv8BD8aB/U7MFOooQQgh3QxyTcKTvMnzXLbjjhNsBZTbm/mUwoV63Snceg+XaEU476WP3M0XTRiIv1sQ1FO+3jO/R+V93X5WPrPRCMKavaTir+7DUFzcFH/ZOyAL82PV9vbJO4ox4Mq24DIwZio78UKwaVlNbssH+dHU8r8aVR2xvFVXYNs2pyFfmQTnbzaN8YVtbh86mHJL pi@raspberrypi
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC9ARQI5M7F05QWwt5flzIfhP7rkoeZgGgIDPWILKcDKFXHSn6YQ7pnpibds9twa0J0iXj5Rkn6JbIUwKKNF89IqLpusd8IufM/XblzoUpCGSwg8UETQvdEDyY4hYxBnlT+jGKxbf6TgQHUy0sG2B0ctDi4+eFhAfOSiMSAP2UF6BqVrNTOx2PD8WqR8EzpzONivQtE0d3Ob9ueHdhHY9G9Oug+JMMb8MbjfkeowuU89Mw/m4dr10DE6tksPKXb7k03dfXbu5mDXsCIr8+IM1B1gl27BSlvjG7AwTbPHXHORK9XYgodY3eo4WyEWU4cFBXwZFFMJv6gfnAIjcgZKOT7 root@raspberrypi

이제 다 되었다. 연결을 끊은 다음 다시 접속해보면 패스워드를 묻지 않고 바로 프롬프트가 뜬다. 🙂

라즈베리파이 모니터 없이 최소 설치

호스팅을 직접 라즈베리파이에 해 보면 어떨까 싶은 마음에 사용하지 않고있던 라즈베리파이2를 꺼내보았다. 웹 서버를 운용할 것이라서 데스크탑 환경은 필요가 없기 때문에 무작정 RASPBIAN JESSIE LITE 버전을 다운로드하여 MicroSD 카드에 이미지를 풀어냈다.

시행 착오 및 검색을 통해 부팅 전 다음과 같은 사항이 필요하다는 것을 알아냈다.

Raspberry Pi

고정 IP

모니터, 키보드는 연결하지 않을 것이므로 항상 동일한 IP를 갖도록 하는 것이 필요했다. boot 파티션에 보면 cmdline.txt 라는 파일이 있는데, 이를 열어 ip=xxx.xxx.xxx.xxx를 입력해주면 된다.

pi@raspberrypi:/boot $ cat cmdline.txt 
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes ip=10.0.1.100 rootwait

SSH enable

기본적으로 LITE 이미지는 ssh가 disable 되어있다. 이를 enable 하기 위해서는 boot 파티션에 ssh 라는 이름의 빈 파일을 넣어주면 된다. touch ssh 식으로 하나 만들어준다.

위와 같이 두가지 설정을 해 주면 ssh를 통해서 라즈베리파이에 접속할 수 있다. 기본 계정은 pi/raspberry 이다. 접속 후 패스워드를 변경해주고 apt-get update/upgrade를 먼저 해 둔다.

이제 APM을 설치하여 웹서버를 운용하면 된다.

라즈베리파이 키오스크(kiosk) 모드

광고판 같이 항상 화면을 보여주는 용도로 라즈베리파이를 사용하기 위해 이것 저것 찾아본 것을 정리한다. 정확히 내가 하려고 하는 것은 파이에 전원을 넣으면 웹페이지가 풀스크린으로 뜨는 것, 그리고 이것이 유지되는 것이다.

기존에는 라즈베리파이에 midori 브라우저가 들어가있었는데, 최근에 epiphany 브라우저로 교체되었다. 그래서 처음에는 epiphany 브라우저를 사용해보려고 부단히 노력을 해 봤는데, 깔끔하게 처리할 수 있는 방법이 없었다. 실행 자체는 문제가 없으나 full screen 모드로 실행하는게 쉽지 않았다.

다른 방법으로 chromium을 설치하여 사용하는 것이다. 라즈베리파이용으로도 chromium 브라우저가 개발되어있어서 apt-get install chromium 커맨드로 간단하게 설치가 된다.

여기를 보면 chromium을 어떻게 실행하는지 잘 설명이 되어있다. 간단하게 정리하면 다음과 같다.

/etc/xdg/lxsession/LXDE-pi/autostart 파일을 열고 screensaver 항목은 코멘트 처리한다. (앞에 #을 붙인다.) LXDE 디렉토리가 아니고 LXDE-pi 디렉토리이다.

아래 라인들을 추가한다.

@xset s off
@xset -dpms
@xset s noblank

@sed -i 's/"exited_cleanly": false/"exited_cleanly": true/' ~/.config/chromium/Default/Preferences

@chromium --noerrdialogs --kiosk http://www.page-to.display --incognito

저장 후 재부팅해보면 full screen 브라우저 화면이 화면에 뜨는 것을 볼 수 있다.

TV의 USB 포트에 라즈베리 파이 전원을 연결하면, TV를 켰을 때 라즈베리파이가 같이 켜지고 TV를 끄면 라즈베리파이도 함께 꺼진다. 부팅하는데 시간이 좀 걸리긴 하지만 별로 문제가 되지 않으니까. 🙂

Time Capsule을 Linux에 mount 하는 방법

라즈베리파이를 사용하면서 자료들을 Time Capsule에 옮기고 싶을 때가 종종 있어서 방법을 찾아보니 역시나 방법이 있다.

Time Capsule은 Apple이 만든 장비이지만 Windows에서도 사용할 수 있도록 AFP뿐만 아니라 SAMBA도 함께 지원한다. AFP를 통해 연결하면 더 깔끔하겠지만, 현재 라즈베리파이에 올린 OSMC는 “Could not pick a matching UAM.” 라는 에러가 발생하여 마운트가 제대로 되지 않는다. afpfs-ng 라는 패키지를 libgcrypt-dev등을 설치한 후 빌드해 넣으면 마운트 가능함은 확인하였지만, 패키지기반으로 동작하는 플랫폼에 따로 빌드한 파일을 덮어쓰는 것이 왠지 꺼림직하여 SAMBA를 mount하는 방법을 찾아봤다.

SAMBA를 mount하려면 cifs를 이용하면 된다. 예전엔 smbfs라는것을 이용했었는데, 지금은 deprecated된 것 같고, 그냥 smbfs 대신에 cifs 이용하면 된다.

처음에 잘 안되어 검색을 많이 해 봤는데 결국은 sec=ntlm 옵션이 빠져서 Permission Denied가 발생하는 것이었다. 아래와 같이 입력해 주면 깔끔하게 마운트 된다.

$ sudo mount -o username=####,password=####,sec=ntlm,noexec //192.168.0.1/cky/ /media/timecapsule/