import subprocess
import os

def run_command(command):
  subprocess.run(command.split())
  



def vpp_install():
  try:
    run_command("sudo mkdir -p /var/log/vpp/vpp.log")
    os.system("sudo dpkg -i *.deb")
    os.system("sudo adduser $(id -un) vpp")
    with open("/etc/sysctl.d/80-vpp.conf", "w") as f:
      f.write(f"\nvm.nr_hugepages=1024\nvm.max_map_count=3096\nvm.hugetlb_shm_group=0\nkernel.shmmax=2147483648")
    with open("/etc/sysctl.d/81-vpp-netlink.conf", "w") as f:
      f.write(f"net.core.rmem_default=67108864\nnet.core.wmem_default=67108864\nnet.core.rmem_max=67108864\nnet.core.wmem_max=67108864")
    run_command("sudo sysctl -p -f /etc/sysctl.d/80-vpp.conf")
    run_command("sudo sysctl -p -f /etc/sysctl.d/81-vpp-netlink.conf")
    run_command("sudo cp /etc/vpp/startup.conf /etc/vpp/startup.conf.orig")
    run_command("sudo cp vpp_startup.txt /etc/vpp/startup.conf")

    with open("/etc/vpp/bootstrap.vpp", "w") as f:
      f.write(f"create loopback interface\n")
    run_command("sudo systemctl restart vpp")
    os.system(f"sudo apt --fix-broken install -y")
  except subprocess.CalledProcessError:
    print("exit from vpp install")
    exit()
  return True
  
   
def frr_install():
  try:
    os.system("sudo curl -s https://deb.frrouting.org/frr/keys.asc | sudo apt-key add -")
    with open("/etc/apt/sources.list.d/frr.list", "w") as f:
      f.write('deb https://deb.frrouting.org/frr focal frr-stable')
    os.system("sudo apt update")
    os.system("sudo apt install frr frr-pythontools -y")
    os.system("sudo adduser $(id -un) frr")
    os.system("sudo adduser $(id -un) frrvty")
    run_command("sudo cp /etc/frr/daemons /etc/frr/daemons.backup")
    run_command("sudo cp daemons.txt /etc/frr/daemons")
    with open("/etc/frr/frr.conf", "a") as f:  
      f.write(f"\nlog file /var/log/frr/frr.log\nservice integrated-vtysh-config\n!\n!")
    run_command("sudo service frr restart")
    run_command("sudo pip install vpp-papi")
  except subprocess.CalledProcessError:
    os.system("sudo rm -r /etc/apt/sources.list.d/frr.list")
    frr_install()
  return True


