ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

银河麒麟离线安装QGis:依赖解析与本地源实战

银河麒麟离线安装QGis:依赖解析与本地源实战 简介本资源面向在银河麒麟操作系统上开展地理信息工作的科研人员、工程师及运维人员提供QGis 3.10.4的完整离线安装包解决国产化环境下无网络连接时软件部署困难的问题。压缩包共95个文件以89个deb安装包为主涵盖QGis主程序、GDAL、Python3依赖库及Qt5组件另含2个sh安装脚本、1个txt离线安装说明、1个sig校验文件、1个log日志和1个gz压缩包整体约358.59MB。资源已获1242人学习下载说明其在国产系统GIS部署场景中具有较高参考价值。读者可借助安装说明与脚本完成依赖校验、包安装及功能验证并针对飞腾等国产CPU架构进行适配快速搭建安全可靠的地理信息数据处理平台适用于环境监测、城市规划等领域的科研与生产活动。1. 银河麒麟离线装 QGis内网机器上那套能跑通的笨办法银河麒麟系统离线安装 QGis 包这件事的难点从来不在 QGis 本身而在于「离线」两个字。我见过太多人在内网机器上折腾一下午最后卡在libQt5Core.so.5: cannot open shared object file这种报错上然后开始怀疑人生。银河麒麟 V10 系列基于 RPM 体系桌面版和服务器版的依赖树差异不小而 QGis 又是一个依赖 Qt5、GDAL、PROJ、GEOS、SQLite 等一大堆库的 GIS 桌面软件离线环境下缺一个包就是连锁反应。这篇内容面向的是那些手里只有一台能联网的机器、一台完全断网的目标机器中间靠 U 盘或内网共享传文件的场景。我会把依赖怎么扒、包怎么下、顺序怎么排、报错怎么查讲清楚让你少走几趟弯路。2. 先搞清楚银河麒麟的包管理底子再动手2.1 银河麒麟 V10 的 RPM 与 YUM/DNF 关系银河麒麟桌面版 V10 SP1 用的是 RPM 包格式包管理器默认是yum部分新版本已经切到dnf。这两个工具在离线场景下的行为差异不大核心都是通过仓库元数据解析依赖。离线安装的本质就是把「在线解析依赖」变成「手动凑齐依赖集合」。先确认目标机器的系统信息这一步别偷懒# 查看系统版本和架构 cat /etc/kylin-release uname -m # 查看包管理器版本 rpm --version yum --version 2/dev/null || dnf --version/etc/kylin-release会告诉你具体是 V10 SP1 还是 SP2uname -m确认是 x86_64 还是 aarch64。这两个信息决定了你去哪里找对应的 QGis 包。银河麒麟的软件源里 QGis 版本通常偏旧如果你需要较新的 QGis得从 Fedora EPEL 或 QGis 官方仓库找对应架构的 RPM。2.2 为什么不能直接 rpm -ivh 一把梭很多人第一反应是下载一个 QGis 的 RPM然后rpm -ivh qgis.rpm。结果就是满屏的Failed dependencies。RPM 不会自动帮你解决依赖它只会告诉你缺什么。而 QGis 的依赖链有多深我实测过一个银河麒麟 V10 SP1 的干净环境装 QGis 3.28 需要额外补 40 多个依赖包涉及 Qt5 的十几个子模块、GDAL 的底层库、Python3 的绑定模块等等。所以正确姿势是在一台能联网的同版本银河麒麟机器上用yumdownloader或dnf download把 QGis 及其全部依赖下载到本地目录再整体搬到离线机器上安装。# 在联网的银河麒麟机器上操作 # 先安装下载工具 sudo yum install -y yum-utils # 创建下载目录 mkdir -p /tmp/qgis-offline cd /tmp/qgis-offline # 下载 qgis 及其所有依赖不安装 sudo yumdownloader --resolve --destdir/tmp/qgis-offline qgis python3-qgis--resolve是关键参数它会递归解析所有依赖并一并下载。--destdir指定输出目录。执行完之后这个目录里会有几十个 RPM 文件。注意yumdownloader下载的是当前系统仓库里能解析到的版本所以联网机器和目标机器的系统版本必须一致否则依赖版本可能对不上。2.3 离线仓库目录的结构怎么组织下载完的 RPM 不要散着放按类别分一下后面排查问题会方便很多# 建议的目录结构 /tmp/qgis-offline/ ├── qgis-core/ # QGis 主程序包 ├── qt5-deps/ # Qt5 相关依赖 ├── gdal-proj-deps/ # GDAL、PROJ、GEOS 等 ├── python-deps/ # Python3 绑定和模块 └── misc-deps/ # 其他零散依赖分类不是必须的但当你在一堆包里面找某个.so文件属于哪个 RPM 时分类能省不少时间。用rpm -qpl可以查看一个 RPM 包里包含哪些文件# 查看某个 RPM 包的文件列表 rpm -qpl qt5-qtbase-5.15.2-1.el8.x86_64.rpm | grep libQt5Core这个命令在排查「某个库文件缺失」时特别有用你可以反查它到底在哪个包里。3. 把 QGis 依赖扒干净下载、搬运、安装的完整链路3.1 联网机器上的依赖下载实操假设联网机器和目标机器都是银河麒麟 V10 SP1 x86_64联网机器已经配好了可用的 yum 源。第一步是确认 QGis 在源里的包名# 搜索 qgis 相关包 yum search qgis # 或者用 provides 查 yum provides */qgis银河麒麟官方源里可能没有 QGis这时候需要先添加 EPEL 源或者 QGis 官方源。但离线场景下我一般建议直接找已经编译好的 RPM 包避免在目标机器上处理源配置问题。下载命令再强调一遍完整写法# 完整下载命令包含依赖解析 sudo yumdownloader --resolve --destdir/tmp/qgis-offline \ qgis \ qgis-python \ python3-qgis \ gdal \ proj \ geos这里我把 QGis 主包和几个关键依赖都列上了。--resolve会自动处理这些包之间的依赖关系。执行完之后检查一下下载了多少个文件ls -1 /tmp/qgis-offline/*.rpm | wc -l正常情况下应该在 40 到 80 个之间取决于你的系统基线。如果只有十几个说明--resolve没生效或者源里缺包。3.2 用 createrepo 建本地离线源把 RPM 搬到离线机器后有两种安装方式一种是直接rpm -ivh *.rpm另一种是建本地仓库用 yum 装。我强烈推荐第二种因为 yum 会自动处理安装顺序而rpm -ivh *.rpm的顺序问题能把你逼疯。在离线机器上操作# 把 RPM 放到一个目录 sudo mkdir -p /opt/local-repo/qgis sudo cp /media/usb/qgis-offline/*.rpm /opt/local-repo/qgis/ # 安装 createrepo 工具如果离线机器上没有需要提前下载 # 假设 createrepo 的 RPM 也在 U 盘里 sudo rpm -ivh /media/usb/createrepo-*.rpm # 创建仓库元数据 createrepo /opt/local-repo/qgis/ # 配置本地 yum 源 sudo tee /etc/yum.repos.d/local-qgis.repo EOF [local-qgis] nameLocal QGis Repository baseurlfile:///opt/local-repo/qgis enabled1 gpgcheck0 EOFcreaterepo会生成repodata目录里面是仓库的元数据。gpgcheck0是因为我们自己下载的包没有签名离线环境下跳过签名检查是常见做法。配置好之后直接sudo yum install -y qgis python3-qgisyum 会从本地仓库解析依赖并自动排序安装。如果报某个包找不到说明下载的时候漏了回到联网机器补下。3.3 安装后的验证与 QGis 首次启动安装完成后别急着打开 QGis先做几个基础验证# 确认 qgis 可执行文件位置 which qgis # 查看安装的 qgis 版本 qgis --version # 检查 Python 绑定是否可用 python3 -c from qgis.core import Qgis; print(Qgis.version())如果qgis --version报库加载错误用ldd查缺失的动态库# 找到 qgis 主程序路径后检查依赖 ldd $(which qgis) | grep not foundnot found的那一行就是缺失的库。用rpm -qf反查这个库属于哪个包然后确认那个包是否已经安装# 假设缺失 libQt5Core.so.5 rpm -qf /usr/lib64/libQt5Core.so.5 # 如果提示 not owned by any package说明对应的 RPM 没装上首次启动 QGis 时如果界面能正常出来但加载图层时报 PROJ 数据库错误通常是proj的数据文件路径没配好。银河麒麟上常见的情况是PROJ_LIB环境变量没设置# 查找 proj 数据目录 find /usr -name proj.db 2/dev/null # 设置环境变量 export PROJ_LIB/usr/share/proj把这个 export 写到/etc/profile.d/qgis-env.sh里避免每次手动设。4. 离线安装 QGis 最容易翻车的几个地方4.1 现象安装时提示依赖冲突两个包要求不同版本的同一个库原因联网机器和目标机器的系统基线不一致。比如联网机器上已经装过某些更新导致yumdownloader解析出来的依赖版本比目标机器上的新而目标机器上已有的旧版本包和新包冲突。解决在联网机器上先用yum history看看最近有没有做过系统更新。最稳妥的做法是找一台和目标机器系统版本完全一致的机器来下载依赖。如果找不到用rpm -qa packages.txt把目标机器的所有已安装包导出来在联网机器上对比差异手动调整下载的包版本。4.2 现象yum 本地安装时提示 Cannot retrieve repository metadata原因createrepo没有执行成功或者baseurl路径写错了。常见的是file://后面少了一个斜杠或者 RPM 文件没有放在baseurl指定的目录下。解决检查/opt/local-repo/qgis/repodata/目录是否存在。如果不存在重新执行createrepo。然后确认baseurl的路径和实际存放 RPM 的路径完全一致。可以用yum repolist看仓库是否被正确识别。4.3 现象QGis 能启动但界面是英文且菜单里很多功能灰色不可用原因缺少 QGis 的翻译包和 Python 插件包。yumdownloader下载qgis主包时--resolve不一定会把qgis-python和语言包都拉下来特别是当它们被标记为Recommends而不是Requires时。解决在联网机器上显式下载这些包sudo yumdownloader --destdir/tmp/qgis-offline \ qgis-python \ qgis-qt5 \ qgis-server \ qgis-langpack-zh_CN包名可能因版本不同有差异用yum search qgis确认实际包名。下载后重新createrepo并安装。4.4 现象Python 控制台报 ModuleNotFoundError: No module named qgis原因python3-qgis包安装了但 Python 的site-packages路径不对或者系统里有多个 Python 版本QGis 绑定装到了另一个版本下面。解决先确认 QGis 用的哪个 Pythonhead -1 $(which qgis) # 看 shebang 行指向的 python 路径然后检查那个 Python 版本的site-packages里有没有qgis目录python3 -c import sys; print(sys.path) ls /usr/lib64/python3.*/site-packages/ | grep qgis如果没有手动把 QGis 的 Python 绑定路径加到PYTHONPATHexport PYTHONPATH/usr/share/qgis/python:$PYTHONPATH4.5 现象安装完 QGis 后系统里其他依赖 Qt5 的软件打不开了原因离线安装时把系统原有的 Qt5 库升级到了不兼容的版本。yumdownloader下载的 Qt5 包版本可能比目标机器上的新安装时直接覆盖了旧版本导致其他软件链接失败。解决这是最麻烦的一种情况。预防手段是在安装前用rpm -qa | grep qt5记录目标机器上所有 Qt5 相关包的版本然后在联网机器上下载时用--exclude排除掉这些包只下载 QGis 真正需要的新增依赖。如果已经覆盖了用rpm -Uvh --oldpackage降级回去# 从系统备份或安装镜像里找到旧版本 RPM sudo rpm -Uvh --oldpackage qt5-qtbase-5.12.5-1.el8.x86_64.rpm5. 让离线 QGis 真正能用起来加载天地图与日常维护技巧5.1 离线环境下配置天地图影像底图QGis 装好了但离线机器上没法访问在线地图服务。如果你需要加载天地图影像作为底图有两条路一是提前在联网机器上把瓦片下载好二是用 QGis 的 XYZ Tiles 连接配置一个本地瓦片服务。先说 XYZ Tiles 的方式。在 QGis 里右键「XYZ Tiles」→「新建连接」URL 填天地图的瓦片服务地址。但离线机器访问不了外网所以这个方式只在机器能通内网代理时有用。真正离线的话需要提前用工具把瓦片下载成 MBTiles 或目录结构然后在 QGis 里用「添加栅格图层」加载。我一般用mbutil或gdal_translate把下载好的瓦片转成 GeoTIFF# 把瓦片目录转成 GeoTIFF gdal_translate -of GTiff \ -co TILEDYES \ -co COMPRESSJPEG \ /path/to/tiles/ \ /path/to/output.tif然后在 QGis 里直接拖入这个 GeoTIFF 就行。注意坐标系要匹配天地图影像通常是 EPSG:3857Web MercatorQGis 工程坐标系也要设成一样的否则图层会对不上。5.2 离线 QGis 的插件安装方法QGis 的插件默认从在线仓库下载离线环境下需要手动安装。插件包是.zip格式从联网机器下载后放到 QGis 的插件目录# QGis 插件目录通常在 ~/.local/share/QGIS/QGIS3/profiles/default/python/plugins/ # 或者 /usr/share/qgis/python/plugins/把 zip 解压到上述目录重启 QGis 就能在插件管理器里看到。注意插件的metadata.txt里会声明兼容的 QGis 版本版本不匹配的话插件不会加载。5.3 一个我踩过的坑离线源目录别放在 /tmp有次我把 RPM 放在/tmp/qgis-offlinecreaterepo也建在那边装完之后重启机器/tmp被清了本地源直接失效。后来再装其他软件时 yum 报仓库不可用排查了半天才想起来是/tmp的问题。现在我的习惯是离线源统一放在/opt/local-repo/下面这个目录不会被系统清理而且权限也好控制。另外如果你管理的离线机器不止一台建议把整个/opt/local-repo/打包成一个 tar新机器直接解压就能用省得每台都重新createrepo。打包的时候记得把repodata目录一起打进去tar czf local-repo-qgis.tar.gz -C /opt/local-repo/qgis .到新机器上解压到同样路径配好.repo文件就能直接yum install。这个习惯帮我省了很多重复劳动希望帮到你。本文还有配套的精品资源点击获取
返回列表