Подготовка флешки (разметка)
Размечаем всю флешку под FreeBSD
:
fdisk -BI /dev/da0
Если хочется разбить на несколько разделов, то тогда так (fdisk
в интерактивном режиме):
fdisk -i /dev/da0
Создаём BSD
-слайс:
bsdlabel -w -B da0s1
Создаём файловую систему, с меткой FBSD
, чтобы при монтировании устройства не зависеть от его имени в конкретной системе:
newfs -n -U -L FBSD /dev/da0s1a
Записываем MBR
:
boot0cfg -B da0
Устанавливаем загрузку по умолчанию с первого слайса:
boot0cfg -s 1 da0
Запрещаем загрузчику перезаписывать себя:
boot0cfg -o noupdate da0
Установка FreeBSD
Монтируем флешку:
mount /dev/ufs/FBSD /mnt/flash-disk
Долгий способ установки — сборка мира
echo 'DESTDIR=/mnt/flash-disk' >> /etc/make.conf
cd /usr/src
make installkernel
make installworld
cd /usr/src/etc
make distrib-dirs
make distribution
Быстрый способ — копирование
cp -r /boot /bin /sbin /etc /root /mnt/flash-disk
mkdir /mnt/flash-disk/usr
cp -r /usr/bin /usr/sbin /usr/lib /usr/lib32 /usr/libdata /usr/libexec /usr/share /mnt/flash-disk/usr
Настройка после установки
Создаём на флешке файл fstab
(/mnt/flash-disk/etc/fstab
):
Device Mountpoint FStype Options Dump Pass#
/dev/ufs/FBSD / ufs ro 1 1
Подправляем rc.conf
(/mnt/flash-disk/etc/rc.conf
):
# Запрещаем fsck в фоновом режиме
background_fsck="NO"
# Запрещаем запись состояния системной энтропии
entropy_dir="NO"
entropy_file="NO"
# Запрещаем создавать дампы
dumpdev="NO"
dumpdir="NO"
virecover_enable="NO"
ifconfig_DEFAULT="DHCP"
# Важный момент! если / монитирует read-only, то /tmp и /var создаются в виде ram-дисков,
# ниже мы указываем их размер в памяти
tmpsize="8m"
varsize="8m"
# Наполняем /var
populate_var="YES"
Дополнительно
Проблемы с FreeBSD 8.0-Stable
— на некоторых материнских платах флешка определяется уже после того, как ядро пытается смонтировать корневую ФС, чтобы избежать этой неприятности надо в /usr/src/sys/kern/vfs_mount.c
добавить одну строчку и пересобрать ядро, вот патч:
Index: sys/kern/vfs_mount.c
===================================================================
RCS file: /usr/src/sys/kern/vfs_mount.c,v
retrieving revision 1.308
diff -u -r1.308 vfs_mount.c
--- sys/kern/vfs_mount.c 5 Jun 2009 14:55:22 -0000 1.308
+++ sys/kern/vfs_mount.c 29 Sep 2009 17:08:25 -0000
@@ -1645,6 +1645,9 @@
options = NULL;
+ /* NASTY HACK: wait for USB sticks to appear */
+ pause("usbhack", hz * 10);
+
root_mount_prepare();
mount_zone = uma_zcreate("Mountpoints", sizeof(struct mount));
Ещё раз «дополнительно»
Как заметили в каментах — можно обойтись и без патча к ядру (на 8й ветке), надо добавить в /boot/loader.conf
следующую строку:
kern.cam.boot_delay=10000