Search
Write a publication
Pull to refresh

Создаём образ RDP-клиента для запуска с USB-флешки (часть 1)

Level of difficultyMedium
Reading time12 min
Views4.1K

Подготовка загрузочного образа

См. Часть 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 и других протоколов. Он предоставляет графический интерфейс, вкладки, сохранение сессий и удобное управление.

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

Встроенный SFTP-доступ в MC
Встроенный SFTP-доступ в MC

Настройка гостевой системы

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.qcow22742 МБ. Однако реальное использование файловой системы значительно меньше.

Проверим, сколько места занято в гостевой системе:

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-клиент и как средствами операционной системы организовать простое диалоговое окно для подключения к удалённому рабочему столу.

Tags:
Hubs:
+9
Comments4

Articles