回答:
実際の仮想化にはCPUへの低レベルのアクセスが必要なので、rootがインストールする必要があります。インストールしたら、実行するためにrootになる必要はありません。おそらく、bochsなどの非ルートとして、またはwineなどのアダプターとしてエミュレーターをインストールして実行できます。特定の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
ここから私のdebian 8イメージ(1.6G)をダウンロードすることもできます:
tar -xvzf test01.qcow2.tar.gz
そして最後に走る
./command.sh
ホスト22のポート22222でsshポートが開かれた、テキストモードで動作するDebian 8が必要です。ユーザー「root」とパスワード「root」を使用してログインできます。
QEMUは確かに、ルートアクセス権のないサーバーに独自のLinuxイメージをインストールできるソリューションです。これは非常に便利です。たとえば、メインのユーザーパスワードを公開せずにリバースsshを実行したり、教育目的で使用したりします。しかし、実際には、rootアカウントなしではKVMを実際の仮想化に使用できないため、エミュレーションのみを行うことができますが、これは非常に非効率的です(ただし、コマンドライン操作の場合、オーバーヘッドはまったく見ませんでした)。
qemu
ここに私がどのように進むかの説明があります。最初のステップは、qemuを「ポータブル」にする、つまりルートアクセスなしでサーバーで使用できるようにすることです。そのためには、いくつかの方法がありますが、それらを提示して、お好みの方法を選択できるようにします。
このソリューションは非常に迅速に適用できます(基本的に、1つのコマンドで機能する場合は動作します)が、私のスクリプトにはバグがあるか、libを忘れる可能性があるため、すべてのバイナリを手動でダウンロードするのにかなり時間がかかる可能性があります...この方法の他の利点は、サーバー上で直接非ルートモードで実行できることです。ここでqemuバイナリを取得するアイデアは、.deb / .rpmファイル(apt、または.debをホストするオンラインWebサイトから)を取得し、それを抽出し、を使用してライブラリの依存関係を確認し、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/
1つのファイルqemu-system-x86_64
(メインバイナリー)、1つのフォルダーlib
(と一緒に使用する必要のあるlibs qemu
)、および1つのフォルダー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
楽しい !(スクリプトがうまくいかない場合は、遠慮なく私に尋ねてください.2台のコンピューターでのみテストし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をコンパイルしないようにするのは難しいかもしれません。しかし、上記の2つの方法が機能しない場合は、もう少し信頼性が高いと思います。次に、コンパイルが完了したら、実行可能ファイルを取得し、上記と同じトリックを実行して、ライブラリ(ldd
すべてのライブラリが既にコンピューター上にあるはずです)とpc-biosファイルを取得します。そして再び、同じコマンドで実行します。
事前に作成されたファイルシステムイメージを使用したくない場合は、!の代わりに上記のコマンドを使用して、多数のチュートリアルに従ってくださいqemu/qemu-system-x86_64
。注:qemu-img
非ルートとしてイメージを作成するためにも使用する場合は、上記と同じプロセスに従ってください!
楽しい !
注: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で十分でない場合は、テキストモードを有効にすることもできます。