Skip to content

Jiab77/libvirt-web

Repository files navigation

libVirt Web

A simple web interface based on libVirt and PHP.

This project is still a Work In Progress, it might not work correctly on your side.

Please, create an issue in this case so I can track and fix it.

Thank you.

If you were looking for a nodejs version: https://github.com/Jiab77/libvirt-web-nodejs.

Preview

image image

Installation

The installation process is pretty simple and will require only few dependencies.

The web interface should be able to run on any desktops and servers.

Dependencies

There is only few dependencies required:

  1. libvirt-bin (The virsh command should be provided by libVirt)
  2. virt-viewer
  3. virt-install
  4. libguestfs
  5. php-cli
  6. php-gd
  7. php-xml
  8. php-json

I have dropped the ImageMagick convert command from dependencies.

Plaforms

The project has been tested on Pop_OS!, a Linux distribution based on Ubuntu 18.04 LTS.

It is also tested on FreeBSD by my friend @Sevendogs5.

Ubuntu and derivated distribs

You should only need to install these packages:

# For desktop
sudo apt install libvirt-bin virt-viewer virtinst libguestfs-tools php-cli php-gd php-xml php-json

# For server
sudo apt install libvirt-bin virtinst libguestfs-tools php-cli php-gd php-xml php-json

# Restart
sudo reboot

# Check services status
systemctl status libvirt-bin.service libvirt-guests.service libvirtd.service -l

I still need to validate the packages list so this might change later.

FreeBSD

Instruction will be provided soon.

Run the web interface

You can run the web interface by using the embedded web server from PHP or using apache or nginx.

PHP Embedded Web Server

You can start the server that way:

cd libvirt-web
./start-local-server.sh

If you want to run the server on another interface / port, you can also do the following:

# Set another listen interface (it will catch the first IP address in this case)
LISTEN_INTERFACE=`hostname -I | awk '{ print $1 }'` ./start-web-server.sh

# Set another listen interface (it will catch the FQDN in this case)
LISTEN_INTERFACE=`hostname -f` ./start-web-server.sh

# Set another list port
LISTEN_PORT=8888 ./start-web-server.sh

# Set another listen interface and port
LISTEN_INTERFACE=`hostname -f` LISTEN_PORT=8888 ./start-web-server.sh

sudo is not required to run the server. It is required only if you want to run the server on a port below 1024.

Then navigate to http://localhost:8000 with your internet browser.

Apache / nginx

This setup is not tested yet and will be documented later.

Breaking Changes

I've changed completely the project structure and now the code is splitted into several files instead of keeping everything into a single file.

The more I was adding features and cleaner logic, the more it became difficult to maintain and keep it readable and understandable.

So the best solution that came to me was split the single file into several ones, now it's much more easier to maintain the project.

A single file version still exist if you look at the file libvirtweb.aio.php but it will not be supported anymore.

Missing / Not Working

Here will be listed missing features / those not working correctly.

  • Remote connection on VM's using virt-viewer.
    • Works on local only...
  • Connection to remote hypervisor.
    • Not implemented yet / not correctly...
  • ISO image upload.
    • The upload is working but the uploaded file can't be moved to /var/lib/libvirt/images...
    • This is due to access restricted to sudoers with filesystem permissions.
  • Graphics are still missing.

Supported Browsers

I'm using Chromium but it should work on any other modern browser.

Thanks

Thanks to the respective developers for their amazing work.

Huge thanks to Ingmar Decker for the PPM Image Reader PHP class.

Also thanks to my friend @Sevendogs5 for supporting the FreeBSD platform.

Contributions

Feel free to contribute by creating pull requests or new issues.

Contact

You can reach me on Twitter by using @jiab77.

About

A simple web interface based on libVirt and PHP.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages