You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
3.2 KiB
3.2 KiB
build a minimal chroot/container/vm filesystem by taking a list of files and putting them and their necessary libs into a target rootfs directory
example:
rascul@coyote:~/mkroot$ cargo run -- -h
Finished dev [unoptimized + debuginfo] target(s) in 0.03s
Running `target/debug/mkroot -h`
mkroot 0.1.0
rascul <rascul3@gmail.com>
USAGE:
mkroot [FLAGS] [OPTIONS] <DIR> <FILES>...
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
-v, --verbose Verbose
OPTIONS:
--ldd <LDD> Path to LDD [default: /usr/bin/ldd]
--osname <OSNAME> OS name (for /etc/os-release) [default: mkroot]
--osversion <OSVERSION> OS version (for /etc/os-release) [default: 1.0]
ARGS:
<DIR> Directory for root filesystem
<FILES>... Files to parse
rascul@coyote:~/mkroot$ cargo run -- -v rootfs /bin/bash /usr/bin/tree
Finished dev [unoptimized + debuginfo] target(s) in 0.04s
Running `target/debug/mkroot -v rootfs /bin/bash /usr/bin/tree`
Building root fs for ["/bin/bash", "/usr/bin/tree"] in rootfs
Checking /bin/bash
Adding /lib64/libreadline.so.7
Adding /lib64/libdl.so.2
Adding /lib64/libc.so.6
Adding /lib64/libtinfo.so.6
Adding /lib64/ld-linux-x86-64.so.2
Checking /usr/bin/tree
Adding /lib64/libc.so.6
Adding /lib64/ld-linux-x86-64.so.2
Creating directory rootfs
Creating directory rootfs/bin
Creating directory rootfs/dev
Creating directory rootfs/etc
Creating directory rootfs/home
Creating directory rootfs/lib
Creating directory rootfs/lib64
Creating directory rootfs/proc
Creating directory rootfs/root
Creating directory rootfs/run
Creating directory rootfs/sbin
Creating directory rootfs/sys
Creating directory rootfs/tmp
Creating directory rootfs/usr
Creating directory rootfs/var
Creating directory rootfs/usr/bin
Copying /bin/bash to rootfs/bin/bash
Copying /usr/bin/tree to rootfs/bin/tree
Copying /lib64/ld-linux-x86-64.so.2 to rootfs/lib64/ld-linux-x86-64.so.2
Copying /lib64/libc.so.6 to rootfs/lib64/libc.so.6
Copying /lib64/libdl.so.2 to rootfs/lib64/libdl.so.2
Copying /lib64/libreadline.so.7 to rootfs/lib64/libreadline.so.7
Copying /lib64/libtinfo.so.6 to rootfs/lib64/libtinfo.so.6
Setting linker rootfs/lib64/ld-linux-x86-64.so.2 to mode 0o755
Creating file etc/os-release
rascul@coyote:~/mkroot$ sudo chroot rootfs /bin/bash
bash-4.4# exit
exit
rascul@coyote:~/mkroot$ wget -q -O rootfs/sbin/init https://github.com/Yelp/dumb-init/releases/download/v1.2.2/dumb-init_1.2.2_amd64
rascul@coyote:~/mkroot$ chmod 0755 rootfs/sbin/init
rascul@coyote:~/mkroot$ sudo systemd-nspawn -D rootfs/ /sbin/init /bin/bash
Spawning container rootfs on /home/rascul/mkroot/rootfs.
Press ^] three times within 1s to kill container.
Timezone America/Chicago does not exist in container, not updating container timezone.
bash-4.4# tree -x
.
|-- bin
| |-- bash
| `-- tree
|-- dev
|-- etc
| |-- os-release
| `-- resolv.conf
|-- home
|-- lib
|-- lib64
| |-- ld-linux-x86-64.so.2
| |-- libc.so.6
| |-- libdl.so.2
| |-- libreadline.so.7
| `-- libtinfo.so.6
|-- proc
|-- root
|-- run
|-- sbin
| `-- init
|-- sys
|-- tmp
|-- usr
| `-- bin
`-- var
`-- log
`-- journal
17 directories, 10 files
bash-4.4# exit
exit
Container rootfs exited successfully.