[{"content":"如果你最近还在玩 Balatro，那大概率已经进入一个阶段了：\n不是单纯“这一把能不能玩”，而是开始在意这个 Seed 值不值得开。\n有时候你手里已经有一个种子，想先看看前面几个底注会出什么。也有时候你不是在查 Seed，而是在反过来想：\n能不能找到某张关键 Joker 更早出现的种子？ 能不能筛到带指定 Edition 的小丑？ 能不能顺手把优惠券条件也一起卡进去？ 而 Balatro Deck 这个网站，现在已经越来越像一个专门给玩家用的 Seed 工具站了。\n你可以在这里查种子、看前 8 个底注的结果、翻别人分享的内容，也可以直接自己设条件，在浏览器里挖种子。\n如果你平时就有收藏 Seed、给朋友发 Seed、或者边玩边判断“这把有没有味道”的习惯，这个站会很顺手。\n它现在能做什么 如果用最简单的话来概括，Balatro Deck 现在主要有 4 个用途：\n输入 Seed，直接查看前 8 个底注的结果 浏览别人分享的种子 打开详情页，复制 Seed 和分享链接 用新版种子挖矿，按条件直接搜索想要的种子 这里最重要的一点是，它已经不只是“查一下前面出什么”的预览站了。\n尤其是新版挖矿页，现在已经能把目标小丑、目标底注、Edition、优惠券放进同一套搜索流程里。对已经开始认真挑 Seed 的玩家来说，这块比以前实用很多。\n为什么这东西对 Balatro 玩家有用 Balatro 有个特别真实的地方：\n很多时候，一把值不值得继续，前几轮就已经有信号了。\n比如：\n底注 1 的 Boss 会不会很烦 商店前几轮会不会给你关键 Joker 卡包内容顺不顺 标签和优惠券有没有帮你把路线往前推 如果你平时就会看这些，那你很容易明白，这类工具真正节省的不是操作时间，而是试错时间。\n它帮你更快知道，这把有没有继续的价值。\n已经有 Seed 的时候，先看值不值得玩 这是最常见的用法。\n在 首页 输入一个 Seed 之后，网站会直接生成对应的分析结果页。\n它最实用的地方，是把信息按底注 1 到底注 8 拆开了。你不用自己一轮一轮去试，也不用靠记忆回想前面出了什么，页面会直接把结果列出来。\n你能看到的内容主要包括：\n每个底注的 Boss 盲注 商店队列 卡包结果 对应的优惠券和标签 如果你平时就习惯靠前期节奏来判断这把要不要继续，这块会非常省时间。\n看详情页时，重点看什么 详情页最值得扫的，通常就是这几块：\nBoss 盲注 商店队列 卡包结果 这三项基本已经足够你判断一把局的前中期味道。\n而且这个页面的细节也做得挺适合读：\n卡牌可以横向拖动，不会挤成一团 鼠标悬停可以看中文说明 顶部能直接复制 Seed 也能直接复制分享链接 页面会显示记录对应的游戏版本和查看次数 所以它不是单纯把结果扔给你，而是把结果整理成了一个可以直接转发给别人的页面。\n剧透模式现在还是补充功能 详情页里还有一个小开关，叫 剧透模式。\n它的作用，是把少数像「审判」「幽灵」「灵魂」这类后续还会再展开的结果，直接显示成更明确的小丑结果。\n这块依然不是高频功能，所以不用把它看得太重。大多数时候，默认预览已经够用了。你想看得更直白一点，再顺手打开就行。\n不想自己测，也可以直接看别人发了什么 如果你更喜欢“先看社区里有什么”，那这个网站也很适合逛。\n目前最常用的就是两个页面：\n最新种子 排行榜 最新种子 最新种子页面 更像一个玩家动态流。\n你能看到最近有人分享了什么 Seed，也能通过描述快速判断这把大概是什么路数。现在这里依然支持：\n按版本筛选 按 Seed 或描述搜索 如果你本来就喜欢看别人怎么总结一个 Seed，这页其实会很容易逛下去。\n排行榜 排行榜 更像是“被大家点进去过一轮之后留下来的内容”。\n浏览量高不一定就代表绝对最强，但通常说明它更值得点进去看一眼。要么是 Seed 本身有东西，要么是分享角度很好。\n对普通玩家来说，这页特别适合两种场景：\n想快速找一个能玩的 Seed 想看看最近社区到底在传什么 现在最有意思的，是新版种子挖矿 如果说前面的功能是在“看 Seed”，那 种子挖矿 就是在“找 Seed”。\n而且这一块，现在已经比早期版本完整很多了。\n新版挖矿，现在是怎么搜的 当前版本的挖矿逻辑，不再是过去那种拆成几块的旧思路，而是统一成了一套更接近真实使用场景的筛选方式。\n你现在主要可以设两类条件：\n目标小丑 优惠券 其中小丑搜索已经做成了统一入口，普通、罕见、稀有、传奇都走同一套搜索流程。\n更重要的是，你选中的每张小丑都可以继续指定：\n希望出现的目标底注 对非传奇小丑额外指定 版本效果 目前非传奇小丑支持这些版本条件：\n闪箔 镭射 多彩 负片 除此之外，优惠券筛选现在也已经启用了。也就是说，你不只是能找“某张 Joker 在底注 2 出现”，还可以进一步把优惠券条件也一起带上。\n这会让它更像真正的“条件筛种器”，而不只是一个普通预览页。\n这一版挖矿，有几个规则最好先知道 这部分很重要，因为现在的挖矿不是“随便选几个条件就一定能搜”的模式，它有明确规则。\n每张目标小丑都要绑定一个目标底注 新版逻辑里，所有目标小丑都是按“一张卡 + 一个目标底注”来匹配的。\n你不是单纯在说“我想要这张 Joker”，而是在说：\n我想要这张 Joker 出现在某个底注。\n每层底注可选的小丑数量有上限 这是当前版本很关键的一条限制：\n底注 1 最多选 1 张目标小丑 底注 2 最多选 2 张 … 底注 8 最多选 8 张 也就是说，每层不是想塞多少条件都行。这个限制其实很合理，因为它更接近当前工具对结果空间的约束方式。\n小丑不是只在商店里匹配 新版挖矿的一个重要变化，是目标小丑会在两个来源里联合检查：\n商店队列前缀 各类卡包中可能出现的小丑来源 所以现在它不只是“找商店里有没有”，而是会同时考虑商店和卡包。\n这点对搜索结果影响很大，也让新版挖矿更像实际玩家会在意的结果。\n优惠券条件也有自己的约束 如果你把优惠券也带进搜索条件里，需要顺手记住两条：\n同一底注最多只能选 1 张优惠券 如果你选了基础优惠券，对应升级版的底注不能早于它 这不是限制你玩法，而是当前工具在搜索逻辑上已经把这些顺序关系考虑进去了。\n实际使用时，大概是什么感觉 这页的体验还是很直接。\n你把条件设好之后，点击开始，页面会在浏览器里直接跑扫描。过程中能实时看到：\n已扫描数量 当前速度 总用时 一旦命中，结果会直接弹出来。\n这种感觉挺像一个即时反馈的搜索器，不像以前那种“跑个脚本，然后盯着终端等结果”。\n找到之后，可以怎么处理 找到 Seed 之后，最常见的两种操作还是：\n先复制下来，自己进游戏试 直接补描述，发布出去 这也是 Balatro Deck 现在很舒服的一点。\n它不是找到结果就结束，而是让你能顺着结果继续往下走，把分享动作也一起做完。发布时，页面会自动预填一版按“底注 x”分组的描述，你可以直接改，也可以在这个基础上润一下再发。\n对喜欢收藏、整理、分享 Seed 的玩家来说，这个体验会顺很多。\n这个网站现在最适合哪类玩家 如果你属于下面这些人，那 Balatro Deck 基本都会对你有用：\n喜欢先看前期路线，再决定开不开局 平时会保存、收集、分享强力 Seed 很在意商店质量、卡包路线和前几个底注节奏 已经不满足于“看别人发什么”，而是想自己按条件找 Seed 如果你只是偶尔玩玩，它当然也能用，只是你大概率最常用的还是“输入 Seed 看结果”。\n真正会高频用到列表页和挖矿页的人，通常已经是会认真看路线、会挑种子的 Balatro 玩家了。\n用之前，最好知道这几件事 它的核心价值，依然是帮你看前 8 个底注 这个工具当前展示的重点还是前 8 个底注结果。\n对大部分玩家来说，这已经很够用了，因为很多路线判断本来就是前中期决定的。但如果你期待的是一篇能把整局所有后续分支都写完的全流程战报，那它的定位并不是那个方向。\n一句好描述，真的会让分享效果差很多 同一个 Seed，如果你只发代码，别人未必知道它好在哪。\n但如果你补一句像样的描述，传播效果会好很多。最实用的写法通常就是：\n点出强势时机 点出关键 Joker、优惠券或关键资源 点出适合什么玩法 最后 Balatro Deck 现在最舒服的地方，不是它单纯“能分析 Seed”。\n而是它把玩家最常见的几个动作连起来了：\n查一个 Seed，看它，复制它，发出去；或者反过来，按自己的条件把它挖出来。\n而且新版挖矿已经比以前更像一个正式工具了。你可以指定目标底注、卡小丑版本、加优惠券条件，再把命中的结果直接发布出去。对 Balatro 这种特别容易让人收藏路线、交流 Seed 的游戏来说，这套体验会非常顺。\n如果你平时已经有“这把值得记一下”“这个 Seed 可以发给朋友”“我想自己反向找一个条件更舒服的种子”这些习惯，那这个网站现在基本就是开箱即用：\nBalatro Deck\n","date":"2026-03-26T00:00:00Z","image":"https://oolong.live/p/%E8%BF%99%E4%B8%AA-balatro-%E7%BD%91%E7%AB%99%E7%8E%B0%E5%9C%A8%E6%9B%B4%E9%80%82%E5%90%88%E6%8B%BF%E6%9D%A5%E6%89%BE%E7%A7%8D%E5%AD%90%E4%BA%86/balatro-deck-index-preview_hu_e710ae8cac264376.webp","permalink":"https://oolong.live/p/%E8%BF%99%E4%B8%AA-balatro-%E7%BD%91%E7%AB%99%E7%8E%B0%E5%9C%A8%E6%9B%B4%E9%80%82%E5%90%88%E6%8B%BF%E6%9D%A5%E6%89%BE%E7%A7%8D%E5%AD%90%E4%BA%86/","title":"这个 Balatro 网站，现在更适合拿来找种子了"},{"content":"TL;DR: 传统的 IPTV 观看需要专属机顶盒和独立的物理线路，体验割裂。本文介绍了在 ESXi 环境下部署 OpenWrt，并结合 rtp2httpd 将组播源转换为 HTTP 单播信号的方案。最终实现 Apple TV 等局域网内任意终端直接无缝观看浙江电信 IPTV 直播。\n解决的问题 传统的 IPTV 观看方式需要使用运营商提供的专属机顶盒（IPTV Box）连接电视才能观看，这导致了很大的局限性：不仅需要在路由器/交换机之间做网络隔离、拖网线，而且必须切信号源才能观看流媒体，体验十分割裂。\n为了能在局域网内的任意设备（如 Apple TV、手机、电脑）上无缝观看 IPTV，我们可以通过 OpenWrt 的内网融合与开源项目 rtp2httpd 将组播源转换为 HTTP 单播信号，从而实现全屋共享 IPTV 信号。\n环境背景 为了实现这一方案，本文的实践基于以下基础环境构建：\n核心网关：一台运行 ESXi 虚拟化的宿主机。 软路由系统：x86 架构的 OpenWrt（本文使用纯净且兼容性良好的 ImmortalWrt）。 网络设备：支持 VLAN 划分的可网管交换机。 读者提醒（Prerequisites）：本文包含一定的技术深度。为确保您能顺利完成部署，建议您已具备基本的 ESXi 虚拟化网络概念、了解基础的 VLAN 划分规则，并熟悉 OpenWrt CLI 的基础操作能力。\n本文将以浙江电信 IPTV 为例，详细记录在 ESXi 虚拟化环境中部署 OpenWrt 并配置 rtp2httpd 的完整流程。\n实施步骤 1. 抓包获取机顶盒鉴权信息 电信的 IPTV 机顶盒一般是直接连接在 GPON ONU (光猫) 的专用 IPTV 接口上的，这个接口通过 IPoE 方式让机顶盒获取 DHCP 分配的内网 IP 地址。\n如果将普通电脑或终端直接接入这个网口，是无法获取到 IP 地址的。原因是电信局端会对 DHCP 请求进行鉴权，主要校验 DHCP Option 12 (Hostname) 和 Option 60 (Vendor Class) 的值。\n因此，我们需要先通过抓包工具（如 Wireshark）或者光猫的管理后台抓包，获取自己机顶盒的以下关键信息：\nMAC 地址：机顶盒背面的真实 MAC 地址 Option 12 (Hostname)：即机顶盒的 STB ID，一般也会直接印在机顶盒背面的标签码上。 Option 60 (Vendor Class Identifier)：类似 16 进制的字符串。在 Wireshark 等抓包工具中找到对应 DHCP 报文，展开 Option: (60) Vendor class identifier，选中里面的 Vendor class identifier:，右键选择 Copy -\u0026gt; ...as Hex Stream。 复制到的内容应当是这种格式： 00001f3764925bbf3200000000622500000000000036c62b06e75f6f45cb4fdfb190045a51153196b05f5a7b5d5b6f699b5d003ed9c786007ee110 2. 在 ESXi 上部署 OpenWrt 我的 OpenWrt 是部署在 ESXi 6.7 上的。为了保证系统的稳定性以及对国内环境的良好兼容，我选择了 ImmortalWrt 这个较为纯净的分支。\n下载镜像：前往镜像站下载最新的 ImmortalWrt 24.10.5 x86/64 固件，选择适合 ESXi 的 generic-ext4-combined.vmdk.gz。 格式转换：解压上传到 ESXi 数据存储后，需要开启 SSH 使用 vmkfstools 将 vmdk 转换成 ESXi 兼容的厚置备或精简置备格式。 例如，将其转换为精简置备（Thin Provisioning）的命令如下： 1 vmkfstools -i immortalwrt-24.10.5-x86-64-generic-ext4-combined.vmdk openwrt.vmdk -d thin MAC 地址伪装：这是非常关键的一步！在 ESXi 中为 OpenWrt 虚拟机配置网卡时，找到用于连接 IPTV 接口的那张虚拟网卡，将其 MAC 地址手动修改为抓包获取到的机顶盒 MAC 地址，千万不要使用系统自动生成的 MAC。 3. 网络拓扑与 VLAN 配置 graph TD %% 物理硬件层 subgraph Physical_Layer [物理透传链路] ONU[GPON ONU 光猫] Mercury[水星 SG105 Pro 交换机] Huawei[华为交换机] ESXi_Host[ESXi 6.7 宿主机] end %% 虚拟化内部核心逻辑 subgraph ESXi_Internal [ESXi 虚拟环境] vSwitch((vSwitch0 虚拟交换机)) Main_VM[OpenWrt 主路由] IPTV_VM[IPTV-OpenWrt 旁路由] end %% 物理链路透传路线 ONU ---|IPTV 物理专用口 交换机打VLAN 13 TAG| Mercury Mercury ---|物理 Trunk 链路| Huawei Huawei ---|物理网线接入| ESXi_Host ESXi_Host ---|物理网卡| vSwitch %% 虚拟机与 vSwitch 的连接 (依靠 VLAN 划分业务) vSwitch ---|VLAN10: 承载 LAN 内部互通| Main_VM vSwitch ---|VLAN10: 承载 LAN 内部互通| IPTV_VM vSwitch ---|VLAN13: 承载 IPTV 组播信号| IPTV_VM %% 拨号逻辑 (单独标注业务走向) ONU -.-\u003e|PPPoE 逻辑链路| Main_VM %% 样式美化 style IPTV_VM fill:#f96,stroke:#333 style Main_VM fill:#bbf,stroke:#333 style vSwitch fill:#dfd,stroke:#333 为了将光猫的 IPTV 接口信号引入到虚拟机的 OpenWrt 中，我们需要划定 VLAN。\nESXi 配置：在 ESXi 6.7 的网络设置中，创建一个名为 iptv 的端口组，并为其分配一个独有的 VLAN ID。 实体交换机配置：在连接 ESXi 宿主机的实体交换机上，同样需要配置此 VLAN。 物理连接：将光猫上的 IPTV 网口通过网线连接到实体交换机的一个端口上。 透传：通过交换机打上 VLAN 标签后，将链路透传到 ESXi 6.7 的 vSwitch 上，最终将这个专属的端口组分配给 OpenWrt 虚拟机的 IPTV 接口。 4. 安装与配置 rtp2httpd rtp2httpd 是一个非常优秀的轻量级组播转单播工具。相较于传统的并行业界方案（如 udpxy 采用 fork-per-client 模型），它采用了更高效的事件驱动架构，在并发和资源占用上具有显著优势。\n根据其官方性能测试（Benchmark）数据显示，在同等多流高负载下（例如独立处理 8 个并发 40Mbps 码率的组播流），基于 Ubuntu 24.04 on Apple M3 Max (Parallels Desktop 虚拟机) 环境下的测试结果：\n最高效的 CPU 算力：CPU 使用率仅约 msd_lite 的 66%、udpxy 的 16% 以及 tvgate 的 5%。 极低的内存占用：即使全默认配置也可将内存开销稳定在 4MB 左右，非常适合部署于如 OpenWrt 这样硬件资源受限的嵌入式路由设备上。 高带宽重载表现稳定：即便在处理高达 400 Mbps 单点高码率流转发的极端场景下，整体 CPU 占用也仅约 27%，为系统保留了充足的余量。 便捷的内置 Web 播放器：除了卓越的转发性能，rtp2httpd 还内置了一个轻量级的 Web UI 播放器。这使得用户在完成基础配置后，可以直接通过浏览器实时预览和验证 IPTV 频道流，无需频繁切换到外部播放器（如 VLC 或 PotPlayer），极大地提升了调试效率。 在 OpenWrt 系统上，我们需要依次安装它的核心程序和配套的 LuCI 界面插件。\n进入 OpenWrt 后台或使用 SSH，按顺序安装以下 3 个 ipk 文件：\nrtp2httpd_3.10.1-r1_x86_64.ipk：这是 rtp2httpd 的核心主程序，负责处理底层的组播流转单播 HTTP 流的转换逻辑。 luci-app-rtp2httpd_3.10.1-r1_all.ipk：这是 OpenWrt LuCI 提供的一套 Web UI 管理界面，安装后可以在路由器后台拥有可视化的配置页面和控制面板。 luci-i18n-rtp2httpd-zh-cn_3.10.1_all.ipk：这是 Web UI 界面的简体中文汉化包，安装后配置页面就会显示为中文。 5. 修改 DHCP 脚本完成 IPoE 鉴权 虽然我们在 ESXi 中已经修改了接口的 MAC 地址，但这还不够，我们需要让 OpenWrt 在发起 DHCP 请求时带上之前抓包获取的 Option 12 和 Option 60 字段。\n由于 OpenWrt 默认的 LuCI 界面无法直接自定义这两个 DHCP 请求参数，我们需要修改底层脚本：\n使用 SSH 或其他方式登入 OpenWrt 的 shell。\n编辑文件 /lib/netifd/proto/dhcp.sh (代码大约位于第 72 行的 proto_dhcp_setup() 函数内)：\n1 2 3 4 5 6 7 8 9 10 11 12 13 proto_dhcp_setup() { # 省略 proto_run_command \u0026#34;$config\u0026#34; udhcpc \\ -p /var/run/udhcpc-$iface.pid \\ -s /lib/netifd/dhcp.script \\ -f -t 0 -i \u0026#34;$iface\u0026#34; \\ ${ipaddr:+-r ${ipaddr/\\/*/}} \\ ${hostname:+-x \u0026#34;hostname:$hostname\u0026#34;} \\ # ${vendorid:+-V \u0026#34;$vendorid\u0026#34;} \\ # 原本是这样 ${vendorid:+-V \u0026#39;\u0026#39; \u0026#34;-x 0x3c:$vendorid\u0026#34;} \\ # 修改成这样 $clientid $defaultreqopts $broadcast $norelease $dhcpopts # 省略 } 注意在 OpenWrt 的网络接口设置里补充 DHCP 鉴权参数及路由设置（在 OpenWrt 后台菜单：网络 -\u0026gt; 接口 -\u0026gt; 找到对应的 IPTV 接口点击编辑）：\n请求 DHCP 时发送的主机名 (Hostname)：在 常规设置 选项卡下填写抓包获取的 Option 12。 请求 DHCP 时要发送的供应商类别 (Vendor Class): 在 高级设置 选项卡下填写抓包获取的 Option 60。 使用默认网关：在 高级设置 选项卡中，建议取消勾选“使用默认网关”。因为本文的 OpenWrt 是作为专门处理 IPTV 的旁路由运行，rtp2httpd 可以在自己的配置里直接指定拉取组播流的上行接口，不需要依赖全局默认路由。如果强行勾选，反而会让系统产生无谓的默认路由指向 IPoE 接口。（注：若你后续还需要通过该接口拉取单播流，建议单独为其手动编写精准的静态路由下一跳，而不是依赖默认网关。） 补充配置旁路由联网： 为了让这个专门用于 IPTV 的旁路由能够正常连接互联网（方便后续在线安装 opkg 软件包、自动更新 EPG 节目单订阅等），我们需要在其 LAN 口设置 中，将IPv4 网关指向你家中真正负责上网的主路由器 IP，并配置好 DNS 服务器。\n设置完成后，重启该网络接口。如果配置无误且鉴权通过，该接口就能成功获取到由电信 IPoE 下发的内网 IP 地址（例如 10.x.x.x）。\n6. 配置 rtp2httpd 与订阅地址 网络打通后，我们在 OpenWrt 的 LuCI 界面（服务 -\u0026gt; rtp2httpd）中进行基础配置：\n选择对应的上游接口（即刚才获取到 10.x 段 IP 的 IPTV 接口）。 配置本地监听的端口（例如 5140）。 有了服务端，接下来需要有节目源。推荐使用开源项目 Zhejiang_Telecom_IPTV 整理好的频道列表。\n为了方便终端使用，可以采用该项目提供的订阅链接形式。将下面的 IP 和端口替换为你 OpenWrt 自己的内网 IP 及 rtp2httpd 监听的端口：\n1 https://myepg.org/Zhejiang_Telecom_IPTV/Subscribe/?ip=172.20.10.15:5140 (注：这里 172.20.10.15:5140 是我的 OpenWrt 局域网地址和 rtp2httpd 的监听端口)\n最终结果展示 全部配置完毕后，就可以在局域网内任意终端进行观看了：\nApple TV / iOS：下载 APTV 或其他直播源播放器，添加上述的订阅链接即可加载完整的浙江电信频道列表（自带节目预告和台标）。 网页测试：rtp2httpd 插件本身十分强大，自带了 Web 版本的视频观看控制台。在配置好后，直接进入 OpenWrt 上的 rtp2httpd 页面，点击流媒体源即可在浏览器内直接无缝播放测试。 通过这种方式，家里再也不用专门拖一根网线接机顶盒，客厅的 Apple TV 完美兼顾了流媒体与本地电视直播的功能。\nIGMP 配置与踩坑记录 在整个 IPTV 内网融合的过程中，组播（Multicast）和 IGMP（Internet Group Management Protocol）往往是最容易让人踩坑的地方。这里记录一下我的实际测试结果与遇到的问题：\n1. 关于 IGMP 的作用与必要性 IGMP 的核心作用之一是防止组播泛洪（即交换机把组播流当做广播一样，发送给局域网内的所有设备，导致网络拥堵）。 但在我们的方案中，因为已经使用了 VLAN 进行了精细的区域物理隔离，IPTV 的信号已经被严格限制在了专属的 VLAN 内。因此，在这条链路上是否配置复杂的 IGMP Proxy 或 IGMP Snooping，其实对防泛洪并没有太大实质性影响。\n2. 核心大坑：水星 SG105 Pro 交换机 如果你和我一样使用的是水星 SG105 Pro 这款轻量级网管交换机，一定要关闭“IGMP 监听 (IGMP Snooping)”功能！ 开启该选项后会导致 OpenWrt 完全无法拉取到组播流。原因可能是该型号交换机的 IGMP Snooping 逻辑设计问题（或许是因为我的 IPTV 并没有接在其定义的“上联口”上导致组播按口修剪错误），总之将其关闭后即恢复正常。\n3. 对拉流无影响的设置项 经过实测，以下几处容易被误解的设置其实完全不需要开启：\nESXi 端口组安全策略：虚拟机端口组的“混杂模式”、“MAC 地址更改”、“伪传输”均无需接受，保持系统默认的“拒绝”即可，完全不影响拉流。 OpenWrt IGMP 版本强制：在 OpenWrt 的 IPTV 接口高级设置中，无论是强制指定使用 IGMPv2 还是 IGMPv3，对实际的拉流均没有影响。 附加技巧：如何验证 OpenWrt 成功收到了组播流？ 在 OpenWrt 环境下排查问题时，图形界面的信息往往不够直观。我们可以通过强大的 socat 命令行工具来手动模拟拉流并打印二进制数据包，从而验证网络链路是否彻底打通。\n在 OpenWrt 的 SSH 终端中执行以下命令（以组播地址 233.50.201.119:5140 和物理接口 eth1 为例）：\n1 socat -u UDP4-RECVFROM:5140,ip-add-membership=233.50.201.119:eth1 STDOUT | hexdump -C 命令原理解析：\nsocat -u：表示单向数据传输（从左至右）。 UDP4-RECVFROM:5140：在本地监听 UDP 端口 5140接收数据。 ip-add-membership=233.50.201.119:eth1：这是非常关键的一步！它向网络中主动发送 IGMP JOIN 报文，告诉上游设备“请把 233.50.201.119 这个组播组的数据发给我的 eth1 接口”。注意：这里的 eth1 必须替换为你实际 IPTV 的物理网卡名称。 STDOUT | hexdump -C：将接收到的 UDP 数据流（本质上是连续的 RTP/MPEG-TS 视频帧二进制数据）导入标准输出，并通过 hexdump 工具以十六进制字符格式（带 ASCII 转换）直观地打印在屏幕上。 如果在执行该命令后，你的终端开始连续不断地疯狂滚动十六进制的字符流，就说明你的底层网络、VLAN 和路由已经完美打通，成功接收到了视频流！接下来只要交给 rtp2httpd 愉快地转换即可。\n参考资料 电信 IPTV 内网融合教程 - baiyun.me OpenWrt 中，浙江电信 IPTV 内网融合方案 - blog.welain.com Zhejiang_Telecom_IPTV 项目主页 ","date":"2026-03-04T00:00:00Z","image":"https://oolong.live/p/%E9%80%9A%E8%BF%87-openwrt--rtp2httpd-%E6%89%93%E9%80%A0%E5%85%A8%E5%B1%8B-iptv%E6%B5%99%E6%B1%9F%E7%94%B5%E4%BF%A1%E7%BB%84%E6%92%AD%E8%BD%AC%E5%8D%95%E6%92%AD%E5%AE%9E%E6%88%98%E6%95%99%E7%A8%8B/index_hu_92696b38f1fb7b01.webp","permalink":"https://oolong.live/p/%E9%80%9A%E8%BF%87-openwrt--rtp2httpd-%E6%89%93%E9%80%A0%E5%85%A8%E5%B1%8B-iptv%E6%B5%99%E6%B1%9F%E7%94%B5%E4%BF%A1%E7%BB%84%E6%92%AD%E8%BD%AC%E5%8D%95%E6%92%AD%E5%AE%9E%E6%88%98%E6%95%99%E7%A8%8B/","title":"通过 OpenWrt + rtp2httpd 打造全屋 IPTV：浙江电信组播转单播实战教程"},{"content":"TL;DR: 本文总结了个人近期折腾多款 AI 效率工具的实战体验。\n文生图推荐（Mac 环境）：如果你的设备是 Mac (Apple Silicon)，强烈推荐使用界面友好且支持直接加载常用模型及 LoRA/ControlNet 配置的 Draw Things。高阶用户首选 ComfyUI，但注意避开 FP8 量化踩坑。 随着 AIGC 生态的爆发，在本地或自建算力节点上跑得动的高质量模型越来越多。作为一名技术折腾爱好者，我近期密集测试了目前最主流的一批图像生成工具与本地大语言模型 (LLM) 运行容器。在这篇文章中，我将分享每款产品在实际使用中的优缺点和踩坑记录，希望对准备进行本地化部署的开发者有所帮助。\n第一部分：文生图工具体验 1. Mochi Diffusion 这是我入坑文生图接触的第一款工具，选择它的初衷是主打轻量、上手门槛低。从 Hugging Face 下载了几个 CoreML 格式转换的模型后，发现虽然确实能跑出图，但总体生成效果略显“抽象”。\n它最大的亮点是推理全程不挑显卡 (GPU)，主要通过调用 CPU 和 Apple 的 NPU 算力资源来进行渲染，这意味着即使没有高性能显卡，也能在轻薄本上跑起来。缺点也很明显：受限于硬件，出图速度比较慢，并且生态扩展性弱。客观来讲，并不是长久之计，目前主观不太推荐。\n2. Draw Things Draw Things 是一款极其优秀的“折中”且全面的解决方案。 软件内置了海量的云端模型可以直接下载（如 Llama 3, SDXL 等），而且原生支持用户自由灵活地设置各种参数。\n它的功能极其完整，不仅能加载作者自行转换后的专属模型，更重要的是，它原生支持了 LoRA 权重加载和 ControlNet 控制功能。从实际运行而言，Draw Things 针对 Mac 系统底层的 Metal 框架优化得非常稳定流畅，且 UI 界面易用。综合而言，我认为它是目前 Mac 用户的首选文生图主力工具。\n3. ComfyUI ComfyUI 严格意义上不能称为简单的软件，这是一个高度可定制化的节点式工作流平台。它支持市面上绝大多数开源模型，我重点尝试了近期大热的 Flux 模型。\n不过在部署过程中我结实地踩了一个坑：在 Mac 的 Apple Silicon 系列芯片上强行运行 Flux 模型时，采用 FP8 量化会直接报错中断（底层框架暂不支持在该芯片上直接走 FP8）。 最终的解决方案是换成 GGUF 量化格式的模型，并搭配使用 TeaCache、WaveSpeed 等第三方工作流加速技术。经过优化，冷启动生成一张大图的时间从龟速的 240 秒大幅缩短到了 180 秒左右。\n结论：ComfyUI 的自定义空间无敌，但它有着极高的学习曲线，同时也极度压榨主机的显存和浮点运算性能，不太适合配置一般的设备，但作为进阶玩家是必备利器。\n第二部分：本地 LLM 大语言模型运行工具体验 1. Ollama Ollama 是目前所有想要尝试本地 LLM 新手的首选“入坑神器”。\n其最大的优势在于极简的类 Docker 体验体验和庞大的官方 Registry 生态。你只需要一行 pull 命令就可以把市面上各种不同量化版本的模型拖拽到本地运行，网络下载速度也做了很好的 CDN 优化。比如我曾经尝试过拉取并运行最大至 671B 规模参数的 4bit 量化满血版 DeepSeek-R1，不仅跑通了，性能表现也同样令人满意。强烈推荐用作单机验证和日常测试容器。\n2. vLLM 在此之后，我尝试使用业界主流的高性能后端 vLLM 框架，它的初衷是想要在本地搭建并模拟出一套与 OpenAI 完全兼容的并发 API 接口服务。\n然而，在配置多显卡加速（张量并行，Tensor Parallelism）时，我卡在了一个非常棘手的环境级错误上：频繁抛出 nccl 报错死锁。\n1 2 # 执行 vllm 并发命令时出现问题 vllm serve modelpath --tensor-parallel-size 2 --max-model-len 32768 --enforce-eager 受限于多卡环境的配置能力以及复杂的驱动栈，经过了多轮参数修正和环境排查，暂时未能找到针对该错误的有效解决方案，只好暂时将 vLLM 搁置。\n3. SGLang (强烈推荐) 相比于在 vLLM 上遭遇反复挫折，同门“师兄弟” SGLang 框架在多显卡调度与并发控制上的表现则异常稳定且顺滑，上机配置后完全没有再遭遇任何进程级报错。\n启动方式同样十分直接，参考官方文档调用模型拉起服务：\n1 python -m sglang.launch_server --model-path modelpath --port 30000 --tp-size 8 --dp-size 1 --mem-fraction-static 0.7 当我采用多卡（张量并行深度切分）运行大规模本地模型时，SGLang 的底层支撑十分流畅，整个推理生成的速度、Token 的吞吐量和长连接稳定性都极其出色。此外，折腾 SGLang 框架也强行逼着我学习和实操了许多大模型集群部署中的进阶知识，比如：什么是张量并行 (TP) 与数据并行 (DP)、模型精度衰减的影响，以及极端长上下文 (Context-Length) 是如何吞噬且影响 KV Cache 剩余可用空间的。\n如果你有分布式或较高压力的微调/推理诉求，我更偏爱并推荐 SGLang 成为你的后端基础设施引擎。\n","date":"2025-02-24T00:00:00Z","permalink":"https://oolong.live/p/%E4%B8%BB%E6%B5%81%E6%96%87%E7%94%9F%E5%9B%BE%E4%B8%8E%E6%9C%AC%E5%9C%B0-llm-%E5%B7%A5%E5%85%B7%E9%83%A8%E7%BD%B2%E9%81%BF%E5%9D%91%E6%8C%87%E5%8D%97/","title":"主流文生图与本地 LLM 工具部署避坑指南"},{"content":"TL;DR: 实测配备 48GB 内存的 M4 Pro 运行本地 Qwen 2.5 14B（4bit），通过 LM Studio 使用 Apple 原生的 MLX 框架相比常规的 GGUF 格式约有 15% 的性能提升。但对于参数量 32B 及以上的模型，单机推理速度仍稍显吃力。对于日常开发探索，48GB 大内存赋予了更高的天花板。\n选购考量：为何升级至 48GB 内存的 M4 Pro 今年搭载 M4 Pro 芯片的 MacBook Pro 在众多视频评测中展现了许多亮点。相较于上一代的 M3 Pro 产品，这次升级更为显著。其中屏幕亮度提升到 SDR 1000 尼特，HDR 1600 尼特。接口全面升级为雷雳 5（Thunderbolt 5），当然，这也是个“战未来”的配置升级。\n作为一名长期使用 M1 MacBook Pro 的用户，这台老设备的 CPU 性能对我来说其实绰绰有余，唯一的痛点是内存太小了。我经常在活动监视器中看到内存压力显示为黄色，这让我感到有些焦虑。设备使用起来其实没有明显的卡顿感，只是这次 M4 的性能提升同时碰到了国补，让我萌生了升级的念头。\n对比配置后发现，配备 24GB 内存的 M4 Pro MacBook Pro 售价为 16999 元，只比配备同等 24GB 内存的 M4 基础版贵 1000 元。在这微小的差价内，处理器、图形处理能力（GPU）和内存带宽等方面均有显著提升，这使得升级至 M4 Pro 版极具性价比。然而，我也发现国补的“M4 Pro 丐版”并不好抢。兜兜转转等了很久，我最终未能享受到国家补贴的优惠，而是直接在苹果的授权经销商处购买了一台内存定制升级至 48GB 的 M4 Pro 机器。\n为何要选择 48G 内存呢？\n浏览器重度使用习惯：我的 Chrome 标签页一般是等到实在放不下了才会去整理关闭。 探索本地大模型（LLM）部署：这是促使我加满内存的决定性因素。尽管当前环境下直接调用网络云端 API 可能更为高效，但 AI 模型的发展速度实在太快，我想亲自尝试在本地运行它们。例如，现在可以免费调用的开源模型 Qwen 2.5 7B，在能力上已经基本接近去年 OpenAI 的 GPT-3.5 Turbo。 只是没想到，这台笔记本电脑的内存配置突然成为了家中最高的计算节点。相比之下，我家里的 HomeLab 服务器（HP ProLiant MicroServer Gen10 Plus）也只有 32GB 的内存。\n本地 LLM 实测：MLX vs GGUF 性能对比 为了测试这台 M4 Pro 在 AI 推理上的潜力，我选择了跨平台的本地大模型运行工具 LM Studio。\n通过官方更新文档了解到，0.3.4 版本的 LM Studio 专门为 MLX 格式（Apple 专为自家芯片优化的开源机器学习框架）进行了标注和模型筛选。从理论设计上看，MLX 架构在苹果芯片设备上的底层调用效率应优于通用的 GGUF 格式。\n为了验证这一点，我下载了 Qwen 2.5 14B（4bit 量化） 版本进行了推理对比。\n实测结果分析 生成速率提升有限：实测发现，加载使用 MLX 格式的模型，其 token 生成速度相比 GGUF 格式确实带来了 约 15% 左右的轻微性能提升。但在日常聊天的真实体感中，由于推理速度本身较快，这种 15% 的增幅感知并不十分显著。 NPU 利用率疑问：此外，在整个推理过程中，即便使用了专门优化的 MLX 框架，我通过系统监控工具（如 asitop）也几乎未能观察到 M4 Pro 内置的 神经引擎（NPU）高度参与运算。依然主要依赖 GPU 和 CPU 矩阵。 进一步针对更大规模的模型进行压力测试：对于参数量达到 32B 级别及以上的大模型，即便在拥有较高显存带宽的 M4 Pro 上运行，每秒生成的 token 数量也变得不太令人满意。这类超大参数模型在移动端芯片上的性能表现，距离丝滑的日常全天候辅助场景仍有距离。\n结论与展望 总体而言，经过对本地大模型的初步体验，我发现 M4 Pro 相比之前的产品确实有显著提升，但并未给我带来如同当年初见 M1 MacBook Pro 时那种“跨时代”的突破性惊喜（特别是在 AI 本地推理的直观体感上）。\n然而，不可否认的是，这高达 48GB 统一内存的超高配置，给了我一台随时随地部署各类开源模型测试的“移动机房”。未来随着 MLX 框架生态的进一步成熟，也许这些闲置算力能发挥出更大的探索价值，或许这才是此次升级最大的长远意义所在。\n","date":"2024-12-17T00:00:00Z","image":"https://oolong.live/p/m4-pro-%E8%BF%90%E8%A1%8C%E6%9C%AC%E5%9C%B0%E5%A4%A7%E6%A8%A1%E5%9E%8B-llm-%E5%AE%9E%E6%B5%8Bmlx-%E4%B8%8E-gguf-%E6%80%A7%E8%83%BD%E6%B7%B1%E5%BA%A6%E5%AF%B9%E6%AF%94/index_hu_ee980b5928e9abe2.webp","permalink":"https://oolong.live/p/m4-pro-%E8%BF%90%E8%A1%8C%E6%9C%AC%E5%9C%B0%E5%A4%A7%E6%A8%A1%E5%9E%8B-llm-%E5%AE%9E%E6%B5%8Bmlx-%E4%B8%8E-gguf-%E6%80%A7%E8%83%BD%E6%B7%B1%E5%BA%A6%E5%AF%B9%E6%AF%94/","title":"M4 Pro 运行本地大模型 (LLM) 实测：MLX 与 GGUF 性能深度对比"},{"content":"2018年11月3日，Xbox One更新到了Xbox One X。服役四年，在去年11月正式退休了。\n4年时间里也在上面通关了不少3A大作和独立游戏。后期因为机械硬盘老化的原因，导致各种读盘困难加莫名闪退。\n昨晚看着堆放在角落的老战友，不由心生感慨念旧了起来。手上刚好有闲置的2.5寸SSD，那就给这位老战友进行一次小小的手术吧。\n其实也明白，即便我将其修复，最终它仍将静静地躺在某个角落里。\n随着岁月的流逝，游戏开始超出了我的能力范围。\n不是什么技术贴，只是感慨两个世代的变迁和我曾经的游戏时光。\n","date":"2023-09-26T00:00:00Z","image":"https://oolong.live/p/%E5%8D%87%E7%BA%A7%E8%80%81%E6%88%98%E5%8F%8Bxbox-one-x%E6%8D%A2%E8%A3%85ssd/index_hu_a7156476ec61156d.webp","permalink":"https://oolong.live/p/%E5%8D%87%E7%BA%A7%E8%80%81%E6%88%98%E5%8F%8Bxbox-one-x%E6%8D%A2%E8%A3%85ssd/","title":"升级老战友：Xbox One X换装SSD"},{"content":"TL;DR: 本教程介绍如何通过免费开源的 Hammerspoon 监听特定 USB 键盘/鼠标拨动（或重新插拔）事件自动切换显示屏信号源。方案使用 brew install m1ddc 获取指令集，通过定位目标显示器独立的 UUID 控制双屏并发切换，并在 Lua 中封装了更为健壮的非阻塞（异步回调）延时命令机制，解决了唤醒时设备识别延迟的问题。\nMacBook 和 Win 主机共享一套键鼠和显示器，键鼠当前是通过外接 USB 切换器进行切换。显示器通过（雷雳4/Type-C）和 Mac 连接，同时通过（DP/HDMI）和 PC 连接。\n这样切换键鼠很方便，我只要按一下线控开关就在物理上实现了 USB 键鼠上行通信通道的切换。但是这个方案存在一个体验痛点：按下线控开关切换键鼠 USB 上行的同时，无法做到显示器输入源同步自动切换。\n大致的线缆拓扑如下：\n因为 DELL U2725Q 等多款戴尔高端显示器机身上往往带有 USB 3.0 HUB ，所以拓扑上 USB 切换器连接 Mac 的上行是接在显示器一端的，这样显示器和 MacBook 只需要一根 USB-C 线连接就可以实现外接视频信号、键鼠数据下行控制、PD快充、有线网卡等一体化功能。\nDDC/CI 协议：通过命令行切换输入源 为了实现软件层的显示器信号切换，我们需要引入 m1ddc 这个项目。它可以实现 Apple Silicon (M系列芯片) 的 Mac 通过 DDC/CI 硬件控制协议发送指令，直接控制外接显示器的系统属性（亮度、对比度、输入源）。\n安装与多显示器 UUID 识别 我们可以直接通过 Homebrew 安装 m1ddc：\n1 brew install m1ddc 由于我的桌面主要是双显示器方案（一台 DELL U2725QE 和一台 DELL U2720Q），我们要让脚本精确识别是控制哪一台显示器，避免由于设备拔插顺序不固定导致通道发错。首先接好两台显示器，在终端中执行以下命令列出显示器详情：\n1 2 3 $ m1ddc display list [1] DELL U2725QE (1D9A4CC2-9ACC-404C-954D-34EAEFC590A5) [2] DELL U2720Q (AE60FFA9-619A-48E1-A9F5-995880A1C270) 记住括号内的 UUID，接下来的指令我们将通过指派 UUID 来独立切换它们的输入通道。假设将 U2725QE 切换至 USB-C：\n1 2 # 指定显示器的 UUID (例如: 1D9A4CC2-9ACC-404C-954D-34EAEFC590A5) 切换到通道值 25 m1ddc display 1D9A4CC2-9ACC-404C-954D-34EAEFC590A5 set input 25 Hammerspoon 检测 USB 状态与异步切换控制 为了解决前面提到的“最后一公里”痛点，我们的构想是：在 Mac 后台持续检测特定 USB 设备连通状态。由于 USB 切换器按键被按下时，外设（例如我的 ROG 键盘接收器）对 Mac 系统而言实质上就是一次瞬间的“物理断开与重新连接”。如果在 Mac 上发现这个设备接通了，说明用户目前希望用 Mac，我们便命令显示器切到 Mac；如果发现设备断开了，说明用户把键鼠切给 PC 去了，此时命令显示器切到 Windows PC 端口即可。\nHammerspoon 堪称 macOS 环境下的自动化效率神器，它桥接操作系统的底层事件系统与灵活的 Lua 脚本引擎。\n我们可以在家目录的 .hammerspoon （而非单纯的 modules）结构下进行组织：\n1 2 3 4 5 ~/.hammerspoon ├── Spoons ├── init.lua └── modules └── usb_script.lua 异步防阻塞 Lua 脚本 由于 DDC 通道控制本质上存在物理延迟，如果使用单纯的同步命令行，可能会阻塞 Hammerspoon 的主线程导致 Mac 菜单栏瞬间无响应；同时在唤醒 Mac 时，USB 树建立是需要时间的，瞬间下发的命令通常会失败。\n因此，在这套 Lua 脚本中做了如下设计：\n异步并发处理：引入了基于 hs.task.new 的异步并发回调函数，避免阻塞系统。 错误重试与延时缓冲：引入了 hs.timer.doAfter 与重试机制缓冲对显示器的并发请求，防止执行失败。 系统电源事件监听：监听了系统唤醒 systemDidWake 的回调，为 USB 底层初始化预留出足够的两秒缓冲间隙。 你需要通过 macOS 的“系统信息” \u0026gt; “USB” 面板获取你用来做触发器识别的设备名，此处我以我的键盘接收器名称 ROG OMNI RECEIVER 作为识别触发点。\n将下列完整的代码写入你的配置文件（如 init.lua 或独立的 modules/usb_script.lua）：\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 local usbWatcher = nil local caffeinateWatcher = nil -- Homebrew 安装路径下的 m1ddc 二进制文件位置 local m1ddc = \u0026#34;/opt/homebrew/Cellar/m1ddc/1.2.0/bin/m1ddc\u0026#34; -- 第一台上一步拿到的显示器 UUID local U2720_UUID = \u0026#34;AE60FFA9-619A-48E1-A9F5-995880A1C270\u0026#34; -- 第二台上一步拿到的显示器 UUID local U2725_UUID = \u0026#34;1D9A4CC2-9ACC-404C-954D-34EAEFC590A5\u0026#34; -- 异步执行命令（防阻塞 macOS 主线程运行，失败时每隔 2 秒默认重试 6 次） local MAX_RETRIES = 6 local RETRY_DELAY = 2 local function executeAsync(executable, args, retryCount) retryCount = retryCount or 1 local argsStr = table.concat(args, \u0026#34; \u0026#34;) local task = hs.task.new(executable, function(exitCode, stdOut, stdErr) if exitCode ~= 0 then if retryCount \u0026lt; MAX_RETRIES then print(\u0026#34;[USB Script] Command failed (attempt \u0026#34; .. retryCount .. \u0026#34;/\u0026#34; .. MAX_RETRIES .. \u0026#34;): \u0026#34; .. argsStr .. \u0026#34;, retrying in \u0026#34; .. RETRY_DELAY .. \u0026#34;s...\u0026#34;) hs.timer.doAfter(RETRY_DELAY, function() executeAsync(executable, args, retryCount + 1) end) else print(\u0026#34;[USB Script] Command failed after \u0026#34; .. MAX_RETRIES .. \u0026#34; attempts: \u0026#34; .. argsStr) print(\u0026#34;[USB Script] stderr: \u0026#34; .. (stdErr or \u0026#34;\u0026#34;)) end else print(\u0026#34;[USB Script] Command succeeded (attempt \u0026#34; .. retryCount .. \u0026#34;): \u0026#34; .. argsStr) end end, args) task:start() end -- 检查指定的 USB 接收器名称是否在已连接阵列中存在 local function isROGReceiverConnected() local usbDevices = hs.usb.attachedDevices() for _, device in ipairs(usbDevices) do if device.productName == \u0026#34;ROG OMNI RECEIVER\u0026#34; then return true end end return false end -- 依据连接状态分别给每个显示器的 UUID 发送信号通道切换请求 -- 输入源参考代码： -- 25 = Thunderbolt 4 (TB4) -- 27 = USB-C -- 15 = DisplayPort (DP) -- 17 = HDMI local function switchMonitorInput() if isROGReceiverConnected() then print(\u0026#34;[USB Script] ROG Receiver connected -\u0026gt; switching to TB4/USBC\u0026#34;) -- U2725QE 切换到 TB4 (25) executeAsync(m1ddc, {\u0026#34;display\u0026#34;, U2725_UUID, \u0026#34;set\u0026#34;, \u0026#34;input\u0026#34;, \u0026#34;25\u0026#34;}) -- U2720Q 切换到 USB-C (27) executeAsync(m1ddc, {\u0026#34;display\u0026#34;, U2720_UUID, \u0026#34;set\u0026#34;, \u0026#34;input\u0026#34;, \u0026#34;27\u0026#34;}) else print(\u0026#34;[USB Script] ROG Receiver disconnected -\u0026gt; switching to HDMI/DP\u0026#34;) -- U2725QE 切换到 DP (15) executeAsync(m1ddc, {\u0026#34;display\u0026#34;, U2725_UUID, \u0026#34;set\u0026#34;, \u0026#34;input\u0026#34;, \u0026#34;15\u0026#34;}) -- U2720Q 切换到 HDMI (17) executeAsync(m1ddc, {\u0026#34;display\u0026#34;, U2720_UUID, \u0026#34;set\u0026#34;, \u0026#34;input\u0026#34;, \u0026#34;17\u0026#34;}) end end -- USB 热插拔生命周期回调 local function usbDeviceCallback(data) print(\u0026#34;[USB Script] USB event: \u0026#34; .. (data[\u0026#34;eventType\u0026#34;] or \u0026#34;unknown\u0026#34;) .. \u0026#34; - \u0026#34; .. (data[\u0026#34;productName\u0026#34;] or \u0026#34;unknown\u0026#34;)) if (data[\u0026#34;productName\u0026#34;] == \u0026#34;ROG OMNI RECEIVER\u0026#34;) then -- 发现设备状态改变时，延时 2 秒切换，给予系统底层 USB 控制器驱动注册缓冲的时间 hs.timer.doAfter(2, switchMonitorInput) end end -- Mac 的睡眠唤醒生命周期回调 local function caffeinateCallback(event) -- 若刚从睡眠唤醒导致系统重载了整个 USB 拓扑，重新扫盘并下发指令 if event == hs.caffeinate.watcher.systemDidWake then hs.timer.doAfter(2, switchMonitorInput) end end -- 实例化两个监听器并挂载启动 usbWatcher = hs.usb.watcher.new(usbDeviceCallback) usbWatcher:start() caffeinateWatcher = hs.caffeinate.watcher.new(caffeinateCallback) caffeinateWatcher:start() 如果代码存放在子目录了，记得在主配置 init.lua 最外层 require(\u0026quot;modules.usb_script\u0026quot;) 导入即可。上述配置都保存完成后，记得在顶部菜单栏 Hammerspoon 的图标下拉页面中点击 Reload Config 重新载入。\n最后 目前在两台不同的硬件架构操作系统（Mac \u0026amp; Windows）切换显示器和共享外设键鼠，我只需要物理按一次廉价 USB 切换器的线控小开关就能从信号源和硬件层双向瞬间平滑过渡。在解决这个“最后一公里”的过程中重度接触并感受到了开源免费的 Hammerspoon 其 API 的强大魅力，确实是一款能高度自由定制 macOS 自动化体验的神仙工具。\n","date":"2023-08-31T00:00:00Z","permalink":"https://oolong.live/p/hammerspoon-%E8%87%AA%E5%8A%A8%E5%8C%96mac-%E4%B8%8E-windows-%E5%8F%8C%E6%98%BE%E7%A4%BA%E5%99%A8%E8%BE%93%E5%85%A5%E6%BA%90%E9%AB%98%E6%95%88%E5%88%87%E6%8D%A2%E6%8C%87%E5%8D%97/","title":"Hammerspoon 自动化：Mac 与 Windows 双显示器输入源高效切换指南"},{"content":"今年IPhone 14 Pro 系列增加了Apple Watch的熄屏显示（Always On Display）功能。这个功能真的很香，大约每小时多消耗1%的电量，同时在无光环境下（如放口袋里、夜晚关灯后）屏幕会自动熄灭。当然我相信苹果肯定做了系统优化防止OLED烧屏，至少过保前肯定不会烧是吧。\nUnsplash API API简介 Authorization\nPublic Authentication\nMost actions can be performed without requiring authentication from a specific user. For example, searching, fetching, or downloading a photo does not require a user to log in.\nTo authenticate requests in this way, pass your application’s access key via the HTTP Authorization header:\n1 Authorization: Client-ID YOUR_ACCESS_KEY You can also pass this value using a client_id query parameter:\n1 https://api.unsplash.com/photos/?client_id=YOUR_ACCESS_KEY Get a random photo\nRetrieve a single random photo, given optional filters.\n1 GET /photos/random API获取图片链接\n1 2 3 4 5 6 7 8 9 10 #YOUR_ACCESS_KEY Application Access Key #/photos/random 为获得随机的图片 #orientation=portrait 图片风格竖屏、横屏等(Valid values: landscape, portrait, squarish) #query=wallpapers 搜索图片类型 curl https://api.unsplash.com/photos/random?client_id=YOUR_ACCESS_KEY\u0026amp;orientation=portrait\u0026amp;query=wallpapers #返回内容中含有图片链接词典 \u0026#34;urls\u0026#34;:{\u0026#34;raw\u0026#34;:\u0026#34;https://images.unsplash.com/photo-1499262222376-d10eb3d5183f?ixid=MnwzNjY2MTl8MHwxfHJhbmRvbXx8fHx8fHx8fDE2NjQwNzMxODQ\u0026amp;ixlib=rb-1.2.1\u0026#34;,\u0026#34;full\u0026#34;:\u0026#34;https://images.unsplash.com/photo-1499262222376-d10eb3d5183f?crop=entropy\u0026amp;cs=tinysrgb\u0026amp;fm=jpg\u0026amp;ixid=MnwzNjY2MTl8MHwxfHJhbmRvbXx8fHx8fHx8fDE2NjQwNzMxODQ\u0026amp;ixlib=rb-1.2.1\u0026amp;q=80\u0026#34;,\u0026#34;regular\u0026#34;:\u0026#34;https://images.unsplash.com/photo-1499262222376-d10eb3d5183f?crop=entropy\u0026amp;cs=tinysrgb\u0026amp;fit=max\u0026amp;fm=jpg\u0026amp;ixid=MnwzNjY2MTl8MHwxfHJhbmRvbXx8fHx8fHx8fDE2NjQwNzMxODQ\u0026amp;ixlib=rb-1.2.1\u0026amp;q=80\u0026amp;w=1080\u0026#34;,\u0026#34;small\u0026#34;:\u0026#34;https://images.unsplash.com/photo-1499262222376-d10eb3d5183f?crop=entropy\u0026amp;cs=tinysrgb\u0026amp;fit=max\u0026amp;fm=jpg\u0026amp;ixid=MnwzNjY2MTl8MHwxfHJhbmRvbXx8fHx8fHx8fDE2NjQwNzMxODQ\u0026amp;ixlib=rb-1.2.1\u0026amp;q=80\u0026amp;w=400\u0026#34;,\u0026#34;thumb\u0026#34;:\u0026#34;https://images.unsplash.com/photo-1499262222376-d10eb3d5183f?crop=entropy\u0026amp;cs=tinysrgb\u0026amp;fit=max\u0026amp;fm=jpg\u0026amp;ixid=MnwzNjY2MTl8MHwxfHJhbmRvbXx8fHx8fHx8fDE2NjQwNzMxODQ\u0026amp;ixlib=rb-1.2.1\u0026amp;q=80\u0026amp;w=200\u0026#34;,\u0026#34;small_s3\u0026#34;:\u0026#34;https://s3.us-west-2.amazonaws.com/images.unsplash.com/small/photo-1499262222376-d10eb3d5183f\u0026#34;} 这里有几种类型的图片raw full regular small thumb small_s3 ，对应的键值为该质量图片的下载链接。\nfull returns the photo in jpg format with its maximum dimensions. For performance purposes, we don’t recommend using this as the photos will load slowly for your users. regular returns the photo in jpg format with a width of 1080 pixels. small returns the photo in jpg format with a width of 400 pixels. thumb returns the photo in jpg format with a width of 200 pixels. raw returns a base image URL with just the photo path and the ixid parameter for your API application. Use this to easily add additional image parameters to construct your own image URL. 同时可以通过以下参数调整图像大小质量\nw, h: for adjusting the width and height of a photo crop: for applying cropping to the photo fm: for converting image format auto=format: for automatically choosing the optimal image format depending on user browser q: for changing the compression quality when using lossy file formats fit: for changing the fit of the image within the specified dimensions dpr: for adjusting the device pixel ratio of the image 1 2 #例如想要匹配IPhone宽度1290 https://images.unsplash.com/photo-1499262222376-d10eb3d5183f?crop=entropy\u0026amp;cs=tinysrgb\u0026amp;fm=jpg\u0026amp;ixid=MnwzNjY2MTl8MHwxfHJhbmRvbXx8fHx8fHx8fDE2NjQwNzMxODQ\u0026amp;ixlib=rb-1.2.1\u0026amp;q=80\u0026amp;w=1290 下面是配置步骤 注册一个账号 创建一个Application，获取Access Key ①创建Application ②全部打钩 ③为Application设置一个名称 ④复制Access Key 至此取得Access Key\nShortcut快捷指令设置 可以使用或参考我分享的Shortcut，在YOUR_ACCESS_KEY填入前面复制的KEY。\n在Shortcut自动化中添加定时启动这个捷径。 关闭运行前询问，运行更无感。\n效果演示 该演示为全程锁屏状态下\n1 Your browser does not support the video tag. 参考 使用 Shortcut 自动更换 Unsplash 的壁纸 Change the wallpaper with unsplash API by using Shortcuts Unsplash API Documentation ","date":"2022-09-25T00:00:00Z","image":"https://oolong.live/p/%E4%BD%BF%E7%94%A8unsplash-api%E5%92%8Cshortcut%E4%B8%BAiphone%E5%AE%9A%E6%97%B6%E6%9B%B4%E6%8D%A2%E5%A3%81%E7%BA%B8/IPhone-14-Pro%27s-Always-On-Display_hu_b0c0f18d96980e1a.webp","permalink":"https://oolong.live/p/%E4%BD%BF%E7%94%A8unsplash-api%E5%92%8Cshortcut%E4%B8%BAiphone%E5%AE%9A%E6%97%B6%E6%9B%B4%E6%8D%A2%E5%A3%81%E7%BA%B8/","title":"使用Unsplash API和Shortcut为IPhone定时更换壁纸"},{"content":"今年夏天气温基本40℃+，想要找个群晖模板监控磁盘温度，发现官方库的群晖模板只有yaml格式。我的Zabbix是2年前官网下VMWare Zabbix Appliance 5.0 LTS镜像，只支持xml格式模板导入。我尝试将yaml转换xml导入，结果碰到各种报错。况且这个5.0 LTS镜像是基于已经EOL的CentOS 8，直接升级6.0 LTS确实有点麻烦。就有了打算部署Ubuntu 22重新安装6.0 LTS然后再迁移数据的念头。\n我一开始的想法是导出模板，导出主机配置，导出等等配置再去重新导入。尝试了下发现有各种依赖关系，而且操作起来也十分繁琐，最为关键的是历史数据会全丢了。既然数据库都是mysql，干脆迁移数据库算了。\n在Zabbix 5.0 Server上只需要导出zabbix数据库即可。\n1 mysqldump -u root -p --opt --default-character-set=utf8 --hex-blob zabbix --skip-triggers --skip-lock-tables \u0026gt; /var/tmp/zabbix.sql 将zabbix.sql拷贝对/var/tmp目录下，导入Zabbix 6.0 Server数据库。\n1 cat /var/tmp/zabbix.sql | mysql -uzabbix -p zabbix 完事了以后打开Web发现如下报错：\nThe Zabbix database version does not match current requirements. Your database version: 5010001. Required version: 6000000. Please contact your system administrator.\n这\u0026hellip;要不我直接手动改个database version？\n得了，改完直接网页都起不来了。所以Zabbix是不能直接迁移数据库么？\n那只能去Internet里再遨游一会，直到我在Zabbix官方论坛里发现了这个帖子。\n我靠，原来这数据库会自动升级，赶紧瞧瞧升级的怎么样了。\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 cat /var/log/zabbix/zabbix_server.log | grep database 1108:20220816:235019.059 current database version (mandatory/optional): 05000000/05000005 1108:20220816:235019.059 starting automatic database upgrade 1108:20220816:235019.084 completed 0% of database upgrade 1108:20220816:235019.145 completed 1% of database upgrade 1108:20220816:235019.244 completed 2% of database upgrade 1108:20220816:235019.320 completed 3% of database upgrade 1108:20220816:235019.398 completed 4% of database upgrade 1108:20220816:235019.477 completed 5% of database upgrade 1108:20220816:235019.577 completed 6% of database upgrade 1108:20220816:235019.603 completed 7% of database upgrade 1108:20220816:235019.807 completed 8% of database upgrade 1108:20220816:235019.959 completed 9% of database upgrade 1108:20220816:235019.960 database upgrade failed 1151:20220816:235030.257 current database version (mandatory/optional): 05010036/05010036 1151:20220816:235030.257 starting automatic database upgrade 1151:20220816:235030.257 database upgrade failed 1164:20220816:235042.550 current database version (mandatory/optional): 05010036/05010036 1164:20220816:235042.550 starting automatic database upgrade 1164:20220816:235042.550 database upgrade failed 1180:20220816:235054.348 current database version (mandatory/optional): 05010036/05010036 1180:20220816:235054.348 starting automatic database upgrade 1180:20220816:235054.348 database upgrade failed 😷😷😷为什么就升级失败了？\n会不会是安装Zabbix 6.0时在数据库导入过初始架构和数据，6.0和5.0数据库结构还是不一样，不能直接这么导入，那干脆删了重来吧。\n1 2 3 mysql\u0026gt; drop database zabbix; mysql\u0026gt; create database zabbix character set utf8mb4 collate utf8mb4_bin; mysql\u0026gt; quit; 为了防止影响，这次我把Zabbix服务关了再导入数据。\n1 2 3 sudo systemctl stop zabbix-agent.service sudo systemctl stop zabbix-server.service cat /var/tmp/zabbix.sql | mysql -uzabbix -p zabbix 赶紧“插电”瞧瞧升级的怎么样了，想法没有问题，成功点亮，轻松秒杀。\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 sudo systemctl start zabbix-agent.service sudo systemctl start zabbix-server.service cat /var/log/zabbix/zabbix_server.log | grep database 1108:20220817:004328.912 current database version (mandatory/optional): 05000000/05000005 1108:20220817:004328.912 starting automatic database upgrade 1108:20220817:004328.938 completed 0% of database upgrade 1108:20220817:004328.998 completed 1% of database upgrade 1108:20220817:004329.087 completed 2% of database upgrade 1108:20220817:004329.161 completed 3% of database upgrade 1108:20220817:004329.235 completed 4% of database upgrade 1108:20220817:004329.312 completed 5% of database upgrade 1108:20220817:004329.404 completed 6% of database upgrade 1108:20220817:004329.431 completed 7% of database upgrade 1108:20220817:004329.622 completed 8% of database upgrade 1108:20220817:004329.788 completed 9% of database upgrade 1108:20220817:004329.849 completed 10% of database upgrade 1108:20220817:004330.238 completed 11% of database upgrade 1108:20220817:004330.311 completed 12% of database upgrade 1108:20220817:004330.372 completed 13% of database upgrade 1108:20220817:004330.408 completed 14% of database upgrade 1108:20220817:004330.448 completed 15% of database upgrade 1108:20220817:004330.590 completed 16% of database upgrade 1108:20220817:004330.621 completed 17% of database upgrade 1108:20220817:004330.681 completed 18% of database upgrade 1108:20220817:004330.793 completed 19% of database upgrade 1108:20220817:004331.016 completed 20% of database upgrade 1108:20220817:004331.236 completed 21% of database upgrade 1108:20220817:004331.455 completed 22% of database upgrade 1108:20220817:004331.663 completed 23% of database upgrade 1108:20220817:004331.691 completed 24% of database upgrade 1108:20220817:004331.748 completed 25% of database upgrade 1108:20220817:004331.815 completed 26% of database upgrade 1108:20220817:004331.859 completed 27% of database upgrade 1108:20220817:004331.933 completed 28% of database upgrade 1108:20220817:004332.360 completed 29% of database upgrade 1108:20220817:004332.465 completed 30% of database upgrade 1108:20220817:004332.517 completed 31% of database upgrade 1108:20220817:004332.567 completed 32% of database upgrade 1108:20220817:004332.637 completed 33% of database upgrade 1108:20220817:004332.642 completed 34% of database upgrade 1108:20220817:004332.674 completed 35% of database upgrade 1108:20220817:004332.698 completed 36% of database upgrade 1108:20220817:004332.733 completed 37% of database upgrade 1108:20220817:004332.774 completed 38% of database upgrade 1108:20220817:004332.822 completed 39% of database upgrade 1108:20220817:004332.879 completed 40% of database upgrade 1108:20220817:004332.927 completed 41% of database upgrade 1108:20220817:004332.952 completed 42% of database upgrade 1108:20220817:004332.961 completed 43% of database upgrade 1108:20220817:004332.974 completed 44% of database upgrade 1108:20220817:004333.007 completed 45% of database upgrade 1108:20220817:004333.068 completed 46% of database upgrade 1108:20220817:004333.211 completed 47% of database upgrade 1108:20220817:004333.233 completed 48% of database upgrade 1108:20220817:004333.251 completed 49% of database upgrade 1108:20220817:004333.307 completed 50% of database upgrade 1108:20220817:004333.349 completed 51% of database upgrade 1108:20220817:004333.377 completed 52% of database upgrade 1108:20220817:004333.448 completed 53% of database upgrade 1108:20220817:004333.488 completed 54% of database upgrade 1108:20220817:004333.552 completed 55% of database upgrade 1108:20220817:004333.650 completed 56% of database upgrade 1108:20220817:004347.613 completed 57% of database upgrade 1108:20220817:004347.696 completed 58% of database upgrade 1108:20220817:004347.714 completed 59% of database upgrade 1108:20220817:004347.763 completed 60% of database upgrade 1108:20220817:004348.040 completed 61% of database upgrade 1108:20220817:004348.148 completed 62% of database upgrade 1108:20220817:004348.558 completed 63% of database upgrade 1108:20220817:004348.882 completed 64% of database upgrade 1108:20220817:004349.354 completed 65% of database upgrade 1108:20220817:004349.379 completed 66% of database upgrade 1108:20220817:004349.418 completed 67% of database upgrade 1108:20220817:004349.460 completed 68% of database upgrade 1108:20220817:004349.511 completed 69% of database upgrade 1108:20220817:004349.531 completed 70% of database upgrade 1108:20220817:004349.580 completed 71% of database upgrade 1108:20220817:004349.623 completed 72% of database upgrade 1108:20220817:004349.682 completed 73% of database upgrade 1108:20220817:004349.726 completed 74% of database upgrade 1108:20220817:004349.768 completed 75% of database upgrade 1108:20220817:004349.773 completed 76% of database upgrade 1108:20220817:004349.778 completed 77% of database upgrade 1108:20220817:004349.782 completed 78% of database upgrade 1108:20220817:004349.821 completed 79% of database upgrade 1108:20220817:004349.915 completed 80% of database upgrade 1108:20220817:004349.922 completed 81% of database upgrade 1108:20220817:004349.951 completed 82% of database upgrade 1108:20220817:004349.979 completed 83% of database upgrade 1108:20220817:004350.021 completed 84% of database upgrade 1108:20220817:004350.090 completed 85% of database upgrade 1108:20220817:004350.103 completed 86% of database upgrade 1108:20220817:004350.108 completed 87% of database upgrade 1108:20220817:004350.198 completed 88% of database upgrade 1108:20220817:004350.582 completed 89% of database upgrade 1108:20220817:004350.664 completed 90% of database upgrade 1108:20220817:004350.690 completed 91% of database upgrade 1108:20220817:004350.721 completed 92% of database upgrade 1108:20220817:004350.760 completed 93% of database upgrade 1108:20220817:004350.805 completed 94% of database upgrade 1108:20220817:004350.841 completed 95% of database upgrade 1108:20220817:004350.908 completed 96% of database upgrade 1108:20220817:004350.976 completed 97% of database upgrade 1108:20220817:004350.988 completed 98% of database upgrade 1108:20220817:004350.991 completed 99% of database upgrade 1108:20220817:004350.999 completed 100% of database upgrade 1108:20220817:004350.999 database upgrade fully completed 1108:20220817:004351.002 database could be upgraded to use primary keys in history tables 1103:20220817:010427.831 current database version (mandatory/optional): 06000000/06000004 1103:20220817:010427.836 database could be upgraded to use primary keys in history tables 15608:20220817:092735.931 current database version (mandatory/optional): 06000000/06000004 15608:20220817:092735.938 database could be upgraded to use primary keys in history tables 检查一下主机、模板、历史数据都正常，就是原来5.0的聚合图形不见了，这么好用的功能怎么就删了呢？\n","date":"2022-08-17T00:00:00Z","image":"https://oolong.live/p/zabbix%E6%95%B0%E6%8D%AE%E5%BA%93%E8%BF%81%E7%A7%BB%E9%81%87%E5%88%B0%E7%9A%84%E4%BA%8C%E4%B8%89%E4%BA%8B/zabbix_mysqldump_hu_cab465eac82fc1c9.webp","permalink":"https://oolong.live/p/zabbix%E6%95%B0%E6%8D%AE%E5%BA%93%E8%BF%81%E7%A7%BB%E9%81%87%E5%88%B0%E7%9A%84%E4%BA%8C%E4%B8%89%E4%BA%8B/","title":"Zabbix数据库迁移遇到的二三事"},{"content":"那天在路边吃面。\n一只狗在地上面渣渣的地方冲我叫了叫。\n我正在吃面，笑了笑。\n","date":"2022-06-16T00:00:00Z","permalink":"https://oolong.live/p/%E5%90%83%E9%9D%A2/","title":"吃面"},{"content":"时间如白驹过隙，我们的服务器已经稳定运行了31个月，见证了血喉的崩坏与重铸。下面是zabbix记录的近1年服务器数据。\nUbuntu 20.04 TrinityCore 3.3.5 部署 TrinityCore的搭建，官方有详细的文档。\n需要的依赖 1 2 3 4 sudo apt-get update sudo apt-get ``install` `git clang cmake ``make` `gcc g++ libmariadbclient-dev libssl-dev libbz2-dev libreadline-dev libncurses-dev libboost-all-dev mariadb-server p7zip libmariadb-client-lgpl-dev-compat sudo update-alternatives --``install` `/usr/bin/cc` `cc ``/usr/bin/clang` `100 sudo update-alternatives --``install` `/usr/bin/c``++ c++ ``/usr/bin/clang` `100 git源码及编译准备 1 2 3 4 5 6 cd ~/ sudo git clone -b 3.3.5 git://github.com/TrinityCore/TrinityCore.git cd TrinityCore sudo mkdir build cd build sudo cmake ../ -DCMAKE_INSTALL_PREFIX=/home/\u0026lt;username\u0026gt;/server #\u0026lt;username\u0026gt;替换为自己的用户名 编译 这里耗时较长，建议使用screen单独开一个窗口。\n1 2 sudo make -j \u0026lt;number of cores\u0026gt; #自己设置CPU核心数 sudo make install 这步完成后会在/home/\u0026lt;username\u0026gt;/server/bin文件夹下生成运行文件，/home/\u0026lt;username\u0026gt;/server/etc目录下生成配置文件。将etc目录下的worldserver.conf.dist 和 authserver.conf.dist 分别复制一份成 worldserver.conf 和 authserver.conf。\n在worldserver.conf内找到DataDir = \u0026quot;.\u0026quot;改为DataDir = \u0026quot;/home/\u0026lt;username\u0026gt;/server/data\u0026quot;\n提取客户端dbc、maps、vmaps、mmaps 这里耗时较长，建议使用screen单独开一个窗口。\n官方文档中dbc和maps是必要的，vmaps和mmaps是强推荐的。\nSome of them are optional, but highly recommended:\nDirectory Branch dbc all Mandatory maps all Mandatory vmaps all HIGHLY Recommended mmaps all HIGHLY Recommended cameras all Recommended gt master only Mandatory 这里需要将客户端先上传，假设上传路径为 /home/\u0026lt;username\u0026gt;/client\ndbc\u0026amp;maps 1 2 3 4 cd /home/\u0026lt;username\u0026gt;/client sudo /home/\u0026lt;username\u0026gt;/server/bin/mapextractor sudo mkdir /home/\u0026lt;username\u0026gt;/server/data sudo cp -r dbc maps /home/\u0026lt;username\u0026gt;/server/data vmaps 1 2 3 4 5 cd /home/\u0026lt;username\u0026gt;/client sudo /home/\u0026lt;username\u0026gt;/server/bin/vmap4extractor sudo mkdir vmaps sudo /home/\u0026lt;username\u0026gt;/server/bin/vmap4assembler Buildings vmaps sudo cp -r vmaps /home/\u0026lt;username\u0026gt;/server/data mmaps 1 2 3 4 cd /home/\u0026lt;username\u0026gt;/client sudo mkdir mmaps sudo /home/\u0026lt;username\u0026gt;/server/bin/mmaps_generator sudo cp -r mmaps /home/\u0026lt;username\u0026gt;/server/data 官方文档中说明出现下面类似的结果代表成功。\nWhen this is complete you may receive the following message which can be safely ignored.\n1 2 3 4 5 6 7 8 Processing Map 724 [################################################################] Extracting GameObject models...Extracting World\\Wmo\\Band\\Final_Stage.wmo No such file. Couldn\u0026#39;t open RootWmo!!! Done! Extract V4.00 2012_02. Work complete. No errors. 数据库设置 跑数据库之前修改配置文件/home/\u0026lt;username\u0026gt;/server/authserver.conf内的mysql的登录配置。\n1 LoginDatabaseInfo = \u0026#34;127.0.0.1;3306;trinity;trinity;auth\u0026#34; /home/\u0026lt;username\u0026gt;/server/worldserver.conf内修改\n1 2 3 LoginDatabaseInfo = \u0026#34;127.0.0.1;3306;trinity;trinity;auth\u0026#34; WorldDatabaseInfo = \u0026#34;127.0.0.1;3306;trinity;trinity;world\u0026#34; CharacterDatabaseInfo = \u0026#34;127.0.0.1;3306;trinity;trinity;characters\u0026#34; It follows this structure:\n1 Variablename = \u0026#34;MySQLIP;Port;Username;Password;database\u0026#34; 各字段含义为Mysql的IP地址，Mysql的端口号，用户名，密码，数据库名。\n下载官方的数据库建表模板\n1 2 3 4 5 6 cd ~ sudo wget https://raw.githubusercontent.com/TrinityCore/TrinityCore/3.3.5/sql/create/create_mysql.sql #登录mysql后 source /home/\u0026lt;username\u0026gt;/create_mysql.sql 建完表之后下载TDB_full_world_335._*.sql的数据库至/home/\u0026lt;username\u0026gt;/server/bin目录下。\n该文件在TrinityCore项目中下载。\n服务启动 开启认证服务\n1 sudo /home/\u0026lt;username\u0026gt;/server/bin/authserver 开启游戏服务端\n1 sudo /home/\u0026lt;username\u0026gt;/server/bin/worldserver 以上两个服务能够正常开启说明整个安装过程没有问题。\n调试 设置服务器地址、游戏版本号等。\n进入数据库auth\u0026gt;表realmlist\naddress列为连接游戏服务的地址，可以是IP也可以是域名。gamebuild为客户端版本号，这里常见的有台服12340和国服13930。\n网络端口要放开3724authserver和8085worldserver。\n任务汉化（可选） 汉化数据库github搜一搜都能有，找到适合自己环境和版本的。进mysql跑一下source就行。\n这些整完了把authserver服务和worldserver服务重新跑一遍。\n客户端修改 魔兽客户端目录下Data\\zhCN的realmlist.wtf文件内是否设置为SET realmlist \u0026quot;服务器IP或域名\u0026quot; （台服客户端为Data\\zhTW)。\n测试 进入worldserver后台创建账号，创建命令为account create \u0026lt;用户名\u0026gt; \u0026lt;密码\u0026gt;\n完了打开客户端测试一下能不能进入魔兽世界吧。\n通过WoWSimpleRegistration项目提供前端注册Web WoWSimpleRegistration是TrinityCore官方fork项目。该项目基于php，提供简单的账号注册页面，支持市面上大多数开源Wow环境。\nSupport : AzerothCore, TrinityCore, AshamaneCore, CMangos.\nRequirement : PHP \u0026gt;= 7.0\nEnable gmp, gd, soap, mbstring, pdo and pdo-mysql.\n首先安装php及相关依赖\n这里建议使用PHP7.4版本，高版本存在500错误。\n1 sudo apt install php7.4-fpm php7.4-opcache php7.4-cli php7.4-gd php7.4-curl php7.4-mysql php7.4-mbstring php7.4-gmp 添加/etc/php/7.4/fpm/pool.d/www.conf文件下的security.limit_extensions参数，解除限制 FPM 允许解析的脚本扩展名。\n1 security.limit_extensions = .php .php3 .php4 .php5 .php7 .js .css .jpg .png .gif .html .htm 下载并解压WoWSimpleRegistration，可以到WoWSimpleRegistration这里找。\n1 2 3 4 5 cd /var/www/html sudo wget https://github.com/TrinityCore/WoWSimpleRegistration/archive/refs/tags/2.0.2.tar.gz sudo tar -zxvf 2.0.2.tar.gz 安装nginx\n1 sudo apt install nginx 增加nginx配置\n1 2 3 cd /etc/nginx/conf.d/ sudo vi wow.conf 我的配置文件参考\n1 2 3 4 5 6 7 8 9 10 11 server { listen 80; # 监听端口 server_name _; # 自己PC的ip或者服务器的域名 root /var/www/html/WoWSimpleRegistration-2.0.2; # 文件路径 index index.html index.htm index.php index.nginx-debian.html; location ~ \\.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; } } 修改WoWSimpleRegistration配置文件\n1 2 3 cd /application/config sudo cp config.php.sample config.php 对config.php进行配置，具体填什么选什么跟着注释走就行了。\n比较重要的几个参数\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Core Type: 0 = TrinityCore 1 = AzerothCore 2 = AshamaneCore 3 = Skyfire Project 4 = OregonCore 5 = CMangos 10 = etc =====================================================================*/ $config[\u0026#39;server_core\u0026#39;] = 0; #TC选0（默认为0） ***************** GMP REQUIRED ******************** ******Uncomment extension=gmp in your php.ini****** =====================================================================*/ $config[\u0026#39;srp6_support\u0026#39;] = true; // READ COMMENTS, [Please ENABLE GMP] #21年版本的TC都选true 查一下数据库的db名称\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 /*=================================================================== You Auth/Realmd MySQL information. db_auth_host Auth Database Host db_auth_port Auth Database Port db_auth_user Auth Database Username db_auth_pass Auth Database Password db_auth_dbname Auth Database DBName =====================================================================*/ $config[\u0026#39;db_auth_host\u0026#39;] = \u0026#39;127.0.0.1\u0026#39;; $config[\u0026#39;db_auth_port\u0026#39;] = \u0026#39;3306\u0026#39;; $config[\u0026#39;db_auth_user\u0026#39;] = \u0026#39;root\u0026#39;; $config[\u0026#39;db_auth_pass\u0026#39;] = \u0026#39;root\u0026#39;; $config[\u0026#39;db_auth_dbname\u0026#39;] = \u0026#39;realmd\u0026#39;; #数据库的地址、端口、用户名、密码、db名称（TC为auth） /*=================================================================== Your character\u0026#39;s databases. If your server has a lot of realms you can check the example at the bottom of the file. =====================================================================*/ $config[\u0026#39;realmlists\u0026#39;] = array( \u0026#34;1\u0026#34; =\u0026gt; array( \u0026#39;realmid\u0026#39; =\u0026gt; 1, // Realm ID \u0026#39;realmname\u0026#39; =\u0026gt; \u0026#34;Realm 1\u0026#34;, // Realm Name \u0026#39;db_host\u0026#39; =\u0026gt; \u0026#34;127.0.0.1\u0026#34;, // MySQL Host IP \u0026#39;db_port\u0026#39; =\u0026gt; \u0026#34;3306\u0026#34;, // MySQL Host Port \u0026#39;db_user\u0026#39; =\u0026gt; \u0026#34;root\u0026#34;, // MySQL username \u0026#39;db_pass\u0026#39; =\u0026gt; \u0026#39;root\u0026#39;, // MySQL password \u0026#39;db_name\u0026#39; =\u0026gt; \u0026#34;realm1_characters\u0026#34; // Characters database name #db名称（TC为characters） ) ); 配置好config.php文件后重启php-fpm和nginx，整个项目搭建完毕。\n","date":"2022-02-05T00:00:00Z","image":"https://oolong.live/p/%E9%AD%94%E5%85%BD%E6%80%80%E6%97%A7%E4%B8%80%E4%B8%8B/lichking_hu_ca24654e910076e2.webp","permalink":"https://oolong.live/p/%E9%AD%94%E5%85%BD%E6%80%80%E6%97%A7%E4%B8%80%E4%B8%8B/","title":"魔兽，怀旧一下"},{"content":"本文只介绍Zabbix(5.0.3)的Web监测配置与邮件告警联动，Zabbix安装与汉化请自行搜索。\n创建Web检测 这里有两种思路去做Web检测\n1.通过配置-模板创建模板，之后可以通过模板绑定实现多个主机监控测试。\n2.通过Zabbix服务器单主机节点直接进行检测。\n由于网络规模较小，在这里我选择第二种方法，直接使用Zabbix主机作为测试节点进行Web检测。\n进入Web检测后点击右上角的创建Web场景。\n这里我创建了一个web_status_test的Web检测项目，更新间隔和尝试次数自行设置。参数设置好后不要立即点击更新，选择场景边上的步骤添加一个Web检测步骤。另外我测试过程中发现如果想要检测多个步骤，当上一个步骤的值出现异常拿不到的情况下是不会进行下一个步骤的。\nWeb方案步骤内配置名称、URL、勾选跟随跳转、选择头部并且设置要求的状态码为200，完成之后点击更新。\n到这里为止对某个Web页面的检测项目就已经做好了，在检测-主机-Web检测内选择相应的项目已经可以看到检测状态和图形。\n创建触发器 之前配置的Web检测只是针对数据的采集，想要通过zabbix检测弹出告警信息还需要创建触发器。进入触发器界面后点击右上角创建触发器。\n配置触发器的名称、选择严重性的等级和一些信息描述。最重要的是在问题表现形式添加监控项，这里要需要添加两个监控项。\n1.设置获得的HTTP状态码不等于200时触发。\n2.设置获取Web检测信息失败时触发。\n因为之前配置时测试过如果只配置HTTP 200状态检测，当Web服务挂了或者服务器挂了，检测不到HTTP头状态码时不会触发告警。\n两个触发条件设置为逻辑或的关系**（A or B）**。\n为了防止突发一次数据采集或者HTTP状态码失败从而导致频繁报警。我优化配置为近三次状态码异常或近两次数据采集失败时才触发报警。这里参考**zabbix5.0手册**设置触发函数格式。 $$ (A and B and C) or (E and F) $$ 最近的值\n1 **last** (sec|#num,\u0026lt;time_shift\u0026gt;) 最近的值。 sec (可省略) or #num - 最新的第N个值 time_shift (可选) - 参考avg()函数 支持值类型: float, int, str, text, log 注意此处的 #num 参数和在其它函数中的作用不一样。 例如: last() 通常等同于 last(#1) last(#3) - 第三个最新值 (不是三个最新值) 如果在history中同一秒有多个值存在，Zabbix不能保证值的精确顺序。 从Zabbix 1.6.2开始支持 #num 参数。 从Zabbix 1.8.2开始支持 time_shift 参数。 最后我的触发条件（问题表现形式）设置为\n1 ({Zabbix server:web.test.rspcode[web_status_test,web-test].last(#1)}\u0026lt;\u0026gt;200 and {Zabbix server:web.test.rspcode[web_status_test,web-test].last(#2)}\u0026lt;\u0026gt;200 and {Zabbix server:web.test.rspcode[web_status_test,web-test].last(#3)}\u0026lt;\u0026gt;200) or ({Zabbix server:web.test.fail[web_status_test].last(#1)}=1 and {Zabbix server:web.test.fail[web_status_test].last(#2)}=1) 在恢复表达式内设置获得的HTTP状态码等于200时触发恢复，这里和之前的触发条件设置基本相同，触发恢复时值设为=200。\n1 {Zabbix server:web.test.rspcode[web_status_test,web-test].last()}=200 这样配置好了触发器，执行结果为连续三次HTTP状态码不等于200或连续两次获取HTTP状态码失败时报警，检测到最近一次HTTP状态码为200时故障恢复。\n配置邮件告警 通过配置触发器能够出现系统告警，但相关告警想要通过邮件发送出去还需要进行邮件相关配置。\n在管理-报警媒介类型-Email内进行基本设置，这里我使用的是网易126邮箱。注意设置你的邮件服务器相关参数尤其是授权密码。完成配置后可以点击测试选项进行邮件发送测试。\n在Message templates可以自定义信息模板。\n在zabbix用户下设置报警媒介类型、Email地址、邮件告警的严重级别。\n检查一下配置-动作下的发送Email操作是否已经打开。\n以上就是zabbix的所有配置。\n效果与测试 在测试Web服务器返回HTTP404状态码，观察zabbix系统告警、邮件告警与响应时间。\nnginx\n1 2 3 4 location ~ ^/get_text { default_type text/html; return 404 \u0026#39;This is 404 test\u0026#39;; } 重启nginx服务\n系统收到告警后会立即发送告警邮件，整个响应过程在2min-3min。\n恢复后zabbix会立即响应已解决同时发送邮件，整个响应过程在1min左右。\n以上响应时间也可以根据Web检测内的更新时间自行设置。\n","date":"2021-05-05T00:00:00Z","image":"https://oolong.live/p/zabbix-web-monitoring/index_hu_f0b4f7b8e8615eff.webp","permalink":"https://oolong.live/p/zabbix-web-monitoring/","title":"Zabbix Web Monitoring"},{"content":"工作中会需要使用EVE-NG做网络模拟。EVE-NG是一个BS架构的模拟平台，已经有成熟的Html5界面，但是对一些命令行的复制、黏贴、批量编辑并不友好。同时平台的legacy登陆方式是允许使用其他终端软件直接连接虚拟的网络设备。\n在Mac OS下已经去除了原生telnet命令行支持，这里可以通过关闭SIP创建软连接或者单独安装telnet。为了考虑系统安全以及完成性，我通过Homebrew单独安装telnet。\n安装ARM版本Homebrew（参照sspai） 根据官方规划，ARM 版 Homebrew 必须安装在 /opt/homebrew 路径下，而非此前的 /usr/local/Homebrew。由于官方的安装脚本还未更新，可以通过如下命令手动安装：\n1 2 3 cd /opt # 切换到 /opt 目录 mkdir homebrew # 创建 homebrew 目录 curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C homebrew （注： 如果安装和使用过程中报错，可能是因为当前用户对于 /opt/homebrew 路径没有权限。对此，可以通过 sudo chown -R $(whoami) /opt/homebrew 接管该目录。）\n（注： 如果安装和使用过程中报错，可能是因为当前用户对于 /opt/homebrew 路径没有权限。对此，可以通过 sudo chown -R $(whoami) /opt/homebrew 接管该目录。）\n虽然上面的步骤已经安装了 ARM 版 Homebrew，但此时在终端中运行 brew 命令并不能直接启动该版本。这是因为默认情况下，ARM 版 Homebrew 用来安装程序的路径 /opt/homebrew/bin 并不在环境变量 PATH 中，因此终端无法检索到该路径下的 brew 程序。\n为此，编辑配置文件 ~/.zshrc，加入如下内容：\n1 2 path=(\u0026#39;/opt/homebrew/bin\u0026#39; $path) export PATH （注： 本文推定读者使用 macOS Big Sur 的默认终端 zsh，如使用 bash 或 fish，则修改 ~/.bashrc 或 ~/.config/fish/config.fish，后同。）\n然后重新启动终端。这样，直接执行 brew 就可以启动 ARM 版的 Homebrew 了。\n安装Telnet 使用 homebrew 安装telnet\nbrew install telnet\n打开iTerm2终端输入telnet\n1 2 $ telnet telnet\u0026gt; 能够正常调用说明已经成功安装Telnet\n配置iTerm2 在iTerm2的preference\u0026gt;profiles\u0026gt;general下新建一个profile专门用于处理Telnet类型的URL。这里需要让iTerm2直接调用homebrew安装的Telnet，所以在Command选项下选择Command并输入/opt/homebrew/bin/telnet $$HOST$$ $$PORT$$。下方的URL Schemes选项内选择telnet。\n","date":"2021-01-06T00:00:00Z","image":"https://oolong.live/p/m1-iterm2-telnet-url/index_hu_1ec054e8732f5289.webp","permalink":"https://oolong.live/p/m1-iterm2-telnet-url/","title":"M1 iTerm2 Telnet URL"},{"content":"早有购买Mac的念头 很早之前就想拥有一台Mac来体验一下，但一直下不了手。这让我不禁想起了大学时，我狠心给自己买了一块黑腹狼蛛键盘，美其名曰是为了满足自己“年少的梦想”。那时总是在《电脑报》或者类似的杂志上看到Razer的广告，炫彩的灯光、Sky和MooN的代言，广告里对键盘手感的描述更是让人垂涎欲滴。每次翻过杂志，我的目光总会在那些广告上多停留几秒，眼神中早已充满了渴望。如今已经到了而立之年，世界似乎不再那么容易被填满。\n从双11到最终入手 从双11看到M1芯片的发布，到犹豫了一个月后下单，再到漫长的等待，最后我实在是等不及了，取消了预定，直接在淘宝上买了现货。顺丰快递第二天就送到，速度非常快，前后不到18个小时。总算在2020年年末，我收到了这份送给自己的礼物。\n使用体验 流畅的兼容性 我反复看了很多关于M1芯片的测评，但拿到手的第一感觉并不是性能有多强大（毕竟不写代码、不搞影音），而是Rosetta 2的兼容性给人的感觉就像“润物无声”。我粗略地体验了一下，发现Intel平台的软件运行起来确实没有什么明显的卡顿。我会经常打开活动监视器，看看某些软件进程是否是通过Intel平台转译运行的，以此加强心理上的安全感。\n强大的续航能力 另一大亮点就是续航能力，毕竟M1芯片采用了ARM架构和5nm制程，续航表现非常出色，远超我的预期。\n缺点 当然，要说缺点还是有的。屏幕边框与我隔壁的XPS相比实在太大了，不过据说Mac即将换新模具，不知道我这次算不算“49年入了国军”。此外，键盘的感觉也不如我在Apple店里试过的上一代蝶式键盘，当然如果非要和ThinkPad键盘相比，还是有一定的差距的。\n结语 最后，希望我能够用这台Mac学到更多的东西，探索更多的可能性。期待未来的使用体验！\n","date":"2021-01-05T00:00:00Z","image":"https://oolong.live/p/%E6%88%91%E7%9A%84%E7%AC%AC%E4%B8%80%E5%8F%B0mac/index_hu_151bc968f041828f.webp","permalink":"https://oolong.live/p/%E6%88%91%E7%9A%84%E7%AC%AC%E4%B8%80%E5%8F%B0mac/","title":"我的第一台Mac"},{"content":"开箱 ​\tMicroServer Gen10 Plus管理功能需要的硬件管理卡iLO Enablement Kit P13788-B21到了。Gen10Plus这一代与Gen8不同，需要额外购买硬件解锁iLO远程管理功能，下面开箱看一这块管理卡。\n​\t管理卡上面印着MADE IN CHINA的字样，中国制造运往美国又从美国买回来也是够了=。=|||\n上机 ​\t之前安装AIC SSD的时候在PCIE槽上面有一个PCIE-X4的接口空余，这个PCIE插槽无法接入其他扩展，该主机专门为iLO扩展卡预留的位置。\n​\t装上之后可以看到在服务器背面有iLO专用的网口。管理卡默认为DHCP，局域网内有DHCP服务器将管理网口接上就可以使用。\n​\t管理域名地址和默认用户名密码在服务器底部标签上。\n配置 ​\t在浏览器中输入服务器底部的DNS字符串加上.当前的局域网域名就可以打开iLO管理页面。比如我的就是ILOMXQ02204TJ.lan这个域名地址，默认用户名和密码在服务器底部都有标注。\niLO5中文补丁 https://downloads.hpe.com/pub/softlib2/software1/sc-windows-fw-ilo/p467413487/v168254/cp040256.exe\n​\t通过该地址下载iLO汉化补丁包，打开.exe文件后选择提取。在提取的文件中找到后缀为lpk的文件并在iLO5管理页面的“固件和操作系统软件”—“更新固件”中上传这个lpk文件，上传完成后会进行校验。校验完成后在“存取管理”—“语言”栏下就可以切换为中文。\n","date":"2020-08-15T00:00:00Z","permalink":"https://oolong.live/p/gen10plus%E5%AE%8C%E5%85%A8%E4%BD%93-ilo5%E5%A5%97%E4%BB%B6/","title":"Gen10Plus完全体-iLO5套件"},{"content":"推荐使用Intel官方工具DataCenterTool升级 英特尔® SSD Data Center Tool 是英特尔® SSD Data Center Family 中 SATA 和 PCIe * 的驱动器管理工具。在其他功能中，该工具能够：\n检测连接到主机系统的基于 PCIe/NVMe 和 SATA 的英特尔®固态盘数据中心设备。\n分析英特尔®固态盘的智能（自我监控和报告技术）信息。\n更新英特尔®固态盘固件：\n当显示驱动器信息时，该工具将指示是否有新的固件版本可用。 该工具不更新工程样品（ES）驱动器上的固件。 下载地址：https://downloadcenter.intel.com/zh-cn/download/29720/Intel-SSD-Data-Center-Tool-Intel-SSD-DCT-?v=t\n下载对应的ESXI系统版本，在压缩包里提取后缀名为vib的文件。可以通过Web面板将该vib文件上传至ESXI服务器的Datastore再打开TSM-SSH服务登入安装。\n安装命令为：\n1 esxcli software vib install -v 安装包路径 由于我已经安装过旧版本，这里提示我已经移除了老版本并且更新了新版本。\n查看命令为：\n1 /opt/intel/isdct/isdct show -intelssd 升级命令为：\n1 /opt/intel/isdct/isdct load -intelssd 0 重启主机后更新完成。\n","date":"2020-07-30T00:00:00Z","image":"https://oolong.live/p/esxi-6.7-intel-ssd-%E5%9B%BA%E4%BB%B6%E5%8D%87%E7%BA%A7/index_hu_dfe379f514b51adc.webp","permalink":"https://oolong.live/p/esxi-6.7-intel-ssd-%E5%9B%BA%E4%BB%B6%E5%8D%87%E7%BA%A7/","title":"ESXI 6.7 Intel SSD 固件升级"},{"content":"什么是Photon OS？ ​\tProject Photon OS™是开源的，最小的Linux容器主机，针对云原生应用程序，云平台和VMware基础架构进行了优化。Photon OS 3.0引入了ARM64支持，安装程序改进和更新的软件包。我们邀请合作伙伴，客户和社区成员合作使用Photon OS运行高性能虚拟机和容器化应用程序。\n•\t针对VMwarevSphere®进行了优化：当Photon OS在vSphere上运行时，Linux内核已针对性能进行了调整。\n•\t对容器的支持：Photon OS包括Docker守护程序，并与容器编排框架（如Mesos和Kubernetes）一起使用。\n•\t高效的生命周期管理：Photon OS易于管理，修补和更新。\n•\t增强的安全性：构建操作系统的内核和其他方面时都强调安全性。\n下载地址：https://github.com/vmware/photon/wiki/Downloading-Photon-OS\nESXI 6.7 下使用OVA-hw13_uefi直接导入OVA运行Photon OS。\n进入命令行开启Docker功能 输入命令：\n1 systemctl start docker Portainer ​\tPortainer是一个开源、轻量级Docker管理用户界面，可以用来管理docker宿主机和docker swarm集群。\n安装portainer ​\t在Photon OS命令行下拉起Portainer Docker\n1 2 $ docker volume create portainer_data $ docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer ​\t容器拉起来以后访问Photon OS的IP:9000即可打开Portainer管理页面。第一次登入需要新建用户名及密码。\n​\t因为我们安装的是单主机docker，这里选择Local即可。\n​\t进入管理面板后点击Docker图标进入dashboard，再点击containers进入容器配置\n​\t选择Add container新建容器。\n​\t可以在Web界面直接配置docker名称，拉取的镜像名称，端口映射，容器文件目录，网络配置，环境配置等。另外注意，container使用host网络时必须关闭Photon OS防火墙。\n","date":"2020-07-30T00:00:00Z","image":"https://oolong.live/p/photon-os%E4%B8%8B%E4%BD%BF%E7%94%A8portainer%E9%83%A8%E7%BD%B2docker%E7%8E%AF%E5%A2%83/index_hu_d40e082e16a1b58e.webp","permalink":"https://oolong.live/p/photon-os%E4%B8%8B%E4%BD%BF%E7%94%A8portainer%E9%83%A8%E7%BD%B2docker%E7%8E%AF%E5%A2%83/","title":"Photon OS下使用Portainer部署Docker环境"},{"content":"\n​\t纠结了好久终于下单了，等了将近一个月终于等到了心心念念的Gen10Plus。早些年前就在关注MicroServer Gen10的发布，可是等来的却是不可更换的AMD Opteron系列APU，并且砍掉了ilo管理功能。今年年初HPE悄悄发布了Gen10Plus系列，有G5420 + 8G ECC和E2224 + 16G ECC两个版本并且恢复ilo管理功能。解锁ilo需要购买件管理卡iLO Enablement Kit P13788-B21，这也算是考虑到控制成本和防止国内license泛滥的最好方法吧。\n​\t依旧是4盘位但是机身大小将近缩减了一半，电源改成了外置这可以说是有利有弊吧。毕竟家用环境做电源冗余成本太高，而且电源与机箱分离可以使散热更方便的处理，头疼的就是走线要难看一点了。\n​\t机器的开关都是模块化设计非常的方便，拆开以后机身的侧边有两个蓝色的卡扣，可以用于锁定HDD的前挡板。\n​\t硬盘我挑了4块4T的WD Ultrastar DC HC310，西数的Ultrastar系列都知道就是HGST。我在希捷Exos 7E8和HC310纠结过一会还是选择了HC310，至于原因么还是因为能便宜一点=。=|||。因为要做黑群晖所以我必须透传SATA控制器给虚机，所以还得挑一块SSD来装系统。\n​\t看了一下机器的PCIE卡槽只能装一块半高的卡，我纠结了好久最后选择了一块Intel 750 SSD。\n​\t选择了一块aic的SSD意味着我放弃了万兆网络，确实有可以支持万兆和M.2的扩展卡，但是看了一下价格吧只能叹了口气，好好好这还是我的问题。Gen10 Plus自带四口千兆Intel i350，以后实在不行搞一下链路捆绑吧。既然已经放弃了万兆网络我还纠结什么PCIE转M.2的卡，直接大厂aic SSD不折腾省心。\n​\tIntel 750可是一位老同志了，我找到了一块17年产的全新库存卡， MLC的颗粒加Intel驱动神秘加成，真的让人无法拒绝。\n​\t之前一直在用Hyper-V跑服务，因为原平台出现了一点问题所以才有了这一次升级的想法，尤其是连带NAS虚机崩溃差点数据全丢。现计划原先的Hyper-V平台还是保留Openwrt和VPN-Server功能，将Docker-Ser，黑群，EVE-NG等模拟环境搬迁到新机器上。并且我的黑群终于可以从5.2升级到6.2啦！\n","date":"2020-07-16T00:00:00Z","image":"https://oolong.live/p/hpe-micoserver-gen10-plus/index_hu_ea6bde2c9a0e8bf1.webp","permalink":"https://oolong.live/p/hpe-micoserver-gen10-plus/","title":"HPE MicoServer Gen10 Plus"},{"content":"​\tXbox金会员马上就到期了，在淘宝搜索后发现微软有活动。可以先兑换N月的金会员再兑换1个月的XGPU，这样金会员时间自动升级为XGPU。XGPU集成了金会员+Xbox Game Pass+Win10 Game Pass。\n打铁冠军—只狼 ​\t三周目过了之前没做过的修罗结局，也算是完成了一波全BOSS成就。现在就差一个龙回故乡结局，哪天有兴致再肝吧。\n科学技术才是第一生产力—Frostpunk ​\tFrostpunk也是一款双平台游戏，Xbox\u0026amp;Win10均可玩但是存档不能共享。极端严酷条件下拷问人性，必须不断的做出抉择，选择意味着生命的消失，意味着灵魂的堕落，但一切都是为了生存。\n​\t全机械自动化，科学技术才是第一生产力！\n奇妙的宇宙探险—Outer Wilds ​\t突然有一次注意到了启动画面的发行商的Logo，顿时让我头皮发麻。让我想起了Gorogoa，一款艺术且抽象的游戏。\n​\t游戏中有很多奇妙的天体，比如碎空星。这颗行星的中心有颗黑洞，环绕着这颗星球的卫星叫空心灯，是一个会喷发陨石的火山星球。空心灯喷发的陨石会砸到碎空星的表面，促进这个行星的解体。\n​\t由于灰烬双星计划，这两颗行星被改造。一颗行星在吸另外一颗的沙子，特别是到了20分钟左右，场面非常壮观。\n​\t加上自己的星球，游戏中一共有6颗行星，1颗彗星。在6颗行星中还有一颗薛定谔星，并不是可以直接观测到。加上太阳观测站和白洞的跃迁飞船，该游戏的探索体量是非常大的。Outer Wilds是一款让我头皮发麻次数最多的游戏，神奇的脑洞加上壮观的物理效果，非常棒的星际探索游戏。\n","date":"2020-04-01T00:00:00Z","image":"https://oolong.live/p/%E6%88%91%E7%9A%84%E5%81%87%E6%9C%9F%E6%B8%B8%E6%88%8F%E5%BA%93~/index_hu_88c38f10f1bc7ee6.webp","permalink":"https://oolong.live/p/%E6%88%91%E7%9A%84%E5%81%87%E6%9C%9F%E6%B8%B8%E6%88%8F%E5%BA%93~/","title":"我的假期游戏库~"},{"content":"Ryzen-3平台（3700X+B450） 内存 幻光戟3000 16G × 2\nThaiphoon数据 DRAM-Calculator-for-Ryzen MemTest AIDA64内存测试 ​\t首先使用Thaiphoon导出内存信息参数，将内存信息导入DRAM-Calculator-for-Ryzen这款软件并且计算出3600MHz的时序，然后进入BIOS手动修改内存时序等参数。使用MemTestPro烤了一晚上（跑了接近9圈）只有一个Error，可以看出内存稳定性还是不错的。最后使用AIDA64测试了一下，与之前使用默认频率为3000MHz的XMP配置相比，内存的读、写、复制速度均有明显提升，而且在Memory Latency指标上居然从原来的80.5ns降低到了70.7ns。\n","date":"2020-03-08T00:00:00Z","image":"https://oolong.live/p/ryzen-3700x-%E5%86%85%E5%AD%98%E8%B6%85%E9%A2%91/index_hu_dc8f3a93ba544014.webp","permalink":"https://oolong.live/p/ryzen-3700x-%E5%86%85%E5%AD%98%E8%B6%85%E9%A2%91/","title":"Ryzen 3700X 内存超频"},{"content":"Windows 10 x64 21H2 19044.1766\n修改termsrv.dll\n为了让Windows 10支持多用户同时登录，你需要对termsrv.dll文件进行小的修改。此文件位于C:\\Windows\\System32文件夹中。有人准备了一个新的工具，相比使用十六进制编辑器的方法，它极大地简化了修补过程。该工具还通过以受信任的身份执行文件写入操作来避免修改termsrv.dll的权限，同时处理了远程桌面服务的停止和启动。从GitHub下载TermsrvPatcher，然后将此页面上的查找和替换十六进制字符串模式复制粘贴到工具中，让工具自动完成任务！\ntermsrv.dll Version 10.0.19041.1100\n查找：\n39 81 3C 06 00 00 0F 84 73 55 01 00\n替换为：\nB8 00 01 00 00 89 81 38 06 00 00 90\n较早版本的Windows 10\nWindows 10 x64 21H2 19044.1586\n查找：\n39 81 3C 06 00 00 0F 84 21 68 01 00\n替换为：\nB8 00 01 00 00 89 81 38 06 00 00 90\nWindows 10 x64 21H1 19043.1266\n查找：\n39 81 3C 06 00 00 0F 84 DB 61 01 00\n替换为：\nB8 00 01 00 00 89 81 38 06 00 00 90\nWindows 10 x64 21H1 19043.1083\n查找：\n39 81 3C 06 00 00 0F 84 21 68 01 00\n替换为：\nB8 00 01 00 00 89 81 38 06 00 00 90\nWindows 10 x64 20H2 19042.867\n查找：\n39 81 3C 06 00 00 0F 84 01 5E 01 00\n替换为：\nB8 00 01 00 00 89 81 38 06 00 00 90\n","date":"2019-07-10T00:00:00Z","image":"https://oolong.live/p/win10%E5%A4%9A%E7%94%A8%E6%88%B7%E5%90%8C%E6%97%B6%E7%99%BB%E5%85%A5%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/index_hu_a118bd76063835db.webp","permalink":"https://oolong.live/p/win10%E5%A4%9A%E7%94%A8%E6%88%B7%E5%90%8C%E6%97%B6%E7%99%BB%E5%85%A5%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/","title":"win10多用户同时登入解决方案"}]