简体中文 繁體中文 English 日本語 Deutsch 한국 사람 بالعربية TÜRKÇE português คนไทย Français

站内搜索

搜索

活动公告

11-02 12:46
10-23 09:32
通知:本站资源由网友上传分享,如有违规等问题请到版务模块进行投诉,将及时处理!
10-23 09:31
10-23 09:28
通知:签到时间调整为每日4:00(东八区)
10-23 09:26

Gentoo源代码包管理完全手册 从零开始学习Portage工具 掌握源码编译技巧 应对现实世界中的编译错误依赖问题 优化系统资源使用 提升用户体验

3万

主题

423

科技点

3万

积分

大区版主

木柜子打湿

积分
31916

三倍冰淇淋无人之境【一阶】财Doro小樱(小丑装)立华奏以外的星空【二阶】⑨的冰沙

发表于 2025-9-22 19:00:01 | 显示全部楼层 |阅读模式 [标记阅至此楼]

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x
引言

Gentoo Linux是一款以其高度定制化和灵活性而闻名的Linux发行版。与其他二进制包发行版不同,Gentoo的核心优势在于其源码包管理系统——Portage。Portage不仅是一个简单的包管理器,更是一个强大的系统,允许用户从源代码编译软件,并根据个人需求和硬件特性进行精确优化。本手册将全面介绍Portage的使用方法,从基础概念到高级技巧,帮助读者掌握Gentoo的包管理艺术,解决实际使用中的问题,并优化系统性能。

Portage基础:从零开始学习Portage工具

Portage的基本概念

Portage是Gentoo Linux的包管理系统,灵感来源于FreeBSD的Ports系统。它的核心思想是”从源代码构建”,这意味着软件包以源代码形式下载,然后在本地系统上编译安装。这种方法虽然比使用预编译的二进制包耗时更多,但提供了无与伦比的灵活性和优化潜力。

Portage的主要组件包括:

1. ebuild:每个软件包都有一个对应的ebuild文件,这是一个包含元数据和编译指令的bash脚本。
2. Portage树:一个包含所有可用软件包ebuild文件的目录集合,通常位于/usr/portage。
3. emerge:Portage的命令行工具,用于安装、更新、卸载软件包和管理依赖关系。
4. 配置文件:位于/etc/portage/目录下的文件,用于控制Portage的行为。

核心命令介绍

掌握emerge命令是使用Portage的基础。以下是最常用的emerge命令及其功能:
  1. # 同步Portage树,获取最新的软件包信息
  2. emerge --sync
  3. # 搜索软件包
  4. emerge --search 软件包名
  5. emerge -S 软件包描述  # 根据描述搜索
  6. # 安装软件包
  7. emerge 软件包名
  8. # 卸载软件包
  9. emerge --unmerge 软件包名
  10. emerge -C 软件包名
  11. # 更新系统
  12. emerge --update --deep --newuse @world
  13. emerge -uDNa @world  # 简写形式
  14. # 查看软件包信息
  15. emerge --info 软件包名
  16. emerge -pv 软件包名  # 预览安装,显示依赖关系和USE标志
  17. # 清理不需要的依赖
  18. emerge --depclean
复制代码

配置文件解析

Portage的行为可以通过多个配置文件进行控制。主要的配置文件包括:

1. /etc/portage/make.conf:全局配置文件,定义系统范围的编译选项和USE标志。
  1. # 示例make.conf配置
  2.    CFLAGS="-O2 -pipe -march=native"  # 编译优化选项
  3.    CXXFLAGS="${CFLAGS}"              # C++编译选项
  4.    MAKEOPTS="-j5"                    # 并行编译任务数,通常是CPU核心数+1
  5.    USE="X gtk alsa -kde"             # 全局USE标志,-表示禁用
  6.    GENTOO_MIRRORS="http://distfiles.gentoo.org"  # 镜像站点
复制代码

1. /etc/portage/package.use:为特定软件包设置USE标志。
  1. # 示例package.use配置
  2.    app-editors/vim python spell       # 为vim启用python和spell USE标志
  3.    media-video/vlc -X                 # 为vlc禁用X USE标志
复制代码

1. /etc/portage/package.mask:屏蔽特定版本的软件包。
  1. # 示例package.mask配置
  2.    =sys-kernel/gentoo-sources-5.10.0  # 屏蔽特定版本的内核源码
复制代码

1. /etc/portage/package.unmask:解除被屏蔽的软件包。
2. /etc/portage/package.keywords:接受特定架构的关键字,通常用于安装测试版或不稳定版软件。

/etc/portage/package.unmask:解除被屏蔽的软件包。

/etc/portage/package.keywords:接受特定架构的关键字,通常用于安装测试版或不稳定版软件。
  1. # 示例package.keywords配置
  2.    =www-client/firefox-90.0 ~amd64    # 接受firefox 90.0的amd64测试版
复制代码

1. /etc/portage/package.license:为软件包设置特定的许可证接受策略。
  1. # 示例package.license配置
  2.    sys-kernel/linux-firmware @BINARY-REDISTRIBUTABLE  # 接受固件的二进制再分发许可证
复制代码

源码编译技巧

USE标志的使用

USE标志是Gentoo系统的一个核心特性,它允许用户控制软件包的编译选项,从而决定软件的功能和依赖关系。正确使用USE标志可以大大减少系统资源占用,提高软件运行效率。

USE标志分为全局USE标志和局部USE标志。全局USE标志在/etc/portage/make.conf中定义,影响所有软件包;局部USE标志在/etc/portage/package.use中定义,只影响特定软件包。
  1. # 查看所有可用的USE标志及其描述
  2. emerge --info | grep USE
  3. less /usr/portage/profiles/use.desc
  4. # 查看特定软件包可用的USE标志
  5. emerge -pv 软件包名
  6. equery uses 软件包名
  7. # 临时修改USE标志安装软件包
  8. USE="flag1 flag2" emerge 软件包名
复制代码

以下是一些常用的USE标志及其功能:

• X:启用X Window System支持
• gtk:启用GTK+界面库支持
• qt5:启用Qt 5界面库支持
• alsa:启用ALSA音频系统支持
• pulseaudio:启用PulseAudio音频系统支持
• systemd:启用systemd支持
• ssl:启用SSL/TLS加密支持
• python:启用Python绑定或支持
• perl:启用Perl绑定或支持

编译选项优化

编译选项对软件性能有显著影响。在Gentoo中,主要通过CFLAGS和CXXFLAGS环境变量来控制编译选项。这些变量在/etc/portage/make.conf中设置。
  1. # 基本编译选项
  2. CFLAGS="-O2 -pipe"
  3. CXXFLAGS="${CFLAGS}"
  4. # 针对特定CPU架构优化
  5. CFLAGS="-O2 -pipe -march=native"
  6. CXXFLAGS="${CFLAGS}"
  7. # 更激进的优化选项(可能不稳定)
  8. CFLAGS="-O3 -pipe -march=native -fomit-frame-pointer"
  9. CXXFLAGS="${CFLAGS}"
复制代码

常见的编译选项包括:

• -O2:标准的优化级别,平衡了性能和编译时间
• -O3:更激进的优化,可能提高性能但增加编译时间和不稳定性风险
• -march=native:针对当前CPU架构进行优化
• -pipe:使用管道而不是临时文件进行编译阶段间的通信,可以加快编译速度
• -fomit-frame-pointer:省略帧指针,可以稍微提高性能但使调试更困难

对于不同的CPU架构,可以使用特定的-march选项:
  1. # Intel/AMD CPU
  2. -march=haswell      # Intel Haswell及更新
  3. -march=zen          # AMD Zen架构
  4. -march=bdver2       # AMD Bulldozer v2
  5. # ARM CPU
  6. -march=armv8-a      # ARMv8-A架构
  7. -march=armv7-a      # ARMv7-A架构
复制代码

并行编译设置

Gentoo允许通过并行编译来加速软件包的构建过程。这在多核处理器系统上特别有效。并行编译的主要设置是MAKEOPTS变量,通常在/etc/portage/make.conf中定义。
  1. # 设置并行编译任务数,通常是CPU核心数+1
  2. MAKEOPTS="-j5"  # 对于4核CPU
  3. # 也可以使用nproc命令自动检测CPU核心数
  4. MAKEOPTS="-j$(($(nproc)+1))"
复制代码

除了全局设置,还可以为特定软件包设置并行编译选项:
  1. # /etc/portage/package.env
  2. app-office/libreoffice libreoffice-compile
  3. # /etc/portage/env/libreoffice-compile
  4. MAKEOPTS="-j9"  # 为LibreOffice使用更多的并行任务
复制代码

对于内存有限的系统,过多的并行任务可能导致内存不足。在这种情况下,可以限制并行任务数或使用swap空间:
  1. # 限制并行任务数
  2. MAKEOPTS="-j2"
  3. # 增加swap空间(临时)
  4. sudo fallocate -l 4G /swapfile
  5. sudo chmod 600 /swapfile
  6. sudo mkswap /swapfile
  7. sudo swapon /swapfile
复制代码

应对编译错误和依赖问题

常见编译错误及解决方法

在使用Gentoo的过程中,编译错误是不可避免的。以下是一些常见的编译错误及其解决方法:

1. 头文件缺失错误
  1. error: 'some_header.h' file not found
复制代码

解决方法:安装提供该头文件的软件包。
  1. # 使用equery查找提供特定文件的软件包
  2.    equery belongs some_header.h
  3.    
  4.    # 如果找不到,可以尝试使用pfl工具
  5.    emerge app-portage/pfl
  6.    pfl some_header.h
复制代码

1. 库文件缺失错误
  1. error: cannot find -lsomelib
复制代码

解决方法:安装提供该库文件的软件包。
  1. # 使用equery查找提供特定库的软件包
  2.    equery belongs libsomelib.so
  3.    
  4.    # 使用e-file工具(需要安装app-portage/e-file)
  5.    emerge app-portage/e-file
  6.    e-file libsomelib.so
复制代码

1. C++标准库不兼容错误
  1. error: 'std::some_function' is not a member of 'std'
复制代码

解决方法:确保使用正确的C++标准。
  1. # 在make.conf中设置C++标准
  2.    CXXFLAGS="${CFLAGS} -std=c++17"
复制代码

1. USE标志冲突错误
  1. !!! The following installed packages are masked:
  2.    - package-1.0.0::gentoo (masked by: package.use.mask)
复制代码

解决方法:调整USE标志或解除屏蔽。
  1. # 查看冲突的USE标志
  2.    emerge -pv 软件包名
  3.    
  4.    # 在package.use中调整USE标志
  5.    echo "category/package -conflicting_flag" >> /etc/portage/package.use
复制代码

1. 循环依赖错误
  1. !!! Circular dependencies:
  2.    app-office/libreoffice needs app-text/hunspell
  3.    app-text/hunspell needs app-office/libreoffice
复制代码

解决方法:同时安装所有依赖的软件包。
  1. emerge app-office/libreoffice app-text/hunspell
复制代码

依赖关系管理

Portage的依赖管理系统非常强大,但有时也需要手动干预。以下是一些管理依赖关系的技巧:

1. 查看依赖关系
  1. # 查看软件包的依赖关系
  2.    emerge -pv 软件包名
  3.    emerge -pt 软件包名  # 以树形结构显示依赖
  4.    
  5.    # 使用equery查看依赖
  6.    equery depends 软件包名
  7.    equery depgraph 软件包名
复制代码

1. 解决依赖冲突
  1. # 使用--autounmask-write自动解决依赖问题
  2.    emerge --autounmask-write 软件包名
  3.    # 然后运行
  4.    etc-update
  5.    
  6.    # 手动解决依赖冲突
  7.    emerge --resume --skipfirst  # 跳过导致问题的软件包
复制代码

1. 维护依赖关系
  1. # 清理不需要的依赖
  2.    emerge --depclean
  3.    
  4.    # 重建依赖关系
  5.    emerge @preserved-rebuild
复制代码

使用emerge的故障排除选项

emerge提供了多个选项来帮助解决编译问题:

1. –resume和–skipfirst
  1. # 从上次中断的地方继续
  2.    emerge --resume
  3.    
  4.    # 跳过导致问题的软件包继续
  5.    emerge --resume --skipfirst
复制代码

1. –keep-going
  1. # 即使遇到错误也继续编译其他软件包
  2.    emerge --keep-going @world
复制代码

1. –jobs和–load-average
  1. # 控制并行编译和系统负载
  2.    emerge --jobs=3 --load-average=4.0 @world
复制代码

1. –verbose和–debug
  1. # 显示详细的编译信息
  2.    emerge --verbose 软件包名
  3.    
  4.    # 显示调试信息
  5.    emerge --debug 软件包名
复制代码

1. –buildpkgonly和–buildpkg
  1. # 只编译不安装
  2.    emerge --buildpkgonly 软件包名
  3.    
  4.    # 编译并创建二进制包
  5.    emerge --buildpkg 软件包名
复制代码

优化系统资源使用

编译时间优化

在Gentoo系统中,软件编译是最耗时的操作之一。以下是一些优化编译时间的方法:

1. 使用ccache加速编译

ccache是一个编译器缓存,可以显著加快重复编译的速度。
  1. # 安装ccache
  2.    emerge dev-util/ccache
  3.    
  4.    # 在make.conf中启用ccache
  5.    echo 'FEATURES="ccache"' >> /etc/portage/make.conf
  6.    
  7.    # 设置ccache缓存大小
  8.    echo 'CCACHE_SIZE="5G"' >> /etc/portage/make.conf
复制代码

1. 使用distcc分布式编译

distcc允许将编译任务分发到网络上的多台计算机,从而加速编译过程。
  1. # 在所有参与编译的机器上安装distcc
  2.    emerge sys-devel/distcc
  3.    
  4.    # 在make.conf中启用distcc
  5.    echo 'FEATURES="distcc"' >> /etc/portage/make.conf
  6.    echo 'MAKEOPTS="-j9"' >> /etc/portage/make.conf  # 假设有3台机器,每台3核
  7.    
  8.    # 设置允许连接的主机
  9.    echo '192.168.1.100' >> /etc/distcc/hosts
  10.    echo '192.168.1.101' >> /etc/distcc/hosts
  11.    echo '192.168.1.102' >> /etc/distcc/hosts
  12.    
  13.    # 启动distcc服务
  14.    rc-update add distccd default
  15.    /etc/init.d/distccd start
复制代码

1. 使用二进制包

对于不常更改的大型软件包,可以使用预编译的二进制包。
  1. # 在make.conf中启用二进制包
  2.    echo 'FEATURES="getbinpkg"' >> /etc/portage/make.conf
  3.    echo 'PORTAGE_BINHOST="http://distfiles.gentoo.org/packages"' >> /etc/portage/make.conf
  4.    
  5.    # 强制使用二进制包
  6.    emerge --getbinpkg 软件包名
复制代码

1. 选择性更新

不是每次都需要更新整个系统,可以只更新必要的软件包。
  1. # 只更新安全补丁
  2.    emerge @security
  3.    
  4.    # 只更新特定的软件包类别
  5.    emerge --update sys-apps/*
复制代码

磁盘空间管理

Gentoo系统在编译过程中会占用大量磁盘空间。以下是一些管理磁盘空间的方法:

1. 清理编译临时文件
  1. # 清理编译临时文件
  2.    eclean distfiles  # 清理下载的源码文件
  3.    eclean packages   # 清理二进制包
  4.    
  5.    # 安装eclean
  6.    emerge app-portage/gentoolkit
复制代码

1. 使用tmpfs进行编译

tmpfs是基于内存的文件系统,可以加快编译速度并减少磁盘I/O。
  1. # 在make.conf中设置PORTAGE_TMPDIR为tmpfs
  2.    echo 'PORTAGE_TMPDIR="/var/tmp/portage"' >> /etc/portage/make.conf
  3.    
  4.    # 在/etc/fstab中添加tmpfs
  5.    echo "tmpfs /var/tmp/portage tmpfs size=8G,uid=portage,gid=portage,mode=775,noatime 0 0" >> /etc/fstab
  6.    
  7.    # 挂载tmpfs
  8.    mount /var/tmp/portage
复制代码

1. 压缩distfiles目录

对于不常用的源码文件,可以压缩存储。
  1. # 安装squashfs-tools
  2.    emerge sys-fs/squashfs-tools
  3.    
  4.    # 创建压缩的distfiles镜像
  5.    mksquashfs /usr/portage/distfiles /usr/portage/distfiles.squashfs
  6.    
  7.    # 挂载压缩的distfiles
  8.    echo "/usr/portage/distfiles.squashfs /usr/portage/distfiles squashfs loop,ro 0 0" >> /etc/fstab
  9.    mount /usr/portage/distfiles
复制代码

内存使用优化

编译大型软件包(如LibreOffice或Firefox)可能需要大量内存。以下是一些优化内存使用的方法:

1. 限制并行编译任务
  1. # 在make.conf中限制MAKEOPTS
  2.    echo 'MAKEOPTS="-j2"' >> /etc/portage/make.conf
复制代码

1. 使用swap文件
  1. # 创建swap文件
  2.    fallocate -l 4G /swapfile
  3.    chmod 600 /swapfile
  4.    mkswap /swapfile
  5.    swapon /swapfile
  6.    
  7.    # 永久启用swap
  8.    echo "/swapfile none swap sw 0 0" >> /etc/fstab
复制代码

1. 调整swappiness参数
  1. # 降低swappiness,减少swap使用
  2.    echo "vm.swappiness=10" >> /etc/sysctl.conf
  3.    sysctl -p
复制代码

1. 为特定软件包设置内存限制
  1. # 在package.env中指定环境配置
  2.    echo "app-office/libreoffice low-memory" >> /etc/portage/package.env
  3.    
  4.    # 创建低内存配置
  5.    cat > /etc/portage/env/low-memory << EOF
  6.    MAKEOPTS="-j1"
  7.    CFLAGS="-O1 -pipe"
  8.    CXXFLAGS="${CFLAGS}"
  9.    EOF
复制代码

提升用户体验

自定义配置

Gentoo的强大之处在于其高度可定制性。以下是一些自定义配置的技巧:

1. 创建自定义profile
  1. # 创建自定义profile目录
  2.    mkdir -p /etc/portage/profile
  3.    
  4.    # 创建自定义use.force文件
  5.    echo "X" > /etc/portage/profile/use.force
  6.    echo "alsa" >> /etc/portage/profile/use.force
  7.    
  8.    # 创建自定义use.mask文件
  9.    echo "systemd" > /etc/portage/profile/use.mask
复制代码

1. 使用自定义ebuild
  1. # 创建本地overlay
  2.    mkdir -p /usr/local/portage
  3.    echo "PORTDIR_OVERLAY="/usr/local/portage"" >> /etc/portage/make.conf
  4.    
  5.    # 创建自定义ebuild目录
  6.    mkdir -p /usr/local/portage/category/package
  7.    
  8.    # 复制并修改官方ebuild
  9.    cp /usr/portage/category/package/package-version.ebuild /usr/local/portage/category/package/
  10.    
  11.    # 创建manifest文件
  12.    cd /usr/local/portage/category/package
  13.    ebuild package-version.ebuild manifest
复制代码

1. 使用自定义补丁
  1. # 在/etc/portage/patches中创建补丁目录
  2.    mkdir -p /etc/portage/patches/category/package
  3.    
  4.    # 将补丁文件放入该目录
  5.    cp /path/to/patch.patch /etc/portage/patches/category/package/
  6.    
  7.    # 在package.env中启用补丁
  8.    echo "category/package custom-patches" >> /etc/portage/package.env
  9.    
  10.    # 创建补丁环境配置
  11.    cat > /etc/portage/env/custom-patches << EOF
  12.    PATCHES=(
  13.        "\${FILESDIR}"/patch.patch
  14.    )
  15.    EOF
复制代码

自动化工具

使用自动化工具可以大大简化Gentoo系统的维护工作:

1. 使用eix加速软件包搜索
  1. # 安装eix
  2.    emerge app-portage/eix
  3.    
  4.    # 更新eix数据库
  5.    eix-update
  6.    
  7.    # 搜索软件包
  8.    eix 软件包名
  9.    eix -c 软件包名  # 只显示已安装的软件包
复制代码

1. 使用layman管理overlay
  1. # 安装layman
  2.    emerge app-portage/layman
  3.    
  4.    # 同步overlay列表
  5.    layman -L
  6.    
  7.    # 添加overlay
  8.    layman -a overlay-name
  9.    
  10.    # 列出已安装的overlay
  11.    layman -l
复制代码

1. 使用euse管理USE标志
  1. # 安装gentoolkit
  2.    emerge app-portage/gentoolkit
  3.    
  4.    # 查看USE标志描述
  5.    euse -i flag_name
  6.    
  7.    # 启用全局USE标志
  8.    euse -E flag_name
  9.    
  10.    # 禁用全局USE标志
  11.    euse -D flag_name
复制代码

1. 使用eclean清理系统
  1. # 安装gentoolkit
  2.    emerge app-portage/gentoolkit
  3.    
  4.    # 清理distfiles
  5.    eclean -d distfiles
  6.    
  7.    # 清理二进制包
  8.    eclean -d packages
  9.    
  10.    # 交互式清理
  11.    eclean -i distfiles
复制代码

实用技巧和最佳实践

以下是一些使用Gentoo和Portage的实用技巧和最佳实践:

1. 定期维护系统
  1. # 每周同步Portage树
  2.    emerge --sync
  3.    
  4.    # 每月更新系统
  5.    emerge -uDNa @world
  6.    
  7.    # 更新后清理
  8.    emerge --depclean
  9.    emerge @preserved-rebuild
复制代码

1. 使用quickpkg创建二进制包
  1. # 安装已编译的软件包为二进制包
  2.    quickpkg 软件包名
  3.    
  4.    # 从二进制包安装
  5.    emerge --usepkg 软件包名
复制代码

1. 使用revdep-rebuild修复损坏的依赖
  1. # 安装gentoolkit
  2.    emerge app-portage/gentoolkit
  3.    
  4.    # 修复损坏的依赖
  5.    revdep-rebuild
复制代码

1. 使用dispatch-conf管理配置文件更新
  1. # 安装dispatch-conf
  2.    emerge app-admin/dispatch-conf
  3.    
  4.    # 配置dispatch-conf
  5.    echo "diff_merge=sdiff --output=%s %s %s" >> /etc/dispatch-conf.conf
  6.    echo "merge=sdiff --output=%s %s %s" >> /etc/dispatch-conf.conf
  7.    
  8.    # 运行dispatch-conf
  9.    dispatch-conf
复制代码

1. 使用etc-update管理配置文件更新
  1. # 运行etc-update
  2.    etc-update
  3.    
  4.    # 自动合并小改动
  5.    etc-update --automerge -3
复制代码

1. 使用emerge-webrsync同步Portage树
  1. # 使用emerge-webrsync同步Portage树
  2.    emerge-webrsync
  3.    
  4.    # 使用emerge-delta-webrsync进行增量同步
  5.    emerge app-portage/emerge-delta-webrsync
  6.    emerge-delta-webrsync
复制代码

1. 使用equery查询软件包信息
  1. # 查询软件包信息
  2.    equery list 软件包名
  3.    equery files 软件包名
  4.    equery belongs 文件名
  5.    equery uses 软件包名
  6.    equery depends 软件包名
  7.    equery size 软件包名
复制代码

1. 使用genkernel管理内核
  1. # 安装genkernel
  2.    emerge sys-kernel/genkernel
  3.    
  4.    # 使用genkernel编译内核
  5.    genkernel all
  6.    
  7.    # 使用特定配置文件编译内核
  8.    genkernel --kernel-config=/path/to/config all
复制代码

结论

Gentoo Linux的Portage包管理系统是一个强大而灵活的工具,它允许用户从源代码构建整个系统,并根据个人需求和硬件特性进行精确优化。通过本手册的学习,读者应该已经掌握了Portage的基本使用方法、源码编译技巧、依赖问题解决方法以及系统优化策略。

虽然Gentoo的学习曲线相对陡峭,但它提供的灵活性和控制力是其他发行版无法比拟的。通过合理配置USE标志、优化编译选项、管理依赖关系和优化系统资源,用户可以构建一个完全符合自己需求的高效系统。

最重要的是,Gentoo社区提供了丰富的文档和支持资源,用户在遇到问题时可以随时寻求帮助。随着经验的积累,用户将能够更加熟练地使用Portage,充分发挥Gentoo的潜力,享受从源代码构建系统的乐趣和成就感。

无论是追求极致性能的系统管理员,还是希望深入了解Linux内部结构的学习者,Gentoo都能提供一个理想的学习和实验平台。通过不断探索和实践,每个Gentoo用户都能打造出真正属于自己的完美系统。
回复

使用道具 举报

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

本版积分规则

频道订阅

频道订阅

加入社群

加入社群

联系我们|TG频道|RSS

Powered by Pixtech

© 2025 Pixtech Team.