Главная > Работа, Саморазвитие > Установка FreeBSD с диска LiveFS

Установка FreeBSD с диска LiveFS

Предыстория. У меня есть сервер с 4 гигабайтами памяти. В дальнейшем предполагается нарастить ее до 8 гигабайт. По этому будем ставить amd64. Так же как не смешно, у меня нету установочного диска с этой версией FreeBSD. Но есть LiveFS диск «7.2-RELEASE-amd64-livefs.iso». Так же в сети есть свой cvsup сервер на котором так сказать есть все исходники. По этому в планах:
1. загрузиться с диска
2. разметить винчестер и смонтировать его
3. создать в памяти раздел
4. скачать src мира и собрать его в памяти
5. установить собранный мир на винчестер
Это предварительный план чего хочется сделать. Так же зачем это все делается? Конечно можно просто с ftp скачать установочный диск и забыть о таких проблемах. Можно создать загрузочную флешку и установить все с нее. Можно по сети подмапить src и собрать на ней же. Но хочется получить experience и заработать levalup так сказать :) По этому загружаемся с livefs диска. В меню sysinstal выбираем Fixit -> cdrom/dvd и попадаем в shell. Тут конечно самое интересное в том, что тут доступно только ограниченное кол-во команд. Первым делом надо завести сеть. Для этого достаточно через ifconfig задать ip. По этому:

ipconfig em0 10.1.2.200/17

Дальше для получения доступа ко всем командам необходимо зачерутится в /dist для этого скомандуем:

chroot /dist

Дальше для сборки мира нам понадобится ряд устройств из /dev. Для этого смонтируем devfs куда следует:

mount -t devfs devfs /dev

Теперь создадим диск в оперативной памяти:

mdconfig -a -t swap -s 3Gb -u 10

Тут у нас:
-a создать диск
-t swap говорим, что диск создаем из памяти
-s 3Gb собственно размер в 3 гигабайта
-u 10 указываем специфический номер для устройства в /dev
Дальше создадим файловую систему на устройстве и смонтируем его:

newfs /dev/md10
mount /dev/md10 /mnt

Теперь мы имеем диск в 3 гигабайта где мы будем проводить все оставшуюся работу. Для начала скачаем исходные тесты системы. Для этого создадим следующий supfile:

# cat /mnt/csup.conf
*default host=10.1.1.200
*default prefix=/mnt
*default base=/mnt
*default release=cvs tag=.
*default delete use-rel-suffix compress

src-all         tag=RELENG_7_2

#

Ну и конечно же запускаем скачивание src:

# csup -L 2 /mnt/csup.conf
Parsing supfile "/mnt/csup.conf"
Connecting to 10.1.1.200
Connected to 10.1.1.200
Server software version: SNAP_16_1h
Negotiating file attribute support
Exchanging collection information
Establishing multiplexed-mode data connection
Running
Updating collection src-all/cvs
 Checkout src/COPYRIGHT
 Checkout src/LOCKS
 Checkout src/MAINTAINERS
#--- skip ---#
 Checkout src/usr.sbin/zzz/zzz.8
 Checkout src/usr.sbin/zzz/zzz.sh
Shutting down connection to server
Finished successfully
#

Конечно же 10.1.1.200 нужно заменить на адрес вашего cvsup сервера или ближайшего к вам.
Исходные тексты системы мы получили. Теперь проведем все необходимые работы с винчестером.
Для начала создадим слайс. Так как у меня будет только FreeBSD стоять, то делаем слайс на весь доступный объем. Так же запишим загрузочный сектор:

fdisk -B -b /boot/boot0 da0

Где у нас
-B ре инициализируем загрузочный сектор
-b /boot/boot0 указываем что у нас будет загрузчиком. По умолчанию идет /boot/mbr
Теперь разметим диск с помощью bsdlabel:

bsdlabel -wB da0s1 auto

Тут у нас следующие ключи:
-w записываем
-B создаем бут сектор
А теперь начинается самое интересно! надо отредактировать разделы под себя. Для этого сохраним разметку в файл и откроем ее в любимом редакторе и приведем к желаемому виду.

bsdlabel da0s1 > /mnt/label_da0

Формула для расчета секторов такая 1Gb*1024*1024*2=097152. После всех расчетов у нас получается вот такая таблица разметки:

# cat /mnt/label_da0
# /dev/da0s1:
8 partitions:
#        size   offset    fstype   [fsize bsize bps/cpg]
  a:  2097152        0    4.2BSD        0     0     0
  b:  4194304  2097152      swap
  c: 16771797        0    unused        0     0         # "raw" part, don't edit
  d:  2097152  6291456    4.2BSD        0     0     0
  e:  4194304  8388608    4.2BSD        0     0     0
  f:  4188885 12582912    4.2BSD        0     0     0
#

После это надо записать новую разметку:

bsdlabel -R da0s1 /mnt/label_da0

Теперь создадим файловые системы и смонтируем их:

# mkdir /mnt/root
# newfs -U da0s1a
/dev/da0s1a: 1024.0MB (2097152 sectors) block size 16384, fragment size 2048
        using 6 cylinder groups of 183.72MB, 11758 blks, 23552 inodes.
super-block backups (for fsck -b #) at:
 160, 376416, 752672, 1128928, 1505184, 1881440
# mount /dev/da0s1a /mnt/root
# mkdir /mnt/root/tmp /mnt/root/var /mnt/root/usr
# newfs -U da0s1d
/dev/da0s1d: 1024.0MB (2097152 sectors) block size 16384, fragment size 2048
        using 6 cylinder groups of 183.72MB, 11758 blks, 23552 inodes.
super-block backups (for fsck -b #) at:
 160, 376416, 752672, 1128928, 1505184, 1881440
# newfs -U da0s1e
/dev/da0s1e: 2048.0MB (4194304 sectors) block size 16384, fragment size 2048
        using 12 cylinder groups of 183.72MB, 11758 blks, 23552 inodes.
super-block backups (for fsck -b #) at:
 160, 376416, 752672, 1128928, 1505184, 1881440, 2257696, 2633952, 3010208,
 3386464, 3762720, 4138976
# newfs -U da0s1f
/dev/da0s1f: 2045.4MB (4188884 sectors) block size 16384, fragment size 2048
        using 12 cylinder groups of 183.72MB, 11758 blks, 23552 inodes.
super-block backups (for fsck -b #) at:
 160, 376416, 752672, 1128928, 1505184, 1881440, 2257696, 2633952, 3010208,
 3386464, 3762720, 4138976
# mount /dev/da0s1e /mnt/root/var
# mount /dev/da0s1d /mnt/root/tmp
# mount /dev/da0s1f /mnt/root/usr

Ну и посмотрим что у нас получилось в итоге:

# mount
/dev/md0 on / (ufs, local)
devfs on /dev (devfs, local)
/dev/acd0 on /dist (cd9660, local, read-only)
devfs on /dev (devfs, local)
/dev/md10 on /mnt (ufs, local)
/dev/da0s1a on /mnt/root (ufs, local, soft-updates)
/dev/da0s1f on /mnt/root/usr (ufs, local, soft-updates)
/dev/da0s1e on /mnt/root/var (ufs, local, soft-updates)
/dev/da0s1d on /mnt/root/tmp (ufs, local, soft-updates)
# df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
/dev/md0       3.7M    2.8M    956K    75%    /
devfs          1.0K    1.0K      0B   100%    /dev
/dev/acd0      289M    289M      0B   100%    /dist
devfs          1.0K    1.0K      0B   100%    /dev
/dev/md10      2.9G    505M    2.2G    18%    /mnt
/dev/da0s1a    989M     10K    910M     0%    /mnt/root
/dev/da0s1f    1.9G    4.0K    1.8G     0%    /mnt/root/usr
/dev/da0s1e    1.9G    4.0K    1.8G     0%    /mnt/root/var
/dev/da0s1d    989M    4.0K    910M     0%    /mnt/root/tmp
#

Вроде все как надо. Теперь приступим к сборке мира. Зайдем в каталог с src и зададим пару переменных необходимых для сборки мира. Так же необходимо /tmp сделать доступным для записи. Выполним следующее:

mkdir /mnt/tmp
mount -t nullfs /mnt/tmp /tmp
setenv MAKEOBJDIRPREFIX /mnt/obj
make world DESTDIR=/mnt/root
make distribution DESTDIR=/mnt/root
make kernel DESTDIR=/mnt/root

Мир и ядро у нас скомпилируются и установятся в /mnt/root. Вот осталось и совсем чуть-чуть. Создадим fstab следующего содержания:

# cat /mnt/root/etc/fstab
# Device                Mountpoint      FStype  Options         Dump    Pass#
/dev/da0s1b           none            swap    sw              0       0
/dev/da0s1a           /               ufs     rw              1       1
/dev/da0s1d           /tmp            ufs     rw              2       2
/dev/da0s1f           /usr            ufs     rw              2       2
/dev/da0s1e           /var            ufs     rw              2       2

#

Не забываем в конце последней строки добавить пустую строку. И для удобства создадим rc.conf с минимум настроек:

# cat /mnt/root/etc/rc.conf
hostname="testserver.isea.ru"
ifconfig_em0="inet 10.1.2.200  netmask 255.255.128.0"
sshd_enable="YES"

#

Ну и конечно же сменим пароль на root и заведем себе пользователя для работы:

# chroot /mnt/root
# passwd root
Changing local password for root
New Password:
Retype New Password:
# pw groupadd users
# pw useradd abigor -g users
# pw usermod -n abigor -G wheel
# passwd abigor
Changing local password for abigor
New Password:
Retype New Password:
#

Ну, вроде все. Перезагружаем сервер. Входим локально или удаленно и дальше настраиваем по своему желанию.
———————–
P.S. Если честно, я не знаю кому это может понадобится :) Я делал это все только ради интереса и получения опыта.

  1. Пока что нет комментариев.
  1. Пока что нет уведомлений.