개요
Batocera는 여러 기종의 에뮬레이션을 통해 에뮬 게임을 즐길 수 있게 해주는 게임용 Linux입니다. x86 PC뿐만이 아니라 ARM계열의 여러 보드에까지 설치할 수 있는데, 그 중 라즈베리파이도 해당됩니다.
이 글에선 라즈베리파이에 Batocera를 설치해 구동해 볼 예정입니다.
인터넷에서 쉽게 볼 수 있는 가이드는, SSD/HDD를 라즈베리파이에 외장으로 연결하고 Batocera에서 SMB를 열어 롬파일을 집어넣는 방식인데, 이 글에서는 이와 다르게 롬파일을 TrueNAS에 저장하고, 네트워크 공유를 통해 Batocera에서 게임을 실행할 수 있도록 해보겠습니다.
Batocera 다운로드
Batocera 공식 홈페이지의 Download를 클릭하면 각 기종에 맞는 이미지를 다운로드 받을 수 있습니다.
제가 가진 기종은 라즈베리파이4B 이므로, 해당하는 이미지를 다운로드 받아보겠습니다.
다운로드가 완료되면 압축을 해제하고 img파일 Raspberry Pi Imager나 Rufus를 이용해 SD카드에 이미지 쓰기를 진행하신 후, 라즈베리파이에 꽃아 부팅하시면 됩니다.
TrueNAS Dataset 준비하기
Dataset 생성하기
Batocera에서 롬파일을 읽을 저장소를 생성하고 사용할 계정의 권한 설정, SMB Share를 설정해 둡니다.
2TB 한방팩 이미지 풀기(선택)
저는 2Dai4채널에서 구할 수 있는 2TB 이미지를 사용할 예정입니다.
직접 롬파일을 다운로드받아 복사해두실거면 이 과정은 필요없습니다.
제가 가진 파일명은 아래와 같습니다.
이 파일은 img파일로 되어 있는데 내부엔 2개의 파티션(부팅파티션 + 게임파티션)으로 이루어져 있어, 바로 물리디스크에 구워 사용하게 되어 있습니다..만, 저는 롬파일만 빼낼 예정이므로 게임파티션만 마운트하겠습니다.
img파일이 위치한 경로까지 진입한 뒤 아래와 같이 입력합니다.
losetup -Pf ./2Dai4_2TB_Pc_BobbyCera_PureRetro.img
별 반응 없이 다시 쉘로 돌아올텐데 lsblk결과 최상단을 보면 loop디바이스가 생성된 것을 볼 수 있습니다.
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 1.8T 0 loop
├─loop0p1 259:0 0 6G 0 part
└─loop0p2 259:1 0 1.8T 0 part
이 중에서 userdata파티션인 loop0p2파티션을 마운트 해야 합니다.
저는 쉘에서 별도의 설정 없이, Dataset 안에 임의의 마운트 폴더 test를 만들었습니다.
cd ..
mkdir test
이후 loop0p2 디바이스를 마운트합니다.
mount /dev/loop0p2 ./test
그리고 폴더 내부 내용물을 확인해 보겠습니다.
ls -lah ./test
total 529K
drwxr-xr-x 17 1000 1000 4.0K Apr 19 2023 .
drwxr-xr-x 4 root root 4 Mar 21 22:26 ..
-rw-r--r-- 1 root root 4.0K Apr 19 2023 FNT0816.TMP
-rw-r--r-- 1 root root 299K Apr 19 2023 FNT1616.TMP
drwxr-xr-x 2 root root 4.0K Feb 10 2023 Paks
drwxr-xr-x 20 root root 12K Apr 21 2023 bios
drwxr-xr-x 4 root root 4.0K Mar 26 2023 cheats
drwxr-xr-x 3 root root 4.0K Feb 11 2023 decorations
drwxr-xr-x 2 root root 4.0K Feb 7 2023 extractions
drwxr-xr-x 5 root root 4.0K Feb 7 2023 kodi
drwxr-xr-x 2 root root 4.0K Feb 7 2023 library
drwx------ 2 root root 16K Oct 28 2022 lost+found
drwxr-xr-x 2 root root 4.0K Apr 20 2023 music
-rw------- 1 root root 4.6K Mar 23 2023 nohup.out
drwxr-xr-x 203 root root 4.0K Apr 21 2023 roms
drwxr-xr-x 88 root root 4.0K Apr 19 2023 saves
drwxr-xr-x 3 root root 4.0K Apr 19 2023 screenshots
drwxr-xr-x 3 root root 4.0K Apr 20 2023 splash
drwxr-xr-x 17 root root 4.0K Apr 21 2023 system
drwxr-xr-x 13 root root 4.0K Apr 20 2023 themes
-rw-r--r-- 1 root root 131K Mar 24 2023 xenia.log
잘 마운트 된 것을 확인할 수 있습니다.
이제 전체를 미리 만들어둔 Batocera용 Dataset에 복사하면 됩니다.
cp -r ./* /mnt/games/batocera/
복사 진행상황을 확인하고 싶다면 ‘-r’ 옵션 자리에 ‘-rv’로 v를 하나 추가해 주시면 됩니다.
그러면 아래처럼 파일들이 복사되기 시작하는 것을 확인할 수 있습니다.
용량이 2TB다보니… 꽤 오래 걸립니다. 풀 자체도 2TB 하드디스크 한 개만을 사용해서 만들었다보니.. 최대 속도에 제한이 심합니다.
복사가 모두 완료되면 다음 단계로 진행해주시면 됩니다.
Batocera에 TrueNAS 저장소 마운트하기
Batocera IP주소 찾기
Batocera를 부팅하면, 로딩 이후 밋밋한 기본 테마가 반겨줍니다.
Batocera에서 원격 저장소를 마운트하기 위해서는 SSH로 작업하는 것이 편합니다.
그러기 위해서 Batocera에게 할당된 IP주소를 알아야 하겠죠?
개인 환경의 라우터단에서 확인하는 방법도 있고, Batocera내부에서 확인하려면
아래와 같이 Menu->Network Settings에서 확인할 수도 있습니다.
Batocera SSH 접속하기
IP주소를 알았다면, SSH로 접근합니다.
Batocera는 기본적으로 SSH 서비스가 열려있기 때문에, 별도 설정은 필요없고, 기본 접속ID는 아래와 같습니다.
ID : root
PW : linux
접속하면 위와 같이 시스템 정보와 현재 출력 해상도까지 확인할 수 있습니다(포스트를 위해 별도 VM으로 작성하고 있어서 EPYC프로세서가 출력됩니다).
폴더 구조를 확인해보면,
[root@BATOCERA /userdata/system]# cd ..
[root@BATOCERA /userdata]# ls -lah
total 72K
drwxr-xr-x 16 root root 4.0K Mar 22 03:51 .
drwxr-xr-x 1 root root 220 Mar 26 03:49 ..
drwxr-xr-x 15 root root 4.0K Mar 26 03:47 bios
drwxr-xr-x 2 root root 4.0K Mar 22 03:51 cheats
drwxr-xr-x 2 root root 4.0K Mar 22 03:51 decorations
drwxr-xr-x 2 root root 4.0K Mar 22 03:51 extractions
drwxr-xr-x 5 root root 4.0K Mar 22 03:51 kodi
drwxr-xr-x 2 root root 4.0K Mar 22 03:51 library
drwx------ 2 root root 16K Mar 4 16:04 lost+found
drwxr-xr-x 2 root root 4.0K Mar 22 03:51 music
drwxr-xr-x 204 root root 4.0K Mar 22 03:51 roms
drwxr-xr-x 4 root root 4.0K Mar 26 03:49 saves
drwxr-xr-x 2 root root 4.0K Mar 22 03:51 screenshots
drwxr-xr-x 2 root root 4.0K Mar 22 03:51 splash
drwxr-xr-x 13 root root 4.0K Mar 26 03:49 system
drwxr-xr-x 2 root root 4.0K Mar 22 03:51 themes
앞서 TrueNAS에 옮긴 loop0p2 파티션과 폴더 구조가 동일한 것을 확인할 수가 있습니다.
즉 loop0p2 파티션의 내용물이 userdata파티션이고, 이 파티션 안에 롬파일과 메인화면에서 재생될 음악, 에뮬레이터의 BIOS파일, 치트코드 등이 전부 저장되는 겁니다.
우리는 이 부분을 모두 TrueNAS에 저장하고 라즈베리파이는 저장된 파일들을 네트워크로 읽어오기만 하는 구조가 됩니다.
batocera-boot.conf 수정하기
우선, 부팅 시 SMB폴더를 마운트하도록 하는 설정은 /boot/batocera-boot.conf에서 설정할 수 있습니다.
그러나 바로 nano /boot/batocera-boot.conf로 접근하면 아래처럼 쓰기 불가상태입니다.
부팅 파티션이 읽기 전용으로 마운트되어 있기 때문이며, 공식 위키를 참고해 아래처럼 명령어를 입력해 쓰기 가능으로 마운트 한 다음, conf파일을 수정해보겠습니다.
mount -o remount,rw /boot
nano /boot/batocera-boot.conf
이 내용은 공식 위키 문서에서도 찾을 수 있습니다.
11행의 sharedevice=INTERNAL을 NETWORK로 수정합니다.
그리고 아래에 아래의 규칙에 맞춰 한 줄을 입력해 줍니다.
sharenetwork_smb1=SHARE@[TrueNAS IP주소]:[SMB공유명]:username=[TrueNAS ID],password=[TrueNAS PW]
SMB공유명은 TrueNAS에서 정한 SMB Share이름을 적어주시면 됩니다. 이 경우 batocera가 됩니다.
임의의 값으로 예시를 들면 아래와 같습니다.
sharenetwork_smb1=SHARE@10.10.10.10:batocera:username=username,password=123456
완료 후 문서를 닫고 재부팅을 해 줍니다.
그러면 아래와 같이 테마까지 완벽하게 적용된 Batocera를 확인할 수 있습니다.
이렇게까지 해야 하나요!?
물론, 그냥 외장HDD 혹은 SSD, USB메모리 등을 이용해서 구성해도 됩니다.
그러나, 이 글과 같은 방식으로 저장소를 구성할 경우의 장점이 몇 가지 있습니다(단점도…).
장점1. 라즈베리파이가 가벼워진다
기본적으로 라즈베리파이에 외장 저장소를 연결하면 몸집이 커집니다. NESPi 케이스 등을 이용해서 이쁘게 커버하면서 인테리어 소품용으로 사용하는 방법도 있겠지만, 몸집이 커지는 걸 막을 순 없습니다. 3.5인치 외장 하드디스크를 이용하기라도 한다면 추가 전원 어댑터까지 필요해집니다.
반면, 이 글처럼 구성하고, 전원은 POE로, 엑박패드는 블루투스(혹은 리시버)를 이용해 연결하면, 라즈베리파이에 주렁주렁 달린 게 없으니, 일단 가벼워집니다. 그래서 어딘가에 숨겨놓기도 좋아지죠.
장점2. 셋팅 복구가 쉽다
Batocera가 수많은 플랫폼을 지원하지만, 실제로 안을 들여다보면 각 플랫폼 별로 커널 버전이 다릅니다. 그래서인지 몰라도, 레딧 등을 검색해보면 어떤 플랫폼에선 문제 없던 셋팅이 다른 플랫폼에선 문제가 되는 경우가 있는 것 같습니다.
이 셋팅들을 직접 conf파일을 수정해서 건드리다보면, 아예 초기 환경으로 원상복구를 하거나, 수정 바로 전으로 돌려야 할 상황이 발생할텐데, 외장HDD 등에 직접 파일을 넣어서 사용하는 환경이라면 이 복구가 쉽지 않습니다(혹은 귀찮습니다). 머리 속에 남아있는 수정사항을 토대로 직접 수정 전으로 돌리던가, PC에 가져와 다시 처음부터 이미지를 입히던가 해야되는데, TrueNAS를 이용한다면, 스냅샷을 생성했다가 그대로 되돌리면 됩니다. 너무 편하죠.
장점3. 이미지 교체가 쉽다
이 글에서 사용한 이미지 말고도 해당 유튜브 채널을 보면 몇 가지 이미지 파일이 더 있는 것으로 보입니다. 저장소 용량만 충분하다면 각 이미지마다 스냅샷을 생성하고 Dataset으로 Clone한 뒤, 각각 SMB Share로 설정해주면, 크게 용량을 먹지 않고 이미지 상태별로 공유해줄 수 있습니다. 이미지를 교체해야 할 경우 /boot/batocera-conf에서 SMB공유명만 변경해주면 됩니다.
단점1. 초보지향적이지 않음
물론, 단점도 있습니다. 리눅스에 익숙치 않으면 이 과정이 어려울 수 있습니다. SD카드를 윈도우에서 바로 읽어서 conf파일을 수정하는 방법도 있는데, 아무래도 SD카드를 여기저기 옮겨야 한다는 점과, Notepad나 Wordpad를 사용하면 conf파일이 깨져버린다는 점에서, 조금 손이 가는 것은 사실입니다. 근데, TrueNAS를 이용하고 있을 정도면 SSH정도는 장벽이 되지 못할 것 같긴 합니다.
단점2. 네트워크 연결이 필수조건임
TrueNAS에 모든 데이터가 들어있으니, 랜선 연결이 안되어 있으면 게임을 즐길 수 없습니다.
인터넷과 상관없이 즐길 수 있는 것이 레트로 게임인데, 랜선이 뽑혀있으면 즐길 수 없는 것은.. 컨셉 상 단점이 될 수 있겠네요(C타입 전원과 무선 연결을 활용할 수도 있음).
마무리
원래 제가 가진 라즈베리파이4는 PiKVM을 위한 것이었습니다…만, 알리익스프레스에서 필요한 부품 몇 가지를 사서 구동시켜본 결과, 제가 가지고 있는 KVM스위치(ATEN CS1716A)와 호환이 되지 않는 것을 발견했습니다.
우선 PC에 바로 연결하면 PC를 제어할 수 있었으나, KVM스위치에 연결하면 키보드와 마우스 모두 먹통이었습니다. KVM스위치가 너무 구형이면(PS/2전용이면) PiKVM이 입력장치를 USB로 에뮬레이션 하는 것과 맞지 않아 라즈베리파이 피코를 구매하여 가이드대로 구성하자, KVM스위치 상에서도 PC는 제어할 수 있었으나, 핫키 전환을 할 수 없었습니다. 해당기능까지 사용하려면 PS/2 젠더(수)를 사서 PICO의 GPIO에 논리레벨 변환기와 함께 납땜을 해야 한다더군요. 납땜에서 GG치고 포기하는 바람에.. 남게 된 라즈베리파이를 어떻게 이용할까 하다가 해보게 된 작업입니다.
결과적으로, 제 예상보다 훨씬 빠르게 게임리스트를 읽어오고 롬파일을 실행하는 것을 보며 결과물에 꽤 만족했던 작업이기도 합니다. 게임기 앞에 외장HDD가져다 놓고 긁는 소리 듣는 것보다 이 편이 훨씬 낫다는 생각도 드네요.
추가적으로, 이 글의 제목은 레트로 게임을 키워드로 사용했지만, Batocera는 WINE을 이용해 윈도우 게임까지 돌릴 수 있기도 합니다(라즈베리파이는 힘들겠지만 x86기반에서는 가능). 환경에 맞게 꾸려보면 재밌게 이용할 수 있을 것 같습니다.
출처
1. 바토세라 공식 홈페이지
batocera.linux
Features Themes, Shaders, Bezels, Rewinding, RetroAchievements... and much more to discover!
batocera.org
2. 2Dai4 채널
2Dai4
A
www.youtube.com