以非超级用户身份安装虚拟机?


15

是否可以以非root用户身份安装任何虚拟机软件并运行它?

无需root访问权限即可安装哪些VM?

如果不可能,那么在运行几个VM的Windows XP SP3上使用的重量最轻的虚拟机是什么?

Answers:


5

任何真正的虚拟化都需要对CPU的低级访问,因此root必须安装它。安装完成后,您无需root用户即可运行它。您可能以非root用户身份(例如bochs)或适配器(例如wine)安装并运行模拟器。如果您有特定的Windows应用程序,则可以在wine下运行(也许)。


可能,但我必须要求将应用程序转换为单声道以使其正常运行,这实际上是一个很大的麻烦,甚至不知道他们是否会这样做,谢谢您的回答。您是否会知道带有2个内存使用量很小的应用程序的简单运行窗口XP SP3最轻巧的VM是什么?
Prix

也许您最好的选择是VMware Player。它是从VMware免费提供的。
基思

11

对于KVM,您需要访问设备/dev/kvm。如果您的用户可以读/写此设备,则可以以用户身份运行基于KVM的虚拟机。

在大多数发行版中,该kvm组的成员都可以访问此设备,因此您要做的就是将用户添加到该kvm组中。

对于大多数其他加速技术,您将需要加载内核模块(包括virtualbox和VMWare)。这几乎可以肯定需要根级访问。

您可以以任何用户身份运行非加速虚拟化技术。例如,qemu处于非加速模式。请注意,与加速虚拟化相比,这将非常慢。


认为未加速的信息很有用;)
Prix


4

虚拟机需要对处理器(和其他硬件)的较低级别的访问才能提高效率。因此,您将看不到任何可以非root用户安装的性能良好的VM软件。

对于轻量级虚拟机,仅通过包含所需功能即可实现轻便。这需要有关将要运行的OS的一些知识,因此开放源代码的轻量级VM(Plex86LilyVM)仅支持开放源代码的操作系统。按照这种逻辑,可能是Microsoft Virtual PC比VirtualBox / VMWare / etc更轻巧。但我真的不知道 VirtualBox可在开源中使用,非常有用,并且对于我的目的一直足够(但我已经尝试了其他方法)。


2

需要将Virtualbox 4.0.8作为根目录安装,但是之后,您可以让用户在其中创建自己的VM。您只需要成为该组的成员vboxusers

usermod -G vboxusers USERNAME

看看这个链接,这篇不错的文章如何直接从外壳无头运行它。我还真的发现它支持RDP协议,这意味着您可以使用它rdesktop进行连接。


2

QEmu能够做到这一点。我已经做过几次了。虽然表现不佳


2

1)三行答案

要使用我的qemu的预编译图像/编译版本,请从此处下载它,然后将其解压缩:

tar -xvzf qemu_packed.tar.gz

您也可以从这里下载我的debian 8映像(1.6G):

tar -xvzf test01.qcow2.tar.gz

最后跑

./command.sh

您应该有一个正常工作的Debian 8(在文本模式下),并在主机客户机中的2222端口上打开了ssh端口。您可以使用用户“ root”和密码“ root”登录。

2)答案更长,请自行制作这些图像

QEMU确实是一种解决方案,可以让我在没有root访问权的服务器上安装自己的linux映像。这非常有用,例如,我使用它来执行反向ssh而不显示我的主要用户密码,或者用于教育目的。但是确实,由于没有root帐户就无法使用KVM进行真正的虚拟化,因此您只能执行仿真,效率可能非常低(但是对于命令行操作,我从未真正看到过开销)。

2.1)包装 qemu

这是我如何进行的描述。第一步是使qemu“可移植”,即在没有root访问权限的服务器上可用。为此,您有几种方法,我将尝试介绍它们,以便您可以选择自己喜欢的一种。

2.1.a)方法1:下载可用的.deb

此解决方案可以非常快速地应用(基本上可以用1个命令来解决),但是由于我的脚本可能有错误/可能忘记了一些lib,因此手动下载所有二进制文件可能会很长。此方法的另一个优点是,您可以直接在服务器上以非root用户模式运行它。这个想法得到QEMU二进制文件在这里得到的.deb /的.rpm档案(从易,或从在线网站的主机.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-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

请享用 !(如果该脚本对您不起作用,请随时询问我,我仅在两台计算机上对其进行了测试,redir如果您不需要在主机和猜测之间进行ssh转发,则可以随意删除)

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

现在,我们需要让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

2.1.c)方法3:从来源

您也可以编译源代码,但是如果您没有安装所有库,则避免使用有根计算机编译qemu可能很棘手。但是我想,如果以上两种方法不起作用,它会更可靠。然后,在编译完成后,获取可执行文件,并执行与上述相同的技巧来获取库(使用ldd,所有库应该已经在计算机上)和pc-bios文件。再次,使用相同的命令运行它。

2.3)创建自己的图像

如果您不想使用预制的文件系统映像,只需使用上面的命令代替!,按照大量的教程进行操作即可qemu/qemu-system-x86_64。注意:如果您还想使用qemu-img非根目录创建映像,请按照上述相同的步骤进行!

请享用 !

注意:如果要使用curses显示屏以便在没有GUI的服务器上运行它,则应在引导选项中的映像中添加一行,以免它在以下位置打开帧缓冲区/etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT="vga=normal nofb nomodeset bochs_drm.fbdev=off"

(最重要的是最后一个,我不确定是否需要)。以及

GRUB_TERMINAL=console
GRUB_GFXPAYLOAD_LINUX=text

使grub保持文本模式。如果还不够,您可能还想在systemd中启用文本模式。


1
请让我为-1的家伙,您能解释一下为什么吗?
tobiasBora

我不知道,但这很好,谢谢。
wbkang
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.