Документация по ОС FreeBSD Воскресенье, 19.01.2025, 01:08
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Мои статьи [0]
Установка и настройка [281]
X Window [25]
Man pages [30]
Ports & Packages [26]
cvs [18]
Multimedia [20]
Нововсти в мире Unix [0]
RFC [4]
RFC (Request for Comments, Запрос на комментарии) - серия документов, публикуемая сообществом исследователей и разработчиков, руководствующихся практическими интересами, в которой описывается набор протоколов и обобщается опыт функционирования Интернет.
Безопасность [52]
Работа с железом [58]
Книги по FreeBSD [17]
Сеть [505]
Программирование [40]
FireWall [58]
Темы экзамена BSDA [14]
Официальные темы экзамена BSDA, включая подробноые описания и советы по обучению.

Главная » Статьи » Установка и настройка

Создание своего LiveCD (+клонирование системы) [2008]
Для чего это надо? и что я хотел сделать? Если просто - LiveCD,который развернет мне на жёсткий диск готовую настроенную систему. Думаю у всех есть важный сервер, будь то почтовый или прокси, либо задачи которые повторяються, например -  установка шлюзов. Которые в случае возникновения проблем требуют решения в  минимальные сроки, либо банальный запуск шлюза на базе FreeBSD за 5 минут. А в результате это может быть что угодно, всё будет зависеть от того какие "дампы" вы подсуните лив-диску, возможно вы решите сделать CD с игровым сервером, файловой  помойкой, почтовиком, прокси, любимым десктопом со всеми личными насройками.  В конце концов можно сделать иерархию папок у себя на компютере (сервере)с различными дампами и потом выбирать какой диск вы хотите получить. Одним словом что  нафантазируете то и получите :)

1ый этап: подготовка дампов

Делаем базовую(эталонную систему, кторую в результате мы будем разворачивать с нашего CD)со следующей разбивокой винчестера. Наполняем софтом, закидываем нужные нам конфиги.

Примечание: можно делать с другой разбивкой, но тогда нада будет  подправить 2 скрипта

/dev/ad0s1a / (256Мб)
/dev/ad0s1d /usr (4G)
/dev/ad0s1e /var (4G)

Когда "эталон" готово подключаем к нему 2ой винт, перезагружаем систему в однопользовательский режим. монтируем разделы:

mount -u /
mount -a

Монтируем второй винт куда будут дампиться разделы эталонной системы
mount /dev/ad1s1 /mnt

Делаем диру где будут лежать дампы
mkdir -p /mnt/dumps

Дальше пользуемся скриптом (tnx to o2x) который сделает нам сжатые дампы файловой системы нашего "эталона" Примечание: перед снятием дампов я удаляю /usr/src и /usr/ports чтобы облегчить вес дампов

#!/bin/sh
# Path to command
mount="/sbin/mount"
umount="/sbin/umount"
dump="/sbin/dump"
bzip2="/usr/bin/bzip2"
#
massive="/mnt/dumps"
#
# Mount usb massive
#${mount} /dev/da0s1 ${massive}
#--
# Create dump slice
${dump} -0ua -L -f- /dev/ad0s1a | ${bzip2} > ${massive}/dump_root.img.bz2
${dump} -0ua -L -f- /dev/ad0s1d | ${bzip2} > ${massive}/dump_usr.img.bz2
${dump} -0ua -L -f- /dev/ad0s1e | ${bzip2} > ${massive}/dump_var.img.bz2
#${dump} -0ua -L -f ${massive}/dump_tmp.img /dev/ad0s1d
#--
# If file exists
if [ -f $massive/dump_root.img.bz2 ]
then dump1="Image dump_root.img.bz2 was created";
else echo "Image dump_root.img.bz2 was not created, please see this dump!"
exit 2;
fi
#--
if [ -f $massive/dump_usr.img.bz2 ]
then dump2="Image dump_usr.img was created";
else echo "Image dump_usr.img was not created, please see this dump!"
exit 2;
fi
#--
if [ -f $massive/dump_var.img.bz2 ]
then dump3="Image dump_var.img was created";
else echo "Image dump_var.img was not created, please see this dump!"
exit 2;
fi
#
# Umount usb massive
#${umount} ${massive}
#
echo "===>System dumped<==="

В результате мы должны получить сжатые дампы разделов системы в дире /mnt/dumps тоесть:
dump_root.img.bz2
dump_usr.img.bz2
dump_var.img.bz2

Копируем их куда-нибудь в надежное место, к себе на фтп например
С дампами всё...
С этим компом я закончил, решил что он будет "родительским" для новых образов.
В принципе с ним уже можно делать все что угодно, хоть отфарматировать винт, дампы то у нас уже есть...

2ой этап: создание загрузочного CD

Данная проблема меня мягко говоря измотала. Т.к. вариантов решения окозалось довольно много, перечислять не буду.
А будем просто пользоваться портом FreeSBIE Итак, сделать СД можно на любом фряшном компьютере.
В моём случае был боевой шлюз.  Идем и ставим freesbie
cd /usr/ports/sysutils/freesbie
make install clean

Копируем /usr/local/share/freesbie в /usr/local/freesbie делаем исо:(по вермени - около 2часов)

cd /usr/local/freesbie
make iso
#### Building world for i386 architecture ####
>>> Rebuilding the temporary build tree
>>> stage 1.1: legacy release compatibility shims
>>> stage 1.2: bootstrap tools
>>> stage 2.1: cleaning up the object tree
>>> stage 2.2: rebuilding the object tree
>>> stage 2.3: build tools
>>> stage 3: cross tools
>>> stage 4.1: building includes
>>> stage 4.2: building libraries
>>> stage 4.3: make dependencies
>>> stage 4.4: building everything
#### Building kernel for i386 architecture ####
>>> Kernel build for FREESBIE started on Wed Mar 26 15:57:58 EET 2008
>>> stage 1: configuring the kernel
>>> stage 2.1: cleaning up the object tree
>>> stage 2.2: rebuilding the object tree
>>> stage 2.3: build tools
>>> stage 3.1: making dependencies
>>> stage 3.2: building everything
>>> Kernel build for FREESBIE completed on Wed Mar 26 16:15:16 EET 2008
#### Installing world for i386 architecture ####
>>> Making hierarchy
>>> Installing everything
#### Installing kernel for i386 architecture ####
>>> Installing kernel
#### Cloning /usr/local/freesbie-fs to /usr/local/freesbie-clone ####
Compressing /usr/local/freesbie-clone/uzip/usr.ufs... 66,1738% saved
#### Building bootable ISO image for i386 ####
Saving mtree structure...
Running mkisofs...
ISO created:
-rw-r--r-- 1 root wheel 83M 26 мар 16:19 /usr/obj/FreeSBIE.iso

Примечание: без установленного cdrtools - исо не создаст.

3ий этап: добавление дампов на образ

Теперь нам необходимо сделанные ранее дампы положить на CD
Дира /usr/local/freesbie-clone/ это и есть то, содержимое которое будет на нашем CD
Ложим дампы в диру ../dist/dist

pwd
/usr/local/freesbie-clone/dist/dist
ll
total 139200
-rw-r--r-- 1 root wheel 24097048 26 мар 14:27 dump_root.img.bz2
-rw-r--r-- 1 root wheel 114420017 26 мар 14:27 dump_usr.img.bz2
-rw-r--r-- 1 root wheel 3894455 26 мар 14:27 dump_var.img.bz2

так же ложим в корень будущей исошки скрипт который будет  разворачивать дампы для будущих систем (tnx to lissyra)
Примечание: здесь можно при желании нафаршеровать еще скриптов, например post-install, либо закинуть таковые в дампы (у меня post-install в дампах)

pwd
/usr/local/freesbie-clone
touch setup
chmod 755 setup

содержимое скрипта setup

#!/bin/sh
#
#
#mdmfs="/sbin/mdmfs"
dist_dir="/dist/dist"
#${mdmfs} -M -s 3m md1 /mnt
#------------------
tmp_dir="/var/tmp"
mnt2="/var/tmp/mnt2"
# -> variables <-
root_size="256" # Mb 384
swap_size="128" # Mb 1024
#usr_size="2048" # Mb 4096
#var_size="1024" # Mb 4096
# debug - on = 1; off = 2
debug="1"


#---------------Начало
echo "




!!!!! Warning !!!!! Ahtung ! Ahtung !
If you do not understand what to do, unplug the CD, and reboot the server.
If you enter YES, will begin installation FreeBSD, and all data
contained on the hard disk will be lost. If you enter NO installation
will be interrupted, and automatic restart happen.

If you have not created an array (RAID) controller
in BIOS (for the server), enter NO
and create it, and then re-start the installation."
echo -n "Do you want to start the installation: "
read answer
# verify answer
case ${answer} in
 [Yy][Ee][Ss])
 # yes. continue....
 echo""
 echo "Running installation of a new server !"
 ;;
 *)
 # perdumal:)
 echo "You answered '${answer}'. Server reboots..."
 shutdown -r now
 exit;
 ;;
esac

# detecting hdd on server
kernel_disks="`/sbin/sysctl kern.disks | awk -F ':' '{print $2}'`"
#kern.disks: da1 da0
if [ ${debug} -eq 1 ] ; then
echo "DEBUG: 1. kernel disks = ${kernel_disks}" ; fi
# cycle for all disks - count and match
i=0
for all_disks in ${kernel_disks}
do
 # detecting disk type
 disk_type="`echo ${all_disks} | /usr/bin/tr -d '[0-9]'`"
 # detecting disk number
 disk_number="`echo ${all_disks} | /usr/bin/tr -d '[a-z]'`"
 # find ATA|SATA disks
 if [ ${kernel_disks} = "ad0" ]
 then
 # ATA/SATA disks
 echo " detected ATA/SATA disks! "
 echo "${all_disks}" > ${tmp_dir}/ata_disk.tmp
 else
 /usr/bin/touch ${tmp_dir}/ata_disk.tmp
 fi
 # SCSI device
 if [ ${all_disks} = "da1" ]
 then
 # found 1 SCSI disk (da0 - disk, da1 - flash)
 echo " detected SCSI disks! "
 echo "da0" > ${tmp_dir}/scsi_disk.tmp
 else
 /usr/bin/touch ${tmp_dir}/scsi_disk.tmp
 fi
 # detecting - how many SCSI disks on machine
# for ii in 0 1 2 3 4 5 6 7 8 9
# do
# if [ ${all_disks} = da${ii} ]
# then
# # count $i + 1 - line in file
## echo da${ii} >> ${tmp_dir}/disks_count.tmp
# fi
# done
 # up counter +1
 i="`/bin/expr $i + 1`"
done
#number_SCSI_disks="`cat ${tmp_dir}/disks_count.tmp \
#| /usr/bin/wc -l | /usr/bin/tr -d ' '`"
#if [ ${debug} -eq 1 ] ; then
#echo "DEBUG: 2. number SCSI disks = ${number_SCSI_disks}" ; fi
# if $number_SCSI_disks = 1 - exit - only flash detected
#if [ ${number_SCSI_disks} -eq 1 ]
#then
 # exit
# echo " Fatal: SCSI disks not detected!"
# exit;
#fi
# scsi disks detected. da0 - disk for work

# disk counter. Current - number disk = 2; else - shutdown - error - no disks
# future - number disk = 3 (add RAM disk)
if [ $i -eq 1 ]
then
 # all OK
else
 # no disks?
 echo " HDD drive not found... System shutdown.. /b /bin/sleep 5 && /sbin/shutdown -p now && exit;
fi

# select disk for work
if [ `/usr/bin/wc -l ${tmp_dir}/ata_disk.tmp | awk '{print $1}'` -eq 1 ]
then
 # found ATA disk
 work_device="`/bin/cat ${tmp_dir}/ata_disk.tmp`"
else
 # ATA not found - work on SCSI
 work_device="`/bin/cat ${tmp_dir}/scsi_disk.tmp`"
fi


#exit
# fdisk
# Uto4naem razmer /usr and /var
echo -n "Enter size of /usr partition in Mbytes: "
read usr_size
#
echo -n "Enter size of /var partition in Mbytes: "
read var_size
#
echo "Creating partitions..."

/sbin/fdisk -I -i -B /dev/${work_device}

echo "# /dev/${work_device}s1:
8 partitions:
# size offset fstype [fsize bsize bps/cpg]
a: ${root_size}M 0 4.2BSD 2048 16384 32776
b: ${swap_size}M * swap
c: * 0 unused 0 0 # "raw" part, don't edit
d: ${usr_size}M * 4.2BSD 2048 16384 28528
e: ${var_size}M * 4.2BSD 2048 16384 28528
f: * * 4.2BSD 2048 16384 28552 # /shares 
" > ${tmp_dir}/bsdlabel.txt


# bsdlabel
/sbin/bsdlabel -R ${work_device}s1 ${tmp_dir}/bsdlabel.txt >/dev/null 2>&1
/sbin/bsdlabel -B ${work_device}s1 >/dev/null 2>&1
# newfs
echo "Creating filesystems..."
/sbin/newfs /dev/${work_device}s1a >/dev/null 2>&1 # /
/sbin/newfs /dev/${work_device}s1f >/dev/null 2>&1 # /shares
/sbin/newfs /dev/${work_device}s1d >/dev/null 2>&1 # /usr
/sbin/newfs /dev/${work_device}s1e >/dev/null 2>&1 # /var
# tunefs
echo "Settings filesystems parameters..."
/sbin/tunefs -n enable /dev/${work_device}s1f >/dev/null 2>&1 # softupdates
/sbin/tunefs -a enable /dev/${work_device}s1f >/dev/null 2>&1 # ACLs
/sbin/tunefs -n enable /dev/${work_device}s1d >/dev/null 2>&1 # softupdates
/sbin/tunefs -n enable /dev/${work_device}s1e >/dev/null 2>&1 # softupdates
#
#
#/sbin/umount /mnt
echo "HDD formated..."
/bin/mkdir -p ${mnt2}
/bin/mkdir -p ${mnt2}/usr
/bin/mkdir -p ${mnt2}/var
#
# restore /
echo "Restoring '/' filesystems..."
/sbin/mount /dev/${work_device}s1a ${mnt2}
cd ${mnt2}
/usr/bin/bunzip2 --stdout ${dist_dir}/dump_root.img.bz2 \
| /sbin/restore -rf - >/dev/null 2>&1
# restore /usr
echo "Restoring '/usr' filesystems..."
#
/sbin/mount /dev/${work_device}s1d ${mnt2}/usr
cd ${mnt2}/usr
/usr/bin/bunzip2 --stdout ${dist_dir}/dump_usr.img.bz2 \
| /sbin/restore -rf - >/dev/null 2>&1
# restore /var
echo "Restoring '/var' filesystems..."
#
/sbin/mount /dev/${work_device}s1e ${mnt2}/var
cd ${mnt2}/var
/usr/bin/bunzip2 --stdout ${dist_dir}/dump_var.img.bz2 \
| /sbin/restore -rf - >/dev/null 2>&1
# restore /shares
#echo "Restoring '/shares' filesystems..."
#/sbin/mount /dev/${work_device}s1f /mnt/shares
#cd /mnt/shares
#/usr/bin/bunzip2 --stdout ${dist_dir}/shares.dump.bz2 \
| /sbin/restore -rf - >/dev/null #2>&1

echo "All filesystems restored!"

# sync disks
sync
#
#
####
echo "All done! "

# reboot
#/bin/sleep 5 && /sbin/shutdown -r now

exit;

Собираем исошку с нашими добавлениями:
Перед этим удаляем старую, и файл-флаг сборки iso

rm /usr/obj/usr/local/freesbie/.done_iso
rm /usr/obj/FreeSBIE.iso
cd /usr/local/freesbie
make iso
#### Building bootable ISO image for i386 ####
Saving mtree structure...
Running mkisofs...
ISO created:
-rw-r--r-- 1 root wheel 218M 27 мар 11:39 /usr/obj/FreeSBIE.iso

Это всё - можно забирать по указанному пути заветную исошку и работать, а именно грузимся с CD запускаем из корня скрипт ./setup
Отвечаем на вопросы каких размеров будет /usr /var
Ждём когда развернёться , ребут и у нас система с нужным нам набором софта и пр.



Источник: http://www.lissyara.su/?id=1625
Категория: Установка и настройка | Добавил: oleg (31.03.2008) | Автор: Morty
Просмотров: 884 | Комментарии: 2 | Рейтинг: 0.0/0 |
Всего комментариев: 1
1 Дмитрий  
0
А зогрузочный LiveUSB с FreeBSD сделать можно ?
Я новичек в этом деле, но все же хотелось бы не болвану ссобой таскать, а маленькую флешку !
Или уже есть готовые образы которые просто устанавливаются на флешку как тут http://www.slax.org/get_slax.php

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links

Copyright MyCorp © 2025