都快2025年了,来看看我如何下载X/Twitter视频 2024-12-05

前缀、文档修改记录

20241205 初始化编辑此文章,完稿

章节1、需求描述

日常刷X/Twitter的话,经常看到一些有趣的视频,想要随手保存下来,这个需求,其实应该还是蛮普遍的。

本篇博客,不同于以往的下载方式,本篇介绍了组合使用 服务器 / youtube-dl / rsync的方式,可以非常便捷地下载X/Twitter视频了。

章节2、简略架构拓扑图

2.1、 环境说明:

1、 日常使用的苹果手机 * 1 ,里面配置章节4的捷径

2、 API服务器,操作系统Debian,安装了youtube-dl / ffmpeg / python3 / rysnc, python3的库调用了 Flask, request, jsonify,定义了一个临时存储视频的目录 /var/www/html/shortsv/

3、家里的服务器,挂载了NAS的存储路径,使用定时的rsync同步,小时粒度,同步视频文件到家里的NAS存储。

2.2、 流量说明

1、 苹果手机,日常用的X/Twitter客户端,如果刷到某个视频,则通过分享按钮,分享到捷径里的接口

2、捷径里,本质就是一个JSON传参数,把刚刚的X/Twitter的视频地址,传给服务器的API接口

3、服务器的API接口,接受到传参,调用已部署的youtube-dl/ffmpeg程序,下载并合并对应的视频

4、家里的Linux服务器,通过rsync每小时定时下载并同步服务器对应目录下的视频,下载到挂载的NAS目录里,下载动作完成后,清空远程服务器上的视频目录下的所有视频文件。

2.3、 优势分析

  • 成本低: 相比于充值X/Twitter会员,该方式可以下载高清的视频,还是很棒的,海外服务器挑个便宜的买就行。
  • 省手机流量: 相比于原先必须在手机上喊机器人跳出下载链接,手机上另存到相册,这个方式直接是文本传参,家里的NAS同步服务器下载的视频,没有Double手机流量的消耗,毕竟不是随时随地有WIFI。
  • 操作简单: 苹果手机上,在视频下方,直接调用捷径,等待在远端服务器上下载完成的提示即可。

章节3、 海外的远端服务器上的接口代码

如下,简略版本的,更容易维护,不过最好每次让请求都通过VPN走,不要明文传递参数到海外的服务器。

需要自定义的参数

var_cookies:  比选参数,这个是你本地浏览器登录了Twitter后,用浏览器插件Get cookies.txt LOCALLY导出的cookies.txt
var_listen_port:    可选修改,这个是API接口的在远程服务器上的监听端口
# 远程服务器上,需要执行的命令
apt update

apt install ffmpeg rsync python3 

mkdir -p /var/www/html/shortsv/

wget https://github.com/yt-dlp/yt-dlp/releases/download/2024.12.03/yt-dlp -O /usr/bin/yt-dlp

chmod +x /usr/bin/yt-dlp

#!/usr/bin/python3 
# -*- coding: utf-8 -*-
# 2024-7-30
#   注意点: 创建路径 mkdir -p /var/www/html/shortsv/
# 作者:Dasmz
from flask import Flask, request, jsonify
import subprocess
import json
import datetime

app = Flask(__name__)

var_listen_port = 9999
var_cookies = '/root/sh/cookies.txt'
# --cookies-from-browser chrome --cookies cookies.txt

def getNow():
    return datetime.datetime.now().strftime("%Y-%m-%d-%H-%M-%S")

@app.route('/', methods=['GET'])
def return_index():
    return '<p>THE API INTERFACE WORKS OK. TIME: %s</p>' % getNow(), 200

@app.route('/getV', methods=['POST'])
def download_video():
    data = request.json
    print(json.dumps(data))
    twitter_url = data.get('twitter_url')
    
    if 'x.com' not in twitter_url:
        return jsonify({'error': 'Missing URL DATA'}), 400

    try:
        o_filename = '/var/www/html/shortsv/%s' % getNow()
        output = subprocess.check_output(['/usr/bin/yt-dlp', '-k', '--cookies',var_cookies,'-o', o_filename +'.%(ext)s', twitter_url])
        return jsonify({'message': 'Video downloaded successfully'}), 200
    except subprocess.CalledProcessError as e:
        return jsonify({'error': str(e)}), 500

if __name__ == '__main__':
    app.run(host='0.0.0.0',port=var_listen_port)

章节4、苹果手机的捷径

https://www.icloud.com/shortcuts/4ce720db10a446008e9fad7c18d5feb1

需要自定义的参数是,传参至的远程的海外API服务器地址

章节5、 国内的家里的服务器的配置

配置定时同步的程序,每日自动重启任务,路径 /root/sh/restart_rsyncdata_service.sh

#!/bin/bash
# NAME: /root/sh/restart_rsyncdata_service.sh
# PATH
cd /root/sh/

# STOP
echo "<+>  STOP THE SERVICE"
/usr/bin/ps -ef | grep rsyncdata_shorts | grep -v grep | awk '{print $2}' | xargs kill -9
echo "<+>  STOP THE SERVICE. DONE"

# START
echo "<+>  START THE SERVICE"
/usr/bin/nohup /root/sh/rsyncdata_shorts.sh 2>&1 > /root/sh/Log_rsyncdata_shorts.log &
echo "<+>  START THE SERVICE. DONE"

# END

root@JellyfinServer:~# 

文件 /root/sh/rsyncdata_shorts.sh, 如下内容

#!/bin/bash
# NAME: /root/sh/rsyncdata_shorts.sh
# /media/TV/HDD0104TB/ShortsV/  本地存储路径

for i in `seq 0 24`
do
  date > /root/sh/rsyncdata_shorts.timestamp.dat
  /usr/bin/ssh -i /root/sh/key_id_rsa_2048.key -p 22 root@你服务器的IP地址 'rm -r /var/www/html/shortsv/*fhls*'
  /usr/bin/rsync -avz -e "ssh -i /root/sh/key_id_rsa_2048.key -p 22" --progress root@你服务器的IP地址:/var/www/html/shortsv/*mp4 /media/TV/HDD0104TB/ShortsV/
  /usr/bin/ssh -i /root/sh/key_id_rsa_2048.key -p 22 root@你服务器的IP地址 'rm -r /var/www/html/shortsv/*'
  /usr/bin/sleep 3600
  date >> /root/sh/rsyncdata_shorts.timestamp.dat
done
# END

定时任务

# rsync 数据  shorts短视频数据
59 1 * * *  /root/sh/restart_rsyncdata_service.sh 2>&1 > /root/sh/Log_restart_rsyncdata_service.log

附录1、视频操作演示

000156. 都快2025年了,来看看我如何下载X/Twitter视频 2024-12-05

本期博客地址 https://dasmz.com/?p=4334
本期视频地址 https://youtu.be/pIDbwmerGj0

附录2、@Dasmz

博客内,所有教程为手打原创教程,如果技术教程对您有所帮助,欢迎打赏作者。技术层面,闻道有先后,如有疏漏、错误,欢迎指正。技术博客的内容,一般具有一定的环境依赖,具有一定的年代依赖,酌情参考其中的内容,请勿完全照搬照抄。

对于博客内已提及的专业知识,如果需要技术指导,欢迎联系我,仅需支付工时费

Twitter: Dasmz

Youtube: @DasmzStudio

Telegram: @Dasmz

Donate
云乞讨

自动定时刷新网页,硬刷新,浏览器插件 2024-11-04

前缀、文档修改记录

20241104 初始化编辑此文章,完稿

章节1、需求描述

接到一个对XXX网页,刷访问量的需求,最好要慢刷,低并发,页面有统计,最好使用真实的浏览器进行。

这个时候,按照这样的需求,推荐大家用Edge或者谷歌浏览器的”Auto Refresh Plus | Page Monitor”, 插件出品方为“autorefresh.io”

章节2、安装及使用

安装过程跟安装其他插件,没有什么区别,访问谷歌浏览器商店,搜索其名称”Auto Refresh Plus | Page Monitor”,点击添加到浏览器即可。

其整个工作界面非常容易上手,第一行是插件版本,开始按钮,声音提示按钮。

下面是对网页刷新的时间间隔设置,也可以取随机时间值。

硬刷新:这个比较重要,一些网页统计的值,要从后台看到你的请求,这个参数就必须够上,这样就不会命中本地浏览器的缓存。

设置刷新次数:比如XXX网页要刷10万次的访问,这个地方可以勾选,并设置数值100000

在网页上显示视觉计数器:一般不需要勾选。

在用户交互时停止刷新:针对某些网页,刷新过密会出现登录窗口等场景,这个可以勾上。

普通的网页,其实就是设置一个时间间隔、勾选硬刷新,即可点击开始按钮,开启刷新网页访问的任务。

附录1、视频操作演示

本期博客地址 https://dasmz.com/?p=4292
本期视频地址 https://youtu.be/OfIFrKhG5j0
博客地址 https://dasmz.com

附录2、@Dasmz

博客内,所有教程为手打原创教程,如果技术教程对您有所帮助,欢迎打赏作者。技术层面,闻道有先后,如有疏漏、错误,欢迎指正。技术博客的内容,一般具有一定的环境依赖,具有一定的年代依赖,酌情参考其中的内容,请勿完全照搬照抄。

对于博客内已提及的专业知识,如果需要技术指导,欢迎联系我,仅需支付工时费

Twitter: Dasmz

Youtube: @DasmzStudio

Telegram: @Dasmz

Donate
云乞讨

编译安装HaProxy 2024-10-25

前缀、文档修改记录

20241025 初始化编辑此文章,完稿,文章中的最新稳定版本,为书写此文时间的v3.0.5
20241119 更新到v3.0.6版本
20241121 更新小部分内容

章节1、需求描述

在Debian/Ubuntu系列系统上,编译安装最新稳定版本的haproxy version v3.0.X,该版本为LTS,支持到2029年Q2季度。

地址: http://git.haproxy.org/git/haproxy-3.0.git/

下载地址: https://www.haproxy.org/download/3.0/src/haproxy-3.0.6.tar.gz

章节2、编译步骤

实测通过,用的Ubuntu 20.04.2 LTS、Debian 12系统环境,建一个 src目录,供放置软件源代码压缩包

mkdir -p /root/src/

cd /root/src/
wget https://www.haproxy.org/download/3.0/src/haproxy-3.0.6.tar.gz

如果是内网环境,使用任意工具,把本地的haproxy-3.0.6.tar.gz文件传输到服务器的目录 /root/src/haproxy-3.0.6.tar.gz

安装必要的依赖

apt update
apt install -y gcc make build-essential libpcre3-dev libssl-dev zlib1g-dev libsystemd-dev

解压源代码的压缩包

cd /root/src/
tar -zxvf haproxy-3.0.6.tar.gz
cd haproxy-3.0.6/

创建一些必要的用户和目录

mkdir -p /etc/haproxy  /var/lib/haproxy  /run/haproxy
useradd -U -s '/usr/sbin/nologin' -d '/var/lib/haproxy' haproxy
cd /var/lib/
chown -R haproxy:haproxy ./haproxy
cd /run/
chown -R haproxy:haproxy ./haproxy

编译安装

// 编译
cd /root/src/haproxy-3.0.6/
make TARGET=linux-glibc USE_SYSTEMD=1 USE_OPENSSL=1 USE_ZLIB=1 USE_PCRE=1

编译参数选项说明:
TARGET=linux-glibc:指定目标平台,我这里是64位的X86_64系统。
USE_OPENSSL=1:开启 SSL 支持。
USE_ZLIB=1:开启 zlib 支持,用于压缩响应数据。
USE_PCRE=1:启用 PCRE 库支持正则表达式。
USE_TFO=1:可选,启用 TFO 支持,TCP Fast Open,适合延迟敏感的应用,如负载均衡、Web 服务
// 可选,配套需要开启 /proc/sys/net/ipv4/tcp_fastopen 置于3,开启同时支持客户端和服务器端的TFO
USE_LUA=1:可选,启用 Lua 脚本支持
USE_SYSTEMD=1:可选,启用systemd管理 HAProxy服务


// 安装
make install

// 执行文件
cp ./examples/haproxy.init  /etc/init.d/haproxy
chmod +x /etc/init.d/haproxy

查看一下版本信息

/usr/local/sbin/haproxy -v

创建配置相关的目录

mkdir -p /etc/haproxy  /var/lib/haproxy  /run/haproxy

创建一个空的配置文件,配置文件的内容定义,这个根据你们业务的实际来:

touch /etc/haproxy/haproxy.cfg

写入一个简单的测试内容,轮循2个后端HTTP的WEB

global
   strict-limits 

defaults
   mode http
   balance random      # power-of-two-choices
   timeout client 60s
   timeout server 60s
   timeout connect 1s

listen p
   bind :8000
   balance roundrobin
   server server_web01    47.1.2.101:11111 check inter 8000 rise 2 fall 3 weight 1 maxconn 8192
   server server_web02    47.3.4.102:12222 check inter 8000 rise 2 fall 3 weight 1 maxconn 8192


用curl命令,测试一下访问

admin@Desktop:~$ curl http://122.222.100.83:8000
<p>S01</p>
admin@Desktop:~$ curl http://122.222.100.83:8000
<p>S02</p>
admin@Desktop:~$ curl http://122.222.100.83:8000
<p>S01</p>
admin@Desktop:~$ curl http://122.222.100.83:8000
<p>S02</p>
admin@Desktop:~$ 

创建一个haproxy名称的服务文件

cat > /etc/systemd/system/haproxy.service << EOF
[Unit]
Description=HAProxy Load Balancer
After=network.target

[Service]
ExecStart=/usr/local/sbin/haproxy -f /etc/haproxy/haproxy.cfg
ExecReload=/bin/kill -USR2 \$MAINPID
KillMode=mixed
Restart=always

[Install]
WantedBy=multi-user.target
EOF

启动停止命令

systemctl daemon-reload
systemctl start haproxy    # 启动
systemctl stop haproxy    # 停止
systemctl enable haproxy    # 自动开机启动
systemctl status haproxy    # 查看状态

附录1、视频操作演示

本期博客地址 https://dasmz.com/?p=4263
本期视频地址 https://youtu.be/oYm4jI1TTdo

附录2、@Dasmz

博客内,所有教程为手打原创教程,如果技术教程对您有所帮助,欢迎打赏作者。技术层面,闻道有先后,如有疏漏、错误,欢迎指正。技术博客的内容,一般具有一定的环境依赖,具有一定的年代依赖,酌情参考其中的内容,请勿完全照搬照抄。

对于博客内已提及的专业知识,如果需要技术指导,欢迎联系我,仅需支付工时费

Twitter: Dasmz

Youtube: @DasmzStudio

Telegram: @Dasmz

Donate
云乞讨

忘记Debian 12系统的root密码,通过单用户重置密码 2024-10-13

前缀、文档修改记录

20241013 初始化编辑此文章,完稿

章节1、需求描述

真无语,一台Debian 12的Linux系统的root密码忘记了,因为是云主机,还好商家提供VNC的console页面,这样就可以通过单用户的方式,重置密码。

章节2、操作步骤

开机,在grub的引导页面,在“Debian GNU/Linux” 这行的时候,按键盘的“e”,进编辑模式

如下图,将光标移动到“ linux /vmlinuz-5.10.0-29 …. ” 这个linux开头的行,并在行的末尾增加

 init=/bin/bash

增加完,根据下面的提示,按Ctrl+X 或者F10启动

确保分区具备rw权限,并重置root密码

mount -o remount,rw /
password root

重置密码完成后,正常重启云主机即可。

最重要的,可别再忘记刚刚重置后的密码。

附录1、视频操作演示

附录2、参考文档

https://www.gnu.org/software/grub/manual/grub/grub.html#gfxmode

附录2、@Dasmz

博客内,所有教程为手打原创教程,如果技术教程对您有所帮助,欢迎打赏作者。技术层面,闻道有先后,如有疏漏、错误,欢迎指正。技术博客的内容,一般具有一定的环境依赖,具有一定的年代依赖,酌情参考其中的内容,请勿完全照搬照抄。

对于博客内已提及的专业知识,如果需要技术指导,欢迎联系我,仅需支付工时费

Twitter: Dasmz

Youtube: @DasmzStudio

Telegram: @Dasmz

Donate
云乞讨

Proxmox VE 8.1.4环境中,ZFS1的rpool替换故障的硬盘 2024-09-29

前缀、文档修改记录

20240929 初始化编辑此文章,未完稿,等采买一个新硬盘。
20241007 更换的硬盘到了,更新此文章。
20241008 更新此文章,关于修复引导。完成此文章

章节1、需求描述

突然发现PVE里面有一个硬盘坏了,本篇文章记录替换的过程。环境是ZFS1(512GB SSD * 4),PVE系统直接部署用的这个rpool,相当于一台单机版的虚拟化环境,无额外的存储。

章节2、故障现象

PVE中rpool显示已经降级,且在系统日志中,可以看到I/O错误提示,这种情况,如果不是电源线故障,基本可以断定是硬盘挂了一块。

章节3、故障修复的过程

3.1、ZFS的rpool修复

因为这块故障硬盘,已经显示为已移除(REMOVED),对rpool硬盘ZFS池子已经没有了作用,就可以直接把这块坏硬盘断电取下来,换上新的硬盘。

比如我这里,新硬盘还是 /dev/sdd,在PVE的磁盘页面上,对盘进行初始化,选择 /dev/sdd硬盘,选择上方的“使用GPT初始化磁盘”。

查看原硬盘的分区格式,我这里的4块盘,都是一个分区规格

Device       Start        End   Sectors   Size Type
/dev/sdc1       34       2047      2014  1007K BIOS boot
/dev/sdc2     2048    2099199   2097152     1G EFI System
/dev/sdc3  2099200 1000215182 998115983 475.9G Solaris /usr & Apple ZFS

使用fdisk/parted等工具,对新硬盘按其他3个盘的格式,进行一致的分区。

在新硬盘/dev/sdd上面,创建 /dev/sdd1的 BIOS boot分区

在新硬盘/dev/sdd上面,创建 /dev/sdd2的 EFI System分区

在新硬盘/dev/sdd上面,创建 /dev/sdd3的 Solaris /usr & Apple ZFS分区

跟其他磁盘,对比一下分区,3个分区格式,还有gpt都是一致的。

可以通过 ls -la /dev/disk/by-id 命令,查看新换的硬盘的ID号

初始化/dev/sdd新硬盘后,就可以用在ZFS的rpool中,用新硬盘替换旧硬盘

# 旧硬盘 ata-Netac_SSD_512GB_AA20231205512G621697-part3
# 新硬盘 ata-YSSDJQB-512GSQ_2C23F2707401407-part3

zpool replace rpool ata-Netac_SSD_512GB_AA20231205512G621697-part3 ata-YSSDJQB-512GSQ_2C23F2707401407-part3

执行命令后,等待ZFS对rpool池的重建同步完成即可。

完成后,如下,从20:28开始同步,花了大约2小时,整个rpool总的1.77TB(512GB * 4, ZFS1):

3.2、引导修复过程

因为我这里这4块盘做的ZFS1,安装的PVE,不纯粹为数据盘区,故而,还需要把UEFI引导文件同步一下。

最安全的确认引导方式的命令

efibootmgr -v
  • 如果上面的命令,返回一个消息,指出EFI变量不受支持,则在BIOS/Legacy中使用grub
  • 如果输出包含如“Boot0005* proxmox […] File(\EFI\proxmox\grubx64.efi)”内容的行,则在UEFI模式下使用grub
  • 如果输出包含如”Boot0006* Linux Boot Manager […] File(\EFI\systemd\systemd-bootx64.efi)”内容的行,则使用systemd-boot

我这里显示的 efibootmgr -v 命令结果如下,并有提示启动顺序BootOrder:

BootCurrent: 000D
Timeout: 2 seconds
BootOrder: 0010,0005,000D,000E,000F,000B,000A,0001,0004,0003,0002,0000,000C
Boot0000* Linux Boot Manager	VenHw(99e275e7-75a0-4b37-a2e6-c5385e6c00cb)
Boot0001* Linux Boot Manager	HD(2,GPT,f17f77b6-f394-46a5-b8b7-14b91d7b5b2e,0x800,0x200000)/File(\EFI\SYSTEMD\SYSTEMD-BOOTX64.EFI)
Boot0002* Linux Boot Manager	VenHw(99e275e7-75a0-4b37-a2e6-c5385e6c00cb)
Boot0003* Linux Boot Manager	VenHw(99e275e7-75a0-4b37-a2e6-c5385e6c00cb)
Boot0004* Linux Boot Manager	VenHw(99e275e7-75a0-4b37-a2e6-c5385e6c00cb)
Boot0005* Linux Boot Manager	HD(2,GPT,5bd1d45d-90ae-c64f-9cdb-8c86455bbac3,0x800,0x200000)/File(\EFI\SYSTEMD\SYSTEMD-BOOTX64.EFI)
Boot000A* Linux Boot Manager	HD(2,GPT,f4cac5de-9b0b-4ca2-9c9e-2bfff1c2adfc,0x800,0x200000)/File(\EFI\SYSTEMD\SYSTEMD-BOOTX64.EFI)
Boot000B* Linux Boot Manager	HD(2,GPT,1f5f4da2-e8cf-4c7d-86a8-e697c5055e91,0x800,0x200000)/File(\EFI\SYSTEMD\SYSTEMD-BOOTX64.EFI)
Boot000C* Linux Boot Manager	VenHw(99e275e7-75a0-4b37-a2e6-c5385e6c00cb)
Boot000D* UEFI OS	HD(2,GPT,f17f77b6-f394-46a5-b8b7-14b91d7b5b2e,0x800,0x200000)/File(\EFI\BOOT\BOOTX64.EFI)..BO
Boot000E* UEFI OS	HD(2,GPT,f4cac5de-9b0b-4ca2-9c9e-2bfff1c2adfc,0x800,0x200000)/File(\EFI\BOOT\BOOTX64.EFI)..BO
Boot000F* UEFI OS	HD(2,GPT,1f5f4da2-e8cf-4c7d-86a8-e697c5055e91,0x800,0x200000)/File(\EFI\BOOT\BOOTX64.EFI)..BO
Boot0010* UEFI OS	HD(2,GPT,5bd1d45d-90ae-c64f-9cdb-8c86455bbac3,0x800,0x200000)/File(\EFI\BOOT\BOOTX64.EFI)..BO

实际根据官方文档,

If systemd-boot is used as a bootloader (see Determine which Bootloader is used), some additional setup is needed. This is only the case if Proxmox VE was installed with ZFS-on-root.

使用命令确认一下,如果/分区是 rpool/ROOT/pve-1,基本就可以确定,我这里使用的是systemd-boot方式的引导。

root@PVE03SSD:~# findmnt /
TARGET SOURCE           FSTYPE OPTIONS
/      rpool/ROOT/pve-1 zfs    rw,relatime,xattr,posixacl,casesensitive
root@PVE03SSD:~# 

继续用 proxmox-boot-tool status 命令看看,这里比较重要的是,启动用的uefi还是grub的提示

// 显示的文本格式内容
System currently booted with uefi
19A9-F481 is configured with: uefi (versions: 6.5.11-8-pve)  // 这个对应到 sda2
19AA-6DD8 is configured with: uefi (versions: 6.5.11-8-pve)  // 这个对应到 sdb2
19AA-E4C2 is configured with: uefi (versions: 6.5.11-8-pve)  // 这个对应到 sdc2
WARN: /dev/disk/by-uuid/19AB-5A9E does not exist - clean '/etc/kernel/proxmox-boot-uuids'! - skipping     // 19AB-5A9E 这个对应到 故障盘的旧盘sdd2,应该替换为 新的 sdd2

接下来就是正式的在新盘的/dev/sdd2修复引导过程

格式化/dev/sdd2分区

proxmox-boot-tool format /dev/sdd2

确认一下,分区已经格式化正确,并且一致,命令如下:

 lsblk -o +FSTYPE

对/dev/sdd2修复引导

proxmox-boot-tool init /dev/sdd2 uefi

上面的命令执行完,再次确认引导的状态,我这里是能看到4个盘都有,就是对的。

 proxmox-boot-tool status

备注,这里,提示的2个旧的不存在的UUID,直接在文件 /etc/kernel/proxmox-boot-uuids 中删除对应的行即可。

Done,完美收官。

附录1、文件系统类型

  4 BIOS boot                      21686148-6449-6E6F-744E-656564454649
  1 EFI System                     C12A7328-F81F-11D2-BA4B-00A0C93EC93B
157 Solaris /usr & Apple ZFS       6A898CC3-1DD2-11B2-99A6-080020736631

附录2、参考链接

https://pve.proxmox.com/wiki/Host_Bootloader#:~:text=proxmox%2Dboot%2Dtool%20is%20a,from%20the%20vfat%20formatted%20ESPs.

附录1、视频操作演示

附录2、@Dasmz

博客内,所有教程为手打原创教程,如果技术教程对您有所帮助,欢迎打赏作者。技术层面,闻道有先后,如有疏漏、错误,欢迎指正。技术博客的内容,一般具有一定的环境依赖,具有一定的年代依赖,酌情参考其中的内容,请勿完全照搬照抄。

对于博客内已提及的专业知识,如果需要技术指导,欢迎联系我,仅需支付工时费

Twitter: Dasmz

Youtube: @DasmzStudio

Telegram: @Dasmz

Donate
云乞讨

TrueNAS 汇总 2024-08-30

前缀、文档修改记录

20240830 初始化编辑此文章,更新中
20240901 更新

章节1、需求描述

折腾配置了一台物理机,采用E5处理器,64G内存,2块240G SSD作为系统盘,8块500G磁盘,配置了一台TrueNAS服务器,汇总一下折腾的笔记

设备信息

操作系统版本:TrueNAS-SCALE-24.04.2
产品:X99
型号:Intel(R) Xeon(R) CPU E5-2683 v4 @ 2.10GHz
内存:63 GiB
系统序列号:Default string

章节2、常规的语言设置

TrueNAS支持简体中文,支持传统中文,时区,国内用户一般选择 Asia/Shanghai。

章节3、设置一个静态的IP地址

章节4、存储的设置

手里一共有8块3.5英寸的 500G机械键盘,组建一个存储池,因为数据都不太重要,所以,选择RAIDZ1的容错方式,配置7块盘在RAIDZ1使用中,1块盘作为热备盘。

章节5、硬盘的S.M.A.R.T健康度检测

一般配置每天凌晨一次的短检测,每周一次的长检测。

章节6、销毁池子(慎重操作)

像在折腾阶段,如果原先池子里的数据不需要了,或者已经备份了,就可以完全销毁重建池子,暴力一点的做法是,直接在console页面,选择 reset configuration to defaults.

这种,就直接把所有的配置全部清掉了。

附录1、视频操作演示

附录2、@Dasmz

博客内,所有教程为手打原创教程,如果技术教程对您有所帮助,欢迎打赏作者。技术层面,闻道有先后,如有疏漏、错误,欢迎指正。技术博客的内容,一般具有一定的环境依赖,具有一定的年代依赖,酌情参考其中的内容,请勿完全照搬照抄。

对于博客内已提及的专业知识,如果需要技术指导,欢迎联系我,仅需支付工时费

Twitter: Dasmz

Youtube: @DasmzStudio

Telegram: @Dasmz

Donate
云乞讨

OpenEuler 22.03 SP4网络,双链路主备配置 2024-08-19

前缀、文档修改记录

20240819 初始化编辑此文章,完稿

章节1、需求描述

项目里,有台主机必须安装国产化系统openeuler 22.03 SP4 版本,为了稳定,配置网络为双网卡的主备。

注: 官方说,这个版本,只能支持到主备模式,截至本文时间2024-08-19,暂不支持动态LACP的端口聚合。

章节2、操作步骤

2.1、创建bond接口

在操作系统内,使用nmcli命令创建bond接口,并设置其管辖的物理网卡。‌bond接口目前仅支持mode=active-backup(‌主备模式)‌。‌

假设2个网口的名称分别为 enp3s0 enp4s0

root@SERVER:~# nmcli con add type bond con-name bond0 ifname bond0 mode active-backup

root@SERVER:~# nmcli con add type bond-slave ifname enp3s0 master bond0

root@SERVER:~# nmcli con add type bond-slave ifname enp4s0 master bond0

root@SERVER:~# mv /etc/sysconfig/network-scripts/ifcfg-enp3s0 /etc/sysconfig/network-scripts/bak-ifcfg-enp3s0-202408  

root@SERVER:~# mv /etc/sysconfig/network-scripts/ifcfg-enp4s0   /etc/sysconfig/network-scripts/bak-ifcfg-enp4s0-202408

2.2、修改配置文件,设置IP地址信息

手动修改或自动生成配置文件 /etc/sysconfig/network-scripts/ifcfg-bond ,‌设置BOOTPROTO=none,‌以及指定IP地址(IPADDR)、‌子网掩码(PREFIX=24)、‌网关(GATEWAY)和DNS服务器(DNS1= DNS2=)。‌

BOOTPROTO=none
IPADDR=192.168.10.100    // 自定义IP地址
PREFIX=24    // 自定义掩码长度
GATEWAY=192.168.10.254    // 自定义网关地址
DNS1=192.168.10.254    // 自定义DNS1地址
DNS2=192.168.10.253    // 自定义DNS2地址

2.3、重启网络服务和激活bond

使用 shutdown -r now / reboot now重启一次操作系统(推荐)

使用systemctl restart NetworkManager重启网络管理服务以应用新的配置。‌
使用nmcli con up bond0激活bond接口。‌
使用nmcli device status检查网卡的状态,‌确保bond接口和其他相关网卡都处于活动状态。‌

2.4、配置上联的接入交换机

上联的接入交换机, 接入模式,设置一个默认的端口VLAN。

参考链接 https://docs.openeuler.org/en/docs/22.03_LTS_SP3/docs/Administration/configuring-the-network.html

附录1、视频操作演示

附录2、@Dasmz

博客内,所有教程为手打原创教程,如果技术教程对您有所帮助,欢迎打赏作者。技术层面,闻道有先后,如有疏漏、错误,欢迎指正。技术博客的内容,一般具有一定的环境依赖,具有一定的年代依赖,酌情参考其中的内容,请勿完全照搬照抄。

对于博客内已提及的专业知识,如果需要技术指导,欢迎联系我,仅需支付工时费

Twitter: Dasmz

Youtube: @DasmzStudio

Telegram: @Dasmz

Donate
云乞讨

服务器到交换机的nic-teeaming/bond配置 2024-08-06

前缀、文档修改记录

20240806 初始化编辑此文章,完稿

章节1、需求描述

服务器考虑到单链路故障的可能性,一般需要配置为双链路的接入。在实际商用层面,一般需要配置2个同等速率的网口或者电口,因成本因素及部分生产环境的历史因素,目前市面上,设备使用居多的为 千兆电口或者万兆的光口。

章节2、连线

服务器设备,通过2个链路上联到2台堆叠的接入交换机。

章节3、配置

服务器01如果是Windows系统,特别是Windows Server 2012 R2后的版本,可以使用Windows系统自带的NIC Teeaming功能,常用可选模式为 主备、动态链路聚合(推荐,如果交换机支持),如果Windows系统版本较旧,一般看网卡厂家是否带该版本系统的高级特性的驱动包,部分intel网卡是能支持旧系统的。

服务器01如果是CentOS/Ubuntu等Linux系统,常用可选模式为 主备、动态链路聚合(推荐,如果交换机支持)。

章节4、常见配置1则(主机CentOS双口聚合动态LACP,交换机双口端口聚合LACP动态)

Linux网卡的bond配置配置其实比较简单,就是建立一个bond组,下管辖2个网口即可

交换机上,起端口组,模式动态链路聚合,ACCESS模式,默认一个业务VLAN。

章节5、模式 mode

  • balance-rr or 0 :: Round-robin policy: Transmit packets in sequential order from the first available slave through the last. This mode provides load balancing and fault tolerance.
  • active-backup or 1 ::Active-backup policy: Only one slave in the bond is active. A different slave becomes active if, and only if, the active slave fails. The bond’s MAC address is externally visible on only one port (network adapter) to avoid confusing the switch. In bonding version 2.6.2 or later, when a failover occurs in active-backup mode, bonding will issue one or more gratuitous ARPs on the newly active slave. One gratutious ARP is issued for the bonding master interface and each VLAN interfaces configured above it, provided that the interface has at least one IP address configured.
    Gratuitous ARPs issued for VLAN interfaces are tagged with the appropriate VLAN id. This mode provides fault tolerance. The primary option, documented below, affects the behavior of this mode.
  • balance-xor or 2 ::XOR policy: Transmit based on the selected transmit hash policy. The default policy is a simple Alternate transmit policies may be selected via the xmit_hash_policy option. This mode provides load balancing and fault tolerance.
  • broadcast or 3 ::Broadcast policy: transmits everything on all slave interfaces. This mode provides fault tolerance.
  • 802.3ad or 4 ::IEEE 802.3ad Dynamic link aggregation. Creates aggregation groups that share the same speed and duplex settings. Utilizes all slaves in the active aggregator according to the 802.3ad specification.
    Slave selection for outgoing traffic is done according to the transmit hash policy, which may be changed from the default simple XOR policy via the xmit_hash_policy option, documented below. Note that not all transmit policies may be 802.3ad compliant, particularly in regards to the packet mis-ordering requirements of section 43.2.4 of the 802.3ad standard. Differing peer implementations will have varying tolerances for noncompliance.
    Prerequisites:
    Ethtool support in the base drivers for retrieving the speed and duplex of each slave.
    A switch that supports IEEE 802.3ad Dynamic link aggregation.
    Most switches will require some type of configuration to enable 802.3ad mode.
  • balance-tlb or 5 ::Adaptive transmit load balancing: channel bonding that does not require any special switch support. The outgoing traffic is distributed according to the current load (computed relative to the speed) on each slave. Incoming traffic is received by the current slave. If the receiving slave fails, another slave takes over the MAC address of the failed receiving slave. Prerequisite: Ethtool support in the base drivers for retrieving the speed of each slave.
  • balance-alb or 6 ::Adaptive load balancing: includes balance-tlb plus receive load balancing (rlb) for IPV4 traffic, and does not require any special switch support. The receive load balancing is achieved by ARP negotiation. The bonding driver intercepts the ARP Replies sent by the local system on their way out and overwrites the source hardware address with the unique hardware address of one of the slaves in the bond such that different peers use different hardware addresses for the server. Receive traffic from connections created by the server is also balanced. When the local system sends an ARP Request the bonding driver copies and saves the peer’s IP information from the ARP packet.
    When the ARP Reply arrives from the peer, its hardware address is retrieved and the bonding driver initiates an ARP reply to this peer assigning it to one of the slaves in the bond. A problematic outcome of using ARP negotiation for balancing is that each time that an ARP request is broadcast it uses the hardware address of the bond. Hence, peers learn the hardware address of the bond and the balancing of receive traffic collapses to the current slave. This is handled by sending updates (ARP Replies) to all the peers with their individually assigned hardware address such that the traffic is redistributed. Receive traffic is also redistributed when a new slave is added to the bond and when an inactive slave is re-activated. The receive load is distributed sequentially (round robin) among the group of highest speed slaves in the bond.
    When a link is reconnected or a new slave joins the bond the receive traffic is redistributed among all active slaves in the bond by initiating ARP Replies with the selected mac address to each of the clients. The updelay parameter (detailed below) must be set to a value equal or greater than the switch’s forwarding delay so that the ARP Replies sent to the peers will not be blocked by the switch. Prerequisites: Ethtool support in the base drivers for retrieving the speed of each slave. Base driver support for setting the hardware address of a device while it is open. This is required so that there will always be one slave in the team using the bond hardware address (the curr_active_slave) while having a unique hardware address for each slave in the bond. If the curr_active_slave fails its hardware address is swapped with the new curr_active_slave that was chosen.

附录1、视频操作演示

附录2、@Dasmz

博客内,所有教程为手打原创教程,如果技术教程对您有所帮助,欢迎打赏作者。技术层面,闻道有先后,如有疏漏、错误,欢迎指正。技术博客的内容,一般具有一定的环境依赖,具有一定的年代依赖,酌情参考其中的内容,请勿完全照搬照抄。

对于博客内已提及的专业知识,如果需要技术指导,欢迎联系我,仅需支付工时费

Twitter: Dasmz

Youtube: @DasmzStudio

Telegram: @Dasmz

Donate
云乞讨

图形化,安卓投屏工具Escrcpy 2024-06-02

前缀、文档修改记录

20240602 初始化编辑此文章,完稿

章节1、需求描述

对于很多普通人而言,安卓的投屏工具,需要图形化的,简单易用的。

https://dasmz.com/?p=823 我这篇博客中,介绍了scrcpy这款高效稳定的开源安卓投屏工具,但是,它是运行于命令行的,对很多普通用户而言,有一定的上手难度。

今天介绍的就是基于scrcpy的一款图形工具,名字叫 Escrcpy,其中E表示 Electron 驱动。

项目地址:https://github.com/viarotel-org/escrcpy

官方中文说明:https://github.com/viarotel-org/escrcpy/blob/main/README-CN.md

章节2、使用

此工具属于开箱即用的工具,没有什么上手的难度,不过安卓的投屏和一些功能需要开启adb调试,这样才能最大发挥它的功能。

目前,因为版本更迭,需要在 Windows系统 >= 10的环境上运行。

Windows系统下,推荐下载 Escrcpy-1.19.1-win-x64.zip 这下载解压即可使用的版本(时间戳 2024-06-02的最新稳定版本)

支持USB 或WIFI两种安卓投屏的工作模式,我这里比较推荐大家使用USB线连接的模式,会比较稳定

USB连接

注意:如果手机上提示调试授权请点击允许

安卓手机需开启开发者模式并打开 USB 调试
打开 Escrcpy 并将安卓手机连接到你的电脑
这时 Escrcpy 设备列表应该已经检测到你的手机,点击开始镜像

WIFI连接

注意:如果首次无线连接失败,你可能需要无线配对请参阅 常见问题
注意:需同时开启无线调试功能,并在无线调试页面中获取你的当前设备的无线地址(通常为你连接 WIFI 时分配的 IP 地址)及端口号(默认为 5555)

同 USB 连接中的 1-2 步骤
将获取到的设备 IP 地址及端口号填写到 Escrcpy 中,然后点击连接设备
这时 Escrcpy 设备列表应该已经检测到你的手机,点击开始镜像
开始享受吧

可以为不同安卓手机,设备不同的别名,点击开始镜像,即可电脑上操作安卓手机,可以同时投屏多个安卓手机。

让旧安卓手机又可以发挥余热了。

附录1、视频操作演示

https://youtu.be/uaBusKknl78

附录2、@Dasmz

博客内,所有教程为手打原创教程,如果技术教程对您有所帮助,欢迎打赏作者。技术层面,闻道有先后,如有疏漏、错误,欢迎指正。技术博客的内容,一般具有一定的环境依赖,具有一定的年代依赖,酌情参考其中的内容,请勿完全照搬照抄。

对于博客内已提及的专业知识,如果需要技术指导,欢迎联系我,仅需支付工时费

Twitter: Dasmz

Youtube: @DasmzStudio

Telegram: @Dasmz

Donate
云乞讨

CVE-2024-22120 基础设施级软件Zabbix漏洞处理 2024-05-21

前缀、文档修改记录

20240521 初始化编辑此文章,完稿

章节1、需求描述

说真的zabbix作为基础设施级的资源监控系统,目前普及度已经非常的高了,它支持在服务端执行对客户端的检测操作,检查脚本在命令执行后,会将审计记录数据入库。由于audit.c代码中的“clientip”字段未经过有效的真实值过滤,就存在本应该是一个IP字段的数值,可被精心构造为一段SQL,填入到“clientip”中,形成SQL注入,并利用时间盲注攻击,进行数据库提权的操作。

官方的漏洞说明链接 https://www.zabbix.com/cn/security_advisories

https://www.zabbix.com/cn/security_advisories#ZBV-2024-05-17

https://support.zabbix.com/browse/ZBX-24505

https://github.com/W01fh4cker/CVE-2024-22120-RCE?tab=readme-ov-file 这里有将zabbix普通用户提权为admin用户的python脚本。

因为确实形成了SQL注入,且普通账号可以提权为admin账号,此次漏洞,标记为9.1的高危漏洞,影响的版本,我看官方贴的

6.0.0-6.0.27
6.4.0-6.4.12
7.0.0alpha1-7.0.0beta1

不包含旧的4.0/5.0版本,也是惊奇,可能是6.0版本之后代码功能带进来的漏洞吧,影响范围是有数据库的zabbix-server环境。

章节2、处理方式,版本升级

根据官方的建议,还是优先升级到zabbix最新的已修Bug漏洞的版本为妙

Fixed in
6.0.28rc1 c8ac414ff44
6.4.13rc1 78899da0e1b
7.0.0beta2 9013ff74985

打个快照,升级安装一下zabbix-server,完成版本升级就行。

参照官方:https://www.zabbix.com/documentation/6.0/en/manual/installation/upgrade/packages/debian_ubuntu

我在上次部署的是6.0 LTS的一个小版本, https://dasmz.com/?p=3654 ,因为这次的漏洞,都在同一个6系列的版本下,只要对zabbix-server组件进行小规模升级即可。

root@ZabbixServer:~# systemctl stop zabbix-server
root@ZabbixServer:~# apt update
root@ZabbixServer:~# apt install --only-upgrade zabbix-server-mysql zabbix-sql-scripts
root@ZabbixServer:~# systemctl start zabbix-server 

截至本文书写的2024-05-21,能更新到的zabbix-server版本是6.0.30,就OKAY了

附录1、视频操作演示

附录2、@Dasmz

博客内,所有教程为手打原创教程,如果技术教程对您有所帮助,欢迎打赏作者。技术层面,闻道有先后,如有疏漏、错误,欢迎指正。技术博客的内容,一般具有一定的环境依赖,具有一定的年代依赖,酌情参考其中的内容,请勿完全照搬照抄。

对于博客内已提及的专业知识,如果需要技术指导,欢迎联系我,仅需支付工时费

Twitter: Dasmz

Youtube: @DasmzStudio

Telegram: @Dasmz

Donate
云乞讨