前言
手里有一台本科室友毕业不要了丢给我的上古联想小新轻薄本,六代 i5,4G 内存,250G 硬盘,之前一直闲置,最近有空了(不如说是给某些不良嗜好找点替代活动)折腾一下,让它发挥一下余热。
准备工作
这个部分在闲置笔记本上操作。
安装系统
- 下载官方镜像。
- 使用诸如 Ventoy,Rufus 等等的启动盘制作工具制作启动盘。
- 进入 BIOS,使用启动盘启动。部分联想电脑解锁隐藏 BIOS 可以参考 https://www.bilibili.com/opus/795391586576891909
- 按照官方引导一步步安装系统即可,LVM(Logical Volume Management) 功能建议启用,方便后续分区调整。
SSH
- 推荐安装时勾选 OpenSSH 的选项。
- 安装时未勾选的话则手动进行安装
sudo apt install openssh-server
sudo ps -e |grep ssh # 显示sshd即安装成功
sudo systemctl status ssh # 查看 ssh service 状态
sudo systemctl start ssh # 一般默认开启,没有开启则手动开启
合盖不睡眠
毕竟是当小服务器用,平时是合盖状态,默认会直接睡眠。
- 修改 Login Manager 的配置
sudo vim /etc/systemd/logind.conf
- 将
#HandleLidSwitch=suspend改为HandleLidSwitch=ignore - 重启服务
sudo systemctl restart systemd-logind
此时你已经可以把闲置笔记本放到无人在意的角落了,全程用主力电脑远程 ssh 连接即可。
使用密钥代替密码
- 使用 ed25519 算法生成密钥(在本机终端而不是在闲置笔记本上操作)
ssh-keygen -t ed25519 -a 256 -C "xxx@xxx"
- 将密钥上传到服务器
cat ~/.ssh/id_ed25519.pub | ssh username@remote_host_ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
# 你也可以使用更方便的命令
ssh-copy-id user@hostname.example.com
# windows 使用如下命令
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh user@hostname.example.com "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys"
- 关闭 ssh 密码登录
sudo vim /etc/ssh/sshd_config
- 将其中的
#PasswordAuthentication yes修改为PasswordAuthentication no - 重启 sshd 服务
sudo systemctl restart sshd
Fastfetch
不得不品的一环。
sudo add-apt-repository ppa:zhangsongcui3371/fastfetch
sudo apt update
sudo apt install fastfetch
爽。
btop
sudo apt install btop
smartctl
检查一下硬盘状况
sudo apt install smartmontools
sudo smartctl -a /dev/nvme0n1 # 设备名称可以用 lsblk 查看
YABS
没事跑个分。
curl -sL https://yabs.sh | bash
断电自动关机
用笔记本当轻量服务器有一个好处,就是相当于自带了一个 UPS。 这里添加一个定时脚本,检测到断电以及低电量时自动关机。
- 确认电池标识符(如果是
BAT0的话后续请自行修改,这台笔记本是BAT1)
ls /sys/class/power_supply/
- 创建并编辑脚本
sudo vim /usr/local/bin/battery_monitor.sh
- 添加如下内容
#!/bin/bash
THRESHOLD=50
CAPACITY=$(cat /sys/class/power_supply/BAT1/capacity)
STATUS=$(cat /sys/class/power_supply/BAT1/status)
# Discharging && capacity < Threshold
if [ "$STATUS" = "Discharging" ] && [ "$CAPACITY" -lt "$THRESHOLD" ]; then
# log
echo "$(date): Battery is at $CAPACITY%. Shutting down safely." >> /var/log/battery_shutdown.log
# safely shutdown
/sbin/shutdown -h now
fi
- 赋予脚本执行权限
sudo chmod +x /usr/local/bin/battery_monitor.sh
- 设置定时任务
sudo crontab -e
- 末尾添加一行
* * * * * /usr/local/bin/battery_monitor.sh
Docker
说实话很多东西还是大公司提供的云服务用起来方便,自己对一些薅羊毛的自动化脚本也不感兴趣,所以只部署了网络唤醒和几个 PT 相关的容器。
- 按照官方文档安装 Docker Engine 以及 Docker Compose。
- 以下全部 Docker Compose 配置文件均通过
sudo docker compose up -d启动。
配置代理
- 创建配置文件
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo vim /etc/systemd/system/docker.service.d/http-proxy.conf
- 添加以下内容
[Service]
Environment="HTTP_PROXY=http://IP:port"
Environment="HTTPS_PROXY=http://IP:port"
Environment="NO_PROXY=localhost,127.0.0.1"
- 重启 Docker
sudo systemctl daemon-reload
sudo systemctl restart docker
挂载 NTFS 设备
存储电影电视剧的硬盘原本在 Windows 上运行,考虑到兼容性和可迁移性,不做格式化,直接在 Linux 下挂载使用。
lsblk -f # 查看移动硬盘 UUID
id # 查看用户 id
sudo mkdir -p /mnt/Videos # 创建你希望的挂载点
sudo vim /etc/fstab
- 添加以下内容(需要根据实际UUID、挂载点、uid和gid修改)
UUID=371F208A1CC186D2 /mnt/Videos ntfs-3g defaults,uid=1000,gid=1000,dmask=022,fmask=133,windows_names 0 0
- 测试挂载情况
sudo mount -a
验证无误的话下次开机会自动挂载
卸载设备
lsblk
sudo umount <MOUNTPOINTS>
Qbittorrent WebUI
玩 PT 还是少不了它。
services:
qbittorrent:
image: lscr.io/linuxserver/qbittorrent:5.1.4
container_name: qbittorrent_5.1.4
# network_mode: "host"
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
- WEBUI_PORT=21088
- TORRENTING_PORT=16881
volumes:
- ./config:/config
# path for vuetorrent ui
- ./vuetorrent:/vuetorrent
# Download path
- /mnt/Videos/Contents:/downloads
ports:
- "21088:21088"
- "16881:16881"
- "16881:16881/udp"
restart: unless-stopped
- 新版本首次登陆时账号为
admin,密码为随机生成,使用sudo docker logs qbittorrent_5.1.4查看。
IYUU
用于自动辅种
services:
iyuuplus:
image: iyuucn/iyuuplus-dev:latest
container_name: IYUUPlus
restart: unless-stopped
ports:
- "8780:8780"
volumes:
- ./iyuu:/iyuu
- ./data:/data
# user: "1000:1000"
MoviePilot
用于自动签到以及更多高级功能。
services:
moviepilot:
image: jxxghp/moviepilot-v2:2.8.1-1
container_name: moviepilot-v2
restart: unless-stopped
stdin_open: true
tty: true
hostname: moviepilot-v2
ports:
- '13000:3000'
- '13001:3001'
volumes:
- '/mnt/Videos:/media'
- './config:/config'
- './core:/moviepilot/.cache/ms-playwright'
- '/var/run/docker.sock:/var/run/docker.sock:ro'
environment:
- 'NGINX_PORT=3000'
- 'PORT=3001'
- 'PUID=0'
- 'PGID=0'
- 'UMASK=000'
- 'TZ=Asia/Shanghai'
- 'SUPERUSER=admin'
- 'SUPERUSER_PASSWORD=Password'
UpSnap
用于局域网内网络唤醒。
services:
upsnap:
container_name: upsnap
image: ghcr.io/seriousm4x/upsnap:5 # images are also available on docker hub: seriousm4x/upsnap:5
network_mode: host
restart: unless-stopped
volumes:
- ./data:/app/pb_data