外註さんに気の利いたスクリプトを作成できる技量が期待できるわけもなく。 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