#!/bin/bash

# Copyright (c) 2012 NTT DOCOMO, INC.
# Copyright 2012 Hewlett-Packard Development Company, L.P.
#
# All Rights Reserved.
#
#    Licensed under the Apache License, Version 2.0 (the "License"); you may
#    not use this file except in compliance with the License. You may obtain
#    a copy of the License at
#
#         http://www.apache.org/licenses/LICENSE-2.0
#
#    Unless required by applicable law or agreed to in writing, software
#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
#    License for the specific language governing permissions and limitations
#    under the License.

echo "init"

source /init-func

PATH=/sbin:/bin:/usr/bin:/usr/sbin
export PATH

mkdir -p /proc
mkdir -p /sys
mkdir -p /dev
mkdir -p /boot
mkdir -p /etc
mkdir -p /mnt
mkdir -p /lib/modules

mount -t proc proc /proc

readonly _BOOTIF_=$(get_kernel_parameter BOOTIF)
readonly _IP_=$(get_kernel_parameter ip)
readonly BOOT_MAC_ADDRESS=$(echo "$_BOOTIF_" | sed -e "s/-/:/g"  | sed -e "s/^01://g" | tr 'a-f' 'A-F')
readonly BOOT_IP_ADDRESS=$(echo "$_IP_" | cut -d':' -f1)
readonly BOOT_SERVER=$(echo "$_IP_" | cut -d':' -f2)
readonly BOOT_NETMASK=$(echo "$_IP_" | cut -d':' -f4)
readonly BOOT_GATEWAY=$(echo "$_IP_" | cut -d':' -f3)

readonly DISK=$(get_kernel_parameter disk)

readonly DEPLOYMENT_ID=$(get_kernel_parameter deployment_id)
readonly DEPLOYMENT_KEY=$(get_kernel_parameter deployment_key)
readonly ISCSI_TARGET_IQN=$(get_kernel_parameter iscsi_target_iqn)
readonly TROUBLESHOOT=$(get_kernel_parameter troubleshoot)
FIRST_ERR_MSG=

mount -t sysfs none /sys

UDEVD=
if [ -x "/bin/systemd-udevd" ]; then
    UDEVD="systemd-udevd"
else
    UDEVD="udevd"
fi

if [ "$UDEVD" = "systemd-udevd" ]; then
    # devtmpfs is required since udev 176
    mount -t devtmpfs none /dev
    mkdir -p /run
    mount -t tmpfs -o "nosuid,size=20%,mode=0755" tmpfs /run
    mkdir -p /run/lock
else
    mount -t tmpfs none /dev
    ln -sf /proc/self/fd /dev/fd
    mknod /dev/null c 1 3
    mknod /dev/zero c 1 5
    mknod /dev/random c 1 8
    mknod /dev/urandom c 1 9
    mknod /dev/tty0 c 4 0
    mknod /dev/tty1 c 4 1
    mknod /dev/tty2 c 4 2
    mknod /dev/tty3 c 4 3
    mknod /dev/tty4 c 4 4
    mknod /dev/tty5 c 4 5
    mknod /dev/tty6 c 4 6
    mknod /dev/tty7 c 4 7
    mknod /dev/tty8 c 4 8
    mknod /dev/tty9 c 4 9
    mknod /dev/tty c 5 0
    mknod -m 0600 /dev/console c 5 1
    mknod -m 0666 /dev/ptmx c 5 2
    mkdir -p /dev/.udev
    mkdir -p /dev/.udev/data
fi

echo "starting syslogd"

echo '*.* /initlog' > /etc/syslog.conf
syslogd
klogd

echo "starting udevd"
$UDEVD --daemon --resolve-names=never

echo "load modules"
load_modules_by_udev

echo "starting network $BOOT_MAC_ADDRESS"
t=0
while ! BOOT_INTERFACE=$(find_interface "$BOOT_MAC_ADDRESS"); do
	t=`expr "$t" + 5`
	if [ "$t" -gt 10 ]; then
		break
	fi
	sleep 5
done
if [ -z "$BOOT_INTERFACE" ]; then
	err_msg "Could not find an interface that owns MAC: $BOOT_MAC_ADDRESS"
	troubleshoot
fi

readonly BOOT_INTERFACE

ifconfig lo 127.0.0.1 up
ifconfig "$BOOT_INTERFACE" up
if [ $? -ne 0 ]; then
	sleep 10
	ifconfig "$BOOT_INTERFACE" up
	if [ $? -ne 0 ]; then
		err_msg "Failed to ifconfig up $BOOT_INTERFACE"
		troubleshoot
	fi
fi
ifconfig "$BOOT_INTERFACE" "$BOOT_IP_ADDRESS" netmask "$BOOT_NETMASK"
route add default gw $BOOT_GATEWAY

echo "pinging to boot server $BOOT_SERVER"
w=30
while [ $w -gt 0 ]; do
	ping -c 5 -q "$BOOT_SERVER" > /dev/null
	if [ $? -eq 0 ]; then
		break
	fi
	sleep 1
	w=`expr $w - 5`
done

echo "network ready"