Respostas:
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).
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 kvm
grupo têm acesso a esse dispositivo, portanto, tudo que você precisa fazer é adicionar seu usuário ao kvm
grupo.
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.
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.
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).
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 rdesktop
para se conectar.
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".
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).
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.
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 ldd
e fazer o download de todas .deb
as dependências que estão disponíveis. ainda não está presente no computador para extraí-los (os .so
arquivos). 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 qemu
precisam ser executados. Você pode executar qemu
usando (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 redir
se você não precisar de encaminhamento ssh entre o host e o palpite)
O primeiro método precisa de um computador com acesso root (ou qemu
instalado). Primeiro instale qemu
usando 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 qemu
usando 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
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.
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-img
criar 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.