Устанавливаем Debian sid на внешний HDD, эпизод первый

prolinux

Опубликован:  2023-07-07T11:19:07.494166Z
Отредактирован:  2023-07-07T11:19:07.494166Z
Статус:  публичный
178
0
0

Привет, Интернет... У меня очередной лайфхак, рубрика "Дистрохоперам на заметку". В этой демонстрации я покажу установку базовой системы Debian sid на внешний HDD, подключенный к компьютеру в USB-порт и расскажу, зачем это надо, как подготовиться к решению задачи и конечно же сам процесс установки. Задача не сложная, и каждый желающий, даже новичок, при желании может повторить этот перформанс на своём компьютере, ничего при этом не сломав, необходимо только точно следовать инструкциям. Будет интересно...

Почему Debian sid

Debian sid - это нестабильная ветка популярной операционной системы, с помощью которой сообщество Debian в течение двух лет разрабатывает новый, очередной, стабильный выпуск. В сути, Debian sid можно считать полноценным rolling release, почти как Arch, но с некоторыми строгими ограничениями в политике безопасности и с самым обширным, официально поддерживаемым сообществом хранилищем пакетов свободных программ.

Когда нам нужен Debian sid? Примеров можно привести много.

Если у нас новый с иголочки компьютер, и его hardware не поддерживается ядром текущего стабильного выпуска (bookworm), есть шанс, что нам повезёт, и в Debian sid эта поддержка окажется уже или в ближайшее время.

Если нам нужно с нуля разработать какую-то программу, будь то оконное приложение или web, выгодней всего разрабатывать её на Debian sid, в нём самые свежие версии программ и библиотек, которые обязательно понадобятся для работы над проектом.

Это всего лишь пара примеров из моей повседневной практики, именно эти обстоятельства заставили меня в своё время перейти со стабильного выпуска Debian на sid.

Почему на внешний HDD

С внешнего HDD можно загрузить любой компьютер. С внешнего HDD удобней всего перенести уже готовую операционную систему на любой компьютер, несколько компьютеров. С внешнего HDD удобней всего создать iso-образ живой операционной системы и перенести его на флешку, это я тоже покажу чуть позже в этом блоге. Ну и наконец, с внешнего HDD можно работать на виртуальной машине и все показанные здесь действия выполнять на виртуальной машине, имея в распоряжении удобную и хорошо настроенную операционную систему хост-машины.

Кроме этого, процесс установки операционной системы на внешний HDD и его методология будут качественно сильно отличаться, и во многих ситуациях так поступать удобней, чем использовать традиционную установку на стационарный диск из дистрибутива.

Показанный в этой и нескольких последующих демонстрациях способ установки операционной системы имеет максимально возможную кастомизацию, то есть оператор может выбирать программное обеспечение и настройки самостоятельно уже в процессе установки, а не после... Более того, так можно установить и стабильный выпуск Debian, отличия в процессе будут минимальны.

В рамках этой демонстрации я установлю только базовую систему, а в последующих выпусках блога я покажу, как эту систему довести на приемлемых кондиций и перенести на десктоп или "живую" флешку. Рекомендую следить за обновлениями блога.

Что нужно для реализации процесса

Для реализации задуманного мне потребуется:

  1. Внешний HDD, который можно подключить в USB-разъём компьютера;

  2. Компьютер с установленной и настроенной deb-совместимой операционной системой и безлимитное по трафику и времени подключение к Интернет;

  3. Терминал, чуточку внимания, прямые руки и способность вводить в терминале команды без ошибок и опечаток.

Если в хозяйстве отсутствует компьютер с deb-совместимой операционной системой, можно использовать любой LiveCD, подойдут Ubuntu, LinuxMint, MXLinux и, конечно же, папаша Debian. При этом всю установку операционной системы можно выполнить на виртуальной машине VirtualBox под управлением любой другой операционной системы, нужно будет только правильно подключить внешний HDD к ней.

Особенности процесса на LiveCD

Чем удобны deb-совместимые LiveCD?

У них у всех есть одна характерная особенность, их официальные хранилища пакетов частично являются копией хранилища пакетов Debian. Для реализации задуманного лучше всего выбирать iso самой последней текущей версии выбранного дистрибутива.

Конечно же, все описанные действия, кроме одного, можно с лёгкостью повторить и на SimpyLinux, например, но при этом встаёт один единственный вопрос... Как туда затащить debootstrap?

Если же мы используем LiveCD deb-совместимой системы, например LinuxMint, как показано на снимке экрана далее, то установить debootstrap можно очень просто даже в сессии LiveCD. Достаточно обновить базу данных apt.

sudo apt update

И в след за этим установить debootstrap из официальной репы дистрибутива, которая уже подключена в сессии LiveCD.

sudo apt install debootstrap

R53rDWMPzK.png

И всё, можно приступать...

Готовим внешний HDD

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

Готовим окружение

В рамках этой демонстрации я буду работать на компьютере с Debian на борту, в системе уже установлен debootstrap. Мне необходим терминал и VirtualBox. Начнём с терминала.

Подключаю внешний HDD в USB разъём компьютера, запускаю терминал и смотрю на выхлоп команды lsblk.

G6ZpvlkduT.png

Как видно на снимке экрана выше, мой HDD определился в системе как sdb, на диске есть два раздела, sdb1 и sdb2, оба раздела на текущий момент не имеют точки монтирования. На раздел sdb1 я и буду устанавливать базовую систему Debian sid. Удобно сразу получить права суперпользователя.

$ sudo -i
root@desktop:~#

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

Получаем файлы базовой системы

Монтирую раздел sdb1 внешнего HDD.

# mount /dev/sdb1 /mnt

С помощью debootstrap, который уже установлен в операционной системе моего компьютера, получаю из официального зеркала файлы базовой системы Debian sid.

# debootstrap --arch amd64 sid /mnt http://ftp.ru.debian.org/debian/
I: Target architecture can be executed
I: Retrieving InRelease 
I: Checking Release signature
I: Valid Release signature (key id 4CB50190207B4758A3F73A796ED0E7B82643E131)
I: Retrieving Packages 
I: Validating Packages 
I: Resolving dependencies of required packages...

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

I: Configuring ifupdown...
I: Configuring tasksel...
I: Configuring tasksel-data...
I: Configuring libc-bin...
I: Base system installed successfully.

Если по окончании этого действия посмотреть на содержимое каталога /mnt, можно увидеть все базовые каталоги будущей операционной системы.

Меняем окружение

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

# mount --bind /dev /mnt/dev
# mount --bind /proc /mnt/proc
# mount --bind /sys /mnt/sys
# mount --bind /dev/pts /mnt/dev/pts

При выполнении этих команд не должно возникнуть никаких ошибок или сбоев, в каталоге /mnt уже присутствуют указанные в командах точки монтирования. Если так, то можно сменить окружение.

# LANG=C.UTF-8 chroot /mnt /bin/bash

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

WVr1aAhXfN.png

Мы в новом окружении, и теперь имеем возможность исполнить программы нового окружения с внешнего HDD.

Настраиваем пакетный менеджер apt

Базовая система уже имеет в своём составе пакетный менеджер apt и текстовый редактор Nano. И теперь мне предстоит отредактировать sources.list только что установленной базовой системы, открываю файл в текстовом редакторе.

# nano /etc/apt/sources.list

В присутствующую в нём единственную строчку дописываю все ветки официального хранилища.

deb http://ftp.ru.debian.org/debian/ sid main contrib non-free non-free-firmware

Вот как выглядит "окно" редактора в моём терминале после сохранения изменений в файл (ctrl+o).

X1AnzYADSN.png

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

# apt update
Hit:1 http://ftp.ru.debian.org/debian sid InRelease
Get:2 http://ftp.ru.debian.org/debian sid/main Translation-en [6998 kB]
Get:3 http://ftp.ru.debian.org/debian sid/contrib amd64 Packages [63.0 kB]
Get:4 http://ftp.ru.debian.org/debian sid/contrib Translation-en [54.9 kB]
Get:5 http://ftp.ru.debian.org/debian sid/non-free amd64 Packages [123 kB]
Get:6 http://ftp.ru.debian.org/debian sid/non-free Translation-en [84.2 kB]
Get:7 http://ftp.ru.debian.org/debian sid/non-free-firmware amd64 Packages [6252 B]
Get:8 http://ftp.ru.debian.org/debian sid/non-free-firmware Translation-en [24.4 kB]
Fetched 7354 kB in 6s (1327 kB/s)                                 
Reading package lists... Done
Building dependency tree... Done
All packages are up to date.

Как видно из выхлопа крайней команды, обновление базы данных запрошено с официального зеркала Debian sid. Никаких ошибок или предупреждений выхлоп не содержит.

Настраиваем fstab

Чтобы впоследствии загрузить полученную в результате выполнения всех этих действий базовую систему с внешнего HDD, необходимо отредактировать пустой на текущий момент файл fstab. Для этого мне необходим идентификатор раздела sdb1, получить его можно с помощью программы blkid.

# blkid /dev/sdb1
/dev/sdb1: LABEL="rootfs" UUID="9ed67655-eed9-4545-94e9-5e19349d7116" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="32c2c56e-01"

Открываю файл fstab в текстовом редакторе Nano.

# nano /etc/fstab

Вписываю в этот файл пару строчек, первая для корневого раздела, вторая для CD/DVD привода, который есть на всех моих компьютерах, куда впоследствии я эту операционную систему перенесу.

UUID=9ed67655-eed9-4545-94e9-5e19349d7116 / ext4 errors=remount-ro 0 1
/dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0

Здесь следует обратить внимание, что в этот файл я вписал UUID из выхлопа blkid, предварительно скопировав его в буфер обмена, современные графические эмуляторы терминала поддерживают буфер обмена. Сохраняю изменения в файл и покидаю текстовый редактор.

Устанавливаем ядро и базовый загрузчик

Базовая система не содержит ядра, его нужно установить, вместе с ядром я установлю ещё и базовый загрузчик GRUB. Вот такой командой.

# apt install -y linux-image-amd64 grub-pc dbus

При выполнении этой команды в терминале появится следующий выхлоп.

Reading package lists... Done
Building dependency tree... Done
The following additional packages will be installed:
  apparmor busybox dbus-bin dbus-daemon dbus-session-bus-common
  dbus-system-bus-common firmware-linux-free gettext-base grub-common
  grub-pc-bin grub2-common initramfs-tools initramfs-tools-core klibc-utils
  libbrotli1 libdbus-1-3 libefiboot1 libefivar1 libexpat1 libfreetype6
  libfuse2 libklibc libpng16-16 linux-base linux-image-6.3.0-2-amd64 os-prober
  ucf zstd
Suggested packages:
  apparmor-profiles-extra apparmor-utils default-dbus-session-bus
  | dbus-session-bus multiboot-doc grub-emu mtools xorriso desktop-base
  console-setup bash-completion fuse linux-doc-6.3 debian-kernel-handbook
The following NEW packages will be installed:
  apparmor busybox dbus dbus-bin dbus-daemon dbus-session-bus-common
  dbus-system-bus-common firmware-linux-free gettext-base grub-common grub-pc
  grub-pc-bin grub2-common initramfs-tools initramfs-tools-core klibc-utils
  libbrotli1 libdbus-1-3 libefiboot1 libefivar1 libexpat1 libfreetype6
  libfuse2 libklibc libpng16-16 linux-base linux-image-6.3.0-2-amd64
  linux-image-amd64 os-prober ucf zstd
0 upgraded, 31 newly installed, 0 to remove and 0 not upgraded.
Need to get 83.4 MB of archives.
After this operation, 501 MB of additional disk space will be used.

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

Настраиваем базовый загрузчик

На этом HDD будет установлена единственная операционная система, и мне совсем не нужно видеть на старте меню базового загрузчика со списком вариантов загрузки, поэтому я отключу эту опцию. Открываю в Nano следующий файл.

# nano /etc/default/grub

В нем редактирую единственную строчку, как показано на следующем снимке экрана.

jOOGLERQto.png

Опять сохраняю изменения в файл и покидаю текстовый редактор. Устанавливаю базовый загрузчик в MBR внешнего HDD.

# grub-install /dev/sdb
Installing for i386-pc platform.
Installation finished. No error reported.

Осталось обновить загрузчик в соответствии с файлом конфигурации, который я только что отредактировал в Nano.

# update-grub
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-6.3.0-2-amd64
Found initrd image: /boot/initrd.img-6.3.0-2-amd64
Warning: os-prober will not be executed to detect other bootable partitions.
Systems on them will not be added to the GRUB boot configuration.
Check GRUB_DISABLE_OS_PROBER documentation entry.
done

При выполнении двух крайних команд никаких ошибок не произошло, отрадно.

Задаём пароль root

По последней моде не принято задавать пароль пользователю root, но в только что установленной базовой системе пока нет других пользователей, поэтому задаю единственному на текущий момент системному пользователю пароль.

# passwd root
New password: 
Retype new password: 
passwd: password updated successfully

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

Покидаем окружение

Базовая операционная система Debian sid установлена и готова к использованию, можно отключить все ранее смонтированные временные файловые системы, выполнив последовательно следующие четыре команды.

# umount /dev/pts
# umount /sys
# umount /proc
# umount /dev

Покидаю окружение.

# exit
exit

Отключаю смонтированный раздел внешнего жесткого диска.

# umount /mnt

Терминал можно закрыть, он больше не потребуется, но извлекать устройство из разъёма ещё рано.

Тестируем полученную систему в виртуальной машине

Внешний HDD, куда я установил Debian sid подключен к виртуальной машине VirtualBox, и теперь я могу не перезагружая свой компьютер протестировать установленную на нём базовую систему. Для этого в настройках виртуальной машины отключаю все другие накопители, оставляю только внешний HDD.

pedCP25nF0.png

Включаю виртуальную машину. На старте вижу начальное приветствие GRUB.

y0yrbJlf4X.png

А через некоторое время оказываюсь перед приглашением ввести login. Захожу суперпользователем.

y02Szcw3Rk.png

Цель демонстрации полностью достигнута, и на внешнем HDD теперь есть базовая система Debian sid, которую вполне можно загрузить с него на любом компьютере, поддерживающем загрузку с USB-накопителей, при этом все действия я выполнил ни разу не перезагрузив свой рабочий компьютер, и в процессе выполнения всех описанных действий я мог пользоваться браузером и наследием современных поисковиков, очень удобно.

Продолжение следует

Увы, полученная операционная система пока имеет только интерфейс командной строки, и ничего, кроме базовых системных утилит, в ней нет. В следующих выпусках этого блога я покажу полную настройку этой операционной системы и установку всех необходимых современному компьютеру пользовательских программ. Продолжение следует...