外註さんに気の利いたスクリプトを作成できる技量が期待できるわけもなく。 FreeBSDで設計しているシンクライアントを、シンクライアントどうしで 自己増殖するのに作ったスクリプト。本当は g4u(Ghost for Unix)ためし たかったんだけど、テストする時間がないから適当にやってしまった。
IPアドレスの計算と、末尾の ed の連打は適当に変える必要あり。
mkcl
#!/bin/sh
d_dev=da0
d_room=204
d_bootdev=ad4
NET=172.19.5
HBASE=100
NETIF=fxp0
mydir=`dirname $0`
PROTO=$mydir/label
report() {
echo $* 2>&1
}
while [ ! $done ]; do
echo -n "Target device(default: $d_dev): "
read dev
DEV=${dev:-$d_dev}
echo -n "New root device after reboot(default: ad4): "
read bootdev
BOOTDEV=${bootdev:-$d_bootdev}
echo -n "Room num. of this host location(default: $d_room): "
read room
ROOM=${room:-$d_room}
echo -n "Host's sequential number in the room: "
read num
NUM=${num:-0}
echo -n "Are you happy with this choice(y/n)? "
read ans
case "$ans" in
y|Y) done=1 ;;
esac
done
octet=`echo "50*($ROOM - $d_room) + $NUM + $HBASE" | bc -l`
echo octet=$octet
if [ $octet -gt 255 -o $octet -lt 10 ]; then
echo "Calculated IP address $NET.$octet is invalid"
exit 2
fi
IPAD=$NET.$octet
report Start cloning $IPAD on $DEV with partition prototype: $PROTO
report "Preparing partitions"
fdisk -B -f - $DEV<<_EOF_
p 1 165 63 8385867
a 1
_EOF_
# boot0cfg -B -b /boot/mbr -s 1 -t 10 ${DEV}
bsdlabel -R ${DEV}s1 $PROTO
bsdlabel -B ${DEV}s1
report "Formatting"
newfs -U /dev/${DEV}s1a
newfs -U /dev/${DEV}s1d
report "Copying"
trap 'umount /mnt/usr; umount /mnt; exit 1' INT TERM
mount /dev/${DEV}s1a /mnt && {
report Copying / partition
tar --one-file-system --exclude=./tmp -cf - -C / . | tar xpfC - /mnt
mkdir -m 1777 /mnt/tmp
} && \
mount /dev/${DEV}s1d /mnt/usr && {
report Copying /usr partition
tar --one-file-system -cf - -C / usr | tar xpfC - /mnt
} && {
report Rewrinting startup files
ed /mnt/etc/rc.conf<<_EOF_
/^ifconfig_${NETIF}=.*
s//ifconfig_${NETIF}="inet $IPAD netmask 255.255.255.0"/
/^hostname=.*
s//hostname="${ROOM}-${NUM}.e.koeki-u.ac.jp"/
wq
_EOF_
ed /mnt/etc/fstab<<_EOF_
g/dev\/ad.s1/s,,dev/${BOOTDEV}s1,
wq
_EOF_
ed /mnt/home/ica/start-ica<<_EOF_
/204-01
s//${ROOM}-$NUM/
wq
_EOF_
}
umount /mnt/usr
umount /mnt
trap - INT TERM
labelファイルはこんなdisklabelを用意しておく。
label
# /dev/ad4s1: 8 partitions: # size offset fstype [fsize bsize bps/cpg] a: 2094411 0 4.2BSD 2048 16384 28552 b: 2097152 2094411 swap c: 8385489 0 unused 0 0 # "raw" part, don't edit d: 4193926 4191563 4.2BSD 2048 16384 28552
検索すればいくらでも出てくるけど。
/boot/loader.confに追加
splash_bmp_load="YES" vesa_load="YES" bitmap_load="YES" bitmap_type="splash_image_data" bitmap_name="/boot/ファイル名"
ファイルは640x480で256色以下のBMPにするよろし。GIMPで作るなら、 640x480のキャンバスに作って、基本は bzip2 で保存しつつ、「よっしゃ」 となったら「可視レイヤの統合」→「画像モード・インデックス(255)」してか ら「別名保存」で「拡張子で判別」にした上で hoge.bmp で保存だ。 分かる人にゃ分かる。
ブートをシリアルコンソールのみにした場合(/boot.cfgに-h)でも ブート中にちゃんとsplash imageが出てくる。よしよし。
使い方の説明をここに書いとくといいね。画像に文字を書くとき GIMPのダイナミックテキスト便利ね。
叱咤激励感想ツッコミはゲストブックへ
Generated with mkdiary.rb