Скрипт автоматической установки FreeBSD

В продолжение темы - Сервер сетевой загрузки на FreeBSD выкладываю скрипт автоматической установки данной операционной системы. Скрипт был найден на просторах буржуйского интернета и содержит комментарии, что поможет Вам подправить его под собственные нужды.

1. Задаем переменные

#!/bin/sh

# Переменные
DESTDIR=/mnt
OUTPUT_REDIR="/dev/stdout"

# Опознаем первый диск (primary disk)
PRIMARY_DISK=`/sbin/sysctl -n kern.disks`

# Сетевую карту
/bin/echo -n "Gathering Network info..  "
NETIF=`/sbin/ifconfig -l -u | /usr/bin/sed -e 's/lo0//' -e 's/ //g'`

#Вводим сетевое имя
/bin/echo -n "Insert the full system hostname: "
read HOSTNAME

Данные настройки произведут установку на первый жесткий диск и с использованием первой сетевой карты.

2. Конфигурируем диск

# Конфигурируем диск
/bin/echo "Setup the GPT Label on $PRIMARY_DISK"
/sbin/gpart create -s GPT $PRIMARY_DISK

# Setup boot
/bin/echo -n "Setup the partitions.. "
/sbin/gpart add -b 34 -s 256 -t freebsd-boot -l boot $PRIMARY_DISK
/bin/echo -n "boot.. "

# Настраиваем раздел для swap
/sbin/gpart add -s 6g -t freebsd-swap -l swap0 $PRIMARY_DISK
/bin/echo -n "swap0.. "

# Раздел под систему
/sbin/gpart add -t freebsd-zfs -l system $PRIMARY_DISK
/bin/echo "system."

# Устанавливаем загрузчик
/bin/echo "Install the boot code.."
/sbin/gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 $PRIMARY_DISK

Используем GPT, размечаем диск, настраиваем загрузчик, выделяем 6Gb под Swap и раздел c ZFS, который занимает все оставшееся пространство диска

3. Создание zpool

# Удаление zpool.cache
if [ -f /boot/zfs/zpool.cache ]; then
	/bin/rm /boot/zfs/zpool.cache
fi
# Настройка zpool
/bin/echo "Setup the system zpool.."
/sbin/zpool create -O mountpoint=/mnt system /dev/gpt/system
if [ $? -ne 0 ]; then
   /sbin/zpool import -f system
   /sbin/zpool destroy system
   /sbin/zpool create -O mountpoint=/mnt system /dev/gpt/system
fi
Сначала удаляем старый zpool.cache, если таковой остался после предыдущий установок.
Создаем zpool с именем system на /dev/gpt/system. Рекомендуется проверить выполнение этого пункта, в случае неудачи, повторить.
 

4. Создание файловой системы и установка параметров

# Установка параметров ZFS 
/bin/echo "Setup the ZFS filesystems"
/sbin/zfs create -o compress=lzjb system/tmp
/bin/chmod 1777 /mnt/tmp
/sbin/zfs create system/usr
#/sbin/zfs create -o setuid=on system/usr/local
#/sbin/zfs create -o compress=gzip system/usr/src
#/sbin/zfs create -o compress=lzjb system/usr/obj
#/sbin/zfs create -o compress=gzip system/usr/ports
#/sbin/zfs create -o compress=off system/usr/ports/distfiles
/sbin/zfs create system/var
#/sbin/zfs create -o compress=gzip system/var/log
#/sbin/zfs create -o compress=lzjb system/var/audit
/sbin/zfs create -o compress=lzjb system/var/tmp
/bin/chmod 1777 /mnt/var/tmp
#/sbin/zfs create -o canmount=off system/usr/home
/sbin/zpool set bootfs=system system
Создание основной схемы файловой системы.  

Создание основной схемы файловой системы. 

5. Установка операционной системы

# Install base
/bin/echo "Installing base"
/usr/bin/tar -xvf /usr/freebsd-dist/base.txz -C $DESTDIR

# Install kernel
/bin/echo "Installing kernel"
/usr/bin/tar -xvf /usr/freebsd-dist/kernel.txz -C $DESTDIR
/bin/echo "Move kernel"
/bin/mv $DESTDIR/boot/GENERIC/* $DESTDIR/boot/kernel/

# Install doc
/bin/echo "Install docs"
/usr/bin/tar -xvf /usr/freebsd-dist/doc.txz -C $DESTDIR

# Install games (gotta have fortune.. :) )
/bin/echo "Install games"
/usr/bin/tar -xvf /usr/freebsd-dist/games.txz -C $DESTDIR

Все очень просто. Распаковываем различные части дистрибутива в $DESTDIR (/mnt). Вы можете не инсталировать документы и игры, это на Ваше усмотрение.

6. Настраиваем rc.conf и loader.conf 

# Устанавливаем переменные loader.conf 
/bin/echo "Setting the loader.conf variables.."
echo 'geom_label_load="YES"' >> $DESTDIR/boot/loader.conf
echo 'zfs_load="YES"' >> $DESTDIR/boot/loader.conf
echo 'vfs.root.mountfrom="zfs:system"' >> $DESTDIR/boot/loader.conf

# Устанавливаем переменные rc.conf 
/bin/echo "Setting the rc.conf variables.."
# Задаем имя хоста
echo "hostname=\"$HOSTNAME\"" >> $DESTDIR/etc/rc.conf
# Настройки DHCP
echo "ifconfig_$NETIF=\"DHCP\"" >> $DESTDIR/etc/rc.conf
# Включаем sshd
echo 'sshd_enable="YES"' >> $DESTDIR/etc/rc.conf
echo '' >> $DESTDIR/etc/rc.conf

# Отключаем sendmail
echo '# Postfix' >> $DESTDIR/etc/rc.conf
echo 'postfix_enable="YES"' >> $DESTDIR/etc/rc.conf
echo 'sendmail_enable="NO"' >> $DESTDIR/etc/rc.conf
echo 'sendmail_submit_enable="NO"' >> $DESTDIR/etc/rc.conf
echo 'sendmail_outbound_enable="NO"' >> $DESTDIR/etc/rc.conf
echo 'sendmail_msp_queue_enable="NO"' >> $DESTDIR/etc/rc.conf
echo '' >> $DESTDIR/etc/rc.conf

# Включаем NTP
echo '# NTP' >> $DESTDIR/etc/rc.conf
echo 'ntpdate_enable="YES"' >> $DESTDIR/etc/rc.conf
echo 'ntpd_enable="YES"' >> $DESTDIR/etc/rc.conf
echo '' >> $DESTDIR/etc/rc.conf

echo 'zfs_enable="YES"' >> $DESTDIR/etc/rc.conf
# Отключение fsck в фоновом режиме
echo 'background_fsck="NO"' >> $DESTDIR/etc/rc.conf

 

Основной конфиг с некоторыми дополнениями. Я всегда использую Postfix на моих системах, поэтому sendmail отключаю.
 
7. Конфигурация swap-раздела
# Настройки swap
echo "/dev/gpt/swap0 none swap sw 0 0" >> $DESTDIR/etc/fstab
8. Установка временной зоны
# Set the timezone
/bin/echo "Setting the timezone to PST.."
/bin/cp /usr/share/zoneinfo/PST8PDT $DESTDIR/etc/localtime
В скрипте используется время PST (Pacific time)
 
9. Обновление системы с помощью FreeBSD Update
# Обновление системы используя FreeBSD Update
/bin/echo "Running FreeBSD Update"
FREEBSD_UPDATE="/usr/sbin/freebsd-update"
# Fetch the updates
#$FREEBSD_UPDATE -b $DESTDIR fetch >${OUTPUT_REDIR}

# Install the Downloaded FreeBSD Updates
#$FREEBSD_UPDATE -b $DESTDIR install >${OUTPUT_REDIR}

Я отключил последние пункта для тестирования, Вы можете раскоментировать эти строки и обновлять систему в процессе установки.

 
10 Копирование zpool.cache
# Копирование кэш файлов
if [ -f /boot/zfs/zpool.cache ]; then
   /bin/echo "copy zpool.cache.."
   /bin/mkdir -p $DESTDIR/boot/zfs
   /bin/cp /boot/zfs/zpool.cache $DESTDIR/boot/zfs/zpool.cache
fi
if [ -f /var/tmp/zpool.cache ]; then
   /bin/echo "copy /var/tmp/zpool.cache.."
   /bin/mkdir -p $DESTDIR/boot/zfs
   /bin/cp /var/tmp/zpool.cache $DESTDIR/boot/zfs/zpool.cache
fi
Данная часть обнаруживает, если кэш-файл существует и копирует его на реальную систему, в противном случае она не будет загружаться.
 
11. Сброс точек монтирования
 
/bin/echo "Resetting the mount points"
/sbin/zfs umount -a
/sbin/zfs set mountpoint=legacy system
/sbin/zfs set mountpoint=/tmp system/tmp
/sbin/zfs set mountpoint=/usr system/usr
/sbin/zfs set mountpoint=/var system/var
Размонтирование zfs разделов и установка их нормальных значений
 
12. Перезагрузка
# Reboot
/bin/echo "Rebooting now.."
/sbin/reboot
Вроде как все закончено, поэтому переходим к перезагрузке. Если в процессе перезагрузки что-то пошло не так, еще раз просмотрите Ваш скрипт, на предмет ошибок.
После того как система поднимется, Вам необходимо задать пароль root и создать Вашего пользователя.
 
 
Интересное на сайте: 
0
Голосов пока нет