Создаем загрузочную флешку с правильной и предсказуемой ОС, т.е. FreeBSD, на шифрованном разделе и, при этом, не теряем возможности использования носителя по назначению — переносить файлы между компами с разнообразными операционными системами, путем добавления FAT32-раздела.
Предположим, что da1 — это наша флешка.
1 2 3 4 |
gpart destroy -F da1 Удаляем разметку диска gpart create -s GPT da1 Создаем GPT разметку gpart add -t ms-basic-data -a 4k -s 5G -l volfat32 da1 Добавим раздел для FAT32 newfs_msdos -L FLASH8 -F 32 /dev/da1p1 Отформатируем только что созданный раздел |
1 2 3 4 5 |
gpart add -t freebsd-boot -a 4k -s 16k da1 Добавляем загрузочный раздел размером 16 Кб gpart add -t freebsd-ufs -a 4k -s 128M -l freebsd-boot da1 Раздел с загрузчиком и ядром, 128 Мб gpart add -t freebsd-ufs -a 4k -l freebsd-root da1 Корневой раздел на все оставшееся место gpart bootcode -b /boot/boot0 -p /boot/gptboot -i 2 da1 Установим загрузчик newfs -L FREEBSDBOOT -o time -n /dev/da1p3 Форматируем раздел ядра |
1 2 3 |
geli init -b -s 4096 -e AES-XTS /dev/da1p4 Инициализируем шифрование на разделе geli attach /dev/da1p4 Подключим раздел к системе newfs -L FREEBSD -o time -n /dev/da1p4.eli Форматируем шифрованный диск |
-b — спросить пароль.
-s — размер блока. Больше блок — ниже стойкость, меньше — ниже производительность. Должен быть кратен размеру сектора диска.
-e — алгоритм шифрования, все можно посмотреть в man geli.
Чтобы BIOS, поддерживающий спецификацию EFI, мог загрузиться с диска, нужно чтобы первый раздел был отформатирован под FAT и на нем, в директории /efi/boot, лежал загрузчик.
1 2 3 4 |
mount_msdosfs /dev/da1p1 /mnt/ Монтируем FAT32 раздел mkdir -p /mnt/efi/boot Создаем директории cp /boot/boot1.efi /mnt/efi/boot/BOOTX64.EFI Копируем EFI-загрузчик umount /mnt Размонтируем раздел |
Ставим систему. Файлы base.txz, lib32.txz и kernel.txz можно найти на установочном диске в каталоге /usr/freebsd-dist.
1 2 3 4 5 6 7 8 9 10 |
mount /dev/da1p4.eli /mnt/ Монтируем основной фряшный раздел mkdir /mnt/nenc Создадим директорию, в которую будем монтировать раздел с ядром mount /dev/da1p3 /mnt/nenc Монтируем раздел с ядром tar -xpf base.txz -C /mnt/ Ставим файлы окружения системы tar -xpf lib32.txz -C /mnt/ Ставим поддержку 32-х битного ПО tar -xpf kernel.txz --exclude "*.symbols" -C /mnt/ Ставим ядро chroot /mnt Выполняем черут в /mnt passwd root Ставим пароль root ln -s /nenc/boot /boot Создаем симлинк на boot exit Выходим из черута |
Правим основные файлы конфигурации.
Прописываем в fstab файловые системы. Дабы не затирать временными файлами ячейки флеш-памяти, разместим /tmp, /var/run, /var/tmp в памяти.
1 2 3 4 5 |
echo "/dev/da0p4.eli / ufs rw,noatime 1 1" >> /mnt/etc/fstab Основной раздел echo "/dev/da0p3 /nenc ufs rw,noatime 1 1" >> /mnt/etc/fstab Раздел с ядром echo "md /tmp mfs rw,noatime,-s64m 0 0" >> /mnt/etc/fstab /tmp в памяти echo "md1 /var/tmp mfs rw,noatime,-s16m 2 0" >> /mnt/etc/fstab /var/tmp в памяти echo "md2 /var/run mfs rw,noatime,-s4m 2 0" >> /mnt/etc/fstab /var/run в памяти |
В rc.conf отключаем sendmail, фоновую проверку диска и включим автоматическое согласие на все, что скажет fsck при старте
1 2 3 4 5 6 7 |
echo 'hostname="FreeBSD-USB"' >> /mnt/etc/rc.conf echo 'fsck_y_enable="YES"' >> /mnt/etc/rc.conf echo 'background_fsck="NO"' >> /mnt/etc/rc.conf echo 'sendmail_enable="NO"' >> /mnt/etc/rc.conf echo 'sendmail_submit_enable="NO"' >> /mnt/etc/rc.conf echo 'sendmail_outbound_enable="NO"' >> /mnt/etc/rc.conf echo 'sendmail_msp_queue_enable="NO"' >> /mnt/etc/rc.conf |
В loader.conf уменьшаем время ожидания, устанавливаем диск с корневой ФС, грузим модули шифрования разделов (geom_eli) и поддержки аппаратного шифрования (aesni).
1 2 3 4 |
echo 'autoboot_delay="3"' >> /mnt/boot/loader.conf echo 'vfs.root.mountfrom="ufs:da0p4.eli"' >> /mnt/boot/loader.conf echo 'geom_eli_load="YES"' >> /mnt/boot/loader.conf echo 'aesni_load="YES"' >> /mnt/boot/loader.conf |
При загрузке на некоторых компьютерах может не совсем корректно отображаться консоль, например так:
чтобы этого не происходило, нужно добавить
1 |
echo 'gop set 0' >> /mnt/boot/loader.rc.local |
Теперь можно загрузиться с флешки, как с UEFI-диска, поставить необходимый софт и пользоваться.