Подготовка загрузочного образа
См. Часть 2
Введение
Клиент RDP — это программное обеспечение, которое позволяет подключиться к терминальному серверу с использованием протокола удалённого рабочего стола (Remote Desktop Protocol).
Технология RDP позволяет применять малопроизводительные компьютеры в качестве терминалов (так называемых тонких клиентов). Все необходимые функции, включая рабочую систему, офисные программы и современный браузер, будут выполняться на сервере.
В интернете есть различные программные продукты, реализующие RDP-клиент. Однако готовых решений, которые можно было бы установить на USB-накопитель, не так много. А те, что есть, имеют ряд ограничений в использовании.
Поэтому создадим свой легковесный образ на на основе Debian 12, используя проверенные пакеты. Готовый образ можно будет записать как на USB-флешку, так и на жесткий диск. А в перспективе такой образ можно будет загружать на тонкий клиент через сеть.
Постановка задачи
В наличии есть компьютеры, которые можно использовать в качестве тонкого клиента с типовыми характеристиками:
4 Гб оперативной памяти
BIOS с поддержкой UEFI
старый медленный жесткий диск или его отсутствие
Кроме того, в наличии есть USB-накопители объёмом 4 Гб.
Существует несколько способов создания загрузочной флешки.
В первом случае можно установить операционную систему Debian непосредственно на USB-накопитель и затем настроить её.
Второй способ предполагает создание образа диска, на который устанавливается и настраивается операционная система. Затем этот образ можно перенести на USB-накопитель.
Второй способ более удобен, так как работа с образом происходит быстрее, чем со старой флешкой. Кроме того, он позволяет быстро создавать резервные копии образа и при необходимости возвращаться к сохранённому образу.
Для работы с образом будет применяться виртуальная среда QEMU. В качестве файлового образа - формат qcow2
, который поддерживает сжатие.
План действий
Первая часть (подготовка загрузочного образа):
загрузить установочный образ Debian (iso);
создать образ виртуальной машины (qcow2);
установить систему;
установить базовые пакеты;
настроить систему;
записать образ на USB-носитель.
Вторая часть (графическое исполнение):
установить пакеты
настроить разрешения для учётной записи user
настроить графическую среду
создать скрипт для авторизации
настроить автозагрузку графической системы
записать образ на USB-носитель.
В статье приведены примеры консольных команд, которые необходимо выполнять в зависимости от задачи в хостовой или гостевой системе. Чтобы различать эти команды, перед ними будет отображаться приглашение:
$
— команды, выполняемые в хостовой системе.root>
— команды, выполняемые в гостевой системе от имени root.user>
— команды, выполняемые в гостевой системе от имени user.
Хостовая система — система, на которой запускаются виртуальные машины.
Гостевая система — система, которая работает внутри виртуальной машины.
Установочный образ Debian 12
На момент создания этой статьи для загрузки доступна версия Debian 12.11.0.
Для скачивания можно перейти на страницу загрузки: https://www.debian.org/download.
Прямая ссылка. Размер установочного образа - 670 Мб.
Файловый образ и виртуальная машина
1. Создание файлового образа
Для подготовки виртуального диска потребуется эмулятор QEMU. В современных версиях Debian его можно установить командой:
$ sudo apt install qemu-system-x86
После установки QEMU создадим файловый образ виртуального диска объёмом 3 ГБ с использованием формата qcow2
:
$ qemu-img create -f qcow2 image.qcow2 3G
В результате будет создан файл image.qcow2
, размером 197 Кб.
2. Запуск виртуальной машины
Для запуска виртуальной машины используем следующую команду:
$ qemu-system-x86_64 \
-m 2048M \
-bios OVMF.fd \
-drive file=image.qcow2
Разберём ключевые параметры:
-m 2048M
— выделяет виртуальной машине 2 ГБ оперативной памяти.-bios OVMF.fd
— включает поддержку UEFI вместо устаревшего BIOS.OVMF.fd
это образ прошивки UEFI, поставляемый в составе пакета QEMU.
Он позволяет гостевой системе сохранять переменные NVRAM.-drive file=image.qcow2
— подключает ранее созданный образ виртуального диска. В этот диск будет установлена гостевая операционная система.
Результат:

3. Подготовка виртуальной машины к установке ОС
Чтобы начать установку гостевой операционной системы, необходимо расширить команду запуска QEMU, добавив параметры, обеспечивающие производительность и доступ к установочному носителю:
$ qemu-system-x86_64 \
-m 2048M \
-enable-kvm \
-cpu host \
-smp 2 \
-machine type=q35 \
-bios OVMF.fd \
-cdrom debian-12.11.0-amd64-netinst.iso \
-drive file=image.qcow2
Разберём новые параметры:
-enable-kvm
— активирует KVM (Kernel-based Virtual Machine), используя аппаратную поддержку виртуализации (Intel VT-x / AMD-V).
Без этого параметра QEMU будет работать в режиме программной эмуляции, что резко снижает производительность — установка может занять часы вместо нескольких минут.-cpu host
— настраивает виртуальный процессор так, чтобы он максимально соответствовал физическому CPU хоста. Это улучшает производительность за счёт использования всех доступных инструкций и оптимизаций.-smp 2
— задаёт использование двух ядер процессора. Это ускоряет выполнение многозадачных операций во время установки и дальнейшей работы системы.-machine type=q35
— использует модель виртуальной машины с набором чипсета Intel Q35. Она обеспечивает лучшую производительность и поддержку UEFI, PCIe и других современных технологий.
Важно: на некоторых системах этот тип может вызывать проблемы. Рекомендуется при первом запуске протестировать работу без этого параметра, а затем добавить его при успешной загрузке.-cdrom debian-12.11.0-amd64-netinst.iso
— подключает установочный ISO-образ Debian в качестве виртуального CD/DVD-привода.
Установка Debian 12 на виртуальной машине
После запуска виртуальной машины с подключённым ISO-образом Debian начнётся процесс установки. Чтобы получить минимального размера и легко в настраиваемую систему, важно правильно выбрать параметры на каждом этапе.
Ниже — ключевые шаги и рекомендации по настройке:
В меню установки вместо
Graphical install
выбратьInstall
.

Язык интерфейса:
Русский
.Раскладка клавиатуры:
Английская американская
.Выбрать любое имя компьютера, отличное от предлагаемого.
Например:rdp-client
илиusb-desktop
.Простой пароль для учётной записи
root
. Например: 123456. После настройки системы рекомендуется изменить его на более надёжный.Добавить пользователя
user
. Пароль: 123456.
Эта учётная запись будет использоваться в графическом режиме.Разметка дисков:
Вручную
.Укажите диск:
SCSI1 (0,0,0) (sda)
.Создайте новую пустую таблицу разделов (тип —
GPT
).

Создать два раздела:
системный раздел
EFI
, 50 Мбкорневой раздел,
ext4
, параметры монтирования:noatime
,nodiratime
,discard
Эти параметры оптимизируют файловую систему для SSD и USB-носителей.
Файловая системаext4
является достаточно быстрой и надёжной. Из альтернативных вариантов предлагаю файловую системуbrtfs
. Она позволяет в два-три раза ужать файлы в корневом разделе. Но для этого необходимо будет выполнить дополнительные действия.

Игнорируем создание раздела подкачки (
swap
). В системе на USB это не нужно.Выбираем репозиторий (зеркало архива Debian):
Российская федерация
>deb.debian.org
В окне выбора программного обеспечения снять все галочки. Это гарантирует минимальную установку системы. Все необходимые компоненты будут установлены вручную на следующих этапах.


По окончании установки и перезапуска виртуальной машины отобразится меню GRUB.
Размер файла image.qcow2
может увеличится до 3 Гб. Перед настройкой гостевой системы рекомендую создать архивную копию образа.
Установка необходимых пакетов в гостевую систему
После установки системы Debian 12 на виртуальный диск необходимо установить и настроить базовые компоненты. Это позволит подготовить её к удобной работе и установке графической системы.
1. Установка localepurge — экономия места за счёт локализаций
Многие пакеты при установке добавляют файлы локализации (переводы интерфейса), которые могут занимать десятки и более мегабайт. В нашем случае, когда важны компактность и производительность, эти файлы — избыточны.
Первым делом установите утилиту localepurge
, которая автоматически блокирует установку языковых файлов:
root> apt install -y localepurge
Во время установки появится диалог, предлагающий выбрать, какие локали оставить. Отметьте только необходимые:

en
en_US
en_US.UTF-8
ru
ru‑RU
ru‑RU.UTF-8
2. Установка Midnight Commander (mc)
Для удобной навигации по файловой системе и редактирования конфигурационных файлов установите Midnight Commander:
root> apt install -y mc
Запустить его можно командой:
root> mc

3. Установка SSH-сервера
Чтобы упростить взаимодействие с гостевой системой, установите SSH-сервер:
root> apt install -y ssh
По умолчанию SSH-доступ для пользователя root
запрещён. Чтобы разрешить вход, добавьте строку в файл конфигурации /etc/ssh/sshd_config
:
PermitRootLogin yes
На этом установка базовых пакетов закончена. Необходимо выключить гостевую систему чтобы настроить запуск виртуальной машины с новыми параметрами:
root> poweroff
Доступ к гостевой системе по SSH
Поскольку виртуальную машину предстоит запускать многократно в процессе настройки, удобно создать скрипт для автоматизации этого процесса:
#!/bin/bash
qemu-system-x86_64 \
-name "usb-debian" \
-m 2048M \
-enable-kvm \
-cpu host \
-smp 2 \
-machine type=q35 \
-bios OVMF.fd \
-net nic -net user,hostfwd=tcp::2222-:22 \
-drive file=image.qcow2 \
&
Пояснение новых параметров:
-name "usb-debian"
— задаёт имя окна QEMU, что упрощает идентификацию при работе с несколькими виртуальными машинами.-net nic -net user,hostfwd=tcp::2222-:22
— настраивает виртуальную сеть и пробрасывает порт 22 (SSH) гостевой системы на порт 2222 хоста. Это позволяет подключаться к гостю по SSH без необходимости настраивать сложные сетевые мосты.&
— запускает процесс в фоне, освобождая терминал для других команд. Необязательно, но удобно.
Чтобы скрипт был исполняемым не забываем добавить разрешение:
$ chmod +x myscript.sh
Подключение к гостевой системе по SSH
После загрузки гостевой ОС подключитесь к ней с хостовой системы через SSH:
$ ssh -p 2222 root@localhost
Если SSH-клиент не принимает сертификат с localhost, то удалите старый сертификат :
$ ssh-keygen -R '[localhost]:2222'
Рекомендуемые инструменты для работы
Для терминального доступа:
Отличным выбором станет Remmina — клиент удалённого доступа с поддержкой SSH, RDP, VNC и других протоколов. Он предоставляет графический интерфейс, вкладки, сохранение сессий и удобное управление.

Для файлового обмена (SFTP):
Midnight Commander или FAR Manager (far2l
)

Настройка гостевой системы
1. Удаление CD-ROM из источников пакетов
По умолчанию установщик добавляет CD-ROM как источник пакетов в файл /etc/apt/sources.list
За ненадобностью необходимо закомментировать или удалить строку:
# deb cdrom:[Debian GNU/Linux ...
После обновить список пакетов:
root> apt update
2. Отключение загрузочного меню GRUB
Чтобы убрать загрузочное меню GRUB и ускорить загрузку, в файле /etc/default/grub
необходимо установить переменную:
GRUB_TIMEOUT=0
Примените изменения:
root> update-grub
3. Удаление старых ядер Linux
После установки Debian оставляет два ядра — текущее и предыдущее. Cтарое ядро не нужно и занимает около 400 МБ на диске. Чтобы удалить все ядра, кроме текущего, выполните команду:
root> apt remove $(apt list --installed | sed 's/\/.*//' | grep linux-image | grep -v "$(uname -r)")
root> update-grub
Пояснение:
uname -r
— возвращает версию текущего активного ядра.apt list --installed | grep linux-image
— показывает все установленные образы ядер.grep -v "$(uname -r)"
— исключает текущее ядро из списка.sed 's/\/.*//'
— очищает вывод от версии и архитектуры, оставляя только имя пакета.Весь результат передаётся в
apt remove
для удаления.
4. Имя сетевого интерфейса
В современных системах Linux имена сетевых интерфейсов генерируются динамически на основе топологии оборудования. В результате на одной машине интерфейс может называться enp0s2
, на другой — ens18
. Данное поведение усложняет создание загрузочных образов с поддержкой сети, когда система должна работать на разных компьютерах. Чтобы избежать перенастраивания сети стоит вернуться к классическому именованию интерфейсов — eth0
.
Для этого необходимо изменить параметры загрузки ядра через GRUB. В файле /etc/default/grub
заменить строку:
GRUB_CMDLINE_LINUX=""
на
GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0"
Примените изменения:
root> update-grub
В файле конфигурации сетевого интерфейса/etc/network/interfaces
переименовать имя интерфейса на eth0
. Для этого необходимо заменить строки:
allow-hotplug enp0s2
iface enp0s2 inet dhcp
на
allow-hotplugin eth0
iface eth0 inet dhcp
Система настроена на получение настроек от DHCP-сервера. Для работы этого более, чем достаточно.
По умолчанию в QEMU не поддерживается ICMP-трафик (команда ping
) из гостевой системы наружу. Это не означает, что сеть не работает — ICMP-пакеты блокируются на уровне виртуализации. Для проверки доступности сетевых ресурсов лучше проверять порты, например, утилитой netcat
.
5. Временные папки: использование RAM-дисков
В процессе работы система использует временные каталоги, накапливая кэши, логи и промежуточные файлы. Со временем их объём может достигать нескольких сотен мегабайт.
Чтобы сократить использование дисковой системы и повысить производительность, перенесём временные каталоги в оперативную память с помощью виртуальной файловой системы tmpfs
.
В файле конфигурации точек монтирования /ets/fstab
необходимо добавить строки:
tmpfs /tmp tmpfs defaults,noatime,rw 0 0
tmpfs /run tmpfs defaults,noatime,rw 0 0
tmpfs /var/tmp tmpfs defaults,noatime,rw 0 0
tmpfs /var/lock tmpfs defaults,noatime,rw 0 0
tmpfs /var/log tmpfs defaults,noatime,rw 0 0
tmpfs /var/lib/apt/lists tmpfs defaults,noatime,rw 0 0
tmpfs /var/cache tmpfs defaults,noatime,rw 0 0
Так же в этом файле закомментируем строку монтирования CDROM, если она есть:
#/dev/sr0 /media/cdrom0 iso9660 ro,noauto 0 0
Перед тем как включить tmpfs
, необходимо удалить содержимое перечисленных каталогов, кроме папки /run
:
root> rm -rf /tmp/*
root> rm -rf /var/tmp/*
root> rm -rf /var/lock/*
root> rm -rf /var/log/*
root> rm -rf /var/lib/apt/lists/*
root> rm -rf /var/cache/*
Чтобы дополнительно сэкономить место, можно удалить ненужные языковые файлы в /usr/share/locale
: кроме каталога русской локализации ru
и системного файла сопоставления @locale.alias
.
Важно после очистки каталогов сразу перегрузить гостевую систему:
root> reboot
После перезагрузки указанные каталоги будут размещены в оперативной памяти. Это даёт несколько преимуществ:
Снижение износа USB-носителя
Ускорение операций ввода-вывода
Автоматическая очистка при перезагрузке
6. Настройка GRUB для загрузки с USB-носителя
При установке Debian размещает UEFI-загрузчик по пути /boot/efi/EFI/debian/grubx64.efi
и прописывает путь в NVRAM материнской платы. Поэтому такая конфигурация не гарантирует загрузку на других компьютерах. Так как BIOS по умолчанию ищет загрузчик по другому пути - /boot/efi/EFI/BOOT/BOOTX64.EFI
, операционная система с USB-флешки не запустится.
Для размещения UEFI-загрузчика по каноническому пути необходимо выполнить команду:
root> grub-install --target=x86_64-efi --removable
Настройка профиля root и автологина
1. Настройка приглашения командной строки
В конец файла конфигурации оболочки /root/.bashrc
добавить строку:
PS1='root> '
Теперь при каждом запуске терминала приглашение будет отображаться как:
root>
2. Автозапуск Midnight Commander
Чтобы сразу после входа в систему запускать файловый менеджер, настроим автозапуск, добавив в файл /root/.profile
перед последней строкой команду mc
. Должно получится что-то типа:
if [ "$BASH" ]; then
if [ -f /etc/bash.bashrc ]; then
. /etc/bash.bashrc
fi
fi
mc
mesg n 2> /dev/null || true
Теперь после входа в терминал автоматически запустится Midnight Commander. Для выхода из mc
нажмите F10
, и вы вернётесь в командную строку.
3. Автоматический вход в консоль (autologin для root)
Данный шаг не обязателен и приведён для примера.
Отредактируйте шаблон сервиса getty@.service
. В файле /usr/lib/systemd/system/getty@.service
необходимо заменить значение ExecStart. Старое лучше закомментировать. Оно нам ещё понадобится. Добавьте новую строку:
ExecStart=-/sbin/agetty -a root - $TERM
4. Применение изменений
После внесения правок перезагрузите систему:
root> reboot
После загрузки вы автоматически окажетесь в терминале под root
, с запущенным mc
и кратким приглашением командной строки.
Сжатие образа и подготовка к записи на USB
На этом этапе образ системы уже настроен, но занимает больше места, чем необходимо. Виртуальный диск в формате qcow2
динамически расширяется, но не "сжимается" автоматически — даже после удаления файлов свободное пространство остаётся забитым мусором, что мешает эффективному сжатию.
Чтобы уменьшить размер итогового образа, выполним обнуление свободного места, а затем — конвертацию с компрессией.
1. Анализ использования диска
Текущий размер файла image.qcow2
— 2742 МБ. Однако реальное использование файловой системы значительно меньше.
Проверим, сколько места занято в гостевой системе:
root> df -h -BM /dev/sda*
Результат:
Файловая система 1M-блоков Использовано Доступно Использовано% Смонтировано в
udev 956M 0M 956M 0% /dev
/dev/sda1 47M 12M 35M 26% /boot/efi
/dev/sda2 2903M 907M 1830M 34% /
Система использует всего 907 МБ. Под установку графической среды и RDP-клиента доступно 1,8 ГБ — более чем достаточно.
2. Обнуление свободного пространства
Перед сжатием необходимо заполнить нулями всё свободное место на диске. Это позволяет qcow2
эффективно сжать неиспользуемые блоки.
Выполните в гостевой системе:
root> dd if=/dev/zero of=/root/zero ; rm -f /root/zero ; shutdown -h now
Пояснение:
if=/dev/zero
— источник нулевых байтовof=/root/zero
— файл, который будет расти до заполнения дискаПосле завершения того когда закончится место файл удаляется и система выключается
3. Сжатие образа на хосте
После выключения виртуальной машины выполните на хосте:
$ qemu-img convert -p -O qcow2 -c image.qcow2 new.qcow2
Пояснение параметров:
-p
— отображение прогресса-O qcow2
— выходной формат-c
— включает сжатие (с помощью zlib)
И вернуть старое название файла:
$ mv new.qcow2 image.qcow2
Итоговый размер образа: всего 350 МБ — более чем в 7 раз меньше исходного.
Рекомендую сразу же сделать архивную копию образа.
4. Особенности для файловой системы Btrfs
Если вы используете btrfs
вместо ext4
, рекомендуется дополнительная оптимизация перед обнулением на стороне гостевой системе:
#!/bin/bash
# Дефрагментация файловой системы
btrfs filesystem defragment -r -v -czstd /
# Создание временной папки без сжатия
mkdir -p ~/temp
btrfs property set ~/temp compression none
# Заполнение нулями
dd if=/dev/zero of=~/temp/zero bs=4M
# Очистка
rm -f ~/temp/zero
shutdown -h now
Запись образа на USB-носитель
Теперь образ готов к записи на флешку.
Чтобы увидеть список подключённых устройств на хостовой машине выполнить:
$ sudo fdisk -l
В моём случае это /dev/sdb
.
Записать на флешку:
sudo qemu-img convert -p image.qcow2 -O raw /dev/sdb
Перед использованием на реальном оборудовании протестируйте загрузку с флешки в QEMU:
qemu-system-x86_64 \
-name "usb-debian" \
-m 2048M \
-enable-kvm \
-cpu host \
-smp 2 \
-machine type=q35 \
-bios OVMF.fd \
-drive file=/dev/sdb \
&
Если система загружается — значит, образ записан корректно.
Для тестирования на компьютере необходимо в BIOS выключить Secure Boot
(безопасная загрузка).
Итог
К настоящему моменту у нас есть:
Компактный образ image.qcow2 размером 350 МБ — готов к модификации и резервированию
Рабочий загрузочный USB-носитель с Debian 12, сетью и минимальной конфигурацией
Система с поддержкой установки пакетов из интернета
Во второй части руководства будет дана информация как установить графический режим, RDP-клиент и как средствами операционной системы организовать простое диалоговое окно для подключения к удалённому рабочему столу.