VBO-365 Portal: A nice project just behind the corner – Part 1

A service provider asked me to help him to design a backup service where the main topic was Microsoft 365.

I’m sure many of you already know and already use Veeam Backup for Office 365.

It is an excellent solution to address an end-user request and to allow a Service provider to supply a managed service.

But what about unmanaged service?

In other words: is it possible to give an admin of an organization a way to perform backup and restore by himself in a multi-tenant architecture?

The answer came from the great job of two Veeam guys.

Niels Engelen and Timothy De Win have developed a web portal leveraging the native VBO-365 RESTFul-API that allows the service provider to score the goal. The project is called MARTINI.

Just a note before starting: the articles have been written “for dummy”; the scope is explaining step by step the procedure I followed to design service.

To remember: 

  1. This is not a Veeam Project so it is NOT officially supported.
  2. For more details about the software used and to remain updated, please refer to the blog sites of Niels and Timothy (http://blog.dewin.me/).
  3. .ake a look at the official Veeam guide to know the hardware, software requirements of VBO-365.
  4. Please contact your security specialists to be sure it responds to your security standard.
  5. This article has been written using VBO-365 v.4. Please read carefully the second article to learn how to fix with VBO-365 v.5.

Design and Implementation:

The smallest architecture you can design is composed of one VBO-server and one Portal server.

In these articles the names of these 2 servers are in order:

a) VBO-365  (Windows 2019)
b) VBO-Portal (Linux ubuntu 20-04)

A video that explains how to install VBO-365 software is available at the following link: Installing VBO365.

Ready to start? Let’s go!

a) Commands 1/2 update and upgrade the packages installed Linux Server to the last release

1- sudo apt update
2- sudo apt upgrade

b) Command 3 installs the unzip package

3- sudo apt-get install unzip wget

c) Command 4 downloads the martini package,  command 5 unzips it in /usr/bin directory

4- wget https://dewin.me/martini/martini-cli.zip
5- sudo unzip martini-cli.zip -d /usr/bin/

d) Now it’s time to setup Martini.

6- sudo martini-cli setup

It requires and automatically installs the following packages:

apache2, mysql-server mysql-client, PHP, php-xml,  composer, zip unzip php-mysql and Terraform.

At the end of this setup the screen output shows the following output.

#MySQL commands:
CREATE USER ‘martinidbo’@’localhost’ IDENTIFIED WITH mysql_native_password BY ‘mypasswordthatissupersecret’;
GRANT ALL ON martini.* TO ‘martinidbo’@’localhost’;
# Ubuntu older
GRANT USAGE ON *.* TO ‘martinidbo’@’localhost’ WITH MAX_QUERIES_PER_HOUR 0;
# Ubuntu 20.04
GRANT USAGE ON *.* TO ‘martinidbo’@’localhost’;

Now connect to mySQL DB using the following command:

mysql -u root -p

If the error shown in picture 1 appears it is necessary to follow the procedure described below:

Picture 1

– sudo mysql
– select user,host,plugin from mysql.user; output -> root | localhost | auth_socket 

the output is shown in picture 2 and it checks the plugin used for any MySQL users.

Picture 2

If it is auth_socket to user root just change it with the following command

– update mysql.user set plugin=’mysql_native_password’ where user=’root’;
– select user,host,plugin from mysql.user; output root | localhost | mysql_native_password

the output shown in picture 3 confirms it is correctly changed.

Picture 3

– flush privileges;


Now retype the previous command (mysql -u root -p) and please continue with the procedure if it still doesn’t work as shown in picture 4 :

Picture 4

– sudo /etc/init.d/mysql stop
– sudo mkdir -p /var/run/mysqld
– sudo chown mysql:mysql /var/run/mysqld
– sudo mysqld_safe –skip-grant-tables &
– mysql -u root

– ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘new_password‘;

– flush privileges;
– quit

at this point reboot the server.

The command mysql -u root -p  shows the following output:

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

Let’s go back to martini checking if the database and the new user have been created with the command:

mysql> show databases;

If it doesn’t appear use the following steps:
– use mysql
– show tables;
– CREATE USER ‘martinidbo’@’localhost’ IDENTIFIED BY ‘mypassword-‘;
– GRANT ALL PRIVILEGES ON * . * TO ‘martinidbo’@’localhost’;

Now re-launch the martini setup command

– sudo martini-cli setup

selecting no when the prompt asks if it is the first run and follow the easy wizard as shown in picture 5.

Picture 5

The last commands are:

– sudo chown thegable:thegable .martiniconfig
– martini-cli –server http://localhost/api connect

and if you have enabled the firewall just open the web default port

– sudo ufw allow 80/tcp

Now open a web browser (Picture 6) and point out to the VBO-portal server  IP address and you can see the login to Martini page.

Picture 6

In the next article, we are going to cover how to set it up and some useful detail to use it.

That’s all for now guys.

VBR & Cloud Business Model – Part 3

This article will cover the topic of license in VCSP scenarios.

Please refer to the official documentation to get more details on it.

The easiest way to explain the license model is by thinking of a basket.

a. What is present in the basket?
It is the container of the licenses. The licenses belong to the Service Provider.

b. What the Service Provider can do with licenses?
It can assign them to his customers (you can call them end-users or tenants).

c. Does the services consume different amounts of licenses?
The cost depends on the supplied service.

The example below will clarify the licensing method; the units I will use to explain the model are apples 🙂
(numbers written here are not real, contact the local Veeam sales representative to have a correct quote).

A Service Provider supplies three types of services to his customers;
DraaS, BaaS, RbcS(Remote Backup Copy Service)

Every single month the Service Provider buys 100 “apples” and put them into the basket.

Let’s suppose that:

1) DraaS consumes 10 apples for VM a month (VM/m)
2) BaaS 4 apples  VM/m
3) RbcS 6 apples VM/m
4) Every tenant has 5 VMs
5) Service Provider customers are: Green – White – Red
6) Green bought DraaS
7) White bought BaaS
8) Red bought RbcS

How can I measure the apple-eating?
With an easy math operation 🙂

Green = 5VM*DraaS = 50 apples
White = 5 VM*BaaS = 20 apples
Red=5VM*BbcS=30 apples

Total = 100 Apples

Note 1: If the Service Provider adds new customers or the present tenants more VMs the Service Provider license can be enlarged on-fly easily contacting the Veeam team.

But, if the license count it’s quite simple with few customers it can be more difficult with hundreds of them.

In aid of of the Service Provider Veeam released a  very useful and powerful software named  Veeam Service Provider Console (VSPC)

What are the common VSPC use cases?

1) Remote monitoring and management
2) Licensing engine and usage reporting
3) Billing
4) Integration and automation (RestFul API)
5) Multi-tenant serviceability

(To have more details please click here)

Picture 1 shows which services can be managed via VSPC.

Picture 1

Please remember that cloud connect is mandatory work with VCSP.

The official guide shows the requirements to work with it:

Note 2: The software provided by Veeam enables any partner to create his own cloud services. To example performing a backup service for workstations and laptops  of employees that working from home (a common scenario in these unlucky last months)

Note 3: To create a price list every single Service provider will have to add all costs of Infrastructure, Managing etc

That’s all for Cloud Modelling.