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;
Intel Xeon E3-1270 v6 3.80GHz 4 Cores SR326 LGA1151 CPU Processor
$46.00
Intel - Core i9-12900K Desktop Processor 16 (8P+8E) Cores up to 5.2 GHz Unloc...
$619.99
Intel - Core i7-12700K Desktop Processor 12 (8P+4E) Cores up to 5.0 GHz Unloc...
$419.99
Intel Core i5-8500 3 GHz 8 GT/s LGA 1151 Desktop CPU Processor SR3XE
$49.99
Intel - Core i9-14900K 14th Gen 24-Core 32-Thread - 4.4GHz (6.0GHz Turbo) Soc...
$619.99
Intel Xeon E5-2697A V4 2.6GHz CPU Processor 16-Core Socket LGA2011 SR2K1
$39.99
Intel - Core i7-14700K 14th Gen 20-Core 28-Thread - 4.3GHz (5.6GHz Turbo) Soc...
$444.99
Intel Core i5-12600KF Desktop Processor 10 (6P+4E) Cores up to 4.9 GHz Unlocked.
$145.59
Intel Core i5-12400 Desktop Processor With HeatSink
$139.99
Intel Core Computer Processors $60 each
$60.00