Posterous theme by Cory Watilo

replace freebsd with linux via ssh

Имея в своем распоряжении несколько серверов решил привести их к одной платформе, а именно - Ubuntu Linux. Вдохновленный этим описанием я решил попробовать повторить его. Сразу скажу - к серверу я таки поехал. Я забыл сделать fstab, но до него дело не дошло - не завелся grub. Хочу выразить глубокую признательность берсеркеру за статью, идею и подсказки! [cc lang="text"] ВНИМАНИЕ! Все что тут описано Вы делаете на свой страх и риск. [/cc] Итак, что получилось. Первым делом я выделил небольшой раздел - 1ГБ - под линукс, и поставил его туда в минимальном доступном варианте. На один раздел как "/", без свопа. Сразу же поставил к нему ssh - а то потом плохо будет. Затем из работающего линукса я смонтировал установленный (допустим, в /mnt/freshlinux) и сделал из него тарбол: [cc lang="bash"] cd /mnt/freshlinux && tar -cpf ~/base.tar * [/cc] В дальнейшем будет два варианта установки: развернуть полностью установленный или развернуть новый посредством debootstrap. Мне было весьма лениво закачивать немаленький тарбол на удаленную систему со скоростью аплода 30КБ/с. Теперь пора урезать базовую систему. Проще всего сделать это находясь в нем: [cc lang="bash"] chroot /mnt/freshlinux [/cc] И начинаем все несущественное удалять. Желательно оставить grub (потом понадобится). Я же еще оставил debootstrap - см. примечание выше. Также я люблю reiserfs, поэтому надо для него утилиты оставить. Как было сказано в руководсте берсеркера - вырезаем доки-маны [cc lang="bash"] find /usr/share/{doc,locale,man} -type f -exec rm -f \; [/cc] То что осталось должно весить около 70МБ. Обязательно надо прописать в /etc/network/interfaces сетевые настройки удаленной машинки. Также не забыть /etc/resolv.conf. Далее у меня подход стал чуть отличаться: новые ядра поддерживают initramfs. Используя initrd у меня почему-то небыло возможноси записи в него. Initramfs я собирал так как сказано в мане: [cc lang="bash"] cd /mnt/freshlinux && find . | cpio -o -H newc | gzip -9 > ~/initramfs.cpio.gz [/cc] Следующий шаг - надо собрать ядро, которое будет поддерживать все что нам нужно. Вот такой конфиг у меня получился для ядра 2.6.22 и вот такое ядро. Знаю, что ядро не идеальное, но оно работает. Теперь можно загружать ядро и initramfs на удаленную машину. Там для раздела с которого загрузится линукс можно освободить раздел свапа (допустим, это ad0s1b): [cc lang="bash"] swapoff /dev/ad0s1b newfs -O1 /dev/ad0s1b mkdir /small mount /dev/ad0s1b /small [/cc] Затем надо поставить grub [cc lang="bash"] sysctl kern.geom.debugflags=16 grub-install /dev/ad0 grub-set-default 1 [/cc] и создать для него такой конфиг в /boot/grub/menu.lst: [cc lang="bash"] default saved 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 [/cc] После перезагрузки мы должны попасть в linux. Процитирую берсеркера: [cc lang="text"] ВНИМАНИЕ - все делать осторожно и вдумчиво, т.к. возврата уже не будет. [/cc] Теперь надо переразметить диск. Для разметки я привык использовать cfdisk. Далее на указанных разделах создал файловые системы и смонтировал все это. И вот тут можно поступить двумя способами - развернуть тарболл или поставить заново систему через debootstrap. Я пошел вторым путем, и поехал к серверу - не встал загрузчик. Так как распаковка тарбола не нуждается в пояснениях, то расскажу немного о debootstrap. Собственно, имеем директорию, в которую смонтирован "/" новой системы. Также я разношу /usr, /var/, /home, /tmp. Все это добро смонтировалвнутри нового корня, и выполнил [cc lang="bash"] CHROOT=/mnt/freshlinux debootstrap --include=ssh edgy $CHROOT [/cc] Так туда станет новая система. Не помешает сразу сделать [cc lang="bash"] cp /etc/apt/sources.list /mnt/freshlinux/etc/apt/sources.list 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 [/cc] Вот тут уместно будет создать файл /etc/fstab, который я забыл сделать у себя. Синтаксис можно подсмотреть в живущей в памяти системе - там все просто. И войдем в новую систему и обновим список пакетов и поставим ядро и загрузчик: [cc lang="bash"] chroot $CHROOT apt-get update apt-get install linux-image grub mkdir /boot/grub update-grub vi /boot/grub/menu.lst [/cc] и в конфиг граба пишем: [cc lang="bash"] timeout 10 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 [/cc] и затем уже не в chroot'е делаем [cc lang="bash"] grub-install --root-directory=$CHROOT [/cc] По идее все. Надеюсь, мне покажут ошибки, которые я сделал =)
| Viewed
times
Filed under: