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 на сервер, на який у мене не було кореневого доступу. Це дуже корисно, я використовую його, наприклад, для того, щоб робити зворотну ssh, не розкриваючи основний пароль користувача, або з навчальною метою. Але дійсно, оскільки ви не можете використовувати KVM для реальної віртуалізації без кореневого облікового запису, ви зможете робити лише емуляцію, яка може бути досить неефективною (але для операцій з командним рядком я ніколи не бачив накладних витрат).
2.1) Пакет qemu
Ось опис того, як я дію. Перший крок - зробити qemu "портативною", тобто придатною для використання на сервері без кореневого доступу. Для цього у вас є кілька методів, я спробую представити їх, щоб ви могли вибрати той, який вам більше подобається.
2.1.a) Спосіб 1: завантажте доступний .deb
Це рішення може бути дуже швидким у застосуванні (в основному, якщо воно працює, за 1 команду ви його отримаєте), але оскільки мій скрипт може бути помилковим / може забути якусь вкладку, завантажувати всі бінарні файли можна досить довго ... Інша перевага цього методу полягає в тому, що ви можете запустити його в не кореневому режимі безпосередньо на сервері. Ідея отримати сюди бінарні файли 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: якщо ви маєте доступ до комп'ютера з кореневим доступом
Перший метод потребує комп’ютера з кореневим доступом (або 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
Тепер це повинно працювати, ви можете скопіювати ці файли на машині, що не працює кореневим, і просто запустіть 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, то виконайте той самий процес, що і вище!
Насолоджуйтесь!
Примітка: якщо ви хочете використовувати дисплей прокльонів для того, щоб запустити його на сервері без графічного інтерфейсу, слід додати у своє зображення рядок у варіанті завантаження, щоб він не включав буфер кадру у /etc/default/grub
:
GRUB_CMDLINE_LINUX_DEFAULT="vga=normal nofb nomodeset bochs_drm.fbdev=off"
(найважливіше - останнє, я не впевнений, чи потрібно). Так само, як
GRUB_TERMINAL=console
GRUB_GFXPAYLOAD_LINUX=text
щоб гріш залишався в текстовому режимі. Ви також можете увімкнути текстовий режим у systemd, якщо його недостатньо.