e019265ec9
environment; that is, an operating system environment in which there is (essentially) only a store. The script `make-disk.sh' creates an ext2 disk image, creates a Nix store in it, and copies the closure of the bash package (from nixpkgs) to it. The script `run.sh' then starts bash in a UML virtual machine. The contents of the image after creation look like this: $ ls -l drwxr-xr-x 2 root root 1024 2004-02-14 19:13 dev lrwxrwxrwx 1 root root 61 2004-02-14 23:34 init -> /nix/store/e40873ece7a010752ad72b4262b23d28-bash-2.05b/bin/sh drwx------ 2 root root 12288 2004-02-14 19:13 lost+found drwxr-xr-x 4 root root 1024 2004-02-14 19:13 nix drwxr-xr-x 2 root root 1024 2004-02-14 19:13 proc drwxrwxrwt 2 root root 1024 2004-02-14 19:13 tmp The next step is to add all the other stuff that goes into a working system (coreutils, etc.). BTW, if you don't have `ls' you can still list directories by doing `echo *' :-) Nix itself should also be Nixified so that it can be put into the store. svn path=/nixu/trunk/; revision=783
35 lines
891 B
Bash
Executable file
35 lines
891 B
Bash
Executable file
#! /bin/sh -e
|
|
|
|
image=/tmp/disk.img
|
|
size=$(expr 256 \* 1024 \* 1024)
|
|
storepaths=/tmp/storepaths
|
|
successors=/tmp/successors
|
|
|
|
if ! test -f $image; then
|
|
|
|
echo creating empty disk of $size bytes in $image...
|
|
# Note: this is a sparse file.
|
|
dd if=/dev/zero of=$image bs=1 seek=$(expr $size - 1) count=1
|
|
|
|
echo creating disk image in $image...
|
|
/sbin/mke2fs -F $image
|
|
|
|
fi
|
|
|
|
|
|
# What to copy?
|
|
storeexpr=$(nix-instantiate ./bootstrap.nix)
|
|
nix-store -rB $storeexpr
|
|
nix-store -qn --requisites $storeexpr > $storepaths
|
|
|
|
(while read storepath; do
|
|
nix-store -q --predecessors $storepath | (while read predecessor; do
|
|
echo $predecessor $storepath
|
|
done)
|
|
done) < $storepaths > $successors
|
|
|
|
# Fill the disk with the minimal Nix store.
|
|
if ! test -d /tmp/mnt; then mkdir /tmp/mnt; fi
|
|
linux ubd0=$image root=/dev/root rootflags=/ rootfstype=hostfs init="$(pwd)/fill-disk.sh $storeexpr"
|
|
|