Страница 1 из 4

LiveCD

Добавлено: 2008-03-26 21:40:40
Morty
Писать ли статью о создании своего LiveCD?
с заталкиванием на него дампов разделов системы
с дальнейшим разворотом. Одним словом как облегчить себе жизнь,
дублируя настроенную систему
ЗЫ: посути материал - собранный на этом же форуме :D

Re: LiveCD

Добавлено: 2008-03-26 21:44:40
f_andrey
Morty писал(а):Писать ли статью о создании своего LiveCD?
с заталкиванием на него дампов разделов системы
с дальнейшим разворотом. Одним словом как облегчить себе жизнь,
дублируя настроенную систему
ЗЫ: посути материал - собранный на этом же форуме :D
Ну а чего если это цельный и давольно законченый рецепт то конечно пиши чтоб когда приспичило голову не ломать, да и самому может когда пригодится или что дельное подскажут, например можно посмотреть как френзи развивается там сейчас вроде интересный модульный подход внедряется и виртуальные ФС вродебы.

Re: LiveCD

Добавлено: 2008-03-26 21:52:43
Morty
ну на счет цельный - то он цельный -)
просто во френзи там очень много чего наборту,
а я хотел СД который скажем "дает только консоль" и ничего более
(за место боролся т.к. на СД помимо всего еще нада дампы фс-ов загнать)
тоесть чтоб развернуть образ системы и всё, хотя думаю можно и больше сделать помимо
dump restore

PS: вообщем напишу , а там посм. может кому интересно будет, потянуться со своими идеями
ЗЫЫ: кстати у меня сам сиди собран на базе freesbie - с ним оказалось легче всего это сделать

Re: LiveCD

Добавлено: 2008-03-27 13:33:01
Morty
выкладываю сюда наверно черновой вариант статьи: (буду рад любой помощи, советам, одним словом "your feedback is wellcome")
статья:
1ый этап: подготовка дампов

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

Код: Выделить всё

/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ой этап: создание загрузочного диска
Можно сделать на любом имеющемся фряшном компьютере.
В моём случае был боевой шлюз. Для создания диска будем юзать порт
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

Код: Выделить всё

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)

Код: Выделить всё

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..."
        /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 - all remaining space
" > ${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;
Собираем исошку с нашими добавлениями:

Код: Выделить всё

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
Ждём когда развернёться , ребут и у нас система с нужным нам набором софта и пр.

Re: LiveCD

Добавлено: 2008-03-27 15:04:51
Fastman
Вай..супер...давно хотел такую штуку !
Заранее респект и +100 к карме тебе !

Буду пробовать :)

Re: LiveCD

Добавлено: 2008-03-27 15:16:02
Morty
давай -)
я проверил это дело на ВМваре и на железяке 1Ггц + 1 Иде=120Гб
какихто серезных багов вроде не заметил

Re: LiveCD

Добавлено: 2008-03-28 19:54:45
Gnix
делал все как написано
загрузился с на ДВД (1,5 Gb) на VMware

./setup
проблема началась при развертивании системы
/ развернулся
потом /usr и проблема
поток сообщений чтото типа

Код: Выделить всё

/var/tmp/mnt2/usr : write failed , filesystem is full
Потом дата, pid, uid и что то еще
Подскажите где и что неправильно делал :(

Re: LiveCD

Добавлено: 2008-03-28 21:43:34
Morty
ого серёзный у тебя образ вышел,
у меня пока что 2 исошки - они не больше 300 мб

ну если корень развернулся а юзр нет то возможно что ему просто места не хватило...
надо уточнить какую цифру ты вводил на вопрос - размер будущего размера /usr = Z
и прикинуть гдето-так размер dump_usr X 2,5 = Y , надо чтобы Y < Z было

Re: LiveCD

Добавлено: 2008-03-28 22:38:12
Gnix
ого серёзный у тебя образ вышел
Ну я не удалял /usr/src и /usr/ports
размер будущего размера /usr = Z
и прикинуть гдето-так размер dump_usr X 2,5 = Y , надо чтобы Y < Z было
Попробую

Re: LiveCD

Добавлено: 2008-03-30 9:52:30
serge
Интересная статья :P Уже есть мысли где это использовать.
to Gnix:
Порты и исходники с собой таскать, имхо, не имеет смысла. Т.к. при наличие инета все это скачается за считанные минуты. В крайнем случае (если нет инета, например) можно их в виде tar.bz2 архивов с собой на диск взять, а как понадобяться, то распаковать на hdd. Диск полегче будет.

Re: LiveCD

Добавлено: 2008-03-30 12:24:10
Morty
если ни у кого замечаний , пожеланий нет , на сайт выкладывать ??

Re: LiveCD

Добавлено: 2008-03-30 12:40:51
Alex Keda
ага

Re: LiveCD

Добавлено: 2008-03-30 16:52:11
Morty
всё , готово
кому надо - пользуйтесь http://www.lissyara.su/?id=1625

Re: LiveCD

Добавлено: 2008-03-30 19:29:18
Alex Keda

Код: Выделить всё

/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
самые длинные строки разбей на две...
а то не вписываются.
или перенос сделай через

Re: LiveCD

Добавлено: 2008-03-30 21:05:56
Morty
сделал переносы

Re: LiveCD

Добавлено: 2008-04-13 21:31:12
OmIkRoNiXz
А сколько по времени может занимать создание дампа раздела /usr размером 430 GB из которых занято 1.7 GB с запаковкой bzip2 и сохранение на смонтированный жёсткий диск идентичный.

Re: LiveCD

Добавлено: 2008-04-14 9:26:49
Alex Keda
упрётся в архивацию.
недолго в общем

Re: LiveCD

Добавлено: 2008-04-14 9:36:31
OmIkRoNiXz
А в чём может быть проблема что после 10 часов прервав увидел образ равный 50 МБ...

Re: LiveCD

Добавлено: 2008-04-14 9:41:22
Alex Keda
а я откуда знаю =)

Re: LiveCD

Добавлено: 2008-05-01 16:14:05
Fastman
Оно работает. Спасибо автору и всем кто участвовал.
А теперь фич-реквест от ленивого программера :)))
Можно ли наваять скрипт для автоматического поднятия сетевух ?
Поясню, хочеться невероятного:
На серверах могут быть сетевые от разных производителей, хотелось
бы скриптец который первую сетевуху конфигурит на DHCP допустим.
Остается только ноут подрубить допустим и лезть по ssh.

Re: LiveCD

Добавлено: 2008-05-01 17:32:45
FenX
Спасибо автору за статейку ))
Выручила меня от однообразного многочасового просиживания)))

Re: LiveCD

Добавлено: 2008-05-01 17:58:41
Morty
Fastman писал(а):Оно работает. Спасибо автору и всем кто участвовал.
А теперь фич-реквест от ленивого программера :)))
Можно ли наваять скрипт для автоматического поднятия сетевух ?
Поясню, хочеться невероятного:
На серверах могут быть сетевые от разных производителей, хотелось
бы скриптец который первую сетевуху конфигурит на DHCP допустим.
Остается только ноут подрубить допустим и лезть по ssh.
пропиши в /etc/rc.conf какойто набор сетевух самых популярных например так

Код: Выделить всё

ifconfig_rl0="DHCP"
ifconfig_xl0="DHCP"
ifconfig_fxp0="DHCP"
ifconfig_vr0="DHCP"
.... и т.д.
поидее должно получиться таким образом

Re: LiveCD

Добавлено: 2008-05-01 19:29:36
Alex Keda

Код: Выделить всё

# list network interfaces
# ls /boot/kernel/ | grep if | awk -F '.' '{print $1}' | awk -F '_' '{print $2}'
interface_array="an ar arl ath aue awi axe bce bfe bge  \
                cdce ce cm cp cs ct cue cx dc de disc   \
                ed ef el em en ep ex faith fatm fe      \
                fwip fxp gif gre harp hatm hme ic ie    \
                ipw iwi ixgb kue le lge lnc my ndis nge \
                nve oltr patm pcn ppp ral ray re rl rue \
                sbni sbsh sf sis sk sl sn sr ste stf    \
                stge tap ti tl tun tx txp udav ural vge \
                vlan vr vx wb wi xe xl ifoff atmpif nfe"
for simple_iface in ${interface_array}
do
        # first
        export  ifconfig_${simple_iface}0="DHCP"
        # second
        export  ifconfig_${simple_iface}1="DHCP"
done
отсюда

Re: LiveCD

Добавлено: 2008-05-01 21:52:23
Fastman
Thx народ :) То что надо ! :)

Re: LiveCD

Добавлено: 2008-05-05 18:28:41
Morty
собрал/выложил новую исошку, кому надо ковыряйте
ftp://ftp.lissyara.su/users/morty/spring05052008.iso
Размер: 167 Мб
ЗЫ: главный виновник Sova :wink: