Документация по ОС FreeBSD Четверг, 06.02.2025, 23:55
Приветствую Вас Гость | 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 [2009]

Решился наконец написать еще одну статью на тему LiveCD.
В какой-то мере она основана на докладе Коли Маржана с конференции kiyvbsd09, за что ему отдельное спасибо.
А где-то на старой статье. Но методика и идея сохранилась старая. Тоесть у нас будет два ключевых этапа: 1) сам LiveCD от которого мне нужно только возможность загрузиться с него, определить устройства, подготовить жесткий диск для дальнейшего разворачивания на него дампа системы и базовая настройка системы которую мы развернем. 2) сам дамп предустановленной системы.

Данная картинка представляет приблизительную "схему" того что мы будем дальше делать. А делать все будем скриптами ;)

iso -> -----------------
      |1) LiveCD |      |
      |----------
      |        2) dump  |
       -----------------
Немного о файлах и их значении
1) 1.minsys - главный скрипт который и будет собирать исошку
./1.minsys
 --> Specify arch - amd64 or i386
 --> Example: ./1.minsys i386 or ./1.minsys amd64

при таком запуске он попросит указать архитектуру.
По большому счету здесь имееться ввиду файл конфиг ядра для amd64 или i386.
Файлы ядра находяться в этой же папке.
GENERICamd64, GENERICi386 переименовывать их не нужно.
cvsupfile - файл конфиг который будет использовать csup
make.conf - без коментариев, на момент написания статьи практического применения
ему не нашел ,(поэтому он пустой) но оставил - ведь всё может быть :)
src.conf - опции для сборки мира...Стоит заглянуть возможно вам нужны маны
или еще что-то.
packages.sh - в данной статье не используеться.
setup - его задача развернуть дамп готовой системы и прописать базовые настройки

Итак приступим к первому этапу - созданию LiveCD
Качаем архив со скриптами
fetch ftp://ftp.lissyara.su/users/morty/isonew/isonew.tbz
isonew.tbz 100% of 8625 B 38 kBps

и распаковываем его
tar -xjf isonew.tbz

Далее правим конфиг ядра amd64 или i386 в зависимости от того что вы используете.
src.conf - комментируем что-то если не устраивает, либо можно его полностью очистить.
cvsupfile - если хотим указать то зеркало cvs которое к нам ближе.
Можно запускать : (не забываем перед этим установить cdrtools)
./1.minsys i386
--------------------------
 --> Dirs are present, creation don't needed
 --> cvsup run not needed
 --> Skiping build of world...
 --> Kernel build don't needed
 --> minsys.tbz, creation don't needed
 --> You already have CD, /usr/iso/data/live.iso

И пойдет процесс сборки мира, ядра и т.д. у меня этого не видно т.к. я уже это все сделал.
Для удобства я добавил файлы-флаги которые находятся тут :
ll /usr/iso/tmp/
total 0
-rw-r--r-- 1 root wheel 0 Oct 2 21:53 1_iso.world
-rw-r--r-- 1 root wheel 0 Oct 2 22:45 2_iso.kernel
-rw-r--r-- 1 root wheel 0 Oct 2 22:46 3_iso.minsys
-rw-r--r-- 1 root wheel 0 Oct 2 22:46 4_iso.livecd

по ним можно контролировать процесс либо если нужно пересобрать только начиная с определенного момента , например с ядра то  нужно удалить флаги 2,3,4. Либо если нужно просто перепаковать исо то удаляем 4ый флаг и запускаем скрипт поновой.

В результате имеем следующее:
ls -lahF /usr/iso/ /usr/iso/data/
/usr/iso/:
total 16
drwxr-xr-x 8 root wheel 512B Oct 2 19:53 ./
drwxr-xr-x 17 root wheel 512B Oct 1 22:19 ../
drwxr-xr-x 3 root wheel 512B Oct 5 12:24 data/
drwxr-xr-x 3 root wheel 512B Oct 2 19:53 obj/
drwxr-xr-x 22 root wheel 512B Oct 1 22:27 src/
drwxr-xr-x 2 root wheel 512B Oct 5 12:12 stuff/
drwxr-xr-x 3 root wheel 512B Oct 1 22:19 sup/
drwxr-xr-x 2 root wheel 512B Oct 2 22:46 tmp/

/usr/iso/data/:
total 86214
drwxr-xr-x 3 root wheel 512B Oct 5 12:24 ./
drwxr-xr-x 8 root wheel 512B Oct 2 19:53 ../
drwxr-xr-x 16 root wheel 512B Oct 2 22:45 chroot_dir/
-rw-r--r-- 1 root wheel 55M Oct 2 22:46 live.iso
-rw-r--r-- 1 root wheel 29M Oct 2 22:46 minsys.tbz

Создание CD за 5 минут
На этом первый этап заканчивается. Если нет желания(времени) собирать "подложку"
(мир и ядро)для LiveCD, пакет minsys.tbz можно скачать здесь
PS: собран он на FreeBSD 7.2-RELEASE-p4 i386
Либо использовать скрипт 9.lazy (он предпологает что СД будет с дампом на борту)
Он сам скачает minsys.tbz и попытается создать CD в 9-ом скрипте рабочая директория задана переменной ${dir1} - для удобства

Второй этап: снятие дампа ФС с готовой системы.
Подразумеваеться что система установлена одним разделом - /
Монтируем флэшку: (Либо другое устройство куда будем снимать дамп) и запускаем второй скрипт
mount_msdosfs /dev/da0s1 /mnt/
./2.dump
 DUMP: Date of this level 0 dump: Mon Oct 5 13:08:25 2009
 DUMP: Date of last level 0 dump: the epoch
 DUMP: Dumping snapshot of /dev/ad0s1a (/) to standard output
 DUMP: mapping (Pass I) [regular files]
 DUMP: mapping (Pass II) [directories]
 DUMP: estimated 5037154 tape blocks.
 DUMP: dumping (Pass III) [directories]

или так
dump -0ua -L -f- /dev/ad0s1a | bzip2 > /mnt/dump_root.img.bz2

копируем дамп и установщик в "рут"
cp ./dump_root.img.bz2 /usr/iso/data/chroot_dir/root/
cp ./setup /usr/iso/data/chroot_dir/root/

удаляем флаг на создание исошки и запускаем по-новой скрипт
rm /usr/iso/tmp/4_iso.livecd
./1.minsys i386

В результате мы получаем СД
ls -lah /usr/iso/data/live.iso
-rw-r--r-- 1 root wheel 547M Oct 5 14:33 /usr/iso/data/live.iso

загрузившись с которого вызываем наш скрипт setup
/root/setup

------------- !Warning! ---------------------

Preparing for installation...

YES - will proceed installation of system
NO - reboot the system

---------------------------------------------

Do you want to start the installation:

разворачиваем систему с нашего дампа который был сделан ранее

На этом все ...
Далее выкладываю 2 основных скрипта : 1.minsys и setup  целиком можно скачать тут

1.minsys
#!/bin/sh
#
# October 2009
# Script of real black magic :)
#
#world_tar:
 if [ $# -ge 1 ];
 then echo "--------------------------"
 else
 echo " --> Specify arch - amd64 or i386"
 echo " --> Example: ./1.minsys i386 or ./1.minsys amd64"
 exit 1
fi;
arch=$1
#
if [ -d /usr/iso ]; then \
 echo " --> Dirs are present, creation don't needed"; \
 else
 mkdir -p /usr/iso/data
 mkdir -p /usr/iso/stuff
 mkdir -p /usr/iso/obj
 mkdir -p /usr/iso/tmp
 cp ./* /usr/iso/stuff/
 fi;
#
export MAKEOBJDIRPREFIX=/usr/iso/obj
export BUILDNAME=7.2-RELEASE
export RELEASETAG=RELENG_7_2_0_RELEASE
export SRCCONF=/usr/iso/stuff/src.conf
export MAKE_CONF=/usr/iso/stuff/make.conf
export CVSROOT=/usr/iso/src
#export WORLD_FLAGS='-j16'
#export KERNEL_FLAGS='-j16'
#export KERNCONF=/usr/iso/stuff/GENERIC
#export LOCAL_PATCHES /usr/iso/stuff/local.patch
#export EXTPORTSDIR /usr/ports
#
if [ -d /usr/iso/src ]; then \
 echo " --> cvsup run not needed"; \
 else
 /usr/bin/csup /usr/iso/stuff/cvsupfile
 fi;
#
if [ -f /usr/iso/tmp/1_iso.world ]; then \
 echo " --> Skiping build of world..."; \
 else
 rm -rf /usr/iso/obj
 mkdir -p /usr/iso/obj
 chflags -R noschg /usr/iso/data/chroot_dir/
 rm -rf /usr/iso/data/
 mkdir -p /usr/iso/data
 cd /usr/iso/src
 cp /usr/iso/stuff/GENERIC$arch /usr/iso/src/sys/$arch/conf/GENERIC
 #patch < /usr/iso/stuff/local.patch
 make -j16 buildworld
 mkdir -p /usr/iso/data/chroot_dir
 make DESTDIR=/usr/iso/data/chroot_dir installworld
 cd /usr/iso/src/etc
 make DESTDIR=/usr/iso/data/chroot_dir distribution
 touch /usr/iso/tmp/1_iso.world
 fi;
#
if [ -f /usr/iso/tmp/2_iso.kernel ]; then \
 echo " --> Kernel build don't needed"; \
 else
 cd /usr/iso/src
 make -j16 buildkernel
 make DESTDIR=/usr/iso/data/chroot_dir installkernel
 touch /usr/iso/tmp/2_iso.kernel
 fi;
#
cd /usr/iso/data/chroot_dir
/usr/bin/find . -name lib\*.a -delete
/usr/bin/find . -name *.pyc -delete
/usr/bin/find . -name *.pyo -delete
/usr/bin/find . -name "*~" -delete
rm -rf usr/include
rm -rf usr/local/include
rm -rf usr/share/dict
rm -rf usr/share/examples
rm -rf usr/share/doc
rm -rf usr/local/man
rm -rf usr/local/info
rm -rf usr/local/share/doc
rm -rf usr/share/man
rm -rf usr/share/groff_font
rm -rf usr/share/syscons
rm -rf usr/local/share/locale
rm -rf usr/local/share/gettext
rm -rf usr/share/locale/[^e]*
rm -rf usr/share/nls/[^e]*
rm -rf usr/share/calendar
rm -rf usr/share/sendmail
rm -rf usr/share/isdn
rm -rf usr/share/misc/[^tp]*
rm -rf usr/share/tmac
rm -rf usr/share/misc/pcvtfonts
rm -rf usr/libexec/cc*
rm -rf usr/libexec/f771
rm -rf rescue
#
if [ -f /usr/iso/tmp/3_iso.minsys ]; then \
 echo " --> minsys.tbz, creation don't needed"; \
 else
 cd /usr/iso/data
 tar -cjf minsys.tbz chroot_dir/
 touch /usr/iso/tmp/3_iso.minsys
 sleep 5
 fi;
#world_tar_fin:
#mv /usr/iso/data/chroot_dir/boot/kernel/kernel /usr/iso/data/
#rm -rf /usr/iso/data/chroot_dir/boot/kernel/*
#mv /usr/iso/data/kernel /usr/iso/data/chroot_dir/boot/kernel/
#livecd:
if [ -f /usr/iso/tmp/4_iso.livecd ]; then \
 echo " --> You already have CD, /usr/iso/data/live.iso" ; \
 else
cat > /usr/iso/data/chroot_dir/boot/loader.conf << EOF
boot_cdrom="YES"
autoboot_delay="0"
beastie_disable="YES"
EOF
cat > /usr/iso/data/chroot_dir/etc/fstab << EOF
# Device Mountpoint FStype Options Dump Pass#
md /tmp mfs rw,-s32m 0 0
EOF
cat > /usr/iso/data/chroot_dir/etc/rc.conf << EOF
dmesg_file="/tmp/dmesg.boot"
sendmail_enable="NONE"
EOF
cat > /usr/iso/data/chroot_dir/etc/rc << EOF
#!/bin/sh
export TERM=cons25
export PATH=/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/local/sbin
/sbin/mount /tmp
/sbin/ifconfig lo0 127.0.0.1
#FIRST_IF=\`/sbin/ifconfig | /usr/bin/head -1 | /usr/bin/cut -d : -f 1\`
#/sbin/dhclient -l /tmp/dhclient.leases \$FIRST_IF
/etc/rc.d/dmesg start
#mkdir /tmp/etc
#mount_nullfs /tmp/etc /etc
/usr/libexec/getty autologin ttyv1 &
/usr/libexec/getty autologin ttyv2 &
/usr/libexec/getty autologin ttyv3 &
/usr/libexec/getty autologin ttyv0
/sbin/reboot
EOF
#/usr/iso/stuff/packages.sh
#rsync -aHv --delete /usr/iso/data/packages/ \
#/usr/iso/data/chroot_dir/packages/
#mount -t devfs devfs /usr/iso/data/chroot_dir/dev
#chroot /usr/iso/data/chroot_dir pkg_add \
# /packages/Latest/smartmontools.tbz /packages/Latest/python25.tbz
#umount /usr/iso/data/chroot_dir/dev

#cp /usr/iso/data/minsys.tbz /usr/iso/data/chroot_dir/
#cp /usr/iso/stuff/setup.sh /usr/iso/data/chroot_dir/sbin/

mkisofs -b boot/cdboot -no-emul-boot \
-r -J -V Setup -quiet -o /usr/iso/data/live.iso /usr/iso/data/chroot_dir
touch /usr/iso/tmp/4_iso.livecd
fi;

setup
#!/bin/sh
dist_dir="/root"
iface=`ifconfig -l | cut -f1 -d' '`
#${mdmfs} -M -s 3m md1 /mnt
#------------------
tmp_dir="/tmp"
# Destination of installation system
mnt2="/tmp/mnt2"
#root_size="256" # Mb 384
swap_size="256" # Mb 1024
#
echo "

------------- !Warning! ---------------------

Preparing for installation...

YES - will proceed installation of system
NO - reboot the system

---------------------------------------------

"
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 ... "
 ;;
 *)
 # perdumal:)
 echo "You answered '${answer}'. Server reboots..."
 shutdown -r now
 exit;
 ;;
esac

# --------------------------
# Detect Hdd
DISK=`(dmesg | grep -E '^ar'; \
 dmesg | grep -E '^ad'; \
 dmesg | grep -E '^da') | \
 head -1 | cut -f1 -d:`
echo "
"
##
## Full name of hdd
DISKMARK=`(dmesg | grep -E '^ar'; \
 dmesg | grep -E '^ad'; \
 dmesg | grep -E '^da') | \
 head -1`
echo "Detected hard drive for working:"
echo $DISKMARK
echo "Detected network card:"
echo $iface
#
# fdisk
# Uto4naem razmer /
echo -n "Enter size of / (root) partition in Mbytes: "
read root_size
#
echo "Creating partitions..."

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

echo "# /dev/${DISK}s1:
2 partitions:
# size offset fstype [fsize bsize bps/cpg]
a: ${root_size}M 0 4.2BSD 2048 16384 32776
b: ${swap_size}M * swap
" > ${tmp_dir}/bsdlabel.txt

# bsdlabel
/sbin/bsdlabel -R ${DISK}s1 ${tmp_dir}/bsdlabel.txt >/dev/null 2>&1
/sbin/bsdlabel -B ${DISK}s1 >/dev/null 2>&1
# newfs
echo "Creating filesystem..."
/sbin/newfs /dev/${DISK}s1a >/dev/null 2>&1
#
echo "HDD formated..."
/bin/mkdir -p ${mnt2}
#
# restore /
echo "Restoring '/' filesystem..."
/sbin/mount /dev/${DISK}s1a ${mnt2}
cd ${mnt2}
/usr/bin/bunzip2 --stdout ${dist_dir}/dump_root.img.bz2 \
| /sbin/restore -rf - >/dev/null 2>&1
#
echo "Rewriting /etc/fstab for device ${DISK}"
echo "# Device Mountpoint FStype Options Dump Pass#
/dev/${DISK}s1b none swap sw 0 0
/dev/${DISK}s1a / ufs rw 1 1
/dev/acd0 /cdrom cd9660 ro,noauto 0 0
" > ${mnt2}/etc/fstab
cp /usr/share/zoneinfo/Europe/Kiev ${mnt2}/etc/localtime
#
#
echo -n "Do you want static IP-address(YES) or use DHCP(NO) : "
read answer2
# verify answer
case ${answer2} in
 [Yy][Ee][Ss])
 # yes. use static IP-address
 echo "Your answer '${answer2}' "
 echo "Static ip-address will be used "
 echo "Example for enter - 192.168.10.15 "
 echo -n "Enter ip-address for this computer : "
 read ipaddr
 echo -n "Enter default router :"
 read defroute
 echo -n "Enter 1fst dns ip-address server : "
 read dns1
 echo -n "Enter 2nd dns ip-address server : "
 read dns2
 echo -n "Enter hostname (exmpl:dsk1.domain.local) : "
 read hsname
echo 'ifconfig_'${iface}'="inet '${ipaddr}' \
netmask 255.255.255.0"' >> ${mnt2}/etc/rc.conf
 echo "hostname=$hsname
 defaultrouter=$defroute
 sshd_enable=\"YES\" " >> ${mnt2}/etc/rc.conf
 echo "nameserver $dns1" > ${mnt2}/etc/resolv.conf
 echo "nameserver $dns2" >> ${mnt2}/etc/resolv.conf
 echo "
::1 localhost localhost.my.domain
127.0.0.1 localhost localhost.my.domain

$ipaddr $hsname.

" > ${mnt2}/etc/hosts
 ;;
 *)
 # use DHCP address for network interface
 echo ""
 echo "You answered '${answer2}'. Now we use DHCP "
 echo ""
 echo ifconfig_$iface="DHCP" >> ${mnt2}/etc/rc.conf
echo "Don't forget to set(check) hostname in rc.conf and hosts file ^_^"
 exit;
 ;;
esac
echo -n "Enter user name : "
read nickname
/usr/sbin/chroot ${mnt} id ${nickname} || echo newpass | /usr/sbin/chroot \
${mnt2} pw useradd ${nickname} -g wheel -s /bin/tcsh -m -h 0
#
echo "System restored!"
/bin/sync
bin/umount ${mnt2}
/sbin/shutdown -r now
exit;



Источник: http://www.lissyara.su/?id=1984
Категория: Установка и настройка | Добавил: oleg (12.11.2009) | Автор: Morty
Просмотров: 953 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

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

Copyright MyCorp © 2025