一、那块硬盘和那个压缩包
上周四晚上,我在整理书桌抽屉,翻出一块 2019 年买的西部数据 1TB 移动硬盘,外壳的塑料已经发黄,接口处的橡胶塞掉了一半。插上电脑,盘符弹出来的时候我愣了一下——里面还留着当年做外包时的一整套归档,其中有个文件夹叫 归档_不要动_2019,我点进去,最底层躺着一个 42.7MB 的压缩包,文件名是 jm365.work1.7.6_full.zip。那一刻我其实有点恍惚,因为 1.7.6 这个版本号,我已经至少四年没有在任何人的对话里听到过了。我把它解压到桌面上一个临时目录 D:\_tmp_jm176,双击了里面的 setup.cmd,风扇声立刻起来了。
这就是这次安装的起点。不是什么宏大叙事,就是一次晚上的翻箱倒柜。
二、目录结构比安装程序本身更值得看
解压之后一共 3 层目录,根目录下是 bin/、conf/、lib/、data/ 和一份 11KB 的 INSTALL.txt。我建议任何一个准备装 jm365.work1.7.6 的人,先别急着跑脚本,把 INSTALL.txt 从头读到尾——它只有 240 行左右,但第 37 行到第 52 行明确写了依赖的加载顺序:先 bin/init_env,再 lib/bootstrap,最后才是 conf/ 下的 site.conf。顺序错了不会报错,只会静默地用一个默认配置跑起来,然后你在后面调试的时候会怀疑人生。我第一次装的时候就是跳过了这一步,结果卡在端口冲突上折腾了将近四十分钟,后来才发现是 site.conf 里那个 port=8081 根本没被读到。
说白了,这次安装的坑,八成都在“我以为我懂了”这五个字上。
三、三个具体的细节,当年没人提醒我
第一个细节,关于时间戳。压缩包里 conf/ 下的配置文件修改时间统一是 2021-03-14 22:41,我后来在社区里查到,这个版本在发布后第三天做过一次静默的配置修订,但没有改版本号,所以你从不同渠道拿到的 1.7.6 包,配置可能并不一样。第二个细节,关于路径里的空格:安装脚本对 C:\Program Files\ 这类带空格的路径处理得并不好,我在一台旧笔记本上试过,脚本在第 78 行左右会直接吞掉后半段路径,报一个很含糊的“路径无效”。第三个细节,也是最容易忽略的,data/ 目录默认是只读权限,如果你是从 U 盘或者只读镜像里解压出来的,第一次启动写入缓存就会失败,而日志里只会留下一行 write cache skipped,特别容易被当成正常提示划过去。
这三个点,我一个一个踩过。顺序是倒着的,最后一个最疼。
顺便说一句,那次我把旧配置迁移过来的时候,还顺手参考了 恢复旧的49图库 里整理的那套迁移清单,虽然场景不完全一样,但它把“先备份 conf/ 与 data/ 再动任何东西”这件事讲得很直白,我照着做,省了不少返工。如果你对打开方式还有疑问,浏览器打开49图库49 那篇里对访问入口的说明也值得对照着看一遍,尤其是在本地起服务之后验证端口是否真的通。
四、装上之后,我反而想了很久以前的事
装完那天夜里快十二点,我坐在窗边,突然想起 2019 年冬天,我和一个叫陈默的朋友在城东一间小办公室里调试类似的东西,他当时一边啃冷掉的包子一边说:“你这人就是太信文档了,文档也是人写的。”那句话我记了很多年。现在回头看,1.7.6 的文档确实是人写的,它有疏漏,有语焉不详的地方,比如 INSTALL.txt 第 156 行只写了“确保依赖完整”,却没告诉你“完整”具体指哪 7 个库。但正因为它是人写的,它才值得被认真读完,而不是被跳过。我甚至有点怀念那种为了一个端口号翻半天文件的笨拙——现在很多东西一键就装好了,你反而不知道中间发生了什么。
这话可能有点老派。但我是真的这么想的。
五、如果你也要装,我的建议是慢一点
具体做法上,我会建议先在一台干净的机器上,按 INSTALL.txt 的顺序原样走一遍,不要做任何“我觉得更好”的改动;确认能跑起来之后,再把你自己的配置迁进去。迁移之前,把 conf/ 完整备份一份,命名里带上日期,比如 conf_bak_20261024。另外,如果你和我一样是从旧硬盘里翻出来的包,先校验一下压缩包的完整性——我那个 42.7MB 的包,用 certutil -hashfile 算出来的哈希,和文件名里藏的那串前八位对不上,说明它在硬盘上躺了这么多年,已经不完整了,我后来又重新找了一份才装成功。至于版本来源的合规性,我在 49图库资料免费打开49图库app网站版权声明 里读到过一段挺克制的说明,值得一读;而如果你需要的是更规范的获取渠道,49图库app正版下载安装 那篇的整理相对靠谱一些。
慢一点,真的会快很多。这句话我对自己说了很多年,做到的时候不多。