惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
Docker
Microsoft Azure Blog
Microsoft Azure Blog
云风的 BLOG
云风的 BLOG
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
L
LangChain Blog
P
Privacy & Cybersecurity Law Blog
Hugging Face - Blog
Hugging Face - Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
大猫的无限游戏
大猫的无限游戏
Cyberwarzone
Cyberwarzone
The Register - Security
The Register - Security
Stack Overflow Blog
Stack Overflow Blog
A
Arctic Wolf
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
T
Threatpost
The GitHub Blog
The GitHub Blog
P
Privacy International News Feed
WordPress大学
WordPress大学
U
Unit 42
S
Securelist
T
The Exploit Database - CXSecurity.com
C
Cyber Attacks, Cyber Crime and Cyber Security
P
Proofpoint News Feed
Latest news
Latest news
Hacker News: Ask HN
Hacker News: Ask HN
小众软件
小众软件
Know Your Adversary
Know Your Adversary
The Cloudflare Blog
V
Vulnerabilities – Threatpost
The Hacker News
The Hacker News
Scott Helme
Scott Helme
有赞技术团队
有赞技术团队
Security Latest
Security Latest
Google DeepMind News
Google DeepMind News
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Simon Willison's Weblog
Simon Willison's Weblog
博客园 - Franky
Y
Y Combinator Blog
博客园 - 叶小钗
Security Archives - TechRepublic
Security Archives - TechRepublic
Google DeepMind News
Google DeepMind News
N
Netflix TechBlog - Medium
S
Secure Thoughts
T
Threat Research - Cisco Blogs
aimingoo的专栏
aimingoo的专栏
S
SegmentFault 最新的问题
Microsoft Security Blog
Microsoft Security Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
博客园 - 司徒正美
M
MIT News - Artificial intelligence

竹林里有冰的博客

Nuxt SSG 博客的尾斜杠到底怎么加? | 竹林里有冰的博客 小米 Xiaomi Book Pro 14 (Ultra X7) Linux 兼容性实测 | 竹林里有冰的博客 国内(大陆)版小米 FCM 熄屏断连:Rootless 环境下的尝试与可能的解决方案 | 竹林里有冰的博客 我没法访问 dl.google.com —— 记一次 TUN 下的网络 debug | 竹林里有冰的博客 Vercel 的缓存控制,你注意过吗? | 竹林里有冰的博客 小记 —— Caddy 在 Layer 4 上的流量代理实践 | 竹林里有冰的博客 你的域名后缀拖慢你的网站速度了嘛?——再谈 DNS 冷启动 | 竹林里有冰的博客 DNS 冷启动:小型站点的“西西弗斯之石” | 竹林里有冰的博客 HTTP/2 Server Push 已事实性“死亡”,我很怀念它 | 竹林里有冰的博客 Nuxt Content v3 中数组字段的筛选困境与性能优化 | 竹林里有冰的博客 后 OCSP 时代,浏览器如何应对证书吊销新挑战 | 竹林里有冰的博客 初试 Github Action Self-hosted Runner,想说爱你不容易 | 竹林里有冰的博客 DNS 解析延迟毁了我的图床优化 | 竹林里有冰的博客 Vue Markdown 渲染优化实战(下):告别 DOM 操作,拥抱 AST 与函数式渲染 | 竹林里有冰的博客 Vue Markdown 渲染优化实战(上):从暴力刷新、分块更新到 Morphdom 的华丽变身 | 竹林里有冰的博客 node-sass 迁移至 dart-sass 踩坑实录 | 竹林里有冰的博客 前端中的量子力学——一打开 F12 就消失的 Bug | 竹林里有冰的博客 2025 年,如何为 web 页面上展示的视频选择合适的压缩算法? | 竹林里有冰的博客 el-image 和 el-table 怎么就打架了?Stacking Context 是什么? | 竹林里有冰的博客 2025年,前端如何使用 JS 将文本复制到剪切板? | 竹林里有冰的博客 ssh 拯救世界——通过 ssh 隧道在内网服务器执行 APT 更新 | 竹林里有冰的博客 Cudy TR3000 吃鹅(daed)记 | 竹林里有冰的博客 使用 Cloudflare Workers 监控 Fedora Copr 构建状态 | 竹林里有冰的博客 基于 Cloudflare Workers 实现的在线服务状态检测告警系统 | 竹林里有冰的博客 构建部署在 Cloudflare Workers 上的 TG Bot | 竹林里有冰的博客 2024年,Firefox 是唯一还在坚持执行在线的 SSL 证书吊销状态检查的主流浏览器 | 竹林里有冰的博客 小爱课程表适配不完全指北——以 ZJUT 本科正方教务系统为例 | 竹林里有冰的博客 将博客从 waline v2 更新到 waline v3 | 竹林里有冰的博客 给家里云装上 Fedora 41 KDE 后,我是如何配置的 | 竹林里有冰的博客 为 Hexo 添加 follow 认证 | 竹林里有冰的博客 使用 GPT 对 waline 的评论进行审查 | 竹林里有冰的博客 基于 JavaScript 的 Hexo Fluid 主题 banner 随机背景图实现 | 竹林里有冰的博客 使用向日葵智能插座 C2 用电记录推算宿舍上次烧水时间 | 竹林里有冰的博客 使用 Caddy 反向代理 dockerhub 需要几步? | 竹林里有冰的博客 将 Rustdesk 中继服务从 Arch Linux 迁移至 Debian | 竹林里有冰的博客 自建图床小记五——费用 | 竹林里有冰的博客 自建图床小记四——上传脚本编写与图片迁移 | 竹林里有冰的博客 自建图床小记三—— SSL 证书的自动更新与部署 | 竹林里有冰的博客 自建图床小记二——使用 Workers 为 R2 构建 Restful API | 竹林里有冰的博客 自建图床小记一——图床架构与 DNS 解析 | 竹林里有冰的博客 在 Linux 下使用 mitmproxy 抓取安卓手机上的 HTTPS 流量 | 竹林里有冰的博客 为中柏 N100 小主机开启来电自启 | 竹林里有冰的博客 我的博客被完整地反向代理,并自动翻译成了繁体中文 | 竹林里有冰的博客 尝试体验 Fedora COPR 中的 allow SSH 功能 | 竹林里有冰的博客 在 Arch Linux 下配置使用 HP Laser 103w 打印机无线打印 | 竹林里有冰的博客 使用动态公网 ip + ddns 实现 rustdesk 的 ip 直连 | 竹林里有冰的博客 使用 Windows 虚拟机运行虚拟专用网客户端为 Linux 提供内网环境 | 竹林里有冰的博客 以 Archlinux 中 makepkg 的方式打开 rpmbuild | 竹林里有冰的博客 使用 Github Action 更新用于 rpm 打包的 spec 文件 | 竹林里有冰的博客 使用 Python 生成甘特图(Gantt Chart) | 竹林里有冰的博客 uniapp 中的图片预加载 | 竹林里有冰的博客 小记 - 尝试拼凑出 apt 仓库中的 deb 包下载地址 | 竹林里有冰的博客 在 Linux 下使用 mitmproxy 抓取 HTTPS 流量 | 竹林里有冰的博客 如何使用 docker 部署 onemanager | 竹林里有冰的博客 crontab 中简单的@语法糖 | 竹林里有冰的博客 备份 umami 数据库,并使用 TG Bot 保存 dump 文件 | 竹林里有冰的博客 在 JavaScript 中,箭头函数中的 this 指针到底指向哪里? | 竹林里有冰的博客 结合 Vue.js 与 php 完成的 web 期末大作业,讲讲前后端分离站点开发与部署中可能遇到的 CORS 跨域问题 | 竹林里有冰的博客 vuejs、php、caddy 与 docker —— web 期末大作业上云部署 | 竹林里有冰的博客 【翻译】使用 PHP 构建简单的 REST API | 竹林里有冰的博客 在 Hexo Fluid 主题中使用霞鹜文楷 | 竹林里有冰的博客 【翻译】GLWTPL——祝你好运开源许可证 | 竹林里有冰的博客 通过巴法云将向日葵智能插座接入米家,实现小爱同学远程控制 | 竹林里有冰的博客 使用 Root 后的安卓手机获取向日葵智能插座 C2 的开关 api | 竹林里有冰的博客 创建 b23.tv 追踪参数移除 bot | 竹林里有冰的博客 jinja2 中如何优雅地实现换行 | 竹林里有冰的博客 手动指定 python-selenium 的 driver path 以解决在中国大陆网络环境下启动卡住的问题 | 竹林里有冰的博客 从零开始的静态网页部署(到个人云服务器) | 竹林里有冰的博客 在运行OpenWRT的N1盒子上部署 QQBot | 竹林里有冰的博客 在浙工大宿舍使用路由器连接移动网络(校园网) | 竹林里有冰的博客 为红米 Redmi AC2100 路由器刷入 Padavan | 竹林里有冰的博客 Azure 教育订阅申请时遇到的麻烦 | 竹林里有冰的博客 执行 repo sync 后将 git-lfs 中的资源文件 checkout | 竹林里有冰的博客 隐式转发——骚套路建站方案 | 竹林里有冰的博客 在 vps 上配合 caddy 部署 siteproxy | 竹林里有冰的博客 onedrive(by abraunegg) —— 一个 Linux 下的开源 OneDrive 客户端(cli) | 竹林里有冰的博客 【翻译】关于2022年11月的事件的一些话[Z-Library] | 竹林里有冰的博客 【已过期】使用 vercel+supabase 免费部署 umami | 竹林里有冰的博客 我的博客部署方案 | 竹林里有冰的博客 使用 VirtScreen 将 Pad 作为副屏 | 竹林里有冰的博客 在 Archlinux 下使用 l2tp 协议连接校园网 | 竹林里有冰的博客 为 Element 添加自己喜欢的贴纸 | 竹林里有冰的博客 nodejs16:是我配不上 openssl 3 咯? | 竹林里有冰的博客 如何拯救失声的 hollywood | 竹林里有冰的博客 处理 fcitx5 的文字候选框在 tg 客户端上闪烁的问题 | 竹林里有冰的博客 使用caddy反向代理维基百科中文站点 | 竹林里有冰的博客 创建一个本地的 Fedora 镜像源 | 竹林里有冰的博客 好软推荐——FastOCR | 竹林里有冰的博客 抛弃PicGo,直接使用curl将图片上传到LskyPro | 竹林里有冰的博客 使用 Github Action 跑 rpmbuild | 竹林里有冰的博客 如何打出一个「-git」的rpm包 | 竹林里有冰的博客 雪藏在开源镜像站点中的那些常用却不为人知的软件 | 竹林里有冰的博客 在Fedora搭建jekyll环境——dnf module | 竹林里有冰的博客 pacman更新时遇到「GPGME 错误:无数据」 | 竹林里有冰的博客 PicUploader使用系列(二)——为KDE的dolphin添加右键快捷菜单 | 竹林里有冰的博客 PicUploader使用系列(一)——在Archlinux上使用Caddy部署PicUploader | 竹林里有冰的博客 下载一份openharmony的源码 | 竹林里有冰的博客 在Windows与Linux双系统下共享蓝牙鼠标 | 竹林里有冰的博客 我在Archlinux上的常用软件 | 竹林里有冰的博客 安卓解包笔记 | 竹林里有冰的博客
使用AUR(Helper)安装软件时究竟发生了什么?对于常见的构建错误如何解决? | 竹林里有冰的博客
竹林里有冰 · 2021-09-11 · via 竹林里有冰的博客

虽然对于没有能力手动修改/编写PKGBUILD的Arch用户其实是不应该使用AUR中的包的,这些软件的PKGBUILD可以由个人随意发布,并不能保证安全性,但是作为Archlinux的特色,但随着AUR Helper的趋于便利,还是吸引了不少小白使用AUR。本文将主要讲一讲 AUR Helper 帮助我们安装软件时到底做了些什么事情,并提供一些使用AUR Helper构建时常见错误的解决方案。

PartⅠ基本原理#

makepkg是如何工作的?#

以钉钉举例,我们可以从AUR上使用 git clone https://aur.archlinux.org/dingtalk-bin.git 获取到由这个包的维护者为我们提前写好的构建脚本。他的目录大概是长成下面这个样子:

dingtalk-bin
├── com.alibabainc.dingtalk.desktop
├── dingtalk.sh
├── .git
├── .gitignore
├── PKGBUILD
├── service-terms-zh
└── .SRCINFO
  • 其中,.git是git的工作目录,可以忽视。
  • .gitignore属于git的配置文件之一,我们也不用管。
  • PKGBUILD是这个目录下最重要的东西,是一个用于提供参数的脚本。makepkg通过执行PKGBUILD脚本来获取到参数,自动进行下载和构建过程。
  • service-terms-zh, com.alibabainc.dingtalk.desktop, dingtalk.sh是包里所需要用到的东西。

当我们cd到这个目录下执行makepkg时,

makepkg会调用curl / git下载PKGBUILD中source=()部分中以http(s)协议头或者git+开头的链接,这些东西将会被下载到这个目录的src文件夹下。

对于curl下载的东西,makepkg会使用校验码核对下载到的文件是否完整、是否是当初这个包的维护者下载到的这一个。

校验通过后,makepkg会依次执行prepare(){}build(){}package(){}函数中的命令陆续完成准备、编译过程,并将最终要打进包里的文件放置到pkg文件夹下。

最后,makepkg将会将pkg文件夹的内容压缩成包。

AUR Helper 干了些什么#

我们还是以钉钉为例,看看我们执行yay dingtalk-bin时到底发生了什么。

当你使用yay安装软件到底发生了什么当你使用yay安装软件到底发生了什么

PartⅡ常见错误解决方案#

如果有其他情况觉得可以完善的,欢迎在评论区留言。

1. base-devel 没有安装#

正如上面所说的,没有安装base-devel组,赶紧补上!

由于base-devel并不是一个具体的包,而是由多个包构成的包组,其实并没有很好的方法来检测你是否已经安装。

所以如果你不确定,你也可以执行下面的命令来确保自己已经安装。

sudo pacman -S base-devel --noconfirm --needed

常见表现:

ERROR: Cannot find the strip binary required for object file stripping.
PKGBUILD: line XXX XXX: command not found

2. source源文件下载失败#

  1. 网络问题#

    国内的网络问题不用多说了,大多数情况下都是Github连接不上。
    yay下载失败yay下载失败
    最简单的解决方案就是把source里下载失败的东西通过特殊手段(比如你浏览器设置下代理,或者找找fastgit这种反代)下载下来以后直接扔到PKGBUILD所在的路径,然后手动执行makepkg -si

    -s代表自动下载makedepend,-i表示构建成功以后自动安装

    yay存放PKGBUILD的默认路径是在$HOME/.cache/yay/$pkgname下面,具体可以参考我的另一篇关于yay的用法详解的博客。


    我在这里再讲一种使用 fastgit 作为反代加速github下载的方法。如果觉得fastgit帮助到了你,你可以考虑给fastgit项目打钱
    当你的yay出现这个询问菜单时,(也就是出现Diffs to show/显示哪些差异?字样时)

    我们再开一个终端,输入
    sed -i "s|github.com|hub.fastgit.org|g" $HOME/.cache/yay/*/PKGBUILD
    

    接着就下一步安装即可。
  2. 链接失效#

    这种情况多见于维护者维护不到位,上游放出了新版本包并删除老版本包以后维护者没有及时跟进的。你可以去逛一逛AUR的评论区查看解决方案,或者去查找上游的最新版本是多少,尝试更改PKGBUILD中的pkgver参数和checksum以后尝试makepkg。
  3. 需要手动下载#

    一般情况下是上游没有提供直链,makepkg无法自行下载,需要人工介入。解决方法同上面的网络问题

3. checksum 错误#

上文已经提到过,checksum用于判断你所下载到的软件和维护者当初下载到的是否一致。但是有些情况下,确实是维护者忘了更新checksum值了,因此我们需要做一个判断。

打开.SCRINFO,找到checksum报错的那个文件的链接。

使用wget/curl等工具将他下载下来,可以通过md5sum+文件名的方式获取他们的md5值。连续下载两次,核对两次的检验值是否一致。

如果结果一致,那么说明并不是网络波动导致的检验值不符,而是维护者没有及时跟进导致的,你可以使用yay -S $pkgname --skipchecksums的方式跳过验证校验值的过程,或者你可以修改PKGBUILD中的校验值为"SKIP"来跳过某一文件的校验后手动makepkg

4. tuna反代受限#

tuna的服务器只有一个ip,但当使用他提供的AUR的反代服务时,全国的使用者都会被AUR认为是tuna这一个ip,过大的请求数量可能导致tuna的服务器超出AUR每天给每个ip限制的请求次数。


具体表现:

Rate limit reached

解决方案,改回AUR的服务器,使用自己的ip进行请求

yay --aururl "https://aur.archlinux.org" --save

写在最后#

关于AUR使用的更多细节可以阅读 《yay进阶》