1) Odpowiedź trzech linii
Aby użyć moich wstępnie skompilowanych obrazów / skompilowanej wersji qemu, pobierz ją stąd , a następnie rozpakuj:
tar -xvzf qemu_packed.tar.gz
możesz również pobrać mój obraz debian 8 (1.6G) stąd :
tar -xvzf test01.qcow2.tar.gz
i wreszcie biegnij
./command.sh
Powinieneś mieć działającego Debiana 8, w trybie tekstowym, z portem ssh otwartym w gościu hosta na porcie 22222. Możesz zalogować się przy użyciu użytkownika „root” i hasła „root”.
2) Dłuższa odpowiedź, zrób te zdjęcia samodzielnie
QEMU jest rzeczywiście rozwiązaniem, które pozwala mi zainstalować własny obraz linuksowy na serwerze, na którym nie miałem dostępu do roota. Jest to bardzo przydatne, używam go na przykład do wykonania wstecznego ssh bez ujawnienia mojego głównego hasła użytkownika lub w celach edukacyjnych. Ale rzeczywiście, ponieważ nie można używać KVM do prawdziwej wirtualizacji bez konta root, będziesz mógł wykonywać tylko emulację, co może być dość nieefektywne (ale w przypadku operacji w wierszu poleceń nigdy tak naprawdę nie widziałem narzutu).
2.1) Opakowanie qemu
Oto opis tego, jak postępuję. Pierwszym krokiem jest uczynienie qemu „przenośnym”, tj. Użytecznym na serwerze bez dostępu do konta root. Aby to zrobić, masz kilka metod, postaram się je przedstawić, abyś mógł wybrać tę, którą wolisz.
2.1.a) Metoda 1: pobierz dostępny plik .deb
To rozwiązanie może być bardzo szybkie do zastosowania (w zasadzie, jeśli działa, wystarczy jedno polecenie), ale ponieważ mój skrypt może być wadliwy / może zapomnieć o lib, ręczne pobranie wszystkich plików binarnych może potrwać dość długo ... inną zaletą tej metody jest to, że można ją uruchomić w trybie innym niż root, bezpośrednio na serwerze. Pomysłem na uzyskanie plików binarnych qemu tutaj jest pobranie pliku .deb / .rpm (z apt lub ze stron internetowych, które obsługują .deb), wypakowanie go, sprawdzenie zależności bibliotek za pomocą ldd
i pobranie wszystkich .deb
zależności, które są jeszcze nieobecny na komputerze w celu wyodrębnienia ich ( .so
plików). Ponieważ może być dość długi i powtarzalny, stworzyłem mały skrypt, ale jeśli jesteś odważny, możesz to wszystko zrobić ręcznie ... To po prostu zajmuje trochę czasu. Aby go użyć, zapisz ten skrypt w plikucreate_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>"
i uruchom go za pomocą:
chmod +x create_qemu_binaries.sh
./create_qemu_binaries.sh
wszystko działa dobrze, na końcu powinieneś mieć w folderze ./qemu_extract/qemu_packed/
jeden plik qemu-system-x86_64
(główny plik binarny), jeden folder lib
(biblioteki, które trzeba zabrać qemu
) i jeden folder pc-bios
, zestaw plików, które qemu
należy uruchomić. Następnie możesz uruchomić qemu
, używając (nie zapomnij zastąpić obrazem systemu plików):
$ 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
Cieszyć się ! (jeśli skrypt nie działa dla Ciebie, nie wahaj się mnie zapytać, przetestowałem go tylko na dwóch komputerach i wypełnij go do usunięcia, redir
jeśli nie potrzebujesz przekazywania ssh między hostem a odgadnięciem)
2.1.b) Metoda 2: jeśli masz dostęp do komputera z dostępem roota
Pierwsza metoda wymaga komputera z dostępem do katalogu głównego (lub qemu
zainstalowanego). Najpierw zainstaluj qemu
za pomocą czegoś takiego
sudo apt install qemu-system-x86
a następnie zlokalizuj ścieżkę bezwzględną qemu:
$ which qemu-system-x86_64
/usr/bin/qemu-system-x86_64
Następnie utwórz folder, aby go umieścić:
mkdir -p qemu_packed/lib
cd qemu_packed
cp /usr/bin/qemu-system-x86_64 qemu_packed
i pobierz listę bibliotek powiązanych z qemu:
ldd qemu_packed/qemu-system-x86_64 | awk '{print "cp "$3" qemu_packed/lib"}' | bash
teraz musimy uzyskać użycie BIOS przez qemu. Pliki są dostępne w twoim systemie, ale nie wiem, dlaczego znajdują się w różnych folderach, więc myślę, że łatwiej jest uzyskać je ze źródeł:
git clone https://github.com/qemu/qemu.git
cp -r qemu/pc-bios qemu_packed
cd qemu_packed
Teraz powinno działać, możesz skopiować te pliki na maszynie innej niż root i po prostu uruchomić qemu
przy użyciu następującego wiersza (nie zapomnij zastąpić obrazu):
$ 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) Metoda 3: ze źródeł
Możesz także skompilować źródła, ale jeśli nie masz zainstalowanych wszystkich bibliotek, może być trudne uniknięcie korzystania z komputera zrootowanego do kompilacji qemu. Ale myślę, że jest to trochę bardziej niezawodne, jeśli powyższe dwie metody nie działają. Następnie po skompilowaniu pobierz plik wykonywalny i wykonaj tę samą sztuczkę, co powyżej, aby uzyskać biblioteki (używając ldd
, wszystkie biblioteki powinny już znajdować się na komputerze) i plik pc-bios. I ponownie uruchom go za pomocą tego samego polecenia.
2.3) Stwórz własny obraz
Jeśli nie chcesz używać gotowego obrazu systemu plików, postępuj zgodnie z licznymi samouczkami, używając powyższych poleceń zamiast qemu/qemu-system-x86_64
! Uwaga: jeśli chcesz również użyć qemu-img
do tworzenia obrazów jako użytkownik inny niż root, wykonaj ten sam proces, jak powyżej!
Cieszyć się !
Uwaga: jeśli chcesz użyć wyświetlania przekleństw, aby uruchomić go na serwerze bez graficznego interfejsu użytkownika, powinieneś dodać do swojego obrazu linię w opcji uruchamiania, aby nie włączała bufora ramek w /etc/default/grub
:
GRUB_CMDLINE_LINUX_DEFAULT="vga=normal nofb nomodeset bochs_drm.fbdev=off"
(najważniejszy jest ostatni, nie jestem pewien, czy jest potrzebny). Jak również
GRUB_TERMINAL=console
GRUB_GFXPAYLOAD_LINUX=text
dzięki czemu grub pozostanie w trybie tekstowym. Możesz także włączyć tryb tekstowy w systemie, jeśli to nie wystarczy.