Xgu.ru теперь в Контакте  — приходите и подключайтесь.
Пока мы работаем над следующими видео, вы можете подключиться в Контакте. Познакомимся и обсудим новые страницы и ролики.

Vk-big.pngYoutube-big.jpeg

FreeBSD:Способы установки

Материал из Xgu.ru

Перейти к: навигация, поиск
stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.

Если вы считаете, что её стоило бы доработать как можно быстрее, пожалуйста, скажите об этом.


Автор: Участник:RemiZOffAlex

Содержание

[править] Этап I. Загрузка

Ссылка на релиз 9.1.

[править] Образ CD/DVD

Качаем с официального сайта образ диска

# fetch ftp://ftp.freebsd.org/pub/FreeBSD/releases/ISO-IMAGES/9.1/FreeBSD-9.1-RELEASE-i386-bootonly.iso

Записываем образ на диск

[править] USB диск

Качаем с официального сайта образ

# fetch ftp://ftp.freebsd.org/pub/FreeBSD/releases/ISO-IMAGES/9.1/FreeBSD-9.1-RELEASE-i386-memstick.img

Записываем образ на флешку

# dd if=FreeBSD-9.0-RELEASE-i386-memstick.img of=/dev/da0 bs=8k

[править] PXE

Способ загрузки FreeBSD по сети с использованием технологии PXE.

[править] Сервер

Каталог для загружаемой системы выбран /data/thinstation. Сюда помещаем систему, которая будет в последствии загружаться по сети. Это либо готовая сборка, либо скачанный с официального сайта и распакованный образ.

Правим следующие конфигурационные файлы:

/etc/hosts.allow

# Добавляем разрешение регистрации RPC сервисов с указанной подсети, иначе выдаст RPC: Program not registered
rpcbind : 192.168.0.0/255.255.255.0 : allow

/etc/exports

/data/thinstation -maproot=root -alldirs -network 192.168.0.0/24

/etc/rc.conf

# DHCP
dhcpd_enable="YES"                              # dhcpd enabled?
dhcpd_flags="-q"                                # command option(s)
dhcpd_conf="/usr/local/etc/dhcpd.conf"          # configuration file
dhcpd_ifaces="em1"                              # ethernet interface(s)
dhcpd_withumask="022"                           # file creation mask

# NFS
nfs_server_enable="YES"
nfsv4_server_enable="YES"

# Inetd
inetd_enable="YES"

/etc/inetd.conf

tftp    dgram   udp     wait    root    /usr/libexec/tftpd      tftpd -l -s /data/thinstation

/usr/local/etc/dhcpd.conf

# Добавляем путь загрузки
option root-path "192.168.0.1:/data/thinstation";
# Ну и сам загрузочник
filename "/boot/pxeboot";

Ну и все это дело запускаем:

# /etc/rc.d/nfsd start
# /etc/rc.d/inetd start
# /usr/local/etc/rc.d/isc-dhcpd start

[править] Клиент

/boot/loader.conf

boot.nfsroot.server="192.168.0.1"
boot.nfsroot.path="/data/thinstation" 
vfs.root.mountfrom="nfs" 
vfs.root.mountfrom.options=rw

/etc/fstab

192.168.0.1:/data/thinstation /     nfs    rw     0    0
proc                          /proc procfs rw     0    0

/etc/rc.conf

# Network
ifconfig_DEFAULT="DHCP"
# SSH
sshd_enable="YES"

[править] Этап II. Разбивка диска

Пример разбивки:MBR Пример разбивки:GPT
UFS ZFS RAID UFS ZFS RAID
UFS ZFS UFS ZFS
MBR-UFS MBR-ZFS MBR-RAID MBR-RAID GPT-UFS GPT-ZFS MBR-RAID MBR-RAID

[править] MBR

Code: sh
# gpart create -s mbr da0

[править] MBR-UFS

Code: sh
# gpart add -t freebsd da0
# gpart set -a active -i 1 da1
# newfs -U -L FreeBSDonUSB /dev/da0s1a
# mount /dev/da0s1a /mnt

[править] MBR-ZFS

# gpart create -s mbr da1
# gpart add -t freebsd da1
# gpart set -a active -i 1 da1
# zpool create zroot /dev/da1s1
# zpool set bootfs=zroot zroot
# gpart bootcode -b /mnt2/boot/boot0 ad0

Install ZFS boot - Export zroot, before installing boot code

Fixit# zpool export zroot

- Install the boot1 stage:

Fixit# dd if=/mnt2/boot/zfsboot of=/dev/ad0s3 count=1

This may fail with an "operation not permitted" error message, since the kernel likes to protect critical parts of the disk. If this happens for you, run:

Fixit# sysctl kern.geom.debugflags=0x10

- Install the boot2 zfs stage into the convienient hole in the ZFS filesystem on-disk format which is located just after the ZFS metadata (this is the seek=1024).

Fixit# dd if=/mnt2/boot/zfsboot of=/dev/ad0s3 skip=1 seek=1024

- Import zroot to continue the install

Fixit# zpool import zroot

[править] GPT

# gpart create -s gpt ada0

[править] GPT-UFS

Code: script.sh
#!/bin/sh
drive="/dev/ada0"
letter="X"
 
gpart create -s GPT ${drive}
gpart add -s 256 -t freebsd-boot -l boot${letter} ${drive}
gpart add -s 2G -t freebsd-swap -l swap${letter} ${drive}
gpart add -t freebsd-ufs -l disk${letter} ${drive}
newfs -O2 -U /dev/gpt/disk${letter}
tunefs -j enable /dev/gpt/disk${letter}
mount -t ufs -o rw /dev/gpt/disk${letter} /mnt

После установки не забываем записать загрузчик

# gpart bootcode -b /mnt/boot/pmbr -p /mnt/boot/gptboot -i 1 /dev/ada0

[править] GPT-ZFS

#!/bin/sh
# Диск для разметки (Внимание! Все данные с диска будут стерты)
drive="/dev/ada0"
# Маркер разметки
letter="X"
# Имя пула
poolname="zfssystem"
# Точка монтирования будущей системы
mountpoint="/mnt"

gpart create -s GPT ${drive}
gpart add -s 256 -t freebsd-boot -l boot${letter} ${drive}
gpart add -s 2G -t freebsd-swap -l swap${letter} ${drive}
gpart add -t freebsd-zfs -l disk${letter} ${drive}

# Создаем пул с именем zfssystem (переменная poolname) на разделе diskX и подключаем к точке монтирования /mnt
zpool create -m ${mountpoint} ${poolname} /dev/gpt/disk${letter}
zpool set bootfs=${poolname} ${poolname}
zfs set checksum=fletcher4 ${poolname}
zfs set atime=off ${poolname}

Создаем структуру папок с указанием параметров

Возможно указание сжатия некоторых директорий, таких как /usr/ports /usr/src

zfs create ${poolname}/var
zfs create ${poolname}/var/db
zfs create -o exec=off -o setuid=off ${poolname}/var/empty
zfs set readonly=on ${poolname}/var/empty
zfs create ${poolname}/var/tmp
zfs create ${poolname}/var/empty
zfs create -o compression=gzip ${poolname}/var/crash
zfs create ${poolname}/tmp
zfs create ${poolname}/usr
zfs create -o compression=gzip -o mountpoint=${mountpoint}/usr/src ${poolname}/src
zfs create -o compression=gzip -o mountpoint=${mountpoint}/usr/ports ${poolname}/ports
zfs create -o mountpoint=${mountpoint}/usr/ports/distfiles ${poolname}/distfiles
zfs create -o mountpoint=${mountpoint}/usr/home ${poolname}/home
zfs create -o mountpoint=${mountpoint}/usr/local ${poolname}/local
zfs create -o mountpoint=${mountpoint}/usr/obj ${poolname}/obj
zfs create ${poolname}/data
chmod 1777 ${mountpoint}/tmp ${mountpoint}/var/tmp

[править] Устанавливаем необходимые параметры в файлы конфигурации

Включаем ZFS

echo '# ZFS' > ${mountpoint}/etc/rc.conf
echo 'zfs_enable="YES"' > ${mountpoint}/etc/rc.conf

Настраиваем полноценный запуск ZFS

echo 'zfs_load="YES"' > ${mountpoint}/boot/loader.conf
echo 'vfs.root.mountfrom="zfs:'${poolname}'"' >> ${mountpoint}/boot/loader.conf
echo 'vm.kmem_size="1024M"' >> ${mountpoint}/boot/loader.conf
echo 'vm.kmem_size_max="1024M"' >> ${mountpoint}/boot/loader.conf
echo 'vfs.zfs.arc="512M"' >> ${mountpoint}/boot/loader.conf
echo 'vfs.zfs.arc_max="512M"' >> ${mountpoint}/boot/loader.conf
echo 'vfs.zfs.vdev.cache.size="10M"' >> ${mountpoint}/boot/loader.conf
echo 'vfs.zfs.prefetch_disable=1' >> ${mountpoint}/boot/loader.conf

Обязательно добавляем чтоб компилировать систему с поддержкой загрузочника ZFS

echo 'LOADER_ZFS_SUPPORT=YES' >> ${mountpoint}/etc/src.conf

После установки не забываем записать загрузчик

# gpart bootcode -b ${mountpoint}/boot/pmbr -p ${mountpoint}/boot/gptzfsboot -i 1 ${drive}

[править] GPT-ZFS

# gpart create -s /dev/ada0
# gpart add -s 256 -t freebsd-boot -l bootX /dev/ada0
# gpart add -s 2G -t freebsd-swap -l swapX /dev/ada0
# gpart add -t freebsd-zfs -l diskX /dev/ada0

После установки не забываем записать загрузчик

# gpart bootcode -b /mnt/boot/pmbr -p /mnt/boot/gptzfsboot -i 1 /dev/ada0

Создаем пул с именем zfssystem на разделе diskX и подключаем к точке монтирования /mnt

# zpool create -m /mnt zfssystem /dev/gpt/diskX
# zpool set bootfs=zfssystem zfssystem
# zfs set checksum=fletcher4 zfssystem
# zfs set atime=off zfssystem

Создаем структуру папок с указанием параметров

Возможно указание сжатия некоторых директорий, таких как /usr/ports /usr/src

zfs create zfssystem/var
zfs create zfssystem/var/db
zfs create -o exec=off -o setuid=off zfssystem/var/empty
zfs set readonly=on zfssystem/var/empty
zfs create zfssystem/var/tmp
zfs create zfssystem/var/empty
zfs create -o compression=gzip zfssystem/var/crash
zfs create zfssystem/tmp
zfs create zfssystem/usr
zfs create -o compression=gzip -o mountpoint=/mnt/usr/src zfssystem/src
zfs create -o compression=gzip -o mountpoint=/mnt/usr/ports zfssystem/ports
zfs create -o mountpoint=/mnt/usr/ports/distfiles zfssystem/distfiles
zfs create -o mountpoint=/mnt/usr/home zfssystem/home
zfs create -o mountpoint=/mnt/usr/local zfssystem/local
zfs create -o mountpoint=/mnt/usr/obj zfssystem/obj
zfs create zfssystem/data
chmod 1777 /mnt/tmp /mnt/var/tmp

[править] Устанавливаем необходимые параметры в файлы конфигурации

Включаем ZFS

echo '# ZFS' > /mnt/etc/rc.conf
echo 'zfs_enable="YES"' > /mnt/etc/rc.conf

Настраиваем полноценный запуск ZFS

echo 'zfs_load="YES"' > /mnt/boot/loader.conf
echo 'vfs.root.mountfrom="zfs:zfssystem"' >> /mnt/boot/loader.conf
echo 'vm.kmem_size="1024M"' >> /mnt/boot/loader.conf
echo 'vm.kmem_size_max="1024M"' >> /mnt/boot/loader.conf
echo 'vfs.zfs.arc="512M"' >> /mnt/boot/loader.conf
echo 'vfs.zfs.arc_max="512M"' >> /mnt/boot/loader.conf
echo 'vfs.zfs.vdev.cache.size="10M"' >> /mnt/boot/loader.conf
echo 'vfs.zfs.prefetch_disable=1' >> /mnt/boot/loader.conf

Обязательно добавляем чтоб компилировать систему с поддержкой загрузочника ZFS

echo 'LOADER_ZFS_SUPPORT=YES' >> /mnt/etc/src.conf

[править] Этап III. Установка системы

[править] Установка релиза с официального сайта

Через скрипт будет элегантнее

workdir="/data"
sysrelease="9.1"
address="ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/"${sysrelease}"-RELEASE/"
fetch ${address}base.txz ${address}kernel.txz -o ${workdir}
export DESTDIR=/mnt
for file in ${workdir}/base.txz ${workdir}/kernel.txz; do (cat $file | tar --unlink -xpJf - -C ${DESTDIR:-/}) ; done

[править] Сборка и установка собственной системы из исходников

Предподготовка

# mkdir /mnt/usr /mnt/usr/ports /mnt/usr/src /mnt/usr/obj
# svn checkout https://svn0.us-west.freebsd.org/base/stable/9/ /mnt/usr/src
# svn checkout https://svn0.us-west.freebsd.org/ports/head/ /mnt/usr/ports

Сборку и установку лучше производить скриптом, с использованием команды make:

#!/bin/sh

# Точка монтирования будущей системы
mountpoint="/mnt"
# Архитектура
architecture="i386"
# Путь к файлу make.conf
makeconf="/data/scripts/make.conf"
# Путь к файлу src.conf
srcconf="/data/scripts/src.conf"
# Путь к исходникам
sourcepath=${mountpoint}"/usr/src"
# Путь к obj
objpath=${mountpoint}"/usr/obj"

make -j4 buildworld TARGET_ARCH=${architecture} \
TARGET=${architecture} __MAKE_CONF=${makeconf} SRCCONF=${srcconf} \
MAKEOBJDIRPREFIX=${objpath} -C ${sourcepath}

make -j4 buildkernel KERNCONF=FLASH TARGET_ARCH=${architecture} \
TARGET=${architecture} __MAKE_CONF=${makeconf} SRCCONF=${srcconf} \
MAKEOBJDIRPREFIX=${objpath} -C ${sourcepath}

make installworld DESTDIR=${mountpoint} TARGET_ARCH=${architecture} \
TARGET=${architecture} __MAKE_CONF=${makeconf} SRCCONF=${srcconf} \
MAKEOBJDIRPREFIX=${objpath} -C ${sourcepath}

make installkernel KERNCONF=FLASH DESTDIR=${mountpoint} \
TARGET_ARCH=${architecture} TARGET=${architecture} \
__MAKE_CONF=${makeconf} SRCCONF=${srcconf} \
MAKEOBJDIRPREFIX=${objpath} -C ${sourcepath}

mergemaster -m ${sourcepath} -A ${architecture} -D ${mountpoint}

Для сборки с ZFS следует внести изменения в соответствующий файл /etc/src.conf

# echo 'LOADER_ZFS_SUPPORT=YES' >> /etc/src.conf

[править] Этап IV. Конфигурация системы

[править] Настраиваем конфигурационные файлы

/etc/fstab

# Device	Mountpoint	FStype	Options	Dump	Pass#
/dev/gpt/disk0	/		ufs	rw	1	1
proc		/proc		procfs	rw	0	0
/dev/gpt/swap0	none		swap	sw	0	0

Для USB flash накопителей, чтоб не вывести их преждевременно из строя:

# Device	Mountpoint	FStype	Options		Dump	Pass#
/dev/gpt/disk0	/		ufs	rw,noatime	1	1
proc		/proc		procfs	rw		0	0

[править] FreeBSD:Настройка сетевых подключений

/etc/rc.conf

# Network
ifconfig_DEFAULT="YES"

# Firewall
firewall_enable="YES"
firewall_type="OPEN"
 
# SSH
sshd_enable="YES"

[править] SSH

Для запуска демона необходимо добавить в /etc/rc.conf запись

sshd_enable="YES"

[править] DNS

Настройка службы named

/etc/rc.conf

named_enable="YES"

/etc/namedb/named.conf

Обязательно раскомментировать секцию: forwarders

forwarders {
	192.168.0.1;
};

/etc/resolv.conf

nameserver 127.0.0.1

[править] NTP

Служба точного времени включается добавлением в /etc/rc.conf записи

ntpd_enable="YES"

[править] Добавление пользователей

# echo 'PASSWORD' | pw useradd USERNAME -G wheel -s /bin/tcsh -m -d /home/username -h 0

Перезагрузка

# shutdown -r now

[править] Этап V. Установка необходимых программных пакетов

Установка утилиты portmaster. Её цель - актуальная сборка/пересборка пакетов.

# make -C /usr/ports/ports-mgmt/portmaster install clean

┌────────────────────────────────────────────────────────────────────┐
│ Options for portmaster 3.14_8                                      │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │   [ ] BASH        Install programmable completions for Bash    │ │
│ │   [ ] PKGNGPATCH  Enable PKGNG support                         │ │
│ │   [ ] ZSH         Install programmable completions for zsh     │ │
│ └────────────────────────────────────────────────────────────────┘ │
├────────────────────────────────────────────────────────────────────┤
│                   <  OK  >          <Cancel>                       │
└────────────────────────────────────────────────────────────────────┘
#!/bin/sh -

workdir="/data/scripts"
portsdir="/usr/ports"

# Загрузка ПО из сети Интернет
make -C /usr/ports/ports-mgmt/portmaster/ fetch-recursive
for port in `cat ${workdir}/list_ports`
do
	make -C ${portsdir}/${port} fetch-recursive
done

# Установка ПО
make -C /usr/ports/ports-mgmt/portmaster/ install clean
rehash
for port in `cat ${workdir}/list_ports`
do
	portmaster $port
done
rehash

Пример файла list_ports

net/mpd5
databases/mysql55-server