🍯jam: 注重可靠性和整洁性的 scoop 库 | 安装 Cherry Studio

:sparkles: 前言

前段时间,Cherry Studio 仓库中有人提 issue 问能否添加到 scoop(Windows 平台的一款优秀的软件包管理器:package:),于是我在 scoop 官方的 Extras 库中提交了一个 PR,但是:

  • maintainer 审阅后迟迟没有动静
  • 被另一个 maintainer 注意到了,遂合并
  • 我为其编写的软件包逻辑被修改:原本的逻辑是在 AppData/Roaming 目录下生成 CherryStudio 硬链接:link:指向 scoop 的持久化存储目录,这样 Cherry Studio 产生的用户数据都能被持久化存储;但 maintainer 将其修改为,卸载时将 AppData/Roaming/CherryStudio 拷贝到持久化目录,安装时再 copy 回去。这相当于只是在软件更新的时候防止数据被覆盖。

很显然,按照这个逻辑,如果我想要换设备、重装系统,scoop 是无法恢复 Cherry Studio 的数据的,这并不符合我对 scoop 的期望。我希望 scoop 安装的软件具有良好的便携性,至少能做到的就做到,所以我并不理解 maintainer 做出这个修改的意义是什么。(甚至,他还把我写的建议关闭 Cherry Studio 自动更新以防冲突的提示,和卸载时删除残留文件的代码全删了 :tieba_087:

但是我还是要说一下,这位 maintainer 其实人很好:+1:,后面我提交 PR 添加 Cherry Studio 预览版时他很快合并,还去 Cherry Studio issue 区评论了

考虑到 scoop 仓库的 contribution 周期极长,哪怕请求 code review 都不会有什么人理你,我就单开了 jam 这个仓库。

随着 scoop 安装的软件越来越多,我也发现很多仓库的软件清单并不完善,仅仅只是让 scoop 代替你安装软件,并没有实现持久化、合理的数据清理等关键功能。我想在这种环境下,scoop 除了能“用命令行安装软件”和“统一管理软件版本”,就没有什么别的意义了——实话说,直接按传统方式,用安装包安装软件,用 Geek Uninstaller 卸载,还不会像 scoop 卸载一样留下一堆残留文件。这是不应该的。

:package: jam 是什么

jam 是一个专注于可靠性整洁性的 scoop 仓库,其中所有软件清单都经过仔细检查,确保卸载时也不会留下残留数据:broom:、可以实现良好的便携性——这意味着,对于 jam 中的所有软件:

  • 当用户重装系统、更换设备时,只需要复制 scoop 目录到新系统,执行 scoop reset * 就可以直接恢复安装了的软件及其数据
  • 软件数据集中,比如你的 scoop 目录在 D 盘,那么所有软件及其数据也会存储在 D 盘,而且存储在 scoop 目录下
  • 保持系统干净整洁:sparkles:

:cherries: 通过 jam 安装 Cherry Studio

首先你需要有 scoop,这篇文章不是为非 scoop 用户编写的。

scoop bucket add jam https://github.com/EFLKumo/jam
scoop install jam/cherry-studio

这样就完成了:white_check_mark:。后续可以通过 scoop 管理 Cherry Studio 的更新,并且它的数据实际上是存储在你的 YOUR_SCOOP_DIR/persist/cherry-studio 中的,方便管理。

如果有帮助到你,请给仓库点一个 star~ :smiling_face_with_three_hearts:

29 Likes

这意思是撇开了cherry自身的安装机制,全部使用scoop管理?

我日常scoop,倒是没用过jam

3 Likes
  1. 是的
  2. jam 只是用于 scoop 的一个 bucket,相当于软件源
3 Likes

那软件源为什么能够规范软件的行为?让它变成便携呢?

1 Like

具体原理是:

  1. 下载 Cherry Studio 的安装包但不运行,直接解压缩提取其中的程序
  2. 在 CS 存储数据的地方创建硬链接指向 scoop 的持久化目录,这样 CS 以为自己在写入原本的数据目录,实际上数据都存在后者那里
  3. 换到新系统的时候,直接复制 scoop 目录,数据都在那里,执行 scoop reset * 就会重建硬链接等(这是 scoop 本身的功能)实现便携

jam 里面后续还会加入别的我平时用的软件,比如有位大佬的 readest ,也是用这个方法处理的

3 Likes

太强了,大佬

1 Like

感谢大佬分享!!!

1 Like

感谢大佬分享,感觉会是个很有潜力的软件仓库,不过我现在用 homebrew 了:thinking:

1 Like

感谢分享,之前就想用 scoop 管理 Cherry Studio 只是没找到包含的仓库

1 Like

是否可以理解为 jam 中的包,都被维护者维护了这么一套机制,变成了可便携的版本?

佬,cherry 更新了

是滴
zsbd

1 Like

可惜我现在才看到
我为了解决这个问题把整个用户目录直接符号链接到了D盘:rofl:

1 Like

是个人物。。不过我记得的确有一个项目就是安装系统后,将用户目录转移到其他盘
但我觉得这种操作意义不大,因为更改数据存储目录的根本原因并不是通过 D 盘分配空间,而更在于将应用数据与系统数据分离,这样系统崩了不会影响到应用数据

不是转移, 是符号链接SymbolicLink, 切换到超管用户, 利用robocopy把我的用户目录全复制到D盘下一个目录, robocopy会自动处理AppData里的连接点,.
这样真正的数据在D盘, 重装也没有问题, 只要重建符号链接就行, 然后Scoop reset *恢复一下.
缺点就是全局安装的解决不了, 比如有些没法用scoop安装的, 或者scoop全局按装的.
还有一个就是如果微软更新系统时候改了AppData里的一些符号链接或者连接点估计会有问题. (虽然不大可能改:rofl:)

2 Likes

思路不错呀

1 Like

大佬這庫整得挺乾淨啊 點個讚先:+1:

1 Like

scoop 安装了,但备份有问题[info] [BackupManager] backup progress { stage: ‘preparing’, progress: 0, total: 100 }
[info] [BackupManager] backup progress { stage: ‘writing_data’, progress: 20, total: 100 }
[error] [BackupManager] Backup failed: Error: ENOENT: no such file or directory, scandir ‘D:\Scoop\apps\cherry-studio\1.2.10\data\Data’

感谢贡献

1 Like