roots to a per-process temporary file in /nix/var/nix/temproots while holding a write lock on that file. The garbage collector acquires read locks on all those files, thus blocking further progress in other Nix processes, and reads the sets of temporary roots.
		
			
				
	
	
		
			57 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
echo "NIX_STORE_DIR=$NIX_STORE_DIR NIX_DB_DIR=$NIX_DB_DIR"
 | 
						|
 | 
						|
test -n "$TEST_ROOT"
 | 
						|
if test -d "$TEST_ROOT"; then
 | 
						|
    chmod -R u+w "$TEST_ROOT"
 | 
						|
    rm -rf "$TEST_ROOT"
 | 
						|
fi
 | 
						|
mkdir "$TEST_ROOT"
 | 
						|
 | 
						|
mkdir "$NIX_STORE_DIR"
 | 
						|
mkdir "$NIX_DATA_DIR"
 | 
						|
mkdir "$NIX_LOG_DIR"
 | 
						|
mkdir "$NIX_STATE_DIR"
 | 
						|
mkdir "$NIX_DB_DIR"
 | 
						|
 | 
						|
mkdir $NIX_BIN_DIR
 | 
						|
ln -s $TOP/src/nix-store/nix-store $NIX_BIN_DIR/
 | 
						|
ln -s $TOP/src/nix-instantiate/nix-instantiate $NIX_BIN_DIR/
 | 
						|
ln -s $TOP/src/nix-hash/nix-hash $NIX_BIN_DIR/
 | 
						|
ln -s $TOP/scripts/nix-prefetch-url $NIX_BIN_DIR/
 | 
						|
ln -s $TOP/scripts/nix-collect-garbage $NIX_BIN_DIR/
 | 
						|
mkdir $NIX_BIN_DIR/nix
 | 
						|
ln -s $TOP/scripts/download-using-manifests.pl $NIX_BIN_DIR/nix/
 | 
						|
ln -s $TOP/scripts/readmanifest.pm $NIX_BIN_DIR/nix/
 | 
						|
 | 
						|
mkdir -p "$NIX_LOCALSTATE_DIR"/nix/manifests
 | 
						|
mkdir -p "$NIX_LOCALSTATE_DIR"/nix/gcroots
 | 
						|
mkdir -p "$NIX_LOCALSTATE_DIR"/log/nix
 | 
						|
mkdir -p "$NIX_LOCALSTATE_DIR"/temproots
 | 
						|
 | 
						|
mkdir $NIX_DATA_DIR/nix
 | 
						|
cp -prd $TOP/corepkgs $NIX_DATA_DIR/nix/
 | 
						|
# Bah, script has the prefix hard-coded.  This is really messy stuff
 | 
						|
# (and likely to fail).
 | 
						|
for i in \
 | 
						|
    $NIX_DATA_DIR/nix/corepkgs/nar/nar.sh \
 | 
						|
    $NIX_DATA_DIR/nix/corepkgs/fetchurl/builder.sh \
 | 
						|
    $NIX_BIN_DIR/nix/download-using-manifests.pl \
 | 
						|
    $NIX_BIN_DIR/nix-prefetch-url \
 | 
						|
    $NIX_BIN_DIR/nix-collect-garbage \
 | 
						|
    ; do
 | 
						|
    echo "$REAL_BIN_DIR"
 | 
						|
    sed < $i > $i.tmp \
 | 
						|
        -e "s^$REAL_BIN_DIR^$NIX_BIN_DIR^" \
 | 
						|
        -e "s^$REAL_LIBEXEC_DIR^$NIX_LIBEXEC_DIR^" \
 | 
						|
        -e "s^$REAL_LOCALSTATE_DIR^$NIX_LOCALSTATE_DIR^" \
 | 
						|
        -e "s^$REAL_DATA_DIR^$NIX_DATA_DIR^" \
 | 
						|
        -e "s^$REAL_STORE_DIR\([^/]\)^$NIX_STORE_DIR\1^"
 | 
						|
    mv $i.tmp $i
 | 
						|
    chmod +x $i
 | 
						|
done
 | 
						|
 | 
						|
# Initialise the database.
 | 
						|
$TOP/src/nix-store/nix-store --init
 | 
						|
 | 
						|
# Did anything happen?
 | 
						|
test -e "$NIX_DB_DIR"/validpaths
 |