Files
ykxmz/_build/add_swap_1g.py
T
xmz7891 2061f9525f 2.3.0:手表界面精简 + 播放器 + 鼠标重做
手表端
- 功能页从 10 个杂项精简到 7 个(屏幕/鼠标/媒体/文件/电脑/语音/电源)
- 删掉:游戏封锁、待办、掷骰子、抽奖、壁纸、显示器开关、定时关机、
  剪贴板历史、性能/磁盘/电量、文件夹浏览、教室限制等
- 改成显式列按钮,不再把电脑端所有功能组无脑铺到表盘
- 远程鼠标控制重做:滑动区 + 左键/滚轮/右键三按钮
  滚轮点按=中键、上下滑=滚动
- 新增视频/音乐播放器(手表本地播放):进度拖动、左右滑快进退10秒、
  点画面播放暂停、上一/下一、播完自动下一首

电脑端
- 新增 kill_all(结束所有进程),白名单保护系统关键进程和自身
- 新增 media_list / media_pull(播放器数据源)
  安全边界:只允许媒体目录,用 relative_to 判断,防同前缀兄弟目录绕过

中转站
- known_devices 从 ID 集合改成「设备ID -> 配对码」映射
- 修复:管理员改码后关机超过 6 小时,改码会被超时清理冲掉
- 老格式 state 文件平滑升级
2026-10-18 11:39:14 +08:00

122 lines
4.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# -*- coding: utf-8 -*-
r'''第一步:给服务器加 1G swap,并调好内存参数。
== 为什么必须先做这个 ==
机器只有 **1936MB 内存,而且一个 swap 都没有**。现在用了 566MB,
看着还有富余 —— 但 Halo 是 **Java 应用**,JVM 默认会按物理内存的
1/4 去要堆(1936/4 ≈ 470MB),加上元空间、线程栈、直接内存,
很容易冲到 700MB+。
**没有 swap 的时候,内存一紧张就是 OOM Killer 直接杀进程** ——
表现是"博客隔一阵就自己挂了",而且 systemd 里只留一句
`Killed process (java)`,很难查。
有 1G swap 就多了一层缓冲:平时不用它(性能不受影响),
突发时才借用,扛过去就没事了。
== 参数怎么选 ==
* **大小 1G**(用户指定)
* **swappiness=10** —— 默认是 60,意思是"内存用到 60% 就开始往
swap 里挪"。对服务器来说这太激进了,会把常用的页换出去导致变卡。
10 表示"只有真要撑不住时才用 swap",正合适。
* **vfs_cache_pressure=50** —— 默认 100,让内核更愿意保留
dentry/inode 缓存(文件操作多的时候有用)。
* **写进 /etc/fstab** —— 不然重启就没了。
== 一个坑 ==
`swapon` 之后再 `free -m` 才看得到。而且**如果 fstab 写错,
系统可能起不来**(fstab 里有不存在的设备会进 emergency mode)。
所以写完要用 `mount -a` 试一遍,能过才算数。
'''
from __future__ import annotations
import sys
from pathlib import Path
ROOT = Path(__file__).resolve().parent.parent
sys.path.insert(0, str(ROOT / "_build"))
from lssh import run # noqa: E402
REMOTE = r'''
set -e
echo "==== 加之前 ===="
free -m | sed 's/^/ /'
echo
if swapon --show 2>/dev/null | grep -q .; then
echo " 已经有 swap 了,跳过创建:"
swapon --show | sed 's/^/ /'
else
echo "==== 创建 1G swap 文件 ===="
# fallocate 比 dd 快得多,而且是稀疏分配 —— 但**有些文件系统
# (比如 btrfs / 某些 overlay)上 fallocate 出来的文件不能当 swap**,
# 所以先试 fallocate,失败就退回 dd。
if ! sudo fallocate -l 1G /swapfile 2>/dev/null; then
echo " fallocate 不行,改用 dd(慢一点但通用)"
sudo dd if=/dev/zero of=/swapfile bs=1M count=1024 status=none
fi
sudo chmod 600 /swapfile
sudo mkswap /swapfile >/dev/null
sudo swapon /swapfile
echo " ✓ 已启用"
fi
echo
echo "==== 写进 /etc/fstab(重启后自动挂)===="
if grep -qE '^\s*/swapfile\s' /etc/fstab; then
echo " fstab 里已经有了"
else
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab >/dev/null
echo " ✓ 已写入"
fi
echo
echo "==== 调内核参数 ===="
sudo tee /etc/sysctl.d/99-ykxmz-swap.conf >/dev/null <<'EOF'
# swap 调优(配合 halo 博客)
#
# swappiness 默认 60 太激进 —— 内存用到 60% 就往 swap 挪,
# 会把常用页换出去导致变卡。10 = 只有真要撑不住时才用。
vm.swappiness = 10
# 默认 100,改成 50 让内核更愿意保留文件缓存
vm.vfs_cache_pressure = 50
EOF
sudo sysctl -p /etc/sysctl.d/99-ykxmz-swap.conf | sed 's/^/ /'
echo
echo "==== 校验 fstab(写错会导致开不了机!)===="
if sudo mount -a 2>&1 | grep -q .; then
echo " ⚠ fstab 有问题:"
sudo mount -a 2>&1 | sed 's/^/ /'
else
echo " ✓ fstab 没问题(mount -a 无报错)"
fi
echo
echo "==== 加之后 ===="
free -m | sed 's/^/ /'
echo
echo " --- swap 详情 ---"
swapon --show | sed 's/^/ /'
echo " --- 当前参数 ---"
printf ' swappiness = %s\n' "$(cat /proc/sys/vm/swappiness)"
printf ' vfs_cache_pressure = %s\n' "$(cat /proc/sys/vm/vfs_cache_pressure)"
'''
def main() -> int:
print("=" * 62)
print(" 第一步:加 1G swap")
print("=" * 62)
print()
out = run(REMOTE, timeout=400, quiet=True)
print(out[1] if isinstance(out, tuple) else out)
return 0
if __name__ == "__main__":
sys.exit(main())