我一直在我的系统上使用以下命令来创建 .cpio 存档,以便为我的嵌入式目标设备创建 initramfs
sudo find . | cpio -H newc -oc > ~/initramfs.cpio
这对我来说一直有效,没有任何问题。昨天我正在生成一个新的存档,并收到以下错误:
cpio: Archive format multiply defined: Operation not permitted
cpio: ./etc/shadow: Function open failed: Permission denied
cpio: ./usr/lib/ssh-keysign: Function open failed: Permission denied
64842 blocks
我过去从未收到过这些错误,提到打开失败的文件也没有被触及,所以我无法理解为什么会发生这种情况。我使用 Ubuntu 软件包管理器更新了我的主机系统,因此我的软件包也可能cpio
已更新。显然,我对这里生成的 initramfs 没有信心,因为所有错误都让我非常困惑。我能想到的唯一选择是尝试查明我的cpio
版本是否已更改,如果是,则删除并替换为我拥有的旧版本。有什么方法可以在我的系统(Ubuntu 12.04)上找到这些信息吗?或者有其他方法可以解决这个问题吗?
答案1
第一个错误是因为您同时传递了-H newc
和-c
。您必须决定要生成的存档的格式。这“不允许操作”是 GNU cpio 中的一个错误,它向输出该错误消息的函数传递了错误的参数,并且应该在那里退出。
其他错误是因为您没有以超级用户身份运行该命令,或者更有可能的是,您没有从正确的位置运行它。只有超级用户才能读取/etc/shadow
包含敏感信息的文件。您还应该确保您生成的存档只能由超级用户读取。如果它是initramfs
您正在创建的,那么很可能/etc/shadow
没有业务存在,除非它initramfs
包含完整的操作系统。