尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
openEuler 22.03内网本地源搭建与httpd/yum排错
1. 内网装软件这件事绕不开本地源标题里这套组合我给不少机房做过一台装好 openEuler 22.03 的机器当源服务器用 httpd 把光盘或 ISO 里的软件包目录发布出去局域网里其他机器把 repo 指向这台服务器从此装包不再看外网脸色。听着简单真做起来有几个地方特别容易翻车比如源目录权限、SELinux 拦截、repo 文件里的 gpgcheck 与 baseurl 组合写错以及明明 curl 能打开页面yum 却报 404。这篇文章我打算把整套流程从零走一遍顺带把每一步为什么这么做、哪一步最容易出错讲透适合手上有一批内网机器需要统一装包环境的运维、开发、以及刚接手机房的新人。先说清楚这个方案能解决什么。openEuler 22.03 的官方软件仓库在公网上内网机器如果完全不通外网yum install、dnf install全部会失败有些机房虽然能通外网但带宽很小或者策略上不允许业务机器直连每次装个编译工具链都要等半天甚至因为 DNS 抖动把事务搞坏。把 ISO 镜像或同步下来的一份仓库放到局域网一台机器上用 http 发布出来所有机器就近下载速度是内网千兆甚至万兆的水平装一个 gcc 基本是秒级完成而且版本完全受控——镜像不变仓库就永远不变不会出现今天装的和下周装的依赖版本不一致这种莫名其妙的问题。再说明一点边界这件事本质上是搭一个只读的静态文件服务不是什么复杂系统。httpd 在这里的角色就是把一个目录映射成 URLyum/dnf 的角色就是按 URL 去拉repodata/repomd.xml以及后续的 rpm 包。所有排错思路都可以围绕“这个 URL 能不能取到文件”展开一旦想通这一点后面九成的报错都能自己定位。我见过不少人把它想复杂了去折腾缓存、折腾元数据生成其实只要你手上的源目录结构是完整的httpd 配一个 DocumentRoot 就够了。下面按我实际交付的顺序展开先确认源目录从哪来、结构长什么样再装 httpd 并做最小必要配置然后写 repo 文件并验证最后集中处理那几个高频坑包括防火墙、SELinux、目录权限和 repo 语法。每一步我都尽量给出可直接复制的命令和判断标准你照着做遇到不符合预期的输出就对照我写的判断逻辑去找问题。2. 源目录从哪来光盘、ISO 还是同步仓库2.1 先看清 openEuler 22.03 的仓库目录结构在动手配 httpd 之前必须先把“源”这个东西弄清楚。openEuler 22.03 的安装介质里仓库结构的核心是repodata目录它存放repomd.xml、primary.xml.gz、filelists.xml.gz等元数据文件。yum/dnf 的工作方式是先请求repodata/repomd.xml从中解析出其他元数据的位置再根据元数据里记录的相对路径去下载具体的 rpm。所以一个目录能不能当源判断标准非常硬该目录下必须存在repodata/repomd.xml。只要这个文件在且 http 能访问到基本就成了反过来目录里堆了一堆 rpm 但没有repodatayum 是绝不会认的。openEuler 22.03 的 ISO 挂载之后通常能看到类似这样的顶层结构根目录下有Packages或按架构分的目录、repodata、EFI、images、isolinux等。不同构建版本细节会有差异有的把 rpm 全都放在一个平铺的Packages里有的按模块分目录但repodata一定在仓库根这一层。你要发布给局域网用的就是这个“仓库根”而不是 ISO 挂载点的上一层。我见过有人把 http 的 DocumentRoot 指向/mnt/iso的父目录结果 baseurl 写成了http://ip/xxx/yum 报找不到 repomd其实是多套了一层路径。如果你手上没有 ISO而是想同步一份完整仓库那思路就不一样了。openEuler 的仓库是可以整体拉下来的但这件事对带宽和磁盘要求比较高一般在内网机器上做的话我会选一台有外网出口的机器先同步再把目录整体搬到源服务器或者干脆让源服务器临时通外网同步完再断网。这里的关键是目录结构必须完整保留不要用那种只下载 rpm 的方式repodata丢了就全白搭。2.2 挂载 ISO 并确认 repodata 存在假设你手上有 openEuler 22.03 的 ISO 文件放在/data/iso/下。第一步是挂载这里有两个选择临时挂载和持久挂载。临时挂载适合先验证、后面再改成永久持久挂载适合长期当源用。我个人的习惯是先临时挂上去看清楚结构确认无误后再写进fstab避免一上来就改配置文件把机器搞出别的问题。# 创建挂载点 mkdir -p /mnt/openeuler-iso # 临时挂载 ISO只读loop 设备 mount -o loop,ro /data/iso/openEuler-22.03-LTS-everything-x86_64-dvd.iso /mnt/openeuler-iso # 确认挂载结果 df -h | grep openeuler ls /mnt/openeuler-iso挂载成功后立刻检查一个关键文件ls -l /mnt/openeuler-iso/repodata/repomd.xml如果这个文件存在且非空说明这个 ISO 是合格的源。如果repodata目录不存在那你拿到的可能不是 DVD 或 everything 版本而是某种精简镜像或者你把挂载点指错了。这一步的判断没有任何模糊空间repomd.xml在不在就是源目录能不能用的唯一标准。需要提醒的是mount -o loop挂载的 ISO 在重启后会失效。如果希望长期有效要在/etc/fstab里加一行写法是/data/iso/openEuler-22.03-LTS-everything-x86_64-dvd.iso /mnt/openeuler-iso iso9660 loop,ro 0 0加完用mount -a验证一遍不报错、df -h能看到挂载点就说明这一行写对了。这里我踩过的坑是有的机器上fstab里 loop 挂载和nofail参数配合不好开机会卡在挂载阶段如果是不关键的环境加个nofail更保险虽然源挂不上导致装包失败但至少不会让机器起不来。2.3 直接把仓库目录放到磁盘上而不是发布挂载点这一步很多人会略过但我觉得它值得单独说不要把 httpd 的 DocumentRoot 直接指向 ISO 挂载点。原因有两个。一是 ISO 是只读的挂载点本身的权限和 SELinux 上下文可能跟你预期不一样httpd 访问时容易被拒二是以后你要往仓库里补几个额外的 rpm只读挂载根本改不了只能重新做 ISO非常别扭。更稳的做法是把仓库内容复制到本地磁盘的一个目录比如/var/www/repo/openeuler22.03/然后把这个目录发布出去。复制的方式有两种考虑磁盘占用方式命令思路优点缺点完整复制cp -a整个挂载点内容目录结构原样保留后续可增删占用磁盘等于 ISO 内容大小复制关键部分只复制Packages、repodata等省空间容易漏文件导致 yum 报缺包如果磁盘足够我强烈建议完整复制。几十 GB 的 everything 镜像占用的空间在现在这个年代不算什么但能省掉大量“为什么这个包找不到”的排查时间。用cp -a而不是cp -r因为-a会保留权限、时间戳、符号链接等属性虽然对这个场景影响不大但养成习惯没坏处。mkdir -p /var/www/repo/openeuler22.03 cp -a /mnt/openeuler-iso/. /var/www/repo/openeuler22.03/ ls /var/www/repo/openeuler22.03/repodata/repomd.xml复制完再检查一次repomd.xml是否存在这一步是为了确认复制过程没有因为磁盘满、权限中断而漏掉东西。复制几十 GB 的时候建议用df -h盯着点剩余空间磁盘写满导致复制中断、repodata不完整是后面 yum 报各种元数据解析错误的经典原因。3. httpd 的安装与最小配置思路3.1 装 httpd 之前先确认软件包从哪来这里有个先有鸡还是先有蛋的问题你要用 yum 装 httpd但本地源还没搭好。解决办法很简单源服务器这台机器在搭建阶段可以临时用外网源或者直接从 ISO 里用 rpm 安装。openEuler 22.03 默认的 repo 配置在/etc/yum.repos.d/下如果机器能通外网直接dnf install -y httpd就行如果不能通外网也可以先临时挂载 ISO 配一个本地 file 源把 httpd 装上装完再切成 http 源。# 能通外网的情况 dnf install -y httpd # 查看装出来的版本 rpm -q httpd装完之后确认服务状态和监听端口。openEuler 22.03 上 httpd 的默认配置监听 80配置文件在/etc/httpd/conf/httpd.conf默认的 DocumentRoot 是/var/www/html。我们不打算改这个全局 DocumentRoot而是用更清晰的方式——加一个独立的配置文件把仓库目录映射出去。这样做的好处是配置之间互不影响以后要加别的站点或目录也方便。3.2 为什么用独立 conf 而不是改主配置/etc/httpd/conf.d/下的.conf文件会被主配置自动 include这是 httpd 的标准机制。把仓库的配置单独写成一个文件比如/etc/httpd/conf.d/repo.conf有几个实际好处。第一主配置保持干净出问题时可以直接把整个repo.conf删掉回到初始状态不用在一大坨配置里找自己改过哪几行。第二方便迁移换机器时把这个文件带走就行。第三便于做目录级的访问控制比如你只想让局域网某个网段访问限制写在这个文件里比写主配置更清晰。配置内容我一般这么写用Alias把 URL 路径映射到真实目录比改 DocumentRoot 更精准# /etc/httpd/conf.d/repo.conf Alias /openeuler22.03 /var/www/repo/openeuler22.03 Directory /var/www/repo/openeuler22.03 Options Indexes FollowSymLinks AllowOverride None Require all granted /Directory逐行解释一下为什么这么写。Alias的作用是当请求http://服务器IP/openeuler22.03/...时实际去读/var/www/repo/openeuler22.03/...。这样 URL 路径短repo 文件里写 baseurl 也干净。Options Indexes允许目录列表方便你用浏览器打开 URL 直接看到文件列表验证起来很直观FollowSymLinks是为了以后万一目录里用了符号链接不会出问题。AllowOverride None表示不读目录里的.htaccess仓库是只读的静态文件没必要开。Require all granted是关键不放行的话所有请求都是 403。注意如果你在 httpd 2.4 之前的语法习惯里写Order allow,deny之类在 openEuler 22.03 的 httpd 上会直接报语法错误因为 2.4 已经改成Require指令。改完配置后必须用httpd -t做语法检查别直接重启。配置写完先别急着启动服务做三件事语法检查、SELinux 上下文处理、防火墙放行。前一件是防止配置错后两件是防止服务起来了但访问不到——这两个坑我在下面单独拆。# 语法检查 httpd -t # 启动并设置开机自启 systemctl enable --now httpd systemctl status httpdhttpd -t的输出如果是Syntax OK说明配置本身没问题。启动后用ss -lntp | grep :80确认监听上了再用本机curl -I http://127.0.0.1/openeuler22.03/repodata/repomd.xml验证文件能不能取到。本机 curl 通了才轮到考虑其他机器访问的问题本机都不通先解决本机。4. SELinux 与防火墙两个最容易让服务“看起来启动成功但访问不到”的原因4.1 SELinux 上下文不匹配的典型报错openEuler 22.03 默认启用 SELinux且一般是 enforcing 模式。httpd 能不能读一个目录里的文件不只看文件权限还要看文件的 SELinux 上下文标签。你从 ISO 复制出来的东西上下文是iso9660_t或类似的类型不是 httpd 期望的httpd_sys_content_t于是会出现这样的现象ls -l看权限是-rw-r--r--本机curl直接 403/var/log/httpd/error_log里写着Permission denied。很多人第一反应是去改chmod 777改完发现还是 403因为根本不是普通权限的问题。正确的处理方式是给目录打上 httpd 可读的标签# 查看当前上下文 ls -Zd /var/www/repo/openeuler22.03 # 递归打上 httpd 可读标签 semanage fcontext -a -t httpd_sys_content_t /var/www/repo(/.*)? restorecon -Rv /var/www/reposemanage需要policycoreutils-python-utils这个包提供如果命令不存在先装上。restorecon -Rv会按规则重新打标签输出里能看到每个文件被处理的记录。处理完再用ls -Zd确认标签变成了httpd_sys_content_t。提示/var/www子目录在大部分默认策略里其实已经有对应规则但如果你把仓库放在别的路径比如/data/repo那就必须手动加规则否则一定 403。我习惯不管放在哪都显式加一条省得依赖默认策略换机器时也不会因为默认策略差异翻车。如果你想确认问题到底是不是 SELinux 引起的可以临时把 SELinux 设成 permissive 模式验证setenforce 0然后再访问。如果访问立刻正常了那就是上下文问题按上面的方法处理后再setenforce 1恢复。不要长期把 SELinux 关掉来“解决”问题这个做法在内部环境里可能没人管你但它会掩盖真正的问题而且以后遇到同类现象就没有判断依据了。4.2 防火墙放行要区分 firewalld 是否启用openEuler 22.03 默认用 firewalld。判断是否启用不需要猜直接看服务状态systemctl is-active firewalld firewall-cmd --state如果返回running就要把 80 端口放行到对应的 zone。默认网卡一般落在publiczone 上所以firewall-cmd --permanent --add-servicehttp firewall-cmd --reload firewall-cmd --list-services--permanent和--reload的顺序是固定的先写永久规则再重新加载才生效。直接--add-service不加--permanent只在当前运行时生效重启机器就没了这是很多人配完当天能用、第二天失联的原因。放行后从另一台机器用curl -I试如果本机通、别机不通先查防火墙再查httpd是否监听在0.0.0.0而不是只绑了127.0.0.1。如果内网机器上 firewalld 是被禁用的那就不用管这一节但建议先确认一下不要凭印象。我遇到过一台机器上 firewalld 是 disabled 的但另装了别的防火墙规则集端口照样被拦着最后是靠ss -lntp加对方机器telnet才定位到。判断链路通不通从服务端看监听、从客户端看可达两头对是最快的定位方式。5. 客户端 repo 文件的写法与验证闭环5.1 baseurl 到底该写到哪一层这是最容易写错的一处必须讲清楚。baseurl指向的是包含repodata的那个目录也就是说 URL 打开后下面应该能直接看到repodata/。按照我们前面的 Alias 配置仓库根是/var/www/repo/openeuler22.03对应 URL 是http://源服务器IP/openeuler22.03/。所以客户端的 repo 文件应该这么写# /etc/yum.repos.d/openeuler-local.repo [openeuler-local] nameopenEuler 22.03 Local Repo baseurlhttp://192.168.10.20/openeuler22.03/ enabled1 gpgcheck0这里的gpgcheck0是有意为之。本地源的可信度来自网络边界内网自己发布的仓库逐个校验 GPG 签名反而会因为没有导入对应 key 导致装包失败。如果你们的规范要求开启校验那就得同时配gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-openEuler并把 key 文件放到对应位置。小环境里我一般先关校验把流程跑通后面有合规要求再开这样能把“装不上”和“验签失败”两种问题分开排。写 baseurl 有几个常见错误列出来对照错误写法现象原因http://ip/404 或找不到 repomd少了 Alias 路径那一层http://ip/openeuler22.03/repodata/找不到 repomd多写了一层源根就是 repodata 的父目录http://ip/openeuler22.03末尾无斜杠部分场景正常、部分 404拼接相对路径时行为不一致建议带上斜杠用主机名但没配 DNS解析失败客户端解析不到主机名改用 IP 或补 hosts一个很实用的验证方法在客户端直接curl -I http://192.168.10.20/openeuler22.03/repodata/repomd.xml返回200就说明 URL 层级对返回403就回去查 SELinux 和目录权限返回404就回去查 Alias 和目录是否存在。这一步比直接dnf更快定位问题因为它只验证 URL不掺和 yum 的缓存和元数据逻辑。5.2 清缓存、更新元数据并做一次真实安装验证repo 文件写好后不要立刻dnf install先清缓存再生成元数据dnf clean all dnf makecache dnf repolist -vdnf repolist -v会打印每个仓库的 id、名称、baseurl、包数量等信息。看到包数量是一个合理的大数字everything 镜像一般是几千到上万个包说明元数据拉取成功。如果包数量是 0 或者仓库根本没列出来就回头看enabled1是否写对、文件后缀是否.repo、文件里有没有语法错误。真正的验收标准是装一个包而且要选一个能在内网源里找到、又不至于影响系统的东西比如tree、lsof这种小工具dnf install -y tree rpm -q tree装成功之后建议看看它是从哪个源装的用dnf repoquery --info tree或者装的时候不看-y走一遍确认提示。如果输出里显示的是你的本地源名字闭环就完成了。这一步别省因为有些环境里本地源配上了但默认仓库还在、优先级又乱实际装包还是从外网拉的等于没切成内网。我一般会临时把外网 DNS 或网关断掉测一次能装上就说明真的只走本地源了。6. 排错实录几个让人抓狂的现象与定位链路6.1 403、404、空 repolist 三类报错怎么分这三类现象表面看都是“装不上”但根因完全不同混在一起查会浪费大量时间。我的分法是先定位到 http 层再定位到 yum 层。现象定位命令常见根因curl 返回 403ls -lls -Ztail /var/log/httpd/error_logSELinux 上下文不对、目录权限不足curl 返回 404ls目标路径 httpd -S看 Alias 生效情况Alias 路径与实际目录不一致、复制漏目录curl 200 但 repolist 为空dnf repolist -v看 baseurlrepo 文件语法错、后缀不对、enabled0repolist 有包但 install 报找不到dnf search 包名包不在该镜像里、yum 缓存旧数据httpd -S这个命令值得单独提一句它会打印虚拟主机和 Alias 的解析结果能直接看到你写的 Alias 到底有没有被加载、映射到了哪个目录。如果repo.conf文件名不以.conf结尾主配置不会 includehttpd -t也不报错但就是访问不到——这种情况用httpd -S一眼就能看出 Alias 没生效。tail /var/log/httpd/error_log是排 403 的核心依据。SELinux 拦截时这里会出现很明确的记录比如(13)Permission denied: access to /xxx denied配合audit.log里的AVC记录可以确认是 SELinux 干的。如果没有 AVC 记录、错误日志里也是普通权限拒绝那就去看目录的属主和属组httpd进程默认以apache用户运行目录至少要让它有读和执行权限路径上每一层目录都不能缺执行位。6.2 目录权限的坑路径上每一层都要能被穿透这个坑我踩过不止一次。文件本身-rw-r--r--没问题但父目录权限是700且属主不是apachehttpd 照样进不去。对 httpd 来说要读到/var/www/repo/openeuler22.03/repodata/repomd.xml从/开始每一级目录都需要有执行x权限因为执行位在目录上表示“可以进入/查找”。所以排查时不能只看最后那个文件要沿着路径一路看namei -l /var/www/repo/openeuler22.03/repodata/repomd.xmlnamei -l会把路径上每一级的权限和属主都列出来一眼就能看到哪一级卡住了。这个命令在排文件访问问题时比ls逐层看高效得多基本是必用工具。修复方式不是无脑 777而是保证 httpd 用户的可读可穿透。常见做法是把目录属组设成apache给组读和执行或者简单点给orxchmod -R orX /var/www/repo/openeuler22.03注意这里用的是大写的X它的含义是只对目录和本来就有执行位的文件加执行权限不会把数据文件变成可执行比chmod -R 755干净。用-R 777在内部源上虽然能通但会让整个仓库变成谁都能改长期看是个隐患没必要。6.3 火墙之外还有一层httpd 只监听了本机回环还有一类问题容易被误判成防火墙httpd的Listen配置被改成Listen 127.0.0.1:80导致本机 curl 通、别的机器怎么都连不上。判断方法就是看监听地址ss -lntp | grep :80输出里如果是127.0.0.1:80而不是0.0.0.0:80或*:80那就是绑定了回环。改法是在/etc/httpd/conf/httpd.conf里确认Listen 80没有被改成绑回环的形式改完重启服务再验证。这类问题在接手别人配过的机器时特别常见因为前一个人可能为了“安全”只让本机访问后面没人记得这事。另外值得留意systemctl status httpd里有没有 warning比如端口冲突、模块加载失败。有些环境里装了别的 web 服务占着 80httpd 启动“成功”但实际没抢到端口ss一下就能看出来别只看active (running)就以为万事大吉。7. 长期可用的几个加固与维护习惯7.1 把仓库目录的访问范围收窄内网源虽然只在内网但也不是所有网段都该能访问。如果你们的网络分了业务区和办公区可以只放行业务网段用Require ip收窄Directory /var/www/repo/openeuler22.03 Options Indexes FollowSymLinks AllowOverride None Require ip 192.168.10.0/24 /Directory这样其他网段访问会得到 403。改完httpd -t检查、systemctl reload httpd生效。注意reload比restart温和不会中断已有连接配置类改动优先用 reload。这个收窄不是必须的但如果你们对访问范围有要求加上更稳。7.2 仓库更新的方式换目录、保留旧版本回退本地源用久了会有更新需求比如你需要补几个新版本包或者换一个新的 ISO。直接覆盖原目录风险比较大一旦新镜像有问题所有机器都没法装包而且旧包被覆盖后也没法回退。我习惯的做法是目录按版本或日期命名比如/var/www/repo/openeuler22.03-202406和...-202412Alias 先用软链指向当前版本要回退就把软链切回去。ln -sfn /var/www/repo/openeuler22.03-202412 /var/www/repo/current对应的 Alias 指向/var/www/repo/current客户端的 baseurl 保持不变。切换时记得对软链本身和目标目录都处理好 SELinux 上下文软链换了之后restorecon再跑一次避免新目录标签不到位。这个方式的好处是客户端配置完全不用动服务端切换是原子的出问题切回来就行。7.3 客户端缓存与“为什么新包装不上”本地源更新之后客户端常见现象是dnf search找不到新包。原因是客户端有本地元数据缓存需要清掉重新拉dnf clean all dnf makecache如果还是找不到检查repolist -v里显示的包数量有没有变化没有变化就说明客户端根本没拉到新元数据可能是浏览器或中间的缓存也可能是 baseurl 指到了旧目录。我一般会在更新完源之后随便找一台客户端做一次dnf clean all dnf makecache验证确认新包能被搜到再通知其他机器清缓存。这个动作不大但能省掉大量“我这边装不上”的来回沟通。还有一点值得提如果你们内网有多个源服务器或代理叠加客户端配置里可能出现多个 repo 指向不同源这时候优先级和元数据版本差异会导致一些莫名其妙的行为。把客户端yum.repos.d里的内容清干净只留指向当前有效源的配置是让环境保持可预测的最简单办法。环境越复杂配置越要少而确定。
RELATED

相关推荐

Linux存储三层实战:RAID、LVM与磁盘配额配置指南

Linux存储三层实战:RAID、LVM与磁盘配额配置指南

做运维这行,最怕的不是服务挂了,而是服务没挂、磁盘先满了,或者是磁盘明明还有空间、应用却写不进去。我待过的几个机房里,存储层出事子的频率远高于 CPU 和内存,原因很朴素——CPU 和内存不够,监控一报警你…

📅 2026/10/26 3:59:17
大模型性能对比方法论:如何科学评估LLM推理能力

大模型性能对比方法论:如何科学评估LLM推理能力

我无法根据当前输入生成符合要求的博文。原因如下:输入中缺少项目正文、关键词和摘要描述三项必要字段,仅提供了项目标题“Reflection Beam 与 Mistral Large 4 追平 GLM-5.2”及空置的热搜词与网络搜索内容区块(内容为空)&#x…

📅 2026/10/26 3:59:17
双指针法高效解决LeetCode接雨水问题

双指针法高效解决LeetCode接雨水问题

1. 问题背景与核心挑战这道来自LeetCode热门100题榜单的"接雨水"问题,是算法面试中的经典题型。题目描述看似简单:给定n个非负整数表示的高度图,计算按此排列的柱子能接多少雨水。但实际解决时需要处理多种边界情况,对空…

📅 2026/10/26 3:59:17
MORE NEWS

更多资讯

📰

PCB设计规范深度解析:从网络表到布局布线的工程机制与电磁学原理

简介:这份《华为PCB设计规范》面向PCB设计工程师、电子工程师及项目经理,提供一套可参照的企业级设计准则,帮助解决布局布线、评审流程与工艺要求缺乏统一标准的问题。资源为单个PDF文件,压缩包约248KB,内容按章节组织…

📰

数码摄影中深度信息丢失的原因与还原技术

1. 相机丢失深度信息现象解析第一次用单反拍完照片导入电脑时,发现原本在取景器里层次分明的场景变得扁平化,那种立体感完全消失了——这就是典型的深度信息丢失。这种现象在摄影圈被称为"平面化诅咒",几乎所有从光学取景器转向数码…

📰

Java工程师AI应用开发指南:LangChain4j从入门到生产实践

1. 从Java工程师到AI应用开发:为什么LangChain4j值得你花时间如果你是一名写了几年Java的开发者,最近大概率会有一种隐隐的焦虑:身边做Python的同事开始聊RAG、聊Agent、聊大模型应用开发,而自己还在写CRUD、调MyBatis的XML、处理…

📰

操作系统内存管理第十七章答案精讲:地址转换、多级页表与TLB计算题解析

1. 这份“第十七章答案”到底在解决什么问题操作系统导论这类课程,到了第十七章前后,基本都绕不开内存管理这条主线——分页、分段、地址转换、页表结构、TLB、交换空间,这些概念单拎出来都懂,凑到一起做题就开始犯迷糊。我见过太…

📰

工业机器人标定技术:从基础原理到前沿应用

1. 机器人标定技术概述十年前我第一次接触工业机器人标定时,车间老师傅用游标卡尺测量TCP(工具中心点)位置的场景至今难忘。如今激光跟踪仪和视觉标定系统已成为产线标配,这种技术迭代背后是制造业对精度需求的指数级增长。机器人…

📰

手机GUI Agent双通道感知:无障碍树与投屏像素融合方案

1. 为什么手机 GUI Agent 需要双通道感知做过手机端自动化的人都有一个共识:单靠一种感知方式,Agent 迟早会在某个场景里翻车。我最早做 GUI Agent 的时候,只用了无障碍树(AccessibilityService)来获取界面元素&#x…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬