Compare commits

...

880 Commits

Author SHA1 Message Date
github-actions[bot]
f8c4589f84 update 2025-12-14 20:50:12 2025-12-14 20:50:12 +08:00
github-actions[bot]
2883364df3 update 2025-12-14 20:20:35 2025-12-14 20:20:35 +08:00
Ing
cdcceea395 优化标签提取逻辑,移除版本前缀并统一处理,更新相关脚本和配置文件 2025-12-08 16:06:41 +08:00
Ing
ce9017bae1 添加 Docker Compose 配置示例以支持 RR 容器化部署 2025-11-30 00:36:39 +08:00
Ing
cfdf7cc3fc 优化环境变量设置逻辑,使用subprocess调用替代文件写入 2025-11-29 22:31:35 +08:00
Ing
9a4103f028 移除对qhxg.png的引用 2025-11-25 18:43:19 +08:00
Ing
15e88c0b38
Merge pull request #20774 from ksqeib/main
Improve VMID generation logic in pve.sh
2025-11-24 19:54:02 +08:00
ksqeib
2909e46732
Improve VMID generation logic in pve.sh
Refactor VMID assignment logic to handle empty last VMID.
2025-11-24 19:35:36 +08:00
Ing
8e7f50c2e5 添加对 7.3 版本的内核支持 2025-11-02 17:04:36 +08:00
Ing
6093ab1bd4 修复平台和内核版本检查逻辑,确保正确读取配置 2025-11-02 17:04:22 +08:00
Ing
2b0985d276 更新菜单和ramdisk补丁脚本,优化模块重写和依赖关系处理 2025-11-02 01:19:13 +08:00
Ing
e748c366f2 优化模块处理逻辑,支持从不同目录加载和安装模块 2025-11-02 01:18:31 +08:00
Ing
c59f446006 更新 VMDK 转换参数,使用 monolithicSparse 格式以优化磁盘映像生成 2025-10-15 14:11:29 +08:00
Ing
d39b0ada77 修复直接启动条件判断,支持在 Parallels 和 Xen 环境下正常工作 2025-10-09 01:38:51 +08:00
Ing
dbc819cdd8 更新 ovftool 下载链接至最新版本 4.6.3 2025-09-28 13:38:45 +08:00
github-actions[bot]
9e24063ad7 update 2025-09-27 16:02:34 2025-09-27 16:02:34 +08:00
github-actions[bot]
e71d074980 update 2025-09-27 15:29:00 2025-09-27 15:29:00 +08:00
Ing
3e59779554 更新工作流脚本,优化依赖安装步骤,确保环境准备更完整 2025-09-27 05:04:19 +08:00
github-actions[bot]
8a03b1de55 update 2025-09-27 04:22:11 2025-09-27 04:22:11 +08:00
github-actions[bot]
08909a6084 update 2025-09-27 03:59:22 2025-09-27 03:59:22 +08:00
Ing
6f7fd358d6 优化数据获取逻辑,添加下载失败重试机制 2025-09-27 03:37:18 +08:00
Ing
a1734d9a76 更新 menu.sh 脚本的条件判断,支持在无参数情况下执行 2025-09-26 23:23:18 +08:00
Ing
262559fa06 Refactor code structure for improved readability and maintainability 2025-09-26 18:00:44 +08:00
Ing
06823ae881 更新构建脚本,移除对 menu.sh 的依赖,直接调用相关函数 2025-09-26 17:26:43 +08:00
Ing
569c2506e0 添加对 NVIDIA GPU 的支持 2025-09-25 21:54:27 +08:00
Ing
4e986fe591 更新菜单脚本调用,修改重配置相关的函数名称 2025-09-25 21:54:18 +08:00
Ing
3ad6ba68a6 优化脚本,简化条件判断,移除不必要的 LOCALBUILD 检查 2025-09-24 14:02:44 +08:00
Ing
0c77bada57 删除 localbuild.sh 和 sourcebuild.sh 脚本,优化构建流程 2025-09-24 01:37:48 +08:00
Ing
03f2cea7f9 更新构建脚本 2025-09-24 00:37:13 +08:00
github-actions[bot]
cb56fa695d update 2025-09-24 00:22:28 2025-09-24 00:22:28 +08:00
github-actions[bot]
95235c314e update 2025-09-23 22:06:56 2025-09-23 22:06:56 +08:00
Ing
b2f7dac7ba Implement code changes to functionality 2025-09-23 22:03:53 +08:00
Ing
80d03e0e3c 添加 unpackInitrd 函数以解压 initrd 文件,支持多种压缩格式 2025-09-23 18:10:35 +08:00
Ing
4e5edb325a 优化模块处理逻辑,支持自定义路径并简化模块依赖获取 2025-09-23 12:56:13 +08:00
Ing
a51c5f7c27 更新 helper.sh 和 pve.sh 文件权限为可执行 2025-09-20 17:09:28 +08:00
github-actions[bot]
885c5e4a28 update 2025-09-20 10:40:37 2025-09-20 10:40:37 +08:00
github-actions[bot]
12fc9c218d update 2025-09-20 02:06:32 2025-09-20 02:06:32 +08:00
Ing
9dca1fe830 优化 boot.sh 和 init.sh,修复 MAC 地址获取逻辑,支持 Docker 环境 2025-09-20 02:03:46 +08:00
Ing
e8dc96a9b3 优化 pve.sh 脚本,修复 virtio9p 挂载标签设置逻辑 2025-09-19 15:01:22 +08:00
Ing
c939661a45 修复 menu.sh 中的变量引用错误 2025-09-18 22:07:13 +08:00
Ing
4884158996 优化 pve.sh 脚本,添加存储参数支持,改进存储获取逻辑 2025-09-18 14:03:55 +08:00
Ing
ef6ed60c46 优化 pve.sh 脚本,修复存储获取逻辑 2025-09-17 17:37:17 +08:00
Ing
2f02843dff 优化 boot.sh 和 functions.sh,修复设备检测逻辑,支持 Docker 环境 2025-09-17 12:59:52 +08:00
Ing
38caa773d7 优化 GitHub Actions 脚本,改进环境变量设置逻辑 2025-09-17 12:59:30 +08:00
Ing
59112312c6 优化 initDSMNetwork 函数,改进网络脚本处理逻辑 2025-09-17 12:56:35 +08:00
Ing
9710c33f35 Add online assistance option 2025-09-17 12:55:29 +08:00
Ing
32cfc2b257 优化 pve.sh 脚本,增加参数支持和错误处理,改进镜像下载和导入逻辑 2025-09-16 03:11:01 +08:00
Ing
c1de95e364 在 README.md 中新增 PVE 部分,提供通过 curl 安装 pve.sh 脚本的命令 2025-09-12 13:30:06 +08:00
Ing
db85e17b02 新增 pve.sh 脚本,支持创建和配置 Proxmox VE 虚拟机 2025-09-12 13:23:43 +08:00
github-actions[bot]
801c0396a3 update 2025-09-10 16:26:53 2025-09-10 16:26:53 +08:00
github-actions[bot]
cac93e6a5c update 2025-09-09 18:06:22 2025-09-09 18:06:22 +08:00
github-actions[bot]
5b5fbd501e update 2025-09-09 17:18:42 2025-09-09 17:18:42 +08:00
Ing
903c292e35 更新网络配置脚本,移除 ovs 和 bond 设置 2025-09-09 15:10:29 +08:00
github-actions[bot]
0c1b7d6a2e update 2025-09-07 18:27:01 2025-09-07 18:27:01 +08:00
github-actions[bot]
2ee5707a84 update 2025-09-07 15:34:18 2025-09-07 15:34:18 +08:00
Ing
5e8527e6ac 更新网络配置脚本,将 IPV6INIT 设置为 auto_dhcp 2025-09-07 14:45:19 +08:00
Ing
2c7c35b4a7 在模块列表中新增 drivetemp.ko 2025-09-07 11:05:36 +08:00
Ing
cdd30e0e5e 调整终端输出设置,确保在加载字体后正确输出到 gfxterm 2025-09-07 11:01:26 +08:00
Ing
34fb3e1968 在用户配置文件中默认添加显示器插件 2025-09-07 02:38:12 +08:00
Ing
1b191a4e2b 在模块列表中新增 scsi_debug.ko 2025-09-07 02:37:29 +08:00
Ing
c1fe7f7bfe 新增脚本以关闭双重验证和帐户保护功能 2025-09-07 02:35:27 +08:00
Ing
c850e8be28 修复菜单脚本中的域名顺序以确保正确解析 2025-09-07 02:34:51 +08:00
Ing
9c11315756 修复菜单脚本中的域名顺序以确保正确解析 2025-09-04 13:15:29 +08:00
github-actions[bot]
f2a34edeff update 2025-09-02 18:22:21 2025-09-02 18:22:21 +08:00
github-actions[bot]
3320be7a16 update 2025-09-02 17:43:25 2025-09-02 17:43:25 +08:00
Ing
efd1d3d291 优化 curl 命令,强制使用 HTTP/1.1 以提高兼容性 2025-08-27 11:36:14 +08:00
Ing
bd5e688f7e Refactor code structure for improved readability and maintainability 2025-08-22 21:25:38 +08:00
Ing
f90478e426 修复输出值的转义问题 2025-08-22 09:10:09 +08:00
github-actions[bot]
ac588eff6c update 2025-08-22 16:24:07 2025-08-22 16:24:07 +08:00
github-actions[bot]
6618efbe45 update 2025-08-22 15:49:38 2025-08-22 15:49:38 +08:00
Ing
506451071d 添加 Tips 功能,更新相关文件以支持提示信息的显示和存储 2025-08-22 10:45:26 +08:00
Ing
84d7425912 添加 GPT 和 LVM 模块以支持分区和逻辑卷管理 2025-08-22 10:44:57 +08:00
github-actions[bot]
6f1b3fc9e3 update 2025-08-22 10:27:35 2025-08-22 10:27:35 +08:00
Ing
5c9d6a4eae 优化样式,调整元素对齐和间距,更新产品和标签展示 2025-08-05 17:28:40 +08:00
github-actions[bot]
58fe6a7b13 update 2025-08-04 19:48:36 2025-08-04 19:48:36 +08:00
github-actions[bot]
b24e3ca9b4 update 2025-08-04 19:08:06 2025-08-04 19:08:06 +08:00
Ing
303369f24d 添加 DS1525+ 设备的序列号配置 2025-07-26 16:13:11 +08:00
github-actions[bot]
6eb65cc14e update 2025-07-23 18:56:18 2025-07-23 18:56:18 +08:00
github-actions[bot]
065eaa3b28 update 2025-07-23 18:17:49 2025-07-23 18:17:49 +08:00
Ing
576f65e416 添加网卡驱动信息和配置命令 2025-07-23 17:51:20 +08:00
Ing
cfdcc5aa22 更新提示信息,添加关于跳过 md5 检查的说明 2025-07-23 14:16:18 +08:00
Ing
bc1209954f 优化 getIP 函数中的 IP 地址获取顺序 2025-07-22 16:58:00 +08:00
github-actions[bot]
888eef390a update 2025-06-11 18:23:13 2025-06-11 18:23:13 +08:00
github-actions[bot]
749d8e467e update 2025-06-11 17:41:43 2025-06-11 17:41:43 +08:00
github-actions[bot]
8c70aa4aa1 update 2025-06-06 17:11:44 2025-06-06 17:11:44 +08:00
github-actions[bot]
0f72d932b4 update 2025-06-06 16:36:26 2025-06-06 16:36:26 +08:00
Ing
7bf872272b 优化 grub.cfg,调整终端输出设置并简化 gfxmode 函数调用 2025-06-06 16:13:09 +08:00
github-actions[bot]
cdf0e65f7e update 2025-06-04 21:03:18 2025-06-04 21:03:18 +08:00
github-actions[bot]
3ddced11e1 update 2025-06-04 20:32:32 2025-06-04 20:32:32 +08:00
Ing
709e2f87e9 添加 thunderbolt 和 thunderbolt-net 模块到 ramdisk 2025-06-04 19:03:20 +08:00
Ing
654df8c06e 更新 resetDSMPassword 函数以重置 SecureSignIn 配置 2025-06-04 16:27:54 +08:00
Ing
cea8720380 添加 DS1825+ 设备的序列号 2025-06-04 16:15:21 +08:00
Ing
7ef526dfa6 优化 findDSMRoot 和 fixDSMRootPart 函数以兼容 btrfs 2025-06-04 16:15:03 +08:00
github-actions[bot]
f9d09c2bf5 update 2025-06-03 01:31:36 2025-06-03 01:31:36 +08:00
github-actions[bot]
95635a893e update 2025-06-03 00:59:03 2025-06-03 00:59:03 +08:00
github-actions[bot]
ff0ba9b340 update 2025-06-02 22:43:40 2025-06-02 22:43:40 +08:00
github-actions[bot]
a4e770e999 update 2025-06-02 22:03:24 2025-06-02 22:03:24 +08:00
github-actions[bot]
7daa08afe0 update 2025-06-01 21:17:40 2025-06-01 21:17:40 +08:00
github-actions[bot]
a8c4754fc1 update 2025-06-01 20:49:10 2025-06-01 20:49:10 +08:00
Ing
c8bafb7ba2 将“检查互联网或缓存磁盘空间”修改为“检查互联网” 2025-06-01 20:25:16 +08:00
Ing
a78380f280 Add acpi_enforce_resources=lax parameter description to menu.sh 2025-06-01 19:29:09 +08:00
Ing
4264d08471 Add webhook notifications menu to bootloader settings 2025-06-01 08:49:56 +08:00
github-actions[bot]
6a6551d537 update 2025-05-29 23:40:13 2025-05-29 23:40:13 +08:00
github-actions[bot]
b0ed9d6bc3 update 2025-05-29 23:28:02 2025-05-29 23:28:02 +08:00
Ing
6e387e5e61 创建版本信息文件到备份目录 2025-05-29 22:13:02 +08:00
Ing
1a09dc6083 新增对 geminilakenk 和 r1000nk 平台的支持,更新相关条件和配置 2025-05-28 18:04:00 +08:00
Ing
f008216fec 更新下载链接 2025-05-27 07:45:32 +08:00
Ing
ce16910392 新增 geminilakenk 和 r1000nk 平台配置 2025-05-22 14:32:06 +08:00
github-actions[bot]
98a910edf1 update 2025-05-22 12:57:10 2025-05-22 12:57:10 +08:00
github-actions[bot]
b59def5b16 update 2025-05-22 12:23:41 2025-05-22 12:23:41 +08:00
Ing
d0e858e8e4 重构 addNewDSMUser 和 forceEnableDSMTelnetSSH 函数,改用脚本文件替代数据库任务插入,简化用户管理和服务启用流程 2025-05-21 21:32:57 +08:00
github-actions[bot]
c884e86575 update 2025-05-18 18:20:17 2025-05-18 18:20:17 +08:00
github-actions[bot]
b4006b110c update 2025-05-18 17:58:11 2025-05-18 17:58:11 +08:00
Ing
bf9d1ed086 修复 availableAddons 函数中的描述输出,确保无非法字符 2025-05-18 16:06:48 +08:00
github-actions[bot]
6b91aea9be update 2025-05-17 14:56:39 2025-05-17 14:56:39 +08:00
github-actions[bot]
28518c6f96 update 2025-05-17 14:25:06 2025-05-17 14:25:06 +08:00
Ing
52443fdc95 修复 initDSMNetwork 2025-05-17 14:22:16 +08:00
Ing
0ebbe93faf Fix addon menu display and message formatting 2025-05-17 11:40:30 +08:00
Ing
52fdae2210 修复 availableAddons 函数中的描述输出,确保无非法字符 2025-05-16 23:02:04 +08:00
Ing
1133fb0ba5 Fix RTNETLINK answers: Network is unreachable 2025-05-16 20:30:26 +08:00
Ing
0fde0b312b 优化 addons 和 modules 按钮的点击事件处理,支持传递参数并更新状态 2025-05-16 16:03:27 +08:00
Ing
6764629b97 为 VMware 环境只启动时同步一次时间 2025-05-16 15:41:28 +08:00
github-actions[bot]
16b6a486de update 2025-05-15 14:58:55 2025-05-15 14:58:55 +08:00
github-actions[bot]
f6260a1c99 update 2025-05-15 14:25:52 2025-05-15 14:25:52 +08:00
Ing
5bb1930a5a 修复 resizeImg 函数中的逻辑,确保在处理循环设备时使用正确的分区 2025-05-15 14:23:59 +08:00
Ing
22852b009a 修复 VMware 环境 tsc 不稳定导致的崩溃 2025-05-15 13:27:25 +08:00
Ing
87d690b92c 为 VMware 环境添加时间同步支持 2025-05-15 13:26:35 +08:00
Ing
723936afd8 修复脚本中输出重定向兼容性 2025-05-15 13:26:13 +08:00
Ing
798e03dfba 添加 debug 模式到 issues 2025-05-13 18:01:00 +08:00
Ing
a402fb700f 添加版本号到 issue body 2025-05-13 17:00:58 +08:00
github-actions[bot]
1b4ee3b623 update 2025-05-12 22:25:27 2025-05-12 22:25:27 +08:00
github-actions[bot]
89ed0fe0b3 update 2025-05-12 21:47:59 2025-05-12 21:47:59 +08:00
Ing
2a4eb4996d 修复 getpats4mv 函数中的 checksum 获取逻辑,确保在缺失时返回默认值 '0' * 32 2025-05-12 21:46:04 +08:00
github-actions[bot]
2ff44c4b1f update 2025-05-08 23:55:14 2025-05-08 23:55:14 +08:00
Ing
7304486e93 为 v1000nk 添加 show_autoupdatetype_notify 配置项 2025-05-08 23:34:28 +08:00
Ing
93740dc5b3 修复挂载命令以处理 blkid 返回值,确保使用默认文件系统类型 ext4 2025-05-08 23:04:40 +08:00
Ing
8a46e1196b 注释掉内存限制配置,避免影响 SSD 缓存创建 2025-05-08 22:31:28 +08:00
github-actions[bot]
060f85f09f update 2025-05-08 21:16:43 2025-05-08 21:16:43 +08:00
github-actions[bot]
a9f60961cd update 2025-05-08 20:48:57 2025-05-08 20:48:57 +08:00
Ing
7d5219ae72 添加模板选项到问题表单 2025-05-08 20:45:57 +08:00
Ing
eb7a015003 修复 MACS 设置错误 2025-05-08 20:25:58 +08:00
github-actions[bot]
ac99d1ea51 update 2025-05-08 15:24:38 2025-05-08 15:24:38 +08:00
github-actions[bot]
9b9f64e3a2 update 2025-05-08 14:48:49 2025-05-08 14:48:49 +08:00
Ing
b088ff7a14 优化命令检查,使用 type 替代 command -v 以提高兼容性 2025-05-08 13:09:31 +08:00
github-actions[bot]
2fb2d22ecb update 2025-05-08 03:06:20 2025-05-08 03:06:20 +08:00
github-actions[bot]
1cd771688f update 2025-05-07 23:23:39 2025-05-07 23:23:39 +08:00
github-actions[bot]
5472239066 update 2025-05-07 22:26:01 2025-05-07 22:26:01 +08:00
github-actions[bot]
af8aa73d7f update 2025-05-07 21:53:09 2025-05-07 21:53:09 +08:00
Ing
de93239f97 添加镜像文件大小选项到表单 2025-05-07 15:43:08 +08:00
Ing
59501a2d4a 更新 synoinfo 2025-05-07 14:51:57 +08:00
Ing
5ce02ba109 优化挂载命令,使用 blkid 获取文件系统类型,提升兼容性 2025-05-07 14:50:47 +08:00
github-actions[bot]
bc0d1e7b97 update 2025-05-07 14:44:03 2025-05-07 14:44:03 +08:00
Ing
46db33e6f3 优化 resizeImg 函数中的文件查找逻辑,使用 find 替代 ls 以提高准确性 2025-05-03 21:09:05 +08:00
Ing
d8e4842a6d 添加 hddsort 到 cmdline 2025-05-03 13:42:47 +08:00
Ing
c7299b8158 优化 boot.sh 和 functions.sh 中的配置处理逻辑 2025-05-02 17:32:10 +08:00
Ing
0f332893c1 重构配置处理逻辑,优化读取和写入 synoinfo 配置的函数 2025-05-01 15:16:10 +08:00
Ing
1c59a654ef 更新 synoinfo 配置 2025-05-01 15:14:54 +08:00
Ing
ebfcae7964 更新 guide.md 2025-05-01 15:14:25 +08:00
github-actions[bot]
b9cd466c1c update 2025-04-28 15:37:46 2025-04-28 15:37:46 +08:00
github-actions[bot]
1884ca6a61 update 2025-04-28 11:43:55 2025-04-28 11:43:55 +08:00
Ing
071200ca36 移除 v1000nk 平台的调试代码 2025-04-28 02:58:40 +08:00
Ing
d04e08ecd9 更新 customDTS 函数以使用统一的 model.dts 文件 2025-04-26 01:55:54 +08:00
Ing
c3b789dff1 添加 v1000nk 平台的调试 2025-04-25 22:17:04 +08:00
Ing
8eb61ad518 添加 DS925+ SN 2025-04-25 13:29:00 +08:00
Ing
7d96f04fe3 添加 v1000nk 平台支持 2025-04-24 01:29:54 +08:00
Ing
a98993613e 添加 usbcopy 支持 2025-04-23 23:31:54 +08:00
Ing
a76d052409 更新 guide.md 2025-04-23 23:29:49 +08:00
github-actions[bot]
4ff26cd6aa update 2025-04-18 11:10:48 2025-04-18 11:10:48 +08:00
github-actions[bot]
29226d0e33 update 2025-04-18 03:12:19 2025-04-18 03:12:19 +08:00
Ing
b63ddabe95 更新 synowebapi 命令,添加版本参数 2025-04-18 03:04:46 +08:00
Ing
6c76070b38 优化 curl 命令,增加连接超时设置 2025-04-18 03:04:35 +08:00
Ing
906311665b 更新 guide.md,优化 CPU 频率调节相关命令 2025-04-16 17:20:37 +08:00
Ing
997f9a2746 更新 README.md,移除点击数徽章并添加 rr-tools 链接 2025-04-12 16:07:47 +08:00
github-actions[bot]
76146edf8e update 2025-04-11 18:18:17 2025-04-11 18:18:17 +08:00
github-actions[bot]
82130f2442 update 2025-04-11 17:43:41 2025-04-11 17:43:41 +08:00
Ing
d681b16946 更新 changelogs.html 文件,优化加载逻辑并添加错误处理 2025-03-31 21:56:04 +08:00
Ing
f1cc7c20a1 优化 GPU 相关数组定义 2025-03-26 10:33:41 +08:00
github-actions[bot]
1baac66eba update 2025-03-18 23:20:07 2025-03-18 23:20:07 +08:00
github-actions[bot]
c88bb0b031 update 2025-03-18 22:50:16 2025-03-18 22:50:17 +08:00
Ing
7c2c17baf2 新增 changelogs.html 文件以展示更新日志 2025-03-18 19:30:59 +08:00
Ing
5e2cb9bb6f 修复 boot.sh 中的菜单锁定检查逻辑 2025-03-17 19:36:42 +08:00
Ing
e6c78ce293 修复上传 dts 中的条件错误 2025-03-17 17:20:25 +08:00
Ing
647b6024fd 更新 .gitattributes 文件以支持二进制文件,并修改 menu.sh 中的更新脚本执行方式 2025-03-12 23:03:40 +08:00
github-actions[bot]
f70815c117 update 2025-03-12 11:54:33 2025-03-12 11:54:33 +08:00
github-actions[bot]
e5f5c64426 update 2025-03-12 11:24:42 2025-03-12 11:24:42 +08:00
Ing
d39f800863 允许附加参数为空 2025-03-11 18:32:49 +08:00
Ing
5a1ff80670 修复 resp 的引用问题 2025-03-10 10:35:21 +08:00
github-actions[bot]
4f0a4b1a9b update 2025-03-07 11:29:13 2025-03-07 11:29:13 +08:00
github-actions[bot]
98f8c8a734 update 2025-03-07 10:57:50 2025-03-07 10:57:50 +08:00
Ing
ff3231cbb5 修复 25.3.0 全新安装循环选择型号 2025-03-07 10:54:47 +08:00
github-actions[bot]
225492b062 update 2025-03-06 20:14:18 2025-03-06 20:14:18 +08:00
github-actions[bot]
4f355a72d3 update 2025-03-06 19:40:06 2025-03-06 19:40:06 +08:00
Ing
7c0e5ba3e3 优化脚本,增强兼容性 2025-03-06 17:02:25 +08:00
github-actions[bot]
11a5f4dd7c update 2025-03-06 11:58:35 2025-03-06 11:58:35 +08:00
Ing
4641c3736c 修复 更新RR后 无网络编译失败 2025-03-06 11:49:15 +08:00
Ing
e67ce76a88 修复 更新RR后 无网络编译失败 2025-03-05 17:01:06 +08:00
github-actions[bot]
fdbd438efc update 2025-02-28 10:29:08 2025-02-28 10:29:08 +08:00
github-actions[bot]
25ff0e9521 update 2025-02-28 02:18:16 2025-02-28 02:18:16 +08:00
Ing
88a556407d fix ... 太多懒得写 2025-02-27 21:59:13 +08:00
Ing
996196c608 优化 rm 命令,统一使用 -rf 选项以提高代码一致性 2025-02-22 11:34:45 +08:00
github-actions[bot]
e71136e606 update 2025-02-21 19:42:16 2025-02-21 19:42:16 +08:00
github-actions[bot]
d73fa4c63a update 2025-02-21 16:19:47 2025-02-21 16:19:47 +08:00
Ing
96c59e1df0 优化 something 2025-02-21 12:02:18 +08:00
Ing
da2430021c 优化 SSID 和 PSK 的处理方式,增加十六进制转换以兼容非法字符 2025-02-21 11:20:01 +08:00
Ing
af6c762e04 修复 某些主板 看门狗导致的 kernel panic 问题 2025-02-20 22:24:01 +08:00
Ing
529a593b08 修复 某些主板不支持 fwsetup 的参数 --is-supported, 导致直接进入UEFI 的问题 2025-02-20 21:47:26 +08:00
Ing
5ddf7eeb48 优化 something 2025-02-20 17:25:04 +08:00
github-actions[bot]
dbbb5bf839 update 2025-02-19 18:53:56 2025-02-19 18:53:56 +08:00
github-actions[bot]
449c81a4c5 update 2025-02-19 17:52:58 2025-02-19 17:52:58 +08:00
Ing
ad74aaf188 优化无线网络连接逻辑,避免重复杀死 wpa_supplicant 进程 2025-02-19 17:50:53 +08:00
Ing
4c4ae4e0ff 更新初始化脚本,默认添加 vmtools 插件 2025-02-19 16:15:02 +08:00
Ing
72e9d7d657 更新无线网络配置逻辑,修复 menu.lock 问题 2025-02-19 12:56:02 +08:00
Ing
b03b7c2012 修复无线网络断开和 IP 获取逻辑 2025-02-18 15:19:32 +08:00
github-actions[bot]
20ca9b8b4b update 2025-02-17 21:14:09 2025-02-17 21:14:09 +08:00
github-actions[bot]
5657c047e3 update 2025-02-17 20:48:02 2025-02-17 20:48:02 +08:00
Ing
83d62cc8b7 更新 modulelist,添加 rfkill、rfkill-gpio 和其他驱动模块 2025-02-17 20:41:12 +08:00
github-actions[bot]
7efbd02116 update 2025-02-14 14:17:08 2025-02-14 14:17:08 +08:00
github-actions[bot]
7fcb950e19 update 2025-02-14 13:53:51 2025-02-14 13:53:51 +08:00
Ing
79e1c3bbe4 更新 boot.sh 和 init.sh,添加 MAC 地址到网络状态输出 2025-02-14 13:51:55 +08:00
github-actions[bot]
545bc2aed6 update 2025-01-27 11:56:17 2025-01-27 11:56:17 +08:00
github-actions[bot]
083c5372d5 update 2025-01-27 11:23:25 2025-01-27 11:23:25 +08:00
Ing
4802cadd86 更新 ramdisk-patch.sh, 移除 rndis 插件 2025-01-27 10:58:27 +08:00
Ing
2f2b9b925c 移除多余空行并 2025-01-27 10:58:19 +08:00
github-actions[bot]
4a3339de15 update 2025-01-18 12:13:22 2025-01-18 12:13:22 +08:00
Ing
f53d019c04 更新 getmodels 函数使用的链接 2025-01-18 11:52:32 +08:00
github-actions[bot]
9b69ec7211 update 2025-01-17 17:34:55 2025-01-17 17:34:55 +08:00
github-actions[bot]
f4c270afda update 2025-01-17 17:23:37 2025-01-17 17:23:37 +08:00
Ing
6c0818f719 更新 getmodels 函数使用的链接 2025-01-17 17:21:12 +08:00
github-actions[bot]
7fdd3952a4 update 2025-01-15 22:47:30 2025-01-15 22:47:30 +08:00
github-actions[bot]
dec47cec6f update 2025-01-15 22:19:22 2025-01-15 22:19:22 +08:00
Ing
8c0b6b9648 更新安装条件和镜像格式说明,添加 qemu-img 使用示例 2025-01-15 14:34:39 +08:00
Ing
1addd7cd4d 添加对 flat 格式的支持 2025-01-15 14:16:55 +08:00
Ing
366e0ad28f 更新多语言文件 2025-01-15 14:16:21 +08:00
github-actions[bot]
281c7b697e update 2025-01-13 18:36:34 2025-01-13 18:36:34 +08:00
github-actions[bot]
e26dc9d919 update 2025-01-13 16:31:55 2025-01-13 16:31:55 +08:00
github-actions[bot]
32f5b16664 update 2025-01-13 16:02:14 2025-01-13 16:02:14 +08:00
Ing
73d20b59f2 优化 GRUB 配置,增强视频模式处理和菜单项支持 2025-01-13 15:59:59 +08:00
Ing
9c636e8390 更新重启到 BIOS 为 UEFI,优化获取型号和版本的错误处理逻辑 2025-01-13 15:21:14 +08:00
github-actions[bot]
4119344e60 update 2025-01-12 23:46:03 2025-01-12 23:46:03 +08:00
Ing
e2fec1c28f 添加读取附加组件参数的功能,优化 NVMe 检测逻辑 2025-01-11 15:31:58 +08:00
github-actions[bot]
01c6fd8b28 update 2025-01-01 22:32:21 2025-01-01 22:32:21 +08:00
github-actions[bot]
baaf78f861 update 2025-01-01 20:37:47 2025-01-01 20:37:47 +08:00
github-actions[bot]
3dd70abf69 update 2025-01-01 20:10:01 2025-01-01 20:10:01 +08:00
Ing
668771fcec 添加 amd_iommu_intr 和 amd_pstate 参数, 修复 BOOTWAIT 循环逻辑 2025-01-01 20:06:42 +08:00
Ing
bf44b402f8 修复 checkCPU_VT_d 和 checkBIOS_VT_d 函数中的错误输出重定向 2025-01-01 17:12:54 +08:00
github-actions[bot]
c3ef9bdb0e update 2025-01-01 12:29:18 2025-01-01 12:29:18 +08:00
github-actions[bot]
9f98fc0488 update 2024-12-30 00:18:44 2024-12-30 00:18:44 +08:00
github-actions[bot]
6b8339e7fb update 2024-12-30 00:05:14 2024-12-30 00:05:14 +08:00
github-actions[bot]
80eb53406e update 2024-12-29 12:09:20 2024-12-29 12:09:20 +08:00
Ing
a85447aabe 移除 pip 安装中的 urllib3 依赖 2024-12-29 11:46:38 +08:00
github-actions[bot]
2433043438 update 2024-12-29 10:23:39 2024-12-29 10:23:39 +08:00
Ing
d22175afa5 简化 grub.cfg 中的终端输出配置 2024-12-29 10:15:56 +08:00
Ing
523257ef27 新增 usbasinternal 配置项 2024-12-29 09:54:14 +08:00
Ing
3ab7cdd3d3 优化 modelMenu 和 addonMenu 2024-12-28 22:28:50 +08:00
Ing
c3ae869c42 统一 grep 命令的参数 2024-12-28 22:27:09 +08:00
Ing
3b1e4ff40b 新增生成随机数字的函数 genRandomDigit 2024-12-28 15:59:18 +08:00
Ing
c41636090a 优化 GitHub 工作流配置,移除多余分号 2024-12-28 15:58:16 +08:00
github-actions[bot]
1a639593da update 2024-12-11 21:18:33 2024-12-11 21:18:33 +08:00
github-actions[bot]
6a6c147781 update 2024-12-11 20:49:32 2024-12-11 20:49:32 +08:00
Ing
94133a325f 更新工作流配置,优化标签提取逻辑,修复脚本中的命令替换方式 2024-12-11 17:40:50 +08:00
Ing
c41ba55739 更新 createvmc 函数,修复相对路径引用 2024-12-08 16:54:12 +08:00
github-actions[bot]
e278b79dec update 2024-12-06 23:31:26 2024-12-06 23:31:26 +08:00
github-actions[bot]
9ed347f9a5 update 2024-12-06 23:03:52 2024-12-06 23:03:52 +08:00
Ing
dd5b312c31 修复直接动需要按键问题,更新欢迎信息和引导类型输出格式 2024-12-06 23:00:55 +08:00
github-actions[bot]
df27459898 update 2024-12-06 17:32:53 2024-12-06 17:32:53 +08:00
github-actions[bot]
3ad5c7e6fa update 2024-12-06 17:03:22 2024-12-06 17:03:22 +08:00
Ing
404d037dbd fix lang 2024-12-06 15:38:48 +08:00
Ing
eeb87463b6 优化 changePorts 函数,简化端口配置保存和服务重启逻辑 2024-12-06 15:16:46 +08:00
Ing
7faab1b46d 优化 grub 配置,简化模块加载并调整终端输出设置 2024-12-06 15:15:09 +08:00
github-actions[bot]
2b592cf227 update 2024-12-03 08:00:42 2024-12-03 08:00:42 +08:00
github-actions[bot]
02a6b71ab7 update 2024-12-03 07:33:08 2024-12-03 07:33:08 +08:00
Ing
e1ebf309e9 重构配置模块合并函数 2024-12-03 07:10:40 +08:00
Ing
002c6417e3 更新 addons 配置,添加 trivial 选项 2024-12-02 23:01:30 +08:00
github-actions[bot]
4846e0e815 update 2024-12-02 22:40:54 2024-12-02 22:40:54 +08:00
github-actions[bot]
3d5c7a26fa update 2024-12-02 22:13:16 2024-12-02 22:13:16 +08:00
Ing
b30edf3fc3 优化初始化脚本,添加对 addons 配置的条件检查 2024-12-01 22:47:24 +08:00
Ing
55a238ac17 添加对 VMX 和 VHD 格式的支持,更新相关脚本和文档 2024-12-01 22:04:26 +08:00
Ing
4168b71f42 更新 boot.sh 和 grub.cfg,优化 MEV 变量获取逻辑和输出 2024-12-01 21:45:56 +08:00
github-actions[bot]
98ddaa3a75 update 2024-11-27 17:04:28 2024-11-27 17:04:28 +08:00
github-actions[bot]
ffb64ffa71 update 2024-11-27 16:24:35 2024-11-27 16:24:35 +08:00
Ing
5ae9098c11 添加DSM根分区检查与修复功能,屏蔽0B虚拟磁盘 2024-11-27 15:13:22 +08:00
github-actions[bot]
7b4bb1a9f4 update 2024-11-23 17:55:26 2024-11-23 17:55:26 +08:00
github-actions[bot]
08251c0763 update 2024-11-23 17:27:06 2024-11-23 17:27:06 +08:00
Ing
90bce4a843 优化脚本,修复条件判断,增强代码可读性和执行效率 2024-11-23 17:23:12 +08:00
Ing
0605583469 移除对 v24.11.11 的特定处理 2024-11-23 16:13:55 +08:00
Ing
eaee3f137f Only fix v24.11.11 custon 2024-11-19 16:33:53 +08:00
github-actions[bot]
4c111402c1 update 2024-11-19 13:15:12 2024-11-19 13:15:12 +08:00
github-actions[bot]
a38db27e48 update 2024-11-19 12:52:00 2024-11-19 12:52:00 +08:00
Ing
04eeea5e84 优化条件判断和文件处理逻辑,提升代码可读性和执行效率 2024-11-19 12:06:06 +08:00
Ing
c091d0dba0 优化网络接口检测逻辑,使用 carrier 文件替代 ethtool,修复 setStaticIP, setWirelessAccount 卡住的问题 2024-11-16 12:01:36 +08:00
Ing
01aaca5e99 修复 changePorts 后 menu.sh 被锁无法再次进入的问题 2024-11-15 23:25:06 +08:00
Ing
229c3270a4 更新翻译 2024-11-15 23:23:50 +08:00
Ing
9761d64501 更新 menu.sh、localbuild.sh 和 func.sh,优化 initrd 文件处理逻辑,支持多种压缩格式 2024-11-15 22:07:59 +08:00
Ing
a71f4e89da 更新 menu.sh,简化重置 DSM 密码的逻辑,提升代码可读性 2024-11-14 13:56:29 +08:00
github-actions[bot]
761ce8f670 update 2024-11-09 01:24:38 2024-11-09 01:24:38 +08:00
github-actions[bot]
961257bf7b update 2024-11-09 00:49:39 2024-11-09 00:49:39 +08:00
Ing
a0d47860d3 更新 menu.sh,修复 changePorts 2024-11-09 00:47:04 +08:00
Ing
74e0af058e 更新 boot.sh,优化 kexec 命令,添加 kexecboot 参数 2024-11-08 23:15:17 +08:00
Ing
f2e334b682 更新 menu.sh 和 func.sh,优化 cp 命令,使用 -r 选项替代 -R 以提高兼容性 2024-11-08 23:14:06 +08:00
Ing
99de5d84b2 更新 boot.sh 和 menu.sh,添加 bootwait 配置功能,优化启动等待逻辑 2024-11-06 20:35:12 +08:00
Ing
751284fa59 更新 menu.sh,替换密码哈希算法为 openssl,以增强安全性 2024-11-06 20:33:14 +08:00
github-actions[bot]
197ed21c8e update 2024-11-05 21:02:50 2024-11-05 21:02:50 +08:00
github-actions[bot]
71e977e50e update 2024-11-05 20:31:08 2024-11-05 20:31:08 +08:00
Ing
b24587af11 更新 init.sh 和 grub.cfg,添加对新 initrd 文件的支持,并动态配置端口 2024-11-05 16:50:59 +08:00
Ing
4c0ff61ce2 更新 menu.sh,添加用户配置文件的备份和敏感信息的掩码处理 2024-11-04 17:19:45 +08:00
Ing
becbfd1ebd 更新 menu.sh,优化 inxi 命令参数以提高系统报告的准确性 2024-11-04 09:44:09 +08:00
Ing
bcb266c595 更新 init.sh 和语言文件,将 TTYD&DUFS 的端口从 80 修改为 7080 2024-11-04 09:35:29 +08:00
Ing
75e12dd213 Refactor guide.md to fix typos and improve readability 2024-11-01 19:59:28 +08:00
github-actions[bot]
f22eb1e83b update 2024-10-29 11:20:49 2024-10-29 11:20:49 +08:00
github-actions[bot]
4810ce5457 update 2024-10-29 09:39:02 2024-10-29 09:39:02 +08:00
Ing
95db2dacb7 Refactor boot.sh and grub.cfg to disable split lock detection 2024-10-29 09:15:15 +08:00
Ing
e0c64f829b Refactor menu.sh to implement locking mechanism 2024-10-28 23:01:29 +08:00
github-actions[bot]
05fbb5918d update 2024-10-24 16:14:30 2024-10-24 16:14:30 +08:00
github-actions[bot]
03a51ebd6c update 2024-10-22 22:54:06 2024-10-22 22:54:06 +08:00
Ing
20945cec49 Refactor grub.cfg to add 'intel_pstate=disable' to RR_CMDLINE 2024-10-22 15:21:54 +08:00
Ing
2003b89e53 Refactor issue templates and workflows 2024-10-21 16:29:03 +08:00
Ing
d9919fd1da Refactor get DMI function 2024-10-19 15:50:59 +08:00
Ing
33135b6bcd Refactor menu.sh to add system environment report functionality 2024-10-19 15:40:15 +08:00
github-actions[bot]
d301e31b87 update 2024-10-17 15:37:44 2024-10-17 15:37:44 +08:00
github-actions[bot]
529face186 update 2024-10-17 15:01:38 2024-10-17 15:01:38 +08:00
Ing
33a3d0b88f Refactor menu.sh to add DSM storage pool mounting functionality and update network drivers 2024-10-15 14:59:36 +08:00
Ing
d2d9728bb3 Refactor menu.sh to add DSM storage pool mounting functionality 2024-10-15 14:58:39 +08:00
Ing
821a3fdc99 Refactor menu.sh to add DSM storage pool mounting functionality 2024-10-11 11:56:20 +08:00
github-actions[bot]
be59829420 update 2024-10-02 15:51:29 2024-10-02 15:51:29 +08:00
github-actions[bot]
d661771021 update 2024-10-02 15:23:45 2024-10-02 15:23:46 +08:00
Ing
ba20de7e3c Refactor modulelist to update network drivers 2024-10-01 11:08:37 +08:00
github-actions[bot]
679f6ad37b update 2024-09-17 18:35:11 2024-09-17 18:35:11 +08:00
github-actions[bot]
651ac9eb6a update 2024-09-17 18:06:17 2024-09-17 18:06:17 +08:00
Ing
55fe8f198d Refactor network configuration to use uppercase MAC addresses and update IP settings 2024-09-17 12:28:22 +08:00
github-actions[bot]
1e2a58b37f update 2024-09-13 00:39:10 2024-09-13 00:39:10 +08:00
github-actions[bot]
9061cba5f2 update 2024-09-12 15:29:10 2024-09-12 15:29:10 +08:00
Ing
a96b655d95 Refactor menu.sh to uppercase serial number and MAC addresses 2024-09-06 17:36:30 +08:00
Ing
ead32a8717 chore: Update README.md and issues.html to include links to PATs file 2024-09-06 15:44:12 +08:00
Ing
6fe5bab1c7 chore: add sn of RS2423RP+, thanks @OrpheeGT 2024-09-06 15:13:40 +08:00
github-actions[bot]
e57959a984 update 2024-08-29 01:11:58 2024-08-29 01:11:58 +08:00
github-actions[bot]
dac404f8ef update 2024-08-29 00:50:48 2024-08-29 00:50:48 +08:00
Ing
054c65ab09 chore: Remove unused file for product version 2024-08-29 00:35:42 +08:00
Ing
98816c0f88 chore: Update README.md and issues.html to include links to PATs file 2024-08-28 22:00:22 +08:00
Ing
e845414652 chore: Update getpats function to include patch information and fix product version selection logic 2024-08-28 21:56:19 +08:00
github-actions[bot]
8d24023401 update 2024-08-28 21:39:47 2024-08-28 21:39:47 +08:00
Ing
a457d25018 chore: Update getpats function to retrieve and save patch information 2024-08-28 21:16:58 +08:00
Ing
41ce279292 chore: Update getpats function to retrieve and save patch information 2024-08-28 21:15:10 +08:00
Ing
ea52a34561 chore: Install bs4 package for web scraping functionality 2024-08-28 21:01:15 +08:00
github-actions[bot]
823b9e9dc9 update 2024-08-28 20:47:56 2024-08-28 20:47:56 +08:00
github-actions[bot]
4f9def50eb update 2024-08-28 20:01:57 2024-08-28 20:01:57 +08:00
Ing
168b6d5138 chore: Update menu.sh to fix product version selection logic 2024-08-28 19:29:18 +08:00
Ing
d44ba6504d chore: Update build messages for RR-CUSTOM to include estimated build time and attachment expiration 2024-08-24 22:32:21 +08:00
Ing
3e41f7ff79 chore: Fix setting modules of RR-CUSTOM 2024-08-20 18:49:21 +08:00
github-actions[bot]
b26a40b2c8 update 2024-08-20 17:47:33 2024-08-20 17:47:33 +08:00
github-actions[bot]
2354c2148d update 2024-08-20 17:28:22 2024-08-20 17:28:22 +08:00
Ing
de5d238037 chore: Update guide.md with additional commands for checking CPU information 2024-08-20 15:49:48 +08:00
Ing
feaf837d1d chore: Comment out unnecessary ethtool command in init.sh 2024-08-20 15:48:30 +08:00
Ing
bce98ab822 chore: Update timezone selection logic and set timezone based on user choice 2024-08-20 15:43:29 +08:00
Ing
6898e5b2fa chore: Merge config strings in multiple functions to improve code readability and maintainability 2024-08-18 18:01:01 +08:00
github-actions[bot]
8931af4fe3 update 2024-08-17 04:31:54 2024-08-17 04:31:54 +08:00
github-actions[bot]
656596cd57 update 2024-08-17 04:18:45 2024-08-17 04:18:45 +08:00
Ing
e301265973 chore: Update SCSI bus device scanning to synchronize startup 2024-08-17 04:10:30 +08:00
Ing
d1971a7c61 refactor: Update MAC address formatting in _sort_netif function 2024-08-16 20:13:00 +08:00
Ing
e40e47fea7 chore: Update synoinfo.conf patching logic 2024-08-16 20:12:44 +08:00
Ing
adb91c29e8 chore: Refactor _get_fastest function to improve readability and performance 2024-08-14 23:15:02 +08:00
Ing
7af514e5e7 fix conditional copy of iosched-trampoline.sh for older kernel versions 2024-08-13 21:13:48 +08:00
Ing
40b18cd8d4 feat: Add scsi_mod.scan option for non-DT boot 2024-08-13 21:13:34 +08:00
Ing
05c69c06fe chore: add "check_signature.ko" to modulelist 2024-08-13 21:13:17 +08:00
Ing
f401dc2493 menu.sh: fix parameter names and values ​​to be handled correctly "=" 2024-08-11 18:49:40 +08:00
github-actions[bot]
1e6172c6ec update 2024-08-09 22:54:19 2024-08-09 22:54:19 +08:00
github-actions[bot]
cb031c03a1 update 2024-08-09 22:40:19 2024-08-09 22:40:19 +08:00
Ing
fb4a789607 disable xen and drm support 2024-08-09 20:06:13 +08:00
Ing
a536eecee3 fix the bootloader disk read-only 2024-08-09 20:02:33 +08:00
Ing
f65eb21930 remove pstore logs 2024-08-08 22:33:19 +08:00
Ing
003a6093dd fix something 2024-08-08 22:31:23 +08:00
Ing
e479542dbb fix virtio boot 2024-08-08 11:31:03 +08:00
github-actions[bot]
68993001e3 update 2024-08-07 02:39:35 2024-08-07 02:39:35 +08:00
github-actions[bot]
76bb1e06aa update 2024-08-07 01:57:27 2024-08-07 01:57:27 +08:00
github-actions[bot]
4fcde1b043 update 2024-08-07 01:45:54 2024-08-07 01:45:54 +08:00
Ing
cc4e6a0729 fix getBus 2024-08-07 01:42:12 +08:00
Ing
15e6a09aeb fix lsblk ID is null 2024-08-07 00:31:20 +08:00
Ing
42b4201e2f modify guide 2024-08-06 09:40:20 +08:00
Ing
e5643ed2bb fix "Choose a language" 2024-08-06 09:39:57 +08:00
Ing
a4a623b3c6 fix ide boot 2024-08-06 09:35:10 +08:00
Ing
3623600ac2 fix reboot to BIOS 2024-08-06 09:32:56 +08:00
Ing
31321a4bef fix something 2024-08-06 09:31:47 +08:00
Ing
f330d62bd3 sync cmdline 2024-08-06 09:27:29 +08:00
github-actions[bot]
018cc29157 update 2024-08-02 11:26:49 2024-08-02 11:26:49 +08:00
github-actions[bot]
62b609d2d8 update 2024-08-02 11:15:05 2024-08-02 11:15:05 +08:00
Ing
3d0feb2b1b fix something 2024-08-02 08:45:22 +08:00
Ing
33154560aa modify get logs 2024-07-31 23:20:12 +08:00
Ing
e62749022c fix something 2024-07-31 15:40:12 +08:00
Ing
28c4f21e2b add checkBootLoader 2024-07-30 21:30:23 +08:00
Ing
f6e239ee8e fix something 2024-07-30 21:30:05 +08:00
github-actions[bot]
2d1f973c12 update 2024-07-26 19:48:09 2024-07-26 19:48:09 +08:00
github-actions[bot]
25cdaf5931 update 2024-07-26 19:36:32 2024-07-26 19:36:32 +08:00
Ing
a91c9a2c96 enable iommu 2024-07-26 18:00:15 +08:00
Ing
d3e8759ff9 update lang 2024-07-26 15:32:53 +08:00
Ing
fbc24e0517 rmmod net and drm driver before kexec 2024-07-26 15:32:16 +08:00
Ing
740143089c disable iommu, intremap 2024-07-26 15:28:39 +08:00
Ing
77f32b4929 disable rx of all nic 2024-07-26 15:27:34 +08:00
Ing
a6a08af551 mdoify dialog maxxy 2024-07-26 15:25:20 +08:00
Ing
1717c89851 fix inetd 2024-07-26 15:24:09 +08:00
Ing
6978ef71fb fix something 2024-07-23 02:01:13 +08:00
Ing
29056799aa fix something 2024-07-21 22:41:34 +08:00
github-actions[bot]
09f061ce43 update 2024-07-21 15:06:31 2024-07-21 15:06:31 +08:00
github-actions[bot]
7106ce0ff8 update 2024-07-21 14:52:55 2024-07-21 14:52:55 +08:00
Ing
47c5f76868 fix cmdlineMenu/synoinfoMenu, fix custom kernel for RR-CUSTOM 2024-07-21 14:38:06 +08:00
Ing
00348889b9 mdify powersched by default 2024-07-21 13:11:46 +08:00
Ing
e058a4ef2a add Memtest86+ 2024-07-21 13:06:16 +08:00
Ing
c2a4300d40 fix something 2024-07-21 13:05:56 +08:00
Ing
160a51de1a fix "SYNO_CTRL_HDD_POWERON.cold+0x1f/0x29" 2024-07-21 13:00:32 +08:00
Ing
119aefe580 Merge pull request #1898 from RROrg/jet/pr/fix_nvidia
bugfix for nouveau affect nvidia hardware status
2024-07-21 11:15:28 +08:00
pdbear
bd51792de0 bugfix for nouveau affect nvidia hardware status 2024-07-21 03:03:35 +00:00
Ing
ae2ab74ae7 Merge pull request #1897 from RROrg/jet/pr/fix_nvidia
bugfix for nouveau affect nvidia hardware status
2024-07-21 08:28:43 +08:00
pdbear
5bb2dbcf68 bugfix for nouveau affect nvidia hardware status 2024-07-20 18:01:26 +00:00
Ing
3a14223c4b modify issue template 2024-07-19 05:19:41 +08:00
Ing
fe65a5a9a4 add readme 2024-07-19 02:57:09 +08:00
github-actions[bot]
2a30a405a4 update 2024-07-18 19:04:39 2024-07-18 19:04:39 +08:00
github-actions[bot]
2253a503d1 update 2024-07-18 17:42:01 2024-07-18 17:42:01 +08:00
Ing
a85675595d fix cmdline 2024-07-18 16:26:12 +08:00
Ing
4d7df2f3dc disabled "Power off display after boot: " 2024-07-18 06:27:04 +08:00
Ing
0a1416ed1a disable x2apic for all 2024-07-17 07:09:04 +08:00
Ing
e8d752f1d5 del HddEnableDynamicPower 2024-07-14 07:22:17 +08:00
Ing
3d3b0ef414 add hint 2024-07-14 07:21:41 +08:00
github-actions[bot]
ae683fc3ea update 2024-07-12 13:39:19 2024-07-12 13:39:19 +08:00
github-actions[bot]
177ea5b740 update 2024-07-12 13:27:32 2024-07-12 13:27:32 +08:00
Ing
1ffbc1d83c add serial,udevadm 2024-07-12 10:49:53 +08:00
Ing
c75d16eece add modblacklist 2024-07-12 10:49:14 +08:00
Ing
1cbe1d4b27 del mitigations=auto 2024-07-12 10:48:16 +08:00
Ing
e9f587d156 add infobox for updateRR 2024-07-10 22:51:56 +08:00
Ing
665add89fb fix "SYNO_CTRL_HDD_POWERON.cold+0x1f/0x29" 2024-07-10 22:50:33 +08:00
github-actions[bot]
d249d2efd3 update 2024-07-06 03:52:46 2024-07-06 03:52:46 +08:00
github-actions[bot]
7ceeb9d575 update 2024-07-06 03:41:08 2024-07-06 03:41:08 +08:00
Ing
fac02ba250 fix something 2024-07-06 02:59:42 +08:00
Ing
7617785f2d fix something 2024-07-02 03:54:45 +08:00
github-actions[bot]
6557a075b7 update 2024-06-30 10:37:31 2024-06-30 10:37:31 +08:00
github-actions[bot]
b6f4b01d92 update 2024-06-30 10:06:23 2024-06-30 10:06:23 +08:00
Ing
3a42b4d426 fix something 2024-06-30 09:59:33 +08:00
Ing
d881618ffb add SIZE TYPE to formatDisks 2024-06-29 01:39:31 +08:00
Ing
5858744171 fix something 2024-06-28 13:26:46 +08:00
github-actions[bot]
55601dfb43 update 2024-06-28 03:52:25 2024-06-28 03:52:25 +08:00
github-actions[bot]
07db075d0a update 2024-06-28 03:40:32 2024-06-28 03:40:32 +08:00
Ing
a8d945557a add vmdk,vhdx 2024-06-28 02:57:10 +08:00
Ing
c18bf474b2 fix something 2024-06-28 01:31:25 +08:00
Ing
2782b499ed fix something 2024-06-28 00:23:35 +08:00
Ing
d94eb9e83c fix issues html 2024-06-26 21:52:33 +08:00
Ing
3a7d43471a fix something 2024-06-26 16:14:50 +08:00
Ing
bba9424ea6 fix something 2024-06-25 08:58:15 +08:00
Ing
99ad812abe fix something 2024-06-25 08:55:54 +08:00
Ing
858b6601ba update lang 2024-06-24 20:59:33 +08:00
Ing
8bf38db4c5 fix formatDisks 2024-06-24 20:29:08 +08:00
github-actions[bot]
b68bb89762 update 2024-06-24 06:28:23 2024-06-24 06:28:23 +08:00
github-actions[bot]
3031cd7436 update 2024-06-24 06:16:20 2024-06-24 06:16:21 +08:00
Ing
511f941704 fix something 2024-06-24 05:12:28 +08:00
Ing
51c23a2c65 fix setStaticIP 2024-06-24 04:40:56 +08:00
Ing
907c85edaa fix w 2024-06-24 01:04:08 +08:00
Ing
192b02ff90 fix something 2024-06-24 00:43:10 +08:00
Ing
173f3dd1fc disable "Fast reboot" of kexec 2024-06-24 00:17:28 +08:00
Ing
244744fa6d fix small screen dialog --form error 2024-06-23 20:39:52 +08:00
Ing
da2c9102d9 fix makeqr error 2024-06-22 20:10:04 +08:00
Ing
dbb694acbe fix addNewDSMUser 2024-06-22 20:09:43 +08:00
github-actions[bot]
e728446653 update 2024-06-21 17:04:42 2024-06-21 17:04:42 +08:00
github-actions[bot]
7b643ba725 update 2024-06-21 16:53:12 2024-06-21 16:53:12 +08:00
Ing
dfb19df959 add Reboot to BIOS 2024-06-21 07:13:17 +08:00
Ing
c518576161 add initDSMNetwork 2024-06-20 22:43:04 +08:00
github-actions[bot]
75db321f20 update 2024-06-19 18:46:09 2024-06-19 18:46:09 +08:00
github-actions[bot]
f423c3bc12 update 2024-06-19 18:31:06 2024-06-19 18:31:06 +08:00
Ing
709d4ed14a fix get latest tag 2024-06-19 17:42:19 +08:00
Ing
d9920609b0 add SpectreAll_on 2024-06-19 17:29:32 +08:00
Ing
0bddc88b10 fix i915 "GUC: CT: Failed to process CT message" 2024-06-19 17:08:15 +08:00
Ing
9f2f6e6096 fix w output format caused by abnormal interruption 2024-06-18 21:17:27 +08:00
github-actions[bot]
f791a8a241 update 2024-06-15 00:11:25 2024-06-15 00:11:25 +08:00
github-actions[bot]
96158dd475 update 2024-06-14 22:04:34 2024-06-14 22:04:34 +08:00
github-actions[bot]
457d8e8103 update 2024-06-11 09:51:52 2024-06-11 09:51:52 +08:00
github-actions[bot]
96d3d2b43f update 2024-06-11 09:38:55 2024-06-11 09:38:55 +08:00
Ing
d47c8acf8d fix MEM 2024-06-11 09:36:30 +08:00
Ing
15555ad8b5 Fix boot interruption 2024-06-11 09:20:52 +08:00
github-actions[bot]
ae01a0291e update 2024-06-11 08:42:12 2024-06-11 08:42:12 +08:00
github-actions[bot]
f082150a07 update 2024-06-11 08:30:41 2024-06-11 08:30:41 +08:00
Ing
c356cc2a4b fix paturl, patsum cache 2024-06-11 02:25:20 +08:00
Ing
f8ba72cfe7 disable repeated operation judgment 2024-06-10 02:42:26 +08:00
Ing
4ca6ec1c8a add repeated operation judgment 2024-06-10 01:44:51 +08:00
Ing
1f3a4d7155 fix the wrong clean /tmp 2024-06-09 23:03:43 +08:00
Ing
da71a5a15a update readme 2024-06-09 03:35:02 +08:00
Ing
7cb1f56ae2 update readme 2024-06-09 00:34:54 +08:00
Ing
4d3af37f74 Merge pull request #1154 from TimKraemer/patch-1
Update rr.po
2024-06-09 00:29:54 +08:00
Tim Krämer
41f4ff2af2 Update rr.po
Fixed German translation. Most of the strings were corrected manually by German native speaker. Some of them with the help of translation software.
2024-06-08 17:29:20 +02:00
Ing
9140b5e4a0 update readme 2024-06-08 16:42:02 +08:00
github-actions[bot]
04c224e05d update 2024-06-08 07:31:50 2024-06-08 07:31:50 +08:00
github-actions[bot]
435277edc2 update 2024-06-08 07:21:44 2024-06-08 07:21:44 +08:00
Ing
086b086043 add rr.ova 2024-06-08 06:50:35 +08:00
Ing
3a39198db2 fix something 2024-06-07 23:33:44 +08:00
Ing
94e8a594b4 modify blog 2024-06-06 13:37:34 +08:00
Ing
3596ecd640 fix something 2024-06-05 15:55:08 +08:00
Ing
56585a717b Merge pull request #1130 from Timmyz9219340/main
Update zh_HK.po
2024-06-05 02:06:18 +08:00
Ing
82ce77523a fix typo 2024-06-04 16:17:57 +08:00
Timmyz9219340
2e0bd8035e Update rr.po 2024-06-03 10:10:58 +08:00
Ing
9a9e2aa945 fix something 2024-06-01 23:15:31 +08:00
Ing
66eeb8bd8c fix getmodels on TimeError 2024-06-01 03:50:29 +08:00
Ing
2d7dc80fe6 fix typo 2024-06-01 03:46:03 +08:00
github-actions[bot]
f2523d55de update 2024-06-01 03:26:02 2024-06-01 03:26:02 +08:00
github-actions[bot]
d60651774f update 2024-06-01 03:17:00 2024-06-01 03:17:00 +08:00
Ing
5eecf91404 add enableRCPower, support_fan, supportadt7490 2024-05-31 16:31:24 +08:00
Ing
ace5158f04 add support_apparmor 2024-05-31 16:31:00 +08:00
Ing
2ba25de442 fix _sort_netif check 2024-05-31 03:01:21 +08:00
Ing
3682eec05c fix getmodels on TimeError 2024-05-31 01:59:25 +08:00
Ing
09c63ceea8 disable S41dhcpcd 2024-05-31 01:59:19 +08:00
github-actions[bot]
dba2fae99a update 2024-05-27 22:38:48 2024-05-27 22:38:48 +08:00
github-actions[bot]
d519bc9a48 update 2024-05-27 22:29:46 2024-05-27 22:29:46 +08:00
Ing
fc8cb69ed5 fix typo 2024-05-27 22:24:06 +08:00
Ing
a354a28ed6 fix nct6775 deps 2024-05-27 12:57:34 +08:00
github-actions[bot]
2440c04226 update 2024-05-19 17:10:06 2024-05-19 17:10:06 +08:00
github-actions[bot]
48418e4979 update 2024-05-19 17:00:50 2024-05-19 17:00:50 +08:00
Ing
82a73f44f0 fix models RESTRICT 2024-05-18 22:14:03 +08:00
Ing
576c3c1526 fix something 2024-05-18 18:13:10 +08:00
Ing
2439c41d84 Rewrite shield mmc 2024-05-18 12:36:39 +08:00
Ing
79225d2a50 add get DSM logs 2024-05-18 12:35:28 +08:00
Ing
8767faa6b1 add pci=nommconf 2024-05-16 18:12:09 +08:00
Ing
5d4bb64c6a fix something 2024-05-16 18:02:11 +08:00
Ing
fca33353a3 add show PLATFORM 2024-05-16 17:57:26 +08:00
Ing
b557400698 fix getmodels 2024-05-16 17:56:59 +08:00
github-actions[bot]
1508395ef5 update 2024-05-14 14:41:06 2024-05-14 14:41:06 +08:00
github-actions[bot]
2408b49038 update 2024-05-14 14:31:25 2024-05-14 14:31:25 +08:00
Ing
9915347a11 fix something 2024-05-14 14:29:44 +08:00
Ing
5c1f6a4667 fix something 2024-05-14 01:13:39 +08:00
github-actions[bot]
42064055e4 update 2024-05-11 16:03:28 2024-05-11 16:03:28 +08:00
Ing
ae2ce90473 fix something 2024-05-11 16:02:20 +08:00
Ing
1ec0b1893e fix get modinfo 2024-05-11 16:00:14 +08:00
github-actions[bot]
c4b0ff8852 update 2024-05-11 13:47:04 2024-05-11 13:47:04 +08:00
Ing
21669c607f fix get modinfo 2024-05-11 13:13:27 +08:00
Ing
92dd5a5aa8 fix update-check.sh 2024-05-11 12:06:46 +08:00
Ing
4fb398cec3 fix update check 2024-05-10 20:32:07 +08:00
Ing
e9b2b99538 add LOADERRELEASE 2024-05-09 20:22:10 +08:00
Ing
6e1c487566 fix something 2024-05-08 15:09:43 +08:00
Ing
05258a47ec fix something 2024-05-07 21:07:12 +08:00
Ing
9c8f533c56 add Current version for custom issues.html 2024-05-07 20:21:04 +08:00
Ing
6f4cf3ddec fix something 2024-05-07 10:32:45 +08:00
Ing
09a2724c65 fix custom issues.html 2024-05-06 00:18:06 +08:00
github-actions[bot]
cc8797d71a update 2024-05-06 00:13:49 2024-05-06 00:13:49 +08:00
Ing
307a5dc116 fix getmodels 2024-05-06 00:10:31 +08:00
github-actions[bot]
fda25c32a0 update 2024-05-05 23:54:51 2024-05-05 23:54:51 +08:00
Ing
7f8faecd11 Revision Initialization 2024-05-05 23:01:49 +08:00
github-actions[bot]
d82c3588d8 update 2024-05-04 09:06:44 2024-05-04 09:06:44 +08:00
github-actions[bot]
4ce0b39e06 update 2024-05-04 00:57:41 2024-05-04 00:57:41 +00:00
Ing
b25475904a back something 2024-05-04 08:55:35 +08:00
github-actions[bot]
cd6dd29764 update 2024-05-03 17:12:21 2024-05-03 17:12:21 +08:00
github-actions[bot]
450e5e5d78 update 2024-05-03 09:03:09 2024-05-03 09:03:09 +00:00
Ing
8ad451a7aa fix something 2024-05-03 16:39:15 +08:00
Ing
6e6585b0f9 fix something 2024-05-03 15:19:12 +08:00
Ing
96bb379689 remove VirtualDSM 2024-05-03 13:36:22 +08:00
Ing
569e89b624 add copy nct* 2024-05-03 13:35:45 +08:00
Ing
045377400b fix danger AddonsBtn 2024-04-29 18:35:24 +08:00
Ing
5dc3447c04 update th_TH 2024-04-29 11:29:46 +08:00
Ing
d02eae6a09 fix date.yml 2024-04-29 10:41:14 +08:00
github-actions[bot]
03b2b4af25 update 2024-04-29 10:39:50 2024-04-29 10:39:50 +08:00
github-actions[bot]
3e0b0bf8cc update 2024-04-29 01:01:30 2024-04-29 01:01:30 +00:00
Ing
dc9be69cdd update th_TH 2024-04-29 07:49:31 +08:00
Ing
1f05e8b2c5 add ar_SA.UTF-8 th_TH.UTF-8 tr_TR.UTF-8 2024-04-29 07:40:13 +08:00
Ing
58db051c3e add raid related operation instructions 2024-04-28 15:52:39 +08:00
Ing
8eb8b6b13c fix something 2024-04-28 15:51:32 +08:00
Ing
a44a4eb0ab fix something 2024-04-28 15:16:57 +08:00
Ing
d17fa5a09f add S41dhcpcd restart 2024-04-28 13:09:04 +08:00
Ing
9dba6e5a6f fix rebootTo 2024-04-28 10:32:20 +08:00
Ing
46598132fd fix make null error 2024-04-28 10:32:04 +08:00
Ing
16930fd99f update tr_TR 2024-04-28 10:31:26 +08:00
Ing
e56b1f572f add tr_TR 2024-04-26 05:41:01 +08:00
Ing
933520c464 fix something 2024-04-26 04:55:15 +08:00
github-actions[bot]
d4b22dcd1d update 2024-04-25 13:42:58 2024-04-25 13:42:58 +08:00
Ing
9083170bf0 fix event created branch 2024-04-25 13:39:56 +08:00
github-actions[bot]
bc2c10657f update 2024-04-25 05:17:46 2024-04-25 05:17:46 +00:00
Ing
2294906e01 add S41dhcpcd restart 2024-04-25 11:32:16 +08:00
Ing
bcfd2f5a82 add on release get data 2024-04-25 08:56:31 +08:00
Ing
5b64a2bc2f add LINK LOCAL 2024-04-24 15:48:54 +08:00
Ing
15fbc8bd77 modify grub color 2024-04-23 10:02:40 +08:00
Ing
e07a3ef514 add support_bde_internal_10g 2024-04-23 10:02:20 +08:00
Ing
8660fe9b78 fix something 2024-04-23 06:43:45 +08:00
Ing
5632408485 Fix md0 related operations 2024-04-23 05:54:16 +08:00
Ing
16681ab820 cancel upload 2024-04-22 15:40:22 +08:00
github-actions[bot]
7234b5d92e update 2024-04-22 12:03:45 2024-04-22 12:03:45 +08:00
github-actions[bot]
8e139a5cd1 update 2024-04-22 03:24:28 2024-04-22 03:24:28 +00:00
Ing
4c011a72b4 fix something 2024-04-22 08:13:55 +08:00
Ing
59e3c94c8d fix cloneBootloaderDisk 2024-04-21 21:54:24 +08:00
Ing
4076c8b678 add sensors modules 2024-04-21 20:53:13 +08:00
Ing
7574e190bc fix ParsePat 2024-04-21 20:30:52 +08:00
Ing
5251b09599 fix translate 2024-04-21 03:09:01 +08:00
Ing
db7f8cb087 add vi_VN,ar_SA 2024-04-21 02:47:35 +08:00
github-actions[bot]
88b260ea2d update 2024-04-21 00:29:01 2024-04-21 00:29:01 +08:00
github-actions[bot]
41ecfac06b update 2024-04-20 16:18:16 2024-04-20 16:18:16 +00:00
Ing
479cd094be fix upload 2024-04-20 23:26:30 +08:00
Ing
d98981970e fix something 2024-04-20 09:52:02 +08:00
Ing
c51285f16d Fix md0 related operations 2024-04-20 03:44:21 +08:00
Ing
6f074c5846 fix downloadExts 2024-04-18 05:48:33 +08:00
Ing
4da6bc4ddc remove 6.2 and DS3615xs, RS3413xs+ 2024-04-17 03:08:23 +08:00
Ing
5fc8befa6c add something 2024-04-17 02:59:35 +08:00
Ing
f6c0afe4e0 fix something 2024-04-17 02:45:36 +08:00
github-actions[bot]
b8ea001f34 update 2024-04-16 17:20:09 2024-04-16 17:20:09 +00:00
Ing
059aeab95d fix something 2024-04-17 01:17:39 +08:00
Ing
84a1392123 Update README.md with badges 2024-04-15 04:39:32 +08:00
github-actions[bot]
f04b6a94a7 update 2024-04-14 23:22:10 2024-04-14 23:22:10 +08:00
github-actions[bot]
3106944fa3 update 2024-04-14 14:19:40 2024-04-14 14:19:40 +00:00
Ing
79488740e0 add ipkg to guide 2024-04-14 22:16:40 +08:00
Ing
41af49280d Fix md0 related operations 2024-04-13 17:27:11 +08:00
Ing
0bc6788c9b add nvmesystem check 2024-04-13 17:26:11 +08:00
Ing
87d95f75f4 fix something 2024-04-13 08:57:58 +08:00
github-actions[bot]
70952af68f update 2024-04-12 10:01:46 2024-04-12 10:01:46 +08:00
github-actions[bot]
bd5a5a7333 update 2024-04-12 01:48:10 2024-04-12 01:48:10 +00:00
Ing
98ca113306 fix typo 2024-04-12 05:29:15 +08:00
Ing
b1edb595f4 fix textarea 2024-04-12 05:11:12 +08:00
Ing
0e7f484147 add addons, modules for rr-custom 2024-04-12 02:28:34 +08:00
Ing
7d238f8f49 add apparmor.mode: "complain" for SA6400 2024-04-12 01:33:13 +08:00
github-actions[bot]
d22e111f60 update 2024-04-11 23:53:19 2024-04-11 23:53:19 +08:00
Ing
90128eb68b Sort file lists before processing in getmodels, getaddons, and getmodules functions 2024-04-11 23:50:29 +08:00
github-actions[bot]
0547d2b928 update 2024-04-11 22:40:09 2024-04-11 22:40:09 +08:00
Ing
56d2213245 fix something 2024-04-11 22:36:56 +08:00
March FAN
afd124ce31 Update rr.po
Update zh-TW
2024-04-10 11:32:00 +08:00
github-actions[bot]
f5040e6f9c update 2024-04-09 06:17:47 2024-04-09 06:17:47 +08:00
Ing
f6461ae9a5 add system flag to addons.json 2024-04-09 06:14:17 +08:00
Ing
f881390311 fix typo 2024-04-09 05:04:58 +08:00
github-actions[bot]
ae7c666ed4 update 2024-04-09 04:26:21 2024-04-09 04:26:21 +08:00
Ing
1cc02dd732 add json/xlsx data 2024-04-09 04:21:06 +08:00
github-actions[bot]
9a0d8f691d update 2024-04-07 02:39:42 2024-04-07 02:39:42 +00:00
Ing
9265e271b7 fix disks number gt 26 not displayed 2024-04-07 05:42:28 +08:00
Ing
589bb306c8 add de_DE,es_ES,fr_FR,uk_UA,vi_VN 2024-04-06 06:07:52 +08:00
Ing
5a114156c2 translate 2024-04-06 05:17:30 +08:00
github-actions[bot]
77a06c4211 update 2024-04-04 22:29:05 2024-04-04 22:29:05 +00:00
Ing
00bafc9eab fix translate 2024-04-05 06:19:46 +08:00
Ing
37a2713dba add de_DE,es_ES,fr_FR,uk_UA,vi_VN 2024-04-05 05:45:42 +08:00
Ing
5e8dc6417e add de_DE,es_ES,fr_FR,uk_UA,vi_VN 2024-04-05 05:17:31 +08:00
Ing
cf8f8f170a add "Download DSM config backup files" 2024-04-05 04:31:04 +08:00
github-actions[bot]
983de0e13b update 2024-04-03 20:18:03 2024-04-03 20:18:03 +08:00
Ing
3399f199b9 add version for custom 2024-04-03 05:55:20 +08:00
Ing
acd3311a75 add models 2024-04-03 05:28:49 +08:00
Ing
10a9d65b31 fix Ctrl+C of update error 2024-04-03 03:11:01 +08:00
github-actions[bot]
3971fb2804 update 2024-04-03 02:32:44 2024-04-03 02:32:44 +08:00
Ing
04a3b98973 add space after the parenthesis 2024-04-02 20:48:13 +08:00
March FAN
7de9cf6037 Update rr.po
Update zh-TW
2024-04-02 15:19:18 +08:00
Ing
799882a584 add RRManager 2024-04-02 06:04:38 +08:00
Ing
0ee854d5eb add label 2024-04-02 03:43:22 +08:00
Ing
ea88502f89 add labels 2024-04-02 03:22:54 +08:00
Ing
0f0671792f fix email get 2024-04-01 19:12:53 +08:00
Ing
1b7bd9b1e5 fix something 2024-04-01 18:48:44 +08:00
Ing
144499a8c9 fix issue warinfo 2024-03-31 18:10:31 +08:00
Ing
7ddf9cbcec auto close custom issue 2024-03-31 18:06:08 +08:00
Ing
8b869d2224 fix email null 2024-03-31 08:20:55 +08:00
Ing
671783a3c9 fix Permission denied 2024-03-31 06:57:11 +08:00
github-actions[bot]
b1fcb40f5d update 2024-03-30 22:41:51 2024-03-30 22:41:51 +00:00
Ing
07bac01ee2 add show changelog 2024-03-31 03:59:15 +08:00
Ing
8cb284f49b add language of localbuild 2024-03-31 02:28:37 +08:00
Ing
208e8a791b fix something 2024-03-31 01:52:06 +08:00
github-actions[bot]
d1a498a421 update 2024-03-30 12:24:03 2024-03-30 12:24:03 +00:00
Ing
71cfb203a1 update readme 2024-03-30 16:51:33 +08:00
Ing
59d829f65d add rr custom 2024-03-30 15:12:51 +08:00
Ing
43cb096164 add need rebuild 2024-03-29 09:38:43 +08:00
Ing
4c4c8037f5 update readme 2024-03-29 05:21:40 +08:00
Ing
e082a52784 fix rebootto 2024-03-29 05:21:28 +08:00
Ing
0688e9e475 remove process substitution 2024-03-29 00:05:06 +08:00
March FAN
a663bbfc62 Update rr.po
Update zh-TW
2024-03-28 11:09:12 +08:00
github-actions[bot]
a58f505605 update 2024-03-28 01:56:14 2024-03-28 01:56:14 +00:00
Ing
8665fb8a1f add notify, rndis 2024-03-28 09:42:04 +08:00
March FAN
73b9e74c6b Update rr.po
Update zh_TW
2024-03-28 00:28:16 +08:00
Ing
37787b0271 enable HddHotplug 2024-03-27 04:52:29 +08:00
Ing
655a05180c fix form show 2024-03-27 04:52:00 +08:00
Ing
992b98931f disable no_console_suspend 2024-03-27 04:32:11 +08:00
Ing
d363faca57 add some error info 2024-03-27 04:31:13 +08:00
Ing
5d7e305172 add addNewDSMUser, removeBlockIPDB 2024-03-26 04:36:57 +08:00
github-actions[bot]
5b3c31e547 update 2024-03-24 23:13:28 2024-03-24 23:13:28 +00:00
github-actions[bot]
245251aaa1 update 2024-03-25 06:08:37 2024-03-25 06:08:37 +08:00
Ing
f6e497b7e6 fix typo 2024-03-22 22:40:26 +08:00
March FAN
a4633c8120 Update rr.po
Update zh-TW
2024-03-21 22:58:46 +08:00
Ing
d1eb3bb469 add max_sys_raid_disks 2024-03-20 17:31:59 +08:00
github-actions[bot]
9792feb8a2 update 2024-03-19 10:07:44 2024-03-19 10:07:44 +00:00
Ing
9c0840b736 fix typo 2024-03-19 17:00:59 +08:00
github-actions[bot]
7b96531de0 update 2024-03-19 08:20:51 2024-03-19 08:20:51 +00:00
March FAN
3e848992ee Update rr.po
Update zh-TW
2024-03-19 16:17:00 +08:00
Ing
0d20249763 fix something 2024-03-19 16:13:57 +08:00
Ing
e21e5963a2 add disk space check and add reboot to recovery and force_junior 2024-03-18 14:56:18 +08:00
github-actions[bot]
dbf784bc6c update 2024-03-16 13:13:29 2024-03-16 13:13:29 +00:00
Ing
016f8faaf5 fix(filename): modify Sponsoring img size 2024-03-16 17:45:04 +08:00
Ing
bf9f1b919a fix(readme): update credits and acknowledgments 2024-03-16 16:29:37 +08:00
@andatoshiki
8e449d891f fix(readme): update indentation margin spacing issue of blockquotes on native markdown-it github rendering by newlining after title 2024-03-16 01:11:55 -07:00
@andatoshiki
72cc3636b5 fix(readme): update wrongful precedence of heading for subsection of ch7 & remove repeatedly duplicated readme acknolwedgement section 2024-03-16 01:08:28 -07:00
@andatoshiki
89069391da fix(readme): update wrongful precedence of heading for subsection of ch7 & remove repeatedly duplicated readme acknolwedgement section 2024-03-16 01:08:05 -07:00
@andatoshiki
0a4e8c8958 fix(filename): fix mistakenly renamed filename for readme resulting inability for proper markdown rendering on project homepage 2024-03-16 01:04:11 -07:00
@andatoshiki
5f6a686b14 fix(filename): fix mistakenly renamed filename for readme resulting inability for proper markdown rendering on project homepage 2024-03-16 01:03:41 -07:00
@andatoshiki
e8f4eb7f16 chore(readme): create backup file of original project readme in situation of version rollback & completely rewrite the rough draft of refined readme with better layouting and linguistic grammars in english 2024-03-16 01:02:33 -07:00
Ing
396ec20817 Merge branch 'main' of https://github.com/RROrg/rr 2024-03-16 15:41:20 +08:00
@andatoshiki
88bd72b262 feat(i18n): add japanese localization translation po source file for project i18n 2024-03-16 00:10:19 -07:00
Ing
8927484406 add sourcebuild 2024-03-16 06:44:38 +08:00
Ing
603e959f99 move mnt dir 2024-03-16 03:01:56 +08:00
Ing
a89d0b946f fix unzip error log 2024-03-15 19:44:12 +08:00
Ing
051405f7c4 fix "Local upload" error 2024-03-15 15:59:37 +08:00
Ing
22f410fdcb add space check 2024-03-15 00:44:45 +08:00
Ing
f8ac354fd0 modify logs 2024-03-14 03:59:53 +08:00
Ing
2503dae2d0 add localbuild.sh 2024-03-13 03:10:43 +08:00
github-actions[bot]
d12fe8f163 update 2024-03-12 17:42:01 2024-03-12 17:42:01 +00:00
Ing
3931f963b1 mdoify save initrd-rr 2024-03-13 01:39:38 +08:00
Ing
1df5b0956a modify advancedMenu 2024-03-12 21:24:31 +08:00
Ing
dabab56815 fix make error log 2024-03-12 07:37:20 +08:00
Ing
39e9454648 fix get pat data 2024-03-11 05:20:23 +08:00
Ing
f6216401da fix duplicate function names 2024-03-11 02:38:12 +08:00
Ing
7f819e9801 fix something 2024-03-10 23:02:06 +08:00
Ing
e16be2497a fix WORK_PATH 2024-03-10 17:21:09 +08:00
Ing
246a275317 fix typo 2024-03-09 18:02:40 +08:00
March FAN
6f926725e7 Update rr.po
Update zh-TW
2024-03-09 16:59:17 +08:00
Ing
a6f231d392 fix typo 2024-03-09 16:48:47 +08:00
Ing
bb039b85c6 fix main NEXT 2024-03-09 15:54:05 +08:00
Ing
8707787270 remove kmod 2024-03-09 15:53:28 +08:00
Ing
b9aea34708 update img-gen.sh 2024-03-09 15:50:30 +08:00
EXP
cb712faa45 Update rr.po 2024-03-09 03:10:24 +09:00
github-actions[bot]
49376e5e19 update 2024-03-08 16:36:32 2024-03-08 16:36:32 +00:00
github-actions[bot]
ec2e5493df update 2024-03-09 00:27:22 2024-03-09 00:27:22 +08:00
Ing
aedea20265 update grub 2024-03-09 00:01:42 +08:00
Ing
49c2fef305 Fix DSM system related operations 2024-03-08 20:24:16 +08:00
Ing
2ecf54f0b4 Rewrite Recovery installed DSM systems 2024-03-08 19:34:50 +08:00
Ing
fce0e76221 fix something 2024-03-08 00:50:05 +08:00
Ing
6b65130c3f add 2>/dev/null 2024-03-07 04:32:12 +08:00
Ing
ffb044b0bf fix convertpo2mo 2024-03-06 22:17:02 +08:00
Ing
0efbb8a87d modify < <() "进程替换" to <<<$() "Here String" 2024-03-06 22:09:14 +08:00
March FAN
7cc8c84855 Update rr.po
Update zh-TW
2024-03-06 18:13:29 +08:00
Ing
39512fff1c fix format mmc 2024-03-06 15:28:31 +08:00
Ing
22e2f0bd93 modify lang path 2024-03-06 04:31:04 +08:00
Ing
0194be8871 modify update 2024-03-06 02:02:25 +08:00
March FAN
0838a54d57 Update zh_TW.po
Update zh_TW
2024-03-04 20:54:57 +08:00
github-actions[bot]
1fc4e97fd6 update 2024-03-03 18:18:27 2024-03-03 18:18:27 +00:00
Ing
640e73177b add customDTS menu and add --connect-timeout of curl 2024-03-04 02:06:10 +08:00
Ing
4bc407b45e add sn prefix of HD6500 2024-03-01 00:56:53 +08:00
Ing
b77e9fb60b fix compatible with older versions 2024-03-01 00:56:14 +08:00
Ing
e78bfbf48b add SN of HD6500, SA3400. Thanks @OrpheeGT 2024-02-29 22:19:01 +08:00
github-actions[bot]
ee98a03a67 update 2024-02-29 05:43:33 2024-02-29 05:43:33 +00:00
Ing
c71186bd9e enable RS2423rp+ 2024-02-29 01:04:44 +08:00
Ing
253e3cfdd3 add dtc errormsg 2024-02-29 00:15:51 +08:00
Ing
734b913351 fix broadwellntbap 2024-02-29 00:15:27 +08:00
Ing
c031855b06 fix "系统无法将特定硬盘添加到系统分区。请单击链接以修复此问题。" of HD6500 2024-02-29 00:15:13 +08:00
Ing
ece3798ddf misc cannot be uninstall 2024-02-28 18:10:21 +08:00
Ing
6673d94602 fix something 2024-02-28 17:10:38 +08:00
Ing
a63a57b161 fix reset modules of update 2024-02-27 19:57:58 +08:00
Ing
584435c6db add PRODUCTVERL to addons.sh 2024-02-27 19:47:08 +08:00
Ing
cf95533ca3 fix typo 2024-02-26 15:29:01 +08:00
github-actions[bot]
4a1bd968bf update 2024-02-25 18:14:33 2024-02-25 18:14:33 +00:00
Ing
149c76f4aa add Recovery 2024-02-26 01:33:52 +08:00
Ing
e063c07018 add synopkg 2024-02-26 00:23:39 +08:00
Ing
b4e8b4013e fix switch model 2024-02-26 00:23:01 +08:00
github-actions[bot]
02c71b8566 update 2024-02-22 10:01:59 2024-02-22 10:01:59 +00:00
Ing
7d0cfbc8bf fix firmware of cks 2024-02-22 13:43:59 +08:00
Ing
f5c14c3350 fix cks 2024-02-19 02:36:06 +08:00
Ing
5cce2b4850 fix sn of FS/HD models 2024-02-19 00:53:37 +08:00
Ing
3a62b5ff09 add silent update 2024-02-18 22:00:44 +08:00
March FAN
46a86469d6 Update zh_TW.po
Update zh_TW
2024-02-06 18:41:12 +08:00
github-actions[bot]
04f58bccdf update 2024-02-04 09:28:36 2024-02-04 09:28:36 +00:00
Ing
02047d9229 add cks 2024-02-04 17:20:31 +08:00
Ing
3625768487 remove disks num 2024-02-02 19:59:45 +08:00
github-actions[bot]
1a2dea5219 update 2024-02-01 16:08:22 2024-02-01 16:08:22 +00:00
Ing
972982fb44 fix typo 2024-02-01 00:28:14 +08:00
Ing
accf626997 modify i915 depends 2024-01-31 22:51:33 +08:00
Ing
1a53bc4b3e fix typo 2024-01-27 15:52:21 +08:00
Ing
58720a3c70 modify clean cache 2024-01-27 11:04:49 +08:00
March FAN
6d9e99e365 Update zh_TW.po
Update zh_TW
2024-01-26 16:02:52 +08:00
github-actions[bot]
68ed0a03ae update 2024-01-26 06:23:09 2024-01-26 06:23:09 +00:00
Ing
613a3b721a update ko_KR 2024-01-26 12:29:51 +08:00
Ing
2d06862db3 fix "Force enable Telnet&SSH of DSM system" 2024-01-26 12:18:47 +08:00
Ing
d5f127d902 enable mountloader 2024-01-24 09:52:36 +08:00
Ing
2f68ae0446 add addons translation 2024-01-24 09:52:19 +08:00
March FAN
39eca5adab Update zh_TW.po
Update zh_TW
2024-01-23 21:34:55 +08:00
Ing
25e73affee add "Deselect i915 with dependencies" 2024-01-23 13:24:28 +08:00
EXP
cba3c62611 Update ko_KR.po 2024-01-20 01:12:00 +09:00
EXP
fc400fe9e1 Update ko_KR.po 2024-01-20 01:02:03 +09:00
EXP
b20b9bef16 Update ko_KR.po 2024-01-20 00:34:46 +09:00
EXP
19311e0adf Update ko_KR.po 2024-01-20 00:24:14 +09:00
EXP
c3a118df73 Update ko_KR.po 2024-01-20 00:14:40 +09:00
EXP
572e25ecfb Update ko_KR.po 2024-01-20 00:04:40 +09:00
EXP
ab7cee7a86 Update ko_KR.po 2024-01-19 23:33:02 +09:00
EXP
41298a96bf Update ko_KR.po 2024-01-19 23:31:53 +09:00
EXP
d64bd38407 Update ko_KR.po 2024-01-19 23:00:36 +09:00
EXP
00353428fc Update ko_KR.po 2024-01-19 16:55:49 +09:00
github-actions[bot]
cdf827150c update 2024-01-19 06:41:01 2024-01-19 06:41:01 +00:00
Ing
f8ddc826f6 Merge branch 'main' of https://github.com/RROrg/rr 2024-01-19 14:31:50 +08:00
Ing
c67dd5f6e0 Add Show translators 2024-01-19 14:31:41 +08:00
EXP
f015e1b9c9 Update ko_KR.po 2024-01-19 15:30:37 +09:00
March FAN
f0ccfc5f7c Update zh_TW.po
Update zh_TW.po
2024-01-18 21:41:07 +08:00
Ing
55b7cb1f7e fix sonething 2024-01-18 13:28:47 +08:00
EXP
75b08bf6c8 Update ko_KR.po 2024-01-17 02:19:10 +09:00
EXP
784220aadb Update ko_KR.po 2024-01-17 02:15:14 +09:00
EXP
0ea5858372 Update ko_KR.po 2024-01-17 02:05:34 +09:00
Ing
0f690d6bcb fix qhxg.png 2024-01-16 22:28:46 +08:00
EXP
831bc8d3d7 Update ko_KR.po 2024-01-16 04:25:39 +09:00
github-actions[bot]
a510fc13a7 update 2024-01-14 18:54:33 2024-01-14 18:54:33 +00:00
Ing
1acccbc049 add qhxg_qr 2024-01-15 02:48:05 +08:00
Ing
4902b6f0d7 fix typo 2024-01-14 21:13:33 +08:00
EXP
4674cfa753 Add files via upload 2024-01-14 10:19:00 +09:00
Ing
48a9551cd0 chmod +x 2024-01-14 00:31:48 +08:00
Ing
fb4d979332 add fbsize 2024-01-14 00:31:16 +08:00
Ing
39127d060d fix i18n 2024-01-13 23:21:46 +08:00
March FAN
3147689ce5 Update zh_TW.po
Update zh_TW
2024-01-13 17:09:25 +08:00
Ing
1bdc5a917f add ru, ko 2024-01-13 12:51:33 +08:00
Ing
202f374860 fix typo 2024-01-13 12:30:22 +08:00
Ing
820f0f7a7b Clean old pat file 2024-01-12 11:18:13 +08:00
Ing
7983c11e1e add "Edit modules that need to be copied to DSM" 2024-01-12 11:17:36 +08:00
Ing
6c7e719d63 fix DS224+, fix MMC, fix printer, etc. 2024-01-12 05:03:28 +08:00
March FAN
8c8945893b Update zh_TW.po
Update zh_TW
2024-01-08 18:43:15 +08:00
github-actions[bot]
7be66d9dc8 update 2024-01-04 15:28:17 2024-01-04 15:28:17 +00:00
Ing
149b3877b1 fix Recovery DSM 2024-01-04 23:10:13 +08:00
Ing
63a065ca16 add prompt message 2024-01-04 03:48:33 +08:00
Ing
cd46fc3a22 fix emmc 2024-01-04 03:09:59 +08:00
Ing
9bcb742612 add "Parse pat" 2024-01-03 21:53:35 +08:00
Ing
c4f8744961 add systemctl logs 2024-01-03 21:53:09 +08:00
March FAN
c84bd0fdb4 Update zh_TW.po
Update zh_TW
2024-01-01 16:24:45 +08:00
github-actions[bot]
710633a121 update 2023-12-30 22:43:08 2023-12-30 22:43:08 +00:00
Ing
aa19cc64ea add logs 2023-12-31 06:39:56 +08:00
Ing
509a7fadb4 add "Custom patch script" 2023-12-31 05:47:15 +08:00
Ing
37ca3e50d4 Fix mmc formatting stuck 2023-12-30 23:24:37 +08:00
Ing
a0ea21a604 add dufs 2023-12-30 12:48:03 +08:00
March FAN
4decaea90d Update zh_TW.po
Update zh_TW
2023-12-29 16:09:23 +08:00
github-actions[bot]
960068d367 update 2023-12-28 19:06:45 2023-12-28 19:06:45 +00:00
Ing
21e589d616 fix emmc boot 2023-12-28 21:14:41 +08:00
Ing
2e6264da9a add VirtualDSM 2023-12-26 23:13:15 +08:00
marchfun1
eded30bb87 Update zh_TW.po
Update zh_TW
2023-12-26 23:06:27 +08:00
Ing
4507004d2d fix typo 2023-12-26 07:01:52 +08:00
Ing
c8ab486fe5 Add prompt 2023-12-26 01:00:39 +08:00
github-actions[bot]
233df4526d update 2023-12-24 16:37:00 2023-12-24 16:37:00 +00:00
Ing
10110164a0 add SA3600 and modify cmdline & synoinfo 2023-12-25 00:17:10 +08:00
Ing
7a9bd5c409 for broadwellntbap test 2023-12-25 00:15:27 +08:00
Ing
1202cee287 Modify the parameters of kexec 2023-12-25 00:14:48 +08:00
Ing
8386787518 add RAID/VIRTIO information to "Show SATA(s)" and remove cache of switch model 2023-12-25 00:13:22 +08:00
marchfun1
c801ce8fb6 Update zh_TW.po
Update zh_TW.po
2023-12-24 10:49:49 +08:00
github-actions[bot]
afe4ae4274 update 2023-12-19 01:32:10 2023-12-19 01:32:10 +00:00
Ing
4049dceb8c fix typo 2023-12-19 01:59:23 +08:00
Ing
3e25741a8d add emmc_boot 2023-12-19 01:00:38 +08:00
Ing
cb03934cc1 add supportext4 2023-12-19 00:49:54 +08:00
Ing
c0b261f60f update guide.md 2023-12-18 15:37:26 +08:00
Ing
ff21a43992 Allow small files to be uploaded via the web 2023-12-17 19:27:21 +08:00
Ing
1cc3423a9f fix someething 2023-12-16 18:15:08 +08:00
github-actions[bot]
5dd0ca89b1 update 2023-12-16 09:09:56 2023-12-16 09:09:56 +00:00
github-actions[bot]
a7552eaf2d update 2023-12-11 11:24:45 2023-12-11 11:24:45 +00:00
Ing
15bd16e7b1 fix sa6400 netif seq 2023-12-11 17:26:30 +08:00
Ing
cd90e87889 fix purley and broadwellntbap 2023-12-11 02:44:21 +08:00
marchfun1
79a5ce2450 Update zh_TW.po
Update zh_TW
2023-12-10 23:25:15 +08:00
Ing
b9b4ae66bd remove web for lszrz 2023-12-10 20:09:17 +08:00
github-actions[bot]
65abc66f84 update 2023-12-09 17:34:55 2023-12-09 17:34:55 +00:00
Ing
e1366a69d5 add "Clone bootloader disk to another disk" 2023-12-09 23:43:09 +08:00
Ing
cd5a2c779b add root= for rr 2023-12-09 23:42:25 +08:00
github-actions[bot]
2c6f46f90a update 2023-12-09 22:59:51 2023-12-09 22:59:51 +08:00
Ing
9b5be3cb3c fix typo 2023-12-08 17:55:38 +08:00
github-actions[bot]
2ab0756070 update 2023-12-05 15:18:28 2023-12-05 15:18:28 +00:00
Ing
c455cbdce1 fix something 2023-12-05 23:16:40 +08:00
github-actions[bot]
b2d5333056 update 2023-12-05 03:05:07 2023-12-05 03:05:07 +08:00
marchfun1
6823d37ef2 Update zh_TW.po
Update zh_TW
2023-12-04 22:05:00 +08:00
Ing
74bf9de1f4 update translate 2023-12-04 00:29:38 +08:00
github-actions[bot]
bdb42a9527 update 2023-12-03 08:52:40 2023-12-03 08:52:40 +00:00
Ing
f76a877fbb add Regular match file name for "Local upload" 2023-12-03 16:51:00 +08:00
Ing
f040742997 default zh_CN.UTF-8 2023-12-02 22:04:07 +08:00
Ing
33a1b6a8f0 add "Force enable telnet of DSM system" 2023-12-02 21:32:51 +08:00
Ing
01b4595902 fix flags of denverton 2023-12-02 21:31:34 +08:00
github-actions[bot]
c2bbadc769 update 2023-12-02 07:01:07 2023-12-02 07:01:07 +00:00
github-actions[bot]
57d633f4b9 update 2023-12-01 18:13:23 2023-12-01 18:13:23 +00:00
Ing
03a98cf7ac modify repo url 2023-12-02 02:00:17 +08:00
github-actions[bot]
253cadfd0c update 2023-12-02 00:03:37 2023-12-02 00:03:37 +08:00
Ing
5deab88476 modify repo 2023-12-01 23:54:40 +08:00
github-actions[bot]
8fc4b4db62 update 2023-11-26 16:43:18 2023-11-26 16:43:18 +00:00
Ing
7f8a07175c default 2023.08.x 2023-11-27 00:39:46 +08:00
Ing
75ce5b9d5c update kver 6.4 2023-11-27 00:37:56 +08:00
Ing
8563d9e5c8 add proxy setting 2023-11-27 00:37:27 +08:00
github-actions[bot]
ab04c65782 update 2023-11-22 10:09:53 2023-11-22 10:09:53 +00:00
Ing
a850f17153 modify bug.md 2023-11-22 02:31:56 +08:00
Ing
d3612d6ec7 fix something 2023-11-21 23:10:23 +08:00
Ing
d2d2f593c4 Merge pull request #371 from marchfun1/patch-12
Update zh_TW.po
2023-11-21 13:30:13 +08:00
marchfun1
99a667b5d3 Update zh_TW.po
Update zh_TW
2023-11-21 10:24:33 +08:00
Ing
f18fd3d587 modify readme 2023-11-20 21:01:29 +08:00
github-actions[bot]
503c7324a3 update 2023-11-20 10:41:37 2023-11-20 10:41:37 +00:00
Ing
0ac83cb309 add mmc 2023-11-20 18:15:01 +08:00
github-actions[bot]
f5ac5ec4ac update 2023-11-14 14:01:38 2023-11-14 14:01:38 +00:00
Ing
bb3a629058 fix something 2023-11-14 21:59:33 +08:00
github-actions[bot]
b47171d8b5 update 2023-11-14 13:13:27 2023-11-14 13:13:27 +00:00
Ing
530f23a88b mod compatibility 2023-11-14 21:11:20 +08:00
Ing
87f265f3ad fix something 2023-11-14 20:46:56 +08:00
Ing
87f0dbb6f1 Merge pull request #354 from marchfun1/patch-10
Update zh_TW.po
2023-11-14 14:29:30 +08:00
marchfun1
2bce5b0a89 Update zh_TW.po
Update zh_TW
2023-11-14 14:22:29 +08:00
github-actions[bot]
4f3cb09f07 update 2023-11-12 09:41:46 2023-11-12 09:41:46 +00:00
Ing
1a792b7ea6 add wlan 2023-11-12 17:03:51 +08:00
Ing
3971f9609f fix sa6400 no-Serial 2023-11-12 17:03:35 +08:00
github-actions[bot]
e8d9c18088 update 2023-11-09 09:01:14 2023-11-09 09:01:14 +00:00
github-actions[bot]
9fe034101a update 2023-11-06 11:23:10 2023-11-06 11:23:10 +00:00
Ing
08f4198615 fix netif_num and fix reset passwd 2023-11-06 16:06:09 +08:00
Ing
1d6caa4b44 Merge pull request #325 from marchfun1/patch-9
Update zh_TW.po
2023-11-05 12:38:05 +08:00
marchfun1
03e4540459 Update zh_TW.po
Update zh_TW
2023-11-05 10:51:09 +08:00
156 changed files with 82122 additions and 10799 deletions

6
.gitattributes vendored
View File

@ -1 +1,5 @@
*.sh eol=lf
* text=auto eol=lf
*.png binary
*.jpg binary
*.gif binary
*.ico binary

View File

@ -7,10 +7,13 @@ assignees: ''
---
请填写以下信息.
Please fill in the following information.
Install ENV: (You can find it in the boot interface.)
* DMI:
* CPU:
* NIC:
* NIC: (pid & vid)
RR version: (You can find it in the update menu.)
* RR:
@ -26,6 +29,14 @@ Issue:
logs:
(## 因为 log中存在 SN/MAC 等一些敏感信息, 当提供完整文件时请自行抹除他们, 当然你也可以发送到我的邮箱. ##)
(## Because the log contains some sensitive information such as SN/MAC, please delete them when providing the complete file. Of course, you can also send it to my email. ##)
...
(请先看一下#173#175#226 的内容)
(Plz review the content of #173, #175, #226 first)
...
(如果你只是说 XXX 不能用, 什么详细信息也不提供, 我也只能说感谢你的反馈.)
(If you just say XXX doesn't work without providing any details, I can only say thank you for your feedback.)
...

112
.github/workflows/data.yml vendored Normal file
View File

@ -0,0 +1,112 @@
#
# Copyright (C) 2022 Ing <https://github.com/wjz304>
#
# This is free software, licensed under the MIT License.
# See /LICENSE for more information.
#
name: Data
on:
release:
types:
- created
workflow_dispatch:
inputs:
push:
description: "push"
default: false
type: boolean
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@main
with:
ref: main
- name: Init Env
run: |
git config --global user.email "github-actions[bot]@users.noreply.github.com"
git config --global user.name "github-actions[bot]"
sudo timedatectl set-timezone "Asia/Shanghai"
- name: Get Data
run: |
REPO="${{ github.server_url }}/${{ github.repository }}"
PRERELEASE="true"
TAG=""
for i in {1..3}; do
if [ "${PRERELEASE}" = "true" ]; then
TAG="$(curl -skL --connect-timeout 10 "${REPO}/tags" | grep "/refs/tags/.*\.zip" | sed -E 's/.*\/refs\/tags\/(.*)\.zip.*$/\1/' | sort -rV | head -1 | sed 's/^[v|V]//g')"
else
TAG="$(curl -skL --connect-timeout 10 -w "%{url_effective}" -o /dev/null "${REPO}/releases/latest" | awk -F'/' '{print $NF}' | sed 's/^[v|V]//g')"
fi
rm -f rr-${TAG}.img.zip
STATUS=$(curl -kL --connect-timeout 10 -w "%{http_code}" "${REPO}/releases/download/${TAG}/rr-${TAG}.img.zip" -o "rr-${TAG}.img.zip")
if [ $? -eq 0 ] && [ ${STATUS:-0} -eq 200 ]; then
break
else
echo "Download failed, retry $i/3"
sleep 60
fi
done
if [ ! -f "rr-${TAG}.img.zip" ] || [ ${STATUS:-0} -ne 200 ]; then
echo "Download failed after 3 attempts"
exit 1
fi
unzip rr-${TAG}.img.zip -d rr rr.img
sudo apt update
sudo apt install -y locales busybox dialog gettext sed gawk jq curl
sudo apt install -y python-is-python3 python3-pip libelf-dev qemu-utils cpio xz-utils lz4 lzma bzip2 gzip zstd
sudo apt install -y build-essential libtool pkgconf libzstd-dev liblzma-dev libssl-dev # kmodule dependencies
# Backup the original python3 executable.
sudo mv -f "$(realpath $(which python3))/EXTERNALLY-MANAGED" "$(realpath $(which python3))/EXTERNALLY-MANAGED.bak" 2>/dev/null || true
sudo pip3 install -U -r scripts/requirements.txt
. scripts/func.sh "${{ secrets.RRORG }}"
LOOPX=$(sudo losetup -f)
sudo losetup -P "${LOOPX}" "rr/rr.img"
rm -rf "/tmp/mnt/p3"
mkdir -p "/tmp/mnt/p3"
sudo mount "${LOOPX}p3" "/tmp/mnt/p3"
unpackInitrd /tmp/mnt/p3/initrd-rr "rr/initrd"
python3 scripts/func.py getmodels -w "rr/initrd" -j "docs/models.json" -x "docs/models.xlsx"
python3 scripts/func.py getpats -w "rr/initrd" -j "docs/pats.json" -x "docs/pats.xlsx"
python3 scripts/func.py getaddons -w "/tmp" -j "docs/addons.json" -x "docs/addons.xlsx"
python3 scripts/func.py getmodules -w "/tmp" -j "docs/modules.json" -x "docs/modules.xlsx"
sudo umount "/tmp/mnt/p3"
sudo losetup -d "${LOOPX}"
rm -rf "/tmp/mnt/p3"
- name: Upload to Artifacts
if: success()
uses: actions/upload-artifact@v4
with:
name: docs
path: |
docs/*.json
docs/*.xlsx
retention-days: 5
- name: Check and Push
if: success() && (inputs.push == true || github.event.action == 'created')
run: |
echo "Git push ..."
# git checkout main
git pull
status=$(git status -s | grep -E "docs" | awk '{printf " %s", $2}')
if [ -n "${status}" ]; then
git add ${status}
git commit -m "update $(date +%Y-%m-%d" "%H:%M:%S)"
git push -f
fi

View File

@ -1,61 +0,0 @@
#
# Copyright (C) 2022 Ing <https://github.com/wjz304>
#
# This is free software, licensed under the MIT License.
# See /LICENSE for more information.
#
name: Grub
on:
workflow_dispatch:
inputs:
push:
description: "push"
default: false
type: boolean
jobs:
grub:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@main
- name: Initialization environment
run: |
git config --global user.email "github-actions[bot]@users.noreply.github.com"
git config --global user.name "github-actions[bot]"
sudo timedatectl set-timezone "Asia/Shanghai"
sudo apt update
sudo apt install -y build-essential bison flex dosfstools
- name: Make Grub
run: |
. scripts/grub.sh "grub-2.06" "i386-pc i386-efi x86_64-efi" "RR"
- name: Upload artifact
uses: actions/upload-artifact@v3
with:
name: grub
path: |
grub.img.gz
- name: Check and Push
if: success() && inputs.push == true
run: |
if [ -f "grub.img.gz" ]; then
echo "Copy img ..."
mv -f grub.img.gz files/grub.img.gz
echo "Git push ..."
git pull
status=$(git status -s | grep -E 'grub.img.gz' | awk '{printf " %s", $2}')
if [ -n "${status}" ]; then
git add ${status}
git commit -m "update $(date +%Y-%m-%d" "%H:%M:%S)"
git push -f
fi
else
echo "No change ..."
fi

View File

@ -5,7 +5,7 @@
# See /LICENSE for more information.
#
name: Auto Comment
name: Issues
on:
issues:
types: [opened, reopened]
@ -14,6 +14,9 @@ jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@main
- name: Init Env
run: |
git config --global user.email "github-actions[bot]@users.noreply.github.com"
@ -21,15 +24,59 @@ jobs:
sudo timedatectl set-timezone "Asia/Shanghai"
- name: Check Issues
shell: python
run: |
if echo "${{ github.event.issue.body }}" | grep -q "ENV"; then
echo "FALG=true" >> $GITHUB_ENV
else
echo "FALG=false" >> $GITHUB_ENV
fi
# -*- coding: utf-8 -*-
import json
import os
import subprocess
- name: Create Issues comment
if: env.FALG == 'false'
def set_env(name, value):
subprocess.call(f'echo "{name}<<EOF" >> $GITHUB_ENV', shell=True)
subprocess.call(f'echo "{value}" >> $GITHUB_ENV', shell=True)
subprocess.call(f'echo "EOF" >> $GITHUB_ENV', shell=True)
issuetitle = """${{ github.event.issue.title }}"""
issuebody = """${{ github.event.issue.body }}"""
iscustom = 'false'
warinfo = 'false'
fields = {
"format": "",
"size": "",
"template": "",
"language": "",
"sn": "",
"macs": "",
"tips": "",
"model": "",
"version": "",
"kernel": "",
"addons": "",
"modules": ""
}
try:
if issuetitle.strip().lower().startswith('custom'):
jsonbody = json.loads(issuebody)
iscustom = 'true'
for k in fields:
fields[k] = jsonbody.get(k, "")
except Exception:
pass
if iscustom == 'false':
if not any(x in issuebody for x in ['DMI', 'CPU', 'NIC']):
warinfo = 'true'
set_env("iscustom", iscustom)
set_env("warinfo", warinfo)
for k, v in fields.items():
set_env(k, v)
- name: Update Comment Warinfo
if: env.warinfo == 'true'
uses: actions-cool/issues-helper@v3
with:
actions: "create-comment"
@ -38,12 +85,13 @@ jobs:
body: |
<img src="https://user-images.githubusercontent.com/5615843/235939097-6798da58-24fd-44cc-9970-c8d2f9609704.jpg" width="400">
Please fill in the following information.
请填写以下信息.
Please fill in the following information.
Install ENV: (You can find it in the boot interface.)
* DMI:
* CPU:
* NIC:
* NIC: (pid & vid)
RR version: (You can find it in the update menu.)
* RR:
@ -59,7 +107,240 @@ jobs:
logs:
(## 因为 log中存在 SN/MAC 等一些敏感信息, 当提供完整文件时请自行抹除他们, 当然你也可以发送到我的邮箱. ##)
(## Because the log contains some sensitive information such as SN/MAC, please delete them when providing the complete file. Of course, you can also send it to my email. ##)
...
(请先看一下#173、#175、#226 的内容)
(Plz review the content of #173, #175, #226 first)
...
(如果你只是说 XXX 不能用, 什么详细信息也不提供, 我也只能说感谢你的反馈.)
(If you just say XXX doesn't work without providing any details, I can only say thank you for your feedback.)
...
emoji: heart
- name: Update Comment Labels
if: env.iscustom == 'true'
uses: actions-cool/issues-helper@v3
with:
actions: 'add-labels'
token: ${{ secrets.GITHUB_TOKEN }}
issue-number: ${{ github.event.issue.number }}
labels: 'custom,${{ env.model }}'
- name: Update Comment Building
if: env.iscustom == 'true'
id: comment
uses: actions-cool/issues-helper@v3
with:
actions: 'create-comment'
token: ${{ secrets.GITHUB_TOKEN }}
issue-number: ${{ github.event.issue.number }}
body: |
Hi @${{ github.event.issue.user.login }}.
RR-${{ env.model }} building (Usually about 5 minutes) ...
> ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
----
emoji: heart
- name: Run Build
if: env.iscustom == 'true'
run: |
# 累了, 毁灭吧!
sudo apt update
sudo apt install -y locales busybox dialog gettext sed gawk jq curl
sudo apt install -y python-is-python3 python3-pip libelf-dev qemu-utils dosfstools cpio xz-utils lz4 lzma bzip2 gzip zstd
. scripts/func.sh "${{ secrets.RRORG }}"
REPO="${{ github.server_url }}/${{ github.repository }}"
PRERELEASE="true"
TAG=""
if [ "${PRERELEASE}" = "true" ]; then
TAG="$(curl -skL --connect-timeout 10 "${REPO}/tags" | grep "/refs/tags/.*\.zip" | sed -E 's/.*\/refs\/tags\/(.*)\.zip.*$/\1/' | sort -rV | head -1 | sed 's/^[v|V]//g')"
else
TAG="$(curl -skL --connect-timeout 10 -w "%{url_effective}" -o /dev/null "${REPO}/releases/latest" | awk -F'/' '{print $NF}' | sed 's/^[v|V]//g')"
fi
rm -f rr-${TAG}.img.zip
STATUS=$(curl -kL --connect-timeout 10 -w "%{http_code}" "${REPO}/releases/download/${TAG}/rr-${TAG}.img.zip" -o "rr-${TAG}.img.zip")
if [ $? -ne 0 ] || [ ${STATUS:-0} -ne 200 ]; then
echo "Download failed"
exit 1
fi
unzip rr-${TAG}.img.zip -d rr rr.img
echo "TAG=${TAG}" >> $GITHUB_ENV
case "${{ env.size }}" in
2GB)
echo "2GB"
;;
4GB)
echo "4GB"
resizeImg rr/rr.img +2048M
;;
8GB)
echo "8GB"
resizeImg rr/rr.img +6144M
;;
*)
echo "unknown size"
;;
esac
LOOPX=$(sudo losetup -f)
sudo losetup -P "${LOOPX}" rr/rr.img
echo "Building..."
{
echo ". menu.sh"
[ -n "${{ env.language }}" ] && echo "echo \"${{ env.language }}.UTF-8\" >/mnt/p1/.locale"
[ -n "${{ env.tips }}" ] && echo "echo -e \"${{ env.tips }}\" >/mnt/p3/AddTips"
[ -n "${{ env.kernel }}" ] && echo "writeConfigKey \"kernel\" \"${{ env.kernel }}\" \"\${USER_CONFIG_FILE}\""
echo "menu.sh modelMenu \"${{ env.model }}\""
echo "menu.sh productversMenu \"${{ env.version }}\""
[ -n "${{ env.addons }}" ] && {
echo "writeConfigKey \"addons\" \"{}\" \"\${USER_CONFIG_FILE}\""
IFS=',' read -ra ADDON_ARR <<< "${{ env.addons }}"
for A in "${ADDON_ARR[@]}"; do
if echo "${A}" | grep -qE '^[^:]+:[^:]+$'; then
KEY="$(echo "${A}" | cut -d':' -f1 | xargs)"
VAL="$(echo "${A}" | cut -d':' -f2 | xargs)"
else
KEY="${A}"
VAL=""
fi
echo "writeConfigKey \"addons.\\\"${KEY}\\\"\" \"${VAL}\" \"\${USER_CONFIG_FILE}\""
done
}
[ ! "custom" = "${{ env.kernel }}" ] && [ -n "${{ env.modules }}" ] && {
echo "writeConfigKey \"modules\" \"{}\" \"\${USER_CONFIG_FILE}\""
echo "mergeConfigModules \"$(echo "${{ env.modules }}" | tr ',' '\n')\" \"\${USER_CONFIG_FILE}\""
}
echo "menu.sh make"
echo "menu.sh cleanCache"
[ -n "${{ env.sn }}" ] && echo "writeConfigKey \"sn\" \"${{ env.sn }}\" \"\${USER_CONFIG_FILE}\""
[ -n "${{ env.macs }}" ] && {
MACS=($(echo "${{ env.macs }}" | sed 's/[:-]//g' | sed 's/.*/\U&/' | sed 's/[;,]/ /g'))
[ -n "${MACS[0]}" ] && echo "writeConfigKey \"mac1\" \"${MACS[0]}\" \"\${USER_CONFIG_FILE}\""
[ -n "${MACS[1]}" ] && echo "writeConfigKey \"mac2\" \"${MACS[1]}\" \"\${USER_CONFIG_FILE}\""
}
[ "true" = "${{ env.template }}" ] && {
echo "writeConfigKey \"sn\" \"\" \"\${USER_CONFIG_FILE}\""
echo "writeConfigKey \"mac1\" \"\" \"\${USER_CONFIG_FILE}\""
echo "writeConfigKey \"mac2\" \"\" \"\${USER_CONFIG_FILE}\""
}
} > build.sh
chmod +x build.sh
docker pull wjz304/rr:${TAG}
docker run --rm --privileged -p 7681:7681 -p 7304:7304 -p 7080:7080 -p 7022:22 -v ${PWD}/build.sh:/opt/rr/build.sh wjz304/rr:${TAG} bash build.sh
sudo losetup --detach "${LOOPX}"
ls rr -al
{
echo "RR: "
echo " VERSION: ${TAG}"
echo " CUSTOM: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"
echo
echo "After the image is written to the disk, it will boot directly into DSM without the need to compile again."
echo "Of course, you can also modify the settings yourself."
} >README.txt
case "${{ env.format }}" in
ova)
echo "OVA"
convertova "rr/rr.img" "rr/rr.ova"
(cd rr && sha256sum rr.ova >../sha256sum)
zip -9 "rr-${{ env.model }}-${TAG}-${{ github.run_id }}.ova.zip" -j rr/rr.ova sha256sum README.txt
;;
vmx)
echo "VMX"
convertvmx "rr/rr.img" "rr.vmx" # rr.vmx is a directory
(cd rr.vmx && sha256sum * >../sha256sum)
zip -9 "rr-${{ env.model }}-${TAG}-${{ github.run_id }}.vmx.zip" -r rr.vmx sha256sum README.txt
;;
vmdk)
echo "VMDK"
qemu-img convert rr/rr.img -O vmdk -o 'adapter_type=lsilogic,subformat=monolithicSparse,compat6' rr/rr.vmdk
(cd rr && sha256sum rr.vmdk >../sha256sum)
zip -9 "rr-${{ env.model }}-${TAG}-${{ github.run_id }}.vmdk.zip" -j rr/rr.vmdk sha256sum README.txt
;;
flat)
echo "FLAT"
qemu-img convert rr/rr.img -O vmdk -o 'adapter_type=lsilogic,subformat=monolithicFlat,compat6' rr/rr.vmdk
(cd rr && sha256sum rr*.vmdk >../sha256sum)
zip -9 "rr-${{ env.model }}-${TAG}-${{ github.run_id }}.flat.zip" -j rr/rr*.vmdk sha256sum README.txt
;;
vhd)
echo "VHD"
qemu-img convert rr/rr.img -O vpc rr/rr.vhd
createvmc "rr/rr.vhd" "rr/rr.vmc"
(cd rr && sha256sum rr.vhd >../sha256sum)
zip -9 "rr-${{ env.model }}-${TAG}-${{ github.run_id }}.vhd.zip" -j rr/rr.vmc rr/rr.vhd sha256sum README.txt
;;
vhdx)
echo "VHDX"
qemu-img convert rr/rr.img -O vhdx -o subformat=dynamic rr/rr.vhdx
(cd rr && sha256sum rr.vhdx >../sha256sum)
zip -9 "rr-${{ env.model }}-${TAG}-${{ github.run_id }}.vhdx.zip" -j rr/rr.vhdx sha256sum README.txt
;;
*)
echo "IMG"
(cd rr && sha256sum rr.img >../sha256sum)
zip -9 "rr-${{ env.model }}-${TAG}-${{ github.run_id }}.img.zip" -j rr/rr.img sha256sum README.txt
esac
- name: Upload to Artifacts
if: env.iscustom == 'true' && success()
uses: actions/upload-artifact@v4
with:
name: rr-${{ env.model }}-${{ env.TAG }}
path: |
rr-${{ env.model }}-${{ env.TAG }}*.zip
retention-days: 5
- name: Update Comment Success
if: env.iscustom == 'true' && success()
uses: actions-cool/issues-helper@v3
with:
actions: 'update-comment'
token: ${{ secrets.GITHUB_TOKEN }}
comment-id: ${{ steps.comment.outputs.comment-id }}
update-mode: replace
body: |
Hi @${{ github.event.issue.user.login }}.
RR-${{ env.model }}-${{ env.TAG }} build success, please download the attachment from the below link (Attachments are only kept for 5 days).
> ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
----
emoji: hooray
- name: Update Comment Fail
if: env.iscustom == 'true' && failure()
uses: actions-cool/issues-helper@v3
with:
actions: 'update-comment'
token: ${{ secrets.GITHUB_TOKEN }}
comment-id: ${{ steps.comment.outputs.comment-id }}
update-mode: replace
body: |
Hi @${{ github.event.issue.user.login }}.
RR-${{ env.model }}-${{ env.TAG }} build failed, please try again.
> ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
----
emoji: confused
- name: Close Issues
if: env.iscustom == 'true'
uses: actions-cool/issues-helper@v3
with:
actions: 'close-issue'
token: ${{ secrets.GITHUB_TOKEN }}
issue-number: ${{ github.event.issue.number }}

View File

@ -1,206 +0,0 @@
#
# Copyright (C) 2022 Ing <https://github.com/wjz304>
#
# This is free software, licensed under the MIT License.
# See /LICENSE for more information.
#
name: Build RR
on:
push:
branches:
- main
tags:
- v*
release:
types: [published]
workflow_dispatch:
inputs:
version:
description: "format %y.%-m.$i or auto"
required: false
type: string
prerelease:
description: "pre release"
default: false
type: boolean
br_version:
description: "buildroot version"
default: "2023.02.x"
type: string
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@main
with:
lfs: 'true'
# Install dependencies
- name: Install dependencies
run: |
git config --global user.email "github-actions[bot]@users.noreply.github.com"
git config --global user.name "github-actions[bot]"
sudo apt update
sudo apt install -y jq cpio gettext
# calculates the version number and push
- name: Calculate version
run: |
# Calculate version
VERSION=""
if [[ "${{ github.event_name }}" =~ ^(push|release)$ && "${{ github.ref_type }}" == 'tag' ]]; then
VERSION="${{ github.ref_name }}"
elif [ -n "${{ inputs.version }}" ]; then
if [ "`echo ${{ inputs.version }} | cut -d '.' -f 1,2`" = "`date +'%y.%-m'`" ]; then
VERSION="${{ inputs.version }}"
else
LATEST_TAG="`curl -skL "https://api.github.com/repos/${{ github.repository }}/releases" | jq -r ".[0].tag_name" 2>/dev/null`"
if [ -n "${LATEST_TAG}" -a "`echo ${LATEST_TAG} | cut -d '.' -f 1,2`" = "`date +'%y.%-m'`" ]; then # format %y.%-m.$i
VERSION="`echo ${LATEST_TAG} | awk -F '.' '{$3=$3+1}1' OFS='.'`"
else
VERSION="`date +'%y.%-m'`.0"
fi
fi
else
VERSION=""
fi
echo "VERSION: ${VERSION}"
echo "VERSION=${VERSION}" >> $GITHUB_ENV
if [ -n "${VERSION}" ]; then
# Modify Source File
echo "${VERSION}" > VERSION
echo "${VERSION}" > files/p1/RR_VERSION
sed 's/^RR_VERSION=.*/RR_VERSION="'${VERSION}'"/' -i files/initrd/opt/rr/include/consts.sh
git checkout main
git pull
status=$(git status -s | awk '{printf " %s", $2}')
if [ -n "${status}" ]; then
git add ${status}
git commit -m "update $(date +%Y-%m-%d" "%H:%M:%S)"
git push -f
fi
fi
# Convert po2mo, Get extractor, LKMs, addons and Modules
- name: Convert po2mo, Get extractor, LKMs, addons and Modules
run: |
. scripts/func.sh
convertpo2mo "files/initrd/opt/rr/lang"
getExtractor "files/p3/extractor"
getLKMs "files/p3/lkms" ${{ inputs.prerelease }}
getAddons "files/p3/addons" ${{ inputs.prerelease }}
getModules "files/p3/modules" ${{ inputs.prerelease }}
echo "OK"
# Build incremental
- name: Build image
run: |
. scripts/func.sh
echo "Create RR image"
gzip -dc "files/grub.img.gz" >"rr.img"
fdisk -l "rr.img"
LOOPX=$(sudo losetup -f)
sudo losetup -P "${LOOPX}" "rr.img"
echo "Mounting image file"
mkdir -p "/tmp/p1"
mkdir -p "/tmp/p3"
sudo mount ${LOOPX}p1 "/tmp/p1"
sudo mount ${LOOPX}p3 "/tmp/p3"
echo "Get Buildroot"
br_version="${{ inputs.br_version }}"
[ -z "${br_version}" ] && br_version="2023.02.x"
getBuildroot "${br_version}" "br"
[ ! -f "br/bzImage-rr" -o ! -f "br/initrd-rr" ] && return 1
echo "Repack initrd"
cp -f "br/bzImage-rr" "files/p3/bzImage-rr"
repackInitrd "br/initrd-rr" "files/initrd" "files/p3/initrd-rr"
echo "Copying files"
sudo cp -Rf "files/p1/"* "/tmp/p1"
sudo cp -Rf "files/p3/"* "/tmp/p3"
sync
echo "Unmount image file"
sudo umount "/tmp/p1"
sudo umount "/tmp/p3"
rmdir "/tmp/p1"
rmdir "/tmp/p3"
sudo losetup --detach ${LOOPX}
echo "Create RR_4GB image"
resizeImg "rr.img" "+3072M" "rr_4GB.img"
# echo "Image Converter"
# qemu-img convert -O vmdk rr.img rr-dyn.vmdk
# qemu-img convert -O vmdk -o adapter_type=lsilogic rr.img -o subformat=monolithicFlat rr.vmdk
# Zip image and generate checksum
- name: Pack
run: |
if [ -n "${{ env.VERSION }}" ]; then
zip -9 "rr-${{ env.VERSION }}.img.zip" rr.img
zip -9 "rr_4GB-${{ env.VERSION }}.img.zip" rr_4GB.img
# zip -9 "rr-${{ env.VERSION }}.vmdk-dyn.zip" rr-dyn.vmdk
# zip -9 "rr-${{ env.VERSION }}.vmdk-flat.zip" rr.vmdk rr-flat.vmdk
else
zip -9 "rr.img.zip" rr.img
zip -9 "rr_4GB.img.zip" rr_4GB.img
fi
sha256sum update-list.yml update-check.sh > sha256sum
zip -9j update.zip update-list.yml update-check.sh
while read F; do
if [ -d "${F}" ]; then
FTGZ="`basename "${F}"`.tgz"
tar -czf "${FTGZ}" -C "${F}" .
sha256sum "${FTGZ}" >> sha256sum
zip -9j update.zip "${FTGZ}"
rm "${FTGZ}"
else
(cd `dirname ${F}` && sha256sum `basename ${F}`) >> sha256sum
zip -9j update.zip "${F}"
fi
done < <(yq '.replace | explode(.) | to_entries | map([.key])[] | .[]' update-list.yml)
zip -9j update.zip sha256sum
# Upload artifact
- name: Upload
uses: actions/upload-artifact@v3
with:
name: Images
path: |
rr.img.zip
rr_4GB.img.zip
update.zip
retention-days: 5
# Publish a release if is a tag
- name: Release
uses: softprops/action-gh-release@v1
if: env.VERSION != ''
with:
tag_name: ${{ env.VERSION }}
prerelease: ${{ inputs.prerelease }}
files: |
rr-${{ env.VERSION }}.img.zip
rr_4GB-${{ env.VERSION }}.img.zip
# rr-${{ env.VERSION }}.vmdk-dyn.zip
# rr-${{ env.VERSION }}.vmdk-flat.zip
update.zip

26
.gitignore vendored
View File

@ -1,14 +1,28 @@
!.gitkeep
.vscode
/rr
/rr.env
rr*.img
rr*.vmdk
*.zip
.buildroot
test*.sh
cache
*.bak
*.o
files/initrd/opt/rr/lang/*.mo
**.po~
**.mo
downloads.md
tests
/extractor
/br
Changelog*
sha256sum
ovftool*
OVA*
**.ova
files/mnt/p1/.locale
files/mnt/p1/grub_cksum.syno
files/mnt/p1/GRUB_VER
files/mnt/p1/user-config.yml
files/mnt/p2
files/mnt/p3
files/tmp

228
README.md
View File

@ -1,78 +1,174 @@
# Redpill Recovery (arpl-i18n)
<img src="https://avatars.githubusercontent.com/u/151816514?s=200&v=4" alt="logo" width="140" height="140" align="left" />
This project is a system for redpills preinstallation and recovery environment.
<h1>RR: <small>redpills preinstallation and recovery environment</small></h1>
### 组件:
<b>https://github.com/wjz304/rr</b>
* addons: https://github.com/wjz304/rr-addons
* modules: https://github.com/wjz304/rr-modules
* rp-lkms: https://github.com/wjz304/rr-lkms
[![GitHub Release](https://img.shields.io/github/v/release/rrorg/rr?logo=github&style=flat-square)](https://github.com/rrorg/rr/releases/latest)
[![GitHub Downloads (all assets, all releases)](https://img.shields.io/github/downloads/rrorg/rr/total?logo=github&style=flat-square)](https://github.com/rrorg/rr/releases)
[![GitHub Issues or Pull Requests by label](https://img.shields.io/github/issues-closed-raw/rrorg/rr/custom?logo=github&style=flat-square&label=custom)](https://rrorg.github.io/rr/)
### About GPU:
* iGPU: https://jim.plus/
* vGPU: https://blog.kkk.rs/
> The ultimate solution to self-centralized Synology DSM OS on any local machine with any x86/x64 CPU architecture via a single flash of bootload pre-installation process in addition within recovery environment.
## 说明 - Instructions
* [GUIDE](./guide.md)
* [About get logs](https://github.com/wjz304/rr/issues/173)
* [About not find DSM after "boot the loader"](https://github.com/wjz304/rr/issues/175)
* [About DT(Device Tree) and *portcfg/maxdisks](https://github.com/wjz304/rr/issues/226)
### 1: Disclaimer
## 翻译 - Translation
* 其他语言的翻译 - Language translation work:
```shell
# If it does not involve adding or deleting, the following process is not required.
sudo apt install gettext
git clone https://github.com/wjz304/rr.git
cd files/initrd/opt/rr
xgettext -L Shell --keyword=TEXT *.sh -o lang/rr.pot
sed -i 's/charset=CHARSET/charset=UTF-8/' lang/rr.pot
# You need to replace the language you need and translate the po file.
msginit -i lang/rr.pot -l zh_CN.UTF-8 -o lang/zh_CN.po
# This process will be automatically processed during packaging.
msgfmt lang/zh_CN.po -o lang/zh_CN.mo
```
* I am not proficient in language, and even my English is very poor.
Developers who are familiar with various languages are welcome to submit PR.
* Translation maintenance personnel:
* zh_CN: @wjz304
* zh_TW: @豪客幫
## 教程 - Usage
* English: https://www.youtube.com/watch?v=VB67_FG5y-E
##### `(From: @NETVN82)`
* Español: https://www.youtube.com/watch?v=KC6oCcAyoV4
##### `(From: @Jay tech 2023)`
* 한국어: https://www.youtube.com/watch?v=4O7EfU6MT60
##### `(From: @pageinnet)`
* ภาษาไทย: https://www.youtube.com/watch?v=4sGrMMEQQ6I
##### `(From: @stnology)`
* 中文繁體: https://www.youtube.com/watch?v=cW2eRCjtAEs
##### `(From: @豪客幫)`
* 中文简体: https://www.bilibili.com/video/BV1jk4y1Y7B7
##### `(From: http://mi-d.cn)`
## 免责声明 - Disclaimer
* 硬盘有价,数据无价,任何对引导的修改都是有风险的,本人不承担数据丢失的责任。
* 本工具仅用作学习交流,严禁用于商业用途。
* 硬盘有价,数据无价,任何对引导的修改都是有风险的,本人/组织不承担数据丢失的责任。本工具仅用作学习交流,严禁用于商业用途。
----
* The hard drive has a price, but the data is priceless. Any modification to the bootloader is risky. I will not be responsible for data loss.
* This tool is only for learning and communication, and commercial use is strictly prohibited.
* Hardware/hard-drives are priced whilst data are priceless, any user-specific custom modification of the tested & prebuilt bootloader images could potentially cause irreversible data destruction towards your local machine. Us, as (RROrg) are not responsibly liable for damage nor personal loss of any types. The project with its affiliation is released for educational and learning purpose only, commercial application of the software is strictly prohibited.
### 鸣谢 - Credits
arpl: https://github.com/fbelavenuto/arpl
redpill: https://github.com/RedPill-TTG
Framework: https://github.com/buildroot/buildroot
### 2: Documentation & FAQ
## 打赏一下
* > ### 作者: Ing
* > QQ群1: 21609194 [点击链接加入QQ群](https://qm.qq.com/cgi-bin/qm/qr?k=z5O89os88QEKXCbz-0gwtEz1AeQiCwk3)
* > QQ群2: 73119176 [点击链接加入QQ群](https://qm.qq.com/cgi-bin/qm/qr?k=6GFSrSYX2LTd9PD0r0hl_YJZsfLp53Oh)
* > QQ频道: redpill2syno [点击链接加入QQ频道](https://pd.qq.com/s/5nmli9qgn)
* > TG频道: redpill2syno [点击链接加入TG频道](https://t.me/redpill2syno)
* <img src="https://raw.githubusercontent.com/wjz304/wjz304/master/my/20220908134226.jpg" width="400">
- [RRManager](https://github.com/T-REX-XP/RRManager)
- [rr-tools](https://github.com/RROrg/rr-tools)
- [blog](https://rrorg.cn)
- [docs](https://rrorg.github.io/rr-docs)
- [📣](https://github.com/orgs/RROrg/discussions)
### 3: Components
- During the compilation process, you need to connect to the Internet to obtain model and version information and download the corresponding ROM.
If you cannot connect to the Internet, please build a pre-compiled bootloader through [RR-CUSTOM](https://rrorg.github.io/rr/).
- Models: [models](https://github.com/RROrg/rr/raw/main/docs/models.xlsx)
- PATs: [pats](https://github.com/RROrg/rr/raw/main/docs/pats.xlsx)
- Addons: [addons](https://github.com/RROrg/rr/raw/main/docs/addons.xlsx)
- Modules: [modules](https://github.com/RROrg/rr/raw/main/docs/modules.xlsx)
- Proxmox VE One Click Install:
```
curl -fsSL https://github.com/RROrg/rr/raw/refs/heads/main/scripts/pve.sh | bash -s -- --bltype usb
# Optional Parameters:
--onboot <0|1> Enable VM on boot, default 1 (enable)
--efi <0|1> Enable UEFI boot, default 1 (enable)
--bltype <sata|usb|nvme> Bootloader disk type, default sata
--9ppath <path> Set to /path/to/9p to mount 9p share
--tag <tag> Image tag, download latest release if not set
--img <path> Local image path, use local image if set
```
- Docker Compose:
```yml
# 请从最新版本中下载 rr.img 文件。
# 并将 <path_to_rr.img> 替换为你的 rr.img 文件的实际路径.
# Please download the rr.img file from the latest release.
# And replace <path_to_rr.img> with the actual path to your rr.img file.
version: "3.9"
services:
rr:
image: qemux/qemu:latest
container_name: rr
environment:
BOOT: ""
RAM_SIZE: "4G" # >= 4G recommended for DSM
CPU_CORES: "2"
DISK_FMT: "qcow2"
DISK_TYPE: "sata"
DISK_SIZE: "32G" # data disk size
ARGUMENTS: "-device nec-usb-xhci,id=usb0,multifunction=on -drive file=/rr.img,media=disk,format=raw,if=none,id=udisk1 -device usb-storage,bus=usb0.0,port=1,drive=udisk1,bootindex=999,removable=on"
devices:
- /dev/kvm
- /dev/net/tun
cap_add:
- NET_ADMIN
ports:
- 5000:5000 # For DSM management
- 5001:5001 # For DSM management
- 7681:7681 # For RR management
- 7304:7304 # For RR management
- 7080:7080 # For RR management
- 8006:8006 # For QEMU management
volumes:
- ./rr.img:/rr.img # <path_to_rr.img>:/rr.img
- ./data:/storage
restart: always
stop_grace_period: 2m
```
### 4: GPU:
- vGPU:
- [蔚然小站](https://blog.kkk.rs/)
- [syno_nvidia_gpu_driver](https://github.com/pdbear/syno_nvidia_gpu_driver/)
- iGPU:
- [Jim's Blog](https://jim.plus/)
- iGPU:
- [intel-gpu-i915-backports](https://github.com/MoetaYuko/intel-gpu-i915-backports)
## 5: Contributing
* The following is a roughly truncated guide to involve in project localization for internationalization.
```shell
# If deletion nor addition proces of code hunk is not required, comply with the following process
sudo apt install gettext
git clone https://github.com/rrorg/rr.git
cd files/initrd/opt/rr
xgettext -L Shell --keyword=TEXT *.sh -o lang/rr.pot
sed -i 's/charset=CHARSET/charset=UTF-8/' lang/rr.pot
# If you have to replace certain language string of the project, please suggest and modify translation changes within each correlated PO file
mkdir -p lang/zh_CN/LC_MESSAGES
msginit -i lang/rr.pot -l zh_CN.UTF-8 -o lang/zh_CN/LC_MESSAGES/rr.po
# Update translation files
for I in $(find lang -path *rr.po); do msgmerge --width=256 -U ${I} lang/rr.pot; done
# This formatting process will be automatically conducted during packaging.
for I in $(find lang -path *rr.po); do msgfmt ${I} -o ${I/.po/.mo}; done
```
- PRs of new language translations towards the project is welcomed with appreciation.
- Community maintainers of each supporting list of languages are accredited below.
- `de_DE`: `@Tim Krämer`: [Tim Krämer](https://tim-kraemer.de)
- `en_US`: `@rrorg`
- `ja_JP`: `@andatoshiki` & `@toshikidev`
- `ko_KR`: `@EXP` : jeong1986
- `ru_RU`: `@Alex`: TG
- `tr_TR`: `@miraç bahadır öztürk`: miracozturk
- `vi_VN`: `@Ngọc Anh Trần`: mr.ngocanhtran
- `zh_CN`: `@rrorg`
- `zh_HK`: `@rrorg`
- `zh_TW`: `@March Fun`: [豪客幫](<https://cyber.suma.tw/>)
### 6: Acknowledgment & Credits
- [ARPL](https://github.com/fbelavenuto/arpl): `@fbelavenuto`
- Redpill: `@RedPill-TTG` `@pocopico` `@jim3ma` `@fbelavenuto` `@MoetaYuko`
- [RedPill-TTG](https://github.com/RedPill-TTG)
- [redpill-lkm5](https://github.com/XPEnology-Community/redpill-lkm5)
- [linux_dsm_epyc7002](https://github.com/MoetaYuko/linux_dsm_epyc7002)
- Framework:
- [Buildroot](https://github.com/buildroot/buildroot)
- [Eudev](https://github.com/eudev-project/eudev)
- [Grub](https://git.savannah.gnu.org/git/grub)
- Addons: `@xbl3&@wirgen` `@007revad` `@PeterSuh-Q3` `@jim3ma` `@jinlife`
- [synocodectool-patch](https://github.com/xbl3/synocodectool-patch)
- [Synology_HDD_db](https://github.com/007revad/Synology_HDD_db)
- [nvme-cache](https://github.com/PeterSuh-Q3/tcrp-addons/tree/main/nvme-cache)
- [Synology_enable_M2_volume](https://github.com/007revad/Synology_enable_M2_volume)
- [synology-installation-with-nvme-disks-only](https://jim.plus/blog/post/jim/synology-installation-with-nvme-disks-only)
- [Synology_Photos_Face_Patch](https://github.com/jinlife/Synology_Photos_Face_Patch)
- Modules:`@jim3ma` `@MoetaYuko`
- [synology-igc](https://github.com/jim3ma/synology-igc)
- [intel-gpu-i915-backports](https://github.com/MoetaYuko/intel-gpu-i915-backports)
### 7: Links & Community
#### 7.1: Group
- `QQ群1: 21609194` [`点击加入QQ群`](https://qm.qq.com/q/YTPvSXfeU0)
- `QQ群2: 73119176` [`点击加入QQ群`](https://qm.qq.com/q/YV1B0NFvWK)
- `QQ群3: 51929774` [`点击加入QQ群`](https://qm.qq.com/q/aVjM3Wb6KY)
- `QQ群4: 49756829` [`点击加入QQ群`](https://qm.qq.com/q/9PHzmZDkqI)
- `QQ群5: 30267817` [`点击加入QQ群`](https://qm.qq.com/q/6RgVDfOSXe)
- `QQ群6: 68640297` [`点击加入QQ群`](https://qm.qq.com/q/PU71eSXAic)
- `QQ Channel: RROrg` [`点击加入QQ频道`](https://pd.qq.com/s/aklqb0uij)
- `Telegram Channel: RROrg` [`Click to join`](https://t.me/RR_Org)
### 7: Sponsoring
- <img src="https://raw.githubusercontent.com/wjz304/wjz304/master/my/buymeacoffee.png" width="700">
### 8: License
- [GPL-V3](https://github.com/RROrg/rr/blob/main/LICENSE)

View File

@ -1,19 +0,0 @@
# https://taskfile.dev
version: "3"
tasks:
build-img:
cmds:
- ./img-gen.sh
build-docker-img:
dir: docker
cmds:
- ./build.sh
compile-kpatch:
dir: kpatch
cmds:
- make clean all
- mv kpatch ../files/initrd/opt/rr/

View File

@ -1 +1 @@
23.11.1
25.12.0

882
docs/addons.json Normal file
View File

@ -0,0 +1,882 @@
{
"acpid": {
"system": false,
"description": {
"en_US": "ACPI Daemon that handles power button events, fixing power button not shutting down in some environments.",
"ar_SA": "برنامج ACPI Daemon الذي يتعامل مع أحداث زر الطاقة، ويصلح عدم إغلاق زر الطاقة في بعض البيئات.",
"de_DE": "ACPI Daemon, der die Power-Button-Ereignisse behandelt, um das Problem zu beheben, dass der Power-Button in einigen Umgebungen nicht herunterfährt.",
"es_ES": "Demonio ACPI que maneja los eventos del botón de encendido, solucionando el problema de que el botón de encendido no apague en algunos entornos.",
"fr_FR": "Démon ACPI qui gère les événements du bouton d'alimentation, corrigeant le problème du bouton d'alimentation qui ne s'éteint pas dans certains environnements.",
"ja_JP": "電源ボタンのイベントを処理するACPIデーモンで、一部の環境で電源ボタンがシャットダウンしない問題を修正します.",
"ko_KR": "전원 버튼 이벤트를 처리하는 ACPI 데몬, 일부 환경에서 전원 버튼이 종료되지 않는 문제를 해결합니다.",
"ru_RU": "Демон ACPI, обрабатывающий события кнопки питания, исправляющий проблему, когда кнопка питания не выключает в некоторых средах.",
"th_TH": "ACPI Daemon ที่จัดการกับเหตุการณ์ปุ่มเปิดเครื่อง, แก้ปัญหาปุ่มเปิดเครื่องไม่ปิดเครื่องในบางสภาพแวดล้อม",
"tr_TR": "Güç düğmesi olaylarını ele alan ACPI Daemon, bazı ortamlarda güç düğmesinin kapanmamasını düzeltir.",
"uk_UA": "Демон ACPI, який обробляє події кнопки живлення, виправляючи проблему, коли кнопка живлення не вимикає в деяких середовищах.",
"vi_VN": "ACPI Daemon xử lý các sự kiện nút nguồn, sửa lỗi nút nguồn không tắt máy trong một số môi trường.",
"zh_CN": "处理电源按钮事件的 ACPI 守护程序, 解决部分环境下电源按钮无法正常关机的问题.",
"zh_HK": "處理電源按鈕事件的 ACPI 守护程序, 解决部分環境下電源按鈕無法正常關機的問題.",
"zh_TW": "處理電源按鈕事件的 ACPI 守护程序, 解决部分環境下電源按鈕無法正常關機的問題."
}
},
"addincards": {
"system": false,
"description": {
"en_US": "Remove model restrictions from official Addin cards(M2D20, E10G30-T2, ...).",
"ar_SA": "قم بإزالة القيود على النموذج من بعض البطاقات الرسمية (M2D20، E10G30-T2، ...).",
"de_DE": "Entfernen Sie Modellbeschränkungen von offiziellen Addin-Karten (M2D20, E10G30-T2, ...).",
"es_ES": "Elimine las restricciones de modelo de las tarjetas Addin oficiales (M2D20, E10G30-T2, ...).",
"fr_FR": "Supprimez les restrictions de modèle des cartes Addin officielles (M2D20, E10G30-T2, ...).",
"ja_JP": "公式の Addin カード(M2D20、E10G30-T2、...)のモデル制限を解除します.",
"ko_KR": "공식 Addin 카드(M2D20, E10G30-T2, ...)의 모델 제한을 제거합니다.",
"ru_RU": "Удалите ограничения модели официальных карт Addin (M2D20, E10G30-T2, ...).",
"th_TH": "ลบข้อจำกัดของโมเดลจากการ์ด Addin ทางการ (M2D20, E10G30-T2, ...)",
"tr_TR": "Resmi Addin kartlarından model kısıtlamalarını kaldırın (M2D20, E10G30-T2, ...).",
"uk_UA": "Видаліть обмеження моделі офіційних карток Addin (M2D20, E10G30-T2, ...).",
"vi_VN": "Xóa các hạn chế mô hình từ các thẻ Addin chính thức (M2D20, E10G30-T2, ...).",
"zh_CN": "移除官方 Addin 卡(M2D20, E10G30-T2, ...)对 DSM 型号限制.",
"zh_HK": "移除官方 Addin 卡(M2D20, E10G30-T2, ...)对 DSM 型號限制.",
"zh_TW": "移除官方 Addin 卡(M2D20, E10G30-T2, ...)对 DSM 型號限制."
}
},
"apppatch": {
"system": false,
"description": {
"en_US": "Fix Synology Photos unable to delete photos under non-genuine SN, close local_display to prevent generating a large number of BrowserMetrics files.",
"ar_SA": "إصلاح Synology Photos غير قادر على حذف الصور تحت رقم SN غير الأصلي، إغلاق local_display لمنع إنشاء عدد كبير من ملفات BrowserMetrics.",
"de_DE": "Beheben Sie, dass Synology Photos unter einer nicht originalen SN keine Fotos löschen kann, schließen Sie local_display, um zu verhindern, dass eine große Anzahl von BrowserMetrics-Dateien generiert wird.",
"es_ES": "Arreglar Synology Photos que no puede eliminar fotos bajo un SN no genuino, cerrar local_display para evitar generar una gran cantidad de archivos BrowserMetrics.",
"fr_FR": "Corrigez Synology Photos qui ne peut pas supprimer de photos sous un SN non authentique, fermez local_display pour éviter de générer un grand nombre de fichiers BrowserMetrics.",
"ja_JP": "Synology Photos が非正規 SN の下で写真を削除できない問題を修正し、local_display を閉じて大量の BrowserMetrics ファイルが生成されるのを防ぎます。",
"ko_KR": "비정품 SN에서 사진을 삭제할 수 없는 Synology Photos를 수정하고 local_display를 닫아 많은 BrowserMetrics 파일이 생성되는 것을 방지합니다.",
"ru_RU": "Исправление Synology Photos, который не может удалить фотографии под ненастоящим SN, закройте local_display, чтобы предотвратить создание большого количества файлов BrowserMetrics.",
"th_TH": "แก้ไข Synology Photos ไม่สามารถลบภาพถ่ายได้เมื่อใช้ SN ไม่จริง และปิด local_display เพื่อป้องกันการสร้างไฟล์ BrowserMetrics เกินจำนวนมาก",
"tr_TR": "Synology Photos'ın non-orijinal SN altında fotoğrafı silme yeteneğini düzeltin, local_display'i kapatın ve çok fazla BrowserMetrics dosyası oluşturmaması için.",
"uk_UA": "Виправлення Synology Photos, який не може видаляти фотографії під неоригінальним SN, закрийте local_display, щоб уникнути створення великої кількості файлів BrowserMetrics.",
"vi_VN": "Sửa lỗi Synology Photos không thể xóa hình ảnh dưới SN không chính xác, đóng local_display để ngăn chặn việc tạo nhiều tệp BrowserMetrics.",
"zh_CN": "修复 Synology Photos 在非正版SN下无法删除照片的问题、关闭 local_display 防止生成大量 BrowserMetrics文件。",
"zh_HK": "修復 Synology Photos 在非正版SN下無法刪除照片的問題、關閉 local_display 防止生成大量 BrowserMetrics文件。",
"zh_TW": "修復 Synology Photos 在非正版SN下無法刪除照片的問題、關閉 local_display 防止生成大量 BrowserMetrics文件。"
}
},
"beep": {
"system": false,
"description": {
"en_US": "Beep at startup and shutdown (requires motherboard with buzzer) Parameters: -m: Mario at startup and AxelF at shutdown",
"ar_SA": "صد الصوت عند بدء التشغيل والإغلاق (يتطلب لوحة أم تحتوي على جرس) المعلمات: -m: ماريو عند بدء التشغيل و AxelF عند الإغلاق",
"de_DE": "Beim Starten und Herunterfahren piepen (erfordert Mainboard mit Summer) Parameter: -m: Mario beim Starten und AxelF beim Herunterfahren",
"es_ES": "Pitido al inicio y apagado (requiere placa base con zumbador) Parámetros: -m: Mario al inicio y AxelF al apagado",
"fr_FR": "Bip au démarrage et à l'arrêt (nécessite une carte mère avec buzzer) Paramètres: -m: Mario au démarrage et AxelF à l'arrêt",
"ja_JP": "起動時にブザーを鳴らす(ブザーを備えたマザーボードが必要) パラメータ: -m: 起動時にマリオ、シャットダウン時にAxelF",
"ko_KR": "시작 및 종료시 소리 울리기(부저가 있는 메인보드 필요) 매개변수: -m: 시작시 Mario 및 종료시 AxelF",
"ru_RU": "при запуске и выключении пищать (требуется материнская плата с зуммером) Параметры: -m: Mario при запуске и AxelF при выключении",
"th_TH": "เสียงเบี๊ยวเมื่อเริ่มต้นและปิดเครื่อง (ต้องใช้เมนบอร์ดที่มีเสียงเบี๊ยว) พารามิเตอร์: -m: Mario เมื่อเริ่มต้นและ AxelF เมื่อปิดเครื่อง",
"tr_TR": "Başlangıç ve kapanışta bip sesi çal (ana kartta hoparlör gerektirir) Parametreler: -m: Başlangıçta Mario ve kapanışta AxelF",
"uk_UA": "при запуску та вимкненні пищати (потрібна материнська плата з динаміком) Параметри: -m: Mario при запуску та AxelF при вимкненні",
"vi_VN": "Phát ra tiếng bíp khi khởi động và tắt máy (yêu cầu bo mạch chủ có loa) Tham số: -m: Mario khi khởi động và AxelF khi tắt máy",
"zh_CN": "在启动和关机时发出哔声(需要主板有蜂鸣器) 参数: -m: 开机 Mario 和 关机 AxelF",
"zh_HK": "在啟動和關機時發出哔聲(需要主機有蜂鳴器) 參數: -m: 開機 Mario 和 關機 AxelF",
"zh_TW": "在啟動和關機時發出哔聲(需要主機有蜂鳴器) 參數: -m: 開機 Mario 和 關機 AxelF"
}
},
"blockupdate": {
"system": true,
"description": {
"en_US": "Block DSM automatic system update.",
"ar_SA": "قفل التحديثات التلقائية منDSM.",
"de_DE": "Bloquer les mises à jour automatiques du système DSM.",
"es_ES": "Bloquear las actualizaciones automáticas del sistema DSM.",
"fr_FR": "Bloquer les mises à jour automatiques du système DSM.",
"ja_JP": "DSMの自動更新をブロックします。",
"ko_KR": "DSM 자동 업데이트를 차단합니다.",
"ru_RU": "Заблокировать автоматические обновления системы DSM.",
"th_TH": "บล็อกอัตโนมัติอัปเดตจากDSM",
"tr_TR": "DSM otomatik güncellemeleri engelle.",
"uk_UA": "Блокувати автоматичні оновлення системи DSM.",
"vi_VN": "Khóa tự động cập nhật hệ thống DSM.",
"zh_CN": "阻止 DSM 自动系统更新。",
"zh_HK": "阻止 DSM 自动系统更新。",
"zh_TW": "阻止 DSM 自动系统更新。"
}
},
"bootwait": {
"system": true,
"description": {
"en_US": "This script ensures that the boot process waits for the boot disk (/dev/synoboot) to be available before starting other processes.",
"ar_SA": "يضمن هذا البرنامج أن عملية التمهيد تنتظر حتى يصبح القرص المحمل (/dev/synoboot) متاحًا قبل بدء العمليات الأخرى.",
"de_DE": "Diese Skript stellt sicher, dass der Startprozess auf das Boot-Laufwerk (/dev/synoboot) wartet, bevorandere Prozesse gestartet werden.",
"es_ES": "Este programa garantiza que el proceso de arranque espere hasta que el disco cargado (/dev/synoboot) esté disponible antes de iniciar otros procesos.",
"fr_FR": "Le script de démarrage assure que le processus de démarrage attend que le disque de démarrage (/dev/synoboot) soit disponible avant de commencer d'autres processus.",
"ja_JP": "ブートディスク (/dev/synoboot) が利用可能になるまでブートプロセスが待機するようにします.",
"ko_KR": "이 스크립트는 부팅 프로세스가 부팅 디스크 (/dev/synoboot)가 사용 가능할 때까지 기다리도록 합니다.",
"ru_RU": "Этот скрипт гарантирует, что процесс загрузки будет ждать, пока загрузочный диск (/dev/synoboot) не станет доступным, прежде чем запустить другие процессы.",
"th_TH": "โปรแกรมนี้จะช่วยให้แน่ใจว่ากระบวนการบูตจะรอจนกว่าดิสก์ที่โหลด (/dev/synoboot) จะพร้อมใช้งานก่อนที่จะเริ่มกระบวนการอื่น",
"tr_TR": "Bu program, önyükleme işleminin diğer işlemleri başlatmadan önce yüklenen diskin (/dev/synoboot) kullanılabilir olmasını beklemesini sağlar.",
"uk_UA": "Ця програма гарантує, що процес завантаження очікує, поки завантажений диск (/dev/synoboot) стане доступним, перш ніж запускати інші процеси.",
"vi_VN": "Chương trình này đảm bảo rằng quá trình khởi động sẽ đợi cho đến khi đĩa được tải (/dev/synoboot) khả dụng trước khi bắt đầu các quá trình khác.",
"zh_CN": "此脚本确保启动过程等待引导盘磁盘 (/dev/synoboot) 可用之后再启动其他进程.",
"zh_HK": "此腳本確保啟動過程等待引导盤磁碟 (/dev/synoboot) 可用之後再啟動其他進程.",
"zh_TW": "此腳本確保啟動過程等待引导盤磁碟 (/dev/synoboot) 可用之後再啟動其他進程."
}
},
"console": {
"system": false,
"description": {
"en_US": "Provides screen console (bash) functionality via framebuffer (fb) to allow debugging on the screen, only supported on models with a graphics driver.",
"ar_SA": "يوفر وظيفة وحدة التحكم في الشاشة (bash) عبر framebuffer (fb) للسماح بالتصحيح على الشاشة، مدعوم فقط على النماذج التي تحتوي على برنامج تشغيل الرسومات.",
"de_DE": "Bietet Bildschirmkonsolen (bash)-Funktionalität über Framebuffer (fb), um das Debuggen auf dem Bildschirm zu ermöglichen, wird nur auf Modellen mit einem Grafiktreiber unterstützt.",
"es_ES": "Proporciona la funcionalidad de la consola (bash) de pantalla a través del framebuffer (fb) para permitir la depuración en la pantalla, solo se admite en los modelos con un controlador gráfico.",
"fr_FR": "Fournit une fonctionnalité de console d'écran (bash) via framebuffer (fb) pour permettre le débogage sur l'écran, pris en charge uniquement sur les modèles avec un pilote graphique.",
"ja_JP": "グラフィックスドライバを搭載したモデルでのみサポートされる、フレームバッファ (fb) を介した画面コンソール (bash) 機能を提供し、画面上でのデバッグを可能にします.",
"ko_KR": "프레임버퍼(fb)를 통해 화면 콘솔(bash) 기능을 제공하여 화면에서 디버깅을 허용하며, 그래픽 드라이버가 있는 모델에서만 지원됩니다.",
"ru_RU": "Предоставляет функциональность консоли экрана (bash) через framebuffer (fb) для разрешения отладки на экране, поддерживается только на моделях с графическим драйвером.",
"th_TH": "ให้ความสามารถของหน้าจอคอนโซล (bash) ผ่าน framebuffer (fb) เพื่ออนุญาตให้ทำการแก้บั๊กบนหน้าจอ รองรับเฉพาะบนโมเดลที่มีไดรเวอร์กราฟิก",
"tr_TR": "Ekran üzerinde hata ayıklamaya izin vermek için framebuffer (fb) aracılığıyla ekran konsolu (bash) işlevselliği sağlar, yalnızca grafik sürücüsü olan modellerde desteklenir.",
"uk_UA": "Надає функціональність консолі екрану (bash) через буфер кадру (fb) для дозволу налагодження на екрані, підтримується лише на моделях з графічним драйвером.",
"vi_VN": "Cung cấp chức năng màn hình (bash) qua framebuffer (fb) để cho phép kiểm tra trên màn hình, chỉ được hỗ trợ trên các mô hình có trình điều khiển hình ảnh.",
"zh_CN": "通过帧缓冲区 (fb) 提供屏幕控制台 (bash) 功能, 以允许在屏幕上进行调试, 仅支持具有显卡驱动程序的型号.",
"zh_HK": "透過幀緩衝區 (fb) 提供屏幕控制台 (bash) 功能, 以允許在屏幕上進行調試, 僅支持具有顯卡驅動程序的型號.",
"zh_TW": "透過幀緩衝區 (fb) 提供屏幕控制台 (bash) 功能, 以允許在屏幕上進行調試, 僅支持具有顯卡驅動程序的型號."
}
},
"cpuinfo": {
"system": false,
"description": {
"en_US": "Display CPU/GPU/Temperature information in the control panel. (Option -s shows static information)",
"ar_SA": "عرض معلومات وحدة المعالجة المركزية / وحدة معالجة الرسومات / درجة الحرارة في لوحة التحكم. (خيار -s يظهر معلومات ثابتة)",
"de_DE": "Zeigt CPU/GPU/Temperaturinformationen im Bedienfeld an. (Option -s zeigt statische Informationen)",
"es_ES": "Mostrar información de CPU/GPU/Temperatura en el panel de control. (L'option -s affiche des informations statiques))",
"fr_FR": "Afficher les informations CPU/GPU/Température dans le panneau de configuration. (L'option -s affiche des informations statiques)))",
"ja_JP": "コントロールパネルにCPU/GPU/温度情報を表示します。 (パラメータ -s は静的な情報を表示します)",
"ko_KR": "제어판에 CPU/GPU/온도 정보를 표시합니다. (옵션 -s는 정적 정보를 표시합니다)",
"ru_RU": "Показать информацию о процессоре/GPU/температуре в панели управления. (Опция -s показывает статическую информацию)",
"th_TH": "แสดงข้อมูล CPU/GPU/อุณหภูมิในแผงควบคุม. (ตัวเลือก -s แสดงข้อมูลที่ไม่เปลี่ยนแปลง)",
"tr_TR": "Kontrol panelinde CPU/GPU/Sıcaklık bilgilerini görüntüler. (Seçenek -s statik bilgileri gösterir)",
"uk_UA": "Показати інформацію про процесор/GPU/температуру в панелі керування. (Опция -s показывает статическую информацию)",
"vi_VN": "Hiển thị thông tin CPU/GPU/Nhiệt độ trong bảng điều khiển. (Tùy chọn -s hiển thị thông tin tĩnh)",
"zh_CN": "只让控制面板显示正确的CPU/GPU/温度等信息. (参数 -s 显示静态信息)",
"zh_HK": "只讓控制面板顯示正確的CPU/GPU/溫度等信息. (参数 -s 顯示靜態信息)",
"zh_TW": "只讓控制面板顯示正確的CPU/GPU/温度等信息. (参数 -s 顯示靜態信息)"
}
},
"dbgutils": {
"system": false,
"description": {
"en_US": "Debug utilities, automatically capture all stage boot logs to <loader disk>/p1/logs/.",
"ar_SA": "أدوات التصحيح، التقاط جميع سجلات تمهيد المرحلة تلقائيًا إلى <قرص التحميل>/p1/logs/.",
"de_DE": "Debug-Dienstprogramme, erfassen Sie automatisch alle Stufenstartprotokolle auf <Loader-Disk>/p1/logs/.",
"es_ES": "Utilidades de depuración, captura automáticamente todos los registros de arranque de etapa a <disco de carga>/p1/logs/.",
"fr_FR": "Utilitaires de débogage, capture automatiquement tous les journaux de démarrage de la scène à <disque de chargement>/p1/logs/.",
"ja_JP": "デバッグユーティリティ、すべてのステージブートログを <ローダーディスク>/p1/logs/ に自動的にキャプチャします.",
"ko_KR": "디버그 유틸리티, 모든 스테이지 부팅 로그를 <로더 디스크>/p1/logs/에 자동으로 캡처합니다.",
"ru_RU": "Утилиты отладки, автоматически захватывают все журналы загрузки этапа на <загрузочный диск>/p1/logs/.",
"th_TH": "เครื่องมือการแก้บั๊ก, จับบันทึกการบูตของขั้นตอนทั้งหมดไปยัง <ดิสก์โหลด>/p1/logs/ โดยอัตโนมัติ",
"tr_TR": "Hata ayıklama araçları, tüm aşama başlangıç günlüklerini <yükleme diski>/p1/logs/ dizinine otomatik olarak yakalar.",
"uk_UA": "Утиліти відлагодження, автоматично захоплюють всі журнали завантаження етапу на <завантажувальний диск>/p1/logs/.",
"vi_VN": "Công cụ gỡ lỗi, tự động chụp tất cả các bản ghi khởi động giai đoạn đến <ổ đĩa tải trọng>/p1/logs/.",
"zh_CN": "调试工具, 自动捕获所有阶段启动日志到 <加载器磁盘>/p1/logs/.",
"zh_HK": "調試工具, 自動捕獲所有階段啟動日誌到 <加載器磁盤>/p1/logs/.",
"zh_TW": "調試工具, 自動捕獲所有階段啟動日誌到 <加載器磁盤>/p1/logs/."
}
},
"disks": {
"system": true,
"description": {
"en_US": "Config disks related setting.",
"ar_SA": "قم بتكوين إعدادات القرص.",
"de_DE": "Konfiguriere Einstellungen für Festplatten.",
"es_ES": "Configurar la configuración relacionada con los discos.",
"fr_FR": "Configurer les paramètres relatifs aux disques.",
"ja_JP": "ディスク関連の設定を構成します.",
"ko_KR": "디스크 관련 설정 구성.",
"ru_RU": "Настройка параметров дисков.",
"th_TH": "กำหนดค่าที่เกี่ยวข้องกับดิสก์",
"tr_TR": "Disklerle ilgili ayarları yapılandırın.",
"uk_UA": "Налаштування параметрів дисків.",
"vi_VN": "Cấu hình các thiết lập liên quan đến đĩa.",
"zh_CN": "配置与磁盘相关的设置.",
"zh_HK": "配置與磁碟相關的設定.",
"zh_TW": "配置與磁碟相關的設定."
}
},
"eudev": {
"system": true,
"description": {
"en_US": "eudev + kmod automatically loaded modules.",
"ar_SA": "eudev + kmod الوحدات المحملة تلقائيًا.",
"de_DE": "eudev + kmod automatisch geladene Module.",
"es_ES": "eudev + kmod módulos cargados automáticamente.",
"fr_FR": "eudev + kmod modules chargés automatiquement.",
"ja_JP": "eudev + kmod 自動的にロードされるモジュール.",
"ko_KR": "eudev + kmod 자동으로 로드된 모듈.",
"ru_RU": "eudev + kmod автоматически загружаемые модули.",
"th_TH": "eudev + kmod โมดูลที่โหลดโดยอัตโนมัติ",
"tr_TR": "eudev + kmod otomatik olarak yüklenen modüller.",
"uk_UA": "eudev + kmod автоматично завантажені модулі.",
"vi_VN": "eudev + kmod môdules tải tự động.",
"zh_CN": "eudev + kmod 自动加载模块.",
"zh_HK": "eudev + kmod 自動加載模塊.",
"zh_TW": "eudev + kmod 自動加載模塊."
}
},
"expands": {
"system": false,
"description": {
"en_US": "Expanded miscellaneous, updated usb.map, ca-certificates.crt, etc.",
"ar_SA": "متنوعات موسعة، usb.map محدث، ca-certificates.crt، إلخ.",
"de_DE": "Erweiterte Diverses, aktualisierte usb.map, ca-certificates.crt, etc.",
"es_ES": "Misceláneos ampliados, usb.map actualizado, ca-certificates.crt, etc.",
"fr_FR": "Diverses étendues, usb.map mise à jour, ca-certificates.crt, etc.",
"ja_JP": "拡張その他、更新された usb.map、ca-certificates.crt など",
"ko_KR": "기타 확장, 업데이트 된 usb.map, ca-certificates.crt 등",
"ru_RU": "Расширенные разные, обновленная usb.map, ca-certificates.crt и т. Д.",
"th_TH": "ขยายหลากหลาย, อัปเดต usb.map, ca-certificates.crt, เป็นต้น",
"tr_TR": "Genişletilmiş çeşitli, güncellenmiş usb.map, ca-certificates.crt, vb.",
"uk_UA": "Розширені різні, оновлена usb.map, ca-certificates.crt тощо.",
"vi_VN": "Mở rộng các loại khác nhau, usb.map được cập nhật, ca-certificates.crt, v.v.",
"zh_CN": "扩展杂项, 更新 usb.map, ca-certificates.crt 等.",
"zh_HK": "擴展雜項, 更新 usb.map, ca-certificates.crt 等.",
"zh_TW": "擴展雜項, 更新 usb.map, ca-certificates.crt 等."
}
},
"hdddb": {
"system": false,
"description": {
"en_US": "Author: 007revad. Add HDD/SSD drives to the DSM database to solve the problem of firmware version not recognized by the disk.",
"ar_SA": "المؤلف: (007revad). قم بإضافة بيانات محرك الأقراص الصلبة/SSD إلى قاعدة بيانات DSM لحل مشكلة إصدار البرنامج الثابت لمحرك الأقراص الثابتة غير المعروف.",
"de_DE": "Autor: 007revad. Fügen Sie HDD/SSD-Laufwerke zur DSM-Datenbank hinzu, um das Problem zu lösen, dass die Firmware-Version von der Festplatte nicht erkannt wird.",
"es_ES": "Autor: 007revad. Agrega discos duros y SSD a la base de datos de DSM para solucionar el problema de que la versión del firmware no sea reconocida por el disco.",
"fr_FR": "Auteur: 007revad. Ajoutez des disques durs et SSD à la base de données DSM pour résoudre le problème de reconnaissance de la version du firmware par le disque.",
"ja_JP": "作者: 007revad. ディスクのファームウェアバージョンが認識されない問題を解決するために、HDD/SSDドライブをDSMデータベースに追加します.",
"ko_KR": "저자: 007revad. 디스크의 펌웨어 버전이 인식되지 않는 문제를 해결하기 위해 HDD/SSD 드라이브를 DSM 데이터베이스에 추가합니다.",
"ru_RU": "Автор: 007revad. Добавьте данные жесткого диска/SSD в базу данных DSM, чтобы решить проблему нераспознанной версии прошивки жесткого диска.",
"th_TH": "ผู้เขียน: 007revad. เพิ่มฮาร์ดดิสก์และ SSD ลงในฐานข้อมูล DSM เพื่อแก้ปัญหาเวอร์ชันฟิวเวอร์ไม่ได้รับการรับรู้โดยดิสก์",
"tr_TR": "Yazar: 007revad. Disk tarafından tanınmayan firmware sürümü sorununu çözmek için HDD/SSD sürücüleri DSM veritabanına ekleyin.",
"uk_UA": "Автор: 007revad. Додайте дані диска HDD/SSD до бази даних DSM, щоб вирішити проблему нерозпізнаної версії мікропрограми жорсткого диска.",
"vi_VN": "Tác giả: 007revad. Thêm ổ cứng và ổ SSD vào cơ sở dữ liệu DSM để giải quyết vấn đề không nhận diện được phiên bản firmware của ổ cứng.",
"zh_CN": "作者: 007revad. 将HDD/SSD驱动器数据添加到DSM数据库中, 以解决硬盘固件版本无法识别的问题.",
"zh_HK": "作者: 007revad. 將HDD/SSD驱动器數據添加到DSM數據庫中, 以解決硬碟固件版本無法識別的問題.",
"zh_TW": "作者: 007revad. 將HDD/SSD驅動器數據添加到DSM數據庫中, 以解決硬碟固件版本無法識別的問題."
}
},
"i915le10th": {
"system": false,
"description": {
"en_US": "Automatically replace the device ID of i915.ko(apollolake, geminilake), only supporting less 10th. (Parameter VID:PID)",
"ar_SA": "استبدل تلقائيًا معرف الجهاز لـ i915.ko (apollolake، geminilake)، والذي يدعم فقط أقل من 10. (معلمة VID:PID)",
"de_DE": "Ersetzen Sie automatisch die Geräte-ID von i915.ko (apollolake, geminilake), die nur weniger als 10. unterstützt. (Parameter VID:PID)",
"es_ES": "Reemplace automáticamente el ID de dispositivo de i915.ko (apollolake, geminilake), que solo admite menos de 10. (Parámetro VID:PID)",
"fr_FR": "Remplacez automatiquement l'ID de périphérique de i915.ko (apollolake, geminilake), ne prenant en charge que moins de 10. (Paramètre VID:PID)",
"ja_JP": "i915.ko (apollolake, geminilake) のデバイスIDを自動的に置き換え, 10未満のみをサポートします. (パラメータVID:PID) ",
"ko_KR": "i915.ko (apollolake, geminilake) 의 장치 ID를 자동으로 교체하며, 10세 미만만 지원합니다. (파라미터 VID:PID)",
"ru_RU": "Автоматическая замена идентификатора устройства i915.ko (apollolake, geminilake), поддерживающего только менее 10. (Параметр VID:PID)",
"th_TH": "แทนที่ ID อุปกรณ์ของ i915.ko (apollolake, geminilake) โดยอัตโนมัติ รองรับเฉพาะต่ำกว่า 10 (พารามิเตอร์ VID:PID)",
"tr_TR": "i915.ko (apollolake, geminilake) cihaz kimliğini otomatik olarak değiştirir, yalnızca 10. sürümü destekler. (Parametre VID:PID)",
"uk_UA": "Автоматично замінює ідентифікатор пристрою i915.ko (apollolake, geminilake), підтримує лише менше 10. (Параметр VID:PID)",
"vi_VN": "Tự động thay thế ID thiết bị của i915.ko (apollolake, geminilake), chỉ hỗ trợ ít hơn 10. (Tham số VID:PID)",
"zh_CN": "自动替换 i915.ko (apollolake, geminilake) 的设备 ID, 仅支持 10 代以下. (参数VID:PID) ",
"zh_HK": "自動替換 i915.ko (apollolake, geminilake) 的設備 ID, 僅支持 10 代以下. (參數VID:PID) ",
"zh_TW": "自動替換 i915.ko (apollolake, geminilake) 的設備 ID, 僅支持 10 代以下. (參數VID:PID) "
}
},
"localrss": {
"system": true,
"description": {
"en_US": "Implant RSS into the bootloader so that it can be installed online.",
"ar_SA": "زرع RSS في البرنامج الثابت ليمكن تثبيته عبر الإنترنت.",
"de_DE": "RSS in den Bootloader einpflanzen, damit er online installiert werden kann.",
"es_ES": "Implantar RSS en el cargador de arranque para que se pueda instalar en línea.",
"fr_FR": "Implanter RSS dans le chargeur de démarrage pour qu'il puisse être installé en ligne.",
"ja_JP": "RSS をブートローダーに埋め込んでオンラインでインストールできるようにします.",
"ko_KR": "부트로더에 RSS를 심어 온라인으로 설치할 수 있습니다.",
"ru_RU": "Внедрить RSS в загрузчик, чтобы его можно было установить онлайн.",
"th_TH": "ฝัง RSS ในโปรแกรมเริ่มต้นเพื่อให้สามารถติดตั้งออนไลน์ได้",
"tr_TR": "RSS'i önyükleyiciye yerleştirerek çevrimiçi olarak yükleyebilirsiniz.",
"uk_UA": "Внести RSS в завантажувач, щоб його можна було встановити онлайн.",
"vi_VN": "Cấy RSS vào trình khởi động để có thể cài đặt trực tuyến.",
"zh_CN": "将 RSS 植入到引导加载程序中, 以便可以在线安装.",
"zh_HK": "將 RSS 植入到引導加載程序中, 以便可以在線安裝.",
"zh_TW": "將 RSS 植入到引導載入程式中, 以便可以在線安裝."
}
},
"lsiutil": {
"system": false,
"description": {
"en_US": "A tool for working with some LSI RAID controllers.",
"ar_SA": "أداة للعمل مع بعض تحكمات RAID LSI.",
"de_DE": "Ein Werkzeug zum Arbeiten mit einigen LSI RAID Controllern.",
"es_ES": "Una herramienta para trabajar con algunos controladores RAID LSI.",
"fr_FR": "Un outil pour travailler avec certains contrôleurs RAID LSI.",
"ja_JP": "一部の LSI RAID コントローラーと一緒に作業するためのツールです.",
"ko_KR": "LSI RAID 컨트롤러와 함께 작업하는 도구입니다.",
"ru_RU": "Инструмент для работы с некоторыми контроллерами RAID LSI.",
"th_TH": "เครื่องมือสำหรับทำงานกับบางคอนโทรลเลอร์ RAID LSI",
"tr_TR": "Bazı LSI RAID denetleyicileriyle çalışmak için bir araç.",
"uk_UA": "Інструмент для роботи з деякими контролерами RAID LSI.",
"vi_VN": "Một công cụ để làm việc với một số bộ điều khiển RAID LSI.",
"zh_CN": "用于处理某些 LSI RAID 控制器的工具.",
"zh_HK": "用於處理某些 LSI RAID 控制器的工具.",
"zh_TW": "用於處理某些 LSI RAID 控制器的工具."
}
},
"maiyunda": {
"system": false,
"description": {
"en_US": "Control Maiyunda M1S machine RESET button event, press and hold for 3s (release after hearing beeping) reset admin password to maiyunda.com and reset network, press and hold for 9s (release after hearing 3 beeps) reset system (all data will be erased).",
"ar_SA": "التحكم في حدث زر إعادة تعيين آلة Maiyunda M1S، اضغط مع الاستمرار لمدة 3 ثوانٍ (افرج بعد سماع صفير) إعادة تعيين كلمة مرور المسؤول إلى maiyunda.com وإعادة تعيين الشبكة، اضغط مع الاستمرار لمدة 9 ثوانٍ (افرج بعد سماع 3 صفير) إعادة تعيين النظام (سيتم مسح جميع البيانات).",
"de_DE": "Steuerung des RESET-Tastenereignisses der Maiyunda M1S-Maschine. Bitte ändern Sie den Inhalt der Aufgaben Net-Button-3s, Net-Button-9s, Copy-Button-3s und Copy-Button-9s im Zeitplan.",
"es_ES": "Control del evento del botón RESET de la máquina Maiyunda M1S, mantenga presionado durante 3 segundos (suéltelo después de escuchar el pitido) restablezca la contraseña de administrador a maiyunda.com y restablezca la red, mantenga presionado durante 9 segundos (suéltelo después de escuchar 3 pitidos) restablezca el sistema (se borrarán todos los datos).",
"fr_FR": "Contrôle de l'événement du bouton RESET de la machine Maiyunda M1S, maintenez enfoncé pendant 3 secondes (relâchez après avoir entendu le bip) réinitialisez le mot de passe administrateur à maiyunda.com et réinitialisez le réseau, maintenez enfoncé pendant 9 secondes (relâchez après avoir entendu 3 bips) réinitialisez le système (toutes les données seront effacées).",
"ja_JP": "Maiyunda M1S マシンの RESET ボタン イベントを制御します。3 秒間押し続けて (ビープ音を聞いた後に放す) 管理者パスワードを maiyunda.com にリセットし、ネットワークをリセットします。9 秒間押し続けて (3 回のビープ音を聞いた後に放す) システムをリセットします (すべてのデータが消去されます)。",
"ko_KR": "Maiyunda M1S 기계의 RESET 버튼 이벤트를 제어합니다. 3초 동안 누르고 (삐 소리를 들은 후 놓음) 관리자의 비밀번호를 maiyunda.com으로 재설정하고 네트워크를 재설정합니다. 9초 동안 누르고 (3번의 삐 소리를 들은 후 놓음) 시스템을 재설정합니다 (모든 데이터가 지워짐).",
"ru_RU": "Управление событием кнопки RESET машины Maiyunda M1S, удерживайте 3 секунды (отпустите после звукового сигнала) сбросьте пароль администратора на maiyunda.com и сбросьте сеть, удерживайте 9 секунд (отпустите после 3 звуковых сигналов) сбросьте систему (все данные будут стерты).",
"th_TH": "ควบคุมเหตุการณ์ปุ่ม RESET ของเครื่อง Maiyunda M1S กดค้างไว้ 3 วินาที (ปล่อยหลังจากได้ยินเสียงบี๊บ) รีเซ็ตพาสเวิร์ดผู้ดูแลระบบเป็น maiyunda.com และรีเซ็ตเครือข่าย กดค้างไว้ 9 วินาที (ปล่อยหลังจากได้ยินเสียงบี๊บ 3 ครั้ง) รีเซ็ตระบบ (ข้อมูลทั้งหมดจะถูกลบออก).",
"tr_TR": "Maiyunda M1S makinesinin RESET düğmesi olayını kontrol edin, 3 saniye basılı tutun (bip sesi duyduktan sonra bırakın) admin şifresini maiyunda.com olarak sıfırlayın ve ağı sıfırlayın, 9 saniye basılı tutun (3 bip sesi duyduktan sonra bırakın) sistemi sıfırlayın (tüm veriler silinecektir).",
"uk_UA": "Контроль події кнопки RESET машини Maiyunda M1S, натискайте та утримуйте 3 секунди (відпустіть після звуку) скинути пароль адміністратора на maiyunda.com і скинути мережу, натискайте та утримуйте 9 секунд (відпустіть після 3 звуків) скинути систему (всі дані будуть стерті).",
"vi_VN": "Điều khiển sự kiện nút RESET của máy Maiyunda M1S, nhấn và giữ trong 3 giây (thả ra sau khi nghe tiếng bíp) đặt lại mật khẩu quản trị viên thành maiyunda.com và đặt lại mạng, nhấn và giữ trong 9 giây (thả ra sau khi nghe 3 tiếng bíp) đặt lại hệ thống (tất cả dữ liệu sẽ bị xóa).",
"zh_CN": "用于控制 迈云达M1S 机器的 RESET 按钮事件, 按住 3s (听到哔哔哔后松手) 重置 admin 密码为 maiyunda.com 并重置网络, 按住 9s (听到 3次 哔哔哔后松手) 重置系统 (会清空全部数据).",
"zh_HK": "用於控制 迈云达M1S 机器的 RESET 按钮事件, 按住 3s (听到哔哔哔后松手) 重置 admin 密码为 maiyunda.com 并重置网络, 按住 9s (听到 3次 哔哔哔后松手) 重置系统 (会清空全部数据).",
"zh_TW": "用於控制 迈云达M1S 机器的 RESET 按钮事件, 按住 3s (听到哔哔哔后松手) 重置 admin 密码为 maiyunda.com 并重置网络, 按住 9s (听到 3次 哔哔哔后松手) 重置系统 (会清空全部数据)."
}
},
"misc": {
"system": true,
"description": {
"en_US": "Miscellaneous functions. (A collection of some necessary modifications.)",
"ar_SA": "وظائف متنوعة. (مجموعة من بعض التعديلات الضرورية.)",
"de_DE": "Verschiedene Funktionen. (Eine Sammlung einiger notwendiger Änderungen.)",
"es_ES": "Funciones variadas. (Una colección de algunas modificaciones necesarias.)",
"fr_FR": "Fonctions diverses. (Une collection de certaines modifications nécessaires.)",
"ja_JP": "その他の機能. (いくつかの必要な変更の集まり.)",
"ko_KR": "기타 기능. (일부 필요한 수정의 집합.)",
"ru_RU": "Различные функции. (Набор некоторых необходимых изменений.)",
"th_TH": "ฟังก์ชันเบ็ดเสร็จ. (ชุดของการปรับเปลี่ยนบางอย่างที่จำเป็น.)",
"tr_TR": "Çeşitli iş levler. (Bazı gereksiz değişikliklerin bir koleksiyonu.)",
"uk_UA": "Різноманітні функції. (Колекція деяких необхідних модифікацій.)",
"vi_VN": "Các chức năng khác nhau. (Một bộ sửa đổi cần thiết.)",
"zh_CN": "杂项功能. (一些必要的修改的集合.)",
"zh_HK": "雜項功能. (一些必要的修改的集合.)",
"zh_TW": "雜項功能. (一些必要的修改的集合.)"
}
},
"monitor": {
"system": false,
"description": {
"en_US": "Monitor Power Management (Only supports graphics card drivers).",
"ar_SA": "إدارة الطاقة للمراقبة(يدعم فقط برامج تشغيل بطاقة الرسومات).",
"de_DE": "Überwachung der Energieverwaltung (nur unterstützt Graphikkartendrivers).",
"es_ES": "Monitoreo de la gestión de energía (solo admite controladores de tarjeta gráfica).",
"fr_FR": "Surveillance de la gestion de l'alimentation (seulement les pilotes de carte graphique sont pris en charge).",
"ja_JP": "電源管理の監視 (グラフィックスカードドライバーのみサポート)。",
"ko_KR": "모니터 전원 관리 (그래픽 카드 드라이버만 지원)。",
"ru_RU": "Мониторинг управления питанием (только поддерживает драйверы графических карт).",
"th_TH": "การตรวจสอบการบริหารจัดการพลังงาน (แค่สนับสนุนไดรเวอร์การทำงานของการ์ดราฟิก).",
"tr_TR": "Monitör Güç Yönetimi (grafik kart sürücüsü destekliyor).",
"uk_UA": "Моніторинг управління живленням (тільки підтримує драйвери графічних карток).",
"vi_VN": "Quản lý nguồn điện (chỉ hỗ trợ các driver của card đồ họa).",
"zh_CN": "显示器电源管理 (仅支持显卡已驱动的环境)。",
"zh_HK": "顯示器電源管理 (僅支持显卡已驅動的环境)。",
"zh_TW": "顯示器電源管理 (僅支持显卡已驅動的环境)。"
}
},
"mountloader": {
"system": false,
"description": {
"en_US": "Mount boot disk and upgrade boot script under DSM system, for rr-manager application.",
"ar_SA": "تثبيت قرص التمهيد وترقية البرنامج النصي للتمهيد تحت نظام DSM، لتطبيق rr-manager.",
"de_DE": "Mounten Sie das Startlaufwerk und aktualisieren Sie das Startskript unter dem DSM-System für die rr-manager-Anwendung.",
"es_ES": "Montar el disco de arranque y actualizar el script de arranque en el sistema DSM, para la aplicación rr-manager.",
"fr_FR": "Monter le disque de démarrage et mettre à jour le script de démarrage sous le système DSM, pour l'application rr-manager.",
"ja_JP": "DSM システムでブート ディスクをマウントし、rr-manager アプリケーション用のブート スクリプトをアップグレードします。",
"ko_KR": "DSM 시스템에서 부팅 디스크를 마운트하고 rr-manager 응용 프로그램을 위한 부팅 스크립트를 업그레이드합니다.",
"ru_RU": "Подключите загрузочный диск и обновите загрузочный скрипт в системе DSM для приложения rr-manager.",
"th_TH": "ในระบบ DSM เมานต์ดิสก์บูตและอัปเกรดสคริปต์บูตสำหรับแอปพลิเคชัน rr-manager",
"tr_TR": "DSM sisteminde başlangıç diskini bağlayın ve rr-manager uygulamasında başlangıç betiğini güncelleyin.",
"uk_UA": "З'єднати стартовий диск та оновити стартовий скрипт в системі DSM для додатку rr-manager.",
"vi_VN": "Đồng bộ hóa đĩa khởi động và cập nhật script khởi động trong hệ thống DSM, cho ứng dụng rr-manager.",
"zh_CN": "在 DSM 系统下挂载引导磁盘和升级引导的脚本, 供 rr-manager 应用程序使用.",
"zh_HK": "在 DSM 系統下掛載引導磁碟和升級引導的腳本, 供 rr-manager 應用程序使用.",
"zh_TW": "在 DSM 系統下掛載引導磁碟和升級引導的腳本, 供 rr-manager 應用程序使用."
}
},
"netfix": {
"system": true,
"description": {
"en_US": "Fix network interface mac.",
"ar_SA": "إصلاح عنوان MAC لواجهة الشبكة.",
"de_DE": "Netzwerkschnittstellen-MAC beheben.",
"es_ES": "Corregir la dirección MAC de la interfaz de red.",
"fr_FR": "Corriger l'adresse MAC de l'interface réseau.",
"ja_JP": "ネットワークインターフェースのMACアドレスを修正します.",
"ko_KR": "네트워크 인터페이스의 MAC 주소를 수정합니다.",
"ru_RU": "Исправить MAC-адрес сетевой интерфейса.",
"th_TH": "แก้ไขที่อยู่ MAC ของช่องทางเครือข่าย.",
"tr_TR": "Netzwerkschnittstellen-MAC beheben.",
"uk_UA": "Виправте MAC-адресу сетевого інтерфейсу.",
"vi_VN": "Sửa địa chỉ MAC của giao diện mạng.",
"zh_CN": "修复网络接口mac地址.",
"zh_HK": "修复网络接口mac地址.",
"zh_TW": "修复网络接口mac地址."
}
},
"notify": {
"system": true,
"description": {
"en_US": "Add rr notify.",
"ar_SA": "إضافة rr notify.",
"de_DE": "Füge rr notify hinzu.",
"es_ES": "Añadir rr notify.",
"fr_FR": "Ajouter rr notify.",
"ja_JP": "rr notify を追加します.",
"ko_KR": "rr notify 를 추가합니다.",
"ru_RU": "Добавить rr notify.",
"th_TH": "เพิ่ม rr notify",
"tr_TR": "rr notify ekleyin.",
"uk_UA": "Додати rr notify.",
"vi_VN": "Thêm rr notify.",
"zh_CN": "添加 rr notify.",
"zh_HK": "添加 rr notify.",
"zh_TW": "新增 rr notify."
}
},
"nvmecache": {
"system": false,
"description": {
"en_US": "Author: PeterSuh-Q3. Enable NVME disk support for DS918+, DS1019+, DS1621xs+, RS1619xs+.",
"ar_SA": "المؤلف: PeterSuh-Q3. تمكين دعم القرص NVME لـ DS918+، DS1019+، DS1621xs+، RS1619xs+.",
"de_DE": "Autor: PeterSuh-Q3. Aktivieren Sie die Unterstützung für NVME-Laufwerke für DS918+, DS1019+, DS1621xs+, RS1619xs+.",
"es_ES": "Autor: PeterSuh-Q3. Habilita el soporte de discos NVME para DS918+, DS1019+, DS1621xs+, RS1619xs+.",
"fr_FR": "Auteur: PeterSuh-Q3. Activer la prise en charge des disques NVME pour DS918+, DS1019+, DS1621xs+, RS1619xs+.",
"ja_JP": "作者: PeterSuh-Q3. DS918+、DS1019+、DS1621xs+、RS1619xs+ で NVME ディスクのサポートを有効にします.",
"ko_KR": "작성자: PeterSuh-Q3. DS918+, DS1019+, DS1621xs+, RS1619xs+에서 NVME 디스크 지원 활성화.",
"ru_RU": "Автор: PeterSuh-Q3. Включите поддержку дисков NVME для DS918+, DS1019+, DS1621xs+, RS1619xs+.",
"th_TH": "ผู้เขียน: PeterSuh-Q3. เปิดใช้งานการสนับสนุนดิสก์ NVME สำหรับ DS918+, DS1019+, DS1621xs+, RS1619xs+",
"tr_TR": "Yazar: PeterSuh-Q3. DS918+, DS1019+, DS1621xs+, RS1619xs+ için NVME disk desteğini etkinleştirin.",
"uk_UA": "Автор: PeterSuh-Q3. Увімкніть підтримку дисків NVME для DS918+, DS1019+, DS1621xs+, RS1619xs+.",
"vi_VN": "Tác giả: PeterSuh-Q3. Bật hỗ trợ đĩa NVME cho DS918+, DS1019+, DS1621xs+, RS1619xs+.",
"zh_CN": "作者: PeterSuh-Q3. 启用 DS918+、DS1019+、DS1621xs+、RS1619xs+ 的 NVME 硬盘支持.",
"zh_HK": "作者: PeterSuh-Q3. 啟用 DS918+、DS1019+、DS1621xs+、RS1619xs+ 的 NVME 硬碟支援.",
"zh_TW": "作者: PeterSuh-Q3. 啟用 DS918+、DS1019+、DS1621xs+、RS1619xs+ 的 NVME 硬碟支援."
}
},
"nvmesystem": {
"system": false,
"description": {
"en_US": "Author: jim3ma. Install system on NVME disk (can't contain any SATA disk during installation, only supports DT mdoels).",
"ar_SA": "المؤلف: jim3ma. تثبيت نظام على القرص NVME (لا يمكن أن يحتوي على أي قرص SATA أثناء التثبيت ، يدعم فقط DT).",
"de_DE": "Autor: jim3ma. Installieren Sie das System auf einem NVME-Disk (kann keine SATA-Disk während der Installation enthalten, unterstützt nur DT-Modell).",
"es_ES": "Autor: jim3ma. Instalar el sistema en un disco NVME (no puede contener ninguna unidad SATA durante la instalación, solo admite modelos DT).",
"fr_FR": "Auteur: jim3ma. Installez le système sur un disque NVME (ne peut contenir aucune unité SATA pendant l'installation, ne prend que les modèles DT).",
"ja_JP": "著者: jim3ma. NVME ディスクにシステムをインストール (インストール中に SATA ディスクを含めることはできません、DT モデルのみをサポートします).",
"ko_KR": "저자: jim3ma. NVME 디스크에 시스템을 설치 (설치 중에 SATA 디스크를 포함할 수 없으며, DT 모델만 지원합니다).",
"ru_RU": "Автор: jim3ma. Установить систему на диск NVME (не может содержать SATA-диск во время установки, поддерживает только модели DT).",
"th_TH": "ผู้เขียน: jim3ma. ติดตั้งระบบบนแผง NVME (ไม่สามารถมีหน่วย SATA ในระหว่างการติดตั้งได้ และเฉพาะโมเดล DT เท่านั้น).",
"tr_TR": "Yazar: jim3ma. NVME disk üzerine sistem yükleyin (kurulum sırasında herhangi bir SATA disk içeremez, yalnızca DT modellerini destekler).",
"uk_UA": "Автор: jim3ma. Установить систему на диск NVME (не может содержать SATA-диск во время установки, поддерживает только модели DT).",
"vi_VN": "Người tạo: jim3ma. Cài đặt hệ thống trên NVME (không thể chứa đĩa SATA trong quá trình cài đặt, chỉ hỗ trợ mô hình DT).",
"zh_CN": "作者: jim3ma. 在 NVME 盘上安装系统 (在安装过程中不能包含 SATA 盘,仅支持 DT 型号).",
"zh_HK": "作者: jim3ma. 在 NVME 盤上安裝系統 (在安裝過程中不能包含 SATA 盤,僅支持 DT 模型).",
"zh_TW": "作者: jim3ma. 在 NVME 盤上安裝系統 (在安裝過程中不能包含 SATA 盤,僅支持 DT 模型)."
}
},
"nvmevolume": {
"system": false,
"description": {
"en_US": "Author: 007revad & PeterSuh-Q3. Allow creation of storage pools and volumes from Storage Manager through NVME disks.",
"ar_SA": "المؤلف: (007revad) وPeterSuh-Q3. تمكين إنشاء مجموعات تخزين ومساحات تخزين من مネージャ التخزين من خلال قرص NVME.",
"de_DE": "Autor: 007revad & PeterSuh-Q3. Erlaubt die Erstellung von Speicherpools und Volumen über den Speicher-Manager über NVME-Disks.",
"es_ES": "Autor: 007revad & PeterSuh-Q3. Permite la creación de grupos de almacenamiento y volúmenes a través del Administrador de almacenamiento a través de discos NVME.",
"fr_FR": "Auteur: 007revad & PeterSuh-Q3. Permet la création de pools de stockage et de volumes à partir du gestionnaire de stockage à travers les disques NVME.",
"ja_JP": "作者: 007revad & PeterSuh-Q3. Storage Manager から NVME ディスクからストレージ プールとボリュームを作成できるようにします.",
"ko_KR": "작성자: 007revad & PeterSuh-Q3. Storage Manager의 NVME 디스크에서 스토리지 풀 및 볼륨을 생성할 수 있습니다.",
"ru_RU": "Автор: 007revad & PeterSuh-Q3. Позволяет создавать пулы носителей и тома из дисков NVME из Storage Manager.",
"th_TH": "ผู้เขียน: 007revad & PeterSuh-Q3 สร้างกลุ่มจัดเก็บและพื้นที่จัดเก็บจาก Storage Manager ผ่านดิสก์ NVME",
"tr_TR": "Yazar: 007revad ve PeterSuh-Q3. Storage Manager'dan NVME disklerden depolama havuzları ve birimleri oluşturulmasına olanak tanır.",
"uk_UA": "Автор: 007revad & PeterSuh-Q3. Дозволяє створювати пули зберігання та томи з дисків NVME за допомогою Storage Manager.",
"vi_VN": "tác giả: 007revad & PeterSuh-Q3. Cho phép tạo khối lưu trữ và khối từ Quản lý lưu trữ thông qua đĩa NVME.",
"zh_CN": "作者: 007revad & PeterSuh-Q3. 允许从存储管理器中通过 NVME 磁盘创建存储池和卷.",
"zh_HK": "作者: 007revad & PeterSuh-Q3. 允許從儲存管理器中透過 NVME 磁碟建立儲存池和磁碟區.",
"zh_TW": "作者: 007revad & PeterSuh-Q3. 允許從儲存管理器中透過 NVME 磁碟建立儲存池和磁碟區."
}
},
"powersched": {
"system": false,
"description": {
"en_US": "A program to configure the RTC according to the DSM power plan, so that the RTC (scheduled power on/off) can work properly.",
"ar_SA": "برنامج لتكوين RTC وفقًا لخطة الطاقة DSM، بحيث يمكن لـ RTC (تشغيل/إيقاف الطاقة المجدول) العمل بشكل صحيح.",
"de_DE": "Ein Programm zum Konfigurieren des RTC gemäß dem DSM-Energieplan, damit der RTC (geplantes Ein-/Ausschalten) ordnungsgemäß funktionieren kann.",
"es_ES": "Un programa para configurar el RTC de acuerdo con el plan de energía de DSM, de modo que el RTC (programado encendido/apagado) pueda funcionar correctamente.",
"fr_FR": "Un programme pour configurer le RTC selon le plan d'alimentation DSM, de sorte que le RTC (mise sous tension/arrêt programmée) puisse fonctionner correctement.",
"ja_JP": "DSM 電源計画に従って RTC を構成するプログラムです. これにより RTC (予約電源オン/オフ) が正常に動作します.",
"ko_KR": "DSM 전원 계획에 따라 RTC를 구성하여 RTC(예약 전원/전원 끄기)이 정상적으로 작동하도록합니다.",
"ru_RU": "Программа для настройки RTC в соответствии с планом питания DSM, чтобы RTC (запланированное включение/выключение) могло работать правильно.",
"th_TH": "โปรแกรมสำหรับกำหนดค่า RTC ตามแผนไฟ DSM โดย RTC (เปิด/ปิดไฟตามกำหนดเวลา) สามารถทำงานได้อย่างถูกต้อง",
"tr_TR": "DSM güç planına göre RTC'yi yapılandırmak için bir program, böylece RTC (zamanlanmış güç açma/kapama) düzgün çalışabilir.",
"uk_UA": "Програма для налаштування RTC відповідно до плану живлення DSM, щоб RTC (заплановане ввімкнення/вимкнення) працювало належним чином.",
"vi_VN": "Chương trình để cấu hình RTC theo kế hoạch nguồn DSM, để RTC (bật/tắt theo lịch trình) có thể hoạt động đúng cách.",
"zh_CN": "根据 DSM 电源计划配置 RTC 的程序, 使 RTC(定时开关机) 可以正常工作.",
"zh_HK": "根據 DSM 電源計劃配置 RTC 的程式, 使 RTC(定時開關機) 可以正常工作.",
"zh_TW": "根據 DSM 電源計劃配置 RTC 的程式, 使 RTC(定時開關機) 可以正常工作."
}
},
"reboottoloader": {
"system": false,
"description": {
"en_US": "Add a script to restart to RR in the DSM scheduled task, making it easy to access RR with not have a screen and keyboard.",
"ar_SA": "أضف سكريبت لإعادة التشغيل إلى RR في المهمة المجدولة DSM، مما يجعل من السهل الوصول إلى RR بدون وجود شاشة ولوحة مفاتيح.",
"de_DE": "Fügt einen Skript zum Neustart zu RR in der DSM geplanten Aufgabe, so dass es einfach, RR mit nicht haben einen Bildschirm und Tastatur zugreifen.",
"es_ES": "Agregue un script para reiniciar a RR en la tarea programada de DSM, lo que facilita el acceso a RR sin tener una pantalla y un teclado.",
"fr_FR": "Ajoutez un script pour redémarrer à RR dans la tâche planifiée DSM, ce qui rend facile d'accéder à RR avec ne pas avoir un écran et un clavier.",
"ja_JP": "DSM のスケジュールされたタスクで RR に再起動するスクリプトを追加し、画面とキーボードがない RR に簡単にアクセスできるようにします.",
"ko_KR": "DSM 예약 된 작업에서 RR로 재시작하는 스크립트를 추가하여 화면과 키보드가없는 RR에 쉽게 액세스 할 수 있습니다.",
"ru_RU": "Добавьте сценарий для перезапуска в RR в запланированной задаче DSM, что облегчает доступ к RR без наличия экрана и клавиатуры.",
"th_TH": "เพิ่มสคริปต์เพื่อรีสตาร์ทไปยัง RR ในงานที่ตั้งเวลา DSM ทำให้สามารถเข้าถึง RR ได้อย่างง่ายโดยไม่มีหน้าจอและคีย์บอร์ด",
"tr_TR": "DSM planlanmış görevinde RR'ye yeniden başlatmak için bir betik ekleyerek, ekrana ve klavyeye sahip olmadan RR'ye erişmeyi kolaylaştırır.",
"uk_UA": "Додайте сценарій для перезапуску в RR в запланованому завданні DSM, що полегшує доступ до RR без наявності екрана та клавіатури.",
"vi_VN": "Thêm một tập lệnh để khởi động lại RR trong nhiệm vụ được lên lịch DSM, làm cho nó dễ dàng truy cập RR với không có màn hình và bàn phím.",
"zh_CN": "在 DSM 计划任务中添加一个脚本以重新启动到 RR, 这使得很容易访问 RR 而不需要屏幕和键盘.",
"zh_HK": "在 DSM 計劃任務中添加一個腳本以重新啟動到 RR, 這使得很容易訪問 RR 而不需要屏幕和鍵盤.",
"zh_TW": "在 DSM 計劃任務中添加一個腳本以重新啟動到 RR, 這使得很容易訪問 RR 而不需要屏幕和鍵盤."
}
},
"redpill": {
"system": true,
"description": {
"en_US": "Delay redpill.",
"ar_SA": "تأخير redpill.",
"de_DE": "Verzögere redpill.",
"es_ES": "Retrasar redpill.",
"fr_FR": "Retarder redpill.",
"ja_JP": "ディレイredpill.",
"ko_KR": "지연 redpill.",
"ru_RU": "Задержка redpill.",
"th_TH": "เลื่อน redpill.",
"tr_TR": "Redpill'i geciktir.",
"uk_UA": "Затримка redpill.",
"vi_VN": "Trì hoãn redpill.",
"zh_CN": "延迟 redpill.",
"zh_HK": "延遲 redpill.",
"zh_TW": "延遲 redpill."
}
},
"remotefs": {
"system": false,
"description": {
"en_US": "Author: jinlife. This patch will allow remote NFS/CIFS shared folder be used in VideoStation, AudioStation and Photos etc.",
"ar_SA": "المؤلف: jinlife. سيسمح هذا التصحيح باستخدام مجلد مشترك بروتوكول NFS/CIFS عن بُعد في VideoStation و AudioStation و Photos وما إلى ذلك.",
"de_DE": "Autor: jinlife. Dieser Patch ermöglicht es, dass ein entfernter NFS/CIFS-Freigabeordner in VideoStation, AudioStation und Photos usw. verwendet wird.",
"es_ES": "Autor: jinlife. Este parche permitirá que la carpeta compartida remota NFS/CIFS se utilice en VideoStation, AudioStation y Photos, etc.",
"fr_FR": "Auteur: jinlife. Ce correctif permettra à un dossier partagé NFS/CIFS distant d'être utilisé dans VideoStation, AudioStation et Photos, etc.",
"ja_JP": "作者: jinlife. このパッチにより、リモート NFS/CIFS 共有フォルダを VideoStation、AudioStation、Photos などで使用できます.",
"ko_KR": "작성자: jinlife. 이 패치를 사용하면 VideoStation, AudioStation 및 사진 등에서 원격 NFS/CIFS 공유 폴더를 사용할 수 있습니다.",
"ru_RU": "Автор: jinlife. Этот патч позволит использовать удаленную общую папку NFS/CIFS в VideoStation, AudioStation и Photos и т. д.",
"th_TH": "ผู้เขียน: jinlife. แพตช์นี้จะทำให้โฟลเดอร์ที่แชร์ระยะไกลแบบ NFS/CIFS ใช้ได้ใน VideoStation, AudioStation และ Photos เป็นต้น",
"tr_TR": "Yazar: jinlife. Bu yama, VideoStation, AudioStation ve Fotoğraflar vb. gibi yerlerde uzak NFS/CIFS paylaşılan klasörün kullanılmasına izin verecektir.",
"uk_UA": "Автор: jinlife. Цей патч дозволить використовувати віддалену спільну папку NFS/CIFS в VideoStation, AudioStation та Photos тощо.",
"vi_VN": "Tác giả: jinlife. Bản vá này sẽ cho phép thư mục chia sẻ NFS/CIFS từ xa được sử dụng trong VideoStation, AudioStation và Photos v.v..",
"zh_CN": "作者: jinlife. 此补丁将允许在 VideoStation、AudioStation 和 Photos 等应用中使用远程 NFS/CIFS 共享文件夹.",
"zh_HK": "作者: jinlife. 此補丁將允許在 VideoStation、AudioStation 和 Photos 等應用中使用遠程 NFS/CIFS 共享文件夾.",
"zh_TW": "作者: jinlife. 此補丁將允許在 VideoStation、AudioStation 和 Photos 等應用中使用遠程 NFS/CIFS 共享文件夾."
}
},
"revert": {
"system": true,
"description": {
"en_US": "Revert addons modifications.",
"ar_SA": "تراجع عن تعديلات الإضافات.",
"de_DE": "Addons-Modifikationen rückgängig machen.",
"es_ES": "Deshacer las modificaciones de los addons.",
"fr_FR": "Annuler les modifications des addons.",
"ja_JP": "アドオンの変更を元に戻します.",
"ko_KR": "애드온 수정 사항을 되돌립니다.",
"ru_RU": "Отменить изменения аддонов.",
"th_TH": "ย้อนกลับการปรับแต่งของส่วนเสริม",
"tr_TR": "Eklentilerin değişikliklerini geri alın.",
"uk_UA": "Скасувати зміни додатків.",
"vi_VN": "Hoàn tác các thay đổi của các tiện ích.",
"zh_CN": "撤销插件修改.",
"zh_HK": "還原插件修改.",
"zh_TW": "還原插件修改."
}
},
"sensors": {
"system": false,
"description": {
"en_US": "This script installs the sensors and fancontrol tools for CPU monitoring and fan control, which can be adjusted through the Fancontrol in the scheduled task.",
"ar_SA": "هذا البرنامج النصي يقوم بتثبيت أدوات sensors و fancontrol لمراقبة وحدة المعالجة المركزية والتحكم في المروحة، والتي يمكن ضبطها من خلال Fancontrol في المهمة المجدولة.",
"de_DE": "Dieses Skript installiert die Werkzeuge sensors und fancontrol zur CPU-Überwachung und Lüftersteuerung, die über Fancontrol in der geplanten Aufgabe angepasst werden können.",
"es_ES": "Este script instala las herramientas sensors y fancontrol para la monitorización de la CPU y el control del ventilador, que se pueden ajustar mediante Fancontrol en la tarea programada.",
"fr_FR": "Ce script installe les outils sensors et fancontrol pour la surveillance du processeur et le contrôle du ventilateur, qui peuvent être ajustés via Fancontrol dans la tâche planifiée.",
"ja_JP": "このスクリプトは、CPU監視とファン制御のためのsensorsおよびfancontrolツールをインストールします。これは、スケジュールされたタスクのFancontrolを介して調整できます。",
"ko_KR": "이 스크립트는 CPU 모니터링 및 팬 제어를 위한 sensors 및 fancontrol 도구를 설치합니다. 이는 예약된 작업의 Fancontrol을 통해 조정할 수 있습니다.",
"ru_RU": "Этот скрипт устанавливает инструменты sensors и fancontrol для мониторинга ЦП и управления вентилятором, которые можно настроить через Fancontrol в запланированной задаче.",
"th_TH": "สคริปต์นี้ติดตั้งเครื่องมือ sensors และ fancontrol สำหรับการตรวจสอบ CPU และการควบคุมพัดลมซึ่งสามารถปรับได้ผ่าน Fancontrol ในงานที่กำหนดเวลา",
"tr_TR": "Bu betik, CPU izleme ve fan kontrolü için sensors ve fancontrol araçlarını yük합니다. Bu, planlı görevdeki Fancontrol을 통해 조정할 수 있습니다.",
"uk_UA": "Цей скрипт встановлює інструменти sensors і fancontrol для моніторингу ЦП і керування вентилятором, які можна налаштувати через Fancontrol у запланованій задачі.",
"vi_VN": "Đoạn mã này cài đặt các công cụ sensors và fancontrol để giám sát CPU và điều khiển quạt, có thể điều chỉnh thông qua Fancontrol trong tác vụ đã lên lịch.",
"zh_CN": "此脚本安装 sensors 和 fancontrol 工具, 用于监视 CPU 和风扇控制, 可通过计划任务中 Fancontrol 调整风扇具体参数.",
"zh_HK": "此腳本安裝 sensors 和 fancontrol 套件, 用於監視 CPU 和风扇控制, 可通過計劃任務中 Fancontrol 調整風扇具體參數.",
"zh_TW": "此腳本安裝 sensors 和 fancontrol 套件, 用於監視 CPU 和风扇控制, 可通過計劃任務中 Fancontrol 調整風扇具體參數."
}
},
"setrootpw": {
"system": false,
"description": {
"en_US": "Set root password and enable ssh/sftp. Please modify PW='' to the desired password in DSM Task Scheduler and run the task.",
"ar_SA": "قم بتعيين كلمة مرور root وتمكين ssh/sftp. يرجى تعديل PW='' إلى كلمة المرور المطلوبة في جدول المهام DSM وتشغيل المهمة.",
"de_DE": "Legen Sie das Root-Passwort fest und aktivieren Sie ssh/sftp. Bitte ändern Sie PW='' in der DSM-Aufgabenplanung in das gewünschte Passwort und führen Sie die Aufgabe aus.",
"es_ES": "Establece la contraseña de root y habilita ssh/sftp. Por favor, modifique PW='' a la contraseña deseada en el Programador de Tareas de DSM y ejecute la tarea.",
"fr_FR": "Définissez le mot de passe root et activez ssh/sftp. Veuillez modifier PW='' en le mot de passe souhaité dans le planificateur de tâches DSM et exécutez la tâche.",
"ja_JP": "ルートパスワードを設定し、ssh/sftpを有効にします. DSM タスクスケジューラで PW='' を希望のパスワードに変更してタスクを実行してください.",
"ko_KR": "루트 암호를 설정하고 ssh/sftp를 활성화합니다. DSM 작업 스케줄러에서 PW=''를 원하는 암호로 수정하고 작업을 실행하십시오.",
"ru_RU": "Установите пароль root и включите ssh/sftp. Пожалуйста, измените PW='' на желаемый пароль в планировщике задач DSM и запустите задачу.",
"th_TH": "ตั้งรหัสผ่าน root และเปิดใช้งาน ssh/sftp โปรดแก้ไข PW='' เป็นรหัสผ่านที่ต้องการในตัวจัดการงาน DSM และเริ่มการทำงาน",
"tr_TR": "Kök parolasını ayarlayın ve ssh/sftp'yi etkinleştirin. Lütfen DSM Görev Zamanlayıcısında PW='''yi istenen parola olarak değiştirin ve görevi çalıştırın.",
"uk_UA": "Встановіть пароль root та увімкніть ssh/sftp. Будь ласка, змініть PW='' на бажаний пароль в планувальнику завдань DSM та запустіть завдання.",
"vi_VN": "Đặt mật khẩu root và kích hoạt ssh/sftp. Vui lòng sửa đổi PW='' thành mật khẩu mong muốn trong Lịch trình nhiệm vụ DSM và chạy nhiệm vụ.",
"zh_CN": "设置 root 密码并启用 ssh/sftp. 请在 DSM 计划任务中将 PW='' 修改为所需的密码并运行该任务.",
"zh_HK": "設置 root 密碼並啟用 ssh/sftp. 請在 DSM 計劃任務中將 PW='' 修改為所需的密碼並運行該任務.",
"zh_TW": "設置 root 密碼並啟用 ssh/sftp. 請在 DSM 計劃任務中將 PW='' 修改為所需的密碼並執行該任務."
}
},
"smartctl": {
"system": false,
"description": {
"en_US": "Author: Phachd. Fix SMART information on disks on HBA devices.",
"ar_SA": "المؤلف: Phachd. إصلاح معلومات SMART على الأقراص على أجهزة HBA.",
"de_DE": "Autor: Phachd. Beheben Sie SMART-Informationen auf Festplatten auf HBA-Geräten.",
"es_ES": "Autor: Phachd. Corregir la información SMART en discos en dispositivos HBA.",
"fr_FR": "Auteur: Phachd. Corriger les informations SMART sur les disques sur les périphériques HBA.",
"ja_JP": "作者: Phachd. HBA デバイス上のディスクの SMART 情報を修正します.",
"ko_KR": "저자: Phachd. HBA 장치의 디스크에서 SMART 정보를 수정합니다.",
"ru_RU": "Автор: Phachd. Исправление информации SMART на дисках на устройствах HBA.",
"th_TH": "ผู้เขียน: Phachd. แก้ไขข้อมูล SMART บนดิสก์บนอุปกรณ์ HBA เท่านั้น",
"tr_TR": "Yazar: Phachd. HBA cihazlarındaki disklerde SMART bilgilerini düzeltin.",
"uk_UA": "Автор: Phachd. Виправлення інформації SMART на дисках на пристроях HBA.",
"vi_VN": "Tác giả: Phachd. Sửa thông tin SMART trên ổ đĩa trên các thiết bị HBA.",
"zh_CN": "作者: Phachd. 修复 HBA 设备上磁盘的 SMART 信息.",
"zh_HK": "作者: Phachd. 修复 HBA 设备上磁盘的 SMART 信息.",
"zh_TW": "作者: Phachd. 修复 HBA 设备上磁盘的 SMART 信息."
}
},
"sortnetif": {
"system": false,
"description": {
"en_US": "Sort network interface name.(parameters: empty: sorted by busid; mac1,mac2,...: sorted by macs sequence).",
"ar_SA": "فرز اسم واجهة الشبكة.(المعلمات: فارغ: مرتبة حسب busid؛ mac1،mac2،...: مرتبة حسب تسلسل macs).",
"de_DE": "Sortiere Netzwerk-Schnittstellen-Namen.(Parameter: leer: sortiert nach Bus-ID; mac1,mac2,...: sortiert nach MACs-Sequenz).",
"es_ES": "Ordenar nombre de interfaz de red.(parámetros: vacío: ordenado por busid; mac1,mac2,...: ordenado por secuencia de macs).",
"fr_FR": "Trier le nom de l'interface réseau.(paramètres: vide: trié par busid; mac1,mac2,...: trié par séquence de macs).",
"ja_JP": "ネットワークインターフェイス名をソートします. (パラメータ: 空: busid でソート; mac1,mac2,...: macs シーケンスでソート).",
"ko_KR": "네트워크 인터페이스 이름을 정렬합니다.(매개 변수: 비어 있음: 버스 ID로 정렬; mac1,mac2,...: macs 시퀀스로 정렬).",
"ru_RU": "Сортировать имя сетевого интерфейса.(параметры: пусто: сортировка по busid; mac1,mac2,...: сортировка по последовательности macs).",
"th_TH": "เรียงลำดับชื่ออินเตอร์เฟซเครือข่าย.(พารามิเตอร์: ว่าง: เรียงลำดับตาม busid; mac1,mac2,...: เรียงลำดับตามลำดับ macs).",
"tr_TR": "Ağ arayüz adını sırala.(parametreler: boş: busid'ye göre sıralanmış; mac1,mac2,...: macs sırasına göre sıralanmış).",
"uk_UA": "Сортувати ім'я мережевого інтерфейсу.(параметри: порожній: впорядковано за busid; mac1,mac2,...: впорядковано за послідовністю macs).",
"vi_VN": "Sắp xếp tên giao diện mạng.(tham số: trống: sắp xếp theo busid; mac1,mac2,...: sắp xếp theo chuỗi macs).",
"zh_CN": "对网络接口名称进行排序. (参数: 空: 按 busid 排序; mac1,mac2,...: 按 macs 序列排序).",
"zh_HK": "對網絡接口名稱進行排序. (參數: 空: 按 busid 排序; mac1,mac2,...: 按 macs 序列排序).",
"zh_TW": "對網路介面名稱進行排序. (參數: 空: 按 busid 排序; mac1,mac2,...: 按 macs 序列排序)."
}
},
"storagepanel": {
"system": false,
"description": {
"en_US": "Change the storage panel disk display (The default is automatic, please see the documentation or '/usr/bin/storagepanel.sh -h' for parameters).",
"ar_SA": "تغيير عرض القرص للوحة التخزين (الافتراضي هو التلقائي، يرجى الرجوع إلى الوثائق أو '/usr/bin/storagepanel.sh -h' للحصول على المعلمات).",
"de_DE": "Ändern Sie die Speicherplattenanzeige (Standardmäßig ist dies automatisch, bitte lesen Sie die Dokumentation oder '/usr/bin/storagepanel.sh -h' für Parameter).",
"es_ES": "Cambie la visualización del disco del panel de almacenamiento (El valor predeterminado es automático, consulte la documentación o '/usr/bin/storagepanel.sh -h' para ver los parámetros).",
"fr_FR": "Modifiez l'affichage du disque du panneau de stockage (La valeur par défaut est automatique, veuillez consulter la documentation ou '/usr/bin/storagepanel.sh -h' pour les paramètres).",
"ja_JP": "ストレージパネルのディスク表示を変更します (デフォルトは自動です. パラメータについては、ドキュメントまたは '/usr/bin/storagepanel.sh -h' を参照してください).",
"ko_KR": "스토리지 패널 디스크 표시를 변경합니다 (기본값은 자동입니다. 매개 변수에 대해서는 문서 또는 '/usr/bin/storagepanel.sh -h'를 참조하십시오).",
"ru_RU": "Измените отображение диска панели хранения (По умолчанию это автоматический режим, пожалуйста, ознакомьтесь с документацией или '/usr/bin/storagepanel.sh -h' для параметров).",
"th_TH": "เปลี่ยนการแสดงผลของดิสก์ในแผงจัดเก็บ (ค่าเริ่มต้นคืออัตโนมัติ โปรดดูเอกสารหรือ '/usr/bin/storagepanel.sh -h' เพื่อดูพารามิเตอร์)",
"tr_TR": "Depolama paneli diski görüntüsünü değiştirin (Varsayılan olarak otomatik, lütfen parametreler için belgeleri veya '/usr/bin/storagepanel.sh -h' bakın).",
"uk_UA": "Змініть відображення диска панелі зберігання (За замовчуванням це автоматичний режим, будь ласка, ознайомтеся з документацією або '/usr/bin/storagepanel.sh -h' для параметрів).",
"vi_VN": "Thay đổi hiển thị ổ đĩa của bảng lưu trữ (Mặc định là tự động, vui lòng xem tài liệu hoặc '/usr/bin/storagepanel.sh -h' để biết thông số).",
"zh_CN": "更改存储面板磁盘显示 (默认为自动, 请参阅文档或 '/usr/bin/storagepanel.sh -h' 了解参数).",
"zh_HK": "更改存儲面板磁盤顯示 (默認為自動, 請參閱文檔或 '/usr/bin/storagepanel.sh -h' 了解參數).",
"zh_TW": "更改存儲面板磁盤顯示 (默認為自動, 請參閱文檔或 '/usr/bin/storagepanel.sh -h' 了解參數)."
}
},
"synoconfbkp": {
"system": false,
"description": {
"en_US": "Automatically backup system config settings to the bootloader disk(<loader disk>/p1/scbk/) at bootup and shutdown. Parameters: $1 - number of saves, default 7; $2 - file name prefix, default 'bkp'.",
"ar_SA": "قم بنسخ احتياطي تلقائيًا لإعدادات تكوين النظام إلى قرص البدء (<قرص البدء>/p1/scbk/) عند التشغيل والإيقاف. المعلمات: $1 - عدد الحفظ، الافتراضي 7؛ $2 - بادئة اسم الملف، الافتراضي 'bkp'.",
"de_DE": "Sichert automatisch die Systemkonfigurationseinstellungen auf der Bootloader-Festplatte (<Bootloader-Festplatte>/p1/scbk/) beim Booten und Herunterfahren. Parameter: $1 - Anzahl der Sicherungen, Standard 7; $2 - Dateiname-Präfix, Standard 'bkp'.",
"es_ES": "Realiza automáticamente una copia de seguridad de la configuración del sistema en el disco de arranque (<disco de arranque>/p1/scbk/) al arrancar y apagar. Parámetros: $1 - número de copias, por defecto 7; $2 - prefijo del nombre del archivo, por defecto 'bkp'.",
"fr_FR": "Sauvegarde automatiquement les paramètres de configuration du système sur le disque de démarrage (<disque de démarrage>/p1/scbk/) au démarrage et à l'arrêt. Paramètres : $1 - nombre de sauvegardes, par défaut 7 ; $2 - préfixe du nom de fichier, par défaut 'bkp'.",
"ja_JP": "システム構成設定をブートローダーディスク (<ブートローダーディスク>/p1/scbk/) に自動的にバックアップします. 起動時とシャットダウン時に実行されます. パラメータ: $1 - 保存回数、デフォルト 7; $2 - ファイル名のプレフィックス、デフォルト 'bkp'.",
"ko_KR": "시스템 구성 설정을 부트로더 디스크(<부트로더 디스크>/p1/scbk/)에 부팅 및 종료시 자동으로 백업합니다. 매개변수: $1 - 저장 횟수, 기본값 7; $2 - 파일 이름 접두사, 기본값 'bkp'.",
"ru_RU": "Автоматическое резервное копирование настроек конфигурации системы на диске загрузчика (<диск загрузчика>/p1/scbk/) при загрузке и выключении. Параметры: $1 - количество сохранений, по умолчанию 7; $2 - префикс имени файла, по умолчанию 'bkp'.",
"th_TH": "สำรองข้อมูลการตั้งค่าระบบโดยอัตโนมัติไปยังดิสก์โหลด (<ดิสก์โหลด>/p1/scbk/) ขณะเปิดเครื่องและปิดเครื่อง พารามิเตอร์: $1 - จำนวนการบันทึก, ค่าเริ่มต้น 7; $2 - คำนำหน้าชื่อไฟล์, ค่าเริ่มต้น 'bkp'.",
"tr_TR": "Sistem yapılandırma ayarlarını başlatma ve kapatma sırasında önyükleme diski (<önyükleme diski>/p1/scbk/) üzerine otomatik olarak yedekleyin. Parametreler: $1 - kayıt sayısı, varsayılan 7; $2 - dosya adı öneki, varsayılan 'bkp'.",
"uk_UA": "Автоматичне резервне копіювання налаштувань конфігурації системи на диску завантажувача (<диск завантажувача>/p1/scbk/) під час завантаження та вимкнення. Параметри: $1 - кількість збережень, за замовчуванням 7; $2 - префікс імені файлу, за замовчуванням 'bkp'.",
"vi_VN": "Sao lưu tự động cài đặt cấu hình hệ thống vào ổ đĩa bootloader (<ổ đĩa bootloader>/p1/scbk/) khi khởi động và tắt máy. Tham số: $1 - số lần lưu, mặc định 7; $2 - tiền tố tên tệp, mặc định 'bkp'.",
"zh_CN": "在启动和关机时自动备份系统配置设置到引导加载器磁盘 (<引导加载器磁盘>/p1/scbk/). 参数: $1 - 保存次数, 默认 7; $2 - 文件名前缀, 默认 'bkp'.",
"zh_HK": "在啟動和關機時自動備份系統設定到引導載入器磁碟 (<引導載入器磁碟>/p1/scbk/). 參數: $1 - 保存次數, 預設 7; $2 - 檔案名稱前綴, 預設 'bkp'.",
"zh_TW": "在開機和關機時自動備份系統設定到引導載入器磁碟 (<引導載入器磁碟>/p1/scbk/). 參數: $1 - 保存次數, 預設 7; $2 - 檔案名稱前綴, 預設 'bkp'."
}
},
"tad6s4n10g": {
"system": false,
"description": {
"en_US": "Control TANK TAD6S4N10G machine DTS generation and button events, please modify the content of the Net-Button-3s Net-Button-9s Copy-Button-3s Copy-Button-9s tasks in the scheduled tasks.",
"ar_SA": "التحكم في توليد DTS لجهاز TANK TAD6S4N10G وأحداث الأزرار، يرجى تعديل محتوى المهام المجدولة Net-Button-3s Net-Button-9s Copy-Button-3s Copy-Button-9s.",
"de_DE": "Steuerung der DTS-Generierung und der Tastenereignisse der TANK TAD6S4N10G-Maschine. Bitte ändern Sie den Inhalt der Aufgaben Net-Button-3s, Net-Button-9s, Copy-Button-3s und Copy-Button-9s im Zeitplan.",
"es_ES": "Control de la generación de DTS de la máquina TANK TAD6S4N10G y eventos de botones, por favor modifique el contenido de las tareas programadas Net-Button-3s, Net-Button-9s, Copy-Button-3s y Copy-Button-9s.",
"fr_FR": "Contrôle de la génération DTS de la machine TANK TAD6S4N10G et des événements de boutons, veuillez modifier le contenu des tâches planifiées Net-Button-3s, Net-Button-9s, Copy-Button-3s et Copy-Button-9s.",
"ja_JP": "Tank TAD6S4N10G マシンの DTS 生成とボタン イベントを制御します。スケジュールされたタスクの Net-Button-3s、Net-Button-9s、Copy-Button-3s、および Copy-Button-9s の内容を変更してください。",
"ko_KR": "TANK TAD6S4N10G 기계의 DTS 생성 및 버튼 이벤트를 제어합니다. 예약된 작업의 Net-Button-3s, Net-Button-9s, Copy-Button-3s 및 Copy-Button-9s의 내용을 수정하십시오.",
"ru_RU": "Управление генерацией DTS и событиями кнопок машины TANK TAD6S4N10G, пожалуйста, измените содержимое задач Net-Button-3s, Net-Button-9s, Copy-Button-3s и Copy-Button-9s в планировщике.",
"th_TH": "ควบคุมการสร้าง DTS ของเครื่อง TANK TAD6S4N10G และเหตุการณ์ปุ่มโปรดแก้ไขเนื้อหาของงานที่กำหนดเวลา Net-Button-3s, Net-Button-9s, Copy-Button-3s และ Copy-Button-9s",
"tr_TR": "TANK TAD6S4N10G makinesinin DTS üretimini ve düğme olaylarını kontrol edin, lütfen planlı görevlerdeki Net-Button-3s, Net-Button-9s, Copy-Button-3s ve Copy-Button-9s görevlerinin içeriğini değiştirin.",
"uk_UA": "Контроль генерації DTS машини TANK TAD6S4N10G та подій кнопок, будь ласка, змініть вміст запланованих завдань Net-Button-3s, Net-Button-9s, Copy-Button-3s та Copy-Button-9s.",
"vi_VN": "Điều khiển việc tạo DTS của máy TANK TAD6S4N10G và sự kiện nút, vui lòng sửa đổi nội dung của các tác vụ đã lên lịch Net-Button-3s, Net-Button-9s, Copy-Button-3s và Copy-Button-9s.",
"zh_CN": "用于控制TANK TAD6S4N10G 机器的 DTS 生成 和 按钮事件, 事件内容请自行修改 计划任务中 Net-Button-3s Net-Button-9s Copy-Button-3s Copy-Button-9s 几个任务的内容.",
"zh_HK": "用於控制TANK TAD6S4N10G 機器的 DTS 生成 和 按鈕事件, 事件內容請自行修改 計劃任務中 Net-Button-3s Net-Button-9s Copy-Button-3s Copy-Button-9s 幾個任務的內容.",
"zh_TW": "用於控制TANK TAD6S4N10G 機器的 DTS 生成 和 按鈕事件, 事件內容請自行修改 計劃任務中 Net-Button-3s Net-Button-9s Copy-Button-3s Copy-Button-9s 幾個任務的內容."
}
},
"trivial": {
"system": false,
"description": {
"en_US": "Miscellaneous functions. (A collection of some unnecessary modifications.)",
"ar_SA": "وظائف متنوعة. (مجموعة من بعض التعديلات غير الضرورية.)",
"de_DE": "Verschiedene Funktionen. (Eine Sammlung einiger unbedeutender Änderungen.)",
"es_ES": "Funciones variadas. (Una colección de algunas modificaciones innecesarias.)",
"fr_FR": "Fonctions diverses. (Une collection de certaines modifications inutiles.)",
"ja_JP": "その他の機能. (いくつかの不要な変更の集まり.)",
"ko_KR": "기타 기능. (일부 불필요한 수정의 집합.)",
"ru_RU": "Различные функции. (Набор некоторых ненужных изменений.)",
"th_TH": "ฟังก์ชันเบ็ดเสรจ. (ชุดของการปรับเปลี่ยนบางอย่างที่ไม่จำเป็น.)",
"tr_TR": "Çeşitli iş levler. (Birkaç gereksiz değişiklik.)",
"uk_UA": "Різноманітні функції. (Колекція деяких невимажних модифікацій.)",
"vi_VN": "Các chức năng khác nhau. (Một bộ sửa đổi không cần thiết.)",
"zh_CN": "杂项功能. (一些不太必要的修改的集合.)",
"zh_HK": "雜項功能. (一些不太必要的修改的集合.)",
"zh_TW": "雜項功能. (一些不太必要的修改的集合.)"
}
},
"updatenotify": {
"system": false,
"description": {
"en_US": "RR update notification.",
"ar_SA": "إشعار تحديث RR.",
"de_DE": "RR-Update-Benachrichtigung.",
"es_ES": "Notificación de actualización de RR.",
"fr_FR": "Notification de mise à jour de RR.",
"ja_JP": "RR アップデート通知.",
"ko_KR": "RR 업데이트 알림.",
"ru_RU": "Уведомление об обновлении RR.",
"th_TH": "การแจ้งเตือนการอัปเดต RR",
"tr_TR": "RR güncelleme bildirimi.",
"uk_UA": "Сповіщення про оновлення RR.",
"vi_VN": "Thông báo cập nhật RR.",
"zh_CN": "RR 更新通知.",
"zh_HK": "RR 更新通知.",
"zh_TW": "RR 更新通知."
}
},
"ups": {
"system": false,
"description": {
"en_US": "Author: GXNAS. Force the standby mode to shutdown when UPS power supply. Parameters: -f - Trigger shutdown task before shutdown; -e - Trigger shutdown task before standby mode (not change to shutdown).",
"ar_SA": "لمؤلف: GXNAS. فرض إيقاف تشغيل وضع الاستعداد عند انقطاع مصدر طاقة UPS. المعلمات: -f - تشغيل مهمة إيقاف التشغيل قبل إيقاف التشغيل؛ -e - تشغيل مهمة إيقاف التشغيل قبل وضع-e - تشغيل مهمة إيقاف التشغيل قبل وضع الاستعداد (لا يتم التغيير إلى إيقاف التشغيل).",
"de_DE": "Autor: GXNAS. Erzwingt das Herunterfahren in den Standby-Modus, wenn die USV-Stromversorgung eingeschaltet ist. Parameter: -f Herunterfahraufgabe vor dem Herunterfahren auslösen; -e Herunterfahraufgabe vor dem Standby-Modus auslösen (nicht zum Herunterfahren wechseln).",
"es_ES": "Autor: GXNAS. Fuerza el modo de espera para apagar cuando la fuente de alimentación de la UPS. Parámetros: -f - Activar tarea de apagado antes de apagar; -e - Activar tarea de apagado antes del modo de espera (no cambiar a apagado).",
"fr_FR": "Auteur: GXNAS. Force le mode veille à s'éteindre lorsque l'alimentation de secours UPS. Paramètres : -f - Déclencher la tâche d'arrêt avant l'arrêt ; -e - Déclencher la tâche d'arrêt avant le mode veille (ne pas passer en mode arrêt).",
"ja_JP": "作者: GXNAS. UPS 電源供給時にスタンバイモードをシャットダウンするように強制します. パラメータ: -f - シャットダウン前にシャットダウンタスクをトリガーする; -e - スタンバイモード前にシャットダウンタスクをトリガーする (シャットダウンに変更しない).",
"ko_KR": "작성자: GXNAS. UPS 전원 공급 시 대기 모드를 종료하도록 강제합니다. 매개 변수: -f - 종료 전 종료 작업 트리거; -e - 대기 모드 전 종료 작업 트리거 (종료로 변경하지 않음).",
"ru_RU": "Автор: GXNAS. Принудительно измените режим ожидания на выключение при включении ИБП. Параметры: -f — запускать задачу завершения работы перед выключением; -e — запускать задачу завершения работы перед переходом в режим ожидания (не изменено на завершение работы).",
"th_TH": "ผู้เขียน: GXNAS บังคับให้โหมดสแตนดบายปิดเมื่อมีการจ่ายไฟจาก UPS พารามิเตอร์: -f - เรียกใช้งานงานปิดก่อนปิด; -e - เรียกใช้งานงานปิดก่อนโหมดสแตนดบาย (ไม่เปลี่ยนเป็นปิด)",
"tr_TR": "Yazar: GXNAS. UPS'e güç verildiğinde bekleme modunu zorla kapanmaya değiştirin. Parametreler: -f - Kapatmadan önce kapatma görevini tetikle; -e - Bekleme modundan önce kapatma görevini tetikle (kapatma olarak değiştirilmemiştir).",
"uk_UA": "Автор: GXNAS. Примусово змінити режим очікування на вимкнення, коли ДБЖ подається живлення. Параметри: -f - запускати завдання завершення роботи перед завершенням роботи;",
"vi_VN": "Tác giả: GXNAS. Buộc chế độ chờ tắt khi cấp nguồn UPS. Tham số: -f - Kích hoạt tác vụ tắt máy trước khi tắt máy; -e - Kích hoạt tác vụ tắt máy trước khi chế độ chờ (không chuyển sang tắt máy).",
"zh_CN": "作者: GXNAS. 强制将 UPS 供电时的待机模式修改为关机. 參數: -f - 关机前触发关机任务; -e - 待机模式前发关机任务(不修改为关机).",
"zh_HK": "作者: GXNAS. 強制將 UPS 供電時的待機模式修改為關機. 參數: -f - 關機前觸發關機任務; -e - 待機模式前發關機任務(不修改為關機).",
"zh_TW": "作者: GXNAS. 強制將 UPS 供電時的待機模式修改為關機. 參數: -f - 關機前觸發關機任務; -e - 待機模式前發關機任務(不修改為關機)."
}
},
"virtiofs": {
"system": false,
"description": {
"en_US": "Auto mount virtio9p and virtiofs file systems (effective after rebooting the system after creating the storage space for the first time since it is mounted to the first storage space by default).",
"ar_SA": "تلقائيا تركيب أنظمة ملفات virtio9p و virtiofs (تدخل حيز التنفيذ بعد إعادة تشغيل النظام بعد إنشاء مساحة التخزين لأول مرة حيث يتم تركيبها في مساحة التخزين الأولى بشكل افتراضي).",
"de_DE": "Installiert virtio9p und virtiofs automatisch (da sie standardmäßig im ersten Speicherplatz gemountet werden, werden sie wirksam, nachdem das System zum ersten Mal installiert und der Speicherplatz erstellt und neu gestartet wurde).",
"es_ES": "Installs virtio9p and virtiofs automatically (effective after rebooting the system after creating the storage space for the first time since it is mounted to the first storage space by default).",
"fr_FR": "Monte automatiquement les systèmes de fichiers virtio9p et virtiofs (efficace après le redémarrage du système après la création de l'espace de stockage pour la première fois car il est monté sur le premier espace de stockage par défaut).",
"ja_JP": "virtio9pおよびvirtiofsファイルシステムを自動的にマウントしますデフォルトで最初のストレージスペースにマウントされるため、システムを再起動して最初にストレージスペースを作成した後に有効になります。",
"ko_KR": "virtio9p 및 virtiofs 파일 시스템을 자동으로 마운트합니다(기본적으로 첫 번째 스토리지 공간에 마운트되므로 시스템을 재부팅한 후 처음으로 스토리지 공간을 만든 후에 적용됨).",
"ru_RU": "Автоматически монтирует файловые системы virtio9p и virtiofs (вступает в силу после перезагрузки системы после создания хранилища в первый раз, так как по умолчанию оно монтируется в первое хранилище).",
"th_TH": "ติดตั้งระบบไฟล์ virtio9p และ virtiofs โดยอัตโนมัติ (มีผลหลังจากรีบูตระบบหลังจากสร้างพื้นที่จัดเก็บข้อมูลเป็นครั้งแรกเนื่องจากจะถูกเมานต์ไปยังพื้นที่จัดเก็บข้อมูลแรกโดยค่าเริ่มต้น)",
"tr_TR": "virtio9p ve virtiofs dosya sistemlerini otomatik olarak bağlar (varsayılan olarak ilk depolama alanına bağlandığından, depolama alanı ilk kez oluşturulduktan sonra sistemi yeniden başlattıktan sonra geçerlidir).",
"uk_UA": "Автоматично монтує файлові системи virtio9p та virtiofs (вступає в силу після перезавантаження системи після створення сховища у перший раз, оскільки за замовчуванням воно монтується у перший сховище).",
"vi_VN": "Tự động gắn hệ thống tệp virtio9p và virtiofs (có hiệu lực sau khi khởi động lại hệ thống sau khi tạo không gian lưu trữ lần đầu tiên vì nó được gắn vào không gian lưu trữ đầu tiên theo mặc định).",
"zh_CN": "自动挂载 virtio9p 和 virtiofs 文件系统(由于默认挂载到第一个存储空间,所以首次安装系统创建存储空间后重启生效).",
"zh_HK": "自動掛載 virtio9p 和 virtiofs 文件系統(由於默認掛載到第一個存儲空間,所以首次安裝系統創建存儲空間後重启生效).",
"zh_TW": "自動掛載 virtio9p 和 virtiofs 檔案系統(由於預設掛載到第一個儲存空間,所以首次安裝系統建立儲存空間後重新啟動生效)."
}
},
"vmtools": {
"system": false,
"description": {
"en_US": "Automatically install qemu-ga or open-vm-tools according to the environment. (Physical machines are not enabled by default, no need to cancel)",
"ar_SA": "تثبيت qemu-ga أو open-vm-tools تلقائيًا وفقًا للبيئة. (لا يتم تمكين الأجهزة المادية بشكل افتراضي، ولا حاجة للإلغاء)",
"de_DE": "Installieren Sie qemu-ga oder open-vm-tools automatisch entsprechend der Umgebung. (Physische Maschinen sind standardmäßig nicht aktiviert, keine Notwendigkeit zum Abbrechen)",
"es_ES": "Instalar qemu-ga o open-vm-tools automáticamente según la entorno. (Las máquinas físicas no están activadas de forma predeterminada, no es necesario cancelar)",
"fr_FR": "Installer automatiquement qemu-ga ou open-vm-tools en fonction de l'environnement. (Les machines physiques ne sont pas activées par défaut, pas besoin d'annuler)",
"ja_JP": "環境に応じて qemu-ga または open-vm-tools を自動的にインストールします。 (物理マシンはデフォルトで有効になっていないため、キャンセルする必要はありません)",
"ko_KR": "환경에 따라 qemu-ga 또는 open-vm-tools를 자동으로 설치합니다. (물리적 머신은 기본적으로 활성화되지 않으므로 취소할 필요가 없습니다)",
"ru_RU": "Автоматическая установка qemu-ga или open-vm-tools в зависимости от окружения. (Физические машины по умолчанию не включены, отменять не нужно)",
"th_TH": "ติดตั้ง qemu-ga หรือ open-vm-tools โดยอัตโนมัติตามสภาพแวดล้อม (เครื่องจริงจะไม่เปิดใช้งานตามค่าเริ่มต้น ไม่จำเป็นต้องยกเลิก)",
"tr_TR": "Ortamına göre qemu-ga veya open-vm-tools'u otomatik olarak yükleyin. (Fiziksel makineler varsayılan olarak etkinleştirilmez, iptal etmeye gerek yok)",
"uk_UA": "Автоматична установка qemu-ga або open-vm-tools відповідно до середовища. (Фізичні машини за замовчуванням не активовані, скасовувати не потрібно)",
"vi_VN": " Tự động cài đặt qemu-ga hoặc open-vm-tools theo môi trường. (Máy vật lý không được kích hoạt theo mặc định, không cần hủy bỏ)",
"zh_CN": "根据环境自动安装 qemu-ga 或者 open-vm-tools. (物理机默认不会启用, 不需要取消)",
"zh_HK": "根据环境自动安装 qemu-ga 或者 open-vm-tools. (物理机默认不会启用, 不需要取消)",
"zh_TW": "根據環境自動安裝 qemu-ga 或者 open-vm-tools. (物理機默認不會啟用, 不需要取消)"
}
},
"wireless": {
"system": false,
"description": {
"en_US": "Connect WiFi. Please modify 'IFNAME' 'SSID' 'PASSWD' to the required password in the DSM scheduled task and execute it.",
"ar_SA": "قم بتوصيل WiFi. يرجى تعديل 'IFNAME' 'SSID' 'PASSWD' إلى كلمة المرور المطلوبة في مهمة DSM المجدولة وتنفيذها.",
"de_DE": "Verbinden Sie WiFi. Bitte ändern Sie 'IFNAME' 'SSID' 'PASSWD' auf das erforderliche Passwort in der DSM geplanten Aufgabe und führen Sie es aus.",
"es_ES": "Conecte WiFi. Modifique 'IFNAME' 'SSID' 'PASSWD' a la contraseña requerida en la tarea programada DSM y ejecútela.",
"fr_FR": "Connectez-vous au WiFi. Veuillez modifier 'IFNAME' 'SSID' 'PASSWD' au mot de passe requis dans la tâche planifiée DSM et exécutez-la.",
"ja_JP": "WiFiに接続してください.DSMの予約タスクで必要なパスワードに 'IFNAME' 'SSID' 'PASSWD' を変更して実行してください.",
"ko_KR": "WiFi에 연결하십시오. DSM 예약 작업에서 필요한 암호로 'IFNAME' 'SSID' 'PASSWD'를 수정하고 실행하십시오.",
"ru_RU": "Подключитесь к WiFi. Пожалуйста, измените 'IFNAME' 'SSID' 'PASSWD' на требуемый пароль в запланированной задаче DSM и выполните ее.",
"th_TH": "เชื่อมต่อ WiFi โปรดแก้ไข 'IFNAME' 'SSID' 'PASSWD' เป็นรหัสผ่านที่ต้องการในงานที่ตั้งเวลา DSM และเริ่มการทำงาน",
"tr_TR": "WiFi'ye bağlanın. Lütfen DSM planlanmış görevinde 'IFNAME' 'SSID' 'PASSWD' 'yi gerekli parola için değiştirin ve çalıştırın.",
"uk_UA": "Підключіться до WiFi. Будь ласка, змініть 'IFNAME' 'SSID' 'PASSWD' на потрібний пароль у запланованому завданні DSM та виконайте його.",
"vi_VN": "Kết nối WiFi. Vui lòng sửa đổi 'IFNAME' 'SSID' 'PASSWD' thành mật khẩu yêu cầu trong tác vụ được lên lịch DSM và thực hiện nó.",
"zh_CN": "连接 WiFi. 请在 DSM 计划任务中将 'IFNAME' 'SSID' 'PASSWD' 修改为所需密码并执行它.",
"zh_HK": "連接 WiFi. 請在 DSM 計劃任務中將 'IFNAME' 'SSID' 'PASSWD' 修改為所需密碼並執行它.",
"zh_TW": "連接 WiFi. 請在 DSM 計劃任務中將 'IFNAME' 'SSID' 'PASSWD' 修改為所需密碼並執行它."
}
},
"wol": {
"system": true,
"description": {
"en_US": "Force enable Wake-on-lan for network devices.",
"ar_SA": "قم بتمكين Wake-on-lan بقوة لأجهزة الشبكة.",
"de_DE": "Erzwingen Sie Wake-on-lan für Netzwerkgeräte.",
"es_ES": "Forzar el Wake-on-lan para dispositivos de red.",
"fr_FR": "Forcer l'activation de Wake-on-lan pour les périphériques réseau.",
"ja_JP": "ネットワークデバイスの Wake-on-lan を強制的に有効にします.",
"ko_KR": "네트워크 장치의 Wake-on-lan을 강제로 활성화합니다.",
"ru_RU": "Принудительное включение Wake-on-lan для сетевых устройств.",
"th_TH": "บังคับให้ Wake-on-lan ใช้งานสำหรับอุปกรณ์เครือข่าย",
"tr_TR": "Ağ cihazları için Wake-on-lan'ı zorla etkinleştirin.",
"uk_UA": "Примусове включення Wake-on-lan для мережевих пристроїв.",
"vi_VN": "Có;puxáy awake-on-lan cho thiết bị mạng.",
"zh_CN": "强制启用网络设备的 Wake-on-lan.",
"zh_HK": "強制啟用網絡設備的 Wake-on-lan.",
"zh_TW": "強制啟用網路設備的 Wake-on-lan."
}
}
}

BIN
docs/addons.xlsx Normal file

Binary file not shown.

76
docs/changelogs.html Normal file
View File

@ -0,0 +1,76 @@
<!DOCTYPE html>
<html lang="zh-Hans-CN" data-color-mode="auto" data-light-theme="light" data-dark-theme="dark"
data-a11y-animated-images="system">
<head>
<meta charset="utf-8" />
<link rel="dns-prefetch" href="https://github.githubassets.com" />
<link rel="dns-prefetch" href="https://avatars.githubusercontent.com" />
<link rel="dns-prefetch" href="https://github-cloud.s3.amazonaws.com" />
<link rel="dns-prefetch" href="https://user-images.githubusercontent.com/" />
<link rel="preconnect" href="https://github.githubassets.com" crossorigin />
<link rel="preconnect" href="https://avatars.githubusercontent.com" />
<link crossorigin="anonymous" media="all" rel="stylesheet"
href="https://github.githubassets.com/assets/light-0eace2597ca3.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet"
href="https://github.githubassets.com/assets/dark-a167e256da9c.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet"
href="https://github.githubassets.com/assets/primer-711f412bb361.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet"
href="https://github.githubassets.com/assets/global-78704364aaba.css" />
<style>
select,
.input-style {
width: 100%;
}
.textarea-style {
width: 100%;
}
.loading-message {
text-align: center;
}
</style>
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
<script>
async function fetchChangelog() {
let page = 1;
const changelogContainer = document.getElementById('changelog');
const loadingMessage = document.createElement('p');
loadingMessage.textContent = 'Loading...';
loadingMessage.className = 'loading-message';
changelogContainer.appendChild(loadingMessage);
while (true) {
const response = await fetch(`https://api.github.com/repos/RROrg/rr/releases?page=${page}&per_page=100`);
const releases = await response.json();
if ((!response.ok) || (releases.length === 0)) {
const errorMessage = document.createElement('p');
errorMessage.textContent = releases.message;
errorMessage.className = 'error-message';
changelogContainer.appendChild(errorMessage);
break;
}
releases.forEach(release => {
const releaseElement = document.createElement('div');
releaseElement.innerHTML = `<h2><a href="${release.html_url}" target="_blank">${release.name}</a></h2>${marked.parse(release.body)}`;
changelogContainer.appendChild(releaseElement);
});
page++;
}
changelogContainer.removeChild(loadingMessage);
}
document.addEventListener('DOMContentLoaded', fetchChangelog);
</script>
</head>
<body>
<div id="changelog"></div>
</body>
</html>

View File

@ -1,6 +1,6 @@
<!DOCTYPE html>
<html lang="zh-Hans-CN">
<head>
<script language="javascript"> location.replace("./disks.html")</script>
<script language="javascript"> location.replace("./issues.html")</script>
</head>
</html>

522
docs/issues.html Normal file
View File

@ -0,0 +1,522 @@
<!DOCTYPE html>
<html lang="zh-Hans-CN" data-color-mode="auto" data-light-theme="light" data-dark-theme="dark"
data-a11y-animated-images="system">
<head>
<meta charset="utf-8" />
<link rel="dns-prefetch" href="https://github.githubassets.com" />
<link rel="dns-prefetch" href="https://avatars.githubusercontent.com" />
<link rel="dns-prefetch" href="https://github-cloud.s3.amazonaws.com" />
<link rel="dns-prefetch" href="https://user-images.githubusercontent.com/" />
<link rel="preconnect" href="https://github.githubassets.com" crossorigin />
<link rel="preconnect" href="https://avatars.githubusercontent.com" />
<link crossorigin="anonymous" media="all" rel="stylesheet"
href="https://github.githubassets.com/assets/light-0eace2597ca3.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet"
href="https://github.githubassets.com/assets/dark-a167e256da9c.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet"
href="https://github.githubassets.com/assets/primer-711f412bb361.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet"
href="https://github.githubassets.com/assets/global-78704364aaba.css" />
<style>
select,
.input-style {
width: 100%;
}
.textarea-style {
width: 100%;
}
#logo {
text-align: center;
margin: 20px auto !important;
}
#labels {
text-align: center;
margin: 20px auto !important;
height: auto !important;
}
#products {
text-align: center;
margin: 20px auto !important;
height: auto !important;
}
</style>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script src="https://polyfill.io/v3/polyfill.min.js"></script>
<!-- <script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script> -->
<script type="application/javascript">
var repo = "RROrg/rr"
var debug = getUrlParam("debug");
var _models = {};
var _pats = {};
var _addons = {};
var _modules = {};
function getUrlParam(paraName) {
var url = document.location.toString();
var arrObj = url.split("?");
if (arrObj.length > 1) {
var arrPara = arrObj[1].split("&");
var arr;
for (var i = 0; i < arrPara.length; i++) {
arr = arrPara[i].split("=");
if (arr != null && arr[0] == paraName) {
return arr[1];
}
}
}
return "";
}
function httpGetAsync(theUrl, callback) {
let xmlHttpReq = new XMLHttpRequest();
xmlHttpReq.onreadystatechange = function () {
if (xmlHttpReq.readyState == 4 && xmlHttpReq.status == 200)
callback(xmlHttpReq.responseText);
};
xmlHttpReq.open("GET", theUrl, true); // true for asynchronous
xmlHttpReq.send(null);
}
window.onload = function () {
init();
}
function init() {
httpGetAsync("https://raw.githubusercontent.com/RROrg/rr/main/docs/models.json", function (result) {
_models = JSON.parse(result);
httpGetAsync("https://raw.githubusercontent.com/RROrg/rr/main/docs/pats.json", function (result) {
_pats = JSON.parse(result);
httpGetAsync("https://raw.githubusercontent.com/RROrg/rr/main/docs/addons.json", function (result) {
_addons = JSON.parse(result);
httpGetAsync("https://raw.githubusercontent.com/RROrg/rr/main/docs/modules.json", function (result) {
_modules = JSON.parse(result);
$("#model").on("change", changeModel);
$("#version").on("change", changeVersion);
$("#language").on("change", changeVersion);
$("#kernel").on("change", chanageKernel);
$('#addons').val("acpid,mountloader,powersched,reboottoloader,trivial,vmtools");
if (debug) {
$('#sn_item').show();
$('#macs_item').show();
$('#tips_item').show();
} else {
$('#sn_item').hide();
$('#macs_item').hide();
$('#tips_item').hide();
}
setModels();
});
});
});
});
}
function setModels() {
var models = [];
for (var P in _models) {
models = models.concat(_models[P]["models"]);
}
$("#model")[0].options.length = 0;
for (var i = 0; i < models.length; i++) {
var model = models[i];
$("#model").append(`<option value="${model}">${model}</option>`);
}
changeModel();
}
function changeModel() {
model = $("#model").val();
var versions = [];
if (model in _pats) {
versions = Object.keys(_pats[model]);
versions.sort((a, b) => b.localeCompare(a));
}
$("#version")[0].options.length = 0;
for (var i = 0; i < versions.length; i++) {
var version = versions[i];
$("#version").append(`<option value="${version}">${version}</option>`);
}
changeproductsimage();
changeVersion();
}
function changeproductsimage() {
//var model = $("#model").val().replace("#","").replace("+","plus");
//$('#products').html(`<img src="https://www.synology.cn/img/products/detail/${model}/heading.png" width="20%">`);
var model = $("#model").val().replace("#", "").replace("+", "%2B");
$('#products').html(`<img src="https://www.synology.com/api/products/getPhoto?product=${model}&type=img_s&sort=0" width="20%">`);
}
function changeVersion() {
createAddonsBtn();
createModulesBtn();
chanageKernel();
}
function createAddonsBtn() {
var language = $("#language").val();
var extstr = $('#addons').val().split(",");
var idx = 1;
var html = `<div class="form-group-body" id="addons_btns">`;
for (var ext in _addons) {
var dispar = "";
if (_addons[ext]["system"] == true) {
dispar = "disabled";
}
var par = "";
if (extstr.includes(ext)) {
par = "btn-danger";
}
html += `<button type="button" class="btn btn-primary btn-sm mt-2 ${par}" id="btn_${ext}" ${par} ${dispar} onclick="return onclickextAddon('${ext}')" autofocus="" title="${_addons[ext]["description"][language]}">${ext}</button>&nbsp;`;
//if (idx++ % 10 == 0) html += "<br />";
}
html += `</div>`;
$('#addons_btns').html(html);
}
function createModulesBtn() {
var model = $("#model").val();
var version = $("#version").val().split(".").slice(0, 2).join(".");
var platform = "";
for (var P in _models) {
if (_models[P]["models"].includes(model)) {
platform = P + "-" + _models[P]["productvers"][version];
break;
}
}
var extstr = [];
var idx = 1;
var html = `<div class="form-group-body" id="modules_btns">`;
for (var ext in _modules[platform]) {
extstr.push(ext);
var par = "btn-danger";
html += `<button type="button" class="btn btn-primary btn-sm mt-2 ${par}" id="btn_${ext}" ${par} onclick="return onclickextModule('${ext}')" autofocus="" title="${_modules[platform][ext]["description"]}">${ext}</button>&nbsp;`;
//if (idx++ % 10 == 0) html += "<br />";
}
html += `</div>`;
$('#modules_btns').html(html);
if (extstr.length > 0) {
$('#modules').val(extstr.join(","));
}
}
function chanageKernel() {
var model = $("#model").val();
var version = $("#version").val().split(".").slice(0, 2).join(".");
var kernel = $("#kernel").val();
if (model == "SA6400" && version == "7.2") {
$("#kernel_item").show();
if (kernel == "custom") {
$('#modules_item').hide();
} else {
$('#modules_item').show();
}
} else {
$('#modules_item').show();
$("#kernel_item").hide();
}
}
function onclickextAddon(ext) {
var btnobj = $("#btn_" + ext);
var extstr = $('#addons').val().split(",");
if (btnobj.hasClass("btn-danger")) {
extstr.map((val, i) => {
if (val.split(':')[0] === ext) {
extstr.splice(i, 1);
}
});
btnobj.removeClass("btn-danger");
} else {
btnobj.addClass("btn-danger");
var param = window.prompt("Please enter parameters (optional):", "");
if (param !== null && param.trim() !== "") {
extstr.push(ext + ":" + param.trim());
} else {
extstr.push(ext);
}
}
extstr.map((val, i) => {
if (val === "") {
extstr.splice(i, 1);
}
});
$('#addons').val(extstr.join(","));
}
function onclickextModule(ext) {
var btnobj = $("#btn_" + ext);
var extstr = $('#modules').val().split(",");
if (btnobj.hasClass("btn-danger")) {
extstr.map((val, i) => {
if (val === ext) {
extstr.splice(i, 1);
}
});
btnobj.removeClass("btn-danger");
} else {
btnobj.addClass("btn-danger");
extstr.push(ext);
}
extstr.map((val, i) => {
if (val === "") {
extstr.splice(i, 1);
}
});
$('#modules').val(extstr.join(","));
}
function createIssues() {
var form = document.getElementById("inputs");
let formData = new FormData(form);
var title = "custom";
var body = {};
var _parameters = ["title", "format", "size", "template", "language", "model", "version", "kernel", "addons", "modules"];
if (debug) {
_parameters.push("sn", "macs", "tips");
}
for (var key in _parameters) {
var name = _parameters[key];
if ($("#" + name).is(":hidden")) { continue; }
if (name == "title") {
if ($("#" + name).val()) {
title += " " + $("#" + name).val();
} else {
title += " " + new Date().toISOString().substr(0, 10);
}
continue;
}
if ($("#" + name).val()) {
body[name] = $("#" + name).val();
}
}
body = JSON.stringify(body).replace(/\+/g, "%2b");
window.location.href = `https://github.com/${repo}/issues/new?title=${title}&body=${body}`;
}
</script>
<title>RR-CUSTOM</title>
<link rel="icon" href="https://avatars.githubusercontent.com/u/151816514?s=200&v=4">
</head>
<body class="logged-in env-production page-responsive" style="word-wrap: break-word">
<div class="application-main left-0 text-left p-3 mx-auto container-xl px-3 px-md-4 px-lg-5 mt-4">
<pre id="logo" style="
display: block;
font-family: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas,
Liberation Mono, monospace !important;
font-size: 12px !important;
line-height: 12px !important;
margin: 15px 10px;
color: red;
">
██████╗ ██████╗ ██████╗██╗ ██╗███████╗████████╗ ██████╗ ███╗ ███╗
██╔══██╗██╔══██╗ ██╔════╝██║ ██║██╔════╝╚══██╔══╝██╔═══██╗████╗ ████║
██████╔╝██████╔╝█████╗██║ ██║ ██║███████╗ ██║ ██║ ██║██╔████╔██║
██╔══██╗██╔══██╗╚════╝██║ ██║ ██║╚════██║ ██║ ██║ ██║██║╚██╔╝██║
██║ ██║██║ ██║ ╚██████╗╚██████╔╝███████║ ██║ ╚██████╔╝██║ ╚═╝ ██║
╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚══════╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝
</pre>
<div class="shields" id="labels">
<a id="titleA" href="https://github.com/RROrg/rr">
<img alt="GitHub Release"
src="https://img.shields.io/github/v/release/rrorg/rr?include_prereleases&style=flat-square&label=current">
</a>
<a id="titleA" href="https://github.com/RROrg/rr">
<img alt="GitHub Issues"
src="https://img.shields.io/github/issues-closed-raw/rrorg/rr/custom?style=flat-square&label=custom">
</a>
<a id="titleB" href="./changelogs.html">
<img alt="GitHub Release" src="https://img.shields.io/badge/Changelogs-8A2BE2&style=flat">
</a>
</div>
<div class="image" id="products">
<img src="https://www.synology.cn/img/products/detail/SA6400/heading.png" width="20%">
</div>
<div class="form-group mt-1 mb-2" id="title_item">
<div class="form-group-header">
<label class="color-fg-default text-mono f6">Title: (Please do not delete the "custom " in the title of
the issue creation page.)</label>
</div>
<div class="form-group-body">
<input class="form-control input-contrast input-sm" type="text" id="title" name="inputs[title]" value="" />
</div>
</div>
<div class="form-group mt-1 mb-2" id="format_item">
<div class="form-group-header">
<label class="color-fg-default text-mono f6">Format:</label>
</div>
<div class="form-group-body">
<select class="form-select form-control select-sm input-contrast" id="format" name="inputs[format]" value="">
<option selected="selected" value="img">img</option>
<option value="ova">ova</option>
<option value="vmx">vmx</option>
<option value="vmdk">vmdk</option>
<option value="flat">flat</option>
<option value="vhd">vhd</option>
<option value="vhdx">vhdx</option>
</select>
</div>
</div>
<div class="form-group mt-1 mb-2" id="size_item">
<div class="form-group-header">
<label class="color-fg-default text-mono f6">Size:</label>
</div>
<div class="form-group-body">
<select class="form-select form-control select-sm input-contrast" id="size" name="inputs[size]" value="">
<option value="2GB">2GB</option>
<option selected="selected" value="4GB">4GB</option>
<option value="8GB">8GB</option>
</select>
</div>
</div>
<div class="form-group mt-1 mb-2" id="template_item">
<div class="form-group-header">
<label class="color-fg-default text-mono f6">Template:</label>
</div>
<div class="form-group-body">
<select class="form-select form-control select-sm input-contrast" id="template" name="inputs[template]"
value="">
<option value="true">true</option>
<option selected="selected" value="false">false</option>
</select>
</div>
</div>
<div class="form-group mt-1 mb-2" id="language_item">
<div class="form-group-header">
<label class="color-fg-default text-mono f6">Language:</label>
</div>
<div class="form-group-body">
<select class="form-select form-control select-sm input-contrast" id="language" name="inputs[language]"
value="">
<option value="ar_SA">ar_SA</option>
<option value="de_DE">de_DE</option>
<option selected="selected" value="en_US">en_US</option>
<option value="es_ES">es_ES</option>
<option value="fr_FR">fr_FR</option>
<option value="ja_JP">ja_JP</option>
<option value="ko_KR">ko_KR</option>
<option value="ru_RU">ru_RU</option>
<option value="th_TH">th_TH</option>
<option value="tr_TR">tr_TR</option>
<option value="uk_UA">uk_UA</option>
<option value="vi_VN">vi_VN</option>
<option value="zh_CN">zh_CN</option>
<option value="zh_HK">zh_HK</option>
<option value="zh_TW">zh_TW</option>
</select>
</div>
</div>
<div class="form-group mt-1 mb-2" id="sn_item">
<div class="form-group-header">
<label class="color-fg-default text-mono f6">SN:</label>
</div>
<div class="form-group-body">
<input class="form-control input-contrast input-sm" type="text" id="sn" name="inputs[sn]" value=""></input>
</div>
</div>
<div class="form-group mt-1 mb-2" id="macs_item">
<div class="form-group-header">
<label class="color-fg-default text-mono f6">MACs: (Please separate multiple with ','.)</label>
</div>
<div class="form-group-body">
<input class="form-control input-contrast input-sm" type="text" id="macs" name="inputs[macs]" value=""></input>
</div>
</div>
<div class="form-group mt-1 mb-2" id="tips_item">
<div class="form-group-header">
<label class="color-fg-default text-mono f6">Tips:</label>
</div>
<div class="form-group-body">
<input class="form-control input-contrast input-sm" type="text" id="tips" name="inputs[tips]" value=""></input>
</div>
</div>
<div class="form-group mt-1 mb-2" id="model_item">
<div class="form-group-header">
<label class="color-fg-default text-mono f6">Model:</label>
</div>
<div class="form-group-body">
<select class="form-select form-control select-sm input-contrast" id="model" name="inputs[model]" value="">
<option selected="selected" value="SA6400">SA6400</option>
</select>
</div>
</div>
<div class="form-group mt-1 mb-2" id="version_item">
<div class="form-group-header">
<label class="color-fg-default text-mono f6">Version:</label>
<a href="https://github.com/RROrg/rr/raw/main/docs/pats.xlsx"> Details</a>
</div>
<div class="form-group-body">
<select class="form-select form-control select-sm input-contrast" id="version" name="inputs[version]" value="">
<option selected="selected" value="7.2">7.2</option>
</select>
</div>
</div>
<div class="form-group mt-1 mb-2" id="kernel_item">
<div class="form-group-header">
<label class="color-fg-default text-mono f6">Kernel: (only "custom" supports Hyper-V, Xen.)</label>
</div>
<div class="form-group-body">
<select class="form-select form-control select-sm input-contrast" id="kernel" name="inputs[kernel]" value="">
<option selected="selected" value="official">official</option>
<option value="custom">custom</option>
</select>
</div>
</div>
<div class="form-group mt-1 mb-2" id="addons_item">
<div class="form-group-header">
<label class="color-fg-default text-mono f6">Addons:</label>
<a href="https://github.com/RROrg/rr/raw/main/docs/addons.xlsx"> Details</a>
</div>
<div class="form-group-body">
<textarea class="textarea-style input-contrast input-sm" type="text" id="addons" name="inputs[addons]"
disabled></textarea>
<div class="form-group-body" id="addons_btns">
</div>
</div>
</div>
<div class="form-group mt-1 mb-2" id="modules_item">
<div class="form-group-header">
<label class="color-fg-default text-mono f6">Modules:</label>
<a href="https://github.com/RROrg/rr/raw/main/docs/modules.xlsx"> Details</a>
</div>
<div class="form-group-body">
<textarea class="textarea-style input-contrast input-sm" type="text" id="modules" name="inputs[modules]"
disabled></textarea>
<div class="form-group-body" id="modules_btns">
</div>
</div>
</div>
<div data-replace-remote-form-target="" class="workflow-dispatch">
<form id="inputs">
<button type="button" class="btn State--merged" onclick="return createIssues()" autofocus="">
Create
</button>
</form>
</div>
</div>
<footer class="footer width-full container-xl mt-3 text-center color-fg-muted">
<a aria-label="RROrg" title="GitHub" class="footer-octicon mr-2" href="https://github.com/RROrg">
<img class="avatar rounded-2 avatar-user" src="https://avatars.githubusercontent.com/u/151816514?s=88&amp;v=4"
width="40" height="40" alt="@RROrg" />
</a>
<a aria-label="RROrg" title="GitHub" class="footer-octicon mr-2" href="https://github.com/wjz304">
<img class="avatar rounded-2 avatar-user" src="https://avatars.githubusercontent.com/u/5615843?s=88&amp;v=4"
width="40" height="40" alt="@wjz304" />
</a>
<span> © 2022 RROrg, Ing, Inc. </span>
</footer>
</body>
</html>

216
docs/models.json Normal file
View File

@ -0,0 +1,216 @@
{
"apollolake": {
"productvers": {
"7.0": "4.4.180",
"7.1": "4.4.180",
"7.2": "4.4.302",
"7.3": "4.4.302"
},
"models": [
"DS1019+",
"DS620slim",
"DS218+",
"DS418play",
"DS718+",
"DS918+"
]
},
"broadwell": {
"productvers": {
"7.0": "4.4.180",
"7.1": "4.4.180",
"7.2": "4.4.302",
"7.3": "4.4.302"
},
"models": [
"FS3400",
"RS3618xs",
"DS3617xs",
"DS3617xsII",
"FS2017",
"RS18017xs+",
"RS3617RPxs",
"RS3617xs+",
"RS4017xs+"
]
},
"broadwellnk": {
"productvers": {
"7.0": "4.4.180",
"7.1": "4.4.180",
"7.2": "4.4.302",
"7.3": "4.4.302"
},
"models": [
"DS1621xs+",
"DS3622xs+",
"FS3600",
"RS1619xs+",
"RS3621RPxs",
"RS3621xs+",
"RS4021xs+",
"SA3400",
"SA3600",
"DS3018xs",
"FS1018"
]
},
"broadwellnkv2": {
"productvers": {
"7.0": "4.4.180",
"7.1": "4.4.180",
"7.2": "4.4.302",
"7.3": "4.4.302"
},
"models": [
"FS3410",
"SA3410",
"SA3610"
]
},
"broadwellntbap": {
"productvers": {
"7.0": "4.4.180",
"7.1": "4.4.180",
"7.2": "4.4.302",
"7.3": "4.4.302"
},
"models": [
"SA3200D",
"SA3400D"
]
},
"denverton": {
"productvers": {
"7.0": "4.4.180",
"7.1": "4.4.180",
"7.2": "4.4.302",
"7.3": "4.4.302"
},
"models": [
"DS1819+",
"DS2419+",
"DS2419+II",
"DVA3219",
"DVA3221",
"RS820+",
"RS820RP+",
"DS1618+",
"RS2418+",
"RS2418RP+",
"RS2818RP+"
]
},
"geminilake": {
"productvers": {
"7.0": "4.4.180",
"7.1": "4.4.180",
"7.2": "4.4.302",
"7.3": "4.4.302"
},
"models": [
"DS1520+",
"DS220+",
"DS224+",
"DS420+",
"DS423+",
"DS720+",
"DS920+",
"DVA1622"
]
},
"purley": {
"productvers": {
"7.0": "4.4.180",
"7.1": "4.4.180",
"7.2": "4.4.302",
"7.3": "4.4.302"
},
"models": [
"HD6500",
"FS6400"
]
},
"r1000": {
"productvers": {
"7.0": "4.4.180",
"7.1": "4.4.180",
"7.2": "4.4.302",
"7.3": "4.4.302"
},
"models": [
"DS1522+",
"DS723+",
"DS923+",
"RS422+"
]
},
"v1000": {
"productvers": {
"7.0": "4.4.180",
"7.1": "4.4.180",
"7.2": "4.4.302",
"7.3": "4.4.302"
},
"models": [
"DS1621+",
"DS1821+",
"DS1823xs+",
"DS2422+",
"FS2500",
"RS1221+",
"RS1221RP+",
"RS2421+",
"RS2421RP+",
"RS2423+",
"RS2423RP+",
"RS2821RP+",
"RS822+",
"RS822RP+"
]
},
"epyc7002": {
"productvers": {
"7.1": "7.1-5.10.55",
"7.2": "7.2-5.10.55",
"7.3": "7.3-5.10.55"
},
"models": [
"SA6400"
]
},
"geminilakenk": {
"productvers": {
"7.1": "7.1-5.10.55",
"7.2": "7.2-5.10.55",
"7.3": "7.3-5.10.55"
},
"models": [
"DS225+",
"DS425+"
]
},
"r1000nk": {
"productvers": {
"7.1": "7.1-5.10.55",
"7.2": "7.2-5.10.55",
"7.3": "7.3-5.10.55"
},
"models": [
"DS725+"
]
},
"v1000nk": {
"productvers": {
"7.1": "7.1-5.10.55",
"7.2": "7.2-5.10.55",
"7.3": "7.3-5.10.55"
},
"models": [
"DS1525+",
"DS1825+",
"DS925+",
"RS2825RP+"
]
}
}

BIN
docs/models.xlsx Normal file

Binary file not shown.

41425
docs/modules.json Normal file

File diff suppressed because it is too large Load Diff

BIN
docs/modules.xlsx Normal file

Binary file not shown.

2666
docs/pats.json Normal file

File diff suppressed because it is too large Load Diff

BIN
docs/pats.xlsx Normal file

Binary file not shown.

Binary file not shown.

View File

@ -1,90 +1,124 @@
#!/usr/bin/env bash
#
# Copyright (C) 2022 Ing <https://github.com/wjz304>
#
# This is free software, licensed under the MIT License.
# See /LICENSE for more information.
#
# shellcheck disable=SC2034
set -e
[ -z "${WORK_PATH}" -o ! -d "${WORK_PATH}/include" ] && WORK_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
. ${WORK_PATH}/include/functions.sh
[ -z "${WORK_PATH}" ] || [ ! -d "${WORK_PATH}/include" ] && WORK_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
. "${WORK_PATH}/include/functions.sh"
[ -z "${LOADER_DISK}" ] && die "$(TEXT "Loader is not init!")"
# Sanity check
loaderIsConfigured || die "$(TEXT "Loader is not configured!")"
# Check if machine has EFI
[ -d /sys/firmware/efi ] && EFI=1 || EFI=0
# Clear logs for dbgutils addons
rm -rf "${PART1_PATH}/logs" /sys/fs/pstore/* >/dev/null 2>&1 || true
# Check if machine has EFI
EFI=$([ -d /sys/firmware/efi ] && echo 1 || echo 0)
FBI=$(cat /sys/class/graphics/fb*/name 2>/dev/null | head -1)
BUS=$(getBus "${LOADER_DISK}")
# Print text centralized
clear
[ -z "${COLUMNS}" ] && COLUMNS=50
TITLE="$(printf "$(TEXT "Welcome to %s")" "${RR_TITLE}")"
printf "\033[1;44m%*s\n" ${COLUMNS} ""
printf "\033[1;44m%*s\033[A\n" ${COLUMNS} ""
printf "\033[1;32m%*s\033[0m\n" $(((${#TITLE} + ${COLUMNS}) / 2)) "${TITLE}"
printf "\033[1;44m%*s\033[0m\n" ${COLUMNS} ""
TITLE="BOOTING:"
[ ${EFI} -eq 1 ] && TITLE+=" [UEFI]" || TITLE+=" [BIOS]"
[ "${BUS}" = "usb" ] && TITLE+=" [${BUS^^} flashdisk]" || TITLE+=" [${BUS^^} DoM]"
printf "\033[1;33m%*s\033[0m\n" $(((${#TITLE} + ${COLUMNS}) / 2)) "${TITLE}"
COLUMNS=$(ttysize 2>/dev/null | awk '{print $1}')
COLUMNS=${COLUMNS:-80}
WTITLE="$(printf "$(TEXT "Welcome to %s")" "${RR_TITLE}${RR_RELEASE:+(${RR_RELEASE})}")"
DATE="$(date)"
printf "\033[1;44m%*s\n" "${COLUMNS}" ""
printf "\033[1;44m%*s\033[A\n" "${COLUMNS}" ""
printf "\033[1;31m%*s\033[0m\n" "$(((${#WTITLE} + ${COLUMNS}) / 2))" "${WTITLE}"
printf "\033[1;44m%*s\033[A\n" "${COLUMNS}" ""
printf "\033[1;32m%*s\033[0m\n" "${COLUMNS}" "${DATE}"
BTITLE="Boot Type:"
BTITLE+="$([ ${EFI} -eq 1 ] && echo " [UEFI]" || echo " [BIOS]")"
BTITLE+="$([ "${BUS}" = "usb" ] && echo " [${BUS^^} flashdisk]" || echo " [${BUS^^} DoM]")"
printf "\033[1;33m%*s\033[0m\n" $(((${#BTITLE} + ${COLUMNS}) / 2)) "${BTITLE}"
if [ -f "${PART1_PATH}/.upgraded" ]; then
MODEL="$(readConfigKey "model" "${USER_CONFIG_FILE}")"
PLATFORM="$(readConfigKey "platform" "${USER_CONFIG_FILE}")"
if [ -n "${MODEL}" ] && [ -n "${PLATFORM}" ]; then
printf "\033[1;43m%s\033[0m\n" "$(TEXT "Reconfigure after upgrade ...")"
PRODUCTVER="$(readConfigKey "productver" "${USER_CONFIG_FILE}")"
PATURL="$(readConfigKey "paturl" "${USER_CONFIG_FILE}")"
PATSUM="$(readConfigKey "patsum" "${USER_CONFIG_FILE}")"
./menu.sh reconfiguringM "${MODEL}" "${PLATFORM}" || {
echo -e "$(TEXT "Reconfiguration failed!")"
exit 1
}
if [ -n "${PRODUCTVER}" ] && [ -n "${PATURL}" ]; then
./menu.sh reconfiguringV "${PRODUCTVER}" "${PATURL}" "${PATSUM}" || {
echo -e "$(TEXT "Reconfiguration failed!")"
exit 1
}
fi
fi
rm -f "${PART1_PATH}/.upgraded"
fi
# Check if DSM zImage changed, patch it if necessary
ZIMAGE_HASH="$(readConfigKey "zimage-hash" "${USER_CONFIG_FILE}")"
if [ -f ${PART1_PATH}/.build -o "$(sha256sum "${ORI_ZIMAGE_FILE}" | awk '{print$1}')" != "${ZIMAGE_HASH}" ]; then
echo -e "\033[1;43m$(TEXT "DSM zImage changed")\033[0m"
${WORK_PATH}/zimage-patch.sh
if [ $? -ne 0 ]; then
echo -e "\033[1;43m$(TEXT "zImage not patched,\nPlease upgrade the bootloader version and try again.\nPatch error:\n")$(<"${LOG_FILE}")\033[0m"
if [ -f "${PART1_PATH}/.build" ] || [ "$(sha256sum "${ORI_ZIMAGE_FILE}" | awk '{print $1}')" != "${ZIMAGE_HASH}" ]; then
printf "\033[1;43m%s\033[0m\n" "$(TEXT "DSM zImage changed")"
${WORK_PATH}/zimage-patch.sh || {
printf "\033[1;43m%s\n%s\n%s:\n%s\033[0m\n" "$(TEXT "DSM zImage not patched")" "$(TEXT "Please upgrade the bootloader version and try again.")" "$(TEXT "Error")" "$(cat "${LOG_FILE}")"
exit 1
fi
}
fi
# Check if DSM ramdisk changed, patch it if necessary
RAMDISK_HASH="$(readConfigKey "ramdisk-hash" "${USER_CONFIG_FILE}")"
RAMDISK_HASH_CUR="$(sha256sum "${ORI_RDGZ_FILE}" | awk '{print $1}')"
if [ -f ${PART1_PATH}/.build -o "${RAMDISK_HASH_CUR}" != "${RAMDISK_HASH}" ]; then
echo -e "\033[1;43m$(TEXT "DSM Ramdisk changed")\033[0m"
${WORK_PATH}/ramdisk-patch.sh
if [ $? -ne 0 ]; then
echo -e "\033[1;43m$(TEXT "Ramdisk not patched,\nPlease upgrade the bootloader version and try again.\nPatch error:\n")$(<"${LOG_FILE}")\033[0m"
if [ -f "${PART1_PATH}/.build" ] || [ "$(sha256sum "${ORI_RDGZ_FILE}" | awk '{print $1}')" != "${RAMDISK_HASH}" ]; then
printf "\033[1;43m%s\033[0m\n" "$(TEXT "DSM ramdisk changed")"
${WORK_PATH}/ramdisk-patch.sh || {
printf "\033[1;43m%s\n%s\n%s:\n%s\033[0m\n" "$(TEXT "DSM ramdisk not patched")" "$(TEXT "Please upgrade the bootloader version and try again.")" "$(TEXT "Error")" "$(cat "${LOG_FILE}")"
exit 1
fi
# Update SHA256 hash
writeConfigKey "ramdisk-hash" "${RAMDISK_HASH_CUR}" "${USER_CONFIG_FILE}"
}
fi
[ -f ${PART1_PATH}/.build ] && rm -f ${PART1_PATH}/.build
[ -f "${PART1_PATH}/.build" ] && rm -f "${PART1_PATH}/.build"
# Load necessary variables
PLATFORM="$(readConfigKey "platform" "${USER_CONFIG_FILE}")"
MODEL="$(readConfigKey "model" "${USER_CONFIG_FILE}")"
MODELID="$(readConfigKey "modelid" "${USER_CONFIG_FILE}")"
PRODUCTVER="$(readConfigKey "productver" "${USER_CONFIG_FILE}")"
BUILDNUM="$(readConfigKey "buildnum" "${USER_CONFIG_FILE}")"
SMALLNUM="$(readConfigKey "smallnum" "${USER_CONFIG_FILE}")"
DT="$(readConfigKey "dt" "${USER_CONFIG_FILE}")"
KVER="$(readConfigKey "kver" "${USER_CONFIG_FILE}")"
KPRE="$(readConfigKey "kpre" "${USER_CONFIG_FILE}")"
KERNEL="$(readConfigKey "kernel" "${USER_CONFIG_FILE}")"
LKM="$(readConfigKey "lkm" "${USER_CONFIG_FILE}")"
DMI="$(dmesg | grep -i "DMI:" | sed 's/\[.*\] DMI: //i')"
CPU="$(echo $(cat /proc/cpuinfo | grep 'model name' | uniq | awk -F':' '{print $2}'))"
MEM="$(free -m | grep -i mem | awk '{print$2}') MB"
MEV="$(virt-what 2>/dev/null | head -1)"
DMI="$(dmesg 2>/dev/null | grep -i "DMI:" | head -1 | sed 's/\[.*\] DMI: //i')"
CPU="$(awk -F': ' '/model name/ {print $2}' /proc/cpuinfo | uniq)"
MEM="$(awk '/MemTotal:/ {printf "%.0f", $2 / 1024}' /proc/meminfo) MB"
echo -e "$(TEXT "Model:") \033[1;36m${MODEL}\033[0m"
echo -e "$(TEXT "Build:") \033[1;36m${PRODUCTVER}(${BUILDNUM}$([ ${SMALLNUM:-0} -ne 0 ] && echo "u${SMALLNUM}"))\033[0m"
echo -e "$(TEXT "LKM: ") \033[1;36m${LKM}\033[0m"
echo -e "$(TEXT "DMI: ") \033[1;36m${DMI}\033[0m"
echo -e "$(TEXT "CPU: ") \033[1;36m${CPU}\033[0m"
echo -e "$(TEXT "MEM: ") \033[1;36m${MEM}\033[0m"
printf "%s \033[1;36m%s(%s)\033[0m\n" "$(TEXT "Model: ")" "${MODEL}" "${PLATFORM}"
printf "%s \033[1;36m%s(%s%s)\033[0m\n" "$(TEXT "Version: ")" "${PRODUCTVER}" "${BUILDNUM}" "$([ ${SMALLNUM:-0} -ne 0 ] && echo "u${SMALLNUM}")"
printf "%s \033[1;36m%s\033[0m\n" "$(TEXT "Kernel: ")" "${KERNEL}"
printf "%s \033[1;36m%s\033[0m\n" "$(TEXT "LKM: ")" "${LKM}"
printf "%s \033[1;36m%s\033[0m\n" "$(TEXT "MEV: ")" "${MEV:-physical}"
printf "%s \033[1;36m%s\033[0m\n" "$(TEXT "DMI: ")" "${DMI}"
printf "%s \033[1;36m%s\033[0m\n" "$(TEXT "CPU: ")" "${CPU}"
printf "%s \033[1;36m%s\033[0m\n" "$(TEXT "MEM: ")" "${MEM}"
if [ ! -f "${WORK_PATH}/model-configs/${MODEL}.yml" ] || [ -z "$(readModelKey ${MODEL} "productvers.[${PRODUCTVER}]")" ]; then
echo -e "\033[1;33m*** $(printf "$(TEXT "The current version of bootloader does not support booting %s-%s, please upgrade and rebuild.")" "${MODEL}" "${PRODUCTVER}") ***\033[0m"
exit 1
if readConfigMap "addons" "${USER_CONFIG_FILE}" | grep -q nvmesystem; then
[ -z "$(ls /dev/nvme* | grep -vE "${LOADER_DISK}[0-9]?$" 2>/dev/null)" ] && printf "\033[1;33m*** %s ***\033[0m\n" "$(TEXT "Notice: Please insert at least one m.2 disk for system installation.")"
else
[ -z "$(ls /dev/sd* | grep -vE "${LOADER_DISK}[0-9]?$" 2>/dev/null)" ] && printf "\033[1;33m*** %s ***\033[0m\n" "$(TEXT "Notice: Please insert at least one sata disk for system installation.")"
fi
HASATA=0
for D in $(lsblk -dpno NAME); do
[ "${D}" = "${LOADER_DISK}" ] && continue
if [ "$(getBus "${D}")" = "sata" -o "$(getBus "${D}")" = "scsi" ]; then
HASATA=1
break
fi
done
[ ${HASATA} = "0" ] && echo -e "\033[1;33m*** $(TEXT "Please insert at least one sata/scsi disk for system installation, except for the bootloader disk.") ***\033[0m"
if checkBIOS_VT_d && [ "$(echo "${KVER:-4}" | cut -d'.' -f1)" -lt 5 ]; then
printf "\033[1;33m*** %s ***\033[0m\n" "$(TEXT "Notice: Please disable Intel(VT-d)/AMD(AMD-Vi) in BIOS/UEFI settings if you encounter a boot failure.")"
fi
VID="$(readConfigKey "vid" "${USER_CONFIG_FILE}")"
PID="$(readConfigKey "pid" "${USER_CONFIG_FILE}")"
@ -92,166 +126,362 @@ SN="$(readConfigKey "sn" "${USER_CONFIG_FILE}")"
MAC1="$(readConfigKey "mac1" "${USER_CONFIG_FILE}")"
MAC2="$(readConfigKey "mac2" "${USER_CONFIG_FILE}")"
KERNELPANIC="$(readConfigKey "kernelpanic" "${USER_CONFIG_FILE}")"
NETIFNUM=$(ls /sys/class/net/ | grep eth | wc -l); [ ${NETIFNUM} -lt 2 ] && NETIFNUM=2
HDDSORT="$(readConfigKey "hddsort" "${USER_CONFIG_FILE}")"
USBASINTERNAL="$(readConfigKey "usbasinternal" "${USER_CONFIG_FILE}")"
EMMCBOOT="$(readConfigKey "emmcboot" "${USER_CONFIG_FILE}")"
MODBLACKLIST="$(readConfigKey "modblacklist" "${USER_CONFIG_FILE}")"
declare -A CMDLINE
# Automatic values
CMDLINE['syno_hw_version']="${MODEL}"
[ -z "${VID}" ] && VID="0x46f4" # Sanity check
[ -z "${PID}" ] && PID="0x0001" # Sanity check
CMDLINE['vid']="${VID}"
CMDLINE['pid']="${PID}"
CMDLINE['syno_hw_version']="${MODELID:-${MODEL}}"
CMDLINE['vid']="${VID:-"0x46f4"}" # Sanity check
CMDLINE['pid']="${PID:-"0x0001"}" # Sanity check
if [ -z "${SN}" ]; then
SN="$(generateSerial "${MODEL}")"
writeConfigKey "sn" "${SN}" "${USER_CONFIG_FILE}"
fi
CMDLINE['sn']="${SN}"
[ -n "${MAC1}" ] && CMDLINE['mac1']="${MAC1}"
[ -n "${MAC2}" ] && CMDLINE['mac2']="${MAC2}"
CMDLINE['netif_num']="${NETIFNUM}"
if [ -z "${MAC1}" ]; then
if [ -n "${MAC2}" ]; then
MAC1=${MAC2}
MAC2=""
writeConfigKey "mac1" "${MAC1}" "${USER_CONFIG_FILE}"
writeConfigKey "mac2" "${MAC2}" "${USER_CONFIG_FILE}"
else
NETIF_NUM=2
MACS="$(generateMacAddress "${MODEL}" ${NETIF_NUM})"
for I in $(seq 1 ${NETIF_NUM}); do
eval MAC${I}="$(echo ${MACS} | cut -d' ' -f${I})"
writeConfigKey "mac${I}" "$(echo ${MACS} | cut -d' ' -f${I})" "${USER_CONFIG_FILE}"
done
fi
fi
[ -n "${MAC1}" ] && CMDLINE['mac1']="${MAC1}" && CMDLINE['netif_num']="1"
[ -n "${MAC2}" ] && CMDLINE['mac2']="${MAC2}" && CMDLINE['netif_num']="2"
CMDLINE['skip_vender_mac_interfaces']="$(seq -s, 0 $((${CMDLINE['netif_num']:-1} - 1)))"
ETHX="$(find /sys/class/net/ -mindepth 1 -maxdepth 1 ! -name lo -exec basename {} \; | sort)"
for N in ${ETHX}; do
MAC="$(cat "/sys/class/net/${N}/address" 2>/dev/null)" || MAC="00:00:00:00:00:00"
BUS="$(ethtool -i "${N}" 2>/dev/null | grep "bus-info" | cut -d' ' -f2)" || BUS="0000:00:00.0"
if [ ! "${MAC}" = "00:00:00:00:00:00" ] && [ ! "${BUS}" = "0000:00:00.0" ]; then
CMDLINE["R${BUS}"]="${MAC}"
fi
done
# set fixed cmdline
if grep -q "force_junior" /proc/cmdline; then
CMDLINE['force_junior']=""
fi
if grep -q "recovery" /proc/cmdline; then
CMDLINE['force_junior']=""
CMDLINE['recovery']=""
fi
if [ ${EFI} -eq 1 ]; then
CMDLINE['withefi']=""
else
CMDLINE['noefi']=""
fi
if [ ! "${BUS}" = "usb" ]; then
SIZE=$(($(cat /sys/block/${LOADER_DISK/\/dev\//}/size) / 2048 + 10))
# Read SATADoM type
DOM="$(readModelKey "${MODEL}" "dom")"
CMDLINE['synoboot_satadom']="${DOM}"
CMDLINE['dom_szmax']="${SIZE}"
if [ "$(echo "${KVER:-4}" | cut -d'.' -f1)" -lt 5 ]; then
if [ ! "${BUS}" = "usb" ]; then
SZ=$(blockdev --getsz "${LOADER_DISK}" 2>/dev/null) # SZ=$(cat /sys/block/${LOADER_DISK/\/dev\//}/size)
SS=$(blockdev --getss "${LOADER_DISK}" 2>/dev/null) # SS=$(cat /sys/block/${LOADER_DISK/\/dev\//}/queue/hw_sector_size)
SIZE=$((${SZ:-0} * ${SS:-0} / 1024 / 1024 + 10))
# Read SATADoM type
SATADOM="$(readConfigKey "satadom" "${USER_CONFIG_FILE}")"
CMDLINE['synoboot_satadom']="${SATADOM:-2}"
CMDLINE['dom_szmax']="${SIZE}"
fi
CMDLINE["elevator"]="elevator"
else
CMDLINE["split_lock_detect"]="off"
# CMDLINE['module.sig_enforce']="0"
# CMDLINE['loadpin.enforce']="0"
fi
CMDLINE['panic']="${KERNELPANIC:-0}"
CMDLINE['console']="ttyS0,115200n8"
if [ "${DT}" = "true" ]; then
CMDLINE["syno_ttyS0"]="serial,0x3f8"
CMDLINE["syno_ttyS1"]="serial,0x2f8"
else
CMDLINE["SMBusHddDynamicPower"]="1"
CMDLINE["syno_hdd_detect"]="0"
CMDLINE["syno_hdd_powerup_seq"]="0"
fi
CMDLINE["HddHotplug"]="1"
CMDLINE["vender_format_version"]="2"
CMDLINE['earlyprintk']=""
CMDLINE['earlycon']="uart8250,io,0x3f8,115200n8"
CMDLINE['console']="ttyS0,115200n8"
CMDLINE['consoleblank']="600"
# CMDLINE['no_console_suspend']="1"
CMDLINE['root']="/dev/md0"
CMDLINE['skip_vender_mac_interfaces']="0,1,2,3,4,5,6,7"
CMDLINE['loglevel']="15"
CMDLINE['log_buf_len']="32M"
CMDLINE['rootwait']=""
CMDLINE['panic']="${KERNELPANIC:-0}"
# CMDLINE['intremap']="off" # no need
# CMDLINE['amd_iommu_intr']="legacy" # no need
# CMDLINE['split_lock_detect']="off" # check KVER
CMDLINE['pcie_aspm']="off"
# CMDLINE['intel_pstate']="disable"
# CMDLINE['amd_pstate']="disable"
# CMDLINE['nox2apic']="" # check platform
# CMDLINE['nomodeset']=""
CMDLINE['nowatchdog']=""
# Read cmdline
while IFS=': ' read KEY VALUE; do
CMDLINE['modprobe.blacklist']="${MODBLACKLIST}"
CMDLINE['mev']="${MEV:-physical}"
if [ "${MEV:-physical}" = "vmware" ]; then
CMDLINE['tsc']="reliable"
CMDLINE['pmtmr']="0x0"
fi
if [ "${HDDSORT}" = "true" ]; then
CMDLINE['hddsort']=""
fi
if [ "${USBASINTERNAL}" = "true" ]; then
CMDLINE['usbasinternal']=""
fi
if echo "apollolake geminilake purley geminilakenk" | grep -wq "${PLATFORM}"; then
CMDLINE["nox2apic"]=""
fi
# # Save command line to grubenv RR_CMDLINE= ... nox2apic
# if echo "apollolake geminilake purley geminilakenk" | grep -wq "${PLATFORM}"; then
# if grep -Eq "^flags.*x2apic.*" /proc/cpuinfo; then
# checkCmdline "rr_cmdline" "nox2apic" || addCmdline "rr_cmdline" "nox2apic"
# fi
# else
# checkCmdline "rr_cmdline" "nox2apic" && delCmdline "rr_cmdline" "nox2apic"
# fi
# if [ -n "$(ls /dev/mmcblk* 2>/dev/null)" ] && [ ! "${BUS}" = "mmc" ] && [ ! "${EMMCBOOT}" = "true" ]; then
# if ! echo "${CMDLINE['modprobe.blacklist']}" | grep -q "sdhci"; then
# [ ! "${CMDLINE['modprobe.blacklist']}" = "" ] && CMDLINE['modprobe.blacklist']+=","
# CMDLINE['modprobe.blacklist']+="sdhci,sdhci_pci,sdhci_acpi"
# fi
# fi
if [ "${DT}" = "true" ] && ! echo "purley broadwellnkv2 epyc7002 geminilakenk r1000nk v1000nk" | grep -wq "${PLATFORM}"; then
if ! echo "${CMDLINE['modprobe.blacklist']}" | grep -q "mpt3sas"; then
[ ! "${CMDLINE['modprobe.blacklist']}" = "" ] && CMDLINE['modprobe.blacklist']+=","
CMDLINE['modprobe.blacklist']+="mpt3sas"
fi
#else
# CMDLINE['scsi_mod.scan']="sync" # TODO: redpill panic of vmware scsi? (add to cmdline)
fi
# CMDLINE['kvm.ignore_msrs']="1"
# CMDLINE['kvm.report_ignored_msrs']="0"
if echo "apollolake geminilake geminilakenk" | grep -wq "${PLATFORM}"; then
CMDLINE["intel_iommu"]="igfx_off"
fi
if echo "purley broadwellnkv2" | grep -wq "${PLATFORM}"; then
CMDLINE["SASmodel"]="1"
fi
SSID="$(cat "${PART1_PATH}/wpa_supplicant.conf" 2>/dev/null | grep 'ssid=' | cut -d'=' -f2 | sed 's/^"//; s/"$//' | xxd -p | tr -d '\n')"
PSK="$(cat "${PART1_PATH}/wpa_supplicant.conf" 2>/dev/null | grep 'psk=' | cut -d'=' -f2 | sed 's/^"//; s/"$//' | xxd -p | tr -d '\n')"
if [ -n "${SSID}" ] && [ -n "${PSK}" ]; then
CMDLINE["wpa.ssid"]="${SSID}"
CMDLINE["wpa.psk"]="${PSK}"
fi
while IFS=': ' read -r KEY VALUE; do
[ -n "${KEY}" ] && CMDLINE["network.${KEY}"]="${VALUE}"
done <<<"$(readConfigMap "network" "${USER_CONFIG_FILE}")"
while IFS=': ' read -r KEY VALUE; do
[ -n "${KEY}" ] && CMDLINE["${KEY}"]="${VALUE}"
done < <(readModelMap "${MODEL}" "productvers.[${PRODUCTVER}].cmdline")
while IFS=': ' read KEY VALUE; do
[ -n "${KEY}" ] && CMDLINE["${KEY}"]="${VALUE}"
done < <(readConfigMap "cmdline" "${USER_CONFIG_FILE}")
done <<<"$(readConfigMap "cmdline" "${USER_CONFIG_FILE}")"
# Prepare command line
CMDLINE_LINE=""
for KEY in ${!CMDLINE[@]}; do
for KEY in "${!CMDLINE[@]}"; do
VALUE="${CMDLINE[${KEY}]}"
CMDLINE_LINE+=" ${KEY}"
[ -n "${VALUE}" ] && CMDLINE_LINE+="=${VALUE}"
done
CMDLINE_LINE=$(echo "${CMDLINE_LINE}" | sed 's/^ //') # Remove leading space
echo -e "$(TEXT "Cmdline:\n")\033[1;36m${CMDLINE_LINE}\033[0m"
CMDLINE_LINE="$(echo "${CMDLINE_LINE}" | sed 's/^ //')" # Remove leading space
printf "%s:\n\033[1;36m%s\033[0m\n" "$(TEXT "Cmdline")" "${CMDLINE_LINE}"
# Check if user wants to modify at this stage
function _bootwait() {
BOOTWAIT="$(readConfigKey "bootwait" "${USER_CONFIG_FILE}")"
[ -z "${BOOTWAIT}" ] && BOOTWAIT=10
busybox w 2>/dev/null | awk '{print $1" "$2" "$4" "$5" "$6}' >WB
MSG=""
while [ ${BOOTWAIT} -gt 0 ]; do
sleep 1
BOOTWAIT=$((BOOTWAIT - 1))
MSG="$(printf "\033[1;33m$(TEXT "%2ds (Changing access(ssh/web) status will interrupt boot)")\033[0m" "${BOOTWAIT}")"
printf "\r${MSG}"
busybox w 2>/dev/null | awk '{print $1" "$2" "$4" "$5" "$6}' >WC
if ! diff WB WC >/dev/null 2>&1; then
printf "\r%$((${#MSG} * 2))s\n" " "
printf "\r\033[1;33m%s\033[0m\n" "$(TEXT "Access(ssh/web) status has changed and booting is interrupted.")"
rm -f WB WC
return 1
fi
if ! ps -p "${PPID}" -o cmd | grep -q "menu.sh" && [ -f "${TMP_PATH}/menu.lock" ]; then
printf "\r%$((${#MSG} * 2))s\n" " "
printf "\r\033[1;33m%s\033[0m\n" "$(TEXT "Menu opened and booting is interrupted.")"
rm -f WB WC
return 1
fi
done
rm -f WB WC
printf "\r%$((${#MSG} * 2))s\n" " "
return 0
}
DIRECT="$(readConfigKey "directboot" "${USER_CONFIG_FILE}")"
if [ "${DIRECT}" = "true" ]; then
CMDLINE_DIRECT=$(echo ${CMDLINE_LINE} | sed 's/>/\\\\>/g') # Escape special chars
grub-editenv ${GRUB_PATH}/grubenv set dsm_cmdline="${CMDLINE_DIRECT}"
echo -e "\033[1;33m$(TEXT "Reboot to boot directly in DSM")\033[0m"
grub-editenv ${GRUB_PATH}/grubenv set next_entry="direct"
reboot
if [ "${DIRECT}" = "true" ] || echo "parallels xen" | grep -qw "${MEV:-physical}"; then
# grubenv file limit is 1024 bytes.
grub-editenv "${USER_RSYSENVFILE}" create
grub-editenv "${USER_RSYSENVFILE}" set rr_version="${WTITLE}"
grub-editenv "${USER_RSYSENVFILE}" set rr_booting="${BTITLE}"
grub-editenv "${USER_RSYSENVFILE}" set dsm_model="${MODEL}(${PLATFORM})"
grub-editenv "${USER_RSYSENVFILE}" set dsm_version="${PRODUCTVER}(${BUILDNUM}$([ ${SMALLNUM:-0} -ne 0 ] && echo "u${SMALLNUM}"))"
grub-editenv "${USER_RSYSENVFILE}" set dsm_kernel="${KERNEL}"
grub-editenv "${USER_RSYSENVFILE}" set dsm_lkm="${LKM}"
grub-editenv "${USER_RSYSENVFILE}" set sys_mev="${MEV:-physical}"
grub-editenv "${USER_RSYSENVFILE}" set sys_dmi="${DMI}"
grub-editenv "${USER_RSYSENVFILE}" set sys_cpu="${CPU}"
grub-editenv "${USER_RSYSENVFILE}" set sys_mem="${MEM}"
CMDLINE_DIRECT=$(echo "${CMDLINE_LINE}" | sed 's/>/\\\\>/g') # Escape special chars
grub-editenv "${USER_GRUBENVFILE}" set dsm_cmdline="${CMDLINE_DIRECT}"
grub-editenv "${USER_GRUBENVFILE}" set next_entry="direct"
_bootwait || exit 0
printf "\033[1;33m%s\033[0m\n" "$(TEXT "Reboot to boot directly in DSM")"
[ ! -f "/.dockerenv" ] && reboot
exit 0
else
ETHX=($(ls /sys/class/net/ | grep eth)) # real network cards list
echo "$(printf "$(TEXT "Detected %s network cards.")" "${#ETHX[@]}")"
echo "$(TEXT "Checking Connect.")"
rm -f "${USER_RSYSENVFILE}" 2>/dev/null || true
grub-editenv "${USER_GRUBENVFILE}" unset dsm_cmdline
grub-editenv "${USER_GRUBENVFILE}" unset next_entry
ETHX="$(find /sys/class/net/ -mindepth 1 -maxdepth 1 ! -name lo -exec basename {} \; | sort)"
printf "$(TEXT "Detected %s network cards.\n")" "$(echo "${ETHX}" | wc -w)"
printf "$(TEXT "Checking Connect.")"
COUNT=0
BOOTIPWAIT="$(readConfigKey "bootipwait" "${USER_CONFIG_FILE}")"
[ -z "${BOOTIPWAIT}" ] && BOOTIPWAIT=10
BOOTIPWAIT=${BOOTIPWAIT:-10}
while [ ${COUNT} -lt $((${BOOTIPWAIT} + 32)) ]; do
hasConnect="false"
for N in $(seq 0 $(expr ${#ETHX[@]} - 1)); do
if ethtool ${ETHX[${N}]} | grep 'Link detected' | grep -q 'yes'; then
echo -en "${ETHX[${N}]} "
hasConnect="true"
MSG=""
for N in ${ETHX}; do
if [ "1" = "$(cat "/sys/class/net/${N}/carrier" 2>/dev/null)" ]; then
MSG+="${N} "
fi
done
if [ ${hasConnect} = "true" ]; then
echo -en "connected.\n"
if [ -n "${MSG}" ]; then
printf "\r%s%s \n" "${MSG}" "$(TEXT "connected.")"
break
fi
COUNT=$((${COUNT} + 1))
echo -n "."
COUNT=$((COUNT + 1))
printf "."
sleep 1
done
echo "$(TEXT "Waiting IP.(For reference only)")"
for N in $(seq 0 $(expr ${#ETHX[@]} - 1)); do
if [ ! -f "/.dockerenv" ]; then
[ ! -f /var/run/dhcpcd/pid ] && /etc/init.d/S41dhcpcd restart >/dev/null 2>&1 || true
fi
printf "$(TEXT "Waiting IP.\n")"
for N in ${ETHX}; do
COUNT=0
DRIVER=$(ls -ld /sys/class/net/${ETHX[${N}]}/device/driver 2>/dev/null | awk -F '/' '{print $NF}')
echo -en "${ETHX[${N}]}(${DRIVER}): "
DRIVER="$(basename "$(realpath "/sys/class/net/${N}/device/driver" 2>/dev/null)" 2>/dev/null)"
MAC="$(cat "/sys/class/net/${N}/address" 2>/dev/null)" || MAC="00:00:00:00:00:00"
printf "%s(%s): " "${N}" "${MAC}@${DRIVER}"
while true; do
if ! ip link show ${ETHX[${N}]} | grep -q 'UP'; then
echo -en "\r${ETHX[${N}]}(${DRIVER}): $(TEXT "DOWN")\n"
if false && [ ! "${N::3}" = "eth" ]; then
printf "\r%s(%s): %s\n" "${N}" "${MAC}@${DRIVER}" "$(TEXT "IGNORE (Does not support non-wired network card.)")"
break
fi
if ethtool ${ETHX[${N}]} | grep 'Link detected' | grep -q 'no'; then
echo -en "\r${ETHX[${N}]}(${DRIVER}): $(TEXT "NOT CONNECTED")\n"
if [ -z "$(cat "/sys/class/net/${N}/carrier" 2>/dev/null)" ]; then
printf "\r%s(%s): %s\n" "${N}" "${MAC}@${DRIVER}" "$(TEXT "DOWN")"
break
fi
if [ "0" = "$(cat "/sys/class/net/${N}/carrier" 2>/dev/null)" ]; then
printf "\r%s(%s): %s\n" "${N}" "${MAC}@${DRIVER}" "$(TEXT "NOT CONNECTED")"
break
fi
if [ ${COUNT} -eq ${BOOTIPWAIT} ]; then # Under normal circumstances, no errors should occur here.
echo -en "\r${ETHX[${N}]}(${DRIVER}): $(TEXT "TIMEOUT (Please check the IP on the router.)")\n"
printf "\r%s(%s): %s\n" "${N}" "${MAC}@${DRIVER}" "$(TEXT "TIMEOUT (Please check the IP on the router.)")"
break
fi
COUNT=$((${COUNT} + 1))
IP="$(getIP ${ETHX[${N}]})"
COUNT=$((COUNT + 1))
IP="$(getIP "${N}")"
if [ -n "${IP}" ]; then
echo -en "\r${ETHX[${N}]}(${DRIVER}): $(printf "$(TEXT "Access \033[1;34mhttp://%s:5000\033[0m to connect the DSM via web.")" "${IP}")\n"
if echo "${IP}" | grep -q "^169\.254\."; then
printf "\r%s(%s): %s\n" "${N}" "${MAC}@${DRIVER}" "$(TEXT "LINK LOCAL (No DHCP server detected.)")"
else
printf "\r%s(%s): %s\n" "${N}" "${MAC}@${DRIVER}" "$(printf "$(TEXT "Access \033[1;34mhttp://%s:5000\033[0m to connect the DSM via web.")" "${IP}")"
fi
break
fi
echo -n "."
printf "."
sleep 1
done
done
BOOTWAIT="$(readConfigKey "bootwait" "${USER_CONFIG_FILE}")"
[ -z "${BOOTWAIT}" ] && BOOTWAIT=10
w | awk '{print $1" "$2" "$4" "$5" "$6}' >WB
MSG=""
while test ${BOOTWAIT} -ge 0; do
MSG="$(printf "\033[1;33m$(TEXT "%2ds (Changing access(ssh/web) status will interrupt boot)")\033[0m" "${BOOTWAIT}")"
echo -en "\r${MSG}"
w | awk '{print $1" "$2" "$4" "$5" "$6}' >WC
if ! diff WB WC >/dev/null 2>&1; then
echo -en "\r\033[1;33m$(TEXT "access(ssh/web) status has changed and booting is interrupted.")\033[0m\n"
rm -f WB WC
exit 0
fi
sleep 1
BOOTWAIT=$((BOOTWAIT - 1))
done
rm -f WB WC
echo -en "\r$(printf "%$((${#MSG} * 2))s" " ")\n"
echo -e "\033[1;37m$(TEXT "Loading DSM kernel...")\033[0m"
_bootwait || exit 0
[ -n "$(cat "${ADD_TIPS_FILE}" 2>/dev/null)" ] && printf "$(TEXT "%s\n")" "$(cat "${ADD_TIPS_FILE}" 2>/dev/null)"
printf "\033[1;37m%s\033[0m\n" "$(TEXT "Loading DSM kernel ...")"
DSMLOGO="$(readConfigKey "dsmlogo" "${USER_CONFIG_FILE}")"
if [ "${DSMLOGO}" = "true" -a -c "/dev/fb0" ]; then
if [ "${DSMLOGO}" = "true" ] && [ -c "/dev/fb0" ]; then
IP="$(getIP)"
echo "${IP}" | grep -q "^169\.254\." && IP=""
[ -n "${IP}" ] && URL="http://${IP}:5000" || URL="http://find.synology.com/"
python ${WORK_PATH}/include/functions.py makeqr -d "${URL}" -l "br" -o "${TMP_PATH}/qrcode.png"
[ -f "${TMP_PATH}/qrcode.png" ] && echo | fbv -acufi "${TMP_PATH}/qrcode.png" >/dev/null 2>/dev/null || true
python3 "${WORK_PATH}/include/functions.py" "makeqr" -d "${URL}" -l "7" -o "${TMP_PATH}/qrcode_boot.png"
[ -f "${TMP_PATH}/qrcode_boot.png" ] && echo | fbv -acufi "${TMP_PATH}/qrcode_boot.png" >/dev/null 2>&1 || true
fi
# Executes DSM kernel via KEXEC
KVER=$(readModelKey "${MODEL}" "productvers.[${PRODUCTVER}].kver")
if [ "${KVER:0:1}" = "3" -a ${EFI} -eq 1 ]; then
echo -e "\033[1;33m$(TEXT "Warning, running kexec with --noefi param, strange things will happen!!")\033[0m"
kexec --noefi -l "${MOD_ZIMAGE_FILE}" --initrd "${MOD_RDGZ_FILE}" --command-line="${CMDLINE_LINE}" >"${LOG_FILE}" 2>&1 || dieLog
else
kexec -l "${MOD_ZIMAGE_FILE}" --initrd "${MOD_RDGZ_FILE}" --command-line="${CMDLINE_LINE}" >"${LOG_FILE}" 2>&1 || dieLog
KEXECARGS="-a"
if [ "$(echo "${KVER:-4}" | cut -d'.' -f1)" -lt 4 ] && [ ${EFI} -eq 1 ]; then
printf "\033[1;33m%s\033[0m\n" "$(TEXT "Warning, running kexec with --noefi param, strange things will happen!!")"
KEXECARGS+=" --noefi"
fi
echo -e "\033[1;37m$(TEXT "Booting...")\033[0m"
for T in $(w | grep -v "TTY" | awk -F' ' '{print $2}'); do
echo -e "\n\033[1;43m$(TEXT "[This interface will not be operational. Please wait a few minutes.\nFind DSM via http://find.synology.com/ or Synology Assistant and connect.]")\033[0m\n" >"/dev/${T}" 2>/dev/null || true
kexec ${KEXECARGS} -l "${MOD_ZIMAGE_FILE}" --initrd "${MOD_RDGZ_FILE}" --command-line="${CMDLINE_LINE} kexecboot" >"${LOG_FILE}" 2>&1 || dieLog
printf "\033[1;37m%s\033[0m\n" "$(TEXT "Booting ...")"
# show warning message
for T in $(busybox w 2>/dev/null | grep -v 'TTY' | awk '{print $2}'); do
if [ -w "/dev/${T}" ]; then
echo -e "\n\033[1;43m$(TEXT "Interface not operational. Wait a few minutes.\nFind DSM via http://find.synology.com/ or Synology Assistant.")\033[0m\n" >"/dev/${T}" 2>/dev/null || true
fi
done
KERNELWAY="$(readConfigKey "kernelway" "${USER_CONFIG_FILE}")"
[ "${KERNELWAY}" = "kexec" ] && kexec -f -e || poweroff
if [ ! -f "/.dockerenv" ]; then
# Disconnect wireless
lsmod | grep -q iwlwifi && for F in /sys/class/net/wlan*; do
[ ! -e "${F}" ] && continue
connectwlanif "$(basename "${F}")" 0 2>/dev/null
done
# Unload all network drivers
# for F in $(realpath /sys/class/net/*/device/driver); do [ ! -e "${F}" ] && continue; rmmod -f "$(basename ${F})" 2>/dev/null || true; done
# Unload all graphics drivers
# for D in $(lsmod | grep -E '^(nouveau|amdgpu|radeon|i915)' | awk '{print $1}'); do rmmod -f "${D}" 2>/dev/null || true; done
# for I in $(find /sys/devices -name uevent -exec bash -c 'cat {} 2>/dev/null | grep -Eq "PCI_CLASS=0?30[0|1|2]00" && dirname {}' \;); do
# [ -e ${I}/reset ] && cat "${I}/vendor" >/dev/null | grep -iq 0x10de && echo 1 >${I}/reset || true # Proc open nvidia driver when booting
# done
# Reboot
KERNELWAY="$(readConfigKey "kernelway" "${USER_CONFIG_FILE}")"
[ "${KERNELWAY}" = "kexec" ] && kexec -e || poweroff
fi
exit 0
fi

View File

@ -1,16 +1,22 @@
#!/usr/bin/env bash
#
# Copyright (C) 2022 Ing <https://github.com/wjz304>
#
# This is free software, licensed under the MIT License.
# See /LICENSE for more information.
#
read_u8() {
dd if=$1 bs=1 skip=$(($2)) count=1 2>/dev/null | od -An -tu1 | grep -Eo '[0-9]+'
dd if="${1}" bs=1 skip="$((${2}))" count=1 2>/dev/null | od -An -tu1 | grep -Eo '[0-9]+'
}
read_u32() {
dd if=$1 bs=1 skip=$(($2)) count=4 2>/dev/null | od -An -tu4 | grep -Eo '[0-9]+'
dd if="${1}" bs=1 skip="$((${2}))" count=4 2>/dev/null | od -An -tu4 | grep -Eo '[0-9]+'
}
set -x
setup_size=$(read_u8 $1 0x1f1)
payload_offset=$(read_u32 $1 0x248)
payload_length=$(read_u32 $1 0x24c)
inner_pos=$((($setup_size + 1) * 512))
setup_size=$(read_u8 "${1}" 0x1f1)
payload_offset=$(read_u32 "${1}" 0x248)
payload_length=$(read_u32 "${1}" 0x24c)
inner_pos=$(((setup_size + 1) * 512))
tail -c+$(($inner_pos + 1)) $1 | tail -c+$(($payload_offset + 1)) | head -c $(($payload_length)) | head -c $(($payload_length - 4)) | unlzma >$2
tail -c+$((inner_pos + 1)) "${1}" | tail -c+$((payload_offset + 1)) | head -c "${payload_length}" | head -c $((payload_length - 4)) | unlzma >"${2}"

View File

@ -1,42 +0,0 @@
#!/usr/bin/env bash
#
# Calculate the amount of space needed to run the kernel, including room for
# the .bss and .brk sections.
#
# Usage:
# objdump -h a.out | sh calc_run_size.sh
NUM='\([0-9a-fA-F]*[ \t]*\)'
OUT=$(sed -n 's/^[ \t0-9]*.b[sr][sk][ \t]*'"${NUM}${NUM}${NUM}${NUM}"'.*/\1\4/p')
if [ -z "$OUT" ]; then
echo "Never found .bss or .brk file offset" >&2
exit 1
fi
OUT=$(echo ${OUT# })
sizeA=$(printf "%d" 0x${OUT%% *})
OUT=${OUT#* }
offsetA=$(printf "%d" 0x${OUT%% *})
OUT=${OUT#* }
sizeB=$(printf "%d" 0x${OUT%% *})
OUT=${OUT#* }
offsetB=$(printf "%d" 0x${OUT%% *})
run_size=$((${offsetA} + ${sizeA} + ${sizeB}))
# BFD linker shows the same file offset in ELF.
if [ "${offsetA}" -ne "${offsetB}" ]; then
# Gold linker shows them as consecutive.
endB=$((${offsetB} + ${sizeB}))
if [ "$endB" != "$run_size" ]; then
printf "sizeA: 0x%x\n" ${sizeA} >&2
printf "offsetA: 0x%x\n" ${offsetA} >&2
printf "sizeB: 0x%x\n" ${sizeB} >&2
printf "offsetB: 0x%x\n" ${offsetB} >&2
echo ".bss and .brk are non-contiguous" >&2
exit 1
fi
fi
printf "%d\n" ${run_size}
exit 0

View File

@ -1 +0,0 @@
kmod

View File

@ -0,0 +1,60 @@
#!/bin/sh
# SPDX-License-Identifier: GPL-2.0-only
# ----------------------------------------------------------------------
# extract-vmlinux - Extract uncompressed vmlinux from a kernel image
#
# Inspired from extract-ikconfig
# (c) 2009,2010 Dick Streefland <dick@streefland.net>
#
# (c) 2011 Corentin Chary <corentin.chary@gmail.com>
#
# ----------------------------------------------------------------------
check_vmlinux() {
# Use readelf to check if it's a valid ELF
# TODO: find a better to way to check that it's really vmlinux
# and not just an elf
readelf -h $1 >/dev/null 2>&1 || return 1
cat $1
exit 0
}
try_decompress() {
# The obscure use of the "tr" filter is to work around older versions of
# "grep" that report the byte offset of the line instead of the pattern.
# Try to find the header ($1) and decompress from here
for pos in $(tr "$1\n$2" "\n$2=" <"$img" | grep -abo "^$2"); do
pos=${pos%%:*}
tail -c+$pos "$img" | $3 >$tmp 2>/dev/null
check_vmlinux $tmp
done
}
# Check invocation:
me=${0##*/}
img=$1
if [ $# -ne 1 ] || [ ! -s "$img" ]; then
echo "Usage: $me <kernel-image>" >&2
exit 2
fi
# Prepare temp files:
tmp=$(mktemp /tmp/vmlinux-XXX)
trap "rm -f $tmp" 0
# That didn't work, so retry after decompression.
try_decompress '\037\213\010' xy gunzip
try_decompress '\3757zXZ\000' abcde unxz
try_decompress 'BZh' xy bunzip2
try_decompress '\135\0\0\0' xxx unlzma
try_decompress '\211\114\132' xy 'lzop -d'
try_decompress '\002!L\030' xxx 'lz4 -d'
try_decompress '(\265/\375' xxx unzstd
# Finally check for uncompressed images or objects:
check_vmlinux $img
# Bail out:
echo "$me: Cannot find vmlinux." >&2

Binary file not shown.

34
files/initrd/opt/rr/helper.sh Executable file
View File

@ -0,0 +1,34 @@
#!/usr/bin/env bash
#
# Copyright (C) 2022 Ing <https://github.com/wjz304>
#
# This is free software, licensed under the MIT License.
# See /LICENSE for more information.
#
# shellcheck disable=SC2059
[ -z "${WORK_PATH}" ] || [ ! -d "${WORK_PATH}/include" ] && WORK_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
. "${WORK_PATH}/include/functions.sh"
# lock
exec 911>"${TMP_PATH}/helper.lock"
flock -n 911 || {
MSG="$(TEXT "Another instance is already running.")"
dialog --colors --aspect 50 --title "$(TEXT "Online Assistance")" --msgbox "${MSG}" 0 0
exit 1
}
trap 'flock -u 911; rm -f "${TMP_PATH}/helper.lock"' EXIT INT TERM HUP
{
printf "$(TEXT "Closing this window or press 'ctrl + c' to exit the assistance.")\n"
printf "$(TEXT "Please give the following link to the helper. (Click to open and copy)")\n"
printf " 👇\n"
sshx -q --name "RR-Helper" 2>&1
[ $? -ne 0 ] && while true; do sleep 1; done
} | dialog --colors --aspect 50 --title "$(TEXT "Online Assistance")" --progressbox "$(TEXT "Notice: Please keep this window open.")" 20 100 2>&1
clear
echo -e "$(TEXT "Call \033[1;32mmenu.sh\033[0m to return to menu")"
"${WORK_PATH}/init.sh"

390
files/initrd/opt/rr/i915ids Normal file
View File

@ -0,0 +1,390 @@
# INTEL_I810_IDS
80867121
80867123
80867125
# INTEL_I815_IDS
80861132
# INTEL_I830_IDS
80863577
# INTEL_I845G_IDS
80862562
# INTEL_I85X_IDS
80863582
8086358e
# INTEL_I865G_IDS
80862572
# INTEL_I915G_IDS
80862582
8086258a
# INTEL_I915GM_IDS
80862592
# INTEL_I945G_IDS
80862772
# INTEL_I945GM_IDS
808627a2
808627ae
# INTEL_I965G_IDS
80862972
80862982
80862992
808629a2
# INTEL_G33_IDS
808629b2
808629c2
808629d2
# INTEL_I965GM_IDS
80862a02
80862a12
# INTEL_GM45_IDS
80862a42
# INTEL_G45_IDS
80862e02
80862e12
80862e22
80862e32
80862e42
80862e92
# INTEL_PINEVIEW_G_IDS
8086a001
# INTEL_PINEVIEW_M_IDS
8086a011
# INTEL_IRONLAKE_D_IDS
80860042
# INTEL_IRONLAKE_M_IDS
80860046
# INTEL_SNB_D_GT1_IDS
80860102
8086010A
# INTEL_SNB_D_GT2_IDS
80860112
80860122
# INTEL_SNB_M_GT1_IDS
80860106
# INTEL_SNB_M_GT2_IDS
80860116
80860126
# INTEL_IVB_M_GT1_IDS
80860156
# INTEL_IVB_M_GT2_IDS
80860166
# INTEL_IVB_D_GT1_IDS
80860152
8086015a
# INTEL_IVB_D_GT2_IDS
80860162
8086016a
# INTEL_HSW_ULT_GT1_IDS
80860A02
80860A06
80860A0A
80860A0B
# INTEL_HSW_ULX_GT1_IDS
80860A0E
# INTEL_HSW_GT1_IDS
80860402
80860406
8086040A
8086040B
8086040E
80860C02
80860C06
80860C0A
80860C0B
80860C0E
80860D02
80860D06
80860D0A
80860D0B
80860D0E
# INTEL_HSW_ULT_GT2_IDS
80860A12
80860A16
80860A1A
80860A1B
# INTEL_HSW_ULX_GT2_IDS
80860A1E
# INTEL_HSW_GT2_IDS
80860412
80860416
8086041A
8086041B
8086041E
80860C12
80860C16
80860C1A
80860C1B
80860C1E
80860D12
80860D16
80860D1A
80860D1B
80860D1E
# INTEL_HSW_ULT_GT3_IDS
80860A22
80860A26
80860A2A
80860A2B
80860A2E
# INTEL_HSW_GT3_IDS
80860422
80860426
8086042A
8086042B
8086042E
80860C22
80860C26
80860C2A
80860C2B
80860C2E
80860D22
80860D26
80860D2A
80860D2B
80860D2E
# INTEL_VLV_IDS
80860f30
80860f31
80860f32
80860f33
# INTEL_BDW_ULT_GT1_IDS
80861606
8086160B
# INTEL_BDW_ULX_GT1_IDS
8086160E
# INTEL_BDW_GT1_IDS
80861602
8086160A
8086160D
# INTEL_BDW_ULT_GT2_IDS
80861616
8086161B
# INTEL_BDW_ULX_GT2_IDS
8086161E
# INTEL_BDW_GT2_IDS
80861612
8086161A
8086161D
# INTEL_BDW_ULT_GT3_IDS
80861626
8086162B
# INTEL_BDW_ULX_GT3_IDS
8086162E
# INTEL_BDW_GT3_IDS
80861622
8086162A
8086162D
# INTEL_BDW_ULT_RSVD_IDS
80861636
8086163B
# INTEL_BDW_ULX_RSVD_IDS
8086163E
# INTEL_BDW_RSVD_IDS
80861632
8086163A
8086163D
# INTEL_CHV_IDS
808622b0
808622b1
808622b2
808622b3
# INTEL_SKL_ULT_GT1_IDS
80861906
80861913~
# INTEL_SKL_ULX_GT1_IDS
8086190E
80861915~
# INTEL_SKL_GT1_IDS
80861902
8086190A
8086190B
80861917~
# INTEL_SKL_ULT_GT2_IDS
80861916
80861921
# INTEL_SKL_ULX_GT2_IDS
8086191E
# INTEL_SKL_GT2_IDS
80861912
8086191A
8086191B
8086191D
# INTEL_SKL_ULT_GT3_IDS
80861923
80861926
80861927
# INTEL_SKL_GT3_IDS
8086192A
8086192B
8086192D
# INTEL_SKL_GT4_IDS
80861932
8086193A
8086193B
8086193D
# INTEL_BXT_IDS
80860A84
80861A84
80861A85
80865A84
80865A85
# INTEL_GLK_IDS
80863184
80863185
# INTEL_KBL_ULT_GT1_IDS
80865906
80865913
# INTEL_KBL_ULX_GT1_IDS
8086590E
80865915
# INTEL_KBL_GT1_IDS
80865902
80865908
8086590A
8086590B
# INTEL_KBL_ULT_GT2_IDS
80865916
80865921
# INTEL_KBL_ULX_GT2_IDS
8086591E
# INTEL_KBL_GT2_IDS
80865912
80865917
8086591A
8086591B
8086591D
# INTEL_KBL_ULT_GT3_IDS
80865926
# INTEL_KBL_GT3_IDS
80865923
80865927
# INTEL_KBL_GT4_IDS
8086593B
# INTEL_AML_KBL_GT2_IDS
8086591C
808687C0
# INTEL_AML_CFL_GT2_IDS
808687CA
# INTEL_CML_GT1_IDS
80869BA2
80869BA4
80869BA5
80869BA8
# INTEL_CML_U_GT1_IDS
80869B21
80869BAA
80869BAC
# INTEL_CML_GT2_IDS
80869BC2
80869BC4
80869BC5
80869BC6
80869BC8
80869BE6
80869BF6
# INTEL_CML_U_GT2_IDS
80869B41
80869BCA
80869BCC
# INTEL_CFL_S_GT1_IDS
80863E90
80863E93
80863E99
# INTEL_CFL_S_GT2_IDS
80863E91
80863E92
80863E96
80863E98
80863E9A
# INTEL_CFL_H_GT1_IDS
80863E9C
# INTEL_CFL_H_GT2_IDS
80863E94
80863E9B
# INTEL_CFL_U_GT2_IDS
80863EA9
# INTEL_CFL_U_GT3_IDS
80863EA5
80863EA6
80863EA7
80863EA8
# INTEL_WHL_U_GT1_IDS
80863EA1
80863EA4
# INTEL_WHL_U_GT2_IDS
80863EA0
80863EA3
# INTEL_WHL_U_GT3_IDS
80863EA2
# INTEL_CNL_PORT_F_IDS
80865A44
80865A4C
80865A54
80865A5C
# INTEL_CNL_IDS
80865A40
80865A41
80865A42
80865A49
80865A4A
80865A50
80865A51
80865A52
80865A59
80865A5A
# INTEL_ICL_PORT_F_IDS
80868A50
80868A52
80868A53
80868A54
80868A56
80868A57
80868A58
80868A59
80868A5A
80868A5B
80868A5C
80868A70
80868A71
# INTEL_ICL_11_IDS
80868A51
80868A5D
# INTEL_EHL_IDS
80864500~
80864541
80864551
80864555
80864557
80864570~
80864571
# INTEL_JSL_IDS
80864E51
80864E55
80864E57
80864E61
80864E71
# INTEL_TGL_12_GT1_IDS
80869A60
80869A68
80869A70
# INTEL_TGL_12_GT2_IDS
80869A40
80869A49
80869A59
80869A78
80869AC0
80869AC9
80869AD9
80869AF8
# INTEL_RKL_IDS
80864C80
80864C8A
80864C8B
80864C8C
80864C90
80864C9A
# INTEL_DG1_IDS
80864905
80864906~
80864907~
80864908~
80864909~

View File

@ -1,17 +1,53 @@
#!/usr/bin/env bash
#
# Copyright (C) 2022 Ing <https://github.com/wjz304>
#
# This is free software, licensed under the MIT License.
# See /LICENSE for more information.
#
# shellcheck disable=SC2115,SC2155
###############################################################################
# Return list of available addons
# 1 - Platform
# 2 - Kernel Version
function availableAddons() {
while read D; do
if [ -z "${1}" ] || [ -z "${2}" ]; then
echo ""
return 1
fi
while read -r D; do
[ ! -f "${D}/manifest.yml" ] && continue
ADDON=$(basename ${D})
local ADDON=$(basename "${D}")
checkAddonExist "${ADDON}" "${1}" "${2}" || continue
SYSTEM=$(readConfigKey "system" "${D}/manifest.yml")
local SYSTEM=$(readConfigKey "system" "${D}/manifest.yml")
[ "${SYSTEM}" = "true" ] && continue
DESC="$(readConfigKey "description" "${D}/manifest.yml")"
echo -e "${ADDON}\t${DESC}"
done < <(find "${ADDONS_PATH}" -maxdepth 1 -type d | sort)
local LOCALE="${LC_ALL%%.*}"
local DESC=""
[ -z "${DESC}" ] && DESC="$(readConfigKey "description.${LOCALE:-"en_US"}" "${D}/manifest.yml")"
[ -z "${DESC}" ] && DESC="$(readConfigKey "description.en_US" "${D}/manifest.yml")"
[ -z "${DESC}" ] && DESC="$(readConfigKey "description" "${D}/manifest.yml")"
DESC="$(echo "${DESC}" | tr -d '\n\r\t\\' | sed "s/\"/'/g")"
echo "${ADDON} \"${DESC:-"unknown"}\""
done <<<"$(find "${ADDONS_PATH}" -maxdepth 1 -type d 2>/dev/null | sort)"
}
###############################################################################
# Read Addon Key
# 1 - Addon
# 2 - key
function readAddonKey() {
if [ -z "${1}" ] || [ -z "${2}" ]; then
echo ""
return 1
fi
if [ ! -f "${ADDONS_PATH}/${1}/manifest.yml" ]; then
echo ""
return 1
fi
readConfigKey "${2}" "${ADDONS_PATH}/${1}/manifest.yml"
}
###############################################################################
@ -21,6 +57,9 @@ function availableAddons() {
# 3 - Kernel Version
# Return ERROR if not exists
function checkAddonExist() {
if [ -z "${1}" ] || [ -z "${2}" ] || [ -z "${3}" ]; then
return 1 # ERROR
fi
# First check generic files
if [ -f "${ADDONS_PATH}/${1}/all.tgz" ]; then
return 0 # OK
@ -35,25 +74,41 @@ function checkAddonExist() {
###############################################################################
# Install Addon into ramdisk image
# 1 - Addon id
# 2 - Platform
# 3 - Kernel Version
# Return ERROR if not installed
function installAddon() {
ADDON="${1}"
if [ -z "${1}" ]; then
echo "ERROR: installAddon: Addon not defined"
return 1
fi
local ADDON="${1}"
mkdir -p "${TMP_PATH}/${ADDON}"
HAS_FILES=0
local HAS_FILES=0
# First check generic files
if [ -f "${ADDONS_PATH}/${ADDON}/all.tgz" ]; then
tar -zxf "${ADDONS_PATH}/${ADDON}/all.tgz" -C "${TMP_PATH}/${ADDON}"
tar -zxf "${ADDONS_PATH}/${ADDON}/all.tgz" -C "${TMP_PATH}/${ADDON}" 2>"${LOG_FILE}"
if [ $? -ne 0 ]; then
return 1
fi
HAS_FILES=1
fi
# Now check specific platform files
if [ -f "${ADDONS_PATH}/${ADDON}/${PLATFORM}-${KVER}.tgz" ]; then
tar -zxf "${ADDONS_PATH}/${ADDON}/${PLATFORM}-${KVER}.tgz" -C "${TMP_PATH}/${ADDON}"
if [ -f "${ADDONS_PATH}/${ADDON}/${2}-${3}.tgz" ]; then
tar -zxf "${ADDONS_PATH}/${ADDON}/${2}-${3}.tgz" -C "${TMP_PATH}/${ADDON}" 2>"${LOG_FILE}"
if [ $? -ne 0 ]; then
return 1
fi
HAS_FILES=1
fi
# If has files to copy, copy it, else return error
[ ${HAS_FILES} -ne 1 ] && return 1
cp -f "${TMP_PATH}/${ADDON}/install.sh" "${RAMDISK_PATH}/addons/${ADDON}.sh" 2>"${LOG_FILE}" || dieLog
if [ ${HAS_FILES} -ne 1 ]; then
echo "ERROR: installAddon: ${ADDON} addon not found" >"${LOG_FILE}"
return 1
fi
cp -f "${TMP_PATH}/${ADDON}/install.sh" "${RAMDISK_PATH}/addons/${ADDON}.sh" 2>"${LOG_FILE}"
chmod +x "${RAMDISK_PATH}/addons/${ADDON}.sh"
[ -d ${TMP_PATH}/${ADDON}/root ] && (cp -rnf "${TMP_PATH}/${ADDON}/root/"* "${RAMDISK_PATH}/" 2>"${LOG_FILE}" || dieLog)
[ -d "${TMP_PATH}/${ADDON}/root" ] && cp -rnf "${TMP_PATH}/${ADDON}/root/"* "${RAMDISK_PATH}/" 2>"${LOG_FILE}"
rm -rf "${TMP_PATH}/${ADDON}"
return 0
}
@ -61,27 +116,19 @@ function installAddon() {
###############################################################################
# Untar an addon to correct path
# 1 - Addon file path
# Return name of addon on sucess or empty on error
# Return name of addon on success or empty on error
function untarAddon() {
if [ -z "${1}" ]; then
echo ""
return 1
fi
rm -rf "${TMP_PATH}/addon"
mkdir -p "${TMP_PATH}/addon"
tar -xaf "${1}" -C "${TMP_PATH}/addon" || return
ADDON=$(readConfigKey "name" "${TMP_PATH}/addon/manifest.yml")
[ -z "${ADDON}" ] && return
tar -xaf "${1}" -C "${TMP_PATH}/addon" || return 1
local ADDON=$(readConfigKey "name" "${TMP_PATH}/addon/manifest.yml")
[ -z "${ADDON}" ] && return 1
rm -rf "${ADDONS_PATH}/${ADDON}"
mv -f "${TMP_PATH}/addon" "${ADDONS_PATH}/${ADDON}"
echo "${ADDON}"
}
###############################################################################
# Detect if has new local plugins to install/reinstall
function updateAddons() {
for F in $(ls ${PART3_PATH}/*.addon 2>/dev/null); do
ADDON=$(basename "${F}" | sed 's|.addon||')
rm -rf "${ADDONS_PATH}/${ADDON}"
mkdir -p "${ADDONS_PATH}/${ADDON}"
echo "Installing ${F} to ${ADDONS_PATH}/${ADDON}"
tar -xaf "${F}" -C "${ADDONS_PATH}/${ADDON}"
rm -f "${F}"
done
return 0
}

View File

@ -1,9 +1,17 @@
#!/usr/bin/env bash
#
# Copyright (C) 2022 Ing <https://github.com/wjz304>
#
# This is free software, licensed under the MIT License.
# See /LICENSE for more information.
#
###############################################################################
# Delete a key in config file
# 1 - Path of Key
# 2 - Path of yaml config file
function deleteConfigKey() {
yq eval 'del(.'${1}')' --inplace "${2}"
yq eval "del(.${1})" --inplace "${2}" 2>/dev/null
}
###############################################################################
@ -12,7 +20,8 @@ function deleteConfigKey() {
# 2 - Value
# 3 - Path of yaml config file
function writeConfigKey() {
[ "${2}" = "{}" ] && yq eval '.'${1}' = {}' --inplace "${3}" || yq eval '.'${1}' = "'"${2}"'"' --inplace "${3}"
local value="${2}"
[ "${value}" = "{}" ] && yq eval ".${1} = {}" --inplace "${3}" 2>/dev/null || yq eval ".${1} = \"${value}\"" --inplace "${3}" 2>/dev/null
}
###############################################################################
@ -21,8 +30,27 @@ function writeConfigKey() {
# 2 - Path of yaml config file
# Return Value
function readConfigKey() {
RESULT=$(yq eval '.'${1}' | explode(.)' "${2}")
[ "${RESULT}" == "null" ] && echo "" || echo ${RESULT}
local result
result=$(yq eval ".${1} | explode(.)" "${2}" 2>/dev/null)
[ "${result}" = "null" ] && echo "" || echo "${result}"
}
###############################################################################
# Write to yaml config file
# 1 - Modules
# 2 - Path of yaml config file
function mergeConfigModules() {
# Error: bad file '-': cannot index array with '8139cp' (strconv.ParseInt: parsing "8139cp": invalid syntax)
# When the first key is a pure number, yq will not process it as a string by default. The current solution is to insert a placeholder key.
local MS ML XF
MS="RRORG\n${1// /\\n}"
ML="$(echo -en "${MS}" | awk '{print "modules."$1":"}')"
XF=$(mktemp 2>/dev/null)
XF=${XF:-/tmp/tmp.XXXXXXXXXX}
echo -en "${ML}" | yq -p p -o y >"${XF}"
deleteConfigKey "modules.\"RRORG\"" "${XF}"
yq eval-all --inplace '. as $item ireduce ({}; . * $item)' --inplace "${2}" "${XF}" 2>/dev/null
rm -f "${XF}"
}
###############################################################################
@ -40,7 +68,7 @@ function initConfigKey() {
# 2 - Path of yaml config file
# Returns map of values
function readConfigMap() {
yq eval '.'${1}' | explode(.) | to_entries | map([.key, .value] | join(": ")) | .[]' "${2}"
yq eval ".${1} | explode(.) | to_entries | map([.key, .value] | join(\": \")) | .[]" "${2}" 2>/dev/null
}
###############################################################################
@ -49,7 +77,7 @@ function readConfigMap() {
# 2 - Path of yaml config file
# Returns array/map of values
function readConfigArray() {
yq eval '.'${1}'[]' "${2}"
yq eval ".${1}[]" "${2}" 2>/dev/null
}
###############################################################################
@ -58,5 +86,13 @@ function readConfigArray() {
# 2 - Path of yaml config file
# Returns array of values
function readConfigEntriesArray() {
yq eval '.'${1}' | explode(.) | to_entries | map([.key])[] | .[]' "${2}"
yq eval ".${1} | explode(.) | to_entries | map([.key])[] | .[]" "${2}" 2>/dev/null
}
###############################################################################
# Check yaml config file
# 1 - Path of yaml config file
# Returns error information
function checkConfigFile() {
yq eval "${1}" 2>&1
}

View File

@ -1,30 +1,48 @@
RR_VERSION="23.11.1"
#!/usr/bin/env bash
#
# Copyright (C) 2022 Ing <https://github.com/wjz304>
#
# This is free software, licensed under the MIT License.
# See /LICENSE for more information.
#
# shellcheck disable=SC2034
RR_VERSION="25.12.0"
RR_RELEASE=""
RR_TITLE="RR v${RR_VERSION}"
# Define paths
PART1_PATH="/mnt/p1"
PART2_PATH="/mnt/p2"
PART3_PATH="/mnt/p3"
DSMROOT_PATH="/mnt/dsmroot"
TMP_PATH="/tmp"
# CHROOT_PATH: Defined during PC debugging.
PART1_PATH="${CHROOT_PATH}/mnt/p1"
PART2_PATH="${CHROOT_PATH}/mnt/p2"
PART3_PATH="${CHROOT_PATH}/mnt/p3"
TMP_PATH="${CHROOT_PATH}/tmp"
UNTAR_PAT_PATH="${TMP_PATH}/pat"
RAMDISK_PATH="${TMP_PATH}/ramdisk"
LOG_FILE="${TMP_PATH}/log.txt"
USER_GRUB_CONFIG="${PART1_PATH}/boot/grub/grub.cfg"
USER_GRUBENVFILE="${PART1_PATH}/boot/grub/grubenv"
USER_RSYSENVFILE="${PART1_PATH}/boot/grub/rsysenv"
USER_CONFIG_FILE="${PART1_PATH}/user-config.yml"
GRUB_PATH="${PART1_PATH}/boot/grub"
USER_LOCALE_FILE="${PART1_PATH}/.locale"
ORI_ZIMAGE_FILE="${PART2_PATH}/zImage"
ORI_RDGZ_FILE="${PART2_PATH}/rd.gz"
RR_BZIMAGE_FILE="${PART3_PATH}/bzImage-rr"
RR_RAMDISK_FILE="${PART3_PATH}/initrd-rr"
RR_RAMUSER_FILE="${PART3_PATH}/initrd-rru"
MC_RAMDISK_FILE="${PART3_PATH}/microcode.img"
MOD_ZIMAGE_FILE="${PART3_PATH}/zImage-dsm"
MOD_RDGZ_FILE="${PART3_PATH}/initrd-dsm"
ADD_TIPS_FILE="${PART3_PATH}/AddTips"
LKM_PATH="${PART3_PATH}/lkms"
CKS_PATH="${PART3_PATH}/cks"
LKMS_PATH="${PART3_PATH}/lkms"
ADDONS_PATH="${PART3_PATH}/addons"
MODULES_PATH="${PART3_PATH}/modules"
USER_UP_PATH="${PART3_PATH}/users"
SCRIPTS_PATH="${PART3_PATH}/scripts"

View File

@ -5,58 +5,334 @@
# This is free software, licensed under the MIT License.
# See /LICENSE for more information.
#
# This script is a CLI to RR.
#
# # Backup the original python3 executable.
# sudo mv -f "$(realpath $(which python3))/EXTERNALLY-MANAGED" "$(realpath $(which python3))/EXTERNALLY-MANAGED.bak" 2>/dev/null || true
# sudo pip3 install -U click requests requests-toolbelt qrcode[pil] beautifulsoup4
import os, click
WORK_PATH = os.path.abspath(os.path.dirname(__file__))
@click.group()
def cli():
"""
The CLI is a commands to arpl.
The CLI is a commands to RR.
"""
pass
def mutually_exclusive_options(ctx, param, value):
other_option = "file" if param.name == "data" else "data"
if value is not None and ctx.params.get(other_option) is not None:
raise click.UsageError(f"Illegal usage: `{param.name}` is mutually exclusive with `{other_option}`.")
return value
def validate_required_param(ctx, param, value):
if not value and "file" not in ctx.params and "data" not in ctx.params:
raise click.MissingParameter(param_decls=[param.name])
return value
def __fullversion(ver):
arr = ver.split('-')
a, b, c = (arr[0].split('.') + ['0', '0', '0'])[:3]
d = arr[1] if len(arr) > 1 else '00000'
e = arr[2] if len(arr) > 2 else '0'
return f'{a}.{b}.{c}-{d}-{e}'
@cli.command()
@click.option('-d', "--data", type=str, required=True, help="The data of QRCode.")
@click.option('-l', "--location", type=str, required=True, help="The location of QRCode. (tl, tr, bl, br, mid)")
@click.option('-o', "--output", type=str, required=True, help="The output file of QRCode.")
def makeqr(data, location, output):
@click.option("-d", "--data", type=str, callback=mutually_exclusive_options, is_eager=True, help="The data of QRCode.")
@click.option("-f", "--file", type=str, callback=mutually_exclusive_options, is_eager=True, help="The file of QRCode.")
@click.option("--validate", is_flag=True, callback=validate_required_param, expose_value=False, is_eager=True)
@click.option("-l", "--location", type=click.IntRange(0, 7), required=True, help="The location of QRCode. (range 0<=x<=7)")
@click.option("-o", "--output", type=str, required=True, help="The output file of QRCode.")
def makeqr(data, file, location, output):
"""
Generate a QRCode.
"""
import qrcode
from PIL import Image
qr = qrcode.QRCode(version=1, box_size=10, error_correction=qrcode.constants.ERROR_CORRECT_H, border=4)
qr.add_data(data)
qr.make(fit=True)
img = qr.make_image(fill_color="purple", back_color="white")
img = img.convert("RGBA")
pixels = img.load()
for i in range(img.size[0]):
for j in range(img.size[1]):
if pixels[i, j] == (255, 255, 255, 255):
pixels[i, j] = (255, 255, 255, 0)
if os.path.exists(os.path.join(WORK_PATH, "logo.png")):
icon = Image.open(os.path.join(WORK_PATH, "logo.png"))
icon = icon.convert("RGBA")
img.paste(icon.resize((int(img.size[0] / 5), int(img.size[1] / 5))), (int((img.size[0] - int(img.size[0] / 5)) / 2), int((img.size[1] - int(img.size[1] / 5)) / 2)))
alpha = Image.new("RGBA", (img.size[0] * 4, img.size[1] * 3), (0, 0, 0, 0))
if location == "tl":
loc = (0, 0)
elif location == "tr":
loc = (alpha.size[0] - img.size[0], 0)
elif location == "bl":
loc = (0, alpha.size[1] - img.size[1])
elif location == "br":
loc = (alpha.size[0] - img.size[0], alpha.size[1] - img.size[1])
else: # elif location == "mid":
loc = (int((alpha.size[0] - img.size[0]) / 2), int((alpha.size[1] - img.size[1]) / 2))
try:
import fcntl, struct
import qrcode
from PIL import Image
alpha.paste(img, loc)
alpha.save(output)
FBIOGET_VSCREENINFO = 0x4600
FBIOPUT_VSCREENINFO = 0x4601
FBIOGET_FSCREENINFO = 0x4602
FBDEV = "/dev/fb0"
if data:
qr = qrcode.QRCode(version=1, box_size=10, error_correction=qrcode.constants.ERROR_CORRECT_H, border=4)
qr.add_data(data)
qr.make(fit=True)
img = qr.make_image(fill_color="purple", back_color="white").convert("RGBA")
pixels = img.load()
for i in range(img.size[0]):
for j in range(img.size[1]):
if pixels[i, j] == (255, 255, 255, 255):
pixels[i, j] = (255, 255, 255, 0)
logo_path = os.path.join(WORK_PATH, "logo.png")
if os.path.exists(logo_path):
icon = Image.open(logo_path).convert("RGBA")
img.paste(icon.resize((img.size[0] // 5, img.size[1] // 5)), ((img.size[0] - img.size[0] // 5) // 2, (img.size[1] - img.size[1] // 5) // 2))
elif file:
img = Image.open(file)
# img = img.convert("RGBA")
# pixels = img.load()
# for i in range(img.size[0]):
# for j in range(img.size[1]):
# if pixels[i, j] == (255, 255, 255, 255):
# pixels[i, j] = (255, 255, 255, 0)
else:
raise click.UsageError("Either data or file must be provided.")
with open(FBDEV, "rb") as fb:
vi = fcntl.ioctl(fb, FBIOGET_VSCREENINFO, bytes(160))
res = struct.unpack("I" * 40, vi)
xres, yres = res[0], res[1] if res[0] and res[1] else (1920, 1080)
img = img.resize((xres // 8, xres // 8))
alpha = Image.new("RGBA", (xres, yres), (0, 0, 0, 0))
loc = (img.size[0] * location, alpha.size[1] - img.size[1])
alpha.paste(img, loc)
alpha.save(output)
except Exception as e:
click.echo(f"Error: {e}")
@cli.command()
@click.option("-p", "--platforms", type=str, help="The platforms of Syno.")
def getmodels(platforms=None):
"""
Get Syno Models.
"""
import re, json, requests, urllib3
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry # type: ignore
adapter = HTTPAdapter(max_retries=Retry(total=3, backoff_factor=1, status_forcelist=[500, 502, 503, 504]))
session = requests.Session()
session.mount("http://", adapter)
session.mount("https://", adapter)
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
PS = platforms.lower().replace(",", " ").split() if platforms else []
models = []
try:
url = "http://update7.synology.com/autoupdate/genRSS.php?include_beta=1"
#url = "https://update7.synology.com/autoupdate/genRSS.php?include_beta=1"
req = session.get(url, timeout=10, verify=False)
req.encoding = "utf-8"
p = re.compile(r"<mUnique>(.*?)</mUnique>.*?<mLink>(.*?)</mLink>", re.MULTILINE | re.DOTALL)
data = p.findall(req.text)
for item in data:
if not "DSM" in item[1]:
continue
arch = item[0].split("_")[1]
name = item[1].split("/")[-1].split("_")[1].replace("%2B", "+")
if PS and arch.lower() not in PS:
continue
if not any(m["name"] == name for m in models):
models.append({"name": name, "arch": arch})
models.sort(key=lambda k: (k["arch"], k["name"]))
except Exception as e:
# click.echo(f"Error: {e}")
pass
print(json.dumps(models, indent=4))
@cli.command()
@click.option("-p", "--platforms", type=str, help="The platforms of Syno.")
def getmodelsbykb(platforms=None):
"""
Get Syno Models.
"""
import re, json, requests, urllib3
from bs4 import BeautifulSoup
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry # type: ignore
adapter = HTTPAdapter(max_retries=Retry(total=3, backoff_factor=1, status_forcelist=[500, 502, 503, 504]))
session = requests.Session()
session.mount("http://", adapter)
session.mount("https://", adapter)
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
PS = platforms.lower().replace(",", " ").split() if platforms else []
models = []
try:
url = "https://kb.synology.com/en-us/DSM/tutorial/What_kind_of_CPU_does_my_NAS_have"
#url = "https://kb.synology.cn/zh-cn/DSM/tutorial/What_kind_of_CPU_does_my_NAS_have"
req = session.get(url, timeout=10, verify=False)
req.encoding = "utf-8"
bs = BeautifulSoup(req.text, "html.parser")
p = re.compile(r"data: (.*?),$", re.MULTILINE | re.DOTALL)
data = json.loads(p.search(bs.find("script", string=p).prettify()).group(1))
model = "(.*?)" # (.*?): all, FS6400: one
p = re.compile(r"<td>{}<\/td><td>(.*?)<\/td><td>(.*?)<\/td><td>(.*?)<\/td><td>(.*?)<\/td><td>(.*?)<\/td><td>(.*?)<\/td>".format(model), re.MULTILINE | re.DOTALL)
it = p.finditer(data["preload"]["content"].replace("\n", "").replace("\t", ""))
for i in it:
d = i.groups()
if len(d) == 6:
d = model + d
if PS and d[5].lower() not in PS:
continue
models.append({"name": d[0].split("<br")[0], "arch": d[5].lower()})
except Exception as e:
# click.echo(f"Error: {e}")
pass
models.sort(key=lambda x: (x["arch"], x["name"]))
print(json.dumps(models, indent=4))
@cli.command()
@click.option("-m", "--model", type=str, required=True, help="The model of Syno.")
@click.option("-v", "--version", type=str, required=True, help="The version of Syno.")
def getpats4mv(model, version):
import json, requests, urllib3
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry # type: ignore
adapter = HTTPAdapter(max_retries=Retry(total=3, backoff_factor=1, status_forcelist=[500, 502, 503, 504]))
session = requests.Session()
session.mount("http://", adapter)
session.mount("https://", adapter)
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
pats = {}
try:
urlInfo = "https://www.synology.com/api/support/findDownloadInfo?lang=en-us"
urlSteps = "https://www.synology.com/api/support/findUpgradeSteps?"
#urlInfo = "https://www.synology.cn/api/support/findDownloadInfo?lang=zh-cn"
#urlSteps = "https://www.synology.cn/api/support/findUpgradeSteps?"
major = f"&major={version.split('.')[0]}" if len(version.split('.')) > 0 else ""
minor = f"&minor={version.split('.')[1]}" if len(version.split('.')) > 1 else ""
req = session.get(f"{urlInfo}&product={model.replace('+', '%2B')}{major}{minor}", timeout=10, verify=False)
req.encoding = "utf-8"
data = json.loads(req.text)
build_ver = data['info']['system']['detail'][0]['items'][0]['build_ver']
build_num = data['info']['system']['detail'][0]['items'][0]['build_num']
buildnano = data['info']['system']['detail'][0]['items'][0]['nano']
V = __fullversion(f"{build_ver}-{build_num}-{buildnano}")
if V not in pats:
pats[V] = {
'url': data['info']['system']['detail'][0]['items'][0]['files'][0]['url'].split('?')[0],
'sum': data['info']['system']['detail'][0]['items'][0]['files'][0].get('checksum', '0' * 32)
}
from_ver = min(I['build'] for I in data['info']['pubVers'])
for I in data['info']['productVers']:
if not I['version'].startswith(version):
continue
if not major or not minor:
majorTmp = f"&major={I['version'].split('.')[0]}" if len(I['version'].split('.')) > 0 else ""
minorTmp = f"&minor={I['version'].split('.')[1]}" if len(I['version'].split('.')) > 1 else ""
reqTmp = session.get(f"{urlInfo}&product={model.replace('+', '%2B')}{majorTmp}{minorTmp}", timeout=10, verify=False)
reqTmp.encoding = "utf-8"
dataTmp = json.loads(reqTmp.text)
build_ver = dataTmp['info']['system']['detail'][0]['items'][0]['build_ver']
build_num = dataTmp['info']['system']['detail'][0]['items'][0]['build_num']
buildnano = dataTmp['info']['system']['detail'][0]['items'][0]['nano']
V = __fullversion(f"{build_ver}-{build_num}-{buildnano}")
if V not in pats:
pats[V] = {
'url': dataTmp['info']['system']['detail'][0]['items'][0]['files'][0]['url'].split('?')[0],
'sum': dataTmp['info']['system']['detail'][0]['items'][0]['files'][0].get('checksum', '0' * 32)
}
for J in I['versions']:
to_ver = J['build']
reqSteps = session.get(f"{urlSteps}&product={model.replace('+', '%2B')}&from_ver={from_ver}&to_ver={to_ver}", timeout=10, verify=False)
if reqSteps.status_code != 200:
continue
reqSteps.encoding = "utf-8"
dataSteps = json.loads(reqSteps.text)
for S in dataSteps['upgrade_steps']:
if not S.get('full_patch') or not S['build_ver'].startswith(version):
continue
V = __fullversion(f"{S['build_ver']}-{S['build_num']}-{S['nano']}")
if V not in pats:
reqPat = session.head(S['files'][0]['url'].split('?')[0], timeout=10, verify=False)
if reqPat.status_code == 403:
continue
pats[V] = {
'url': S['files'][0]['url'].split('?')[0],
'sum': S['files'][0].get('checksum', '0' * 32)
}
except Exception as e:
# click.echo(f"Error: {e}")
pass
pats = {k: pats[k] for k in sorted(pats.keys(), reverse=True)}
print(json.dumps(pats, indent=4))
@cli.command()
@click.option("-p", "--models", type=str, help="The models of Syno.")
def getpats(models=None):
import re, json, requests, urllib3
from bs4 import BeautifulSoup
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry # type: ignore
adapter = HTTPAdapter(max_retries=Retry(total=3, backoff_factor=1, status_forcelist=[500, 502, 503, 504]))
session = requests.Session()
session.mount("http://", adapter)
session.mount("https://", adapter)
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
MS = models.lower().replace(",", " ").split() if models else []
pats = {}
try:
req = session.get('https://archive.synology.com/download/Os/DSM', timeout=10, verify=False)
req.encoding = 'utf-8'
bs = BeautifulSoup(req.text, 'html.parser')
p = re.compile(r"(.*?)-(.*?)", re.MULTILINE | re.DOTALL)
l = bs.find_all('a', string=p)
for i in l:
ver = i.attrs['href'].split('/')[-1]
if not ver.startswith('7'):
continue
req = session.get(f'https://archive.synology.com{i.attrs["href"]}', timeout=10, verify=False)
req.encoding = 'utf-8'
bs = BeautifulSoup(req.text, 'html.parser')
p = re.compile(r"DSM_(.*?)_(.*?).pat", re.MULTILINE | re.DOTALL)
data = bs.find_all('a', string=p)
for item in data:
rels = p.search(item.attrs['href'])
if rels:
model, _ = rels.groups()
model = model.replace('%2B', '+')
if MS and model.lower() not in MS:
continue
if model not in pats:
pats[model] = {}
pats[model][__fullversion(ver)] = item.attrs['href']
except Exception as e:
# click.echo(f"Error: {e}")
pass
print(json.dumps(pats, indent=4))
if __name__ == "__main__":

View File

@ -1,52 +1,50 @@
#!/usr/bin/env bash
#
# Copyright (C) 2022 Ing <https://github.com/wjz304>
#
# This is free software, licensed under the MIT License.
# See /LICENSE for more information.
#
[ -z "${WORK_PATH}" -o ! -d "${WORK_PATH}/include" ] && WORK_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")/../" >/dev/null 2>&1 && pwd)"
[ -z "${WORK_PATH}" ] || [ ! -d "${WORK_PATH}/include" ] && WORK_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")/../" >/dev/null 2>&1 && pwd)"
. ${WORK_PATH}/include/consts.sh
. ${WORK_PATH}/include/configFile.sh
. ${WORK_PATH}/include/i18n.sh
. "${WORK_PATH}/include/consts.sh"
. "${WORK_PATH}/include/configFile.sh"
. "${WORK_PATH}/include/i18n.sh"
###############################################################################
# Read key value from model config file
# 1 - Model
# 2 - Key
# Return Value
function readModelKey() {
readConfigKey "${2}" "${WORK_PATH}/model-configs/${1}.yml"
}
###############################################################################
# Read Entries as map(key=value) from model config
# 1 - Model
# 2 - Path of key
# Returns map of values
function readModelMap() {
readConfigMap "${2}" "${WORK_PATH}/model-configs/${1}.yml"
}
###############################################################################
# Read an array from model config
# 1 - Model
# 2 - Path of key
# Returns array/map of values
function readModelArray() {
readConfigArray "${2}" "${WORK_PATH}/model-configs/${1}.yml"
# Check loader disk
function checkBootLoader() {
while read -r KNAME RO; do
[ -z "${KNAME}" ] && continue
[ "${RO}" = "0" ] && continue
hdparm -r0 "${KNAME}" >/dev/null 2>&1 || true
done <<<"$(lsblk -pno KNAME,RO 2>/dev/null)"
[ ! -w "${PART1_PATH}" ] && return 1
[ ! -w "${PART2_PATH}" ] && return 1
[ ! -w "${PART3_PATH}" ] && return 1
type awk >/dev/null 2>&1 || return 1
type cut >/dev/null 2>&1 || return 1
type sed >/dev/null 2>&1 || return 1
type tar >/dev/null 2>&1 || return 1
return 0
}
###############################################################################
# Check if loader is fully configured
# Returns 1 if not
function loaderIsConfigured() {
SN="$(readConfigKey "sn" "${USER_CONFIG_FILE}")"
[ -z "${SN}" ] && return 1
[ ! -f "${MOD_ZIMAGE_FILE}" ] && return 1
[ ! -f "${MOD_RDGZ_FILE}" ] && return 1
[ -z "$(readConfigKey "zimage-hash" "${USER_CONFIG_FILE}")" ] && return 1
[ -z "$(readConfigKey "ramdisk-hash" "${USER_CONFIG_FILE}")" ] && return 1
return 0 # OK
}
###############################################################################
# Just show error message and dies
function die() {
echo -e "\033[1;41m$@\033[0m"
echo -e "\033[1;41m${*}\033[0m"
exit 1
}
@ -60,32 +58,48 @@ function dieLog() {
exit 1
}
###############################################################################
# Check if an item exists in an array
# 1 - Item
# 2.. - Array
# Return 0 if exists
function arrayExistItem() {
local ITEM="${1}"
shift
for i in "$@"; do
[ "${i}" = "${ITEM}" ] && return 0
done
return 1
}
###############################################################################
# Generate a number with 6 digits from 1 to 30000
function random() {
printf "%06d" $((${RANDOM} % 30000 + 1))
printf "%06d" $((RANDOM % 30000 + 1))
}
###############################################################################
# Generate a hexa number from 0x00 to 0xFF
# Generate a hex number from 0x00 to 0xFF
function randomhex() {
printf "&02X" "$((${RANDOM} % 255 + 1))"
}
###############################################################################
# Generate a random letter
function generateRandomLetter() {
for i in A B C D E F G H J K L M N P Q R S T V W X Y Z; do
echo ${i}
done | sort -R | tail -1
printf "%02X" $((RANDOM % 255 + 1))
}
###############################################################################
# Generate a random digit (0-9A-Z)
function generateRandomValue() {
for i in 0 1 2 3 4 5 6 7 8 9 A B C D E F G H J K L M N P Q R S T V W X Y Z; do
echo ${i}
done | sort -R | tail -1
function genRandomDigit() {
echo {0..9} | tr ' ' '\n' | sort -R | head -1
}
###############################################################################
# Generate a random letter
function genRandomLetter() {
echo {A..Z} | tr ' ' '\n' | grep -v '[IO]' | sort -R | head -1
}
###############################################################################
# Generate a random digit (0-9A-Z)
function genRandomValue() {
echo {0..9} {A..Z} | tr ' ' '\n' | grep -v '[IO]' | sort -R | head -1
}
###############################################################################
@ -93,17 +107,21 @@ function generateRandomValue() {
# 1 - Model
# Returns serial number
function generateSerial() {
SERIAL="$(readModelArray "${1}" "serial.prefix" | sort -R | tail -1)"
SERIAL+=$(readModelKey "${1}" "serial.middle")
case "$(readModelKey "${1}" "serial.suffix")" in
local PREFIX MIDDLE SUFFIX SERIAL
PREFIX="$(readConfigArray "${1}.prefix" "${WORK_PATH}/serialnumber.yml" 2>/dev/null | sort -R | head -1)"
MIDDLE="$(readConfigArray "${1}.middle" "${WORK_PATH}/serialnumber.yml" 2>/dev/null | sort -R | head -1)"
SUFFIX="$(readConfigKey "${1}.suffix" "${WORK_PATH}/serialnumber.yml" 2>/dev/null)"
SERIAL="${PREFIX:-"0000"}${MIDDLE:-"XXX"}"
case "${SUFFIX:-"alpha"}" in
numeric)
SERIAL+=$(random)
SERIAL+="$(random)"
;;
alpha)
SERIAL+=$(generateRandomLetter)$(generateRandomValue)$(generateRandomValue)$(generateRandomValue)$(generateRandomValue)$(generateRandomLetter)
SERIAL+="$(genRandomLetter)$(genRandomValue)$(genRandomValue)$(genRandomValue)$(genRandomValue)$(genRandomLetter)"
;;
esac
echo ${SERIAL}
echo "${SERIAL}"
}
###############################################################################
@ -112,87 +130,88 @@ function generateSerial() {
# 2 - number
# Returns serial number
function generateMacAddress() {
PRE="$(readModelArray "${1}" "serial.macpre")"
SUF="$(printf '%02x%02x%02x' $((${RANDOM} % 256)) $((${RANDOM} % 256)) $((${RANDOM} % 256)))"
local MACPRE MACSUF NUM MACS
MACPRE="$(readConfigArray "${1}.macpre" "${WORK_PATH}/serialnumber.yml" 2>/dev/null)"
MACSUF="$(printf '%02x%02x%02x' $((RANDOM % 256)) $((RANDOM % 256)) $((RANDOM % 256)))"
NUM=${2:-1}
MACS=""
for I in $(seq 1 ${NUM}); do
printf '%06x%06x' $((0x${PRE:-"001132"})) $(($((0x${SUF})) + ${I}))
[ ${I} -lt ${NUM} ] && printf ' '
MACS+="$(printf '%06x%06x' $((0x${MACPRE:-"001132"})) $((0x${MACSUF} + I)))"
[ ${I} -lt ${NUM} ] && MACS+=" "
done
echo "${MACS}"
return 0
}
###############################################################################
# Validate a serial number for a model
# 1 - Model
# 2 - Serial number to test
# Returns 1 if serial number is valid
# Returns 1 if serial number is invalid
function validateSerial() {
PREFIX=$(readModelArray "${1}" "serial.prefix")
MIDDLE=$(readModelKey "${1}" "serial.middle")
S=${2:0:4}
P=${2:4:3}
local PREFIX MIDDLE SUFFIX P M S L
PREFIX="$(readConfigArray "${1}.prefix" "${WORK_PATH}/serialnumber.yml" 2>/dev/null)"
MIDDLE="$(readConfigArray "${1}.middle" "${WORK_PATH}/serialnumber.yml" 2>/dev/null)"
SUFFIX="$(readConfigKey "${1}.suffix" "${WORK_PATH}/serialnumber.yml" 2>/dev/null)"
P=${2:0:4}
M=${2:4:3}
S=${2:7}
L=${#2}
if [ ${L} -ne 13 ]; then
echo 0
return
return 1
fi
echo "${PREFIX}" | grep -q "${S}"
if [ $? -eq 1 ]; then
echo 0
return
if ! arrayExistItem ${P} ${PREFIX}; then
return 1
fi
if [ "${MIDDLE}" != "${P}" ]; then
echo 0
return
if ! arrayExistItem ${M} ${MIDDLE}; then
return 1
fi
echo 1
}
###############################################################################
# Check if a item exists into array
# 1 - Item
# 2.. - Array
# Return 0 if exists
function arrayExistItem() {
EXISTS=1
ITEM="${1}"
shift
for i in "$@"; do
[ "${i}" = "${ITEM}" ] || continue
EXISTS=0
break
done
return ${EXISTS}
case "${SUFFIX:-"alpha"}" in
numeric)
if ! echo "${S}" | grep -q "^[0-9]\{6\}$"; then
return 1
fi
;;
alpha)
if ! echo "${S}" | grep -q "^[A-Z][0-9][0-9][0-9][0-9][A-Z]$"; then
return 1
fi
;;
esac
return 0
}
###############################################################################
# Get values in .conf K=V file
# 1 - key
# 2 - file
# 1 - file
# 2 - key
function _get_conf_kv() {
grep "${1}" "${2}" | sed "s|^${1}=\"\(.*\)\"$|\1|g"
grep "^${2}=" "${1}" 2>/dev/null | cut -d'=' -f2- | sed 's/^"//;s/"$//' 2>/dev/null
return $?
}
###############################################################################
# Replace/remove/add values in .conf K=V file
# 1 - name
# 2 - new_val
# 3 - path
# 1 - file
# 2 - key
# 3 - value
function _set_conf_kv() {
# Delete
if [ -z "${2}" ]; then
sed -i "${3}" -e "s/^${1}=.*$//"
if [ -z "${3}" ]; then
sed -i "/^${2}=/d" "${1}" 2>/dev/null
return $?
fi
# Replace
if grep -q "^${1}=" "${3}"; then
sed -i "${3}" -e "s\"^${1}=.*\"${1}=\\\"${2}\\\"\""
if grep -q "^${2}=" "${1}" 2>/dev/null; then
sed -i "s#^${2}=.*#${2}=\"${3}\"#" "${1}" 2>/dev/null
return $?
fi
# Add if doesn't exist
echo "${1}=\"${2}\"" >>"${3}"
mkdir -p "$(dirname "${1}" 2>/dev/null)" 2>/dev/null
echo "${2}=\"${3}\"" >>"${1}" 2>/dev/null
return $?
}
###############################################################################
@ -200,12 +219,24 @@ function _set_conf_kv() {
# @ - url list
function _get_fastest() {
local speedlist=""
for I in $@; do
speed=$(ping -c 1 -W 5 ${I} 2>/dev/null | awk '/time=/ {print $7}' | cut -d '=' -f 2)
speedlist+="${I} ${speed:-999}\n"
done
fastest="$(echo -e "${speedlist}" | tr -s '\n' | sort -k2n | head -1 | awk '{print $1}')"
echo "${fastest}"
if type ping >/dev/null 2>&1; then
for I in "$@"; do
speed=$(LC_ALL=C ping -c 1 -W 5 "${I}" 2>/dev/null | awk -F'[= ]' '/time=/ {for(i=1;i<=NF;i++) if ($i=="time") print $(i+1)}')
speedlist+="${I} ${speed:-999}\n" # Assign default value 999 if speed is empty
done
else
for I in "$@"; do
speed=$(curl -skL -m 10 --connect-timeout 10 -w '%{time_total}' "${I}" -o /dev/null)
speed=$(awk "BEGIN {print (${speed:-0.999} * 1000)}")
speedlist+="${I} ${speed:-999}\n" # Assign default value 999 if speed is empty
done
fi
local fastest
fastest="$(echo -e "${speedlist}" | tr -s '\n' | awk '$2 != "999"' | sort -k2n | head -1)"
URL="$(echo "${fastest}" | awk '{print $1}')"
SPD="$(echo "${fastest}" | awk '{print $2}')" # It is a float type
echo "${URL:-${1}}"
[ "$(echo "${SPD:-999}" | cut -d'.' -f1)" -ge 999 ] && return 1 || return 0
}
###############################################################################
@ -213,136 +244,265 @@ function _get_fastest() {
# @1 -mac1,mac2,mac3...
function _sort_netif() {
ETHLIST=""
ETHX=$(ls /sys/class/net/ | grep eth) # real network cards list
for ETH in ${ETHX}; do
MAC="$(cat /sys/class/net/${ETH}/address | sed 's/://g' | tr '[:upper:]' '[:lower:]')"
BUS=$(ethtool -i ${ETH} | grep bus-info | awk '{print $2}')
for F in /sys/class/net/eth*; do
[ ! -e "${F}" ] && continue
local ETH MAC BUS
ETH="$(basename "${F}")"
MAC="$(cat "/sys/class/net/${ETH}/address" 2>/dev/null | sed 's/://g; s/.*/\L&/')"
BUS="$(ethtool -i "${ETH}" 2>/dev/null | grep bus-info | cut -d' ' -f2)"
ETHLIST="${ETHLIST}${BUS} ${MAC} ${ETH}\n"
done
ETHLISTTMPM=""
ETHLISTTMPB="$(echo -e "${ETHLIST}" | sort)"
if [ -n "${1}" ]; then
MACS=$(echo "${1}" | sed 's/://g' | tr '[:upper:]' '[:lower:]' | tr ',' ' ')
ETHLISTTMPC=""
ETHLISTTMPF=""
MACS="$(echo "${1}" | sed 's/://g; s/,/ /g; s/.*/\L&/')"
for MACX in ${MACS}; do
ETHLISTTMPC="${ETHLISTTMPC}$(echo -e "${ETHLIST}" | grep "${MACX}")\n"
ETHLISTTMPM="${ETHLISTTMPM}$(echo -e "${ETHLISTTMPB}" | grep "${MACX}")\n"
ETHLISTTMPB="$(echo -e "${ETHLISTTMPB}" | grep -v "${MACX}")\n"
done
while read -r BUS MAC ETH; do
[ -z "${MAC}" ] && continue
if echo "${MACS}" | grep -q "${MAC}"; then continue; fi
ETHLISTTMPF="${ETHLISTTMPF}${BUS} ${MAC} ${ETH}\n"
done <<EOF
$(echo -e ${ETHLIST} | sort)
EOF
ETHLIST="${ETHLISTTMPC}${ETHLISTTMPF}"
else
ETHLIST="$(echo -e "${ETHLIST}" | sort)"
fi
ETHLIST="$(echo -e "${ETHLIST}" | grep -v '^$')"
echo -e "${ETHLIST}" >${TMP_PATH}/ethlist
# cat ${TMP_PATH}/ethlist
ETHLIST="$(echo -e "${ETHLISTTMPM}${ETHLISTTMPB}" | grep -v '^$')"
ETHSEQ="$(echo -e "${ETHLIST}" | awk '{print $3}' | sed 's/eth//g')"
ETHNUM="$(echo -e "${ETHLIST}" | wc -l)"
# echo "${ETHSEQ}"
# sort
IDX=0
while true; do
# cat ${TMP_PATH}/ethlist
[ ${IDX} -ge $(wc -l <${TMP_PATH}/ethlist) ] && break
ETH=$(cat ${TMP_PATH}/ethlist | sed -n "$((${IDX} + 1))p" | awk '{print $3}')
# echo "ETH: ${ETH}"
if [ -n "${ETH}" ] && [ ! "${ETH}" = "eth${IDX}" ]; then
# echo "change ${ETH} <=> eth${IDX}"
ip link set dev eth${IDX} down
ip link set dev ${ETH} down
sleep 1
ip link set dev eth${IDX} name ethN
ip link set dev ${ETH} name eth${IDX}
ip link set dev ethN name ${ETH}
sleep 1
ip link set dev eth${IDX} up
ip link set dev ${ETH} up
sleep 1
sed -i "s/eth${IDX}/ethN/" ${TMP_PATH}/ethlist
sed -i "s/${ETH}/eth${IDX}/" ${TMP_PATH}/ethlist
sed -i "s/ethN/${ETH}/" ${TMP_PATH}/ethlist
sleep 1
fi
IDX=$((${IDX} + 1))
done
rm -f ${TMP_PATH}/ethlist
if [ ! "${ETHSEQ}" = "$(seq 0 $((${ETHNUM:0} - 1)))" ]; then
/etc/init.d/S41dhcpcd stop >/dev/null 2>&1
/etc/init.d/S40network stop >/dev/null 2>&1
for i in $(seq 0 $((${ETHNUM:0} - 1))); do
ip link set dev "eth${i}" name "tmp${i}"
done
I=0
for i in ${ETHSEQ}; do
ip link set dev "tmp${i}" name "eth${I}"
I=$((I + 1))
done
/etc/init.d/S40network start >/dev/null 2>&1
/etc/init.d/S41dhcpcd start >/dev/null 2>&1
fi
return 0
}
###############################################################################
# get bus of disk
# 1 - device path
function getBus() {
BUS=""
# usb/ata(sata/ide)/scsi
[ -z "${BUS}" ] && BUS=$(udevadm info --query property --name "${1}" 2>/dev/null | grep ID_BUS | cut -d= -f2 | sed 's/ata/sata/')
# usb/sata(sata/ide)/nvme
[ -z "${BUS}" ] && BUS=$(lsblk -dpno KNAME,TRAN 2>/dev/null | grep "${1}" | awk '{print $2}')
# usb/scsi(sata/ide)/virtio(scsi/virtio)/nvme
[ -z "${BUS}" ] && BUS=$(lsblk -dpno KNAME,SUBSYSTEMS 2>/dev/null | grep "${1}" | awk -F':' '{print $(NF-1)}')
local BUS=""
[ -f "/.dockerenv" ] && BUS="docker"
# usb/ata(ide)/sata/sas/spi(scsi)/virtio/mmc/nvme
[ -z "${BUS}" ] && BUS=$(lsblk -dpno KNAME,TRAN 2>/dev/null | grep "${1} " | awk '{print $2}' | sed 's/^ata$/ide/' | sed 's/^spi$/scsi/') #Spaces are intentional
# usb/scsi(ide/sata/sas)/virtio/mmc/nvme/vmbus/xen(xvd)
[ -z "${BUS}" ] && BUS=$(lsblk -dpno KNAME,SUBSYSTEMS 2>/dev/null | grep "${1} " | awk '{split($2,a,":"); if(length(a)>1) print a[length(a)-1]}' | sed 's/_host//' | sed 's/^.*xen.*$/xen/') # Spaces are intentional
[ -z "${BUS}" ] && BUS="unknown"
echo "${BUS}"
return 0
}
###############################################################################
# get IP
# 1 - ethN
function getIP() {
IP=""
if [ -n "${1}" -a -d "/sys/class/net/${1}" ]; then
IP=$(ip route show dev ${1} 2>/dev/null | sed -n 's/.* via .* src \(.*\) metric .*/\1/p')
[ -z "${IP}" ] && IP=$(ip addr show ${1} | grep -E "inet .* eth" | awk '{print $2}' | cut -f1 -d'/' | head -1)
local IP=""
if [ -n "${1}" ] && [ -d "/sys/class/net/${1}" ]; then
IP=$(ip addr show "${1}" scope global 2>/dev/null | grep -E "inet .* eth" | awk '{print $2}' | cut -d'/' -f1 | head -1)
[ -z "${IP}" ] && IP=$(ip route show dev "${1}" 2>/dev/null | sed -n 's/.* via .* src \(.*\) metric .*/\1/p' | head -1)
else
IP=$(ip route show 2>/dev/null | sed -n 's/.* via .* src \(.*\) metric .*/\1/p' | head -1)
[ -z "${IP}" ] && IP=$(ip addr show | grep -E "inet .* eth" | awk '{print $2}' | cut -f1 -d'/' | head -1)
IP=$(ip addr show scope global 2>/dev/null | grep -E "inet .* eth" | awk '{print $2}' | cut -d'/' -f1 | head -1)
[ -z "${IP}" ] && IP=$(ip route show 2>/dev/null | sed -n 's/.* via .* src \(.*\) metric .*/\1/p' | head -1)
fi
echo "${IP}"
return 0
}
###############################################################################
# get logo of model
# 1 - model
function getLogo() {
MODEL="${1}"
local MODEL="${1}"
local fastest
local STATUS
rm -f "${PART3_PATH}/logo.png"
fastest=$(_get_fastest "www.synology.com" "www.synology.cn")
STATUS=$(curl -skL -w "%{http_code}" "https://${fastest}/api/products/getPhoto?product=${MODEL/+/%2B}&type=img_s&sort=0" -o "${PART3_PATH}/logo.png")
if [ $? -ne 0 -o ${STATUS} -ne 200 -o -f "${PART3_PATH}/logo.png" ]; then
convert -rotate 180 "${PART3_PATH}/logo.png" "${PART3_PATH}/logo.png" 2>/dev/null
magick montage "${PART3_PATH}/logo.png" -background 'none' -tile '3x3' -geometry '350x210' "${PART3_PATH}/logo.png" 2>/dev/null
convert -rotate 180 "${PART3_PATH}/logo.png" "${PART3_PATH}/logo.png" 2>/dev/null
fastest="$(_get_fastest "www.synology.com" "www.synology.cn")"
STATUS=$(curl -skL --connect-timeout 10 -w "%{http_code}" "https://${fastest}/api/products/getPhoto?product=${MODEL/+/%2B}&type=img_s&sort=0" -o "${PART3_PATH}/logo.png")
if [ $? -ne 0 ] || [ "${STATUS:-0}" -ne 200 ] || [ ! -f "${PART3_PATH}/logo.png" ]; then
return 1
fi
convert -rotate 180 "${PART3_PATH}/logo.png" "${PART3_PATH}/logo.png" 2>/dev/null
magick montage "${PART3_PATH}/logo.png" -background 'none' -tile '3x3' -geometry '350x210' "${PART3_PATH}/logo.png" 2>/dev/null
convert -rotate 180 "${PART3_PATH}/logo.png" "${PART3_PATH}/logo.png" 2>/dev/null
return 0
}
###############################################################################
# check Cmdline
# 1 - key name
# 2 - key string
function checkCmdline() {
grub-editenv "${USER_GRUBENVFILE}" list 2>/dev/null | grep -q "^${1}=\"\?${2}\"\?"
}
###############################################################################
# set Cmdline
# 1 - key name
# 2 - key string
function setCmdline() {
[ -z "${1}" ] && return 1
if [ -n "${2}" ]; then
grub-editenv "${USER_GRUBENVFILE}" set "${1}=${2}"
else
grub-editenv "${USER_GRUBENVFILE}" unset "${1}"
fi
}
###############################################################################
# Find and mount the DSM root filesystem
# (based on pocopico's TCRP code)
function findAndMountDSMRoot() {
[ $(mount | grep -i "${DSMROOT_PATH}" | wc -l) -gt 0 ] && return 0
dsmrootdisk="$(blkid | grep -i linux_raid_member | grep -E "/dev/.*1:" | head -1 | awk -F ":" '{print $1}')"
[ -z "${dsmrootdisk}" ] && return -1
[ ! -d "${DSMROOT_PATH}" ] && mkdir -p "${DSMROOT_PATH}"
[ $(mount | grep -i "${DSMROOT_PATH}" | wc -l) -eq 0 ] && mount -t ext4 "${dsmrootdisk}" "${DSMROOT_PATH}"
if [ $(mount | grep -i "${DSMROOT_PATH}" | wc -l) -eq 0 ]; then
echo "Failed to mount"
return -1
# add Cmdline
# 1 - key name
# 2 - key string
function addCmdline() {
local CMDLINE
CMDLINE="$(grub-editenv "${USER_GRUBENVFILE}" list 2>/dev/null | grep "^${1}=" | cut -d'=' -f2- | sed 's/^"//;s/"$//')"
[ -n "${CMDLINE}" ] && CMDLINE="${CMDLINE} ${2}" || CMDLINE="${2}"
setCmdline "${1}" "${CMDLINE}"
}
###############################################################################
# del Cmdline
# 1 - key name
# 2 - key string
function delCmdline() {
local CMDLINE
CMDLINE="$(grub-editenv "${USER_GRUBENVFILE}" list 2>/dev/null | grep "^${1}=" | cut -d'=' -f2- | sed 's/^"//;s/"$//')"
CMDLINE="$(echo "${CMDLINE}" | sed "s/[ \t]*${2}//; s/^[ \t]*//;s/[ \t]*$//")"
setCmdline "${1}" "${CMDLINE}"
}
###############################################################################
# check CPU Intel(VT-d)/AMD(AMD-Vi)
function checkCPU_VT_d() {
lsmod | grep -q msr || modprobe msr 2>/dev/null
if grep -q "GenuineIntel" /proc/cpuinfo 2>/dev/null; then
VT_D_ENABLED=$(rdmsr 0x3a 2>/dev/null)
[ "$((${VT_D_ENABLED:-0x0} & 0x5))" -eq $((0x5)) ] && return 0
elif grep -q "AuthenticAMD" /proc/cpuinfo 2>/dev/null; then
IOMMU_ENABLED=$(rdmsr 0xC0010114 2>/dev/null)
[ "$((${IOMMU_ENABLED:-0x0} & 0x1))" -eq $((0x1)) ] && return 0
else
return 1
fi
}
###############################################################################
# check BIOS Intel(VT-d)/AMD(AMD-Vi)
function checkBIOS_VT_d() {
if grep -q "GenuineIntel" /proc/cpuinfo 2>/dev/null; then
dmesg 2>/dev/null | grep -iq "DMAR-IR.*DRHD base" && return 0
elif grep -q "AuthenticAMD" /proc/cpuinfo 2>/dev/null; then
# TODO: need check
dmesg 2>/dev/null | grep -iq "AMD-Vi.*enabled" && return 0
else
return 1
fi
}
###############################################################################
# Rebooting
# 1 - mode
function rebootTo() {
local MODES="config recovery junior uefi memtest"
if [ -z "${1}" ] || ! echo "${MODES}" | grep -wq "${1}"; then exit 1; fi
# echo "Rebooting to ${1} mode"
GRUBPATH="$(dirname "$(find "${PART1_PATH}/" -name grub.cfg 2>/dev/null | head -1)")"
[ -z "${GRUBPATH}" ] && exit 1
ENVFILE="${GRUBPATH}/grubenv"
[ ! -f "${ENVFILE}" ] && grub-editenv "${ENVFILE}" create
grub-editenv "${ENVFILE}" set next_entry="${1}"
reboot
}
###############################################################################
# connect wlanif
# 1 netif name
# 2 enable/disable (1/0)
function connectwlanif() {
[ -z "${1}" ] || [ ! -d "/sys/class/net/${1}" ] && return 1
if [ "${2}" = "0" ]; then
if [ -f "/var/run/wpa_supplicant.pid.${1}" ]; then
kill -9 "$(cat /var/run/wpa_supplicant.pid.${1})"
rm -f "/var/run/wpa_supplicant.pid.${1}"
fi
else
local CONF
CONF="$([ -f "${PART1_PATH}/wpa_supplicant.conf" ] && echo "${PART1_PATH}/wpa_supplicant.conf" || echo "")"
[ -z "${CONF}" ] && return 2
[ -f "/var/run/wpa_supplicant.pid.${1}" ] && return 0
wpa_supplicant -i "${1}" -c "${CONF}" -qq -B -P "/var/run/wpa_supplicant.pid.${1}" >/dev/null 2>&1
fi
return 0
}
###############################################################################
# Rebooting
function rebootTo() {
[ "${1}" != "junior" -a "${1}" != "config" ] && exit 1
# echo "Rebooting to ${1} mode"
GRUBPATH="$(dirname $(find ${PART1_PATH}/ -name grub.cfg | head -1))"
ENVFILE="${GRUBPATH}/grubenv"
[ ! -f "${ENVFILE}" ] && grub-editenv ${ENVFILE} create
grub-editenv ${ENVFILE} set next_entry="${1}"
reboot
# Find and mount the DSM root filesystem
function findDSMRoot() {
local DSMROOTS=""
[ -z "${DSMROOTS}" ] && DSMROOTS="$(mdadm --detail --scan 2>/dev/null | grep -v "INACTIVE-ARRAY" | grep -E "name=SynologyNAS:0|name=DiskStation:0|name=SynologyNVR:0|name=BeeStation:0" | awk '{print $2}' | uniq)"
[ -z "${DSMROOTS}" ] && DSMROOTS="$(lsblk -pno KNAME,PARTN,FSTYPE,FSVER,LABEL | grep -E "sd[a-z]{1,2}1" | grep -w "linux_raid_member" | grep "0.9" | awk '{print $1}')"
echo "${DSMROOTS}"
return 0
}
###############################################################################
# check and fix the DSM root partition
# 1 - DSM root path
function fixDSMRootPart() {
if mdadm --detail "${1}" 2>/dev/null | grep -i "State" | grep -iEq "active|FAILED|Not Started"; then
mdadm --stop "${1}" >/dev/null 2>&1
mdadm --assemble --scan >/dev/null 2>&1
T="$(blkid -o value -s TYPE "${1}" 2>/dev/null | sed 's/linux_raid_member/ext4/')"
if [ "${T}" = "btrfs" ]; then
btrfs check --readonly "${1}" >/dev/null 2>&1
else
fsck "${1}" >/dev/null 2>&1
fi
fi
}
###############################################################################
# Copy DSM files to the boot partition
# 1 - DSM root path
function copyDSMFiles() {
if [ -f "${1}/VERSION" ] && [ -f "${1}/grub_cksum.syno" ] && [ -f "${1}/GRUB_VER" ] && [ -f "${1}/zImage" ] && [ -f "${1}/rd.gz" ]; then
# Remove old model files
rm -f "${PART1_PATH}/grub_cksum.syno" "${PART1_PATH}/GRUB_VER" "${PART2_PATH}/grub_cksum.syno" "${PART2_PATH}/GRUB_VER"
rm -f "${ORI_ZIMAGE_FILE}" "${ORI_RDGZ_FILE}"
# Remove old build files
rm -f "${MOD_ZIMAGE_FILE}" "${MOD_RDGZ_FILE}" >/dev/null
# Copy new model files
cp -f "${1}/grub_cksum.syno" "${PART1_PATH}"
cp -f "${1}/GRUB_VER" "${PART1_PATH}"
cp -f "${1}/grub_cksum.syno" "${PART2_PATH}"
cp -f "${1}/GRUB_VER" "${PART2_PATH}"
cp -f "${1}/zImage" "${ORI_ZIMAGE_FILE}"
cp -f "${1}/rd.gz" "${ORI_RDGZ_FILE}"
return 0
else
return 1
fi
}
###############################################################################
# Send a webhook notification
# 1 - webhook url
# 2 - message (optional)
function sendWebhook() {
local URL="${1}"
local MSGT="Notification from ${RR_TITLE}${RR_RELEASE:+(${RR_RELEASE})}"
local MSGC="${2:-"test at $(date +'%Y-%m-%d %H:%M:%S')"}"
[ -z "${URL}" ] && return 1
curl -skL -X POST -H "Content-Type: application/json" -d "{\"title\":\"${MSGT}\", \"text\":\"${MSGC}\"}" "${URL}" >/dev/null 2>&1
return $?
}

View File

@ -1,19 +1,22 @@
[ -z "${WORK_PATH}" -o ! -d "${WORK_PATH}/include" ] && WORK_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")/../" >/dev/null 2>&1 && pwd)"
#!/usr/bin/env bash
#
# Copyright (C) 2022 Ing <https://github.com/wjz304>
#
# This is free software, licensed under the MIT License.
# See /LICENSE for more information.
#
if [ -d "/usr/share/locale" ]; then
if [ $(ls ${WORK_PATH}/lang/*.mo 2>/dev/null | wc -l) -gt 0 ]; then
for F in $(ls ${WORK_PATH}/lang/*.mo); do
install "${F}" "/usr/share/locale/$(basename "${F}" .mo)/LC_MESSAGES/rr.mo"
done
[ -z "${WORK_PATH}" ] || [ ! -d "${WORK_PATH}/include" ] && WORK_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")/../" >/dev/null 2>&1 && pwd)"
type gettext >/dev/null 2>&1 && alias TEXT='gettext "rr"' || alias TEXT='echo'
shopt -s expand_aliases
[ -d "${WORK_PATH}/lang" ] && export TEXTDOMAINDIR="${WORK_PATH}/lang"
[ -f "${PART1_PATH}/.locale" ] && LC_ALL="$(cat "${PART1_PATH}/.locale")" && export LC_ALL="${LC_ALL}"
if [ -f "${PART1_PATH}/.timezone" ]; then
TIMEZONE="$(cat "${PART1_PATH}/.timezone")"
if [ -f "/usr/share/zoneinfo/right/${TIMEZONE}" ]; then
ln -sf "/usr/share/zoneinfo/right/${TIMEZONE}" /etc/localtime
fi
if [ -f ${PART1_PATH}/.locale ]; then
export LANG="$(cat ${PART1_PATH}/.locale)"
fi
alias TEXT='gettext "rr"'
shopt -s expand_aliases
else
alias TEXT='echo'
shopt -s expand_aliases
fi
fi

View File

@ -1,23 +1,154 @@
#!/usr/bin/env bash
#
# Copyright (C) 2022 Ing <https://github.com/wjz304>
#
# This is free software, licensed under the MIT License.
# See /LICENSE for more information.
#
###############################################################################
# Unpack modules from a tgz file
# 1 - Platform
# 2 - Kernel Version
# 3 - dummy path
function unpackModules() {
local PLATFORM=${1}
local PKVER=${2}
local UNPATH=${3:-"${TMP_PATH}/modules"}
local KERNEL
KERNEL="$(readConfigKey "kernel" "${USER_CONFIG_FILE}")"
rm -rf "${UNPATH}"
mkdir -p "${UNPATH}"
if [ "${KERNEL}" = "custom" ]; then
tar -zxf "${CKS_PATH}/modules-${PLATFORM}-${PKVER}.tgz" -C "${UNPATH}"
else
tar -zxf "${MODULES_PATH}/${PLATFORM}-${PKVER}.tgz" -C "${UNPATH}"
fi
}
###############################################################################
# Packag modules to a tgz file
# 1 - Platform
# 2 - Kernel Version
# 3 - dummy path
function packagModules() {
local PLATFORM=${1}
local PKVER=${2}
local UNPATH=${3:-"${TMP_PATH}/modules"}
local KERNEL
KERNEL="$(readConfigKey "kernel" "${USER_CONFIG_FILE}")"
if [ "${KERNEL}" = "custom" ]; then
tar -zcf "${CKS_PATH}/modules-${PLATFORM}-${PKVER}.tgz" -C "${UNPATH}" .
else
tar -zcf "${MODULES_PATH}/${PLATFORM}-${PKVER}.tgz" -C "${UNPATH}" .
fi
}
###############################################################################
# Return list of all modules available
# 1 - Platform
# 2 - Kernel Version
function getAllModules() {
PLATFORM=${1}
KVER=${2}
# Unzip modules for temporary folder
rm -rf "${TMP_PATH}/modules"
mkdir -p "${TMP_PATH}/modules"
tar -zxf "${MODULES_PATH}/${PLATFORM}-${KVER}.tgz" -C "${TMP_PATH}/modules"
# Get list of all modules
for F in $(ls ${TMP_PATH}/modules/*.ko); do
X=$(basename ${F})
M=${X:0:-3}
DESC=$(modinfo ${F} | awk -F':' '/description:/{ print $2}' | awk '{sub(/^[ ]+/,""); print}')
[ -z "${DESC}" ] && DESC="${X}"
echo "${M} \"${DESC}\""
local PLATFORM=${1}
local PKVER=${2}
if [ -z "${PLATFORM}" ] || [ -z "${PKVER}" ]; then
return 1
fi
UNPATH="${TMP_PATH}/modules"
unpackModules "${PLATFORM}" "${PKVER}" "${UNPATH}"
for D in "" "update"; do
for F in ${UNPATH}/${D:+${D}/}*.ko; do
[ ! -e "${F}" ] && continue
local N DESC
N="$(basename "${F}" .ko)"
DESC="$(modinfo -F description "${F}" 2>/dev/null)"
DESC="$(echo "${DESC}" | tr -d '\n\r\t\\' | sed "s/\"/'/g")"
echo "${D:+${D}/}${N} \"${DESC:-${D:+${D}/}${N}}\""
done
done
rm -rf "${TMP_PATH}/modules"
rm -rf "${UNPATH}"
}
function getLoadedModules() {
local PLATFORM=${1}
local PKVER=${2}
if [ -z "${PLATFORM}" ] || [ -z "${PKVER}" ]; then
return 1
fi
UNPATH="${TMP_PATH}/lib/modules/$(uname -r)"
unpackModules "${PLATFORM}" "${PKVER}" "${UNPATH}"
depmod -a -b "${TMP_PATH}" >/dev/null 2>&1
ALL_KO=$(
find /sys/devices -name modalias -exec cat {} \; | while read -r modalias; do
modprobe -d "${TMP_PATH}" --resolve-alias "${modalias}" 2>/dev/null
done | sort -u
)
rm -rf "${UNPATH}"
ALL_DEPS=""
for M in ${ALL_KO}; do
ALL_DEPS="${ALL_DEPS} $(getdepends "${PLATFORM}" "${PKVER}" "${M}")"
done
echo "${ALL_DEPS}" | tr ' ' '\n' | grep -v '^$' | sort -u
return 0
}
###############################################################################
# Return list of all modules available
# 1 - Platform
# 2 - Kernel Version
# 3 - Module list
function installModules() {
local PLATFORM=${1}
local PKVER=${2}
if [ -z "${PLATFORM}" ] || [ -z "${PKVER}" ]; then
echo "ERROR: installModules: Platform or Kernel Version not defined" >"${LOG_FILE}"
return 1
fi
local MLIST ODP KERNEL
shift 2
MLIST="${*}"
UNPATH="${TMP_PATH}/modules"
unpackModules "${PLATFORM}" "${PKVER}" "${UNPATH}"
ODP="$(readConfigKey "odp" "${USER_CONFIG_FILE}")"
for D in "" "update"; do
for F in ${UNPATH}/${D:+${D}/}*.ko; do
[ ! -e "${F}" ] && continue
M=$(basename "${F}")
[ "${ODP}" = "true" ] && [ -f "${RAMDISK_PATH}/usr/lib/modules/${D:+${D}/}${M}" ] && continue # TODO: check if module is already loaded
if echo "${MLIST}" | grep -wq "${D:+${D}/}$(basename "${M}" .ko)"; then
mkdir -p "${RAMDISK_PATH}/usr/lib/modules/${D:+${D}/}"
cp -f "${F}" "${RAMDISK_PATH}/usr/lib/modules/${D:+${D}/}${M}" 2>"${LOG_FILE}"
else
rm -f "${RAMDISK_PATH}/usr/lib/modules/${D:+${D}/}${M}" 2>"${LOG_FILE}"
fi
done
done
rm -rf "${UNPATH}"
mkdir -p "${RAMDISK_PATH}/usr/lib/firmware"
KERNEL=$(readConfigKey "kernel" "${USER_CONFIG_FILE}")
if [ "${KERNEL}" = "custom" ]; then
tar -zxf "${CKS_PATH}/firmware.tgz" -C "${RAMDISK_PATH}/usr/lib/firmware" 2>"${LOG_FILE}"
else
tar -zxf "${MODULES_PATH}/firmware.tgz" -C "${RAMDISK_PATH}/usr/lib/firmware" 2>"${LOG_FILE}"
fi
if [ $? -ne 0 ]; then
return 1
fi
return 0
}
###############################################################################
@ -26,15 +157,21 @@ function getAllModules() {
# 2 - Kernel Version
# 3 - ko file
function addToModules() {
PLATFORM=${1}
KVER=${2}
KOFILE=${3}
# Unzip modules for temporary folder
rm -rf "${TMP_PATH}/modules"
mkdir -p "${TMP_PATH}/modules"
tar -zxf "${MODULES_PATH}/${PLATFORM}-${KVER}.tgz" -C "${TMP_PATH}/modules"
cp -f ${KOFILE} ${TMP_PATH}/modules
tar -zcf "${MODULES_PATH}/${PLATFORM}-${KVER}.tgz" -C "${TMP_PATH}/modules" .
local PLATFORM=${1}
local PKVER=${2}
local KOFILE=${3}
if [ -z "${PLATFORM}" ] || [ -z "${PKVER}" ] || [ -z "${KOFILE}" ]; then
echo ""
return 1
fi
UNPATH="${TMP_PATH}/modules"
unpackModules "${PLATFORM}" "${PKVER}" "${UNPATH}"
cp -f "${KOFILE}" "${UNPATH}"
packagModules "${PLATFORM}" "${PKVER}" "${UNPATH}"
}
###############################################################################
@ -43,15 +180,21 @@ function addToModules() {
# 2 - Kernel Version
# 3 - ko name
function delToModules() {
PLATFORM=${1}
KVER=${2}
KONAME=${3}
# Unzip modules for temporary folder
rm -rf "${TMP_PATH}/modules"
mkdir -p "${TMP_PATH}/modules"
tar -zxf "${MODULES_PATH}/${PLATFORM}-${KVER}.tgz" -C "${TMP_PATH}/modules"
rm -f ${TMP_PATH}/modules/${KONAME}
tar -zcf "${MODULES_PATH}/${PLATFORM}-${KVER}.tgz" -C "${TMP_PATH}/modules" .
local PLATFORM=${1}
local PKVER=${2}
local KONAME=${3}
if [ -z "${PLATFORM}" ] || [ -z "${PKVER}" ] || [ -z "${KONAME}" ]; then
echo ""
return 1
fi
UNPATH="${TMP_PATH}/modules"
unpackModules "${PLATFORM}" "${PKVER}" "${UNPATH}"
rm -f "${UNPATH}/${KONAME}"
packagModules "${PLATFORM}" "${PKVER}" "${UNPATH}"
}
###############################################################################
@ -61,24 +204,31 @@ function delToModules() {
# 3 - ko name
function getdepends() {
function _getdepends() {
if [ -f "${TMP_PATH}/modules/${1}.ko" ]; then
depends=($(modinfo "${TMP_PATH}/modules/${1}.ko" | grep depends: | awk -F: '{print $2}' | awk '$1=$1' | sed 's/,/ /g'))
if [ ${#depends[*]} -gt 0 ]; then
for k in ${depends[@]}; do
if [ -f "${UNPATH}/${1}.ko" ]; then
local depends
depends="$(modinfo -F depends "${UNPATH}/${1}.ko" 2>/dev/null | sed 's/,/\n/g')"
if [ "$(echo "${depends}" | wc -w)" -gt 0 ]; then
for k in ${depends}; do
echo "${k}"
_getdepends "${k}"
done
fi
fi
}
PLATFORM=${1}
KVER=${2}
KONAME=${3}
# Unzip modules for temporary folder
rm -rf "${TMP_PATH}/modules"
mkdir -p "${TMP_PATH}/modules"
tar -zxf "${MODULES_PATH}/${PLATFORM}-${KVER}.tgz" -C "${TMP_PATH}/modules"
DPS=($(_getdepends ${KONAME} | tr ' ' '\n' | sort -u))
echo ${DPS[@]}
rm -rf "${TMP_PATH}/modules"
local PLATFORM=${1}
local PKVER=${2}
local KONAME=${3}
if [ -z "${PLATFORM}" ] || [ -z "${PKVER}" ] || [ -z "${KONAME}" ]; then
echo ""
return 1
fi
UNPATH="${TMP_PATH}/modules"
unpackModules "${PLATFORM}" "${PKVER}" "${UNPATH}"
_getdepends "${KONAME}" | sort -u
echo "${KONAME}"
rm -rf "${UNPATH}"
}

View File

@ -1,31 +1,54 @@
#!/usr/bin/env bash
#
# Copyright (C) 2022 Ing <https://github.com/wjz304>
#
# This is free software, licensed under the MIT License.
# See /LICENSE for more information.
#
set -e
[ -z "${WORK_PATH}" -o ! -d "${WORK_PATH}/include" ] && WORK_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
[ -z "${WORK_PATH}" ] || [ ! -d "${WORK_PATH}/include" ] && WORK_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
. ${WORK_PATH}/include/functions.sh
. ${WORK_PATH}/include/addons.sh
. "${WORK_PATH}/include/functions.sh"
. "${WORK_PATH}/include/addons.sh"
if type vmware-toolbox-cmd >/dev/null 2>&1; then
if [ "Disable" = "$(vmware-toolbox-cmd timesync status 2>/dev/null)" ]; then
vmware-toolbox-cmd timesync enable >/dev/null 2>&1 || true
fi
if [ "Enabled" = "$(vmware-toolbox-cmd timesync status 2>/dev/null)" ]; then
vmware-toolbox-cmd timesync disable >/dev/null 2>&1 || true
fi
fi
[ -z "${LOADER_DISK}" ] && die "$(TEXT "Loader is not init!")"
checkBootLoader || die "$(TEXT "The loader is corrupted, please rewrite it!")"
# Shows title
clear
[ -z "${COLUMNS}" ] && COLUMNS=50
TITLE="$(printf "$(TEXT "Welcome to %s")" "${RR_TITLE}")"
printf "\033[1;44m%*s\n" ${COLUMNS} ""
printf "\033[1;44m%*s\033[A\n" ${COLUMNS} ""
printf "\033[1;32m%*s\033[0m\n" $(((${#TITLE} + ${COLUMNS}) / 2)) "${TITLE}"
printf "\033[1;44m%*s\033[0m\n" ${COLUMNS} ""
COLUMNS=$(ttysize 2>/dev/null | awk '{print $1}')
COLUMNS=${COLUMNS:-80}
TITLE="$(printf "$(TEXT "Welcome to %s")" "${RR_TITLE}${RR_RELEASE:+(${RR_RELEASE})}")"
DATE="$(date)"
printf "\033[1;44m%*s\n" "${COLUMNS}" ""
printf "\033[1;44m%*s\033[A\n" "${COLUMNS}" ""
printf "\033[1;31m%*s\033[0m\n" "$(((${#TITLE} + ${COLUMNS}) / 2))" "${TITLE}"
printf "\033[1;44m%*s\033[A\n" "${COLUMNS}" ""
printf "\033[1;32m%*s\033[0m\n" "${COLUMNS}" "${DATE}"
# Get first MAC address
ETHX=($(ls /sys/class/net/ | grep eth)) # real network cards list
ETHX="$(find /sys/class/net/ -mindepth 1 -maxdepth 1 ! -name lo -exec basename {} \; | sort)"
# No network devices
[ ${#ETHX[@]} -le 0 ] && die "$(TEXT "Network devices not found!")"
[ "$(echo "${ETHX}" | wc -w)" -le 0 ] && die "$(TEXT "Network devices not found! Please re execute init.sh after connecting to the network!")"
# If user config file not exists, initialize it
if [ ! -f "${USER_CONFIG_FILE}" ]; then
touch "${USER_CONFIG_FILE}"
fi
initConfigKey "kernel" "official" "${USER_CONFIG_FILE}"
initConfigKey "rd-compressed" "false" "${USER_CONFIG_FILE}"
initConfigKey "satadom" "2" "${USER_CONFIG_FILE}"
initConfigKey "lkm" "prod" "${USER_CONFIG_FILE}"
initConfigKey "dsmlogo" "true" "${USER_CONFIG_FILE}"
initConfigKey "directboot" "false" "${USER_CONFIG_FILE}"
@ -36,16 +59,22 @@ initConfigKey "kernelway" "power" "${USER_CONFIG_FILE}"
initConfigKey "kernelpanic" "5" "${USER_CONFIG_FILE}"
initConfigKey "odp" "false" "${USER_CONFIG_FILE}"
initConfigKey "hddsort" "false" "${USER_CONFIG_FILE}"
initConfigKey "usbasinternal" "false" "${USER_CONFIG_FILE}"
initConfigKey "emmcboot" "false" "${USER_CONFIG_FILE}"
initConfigKey "platform" "" "${USER_CONFIG_FILE}"
initConfigKey "model" "" "${USER_CONFIG_FILE}"
initConfigKey "modelid" "" "${USER_CONFIG_FILE}"
initConfigKey "productver" "" "${USER_CONFIG_FILE}"
initConfigKey "buildnum" "" "${USER_CONFIG_FILE}"
initConfigKey "smallnum" "" "${USER_CONFIG_FILE}"
initConfigKey "dt" "" "${USER_CONFIG_FILE}"
initConfigKey "kver" "" "${USER_CONFIG_FILE}"
initConfigKey "kpre" "" "${USER_CONFIG_FILE}"
initConfigKey "paturl" "" "${USER_CONFIG_FILE}"
initConfigKey "patsum" "" "${USER_CONFIG_FILE}"
initConfigKey "sn" "" "${USER_CONFIG_FILE}"
initConfigKey "mac1" "" "${USER_CONFIG_FILE}"
initConfigKey "mac2" "" "${USER_CONFIG_FILE}"
# initConfigKey "maxdisks" "" "${USER_CONFIG_FILE}"
initConfigKey "layout" "qwerty" "${USER_CONFIG_FILE}"
initConfigKey "keymap" "" "${USER_CONFIG_FILE}"
initConfigKey "zimage-hash" "" "${USER_CONFIG_FILE}"
@ -53,41 +82,71 @@ initConfigKey "ramdisk-hash" "" "${USER_CONFIG_FILE}"
initConfigKey "cmdline" "{}" "${USER_CONFIG_FILE}"
initConfigKey "synoinfo" "{}" "${USER_CONFIG_FILE}"
initConfigKey "addons" "{}" "${USER_CONFIG_FILE}"
initConfigKey "addons.misc" "" "${USER_CONFIG_FILE}"
initConfigKey "addons.acpid" "" "${USER_CONFIG_FILE}"
initConfigKey "addons.reboottoloader" "" "${USER_CONFIG_FILE}"
if [ -z "$(readConfigMap "addons" "${USER_CONFIG_FILE}")" ]; then
initConfigKey "addons.acpid" "" "${USER_CONFIG_FILE}"
initConfigKey "addons.trivial" "" "${USER_CONFIG_FILE}"
initConfigKey "addons.vmtools" "" "${USER_CONFIG_FILE}"
initConfigKey "addons.monitor" "" "${USER_CONFIG_FILE}"
initConfigKey "addons.mountloader" "" "${USER_CONFIG_FILE}"
initConfigKey "addons.powersched" "" "${USER_CONFIG_FILE}"
initConfigKey "addons.reboottoloader" "" "${USER_CONFIG_FILE}"
fi
initConfigKey "modules" "{}" "${USER_CONFIG_FILE}"
initConfigKey "modblacklist" "evbug,cdc_ether" "${USER_CONFIG_FILE}"
# _sort_netif "$(readConfigKey "addons.sortnetif" "${USER_CONFIG_FILE}")"
for ETH in ${ETHX[@]}; do
MACR="$(cat /sys/class/net/${ETH}/address | sed 's/://g')"
IPR="$(readConfigKey "network.${MACR}" "${USER_CONFIG_FILE}")"
if [ -n "${IPR}" ]; then
ip addr add ${IPC}/24 dev ${ETH}
sleep 1
if [ ! -f "/.dockerenv" ]; then
if arrayExistItem "sortnetif:" "$(readConfigMap "addons" "${USER_CONFIG_FILE}")"; then
_sort_netif "$(readConfigKey "addons.sortnetif" "${USER_CONFIG_FILE}")"
fi
ethtool -s ${ETH} wol g 2>/dev/null
done
for N in ${ETHX}; do
MACR="$(cat "/sys/class/net/${N}/address" 2>/dev/null | sed 's/://g')"
IPR="$(readConfigKey "network.${MACR}" "${USER_CONFIG_FILE}")"
if [ -n "${IPR}" ]; then
if [ ! "1" = "$(cat "/sys/class/net/${N}/carrier" 2>/dev/null)" ]; then
ip link set "${N}" up 2>/dev/null || true
fi
IFS='/' read -r -a IPRA <<<"${IPR}"
ip addr flush dev "${N}" 2>/dev/null || true
ip addr add "${IPRA[0]}/${IPRA[1]:-"255.255.255.0"}" dev "${N}" 2>/dev/null || true
if [ -n "${IPRA[2]}" ]; then
ip route add default via "${IPRA[2]}" dev "${N}" 2>/dev/null || true
fi
if [ -n "${IPRA[3]:-${IPRA[2]}}" ]; then
sed -i "/nameserver ${IPRA[3]:-${IPRA[2]}}/d" /etc/resolv.conf
echo "nameserver ${IPRA[3]:-${IPRA[2]}}" >>/etc/resolv.conf
fi
sleep 1
fi
[ "${N::4}" = "wlan" ] && connectwlanif "${N}" 1 && sleep 1
[ "${N::3}" = "eth" ] && ethtool -s "${N}" wol g 2>/dev/null || true
# [ "${N::3}" = "eth" ] && ethtool -K ${N} rxhash off 2>/dev/null || true
done
fi
# Get the VID/PID if we are in USB
VID="0x46f4"
PID="0x0001"
TYPE="DoM"
BUS=$(getBus "${LOADER_DISK}")
BUSLIST="usb sata sas scsi nvme mmc ide virtio vmbus xen docker"
if [ "${BUS}" = "usb" ]; then
VID="0x$(udevadm info --query property --name ${LOADER_DISK} | grep ID_VENDOR_ID | cut -d= -f2)"
PID="0x$(udevadm info --query property --name ${LOADER_DISK} | grep ID_MODEL_ID | cut -d= -f2)"
elif [ "${BUS}" != "sata" -a "${BUS}" != "scsi" -a "${BUS}" != "nvme" ]; then
die "$(TEXT "Loader disk neither USB or SATA/SCSI/NVME DoM")"
VID="0x$(udevadm info --query property --name "${LOADER_DISK}" 2>/dev/null | grep "ID_VENDOR_ID" | cut -d= -f2)"
PID="0x$(udevadm info --query property --name "${LOADER_DISK}" 2>/dev/null | grep "ID_MODEL_ID" | cut -d= -f2)"
[ "${VID}" = "0x" ] || [ "${PID}" = "0x" ] && die "$(TEXT "The loader disk does not support the current USB Portable Hard Disk.")"
TYPE="flashdisk"
elif [ "${BUS}" = "docker" ]; then
TYPE="PC"
elif ! echo "${BUSLIST}" | grep -wq "${BUS}"; then
die "$(printf "$(TEXT "The loader disk does not support the current %s, only %s DoM is supported.")" "${BUS}" "${BUSLIST// /\/}")"
fi
# Save variables to user config file
writeConfigKey "vid" ${VID} "${USER_CONFIG_FILE}"
writeConfigKey "pid" ${PID} "${USER_CONFIG_FILE}"
writeConfigKey "vid" "${VID}" "${USER_CONFIG_FILE}"
writeConfigKey "pid" "${PID}" "${USER_CONFIG_FILE}"
# Inform user
echo -e "$(TEXT "Loader disk:") \033[1;32m${LOADER_DISK}\033[0m (\033[1;32m${BUS^^} flashdisk\033[0m)"
printf "%s \033[1;32m%s (%s %s)\033[0m\n" "$(TEXT "Loader disk:")" "${LOADER_DISK}" "${BUS^^}" "${TYPE}"
# Load keymap name
LAYOUT="$(readConfigKey "layout" "${USER_CONFIG_FILE}")"
@ -95,98 +154,135 @@ KEYMAP="$(readConfigKey "keymap" "${USER_CONFIG_FILE}")"
# Loads a keymap if is valid
if [ -f "/usr/share/keymaps/i386/${LAYOUT}/${KEYMAP}.map.gz" ]; then
echo -e "$(TEXT "Loading keymap") \033[1;32m${LAYOUT}/${KEYMAP}\033[0m"
printf "%s \033[1;32m%s/%s\033[0m\n" "$(TEXT "Loading keymap:")" "${LAYOUT}" "${KEYMAP}"
zcat "/usr/share/keymaps/i386/${LAYOUT}/${KEYMAP}.map.gz" | loadkeys
fi
# Decide if boot automatically
BOOT=1
if ! loaderIsConfigured; then
echo -e "\033[1;33m$(TEXT "Loader is not configured!")\033[0m"
printf "\033[1;33m%s\033[0m\n" "$(TEXT "Loader is not configured!")"
BOOT=0
elif grep -q "IWANTTOCHANGETHECONFIG" /proc/cmdline; then
echo -e "\033[1;33m$(TEXT "User requested edit settings.")\033[0m"
printf "\033[1;33m%s\033[0m\n" "$(TEXT "User requested edit settings.")"
BOOT=0
elif [ -f "/.dockerenv" ]; then
printf "\033[1;33m%s\033[0m\n" "$(TEXT "Docker edit settings.")"
BOOT=0
fi
# If is to boot automatically, do it
if [ ${BOOT} -eq 1 ]; then
boot.sh && exit 0
"${WORK_PATH}/boot.sh" && exit 0
fi
HTTP=$(grep -i '^HTTP_PORT=' /etc/rrorg.conf 2>/dev/null | cut -d'=' -f2)
DUFS=$(grep -i '^DUFS_PORT=' /etc/rrorg.conf 2>/dev/null | cut -d'=' -f2)
TTYD=$(grep -i '^TTYD_PORT=' /etc/rrorg.conf 2>/dev/null | cut -d'=' -f2)
# Wait for an IP
echo "$(printf "$(TEXT "Detected %s network cards.")" "${#ETHX[@]}")"
echo "$(TEXT "Checking Connect.")"
printf "$(TEXT "Detected %s network cards.\n")" "$(echo "${ETHX}" | wc -w)"
printf "$(TEXT "Checking Connect.")"
COUNT=0
while [ ${COUNT} -lt 30 ]; do
hasConnect="false"
for N in $(seq 0 $(expr ${#ETHX[@]} - 1)); do
if ethtool ${ETHX[${N}]} | grep 'Link detected' | grep -q 'yes'; then
echo -en "${ETHX[${N}]} "
hasConnect="true"
MSG=""
for N in ${ETHX}; do
if [ "1" = "$(cat "/sys/class/net/${N}/carrier" 2>/dev/null)" ]; then
MSG+="${N} "
fi
done
if [ "${hasConnect}" = "true" ]; then
echo -en "connected.\n"
if [ -n "${MSG}" ]; then
printf "\r%s%s \n" "${MSG}" "$(TEXT "connected.")"
break
fi
COUNT=$((${COUNT} + 1))
echo -n "."
COUNT=$((COUNT + 1))
printf "."
sleep 1
done
echo "$(TEXT "Waiting IP.")"
for N in $(seq 0 $(expr ${#ETHX[@]} - 1)); do
if [ ! -f "/.dockerenv" ]; then
[ ! -f /var/run/dhcpcd/pid ] && /etc/init.d/S41dhcpcd restart >/dev/null 2>&1 || true
fi
printf "$(TEXT "Waiting IP.\n")"
for N in ${ETHX}; do
COUNT=0
DRIVER=$(ls -ld /sys/class/net/${ETHX[${N}]}/device/driver 2>/dev/null | awk -F '/' '{print $NF}')
echo -en "${ETHX[${N}]}(${DRIVER}): "
DRIVER="$(basename "$(realpath "/sys/class/net/${N}/device/driver" 2>/dev/null)" 2>/dev/null)"
MAC="$(cat "/sys/class/net/${N}/address" 2>/dev/null)" || MAC="00:00:00:00:00:00"
printf "%s(%s): " "${N}" "${MAC}@${DRIVER}"
while true; do
if ! ip link show ${ETHX[${N}]} | grep -q 'UP'; then
echo -en "\r${ETHX[${N}]}(${DRIVER}): $(TEXT "DOWN")\n"
if [ -z "$(cat "/sys/class/net/${N}/carrier" 2>/dev/null)" ]; then
printf "\r%s(%s): %s\n" "${N}" "${MAC}@${DRIVER}" "$(TEXT "DOWN")"
break
fi
if ethtool ${ETHX[${N}]} | grep 'Link detected' | grep -q 'no'; then
echo -en "\r${ETHX[${N}]}(${DRIVER}): $(TEXT "NOT CONNECTED")\n"
if [ "0" = "$(cat "/sys/class/net/${N}/carrier" 2>/dev/null)" ]; then
printf "\r%s(%s): %s\n" "${N}" "${MAC}@${DRIVER}" "$(TEXT "NOT CONNECTED")"
break
fi
if [ ${COUNT} -eq 15 ]; then
echo -en "\r${ETHX[${N}]}(${DRIVER}): $(TEXT "TIMEOUT (Please check the IP on the router.)")\n"
if [ ${COUNT} -eq 15 ]; then # Under normal circumstances, no errors should occur here.
printf "\r%s(%s): %s\n" "${N}" "${MAC}@${DRIVER}" "$(TEXT "TIMEOUT (Please check the IP on the router.)")"
break
fi
COUNT=$((${COUNT} + 1))
IP="$(getIP ${ETHX[${N}]})"
COUNT=$((COUNT + 1))
IP="$(getIP "${N}")"
if [ -n "${IP}" ]; then
echo -en "\r${ETHX[${N}]}(${DRIVER}): $(printf "$(TEXT "Access \033[1;34mhttp://%s:7681\033[0m to configure the loader via web terminal.")" "${IP}")\n"
if echo "${IP}" | grep -q "^169\.254\."; then
printf "\r%s(%s): %s\n" "${N}" "${MAC}@${DRIVER}" "$(TEXT "LINK LOCAL (No DHCP server detected.)")"
else
printf "\r%s(%s): %s\n" "${N}" "${MAC}@${DRIVER}" "$(printf "$(TEXT "Access \033[1;34mhttp://%s:%d\033[0m to configure the loader via web terminal.")" "${IP}" "${TTYD:-7681}")"
fi
break
fi
echo -n "."
printf "."
sleep 1
done
done
# Inform user
echo
echo -e "$(TEXT "Call \033[1;32mmenu.sh\033[0m to configure loader")"
echo
echo -e "$(TEXT "User config is on") \033[1;32m${USER_CONFIG_FILE}\033[0m"
echo -e "$(TEXT "Default SSH Root password is") \033[1;31mrr\033[0m"
echo
printf "\n"
printf "$(TEXT "Call \033[1;32minit.sh\033[0m to re get init info\n")"
printf "$(TEXT "Call \033[1;32mmenu.sh\033[0m to configure loader\n")"
printf "\n"
[ -n "$(cat "${ADD_TIPS_FILE}" 2>/dev/null)" ] && printf "$(TEXT "%s\n")" "$(cat "${ADD_TIPS_FILE}" 2>/dev/null)"
printf "$(TEXT "User config is on \033[1;32m%s\033[0m\n")" "${USER_CONFIG_FILE}"
printf "$(TEXT "HTTP: \033[1;34mhttp://%s:%d\033[0m\n")" "rr" "${HTTP:-7080}"
printf "$(TEXT "DUFS: \033[1;34mhttp://%s:%d\033[0m\n")" "rr" "${DUFS:-7304}"
printf "$(TEXT "TTYD: \033[1;34mhttp://%s:%d\033[0m\n")" "rr" "${TTYD:-7681}"
printf "\n"
if [ -f "/etc/shadow-" ]; then
printf "$(TEXT "SSH port is \033[1;31m%d\033[0m, The \033[1;31mroot\033[0m password has been changed\n")" "22"
else
printf "$(TEXT "SSH port is \033[1;31m%d\033[0m, The \033[1;31mroot\033[0m password is \033[1;31m%s\033[0m\n")" "22" "rr"
fi
printf "\n"
DSMLOGO="$(readConfigKey "dsmlogo" "${USER_CONFIG_FILE}")"
if [ "${DSMLOGO}" = "true" -a -c "/dev/fb0" ]; then
if [ "${DSMLOGO}" = "true" ] && [ -c "/dev/fb0" ] && [ ! -f "/.dockerenv" ]; then
IP="$(getIP)"
[ -n "${IP}" ] && URL="http://${IP}:7681" || URL="http://arpl:7681/"
python ${WORK_PATH}/include/functions.py makeqr -d "${URL}" -l "bl" -o "${TMP_PATH}/qrcode.png"
[ -f "${TMP_PATH}/qrcode.png" ] && echo | fbv -acufi "${TMP_PATH}/qrcode.png" >/dev/null 2>/dev/null || true
echo "${IP}" | grep -q "^169\.254\." && IP=""
[ -n "${IP}" ] && URL="http://${IP}:${TTYD:-7681}" || URL="http://rr:${TTYD:-7681}"
python3 "${WORK_PATH}/include/functions.py" makeqr -d "${URL}" -l "0" -o "${TMP_PATH}/qrcode_init.png"
[ -f "${TMP_PATH}/qrcode_init.png" ] && echo | fbv -acufi "${TMP_PATH}/qrcode_init.png" >/dev/null 2>&1 || true
fi
WEBHOOKURL="$(readConfigKey "webhookurl" "${USER_CONFIG_FILE}")"
if [ -n "${WEBHOOKURL}" ] && [ ! -f "${TMP_PATH}/WebhookSent" ] && [ ! -f "/.dockerenv" ]; then
DMI="$(dmesg 2>/dev/null | grep -i "DMI:" | head -1 | sed 's/\[.*\] DMI: //i')"
IP="$(getIP)"
echo "${IP}" | grep -q "^169\.254\." && IP=""
[ -n "${IP}" ] && URL="http://${IP}:${TTYD:-7681}" || URL="http://rr:${TTYD:-7681}"
sendWebhook "${WEBHOOKURL}" "{\"RR\":\"${RR_TITLE}${RR_RELEASE:+(${RR_RELEASE})}\", \"DATE\":\"$(date +'%Y-%m-%d %H:%M:%S')\", \"DMI\":\"${DMI}\", \"URL\":\"${URL}\"}"
touch "${TMP_PATH}/WebhookSent"
fi
# Check memory
RAM=$(free -m | awk '/Mem:/{print$2}')
if [ ${RAM} -le 3500 ]; then
echo -e "\033[1;33m$(TEXT "You have less than 4GB of RAM, if errors occur in loader creation, please increase the amount of memory.")\033[0m\n"
RAM="$(awk '/MemTotal:/ {printf "%.0f", $2 / 1024}' /proc/meminfo 2>/dev/null)"
if [ "${RAM:-0}" -le 3500 ]; then
printf "\033[1;33m%s\033[0m\n" "$(TEXT "You have less than 4GB of RAM, if errors occur in loader creation, please increase the amount of memory.")"
fi
mkdir -p "${CKS_PATH}"
mkdir -p "${LKMS_PATH}"
mkdir -p "${ADDONS_PATH}"
mkdir -p "${LKM_PATH}"
mkdir -p "${MODULES_PATH}"
updateAddons
exit 0

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,73 +0,0 @@
id: "DS1019+"
synoinfo: &synoinfo
support_disk_compatibility: "no"
support_memory_compatibility: "no"
support_led_brightness_adjustment: "no"
support_leds_lp3943: "no"
support_syno_hybrid_raid:
supportraidgroup:
maxlanport: "8"
netif_seq: "0 1 2 3 4 5 6 7"
buzzeroffen: "0xffff"
cmdline: &cmdline
HddHotplug: 0
syno_hdd_detect: 0
syno_hdd_powerup_seq: 0
vender_format_version: 2
elevator: elevator
patch: &patch
- "ramdisk-etc-rc-*.patch"
- "ramdisk-init-script-v4-*.patch"
- "ramdisk-post-init-script-*.patch"
- "ramdisk-disable-root-pwd-*.patch"
- "ramdisk-disable-disabled-ports-*.patch"
platform: "apollolake"
unique: "synology_apollolake_1019+"
serial:
prefix:
- "1850"
- "1880"
middle: "QXR"
suffix: "numeric"
flags:
- "movbe"
dom: 2
dt: false
disks: 4
beta: false
productvers:
"6.2":
kver: "4.4.59"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.0":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.1":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.2":
kver: "4.4.302"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch

View File

@ -1,70 +0,0 @@
id: "DS1520+"
synoinfo: &synoinfo
support_disk_compatibility: "no"
support_memory_compatibility: "no"
support_led_brightness_adjustment: "no"
support_syno_hybrid_raid:
supportraidgroup:
maxlanport: "8"
netif_seq: "0 1 2 3 4 5 6 7"
buzzeroffen: "0xffff"
cmdline: &cmdline
intel_iommu: "igfx_off"
synoboot2:
HddEnableDynamicPower: 1
vender_format_version: 2
syno_ttyS0: "serial,0x3f8"
syno_ttyS1: "serial,0x2f8"
elevator: elevator
patch: &patch
- "ramdisk-etc-rc-*.patch"
- "ramdisk-init-script-v4-*.patch"
- "ramdisk-post-init-script-*.patch"
- "ramdisk-disable-root-pwd-*.patch"
platform: "geminilake"
unique: "synology_geminilake_1520+"
serial:
prefix:
- "2060"
middle: "RYR"
suffix: "alpha"
dom: 2
dt: true
disks: 6
beta: true
productvers:
"6.2":
kver: "4.4.59"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.0":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.1":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.2":
kver: "4.4.302"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch

View File

@ -1,52 +0,0 @@
id: "DS1522+"
synoinfo: &synoinfo
support_disk_compatibility: "no"
support_memory_compatibility: "no"
support_led_brightness_adjustment: "no"
support_syno_hybrid_raid:
supportraidgroup:
maxlanport: "8"
netif_seq: "0 1 2 3 4 5 6 7"
buzzeroffen: "0xffff"
cmdline: &cmdline
synoboot2:
SMBusHddDynamicPower: 1
vender_format_version: 2
syno_ttyS0: "serial,0x3f8"
syno_ttyS1: "serial,0x2f8"
elevator: elevator
patch: &patch
- "ramdisk-etc-rc-*.patch"
- "ramdisk-init-script-v4-*.patch"
- "ramdisk-post-init-script-*.patch"
- "ramdisk-disable-root-pwd-*.patch"
platform: "r1000"
unique: "synology_r1000_1522+"
serial:
prefix:
- "2270"
middle: "TRR"
suffix: "alpha"
macpre: 9009d0
dom: 2
dt: true
disks: 5
beta: true
productvers:
"7.1":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.2":
kver: "4.4.302"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch

View File

@ -1,71 +0,0 @@
id: "DS1621+"
synoinfo: &synoinfo
support_disk_compatibility: "no"
support_memory_compatibility: "no"
support_led_brightness_adjustment: "no"
support_syno_hybrid_raid:
supportraidgroup:
maxlanport: "8"
netif_seq: "0 1 2 3 4 5 6 7"
cmdline: &cmdline
HddHotplug: 0
synoboot2:
syno_hdd_detect: 0
syno_hdd_powerup_seq: 0
SMBusHddDynamicPower: 1
vender_format_version: 2
syno_ttyS0: "serial,0x3f8"
syno_ttyS1: "serial,0x2f8"
elevator: elevator
patch: &patch
- "ramdisk-etc-rc-*.patch"
- "ramdisk-init-script-v4-*.patch"
- "ramdisk-post-init-script-*.patch"
- "ramdisk-disable-root-pwd-*.patch"
platform: "v1000"
unique: "synology_v1000_1621+"
serial:
prefix:
- "2080"
middle: "S7R"
suffix: "alpha"
dom: 2
dt: true
disks: 6
beta: true
productvers:
"6.2":
kver: "4.4.59"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.0":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.1":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.2":
kver: "4.4.302"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch

View File

@ -1,70 +0,0 @@
id: "DS1621xs+"
synoinfo: &synoinfo
support_disk_compatibility: "no"
support_memory_compatibility: "no"
support_led_brightness_adjustment: "no"
support_bde_internal_10g: "no"
support_oob_ctl: "no"
support_syno_hybrid_raid:
supportraidgroup:
maxlanport: "8"
netif_seq: "0 1 2 3 4 5 6 7"
cmdline: &cmdline
HddHotplug: 0
syno_hdd_detect: 0
syno_hdd_powerup_seq: 0
vender_format_version: 2
elevator: elevator
patch: &patch
- "ramdisk-etc-rc-*.patch"
- "ramdisk-init-script-v4-*.patch"
- "ramdisk-post-init-script-*.patch"
- "ramdisk-disable-root-pwd-*.patch"
- "ramdisk-disable-disabled-ports-*.patch"
platform: "broadwellnk"
unique: "synology_broadwellnk_1621xs+"
serial:
prefix:
- "2070"
middle: "RVR"
suffix: "alpha"
dom: 1
dt: false
disks: 6
beta: false
productvers:
"6.2":
kver: "4.4.59"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.0":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.1":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.2":
kver: "4.4.302"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch

View File

@ -1,69 +0,0 @@
id: "DS1819+"
synoinfo: &synoinfo
support_disk_compatibility: "no"
support_memory_compatibility: "no"
support_led_brightness_adjustment: "no"
support_bde_internal_10g: "no"
support_syno_hybrid_raid:
supportraidgroup:
maxlanport: "8"
netif_seq: "0 1 2 3 4 5 6 7"
cmdline: &cmdline
HddHotplug: 0
syno_hdd_detect: 0
syno_hdd_powerup_seq: 0
vender_format_version: 2
elevator: elevator
patch: &patch
- "ramdisk-etc-rc-*.patch"
- "ramdisk-init-script-v4-*.patch"
- "ramdisk-post-init-script-*.patch"
- "ramdisk-disable-root-pwd-*.patch"
- "ramdisk-disable-disabled-ports-*.patch"
platform: "denverton"
unique: "synology_denverton_1819+"
serial:
prefix:
- "1890"
middle: "R5R"
suffix: "alpha"
dom: 2
dt: false
disks: 8
beta: true
productvers:
"6.2":
kver: "4.4.59"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.0":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.1":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.2":
kver: "4.4.302"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch

View File

@ -1,71 +0,0 @@
id: "DS1821+"
synoinfo: &synoinfo
support_disk_compatibility: "no"
support_memory_compatibility: "no"
support_led_brightness_adjustment: "no"
support_syno_hybrid_raid:
supportraidgroup:
maxlanport: "8"
netif_seq: "0 1 2 3 4 5 6 7"
cmdline: &cmdline
HddHotplug: 0
synoboot2:
syno_hdd_detect: 0
syno_hdd_powerup_seq: 0
SMBusHddDynamicPower: 1
vender_format_version: 2
syno_ttyS0: "serial,0x3f8"
syno_ttyS1: "serial,0x2f8"
elevator: elevator
patch: &patch
- "ramdisk-etc-rc-*.patch"
- "ramdisk-init-script-v4-*.patch"
- "ramdisk-post-init-script-*.patch"
- "ramdisk-disable-root-pwd-*.patch"
platform: "v1000"
unique: "synology_v1000_1821+"
serial:
prefix:
- "2110"
middle: "SKR"
suffix: "alpha"
dom: 2
dt: true
disks: 8
beta: false
productvers:
"6.2":
kver: "4.4.59"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.0":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.1":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.2":
kver: "4.4.302"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch

View File

@ -1,51 +0,0 @@
id: "DS1823xs+"
synoinfo: &synoinfo
support_disk_compatibility: "no"
support_memory_compatibility: "no"
support_led_brightness_adjustment: "no"
support_syno_hybrid_raid:
supportraidgroup:
maxlanport: "8"
netif_seq: "0 1 2 3 4 5 6 7"
cmdline: &cmdline
synoboot2:
syno_hdd_detect: 0
SMBusHddDynamicPower: 1
vender_format_version: 2
syno_ttyS0: "serial,0x3f8"
syno_ttyS1: "serial,0x2f8"
elevator: elevator
patch: &patch
- "ramdisk-etc-rc-*.patch"
- "ramdisk-init-script-v4-*.patch"
- "ramdisk-post-init-script-*.patch"
- "ramdisk-disable-root-pwd-*.patch"
platform: "v1000"
unique: "synology_v1000_1823xs+"
serial:
prefix:
- "2280"
middle: "V5R"
suffix: "alpha"
dom: 2
dt: true
disks: 12
beta: false
productvers:
"7.1":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.2":
kver: "4.4.302"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch

View File

@ -1,70 +0,0 @@
id: "DS220+"
synoinfo: &synoinfo
support_disk_compatibility: "no"
support_memory_compatibility: "no"
support_led_brightness_adjustment: "no"
support_syno_hybrid_raid:
supportraidgroup:
maxlanport: "8"
netif_seq: "0 1 2 3 4 5 6 7"
buzzeroffen: "0xffff"
cmdline: &cmdline
intel_iommu: "igfx_off"
synoboot2:
HddEnableDynamicPower: 1
vender_format_version: 2
syno_ttyS0: "serial,0x3f8"
syno_ttyS1: "serial,0x2f8"
elevator: elevator
patch: &patch
- "ramdisk-etc-rc-*.patch"
- "ramdisk-init-script-v4-*.patch"
- "ramdisk-post-init-script-*.patch"
- "ramdisk-disable-root-pwd-*.patch"
platform: "geminilake"
unique: "synology_geminilake_220+"
serial:
prefix:
- "0000"
middle: "XXX"
suffix: "alpha"
dom: 2
dt: true
disks: 2
beta: true
productvers:
"6.2":
kver: "4.4.59"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.0":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.1":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.2":
kver: "4.4.302"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch

View File

@ -1,43 +0,0 @@
id: "DS423+"
synoinfo: &synoinfo
support_disk_compatibility: "no"
support_memory_compatibility: "no"
support_led_brightness_adjustment: "no"
support_syno_hybrid_raid:
supportraidgroup:
maxlanport: "8"
netif_seq: "0 1 2 3 4 5 6 7"
buzzeroffen: "0xffff"
cmdline: &cmdline
intel_iommu: "igfx_off"
synoboot2:
HddEnableDynamicPower: 1
vender_format_version: 2
syno_ttyS0: "serial,0x3f8"
syno_ttyS1: "serial,0x2f8"
elevator: elevator
patch: &patch
- "ramdisk-etc-rc-*.patch"
- "ramdisk-init-script-v4-*.patch"
- "ramdisk-post-init-script-*.patch"
- "ramdisk-disable-root-pwd-*.patch"
platform: "geminilake"
unique: "synology_geminilake_423+"
serial:
prefix:
- "2350"
middle: "WBR"
suffix: "alpha"
dom: 2
dt: true
disks: 2
beta: false
productvers:
"7.2":
kver: "4.4.302"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch

View File

@ -1,69 +0,0 @@
id: "DS2419+"
synoinfo: &synoinfo
support_disk_compatibility: "no"
support_memory_compatibility: "no"
support_led_brightness_adjustment: "no"
support_bde_internal_10g: "no"
support_syno_hybrid_raid:
supportraidgroup:
maxlanport: "8"
netif_seq: "0 1 2 3 4 5 6 7"
cmdline: &cmdline
HddHotplug: 0
syno_hdd_detect: 0
syno_hdd_powerup_seq: 0
vender_format_version: 2
elevator: elevator
patch: &patch
- "ramdisk-etc-rc-*.patch"
- "ramdisk-init-script-v4-*.patch"
- "ramdisk-post-init-script-*.patch"
- "ramdisk-disable-root-pwd-*.patch"
- "ramdisk-disable-disabled-ports-*.patch"
platform: "denverton"
unique: "synology_denverton_2419+"
serial:
prefix:
- "1880"
middle: "QZA"
suffix: "alpha"
dom: 2
dt: false
disks: 8
beta: true
productvers:
"6.2":
kver: "4.4.59"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.0":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.1":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.2":
kver: "4.4.302"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch

View File

@ -1,61 +0,0 @@
id: "DS2422+"
synoinfo: &synoinfo
support_disk_compatibility: "no"
support_memory_compatibility: "no"
support_led_brightness_adjustment: "no"
support_syno_hybrid_raid:
supportraidgroup:
maxlanport: "8"
netif_seq: "0 1 2 3 4 5 6 7"
cmdline: &cmdline
synoboot2:
syno_hdd_detect: 0
SMBusHddDynamicPower: 1
vender_format_version: 2
syno_ttyS0: "serial,0x3f8"
syno_ttyS1: "serial,0x2f8"
elevator: elevator
patch: &patch
- "ramdisk-etc-rc-*.patch"
- "ramdisk-init-script-v4-*.patch"
- "ramdisk-post-init-script-*.patch"
- "ramdisk-disable-root-pwd-*.patch"
platform: "v1000"
unique: "synology_v1000_2422+"
serial:
prefix:
- "2140"
- "2180"
middle: "SLR"
suffix: "alpha"
dom: 2
dt: true
disks: 12
beta: false
productvers:
"7.0":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.1":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.2":
kver: "4.4.302"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch

View File

@ -1,62 +0,0 @@
id: "DS3615xs"
synoinfo: &synoinfo
support_disk_compatibility: "no"
support_memory_compatibility: "no"
support_led_brightness_adjustment: "no"
support_syno_hybrid_raid:
supportraidgroup:
maxlanport: "8"
netif_seq: "0 1 2 3 4 5 6 7"
cmdline: &cmdline
HddHotplug: 0
syno_hdd_detect: 0
syno_hdd_powerup_seq: 0
vender_format_version: 2
elevator: elevator
patch: &patch
- "ramdisk-etc-rc-*.patch"
- "ramdisk-init-script-v4-*.patch"
- "ramdisk-post-init-script-*.patch"
- "ramdisk-disable-root-pwd-*.patch"
- "ramdisk-disable-disabled-ports-*.patch"
platform: "bromolow"
unique: "synology_bromolow_3615xs"
serial:
prefix:
- "1130"
- "1230"
- "1330"
- "1430"
middle: "LWN"
suffix: "numeric"
dom: 1
dt: false
disks: 12
beta: true
productvers:
"6.2":
kver: "3.10.105"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.0":
kver: "3.10.108"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.1":
kver: "3.10.108"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch

View File

@ -1,71 +0,0 @@
id: "DS3617xs"
synoinfo: &synoinfo
support_disk_compatibility: "no"
support_memory_compatibility: "no"
support_led_brightness_adjustment: "no"
support_syno_hybrid_raid:
supportraidgroup:
maxlanport: "8"
netif_seq: "0 1 2 3 4 5 6 7"
cmdline: &cmdline
HddHotplug: 0
syno_hdd_detect: 0
syno_hdd_powerup_seq: 0
vender_format_version: 2
elevator: elevator
patch: &patch
- "ramdisk-etc-rc-*.patch"
- "ramdisk-init-script-v4-*.patch"
- "ramdisk-post-init-script-*.patch"
- "ramdisk-disable-root-pwd-*.patch"
- "ramdisk-disable-disabled-ports-*.patch"
platform: "broadwell"
unique: "synology_broadwell_3617xs"
serial:
prefix:
- "1130"
- "1230"
- "1330"
- "1430"
middle: "ODN"
suffix: "numeric"
dom: 1
dt: false
disks: 12
beta: true
productvers:
"6.2":
kver: "3.10.105"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.0":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.1":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.2":
kver: "4.4.302"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch

View File

@ -1,61 +0,0 @@
id: "DS3622xs+"
synoinfo: &synoinfo
support_disk_compatibility: "no"
support_memory_compatibility: "no"
support_led_brightness_adjustment: "no"
support_bde_internal_10g: "no"
support_oob_ctl: "no"
support_syno_hybrid_raid:
supportraidgroup:
maxlanport: "8"
netif_seq: "0 1 2 3 4 5 6 7"
cmdline: &cmdline
HddHotplug: 0
syno_hdd_detect: 0
syno_hdd_powerup_seq: 0
vender_format_version: 2
elevator: elevator
patch: &patch
- "ramdisk-etc-rc-*.patch"
- "ramdisk-init-script-v4-*.patch"
- "ramdisk-post-init-script-*.patch"
- "ramdisk-disable-root-pwd-*.patch"
- "ramdisk-disable-disabled-ports-*.patch"
platform: "broadwellnk"
unique: "synology_broadwellnk_3622xs+"
serial:
prefix:
- "2150"
middle: "SQR"
suffix: "alpha"
dom: 1
dt: false
disks: 12
beta: false
productvers:
"7.0":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.1":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.2":
kver: "4.4.302"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch

View File

@ -1,52 +0,0 @@
id: "DS423+"
synoinfo: &synoinfo
support_disk_compatibility: "no"
support_memory_compatibility: "no"
support_led_brightness_adjustment: "no"
support_syno_hybrid_raid:
supportraidgroup:
maxlanport: "8"
netif_seq: "0 1 2 3 4 5 6 7"
buzzeroffen: "0xffff"
cmdline: &cmdline
intel_iommu: "igfx_off"
synoboot2:
HddEnableDynamicPower: 1
vender_format_version: 2
syno_ttyS0: "serial,0x3f8"
syno_ttyS1: "serial,0x2f8"
elevator: elevator
patch: &patch
- "ramdisk-etc-rc-*.patch"
- "ramdisk-init-script-v4-*.patch"
- "ramdisk-post-init-script-*.patch"
- "ramdisk-disable-root-pwd-*.patch"
platform: "geminilake"
unique: "synology_geminilake_423+"
serial:
prefix:
- "22A0"
middle: "VKR"
suffix: "alpha"
dom: 2
dt: true
disks: 4
beta: false
productvers:
"7.1":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.2":
kver: "4.4.302"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch

View File

@ -1,72 +0,0 @@
id: "DS718+"
synoinfo: &synoinfo
support_disk_compatibility: "no"
support_memory_compatibility: "no"
support_led_brightness_adjustment: "no"
support_leds_lp3943: "no"
support_syno_hybrid_raid:
supportraidgroup:
maxlanport: "8"
netif_seq: "0 1 2 3 4 5 6 7"
buzzeroffen: "0xffff"
cmdline: &cmdline
HddHotplug: 0
syno_hdd_detect: 0
syno_hdd_powerup_seq: 0
vender_format_version: 2
elevator: elevator
patch: &patch
- "ramdisk-etc-rc-*.patch"
- "ramdisk-init-script-v4-*.patch"
- "ramdisk-post-init-script-*.patch"
- "ramdisk-disable-root-pwd-*.patch"
- "ramdisk-disable-disabled-ports-*.patch"
platform: "apollolake"
unique: "synology_apollolake_718+"
serial:
prefix:
- "1930"
middle: "PEN"
suffix: "numeric"
flags:
- "movbe"
dom: 2
dt: false
disks: 4
beta: true
productvers:
"6.2":
kver: "4.4.59"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.0":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.1":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.2":
kver: "4.4.302"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch

View File

@ -1,71 +0,0 @@
id: "DS720+"
synoinfo: &synoinfo
support_disk_compatibility: "no"
support_memory_compatibility: "no"
support_led_brightness_adjustment: "no"
support_syno_hybrid_raid:
supportraidgroup:
maxlanport: "8"
netif_seq: "0 1 2 3 4 5 6 7"
buzzeroffen: "0xffff"
cmdline: &cmdline
intel_iommu: "igfx_off"
synoboot2:
HddEnableDynamicPower: 1
vender_format_version: 2
syno_ttyS0: "serial,0x3f8"
syno_ttyS1: "serial,0x2f8"
elevator: elevator
patch: &patch
- "ramdisk-etc-rc-*.patch"
- "ramdisk-init-script-v4-*.patch"
- "ramdisk-post-init-script-*.patch"
- "ramdisk-disable-root-pwd-*.patch"
platform: "geminilake"
unique: "synology_geminilake_720+"
serial:
prefix:
- "2010"
- "2110"
middle: "QWR"
suffix: "alpha"
dom: 2
dt: true
disks: 2
beta: true
productvers:
"6.2":
kver: "4.4.59"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.0":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.1":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.2":
kver: "4.4.302"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch

View File

@ -1,51 +0,0 @@
id: "DS723+"
synoinfo: &synoinfo
support_disk_compatibility: "no"
support_memory_compatibility: "no"
support_led_brightness_adjustment: "no"
support_syno_hybrid_raid:
supportraidgroup:
maxlanport: "8"
netif_seq: "0 1 2 3 4 5 6 7"
buzzeroffen: "0xffff"
cmdline: &cmdline
synoboot2:
SMBusHddDynamicPower: 1
vender_format_version: 2
syno_ttyS0: "serial,0x3f8"
syno_ttyS1: "serial,0x2f8"
elevator: elevator
patch: &patch
- "ramdisk-etc-rc-*.patch"
- "ramdisk-init-script-v4-*.patch"
- "ramdisk-post-init-script-*.patch"
- "ramdisk-disable-root-pwd-*.patch"
platform: "r1000"
unique: "synology_r1000_723+"
serial:
prefix:
- "2270"
middle: "TQR"
suffix: "alpha"
dom: 2
dt: true
disks: 2
beta: true
productvers:
"7.1":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.2":
kver: "4.4.302"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch

View File

@ -1,71 +0,0 @@
id: "DS916+"
synoinfo: &synoinfo
support_disk_compatibility: "no"
support_memory_compatibility: "no"
support_led_brightness_adjustment: "no"
support_syno_hybrid_raid:
supportraidgroup:
maxlanport: "8"
netif_seq: "0 1 2 3 4 5 6 7"
cmdline: &cmdline
HddHotplug: 0
syno_hdd_detect: 0
syno_hdd_powerup_seq: 0
vender_format_version: 2
elevator: elevator
patch: &patch
- "ramdisk-etc-rc-*.patch"
- "ramdisk-init-script-v4-*.patch"
- "ramdisk-post-init-script-*.patch"
- "ramdisk-disable-root-pwd-*.patch"
- "ramdisk-disable-disabled-ports-*.patch"
platform: "braswell"
unique: "synology_braswell_916+"
serial:
prefix:
- "1130"
- "1230"
- "1330"
- "1430"
middle: "NZN"
suffix: "numeric"
dom: 2
dt: false
disks: 4
beta: true
productvers:
"6.2":
kver: "3.10.105"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.0":
kver: "3.10.108"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.1":
kver: "3.10.108"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.2":
kver: "3.10.108"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch

View File

@ -1,72 +0,0 @@
id: "DS918+"
synoinfo: &synoinfo
support_disk_compatibility: "no"
support_memory_compatibility: "no"
support_led_brightness_adjustment: "no"
support_leds_lp3943: "no"
support_syno_hybrid_raid:
supportraidgroup:
maxlanport: "8"
netif_seq: "0 1 2 3 4 5 6 7"
buzzeroffen: "0xffff"
cmdline: &cmdline
HddHotplug: 0
syno_hdd_detect: 0
syno_hdd_powerup_seq: 0
vender_format_version: 2
elevator: elevator
patch: &patch
- "ramdisk-etc-rc-*.patch"
- "ramdisk-init-script-v4-*.patch"
- "ramdisk-post-init-script-*.patch"
- "ramdisk-disable-root-pwd-*.patch"
- "ramdisk-disable-disabled-ports-*.patch"
platform: "apollolake"
unique: "synology_apollolake_918+"
serial:
prefix:
- "1910"
middle: "PDN"
suffix: "numeric"
flags:
- "movbe"
dom: 2
dt: false
disks: 4
beta: false
productvers:
"6.2":
kver: "4.4.59"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.0":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.1":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.2":
kver: "4.4.302"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch

View File

@ -1,73 +0,0 @@
id: "DS920+"
synoinfo: &synoinfo
support_disk_compatibility: "no"
support_memory_compatibility: "no"
support_led_brightness_adjustment: "no"
support_syno_hybrid_raid:
supportraidgroup:
maxlanport: "8"
netif_seq: "0 1 2 3 4 5 6 7"
buzzeroffen: "0xffff"
cmdline: &cmdline
intel_iommu: "igfx_off"
synoboot2:
HddEnableDynamicPower: 1
vender_format_version: 2
syno_ttyS0: "serial,0x3f8"
syno_ttyS1: "serial,0x2f8"
elevator: elevator
patch: &patch
- "ramdisk-etc-rc-*.patch"
- "ramdisk-init-script-v4-*.patch"
- "ramdisk-post-init-script-*.patch"
- "ramdisk-disable-root-pwd-*.patch"
platform: "geminilake"
unique: "synology_geminilake_920+"
serial:
prefix:
- "2030"
- "2040"
- "20C0"
- "2150"
middle: "SBR"
suffix: "alpha"
dom: 2
dt: true
disks: 4
beta: false
productvers:
"6.2":
kver: "4.4.59"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.0":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.1":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.2":
kver: "4.4.302"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch

View File

@ -1,52 +0,0 @@
id: "DS923+"
synoinfo: &synoinfo
support_disk_compatibility: "no"
support_memory_compatibility: "no"
support_led_brightness_adjustment: "no"
support_syno_hybrid_raid:
supportraidgroup:
maxlanport: "8"
netif_seq: "0 1 2 3 4 5 6 7"
buzzeroffen: "0xffff"
cmdline: &cmdline
synoboot2:
SMBusHddDynamicPower: 1
vender_format_version: 2
syno_ttyS0: "serial,0x3f8"
syno_ttyS1: "serial,0x2f8"
elevator: elevator
patch: &patch
- "ramdisk-etc-rc-*.patch"
- "ramdisk-init-script-v4-*.patch"
- "ramdisk-post-init-script-*.patch"
- "ramdisk-disable-root-pwd-*.patch"
platform: "r1000"
unique: "synology_r1000_923+"
serial:
prefix:
- "2270"
middle: "TQR"
suffix: "alpha"
macpre: 9009d0
dom: 2
dt: true
disks: 4
beta: false
productvers:
"7.1":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.2":
kver: "4.4.302"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch

View File

@ -1,55 +0,0 @@
id: "DVA1622"
synoinfo: &synoinfo
support_disk_compatibility: "no"
support_memory_compatibility: "no"
support_led_brightness_adjustment: "no"
support_syno_hybrid_raid:
supportraidgroup:
maxlanport: "8"
netif_seq: "0 1 2 3 4 5 6 7"
buzzeroffen: "0xffff"
cmdline: &cmdline
intel_iommu: "igfx_off"
synoboot2:
HddEnableDynamicPower: 1
vender_format_version: 2
syno_ttyS0: "serial,0x3f8"
syno_ttyS1: "serial,0x2f8"
elevator: elevator
patch: &patch
- "ramdisk-etc-rc-*.patch"
- "ramdisk-init-script-v4-*.patch"
- "ramdisk-post-init-script-*.patch"
- "ramdisk-disable-root-pwd-*.patch"
platform: "geminilake"
unique: "synology_geminilake_dva1622"
serial:
prefix:
- "2030"
- "2040"
- "20C0"
- "2150"
middle: "UBR"
suffix: "alpha"
dom: 2
dt: true
disks: 2
beta: false
productvers:
"7.1":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.2":
kver: "4.4.302"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch

View File

@ -1,72 +0,0 @@
id: "DVA3219"
synoinfo: &synoinfo
support_disk_compatibility: "no"
support_memory_compatibility: "no"
support_led_brightness_adjustment: "no"
support_bde_internal_10g: "no"
support_syno_hybrid_raid:
supportraidgroup:
maxlanport: "8"
netif_seq: "0 1 2 3 4 5 6 7"
cmdline: &cmdline
HddHotplug: 0
syno_hdd_detect: 0
syno_hdd_powerup_seq: 0
vender_format_version: 2
elevator: elevator
patch: &patch
- "ramdisk-etc-rc-*.patch"
- "ramdisk-init-script-v4-*.patch"
- "ramdisk-post-init-script-*.patch"
- "ramdisk-disable-root-pwd-*.patch"
- "ramdisk-disable-disabled-ports-*.patch"
platform: "denverton"
unique: "synology_denverton_dva3219"
serial:
prefix:
- "1930"
- "1940"
middle: "RFR"
suffix: "alpha"
flags:
- "movbe"
dom: 2
dt: false
disks: 4
beta: true
productvers:
"6.2":
kver: "4.4.59"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.0":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.1":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.2":
kver: "4.4.302"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch

View File

@ -1,74 +0,0 @@
id: "DVA3221"
synoinfo: &synoinfo
support_disk_compatibility: "no"
support_memory_compatibility: "no"
support_led_brightness_adjustment: "no"
support_bde_internal_10g: "no"
support_syno_hybrid_raid:
supportraidgroup:
maxlanport: "8"
netif_seq: "0 1 2 3 4 5 6 7"
cmdline: &cmdline
HddHotplug: 0
syno_hdd_detect: 0
syno_hdd_powerup_seq: 0
vender_format_version: 2
elevator: elevator
patch: &patch
- "ramdisk-etc-rc-*.patch"
- "ramdisk-init-script-v4-*.patch"
- "ramdisk-post-init-script-*.patch"
- "ramdisk-disable-root-pwd-*.patch"
- "ramdisk-disable-disabled-ports-*.patch"
platform: "denverton"
unique: "synology_denverton_dva3221"
serial:
prefix:
- "2030"
- "2040"
- "20C0"
- "2150"
middle: "SJR"
suffix: "alpha"
flags:
- "movbe"
dom: 2
dt: false
disks: 4
beta: false
productvers:
"6.2":
kver: "4.4.59"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.0":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.1":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.2":
kver: "4.4.302"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch

View File

@ -1,60 +0,0 @@
id: "FS2500"
synoinfo: &synoinfo
support_disk_compatibility: "no"
support_memory_compatibility: "no"
support_led_brightness_adjustment: "no"
support_syno_hybrid_raid:
supportraidgroup:
maxlanport: "8"
netif_seq: "0 1 2 3 4 5 6 7"
cmdline: &cmdline
intel_iommu: "igfx_off"
synoboot2:
SMBusHddDynamicPower: 1
vender_format_version: 2
syno_ttyS0: "serial,0x3f8"
syno_ttyS1: "serial,0x2f8"
elevator: elevator
patch: &patch
- "ramdisk-etc-rc-*.patch"
- "ramdisk-init-script-v4-*.patch"
- "ramdisk-post-init-script-*.patch"
- "ramdisk-disable-root-pwd-*.patch"
platform: "v1000"
unique: "synology_v1000_fs2500"
serial:
prefix:
- "1960"
middle: "PSN"
suffix: "numeric"
dom: 2
dt: true
disks: 12
beta: true
productvers:
"7.0":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.1":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.2":
kver: "4.4.302"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch

View File

@ -1,68 +0,0 @@
id: "FS3017"
synoinfo: &synoinfo
support_disk_compatibility: "no"
support_memory_compatibility: "no"
support_led_brightness_adjustment: "no"
support_syno_hybrid_raid:
supportraidgroup:
maxlanport: "8"
netif_seq: "0 1 2 3 4 5 6 7"
buzzeroffen: "0xffff"
cmdline: &cmdline
synoboot2:
SMBusHddDynamicPower: 1
vender_format_version: 2
elevator: elevator
patch: &patch
- "ramdisk-etc-rc-*.patch"
- "ramdisk-init-script-v4-*.patch"
- "ramdisk-post-init-script-*.patch"
- "ramdisk-disable-root-pwd-*.patch"
- "ramdisk-disable-disabled-ports-*.patch"
platform: "grantley"
unique: "synology_grantley_fs3017"
serial:
prefix:
- "1650"
middle: "O8N"
suffix: "numeric"
dom: 1
dt: false
disks: 24
beta: true
productvers:
"6.2":
kver: "3.10.105"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.0":
kver: "3.10.108"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.1":
kver: "3.10.108"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.2":
kver: "3.10.108"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch

View File

@ -1,72 +0,0 @@
id: "FS6400"
synoinfo: &synoinfo
support_disk_compatibility: "no"
support_memory_compatibility: "no"
support_led_brightness_adjustment: "no"
support_syno_hybrid_raid:
supportraidgroup:
supportsas: "no"
supportsas_v2: "yes"
maxlanport: "8"
netif_seq: "0 1 2 3 4 5 6 7"
buzzeroffen: "0xffff"
cmdline: &cmdline
synoboot2:
SMBusHddDynamicPower: 1
vender_format_version: 2
syno_ttyS0: "serial,0x3f8"
syno_ttyS1: "serial,0x2f8"
elevator: elevator
modprobe.blacklist: mpt3sas
patch: &patch
- "ramdisk-etc-rc-*.patch"
- "ramdisk-init-script-v4-*.patch"
- "ramdisk-post-init-script-*.patch"
- "ramdisk-disable-root-pwd-*.patch"
platform: "purley"
unique: "synology_purley_fs6400"
serial:
prefix:
- "1960"
middle: "PSN"
suffix: "numeric"
dom: 2
dt: true
disks: 24
beta: true
productvers:
"6.2":
kver: "4.4.59"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.0":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.1":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.2":
kver: "4.4.302"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch

View File

@ -1,72 +0,0 @@
id: "HD6500"
synoinfo: &synoinfo
support_disk_compatibility: "no"
support_memory_compatibility: "no"
support_led_brightness_adjustment: "no"
support_syno_hybrid_raid:
supportraidgroup:
supportsas: "no"
supportsas_v2: "yes"
maxlanport: "8"
netif_seq: "0 1 2 3 4 5 6 7"
buzzeroffen: "0xffff"
cmdline: &cmdline
synoboot2:
SMBusHddDynamicPower: 1
vender_format_version: 2
syno_ttyS0: "serial,0x3f8"
syno_ttyS1: "serial,0x2f8"
elevator: elevator
modprobe.blacklist: mpt3sas
patch: &patch
- "ramdisk-etc-rc-*.patch"
- "ramdisk-init-script-v4-*.patch"
- "ramdisk-post-init-script-*.patch"
- "ramdisk-disable-root-pwd-*.patch"
platform: "purley"
unique: "synology_purley_hd6500"
serial:
prefix:
- "0000"
middle: "XXX"
suffix: "numeric"
dom: 2
dt: true
disks: 24
beta: true
productvers:
"6.2":
kver: "4.4.59"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.0":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.1":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.2":
kver: "4.4.302"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch

View File

@ -1,72 +0,0 @@
id: "RS1221+"
synoinfo: &synoinfo
support_disk_compatibility: "no"
support_memory_compatibility: "no"
support_led_brightness_adjustment: "no"
support_bde_internal_10g: "no"
support_syno_hybrid_raid:
supportraidgroup:
maxlanport: "8"
netif_seq: "0 1 2 3 4 5 6 7"
cmdline: &cmdline
HddHotplug: 0
synoboot2:
syno_hdd_detect: 0
syno_hdd_powerup_seq: 0
SMBusHddDynamicPower: 1
vender_format_version: 2
syno_ttyS0: "serial,0x3f8"
syno_ttyS1: "serial,0x2f8"
elevator: elevator
patch: &patch
- "ramdisk-etc-rc-*.patch"
- "ramdisk-init-script-v4-*.patch"
- "ramdisk-post-init-script-*.patch"
- "ramdisk-disable-root-pwd-*.patch"
platform: "v1000"
unique: "synology_v1000_rs1221+"
serial:
prefix:
- "20B0"
middle: "RWR"
suffix: "alpha"
dom: 2
dt: true
disks: 8
beta: true
productvers:
"6.2":
kver: "4.4.59"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.0":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.1":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.2":
kver: "4.4.302"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch

View File

@ -1,69 +0,0 @@
id: "RS1619xs+"
synoinfo: &synoinfo
support_disk_compatibility: "no"
support_memory_compatibility: "no"
support_led_brightness_adjustment: "no"
support_bde_internal_10g: "no"
support_syno_hybrid_raid:
supportraidgroup:
maxlanport: "8"
netif_seq: "0 1 2 3 4 5 6 7"
cmdline: &cmdline
HddHotplug: 0
syno_hdd_detect: 0
syno_hdd_powerup_seq: 0
vender_format_version: 2
elevator: elevator
patch: &patch
- "ramdisk-etc-rc-*.patch"
- "ramdisk-init-script-v4-*.patch"
- "ramdisk-post-init-script-*.patch"
- "ramdisk-disable-root-pwd-*.patch"
- "ramdisk-disable-disabled-ports-*.patch"
platform: "broadwellnk"
unique: "synology_broadwellnk_rs1619xs+"
serial:
prefix:
- "1920"
middle: "QPR"
suffix: "alpha"
dom: 2
dt: false
disks: 4
beta: true
productvers:
"6.2":
kver: "4.4.59"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.0":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.1":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.2":
kver: "4.4.302"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch

View File

@ -1,51 +0,0 @@
id: "RS2423+"
synoinfo: &synoinfo
support_disk_compatibility: "no"
support_memory_compatibility: "no"
support_led_brightness_adjustment: "no"
support_syno_hybrid_raid:
supportraidgroup:
maxlanport: "8"
netif_seq: "0 1 2 3 4 5 6 7"
cmdline: &cmdline
synoboot2:
syno_hdd_detect: 0
SMBusHddDynamicPower: 1
vender_format_version: 2
syno_ttyS0: "serial,0x3f8"
syno_ttyS1: "serial,0x2f8"
elevator: elevator
patch: &patch
- "ramdisk-etc-rc-*.patch"
- "ramdisk-init-script-v4-*.patch"
- "ramdisk-post-init-script-*.patch"
- "ramdisk-disable-root-pwd-*.patch"
platform: "v1000"
unique: "synology_v1000_rs2423+"
serial:
prefix:
- "0000"
middle: "XXX"
suffix: "alpha"
dom: 2
dt: true
disks: 24
beta: false
productvers:
"7.1":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.2":
kver: "4.4.302"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch

View File

@ -1,54 +0,0 @@
id: "RS2423RP+"
synoinfo: &synoinfo
support_disk_compatibility: "no"
support_memory_compatibility: "no"
support_led_brightness_adjustment: "no"
support_leds_atmega1608: "no"
support_leds_lp3943: "no"
supportadt7490: "no"
support_syno_hybrid_raid:
supportraidgroup:
maxlanport: "8"
netif_seq: "0 1 2 3 4 5 6 7"
cmdline: &cmdline
synoboot2:
syno_hdd_detect: 0
SMBusHddDynamicPower: 1
vender_format_version: 2
syno_ttyS0: "serial,0x3f8"
syno_ttyS1: "serial,0x2f8"
elevator: elevator
patch: &patch
- "ramdisk-etc-rc-*.patch"
- "ramdisk-init-script-v4-*.patch"
- "ramdisk-post-init-script-*.patch"
- "ramdisk-disable-root-pwd-*.patch"
platform: "v1000"
unique: "synology_v1000_rs2423rp+"
serial:
prefix:
- "0000"
middle: "XXX"
suffix: "alpha"
dom: 2
dt: true
disks: 24
beta: true
productvers:
"7.1":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.2":
kver: "4.4.302"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch

View File

@ -1,59 +0,0 @@
id: "RS3413xs+"
synoinfo: &synoinfo
support_disk_compatibility: "no"
support_memory_compatibility: "no"
support_led_brightness_adjustment: "no"
support_syno_hybrid_raid:
supportraidgroup:
maxlanport: "8"
netif_seq: "0 1 2 3 4 5 6 7"
cmdline: &cmdline
HddHotplug: 0
syno_hdd_detect: 0
syno_hdd_powerup_seq: 0
vender_format_version: 2
elevator: elevator
patch: &patch
- "ramdisk-etc-rc-*.patch"
- "ramdisk-init-script-v4-*.patch"
- "ramdisk-post-init-script-*.patch"
- "ramdisk-disable-root-pwd-*.patch"
- "ramdisk-disable-disabled-ports-*.patch"
platform: "bromolow"
unique: "synology_bromolow_rs3413xs+"
serial:
prefix:
- "0000"
middle: "XXX"
suffix: "numeric"
dom: 1
dt: false
disks: 16
beta: true
productvers:
"6.2":
kver: "3.10.105"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.0":
kver: "3.10.108"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.1":
kver: "3.10.108"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch

View File

@ -1,69 +0,0 @@
id: "RS3618xs"
synoinfo: &synoinfo
support_disk_compatibility: "no"
support_memory_compatibility: "no"
support_led_brightness_adjustment: "no"
supportssdcache: "no"
support_syno_hybrid_raid:
supportraidgroup:
maxlanport: "8"
netif_seq: "0 1 2 3 4 5 6 7"
cmdline: &cmdline
HddHotplug: 0
syno_hdd_detect: 0
syno_hdd_powerup_seq: 0
vender_format_version: 2
elevator: elevator
patch: &patch
- "ramdisk-etc-rc-*.patch"
- "ramdisk-init-script-v4-*.patch"
- "ramdisk-post-init-script-*.patch"
- "ramdisk-disable-root-pwd-*.patch"
- "ramdisk-disable-disabled-ports-*.patch"
platform: "broadwell"
unique: "synology_broadwell_rs3618xs"
serial:
prefix:
- "0000"
middle: "XXX"
suffix: "alpha"
dom: 2
dt: false
disks: 12
beta: true
productvers:
"6.2":
kver: "3.10.105"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.0":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.1":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.2":
kver: "4.4.302"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch

View File

@ -1,69 +0,0 @@
id: "RS3621xs+"
synoinfo: &synoinfo
support_disk_compatibility: "no"
support_memory_compatibility: "no"
support_led_brightness_adjustment: "no"
support_bde_internal_10g: "no"
support_syno_hybrid_raid:
supportraidgroup:
maxlanport: "8"
netif_seq: "0 1 2 3 4 5 6 7"
cmdline: &cmdline
HddHotplug: 0
syno_hdd_detect: 0
syno_hdd_powerup_seq: 0
vender_format_version: 2
elevator: elevator
patch: &patch
- "ramdisk-etc-rc-*.patch"
- "ramdisk-init-script-v4-*.patch"
- "ramdisk-post-init-script-*.patch"
- "ramdisk-disable-root-pwd-*.patch"
- "ramdisk-disable-disabled-ports-*.patch"
platform: "broadwellnk"
unique: "synology_broadwellnk_rs3621xs+"
serial:
prefix:
- "20A0"
middle: "SZR"
suffix: "alpha"
dom: 2
dt: false
disks: 12
beta: true
productvers:
"6.2":
kver: "4.4.59"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.0":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.1":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.2":
kver: "4.4.302"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch

View File

@ -1,70 +0,0 @@
id: "RS4021xs+"
synoinfo: &synoinfo
support_disk_compatibility: "no"
support_memory_compatibility: "no"
support_led_brightness_adjustment: "no"
support_bde_internal_10g: "no"
support_syno_hybrid_raid:
supportraidgroup:
maxlanport: "8"
netif_seq: "0 1 2 3 4 5 6 7"
cmdline: &cmdline
HddHotplug: 0
syno_hdd_detect: 0
syno_hdd_powerup_seq: 0
vender_format_version: 2
elevator: elevator
patch: &patch
- "ramdisk-etc-rc-*.patch"
- "ramdisk-init-script-v4-*.patch"
- "ramdisk-post-init-script-*.patch"
- "ramdisk-disable-root-pwd-*.patch"
- "ramdisk-disable-disabled-ports-*.patch"
platform: "broadwellnk"
unique: "synology_broadwellnk_rs4021xs+"
serial:
prefix:
- "2160"
middle: "T2R"
suffix: "alpha"
macpre: 9009d0
dom: 2
dt: false
disks: 16
beta: true
productvers:
"6.2":
kver: "4.4.59"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.0":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.1":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.2":
kver: "4.4.302"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch

View File

@ -1,71 +0,0 @@
id: "SA3200D"
synoinfo: &synoinfo
support_disk_compatibility: "no"
support_memory_compatibility: "no"
support_led_brightness_adjustment: "no"
support_bde_internal_10g: "no"
support_syno_hybrid_raid:
supportraidgroup:
maxlanport: "8"
netif_seq: "0 1 2 3 4 5 6 7"
cmdline: &cmdline
HddHotplug: 0
synoboot2:
syno_hdd_detect: 0
syno_hdd_powerup_seq: 0
SMBusHddDynamicPower: 1
vender_format_version: 2
elevator: elevator
patch: &patch
- "ramdisk-etc-rc-*.patch"
- "ramdisk-init-script-v4-*.patch"
- "ramdisk-post-init-script-*.patch"
- "ramdisk-disable-root-pwd-*.patch"
- "ramdisk-disable-disabled-ports-*.patch"
platform: "broadwellntbap"
unique: "synology_broadwellntbap_sa3200d"
serial:
prefix:
- "19A0"
middle: "S4R"
suffix: "alpha"
dom: 1
dt: false
disks: 12
beta: true
productvers:
"6.2":
kver: "4.4.59"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.0":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.1":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.2":
kver: "4.4.302"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch

View File

@ -1,71 +0,0 @@
id: "SA3400"
synoinfo: &synoinfo
support_disk_compatibility: "no"
support_memory_compatibility: "no"
support_led_brightness_adjustment: "no"
support_bde_internal_10g: "no"
support_syno_hybrid_raid:
supportraidgroup:
maxlanport: "8"
netif_seq: "0 1 2 3 4 5 6 7"
cmdline: &cmdline
HddHotplug: 0
synoboot2:
syno_hdd_detect: 0
syno_hdd_powerup_seq: 0
SMBusHddDynamicPower: 1
vender_format_version: 2
elevator: elevator
patch: &patch
- "ramdisk-etc-rc-*.patch"
- "ramdisk-init-script-v4-*.patch"
- "ramdisk-post-init-script-*.patch"
- "ramdisk-disable-root-pwd-*.patch"
- "ramdisk-disable-disabled-ports-*.patch"
platform: "broadwellnk"
unique: "synology_broadwellnk_sa3400"
serial:
prefix:
- "1920"
middle: "RJR"
suffix: "alpha"
dom: 1
dt: false
disks: 12
beta: true
productvers:
"6.2":
kver: "4.4.59"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.0":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.1":
kver: "4.4.180"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch
"7.2":
kver: "4.4.302"
rd-compressed: false
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
patch: *patch

Some files were not shown because too many files have changed in this diff Show More