Пользователь
0,3
рейтинг
10 июля 2012 в 18:26

Администрирование → Ставим Ubuntu/Debian через debootstrap из другой Linux-системы tutorial

imageПрошло почти три года с публикации последней и единственной статьи на хабре про это дело, и с тех пор некоторые вещи изменились. Хочу сразу сказать, что этот пост — упрощение и объединение двух замечательных вики-страниц написанных моим другом: раз и два. Если те страницы направлены на полное и подробное описание процесса установки, то я постараюсь максимально упростить и ускорить процесс установки, разбив его всего на три шага.

Сам я считаю такой способ установки самым адекватным, т.к. он при всей своей простоте имеет большую гибкость, свежеустановленная система имеет самые новые версии пакетов, а всё, что нужно для полноценной работы системы можно установить до первой загрузки в неё. Под катом я приведу некоторый набор скриптов,

Во-первых, вам понадобится рабочая Linux-система, из которой мы будем устанавливать новую систему. Подойдет любой дистрибутив, как и установленный, так и запущенный с LiveCD.

Шаг нулевой: Подготовка жесткого диска

Для начала нужно разметить диск, как ваша душа пожелает. Хороших инструкций в интернете много, я обычно использую графическую утилиту GParted. Настоятельно советую выделить /home в отдельный раздел, при переустановке/смене дистрибутива это позволит избежать геморроя с переносом данных.

Примонтируйте все разделы в какую-нибудь директорию (к примеру, /mnt/debian/). Далее даже вне скриптов вместо /mnt/debian я буду использовать $TARGET.

## Предположим, что /dev/sda1 - root, а /dev/sda2 - home

mkdir /mnt/debian
mount /dev/sda1 /mnt/debian
mkdir /mnt/debian/home
mount /dev/sda2 /mnt/debian/home


Шаг первый: Формирование базовой системы

Для работы скрипта потребуется рабочий debootstrap, который есть в репозиториях всех deb-based дистрибутивов. Не бойтесь исправлять переменные и комментировать/раскомментировать строчки.

#!/bin/bash

ARCH=i386
#ARCH=amd64 ##установить 64-битную систему из-под 32-битной не выйдет

## пример для debian
OS=debian
DISTRO=wheezy
#DISTRO=stable

## ubuntu
#OS=ubuntu
#DISTRO=oneiric

## место для установки системы
TARGET=/mnt/debian

## в качестве источника можно использовать примонтированный cdrom с системой:
#debootstrap --include=sudo,nano,wget --arch $ARCH $DISTRO $TARGET file:/media/cdrom

## а можно и зеркало в интернете
debootstrap --include=sudo,nano,wget --arch $ARCH $DISTRO $TARGET http://$OS.mirror.vu.lt/$OS/

## строчки ниже трогать не нужно, они монтируют системные директории в новый /
mount -o bind /dev $TARGET/dev
mount -o bind /sys $TARGET/sys


Шаг второй: начальная конфигурация

Настройте файл $TARGET/etc/fstab по шаблону:

# /etc/fstab: static file system information.
#
# Use 'vol_id --uuid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>      <options>       <dump>  <pass>
proc            /proc           proc        defaults        0       0    #обязательно
/dev/sda1       /boot           ext2        defaults        0       0
/dev/sda2       /               ext4        defaults        0       1
/dev/sda3       /home           ext4        defaults        0       0
/dev/sda4       none            swap        sw              0       0

В рассмотренном выше примере он будет выглядеть так:

# /etc/fstab: static file system information.
# <file system> <mount point>   <type>      <options>       <dump>  <pass>
proc            /proc           proc        defaults        0       0 
/dev/sda1       /               ext4        defaults        0       1
/dev/sda2       /home           ext4        defaults        0       0

И файл $TARGET/etc/apt/sources.list. Его можно либо сгенерировать (генераторы для debian, ubuntu), либо воспользоваться шаблонами:

Шаблон для Debian
deb http://http.debian.net/debian $DISTRO main contrib non-free
# deb-src http://http.debian.net/debian $DISTRO main
 
deb http://security.debian.org $DISTRO/updates main contrib non-free
# deb-src http://security.debian.org $DISTRO/updates main
 
deb http://http.debian.net/debian-backports $DISTRO-backports main non-free
# deb-src http://http.debian.net/debian-backports $DISTRO-backports main
 
deb http://http.debian.net/debian $DISTRO-proposed-updates main contrib non-free
# deb-src http://http.debian.net/debian $DISTRO-proposed-updates main
Шаблон для Ubuntu
deb http://ru.archive.ubuntu.com/ubuntu $DISTRO main universe restricted multiverse
# deb-src http://ru.archive.ubuntu.com/ubuntu $DISTRO main universe
 
deb http://security.ubuntu.com/ubuntu $DISTRO-security main universe restricted multiverse
# deb-src http://security.ubuntu.com/ubuntu $DISTRO-security main universe
 
deb http://ru.archive.ubuntu.com/ubuntu $DISTRO-updates main universe restricted multiverse
# deb-src http://ru.archive.ubuntu.com/ubuntu $DISTRO-updates main universe
 
deb http://ru.archive.ubuntu.com/ubuntu $DISTRO-proposed main universe restricted multiverse
# deb-src http://ru.archive.ubuntu.com/ubuntu $DISTRO-proposed main universe
 
deb http://ru.archive.ubuntu.com/ubuntu $DISTRO-backports main universe restricted multiverse
# deb-src http://ru.archive.ubuntu.com/ubuntu $DISTRO-backports main universe
 
deb http://archive.canonical.com/ubuntu $DISTRO partner
 
deb http://extras.ubuntu.com/ubuntu $DISTRO main
# deb-src http://extras.ubuntu.com/ubuntu $DISTRO main

Шаг третий: всё остальное

Для этого нужно запустить следующий скрипт в chroot. При условии, что имя скрипта — postinst.sh и лежит он в $TARGET/, запускать его нужно так:

env LANG=C env HOME=/root chroot $TARGET /bin/bash /postinst.sh

Сам скрипт:

#!/bin/bash

## обновление индекса репозитария
apt-get update

## настройка часовых поясов
dpkg-reconfigure tzdata

## монтирование файловых систем
mount -t proc /proc /proc
mount -a

## участие в опросе популярности пакетов
apt-get -y install popularity-contest

## русский язык в консоли, русская локаль
## при настройке console-cyrillic лучше выбрать, как шрифт, UniCyr, а на последний вопрос ответить «Да»

apt-get -y install locales console-cyrillic
dpkg-reconfigure locales
dpkg-reconfigure console-cyrillic

## установка hostname, обязательный шаг
HOST='mysuperpc'

echo "$HOST" > /etc/hostname
echo -e "\n127.0.0.1 localhost $HOST" >> /etc/hosts

## добавление пользователя, добавление его в sudo
USER='mynotsuperuser'

echo 'Добавление пользователя'

adduser $USER
usermod -a -G sudo $USER

## установка пароля root

echo 'Установка пароля root'
passwd

## установка ядра и загрузчика
ARCH=i686 #варианты: i386, i486, i686, amd64

## Debian:
apt-get -y install linux-base linux-image-$ARCH linux-headers grub

## Ubuntu:
# apt-get -y install linux-image-generic linux-headers-generic

## уставновка большинства прошивок
apt-get -y install firmware-linux firmware-ralink firmware-realtek

## установка рабочей среды

## Debian:
apt-get -y install xorg kde-full #KDE
#apt-get -y install xorg kde # <= Lenny
#apt-get -y install xorg gnome
#apt-get -y install xorg xfce lxdm #XFCE
#apt-get -y install xorg lxde lxdm #LXDE

## Debian, аудиосистема
apt-get -y install pulseaudio
apt-get -y install alsa-base alsa-tools alsa-utils alsa-oss

## Ubuntu: 
#apt-get -y install xorg kubuntu-desktop #KDE
#apt-get -y install xorg ubuntu-desktop #Unity
#apt-get -y install xorg gnome-shell gnome-themes-standard gnome-tweak-tool #Gnome3
#apt-get -y install xorg xubuntu-desktop #XFCE
#apt-get -y install xorg lubuntu-desktop #LXDE 



Если нужно поставить что-нибудь еще вручную до перезагрузки, то всегда можно войти в chroot-окружение командой:

env LANG=C env HOME=/root chroot $TARGET /bin/bash

Вот и всё. Полный набор скриптов для полуавтоматической установки я выложил на github, так что не стесняйтесь оформлять предложения и улучшения в виде pull-request'ов.
Алексей @tyderh
карма
34,0
рейтинг 0,3
Пользователь
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Администрирование

Комментарии (13)

  • +2
    Хорошая инструкция, только если все так подробно комментируйте, добавили бы команды для mount.

    > Примонтируйте все разделы в какую-нибудь директорию
    • +1
      Спасибо, сделал
  • 0
    Зачем так сложно, или я чего-то не понимаю.

    Через cdrom.
    Качаем, например, отсюда
    ftp.yandex.ru/ubuntu/dists/precise/main/installer-amd64/20101020ubuntu136/images/netboot/mini.iso
    Записываем образ размером 30M и с него ставим.

    Через флэшку.
    Ставим unetbootin.sourceforge.net/
    В меню выбираем все равно дистрибутив (любой buntu),
    и установку через интернет например 12.04_Netinstall_x64.
    unetbootin качает тот-же образ и извлекает из него нужные файлы и прописывает их на флэшку.
    Загружаемся с флэшки и ставим.

    Установка имеет гораздо большие возможности чем описаны в Вашей статье (форматирование диска, гораздо больший выбор оболочек, серверной части и доп. пакетов) и также все ставится через интернет и самые свежие пакеты.
    • 0
      В реальной жизни сервера зачастую находятся в далёком датацентре, kvm там может и не быть, а есть только установленный линукс.
    • 0
      Зачем так сложно, или я чего-то не понимаю.

      Не понимаете. Всё точно так, как с netinst, только еще более гибко. Во-первых, можно установить систему из уже рабочей, можно использовать любую утилиту для разметки дика, а выбор оболочек, серверной части и доп. пакетов ограничивается лишь наличием их в репозитории.

      А еще у меня в netinst-образе не заводится интернет.
      • 0
        Все равно не понимаю. Я в комментарии выше просто забыл описать этот случай.

        Если стоит grub2, то качаем нужные Вам iso. Редактируем, для простоты, /boot/grub/grub.cfg (если iso образы в других местах пишем их)

        menuentry «Ubuntu 12.04 Desktop amd64» {
        loopback loop /boot/iso/ubuntu-12.04-desktop-amd64.iso
        linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/boot/iso/ubuntu-12.04-desktop-amd64.iso noeject noprompt — initrd (loop)/casper/initrd.lz
        }

        menuentry «Ubuntu 12.04 Desktop i386» {
        loopback loop /boot/iso/ubuntu-12.04-desktop-i386.iso
        linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/boot/iso/ubuntu-12.04-desktop-i386.iso noeject noprompt — initrd (loop)/casper/initrd.lz
        }

        menuentry «Ubuntu 12.04 Server NetBoot amd64» {
        loopback loop /boot/iso/ubuntu-12.04-server-amd64-mini.iso
        linux (loop)/linux — initrd (loop)/initrd.gz
        }

        menuentry «Ubuntu 12.04 Server NetBoot i386» {
        loopback loop /boot/iso/ubuntu-12.04-server-i386-mini.iso
        linux (loop)/linux — initrd (loop)/initrd.gz
        }

        И опять все ставится через интернет и самые свежие пакеты или без интернета через готовый дистрибутив.
        Или не через инт
        • 0
          Теперь я вас не стал понимать.

          Deboostrap используют сами установщики, но в случае «ручной» установки мы получаем больший контроль над установленной системой.

          Этот способ можно использовать во всех случаях, что вы описали, даже в комплекте с оффлайн-дисками для установки без сети
          • 0
            Все равно не понимаю. Не хотите buntu? Ставьте gentoo, там полный контроль над установкой, управлением и элементарно клонируются уже собранные образы, особенно хорошо для стандартных рабочих мест и компьютерных классов, и без всякого интернета. Все уже «изобретено» до Вас.
            Сам сижу под gentoo c 2003.
            • +1
              Я не хочу генту, на которую у меня нет времени, и хочу полный контроль над установкой.
  • 0
    Видимо тут нет настройки загрузчика на новую систему? Этого очень не хватает до полноты…
    Был бы благодарен, если осветили бы этот вопрос.
    • 0
      Установка загрузчика тут есть, она идет в автоматическом режиме. Достаточно только примонтировать разделы с остальными ОС куда-нибудь в /mnt устанавливаемой системы, после update-grub /dev/sdX. Про Windows не знаю, никогда рядом с ним не ставил
      • 0
        Прошу прощения за толстолобость, но получается после выполнения инструкций выше по идее достаточно перезагрузить ПК что бы попасть в свежеустановленную ОС?
        • +1
          Вообще да, но лучше всё лишний раз перепроверить. Загрузчик может не поставиться из-за какой-нибудь ошибки, или поставиться, но забыть о других ОС в списке. Из-за забытия о каком-нибудь firmware или network-manager'е можно остаться без интернета и выполнять chroot обратно для доустановки пакетов

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.