Added VM configuration support
This commit is contained in:
parent
bef7180b88
commit
7b2e58c6b2
3 changed files with 166 additions and 1 deletions
4
.gitignore
vendored
4
.gitignore
vendored
|
|
@ -140,4 +140,6 @@ cython_debug/
|
|||
# Project Specific Excludes
|
||||
.vscode
|
||||
secrets.txt
|
||||
messages.txt
|
||||
messages.txt
|
||||
Vagrantfile
|
||||
.vagrant
|
||||
32
template_vagrantfile
Normal file
32
template_vagrantfile
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
# -*- mode: ruby -*-
|
||||
# vi: set ft=ruby :
|
||||
|
||||
Vagrant.configure("2") do |config|
|
||||
config.vm.box = "generic/ubuntu2010"
|
||||
|
||||
# Publically forwarded ports.
|
||||
# The below ports are accessible to all machines on the same network.
|
||||
# To limit access to the local network, add "host_ip".
|
||||
# Eg: config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"
|
||||
config.vm.network "forwarded_port", guest: 8000, host: 8000 # Web App
|
||||
config.vm.network "forwarded_port", guest: 9000, host: 9000 # Remote server
|
||||
|
||||
# Explicitly create a shared folder of the Vagrantfile directory at /vagrant in the VM
|
||||
config.vm.synced_folder ".", "/vagrant"
|
||||
|
||||
# Install NXBT
|
||||
config.vm.provision "shell", inline: <<-SHELL
|
||||
apt-get update
|
||||
apt-get install -y python3-pip bluez bluetooth pkg-config build-essential libdbus-glib-1-dev libgirepository1.0-dev
|
||||
{{SHELL_CONFIG}}
|
||||
SHELL
|
||||
|
||||
# Enable USB Controller on VirtualBox
|
||||
config.vm.provider "virtualbox" do |vb|
|
||||
vb.memory = "2048"
|
||||
vb.cpus = 2
|
||||
vb.customize ["modifyvm", :id, "--usb", "on"]
|
||||
vb.customize ["modifyvm", :id, "--usbehci", "on"]
|
||||
{{USB_FILTER}}
|
||||
end
|
||||
end
|
||||
131
vagrant_setup.py
Normal file
131
vagrant_setup.py
Normal file
|
|
@ -0,0 +1,131 @@
|
|||
import re
|
||||
from shutil import which
|
||||
import subprocess
|
||||
import os
|
||||
|
||||
|
||||
def find_line_items(identifier, input_string):
|
||||
pattern = re.compile(fr"(?<={re.escape(identifier)}: ).*.")
|
||||
matches = pattern.findall(input_string)
|
||||
matches = list(map(str.strip, matches))
|
||||
return matches
|
||||
|
||||
def get_usb_devices():
|
||||
usb_string = subprocess.check_output(['VBoxManage', 'list', 'usbhost'])
|
||||
usb_string = usb_string.decode("utf-8")
|
||||
|
||||
usb_devices = usb_string.split("\n\n")
|
||||
devices = []
|
||||
for device in usb_devices:
|
||||
productid = find_line_items("ProductId", device)
|
||||
vendorid = find_line_items("VendorId", device)
|
||||
manufacturer = find_line_items("Manufacturer", device)
|
||||
product = find_line_items("Product", device)
|
||||
|
||||
if (len(productid) < 1 or len(vendorid) < 1 or
|
||||
len(manufacturer) < 1 or len(product) < 1):
|
||||
continue
|
||||
|
||||
productid = productid[0]
|
||||
vendorid = vendorid[0]
|
||||
manufacturer = manufacturer[0]
|
||||
product = product[0]
|
||||
|
||||
if len(productid) != 13 or len(vendorid) != 13:
|
||||
continue
|
||||
|
||||
devices.append({
|
||||
'product': product,
|
||||
'manufacturer': manufacturer,
|
||||
'productid': productid[8:12],
|
||||
'vendorid': vendorid[8:12]
|
||||
})
|
||||
|
||||
return devices
|
||||
|
||||
def is_cli(cli_string):
|
||||
return which(cli_string) is not None
|
||||
|
||||
def check_cli(name, cli_string):
|
||||
print(name, end="")
|
||||
if is_cli(cli_string):
|
||||
print(" [OK]")
|
||||
else:
|
||||
print(" [ERROR]")
|
||||
print(f" -> {name} wasn't found on your system")
|
||||
exit(1)
|
||||
|
||||
GH_SHELL_CONFIG = """cd /vagrant
|
||||
pip3 install -e ."""
|
||||
PYPI_SHELL_CONFIG = """pip3 install nxbt"""
|
||||
|
||||
if __name__ == "__main__":
|
||||
print("Checking for the required utilities...")
|
||||
check_cli("Vagrant", "vagrant")
|
||||
check_cli("VirtualBox", "VBoxManage")
|
||||
check_cli("Git", "git")
|
||||
print("")
|
||||
|
||||
print("---")
|
||||
print("Welcome to the nxbt-vagrant setup.")
|
||||
print("As part of the first step in this process, you will "
|
||||
"select the USB Bluetooth adapter that will be used with NXBT.")
|
||||
print("Please ensure that your adapter is plugged into this computer.")
|
||||
print("---")
|
||||
input("Press the enter key to continue.")
|
||||
print("")
|
||||
|
||||
print("USB Devices:")
|
||||
print("---")
|
||||
devices = get_usb_devices()
|
||||
for i, device in enumerate(devices):
|
||||
print(f"{i:3}. {device['product']} ({device['manufacturer']})")
|
||||
print()
|
||||
|
||||
# Choose a USB Bluetooth adapter
|
||||
invalid_choice = True
|
||||
while invalid_choice:
|
||||
usb_choice = input(
|
||||
f"Please choose your Bluetooth USB Adapter from the above list [0-{len(devices)-1}]: ")
|
||||
if usb_choice.isdigit() and int(usb_choice) < len(devices):
|
||||
invalid_choice = False
|
||||
else:
|
||||
print(f"Invalid choice. Please choose a number from 0 to {len(devices)-1}.")
|
||||
adapter_info = devices[int(usb_choice)]
|
||||
print("")
|
||||
|
||||
# Choose how to install NXBT (PyPi or Github)
|
||||
invalid_choice = True
|
||||
while invalid_choice:
|
||||
install_choice = input(
|
||||
"Would you like to install NXBT from (1) PyPi or (2) install from local files? (1/2) ")
|
||||
if install_choice in ['1', '2']:
|
||||
invalid_choice = False
|
||||
else:
|
||||
print("Invalid choice. Please choose PyPi (1) or Github clone/install (2)")
|
||||
print("")
|
||||
|
||||
print("Configuring...")
|
||||
with open("template_vagrantfile", "r") as f:
|
||||
vagrantfile = f.read()
|
||||
|
||||
vb_usb_filter = f"""vb.customize ["usbfilter", "add", "0",
|
||||
"--target", :id,
|
||||
"--name", "{adapter_info['product']} ({adapter_info['manufacturer']})",
|
||||
"--product", "{adapter_info['product']}",
|
||||
"--manufacturer", "{adapter_info['manufacturer']}",
|
||||
"--productid", "{adapter_info['productid']}",
|
||||
"--vendorid", "{adapter_info['vendorid']}",]"""
|
||||
vagrantfile = vagrantfile.replace("{{USB_FILTER}}", vb_usb_filter)
|
||||
if install_choice == '1':
|
||||
vagrantfile = vagrantfile.replace("{{SHELL_CONFIG}}", PYPI_SHELL_CONFIG)
|
||||
else:
|
||||
vagrantfile = vagrantfile.replace("{{SHELL_CONFIG}}", GH_SHELL_CONFIG)
|
||||
|
||||
with open("Vagrantfile", "w") as f:
|
||||
f.write(vagrantfile)
|
||||
print("Done!")
|
||||
print("")
|
||||
|
||||
print("You can now start the NXBT Vagrant Box with 'vagrant up'.")
|
||||
print("After booting up, the Vagrant Box can be access with 'vagrant ssh'.")
|
||||
Loading…
Add table
Add a link
Reference in a new issue