I had posted this to answer a specific need. A minimalist chroot, capable of a few commands that needed to have a root filesystem to extract some files to, without overwriting what is already there in the real root... The original post really belongs here in tips and tricks, but it was in answer to another post there.
Ok, I have wrestled with this one for a few days. I tried stuff trying to avoid setting up a chroot.
Now that I have given in and set up the chroot... I can extract the minirt from the cpio archive to my changed "root."
Then I just timestamped a file with touch... and tried to rearchive it. Bingo! It was the exact same size.
So I am going to leave the steps I did in a semi script... well these are the commands I just 'did' from a konsole.
(I can just come back here and copy when I need it.)
Assuming you've booted up to the knoppix user and have a konsole opened to the /home/knoppix/Desktop directory....
I am putting together the files I needed to get a minimal chroot working... using knoppix 5.1.1
A specific chroot just capable of using cpio, and find, ls and a few others. A small one. I had never done it before.
I may want to again though.
If you want to use other commands than this minimal chroot... you will be good to try out the ldd command.
For example... I decided I wanted to be able to use ls. I copied ls to my new-root/bin directory. Then I did a:
ldd /bin/ls
It outputs:
So I grabbed those libraries from /lib and /lib/tls (I think I just grabbed the whole /lib/tls/*)linux-gate.so.1 => (0xffffe000)
librt.so.1 => /lib/tls/librt.so.1 (0xb7efc000)
libacl.so.1 => /lib/libacl.so.1 (0xb7ef6000)
libselinux.so.1 => /lib/libselinux.so.1 (0xb7ee1000)
libc.so.6 => /lib/tls/libc.so.6 (0xb7daf000)
libpthread.so.0 => /lib/tls/libpthread.so.0 (0xb7d9d000)
/lib/ld-linux.so.2 (0xb7f2e000)
libattr.so.1 => /lib/libattr.so.1 (0xb7d98000)
libdl.so.2 => /lib/tls/libdl.so.2 (0xb7d94000)
libsepol.so.1 => /lib/libsepol.so.1 (0xb7d53000)
and put them in new-root/lib, aka /home/knoppix/Desktop/work/lib.
Simple enough. Well, almost. Ignore the linux-gate.so.1. It doesn't exist. It's a virtual library.
Then a
chroot /home/knoppix/Desktop/work
and I get a
bash-3.1# prompt.
Ok so in another root console I copy my unzipped "minirt" to the new-root as minirt_53de.
Then back in the new-root I execute...
cpio -i --list -I ./minirt_53de > minirt.lstcpio -imd --format=newc -I ./minirt_53detouch linuxrcSame size... same blocks count. Bingo.cpio -o --format=newc < minirt.lst > minirt_53de2
Any files you add to the minirt, just make sure to add them to the minirt.lst file...
and that way you won't add all the libs and binaries to the minirt when you rearchive.
Cheers
su
mkdir -p work/bin
DEST=`realpath ./work/bin`
SOURCE=/bin
for i in bash cp cpio login ls mkdir more mv rm rmdir sed sh touch; do cp $SOURCE/$i $DEST; done;
mkdir -p work/usr/bin
DEST=`realpath ./work/usr/bin`
SOURCE=/usr/bin
for i in find ldd strace ; do cp $SOURCE/$i $DEST; done;
mkdir -p work/lib/tls
DEST=`realpath ./work/lib/tls`
SOURCE=/lib/tls
for i in libBrokenLocale-2.3.6.so \
libBrokenLocale.so.1 \
libSegFault.so \
libanl-2.3.6.so \
libanl.so.1 \
libc-2.3.6.so \
libc.so.6 \
libcidn-2.3.6.so \
libcidn.so.1 \
libcrypt-2.3.6.so \
libcrypt.so.1 \
libdl-2.3.6.so \
libdl.so.2 \
libm-2.3.6.so \
libm.so.6 \
libmemusage.so \
libnsl-2.3.6.so \
libnsl.so.1 \
libnss_compat-2.3.6.so \
libnss_compat.so.2 \
libnss_dns-2.3.6.so \
libnss_dns.so.2 \
libnss_files-2.3.6.so \
libnss_files.so.2 \
libnss_hesiod-2.3.6.so \
libnss_hesiod.so.2 \
libnss_nis-2.3.6.so \
libnss_nis.so.2 \
libnss_nisplus-2.3.6.so \
libnss_nisplus.so.2 \
libpcprofile.so \
libpthread-2.3.6.so \
libpthread.so.0 \
libresolv-2.3.6.so \
libresolv.so.2 \
librt-2.3.6.so \
librt.so.1 \
libthread_db-1.0.so \
libthread_db.so.1 \
libutil-2.3.6.so \
libutil.so.1 ; do cp $SOURCE/$i $DEST; done;
DEST=`realpath ./work/lib`
SOURCE=/lib
for i in ld-2.3.6.so \
ld-linux.so.2 \
libacl.a \
libacl.la \
libacl.so \
libacl.so.1 \
libacl.so.1.1.0 \
libattr.a \
libattr.la \
libattr.so \
libattr.so.1 \
libattr.so.1.1.0 \
libc-2.3.6.so \
libc.so.6 \
libncurses.so.5 \
libncurses.so.5.5 \
libncursesw.so.5 \
libncursesw.so.5.5 \
libselinux.so.1 \
libsepol.so.1 ; do cp $SOURCE/$i $DEST; done;
DELL PowerEdge R730XD 24x 2.5" Server Dual 750W Dual Heatsink - BareBones TESTED
$269.99
Supermicro 4U 36 Bay Storage Server 2.4Ghz 8-C 128GB 1x1280W Rails TrueNAS ZFS
$712.98
CSE-118 Supermicro 1U 3x GPU Server 2.6Ghz 20-C 128GB CX353A 2x1600W PSU Rails
$454.03
Dell PowerEdge R630 8SFF 2.6Ghz 20-Core 128GB Mem 2x10G+2x1G NIC 2x750W PSU
$399.04
Intel Xeon E5-2697A V4 2.6GHz CPU Processor 16-Core Socket LGA2011 SR2K1
$39.99
Intel Xeon E5-2680 v4 2.4GHz 35MB 14-Core 120W LGA2011-3 SR2N7
$17.99
Intel Xeon Gold 6140 SR3AX 2.3GHz 18-Core Processor CPU
$39.99
Intel Xeon E5-2699v4 SR2JS 2.2GHz 22-Core 55MB 145W Server Processor CPU
$144.95
HP Workstation Z640 2x Xeon E5-2623V4 32GB Ram Dual 256GB SSD K420 Linux GA
$234.98
Dell Precision T5600/t5610 Xeon E5-2670 2.6Ghz 16GB DDR3 RAM NO HDD Nvidia
$90.00