답변:
실제 가상화에는 CPU에 대한 저수준 액세스가 필요하므로 루트가 설치해야합니다. 일단 설치되면 루트가 아니어도 실행할 수 있습니다. 에뮬레이터를 보치와 같은 비 루트 또는 와인과 같은 어댑터로 설치하고 실행할 수 있습니다. 특정 Windows 앱을 염두에두고 있으면 와인 아래에서 실행할 수 있습니다.
들어 KVM , 장치에 액세스 할 수 있어야합니다 /dev/kvm
. 사용자가이 장치를 읽고 쓸 수 있으면 사용자로 KVM 기반 가상 머신을 실행할 수 있습니다.
대부분의 배포에서 kvm
그룹 구성원은 이 장치에 액세스 할 수 있으므로 사용자를 kvm
그룹에 추가하기 만하면됩니다 .
대부분의 다른 가속화 된 기술의 경우 커널 모듈을로드해야합니다 (virtualbox 및 VMWare 포함). 이를 위해서는 루트 수준의 액세스가 거의 필요합니다.
가속되지 않은 가상화 기술을 모든 사용자로 실행할 수 있습니다. 예를 들어, 비가 속 모드의 qemu 입니다. 가속화 된 가상화에 비해 속도가 매우 느릴 것입니다.
사용자 모드 Linux 는 루트 권한이 없어도 사용자 공간에서 완전히 실행되는 Linux 가상화 솔루션입니다.
그러나 Linux 호스트 내에서만 Linux 게스트를 실행할 수 있으므로 다른 것을 실행하려는 경우 적합하지 않습니다.
가상 머신은 효율적으로 프로세서 (및 기타 하드웨어)에 대한 저수준 액세스가 필요합니다. 따라서 루트가 아닌 것으로 설치할 수있는 성능이 우수한 VM 소프트웨어가 표시되지 않습니다.
경량 가상 머신의 경우 필요한 기능 만 포함하면 가벼움이 달성됩니다. 여기에는 실행될 OS에 대한 지식이 필요하므로 오픈 소스 경량 VM ( Plex86 , LilyVM )은 오픈 소스 운영 체제 만 지원합니다. 이 논리에 따르면 Microsoft Virtual PC가 VirtualBox / VMWare / etc보다 더 가벼울 수 있습니다. 그러나 나는 정말로 모른다. VirtualBox는 오픈 소스로 제공되며 매우 유용하며 항상 내 목적에 충분했습니다 (그러나 나는 다른 것을 시도했습니다).
사전 빌드 된 이미지 / 컴파일 된 qemu 버전을 사용하려면 여기 에서 다운로드 한 후 압축을 해제하십시오.
tar -xvzf qemu_packed.tar.gz
여기 에서 내 데비안 8 이미지 (1.6G)를 다운로드 할 수도 있습니다 .
tar -xvzf test01.qcow2.tar.gz
그리고 마지막으로 실행
./command.sh
호스트 모드에서 포트 22222의 ssh 포트가 열려있는 텍스트 모드에서 작동중인 Debian 8이 있어야합니다. "root"사용자와 "root"비밀번호를 사용하여 로그인 할 수 있습니다.
QEMU는 실제로 루트 액세스 권한이없는 서버에 자체 Linux 이미지를 설치할 수있는 솔루션입니다. 그것은 매우 유용합니다. 예를 들어 기본 사용자 비밀번호를 밝히지 않고 교육 목적으로 역 ssh를 수행하는 데 사용합니다. 그러나 실제로는 루트 계정이없는 실제 가상화에 KVM을 사용할 수 없기 때문에 에뮬레이션 만 수행 할 수 있으며 이는 매우 비효율적 일 수 있습니다 (그러나 명령 행 작업의 경우 실제로 오버 헤드를 보지 못했습니다).
qemu
다음은 진행 방법에 대한 설명입니다. 첫 번째 단계는 qemu를 "휴대용"으로 만드는 것입니다. 즉 루트 액세스 권한이없는 서버에서 사용할 수 있습니다. 이를 위해 몇 가지 방법이 있으므로 원하는 방법을 선택할 수 있도록 제시 할 것입니다.
이 솔루션은 실제로 빠르게 적용 할 수 있습니다 (기본적으로 1 명령으로 작동하면). 스크립트가 버그가 있거나 일부 lib를 잊어 버릴 수 있기 때문에 모든 바이너리를 수동으로 다운로드하는 데 시간이 오래 걸릴 수 있습니다 ... 이 방법의 다른 장점은 서버에서 직접 루트가 아닌 모드로 실행할 수 있다는 것입니다. 여기서 qemu 바이너리를 얻는 아이디어는 apt 또는 .deb를 호스팅하는 온라인 웹 사이트에서 .deb / .rpm 파일을 가져 와서 추출하고 라이브러리 종속성을 사용하여 라이브러리 종속성을 확인하고 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 전달이 필요하지 않은 경우 자유롭게 제거하십시오 )
첫 번째 방법은 루트 액세스 (또는 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
이제 qemu가 BIOS를 사용해야합니다. 파일은 시스템에서 사용할 수 있지만 파일이 다른 폴더에있는 이유를 모르겠으므로 소스에서 가져 오는 것이 더 쉽다고 생각합니다.
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
소스를 컴파일 할 수도 있지만 모든 라이브러리가 설치되어 있지 않으면 루팅 된 컴퓨터를 사용하여 qemu를 컴파일하지 않는 것이 까다로울 수 있습니다. 그러나 위의 두 가지 방법이 효과가 없다면 조금 더 안정적이라고 생각합니다. 그런 다음 일단 컴파일되면 실행 파일을 가져오고 위와 동일한 트릭을 수행하여 라이브러리를 사용하여 ldd
(모든 라이브러리가 이미 컴퓨터에 있어야 함) pc-bios 파일을 가져옵니다. 그리고 다시 같은 명령으로 실행하십시오.
사전 작성된 파일 시스템 이미지를 사용하지 않으려면 위의 명령을 사용하여 수많은 자습서 를 따르십시오 qemu/qemu-system-x86_64
! 주의 : qemu-img
루트가 아닌 이미지를 만드는 데 사용 하려면 위와 동일한 프로세스를 따르십시오!
즐겨 !
NB : GUI가없는 서버에서 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에서 텍스트 모드를 활성화 할 수도 있습니다.