
昨日はいくつかの実験をしていましたスリタズファイルや変更を保存するために複数の initrd.img を使用します。
initrd.gz イメージ (cpio アーカイブ) の 1 つをフォルダーに抽出し、編集/削除して、再度パックしたいと考えていました。
私は次のコードを使用しました:
cat rootfs.img | cpio -idvm
すると、すべてのファイルがルート ファイルシステムに抽出され、OS 全体が破損してしまいます。(なんとも困った状況です...)
このような操作を安全かつ簡単に行うにはどうすればいいでしょうか? Chroot でしょうか? LXC でしょうか? (VirtualBox は最後の手段です)
答え1
相対パスでアーカイブ
この種のコマンドをルート レベルで実行することはお勧めしません/
。これはトラブルを招くことになります。私は常にcpio -idvm
関連コマンドをそれぞれのディレクトリで実行し、 または を使用してmv
手動cp
でファイルを必要な場所に配置します。
次のタイトルの他の U&L Q&A で説明した方法を使用することもできます。SliTaz LinuxにTazPkgをインストールするにはどうすればいいですか?も利用しますcpio
。
絶対パスでアーカイブ
アーカイブが絶対パスで構築されている場合は、スイッチcpio
を使用して--no-absolute-filenames
アーカイブが に抽出されるのをブロックするように指示できます/
。
$ mkdir /tmp/cpio-root
$ cd /tmp/cpio-root
$ cat rootfs.img | cpio -idvm --no-absolute-filenames
参考文献
答え2
これにはユーティリティを使用できますunp
。
unp
は、複数の形式を解凍するためのユーティリティです。その機能の 1 つ (引数-U
) は、アーカイブを調べて、複数のルート要素があるかどうかを確認する機能です。複数のルート要素がある場合は、それらをディレクトリに抽出します。
例えば:
$ echo $RANDOM > a
$ echo $RANDOM > b
$ tar -cf archive.tar a b
$ rm a b
$ unp -U archive.tar
$ ls -l a b archive
ls: cannot access a: No such file or directory
ls: cannot access b: No such file or directory
archive:
total 8
-rw-r--r-- 1 root root 5 Jun 15 03:16 a
-rw-r--r-- 1 root root 6 Jun 15 03:16 b
unp
は、さまざまな形式( を含むcpio
)で動作します。アーカイブを処理するための適切なユーティリティを呼び出すだけです。
# unp -s
Known archive formats and tools:
7z: p7zip or p7zip-full
ace: unace
ar,deb: binutils
arj: arj
bz2: bzip2
cab: cabextract
chm: libchm-bin or archmage
cpio,afio: cpio or afio
dat: tnef
dms: xdms
exe: maybe orange or unzip or unrar or unarj or lha
gz: gzip
hqx: macutils
lha,lzh: lha
lz: lzip
lzma: xz-utils or lzma
lzo: lzop
lzx: unlzx
mbox: formail and mpack
pmd: ppmd
rar: rar or unrar or unrar-free
rpm: rpm2cpio and cpio
sea,sea.bin: macutils
shar: sharutils
tar: tar
tar.bz2,tbz2: tar with bzip2
tar.lzip: tar with lzip
tar.lzop,tzo: tar with lzop
tar.xz,txz: tar with xz-utils
tar.z: tar with compress
tgz,tar.gz: tar with gzip
uu: sharutils
xz: xz-utils
zip,cbz,cbr,jar,war,ear,xpi,adf: unzip
zoo: zoo
--help
何ができるかを示す出力:
# unp --help
USAGE:
/usr/bin/unp [ options ] file [ files... ]
file: compressed file(s) to expand/extract
Use -- [ ARGUMENTS ] to pass arguments to external programs, eg. some tar options:
unp fastgl.tgz xmnt.tgz -- -C /tmp
Options:
-f Continue even if program availability checks fail or directory collision occurs
-u Special helper mode.
For most archive types:
- create directory <filename without suffix>/
- extract contents there
For Debian/Ubuntu packages:
- extract data.tar.gz after each operation in local directory
- extract control.tar.gz into control/<package_version_arch>/
-U Smart mode, acts like -u (see above) if archive contains multiple
elements but if there is only one file/directory element then it's stored
in the current directory.
-s Show the list of supported formats
-v More verbosity
-h Show this help