#!/bin/busybox sh
stop()
{
log_error "$1"
while true; do
/bin/sh
done
}
read_config()
{
file=$1
[ -f $file ] || stop "missing config file ('$file')"
cp $file /tmp/rc.$$
dtou -s /tmp/rc.$$
. /tmp/rc.$$
rm /tmp/rc.$$
}
rename_ln()
{
mv /bin/ln /bin/ln.real
cat <<-EOF > /bin/ln
        #! /bin/sh
        param="\$*"
        . /etc/boot.d/base-helper
        case \$1 in
            -s) shift ;;
        esac
        case \$2 in
            /*) path=\$2 ;;
            *)  path=\`pwd\`/\$2 ;;
        esac
        case \$path in
            /opt/*)
                SCRIPT=\$script
                log_error "trying to create link in wrong location (ln \$param), please fix this (maybe by removing /opt prefix)."
                ;;
        esac
        busybox ln \$param
EOF
chmod +x /bin/ln
}
exec_scripts()
{
dir=$1
if [ ! -d $dir ]
then
log_error "exec_scripts called for non existing directory $dir"
return
fi
rename_ln
for script in $dir/rc[0-9][0-9][0-9]*.*
do
if [ -f $script ]
then
echo "script=$script" > /var/run/rc.script
. $script
fi
done
rm -f /var/run/rc.script
if [ -f /bin/ln.real ]; then
mv /bin/ln.real /bin/ln
fi
}
extract_opt() {
file=$1
target_dir=$2
case $COMP_TYPE_OPT in
bzip2) method="bunzip2 -c" ;;
lzma) method="unlzma -c" ;;
xz) method="unxz -c" ;;
*) method="cat" ;;
esac
case x$target_dir in
x) target_dir=/ ;;
esac
case x$file in
x- | x )
file=
;;
*)
[ -f $file ] || stop "extract_opt: missing file $file"
;;
esac
log_info "extracting files from opt archive"
cd $target_dir
if ! $method $file | tar -xf - --warning=no-timestamp --checkpoint=50 --checkpoint-action=dot
then
log_error "extraction failed!"
stop "either your archives are corrupt or you have run out of memory"
else
echo
fi
}
do_mknod()
{
while read name typ major minor
do
mknod $tmp/dev/$name $typ $major $minor
done
}
do_mkdev()
{
while read name typ major minor first last base
do
makedevs $name $typ $major $minor $first $last $base
done
}
static_devices()
{
cd /dev
echo "Creating static device nodes..."
cat <<EOF | do_mknod
fd0 b 2 0
fd0h1440 b 2 40
fd0u1440 b 2 28
fd0u1680 b 2 44
fd0u2880 b 2 32
fd1 b 2 1
fd1h1440 b 2 41
fd1u1440 b 2 29
fd1u1680 b 2 45
fd1u2880 b 2 33
isdninfo c 45 255
lcd c 120 0
sndstat c 14 6
temperature c 10 131
EOF
cat <<EOF | do_mkdev
ippp    c 45  128 0 15
isdn    c 45  0   0 15
isdnctrl c 45 64  0 15
lp      c 6   0   0 2
ttyI    c 43  0   0 15
ttyp    c 3   0   0 9
EOF
cd /
}
do_beep()
{
beep -f750 -l120
}
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin:.; export PATH
trap "" 1
busybox mount -t proc proc /proc
if busybox grep -q ^/dev/root /proc/mounts
then
set `busybox grep ^/dev/root /proc/mounts`
case $3 in
ext*)
busybox mount -o remount,rw,noatime /dev/root /
busybox echo $1 $2 $3 rw >> /etc/fstab
;;
esac
fi
busybox --install
mount -t sysfs sysfs /sys
mount -t devpts devpts /dev/pts
chmod 0755 /
kernel_version=`cat /proc/version | cut -d' ' -f 3`
set -- `echo $kernel_version | sed -e "s/\([0-9]\+\.[0-9]\+\)\.\([0-9]\+\).*/\1 \2/"`
kernel_major=$1
kernel_minor=$2
echo $kernel_version > /etc/kernel-version
echo $kernel_major > /etc/kernel-major
echo $kernel_minor > /etc/kernel-minor
echo "" > /proc/sys/kernel/hotplug
static_devices
set -- ${kernel_major//./ }
if [ $1 -eq 3 -a $2 -lt 16 ]
then
cat <<EOF >>/etc/mdev.conf

# capi
capi              0:0 0660 =capi20
capi([0-9]+)      0:0 0660 =capi/%1
EOF
fi
if [ -f /etc/rc.cfg ]; then
grep -q "^DEBUG_MDEV='yes'" /etc/rc.cfg && > /dev/mdev.log
fi
mdev -s
sleep 2
ln -sf /proc/mounts /etc/mtab
[ -f /lib/modules/$kernel_version/modules.alias ] && cat /lib/modules/$kernel_version/modules.alias >> /etc/modprobe.conf
if [ -f /proc/sys/kernel/core_pattern ]; then
mkdir /var/log/dumps
chmod 1777 /var/log/dumps
echo '/var/log/dumps/core.%e' > /proc/sys/kernel/core_pattern
fi
if [ -f /etc/rc.cfg ] && grep -q "^DEBUG_ENABLE_CORE='yes'" /etc/rc.cfg
then
> /var/run/coredumps.enabled
fi
[ -x /sbin/bootlogd ] && /sbin/bootlogd -c -l /var/tmp/boot.log
case "$fli4ldebug" in
yes)
> /var/run/debugging
set -x
stack_0='yes'
esac
script=rc
export script
booting=yes
extfs=ext4
export booting
rm -f /files
cd /
mount -av
mount
rc_name=rc.cfg
opt_name=opt.img
case "$fli4l_mode" in
recover)
rcfile=rc2.cfg
opt_archive=opt2.img
fli4l_ramdisk=yes
log_info "booting recovery version ..." cy
;;
test)
rcfile=rc-test.cfg
opt_archive=opt-test.img
fli4l_ramdisk=yes
log_info "booting test version ..." cy
;;
*)
rcfile=$rc_name
opt_archive=$opt_name
fli4l_ramdisk=
;;
esac
. /etc/boot.d/base-helper
do_modprobe_if_exists kernel/drivers/input/misc pcspkr
(
if [ -f /etc/rc.cfg ]; then
read_config /etc/rc.cfg
else
log_error "Missing initial boot configuration file /etc/rc.cfg"
fi
log_info "running boot scripts"
exec_scripts /etc/boot.d
log_info "finished boot scripts"
echo -e "boot_dev=$boot_dev\nboot_fs=$boot_fs\nhd_data=$hd_data" > /var/run/boot.cfg
cat /var/run/boot.cfg
)
mv -f /etc/rc.cfg /etc/rc.cfg.orig
if [ -f /var/run/$rcfile ]; then
cp -L /var/run/$rcfile /etc/rc.cfg
else
cp -L /boot/$rcfile /etc/rc.cfg
fi
read_config /etc/rc.cfg
. /var/run/boot.cfg
grep -q /boot /proc/mounts && umount /boot
exec_scripts /etc/rc.d
sleep 15
log_info "fli4l boot finished - VERSION: `cat /etc/version` KERNEL: `uname -r` ARCH: `uname -m` "
mkdir -p /var/lib/persistent/base
echo "`date '+%Y-%m-%d %T (%Z)'` | boot finished | `cat /etc/version` | `uname -r ` | `uname -m` " >> /var/lib/persistent/base/boot_upd.log
if [ -x /sbin/bootlogd ]
then
if [ "$DEBUG_KEEP_BOOTLOGD" != yes ]; then
log_info "terminating bootlogd to close bootlog ..."
killall bootlogd
fi
fi
