#! /bin/sh
#
#   rc -- スタートアップスクリプト
#
#	0.0: Jun. 15, 2004 by Dai ISHIJIMA
#	0.1: Aug.  1, 2006 (CD初期化してからkonで日本語化 for wpout07)
#	0.2: Feb. 10, 2007 (ログ記録 for wpout08)
#	0.3: Feb. 17, 2007 (シリアルコンソール対応)
#	0.4: Sep. 12, 2007 (for wpout09開発版)
#	0.5: Sep. 17, 2007 (shutdown時の画面復帰)
#	0.6: Oct.  2, 2007 (expr(1)のPOSIX対応)
#	0.7: Jan.  3, 2008 (起動時初期化手順修正)
#	0.8: Feb. 10, 2008 (起動時にメッセージ)
#	0.9: Feb. 11, 2008 (CDの確認方法修正)
#	1.0: Jul. 24, 2009 (シリアルコンソール対応, wpout10)
#	1.1: May   5, 2013 (wpout13, 8.3R, "mount -rw /dev/md0a /")
#	1.2: May   3, 2014 (wpout14, 8.3R, sio->uart)
#	1.3: Jul. 26, 2016 (wpout16, 10.3R, vt -> sc)
#	1.4: Jun. 22, 2025 (wpout25, 14.2R, sc -> vt, EFI, UTF-8 console)
#

# ファイルシステムを書き込み可能に
/sbin/mount -rw /dev/md0a /

# シェアードライブラリのパス設定
/sbin/ldconfig -elf /lib /usr/lib

PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbin:/usr/local/bin:/wipeout:.
export PATH

# 2016-12-04
export HOME=/root
cd /tmp

# 2025-06-22
export LANG=C
export LC_CTYPE=ja_JP.UTF-8
export BOOTMETHOD=`sysctl machdep.bootmethod`
export TERM=cons25
#export DEBUG=y

prompt="Waiting for Device to Settle "
count=9
. /wipeout/ncountdown.sh

#
# もろもろの環境変数
#
export LOGFIL="/tmp/wpoutlog.txt"
export DMESG="/var/run/dmesg.boot"
export ERRORLOG="/tmp/wperrlog.txt"
export STATEFIL="/tmp/status.txt"
export HISTFIL="/tmp/history.txt"
export WIPEOUTDIR="/wipeout"
export TTY=ttyv0
export DIALOGOPTS="--ascii-lines --no-collapse"

#
# 最初のログ
#
cp /dev/null $LOGFIL
cp /dev/null $ERRORLOG
cp /dev/null $HISTFIL

echo -n 'booting wipe-out, at epoch ' >> $LOGFIL
tinydate >> $LOGFIL
echo -n 'version: ' >> $LOGFIL
cat /version.txt >> $LOGFIL

# 起動したことを示すメッセージを表示
cat $LOGFIL

#
dmesg > /var/run/dmesg.boot
echo 'save dmesg as /var/run/dmesg.boot' >> $LOGFIL

#
# CD-ROMなどの初期化
#
echo -n 'checking boot device..'

# CD-ROMが存在するか? (PXEブートか、ローカルCDブートか?)
CDROM=NONE
echo 'checking CD-ROM device' >> $LOGFIL

# まず、ATAPI CD-ROMをマウントしてみる
echo -n 'mounting CD-ROM (acd0) ..'
mount_cd9660 /dev/acd0 /cdrom 1>/dev/null 2>&1
echo '.'
CDROM=/dev/acd0
if [ ! -f /cdrom/version.txt ]; then
	# SCSI CD-ROMをマウントしてみる
	echo -n 'mounting CD-ROM (cd0) ..'
	mount_cd9660 /dev/cd0 /cdrom 1>/dev/null 2>&1
	echo '.'
	CDROM=/dev/cd0
	if [ ! -f /cdrom/version.txt ]; then
		# CD-ROMをマウントできなかった
		CDROM=NONE
	fi
fi

case x"$CDROM" in
    x/dev/*)
	echo "CD-ROM device: $CDROM" >> $LOGFIL
	echo "re-initializing shared library path" >> $LOGFIL
	echo -n "re-initializing shared library path.."
	if [ -r /cdrom/lib/libc.so ]; then
		ldconfig -elf /lib /usr/lib
	fi
	echo '.'
	;;
    *)
	echo "no CD-ROM device, may be PXE boot mode" >> $LOGFIL
	echo "no CD-ROM device, may be PXE boot mode"
	;;
esac


if [ -x /bin/hostname ]; then
	hostname wipeout
fi

if [ -x /usr/sbin/powerd ]; then
	echo -n 'Starting powerd... '
	powerd >> $LOGFIL 2>&1 
	case x"$?" in
		x0)
			echo done.
			;;
		*)
			echo failed.
			;;
	esac
fi

# 一度CD-ROMをアンマウント
case x"$CDROM" in
	x/dev/*)
		echo "unmounting CD-ROM ($CDROM)" >> $LOGFIL
		echo -n "umounting CD-ROM ($CDROM).."
		umount /cdrom
		echo '.'
		;;
esac
export CDROM

# debugging
case x"$DEBUG" in
    x[Yy]*)
	count=5
	prompt='debug wait '
	. /wipeout/ncountdown.sh
	echo ''
	;;
esac

cd /wipeout
echo -n "wipe-out initialized successfully on " >> $LOGFIL
date >> $LOGFIL

# 2025-09-20
font=paw16vt.fnt
export HEIGHT=0
case x"$BOOTMETHOD" in
    x*UEFI)
	/wipeout/sgrep '^VT.*x[1-9][0-9]*' /var/run/dmesg.boot > /tmp/result
	export HEIGHT=`cat /tmp/result | sed 's/^VT.*x\([1-9][0-9]*\)/\1/'`
	h=$(( ($HEIGHT + 0) / 30 ))
	if [ $h -ge 32 ]; then
		font=paw32vt.fnt
	elif [ $h -ge 24 ]; then
		font=paw24vt.fnt
	fi
	;;
esac

# 2025-06-22
export VTFONT=/usr/local/share/fonts/vt/$font
/usr/sbin/vidcontrol -f $VTFONT

# 2025-09-20
case x"$BOOTMETHOD" in
    x*UEFI)
	cat /var/run/dmesg.boot
	;;
esac

date
echo "ストレージ消去ツール「wipe-out」向けにFreeBSDを初期化しました。 "
sysctl machdep.bootmethod
export BOOTMETHOD=`sysctl machdep.bootmethod`

#
rm -f /var/run/nologin

# wipe-outを動かすかコンソールを選んでもらう
# (rc => vtstart.sh => startup.sh => 
sh vtstart.sh

# シャットダウンするか?
if [ -f /var/run/nologin ]; then
	nologin=`sed -n 1p /var/run/nologin`
	case x"$nologin" in
		xh*)
			shutdown -p now
			;;
		xr*)
			shutdown -r now
			;;
	esac
fi
		
# 対話シェルを起動する
/bin/sh -i

if [ -x /sbin/shutdown ]; then
	/sbin/shutdown -h now
fi

exit 0

# EOF
