月度归档:2025年05月

Proxmox VE环境,运行一个openwrt的虚拟机

前缀、文档修改记录

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

章节1、需求描述

一个独立的PVE环境,最常见的all in one玩法,PVE中,是需要一个路由器系统的,优先选择openwrt作为路由器系统。

章节2、测试环境

PVE 7.2.3   //这个不是最新版本的,不过没事
Openwrt 24.10.1 x86-64    // 这个是最新版本

章节3、 镜像文件

openwrt镜像文件下载,新版本的pve基本都是使用UEFI启动,优先下载使用 EFI 启动的openwrt镜像。 24.10.1 Tag-2025-5-22时间最新的版本

文件系统类型(ext4 vs squashfs)、是否支持 UEFI 启动,以及是否是 完整系统(combined) 或只是 根文件系统(rootfs)

https://downloads.openwrt.org/releases/24.10.1/targets/x86/64/openwrt-24.10.1-x86-64-generic-ext4-combined-efi.img.gz

章节4、上传镜像

将gz格式的镜像解压缩为.img格式,然后,点PVE页面的上传按钮,进行文件上传

可以观察到文件在PVE中的位置 /var/lib/vz/template/iso/openwrt-24.10.1-x86-64-generic-ext4-combined-efi.img

章节5、创建openwrt虚拟机

这里可以通过qm命令或者网页常规方式,创建一个无磁盘的虚拟机。

创建虚拟机 / 名称 OpenWRT

操作系统 / 不使用任何介质

系统 / 全部默认

磁盘 / 删掉默认,空白

核心 / KVM64

内存 / 512MB

网卡 / virtio

章节6、 导入系统的img

qm importdisk $VMID /var/lib/vz/template/openwrt-*.img local-lvm

其中 $VMID,我这里是100,你们根据实际的填

执行命令为:
qm importdisk 100 /var/lib/vz/template/iso/openwrt-24.10.1-x86-64-generic-ext4-combined-efi.img local-lvm

导入成功后,会出现“未使用的磁盘0”

双击未使用的磁盘,点击“添加”

并在 “选项”,”引导顺序” ,将刚刚增加的磁盘vm-100-disk-0拉到最上,让它“启用”,为第一优先级的引导

做完后,我一般直接把这台虚拟机转换为模板,这样方便后期的调试,按这个模板,创建各种测试用途的openwrt虚拟机。模板上右击,选择克隆,模式(完整),名称(自定义一个新名字)即可。

章节7、Openwrt地址段修改

修改文件 /etc/config/network ,我这里只有1个网卡,默认为LAN,如果需要WAN,可在控制台再增加一个网卡口,用于WAN的上联。

附录1、视频操作演示

附录2、@Dasmz

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

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

Twitter: Dasmz

Youtube: @DasmzStudio

Telegram: @Dasmz

Donate
云乞讨

Debian/Ubuntu系统,使用国内源安装docker-ce

前缀、文档修改记录

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

章节1、需求描述

国内服务器,懒得挂代理,想了想应该还是可以通过国内源来安装docker-ce的,本篇就实际来跑通一遍安装流程。

测试机的系统是 Debian 10 64位,国内服务器

章节2、操作步骤

2.1 卸载旧版本的docker-ce

此步骤需要慎重,先确认是否有运行的docker镜像,或者相关数据

apt remove docker docker-engine docker.io containerd runc

2.2 更新 APT 缓存

apt update
apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common

2.3 添加Docker的官方GPG密钥

curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/debian/gpg | apt-key add -

2.4 设置阿里云的 Docker 软件源

add-apt-repository \
   "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/debian \
   $(lsb_release -cs) \
   stable"

2.5 安装 Docker CE

apt-get update
apt-get install -y docker-ce docker-ce-cli containerd.io

本次测试环境安装到的版本 26.1.4-1~debian.10~buster Tag-20250520-2233

2.6 测试是否安装成功

root@debian:/# docker version
Client: Docker Engine - Community
 Version:           26.1.4
 API version:       1.45
 Go version:        go1.21.11
 Git commit:        5650f9b
 Built:             Wed Jun  5 11:29:15 2024
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          26.1.4
  API version:      1.45 (minimum version 1.24)
  Go version:       go1.21.11
  Git commit:       de5c9cf
  Built:            Wed Jun  5 11:29:15 2024
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.33
  GitCommit:        d2d58213f83a351ca8f528a95fbd145f5654e957
 runc:
  Version:          1.1.12
  GitCommit:        v1.1.12-0-g51d5e94
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
root@debian:/# 

2.7 HelloWorld

配置镜像加速,因国家政策相关原因,国内已经收紧了docker镜像服务的提供,阿里云的镜像加速,也仅限其自身或者制品中心内的镜像,已经没啥用了。我研究了一下,要么自己部署私有镜像仓库,或者镜像加速,要么直接加速到docker.io官方地址,这个破世道。

https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

在这个页面,加速器地址这里,可以看到你私有的加速地址,恩,勿在公网公开。将下面registry.cn-hangzhou.aliyuncs.com 换成你私有的加速地址。

mkdir -p /etc/docker
cat << EOF | tee /etc/docker/daemon.json
{
  "registry-mirrors": ["https://registry.cn-hangzhou.aliyuncs.com"]
}
EOF

docker info | grep -i mirror     // 查看镜像是否生效,输出中包含配置的加速器地址,说明配置成功
阿里ACR变更内容
调整镜像加速器功能的使用范围:

仅限阿里云用户,在支持公网访问的阿里云产品上使用该镜像加速能力。

仅支持通过镜像加速器拉取限定范围内的容器镜像。
docker run hello-world

最终通过使用 tsocks 或 proxychains 转发流量,完成任务。

2.8 重启docker相关服务

systemctl daemon-reload
systemctl restart docker
systemctl enable docker     // 开机自动启动

附录1、视频操作演示

附录2、@Dasmz

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

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

Twitter: Dasmz

Youtube: @DasmzStudio

Telegram: @Dasmz

Donate
云乞讨

Debian 12系统下,安装chrome浏览器,安装chrome driver

前缀、文档修改记录

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

章节1、需求描述

Debian 12系统下,安装chrome浏览器,配套安装chrome driver,以便用程序来驱动Chrome浏览器

章节2、操作步骤

2.1、安装必要的工具

root@server:~# apt update
root@server:~# apt install wget curl unzip

2.2、下载Chrome浏览器

root@server:~# mkdir -p /root/src

root@server:~# cd /root/src

root@server:~# wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
  // 从 Google 官方下载安装包

2.3、安装Chrome浏览器

使用 dpkg 安装,如果有依赖问题,再用 apt 修复即可

root@server:~#  cd /root/src/

root@server:~#  dpkg -i google-chrome-stable_current_amd64.deb
  // 本次安装到的版本是136.0.7103.92-1 Tag-2025-5-9

root@server:~#  apt --fix-broken install -y
  // 执行路径 /usr/bin/google-chrome

确认版本信息

root@server:~#  /usr/bin/google-chrome -version
Google Chrome 136.0.7103.92  

// Tag-2025-5-9 输出版本号,说明安装成功

2.4、下载和安装 ChromeDriver

ChromeDriver 版本需要和 Chrome 浏览器版本对应,所以,刚刚安装的Chrome版本务必记录下来。

低于115的版本的官方地址 https://chromedriver.chromium.org/downloads

https://developer.chrome.com/docs/chromedriver/downloads

图/官方提示:

高于115或者更新版本的官方地址 https://googlechromelabs.github.io/chrome-for-testing/

下载其中chromedriver的linux64版本即可,https://storage.googleapis.com/chrome-for-testing-public/136.0.7103.92/linux64/chromedriver-linux64.zip

root@server:~#  cd /root/src/

root@server:~#  wget https://storage.googleapis.com/chrome-for-testing-public/136.0.7103.92/linux64/chromedriver-linux64.zip
  // 版本编号要跟Chrome浏览器的一致


root@server:~# unzip chromedriver-linux64.zip
Archive:  chromedriver-linux64.zip
  inflating: chromedriver-linux64/LICENSE.chromedriver  
  inflating: chromedriver-linux64/THIRD_PARTY_NOTICES.chromedriver  
  inflating: chromedriver-linux64/chromedriver  
root@server:~#  

root@server:~# mv chromedriver-linux64/chromedriver /usr/bin/chromedriver
root@server:~# chmod +x /usr/bin/chromedriver
  // 挪目录,赋权限

root@server:~# chromedriver --version
  // 确认版本号,显示就是正常的,务必跟Chrome版本一致

章节3、测试代码

#!/usr/bin/python3
# -*- coding:utf-8 -*-
# by Dasmz
# 2025-5-9
# 
import time
import random
from datetime import datetime
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

CHROMEDRIVER_PATH = '/usr/bin/chromedriver'
SCREENSHOT_PATH = '/var/www/html/ScreenShot.png'

URL_LIST = ['URL1','URL2','URL3','URL4','URL5'...]

def getNow():
    now = datetime.now()
    return now.strftime("%Y-%m-%d %H:%M:%S")
    
def create_driver(user_agent):
    chrome_options = webdriver.ChromeOptions()
    chrome_options.add_argument('--headless')  # 无界面模式
    chrome_options.add_argument("--window-size=1920x1080")  # 窗口大小
    chrome_options.add_argument('--disable-gpu')   # 关闭GPU加速
    chrome_options.add_argument("--mute-audio")   # 关闭声音
    chrome_options.add_argument("--no-sandbox")   # 无沙箱
    chrome_options.add_argument("--disable-dev-shm-usage")  # 不使用/dev/shm共享内存目录
    chrome_options.add_argument("--disable-extensions")   # 关闭扩展程序
    chrome_options.add_argument("--log-level=3")   # 只显示致命错误FATAL
    chrome_options.add_argument('--disable-application-cache')   # 关闭 Chrome 的应用缓存,包括页面缓存、离线缓存
    chrome_options.add_argument('--incognito')   # 隐身模式,每次打开网页都是新会话,不会用缓存、也不会保存 cookie
    chrome_options.add_argument('--disk-cache-size=0')   # 磁盘缓存设为 0 字节
    chrome_options.add_argument(f"--user-agent={user_agent}")
    
    # 禁止图片加载
    # prefs = {"profile.managed_default_content_settings.images": 2}
    # chrome_options.add_experimental_option("prefs", prefs)
    
    driver = webdriver.Chrome(executable_path=CHROMEDRIVER_PATH, options=chrome_options)
    driver.set_window_size(1920, 1080)   # 设置分辨率 (宽, 高)
    return driver

def run_chrome(driver, url):
    try:
        driver.get(url)
        # 等待 body 元素加载完成
        time.sleep(1.5)  # 给浏览器的网页加载的时间
        WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.TAG_NAME, 'body')))
        
        print(f"标题: {driver.title}")
        print(f"URL: {driver.current_url}")
        # print(f"页面源码长度: {len(driver.page_source)}")
        
        # 网页加载情况截图
        driver.save_screenshot(SCREENSHOT_PATH)
    except Exception as e:
        print(f"出错: {e}")

def go2web(driver):
    try:
        target_url = random.choice(URL_LIST)
        run_chrome(driver, target_url)
    except Exception as e:
        print(f"访问出错: {e}")

if __name__ == '__main__':
    user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36'
    
    driver = create_driver(user_agent)
    
    try:
        for i in range(1, 40000000):
            print(f"\n\n第 {i} 次访问 {getNow()}")
            go2web(driver)
            # time.sleep(1)  # 可调整等待时间
    except KeyboardInterrupt:
        print("手动中断")
    finally:
        driver.quit()

附录1、视频操作演示

附录2、@Dasmz

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

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

Twitter: Dasmz

Youtube: @DasmzStudio

Telegram: @Dasmz

Donate
云乞讨