我不明白为什么我收到错误初始化文件( 这初始化文件是来自clonezilla ISO文件的原始文件
cp initrd.img /tmp
zcat /tmp/initrd.img | cpio -idm
zcat: initrd.img: not in gzip format
cpio: premature end of archive
我执行的完整步骤如下:
我下载的是clonezilla-live-2.1.2-43-i686-pae.zip来自网站的文件: http://clonezilla.org/livepxe.php
然后我执行了以下操作以获得初始化文件文件如下:
unzip -j clonezilla-live-2.1.2-43-i686-pae.zip live/vmlinuz live/initrd.img live/filesystem.squashfs -d /tftpboot/nbi_img
然后我复制了
cp /tftpboot/nbi_img/initrd.img /tmp
最后的所有步骤均按照地点。请指教这里有什么问题吗?
我也尝试过这个,但没有成功 -:(
关联:http://www.thegeekstuff.com/2009/07/how-to-view-modify-and-recreate-initrd-img/
mv initrd.img.gz initrd.gz
gunzip initrd.gz
gunzip: initrd.gz: not in gzip format
答案1
如前所述zcat
,它不是 gzip 格式。运行file
它以查看它是否可以识别该格式。它可能是 lzma,在这种情况下您需要使用lzcat
而不是zcat
.
答案2
我知道这是一个老话题,但在我寻找一种将 gpg 密钥添加到 openSUSE iso 的方法时遇到了它,该 iso 已重新制作以包含多个自定义包。我在查找所需信息时遇到了一些问题,因此我想我应该添加一些详细说明,以防其他人发现它们有用。这些说明的不同部分可以在其他网站上找到。我只是将它们放在一起形成一个详细列表。他们所做的工作才是真正重要的。
我编写它们是为了修改本地 initrd 而不是来自 iso 映像的 initrd,但过程是相同的。
注意:以下说明是我在我的系统中使用的说明,该系统使用 /boot/initrd-3.16.7-24-desktop 作为其 initrd。如果您当前的 initrd 文件不是 /boot/initrd-3.16.7-24-desktop,则需要修改这些命令。
这是程序:
在 /boot/initrd 上列出一个长列表以查看它指向哪个文件:
root@host:~ # ls -l /boot/initrd lrwxrwxrwx 1 root root 24 Sep 10 10:08 /boot/initrd -> initrd-3.16.7-24-desktop
创建一些要在其中工作的目录:
root@host:~ # mkdir -p -m 755 mod-initrd/new-initrd
将当前的initrd复制到工作目录:
root@host:~ # cp /boot/initrd-3.16.7-24-desktop mod-initrd/initrd.xz
cd 到将解压 initrd 的目录:
root@host:~/mod-initrd # cd mod-initrd/new-initrd
提取initrd:
root@host:~/mod-initrd/new-initrd # xzcat ../initrd.xz | cpio -d -i -m
进行您想要进行的更改。
保存原始 initrd 的副本:
root@host:~/mod-initrd/new-initrd # mv ../initrd.xZ ../initrd-original
压缩修改后的 intird:
root@host:~/mod-initrd/new-initrd # find . | cpio -o -H newc | xz --check=crc32 --x86 --lzma2=dict=512KiB > ../initrd.xz
将当前 initrd 替换为修改后的 initrd。这将使修改后的版本在重新启动时生效。
root@host:~/mod-initrd/newinitrd # mv ../initrd.xz /boot/initrd-3.16.7-24-desktop
重新启动以测试您所做的更改。
root@host:~/mod-initrd/new-initrd # init 6
在测试您的更改之前,请勿删除提取的 initrd。这样,如果需要进行任何调整,只需执行步骤 6、8、9 和 10。
对于任何试图将自己的 GPG 密钥添加到 openSUSE 映像以便该密钥自动受到信任的人,这是一种方法:
通过运行以下命令获取 GPG 密钥的 ID:
gpg --list-keys
其中一行应以如下形式开头: pub 2048R/BB6D5E99
在上面的示例中,ID 为“BB6D5E99”
通过运行以下命令导出 GPG 公钥:
gpg --export -a "BB6D5E99" > "file-name-for-the-exported-key"
通过运行以下命令将 gpg 密钥添加到提取的 initrd 中:
echo "file-name-for-the-exported-key" | cpio -o -H newc -A -F "full-path-of-directory-holding-extracted-initrd"