Yet another debootstrap manual

Казалось бы мануалов по debootstrap чуть более, чем достаточно, зачем нужен ещё один?
Для себя я скажу, что некоторые вещи показались мне неоднозначными, кое-какие “умолчания” пришлось додумывать самому. Поэтому и родилась идея сделать шпаргалку “на будущее”, авось ещё кому пригодится.


Диспозиция: dedicated-сервер с одним диском, загруженный с rescue CD. Задача: сделать lvm, разметить диск нужным нам образом и поставить чистую операционку (Debian Jessie).

Шаг 1. Собираем lvm

Размечаем диск. Не забываем установить правильный partition type и загрузочный флаг.

Command (m for help): p
Disk /dev/sda: 1,8 TiB, 2000398934016 bytes, 3907029168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x472be2a1

Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 526335 524288 256M 83 Linux
/dev/sda2 526336 3907029167 3906502832 1,8T 8e Linux LVM

Создаём lvm
pvcreate /dev/sda2
vgcreate vgstorage /dev/sda2
lvcreate -L20G -n lvroot vgstorage
lvcreate -L20G -n lvvar vgstorage
lvcreate -L1G -n lvswap vgstorage
lvcreate -l100%FREE -n lvhome vgstorage
vgchange -a y vgstorage

Создаем файловые системы.
mkfs.ext2 /dev/sda1
mkfs.ext4 /dev/vgstorage/lvroot
mkfs.ext4 /dev/vgstorage/lvvar
mkfs.ext4 /dev/vgstorage/lvhome

Шаг 2. Ставим систему

Пишем скрипт, который поставит нам систему. Я воспользовался скриптами уважаемго @derlaft, за что ему большое спасибо, и немного изменил их под себя.
Скрипт можно положить, например, в /root

install.sh

#!/bin/bash

ARCH=amd64

#Ставим актуальный стабильный релиз
#На момент написания статьи это был Jessie 8.7
OS=debian
DISTRO=stable

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

##Ставить будем с зеркала в интернете
debootstrap --include=sudo,nano,wget --arch $ARCH $DISTRO $TARGET http://deb.debian.org/$OS/

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

Создаем окружение для установки системы
mkdir /mnt/debian
mkdir /mnt/debian/boot
mkdir /mnt/debian/home
mkdir /mnt/debian/var
mount /dev/vgstorage/lvroot /mnt/debian
mount /dev/sda1 /mnt/debian/boot
mount /dev/vgstorage/lvvar /mnt/debian/var
mount /dev/vgstorage/lvhome /mnt/debian/home

Теперь просто запускаем скрипт:
bash ./install.sh

Система скачана и установлена. Теперь делаем ещё один скрипт, который поставит нам ядро, загрузчик и некоторые доп. пакеты.
Его можно сразу поместить в $TARGET, чтобы было удобнее запускать из chroot

postinst.sh

#!/bin/bash
## обновление индекса репозитария
apt-get update
## настройка часовых поясов
dpkg-reconfigure tzdata
## монтирование файловых систем
mount -t proc /proc /proc
mount -a

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

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

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

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

adduser $USER
usermod -a -G sudo $USER

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

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

## Необходиме для сервера Debian пакеты. У вас список может быть свой:
apt-get -y install linux-base linux-image-$ARCH grub-pc lvm2 sudo openssh-server aptitude

## Завершающий этап - установка загрузчика:
grub-install /dev/sda
update-grub

Запускается скрипт командой:
env LANG=C env HOME=/root chroot $TARGET /bin/bash /postinst.sh

Осталось немного:
Добавляем информацию в /etc/fstab

/dev/sda1 /boot ext2 defaults 0 0
/dev/mapper/vgstorage-lvroot / ext4 errors=remount-ro,relatime 0 1
/dev/mapper/vgstorage-lvhome /home ext4 defaults ,relatime 0 2
/dev/mapper/vgstorage-lvvar /var ext4 defaults 0 0
/dev/mapper/vgstorage-lvswap none swap sw 0 0
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts defaults 0 0

Настраиваем сеть (в простейшем случае это будет dhcp, однако, бывает всякое)
/etc/network/interfaces

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

Наконец, настраиваем /etc/apt/sources.list

deb http://deb.debian.org/debian stable main

deb http://deb.debian.org/debian/ jessie main contrib non-free
deb-src http://deb.debian.org/debian/ jessie main contrib non-free

deb http://security.debian.org/ jessie/updates main
deb-src http://security.debian.org/ jessie/updates main

# jessie-updates, previously known as 'volatile'
deb http://deb.debian.org/debian/ jessie-updates main contrib non-free
deb-src http://deb.debian.org/debian/ jessie-updates main contrib non-free

# jessie-backports
deb http://deb.debian.org/debian/ jessie-backports main contrib non-free
deb-src http://deb.debian.org/debian/ jessie-backports main contrib non-free

Выходим из chroot, перезагружаемся. После ребута нас должна встретить свежеустановленная система 🙂

Пост на хабре, который был источником вдохновения

Leave a Reply