1) Ответ на три строки
Чтобы использовать мои готовые изображения / скомпилированную версию qemu, загрузите ее отсюда , а затем распакуйте:
tar -xvzf qemu_packed.tar.gz
Вы также можете скачать мое изображение Debian 8 (1.6G) отсюда :
tar -xvzf test01.qcow2.tar.gz
и, наконец, запустить
./command.sh
У вас должен быть работающий Debian 8, в текстовом режиме, с открытым портом ssh в гостевой системе на порту 22222. Вы можете войти, используя пользователя «root» и пароль «root».
2) Более длинный ответ, сделайте эти изображения самостоятельно
QEMU - это действительно решение, которое позволяет мне устанавливать мой собственный образ linux на сервер, на котором у меня нет прав root. Это очень полезно, я использую его, например, для обратного ssh без раскрытия моего основного пароля пользователя или для образовательных целей. Но на самом деле, поскольку вы не можете использовать KVM для реальной виртуализации без учетной записи root, вы сможете выполнять только эмуляцию, которая может быть довольно неэффективной (но для операций из командной строки я никогда не видел издержек).
2.1) Пакет qemu
Вот описание того, как я продолжаю. Первый шаг - сделать qemu «переносимым», то есть используемым на сервере без корневого доступа. Для этого у вас есть несколько методов, я постараюсь представить их, чтобы вы могли выбрать тот, который вы предпочитаете.
2.1.a) Метод 1: скачать доступный .deb
Это решение может быть очень быстро применено (в основном, если оно работает, в 1 команде вы получаете его), но поскольку мой скрипт может содержать ошибки / может забыть некоторую библиотеку, может быть довольно долго загружать все двоичные файлы вручную ... Другое преимущество этого метода заключается в том, что вы можете запустить его в режиме без полномочий root прямо на сервере. Идея получить двоичные файлы qemu заключается в том, чтобы получить файл .deb / .rpm (из apt или с веб-сайтов, на которых размещен .deb), извлечь его, проверить с помощью зависимостей библиотек ldd
и загрузить все .deb
зависимости, которые отсутствует на компьютере для их извлечения ( .so
файлы). Поскольку он может быть довольно длинным и повторяющимся, я создал небольшой сценарий, но если вы смелы, вы можете сделать все это вручную ... Это займет время. Чтобы использовать его, сохраните этот скрипт в файлcreate_qemu_binaries.sh
:
#!/usr/bin/env bash
mkdir qemu_extract
cd qemu_extract
echo "########## Downloading qemu... ##########"
apt-get download qemu-system-x86
echo "########## Extracting qemu... ##########"
dpkg -x qemu-system-*.deb .
mkdir -p qemu_packed/lib
cp usr/bin/qemu-system-x86_64 qemu_packed
echo "########## Copy libs... ##########"
ldd usr/bin/qemu-system-x86_64 | grep "=>" | grep -v "not found" | awk '{print "cp "$3" qemu_packed/lib/"}' | bash
mkdir not_found
cd not_found
echo "########## Get not found libs... ##########"
ldd ../usr/bin/qemu-system-x86_64 | grep "not found" | awk '{print $1}' > not_found.txt
echo "########## Download not found libs... ##########"
for lib in $(cat not_found.txt); do echo "=== Dealing with $lib ==="; apt-file search --regexp "/${lib}\$" | sed 's/:.*//' | xargs apt-get download; done
echo "########## Extracting not found libs... ##########"
ls *.deb | xargs -I{} dpkg -x "{}" .
echo "########## Copying not found libs... ##########"
find . | grep ".so" | xargs -I{} cp "{}" ../qemu_packed/lib
cd ..
echo "########## Getting pc-bios... ##########"
git clone https://github.com/qemu/qemu.git
cp -r qemu/pc-bios qemu_packed
echo "########## Finished !!! ##########"
echo "The output file should be in the folder qemu_extract/qemu_packed."
echo "Once you have a filesystem image, you can run it using:"
echo "$ LD_LIBRARY_PATH=$(pwd)/lib ./qemu-system-x86_64 -L pc-bios -no-kvm -m 256 -drive if=virtio,file=<your image>.qcow2,cache=none -display curses -k fr -redir tcp:22222::22"
echo "Don't forget to replace <your image>"
и запустите его, используя:
chmod +x create_qemu_binaries.sh
./create_qemu_binaries.sh
все работает нормально, в конце вы должны иметь в папке ./qemu_extract/qemu_packed/
один файл qemu-system-x86_64
(основной бинарный файл), одну папку lib
(библиотеки, которые нужно взять с собой qemu
) и одну папку pc-bios
, набор файлов, которые qemu
необходимо запустить. Затем вы можете запустить qemu
с помощью (не забудьте заменить на образ вашей файловой системы):
$ LD_LIBRARY_PATH=$(pwd)/lib ./qemu-system-x86_64 -L pc-bios -no-kvm -m 256 -drive if=virtio,file=<your image>.qcow2,cache=none -redir tcp:22222::22
Наслаждайтесь ! (если сценарий не работает для вас, не стесняйтесь спрашивать меня, я протестировал его только на двух компьютерах и redir
могу удалить, если вам не нужна пересылка ssh между хостом и предположением)
2.1.b) Способ 2: если вы получаете доступ к компьютеру с root-доступом
Первому способу нужен компьютер с root-доступом (или qemu
установлен). Сначала установите qemu
что-то вроде
sudo apt install qemu-system-x86
а затем найдите абсолютный путь к QEMU:
$ which qemu-system-x86_64
/usr/bin/qemu-system-x86_64
Затем создайте папку для ее размещения:
mkdir -p qemu_packed/lib
cd qemu_packed
cp /usr/bin/qemu-system-x86_64 qemu_packed
и получите список библиотек, связанных с qemu:
ldd qemu_packed/qemu-system-x86_64 | awk '{print "cp "$3" qemu_packed/lib"}' | bash
Теперь нам нужно использовать BIOS для qemu. Файлы доступны в вашей системе, но я не знаю, почему они находятся в разных папках, поэтому я думаю, что проще получить их из источников:
git clone https://github.com/qemu/qemu.git
cp -r qemu/pc-bios qemu_packed
cd qemu_packed
Теперь это должно работать, вы можете скопировать эти файлы на компьютер без полномочий root и просто запустить, qemu
используя следующую строку (не забудьте заменить изображение):
$ LD_LIBRARY_PATH=$(pwd)/lib ./qemu-system-x86_64 -L pc-bios -no-kvm -m 256 -drive if=virtio,file=<your image>.qcow2,cache=none
2.1.c) Метод 3: из источников
Вы также можете скомпилировать исходники, но если у вас не установлены все библиотеки, может быть сложно избежать использования корневого компьютера для компиляции qemu. Но я думаю, что это немного более надежно, если вышеупомянутые два метода не работают. Затем, после его компиляции, получите исполняемый файл и проделайте тот же трюк, что и выше, чтобы получить библиотеки (используя ldd
все библиотеки должны быть уже на компьютере) и файл pc-bios. И снова, запустите его с той же командой.
2.3) Создайте свой собственный образ
Если вы не хотите использовать готовый образ файловой системы, просто следуйте многочисленным учебникам, используя приведенные выше команды вместо qemu/qemu-system-x86_64
! Примечание: если вы также хотите использовать qemu-img
для создания изображений без полномочий root, выполните тот же процесс, что и выше!
Наслаждайтесь !
NB: если вы хотите использовать отображение curses для запуска его на сервере без графического интерфейса, вы должны добавить в свой образ строку в параметре загрузки, чтобы он не включал буфер кадров в /etc/default/grub
:
GRUB_CMDLINE_LINUX_DEFAULT="vga=normal nofb nomodeset bochs_drm.fbdev=off"
(самое важное - последнее, я не уверен, нужно ли это). Также как и
GRUB_TERMINAL=console
GRUB_GFXPAYLOAD_LINUX=text
так, чтобы grub оставался в текстовом режиме. Вы также можете включить текстовый режим в systemd, если этого недостаточно.