#!/bin/sh

# housekeeping
mkdir -p /image
ln -sf /proc/mounts /etc/mtab
mv -f -- /etc/inittab.rescue /etc/inittab
sed -i -e '/^[456]:/d' /etc/inittab
sed -i \
    -e '/--[[:blank:]]"\/tmp\/root$1"/d' \
    -e 's@^\(.\+\)mount -n -tunionfs.\+$@\1(cd $1 \&\& tar cp . 2> /dev/null)|(mount -n -ttmpfs tmpfs $1 \&\& tar xm -C $1)@' \
    -e 's@^\(for mpoint in\).\+$@\1 /var/lib/dhcp /var/lib/nfs /var/lock/subsys /var/run /root; do@' \
    -e 's@/etc/fstab@/dev/null@g' \
    -e 's@BANNER=.\+$@BANNER="ALT Linux (netinst)"@' \
    -e '/\/etc\/HOSTNAME/d' /etc/rc.d/rc.sysinit.rescue

sed -i '/To restore/d' /usr/bin/rescue-shell

cat << EOF > /etc/rc.d/rc.local
#!bin/sh
# kick mountd
mount -n -t nfs 172.16.31.1:/image /mnt
umount /mnt
EOF
chmod +x /etc/rc.d/rc.local

touch /etc/issue /etc/issue.net

# remove all docs
rm -rf /usr/share/{doc,man,info,license,gfxboot}

# remove unneeded kernel modules
rm -rf /lib/modules/*/kernel/arch
rm -rf /lib/modules/*/kernel/crypto
rm -rf /lib/modules/*/kernel/drivers/atm
rm -rf /lib/modules/*/kernel/drivers/char/watchdog
rm -rf /lib/modules/*/kernel/drivers/cpufreq
rm -rf /lib/modules/*/kernel/drivers/edac
rm -rf /lib/modules/*/kernel/drivers/firmware
rm -rf /lib/modules/*/kernel/drivers/hwmon
rm -rf /lib/modules/*/kernel/drivers/infiniband
rm -rf /lib/modules/*/kernel/drivers/input/{gameport,joy*}
rm -rf /lib/modules/*/kernel/drivers/isdn
rm -rf /lib/modules/*/kernel/drivers/media
rm -rf /lib/modules/*/kernel/drivers/mmc
rm -rf /lib/modules/*/kernel/drivers/mtd*
rm -rf /lib/modules/*/kernel/drivers/net/irda
rm -rf /lib/modules/*/kernel/drivers/rtc
rm -rf /lib/modules/*/kernel/drivers/spi
rm -rf /lib/modules/*/kernel/drivers/telephony
rm -rf /lib/modules/*/kernel/drivers/usb/{misc,mon}
rm -rf /lib/modules/*/kernel/drivers/video
rm -rf /lib/modules/*/kernel/drivers/w1
rm -rf /lib/modules/*/kernel/fs/quota*
rm -rf /lib/modules/*/kernel/fs/9p
rm -rf /lib/modules/*/kernel/fs/adfs
rm -rf /lib/modules/*/kernel/fs/affs
rm -rf /lib/modules/*/kernel/fs/afs
rm -rf /lib/modules/*/kernel/fs/autofs
rm -rf /lib/modules/*/kernel/fs/autofs4
rm -rf /lib/modules/*/kernel/fs/befs
rm -rf /lib/modules/*/kernel/fs/bfs
rm -rf /lib/modules/*/kernel/fs/cifs
rm -rf /lib/modules/*/kernel/fs/coda
rm -rf /lib/modules/*/kernel/fs/configfs
rm -rf /lib/modules/*/kernel/fs/cramfs
rm -rf /lib/modules/*/kernel/fs/efs
rm -rf /lib/modules/*/kernel/fs/freevxfs
rm -rf /lib/modules/*/kernel/fs/fuse
rm -rf /lib/modules/*/kernel/fs/hfs
rm -rf /lib/modules/*/kernel/fs/hfsplus
rm -rf /lib/modules/*/kernel/fs/hpfs
rm -rf /lib/modules/*/kernel/fs/jffs
rm -rf /lib/modules/*/kernel/fs/jffs2
rm -rf /lib/modules/*/kernel/fs/minix
rm -rf /lib/modules/*/kernel/fs/ncpfs
rm -rf /lib/modules/*/kernel/fs/ocfs2
rm -rf /lib/modules/*/kernel/fs/qnx4
rm -rf /lib/modules/*/kernel/fs/smbfs
rm -rf /lib/modules/*/kernel/fs/sysv
rm -rf /lib/modules/*/kernel/fs/udf
rm -rf /lib/modules/*/kernel/fs/ufs
rm -rf /lib/modules/*/kernel/net/*/netfilter
rm -rf /lib/modules/*/kernel/net/appletalk
rm -rf /lib/modules/*/kernel/net/ax25
rm -rf /lib/modules/*/kernel/net/bluetooth
rm -rf /lib/modules/*/kernel/net/bridge
rm -rf /lib/modules/*/kernel/net/dccp
rm -rf /lib/modules/*/kernel/net/decnet
rm -rf /lib/modules/*/kernel/net/econet
rm -rf /lib/modules/*/kernel/net/ipv6
rm -rf /lib/modules/*/kernel/net/ipx
rm -rf /lib/modules/*/kernel/net/irda
rm -rf /lib/modules/*/kernel/net/netfilter
rm -rf /lib/modules/*/kernel/net/netrom
rm -rf /lib/modules/*/kernel/net/rose
rm -rf /lib/modules/*/kernel/net/sctp
rm -rf /lib/modules/*/kernel/net/tipc
rm -rf /lib/modules/*/kernel/net/x25
rm -rf /lib/modules/*/kernel/sound

# remove blacklisted kernel modules
sed -n 's/^blacklist[[:space:]]\+\([^[:space:]]\+\).*/\1/p' /etc/modprobe.d/* |
	while read i; do
		/.host/find /lib/modules/ -type f -name "$i.ko" -delete
	done

# remove rpm db
rm -rf /var/lib/rpm/*

# remove apt data files
rm -rf /var/cache/apt /var/lib*/apt

# run depmod
for i in /lib*/modules/*; do
    /sbin/depmod -a -F /boot/System.map-${i##*/} ${i##*/}
done

# remove kernel images
rm -rf /boot/*

# networking
sed -i \
    -e 's/^HOSTNAME=.\+$/HOSTNAME=netinst.local/' \
    -e 's/^DOMAINNAME=.\+$/DOMAINNAME=local/' /etc/sysconfig/network
echo netinst.local > /etc/HOSTNAME

# fill hosts
echo -e '127.0.0.1\tlocalhost.localdomain\tlocalhost' > /etc/hosts
echo -e '172.16.31.1\tnetinst.local\tnetinst' >> /etc/hosts
for i in `seq 2 126`; do echo -e "172.16.31.$i\tpc$i.local\tpc$i" >> /etc/hosts; done

# resolver
sed -i 's/^hosts:.\+$/hosts: files/' /etc/nsswitch.conf

# enable/disable few services
chkconfig crond off
chkconfig gssd off
chkconfig idmapd off
chkconfig ifrename off
chkconfig netfs off
chkconfig nfslock off
chkconfig rawdevices off
chkconfig sysreport off

chkconfig portmap on
chkconfig tftp on

# configure eth0 somehow
mkdir -p /etc/net/ifaces/eth0
echo 172.16.31.1/25 > /etc/net/ifaces/eth0/ipv4address

# syslog
sed -i "s/^SYSLOGD_OPTIONS=.\+/SYSLOGD_OPTIONS='-u syslogd -j /var/resolv -r'" /etc/sysconfig/syslogd
cat <<EOF > /etc/syslog.conf
*.emerg		*
*.*		/dev/tty4
EOF

# nfs
echo '/image -ro,async,no_root_squash,no_subtree_check 172.16.31.0/25' > /etc/exports

# dhcpd
cat <<EOF > /etc/dhcp/dhcpd.conf
ddns-update-style none;
subnet 172.16.31.0 netmask 255.255.255.128 {
    option subnet-mask      255.255.255.128;
    option root-path        "/image";
    option log-servers      172.16.31.1;
    next-server             172.16.31.1;
    filename                "pxelinux.0";
    range dynamic-bootp     172.16.31.2 172.16.31.126;
    default-lease-time 21600;
    max-lease-time 43200;
}
EOF

# xinetd
sed -i 's,^.\+only_from.\+$,& 172.16.31.0/25,' /etc/xinetd.conf

# tftp
sed -i -e 's,var/lib/tftpboot,image/isolinux,' /etc/xinetd.d/tftp

# and pxelinux
mkdir -p /.isolinux/pxelinux.cfg
cp -f /usr/lib/syslinux/pxelinux.0 /usr/share/gpxe/gpxe.dsk /usr/share/gpxe/gpxe.usb /.isolinux/
cat <<EOF > /.isolinux/pxelinux.cfg/default
default linux
prompt 1
timeout 30

label linux
  kernel alt0/vmlinuz
  append initrd=alt0/full.cz xdriver=auto ramdisk_size=65536 lang=ru_RU vga=0x314 splash=silent splashcount=17 showopts automatic=method:nfs,network:dhcp
EOF

update_chrooted all
