Archlinux 部署 deepseek-r1

最近 Deepseek 发布 R1 模型,在网上特别火,正好闲的没事部署一个 7b 版本玩一玩。 使用 ollama 可以简化部署流程,通过 yay -S ollama 安装 ollama 后,启动服务 sudo systemctl start ollama,再运行命令 ollama run deepseek-r1 即可开始对话。 但是很快我发现事情不对,为什么生成速度那么慢?查看资源管理器发现推理运行在 CPU 上,完全没有使用 GPU 加速,于是我开始排查问题。 查看 ollama 服务的日志 journalctl -u ollama -f 发现一行警告 no cuda runners detected, unable to run on cuda GPU,但是我显然是有 CUDA 驱动的。 于是我在网上一顿搜,看到解决方法直接无语。aur 库中除了有 ollama 还有一个 ollama-cuda,需要同时安装才能调用 cuda 加速。

一月 29, 2025 · Nite

Podman 迁移笔记

最近把各个服务从 Debian 迁移到 Archlinux,顺便把 Docker+Compose 换成 Podman(无根)+Quadlet,期间遇到了一些奇怪问题,记录一下。 当 compose 中有容器间的依赖关系时,podlet compose –pod 生成的配置无法正常工作 podlet 生成时会将依赖关系转换为: [Unit] Requires=redis.service After=redis.service 但是其中缺少了 pod 名称,导致 systemd 无法正确启动依赖的容器。 正确格式应该为: [Unit] Requires=<pod名>-redis.service After=<pod名>-redis.service 这是 podlet(0.3.0 - 2024-05-21) 的 BUG,Github 代码中已经修复了,但是没有发布新版本。 可以手动修改 Quadlet 文件或者编译源码。 当然如果不使用 pod 就没有这个问题了。 同网络中的容器无法通过容器名互相访问 这是由于 Quadlet 文件被转换成 systemd unit 文件时,容器名称前面被自动添加了 systemd-。 name: comentario services: comentario: restart: unless-stopped image: registry.gitlab.com/comentario/comentario environment: BASE_URL: https://comment.nite07.com SECRETS_FILE: /secrets.yaml ports: - 8820:80 volumes: - ./secrets.yaml:/secrets.yaml:ro depends_on: - comentario-db labels: - "io.containers.autoupdate=registry" networks: - comentario_network comentario-db: restart: unless-stopped image: docker.io/library/postgres:16-alpine environment: POSTGRES_DB: comentario POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres volumes: - ./postgres:/var/lib/postgresql/data labels: - "io.containers.autoupdate=registry" networks: - comentario_network networks: comentario_network: driver: bridge 例如在上面的例子中 comentario 容器内要通过 systemd-comentario-db 访问 comentario-db 容器。 ...

一月 19, 2025 · Nite

Netbird 自部署登录时出现 rpc error

问题描述 sudo netbird up --management-url xxx --admin-url xxx 2024-12-18T11:54:06+08:00 WARN client/cmd/root.go:245: retrying Login to the Management service in 690.220108ms due to error rpc error: code = Unknown desc = getting device authorization flow info failed with error: failed while getting Management Service public key 2024-12-18T11:54:09+08:00 WARN client/cmd/root.go:245: retrying Login to the Management service in 2.199479217s due to error rpc error: code = Unknown desc = getting device authorization flow info failed with error: failed while getting Management Service public key 2024-12-18T11:54:13+08:00 WARN client/cmd/root.go:245: retrying Login to the Management service in 1.967353557s due to error rpc error: code = Unknown desc = getting device authorization flow info failed with error: failed while getting Management Service public key 2024-12-18T11:54:17+08:00 WARN client/cmd/root.go:245: retrying Login to the Management service in 2.356804163s due to error rpc error: code = Unknown desc = getting device authorization flow info failed with error: failed while getting Management Service public key 2024-12-18T11:54:21+08:00 WARN client/cmd/root.go:245: retrying Login to the Management service in 5.196377811s due to error rpc error: code = Unknown desc = getting device authorization flow info failed with error: failed while getting Management Service public key Error: login backoff cycle failed: rpc error: code = Unknown desc = getting device authorization flow info failed with error: failed while getting Management Service public key 解决方法 在 Cloudflare network 选项卡开启 gRPC ...

十二月 18, 2024 · Nite

Archlinux 使用 Xbox 手柄

使用 USB 线连接 直接连接即可 通过蓝牙连接 将 Xbox 无线控制器连接到一台 Windows 电脑上,使用 Xbox Accessories 更新最新驱动。 安装 AUR 包 xpadneo-dkms 修改 /etc/bluetooth/main.conf 文件,添加以下内容: Privacy = device 重启蓝牙服务:sudo systemctl restart bluetooth.service 连接 Xbox 手柄 (删除之前的连接) 通过无线适配器连接 安装 AUR 包 xone-dlundqvist-dkms-git 和 xone-dongle-firmware 重启 参考 https://wiki.archlinux.org/title/Gamepad#Xbox_Wireless_Controller_/_Xbox_One_Wireless_Controller

十二月 15, 2024 · Nite

Steam 游戏手动破解笔记

只是做一些简单的记录,具体的使用方法都可以在各个工具的文档中找到。 游戏破解 GBE FORK 下载 https://github.com/Detanup01/gbe_fork 使用方法 https://github.com/Detanup01/gbe_fork/blob/dev/post_build/README.release.md Goldberg Emulator (不积极维护,推荐使用 GBE FORK) 下载 https://mr_goldberg.gitlab.io/goldberg_emulator/ 社区 https://www.reddit.com/r/GoldbergEmu/ 获取干净的 Steam 游戏资源 https://cs.rin.ru/forum cs.rin.ru 只能找到较新的游戏资源 如果无法在该论坛找到所需内容,最靠谱的还是 Steam 商店(购买,下载,退款)。 更多内容 https://rentry.org/pgames https://ripped.guide/PC-Software/Games/#cracking-tools

十二月 13, 2024 · Nite

Sing-box 与 Tailscale 并存问题

问题描述 在使用 Sing-box 时,Tailscale 客户端无法正常工作。 在其他设备可以通过 tailscale ping <ip/hostname> ping 通主机,但是无法建立连接(例如 ssh 会显示 Connection refused)。 解决方法 将 Sing-box 晚于 Tailscale 服务启动。 可以通过 systemd 的 After 选项来实现。

十二月 9, 2024 · Nite

Archlinux 下运行盗版游戏(exe)、online-fix 以及 Linux 原生游戏文件获取

以 Archlinux 为例,其他发行版请自行调整命令。 0. (可选)安装 proton-ge-custom GE-Custom 相较于官方版本有以下优势: 包含更多游戏特定补丁 更新的 WINE 版本 更多实验性功能 更好的媒体编解码支持 额外的游戏兼容性修复 编译时间比较长,需要耐心等待。 yay -S proton-ge-custom 如果没有这个需求可以直接使用 Steam 自带的 proton。 1. 将游戏添加到 Steam Steam 菜单中点击 游戏 -> 添加非 Steam 游戏到我的库中,并完成相应设置。 如果要使用其他 proton 版本,可以在 兼容性 中指定。 2. (可选)安装运行库 有一些游戏需要 VC++ 或者 .net 运行库,无法直接运行,则需要安装对应运行库。 建议使用 protontricks 来操作,会比较方便。 yay -S protontricks 安装完成后启动 protontricks,在游戏列表中选择盗版游戏(你需要先将游戏添加到 Steam 中才能在列表中看到),protontricks 启动时会多次弹出警告信息,无视即可。 选择 选择默认的 Wine 容器 并确认。 此时可以选择 安装 Windows DLL 或组件 来自动安装,也可以选择 Run an arbitray executable 来指定运行其他的 exe 文件。 ...

十一月 27, 2024 · Nite

Archlinux Clevo(蓝天) 笔记本驱动以及控制中心安装

Clevo 电脑的风扇调度真的是吵得要死,之前一直用 Windows 系统,用 Ryzen Master 降压来控制 CPU 温度,间接降低转速。 现在换到 Linux 系统,不好好配置一下实在受不了。 我在 Google 上翻了半天,找到了一堆 Github 仓库,试了几个都不好用,最后发现 AUR 仓库里已经有大佬整理了好用的包(我太爱 pacman 和 aur 了!)。 https://aur.archlinux.org/packages?K=clevo 安装驱动 yay -S clevo-drivers-dkms-git 安装控制中心 yay -S tuxedo-control-center-bin Tuxedo 是一家位于德国奥格斯堡的计算机制造商。该公司专门生产预装 Linux 操作系统的台式电脑和笔记本电脑。 在安装了上面的驱动之后就可以通过 Tuxedo 的控制面板来设置各种调度参数了。

十一月 3, 2024 · Nite

GO sync.Once 使用

sync.Once 用于确保某个函数只执行一次,无论有多少个 goroutine 尝试执行它。它有一个方法 Do(f func()),传入需要执行的函数。 基本用法示例: package main import ( "fmt" "sync" ) func main() { var once sync.Once done := make(chan bool) // 模拟多个 goroutine 调用 for i := 0; i < 10; i++ { go func(x int) { // once.Do() 传入的函数只会执行一次 once.Do(func() { fmt.Printf("只执行一次: %d\n", x) }) // 这行每个 goroutine 都会执行 fmt.Printf("goroutine %d 完成\n", x) done <- true }(i) } // 等待所有 goroutine 完成 for i := 0; i < 10; i++ { <-done } } 常见使用场景: 单例模式: type Singleton struct{} var ( instance *Singleton once sync.Once ) func GetInstance() *Singleton { once.Do(func() { instance = &Singleton{} }) return instance } 一次性初始化: type Config struct { settings map[string]string once sync.Once } func (c *Config) Load() { c.once.Do(func() { // 加载配置的代码 c.settings = make(map[string]string) c.settings["key"] = "value" }) } 延迟关闭资源: type Connection struct { once sync.Once quit chan struct{} } func (c *Connection) Close() { c.once.Do(func() { close(c.quit) }) } 错误处理: type ErrorHandler struct { once sync.Once err error } func (e *ErrorHandler) HandleError(err error) { e.once.Do(func() { e.err = err // 只处理第一个错误 fmt.Println("处理错误:", err) }) } sync.Once 的特点: ...

十月 25, 2024 · Nite

Archlinux Rdp 连接问题

如果你在非 Windows 端使用 RDP 协议远程控制一台登录微软账号的 Windows,那么连接时输入的用户名可能不是你的微软账号(邮箱),也不是去掉邮箱后缀后的剩余部分,更不是 Administrator,而是其他值,可以在被控端执行 echo %USERNAME% 查看,这个值虽然是自己设置的,但是系统设置里完全找不到,我试了半天真是有被气到。

十月 20, 2024 · Nite