> I learned enough about scheme and guix to boot the install cd like a
> live cd where you can eject it and keep using it in tmpfs
>
> 1. I modify the kernel parameters in grub to change gnu.load to
> gnu_load so that guix gives a diagnostic guile repl after mounting the
> cd rather than booting
> 2. In the repl I go something like:
> (define dirs (map (lambda (dir) (string-append "/gnu/store/" dir))
> (scandir "/real-root/gnu/store")))
> To assign a list of all the store objects on the cd to dirs
> then something like
> (for-each (lambda (dir) (if (not (access? dir 0)) (symlink
> (string-append "/real-root" dir) dir))) dirs)
> to symlink everything in the cd's store into the initrd
> 3. Then I drop into bash with such like:
> ,bournish
> cat /proc/cmdline
> cd /gnu/store/gnu_loadpathcopiedfromkernelcmdline-system/profile
> bin/bash
> export PATH=$(pwd)/sbin:$(pwd)/bin
>
> and now I can use all the installed binaries on the cd before the
> system is booted, in bash. But there are no ptys or anything yet.
> 4. In bash I remove the install cd overlay and replace it with a tmpfs root:
> umount /root
> mount -t tmpfs -osize=$((here I calculate a high fraction of total
> ram)) none /root
> cd /real-root
> ls
> cp -va bin var tmp home /root # and any other dirs needed but not gnu
> cp --one-file-system -va /rw-root/upper/. /root/.
> mount --move /rw-root/upper/dev /root/dev
> umount /rw-root
> rm -rf /rw-root
> mkdir -p /root/gnu/store
> cd gnu/store
> find -maxdepth 1 \! -type d; du --maxdepth=1 | sort -n | head 380
> # here I make sure glibc is in the output and adjust head 380 if
> needed. The kernel and modules for example don't need to be copied if
> ram is tight.
> cp -van $( {
Oops hit send from pseudopalsy

cp -va $( { find -max depth 1 \! -type d; du --max-depth=1 | sort -n |
| head 380 | cut -f2-; } | sort ) /root/gnu/store
# the final sort abovr makes the copy very fast by ordering the files
the same as they are held on the iso
mkdir /root/mnt/cdrom
mount /dev/sr0 /root/mnt/chrome
cd /root/gnu/store
ln -s ../../mnt/cdrom/gnu/store/* # symlink anything left, ignore errors
cd /gnu/store
ln -sf /root/gnu/store/* . # replace symlinks made in scheme with ones
to tmpfs, ignore errors

whew ... then I guess I leave bash because it's running off the cd,
then go back in off the tmpfs. As well as mounting proc and sys within
/root . Then you can continue the boot in scheme with something like
(starting in bournish)
,L scheme
(........

Reply via email to