差分
このページの2つのバージョン間の差分を表示します。
blog:2013:2013-06-04 [2013-06-04 11:16] 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」に落ちて、このスクリプトを/ | ||
- | |||
- | システムファイルを配布サイトから取ってくる関係上、ifconfigとroute add routeだけは手入力が必要。あと、スクリプトをどうやってインストール環境に持ってくかって問題もあるが、Root on ZFSしようとする人なら自前でFTPサーバくらい用意出来るだろうって事で。 | ||
- | |||
- | <file sh freebsd9_root_on_zfs_installer.sh> | ||
- | #!/bin/sh | ||
- | # FreeBSD 9-RELEASE Root on ZFS Installer | ||
- | |||
- | # システムファイルの配布サイト | ||
- | URL=" | ||
- | |||
- | # RAMディスク設定 | ||
- | RAMDISK="/ | ||
- | RAMDISK_DEV=" | ||
- | # インストールに必要なtxzが収まり、物理メモリが1GBちょい空く位の容量にする | ||
- | RAMDISK_SIZE=" | ||
- | |||
- | # インストールファイルのダウンロード先 | ||
- | DISTDIR=" | ||
- | DISTFILES=" | ||
- | |||
- | # インストール先ディスク | ||
- | DISK=" | ||
- | # スワップパーティション名 | ||
- | SWAPNAME=" | ||
- | # スワップサイズ | ||
- | SWAPSIZE=" | ||
- | # データパーティション名 | ||
- | DATANAME=" | ||
- | # データボリュームサイズ | ||
- | DATASIZE=" | ||
- | |||
- | # ストレージプール名 | ||
- | ZPOOLNAME=" | ||
- | |||
- | # インストール先ZFSファイルシステム | ||
- | SYSROOT=" | ||
- | # 仮マウントポイントルート | ||
- | MOUNTPOINT="/ | ||
- | # ストレージプールの代替マウントポイント | ||
- | ALTROOT=" | ||
- | # インストール先フルパス | ||
- | DESTDIR=$MOUNTPOINT/ | ||
- | |||
- | # ramdisk作り直し | ||
- | echo ' | ||
- | umount -f / | ||
- | mdmfs -s $RAMDISK_SIZE $RAMDISK_DEV $RAMDISK | ||
- | |||
- | mkdir $MOUNTPOINT | ||
- | |||
- | # パーティション作成 | ||
- | echo ' | ||
- | sysctl kern.geom.debugflags=0x10 | ||
- | dd if=/ | ||
- | |||
- | 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 / | ||
- | |||
- | # 4kセクタでzpool作成 | ||
- | echo ' | ||
- | gnop create -S 4096 / | ||
- | |||
- | zpool create -R $ALTROOT -f $ZPOOLNAME / | ||
- | zpool export $ZPOOLNAME | ||
- | |||
- | gnop destroy / | ||
- | |||
- | zpool import -R $ALTROOT $ZPOOLNAME | ||
- | |||
- | echo ' | ||
- | zfs set checksum=fletcher4 zroot | ||
- | |||
- | zfs create -o normalization=formC $SYSROOT | ||
- | |||
- | zfs create $SYSROOT/ | ||
- | zfs create -o compression=gzip-9 $SYSROOT/ | ||
- | zfs create -o compression=gzip-9 $SYSROOT/ | ||
- | zfs create $SYSROOT/ | ||
- | cd $DESTDIR/; ln -s /usr/home home | ||
- | cd / | ||
- | |||
- | zfs create -o compression=gzip-9 -o setuid=off $SYSROOT/ | ||
- | zfs create -o compression=off -o exec=off -o setuid=off $SYSROOT/ | ||
- | zfs create -o compression=off -o exec=off -o setuid=off $SYSROOT/ | ||
- | |||
- | zfs create -o compression=on $SYSROOT/ | ||
- | zfs create -o exec=off -o setuid=off $SYSROOT/ | ||
- | zfs create -o exec=off -o setuid=off $SYSROOT/ | ||
- | zfs create -o exec=on | ||
- | zfs create -o exec=off -o setuid=off $SYSROOT/ | ||
- | zfs create -o exec=off -o setuid=off $SYSROOT/ | ||
- | zfs create -o exec=off -o setuid=off $SYSROOT/ | ||
- | zfs create -o exec=off -o setuid=off $SYSROOT/ | ||
- | zfs create -o exec=on | ||
- | chmod 1777 $DESTDIR/ | ||
- | |||
- | zfs create -o exec=on | ||
- | chmod 1777 $DESTDIR/ | ||
- | |||
- | echo 'Set bootfs=' | ||
- | zpool set bootfs=$SYSROOT $ZPOOLNAME | ||
- | |||
- | echo ' | ||
- | zpool export $ZPOOLNAME | ||
- | zpool import -o cachefile=/ | ||
- | |||
- | echo 'Fetch system files' | ||
- | mkdir $DISTDIR | ||
- | cd $DISTDIR | ||
- | for file in $DISTFILES | ||
- | do | ||
- | fetch ${URL}$file | ||
- | done | ||
- | |||
- | echo ' | ||
- | for file in $DISTFILES | ||
- | do | ||
- | echo " | ||
- | cat $file | tar --unlink -xpJf - -C ${DESTDIR: | ||
- | done | ||
- | |||
- | cp / | ||
- | |||
- | LOADERCONF=$DESTDIR/ | ||
- | echo ' | ||
- | echo ' | ||
- | echo ' | ||
- | echo ' | ||
- | echo ' | ||
- | echo ' | ||
- | echo ' | ||
- | echo ' | ||
- | |||
- | RCCONF=$DESTDIR/ | ||
- | echo ' | ||
- | echo ' | ||
- | |||
- | FSTAB=$DESTDIR/ | ||
- | echo ' | ||
- | echo '/ | ||
- | |||
- | |||
- | echo 'Set mountpoints' | ||
- | zfs set readonly=on $SYSROOT/ | ||
- | |||
- | zfs umount -af | ||
- | zfs set mountpoint=none $ZPOOLNAME | ||
- | zfs set mountpoint=legacy $SYSROOT | ||
- | zfs set mountpoint=/ | ||
- | zfs set mountpoint=/ | ||
- | zfs set mountpoint=/ | ||
- | |||
- | echo ' | ||
- | < | ||
- | |||
- | で、だ。自作スクリプトが完成した直後に、[[https:// | ||
- | |||
- | お、俺スクリプトの方が引数とかないし、か、簡単に使えるし(震え声) |