Skip to main content

Kali 双网卡 RTL8812AU MT7921u 配置 + Fluxion WiFi 渗透环境搭建操作手册

Kali 双网卡 RTL8812AU MT7921u 配置 + Fluxion WiFi 渗透环境搭建操作手册

Kali 双网卡 RTL8812AU MT7921u 配置 + Fluxion WiFi 渗透环境搭建操作手册

#linux, #kali, #wifi, #渗透, #破解, #usb无线, #losetup, #Docker import, #RootFS, #Snapshot源, #RTL8812AU, #DKMS, #Autosuspend, #Fluxion

硬件:GMKtec M6 mini PC
网卡:RTL8812AU (0bda:8812) + MT7921u (0e8d:7961)(均已正常识别)
测试版本:Kali Linux 2024.2 · Fluxion(GitHub 最新版)
覆盖内容:RTL8812AU + MT7921u 双网卡配置 · Evil Twin 全流程 —— 握手包抓取与钓鱼验证


目录


0. 方案对比

在开始之前,先根据自身情况选择合适的运行方式:

方案 内核控制 注入效果 USB 直通 配置难度 推荐场景
原生 Kali 完整 ★★★★★ 最佳 直连,无损耗 专用渗透设备
VMware 虚拟机 部分 ★★★☆☆ 中等 需配置直通 日常开发机兼用
Docker 容器 共享宿主机内核 ★★★★☆ 较好 --privileged 已有 Ubuntu 服务器

推荐首选原生 Kali。虚拟机和 Docker 均需处理额外的 USB 直通与电源管理问题,
长时间运行容易出现网卡断线。


1. 方案一:原生 Kali(推荐)

kali.org 下载安装镜像,物理机安装后直接跳到
第 4 节:驱动安装


2. 方案二:Docker 精简 Kali(Ubuntu 宿主机)

适合已有 Ubuntu 服务器、不想重装系统的场景。

2.1 下载并导入 Kali Cloud 镜像

mkdir -pv kali-cloud-images
pushd kali-cloud-images

# 下载精简镜像(约 300MB)
curl -L -C - --retry 3 --retry-delay 5 --progress-bar -o \
  'kali-linux-2024.2-cloud-genericcloud-amd64.tar.xz' \
  'https://old.kali.org/cloud-images/kali-2024.2/kali-linux-2024.2-cloud-genericcloud-amd64.tar.xz'

# 解压得到 disk.raw
tar xvf kali-linux-2024.2-cloud-genericcloud-amd64.tar.xz

2.2 挂载并导入为 Docker 镜像

# 查看分区布局,确认根分区编号
fdisk -l disk.raw

# 挂载 disk.raw 为 loop 设备,自动生成 /dev/loop0p1 等分区节点
sudo losetup -Pf --show disk.raw
# 返回:/dev/loop0

# 只读挂载根分区(p1 是主分区)
mkdir -pv kali-root
sudo mount -o ro /dev/loop0p1 kali-root

# 导入为 Docker 镜像
sudo tar --numeric-owner -C kali-root -c . | docker import - kali-cloud-images:2024.2

# 释放资源
sudo umount kali-root
sudo losetup -d /dev/loop0
rm -rf kali-root disk.raw
popd

2.3 构建自定义镜像

cat << 'EOF' > Dockerfile
FROM kali-cloud-images:2024.2
WORKDIR /root
CMD ["/bin/bash"]
EOF

docker build -f Dockerfile -t kali-cloud-images-custom:2024.2 .

2.4 启动容器

# --privileged 允许访问 USB 设备,--net=host 共享宿主机网络栈
docker run --name kali_workspace -d -it --privileged \
  --net=host \
  --device=/dev/bus/usb \
  -v /your/workspace:/root/kali-workspace \
  kali-cloud-images-custom:2024.2 /bin/bash

docker exec -it kali_workspace /bin/bash

3. 方案三:VMware 虚拟机

3.1 环境信息

  • 镜像:kali-linux-2024.2-vmware-amd64
  • 内核:6.6.15-amd64

3.2 基础配置

# 修复软件源密钥(新装系统常见问题)
sudo wget https://archive.kali.org/archive-keyring.gpg \
  -O /usr/share/keyrings/kali-archive-keyring.gpg

sudo apt update
sudo apt -y install curl

# 安装 VMware 集成工具(共享目录、剪贴板同步)
sudo apt -y install open-vm-tools open-vm-tools-desktop

3.3 固定内核版本

滚动更新可能导致驱动和 headers 版本不匹配,建议固定:

# 查看当前已安装的内核
dpkg -l | grep "^ii" | grep -E "linux-image|linux-headers"

# 清理 cloud 内核,避免多版本混淆
sudo apt-get -y purge linux-image-cloud-amd64 linux-image-amd64

# 安装对应版本的 headers(编译驱动必需)
sudo apt-get -y install linux-headers-6.6.15-amd64

如果 apt 源已找不到对应版本,从旧版归档手动下载:

mkdir -pv kali-linux-2024.2-amd64 && pushd kali-linux-2024.2-amd64

BASE="https://old.kali.org/kali/pool/main/l/linux"

curl -L -C - --retry 3 --retry-delay 5 --progress-bar -o \
  'linux-kbuild-6.6.15_6.6.15-2kali1+b1_amd64.deb' \
  "${BASE}/linux-kbuild-6.6.15_6.6.15-2kali1%2Bb1_amd64.deb"

curl -L -C - --retry 3 --retry-delay 5 --progress-bar -o \
  'linux-headers-6.6.15-amd64_6.6.15-2kali1+b1_amd64.deb' \
  "${BASE}/linux-headers-6.6.15-amd64_6.6.15-2kali1%2Bb1_amd64.deb"

curl -L -C - --retry 3 --retry-delay 5 --progress-bar -o \
  'linux-headers-6.6.15-common_6.6.15-2kali1_all.deb' \
  "${BASE}/linux-headers-6.6.15-common_6.6.15-2kali1_all.deb"

curl -L -C - --retry 3 --retry-delay 5 --progress-bar -o \
  'linux-image-6.6.15-amd64_6.6.15-2kali1+b1_amd64.deb' \
  "${BASE}/linux-image-6.6.15-amd64_6.6.15-2kali1%2Bb1_amd64.deb"

sudo apt-get -y install \
  ./linux-kbuild-6.6.15_*.deb \
  ./linux-headers-6.6.15-amd64_*.deb \
  ./linux-headers-6.6.15-common_*.deb \
  ./linux-image-6.6.15-amd64_*.deb

popd

3.4 挂载 VMware 共享目录(可选)

# 查看宿主机共享了哪些目录
vmware-hgfsclient

# 挂载全部共享目录到 /mnt/hgfs
sudo mkdir -pv /mnt/hgfs
sudo vmhgfs-fuse .host:/ /mnt/hgfs \
  -o allow_other,uid=$(id -u),gid=$(id -g)

4. 驱动安装(三种方案通用)

4.1 安装编译依赖

sudo apt-get -y install \
  dkms bc build-essential libelf-dev \
  iw usbutils zstd pciutils wireless-tools \
  firmware-misc-nonfree

4.2 安装 RTL8812AU 驱动

Kali 官方源已打包,直接安装:

sudo apt -y install realtek-rtl88xxau-dkms

# 如果是物理机重装了kali系统或者vmware kali 那需要更新 initramfs 并重启使驱动生效
sudo update-initramfs -u
sudo update-grub
sudo reboot

4.3 MT7921u 驱动说明

MT7921u(MediaTek 7961)驱动 mt7921u 已内置于 Linux 6.6+ 内核,无需额外安装,重启后自动识别。


5. 验证网卡识别

重启后确认两块网卡均被识别:

lsusb | grep -Ei "Realtek|MediaTek"
# 期望输出:
# Bus 001 Device 003: ID 0bda:8812 Realtek ... RTL8812AU
# Bus 001 Device 004: ID 0e8d:7961 MediaTek Inc. Wireless_Device

iw dev
# 期望看到两个无线接口,分别对应不同 phy

设置国家代码(影响可用信道范围和发射功率上限):

sudo iw reg set CN

6. USB 电源管理(防断线)

USB 网卡长时间空闲后,Linux 会自动挂起 USB 设备,导致接口断线报错:

receive_packet failed on fluxwl2: Network is down

6.1 临时修复(当次有效)

# 禁用 MT7921u 和 RTL8812AU 的 USB 自动挂起
for d in /sys/bus/usb/devices/*/; do
    vendor=$(cat "$d/idVendor" 2>/dev/null)
    product=$(cat "$d/idProduct" 2>/dev/null)
    if [ "$vendor" = "0e8d" ] && [ "$product" = "7961" ]; then
        echo on > "$d/power/control"
        echo "MT7921u USB 自动挂起已禁用"
    fi
    if [ "$vendor" = "0bda" ] && [ "$product" = "8812" ]; then
        echo on > "$d/power/control"
        echo "RTL8812AU USB 自动挂起已禁用"
    fi
done

# 关闭 WiFi 省电模式(请自行 `ip link` + `iw dev` 检查替换 wlxfc221c3008a8 wlx92de80479053)
sudo iw dev wlxfc221c3008a8 set power_save off 2>/dev/null   # RTL8812AU
sudo iw dev wlx92de80479053 set power_save off 2>/dev/null   # MT7921u

# 把所有 USB 设备一并改为常开
for dev in /sys/bus/usb/devices/*/power/control; do
    echo on | sudo tee "$dev" > /dev/null
done

6.2 永久修复:udev 规则(推荐)

每次插入网卡时自动生效,无需手动执行:

# MT7921u 规则
sudo tee /etc/udev/rules.d/50-mt7921u-power.rules << 'EOF'
ACTION=="add", SUBSYSTEM=="usb", \
  ATTRS{idVendor}=="0e8d", ATTRS{idProduct}=="7961", \
  TEST=="power/control", \
  ATTR{power/control}="on"
EOF

# RTL8812AU 规则
sudo tee /etc/udev/rules.d/50-rtl8812au-power.rules << 'EOF'
ACTION=="add", SUBSYSTEM=="usb", \
  ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="8812", \
  TEST=="power/control", \
  ATTR{power/control}="on"
EOF

# 立即重载规则,无需重启
sudo udevadm control --reload-rules
sudo udevadm trigger

6.3 备选方案:全局禁用 USB 自动挂起(内核参数)

# 编辑 grub 配置
sudo nano /etc/default/grub

# 在 GRUB_CMDLINE_LINUX_DEFAULT 末尾加入:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash usbcore.autosuspend=-1"

sudo update-grub
# 重启后永久生效

6.4 验证结果

# 全部显示 on 则正常
cat /sys/bus/usb/devices/*/power/control | sort | uniq -c

# -1 表示禁用自动挂起
cat /sys/bus/usb/devices/*/power/autosuspend_delay_ms | sort | uniq -c

7. Monitor 模式与注入能力验证

7.1 切换 Monitor 模式

# 先停止可能占用接口的服务
sudo airmon-ng check kill

# 清理残留的 monitor 接口(请自行 `ip link` + `iw dev` 检查替换 wlxfc221c3008a8 wlx92de80479053)
for iface in wlan0mon wlan1mon wlx92de80479053mon wlxfc221c3008a8mon; do
    sudo airmon-ng stop $iface 2>/dev/null || true
done

# 切换两块网卡为 monitor 模式(请自行 `ip link` + `iw dev` 检查替换 wlxfc221c3008a8 wlx92de80479053)
sudo airmon-ng start wlx92de80479053    # MT7921u
sudo airmon-ng start wlxfc221c3008a8    # RTL8812AU

成功后输出示例:

PHY     Interface       Driver
phy21   wlan0mon        mt7921u
phy20   wlxfc221c3008a8 rtw88_8812au   (monitor mode enabled)

7.2 设置发射功率

# 请自行 `ip link` + `iw dev` 检查替换 wlxfc221c3008a8 wlx92de80479053
sudo iw dev wlan0mon set txpower fixed 2000          # MT7921u
sudo iw dev wlxfc221c3008a8 set txpower fixed 2000   # RTL8812AU

7.3 验证注入能力

# 测试 RTL8812AU(主力注入网卡,请自行 `ip link` + `iw dev` 检查替换 wlxfc221c3008a8)
sudo aireplay-ng -9 wlxfc221c3008a8
# 期望:Injection is working!

# 测试 MT7921u
sudo aireplay-ng -9 wlan0mon
# 期望:Injection is working!

RTL8812AU 注入成功率参考结果(定向 probe 测试):

5C:02:14:CE:B0:5D - channel: 10
Ping (min/avg/max): 5.409ms/36.090ms/59.220ms
30/30: 100%   ← 注入成功率 100%

8. 双网卡职责分工

网卡 接口名 职责 原因
RTL8812AU wlxfc221c3008a8 / fluxwl0 注入 + 干扰(Jammer) out-of-tree 驱动,注入路径短,成功率高
MT7921u wlan0mon / fluxwl1 监听 + 伪造 AP mt76 内核驱动,原生支持 AP 模式和 interface combinations

两张网卡必须锁定在同一信道,否则干扰无法到达目标客户端。


9. 安装 Fluxion 依赖

9.1 一键安装

# 安装 fluxion 所需软件
sudo apt update && sudo apt install -y \
    aircrack-ng bc cowpatty curl dsniff \
    gawk hostapd iptables isc-dhcp-server iw \
    lighttpd macchanger mdk4 net-tools nmap \
    openssl p7zip php-cgi psmisc rfkill \
    tmux unzip xterm

9.2 包名与命令名对照

部分工具的包名与命令名不一致,直接 apt install 命令名 会报找不到:

命令 正确包名 说明
awk gawk GNU awk
dhcpd isc-dhcp-server DHCP 服务
7zr p7zip 7zip 压缩
route net-tools 路由工具集
fuser / killall psmisc 进程工具集
iptables-save / iptables-restore iptables 同一个包

9.3 验证安装结果

# 检查
for tool in aircrack-ng bc awk curl cowpatty dhcpd 7zr \
    hostapd lighttpd iw macchanger mdk4 dsniff nmap \
    openssl php-cgi rfkill unzip route fuser killall \
    iptables tmux xterm; do
    command -v $tool &>/dev/null && echo "✔︎ $tool" || echo "✘ $tool"
done

10. 下载 Fluxion

git clone https://github.com/FluxionNetwork/fluxion
cd fluxion

11. 启动前准备

11.1 停止 NetworkManager

NetworkManager 会在后台抢占无线接口,运行前必须停止:

sudo airmon-ng check kill
sudo systemctl stop NetworkManager

11.2 DISPLAY 变量(Ubuntu / xrdp 环境)

在 Ubuntu 宿主机上通过 xrdp 远程运行时,切换到 root 用户会清空 DISPLAY 变量,
导致 Fluxion 报 no display available

# 确认 DISPLAY 不为空
echo $DISPLAY       # 应输出 :10 或 :0 之类的值

# 如果为空,手动设置(xrdp 默认是 :10)
export DISPLAY=:10

# 避免使用 su - root(会重置环境变量),改用:
sudo DISPLAY=$DISPLAY ./fluxion.sh

如需永久生效:

echo 'export DISPLAY=:10' >> /root/.bashrc

11.3 使用 tmux 运行(防止断线中断)

tmux 可以让 Fluxion 在 xrdp 断线后继续在后台运行:

# 新建 tmux 会话
tmux new -s fluxion

# 在 tmux 内设置 DISPLAY 并启动
export DISPLAY=:10
sudo DISPLAY=$DISPLAY ./fluxion.sh

断开 xrdp 后重新连入恢复会话:

tmux attach -t fluxion

tmux 内切换窗口:Ctrl+b 然后按目标窗口编号。


12. Fluxion 网卡职责分配

Fluxion 的 Evil Twin 攻击需要两块网卡分工配合:

┌──────────────────────────────────────────────────────┐
│  RTL8812AU  →  干扰网卡(Jammer)                    │
│               持续向目标 AP 发送 deauth 帧            │
│               将真实 AP 上的客户端踢下线              │
│                                                      │
│  MT7921u    →  AP 网卡(伪造热点)                   │
│               伪造与目标同名同频段的 Evil Twin AP     │
│               提供 DHCP / DNS / 钓鱼认证页面          │
└──────────────────────────────────────────────────────┘

⚠️ 关键:两块网卡必须锁定在同一信道,否则窗口 5(Jammer)无法启动。
选择目标时确认信道,不要选偏僻的 5GHz 高位信道(如 100+)。


13. tmux 窗口说明

Fluxion 正常运行时会开启 6 个 tmux 窗口:

窗口编号 服务名 负责内容 异常表现
0 主控 bash Fluxion 日志与主界面
1 hostapd 广播伪造 Evil Twin AP AP 名称不出现
2 isc-dhcp-server 为连入客户端分配 IP Network is down(USB 休眠)
3 DNS Service DNS 劫持,导向钓鱼页面 客户端无法解析域名
4 lighttpd 提供钓鱼页面 HTTP/HTTPS 页面打不开
5 Jammer 持续发送 deauth 干扰真实 AP 缺失 = 两卡信道不一致
6 cowpatty 实时验证客户端输入的密码 密码输入后无响应

14. 第一阶段:Handshake Snooper 抓取握手包

目标:抓取目标 AP 的 WPA/WPA2 握手包(.hccapx 文件),用于后续密码验证。

14.1 操作流程

启动 Fluxion
    │
    ├─ 选择 [2] Handshake Snooper
    │
    ├─ 扫描接口:选 wlan0mon(MT7921u,支持 2.4/5/6GHz)
    │
    ├─ 扫描信道:选 [3] 2.4GHz & 5GHz 全信道
    │            等待目标出现后 Ctrl+C 停止扫描
    │
    ├─ 输入目标编号确认目标
    │
    ├─ 跟踪接口:选 [3] 跳过(让 Fluxion 自动分配)
    │
    ├─ 抓包方式:选 [2] aireplay-ng 取消认证(主动踢客户端,速度快)
    │
    ├─ 干扰接口:选 wlxfc221c3008a8(RTL8812AU,注入能力强)
    │
    ├─ 验证方式:选 [2] cowpatty(推荐,准确率高)
    │
    ├─ 检查间隔:选 [1] 每 30 秒
    │
    ├─ 验证模式:选 [2] Synchronously(推荐,稳定)
    │
    └─ 等待客户端重连后自动抓包并验证
         ✔︎ 成功:检测到有效 hash,保存到 Fluxion 数据库

14.2 抓包成功后

[*] 成功: 检测到有效 hash 并保存到 fluxion 的数据库中.

        [1] 选择启动爱抚方式   ← 直接进入第二阶段
        [2] 退出

15. 第二阶段:Evil Twin 钓鱼页面获取密码

目标:伪造目标 AP,诱导客户端连接,通过钓鱼页面获取明文密码。

15.1 操作流程

从 Handshake Snooper 成功界面选 [1] 启动爱抚方式
    │
    ├─ 选择 [1] 专属门户(Evil Twin)
    │
    ├─ 继续当前目标:[Y]
    │
    ├─ 跟踪接口:[3] 跳过
    │
    ├─ 干扰接口(Jammer):wlxfc221c3008a8(RTL8812AU)
    │
    ├─ AP 接口(伪造热点):wlan0mon(MT7921u)
    │
    ├─ 取消认证方式:[2] aireplay
    │
    ├─ AP 方式:[1] hostapd(推荐,稳定)
    │
    ├─ 密码验证:[1] hash - cowpatty
    │
    ├─ 选择 hash 文件:[1] 使用抓取到的 hash 文件
    │
    ├─ SSL 证书:[1] 创建 SSL 证书
    │
    ├─ 网络连接方式:[1] 断开原网络(推荐,强制客户端连入 Evil Twin)
    │
    ├─ 钓鱼页面语言:[03] Chinese
    │
    └─ 等待目标客户端连入 Evil Twin → 输入密码
         cowpatty 实时验证 → 密码正确时明文显示

16. 常见问题排查

16.1 窗口 5(Jammer)缺失

现象:tmux 窗口编号从 4 直接跳到 6,没有 Jammer 窗口。

原因:两块网卡锁定的信道不一致,干扰无法到达目标。

# 检查当前信道分配
iw dev | grep channel
# 如果 fluxwl0 和 fluxwl1 信道不同,需重新运行 Fluxion 并选择正确目标

解决:重新运行 Fluxion,选目标时注意 AP 的信道,
Fluxion 会自动将两块网卡锁定到同一信道。


16.2 DHCP 报 “Network is down”

现象:窗口 2 出现 receive_packet failed on fluxwl2: Network is down

原因:MT7921u USB 自动休眠导致接口断开。

# 立即恢复接口
sudo ip link set fluxwl2 up

# 根本解决:配置 udev 规则(参考第 6 节)

16.3 启动报 “no display available and tmux is not installed”

sudo apt install tmux

16.4 sudo 后 DISPLAY 变量丢失

原因su - rootsudo 默认不保留 DISPLAY 环境变量。

# 方法一:直接传入变量(推荐)
sudo DISPLAY=$DISPLAY ./fluxion.sh

# 方法二:修改 sudoers 永久保留
sudo visudo
# 添加:
Defaults env_keep += "DISPLAY XAUTHORITY"

16.5 注入成功率低或不稳定

在虚拟机(VMware / Parallels)中运行时,USB 直通会增加延迟并降低注入成功率。

优先考虑以下方案:

  • Kali 物理机:性能最佳,无直通损耗
  • Kali 持久化 Live USB/SSD:零成本,开机选择启动,用完切回原系统
  • Ubuntu 宿主机 + Docker Kali:保留宿主机 USB 控制权,注入效果优于虚拟机

最后

什么?!你想获取某某平台后台权限?我想说,这一切都毫无意义,你没有域名、服务器和肉鸡,你甚至都不能用C语言编写一款兼容各个系统的植入程序实施洪流攻击
你甚至都没钱没本事去实验,学这些理论的技术,不去使用只是一味意淫,活在自以为是的错觉中,你什么都没有,你!是个垃圾
任何一个平台都可以骑在你的头上拉屎,那些平台手举伪善的大旗,带着一群脑瘫活在一个自以为是的美好世界,每个人自诩天选之子夜夜笙歌
任何一个平台它可以拥有你的一切,你的隐私、文档、数据和行为习惯,而平台掌权者却是个自以为是的混蛋,你卑微的去找他们理论寻求一个道歉,你说了这不是你的意思,这不公平
到最后那帮脑瘫和掌权者它们谩骂你嘲笑你,论述着你的抽象,给你贴上”负能量“,说你自私,说你应该感恩戴德,把你贬得一文不值,掌权者时刻拿着你的信息威胁你,随时准备在自己的社区批斗你的任何信息,还说着让大家看看
随时有脑瘫追随者说着定位你啦,要开盒你啦,要搞你啦,你要完蛋啦,你的人生都要葬在这里啦,而你只是想要掌权者和欺负你的人的一个道歉,却永远也做不到,最后你像一条失落的老狗一样离开了
你甚至都没有力气,没有精力,你再也不想看到它们,你觉得恶心,你觉得烦躁,那些脑瘫就像无头苍蝇一样给你打电话、发短信、加QQ、加微信和发邮件等等等等
发着污秽不堪的文字,威胁着你,伤害着你,恶心着你,它们为了把你逼疯,甚至随时把你从一个又一个群,一个又一个社区谩骂逼走,举报着你的账号让你无法在说话,就像是清扫“杂质”一样
你无可奈何,无力喘息,就好像你是非人类的生命形态,游走在这个世界,你想跟它们理论,它们笑着骂你是个傻逼,又补充说道:“理论个屁!”
你觉得你所拥有的一切都变得不再美好,因为你!是个垃圾,你为什么不够强大,强大到没人可以对你造成伤害,强大到没人可以对你的人生指指点点,强大到它们欺负你就可以随时准备让那些畜生草长一米高
你为什么不够强大,为什么?因为你!是个垃圾,你将耗费你大量的人生,去消化那些记忆,你的后半生也不断活在痛苦与悔恨中,你不断的想不断的想这些事,其它人都在忙着赚钱,忙着生活,忙着夜夜笙歌
而你活在自己那本不宽敞的世界里,那些思想就像垃圾一样充满着填满着你的思想世界,进一步让你的世界变得狭隘
其它人都已经儿孙满堂,当了爷爷奶奶,而你还在想还在想
它们的孩子都已经开始在接受着霸凌和霸凌者其它人的时候,而你还在想你还在想
人类都逃到火星上去了,没人记得你了,而你还在想还在想
世界已经毁灭了,人类都灭绝了,而你还在想你还在想
你只是想要一个道歉,你做错了什么,也许,你错在,在错误的时间,遇到了错误的人,错误的事,错误的经历,这一切都是个错误,打从一开始你就不应该出现,人类也是如此
最后你和一个又一个拾荒老人一样,在街头捡着纸壳踩着易拉罐,冬天蜷缩在纸壳中,夏天用纸壳挡光,变卖着废品,嘴里骂着垃圾和自己的回忆,最后一个人消失在这个垃圾一般的世界
终于一切都结束了,什么都不重要了,所有人都老了死了结束了,太好了!反正人是可燃烧生命,你不如把自己点了,下十八层地狱去,那里没有你讨厌的人讨厌的事,那里什么都没有,因为那里是!地狱。
你应该知道我说的不是“你”,对吧?

Comments

Popular posts from this blog

python学习之路☞9.Comment, Primitive Data Types and Branch Conditional Structure if ... else ...

python学习之路☞9.Comment, Primitive Data Types and Branch / Conditional Structure if … else … #python,#Comment,#data type,#branch/conditional structure,#input(),#int,#float,#complex,#boolean,#if … else …, 注释(Comment) 内置函数input()(input() Function) 基本数据类型整数(Primitive Data Types int) 基本数据类型小数(Primitive Data Types float) 基本数据类型复数(Primitive Data Types complex) 基本数据类型布尔(Primitive Data Types boolean) 分支结构if … else …(Branch / Conditional Structure if … else …) 参考 Comment ''' 注释: 给人看的说明文字,Python 解释器完全忽略 要点 # 让该行 # 之后的内容全部失效,解释器跳过。 行尾注释与代码在同一行,通常用于简短说明。 docstring(三引号字符串)放在函数/类/模块第一行时,可被 help() 和文档工具读取,有特殊意义。 好的注释解释"为什么",而不是"做了什么"(代码本身已经说明了做了什么): # ✗ i = i + 1 # i 加 1 # ✓ i += 1 # 跳过表头行 ''' # 这是单行注释,# 号后面全部忽略 x = 10 # 行尾注释,代码照常执行 # 多行注释:每行都加 # # 第一行说明 # 第二行说明 # 第三行说明 """ 这是多行字符串(docstring) 虽然常被当注释用, 但本质是字符串字面量,不是注释。 通常用于函数/类的文档说明。 """ def add ( a , b ) : """返回 a 与 b 的和。"...

OnePlus 7 Pro LineageOS 23.2 Android 16 构建与内核 Docker 支持并在 Termux 上实现容器运行全流程指南

OnePlus 7 Pro LineageOS 23.2 Android 16 构建与内核 Docker 支持并在 Termux 上实现容器运行全流程指南 OnePlus 7 Pro LineageOS 23.2 Android 16 构建与内核 Docker 支持并在 Termux 上实现容器运行全流程指南 #docker,#linux,#termux,#android,#kernel,#lineageos,#oneplus,#git,#android16, gmkm6 x86_64 主机配置环境 安装配置 docker 防止污染环境 更新 docker 插件 compose 更新 docker 插件 buildx 创建编译容器 容器内编译镜像刷机 安装magisk,termux获取root termux检测内核docker缺失功能 根据内核docker缺失功能编译boot.img并获取root 开启全部必要扩展功能 下面的步骤是开启大部分非必要扩展功能 修补内核代码方案 下面的步骤是开启剩余部分非必要扩展功能 修补内核 安装测试运行 termux docker 其它关于termux的docker-compose和docker-buildx更新 安装用于校验的工具 开机自启动和容器化部署使用例子 Android16尝试开启KVM失败的例子(不用试了,唉) 内核修补 参考&感谢 gmkm6 x86_64 主机配置环境 注意,获取自己的手机型号代号,这一点很重要在后续的命令中都要用到 比如我的手机 oneplus7pro 是 guacamole 也可以尝试通过命令获取获取,但是我不知道是不是所有设备都是这样获取的 adb shell getprop ro.boot.project_codename 最重要的是,一定要找好固件包,免得变成砖头,有线刷包就可以怎么折腾都不怕 听我说,编译内核是一件很枯燥的核对过程,这个过程需要考虑到各项之间的互相依赖和冲突并以此作出取舍 这不是个简单的过程,这里只展示具有逻辑的依赖项,需要耐心和不断的试错总结 不得不说设计的内核是一件件精美的艺术品,从某种意义上来讲,万事万物皆为艺术,而探索艺术本身是...

OnePlus 7 Pro LineageOS 19.1 构建与内核 Docker 支持并在 Termux 上实现容器运行全流程指南

OnePlus 7 Pro LineageOS 19.1 构建与内核 Docker 支持并在 Termux 上实现容器运行全流程指南 OnePlus 7 Pro LineageOS 19.1 构建与内核 Docker 支持并在 Termux 上实现容器运行全流程指南 #docker,#linux,#termux,#android,#kernel,#lineageos,#oneplus,#git, gmkm6 x86_64 主机配置环境 安装配置 docker 防止污染环境 更新 docker 插件 compose 更新 docker 插件 buildx 创建编译容器 容器内编译镜像刷机 安装magisk,termux获取root termux检测内核docker缺失功能 根据内核docker缺失功能编译boot.img并获取root 安装测试运行 termux docker 其它关于termux的docker-compose和docker-buildx更新 参考&感谢 注意,获取自己的手机型号代号,这一点很重要在后续的命令中都要用到 比如我的手机 oneplus7pro 是 guacamole 也可以尝试通过命令获取获取,但是我不知道是不是所有设备都是这样获取的 adb shell getprop ro.boot.project_codename 最重要的是,一定要找好固件包,免得变成砖头,有线刷包就可以怎么折腾都不怕 最近 OP7P 设备型号是 guacamole 手机刷了 GM1910_11_H.40 即 android 12 https://gauss-componentotacostmanual-sg.allawnofs.com/remove-d74c973c240292cb011317bb07f424a2/component-ota/23/03/28/6d4604798d27450e8de05671d5effbae.zip 内核版本 4.14.180-perf+ 发现 github.com/OnePlusOSS 官方有相关的开放残缺的内核源码,但缺失了很多代码配置 https://github.com/OnePlusOSS/android_kernel_o...