Library and binaries for the reading, creating, and modification of cpio archives.
Compiler support: requires rustc 1.72.1+
Add the following to your Cargo.toml
file:
[dependencies]
librarium = "0.3.0"
use std::ffi::CString;
use std::io::Cursor;
use std::fs::{File, OpenOptions};
use librarium::{Header, ArchiveReader, NewcHeader, CpioReader, CpioHeader};
let mut file = File::open("archive.cpio").unwrap();
let mut archive = ArchiveReader::<NewcHeader>::from_reader_with_offset(&mut file, 0).unwrap();
// extract bytes from all in archive
for object in &archive.objects.inner {
let mut out = OpenOptions::new()
.write(true)
.create(true)
.open(object.header.as_header().name)
.unwrap();
archive.reader.extract_data(object, &mut out).unwrap();
}
use std::ffi::CString;
use std::io::Cursor;
use std::fs::File;
use librarium::{Header, ArchiveWriter, NewcHeader};
let file = File::create("archive.cpio").unwrap();
let mut writer = ArchiveWriter::<NewcHeader>::new(Box::new(file));
// A
let a_data = "a\n".as_bytes();
let a_header = Header { name: "a".to_string(), ..Header::default()};
writer.push_file(Cursor::new(a_data), a_header).unwrap();
// write to archive
writer.write().unwrap();
Compiler support: requires rustc 1.77+
These are currently under development and are missing features, MR's welcome!
To install, run cargo install librarium-cli --locked
, or download from the
latest github release.
See --help
for more information.
tool to extract and list cpio filesystems
Usage: uncpio-librarium [OPTIONS] <ARCHIVE> <FORMAT>
Arguments:
<ARCHIVE> cpio path
<FORMAT> [possible values: odc, newc]
Options:
-o, --offset <BYTES> Skip BYTES at the start of FILESYSTEM [default: 0]
-d, --dest <PATHNAME> Extract to [PATHNAME] [default: out]
-h, --help Print help
-V, --version Print version