Возникла задача удаленного реинсталла сервера c установленной FreeBSD, осложнявшаяся отсутствием KVM как класса и сложностью доступа к серверу.
Погуглив, было найдено это описание. То, что и было нужно. Нам понадобятся две вещи:
Погуглив, было найдено это описание. То, что и было нужно. Нам понадобятся две вещи:
- ISO-образ будущей устанавливаемой системы
- Пакет утилит mfsBSD
Приступим к созданию загрузочного имиджа.
Создадим рабочую директорию:
# mkdir /usr/zzz
# cd /usr/zzz
Выкачиваем ISO:
# fetch ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/ISO-IMAGES/8.1/FreeBSD-8.1-RELEASE-amd64-disc1.iso
Выкачиваем mfsBSD:
#fetch http://people.freebsd.org/~mm/mfsbsd/mfsbsd-latest.tar.gz
распаковываем и переходим в получившующся диру:
# tar xvzf mfsbsd-1.0-beta1.tar.gz
# cd mfsbsd-1.0-beta1/conf/
Тюним конфиги под свои реалии:
# cp loader.conf.sample loader.conf
# mkdir /usr/zzz
# cd /usr/zzz
Выкачиваем ISO:
# fetch ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/ISO-IMAGES/8.1/FreeBSD-8.1-RELEASE-amd64-disc1.iso
Выкачиваем mfsBSD:
#fetch http://people.freebsd.org/~mm/mfsbsd/mfsbsd-latest.tar.gz
распаковываем и переходим в получившующся диру:
# tar xvzf mfsbsd-1.0-beta1.tar.gz
# cd mfsbsd-1.0-beta1/conf/
Тюним конфиги под свои реалии:
# cp loader.conf.sample loader.conf
geom_uzip_load="YES"
mfs_load="YES"
mfs_type="mfs_root"
mfs_name="/mfsroot"
tmpfs_load="YES"
vfs.root.mountfrom="ufs:/dev/md0"
mfsbsd.rootpw="123456"# cp rc.conf.sample rc.conf
hostname="mfsbsd"
defaultrouter="192.168.109.14"
ifconfig_em0="inet 192.168.109.35 netmask 255.255.255.0" #т.к. сетевая карта известна, то можно ее явно указать
varmfs="YES"
varsize="64m"
sshd_enable="YES"
sendmail_enable="NONE"
cron_enable="NO"# echo «nameserver 8.8.8.8″ >resolv.conf
Монтируем ISO-шник в диру /cdrom
# mdconfig -a -t vnode -f ../../FreeBSD-8.1-RELEASE-amd64-disc1.iso md0
# mount_cd9660 /dev/md0 /cdrom/
# make BASE=/cdrom/8.1-RELEASE/
Монтируем ISO-шник в диру /cdrom
# mdconfig -a -t vnode -f ../../FreeBSD-8.1-RELEASE-amd64-disc1.iso md0
# mount_cd9660 /dev/md0 /cdrom/
# make BASE=/cdrom/8.1-RELEASE/
Extracting base and kernel ... done
Removing unnecessary files from distribution ... done
Installing configuration scripts and files ... done
Generating SSH host keys ... done
Configuring boot environment ... done
Creating usr.uzip ... done
Copying user packages ... done
Creating and compressing mfsroot ... doneВот и готова наша палочка-выручалочка:
# ls -la *.img
# ls -la *.img
-rw-r--r-- 1 root 493 45088768 Nov 11 19:30 mfsboot.imgзаливаем ее на удаленную машинку:
# scp mfsboot.img user@remotehost:~/
# scp mfsboot.img user@remotehost:~/
Далее, заходим на наш удаленный тазик.
Т.к. конфигурацию партиций менять не планировалось, то получаем информацию о текущих партициях:
# bsdlabel /dev/ad0s1 > ~/label.txt
# bsdlabel /dev/ad0s1 > ~/label.txt
которую нужно где-то сохранить
# scp ~/label.txt user@remotehost:~/
# scp ~/label.txt user@remotehost:~/
туда же отправляем /etc/fstab
# scp /etc/fstab user@remotehost:~/
# scp /etc/fstab user@remotehost:~/
Едем дальше:
Осталось записать наш имидж в начало диска:
# dd if=mfsboot.img of=/dev/ad0 bs=1m
# dd if=mfsboot.img of=/dev/ad0 bs=1m
dd: /dev/ad0: Operation not permittedВот нас и посетила розовая птица обломинго… Но не все так безнадежно – нам поможет в решении этой засады:
# sysctl kern.geom.debugflags=16
kern.geom.debugflags: 0 -> 16# dd if=mfsboot.img of=/dev/ad0 bs=1m
43+0 records in
43+0 records out
45088768 bytes transferred in 2.797733 secs (16116181 bytes/sec)Все, мы «закатали» наш временный загрузочный образ и можем ребутаться:
# shutdown -r now
# shutdown -r now
после ребута заходим на наш тазик по ssh сразу под рутом и продолжаем:
Т.к. у sysinstall есть проблемы с созданием устройств в devfs, то сделаем это за него.
Т.к. у sysinstall есть проблемы с созданием устройств в devfs, то сделаем это за него.
В начале пометим системный диск как пустой:
mfsbsd# dd if=/dev/zero of=/dev/ad0 count=2
mfsbsd# dd if=/dev/zero of=/dev/ad0 count=2
2+0 records in
2+0 records out
1024 bytes transferred in 0.001632 secs (627369 bytes/sec)Создадим слайс, размером во весь диск с записью загрузочного кода в сектор 0:
mfsbsd# fdisk -BI /dev/ad0
mfsbsd# fdisk -BI /dev/ad0
******* Working on device /dev/ad0 *******
fdisk: invalid fdisk partition table found
fdisk: Class not foundСоздаем стандартную метку для диска (включая загрузочный код):
mfsbsd# bsdlabel -wB /dev/ad0s1
mfsbsd# bsdlabel -wB /dev/ad0s1
Возвращаем обратно инфу о партициях:
scp user@remotehost:/home/user/label.txt .
scp user@remotehost:/home/user/label.txt .
и реанимируем их:
mfsbsd# bsdlabel -R /dev/ad0s1 label.txt
mfsbsd# bsdlabel -R /dev/ad0s1 label.txt
Форматируем наши партиции:
mfsbsd# newfs /dev/ad0s1a
mfsbsd# newfs /dev/ad0s1a
/dev/ad0s1a: 512.0MB (1048576 sectors) block size 16384, fragment size 2048
using 4 cylinder groups of 128.02MB, 8193 blks, 16448 inodes.
super-block backups (for fsck -b #) at:
160, 262336, 524512, 786688mfsbsd# newfs /dev/ad0s1e
/dev/ad0s1e: 512.0MB (1048576 sectors) block size 16384, fragment size 2048
using 4 cylinder groups of 128.02MB, 8193 blks, 16448 inodes.
super-block backups (for fsck -b #) at:
160, 262336, 524512, 786688mfsbsd# newfs /dev/ad0s1d
/dev/ad0s1d: 512.0MB (1048576 sectors) block size 16384, fragment size 2048
using 4 cylinder groups of 128.02MB, 8193 blks, 16448 inodes.
super-block backups (for fsck -b #) at:
160, 262336, 524512, 786688mfsbsd# newfs /dev/ad0s1f
/dev/ad0s1f: 5631.0MB (11532192 sectors) block size 16384, fragment size 2048
using 31 cylinder groups of 183.77MB, 11761 blks, 23552 inodes.
super-block backups (for fsck -b #) at:
160, 376512, 752864, 1129216, 1505568, 1881920, 2258272, 2634624, 3010976, 3387328, 3763680, 4140032, 4516384, 4892736, 5269088, 5645440, 6021792, 6398144,
6774496, 7150848, 7527200, 7903552, 8279904, 8656256, 9032608, 9408960, 9785312, 10161664, 10538016, 10914368, 11290720Подготавливаем плацдарм для будущей ОС:
mfsbsd# mount /dev/ad0s1a /mnt/
mfsbsd# mkdir /mnt/var
mfsbsd# mkdir /mnt/usr
mfsbsd# mkdir /mnt/tmp
mfsbsd# mount /dev/ad0s1d /mnt/var/
mfsbsd# mount /dev/ad0s1e /mnt/tmp/
mfsbsd# mount /dev/ad0s1f /mnt/usr/
mfsbsd# mount /dev/ad0s1a /mnt/
mfsbsd# mkdir /mnt/var
mfsbsd# mkdir /mnt/usr
mfsbsd# mkdir /mnt/tmp
mfsbsd# mount /dev/ad0s1d /mnt/var/
mfsbsd# mount /dev/ad0s1e /mnt/tmp/
mfsbsd# mount /dev/ad0s1f /mnt/usr/
Все, работу по подготовке к инсталляции FreeBSD через сеть мы закончили.
Настало время sysinstall – запускаем его и выбираем пункт меню Custom. В пункте Options ОБЯЗАТЕЛЬНО меняем значение Install Root на /mnt .
Далее посещаем Distributions с выбором там опции Minimal. В Media выбираем ближайший к нам ftp. Финализируем Commit’ом.
Настало время sysinstall – запускаем его и выбираем пункт меню Custom. В пункте Options ОБЯЗАТЕЛЬНО меняем значение Install Root на /mnt .
Далее посещаем Distributions с выбором там опции Minimal. В Media выбираем ближайший к нам ftp. Финализируем Commit’ом.
Если все хорошо, то появится заветный вопрос «Visit the general configuration menu for a chance to set any last options?», ответ на который зависит от вас.
Мы же продолжаем дальше:
Мы же продолжаем дальше:
mfsbsd# cp /etc/resolv.conf /mnt/etc/
mfsbsd# cp /etc/rc.conf /mnt/etc/
mfsbsd# cp /etc/rc.conf /mnt/etc/
после чего удалите из него все лишнее.
Опционально:
mfsbsd# cp /etc/ssh/sshd_config /mnt/etc/ssh/
Опционально:
mfsbsd# cp /etc/ssh/sshd_config /mnt/etc/ssh/
Возвращаем назад fstab:
# scp user@remotehost:/home/user/fstab /mnt/etc
# scp user@remotehost:/home/user/fstab /mnt/etc
Чрутимся в /mnt:
mfsbsd# chroot /mnt
копируем на место ядро и его модули:
mfsbsd# chroot /mnt
копируем на место ядро и его модули:
mfsbsd# cp -Rp /boot/GENERIC/* /boot/kernel
Меняем пасс на рута:
mfsbsd# passwd root
Меняем пасс на рута:
mfsbsd# passwd root
Changing local password for root
New Password:
Retype New Password:Финальный ребут:
# shutdown -r now
# shutdown -r now
Скрестив пальцы, молимся великому пингу и ожидаем поднятия сервера с новой осью
Взято с subnets.ru
Комментариев нет :
Отправить комментарий