Added Windows
parent
e9c03c6c11
commit
ca71c554b4
|
@ -0,0 +1,41 @@
|
||||||
|
# Documentation
|
||||||
|
|
||||||
|
This is more a techincal documentation that how to use this tool.
|
||||||
|
|
||||||
|
# Install
|
||||||
|
|
||||||
|
Please refer to the README file,all install steps are described.
|
||||||
|
|
||||||
|
## Pipx
|
||||||
|
|
||||||
|
Not refered in the install, but you can pipx for you install.
|
||||||
|
|
||||||
|
# Virtual Server Creation
|
||||||
|
|
||||||
|
##List os update
|
||||||
|
|
||||||
|
##Linux
|
||||||
|
|
||||||
|
##Windows
|
||||||
|
|
||||||
|
Windows OS will need some extra-drivers to run.
|
||||||
|
For this during the install, the VM will mal a virtuo-win iso with all drivers.
|
||||||
|
|
||||||
|
Virtuo can be found here :
|
||||||
|
https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/?C=M;O=D
|
||||||
|
|
||||||
|
This iso is on ./storage/win/ and configured in **config.py** for upgrade.
|
||||||
|
|
||||||
|
Tested Windows Install:
|
||||||
|
Curent testing :
|
||||||
|
Windows Server 2022
|
||||||
|
Windows 11
|
||||||
|
Validate for :
|
||||||
|
Windows 8, 8,1 10
|
||||||
|
Windows Server 2019
|
||||||
|
Failed with :
|
||||||
|
Windows 98, Windows XP
|
||||||
|
Never Tested :
|
||||||
|
Win 7 and Vista
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
# Hype²
|
# Hype²
|
||||||
|
|
||||||
|
Now compatible with Windows Install, just take care to lauch the driver before scanning disks.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
53
app.py
53
app.py
|
@ -1,6 +1,7 @@
|
||||||
import os
|
import os
|
||||||
import json
|
import json
|
||||||
import requests
|
import requests
|
||||||
|
import subprocess
|
||||||
from flask import Flask , redirect , render_template, request, Response, stream_with_context, url_for, make_response, flash
|
from flask import Flask , redirect , render_template, request, Response, stream_with_context, url_for, make_response, flash
|
||||||
from werkzeug.utils import secure_filename
|
from werkzeug.utils import secure_filename
|
||||||
from flask_sqlalchemy import SQLAlchemy
|
from flask_sqlalchemy import SQLAlchemy
|
||||||
|
@ -183,11 +184,6 @@ def delvol():
|
||||||
## VNC ##
|
## VNC ##
|
||||||
############################
|
############################
|
||||||
|
|
||||||
####### TEST
|
|
||||||
|
|
||||||
|
|
||||||
####### ENDTEST
|
|
||||||
|
|
||||||
@app.route('/vnc',methods=['GET','POST',"DELETE"])
|
@app.route('/vnc',methods=['GET','POST',"DELETE"])
|
||||||
@login_required
|
@login_required
|
||||||
def vnc_connect():
|
def vnc_connect():
|
||||||
|
@ -208,29 +204,6 @@ def vnc_connect():
|
||||||
response = Response(resp.content, resp.status_code, headers)
|
response = Response(resp.content, resp.status_code, headers)
|
||||||
return response
|
return response
|
||||||
|
|
||||||
##TEST
|
|
||||||
@app.route('/ter',methods=['GET','POST',"DELETE"])
|
|
||||||
@login_required
|
|
||||||
def ter_connect():
|
|
||||||
if request.method=='GET':
|
|
||||||
resp = requests.get('http://localhost:5008/')
|
|
||||||
excluded_headers = ['content-encoding', 'content-length', 'transfer-encoding', 'connection']
|
|
||||||
headers = [(name, value) for (name, value) in resp.raw.headers.items() if name.lower() not in excluded_headers]
|
|
||||||
response = Response(resp.content, resp.status_code, headers)
|
|
||||||
return response
|
|
||||||
elif request.method=='POST':
|
|
||||||
resp = requests.post('http://localhost:5008/',json=request.get_json())
|
|
||||||
excluded_headers = ['content-encoding', 'content-length', 'transfer-encoding', 'connection']
|
|
||||||
headers = [(name, value) for (name, value) in resp.raw.headers.items() if name.lower() not in excluded_headers]
|
|
||||||
response = Response(resp.content, resp.status_code, headers)
|
|
||||||
return response
|
|
||||||
elif request.method=='DELETE':
|
|
||||||
resp = requests.delete('http://localhost:5008/').content
|
|
||||||
response = Response(resp.content, resp.status_code, headers)
|
|
||||||
return response
|
|
||||||
|
|
||||||
|
|
||||||
##ENDTEST
|
|
||||||
@app.route('/console_lxc',methods=['GET','POST','DELETE'])
|
@app.route('/console_lxc',methods=['GET','POST','DELETE'])
|
||||||
@login_required
|
@login_required
|
||||||
def consolelxc():
|
def consolelxc():
|
||||||
|
@ -438,7 +411,28 @@ def create_VM():
|
||||||
iso = iso_path+iso
|
iso = iso_path+iso
|
||||||
net = request.form['net']
|
net = request.form['net']
|
||||||
disk = request.form['disk']
|
disk = request.form['disk']
|
||||||
creationcmd='--name '+str(nom)+' --ram '+str(ram)+' --disk pool=default,size='+str(disk)+',bus=virtio,format=qcow2 --vcpus '+str(cpu)+' --os-type linux --os-variant '+str(ose)+' --network network:bridged --graphics vnc,listen=0.0.0.0 --noautoconsole --console pty,target_type=serial --cdrom '+str(iso)+' --force --debug '
|
opt = ''
|
||||||
|
ostype = 'linux'
|
||||||
|
|
||||||
|
####################################
|
||||||
|
## WIN ##
|
||||||
|
####################################
|
||||||
|
|
||||||
|
if ose.startswith('win'):
|
||||||
|
try:
|
||||||
|
cmd = "qemu-img create -f qcow2 "+str(virtuo_path)+str(nom)+".qcow2 "+str(disk)+"G"
|
||||||
|
subprocess.call(cmd, shell=True)
|
||||||
|
except Exception as e:
|
||||||
|
flash('Error on creating '+str(nom)+':'+str(e),category='danger')
|
||||||
|
return redirect(url_for('state'))
|
||||||
|
opt = " --disk path="+virtuo_path+"virtio-win-0.1.229.iso,device=cdrom"
|
||||||
|
ostype = 'windows'
|
||||||
|
diskpath = " --disk path="+str(virtuo_path)+str(nom)+".qcow2,size="+str(disk)+",bus=virtio"
|
||||||
|
creationcmd='--name '+str(nom)+' --ram '+str(ram)+' --disk path='+str(virtuo_path)+str(nom)+'.qcow2,bus=virtio,format=qcow2 --vcpus '+str(cpu)+' --os-type '+str(ostype)+' --os-variant '+str(ose)+' --network network:bridged --graphics vnc,listen=0.0.0.0 --noautoconsole --console pty,target_type=serial '+opt+' --cdrom '+str(iso)+' --force --debug '
|
||||||
|
print("OS WINDOWS:"+creationcmd)
|
||||||
|
else:
|
||||||
|
creationcmd='--name '+str(nom)+' --ram '+str(ram)+' --disk pool=default,size='+str(disk)+',bus=virtio,format=qcow2 --vcpus '+str(cpu)+' --os-type '+str(ostype)+' --os-variant '+str(ose)+' --network network:bridged --graphics vnc,listen=0.0.0.0 --noautoconsole --console pty,target_type=serial '+opt+' --cdrom '+str(iso)+' --force --debug '
|
||||||
|
print("OS LINUX:"+creationcmd)
|
||||||
try:
|
try:
|
||||||
os.system('virt-install '+creationcmd+' ')
|
os.system('virt-install '+creationcmd+' ')
|
||||||
flash(str(nom)+' created', category='success')
|
flash(str(nom)+' created', category='success')
|
||||||
|
@ -446,6 +440,7 @@ def create_VM():
|
||||||
flash('Error on creating '+str(nom)+':'+str(e),category='danger')
|
flash('Error on creating '+str(nom)+':'+str(e),category='danger')
|
||||||
return redirect(url_for('state'))
|
return redirect(url_for('state'))
|
||||||
|
|
||||||
|
|
||||||
############################
|
############################
|
||||||
## STATE ##
|
## STATE ##
|
||||||
############################
|
############################
|
||||||
|
|
Loading…
Reference in New Issue