#!/bin/sh

usage () {
    echo "$0: <rpm-tree>" 2>&1
    exit 1
}

SILOROOT=/tmp/updboots-silo-$$

export PATH=/sbin:$PATH
q=--quiet

if [ -z "$1" -o ! -f $1/silo-*.sparc.rpm ]; then
    usage
fi

LIBS=""

SBIN='../anaconda/loader/loader ../anaconda/loader/init'

rm -rf initrd
mkdir -p initrd/dev
mkdir -p initrd/etc
mkdir -p initrd/sbin
mkdir -p initrd/dev/pts

cat > initrd/etc/passwd << EOF
root::0:0:root:/:/bin/bash
EOF

rm -rf $SILOROOT
mkdir -p $SILOROOT

rpm2cpio $1/silo-*.sparc.rpm | (cd $SILOROOT; cpio --quiet -id)
mv -f $SILOROOT/sbin/silo .
for arch in 32 64; do
rm -rf boot$arch
mkdir boot$arch
cp -a $SILOROOT/boot/{fd,second}.b boot$arch/
cat > boot$arch/silo.conf <<EOF
partition=1
root=/dev/fd0
default=linux
read-write
timeout=100
message=/boot.msg
image="cat /boot.msg"
	label=1
	single-key
image="cat /general.msg"
	label=2
	single-key
image="cat /expert.msg"
	label=3
	single-key
image="cat /rescue.msg"
	label=4
	single-key
image="cat /kickit.msg"
	label=5
	single-key
image="cat /param.msg"
	label=6
	single-key
image=/vmlinux$arch.gz
        label=linux
        alias=install
	initrd=/initrd$arch.img
image=/vmlinux$arch.gz
        label=text
        append=text
	initrd=/initrd$arch.img
image=/vmlinux$arch.gz
        label=expert
        append=expert
	initrd=/initrd$arch.img
image=/vmlinux$arch.gz
        label=ks
        append=ks
	initrd=/initrd$arch.img
EOF
cp -a etc/*.msg boot$arch/
done

cat > initrd/etc/passwd << EOF
root::0:0:root:/:/bin/bash
EOF

cp -a keymaps/keymaps.gz initrd/etc
cp -a fonts.cgz initrd/etc
cp -a ../anaconda/loader/loader.tr initrd/etc
cp -a ../anaconda/lang-table initrd/etc

mkdir -p initrd/etc/terminfo/l
cp /usr/share/terminfo/l/linux initrd/etc/terminfo/l/linux

for n in $SBIN; do
    file=`eval echo $n`
    cp -f $file initrd/sbin
done

ln -s loader initrd/sbin/insmod
ln -s loader initrd/sbin/rmmod
ln -s loader initrd/sbin/modprobe

ln -s /usr/bin/sh initrd/sbin/sh

#mkdir -p initrd/usr/lib/rpm
#rm -f initrd/usr/lib/rpm/rpmrc
#cp -ar /usr/lib/rpm/rpmrc initrd/usr/lib/rpm/rpmrc

ln -sf /sbin/init initrd/linuxrc

rm -f initrd/etc/mtab
ln -sf /proc/mounts initrd/etc/mtab

mknod initrd/dev/console c 5 1
chmod 600 initrd/dev/console

mknod initrd/dev/psaux c 10 1
chmod 644 initrd/dev/psaux

mknod initrd/dev/sunmouse c 10 6
chmod 644 initrd/dev/sunmouse

mknod initrd/dev/openprom c 10 139
chmod 644 initrd/dev/openprom

mknod initrd/dev/null c 1 3
chmod 666 initrd/dev/null

mknod initrd/dev/zero c 1 5
chmod 666 initrd/dev/zero

# mkraid needs this
mknod initrd/dev/md0 b 9 0
chmod 644 initrd/dev/md0

mknod initrd/dev/mem c 1 1
chmod 600 initrd/dev/mem

mknod initrd/dev/ram b 1 1
chmod 640 initrd/dev/ram

mknod initrd/dev/ptmx c 5 2
chmod 666 initrd/dev/ptmx

mknod initrd/dev/rtc c 10 135
chmod 664 initrd/dev/rtc

for i in 0 1 2 3 4 5 6 7; do
    mknod initrd/dev/fb$i c 29 `expr $i \* 32`
    chmod 600 initrd/dev/fb$i
done

ln -s fb0 initrd/dev/fb

for TTY in 0 1 2 3 4 5 6 7; do
    mknod initrd/dev/tty$TTY c 4 $TTY
    chmod 600 initrd/dev/tty$TTY
    chown root:tty initrd/dev/tty$TTY
done

mknod initrd/dev/kbd c 11 0
chmod 600 initrd/dev/kbd

mkdir -p initrd/proc
mkdir -p initrd/tmp
mkdir -p initrd/lost+found
ln -s sbin initrd/bin

cat > initrd/.profile << EOF
PATH=/bin:/usr/bin:/usr/sbin:/usr/X11R6/bin:/mnt/sysimage/sbin:/mnt/sysimage/usr/sbin:/mnt/sysimage/bin:/mnt/sysimage/usr/bin
export PATH
EOF

for l in `find $p -exec file {} \; | sed -n 's/^\([^:]*\):.*ELF.*$/\1/p'`; do
    # Strip dwarf stuff, symbols and unneeded not-alloced sections
    strip $l -R .comment -R .note `objdump -h $l | \
	sed -n 's/^.*\(\.gnu\.warning\.[^ ]*\) .*$/-R \1/p'`
done

# Prepare the CD boot
rm -rf ../../../boot
rm -rf ../../../etc
mkdir ../../../boot ../../../etc
cp -a $SILOROOT/boot/{cd,second}.b ../../../boot
cat > ../../../etc/silo.conf <<EOF
partition=1
default=linux
read-write
timeout=100
message=/etc/boot.msg
image="cat /etc/boot.msg"
	label=1
	single-key
image="cat /etc/general.msg"
	label=2
	single-key
image="cat /etc/expert.msg"
	label=3
	single-key
image="cat /etc/rescue.msg"
	label=4
	single-key
image="cat /etc/kickit.msg"
	label=5
	single-key
image="cat /etc/param.msg"
	label=6
	single-key
image[sun4u]=/boot/vmlinux64.gz
        label=linux
        alias=install
	initrd=/boot/initrd64.img
image[sun4c,sun4d,sun4m]=/boot/vmlinux32.gz
        label=linux
        alias=install
	initrd=/boot/initrd32.img
image[sun4u]=/boot/vmlinux64.gz
        label=text
        append=text
	initrd=/boot/initrd64.img
image[sun4c,sun4d,sun4m]=/boot/vmlinux32.gz
        label=text
        append=text
	initrd=/boot/initrd32.img
image[sun4u]=/boot/vmlinux64.gz
        label=expert
        append=expert
	initrd=/boot/initrd64.img
image[sun4c,sun4d,sun4m]=/boot/vmlinux32.gz
        label=expert
        append=expert
	initrd=/boot/initrd32.img
image[sun4u]=/boot/vmlinux64.gz
        label=ks
        append=ks
	initrd=/boot/initrd64.img
image[sun4c,sun4d,sun4m]=/boot/vmlinux32.gz
        label=ks
        append=ks
	initrd=/boot/initrd32.img
EOF
cp -a etc/*.msg ../../../etc/

rm -rf $SILOROOT
