Unix 命令行环境配置
坑边闲话:我曾经看到无数人对 Linux 图形化桌面十分地依赖,哪怕是跑编辑器应用都愿意在 Ubuntu 桌面里,而不愿意使用 VSCode Remote Dev. 我甚至这一切只是形式,但是我更愿意相信,优雅简单、贴近底层的方法才是美妙的。
Linux 和 macOS 本质上都是 Unix,只不过前者是净室实现,后者是一脉相承。至于 Solaris 等小型机系统我没有使用过,FreeBSD 等系统因为驱动匮乏也没有进入我的参考列表。所以,本文以
macOS
Debian 12
为例,简单介绍如何使用 Terminal 搭建良好的开发环境。
1. 个人电脑的选择·
1.1 硬件选择·
在 2023 年十月这个档口,我个人认为,个人计算机相较 2015 年(也就是我读大一的时候)已经有了长足的进步。当年只有权贵才能拥有的 8 核心 i7 5960X 处理器,其性能竟然能被 miniPC 轻松吊打。
最佳实践
经过测试,零刻 GTR7 32GB 内存加 1TB 固态硬盘版本,可以轻松完成我以下任务:
使用 Acrobat DC Pro 阅读 20 页以内的 PDF 格式的论文; ...
qBitTorrent 服务部署实战
坑边闲话:下载文件是现代人必备的技能之一,虽然现在流媒体服务越来越流行,但是在内容审查越来越严格的当下,掌握 P2P 下载技能十分必要。
1. P2P 下载服务·
自从互联网诞生之初就有了文件传输需求,后来随着 MP3 等音频文件的出现,快速共享音乐文件成为了彼时互联网的刚需。当年传输几百 KB 的音频对于低速互联网是个挑战,今天的互联网虽已有了长足的进步,千兆下行带宽已经普及,但是下载动辄数十乃至上百 GB 的 VR、4K 内容依旧对中心服务器的带宽产生了巨大的挑战。虽说此一时非彼一时,但道高一尺魔高一丈。科技进步催生了新的需求,新的需求又带来只有新科技才能解决的问题。
P2P 下载,本质就是为了文件共享而生。它依赖中心服务器做控制平面,但是不依赖中心服务器做内容获取,反而是从其他节点获取文件。因此,所谓的 PT/BT 文件下载,并非是严格意义上的 P2P 网络,但是它解放了中心化的内容分发服务器。
当我们的电脑启动 P2P 服务之后,我们可以通过 Torrent 种子里嵌入的 Tracker 服务器信息,往服务器注册自己的的意向,同时,服务器也会反馈给我们当前种子里列出的文件在 ...
Vim 基础教程与配置初步
坑边闲话:我使用 Vim 的 logo 作为头像已经接近十年了,这表达了我对 Vim 编辑器的热爱,同时也表达了我对设计优秀的工具的敬佩。但是我一直不敢做与 Vim 相关的教程,因为 Vim 的配置太繁琐了,而且我对有些功能也只是一知半解,并不能称为 Vim 专家。正逢我把所有配置迁移到 Lua,就借此机会详细说明我的 Vim 配置,以及我对 Vim 的个人理解。
后续会出一些更加详细的配置教程,但本文专注于 Vim 的基础概念与操作。
1. NeoVim 还是 Vim·
这个问题很关键。我的答案是 NeoVim. 尽管现在 Vim 9.0 已经发布,有些棘手的问题也解决了七七八八,但是我已经用 NeoVim 很多年了,再换回去比较可惜。
我对新手的建议也是 NeoVim. 主要原因是网络上参考资料比较多,解决问题的成本较低。
无需担心软件是否是“名门正派”的问题,NeoVim 本身就是 Vim 的一个分支 (fork),所以他们是同根的软件,NeoVim 就是根正苗红的 Vim.
无需担心没有大版本发布的问题,目前 NeoVim 早就很成熟了,版本一直维持在 0.x 只是一个习 ...
GitHub Copilot Chat 教程
Copilot 是 GitHub 通过其托管的无数开源项目训练所得到的代码提示工具,它的能力非常强大。如今有了大预言模型的加持,Copilot 更胜以往。最近,微软推出了 Copilot Chat 聊天机器人,与 VSCode 深度绑定,能提供很棒的用户体验。
1. 如何获取 Copilot Chat·
首先声明,GitHub Copilot 插件是需要付费的,但是我们可以通过注册学生大礼包的方式获得免费试用的权限。
GitHub Student Developer Pack
通过上面的链接,使用 EDU 结尾的邮箱注册成功,可以获得一个认证机会。随后,使用浏览器的 webRTC 摄像头功能,把自己的学生证拍照上传 (切记,不是上传图片!),半天就可以通过审核。随后你的 GitHub 账号将变成 Pro 版本。
使用经过认证的账号登录 VSCode GitHub Copilot 插件,即可使用全部功能。
接下来就是 Copilot Chat 功能。该插件依赖 GitHub Copilot,所以先要完成上述的步骤。随后,安装完 Chat 插件,即可直接通过对话的方式使用。
2. 使 ...
Debian 12 DNS 配置实战
坑边闲话:Debian 12 是一个完善的高级系统,在 DNS 方面,它同时支持 NetworkManager 和 systemd,而此二者在网络管理方面具有重叠的功能,同时启用会产生冲突。
1. 本机 DNS 配置·
一般来说,Debian 12 系统遵循大多数 Linux 采用的 DNS 配置方法,即 DNS 服务器地址、搜索域都被写在 /etc/resolv.conf 文件里。一个常见的配置文件如下所示:
12nameserver 127.0.0.53search littlenewton.cn
接下来讲解这几个网段的意思:
nameserver 指的是 DNS 服务器的地址,比如
Google 8.8.8.8
DNSPod 119.29.29.29
Cloudflare 1.1.1.1
本机的某个服务,如 dnsmasq、AdGuard Home、systemd-resolved 等。这些软件会在本地起一个服务端口,允许其他进程通过 TCP/IP 方式发起 DNS 请求,因此填写的一般是 127.0.0.0/8 地址。
此外,多个 nameserver 可以同时填写,彼 ...
OpenWrt 的缺陷
坑边闲话:笔者使用 OpenWrt 自 2016 年双十二开始,至今已有七年了。OpenWrt 提供了便捷的网络配置手段,但是也存在一些不便的地方。
本文尽力从 OpenWrt 的缺陷开始入手,讨论改进或者环节的方案,希望能对刚开始学习 OpenWrt 的用户和已经具有一定使用经验的用户有所帮助。
1. 缺乏 systemd 系统管理方案·
尽管很多人诟病 systemd,但是毫无疑问它使得系统的配置、管理变得更加简单且现代化,Debian 等系统默认启用 systemd 就是最好的证明。
注意,大家诟病它,并不是因为它管得太多,而是它最开始的代码不太完善,经常做 API 的大改动。如今 systemd 已经非常稳定。
OpenWrt 作为嵌入式系统,并没有提供 systemd 作为 init 进程,许多任务的启动、管理也是依赖 /etc/init.d/xxx.conf 配置文件进行管理。因此,许多没有写清楚标准错误、标准输出的任务,就没办法轻松地判断失败的原因,给 debug 造成了很大的麻烦。
2. 无线驱动匮乏·
因为无线芯片的驱动涉及到巨量的知识产权问题,故以高通为代表 ...
Debian 12 系统初始化
坑边闲话:Linux 的系统初始化教程对新手非常有帮助,本文提供一个合适的流程化操作,方便用户使用相关服务。从第一步开始就进入了 ssh 模式。
本文略过 Debian 12 的安装过程,但是假设用户在选择服务器角色的时候勾选了 SSH-Server 选项。如果没有勾选,接下来需要在 KVM 界面手动安装 openssh-server.
备份
若用户是重装系统,请务必记得备份重要数据,比如
zsh 历史记录
systemd 的自定义条目
家目录中的工程项目
某些特殊的、只存储在本地的容器镜像孤本
1. 配置常规用户·
首先进入路由器(这里以 OpenWrt 为例)后台,查看 dhcp 地址分配数据,找到新系统被分配的 IP 地址,随后使用 ssh 客户端连接到 debian 12 系统。
关于先配置网络,还是先配置 sudo 用户,我个人认为无论哪个先行,都必须输入一次“繁琐的” root 密码,因此最好是先配置用户,这样以后都用 sudo 来配置,简单省力。
123456789# 1. 切换到 root 用户su# > [输入 root 密钥]# 2. 赋予 $& ...
Tailscale 全平台部署教程
坑边闲话:WireGuard 作为下一代 VPN 技术,除了面对 ISP UDP QoS 时比较尴尬之外,性能、安全性都是非常有保障的。但是 WireGuard 的配置相对繁琐,需要用户掌握许多密码、网络的知识才能完成。此外,典型 WireGuard 的 Full-Mesh 的结构也让设备的增添、移除变得非常复杂。Tailscale 通过引入管理节点,让配置变得自动化,同时 Tailscale 也支持自定义管理平面。
1. Tailscale 简介·
Tailscale 是一个基于 WireGuard 的网络技术,用于创建安全、简单、私有的虚拟网络,它具有以下优点:
基于 WireGuard: WireGuard 是一个新的、高性能的 VPN 协议,旨在提供安全、简单、快速的网络连接。Tailscale 使用 WireGuard 作为其底层协议,但对其进行了封装,以提供更加用户友好和企业友好的功能。
简单性: 传统的 VPN 和私有网络解决方案通常需要复杂的配置和维护。Tailscale 的目标是简化这个过程,使任何人都可以在几分钟内设置自己的私有网络。
跨平台: Tailsca ...
DNS 服务必知必会
坑边闲话:DNS 是现代互联网的基石,在我看来 DNS 比 TCP/IP 还要重要。没有 TCP/IP 还可以用其他通信协议,但是没了 DNS,互联网就要熄灭了。
1. DNS 简介与 DNS 劫持、污染·
1.1 DNS 常识·
DNS 的全称是 Domain Name System,也就是域名系统。原则上,我们这套互联网基于 TCP/IP,也就是可靠传输加全球路由寻址。然而,因为人类不方便记忆 IP 地址,所以产生了域名系统。比如要访问谷歌,你第一想到的是 google.com 而不是 google 的 IP 地址。毕竟,人类并不能准确记忆大量的数字地址。将 IP 地址与域名通过 DNS 联系起来,是个非常聪明的办法。
将域名对应的 IP 地址找出来的过程,叫做 DNS 查询。从这里你就看出来了,DNS 查询实际上是个应用层协议。我们往 DNS 服务器的 53 端口发送一个 DNS 解析请求,然后 DNS 服务器把域名对应的 IP 地址返回给我们,这样我们就可以愉快地使用 IP 地址进行路由通信了。有过编程经验的同学应该清楚,在写某些记录的时候你可以用域名代替 IP 地址,这时 ...
校园网环境配置 IPv6 网络
坑边闲话:中国高效的校园网 IPv6 分配一般基于 DHCP/SLAAC,且百分之九十九的情况下都不会给 ipv6-pd 前缀,因此在宿舍内网里分配 IPv6 同时兼容 IPv4 NAT 一直是一个老大难的问题。中继模式看似可行,但是 OpenWrt 支持度并不高;NAT66 过于野蛮,也没有太好的用武之地。
本文介绍的方案可将路由器变成一个 IPv6 交换机,同时保持 IPv4 内网功能不变。
1. 警告·
注意,虽然通过 ebtables-legacy 命令在以太网层次实现校园网 IPv6 接入很棒,效果非常稳定。然而,这里面存在安全隐患。这种方式相当于把外网接到内网里,因为该方案利用了 IPv6、IPv4 双栈分离的特性,因此,OpenWrt 的防火墙对 IPv6 的入侵流量没有任何防护能力,所有的基于转发的过滤规则都不起作用。
这必然给骇客攻击留下了后门,毕竟 LAN Zone 是我们的后花园,允许另一个属性的流量自由出入,肯定不是好事情。虽然现在还不清楚有什么隐患,但是应该提醒读者,这并不是最佳实践。
最后,如果你确实对校园网 IPv6 分配有需求,而且需要用到软路由, ...
Debian 12 部署 K8S 集群
坑边闲话:Kubernetes 已经是容器编排领域的事实标准,它将容器运行时和网络模块解放出来,只作为一个编排工具存在。在云原生场景和高可用需求下,容器能跑起来不重要,能编排才重要。
本文将详细介绍:
K8S v1.28 的安装与配置
K8S Calico 网络配置及其原理
K8S 接入 Portainer 管理 UI
1. 安装 Kubernetes·
这里以 Debian 12 为例。
本节内容同时适用于 Master 节点和 Worker 节点。
1.1 添加 Google Kubernetes 上游库并安装 kubeadm·
123456789101112# 安装必要的 apt 包sudo apt-get updatesudo apt-get install -y apt-transport-https ca-certificates curl# 下载 Google Cloud 公开签名秘钥curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /e ...
Debian 12 配置 Mellanox OFED 网卡驱动
坑边闲话:Mellanox/NVIDIA 以其高带宽、低延迟称霸数据中心领域,其解决方案更是多机互联、构建超算的首选。
本次驱动部署以 Debian 12 为例。
1. 验证是否识别到了网卡·
1lspci -v | grep Mellanox
2. 下载驱动包·
本次使用的网卡是 ConnectX-4 及以上的系列,不支持更老的网卡。
官方下载地址
12cd ~wget https://content.mellanox.com/ofed/MLNX_OFED-5.8-3.0.7.0/MLNX_OFED_LINUX-5.8-3.0.7.0-debian11.3-x86_64.iso
2.1 挂载 ISO 文件·
123mkdir /mnt/iso mount -o loop ./MLNX_OFED_LINUX-5.8-3.0.7.0-debian11.3-x86_64.iso /mnt/isocd /mnt/iso
2.2 安装驱动(耗时略久)·
1./mlnxofedinstall
2.3 重载驱动·
1/etc/init.d/openibd restart
Debian 12 配置 GPU 深度学习环境
坑边闲话:NVIDIA GPU 因为源码保护,无法直接集成到 GPLv2 开源协议的 Linux 内核里,因此需要采用一些稍微麻烦的方法进行部署。此外,CUDA 套件和 GPU driver 的关系,以及 NVIDIA-Container-runtime 的存在意义也是许多新手搞不明白的地方。
1. 前言·
全文以 amd64 体系结构的 Debian 12 系统为例。首先要牢记以下链接,因为它是上游仓库的地址。
12# NVIDIA 官方上游仓库https://developer.download.nvidia.cn/compute/cuda/repos/debian12/x86_64/
1.1 深入理解 CUDA 和 Driver 的一体性·
与 NVIDIA 软件相关的名词列举如下:
GPU Driver
NVIDIA kernel module
CUDA toolkit
cuDNN
PyTorch
接下来分别介绍其含义及存在意义。
1.1.1 GPU 驱动·
驱动程序控制 CPU 如何调用位于 PCIe 总线上的显卡。不安装驱动将无法使用 GPU 的任何功能。NVIDI ...
反向代理:从 NginxProxyManager 到 Nginx
坑边闲话:反向代理作为应用部署过程中极为关键的一环,在现代互联网应用中发挥了巨大的作用。
1. 反向代理简介·
反向代理是一个非常有用的网络服务工具,它可以作为一个中介站在客户端和服务器之间,接收客户端的请求并将这些请求转发给后端的服务器。当后端服务器返回响应时,反向代理会再次作为中介,将响应传回给客户端。这种设置有多种用途,以下是一些关键点,你可以在博客中使用:
负载均衡:反向代理可以将来自客户端的请求分发到多个服务器,确保每个服务器的负载都保持在一个合理的水平,从而提高整体的服务性能和可靠性。
缓存:反向代理可以缓存后端服务器的响应。当多个客户端请求相同的内容时,反向代理可以直接从缓存中提供响应,而不必每次都从后端服务器获取,从而加快响应速度。
安全和匿名性:反向代理可以隐藏后端服务器的真实 IP 地址和身份,为后端服务器提供一个额外的保护层。此外,它还可以作为一个应用层防火墙,阻止恶意请求。
SSL 终端:反向代理可以处理 SSL/TLS 握手,释放后端服务器的负担,使其专注于处理应用逻辑。
内容压缩:反向代理可以压缩从后端服务器返回的内容,从而减少传输的数据量,加快传输速 ...
解决 WireGuard 网络 Windows SMB 访问问题
坑边闲话:将 WireGuard 部署在 OpenWrt 等内网网关上是个好的思路,但是 Windows 的 SMB 文件和打印机服务一直不允许非本地网段的流量发起访问。本文将介绍相关的解决方案。
1. 问题原因·
Windows 10 等系统因为安全问题,防火墙策略比较严格,因为这种个人系统一般不会对外提供服务。
Windows Server 2022:SMB 服务请求可能被来自互联网,因此 src_ip 是任意的。
Windows 10:本机一般只是个人使用,不用做服务器,因此 SMB 服务只能被来自本局域网的机器访问,src_ip 必须是内网地址,其他地址都会被 DROP.
2. 解决方案·
解决方案有两种:
更改 Windows 10 的防火墙策略
将 WireGuard 来的流量在 OpenWrt 端做动态伪装,即做一次 SRC NAT.
接下来,我从 SMB server 角度和 OpenWrt 网关角度,提出两个可行的方案。
2.1 更改 Windows 10 的防火墙策略·
在搜索里找到高级安全 Windows Defender 防火墙,以管理员身份打开。
...
OpenWrt 22.03.5 源码编译:修改 AdguradHome 至最新版本
坑边闲话:OpenWrt 的稳定版一直比较保守,RC 要 4~5 轮才放出正式版,而正式版中的关键组件更新也很保守。目前 22.03.5 的 AdGuardHome 版本很老旧,除非开机后通过命令行手动升级,否则很难直接搞定。最麻烦的是配置文件 /etc/adguardhome.yaml 不能向下兼容,即老版本软件无法解析新版本的配置文件。此外,软件升级需要连接外网,没有了 AdguradHome 做 DNS 也很成问题。
1. 下载最新版 linux-amd64 二进制·
该文件可以在 GitHub 官方仓库里找到,通过 wget 直接下载:
1wget https://github.com/AdguardTeam/AdGuardHome/releases/download/v0.107.36/AdGuardHome_linux_amd64.tar.gz
在 OpenWrt 编译流程里,package 的 Makefile 依赖的源代码一般是一个 URI 链接,在编译时通过 curl 或者其他工具在线拉取。从某种意义上看,OpenWrt 也是一种符合 gentoo 思想的发行版。 ...
OpenWrt 设置多个 WireGuard 接口
坑边闲话:WireGuard 作为下一代 VPN,基于 UDP 传输。我的理解是最好不要直接使用 WireGuard 做连接,而是把它当作某个大解决方案的内核使用。比如把 containerd 当作 K8S、docker 的核心组件。毕竟,直接使用 WireGuard 门槛非常高,而某些场景需要动态调节 MTU,这在手动配置的情况下几乎是不可实现的。
1. WireGuard 是什么?·
WireGuard (简称 wg) 是一个简单、快速且现代的虚拟专用网络(VPN)技术,提供了高效、安全和轻便的解决方案。相比于其它 VPN 协议,如 OpenVPN 和 IPsec,WireGuard 的代码更少、更易于审计,并且速度更快。
主要特点
简单性:它的代码基础小,使得审计更容易。
高性能:采用最新的加密技术。
现代的加密技术:包括 Curve25519、ChaCha20、Poly1305 等。
跨平台:支持 Linux、Windows、macOS、BSD、iOS、Android 等。
无状态:没有传统的会话概念,每个数据包都是自包含的。
重要的时间节点
2016:WireGua ...
(写作中) Usenix Security 2023 论文阅读
前言:Usenix Security 2023 的 Summer、Fall 季度投稿已经产生了所有的 accepted paper. 其中不乏非常有趣的标题。
1. Fuzz·
Fuzztruction: Using Fault Injection-based Fuzzing to Leverage Implicit Domain Knowledge
作者是 Nils Bars,来自德国鲁尔大学-波鸿 (RUB).
To realize this concept, we propose a set of compile-time and run-time analyses to mutate the generator in a targeted manner,
151 个 unique crashes (Automated deduplication)
27 bugs
4 CVE
12 Generator ---> Consumer(Formated data)
2. Firmware Analysis·
to be done
3. Network·
to ...
Git 高级教程:重点讲解
前言:Git 作为版本控制工具在全球的开发者(游戏除外)中得到了广泛的使用。加深对 Git 的理解,有助于规范化开发流程,降低合作开发的成本,减少合作时误操作的产生。
1. 编辑相关·
1.1 git diff 相关的算法·
在 Git 中,我们会利用内置的算法对文件进行操作,普通 add、commit 涉及的数学算法并不多。但是如果产生了冲突,或更普遍的文件修改,Git 就需要知道文件发生了哪些修改。
文件更新和冲突标记其实是一个原理,区别在于前者是在一个 commit 链上进行,有着严格的前后时序关系,因此 Git 会很自信地将老版本的内容更新为新版。但是如果基于同一个 commit 产生了两个有冲突的分叉,当我们合并这两个分叉的时候就产生了冲突。这时 Git 不再自信,它需要我们人工介入,按照程序员的意愿修改完冲突,随后再合并。因此,文件更新前后的版本对比和冲突时的 diff 标记,使用的算法是一致的。
在此,我们隆重介绍 Meyers 算法。该算法来自于 Eugene W. Myers 的一篇十五页的论文:An O(ND) Difference Algorithm and ...
Debian 12 升级与配置恢复教程
前言:2023 年 6 月 10 日,Debian 正式升级到 12 bookworm 版本。代号:书虫。不得不承认,Debian 是最为重要的 Linux 发行版之一,许多知名的 Linux 发行版也是基于 Debian,如 Ubuntu、TrueNAS SCALE 等。
注意,Debian 12 的升级过程相对比较简单,而且该版本经过了为期一年的测试,稳定程度已经相当可观,因此除非有特殊需求(或者太懒),建议升级。
1. 升级到 Debian 11 最新版·
最近的 debian 11 apt 上游貌似进行了更新,因此可以将 /etc/apt/sources.list 修改为以下最新版:
12345678910111213141516# /etc/apt/sources.list# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free# deb-src https://mirrors.tuna.ts ...
VSCode Clangd 插件配置实战
前言:许多程序员青睐 Visual Studio 或者 Jetbrains IDEs,主要是因为这些开发环境有着很良好的代码提示、代码补全、代码检查、语法高亮。这篇文章将揭开“智能提示”,并给出 VSCode 环境下开发 C/C++ 程序的最佳实践。
1. 编译系统·
很多初学者可能只用过单文件编译,比如把所有的函数都写在一个文件里,然后通过 main 作为 entry 进行调用。后面再做复杂项目的时候,就已经用上了 IDE,因此对于 IDE 做了哪些工作以及为什么要做这些工作,程序员缺乏理解。
一般我们认为编译系统由下面四个部分组成:
前处理(PreTask)
编译前需要拉取最新代码,比如 build-root 编译系统中需要拉取 package 对应的最新代码库或指定哈希值的提交版本。
编译链接(Task)
后处理(PostTask)
某个目标编译完成,需要将之移动(move)到某个特定目录以便于执行下一步操作。
改变某个文件的权限标记。
可选的打包与安装
packaging
install
1.1 现有的编译组织总结·
第 0 代,(shell) 直接 ...
ANTLR4 教程 p1:概论
前言:ANTLR4 作为一个编译器前端的生成器,具有非常高的应用价值。可谓是编译器涉及领域少数必学工具之一。
今天以一个 demo 作为出发点,讲解 ANTLR4 的要点:
ANTLR4 是什么?
ANTLR4 怎么用?
ANTLR4 能做什么?
1. ANTLR4 是什么·
ANTLR 的全称是 ANother Tool for Language Recognition,官方定位为 Parser Generator,即解析器的生成器。很多计算机术语翻译成汉语就显得很奇怪,这或许也是汉语言文化没有孕育出自然科学的一大问题。解析器指的是对语言进行结构的工具,常见的目的是将语言拆分成多个相关的语素,一般的生成目标是 Parse Tree,即语法解析树。
1234565+6 ADD / \ / \ 5 6
比如,5+6 在人看来是一个普通的算术式,但是在计算机看来就是一个字符串。能否通过计算机将之解析成一种结构?如 加数, +, 被加数。答案很显然是可能的。
如果定义一种语言:任意组合的、带算术优先级的代数式。我们能否写出解析器?答案也是可行的。下面举几个这种语 ...
NFS 配置 p1:基于可信网络
前言:NFS 是一种文件系统级别的共享,在 UNIX/Linux 环境里应用非常广泛。
尽管 NFS 的配置在很多系统管理员眼里是非常简单的,但是常规的 NFS 简单配置并不能保证合理的用户认证、多用户识别。网上很多教程对 NFS fstab 表项的小参数也解释得不够清楚,本文尝试做一个较为深入的 NFS 教程。
服务端
TrueNAS SCALE
Debian 12
客户端
Debian 12
1. NFS 服务端配置·
在配置之前需说明,目前 NFS 没有很简便的认证、加密方案,本文介绍的 Kerberos 配置相对比较复杂。如果没有特殊需求,可以考虑使用 iSCSI 块网络存储、SMB 文件网络分享。
1.1 TrueNAS SCALE NFS 共享·
在一般存储网络中,NFS Server 都是由专业 NAS 系统担任。本节先以 TrueNAS SCALE 为例进行图形化的讲解。
1.1.1 配置 TrueNAS SCALE NFS 服务参数·
在 System Settings -> Services -> NFS 里,进行如下图的配置。
这 ...
iSCSI 配置
前言:iSCSI 作为最通用的块存储协议,在数据中心、计算集群里获得了广泛应用。
iSCSI 协议的配置比 NFS、SMB/Samba 等常见的文件共享协议要复杂很多,其中涉及到 target、initiator、session 等多个概念,本文尝试从服务端和客户端两个角度进行配置。
服务端
TrueNAS SCALE
Debian 12
客户端
Windows 10/Server
Debian 12
1. iSCSI 服务端配置·
iSCSI 的配置非常复杂,介绍复杂系统一般有两种写作方法。第一种是先介绍前置知识,然后介绍技术流程,第二种是在技术流程中随机插入需要的前置知识。前者体系性较好,但是容易让读者在阅读前期理解困难。后者从流程出发,故事线漂亮,但是缺乏对知识的梳理。本文采取第一种介绍流程。因此为了保证准确理解 iSCSI 服务端配置过程中的一些术语,我要对下面几个词组进行解释。
Portals
指的是存储区域网络(SAN)中的一个网络位置,由 IP 地址和 TCP 端口(一般是 3260)构成,可以把它想象成一扇门,后面是 initiator 可以连接 ...
深入理解 Python 虚拟环境
前言:Python 作为一个优秀的解释型语言,在各个计算机细分领域都有着广泛的运用。然而 Python 不同版本之间的细微不兼容性使得 Python 解释器、第三方库的管理变得很困难。
为了解决依赖问题,Python 社区发明了许多方法。本文从三个角度出发,试图解释清楚新手面对 Python 虚拟环境时经常遇到的困惑。
Python 虚拟环境是如何创建的
系统如何识别并套用某个虚拟环境
Python 虚拟环境有哪些实现且推荐使用哪个虚拟环境管理器
1. 如何理解 Python 虚拟环境·
现阶段有若干个 Python 虚拟环境生命周期管理方法,这里列举较为常用的两种:
conda
virtualenv
Python 虚拟环境(Isolated Environment)看似神秘,实则非常简单,它的存在依赖于两种 Linux 对象:
PATH 环境变量
独立的 Python 虚拟环境对应的目录
使用下列命令可以输出环境变量:
1echo $PATH | sed 's/:/\n/g' | sort
查看不同虚拟环境下 PATH 环境变量的差异。
fuzzw ...