Errors occured, no packages were upgraded. ⇒ ERROR: Failed to install packages to new root.

本文记录了使用VirtualBox安装ArchLinux过程中遇到的pacstrap命令执行错误,并提供了详细的解决方案,包括更新密钥库的方法。

LZ用virtualbox安装archlinux,前面的分区什么的问题都是没有的,详情见archwiki安装

按照官方文档执行到(执行命令前,最好到/etc/pacman.d/mirrorlist换个快点的源 国内的话复制下面的Server模板,改一下中间的http://mirrors.163.com/后面跟模板一样)

pacstrap -i /mnt base base-devel

执行玩这个命令之后发现会抛出一个错误

Errors occured, no packages were upgraded. 
⇒ ERROR: Failed to install packages to new root.





这里写图片描述




百度之后各种方法都不能解决(全是各种贴吧大手子的回复,今天突然注意到是有人回答正确方法的,pacman里面有解决办法,没有看到。。),心灰意冷还是上了Google,第二页找到解决办法,当然此方法可能并不通用,也可贴吧回复的方法只是针对我没用
解决办法如下,执行命令

pacman-key --refresh-keys

官方文档如下(不愧是archwiki)

Note: The archlinux-keyring package, which is a dependency of pacman, contains the latest keys. However keys can also be updated manually using pacman-key –refresh-keys (as root). While doing –refresh-keys, your local key will also be looked up on the remote keyserver, and you will receive a message about it being not found. This is nothing to be concerned about.

ok,问题解决。重新执行

pacstrap -i /mnt base base-devel
针对 Arch 系统中出现 “restricting filesystem access failed because Landlock is not supported by the kernel”、“switching to sandbox user 'alpm' failed” 和 “failed to retrieve some files” 导致软件包无法升级的问题,可尝试以下解决方法: ### 解决 “restricting filesystem access failed because Landlock is not supported by the kernel” - **升级内核**:确保运行支持 Landlock 的内核版本,Landlock 从 Linux 内核 5.13 版本开始支持,可通过如下命令查看当前内核版本: ```bash uname -r ``` 若版本低于 5.13,可使用系统包管理器升级内核: ```bash sudo pacman -Syu linux ``` - **检查内核配置**:确保内核已经正确配置支持 Landlock,可检查 `/boot/config-$(uname -r)` 文件中是否包含 `CONFIG_LANDLOCK=y`。若没有,可重新编译内核并启用该选项。 - **使用其他文件访问控制机制**:若无法升级内核,可考虑其他实现文件系统访问控制的方法,例如 seccomp、AppArmor 或者 SELinux 。 - **seccomp**:可用于限制进程的系统调用。以下是一个简单的 Python 示例,使用 `libseccomp` 库来限制系统调用: ```python from seccomp import * def setup_seccomp(): # 创建 seccomp 上下文 f = SyscallFilter(defaction=ALLOW) # 禁止特定的系统调用,这里以 execve 为例 f.add_rule(ERRNO(EACCES), "execve") # 应用过滤器 f.load() if __name__ == "__main__": setup_seccomp() print("Seccomp filter is set up.") ``` - **AppArmor**:可以为应用程序定义细粒度的访问策略。在 Arch 系统中,可先安装 AppArmor: ```bash sudo pacman -S apparmor ``` 创建并编辑 `/etc/apparmor.d` 下的应用配置文件,例如 `/etc/apparmor.d/myapp`,添加如下规则: ```plaintext #include <tunables/global> /myapp { # 允许读取特定目录 /path/to/directory/ r, # 允许执行特定程序 /usr/bin/my_binary ix, } ``` 之后加载配置: ```bash sudo apparmor_parser -r /etc/apparmor.d/myapp ``` - **SELinux**:可以基于安全上下文实现强制访问控制。在 Arch 系统中安装 SELinux: ```bash sudo pacman -S selinux ``` 通过修改 SELinux 策略来实现文件系统访问控制,例如允许某个进程访问特定目录: ```bash sudo semanage fcontext -a -t my_custom_t "/path/to/directory(/.*)?" sudo restorecon -Rv /path/to/directory ``` ### 解决 “switching to sandbox user 'alpm' failed” - **检查用户和组配置**:确保 `alpm` 用户和组存在,并且有正确的权限。可以通过以下命令查看: ```bash grep alpm /etc/passwd grep alpm /etc/group ``` 如果 `alpm` 用户或组不存在,可以创建它们: ```bash sudo groupadd alpm sudo useradd -g alpm -d /var/lib/pacman alpm ``` - **检查文件和目录权限**:确保 `/var/lib/pacman` 目录及其子目录的所有者和权限正确: ```bash sudo chown -R root:alpm /var/lib/pacman sudo chmod -R 750 /var/lib/pacman ``` ### 解决 “failed to retrieve some files” - **检查网络连接**:确保网络连接正常,可以尝试使用 `ping` 命令测试网络连通性: ```bash ping archlinux.org ``` - **更新镜像源**:更新 `/etc/pacman.d/mirrorlist` 文件,选择速度较快的镜像源。可以使用 `reflector` 工具来自动选择最快的镜像源: ```bash sudo pacman -S reflector sudo reflector --latest 5 --sort rate --save /etc/pacman.d/mirrorlist ``` - **清除缓存**:清除 `pacman` 的缓存文件,避免因缓存文件损坏导致下载失败: ```bash sudo pacman -Scc ``` ### 社区和官方文档 查阅 Arch 官方文档和相关社区论坛,如 Arch Wiki、Stack Overflow 等,获取更多关于这些问题的信息以及其他用户遇到类似问题的解决方案。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值