web-dev-qa-db-ja.com

非ルートとして仮想マシンをインストールしますか?

非rootユーザーとして仮想マシンソフトウェアをインストールして実行することは可能ですか?

ルートアクセスを必要とせずにインストールできるVMはどれですか。

それが不可能な場合、いくつかのVMを実行しているWindows XP SP3に使用する最も軽量な仮想マシンは何ですか?

15
Prix

実際の仮想化にはCPUへの低レベルのアクセスが必要なので、rootがそれをインストールする必要があります。インストールしたら、実行するためにrootである必要はありません。おそらく、bochsなどの非rootとして、またはwineなどのアダプターとして、エミュレーターをインストールして実行することができます。特定のWindowsアプリを念頭に置いている場合は、それをwineで実行することもできます(たぶん)。

5
Keith

[〜#〜] kvm [〜#〜] の場合、デバイスにアクセスする必要があります/dev/kvm。ユーザーがこのデバイスに読み書きできる場合は、ユーザーとしてKVMベースの仮想マシンを実行できます。

ほとんどのディストリビューションでは、kvmグループのメンバーがこのデバイスにアクセスできるため、ユーザーをkvmグループに追加するだけで済みます。

他のほとんどの高速化テクノロジーでは、カーネルモジュールをロードする必要があります(これには、virtualboxとVMWareが含まれます)。これにはほぼ確実にルートレベルのアクセスが必要です。

加速化されていない仮想化テクノロジーを任意のユーザーとして実行できます。たとえば、非加速モードでは qem です。加速された仮想化に比べて非常に遅くなることに注意してください。

11
jmtd

ユーザーモードLinux は、完全にユーザー空間で実行されるLinux仮想化ソリューションです。ルート権限は必要ありません。

ただし、これはLinuxホスト内でLinuxゲストのみを実行できるため、他のものを実行する場合には適していません。

7
Riccardo Murri

仮想マシンを効率的にするには、プロセッサ(およびその他のハードウェア)への非常に低レベルのアクセスが必要です。したがって、ルート以外でインストールできるパフォーマンスの高いVMソフトウェアは表示されません。

軽量の仮想マシンについては、必要な機能のみを含めることで軽量化を実現しています。これには、実行されるOSに関するある程度の知識が必要です。そのため、オープンソースの軽量VM( Plex86LilyVM )は、オープンソースのオペレーティングシステムのみをサポートします。このロジックにより、Microsoft Virtual PCはVirtualBox/VMWareなどよりも軽量である可能性があります。本当にわかりません。 VirtualBoxはオープンソースで利用可能で、非常に使いやすく、常に私の目的には十分でした(ただし、他のものを試しました)。

1)3行で答える

Qemuのビルド済みイメージ/コンパイル済みバージョンを使用するには、それを here からダウンロードし、解凍します。

tar -xvzf qemu_packed.tar.gz

私のdebian 8イメージ(1.6G)は here からダウンロードすることもできます。

tar -xvzf test01.qcow2.tar.gz

そして最後に実行します

./command.sh

ホストゲストのポート22222でsshポートが開いた、テキストモードのDebian 8が動作しているはずです。ユーザー「root」とパスワード「root」を使用してログに記録できます。

2)より長い答え、これらの画像を自分で作る

QEMUは確かに、ルートアクセス権のないサーバーに自分のLinuxイメージをインストールできるソリューションです。これは非常に便利です。たとえば、メインのユーザーパスワードを明かさずにリバースSSHを実行したり、教育目的で使用したりします。しかし実際には、KVMをrootアカウントなしで実際の仮想化に使用することはできないため、エミュレーションのみを実行でき、これは非常に非効率的です)(ただし、コマンドライン操作では、オーバーヘッド)。

2.1)qemuのパック

ここに私が進む方法の説明があります。最初のステップは、qemuを「移植可能」にする、つまりrootアクセスなしでサーバー上で使用可能にすることです。そうするためにいくつかの方法がありますが、あなたが好むものを選ぶことができるようにそれらを提示しようと思います。

2.1.a)方法1:利用可能な.debをダウンロードする

このソリューションは本当にすばやく適用できます(基本的には機能する場合、1つのコマンドで取得できます)が、私のスクリプトはバグがある/一部のlibを忘れる可能性があるため、すべてのバイナリを手動でダウンロードするのはかなり長くなる可能性があります...この方法の他の利点は、サーバー上で直接非ルートモードで実行できることです。ここでqemuバイナリを取得するアイデアは、(aptから、または.debをホストするオンラインWebサイトから).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/フォルダーに1つのファイルqemu-system-x86_64(メインバイナリ)、1つのフォルダーlibqemuで取得する必要のあるライブラリ)、および1つのフォルダーpc-biosqemuのファイルセットが必要です実行する必要があります。次に、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台のコンピューターでのみテストしました。ホストと推測の間でssh転送が必要ない場合は、redirを自由に削除してください)

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

これで動作するはずです。これらのファイルを非ルートマシンにコピーし、次の行を使用して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をコンパイルするためにルート化されたコンピューターを使用しないようにするのは難しいかもしれません。しかし、上記の2つの方法が機能しない場合は、少し信頼性が高いと思います。次に、コンパイルしたら、実行可能ファイルを取得し、上記と同じトリックを実行して、ライブラリ(lddを使用すると、すべてのライブラリがコンピューター上に既にあるはずです)とpc-biosファイルを取得します。もう一度、同じコマンドで実行します。

2.3)独自の画像を作成する

事前に作成されたファイルシステムイメージを使用したくない場合は、qemu/qemu-system-x86_64の代わりに上記のコマンドを使用して、多数の tutorials に従ってください! NB:ルート以外のユーザーとして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で十分でない場合は、テキストモードを有効にすることもできます。

2
tobiasBora

Virtualbox 4.0.8はルートoffcourseとしてインストールする必要がありますが、その後、ユーザーに独自のVMを作成させることができます。あなたはグループのメンバーでなければなりませんvboxusers

usermod -G vboxusers USERNAME

this link をご覧ください。シェルから直接、ヘッドレスで実行する方法についての素晴らしい記事です。また、RDPプロトコルをサポートしていることも確認しています。つまり、rdesktopを使用して接続できます。

2
Bas Keur

QEmuはそれを行うことができます。何度かやったことがあります。それほどパフォーマンスは高くない

2
Marco