シードボックスマシンのフラッシュドライブにFreeBSDをインストールする

多くのホームシードボックスは、「気にしない」という原則から、古いハードドライブを使用することがよくあります。 すべて同じ重要なデータがそこに書き込まれることはなく、OSの再配置に関する問題を除いて、それらが死ぬとき、悪いことは何も起こりません。

OSが死亡するリスクを最小限に抑えるために、別の物理メディアに持ち込むことができます。 1つのオプションは、小さなフラッシュドライブ用です。 次に、USBフラッシュドライブにFreeBSD(7.0-8.0)をインストールして構成します。



フラッシュドライブのサイズ



私の実験によれば、dhcp / dns / vpnサーバーを備えた完全に機能するルーターは、簡単に200メガバイトになります(256メガバイトのフラッシュドライブの場合)。 同時に、すべての不必要なドライバーは、デバッグおよびプロファイリングオプションと同様にカーネルからスローされ、たてがみは世界から削除されます。 もちろん、ソース(/ usr / src)とポート(/ usr / ports)はそこに収まりませんが、他のメディアから問題なくマウントできます。



seedbox機能を備えたルーターの場合、apache、perl、およびphpが必要になるため、より大きなフラッシュドライブを使用することをお勧めします。 この例では、4ギガバイトのバギーフラッシュドライブを使用します:)。



信頼性の問題



フラッシュドライブはセクタの書き換えを本当に好まないため、 ガイドではルートを読み取り専用にマウントし、書き込みアクセスを必要とするすべてのセクションをメモリに配置することを推奨しています。 したがって、/ varはRAMにディスクとしてマウントされ、再起動するたびにその内容がすべて削除されます。



パーティションの準備



インストールは、FreeBSD(私は仮想マシンで行った)から最も便利に行われます。ここでは、必要なカーネルと世界がすでに組み立てられています。



そこで、USBフラッシュドライブを挿入し、dmesg(さらにda0)でどのように定義されているかを確認します。 まず、フラッシュドライブをフォーマットする必要があります。 flash_disk.protoを作成します。



# slice type start length

#

p 1 0xa5 63 1429722

p 3 0xa5 2040255 6072570

#

a 1









フラッシュドライブにバグがあるため(700〜1000メガバイトのセクションからデータを読み取ろうとすると、コントローラーが落ちる)、スペースが2つのスライスに分割されます。 通常のフラッシュドライブでは、フラッシュドライブ全体で1つのピースを作成できます。



書式設定:



fdisk -f flash_disk.proto -i da0







ブートローダーを作成します。



# MBR

boot0cfg -B da0

# - slice

boot0cfg -s 1 da0

#

boot0cfg -o noupdate da0









スライスをマークします。 flash_labels.protoを作成します。



# size offset fstype [fsize bsize bps/cpg]

a: 1429722 0 4.2BSD 0 0 0

c: * 0 unused 0 0 # "raw" part, don't edit








ディスクにマークを付け、ファイルシステムを作成します。



#

bsdlabel -R da0s1 flash_labels.proto

#

newfs -U da0s1a








スライスをマウント



mount /dev/da0s1 /mnt/flash







システムとポートのインストール



make installのたびにパスを指定しないようにするには、作業システムのmake.confでDESTDIRフラグを一時的に設定します。



DESTDIR=/mnt/flash







次に、カーネル、ワールド、システム構成、およびスクリプト(など)をUSBフラッシュドライブにインストールします。



cd /usr/src

make installkernel

make installworld

cd /usr/src/etc

make distrib-dirs

make distribution








私のmake.confでは、とりわけ、情報とマンのアセンブリがオフになっています(NO_INFO = YES NO_MAN = YES)。したがって、USBフラッシュドライブへのポートの通常のインストールでは、 ここで説明するように、texinfoを手動でインストールする必要があります



cd /usr/src/gnu/usr.bin/texinfo

make install








その後、フラッシュドライブのfstabを編集します。



# Device Mountpoint FStype Options Dump Pass#

/dev/da0s1a / ufs ro 1 1

md /tmp mfs rw,-s24M,noatime 0 0

md /var mfs rw,-s128M,noatime` 0 0








/ varはメモリにマウントされるため、インストールされたポートのデータが再起動の間に失われないように、/ var / dbをUSBフラッシュドライブに転送する必要があります。 これを行うには、リンクを作成します。



mkdir /mnt/flash/etc/pkg

ln -s ../../etc/pkg /mnt/flash/var/db/pkg








これで、USBフラッシュドライブでシステムを構成し、構成を編集し、動作中のシステムからポートをインストールできます(resolv.confでUSBフラッシュドライブにDNSサーバーを登録するだけです)。

例:



cd /usr/ports/net/isc-dhcp30-server

make

make install








make.confのDESTDIRフラグは、make installにUSBフラッシュドライブにポートをインストールするように指示します。



名前付きDNSサーバーの問題



デフォルトでは、namedはシステムによって/ var / namedディレクトリのサンドボックス(chroot)で起動されます。 namedはそのsmall / varに書き込むことができる必要があるため、このディレクトリをUSBフラッシュドライブに配置することはできません。 私が使用したオプションは、システムを起動するたびに名前付きのconfigをrc.localに追加することです。



# named

mkdir -p /var/named/etc

cp -Rp /usr/local/etc/namedb /var/named/etc

/etc/rc.d/named start








私の意見では、これはやや不器用で、他の解決策を聞きたいと思っています。



インストール済みシステムをダウンロードする



USBフラッシュドライブをルーターに接続し、そこからBIOSでブートを設定します。 一部のマザーボードでは、ブートローダーがルートのマウントを開始するまでにフラッシュドライブに判断する時間がない場合、バグが発生する可能性があります。 この問題のハックについては、Habréに関するこの記事の最後で説明しています。

システムをロードした後、構成を続行できます。 これを行うには、次のようにルートを再マウントします。



mount -uw /







必要な変更(ポートの設定/構成の編集/ユーザーの追加など)を行った後、ルートを読み取り専用アクセスに戻す必要があります。



mount -ur /







便利なリンク







更新:コメントに記載されているように、/ varおよび/ tmpを手動でマウントしても意味がありません。 ブート中に/ varおよび/ tmpが読み取り専用の場合、/ etc / rc.initdisklessが自動的に呼び出され、デフォルトでこれらのパーティションがRAMにマウントされます。 したがって、fstabから/ varおよび/ tmpに関する行を削除し、/ etc / rc.confのrc.initdisklessスクリプトにパラメーターを追加できます。



tmpmfs=true

tmpsize=24M

varmfs=true

varsize=128M












All Articles