thumbnail
基于 WSL2、Docker 的 CUDA 开发环境
基于 WSL2、Docker 的 CUDA 开发环境 在 Windows 上部署的 Docker Linux 开发环境,支持调用 CUDA 与显示 GUI,且 Visual Studio Code 的 Remote 能自动识别 Container。 Requirements Windows 10/11 ≥ Build 18362 WSL2 Kernel ≥ 5.10.43.3 Windows NVIDIA GPU Driver ≥ 495 Docker Desktop ≥ 3.1.0 / Docker ≥ 19.03 Visual Studio Code with Extension: Dev Containers CUDA Docs: CUDA on WSL User Guide 不需要任何配置,WSL2 内的发行版即可调用 CUDA。 性能损耗参见官方测试:Leveling up CUDA Performance on WSL2 with New Enhancements Docker Docs: Docker Desktop WSL 2 backend Get started with Docker remote containers on WSL 2 Introducing the Docker Desktop WSL 2 Backend 可以使用 Docker Desktop,也可以在 WSL2 内的 Linux 发行版上使用 Docker 标准的安装脚本,官方建议使用 Docker Desktop。 Docker Desktop 安装与脚本安装的架构有较大区别,会创建两个 WSL2 发行版 docker-desktop-data 和 docker-desktop 用来实际存储程序与数据。安装后的 Docker 是独立于其它 Linux 发行版的,能够被其它的发行版访问与调用,数据将不会存储在调用方的存储空间内。其它发行版对 Docker 的调用与安装在自身内时一致。 不需要依照 NVIDIA 的文档安装额外的 nvidia-docker2、nvidia-container-toolkit 包,Docker 创建 Container 时支持参数 --gpus all,启用后 Container 能够访问 CUDA。 GUI 方案 1:WSLg 直接调用 WSLg 提供的 X Server (XWayland),将 Socket 挂载给 Container: docker run -it -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY debian 方案 2:VcXsrv 在 Windows 端安装 VcXsrv 作为 X Server,使用环境变量指定 Container 使用 Host 的 X Server。 VcXsrv 启动后需要勾选 Disable access control,创建 Container 时的参数:…
Windows 检查单
一些特殊设置项,需要使用注册表、命令行、组策略等修改,新装系统时配置。 启用长路径支持 修改注册表: [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem] "LongPathsEnabled"=dword:00000001 阻止虚拟机 Windows 每小时自动关机 下载 PsExec tools 使用管理员运行 ./psexec -i -s cmd.exe 在弹出的新窗口内运行 whoami 确认返回 nt authority\system 在新窗口内运行 services.msc 禁用 Windows License Monitoring Service 重启 BitLocker 使用 AES-XTS 256 修改组策略,解密硬盘并重新加密: Computer Configuration Administrative Templates Windows Components BitLocker Drive Encryption Choose drive encryption method and cipher strength BitLocker 使用 PIN+TPM 修改组策略: Computer Configuration Administrative Templates Windows Components BitLocker Drive Encryption Operating System Drives Require Additional Authentication at Startup 禁用搜索的 Bing 内容 修改注册表: [HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\Explorer] "DisableSearchBoxSuggestions"=dword:00000001 关闭并清除 8.3 文件名 命令行运行: fsutil 8dot3name set 1 fsutil 8dot3name strip /f /s C: 硬件 UTC 时间 修改注册表: [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation] "RealTimeIsUniversal"=dword:00000001 移除 File Explorer 的 Gallery 修改注册表: [HKEY_CURRENT_USER\Software\Classes\CLSID\{e88865ea-0e1c-4e20-9aa6-edcd0212c87c}] "System.IsPinnedToNameSpaceTree"=dword:00000000
Windows 的奇怪 Bugs
记录遭遇的奇怪 Bug 及其解决方法。 托盘区图标设置包含已卸载程序 (2022-9-6) 删除 IconStreams 和 PastIconsStream Computer\HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify Downloads 及子文件夹视图布局无法保存 (2022-6-14) Fix: 关闭所有软件调整布局,再将视图应用到同类文件夹。 如果仍然无法修改,参考 TechNet 内的讨论,直接修改 Downloads 的默认视图模板: HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderTypes\{885a186e-a440-4ada-812b-db871b942259}\TopViews\{00000000-0000-0000-0000-000000000000} OneDrive 文件重命名被截断 (2022-6-1) 被截断后无法再次重命名,可用命令行重命名。使用 ls 可知实际上重命名成功,但文件管理器上的名称依然保持不变。 Fix: 备份文件,删除无法重命名的文件。 qBittorrent 下载时失去响应 (2022-5-5) Fix: 卸载 KB5012643(已被 Microsoft 撤回)。 无法删除 . 结尾的文件 (2021-9-4) Fix: 用 WSL 删除。 右键点击 Opus 文件卡死 (2020-11-13) Fix: 删除应用 "Web Media Extensions"。 SMB 密码错误 (2019) Fix: 将在线账户切换至离线账户,再重新登录在线账户。
应用集
优先选择美观、开源、开放的应用 跨平台/Web OCR:白描 PDF 阅读/标注:Goodnotes Reminder:Microsoft To Do VPN:WireGuard、tailscale 公式提取:Mathpix 数学解答:WolframAlpha 浏览器:Firefox 生产力套件:Microsoft 365 笔记:OneNote、Nebo 纯文本笔记:Joplin 绘图:Concepts、Krita 背单词:Anki 隐私浏览器:Tor Browser Android Markdown 编辑:Pure Writer OTP 管理器:Aegis、andOTP PDF 阅读/标注:Xodo、Flexcil、Noteshelf VPN:SagerNet 下载器:1DM、Advanced Download Manager 二维码扫描:Binary Eye 剪贴板清空:Clear Clipboard 压缩包管理:ZArchiver 天气:几何天气 密码管理器:KeePassDX 小说阅读器:Moon+ Reader 应用信息:LibChecker 应用隔离:Shelter 手写笔记:Notewise 打码:Pure Mosaic 文件同步:FolderSync 文件管理:MiXplorer、Solid Explorer 文本编辑:QuickEdit 文档扫描:Microsoft Lens 日语 OCR 词典:Kaku 日语新闻:TODAI 漫画阅读器:Perfect Viewer、Tachiyomi、Kuro Reader 相册:Simple Gallery 绘图:Infinite Painter 翻译:Google Translate 背单词:AnkiDroid 自动化:Tasker 视频播放器:MX Player 计算器:All-In-One Calculator、Calculator++ 设备信息:DevCheck 词典:EBPocket 输入法:Gboard、Samsung Keyboard 通知管理:BuzzKill 邮箱/通讯录/日历:Microsoft Outlook 金融行情:TradingView 隐藏 Activity 启动器:Activity Launcher 音乐播放器:Poweramp PC Windows/Linux BT 下载:qBittorrent C/C++ IDE:Visual Studio EPUB 编辑:Sigil IP/端口扫描:Angry IP Scanner JAVA IDE:IntelliJ IDEA JDK:Temurin 下载器:Motrix 图片编辑:GIMP 垃圾清理:BleachBit、CCleaner 文件同步、备份:FreeFileSync、SnapRAID 文本编辑:Visual Studio Code 文献管理:Zotero 视频播放器:VLC 邮箱/通讯录:Thunderbird 音视频处理、转换:FFmpeg、FLAC、WavPack、Opus-tools Windows CLI 应用管理:Scoop CPU 指示器:RunCat EPUB 阅读:Starrea PDF 编辑:Foxit Shell:PowerShell Terminal:Windows Terminal 卸载器:Uninstall Tool、Geek Uninstaller 压缩包管理:7-Zip 右键菜单管理:ContextMenuManager 媒体浮窗:ModernFlyouts 字幕编辑:https://github.com/SubtitleEdit/subtitleedit 密码管理器:KeePass 批量重命名:PowerToys 显示器控制:Twinkle Tray 硬盘信息:CrystalDiskInfo 虚拟机:VMware Workstation Player 词典:EBWin 音乐 Metadata 编辑:Mp3tag 音乐播放器:foobar2000 Linux Shell:Zsh Terminal 复用:tmux Firefox Add-ons Cookie 编辑:Cookie Quick Manager HTTPS 自动跳转:HTTPS Everywhere Privacy Pass protocol:Silk RSS 检测:RSSHub Radar Steam 比价:Augmented Steam Tab 分组:Simple Tab Groups Twitter 优化:Tweak New Twitter URL 跟踪移除:ClearURLs…
thumbnail
OpenStack 部署记录
OpenStack 部署记录 在三台服务器上部署 OpenStack,毕设课题的一部分。 课题名称是“基于NFV的虚拟网络设计”,实际上就是帮老师在新采购的三台服务器上部署 OpenStack 构建私有云。 设备 Ubuntu1: Intel Xeon Silver 4210 @2.20GHz Samsung 16G RDIMM DDR4 with ECC @2666MHz (M393A2K40CB2-CTD) Toshiba 2T HDD @7200RPM (MG04ACA) Ubuntu 18.04 LTS CentOS1, CentOS2: Intel Xeon Silver 4210 @2.20GHz Samsung RDIMM with ECC 16G DDR4 @2933MHz * 4 (M393A2K40CB2-CVF) Toshiba 2T HDD @7200RPM (MG04ACA) CentOS 7 直接以系统 + 数字命名设备,服务器的配置很奇妙。Ubuntu 仅仅只有 16G 的内存,剩下两台服务器莫名其妙要装 CentOS。明明装 Ubuntu 的原因是不熟悉 CentOS,为了更长的支持时间也可以选择 Ubuntu 20.04 LTS。 架构 从默认源安装,Ubuntu 18.04 TLS 只有 Queens,而 CentOS 可以选择 Train, Stein, Rocky, Queens。 Ubuntu TLS 可以使用 UCA 支持 Ussuri, Train, Stein。 自然是尽可能选择新版本,部署最小化安装的 OpenStack Train。 Ubuntu: 控制节点 Keystone, identity service Glance, image service Placement, placement service Neutron, networking service Horizon, dashboard CentOS1: 计算节点 Nova, compute service CentOS2: 计算节点 Nova, compute service 手动部署 Docs: <https://docs.openstack.org/queens/install/index.html> Environment Docs: <https://docs.openstack.org/install-guide/environment.html> 最开始没注意到这一部分,里面有硬件配置要求,以及一些必须的相关环境的配置。 Keystone Docs: <https://docs.openstack.org/keystone/queens/install/keystone-install-ubuntu.html> su -s /bin/sh -c "keystone-manage db_sync" keystone 这里有个坑,在运行完这条命令之后,神奇地不会有任何 Console 输出,即使有错误运行失败也一样。导致开始安装 Glance 后我才发现有问题,且不知道问题出在哪。 运行完之后一定要在 MariaDB 里执行 USE keystone; SHOW TABLES;,手动检查数据库初始化是否成功。 如果运行失败需,查看日志需要使用 --log-file 参数指定输出日志文件。 这条命令在 Debain/Ubuntu 默认的 MariaDB/MySQL 配置下运行是一定会出现错误的。 Index column size too large. The maximum column size is 767 bytes. Debain/Ubuntu 的 MariaDB/MySQL 默认使用 utf8mb4 作为字符集,造成 InnoDB 表索引字段长度超过限制。需要修改数据库的字符集为 utf8,同时修改相应的字符序。 Glance…
ip6tables 踩坑
先说结论,ip6tables 需要允许 ICMPv6 通过,IPv6 高度依赖 ICMPv6。 iptables IPv4 的规则主要参考了 Debian 的文档 iptables *filter -A INPUT -i lo -j ACCEPT -m comment --comment "Loopback" -A INPUT ! -i lo -d 127.0.0.0/8 -j DROP -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -m icmp --icmp-type 8 -m limit --limit 7/minute -j ACCEPT -m comment --comment "Ping" -A INPUT -p tcp --dport 80 -j ACCEPT -m comment --comment "HTTP" -A INPUT -p tcp --dport 443 -j ACCEPT -m comment --comment "HTTPS" -A OUTPUT -j ACCEPT -A INPUT -j DROP -A FORWARD -j DROP COMMIT ip6tables 复制粘贴 IPv4 的规则,改下协议,搞定 IPv6 无法连接。 ip6tables 资料不多,查了好久才看到 GitHub 上的一份规则,里面关于 ICMPv6 有一行注释 # Accept all ICMP packets. Unlike with IPv4, it's not a good idea to block ICMPv6 traffic as IPv6 is much more heavily dependent on it: ip6tables -A INPUT -p ipv6-icmp -j ACCEPT 参考 ICMPv6 的 Wiki,原因之一应该是 IPv6 的 NDP 协议。NDP 用于替代 IPv4 的 ARP,且基于 ICMPv6,而 ARP 则是基于 IPv4 的。ICMPv6 整合实现了 IPv4 中的 ICMP、ARP 以及 IGMP 的所有功能,为了正常使用 IPv6 ,需要允许 ICMPv6 流量通过。
thumbnail
从微博被爆破开始的 Blog
2018 年 2 月 26 日,我的微博账号因为 25 号晚上的转发被爆破了,尝试了两次在线申诉,均没有收到任何回应,自此决定离开微博。 与此同时,我购买的 Shadowsocks 服务因为开会开始花式被干,这已经不知道是这个服务商第几次挂了,而且挂的还是我最需要的日本线路。因为偶尔需要上 Mora 和 e-onkyo 上购买专辑,还有可能需要玩一些日服手游,所以日本线路是我一定需要的。同时 Google Play 是我手机的主要应用来源,梯子是我的必需品,无法忍受一个随时有可能挂掉的服务商。在这两件事情的刺激下,我决定购买 VPS 自己搭建 Shadowsocks ,随后我就购买了 Vultr Tokyo 机房的 VPS 搭建 Shadowsocks 。 谁知 VPS 越玩越上瘾,又考虑搭建一个自己的私有云盘。但是想到自己还没有完全掌握 Linux 的使用与服务器的维护,无法保证重要数据的安全,同时已经买了的 Office365 附有 1T 的 OneDrive 空间,没有搭建私有云的必要。最后还是决定搭建自己的 Blog 了,即使有无法坚持更新下去的可能性。 一些小事 在搭建博客的过程的最初阶段,我曾纠结于是使用 Nginx 还是 Apache ,更换了几次服务端的软件。期间还把 Nginx 和 Apache 的跳转功能都研究了一遍。最后考虑到 Nginx 轻量化的特点,我最终还是选择 Nginx。 关于 Blog 软件的选择,也曾考虑过使用更轻量化的 Typecho 和 Hexo。但是考虑到 Wordpress 的维护积极,更新稳定,而 Hexo 和 Typecho 都长年没有更新。而且 Wordpres 的文档丰富,对于我这个没有什么基础的人来说,维护起来更为容易,所以我最终还是选择 Wordpress 。或许未来有一天掌握了 PHP 和 CSS ,而且能够自己写出一款主题了,我会更换为其他的 Blog 软件。但现在,还是用着主题和插件丰富,被广泛使用的 Wordpress 吧。 一点想法 其实这个 Blog ,我修修改改拖了有一个月。虽然拖了这么久,但我还是希望能够在微博销号一个月之际正式上线,在最后几天完成了这两篇文章和 About 页面,终于正式上线了。 这个 Blog 我也没想着写给什么人看,更多的是写给自己看的,是一个自娱自乐。我希望我能够坚持下去,就算每篇文章之间有些时间间隔,但还是能够坚持更新下去。