差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

blog:2013:2013-06-04 [2013-08-19 09:01]
Decomo
blog:2013:2013-06-04 [2015-01-06 11:51]
行 1: 行 1:
-====== FreeBSD 9-RELEASEをRoot on ZFSで自動インストールするスクリプト作ったよー ====== 
  
-FreeBSDをRoot on ZFSでインストールするには多大なコマンド入力が必要で、超面倒&高確率でミスを犯すので自動インストールするシェルスクリプト作った。 
-FreeBSD 9-RELEASE用。8はシステムの展開方法が違うので、そのままじゃ使えない。むしろ、さくらのVPS(2G)用。VNCコンソールでちまちま設定するのが面倒だったので…。 
- 
-パーティションサイズやcompressionの設定、loader.confの中身は激しく俺仕様なので、要修正。 
- 
-起動メディアからインストーラを立ち上げたら「Shell」に落ちて、このスクリプトを/varあたりに置いて実行すれば完全自動でRoot on ZFSな環境が出来上がるよ! ユーザーやらタイムゾーンやらの設定は全くしてないので、次回起動時に適宜設定する方向で。 
- 
-システムファイルを配布サイトから取ってくる関係上、ifconfigとroute add routeだけは手入力が必要。あと、スクリプトをどうやってインストール環境に持ってくかって問題もあるが、Root on ZFSしようとする人なら自前でFTPサーバくらい用意出来るだろうって事で。 
- 
-<file bash freebsd9-root-on-zfs-installer.sh> 
-#!/bin/sh 
-# FreeBSD 9-RELEASE Root on ZFS Installer 
- 
-# システムファイルの配布サイト 
-URL="ftp://150.65.7.130/pub/FreeBSD/releases/amd64/9.1-RELEASE/" 
- 
-# RAMディスク設定 
-RAMDISK="/tmp" 
-RAMDISK_DEV="md1" 
-# インストールに必要なtxzが収まり、物理メモリが1GBちょい空く位の容量にする 
-RAMDISK_SIZE="512M" 
- 
-# インストールファイルのダウンロード先 
-DISTDIR="$RAMDISK/dist" 
-DISTFILES="base.txz lib32.txz kernel.txz doc.txz ports.txz src.txz games.txz" 
- 
-# インストール先ディスク 
-DISK="ada0" 
-# スワップパーティション名 
-SWAPNAME="-l swap" 
-# スワップサイズ 
-SWAPSIZE="-s 8G" 
-# データパーティション名 
-DATANAME="-l data" 
-# データボリュームサイズ 
-DATASIZE="-s 160G" 
- 
-# ストレージプール名 
-ZPOOLNAME="zroot" 
- 
-# インストール先ZFSファイルシステム 
-SYSROOT="$ZPOOLNAME/ROOT" 
-# 仮マウントポイントルート 
-MOUNTPOINT="/tmp/zfs" 
-# ストレージプールの代替マウントポイント 
-ALTROOT="$MOUNTPOINT/$ZPOOLNAME" 
-# インストール先フルパス 
-DESTDIR=$MOUNTPOINT/$SYSROOT 
- 
-# ramdisk作り直し 
-echo 'Create ramdisk' 
-umount -f /dev/$RAMDISK_DEV 
-mdmfs -s $RAMDISK_SIZE $RAMDISK_DEV $RAMDISK 
- 
-mkdir $MOUNTPOINT 
- 
-# パーティション作成 
-echo 'Create partitions...' 
-sysctl kern.geom.debugflags=0x10 
-dd if=/dev/zero of=/dev/$DISK bs=1m count=100 
- 
-gpart create -s gpt $DISK 
-gpart add -a 4k -s 64k -t freebsd-boot $DISK 
-gpart add -a 4k $SWAPSIZE -t freebsd-swap $SWAPNAME $DISK 
-gpart add -a 4k $DATASIZE -t freebsd-zfs $DATANAME $DISK 
-gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 $DISK 
- 
-# 4kセクタでzpool作成 
-echo 'Create storage pool : ' $ZPOOLNAME 
-gnop create -S 4096 /dev/${DISK}p3 
- 
-zpool create -R $ALTROOT -f $ZPOOLNAME /dev/${DISK}p3.nop 
-zpool export $ZPOOLNAME 
- 
-gnop destroy /dev/${DISK}p3.nop 
- 
-zpool import -R $ALTROOT $ZPOOLNAME 
- 
-echo 'Create ZFS file systems' 
-zfs set checksum=fletcher4 zroot 
- 
-zfs create -o normalization=formC $SYSROOT 
- 
-zfs create $SYSROOT/usr 
-zfs create -o compression=gzip-9 $SYSROOT/usr/include 
-zfs create -o compression=gzip-9 $SYSROOT/usr/src 
-zfs create $SYSROOT/usr/home 
-cd $DESTDIR/; ln -s /usr/home home 
-cd / 
- 
-zfs create -o compression=gzip-9 -o setuid=off $SYSROOT/usr/ports 
-zfs create -o compression=off -o exec=off -o setuid=off $SYSROOT/usr/ports/distfiles 
-zfs create -o compression=off -o exec=off -o setuid=off $SYSROOT/usr/ports/packages 
- 
-zfs create -o compression=on $SYSROOT/var 
-zfs create -o exec=off -o setuid=off $SYSROOT/var/crash 
-zfs create -o exec=off -o setuid=off $SYSROOT/var/db 
-zfs create -o exec=on  -o setuid=off $SYSROOT/var/db/pkg 
-zfs create -o exec=off -o setuid=off $SYSROOT/var/empty 
-zfs create -o exec=off -o setuid=off $SYSROOT/var/log 
-zfs create -o exec=off -o setuid=off $SYSROOT/var/mail 
-zfs create -o exec=off -o setuid=off $SYSROOT/var/run 
-zfs create -o exec=on  -o setuid=off $SYSROOT/var/tmp 
-chmod 1777 $DESTDIR/var/tmp 
- 
-zfs create -o exec=on  -o setuid=off $SYSROOT/tmp 
-chmod 1777 $DESTDIR/tmp 
- 
-echo 'Set bootfs='$SYSROOT 
-zpool set bootfs=$SYSROOT $ZPOOLNAME 
- 
-echo 'Create zpool.cache' 
-zpool export $ZPOOLNAME 
-zpool import -o cachefile=/tmp/zpool.cache -R $ALTROOT $ZPOOLNAME 
- 
-echo 'Fetch system files' 
-mkdir $DISTDIR 
-cd $DISTDIR 
-for file in $DISTFILES 
-do 
-    fetch ${URL}$file 
-done 
- 
-echo 'Install system files' 
-for file in $DISTFILES 
-do 
-    echo "  extract... ${file}" 
-    cat $file | tar --unlink -xpJf - -C ${DESTDIR:-/} 
-done 
- 
-cp /tmp/zpool.cache $DESTDIR/boot/zfs/zpool.cache 
- 
-LOADERCONF=$DESTDIR/boot/loader.conf 
-echo 'Create '$LOADERCONF 
-echo 'zfs_load="YES"' >> $LOADERCONF 
-echo 'vm.kmem_size="512M"' >> $LOADERCONF 
-echo 'vm.kmem_size_max="1024M"' >> $LOADERCONF 
-echo 'vfs.root.mountfrom="zfs:'$SYSROOT'"' >> $LOADERCONF 
-echo 'vfs.zfs.prefetch_disable="1"' >> $LOADERCONF 
-echo 'vfs.zfs.vdev.cache.size="10M"' >> $LOADERCONF 
-echo 'vfs.zfs.arc_max="128M"' >> $LOADERCONF 
- 
-RCCONF=$DESTDIR/etc/rc.conf 
-echo 'Create '$RCCONF 
-echo 'zfs_enable="YES"' >> $RCCONF 
- 
-# sshを有効にする(危険なので各種設定が終わったらルートログイン不許可にすること) 
-#echo 'sshd_enable="YES"' >> $RCCONF 
-#SSHCONF=$DESTDIR/etc/ssh/ssh_config 
-#echo 'PermitRootLogin yes' >> $SSHCONF 
- 
-FSTAB=$DESTDIR/etc/fstab 
-echo 'Create '$FSTAB 
-echo '/dev/gpt/swap none swap sw 0 0' >> $FSTAB 
- 
-echo 'Set mountpoints' 
-zfs set readonly=on $SYSROOT/var/empty 
- 
-zfs umount -af 
-zfs set mountpoint=none $ZPOOLNAME 
-zfs set mountpoint=legacy $SYSROOT 
-zfs set mountpoint=/usr $SYSROOT/usr 
-zfs set mountpoint=/tmp $SYSROOT/tmp 
-zfs set mountpoint=/var $SYSROOT/var 
- 
-echo 'Done.' 
-</file> 
- 
-で、だ。自作スクリプトが完成した直後に、[[https://github.com/mmatuska/mfsbsd/blob/master/tools/zfsinstall|zfsinstall]]という、そのまんまの名前の高機能なインストーラの存在を知って涙目。 
- 
-お、俺スクリプトの方が引数とかないし、か、簡単に使えるし(震え声) 
  • blog/2013/2013-06-04.txt
  • 最終更新: 2015-01-06 11:51
  • (外部編集)