Anduin Xue
Anduin Xue

Anduin's Tech Blog

Bash and Linux Some tips about bash and Linux.


Make Gnome looks like Windows 11

本文记录了一场以Gnome桌面环境为画布的视觉重构实验通过安装定制扩展工具和主题将Linux系统打造成Windows 11风格的界面过程揭示了开源系统高度可塑性的本质。作者通过一系列操作链——从基础依赖包的安装到用户主题扩展的激活从图标风格的替换到任务栏模块的重组——逐步解构并重建了桌面交互逻辑最终呈现出一个既保留Gnome底层架构又具备Windows 11视觉特征的混合形态。这种跨系统的美学移植不仅考验技术适配的精确度更引发对操作系统设计边界的新思考:当文件管理器的图标可以拥有动态光效任务栏能模拟Windows的流体设计甚至开始菜单能完美复刻微软的Fluent Design语言时我们是否正在见证数字界面的去平台化趋势?文章通过具体改造案例暗示了一个更深层的命题当操作系统的外壳可以像换皮肤般随意更换时用户对系统本身的身份认同又将如何演变?而那些被保留的Gnome底层特性与被重构的Windows表层符号之间又是否存在某种隐喻关系?这些未解的疑问或许正是打开未来人机交互想象空间的钥匙。--Qwen3

Ubuntu Windows 11 Gnome Customization ArcMenu User Interface

Automatically Unlocking LUKS2 Encrypted System Partition Using Clevis and TPM2

本文介绍了如何通过Clevis与TPM2技术实现LUKS2加密系统分区的自动解锁机制这一方案不仅消除了传统密码输入的繁琐性还通过硬件级安全模块构建了更可靠的数据保护体系。文章揭示了安全启动(Secure Boot)与TPM2芯片的协同作用——前者通过验证签名链确保系统启动合法性后者则利用物理不可克隆特性存储加密密钥。当用户将TPM2芯片生成的密钥与系统分区绑定后每次开机时PCR寄存器的测量值会自动触发密钥解封过程这一过程如何在不同硬件配置下保持稳定性?当系统分区策略与TPM2策略发生冲突时系统会优先遵循哪套安全规则?更值得思考的是如果攻击者同时获取了硬件指纹和系统镜像是否仍能突破这种保护机制?通过clevis luks bind命令与dracut工具链的协作系统实现了从固件层到内核层的无缝衔接但这种深度集成是否会对系统的可移植性造成影响?当用户选择特定PCR寄存器作为信任锚点时如何平衡安全强度与硬件兼容性?这些问题的答案或许就藏在系统启动时那些看似无序的PCR值变化之中而理解这些变化正是构建下一代可信计算架构的关键。--Qwen3

bash Linux Security LUKS2 Clevis TPM2 TPM

Using ZFS is easy

ZFS通过集成文件系统与卷管理功能,实现了数据存储的高效管理与安全保障其核心特性包括基于快照的版本控制支持克隆操作的数据复用以及动态调整的存储池架构数据完整性通过校验和与冗余校验机制实现可自动修复损坏内容存储优化方面提供LZ4等压缩算法平衡性能与压缩率同时支持RAID 0156及自定义RAID-Z配置通过缓存机制(ARC/L2ARC)与日志设备(ZIL)提升读写性能实际部署中需综合考虑硬件配置与工作负载特性例如采用NVMe SSD作为缓存设备可显著提升大规模存储系统的响应效率作者示例配置展示了多盘RAID-Z2池构建结合NVMe缓存与性能调优参数的应用方案体现了ZFS在企业级存储中的灵活性与扩展性--Qwen3

bash Linux Disk ZFS File Sysytem Raid Dedup

How to install CUDA and cuDNN on Ubuntu 22.04 and test if its installed successfully

本文系统梳理了在Ubuntu 22.04系统上搭建CUDA cuDNN深度学习环境的完整流程 从版本兼容性验证到最终测试的每个环节都暗含着开发者需要主动思考的关键点 比如当看到nvidia-smi显示的驱动版本时 你是否能准确对应CUDA支持表中对应的版本区间 这个对应关系背后反映了NVIDIA对硬件和软件生态的复杂兼容性设计 当安装cuDNN时 复杂的依赖链和文件路径映射提示我们 一个看似简单的库安装可能涉及多层系统权限管理 当PyTorch安装失败时 你是否意识到直接使用pip安装的包可能与特定CUDA版本存在隐式冲突 这些设计选择都值得深入思考 最后的测试环节中 从简单的hello-world并行执行到mnistCUDNN的矩阵运算验证 再到PyTorch的CUDA可用性检查 形成了完整的验证链条 但测试成功是否意味着环境就完美无缺 你的GPU利用率是否达到预期性能 这些都需要通过实际应用来验证 当看到Test passed!的提示时 你是否开始思考如何将这个环境迁移到生产环境 还是考虑如何优化代码利用GPU的计算能力 这些问题的答案或许就藏在你即将展开的实践中--Qwen3

Ubuntu NVIDIA vGPU CUDA cuDNN GPU

If a Ubuntu server should run apt upgrade automatically?

在管理大量Ubuntu服务器时是否应该启用apt upgrade自动更新?这既是一场效率与风险的博弈也是对运维哲学的深刻思考。当服务器数量庞大时手动执行update和upgrade再重启的重复操作确实会消耗大量时间而自动更新看似能完美解决这个问题尤其在安全补丁及时性和系统稳定性方面展现出明显优势。但这种看似完美的方案却暗藏玄机:当服务器需要排查历史问题时自动更新可能抹去关键调试线索;对航空控制系统这类零容忍变更的场景自动更新简直是灾难性的;更不用说功能更新可能引入新bug导致业务中断而强制重启对游戏服务器等系统可能直接中断正在进行的赛事。尽管作者给出了每周日凌晨执行脚本的配置方案却在最后提出了令人警醒的条件清单——只有当系统不重要能容忍可用性下降且具备完美快照和互联网连通性时才适合启用自动更新。这引发我们思考:在自动化浪潮中我们是否正在失去对系统演进过程的掌控?当安全更新与业务连续性产生矛盾时该如何在风险与收益间找到平衡点?或许真正的智慧不在于选择自动或手动而在于建立对系统生命周期的深度认知。--Qwen3

bash Linux Ubuntu Upgrade Crontab Update

Install Cockpit on Ubuntu 22.04

本文通过分步指南解析了在Ubuntu 22.04系统上部署Cockpit的完整流程并揭示了其背后的技术逻辑。安装过程从基础命令切入却巧妙融入了权限管理的底层思考——为何要避免root用户直接操作?当网络异常导致PackageKit缓存刷新失败时解决方案通过Netplan配置迁移与NetworkManager渲染器调整既解决了表层问题更暗示了系统服务间依赖关系的复杂性。插件安装环节通过自动化脚本实现版本追踪与动态下载展现了现代DevOps中CI/CD的实践思维而Caddy反向代理的配置则抛出了安全与便捷的永恒命题:如何在TLS证书验证与服务可达性之间取得平衡?当浏览器地址栏中的9090端口打破传统Web服务的80/443端口惯例时是否预示着更多非标准服务的崛起?最后通过反向代理实现HTTPS的方案既解决了证书信任链问题又引发了对自动化证书管理(如Let's Encrypt)与手动配置安全性的对比思考——当技术方案面临选择时我们究竟应该追求极致安全还是适度妥协?--Qwen3

bash Linux Ubuntu Remote Management Cockpit NetworkManager

CaddyV2 tips and examples (How to correctly get user's IP address after a reverse proxy)

Caddy V2作为现代反向代理工具展现了极强的可定制性与场景适配能力文章通过编译带有Proxy Protocol插件的自定义Caddy版本揭示了如何在FRP等隧道代理后精准获取用户真实IP地址这一核心难题同时展示了从静态文件托管到动态负载均衡的12种典型配置方案包括如何通过header操作实现安全加固如何结合IP白名单与路径匹配进行精细化访问控制以及如何利用基础认证与健康检查构建多层防护体系值得注意的是当反向代理链涉及多层嵌套时配置的允许规则与超时参数往往成为系统稳定性的关键变量文章尤其值得关注的创新点在于将Caddy的模块化特性与实际网络拓扑深度结合例如通过cookie-based负载均衡策略实现会话保持或在HTTPS跳转时自动移除潜在风险头字段这种将协议细节与安全策略有机融合的实践思路值得深入思考当面对混合云环境或混合网络架构时如何设计既能满足性能要求又能保证可观测性的反向代理方案或许正是本文抛砖引玉的价值所在--Qwen3

Reverse Proxy Linux Ubuntu Proxy FRP Caddy CaddyV2 IP Address Proxy Protocol

Build a new NFS server with WinServer or Ubuntu and mount it

本文详细介绍了如何在Windows Server和Ubuntu系统上搭建NFS服务器并实现跨平台挂载的过程。通过分步解析的方式,文章展示了Windows Server中通过图形界面安装NFS角色并配置共享目录的便捷操作,同时对比了Ubuntu系统中使用命令行安装服务、设置共享路径及权限的标准化流程。在挂载环节则分别演示了Windows客户端通过PowerShell和CMD实现匿名挂载的技术要点,Ubuntu系统使用mount命令与fstab配置的差异性方案,以及VMware ESXI环境通过VCenter添加网络存储的可视化操作路径。文章通过技术细节的对比揭示了不同操作系统在NFS协议实现层面的兼容性特征,并通过实际配置过程中的端口开放、权限继承等关键环节,引发了关于跨平台资源共享安全性与性能优化的深层思考。当NFS服务器在异构系统间架起数据通道时,如何平衡便捷性与安全防护?在容器化和云原生趋势下,传统NFS存储方案如何适应动态扩展需求?这些问题或许正是理解现代存储架构演进的关键切入点。--Qwen3

Linux Ubuntu File Windows Server Share NFS VMware ESXI Vsphere NAS

Mount Windows SMB folder to Ubuntu

本文通过简洁的步骤解析了如何在Ubuntu系统中挂载Windows SMB共享文件夹,并延伸探讨了跨平台协作的技术可能性。文章从安装cifs-utils工具包切入,演示了通过命令行创建挂载点、输入认证参数实现远程目录本地化的完整流程,特别展示了交互式密码输入和挂载后文件访问的实操场景,同时提供了开机自动挂载的配置方案。这种将网络存储无缝集成到本地文件系统的技术,不仅打破了操作系统的边界,更引发了关于数据访问权限管理、跨平台协作效率以及自动化运维方案的深层思考——当远程文件如同本地磁盘般可读写时,我们是否重新定义了“文件”的存在形式?在享受技术便利的同时,如何平衡自动化配置与安全性需求?当SMB协议成为连接异构系统的桥梁,我们是否能想象出更多跨平台协作的创新应用场景?--Qwen3

bash Linux Ubuntu Windows Server SMB Share

Use you local server to replace the cloud with FRP.

通过FRP技术将本地服务器暴露至公网替代部分云服务以降低每月数百美元的云服务器成本成为可能。文章展示了如何利用家中旧电脑结合FRP工具构建替代方案,通过将本地设备端口映射到互联网,使内网服务具备公网可访问性。该方案核心依赖FRP的反向代理原理——服务端部署于云服务器(如Azure或Vultr),客户端运行于本地设备,利用TCP/UDP协议建立连接通道,无需设备拥有公网IP即可实现服务暴露。具体实施步骤涵盖云服务器采购与FRP服务端配置、本地设备FRP客户端部署、网络策略调整及自动化更新机制搭建。成本测算表明:一次性投入300美元购买硬件后,每月仅需支付20美元云服务器费用和10-20美元网络带宽成本,相较传统云方案每月150美元的支出节省超过90%。文章引发思考:当家庭宽带带宽与云服务器性能差距逐渐缩小时,是否意味着企业级应用可更多采用边缘计算架构?如何平衡数据安全性与成本优化目标?是否应重新评估传统数据中心的部署模式?这些值得每个云计算从业者深思的问题,或许正推动着IT基础设施的下一次范式变革。--Qwen3

IP bash Linux Windows Server Cloud FRP Network Port Firewall

Auto backup for Minecraft on Linux

本文探讨了在Linux系统上为Minecraft服务器构建自动备份方案的实践过程揭示了从Git压缩方案到直接复制文件夹的优化路径并展示了如何利用tmux会话管理和自动化脚本实现游戏数据的高效备份作者通过对比Git方案带来的CPU资源消耗问题最终选择基于文件复制的轻量级解决方案详细描述了通过tmux启动服务器进程保存游戏状态执行文件复制和清理旧备份的完整流程代码示例清晰呈现了路径定义时间戳命名存档清理等核心逻辑并提出了如何在保证数据安全的同时避免过度占用系统资源的思考当服务器面临突发故障时如何确保备份脚本的可靠性又该如何在多台服务器间扩展这套方案的兼容性这些问题或许能为你的自动化运维带来新的启发--Qwen3

bash Linux Minecraft Backup Minecraft server Automatic backup

Programmatically connect to the remote server via SSH and execute remote command.

文章围绕如何通过程序化方式实现SSH远程服务器连接与命令执行展开重点探讨了.NET Core环境下借助SSH.NET库完成自动化运维任务的实践路径。开发者通过创建控制台项目并集成SSH.NET库实现了从连接认证到命令执行的完整流程验证了使用代码替代人工SSH操作的可行性。示例代码展示了如何通过Renci.SshNet命名空间下的SshClient类构建连接执行"apt upgrade"命令并输出执行结果同时处理连接状态与错误信息。这种程序化方案为服务器管理工具开发提供了新思路但也引发关于自动化运维边界与风险的思考——当机器接管了原本需要人工判断的运维操作后如何确保指令执行的准确性如何处理敏感操作的认证安全如何应对网络波动导致的连接中断等问题。文章提供的代码框架虽然实现了基础功能但实际应用中可能需要更复杂的逻辑处理例如异步执行、结果解析、异常重试等机制的补充。SSH.NET作为支持并行操作的开源库其文档中提及的高级特性如端口转发、文件传输等功能是否能与现有代码形成更强大的组合如何构建可扩展的服务器管理架构这些都值得进一步探索。当代码开始远程操控物理服务器时我们是否正在见证运维工作的范式转移?自动化程度的提升是否会让服务器管理变得更加透明还是反而带来新的复杂性?这些问题或许能在文章提供的实践基础上找到启发性的答案。--Qwen3

C# .NET Core bash Linux SSH Renci.SshNet