replace a lot of tools we initially use with statically linked versions.
This reduces the ramdisk installer size with a few megabytes when gzipped, but with about 40 MB when unpacked in memory. There are a few improvements possible: - strip the binaries. This saves another few MBs. - only copy the binaries we really need to /bin or /sbin. This could reduce the size of the installer a lot, especially with util-linux, of which we don't use that many tools at all. - try to move some packages we link with glibc right now (like util-linux) to dietlibc. This will not work for bash, already tried that. - try to use busybox as a replacement for everything. svn path=/nixu/trunk/; revision=4428
This commit is contained in:
parent
f130123af5
commit
fe355bba78
@ -9,9 +9,11 @@ for i in $boot $halt $login $env; do
|
||||
dst=$out/bin/$(basename $i | cut -c34-)
|
||||
sed \
|
||||
-e "s^@bash\@^$bash^g" \
|
||||
-e "s^@bashStatic\@^$bashStatic^g" \
|
||||
-e "s^@coreutils\@^$coreutils^g" \
|
||||
-e "s^@findutilsWrapper\@^$findutilsWrapper^g" \
|
||||
-e "s^@utillinux\@^$utillinux^g" \
|
||||
-e "s^@utillinuxStatic\@^$utillinuxStatic^g" \
|
||||
-e "s^@sysvinit\@^$sysvinit^g" \
|
||||
-e "s^@e2fsprogs\@^$e2fsprogs^g" \
|
||||
-e "s^@nettools\@^$nettools^g" \
|
||||
|
@ -1,4 +1,4 @@
|
||||
{ stdenv, kernel, bash, coreutils, findutilsWrapper, utillinux, sysvinit, e2fsprogs
|
||||
{ stdenv, kernel, bash, bashStatic, coreutils, findutilsWrapper, utillinux, utillinuxStatic, sysvinit, e2fsprogs
|
||||
, nettools, nix, subversion, gcc, wget, which, vim, less, screen, openssh
|
||||
, binutils, strace, shadowutils, iputils, gnumake, curl, gnused, gnugrep
|
||||
, gnutar, gzip, mingettyWrapper, grubWrapper, parted, module_init_tools, hotplug
|
||||
@ -12,7 +12,7 @@ derivation {
|
||||
halt = ./halt.sh;
|
||||
login = ./login.sh;
|
||||
env = ./env.sh;
|
||||
inherit stdenv kernel bash coreutils findutilsWrapper utillinux sysvinit
|
||||
inherit stdenv kernel bash bashStatic coreutils findutilsWrapper utillinux sysvinit
|
||||
e2fsprogs nettools nix subversion gcc wget which vim less screen
|
||||
openssh binutils strace shadowutils iputils gnumake curl gnused
|
||||
gnutar gnugrep gzip mingettyWrapper grubWrapper parted module_init_tools
|
||||
|
18
fill-disk.sh
18
fill-disk.sh
@ -1,6 +1,6 @@
|
||||
#! @bash@/bin/sh -e
|
||||
|
||||
export PATH=@bash@/bin:@coreutilsdiet@/bin:@coreutils@/bin:@findutils@/bin:@utillinux@/bin:@utillinux@/sbin:@e2fsprogs@/sbin:@grub@/sbin:@sysvinitPath@/sbin:@gnugrep@/bin:@which@/bin:@gnutar@/bin:@eject@/bin
|
||||
export PATH=@bash@/bin:@coreutilsdiet@/bin:@coreutils@/bin:@findutils@/bin:@utillinux@/bin:@utillinux@/sbin:@utilLinux@/bin:@utilLinux@/sbin:@e2fsprogs@/sbin:@grub@/sbin:@sysvinitPath@/sbin:@gnugrep@/bin:@which@/bin:@gnutar@/bin:@eject@/bin:@kudzu@/sbin
|
||||
|
||||
##
|
||||
## In the beginning we want to have a minimalistic environment, built with
|
||||
@ -194,6 +194,7 @@ mknod -m 0444 $root/dev/urandom c 1 9
|
||||
rm -f $root/etc/mtab
|
||||
ln -s /proc/mounts $root/etc/mtab
|
||||
|
||||
|
||||
## Probe for CD device which contains our CD here and mount /nix and
|
||||
## /nixpkgs from it inside the ramdisk. Anaconda uses kudzu for this.
|
||||
## Find out how Knoppix and SUSE do this...
|
||||
@ -221,6 +222,9 @@ echo switch to /nix and /nixpkgs from CD
|
||||
ln -s /cdrom/nixpkgs /nixpkgs
|
||||
mount --bind /cdrom/nix /nix
|
||||
|
||||
echo probing for hardware...
|
||||
|
||||
kudzu
|
||||
|
||||
export NIX_DATA_DIR=$root/nix/share
|
||||
export NIX_LOG_DIR=$root/nix/log/nix
|
||||
@ -228,6 +232,10 @@ export NIX_STATE_DIR=$root/nix/var/nix
|
||||
export NIX_CONF_DIR=$root/nix/etc
|
||||
NIX_CMD_PATH=@nix@/bin
|
||||
|
||||
echo bringing up networking...
|
||||
|
||||
nic=`kudzu -p | grep eth | sort | uniq | cut -d ' ' -f 2`
|
||||
|
||||
echo initialising Nix DB...
|
||||
$NIX_CMD_PATH/nix-store --init
|
||||
|
||||
@ -290,13 +298,15 @@ echo "#2:2345:respawn:$mingetty/sbin/mingetty tty2" >> $root/etc/inittab
|
||||
#echo "2:2345:respawn:$bootPath/bin/login.sh /dev/ttys/1" >> $root/etc/inittab
|
||||
|
||||
echo setting up networking information...
|
||||
|
||||
make_dir 00755 /etc/networking
|
||||
echo 192.168.150.1 > $root/etc/networking/local-ip
|
||||
echo 192.168.150.3 > $root/etc/networking/gateway-ip
|
||||
#cp /etc/resolv.conf $root/etc
|
||||
rm -f $root/etc/hosts
|
||||
echo "127.0.0.1 localhost" >> $root/etc/hosts
|
||||
#echo "192.168.150.1 uml" >> $root/etc/hosts
|
||||
|
||||
echo storing hardware information...
|
||||
|
||||
kudzu -p > $root/etc/sysconfig/hwconf
|
||||
|
||||
echo setting up initial account information...
|
||||
|
||||
|
62
make-disk.sh
62
make-disk.sh
@ -53,10 +53,10 @@ do
|
||||
tar -cf - $i | tar --directory=$archivesDir -xf -
|
||||
done
|
||||
|
||||
utilLinux=$($NIX_CMD_PATH/nix-store -qR $(nix-store -r $(echo '(import ./pkgs.nix).utillinux' | $NIX_CMD_PATH/nix-instantiate -)))
|
||||
utilLinux=$(nix-store -r $(echo '(import ./pkgs.nix).utillinuxStatic' | $NIX_CMD_PATH/nix-instantiate -))
|
||||
coreUtilsDiet=$($NIX_CMD_PATH/nix-store -qR $(nix-store -r $(echo '(import ./pkgs.nix).coreutilsDiet' | $NIX_CMD_PATH/nix-instantiate -)))
|
||||
e2fsProgs=$($NIX_CMD_PATH/nix-store -qR $(nix-store -r $(echo '(import ./pkgs.nix).e2fsprogsDiet' | $NIX_CMD_PATH/nix-instantiate -)))
|
||||
modUtils=$($NIX_CMD_PATH/nix-store -qR $(nix-store -r $(echo '(import ./pkgs.nix).module_init_tools' | $NIX_CMD_PATH/nix-instantiate -)))
|
||||
modUtils=$($NIX_CMD_PATH/nix-store -qR $(nix-store -r $(echo '(import ./pkgs.nix).module_init_toolsStatic' | $NIX_CMD_PATH/nix-instantiate -)))
|
||||
Grub=$($NIX_CMD_PATH/nix-store -qR $(nix-store -r $(echo '(import ./pkgs.nix).grubWrapper' | $NIX_CMD_PATH/nix-instantiate -)))
|
||||
#gnuSed=$($NIX_CMD_PATH/nix-store -qR $(nix-store -r $(echo '(import ./pkgs.nix).gnused' | $NIX_CMD_PATH/nix-instantiate -)))
|
||||
#gnuGrep=$($NIX_CMD_PATH/nix-store -qR $(nix-store -r $(echo '(import ./pkgs.nix).gnugrep' | $NIX_CMD_PATH/nix-instantiate -)))
|
||||
@ -64,13 +64,14 @@ Kernel=$($NIX_CMD_PATH/nix-store -qR $(nix-store -r $(echo '(import ./pkgs.nix).
|
||||
SysVinit=$($NIX_CMD_PATH/nix-store -qR $(nix-store -r $(echo '(import ./pkgs.nix).sysvinit' | $NIX_CMD_PATH/nix-instantiate -)))
|
||||
BootPath=$($NIX_CMD_PATH/nix-store -qR $(nix-store -r $(echo '(import ./pkgs.nix).boot' | $NIX_CMD_PATH/nix-instantiate -)))
|
||||
|
||||
bash=$($NIX_CMD_PATH/nix-store -q $(echo '(import ./pkgs.nix).bash' | $NIX_CMD_PATH/nix-instantiate -))
|
||||
#bash=$($NIX_CMD_PATH/nix-store -q $(echo '(import ./pkgs.nix).bash' | $NIX_CMD_PATH/nix-instantiate -))
|
||||
bash=$($NIX_CMD_PATH/nix-store -q $(echo '(import ./pkgs.nix).bashStatic' | $NIX_CMD_PATH/nix-instantiate -))
|
||||
coreutilsdiet=$($NIX_CMD_PATH/nix-store -q $(echo '(import ./pkgs.nix).coreutilsDiet' | $NIX_CMD_PATH/nix-instantiate -))
|
||||
coreutils=$($NIX_CMD_PATH/nix-store -q $(echo '(import ./pkgs.nix).coreutils' | $NIX_CMD_PATH/nix-instantiate -))
|
||||
findutils=$($NIX_CMD_PATH/nix-store -q $(echo '(import ./pkgs.nix).findutilsWrapper' | $NIX_CMD_PATH/nix-instantiate -))
|
||||
utillinux=$($NIX_CMD_PATH/nix-store -q $(echo '(import ./pkgs.nix).utillinux' | $NIX_CMD_PATH/nix-instantiate -))
|
||||
e2fsprogs=$($NIX_CMD_PATH/nix-store -q $(echo '(import ./pkgs.nix).e2fsprogsDiet' | $NIX_CMD_PATH/nix-instantiate -))
|
||||
modutils=$($NIX_CMD_PATH/nix-store -q $(echo '(import ./pkgs.nix).module_init_tools' | $NIX_CMD_PATH/nix-instantiate -))
|
||||
modutils=$($NIX_CMD_PATH/nix-store -q $(echo '(import ./pkgs.nix).module_init_toolsStatic' | $NIX_CMD_PATH/nix-instantiate -))
|
||||
grub=$($NIX_CMD_PATH/nix-store -r $(echo '(import ./pkgs.nix).grubWrapper' | $NIX_CMD_PATH/nix-instantiate -))
|
||||
mingettyWrapper=$($NIX_CMD_PATH/nix-store -r $(echo '(import ./pkgs.nix).mingettyWrapper' | $NIX_CMD_PATH/nix-instantiate -))
|
||||
hotplug=$($NIX_CMD_PATH/nix-store -r $(echo '(import ./pkgs.nix).hotplug' | $NIX_CMD_PATH/nix-instantiate -))
|
||||
@ -82,22 +83,23 @@ which=$($NIX_CMD_PATH/nix-store -r $(echo '(import ./pkgs.nix).which' | $NIX_CMD
|
||||
gnutar=$($NIX_CMD_PATH/nix-store -r $(echo '(import ./pkgs.nix).gnutar' | $NIX_CMD_PATH/nix-instantiate -))
|
||||
eject=$($NIX_CMD_PATH/nix-store -r $(echo '(import ./pkgs.nix).eject' | $NIX_CMD_PATH/nix-instantiate -))
|
||||
sysklogd=$($NIX_CMD_PATH/nix-store -r $(echo '(import ./pkgs.nix).sysklogd' | $NIX_CMD_PATH/nix-instantiate -))
|
||||
kudzu=$($NIX_CMD_PATH/nix-store -r $(echo '(import ./pkgs.nix).kudzu' | $NIX_CMD_PATH/nix-instantiate -))
|
||||
|
||||
#(while read storepath; do
|
||||
#cp -fa --parents ${storepath} ${archivesDir}
|
||||
#done) < $storePaths
|
||||
|
||||
echo utillinux $utilLinux
|
||||
#echo utillinux $utilLinux
|
||||
|
||||
for i in $utilLinux; do
|
||||
echo i $i
|
||||
deps=( $($NIX_CMD_PATH/nix-store -q --references $i) )
|
||||
echo length ${#deps[@]}
|
||||
if test "${#deps[@]}" = 0
|
||||
then
|
||||
echo zarro
|
||||
fi
|
||||
done
|
||||
#for i in $utilLinux; do
|
||||
# echo i $i
|
||||
# deps=( $($NIX_CMD_PATH/nix-store -q --references $i) )
|
||||
# echo length ${#deps[@]}
|
||||
# if test "${#deps[@]}" = 0
|
||||
# then
|
||||
# echo zarro
|
||||
# fi
|
||||
#done
|
||||
|
||||
echo creating directories for bootimage
|
||||
|
||||
@ -106,6 +108,7 @@ mkdir ${initdir}/bin
|
||||
mkdir ${initdir}/cdrom
|
||||
mkdir ${initdir}/dev
|
||||
mkdir ${initdir}/etc
|
||||
mkdir ${initdir}/etc/sysconfig
|
||||
mkdir ${initdir}/installimage
|
||||
mkdir ${initdir}/modules
|
||||
mkdir ${initdir}/proc
|
||||
@ -138,7 +141,7 @@ cp -fa ${nixpkgs} ${archivesDir}
|
||||
#cp -fvau --parents ${nano} ${archivesDir}
|
||||
#cp -fvau --parents ${gnutar} ${archivesDir}
|
||||
|
||||
bashdeps=$($NIX_CMD_PATH/nix-store -qR $(nix-store -r $(echo '(import ./pkgs.nix).bash' | $NIX_CMD_PATH/nix-instantiate -)))
|
||||
bashdeps=$($NIX_CMD_PATH/nix-store -qR $(nix-store -r $(echo '(import ./pkgs.nix).bashStatic' | $NIX_CMD_PATH/nix-instantiate -)))
|
||||
|
||||
echo copying scripts
|
||||
|
||||
@ -155,6 +158,7 @@ sed -e "s^@sysvinitPath\@^$sysvinitPath^g" \
|
||||
-e "s^@findutils\@^$findutils^g" \
|
||||
-e "s^@coreutilsdiet\@^$coreutilsdiet^g" \
|
||||
-e "s^@coreutils\@^$coreutils^g" \
|
||||
-e "s^@utilLinux\@^$utilLinux^g" \
|
||||
-e "s^@utillinux\@^$utillinux^g" \
|
||||
-e "s^@e2fsprogs\@^$e2fsprogs^g" \
|
||||
-e "s^@modutils\@^$modutils^g" \
|
||||
@ -163,7 +167,7 @@ sed -e "s^@sysvinitPath\@^$sysvinitPath^g" \
|
||||
-e "s^@hotplug\@^$hotplug^g" \
|
||||
-e "s^@gnugrep\@^$gnugrep^g" \
|
||||
-e "s^@which\@^$which^g" \
|
||||
-e "s^@eject\@^$eject^g" \
|
||||
-e "s^@kudzu\@^$kudzu^g" \
|
||||
-e "s^@sysklogd\@^$sysklogd^g" \
|
||||
-e "s^@gnutar\@^$gnutar^g" \
|
||||
-e "s^@mingetty\@^$mingettyWrapper^g" \
|
||||
@ -177,7 +181,7 @@ sed -e "s^@sysvinitPath\@^$sysvinitPath^g" \
|
||||
-e "s^@findutils\@^$findutils^g" \
|
||||
-e "s^@coreutilsdiet\@^$coreutilsdiet^g" \
|
||||
-e "s^@coreutils\@^$coreutils^g" \
|
||||
-e "s^@utillinux\@^$utillinux^g" \
|
||||
-e "s^@utillinux\@^$utilLinux^g" \
|
||||
-e "s^@e2fsprogs\@^$e2fsprogs^g" \
|
||||
-e "s^@modutils\@^$modutils^g" \
|
||||
-e "s^@grub\@^$grub^g" \
|
||||
@ -203,6 +207,10 @@ echo copying kernel
|
||||
# of the kernel here.
|
||||
cp -L $kernel/vmlinuz ${archivesDir}/isolinux
|
||||
|
||||
echo linking kernel modules
|
||||
|
||||
ln -s $kernel/lib $archivesDir/lib
|
||||
|
||||
echo creating ramdisk
|
||||
|
||||
rm -f ${initrd}
|
||||
@ -210,16 +218,24 @@ rm -f ${initrd}
|
||||
cp ${archivesDir}/scripts/fill-disk.sh ${initdir}/
|
||||
cp ${archivesDir}/scripts/ramdisk-login.sh ${initdir}/
|
||||
cp ${archivesDir}/scripts/init.sh ${initdir}/init
|
||||
ln -s ${bash}/bin/bash ${initdir}/bin/sh
|
||||
#ln -s ${bash}/bin/bash ${initdir}/bin/sh
|
||||
cp ${bash}/bin/bash ${initdir}/bin/sh
|
||||
chmod u+x ${initdir}/init
|
||||
chmod u+x ${initdir}/fill-disk.sh
|
||||
chmod u+x ${initdir}/ramdisk-login.sh
|
||||
cp -fau --parents ${bashdeps} ${initdir}
|
||||
#cp -fau --parents ${bashdeps} ${initdir}
|
||||
#cp -fau --parents ${utilLinux} ${initdir}
|
||||
#cp -fau --parents ${coreUtilsDiet} ${initdir}
|
||||
#cp -fau --parents ${e2fsProgs} ${initdir}
|
||||
#cp -fau --parents ${modUtils} ${initdir}
|
||||
#cp -fau --parents ${hotplug} ${initdir}
|
||||
cp -fau --parents ${bash} ${initdir}
|
||||
cp -fau --parents ${utilLinux} ${initdir}
|
||||
cp -fau --parents ${coreUtilsDiet} ${initdir}
|
||||
cp -fau --parents ${e2fsProgs} ${initdir}
|
||||
cp -fau --parents ${modUtils} ${initdir}
|
||||
cp -fau --parents ${coreutilsdiet} ${initdir}
|
||||
cp -fau --parents ${e2fsprogs} ${initdir}
|
||||
cp -fau --parents ${modutils} ${initdir}
|
||||
cp -fau --parents ${hotplug} ${initdir}
|
||||
#cp -fau --parents ${kudzu} ${initdir}
|
||||
#cp -fau --parents ${eject} ${initdir}
|
||||
|
||||
touch ${archivesDir}/NIXOS
|
||||
@ -243,4 +259,4 @@ mkisofs -rJ -o ${bootiso} -b isolinux/isolinux.bin -c isolinux/boot.cat \
|
||||
echo cleaning up
|
||||
|
||||
chmod -f -R +w ${archivesDir}/*
|
||||
rm -rf ${archivesDir}/*
|
||||
#rm -rf ${archivesDir}/*
|
||||
|
14
pkgs.nix
14
pkgs.nix
@ -1,21 +1,21 @@
|
||||
rec {
|
||||
inherit (import /nixpkgs/trunk/pkgs/system/i686-linux.nix)
|
||||
stdenv kernel bash coreutils coreutilsDiet findutilsWrapper utillinux sysvinit
|
||||
stdenv kernel bash bashStatic coreutils coreutilsDiet findutilsWrapper utillinux utillinuxStatic sysvinit
|
||||
e2fsprogsDiet e2fsprogs
|
||||
nettools nix subversion gcc wget which vim less screen openssh binutils
|
||||
strace shadowutils iputils gnumake curl gnused gnutar gnugrep gzip
|
||||
mingettyWrapper grubWrapper syslinux parted module_init_tools hotplug udev
|
||||
dhcpWrapper man nano eject sysklogd;
|
||||
mingettyWrapper grubWrapper syslinux parted module_init_tools module_init_toolsStatic hotplug udev
|
||||
dhcpWrapper man nano eject sysklogd kudzu;
|
||||
|
||||
boot = (import ./boot) {inherit stdenv kernel bash coreutils findutilsWrapper
|
||||
utillinux sysvinit e2fsprogs nettools nix subversion gcc wget which vim
|
||||
boot = (import ./boot) {inherit stdenv kernel bash bashStatic coreutils findutilsWrapper
|
||||
utillinux utillinuxStatic sysvinit e2fsprogs nettools nix subversion gcc wget which vim
|
||||
less screen openssh binutils strace shadowutils iputils gnumake curl
|
||||
gnused gnutar gnugrep gzip mingettyWrapper grubWrapper parted module_init_tools
|
||||
hotplug udev dhcpWrapper man nano;};
|
||||
|
||||
init = (import ./init) {inherit stdenv bash coreutilsDiet utillinux e2fsprogsDiet
|
||||
init = (import ./init) {inherit stdenv bash bashStatic coreutilsDiet utillinux e2fsprogsDiet
|
||||
nix shadowutils mingettyWrapper grubWrapper parted module_init_tools hotplug
|
||||
dhcpWrapper man nano eject;};
|
||||
|
||||
everything = [boot sysvinit kernel sysklogd];
|
||||
everything = [boot sysvinit kernel sysklogd kudzu];
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user