Одним из способов установки Debian GNU/Linux на новую систему
(или же носитель) является загрузка специализированной
«системы-установщика», — Debian Installer (D-I.) В некоторых
случаях, e. g., при наличии только лишь загрузочного носителя с
D-I «под рукой», такой способ более чем оправдан, однако, можно
поспорить, что использование установленной Debian-системы
«общего назначения» взамен специализированной D-I может быть
удобнее, и, в некотором смысле, несет несколько меньший риск
получения в итоге скомпрометированной системы.
В качестве аргументов, ниже разобрана последовательность «шагов»
D-I, и указаны в известной степени равнозначные им действия с
точки зрения системы общего назначения. (Предполагается, что на
такую систему установлены все необходимые инструменты.)
Поскольку, очевидно, в процессе потребуется упомянуть и
некоторые особенности работы самой D-I-системы, предлагаемый
материал может оказаться полезным и тем, кто не предполагает
отказываться от использования D-I.
Отметим, что использование системы общего назначения
предполагает возможность подключения к ней целевого носителя.
Судя по личному опыту автора, вполне допустимо подключать НЖМД
интерфейса SATA к системе во время работы последней. (Стоит
отметить, что конструкция разъемов SATA проектировалась с учетом
возможности «горячего подключения.») Разумеется, можно
воспользоваться и многочисленными адаптерами USB to SATA (IDE) —
что, разумеется, более безопасно.
При подготовке данного материала автор использовал D-I для
Debian GNU/Linux 6.0.6. Не исключено, что D-I ожидаемого в
недалеком будущем Debian 7.0 будет существенно отличаться от
описываемого ниже.
(Напротив, в примерах команд, приводимых для случая установки с
использованием системы общего назначения, упоминаются именно
testing и Wheezy.)
Данная редакция является «рабочим черновиком»; многие из данных
в примерах командных строк не были проверены автором в сколь
угодно близкой к приведенной форме.
© 2013 Иван Шмаков <
onei...@gmail.com>
Данный текст является свободным произведением и распространяется
на условиях лицензии Creative Commons Attribution-ShareAlike
(CC BY-SA.)
Получение образа D-I
Пожалуй, самым первым шагом при использовании D-I является
получение содержащего оный образа, включающего, как правило, и
некоторый набор пакетов. Наиболее «современным» способом
загрузки (позволяющим, помимо прочего, поучаствовать в
распространении образов всем желающим) является, несомненно,
использование равноранговой сети BitTorrent. E. g., используя
aria2c(1):
$ aria2c -- \
http://cdimage.debian.org/debian-cd/6.0.6/amd64/bt-cd/debian-6.0.6-amd64-netinst.iso.torrent
Учитывая, что большую часть образа составляет некий набор
предназначенных для установки на целевую систему пакетов (за
исключением, пожалуй, образов типа «businesscard», таких пакетов
не содержащих вовсе), можно было бы пожелать загрузить эти
пакеты с Debian-зеркал «общего назначения», загрузив с
http://cdimage.debian.org/ лишь только собственно D-I (и,
возможно, некие служебные данные.) Такую возможность
предоставляет Jigdo; e. g.:
$ cat < ~/.jigdo-lite
jigdo=''
debianMirror='
http://http.debian.net/debian/'
nonusMirror=''
tmpDir='.'
jigdoOpts='--cache jigdo-file-cache.db'
wgetOpts='--passive-ftp --dot-style=mega --continue --timeout=30'
scanMenu=''
$ wget -x -- \
cdimage.debian.org/debian-cd/6.0.6/amd64/jigdo-cd/debian-6.0.6-amd64-netinst.jigdo \
cdimage.debian.org/debian-cd/6.0.6/amd64/jigdo-cd/debian-6.0.6-amd64-netinst.template
$ jigdo-lite --noask \
cdimage.debian.org/debian-cd/6.0.6/amd64/jigdo-cd/debian-6.0.6-amd64-netinst.jigdo
(При использовании HTTP-proxy, переменные окружения http_proxy=,
etc., должны быть, очевидно, установлены нужным образом.)
Наконец, можно получить образ непосредственно с зеркала —
возможность, которой не следует злоупотреблять. (Наилучшим
решением, пожалуй, будет получение лишь образов «businesscard»
и, возможно, «netinst.»)
Целостность образов
Загруженный как описано выше файл будет, как правило, в точности
соответствовать выпущенному проектом Debian. Однако, тем из
нас, кто привык уделять чуть больше внимания вопросам
«информационной безопасности», этому факту наверняка потребуется
подтверждение.
Проверить целостность образа можно по файлам *SUM, размещаемым
также на несущих установочные образы зеркалах Debian. E. g.:
$ wget -x -- \
cdimage.debian.org/debian-cd/6.0.6/amd64/iso-cd/SHA256SUM
$ grep -F -- debian-6.0.6-amd64-netinst.iso \
cdimage.debian.org/debian-cd/6.0.6/amd64/iso-cd/SHA256SUM \
| sha256sum -c
debian-6.0.6-amd64-netinst.iso: OK
$
Ясно, однако, что файлы *SUMS сами по себе могут быть повреждены
(подменены) при передаче. Для их проверки, в свою очередь,
можно использовать файлы электронной цифровой подписи (.sign)
OpenPGP (GnuPG.)
Здесь, однако, есть небольшая особенность: известно, что
открытые ключи Debian-архива и разработчиков Debian можно найти
в самой системе (пакеты debian-archive-keyring и debian-keyring,
соответственно; первый из этих пакетов почти наверняка окажется
установлен в конкретной Debian-системе, поскольку является
Priority: important.) Так, для проверки полученного с
произвольного зеркала .dsc-файла можно было бы выполнить, e. g.:
$ gpg --verify --keyring=/usr/share/keyrings/debian-keyring.gpg -- \
http.debian.net/debian/pool/main/h/hello/hello_2.8-2.dsc
Напротив, насколько известно автору, для проверки «подлинности»
*SUMS-файлов потребуется получить соответствующий ключ из
«незащищенного» источника (см., e. g., [1].)
[1]
http://www.debian.org/CD/verify
При использовании для установки системы на целевой носитель
debootstrap(8), проверка целостности выполняется автоматически,
с использованием открытых ключей пакета debian-archive-keyring
установленной системы.
Следующим шагом, образ требуется записать на подходящий носитель
(CD, DVD+R, USB Flash, etc.), однако этот вопрос выходит за
рамки данных заметок.
Адаптация к окружению
Первые вопросы, которыми «встречает» пользователя D-I-система
будут следующие:
• параметры ядра и D-I — предпочтение автора остается за
«expert-режимом», что транслируется, по большему счету, в
передачу ядру (а через него — D-I и Debconf) опции
priority=low (AKA DEBIAN_PRIORITY=low), что заставляет Debconf
задать пользователю некоторые дополнительные вопросы, для
которых в противном случае будут выбраны умолчания; (автор
припоминает, что здесь же можно указать и расположение
т. н. preseed-файла, содержащего ответы на вопросы Debconf;
использование такого файла может значительно сократить время,
проводимое оператором при установке системы — вне зависимости
от использования D-I — однако, здесь не рассматривается);
• выбор локали («языка») — включая выбор страны, дополнительных
локалей подлежащих установке (подобно:
# dpkg-reconfigure locales; впрочем, на взгляд автора, лучше
сразу установить пакет locales-all вместо locales — при
установке «типичной Desktop-системы», FSVO, вклад данного
пакета в общее занятое «дисковое» пространство будет
неощутим), и, наконец, локали по-умолчанию для целевой системы
(/etc/default/locale);
• выбор раскладки клавиатуры;
• выбор дополнительных «модулей D-I» (пакетов .udeb) для
загрузки с установочного носителя (модули openssh-client-udeb
и parted-udeb вполне могут оказаться полезными);
• параметры сетевого интерфейса (с возможностью выбрать
использование DHCP) — будут продублированы в interfaces(5)
целевой системы;
• назначения пароля привилегированному пользователя целевой
системы; создание непривилегированного пользователя; (IOW,
passwd(1), adduser(8));
• настройка часового пояса (# dpkg-reconfigure tzdata);
• определение «дисковых» накопителей.
Ясно, что все эти вопросы не актуальны для установщика,
работающего под управлением (уже настроенной) системы общего
назначения. Однако, как отмечено выше, через эти вопросы
выполняется настройка также и целевой системы. В случае
установки с использованием системы общего назначения, впрочем,
сверяться с уже существующей конфигурацией куда как легче. Так,
для настройки interfaces(5) (предполагая, что корневая ФС
целевой системы подключена к /mnt), может подойти одна из
следующих команд:
# vim.tiny -- /mnt/etc/network/interfaces /etc/network/interfaces
# zile /mnt/etc/network/interfaces /etc/network/interfaces
Создание таблицы разделов
Пожалуй, один из наиболее ответственных этапов установки —
создание таблицы разделов и, возможно (или же, скорее, — крайне
желательно) настройка LVM на целевом носителе.
Автор предлагает следующую схему распределения пространства:
• использование таблицы разделов GPT — с одной стороны, это
позволяет избавится от некоторых «наследственных болезней» MBR
(в т. ч. использования лишенной в настоящее время смысла
CHS-адресации, и необходимости т. н. «extended»-разделов), а
также, потенциально, получить возможность создания до по
меньшей мере 128 разделов (разумеется, с поправкой на то, что
Linux поддерживает не более 15); с другой, использование GPT
необходимо для загрузки системы некоторыми из современных
BIOS, а также для систем, использующих вместо последнего UEFI
(особенности установки для последнего случая, впрочем, не
рассматриваются в настоящей редакции данного материала);
• порядка 1 MiB выделяется под раздел «BIOS GRUB» — в котором
хранится основная часть загрузчика GRUB; (при использовании
MBR, для этого используется следующая непосредственно за MBR
часть нулевого цилиндра, не доступная для распределения);
• (1% ÷ 5% от общей емкости носителя (но, пожалуй, в пределах
1 GiB ÷ 16 GiB), отводится под swap-раздел; такой раздел
является своеобразной «страховкой» на случай, если некие
процессы, по какой-либо причине, захотят «присвоить» себе
значительные объемы виртуальной памяти — необходимость
обращения к swap замедлит процесс выделения памяти и,
возможно, даст администратору время для принятия решительных
мер; (к сожалению, эвристика OOM Killer изредка дает сбои;
автор припоминает случай, когда оный попытался досрочно
завершить init-процесс — с очевидными последствиями);
• порядка 192 MiB ÷ 512 MiB отводится под отдельный /boot — тем
самым, сохраняется возможность переустановки загрузчика (GRUB)
даже при отсутствии доступа к LVM (e. g., с использованием
системы, отличной от GNU/Linux); для такого раздела можно, при
желании, использовать даже «упрощенную» ФС, такую, как, e. g.,
FAT32;
• некоторый объем, от порядка 512 MiB, выделяется как
«стратегический резерв» — создается неиспользуемый раздел, или
же это пространство не распределяется вовсе; такой резерв
может быть использован, e. g., если совершенно необходимо
создать отдельную ФС, но LVM использовать по каким-то причинам
нельзя (e. g., по причине сбоя LVM — для сбора на эту ФС
критической информации о состоянии LVM), или же для создания
временного физического тома LVM при заполненности основных (до
переноса данных, или удаления более ненужных), etc.;
• оставшееся пространство распределяется между двумя или более
физическими томами LVM; использование двух томов позволит, при
необходимости, выполнить «дефрагментацию» логических томов
через pvmove(8); (использование этой возможности для переноса
данных в пределах одного тома не допускается.)
NB: дальнейшие действия предполагают инициализацию служебных
областей некоторого носителя информации (НЖМД, ТТН, etc.)
Следует быть предельно внимательным, чтобы выполнить команды
в отношении нужного носителя, а не, к примеру, носителя, на
котором размещается основная система. Выяснить имена
/dev-файлов, соответствующих носителю (или носителям),
используемым основной системой, можно, в частности,
следующими командами:
# pvs
# parted /dev/sdQ unit mib print
$ cat -- /proc/mounts /proc/swaps
Ясно, что эти имена ни в коем случае не должны появится в
командах, подобных приводимым ниже.
Предлагаемую разметку можно реализовать подобно (предполагая
емкость целевого носителя порядка 500 GB и «чистую» таблицу
разделов GPT; команду # parted DEV unit mib print mklabel gpt
выполнить по-необходимости):
# parted /dev/sdX \
unit mib \
mkpart biosgrub 0% 1M set 1 bios_grub on \
mkpart boot 1M 512M \
mkpart swap 512M 11G set 3 swap on \
mkpart res-1 11G 16G \
mkpart small-1 16G 32G \
mkpart medium-1 32G 64G \
mkpart large-2 64G 128G \
mkpart large-3 128G 192G \
mkpart large-4 192G 256G \
mkpart large-5 256G 320G \
mkpart large-6 320G 384G \
mkpart medium-12 384G 416G \
mkpart medium-13 416G 448G \
mkpart tail 448G 100%
(Ясно, что параметры parted(8), подобные приведенным выше, можно
сформировать и тривиальным Shell-кодом.)
Проверить корректность созданной таблицы разделов можно
используя # parted /dev/sdX unit mib print (или же, как вариант,
unit s print — чтобы удостоверится, что границы разделов
выровнены по размеру физического блока носителя — 8 «секторов»
для НЖМД, 2097152 для ТТН, etc.)
На этом этапе также можно инициализировать swap-раздел и ФС
/boot, e. g.:
# mkswap /dev/sdX3
# mke2fs -j -- /dev/sdX2
Далее, чтобы избежать привязки к конкретному имени файла
раздела, несущего swap и ФС /boot, извлечем их UUID:
# blkid -- /dev/sdX[23]
/dev/sdX2: UUID="7bfad579-8e0f-4ef7-bc58-fad76f5fc83d" SEC_TYPE="ext2" TYPE="ext3"
/dev/sdX3: UUID="d66d7d66-4382-4019-b420-1c47c29f7263" TYPE="swap"
#
Данные идентификаторы подходят как для «явного» использования в
команде # mount -U (# swapon -U), так и для fstab(5). Отметим,
однако, что при создании копии ФС на уровне образа (e. g.,
dd(1), # cp -- /dev/sdX2 /dev/sdYY, etc.) UUID сохраняется и для
различения ФС (исходной и ее копии) крайне желательно его
переназначить после копирования, e. g.:
# tune2fs -U random -- /dev/sdYY
--
FSF associate member #7257