MoreRSS

site iconLala | 荒岛修改

一个应用分享、教程类的博客,主要是那些需要自部署的。
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

Lala | 荒岛的 RSS 预览

sing-box ss报错 bad timestamp

2025-01-21 11:00:28

一个节点一直以来用着好好的,突然出现问题:浏览器访问网页,一会能访问一会不行,能访问的时候网页还可能加载不全:

查看服务器节点的最新日志:

journalctl -u sing-box -e

发现很多bad timestamp的报错:

好像和服务器时间相关?看一下服务器当前的时间:

timedatectl

发现比我本地的时间快了几十秒:

不知道为啥会快几十秒,但是从上面的命令输出结果也可以看到系统是没有启用时间同步(NTP)的,那我配置一下NTP应该就可以解决这个问题了。配置NTP的软件有很多,比如Chrony、systemd-timesyncd,我这里就用更轻量的systemd-timesyncd了:

apt update
apt install systemd-timesyncd

安装完成后应该是自动启动的,可以查看一下运行状态:

systemctl status systemd-timesyncd

这是系统层面的解决办法。如果不依赖系统本身,sing-box自身也有一个NTP的配置项可用:

{
  "log": {
    "level": "info"
  },
  "dns": {
    "servers": [
      {
        "address": "tls://8.8.8.8"
      }
    ]
  },
  "ntp": {
    "enabled": true,
    "server": "time.apple.com",
    "server_port": 123,
    "interval": "10m",
    "detour": "direct"
  },
  "inbounds": [
    {
      "type": "shadowsocks",
      "listen": "::",
      "listen_port": 8080,
      "sniff": true,
      "method": "2022-blake3-aes-128-gcm",
      "password": "hidden"
    }
  ],
  "outbounds": [
    {
      "type": "direct",
      "tag": "direct"
    },
    {
      "type": "dns",
      "tag": "dns-out"
    }
  ],
  "route": {
    "rules": [
      {
        "protocol": "dns",
        "outbound": "dns-out"
      }
    ]
  }
}

重启:

systemctl restart sing-box

我真的得吐槽一下,这个节点我主要是拿来玩游戏的,昨天出问题后导致我游戏上不去,我游戏内的东西都过期了,气死我了,这傻吊服务器早不出问题晚不出问题偏偏要在最关键的时候整活。。。

Nala:Debian APT命令的前端

2025-01-12 16:37:21

Nala主要特点:漂亮的输出、并行下载、镜像源延迟测试、命令历史记录,并且支持撤销。我主要看上命令历史记录和撤销功能了,很方便!我在安装Nala和使用的过程中遇到点小问题,记录下解决的方法。

如果系统是Debian 12 Cloud镜像,有安装cloud-init的,不要使用Debian 12官方源安装Nala,因为后续使用时会遇到卡在软件包下载这里,并且无法退出,搜了一下发现这是Nala旧版本的BUG:

https://gitlab.com/volian/nala/-/issues/285

已经卡住了咋办,先看pid,然后强行结束进程,再卸载掉旧版本。。。

ps aux
kill -9 pid
apt purge nala
apt autoremove

安装最新版:

curl https://gitlab.com/volian/volian-archive/-/raw/main/install-nala.sh | bash
apt install nala

首次使用先fetch一下:

nala fetch

把你觉得延迟最低的几个源输上去保存:

保存的文件在sources.list.d目录里面,不会影响到主配置文件:

/etc/apt/sources.list.d/nala-sources.list

使用Nala更新系统的时候发现不更新内核软件包,搜了一下发现作者在这里详细说明了原因:

https://github.com/volitank/nala/issues/29#issuecomment-1863176093

简而言之在upgrade后面加–full即可:

nala upgrade --full

如果不加–full想让这变成默认行为,可编辑Nala的配置文件:

nano /etc/nala/nala.conf

修改如下配置为true:

full_upgrade = false

试一下撤销功能,假设我先安装了一个ffmpeg:

nala install ffmpeg

查看命令历史记录:

nala history

撤销,等于是卸载掉了:

nala history undo 2

甚至我还可以继续撤销,就等于重新安装了:

nala history undo 3

删除不需要的记录:

nala history clear 

接受–all直接删除全部记录:

nala history clear --all

FerriShare:内置端到端加密的开源文件共享程序

2025-01-06 16:33:16

FerriShare特点(摘自项目页面):

Securely share files with anyone Files and filenames are encrypted
Builtin IP-based rate limiting
Configurable limits for maximum filesize and maximum storage quota
Password-protected site-wide administration panel
Configurable Privacy Policy (with default template) and Legal Notice, if you need those.
Fast, efficient and memory-safe backend

安装Docker、NGINX、Certbot:

apt -y update
apt -y install curl wget nginx python3-certbot-nginx
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh

创建目录新建compose文件:

mkdir -p /opt/ferrishare && cd /opt/ferrishare && nano docker-compose.yml

写入如下配置:

services:
  ferrishare:
    image: ghcr.io/tobiasmarschner/ferrishare:latest
    container_name: ferrishare
    restart: unless-stopped
    volumes:
      - ./data:/app/data
    ports:
      - 127.0.0.1:3000:3000

pull镜像:

docker compose pull

初始化配置:

docker compose run --rm -it ferrishare --init

流程如下:

如果你不使用CDN,这个Proxy Depth请设置为1,后续配置NGINX反向代理需要。

目前单个文件最大只支持2GB,Maximum filesize配置再大也没用。

启动:

docker compose up -d

配置NGINX反向代理,新建NGINX站点配置文件:

nano /etc/nginx/sites-available/ferrishare

写入如下配置:

server {
    listen 80;
    server_name ferrishare.example.com;
    client_max_body_size 2G;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

启用站点:

ln -s /etc/nginx/sites-available/ferrishare /etc/nginx/sites-enabled/ferrishare

签发SSL证书:

certbot --nginx --email [email protected] --agree-tos --no-eff-email

上传界面:

管理界面:

目前FerriShare的定位应该是临时文件上传,上传的文件必须设置一个到期时间,没有永久保存的选项。

Conduwuit:功能齐全的Conduit分支

2025-01-05 16:11:29

Conduwuit是一个高性能的Matrix homeserver,配置简单,资源占用少。

与Conduit的差异:https://conduwuit.puppyirl.gay/differences.html

在开始部署之前你可能需要先添加3个DNS解析记录:

woot.example.com // Conduwuit需要
coturn.example.com // 自建TURN服务器需要
cinny.example.com // 自建Cinny客户端需要

我这里使用Docker的方式部署。先安装Docker、NGINX、Certbot:

apt -y update
apt -y install curl wget nginx python3-certbot-nginx
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh

新建目录和compose文件:

cd /opt && mkdir conduwuit && cd conduwuit && nano docker-compose.yml

我的compose配置如下:

services:
  homeserver:
    container_name: conduwuit-server
    image: girlbossceo/conduwuit:latest
    restart: unless-stopped
    ports:
      - 6167:6167
    volumes:
      - db:/var/lib/conduwuit
      #- ./conduwuit.toml:/etc/conduwuit.toml
    environment:
      CONDUWUIT_SERVER_NAME: woot.example.com
      CONDUWUIT_DATABASE_PATH: /var/lib/conduwuit
      CONDUWUIT_PORT: 6167
      CONDUWUIT_MAX_REQUEST_SIZE: 80000000
      CONDUWUIT_ALLOW_REGISTRATION: 'true'
      CONDUWUIT_REGISTRATION_TOKEN: 'tosimple'
      CONDUWUIT_NEW_USER_DISPLAYNAME_SUFFIX: '"🌈"'
      CONDUWUIT_ALLOW_FEDERATION: 'true'
      CONDUWUIT_ALLOW_PUBLIC_ROOM_DIRECTORY_OVER_FEDERATION: 'true'
      CONDUWUIT_ALLOW_UNSTABLE_ROOM_VERSIONS: 'true'
      CONDUWUIT_ALLOW_CHECK_FOR_UPDATES: 'true'
      CONDUWUIT_TRUSTED_SERVERS: '["matrix.org"]'
      CONDUWUIT_FEDERATION_TIMEOUT: 3600
      CONDUWUIT_URL_PREVIEW_DOMAIN_CONTAINS_ALLOWLIST: '["*"]'
      CONDUWUIT_TURN_URIS: '["turn:coturn.example.com?transport=udp"]'
      CONDUWUIT_TURN_SECRET: '2dVaXkuMU4mQFvTWnVgh0aqbgexzFPwSoY2hMS7GNAytF56IfsMnlBpm0MYRvEdf'
      CONDUWUIT_WELL_KNOWN__CLIENT: 'https://woot.example.com'
      CONDUWUIT_WELL_KNOWN__SERVER: 'woot.example.com:443'
      #CONDUWUIT_LOG: warn,state_res=warn
      CONDUWUIT_ADDRESS: 0.0.0.0
      #CONDUWUIT_CONFIG: '/etc/conduwuit.toml' # Uncomment if you mapped config toml above

  turn:
    container_name: coturn-server
    image: docker.io/coturn/coturn
    restart: unless-stopped
    network_mode: "host"
    volumes:
      - ./coturn.conf:/etc/coturn/turnserver.conf

volumes:
    db:

至少需要修改以下配置:

CONDUWUIT_SERVER_NAME // 部署Conduwuit实例的域名
CONDUWUIT_TURN_URIS // 部署Coturn TURN服务的域名
CONDUWUIT_TURN_SECRET // Coturn的验证密钥,可使用pwgen命令生成,与coturn.conf内的static-auth-secret配置需一致。
CONDUWUIT_WELL_KNOWN__CLIENT // .well-known相关,如没有特殊需求与conduwuit实例的域名保持一致。
CONDUWUIT_WELL_KNOWN__SERVER // .well-known相关,如没有特殊需求与conduwuit实例的域名保持一致。

建议修改以下配置:

CONDUWUIT_REGISTRATION_TOKEN // 注册时需要填写的TOKEN,类似于注册邀请码,防止滥用。

完整的conduwuit配置文件在此,如果上述的配置不满足你的需求,可按自己的需要进行修改。

之后新建coturn配置文件:

nano coturn.conf

我的配置如下:

use-auth-secret
static-auth-secret=2dVaXkuMU4mQFvTWnVgh0aqbgexzFPwSoY2hMS7GNAytF56IfsMnlBpm0MYRvEdf
realm=coturn.example.com

static-auth-secret可以使用pwgen生成,如没有pwgen工具可先安装:

apt -y install pwgen

然后执行如下命令:

pwgen -s 64 1

启动:

docker-compose up -d

配置NGINX反向代理,新建NGINX站点配置文件:

nano /etc/nginx/sites-available/conduwuit

写入如下配置:

server {
    listen 80;
    server_name woot.example.com;
    merge_slashes off;
    client_max_body_size 80M;

    location / {
        proxy_pass http://127.0.0.1:6167$request_uri;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_buffering off;
        proxy_connect_timeout 5m;
    }

    location /_matrix/ {
        proxy_pass http://127.0.0.1:6167$request_uri;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_buffering off;
        proxy_connect_timeout 3600s;
        proxy_read_timeout 3600s;
    }

    location /_conduwuit/ {
        proxy_pass http://127.0.0.1:6167$request_uri;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_buffering off;
        proxy_connect_timeout 5m;
    }
}

启用站点:

ln -s /etc/nginx/sites-available/conduwuit /etc/nginx/sites-enabled/conduwuit

签发SSL证书:

certbot --nginx --email [email protected] --agree-tos --no-eff-email

重新编辑刚启用的站点配置文件:

nano /etc/nginx/sites-available/conduwuit

启用HTTP2并增加一个8448端口的监听:

listen 8448 ssl http2;
listen 443 ssl http2; # managed by Certbot

如图所示:

重载NGINX使配置生效:

systemctl reload nginx

打开Matrix Federation Tester输入你的conduwuit实例域名进行测试,确保一切正常:

至此Conduwuit服务端就部署完成了。

现在可以使用你喜欢的客户端注册账号并登录:https://matrix.org/ecosystem/clients/

这里我推荐Cinny,快速、界面美观,唯一的不足是缺少音视频通话功能,不过我也不用这个功能。再就是E2E加密的房间可能会偶尔出现消息无法解密的问题。

你可以直接使用官方的Web APP:https://app.cinny.in/,或者也可以自建,下面简单说一下如何自建cinny。

假设你的服务器上已经有NGINX,一般都是和Conduwuit部署在同一台服务器上,先下载cinny的压缩包解压:

cd /var/www
wget https://github.com/cinnyapp/cinny/releases/download/v4.2.3/cinny-v4.2.3.tar.gz
tar -xzvf cinny-v4.2.3.tar.gz
mv dist/ cinny/
chown -R www-data:www-data cinny/

编辑cinny的配置文件:

nano cinny/config.json

修改如下配置:

{
  "defaultHomeserver": 0, // 改成0,设置默认使用自建的conduwuit服务器。
  "homeserverList": [
    "woot.example.com", // 设置你的conduwuit实例域名。
    "matrix.org"
  ],
  "allowCustomHomeservers": false,

  ...

  "hashRouter": {
    "enabled": true, // 启用hashRouter
    "basename": "/"
  }
}

新建NGINX站点配置文件:

nano /etc/nginx/sites-available/cinny

写入如下配置:

server {
    listen 80;
    server_name cinny.example.com;
    index index.html;
    root /var/www/cinny;
    client_max_body_size 80M;
    add_header Access-Control-Allow-Origin *;
}

启用站点:

ln -s /etc/nginx/sites-available/cinny /etc/nginx/sites-enabled/cinny

签发SSL证书:

certbot --nginx --email [email protected] --agree-tos --no-eff-email

访问cinny.example.com注册一个账号,第一个注册的账号自动成为管理员,注意注册的时候需要填写TOKEN,这个TOKEN是之前在compose内设置的值:“tosimple”(如果你没有修改的话)

登录进去后应该先配置交叉签名,用于备份E2E加密的聊天记录、设备验证:

这里可以选择直接生成Key或者设置安全短语,建议使用安全短语,设置安全短语后也会自动生成Key,这里的安全短语实际就相当于一个二级密码,方便日后使用,不然你每次恢复聊天记录都得输入一长窜的Key,非常不方便:

登出账号重新登录进来就可以点如图所示的按钮,输入你的Key或者安全短语恢复你的加密聊天记录:

Conduwuit和Conduit一样自带一个管理员房间,可以在这个房间内输入相关命令来管理服务器:

AutoLady:自动化订阅小姐姐影片

2024-11-18 15:17:05

如果你了解过*arr stack或者MoviePilot就应该知道有很多人喜欢玩“自动化追剧”,尤其是在PT这个圈子里面。。

“自动化追剧”其实简单点说就是把想看的片子订阅下来,如果出种了就自动调用下载工具下载,再由媒体服务器自动刮削进行整理。这一整套流程全部都是自动的,无需人工干预。一个不太恰当的比喻就像是:你订阅了一个博客的RSS,当博客有新文章发布的时候你能第一时间看到。而在“自动化追剧”中就是把文章换成了各类影视资源。

有很多软件和工具在“自动化追剧”中都扮演非常重要的角色,但这些软件普遍都只支持订阅一般的电影、电视剧、动漫、音乐等,涉及到成人内容的少之又少,在*arr stack中有一个叫Whisparr的软件支持,但该软件维护不积极,并且对JAV的支持不好。

我前段时间通过一个偶然的方式得知AutoLady这个软件,这个软件可以说是专为JAV设计,我当时部署试了一下,觉得功能算完善的了,基本可以实现我想要的需求:通过搜索番号来找片,找到了就订阅下来,片子出种后第一时间自动调用下载器下载。

我用了一段时间后发现有点问题,AutoLady的搜索结果是调用Javbus和JavLibrary的,然而这两个站数据更新太慢,很多新片都发售很久了却还没有收录,试想一下,如果一部新片发售了但是搜不到,那还订阅个毛线,既然要订阅肯定是想在第一时间下载到新片啊。。

然后我就给作者提了个建议,想让作者增加对www.avbase.net的支持,把搜索的数据源改为AVbase,因为这个站的数据是最全的,并且更新也快,基本可以和片商保持在同一天内更新。AVbase除了数据全、更新快以外还有非常重要的一点:AVbase可以识别出每部片的真实女优姓名,尤其是像SIRO、300MIUM、200GANA这种小片商的片子,片商都用假的AV女优姓名,你不知道真名的情况下,订阅个假的名字也没意义。

没想到啊没想到,我也只是建议,AutoLady作者真的给力,没过几天直接发了个新版本,采纳我的建议把搜索功能改成用avbase了,在这里必须给作者点个赞,哈哈哈,太给力了!!下面记录下AutoLady的部署和使用方法。在开始之前有一些注意事项:

1、AutoLady目前只支持有限的PT站点,目前支持的有:M-Team(馒头)、FSM(飞天拉面)、PTT,如果没有这几个站的账号,就没有必要折腾了。

2、下载工具只支持qBittorrent和Transmission,这里我选择用qBittorrent,有关qBittorrent安装方法可参考这篇文章

3、媒体服务器支持Jellyfin、EMBY、Plex,这里我使用的是Jellyfin,但我不使用AutoLady内置的相关功能,因为我的Jellyfin已经配置好MetaTube了,MetaTube会帮我刮削。有关MetaTube的配置可参考这篇文章

安装Docker:

apt -y update
apt -y install curl
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh

新建compose文件:

mkdir -p /opt/autolady && cd /opt/autolady && nano docker-compose.yml

写入如下内容:

services:
  auto-lady:
    image: orekiiiiiiiiiiiii/auto-lady:latest
    container_name: auto-lady
    restart: unless-stopped
    ports:
      - "127.0.0.1:8043:80"
    volumes:
      - ./auto-lady-data:/data

启动:

docker compose up -d

首次启动需在日志中查看默认的管理员账号、密码:

docker compose logs

[可选]配置NGINX反向代理,安装NGINX:

apt -y update
apt -y install nginx python3-certbot-nginx

新建NGINX站点配置文件:

nano /etc/nginx/sites-available/autolady

写入如下内容:

server {
    listen 80;
    listen [::]:80;
    server_name autolady.example.com;
    client_max_body_size 0;

    location / {
        proxy_pass http://127.0.0.1:8043;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Protocol $scheme;
    }
}

启用站点:

ln -s /etc/nginx/sites-available/autolady /etc/nginx/sites-enabled/autolady

签发TLS证书:

certbot --nginx --email [email protected] --agree-tos --no-eff-email

使用管理员账号登录到auto-lady后台,点设置,首先要配置站点,M-team需要一个令牌,FSM需要APITOKEN和PASSKEY:

M-team的令牌在“实验室”-“存取令牌”界面可以生成:

FSM的APITOKEN生成:

FSM的PASSKEY:

auto-lady下载器的配置:

从上图可以看到我把qBittorrent的下载目录设置成:/opt/qbtuser/Downloads。

那么Jellyfin直接挂载这个目录即可:

services:
  jellyfin:
    image: jellyfin/jellyfin
    container_name: jellyfin
    restart: 'unless-stopped'
    ports:
      - "127.0.0.1:8096:8096"
      - "127.0.0.1:7359:7359"
    volumes:
      - ./config:/config
      - ./cache:/cache
      - /opt/qbtuser/Downloads:/media:ro

有关Jellyfin的安装与刮削配置,可以参考我的这篇文章:https://lala.im/9288.html

剩下的一些设置可选,比如微信、Telegram推送这些,可以根据自身需要来配置,我不需要这些功能就不配置了。

《OVH相关》更换Proxmox VE ZFS RAID10阵列中的硬盘

2024-11-13 16:06:02

我前段时间买了两台OVH独立服务器,其中这台KS-LE-E各种问题不断,刚拿到手的时候就发现少了16GB内存,连IPMI上去发现确实是有一根内存条有问题:

当时就只想着解决这个内存的问题去了,发了个工单让他们给我把内存换了一根就好了。其他的硬件,比如硬盘的信息就简单看了下没发现什么大问题就没管它了,直接装了个PVE就拿来用了。这两天看邮箱的垃圾箱突然发现PVE给我发了很多封SMART错误的邮件:

登录服务器一看还真是,这块/dev/sdb的盘确实是有点问题了:

虽然这块盘现在还是能用的,但出于谨慎的态度我还是发了个工单问了下,OVH那边也不墨迹,二话不说直接就把这块盘给换了。在换之前我也没有在服务器上特别设置什么,就是简单看了下硬盘的分区以及当时的ZFS池状态:

OVH那边换完之后,我再次登录服务器查看,可以看到/dev/sdb这块盘是新换的了,没有了之前的分区表:

查看ZFS池状态,变成降级状态了,因为我这个是RAID10阵列,挂了一块盘也能正常运行:

关于在ZFS中更换硬盘,主要分为两种情况:系统盘(bootable device)、非系统盘。

如果是更换系统盘,则需要复制硬盘的分区表、生成GUID、以及重建EFI分区。而非系统盘的话不需要这些操作,直接更换就好了。

我现在的情况是属于更换系统盘,所以现在我需要把一块健康硬盘的分区表复制到这块新的/dev/sdb。现在我的服务器上除了sdb外还有sda、sdc、sdd三块盘,这些硬盘都是健康的,随便选一个复制就行:

sgdisk /dev/sda -R /dev/sdb

生成随机的GUID:

sgdisk -G /dev/sdb

然后更换ZFS池中的硬盘:

zpool replace -f rpool /dev/sdb3 /dev/sdb3

这个命令可能具有迷惑性,为什么新旧硬盘的分区都是/dev/sdb3?因为新盘的分区表是按照原来的分区表原封不动复制过来的,又因为新换的硬盘设备名正好还是sdb,所以完全相同。如果不是很明白,看看这个命令就懂了:

zpool replace -f [pool] [old zfs partition] [new zfs partition]

再次查看ZFS池状态可以看到在重建了,因为问题发现的早,我也没存多少数据,重建是非常快的:

重建完成后再次查看,全部都在线了:

现在还需要重建EFI分区:

proxmox-boot-tool format /dev/sdb2
proxmox-boot-tool init /dev/sdb2

更新配置:

proxmox-boot-tool refresh

重新生成/etc/kernel/proxmox-boot-uuids:

proxmox-boot-tool clean

查看状态:

proxmox-boot-tool status

如有下回显说明一切正常:

至此就全部完成了,可以重启一下测试服务器是否能够正常引导:

systemctl reboot

这个方法是通用的,不限于RAID10阵列,无论是RAIDZ-1、RAIDZ-2,或者RAID1,都可以用这个办法在ZFS中更换硬盘。

参考资料:

https://pve.proxmox.com/pve-docs/chapter-sysadmin.html#sysadmin_zfs_change_failed_dev
https://forum.proxmox.com/threads/how-to-regenerate-etc-kernel-proxmox-boot-uuids.99333/
https://pve.proxmox.com/pve-docs/chapter-sysadmin.html#sysboot_proxmox_boot_tool