Instalar máquina virtual como não raiz?

15

É possível instalar qualquer software de máquina virtual como usuário não root e executá-lo?

Quais VMs são possíveis de serem instaladas sem a necessidade de acesso root?

Se não for possível, qual seria a máquina virtual mais leve a ser usada em algumas janelas com VM xp sp3?

Prémio
fonte

Respostas:

5

Qualquer virtualização real precisa de acesso de baixo nível à CPU e, portanto, a raiz deve instalá-la. Uma vez instalado, você não precisa ser root para executá-lo. Você provavelmente pode instalar e executar um emulador como não raiz, como bochs, ou um adaptador como o wine. Se você tem um aplicativo específico do Windows em mente, basta executá-lo no wine (talvez).

Keith
fonte
possível, mas eu teria que solicitar que um aplicativo fosse convertido em mono para que ele funcionasse bem, o que seria um monte de problemas, na verdade nem sei se eles realmente o farão, obrigado pela resposta. Você saberia quais são as VMs mais leves para executar o windows xp sp3 com 2 aplicativos de uso de memória realmente pequenos?
Prix
Provavelmente, sua melhor aposta seria o VMware Player . É gratuito no VMware.
Keith
11

Para o KVM , você precisa de acesso ao dispositivo /dev/kvm. Se seu usuário puder ler / gravar neste dispositivo, você poderá executar máquinas virtuais baseadas em KVM como seu usuário.

Na maioria das distribuições, os membros do kvmgrupo têm acesso a esse dispositivo, portanto, tudo que você precisa fazer é adicionar seu usuário ao kvmgrupo.

Para a maioria das outras tecnologias aceleradas, você precisará carregar os módulos do kernel (isso inclui o virtualbox e o VMWare). Isso quase certamente requer acesso no nível raiz.

Você pode executar tecnologias de virtualização não aceleradas como qualquer usuário. Por exemplo, qemu no modo não acelerado. Esteja ciente de que será muito lento se comparado à virtualização acelerada.

jmtd
fonte
thaks as informações não aceleradas foram úteis;)
Prix
7

Modo de usuário O Linux é uma solução de virtualização do Linux que roda inteiramente no espaço do usuário - sem privilégios de root.

No entanto, ele só pode executar um convidado Linux em um host Linux; portanto, não é adequado se você deseja executar qualquer outra coisa.

Riccardo Murri
fonte
4

Uma máquina virtual precisa de acesso de nível bastante baixo ao processador (e outro hardware) para ser eficiente. Portanto, você não verá nenhum software VM com bom desempenho que possa ser instalado não raiz.

Quanto às máquinas virtuais leves, a leveza é alcançada incluindo apenas os recursos necessários. Isso requer algum conhecimento sobre o sistema operacional que será executado e, portanto, as VMs leves de código aberto ( Plex86 , LilyVM ) suportam apenas sistemas operacionais de código aberto. Por essa lógica, pode ser que o Microsoft Virtual PC seja mais leve que o VirtualBox / VMWare / etc. mas eu realmente não sei. O VirtualBox está disponível em código aberto, é bastante utilizável e sempre foi suficiente para meus propósitos (mas tentei outros).

dancek
fonte
2

O Virtualbox 4.0.8 precisa ser instalado como curso raiz, mas depois você pode permitir que os usuários façam suas próprias VMs. Você só precisa ser um membro do grupovboxusers

usermod -G vboxusers USERNAME

Dê uma olhada neste link , bom artigo sobre como executá-lo sem cabeça, direto do shell. Eu também gosto muito de que ele suporta o protocolo RDP, o que significa que você pode apenas usar rdesktoppara se conectar.

Bas Keur
fonte
2

QEmu é capaz de fazer isso. Eu já fiz isso várias vezes. Embora não seja extremamente eficiente

Marco
fonte
2

1) Resposta de três linhas

Para usar minhas imagens pré-construídas / versão compilada do qemu, faça o download aqui e descompacte-o:

tar -xvzf qemu_packed.tar.gz

você também pode baixar minha imagem do debian 8 (1.6G) aqui :

tar -xvzf test01.qcow2.tar.gz

e finalmente corra

./command.sh

Você deve ter um Debian 8 funcionando, no modo de texto, com a porta ssh aberta no host host na porta 22222. Você pode efetuar logon usando o usuário "root" e a senha "root".

2) Resposta mais longa, faça essas imagens sozinho

O QEMU é realmente uma solução que me permite instalar minha própria imagem linux em um servidor no qual eu não tinha acesso root. É muito útil, eu o uso, por exemplo, para reverter ssh sem revelar minha senha de usuário principal ou para fins educacionais. Mas, de fato, como você não pode usar o KVM para virtualização real sem uma conta raiz, poderá fazer apenas emulação, o que pode ser bastante ineficiente (mas para operações de linha de comando, eu nunca vi a sobrecarga).

2.1) Pacote qemu

Aqui está a descrição de como proceder. O primeiro passo é tornar o qemu "portátil", ou seja, utilizável no servidor sem acesso root. Para fazer isso, você tem vários métodos, tentarei apresentá-los para que você possa escolher o que preferir.

2.1.a) Método 1: baixe o arquivo .deb disponível

Esta solução pode ser muito rápida de aplicar (basicamente, se funcionar, em 1 comando você a obtém), mas como meu script pode estar com erros / esquecer algumas lib, pode demorar bastante para baixar manualmente todos os binários ... Outra vantagem desse método é que você pode executá-lo no modo não raiz, diretamente no servidor. A idéia de obter os binários do qemu aqui é obter o arquivo .deb / .rpm (do apt ou dos sites online que hospedam o .deb), extraí-lo, verificar as dependências das bibliotecas usando ldde fazer o download de todas .debas dependências que estão disponíveis. ainda não está presente no computador para extraí-los (os .soarquivos). Como pode ser bastante longo e repetitivo, criei um pequeno script, mas se você for corajoso, poderá fazer tudo isso manualmente ... Isso leva tempo. Para usá-lo, salve este script em um arquivocreate_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>"

e execute-o usando:

chmod +x create_qemu_binaries.sh 
./create_qemu_binaries.sh 

tudo funciona bem; no final, você deve ter na pasta ./qemu_extract/qemu_packed/um arquivo qemu-system-x86_64(o binário principal), uma pasta lib(as bibliotecas que precisam ser usadas qemu) e uma pasta pc-bios, um conjunto de arquivos que qemuprecisam ser executados. Você pode executar qemuusando (não se esqueça de substituir com a imagem do sistema de arquivos):

$ 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

Desfrutar ! (se o script não funcionar para você, não hesite em me perguntar, testei-o apenas em dois computadores e preencha-o gratuitamente para remover redirse você não precisar de encaminhamento ssh entre o host e o palpite)

2.1.b) Método 2: se você acessar um computador com acesso root

O primeiro método precisa de um computador com acesso root (ou qemuinstalado). Primeiro instale qemuusando algo como

sudo apt install qemu-system-x86

e localize o caminho absoluto do qemu:

$ which qemu-system-x86_64 
/usr/bin/qemu-system-x86_64

Em seguida, crie uma pasta para colocá-lo:

mkdir -p qemu_packed/lib
cd qemu_packed
cp /usr/bin/qemu-system-x86_64 qemu_packed

e obtenha a lista de bibliotecas vinculadas ao qemu:

ldd qemu_packed/qemu-system-x86_64 | awk '{print "cp "$3" qemu_packed/lib"}' | bash

agora, precisamos usar o BIOS pelo qemu. Os arquivos estão disponíveis no seu sistema, mas não sei por que eles estão em pastas diferentes, por isso acho mais fácil obtê-los nas fontes:

git clone https://github.com/qemu/qemu.git
cp -r qemu/pc-bios qemu_packed
cd qemu_packed

Agora, deve funcionar, você pode copiar esses arquivos na máquina não raiz e apenas executar qemuusando a seguinte linha (não se esqueça de substituir a imagem):

$ 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) Método 3: das fontes

Você também pode compilar as fontes, mas se você não tiver todas as bibliotecas instaladas, pode ser complicado evitar o uso de um computador raiz para compilar o qemu. Mas acho que é um pouco mais confiável se os dois métodos acima não funcionarem. Em seguida, uma vez compilado, obtenha o arquivo executável e faça o mesmo truque acima para obter as bibliotecas (usando ldd, todas as bibliotecas já devem estar no computador) e o arquivo pc-bios. E, novamente, execute-o com o mesmo comando.

2.3) Crie sua própria imagem

Se você não quiser usar uma imagem de sistema de arquivos pré-criada, siga os vários tutoriais usando os comandos acima no lugar de qemu/qemu-system-x86_64! Nota: se você também deseja qemu-imgcriar imagens como não raiz, siga o mesmo processo acima!

Desfrutar !

Nota: se você quiser usar a exibição de maldições para executá-la em um servidor sem GUI, adicione à sua imagem uma linha na opção de inicialização para que não ative o buffer de quadros em /etc/default/grub:

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

(o mais importante é o último, não tenho certeza se é necessário). Assim como

GRUB_TERMINAL=console
GRUB_GFXPAYLOAD_LINUX=text

para que o grub permaneça no modo de texto. Você também pode ativar o modo de texto no systemd, se não for suficiente.

tobiasBora
fonte
1
Por favor, cara que me colocou -1, você poderia me explicar por que?
tobiasBora
Não faço ideia, mas isso é ótimo, obrigado.
Wbkang #