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

в 14:26, , рубрики: Debian, linux, Ubuntu, метки: ,

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

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

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

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

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

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

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

Для работы скрипта потребуется рабочий 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/ubuntu

## в качестве источника можно использовать примонтированный 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

И файл $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

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js