Имея в своем распоряжении несколько серверов решил привести их к одной платформе, а именно – Ubuntu Linux.
Вдохновленный этим описанием я решил попробовать повторить его.
Сразу скажу – к серверу я таки поехал. Я забыл сделать fstab, но до него дело не дошло – не завелся grub.
Хочу выразить глубокую признательность берсеркеру за статью, идею и подсказки!
Итак, что получилось.
Первым делом я выделил небольшой раздел – 1ГБ – под линукс, и поставил его туда в минимальном доступном варианте. На один раздел как “/”, без свопа. Сразу же поставил к нему ssh – а то потом плохо будет.
Затем из работающего линукса я смонтировал установленный (допустим, в /mnt/freshlinux) и сделал из него тарбол:
В дальнейшем будет два варианта установки: развернуть полностью установленный или развернуть новый посредством debootstrap. Мне было весьма лениво закачивать немаленький тарбол на удаленную систему со скоростью аплода 30КБ/с.
Теперь пора урезать базовую систему. Проще всего сделать это находясь в нем:
И начинаем все несущественное удалять. Желательно оставить grub (потом понадобится). Я же еще оставил debootstrap – см. примечание выше. Также я люблю reiserfs, поэтому надо для него утилиты оставить.
Как было сказано в руководсте берсеркера – вырезаем доки-маны
То что осталось должно весить около 70МБ.
Обязательно надо прописать в /etc/network/interfaces сетевые настройки удаленной машинки. Также не забыть /etc/resolv.conf.
Далее у меня подход стал чуть отличаться: новые ядра поддерживают initramfs. Используя initrd у меня почему-то небыло возможноси записи в него.
Initramfs я собирал так как сказано в мане:
Следующий шаг – надо собрать ядро, которое будет поддерживать все что нам нужно. Вот такой конфиг у меня получился для ядра 2.6.22 и вот такое ядро. Знаю, что ядро не идеальное, но оно работает.
Теперь можно загружать ядро и initramfs на удаленную машину. Там для раздела с которого загрузится линукс можно освободить раздел свапа (допустим, это ad0s1b):
newfs -O1 /dev/ad0s1b
mkdir /small
mount /dev/ad0s1b /small
Затем надо поставить grub
grub-install /dev/ad0
grub-set-default 1
и создать для него такой конфиг в /boot/grub/menu.lst:
fallback 0
timeout 1
title freebsd
kernel (hd0,0,a)/boot/loader
savedefault 0
title debian
kernel (hd0,0,b)/bzImage root=/dev/ram0 rdinit=/sbin/init rw panic=1
initrd (hd0,0,b)/initramfs.cpio.gz
savedefault 0
После перезагрузки мы должны попасть в linux.
Процитирую берсеркера:
Теперь надо переразметить диск. Для разметки я привык использовать cfdisk.
Далее на указанных разделах создал файловые системы и смонтировал все это.
И вот тут можно поступить двумя способами – развернуть тарболл или поставить заново систему через debootstrap. Я пошел вторым путем, и поехал к серверу – не встал загрузчик.
Так как распаковка тарбола не нуждается в пояснениях, то расскажу немного о debootstrap.
Собственно, имеем директорию, в которую смонтирован “/” новой системы. Также я разношу /usr, /var/, /home, /tmp. Все это добро смонтировалвнутри нового корня, и выполнил
debootstrap --include=ssh edgy $CHROOT
Так туда станет новая система.
Не помешает сразу сделать
cp /etc/network/interfaces /mnt/freshlinux/etc/network/interfaces
cp /etc/resolv.conf /mnt/freshlinux/etc/resolv.conf
apt-get install sudo
addgroup admin
adduser myusername
adduser myusername admin
echo "%admin ALL=(ALL) ALL" >> /etc/sudoers
Вот тут уместно будет создать файл /etc/fstab, который я забыл сделать у себя. Синтаксис можно подсмотреть в живущей в памяти системе – там все просто.
И войдем в новую систему и обновим список пакетов и поставим ядро и загрузчик:
apt-get update
apt-get install linux-image grub
mkdir /boot/grub
update-grub
vi /boot/grub/menu.lst
и в конфиг граба пишем:
title Ubuntu, kernel 2.6.22-14-generic
root (hd0,0)
kernel /boot/vmlinuz-2.6.22-14-generic root=/dev/sda1 ro quiet
initrd /boot/initrd.img-2.6.22-14-generic
quiet
savedefault
и затем уже не в chroot’е делаем
По идее все. Надеюсь, мне покажут ошибки, которые я сделал =)
По-моему было бы быстрее поставить там на отдельный раздел размером 100-200 МБ тот же DSL, а уже с него поставить удаленно дебиан через netinstall
Имхо конечно… но так было бы правильнее и быстрее.
DeViL
December 23rd, 2007
Возможности работать с разделом нету. Максимум – загрузить все из него в память, и оттуда уже работать. Так что только образ SDL туда скинуть можно было бы.
dm
December 23rd, 2007
Да, сер знает толк в извращениях(c)не мое…
Скажи, зачем нужно затевать удаленный геморой, когда есть физический доступ к серверу?
Самый простой в таком случае вариант(и с самым коротким простоем) – сделать образ новой системы и всех необходимых сервисов в вмваре, подъехать и развернуть его.
Если серверов много, то клонирование системы вобще единственный правильный вариант…
pharmacolog
January 3rd, 2008
Приехать-то можно было… И таки пришлось. Хотелось набраться скиллов и не ехать. В общем, буду еще на VirtualBox’е обкатывать этот подход.
dm
January 3rd, 2008