[Centos系统] CentOS编译配置

50 0
Honkers 昨天 23:18 | 显示全部楼层 |阅读模式

新机配置

  1. 永久关闭selinux防火墙,解决虚拟机启动,报错无权限
  1. cat /etc/sysconfig/selinux
  2. SELINUX=disabled
复制代码
  1. 访问qemu使用root权限,解决虚拟机启动报错,无权限使用kvm模块
  1. cat /etc/libvirt/qemu.conf
  2. user = "root"
  3. group = "root"
复制代码
  1. 指定启动qemu时的环境变量
  1. cat /etc/sysconfig/libvirtd
  2. LD_LIBRARY_PATH="/usr/local/lib64:/usr/local/lib"
复制代码
  1. 放开qemu生成core文件的权利,解决qemu crash无法生成core文件问题
  1. libvirt配置文件/etc/libvirt/qemu.conf设置如下属性
  2. max_core = "unlimited"
  3. 设置core文件大小无限制
  4. ulimit -c unlimited
  5. 设置core文件路径
  6. echo "/var/crash/core-%e-%p-%t" > /proc/sys/kernel/core_pattern
  7. 持久化设置, /etc/sysctl.conf增加如下配置
  8. kernel.core_pattern = /var/crash/core-%e-%p-%t
  9. 测试是否生成core文件,这里kill掉自己的终端进程
  10. kill -SIGSEGV $$
复制代码
  1. 持久化设置应用程序crash路径
  1. cat>>/etc/rc.local<<EOF
  2. echo "/home/tmp/core-%e-%p-%t" > /proc/sys/kernel/core_pattern
  3. EOF
复制代码
  1. 网卡dhcp配置,网线接家里的路由器,路由器接移动的入户光猫
  1. HWADDR=30:9C:23:E3:E2:07
  2. TYPE=Ethernet
  3. PROXY_METHOD=none
  4. BROWSER_ONLY=no
  5. BOOTPROTO=dhcp
  6. DEFROUTE=yes
  7. IPV4_FAILURE_FATAL=yes
  8. IPV6INIT=yes
  9. IPV6_AUTOCONF=yes
  10. IPV6_DEFROUTE=yes
  11. IPV6_FAILURE_FATAL=no
  12. IPV6_PRIVACY=no
  13. IPV6_ADDR_GEN_MODE=stable-privacy
  14. NAME=enp2s0
  15. UUID=a1153c96-4923-3638-ba0e-7c65fd849013
  16. ONBOOT=yes
  17. USERS=root
  18. NM_CONTROLLED=no
复制代码
  1. virsh edit 命令报Not an editor command错误,默认使用的vi命令,规避办法
  1. mv /usr/bin/vi /usr/bin/vi.bak
  2. ln -s /usr/bin/vim /usr/bin/vi
复制代码
  1. 配置dia画图软件支持中文输入
  1. find /usr/ -name dia.desktop
  2. /usr/share/applications/dia.desktop
  3. vim /usr/share/applications/dia.desktop
  4. Exec=env GTK_IM_MODULE=xim dia --integrated %F
复制代码
  1. 允许所有ssh的客户端访问本机
  1. echo "sshd: ALL" >> /etc/hosts.allow
  2. systemctl restart sshd
复制代码
  1. 设置迁移两端免密
  1. a. 查看目的端权限认证文件是否禁止修改,i权限表示不可修改
  2. # lsattr /root/.ssh/authorized_keys
  3. ----i----------- /root/.ssh/authorized_keys
  4. b. 取消禁止修改权限
  5. chmod -i /root/.ssh/authorized_keys
  6. c. 免密
  7. ssh-copy-id root@192.168.100.58 -p 10000
复制代码
  1. 设置grub启动选项
  1. grub2-editenv list
  2. grub2-reboot "CentOS Linux (3.10.0-862.el7.x86_64) 7 (Core)" /* 下次启动时使用此选项,不持久化 */
  3. grub2-set-default "CentOS Linux (3.10.0-862.el7.x86_64) 7 (Core)" /* 每次启动使用该选项,持久化 */
  4. grub2-set-default " centos-20200528003245-5.6.0-rc2+"
  5. 注:grub2-set-default命令后面接选项ID,CentOS7/boot/grub2/grub/grub.cfg获取;通过CentOS8通过/boot/loader/entries/xxx.conf获取
  6. 如果grub2-set-default不生效,可以尝试编辑grub.cfg中的default选项,从0开始计数
复制代码
  1. 内核启动参数grub文件
  1. CentOS7:/boot/grub2/grubenv
  2. CentOS8:/boot/efi/EFI/centos/grubenv
复制代码
  1. yum配置
  1. 1) 使用现有的repo文件
  2. mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
  3. wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo
  4. yum makecache
  5. yum repolist
  6. yum list
  7. 2) 安装repo包自动配置
  8. 安装第三方开发包
  9. yum install -y epel-release
  10. 安装虚拟化相关包
  11. yum install -y centos-release-advanced-virtualization
  12. 单独配置yum仓库,以配置ovirt仓库为例,这个仓库可以安装openvswitch的包
  13. [centos-ovirt]
  14. name=CentOS-$releasever - ovirt
  15. baseurl=http://mirror.centos.org/$contentdir/$releasever/virt/$basearch/ovirt-4.4/
  16. gpgcheck=0
  17. enabled=1
复制代码
  1. 基本开发工具、文档安装及自动补全
  1. yum groupinstall "Development Tools"
  2. yum install -y man-pages
  3. yum install -y bash-completion
复制代码
  • centos上电后ip未获取到无法连接网络
  1. dhclient enp2s0
复制代码
  1. 升级python-3.8
  1. wget https://www.python.org/ftp/python/3.8.12/Python-3.8.12.tgz
  2. tar xvf Python-3.8.12.tgz
  3. cd Python-3.8.12
  4. ./configure --enable-optimizations
  5. make altinstall
复制代码
  1. centos配置网易126发件服务器
  1. 安装邮件收发工具
  2. yum install -y postfix
  3. 设置sendmail工具配置文件,填写要使用的邮件地址,发件服务器地址,客户端授权码
  4. echo "set from=newfriday@126.com smtp=smtp.126.com smtp-auth-user=newfriday@126.com smtp-auth-password=客户端授权码 smtp-auth=login " >> /etc/mail.rc
  5. 使用sendmail工具发送邮件,通过126邮箱向qq邮箱发送邮件
  6. echo "this is a test" > test.txt
  7. mail -s "test" 987246510@qq.com <./test.txt
复制代码
  1. 配置主机NAT转发
    host: 172.23.73.76(外网),192.168.0.1(内网)
    guest: 192.168.0.2
  • host添加NAT规则
    自动获取eno1的IP地址,将所有来自192.168.0.0的包的源IP伪装成eno1的IP地址发送出去
    iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eno1 -j MASQUERADE
    或者将所有来自192.168.0.0的包的源IP伪装成172.23.73.76发送出去
    iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eno1 -j SNAT --to 172.23.73.76
  • host查询dnserver供guest使用,地址为172.16.40.114
    nslookup www.baidu.com或者dig | grep SERVER
  • guest添加默认路由和DNS服务器:
    GATEWAY=192.168.0.1;DNS1=172.16.40.114
  1. centos邮箱配置
  1. yum install -y thunderbird
复制代码

搜索thunderbird应用并配置服务器

内核模块编译

  • 创建ko_makefile,输入如下内容
  1. obj-m += kvm.o
  2. obj-m += kvm-intel.o
  3. obj-m += kvm-amd.o
  4. KDIR ?= /lib/modules/$(shell uname -r)/build
  5. KVMDIR ?= /path/to/kernel_source/arch/x86/kvm
  6. all:
  7. make -j60 -C $(KDIR) M=$(KVMDIR) modules
  8. clean:
  9. make -C $(KDIR) M=$(KVMDIR) clean
复制代码
  • make -f ko_makefile

内核工具编译

  • 编译perf工具
    make -C tools/perf/

虚拟化核心组件编译

Libvirt

容器编译

  • Libvirt的最新版本为7.0.0,比较高,使用centos 7编译可能会出一系列问题,这里使用docker下载centos 8编译。编译基于libvirt源码,最终的目标是生成rpm包
  1. 1. yum install -y docker && systemctl start docker && systemctl enable docker
  2. 2. docker pull centos 下载centos最新(tag: latest)的镜像
  3. 3. docker run -itd --name=build_libvirt_env --privileged=true --user=root -w /home -v /home:/home centos:latest bash 后台启动docker容器
  4. 4. docker attach build_libvirt_env 进入docker容器
  5. 5. yum groupinstall "Development Tools" 安装基本开发组件
  6. 6. yum install -y yum-utils 安装yum基本工具并检查各个repo的enable开关是否打开,方便后续步骤中开启
  7. 7. wget https://mirrors.aliyun.com/centos-vault/centos/8/virt/Source/advanced-virtualization/libvirt-6.6.0-7.1.el8.src.rpm 下载源码包
  8. 8. rpm2cpio libvirt-6.6.0-7.1.el8.src.rpm |cpio -i libvirt.spec 解析其中的spec文件
  9. 9. yum-builddep libvirt.spec 安装编译libvirt需要的rpm包
  10. 10. 如果rpm无法安装完成,进入https://pkgs.org/查询对应源码包所在的mirror,如果mirror已在默认的repo配置中,检查是否使能,如果不在则添加
  11. 11. 重复步骤8和步骤9直到yum-builddep完全安装完libvirt包的编译依赖,其中必须要做的是使能PowerTools源并添加centos-8-AppStream源。编译基本依赖报以及meson工具升级需要。源网址见下方。
  12. 12. git clone git@github.com:libvirt/libvirt.git 下载libvirt源码包
  13. 13. git submodule update 更新子模块
  14. 14. yum install -y meson && meson build 配置libvirt,如果失败报错需要特性版本的包,重复步骤8和步骤9
  15. 15. yum install ninja-build && ninja -C build 源码编译libvirt,但因为是在容器中,因此必须生成rpm包才行,因此meson编译的主要目的是检查libvirt编译是否正常并生成libvirt.spec文件
  16. 16. find . -name libvirt.spec meson编译系统会默认生成编译rpm包的spec文件,如果没有找到,在meson.build的最后添加下面两句话,重复步骤12,13
  17. rpm = import('rpm')
  18. rpm.generate_spect_template()
  19. 17. tar --format=posix -chf - libvirt-$VERSION | XZ_OPT="-v -T0 --e" xz -c >libvirt-$VERSION.tar.xz
  20. spec文件生成后,将libvirt源码包以libvirt-{version} 形式命名并打包,修改spec文件中的Version字段和VERSION相同
  21. 18. 使用rpmbuild工具编译打包libvirt源码,生成rpm包,脚本见下方连接
  22. 19. docker commit {container_id} mycentos:latest 最后,持久化编译过程中安装的新包,生成新的centos镜像,下一次从该镜像启动容器
复制代码

build_script
8-stream PowerTools
8-AppStream

源码编译

  1. mkdir builddir
  2. meson builddir
  3. meson setup --reconfigure build -Ddriver_qemu=enabled -Ddriver_libvirtd=enabled -Ddriver_remote=enabled /* 配置编译选项,参考meson_options.txt */
  4. meson configure --prefix=/usr/local /* 设置libvirt安装目录 */
  5. ninja -C builddir /* 编译 */
  6. ninja -C builddir test /* 运行libvirt测试例 */
  7. ninja -C builddir uninstall /* 卸载原来的libvirt */
  8. ninja -C builddir install /* 安装编译好的libvirt */
复制代码

QEMU

源码编译

  • QEMU编译相对简单,较低版本的qemu(如2.12)执行源码目录下./configure然后make即可,上游新版本QEMU使用了meson工具编译,配置QEMU时需要下载各模块代码,包括meson。如果主机meson工具版本较低,可以直接使用QEMU源码meson目录下的meson.py脚本
  1. git clone git://git.qemu.org/qemu.git /* 下载源码 */
  2. git submodule update --init /* 更新qemu子模块,会用到meson编译工具,后续使用git submodule update更新子模块 */
  3. yum install -y ninja-build && yum-builddep -y qemu /* 安装编译工具和编译依赖包 */
  4. pip3 install tomli importlib_metadata /* 安装 python 模块 */
  5. cat>>qemu-conf.sh<<EOF
  6. #!/bin/bash
  7. # export gcc env
  8. export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig
  9. export PATH=/usr/local/bin:$PATH
  10. export LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib
  11. export CC=/usr/local/bin/gcc
  12. export CXX=/usr/local/bin/g++
  13. export DISTRO_LIBDIR=/usr/local/lib64
  14. # compile
  15. cd build
  16. ../configure --prefix=/usr \
  17. --target-list="x86_64-softmmu" \
  18. --enable-debug-info \
  19. --disable-rbd \
  20. --disable-spice \
  21. --disable-strip \
  22. --disable-gnutls \
  23. --disable-vnc-png \
  24. --disable-nettle \
  25. --disable-gcrypt \
  26. --enable-debug \
  27. --enable-modules \
  28. --enable-fdt \
  29. --disable-virglrenderer \
  30. --with-git-submodules=ignore \
  31. --enable-trace-backends="log"
  32. make -j$(nproc --ignore=1)
  33. EOF
  34. mkdir build && chmod +x qemu-conf.sh
  35. ./qemu-conf.sh /* 编译 */
  36. cd build && make install /* 安装 */
  37. qemu-system-x86_64 --version /* 查看qemu版本 */
复制代码
  • 注意:QEMU编译完成后如果使用qemu-system-x86_64 --version可以查看到版本信息,但启动虚机时报错无法加载bios-256k.bin,这是因为QEMU运行虚机时需要先到安装目录加载bios固件,如果新老固件不兼容,就会有这个报错。需要将源码下pc-bios目录下的固件拷贝到QEMU安装目录下。

运行 avocado 测试例

  1. 安装 python 虚拟环境
  1. python3 -m venv qemu-build-env
复制代码
  1. 使能虚拟环境
  1. source qemu-build-env/bin/activate
复制代码
  1. 虚拟环境中安装 avocado 和 python qemu 包
  1. pip install importlib_metadata avocado-framework
  2. cd python && pip3 install .
复制代码
  1. 运行 avocado
  1. make check-avocado
复制代码
  1. 运行 migration 子测试项
  1. make check-avocado AVOCADO_TESTS=tests/avocado/migration.py
复制代码

Openvswitch

  • 下载openvswitch发行版源码包并安装,提取spec文件
  1. wget https://ftp.redhat.com/pub/redhat/linux/enterprise/7Server/en/RHEV/SRPMS/openvswitch2.11-2.11.3-89.el7fdp.src.rpm
  2. rpm -ivh openvswitch2.11-2.11.3-89.el7fdp.src.rpm
  3. cd /root/rpmbuild/SPECS
  4. yum-builddep -y openvswitch2.11.spec
复制代码
  • 下载openvsiwtch源码并编译
  1. git clone https://github.com/openvswitch/ovs.git
  2. cd ovs
  3. ./boot.sh
  4. ./configure
  5. make -j
复制代码

Kernel

  • Kernel编译可能需要高版本gcc,首先源码编译gcc,以gcc-7.5.0为例
  1. a. 下载gcc源码:wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-7.5.0/gcc-7.5.0.tar.xz -t 1000
  2. b. 安装编译高版本gcc的开发包:yum-builddep gcc && yum install -y mpfr-devel libmpc-devel gpm-devel
  3. c. 解压并进入源码目录,配置gcc源码:./configure --disable-multilib --prefix="/usr/local"
  4. d. 编译gcc:make -jN /* 编译时可能遇到gcc编译程序OOM的问题,尝试使用一个cpu编译 */
  5. e. 安装gcc到本地目录,防止和原有gcc冲突:make install
  6. f. 指定编译内核时使用的环境变量
  7. cat>>GCC_ENV<<EOF
  8. export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig
  9. export PATH=/usr/local/bin:$PATH
  10. export LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib
  11. export CC=/usr/local/bin/gcc
  12. export CXX=/usr/local/bin/g++
  13. export DISTRO_LIBDIR=/usr/local/lib64
  14. EOF
  15. f. 编译内核时指定使用高版本gcc编译工具:source GCC_ENV
复制代码
  • kernel从src.rpm源码包中编译,必须配置vault源才能下载源码http://vault.centos.org/
  1. a yumdownloader --source kernel
  2. b yum-builddep kernel
  3. c rpm -ivh --root=`pwd` kernel.src.rpm
  4. d rpmbuild -bb SPECS/kernel.spec --define "_topdir $(pwd)"
复制代码
  • kernel从rpm包中的源码编译
  1. 1)rpm包编译之后,拷贝出BUILD下的kernel源码,作为单独的源码目录
  2. a 配置内核选项
  3. make menuconfig
  4. b 编译内核
  5. make -j "$(lscpu |grep '^CPU(s):' | awk '{print $2}')"
  6. c 单独编译所有模块
  7. make modules -j "$(lscpu |grep '^CPU(s):' | awk '{print $2}')"
  8. 2)编译制作内核镜像
  9. a 单独编译bzImage镜像
  10. make bzImage -j "$(lscpu |grep '^CPU(s):' | awk '{print $2}')"
复制代码
  • kernel从开源库中的源码编译安装
  1. 1)下载开源内核包,断点续传
  2. mkdir kernel && cd kernel
  3. git init
  4. git remote add origin https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
  5. while true; do git fetch origin ; done
  6. 2)使用虚机当前内核的配置文件按编译配置内核源码
  7. cp /boot/config-4.18.0-147.el8.x86_64 /path/to/kernel/.config
  8. make -j10
  9. make modules
  10. make modules_install
  11. make install
复制代码

注:编译过程中如果遇到签名问题,需要注释掉CONFIG_SYSTEM_TRUSTED_KEYS配置,变成CONFIG_SYSTEM_TRUSTED_KEYS=""

  • 安装glib及开发应用
  1. 1) 安装glib库和开发包
  2. yum install -y glib2 glib2-devel
  3. 2) 查看编译glib2需要引用的头文件和库文件
  4. [root@hy glib_event]# pkg-config --cflags glib-2.0
  5. -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include
  6. [root@hy glib_event]# pkg-config --libs glib-2.0
  7. -lglib-2.0
  8. 3) 编译应用
  9. gcc -o demo demo.c `pkg-config --cflags --libs glib-2.0`
复制代码
  • 安装glibc,glib2 调试信息
  1. debuginfo-install glib2-2.56.1-2.el7.x86_64 glibc-2.17-222.el7.x86_64 pcre-8.32-17.el7.x86_64
  2. /usr/src/debug/glib-2.56.1/
复制代码

嵌套虚拟化

基本配置

  • 修改kvm-intel内核模块加载参数,使用modprobe重新加载kvm-intel使之生效
  1. [root@hy ~]# cat /etc/modprobe.d/kvm-nested.conf
  2. options kvm-intel nested=1
  3. options kvm-intel enable_shadow_vmcs=1
  4. options kvm-intel enable_apicv=1
  5. options kvm-intel ept=1
复制代码
  • 虚机xml中cpu配置host-passthrough模式,让虚机与主机共享同样的cpu特性
  1. <cpu mode='host-passthrough'/>
复制代码

网络配置

  • 开源libvirt服务启动后默认会创建一个default网络,关联一个virtbr0的桥,负责nat转发,如下:
  1. [root@hy ~]# virsh net-dumpxml default
  2. <network>
  3. <name>default</name>
  4. <uuid>66f5d351-3e08-4a52-9973-9eeeb8e68deb</uuid>
  5. <forward mode='nat'>
  6. <nat>
  7. <port start='1024' end='65535'/>
  8. </nat>
  9. </forward>
  10. <bridge name='virbr0' stp='on' delay='0'/>
  11. <mac address='52:54:00:4c:9e:9e'/>
  12. <ip address='192.168.124.1' netmask='255.255.255.0'>
  13. <dhcp>
  14. <range start='192.168.124.2' end='192.168.124.254'/>
  15. </dhcp>
  16. </ip>
  17. </network>
复制代码
  • 虚拟机启动后,可以将其网卡桥接到该网络关联的virbr0桥上,这样虚机内部也可以上外网,同时虚机网络的IP由default网络通过dhcp自动分配,虚机网络配置如下:
  1. <interface type='bridge'>
  2. <mac address='24:42:53:21:5b:45'/>
  3. <source bridge='virbr0'/>
  4. <target dev='vnet0'/>
  5. <model type='virtio'/>
  6. <alias name='net0'/>
  7. </interface>
复制代码
  • 如果想要两个虚机作为迁移的的主机做测试,需要两个虚机互相ping通,并且将迁移的端口开放,对于centos8,可以关掉防火墙,否则就算两个虚机能够ping通,但是tcp连接也会被禁止,telnet也无法连接:
  1. systemctl stop firewalld.service
复制代码

开源patch提交

  • 这里使用git send-email工具提交patch
  1. 1. yum install -y git-email git的send-email工具和git不在一个包,需要单独安装
  2. 2. git format-patch -3 --cover-letter --subject-prefix="RFC v1" 生成当前往后3个commit的patch,--cover-letter生成概述的patch,可以手动编辑描述补丁的总体功能,对于patch较多的场景有用。--subject-prefix是每个补丁title前的前缀,RFC(Request For Comments)表示请求评审。
  3. 3. 配置git的邮箱信息,编辑~/.gitconfig如下:
  4. [user]
  5. email = newfriday@126.com
  6. name = Hyman
  7. /* 以下信息可以根据邮箱的服务器信息填写 */
  8. [sendemail]
  9. from = newfriday@126.com
  10. smtpserver = smtp.126.com
  11. smtpuser = newfriday@126.com
  12. smtpencryption = ssl
  13. /* 对于126邮箱,此密码为第三方工具登录密码,需要自己到邮箱设置中申请
  14. * 邮箱密码是动态。每申请一次会变。对于大多数其它邮箱。可以直接使用邮箱密码 */
  15. smtppass = {passwd}
  16. smtpserverport = 465
  17. 4. ./scripts/get_maintainer.pl -f {patch-related-file} 对于qemu可以根据该脚本确定maintainer,在发送邮件时抄送给他。比如softmmu/vl.c的维护者是Paolo Bonzini <pbonzini@redhat.com> (maintainer:Main loop)。libvirt没有此说法。
  18. 5. ./scripts/checkpatch.pl {patch-file} 对于qemu在提交补丁之前需要提前检查是否有明显的语法错误。
  19. 6. 依序发送补丁系列:
  20. git send-email 0000-cover-letter.patch --to "<libvir-list@redhat.com>" --cc "Paolo Bonzini <pbonzini@redhat.com>" --cc "Daniel P. Berrangé <berrange@redhat.com>" --cc "Bruce Rogers <brogers@suse.com>" --cc "Peter Krempa <pkrempa@redhat.com>" --cc "Ján Tomko <jtomko@redhat.com>" --cc "peterx<peterx@redhat.com>" --cc "Hyman<huangy81@chinatelecom.cn>"
  21. git send-email 0001-XXX.patch --to "<libvir-list@redhat.com>" --cc "Paolo Bonzini <pbonzini@redhat.com>" --cc "peterx<peterx@redhat.com>"
  22. 7. qemu补丁类似:
  23. git send-email 0001-MAINTAINERS-Fix-tests-migration-maintainers.patch --to "qemu-devel <qemu-devel@nongnu.org>" --cc "Eric Blake <eblake@redhat.com>" --cc "Philippe Mathieu-Daudé <philmd@redhat.com>" --cc "Eduardo Habkost <ehabkost@redhat.com>" --cc "Cleber Rosa <crosa@redhat.com>"
  24. 8. 补丁被评审给出意见后需要及时回复,可以安装thunderbird邮箱客户端。并在账户设置的通讯录菜单中,取消'以HTML格式编写消息'的勾选项。采用纯文本回复。thunderbird回复的邮件会自动将原邮件内容右移,邮件中的修改更加清晰。
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Honkers

特级红客

关注
  • 3394
    主题
  • 36
    粉丝
  • 0
    关注
这家伙很懒,什么都没留下!

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2025 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行