复古游戏库管理器RomM

在这里插入图片描述

什么是 RomM ?

RomM(代表 Rom Manager)是一个专注于复古游戏的游戏库管理器。通过 Web 浏览器管理和组织您的所有游戏。受 Jellyfin 的启发,允许您从现代界面管理所有游戏,同时使用 IGDB 元数据丰富它们。

RomM 支持的游戏库类型比较多,gbagbcswitch

在这里插入图片描述

但需要注意的是,如果你的群晖不支持科学上网 ,会导致扫描游戏库时无法结束,所以要在域名黑名单中加上 twitch.tv

在这里插入图片描述

如果群晖不具备科学上网的条件,就不用浪费时间了

前期准备

建数据库

RomM 支持 MariaDBSQLite 两种数据库,老苏原本想用群晖自带的 MariaDB 10 数据库,但运行时容器日志中会显示 CRITICAL: [ROMM] Not supported "mariadb" database

本文完成于 3 月底,现在是不是已经支持,老苏没再试,也许可以了,也许还是不行;

在这里插入图片描述

所以最后用了 SQLite,当然你用 MySQL 容器也是可以的

注册 IGDB

RomM 使用了互联网游戏数据库 ( IGDB ) 加载信息,为了使用其 API,必须要拥有一个 Twitch 帐户。

官方文档有注册的流程:https://api-docs.igdb.com/#account-creation

直接打开 https://dev.twitch.tv/login 注册免费账号,登录后需要在 https://www.twitch.tv/settings/security 中开启双重身份认证

在这里插入图片描述

手机上需要下载验证器应用,可以用 microsoftAuthenticator 或者 Authy

在这里插入图片描述

用生成的 6 位数字验证

在这里插入图片描述

要支持多种验证,否则一旦验证器不在身边,会比较麻烦

在这里插入图片描述

应用程序 --> 注册您的应用程序

在这里插入图片描述

随便填的,因为实际上用不到回调

在这里插入图片描述

进入 管理

在这里插入图片描述

记下 客户端 IDClient ID) 和 客户端密码Client Secret

在这里插入图片描述

安装

在群晖上以 Docker 方式安装。

在注册表中搜索 romm ,选择第一个 zurdi15/romm,版本选择 latest

本文最后折腾时, latest 版本对应为 1.8.4,本文发布时,最新版本为 1.9.1

在这里插入图片描述

docker 文件夹中,创建一个新文件夹 romm,并在其中建三个子文件夹 databaselibraryresources

文件夹装载路径说明
docker/romm/database/romm/database存放数据库
docker/romm/library/romm/library游戏库
docker/romm/resources/romm/resources封面

在这里插入图片描述

端口

本地端口不冲突就行,不确定的话可以用命令查一下

# 查看端口占用
netstat -tunlp | grep 端口号
本地端口容器端口
303880

在这里插入图片描述

环境

可变
ROMM_DB_DRIVER数据库类型可以是 sqlite 或者 mariadb
CLIENT_IDIGDB 申请的 Client ID
CLIENT_SECRETIGDB 申请的 Client Secret
STEAMGRIDDB_API_KEY默认设为 WIP,应该还没启用

在这里插入图片描述

更多的环境变量,可以参考官方的样例:https://github.com/zurdi15/romm/blob/master/examples/docker-compose.example.yml

命令行安装

如果你熟悉命令行,可能用 docker cli 更快捷

# 新建文件夹 romm 和 子目录
mkdir -p /volume2/docker/romm/{database,library,resources}# 进入 romm 目录
cd /volume2/docker/romm# 运行容器
docker run -d \--restart unless-stopped \--name romm \-p 3038:80 \-v $(pwd)/library:/romm/library \-v $(pwd)/database:/romm/database \-v $(pwd)/resources:/romm/resources \-e ROMM_DB_DRIVER=sqlite \-e CLIENT_ID=<你的 Client ID> \-e CLIENT_SECRET=<你的 Client Secret> \-e STEAMGRIDDB_API_KEY=WIP \zurdi15/romm:latest

也可以用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件

zurdi15/romm:latest 对应的版本是 1.3

version: '3'services:romm:image: zurdi15/romm:latestcontainer_name: rommrestart: "unless-stopped"volumes:- ./library:/romm/library- ./database:/romm/database- ./resources:/romm/resourcesports:- 3038:80environment:- ROMM_DB_DRIVER=sqlite- CLIENT_ID=<你的 Client ID>- CLIENT_SECRET=<你的 Client Secret>- STEAMGRIDDB_API_KEY=WIP

然后执行下面的命令

# 新建文件夹 romm 和 子目录
mkdir -p /volume2/docker/romm/{database,library,resources}# 进入 romm 目录
cd /volume2/docker/romm# 将 docker-compose.yml 放入当前目录# 一键启动
docker-compose up -d

运行

在浏览器中输入 http://群晖IP:3038 就能看到主界面

在这里插入图片描述

上传游戏库

老苏在:http://www.gbarom.cn 随便下了几个,用于测试

游戏库的结构是有要求的,因为还不支持从网页上传,所以需要在 File Station 中自行上传。

RomM目前支持两种不同的文件夹结构,首先会尝试查找 结构 1,如果不存在,将尝试查找 结构 2

  • 结构 1(高优先级)- 库文件夹根目录下的 roms 文件夹:
library/
├─ roms/├─ gbc/│  ├─ rom_1.gbc│  ├─ rom_2.gbc│├─ gba/│  ├─ rom_1.gba│  ├─ rom_2.gba│ ├─ ps/├─ my_multifile_game/│   ├─ my_game_cd1.iso│   ├─ my_game_cd2.iso│├─ rom_1.iso
  • 结构 2(低优先级)- 每个平台文件夹内的 roms 文件夹
library/
├─ gbc/
│  ├─ roms/
│     ├─ rom_1.gbc
│     ├─ rom_2.gbc
|
├─ gba/
│  ├─ roms/
│     ├─ rom_1.gba
│     ├─ rom_2.gba
|
├─ ps/
│  ├─ roms/
│     ├─ my_multifile_game/
│     │  ├─ my_game_cd1.iso
│     │  ├─ my_game_cd2.iso
│     │
│     ├─ rom_1.iso

老苏采用的是 结构 1

在这里插入图片描述

开始扫描

在这里插入图片描述

扫描完成后会有提示

在这里插入图片描述

理论上会有封面,但是可能老苏下载的 rom 是修改过的吧

目前的版本还不支持自定义游戏封面

在这里插入图片描述

可以直接下载

在这里插入图片描述

添加 rom 后需要重新 scan

在这里插入图片描述

点标题,会显示详情

在这里插入图片描述

还可以编辑

在这里插入图片描述

参考文档

zurdi15/romm: RomM (Rom Manager) is a web based retro roms manager integrated with IGDB.
地址:https://github.com/zurdi15/romm

RomM - Retro games library manager : selfhosted
地址:https://www.reddit.com/r/selfhosted/comments/123syuc/romm_retro_games_library_manager/

[Other] error bind mount using example compose file · Issue #35 · zurdi15/romm
地址:https://github.com/zurdi15/romm/issues/35

超级马里奥乐园1:DX - 掌机迷 - GBC游戏下载_GBC游戏攻略
地址:http://www.gbarom.cn/gbc/50497.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/33400.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习:隐马尔可夫模型(HMM)

后续会回来补充代码 1 隐马尔可夫模型 隐马尔可夫模型(Hidden Markov Model,HMM)是可用于标注问题的统计学模型&#xff0c;描述由隐藏的马尔可夫链随机生成观测序列的过程。 1.1 数学定义 隐马尔可夫模型是关于时序的概率模型&#xff0c;描述由一个隐藏的马尔可夫链随机生成…

Hbase-面试题

1. Hbase-region切分 自动切分&#xff0c;默认情况下 2.0版本&#xff0c;第一次region的数据达到256M&#xff0c;会进行切分&#xff0c;以后就是每达到10G切分一次&#xff0c;切分完成后&#xff0c;会进行负载均衡&#xff0c;均衡到其他regionserver预分区自定义rowke…

数据治理-组织变革

为什么要有组织变革 组织变更的原因是&#xff0c;数据管理&#xff0c;对大多数企业而言&#xff0c;意味着原有的思维理念、工作模式、写作方式和信息技术的改变。这些改变无法依赖单纯的技术创新优化实现&#xff0c;而是通过组织管理的变更来实现。 数据管理成功实践的机制…

二叉树的完全性检验

给定一个二叉树的 root &#xff0c;确定它是否是一个 完全二叉树 。 在一个 完全二叉树 中&#xff0c;除了最后一个关卡外&#xff0c;所有关卡都是完全被填满的&#xff0c;并且最后一个关卡中的所有节点都是尽可能靠左的。它可以包含 1 到 2h 节点之间的最后一级 h 。 示…

【算法挨揍日记】day02——双指针算法_快乐数、盛最多水的容器

202. 快乐数 202. 快乐数https://leetcode.cn/problems/happy-number/ 题目&#xff1a; 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为&#xff1a; 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个…

【C#】获取已安装的应用名称、启动路径、安装位置、产品代码、卸载字符串等

代码 /// <summary>/// Windows信息/// </summary>public partial class WindowsInfo{private static List<AppInfo> GetInstalledAppInfos(){List<AppInfo> appInfos new List<AppInfo>();string SameApp "";void AddApp(RegistryK…

宋浩高等数学笔记(十一)曲线积分与曲面积分

个人认为同济高数乃至数学一中最烧脑的一章。。。重点在于计算方式的掌握&#xff0c;如果理解不了可以暂时不强求&#xff0c;背熟积分公式即可。此外本贴暂时忽略两类曲面积分之间的联系&#xff0c;以及高斯公式的相关内容&#xff0c;日后会尽快更新&#xff0c;争取高效率…

PHP 之房贷计算器、组合贷

一、等额本金 // &#xff08;等额本金&#xff09; //$loanAmount>贷款金额 //$loanPeriod>贷款年限 //$interestRate>贷款利息 function calculateEqualPrincipalPayment($loanAmount, $loanPeriod, $interestRate) {$monthlyPrincipal $loanAmount / ($loanPerio…

【数据结构】二叉树常见题目

文章目录 前言二叉树概念满二叉树完全二叉树二叉搜索树(二叉排序树)平衡⼆叉搜索树存储⽅式 二叉树OJ二叉树创建字符串二叉树的分层遍历1二叉树的分层遍历2给定一个二叉树, 找到该树中两个指定节点的最近公共祖先二叉树搜索树转换成排序双向链表二叉树展开为链表根据一棵树的前…

Linux(centos7)无nc命令

起因 网上傻x特别多&#xff0c;下个东西要积分&#xff0c;直接分享一波 rpm包 https://www.123pan.com/s/lUl7Vv-0Qvl3.html提取码:PD1J 安装命令 rpm -ivh nc-1.84-24.el6.x86_64.rpm

MATLAB——使用建立好的神经网络进行分类程序

学习目标&#xff1a;使用建立好的神经网络&#xff08;训练好并保存&#xff0c;下次直接调用该神经网络&#xff09;进行分类 clear all; close all; P[-0.4 -0.4 0.5 -0.2 -0.7;-0.6 0.6 -0.4 0.3 0.8]; %输入向量 T[1 1 0 0 1]; …

山东布谷科技直播系统源码热点分析:不同芯片实现高质量编码与渲染视频的GPU加速功能

在现代科技的迅猛发展下&#xff0c;直播系统源码平台被开发搭建出来&#xff0c;为人们的生活方式带来了很大的改变&#xff0c;直播系统源码平台的好友、短视频、直播、社区等功能让很多人越来越热衷于去在平台上刷视频、看直播、分享生活。用户的喜爱也督促了直播系统源码平…

nodejs+vue+elementui小区物业管理系统_78ahx

课题主要分为四大模块&#xff1a;即管理员模块&#xff0c;物业管理模块、业主模块和维修员模块&#xff0c;主要功能包括&#xff1a;个人中心、物业管理、业主管理、维修员管理、小区公告管理、小区信息管理、房产信息管理、车位信息管理、停车位管理、停车信息管理、缴费信…

Grafana技术文档--基本安装-docker安装并挂载数据卷-《十分钟搭建》-附带监控服务器

阿丹&#xff1a; Prometheus技术文档--基本安装-docker安装并挂载数据卷-《十分钟搭建》_一单成的博客-CSDN博客 在正确安装了Prometheus之后开始使用并安装Grafana作为Prometheus的仪表盘。 一、拉取镜像 搜索可拉取版本 docker search Grafana拉取镜像 docker pull gra…

RabbitMQ:可靠消息传递的强大消息中间件

消息中间件在现代分布式系统中起着关键作用&#xff0c;它们提供了一种可靠且高效的方法来进行异步通信和解耦。在这篇博客中&#xff0c;我们将重点介绍 RabbitMQ&#xff0c;一个广泛使用的开源消息中间件。我们将深入探讨 RabbitMQ 的特性、工作原理以及如何在应用程序中使用…

SSL账号申请及配置

摘自个人印象笔记https://app.yinxiang.com/fx/db244155-c858-4d8a-93a8-08071d168dc8ssl申请平台&#xff1a;https://blog.freessl.cn/ ajian51168qq.com … 操作说明&#xff1a;https://blog.freessl.cn/acme-quick-start/ nginx配置&#xff1a; upstream local_tomcat{s…

【Linux】批量恢复文件权限

批量恢复文件权限 Linux 中&#xff0c;如果意外误操作将根目录目录权限批量设置&#xff0c;比如 chmod -R 777 / &#xff0c;系统中的大部分服务以及命令将无法使用&#xff0c;这时候可以通过系统自带的 getfacl 命令来拷贝和还原系统权限&#xff0c;若是其他系统目录被误…

移动端APP测试常见面试题精析

现在面试测试职位&#xff0c;要求非常全面&#xff0c;那么APP测试一般需要哪些技术呢&#xff1f;下面总结了APP测试常见面试题&#xff1a; 1.Android四大组件? Activity:描述UI&#xff0c;并且处理用户与机器屏幕的交互。应用程序中&#xff0c;一个Activity就相当于手…

Python-OpenCV中的图像处理-霍夫变换

Python-OpenCV中的图像处理-霍夫变换 霍夫变换霍夫直线变换霍夫圆环变换 霍夫变换 霍夫(Hough)变换在检测各种形状的技术中非常流行&#xff0c;如果要检测的形状可以用数学表达式描述&#xff0c;就可以是使用霍夫变换检测它。即使要检测的形状存在一点破坏或者扭曲也是可以使…

使用dom4j将xml转为String并去掉所有格式

文章目录 功能描述实现代码 功能描述 有以下xml内容&#xff0c;需要转成String字符串。同时&#xff0c;要去掉文中所有格式。 <root><student><name>张三</name><sex>男</sex><age>16</age><class>1班</class>…