Установка Apline Linux в QEMU

  • Последнее обновление

Предисловие

В этом туториале я описываю установку Alpine Linux в двух вариантах: в чистом QEMU из-под Asahi Linux и внутри оболочки UTM из-под macos. UTM под капотом использует всё тот же QEMU, но эта оболочка более дружелюбна к пользователю и является предпочтительным способом эмуляции в macos.

Подготовка эмулятора

Предже чем мы окунёмся в чудесный мир настройки Alpine Linux, нужно определиться, где у нас будут лежать файлы виртуальной машины. Я люблю, когда всё организовано и не воляется как попало. Для утилит разработки я использую директорию ~/Developer/Tools:

mkdir -p ~/Developer/Tools/
cd ~/Developer/Tools/

Теперь нужно скачать свежую версию дистрибутива Alpine Linux, на момент написания этого поста 3.19.1:

curl -O https://dl-cdn.alpinelinux.org/alpine/v3.19/releases/x86_64/alpine-virt-3.19.1-x86_64.iso

QEMU (linux/macos)

qemu-img create -f qcow2 alpine.qcow2 32G
qemu-system-x86_64 -smp 4 -m 4G -nic user -boot d \
    -cdrom alpine-virt-3.19.1-x86_64.iso -hda alpine.qcow2 \
    -display gtk

В первой строке этого скрипта создаётся образ виртуальной машины, куда будет устанавливаться ОС. Рекомендую задать размер не менее 32 ГБ (аргумент 32G), т.к. Platform SDK занимает довольно много места, и если захочется собирать билды под другие версии ОС, то может понадобиться параллельная установка нескольких версий PSDK — тогда и 32 ГБ может оказаться мало.

Во второй строке запускаем эмулятор x86_64 с 4 ядрами и 4 ГБ оперативной памяти. Если у вас мощный компьютер с большим количеством ядер, можно попробовать увеличить выделяемое на эмулятор число, но значительного ускорения времени компиляции ждать не стоит (хотя одного ядра будет мало). Требования к оперативной памяти у сборочной системы не большие, так что 4 ГБ вполне хватает. В любом случае, это настраиваемый параметр, который можно будет подобрать индивидуально. В качестве жесткого диска указываем наш образ, а в в CD-ROM вписываем путь до образа дистрибутива Alpine Linux.

Если вы используете QEMU на macos, то в последнем аргументе запуска -display gtk нужно вписать -display cocoa, иначе эмулятор выдаст ошибку.

UTM (только macos)

Интерфейс утилиты интуитивно понятен всем, кто хоть раз пользовался виртуальными машинами (VirtualBox, Parallels, VM Ware и т.п.) Нужно нажать на кнопку создания виртуальной машины и следовать инструкциям. iso-файл с установщиком Alpine Linux используем в качестве CD-ROM, главное не забыть его убрать из настроек после установки. Также на последнем шаге создания виртуалки нужно поставить галочку “Показать настройки виртуальной машины” – там нам нужно зайти на вкладку System и изменить количество ядер CPU, т.к. по-умолчанию будет только одно ядро.

Установка Alpine Linux

После запуска эмулятора появится приглашение авторизации. Вводим имя пользователя root и входим без пароля. Дальше выполняем команду:

setup-alpine

и следуем инструкциям инсталлятора. На вопросы о клавиатуре и раскладке лучше писать us, т.к. мы не будем особо пользоваться этой ОС и заморачиваться с настройкой раскладок и шрифтов нет большого смысла. Также будем считать, что был создан пользователь builder (это имя будет использоваться в дальнейших скриптах). Пароль тоже лучше задать, т.к. Linux не любит пользователей без пароля. Часто вводить его не придётся, но лучше не делать его слишком сложным, чтобы случайно не забыть.

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

QEMU

После установки закрываем окно QEMU и запускаем эмулятор уже без ISO-образа:

qemu-system-x86_64 -smp 4 -m 4G -hda alpine.qcow2 \
    -net nic -net user,hostfwd=tcp::2222-:22 \
    -daemonize

Как видите, в этой команде появилось несколько дополнительных аргументов:

  • -daemonize запускает QEMU в режиме демона, не захватывая терминал.
  • -net nic -net user,hostfwd=tcp::2222-:22 создаёт сетевой интерфейс и настраивает проброс порта 22 в 2222, чтобы избежать конфликта портов SSH.

UTM

Здесь всё гораздо проще: открываем настройки виртуальной машины и удаляем путь к iso-файлу из поля ввода CD-ROM. После этого запускаем виртуалку и убеждаемся, что всё работает.

Удалённый доступ к сборочной системе

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

ssh-keygen -f ~/.ssh/aurora
ssh-copy-id -i ~/.ssh/aurora -p 2222 builder@localhost

При создании ключа лучше оставить пасс-фразу пустой, чтобы скрипт не прерывался на ввод пасс-фразы. Этот ключ будет использоваться только в доверенной среде, так что за его ненадёжность можно не переживать. Перенаправление портов актуально только для QEMU, при использовании UTM доступ осуществляется через виртуальную сеть по имени системы, так что там конфликта портов не будет. Для ещё большего удобства можно добавить в .ssh/config конфигурацию нашего эмулятора:

Host aurora_builder
    HostName localhost  # localhost для QEMU и hostname сборочной системы для UTM 
    Port 2222           # Только если используется перенаправление портов QEMU
    User builder
    IdentityFile ~/.ssh/aurora

Теперь к виртуалке можно подключиться по SSH:

ssh aurora_builder

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

su
vi /etc/apk/repositories # раскомментировать community-репозиторий
apk update
apk add bash util-linux curl tar unzip bzip2 7zip sudo rsync
adduser username wheel
sudoedit /etc/sudoers    # раскомментировать разрешение для группы wheel, лучше сразу с флагом NOPASSWD
exit                     # выходим из суперпользователя

Важно не забыть установить sudo, т.к. без него PSDK не запустится. Просто сделать симлинк на doas не поможет, увы. Финальный штрих - настройка сервиса sshd, чтобы иметь возможность удалённой работы:

sudoedit /etc/ssh/sshd_config

В файле конфигурации вносим следующие изменения:

PubkeyAuthentication yes   # нужно раскомментировать эту строку
PasswordAuthentication no  # раскомментировать и заменить yes на no

Сохранить файл коонфигурации, выйти из редактора и перезапустить сервис:

sudo rc-service sshd restart

Можно попробовать отключиться от эмулятора и подключиться заново, чтобы убедиться, что SSH работает и никаких запросов пароля не происходит.

Дальше можно переходить к установке PSDK.