Установка FreeBSD на USB-Flash

Приведенные здесь инструкции позволили создать установочный образ
     FreeBSD, который можно dd-ть прямо на USB-носитель.

     Если вы хотите произвести установку FreeBSD с USB-носителя, то можете
     ознакомиться с Dario Freni's script

     Нам понадобится DISC1.

     Монтируем ISO в /dist:

          # mkdir -p /dist
          # mdconfig -a -f /a/FreeBSD/6.1-RC1-i386-disc1.iso
          md1
          # mount -t cd9660 /dev/md1 /dist


     Подключите USB-носитель. Поскольку обычно они отформатированы под
     FAT32, мы должны создать метку слайса BSD. Будьте осторожны, эта
     команда удалит все существующие на носителе слайсы. Если вы получите
     сообщение "Geom not found" - не волнуйтесь.

          # fdisk -BI /dev/da0


     Мы нуждаемя в метке диска:

          # bsdlabel -B -w da0s1


     и файловой системе, которую мы примонтируем к /mnt. Чтобы уменьшить
     число обращений к USB, будем использовать флаг -U, для работы soft
     updates. Дополнительно, чтобы мы могли найти файловую систему, вне
     зависимости от того, где USB появляется в дереве устройств, мы
     маркируем файловую систему как FreeBSDonUSB:

          # newfs -U -L FreeBSDonUSB /dev/da0s1a
          /dev/da0s1a: 481.0MB (985040 sectors) block size 16384, fragment size 2048
          using 4 cylinder groups of 120.25MB, 7696 blks, 15424 inodes.
          with soft updates
          super-block backups (for fsck -b #) at:
           160, 246432, 492704, 738976

          # mount /dev/da0s1a /mnt


     Теперь, чтобы сделать пусть ослепительно легким:

          # cd /dist/6.1-RC1/base
          # DESTDIR=/mnt ./install.sh
          You are about to extract the base distribution into /mnt - are you SURE
          you want to do this over your installed system (y/n)? y


     Начиная с версии 6.1, на компакт диске присутствуют и однопроцессорные
     ядра и ядра SMP. sysinstall установит правильное, в зависимости от
     конфигурации ваших аппаратных средств. Если Вы хотите использовать
     ядро SMP, просто укажите smp вместо generic:

          # cd /dist/6.1-RC1/kernels
          # DESTDIR=/mnt ./install.sh generic
          # rmdir /mnt/boot/kernel
          # mv /mnt/boot/GENERIC /mnt/boot/kernel


     Устанавливаем менеджер загрузки. Мы используем опцию noupdate, чтобы
     предотвратить перезапись boot0 после каждой загрузки.

          # boot0cfg -v -B -o noupdate da0
          #   flag     start chs   type       end chs       offset         size
          1   0x80      0:  1: 1   0xa5    480: 63:32           32       985056
          version=1.0  drive=0x80  mask=0xf  ticks=182
          options=packet,noupdate,nosetdrv
          default_selection=F1 (Slice 1)


     Создаем файл fstab на USB-носителе. Журнальные файлы мы будем
     хранить в памяти, чтобы минимизировать запись на носитель.

          # Device                Mountpoint      FStype  Options         Dump    Pass#
          /dev/ufs/FreeBSDonUSB   /               ufs     rw,noatime      1       1
          md                      /tmp            mfs     rw,-s16M,nosuid,noatime 0   0
          md                      /var/run        mfs     rw,-s4M,nosuid,noatime  0   0
          md                      /var/log        mfs     rw,-s16M,nosuid,noatime 0   0
          /dev/acd0               /cdrom          cd9660  ro,noauto,nosuid        0   0
          /proc                   /proc           procfs  rw,noauto       0       0
          /tmp                    /var/tmp        nullfs  rw              0       0


     Так как мы используем метку UFS, чтобы определить корневую файловую
     систему, мы должны форсировать загрузку класса GEOM:

          # cat >> /mnt/boot/loader.conf << EOF
          geom_label_load="YES"
          EOF


     vi использует /var/tmp/vi.recover, поэтому загрузим и
     установим следующий скрипт:

          # mkdir -p /mnt/usr/local/etc/rc.d/
          # cd /mnt/usr/local/etc/rc.d/
          # fetch http://people.freebsd.org/~ceri/FreeBSDonUSB/scripts/mkvirecover
          # chmod 555 mkvirecover


     Чтобы команды, которые используют wtmp, могли правильно
     работать с /var/log на RAM диске, мы должны сказать newsyslog
     OK, чтобы создать пустой/var/log/wtmp. Редактируйте файл конфигурации
     /mnt/etc/newsyslog.conf и добавьте C к строке /var/log/wtmp:

          /var/log/wtmp                          644  3     *    @01T05 BC


     Сетевые интерфейсы будут конфигурироваться через DHCP, за исключением
     plip0 и fwe0, так как они фактически никогда не связываются с сервером
     DHCP.

          # cat >> /etc/rc.conf << EOF
          ifconfig_DEFAULT="DHCP"
          ifconfig_fwe0="NOAUTO"
          ifconfig_plip0="NOAUTO"
          EOF


     Снова, для уменьшения числа операций записи на USB, мы создадим
     локальную базу данных и запретим еженедельное обновление:

          # chroot /mnt /bin/sh
          # mount_devfs devfs /dev
          # /etc/periodic/weekly/310.locate

          Rebuilding locate database:
          # cat >> /etc/periodic.conf << EOF
          weekly_locate_enable="NO"
          weekly_whatis_enable="NO"
          EOF


     Установим необходимые пакеты и зададим пароль пользователя root:

          # chroot /mnt /bin/sh
          # passwd root
          # pkg_add -r lsof rsync unzip zsh kde...
 
источник