Install
Install
/usr/bin/python
# -*- coding: utf-8 -*-
import subprocess, os, random, string, sys, shutil, socket, zipfile, urllib2
from itertools import cycle, izip
from zipfile import ZipFile
rDownloadURL = {"main":
"https://bitbucket.org/emre1393/xtreamui_mirror/downloads/main_xtreamcodes_reborn.t
ar.gz", "sub":
"https://bitbucket.org/emre1393/xtreamui_mirror/downloads/sub_xtreamcodes_reborn.ta
r.gz"}
rPackages = ["libcurl3", "libxslt1-dev", "libgeoip-dev", "e2fsprogs", "wget",
"mcrypt", "nscd", "htop", "zip", "unzip", "mc", "libjemalloc1", "python-paramiko",
"mysql-server"]
rInstall = {"MAIN": "main", "LB": "sub"}
rMySQLCnf =
"IyBYdHJlYW0gQ29kZXMKCltjbGllbnRdCnBvcnQgICAgICAgICAgICA9IDMzMDYKCltteXNxbGRfc2FmZV
0KbmljZSAgICAgICAgICAgID0gMAoKW215c3FsZF0KZGVmYXVsdC1hdXRoZW50aWNhdGlvbi1wbHVnaW49b
XlzcWxfbmF0aXZlX3Bhc3N3b3JkCnVzZXIgICAgICAgICAgICA9IG15c3FsCnBvcnQgICAgICAgICAgICA9
IDc5OTkKYmFzZWRpciAgICAgICAgID0gL3VzcgpkYXRhZGlyICAgICAgICAgPSAvdmFyL2xpYi9teXNxbAp
0bXBkaXIgICAgICAgICAgPSAvdG1wCgpsYy1tZXNzYWdlcy1kaXIgPSAvdXNyL3NoYXJlL215c3FsCnNraX
AtZXh0ZXJuYWwtbG9ja2luZwpza2lwLW5hbWUtcmVzb2x2ZT0xCgpiaW5kLWFkZHJlc3MgICAgICAgICAgI
CA9ICoKCmtleV9idWZmZXJfc2l6ZSA9IDEyOE0KbXlpc2FtX3NvcnRfYnVmZmVyX3NpemUgPSA0TQptYXhf
YWxsb3dlZF9wYWNrZXQgICAgICA9IDY0TQpteWlzYW0tcmVjb3Zlci1vcHRpb25zID0gQkFDS1VQCm1heF9
sZW5ndGhfZm9yX3NvcnRfZGF0YSA9IDgxOTIKcXVlcnlfY2FjaGVfbGltaXQgPSAwCnF1ZXJ5X2NhY2hlX3
NpemUgPSAwCnF1ZXJ5X2NhY2hlX3R5cGUgPSAwCgpleHBpcmVfbG9nc19kYXlzID0gMTAKI2JpbmxvZ19le
HBpcmVfbG9nc19zZWNvbmRzID0gODY0MDAwCm1heF9iaW5sb2dfc2l6ZSA9IDEwME0KdHJhbnNhY3Rpb25f
aXNvbGF0aW9uID0gUkVBRC1DT01NSVRURUQKbWF4X2Nvbm5lY3Rpb25zICA9IDEwMDAwCm9wZW5fZmlsZXN
fbGltaXQgPSAxMDI0MAppbm5vZGJfb3Blbl9maWxlcyA9MTAyNDAKbWF4X2Nvbm5lY3RfZXJyb3JzID0gND
A5Ngp0YWJsZV9vcGVuX2NhY2hlID0gNDA5Ngp0YWJsZV9kZWZpbml0aW9uX2NhY2hlID0gNDA5Ngp0bXBfd
GFibGVfc2l6ZSA9IDFHCm1heF9oZWFwX3RhYmxlX3NpemUgPSAxRwptYXhfZXhlY3V0aW9uX3RpbWUgPSAw
CmJhY2tfbG9nID0gNDA5NgoKaW5ub2RiX2J1ZmZlcl9wb29sX3NpemUgPSA4Rwppbm5vZGJfYnVmZmVyX3B
vb2xfaW5zdGFuY2VzID0gOAppbm5vZGJfcmVhZF9pb190aHJlYWRzID0gNjQKaW5ub2RiX3dyaXRlX2lvX3
RocmVhZHMgPSA2NAppbm5vZGJfdGhyZWFkX2NvbmN1cnJlbmN5ID0gMAppbm5vZGJfZmx1c2hfbG9nX2F0X
3RyeF9jb21taXQgPSAwCmlubm9kYl9mbHVzaF9tZXRob2QgPSBPX0RJUkVDVApwZXJmb3JtYW5jZV9zY2hl
bWEgPSAwCmlubm9kYi1maWxlLXBlci10YWJsZSA9IDEKaW5ub2RiX2lvX2NhcGFjaXR5ID0gMTAwMDAKaW5
ub2RiX3RhYmxlX2xvY2tzID0gMAppbm5vZGJfbG9ja193YWl0X3RpbWVvdXQgPSAwCmlubm9kYl9kZWFkbG
9ja19kZXRlY3QgPSAwCmlubm9kYl9sb2dfZmlsZV9zaXplID0gMUcKCnNxbC1tb2RlPSJOT19FTkdJTkVfU
1VCU1RJVFVUSU9OIgoKCltteXNxbGR1bXBdCnF1aWNrCnF1b3RlLW5hbWVzCm1heF9hbGxvd2VkX3BhY2tl
dCAgICAgID0gMTI4TQpjb21wbGV0ZS1pbnNlcnQKCltteXNxbF0KCltpc2FtY2hrXQprZXlfYnVmZmVyX3N
pemUgICAgICAgICAgICAgID0gMTZN==".decode("base64")
rMySQLServiceFile =
"IyBNeVNRTCBzeXN0ZW1kIHNlcnZpY2UgZmlsZQoKW1VuaXRdCkRlc2NyaXB0aW9uPU15U1FMIENvbW11bm
l0eSBTZXJ2ZXIKQWZ0ZXI9bmV0d29yay50YXJnZXQKCltJbnN0YWxsXQpXYW50ZWRCeT1tdWx0aS11c2VyL
nRhcmdldAoKW1NlcnZpY2VdClR5cGU9Zm9ya2luZwpVc2VyPW15c3FsCkdyb3VwPW15c3FsClBJREZpbGU9
L3J1bi9teXNxbGQvbXlzcWxkLnBpZApQZXJtaXNzaW9uc1N0YXJ0T25seT10cnVlCkV4ZWNTdGFydFByZT0
vdXNyL3NoYXJlL215c3FsL215c3FsLXN5c3RlbWQtc3RhcnQgcHJlCkV4ZWNTdGFydD0vdXNyL3NiaW4vbX
lzcWxkIC0tZGFlbW9uaXplIC0tcGlkLWZpbGU9L3J1bi9teXNxbGQvbXlzcWxkLnBpZCAtLW1heC1leGVjd
XRpb24tdGltZT0wCkVudmlyb25tZW50RmlsZT0tL2V0Yy9teXNxbC9teXNxbGQKVGltZW91dFNlYz02MDAK
UmVzdGFydD1vbi1mYWlsdXJlClJ1bnRpbWVEaXJlY3Rvcnk9bXlzcWxkClJ1bnRpbWVEaXJlY3RvcnlNb2R
lPTc1NQpMaW1pdE5PRklMRT01MDAw==".decode("base64")
# i am lazy to prepare echo versions with escaped characters, use base64
decode/encode to read or change these.
rVersions = {
"16.04": "xenial",
"18.04": "bionic"
}
class col:
HEADER = '\033[95m'
OKBLUE = '\033[94m'
OKGREEN = '\033[92m'
WARNING = '\033[93m'
FAIL = '\033[91m'
YELLOW = '\033[33m'
ENDC = '\033[0m'
BOLD = '\033[1m'
UNDERLINE = '\033[4m'
def getIP():
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("8.8.8.8", 80))
return s.getsockname()[0]
def getVersion():
try: return subprocess.check_output("lsb_release -d".split()).split(":")[-
1].strip()
except: return ""
def prepare(rType="MAIN"):
global rPackages
if rType <> "MAIN": rPackages = rPackages[:-3]
printc("Preparing Installation")
for rFile in ["/var/lib/dpkg/lock-frontend", "/var/cache/apt/archives/lock",
"/var/lib/dpkg/lock"]:
try: os.remove(rFile)
except: pass
os.system("apt-get update > /dev/null")
printc("Removing libcurl4 if installed")
os.system("apt-get remove --auto-remove libcurl4 -y > /dev/null")
for rPackage in rPackages:
printc("Installing %s" % rPackage)
os.system("apt-get install %s -y > /dev/null" % rPackage)
printc("Installing libpng")
os.system("wget -q -O /tmp/libpng12.deb
http://mirrors.kernel.org/ubuntu/pool/main/libp/libpng/libpng12-0_1.2.54-
1ubuntu1_amd64.deb")
os.system("dpkg -i /tmp/libpng12.deb > /dev/null")
os.system("apt-get install -y > /dev/null") # Clean up above
try: os.remove("/tmp/libpng12.deb")
except: pass
try:
subprocess.check_output("getent passwd xtreamcodes > /dev/null".split())
except:
# Create User
printc("Creating user xtreamcodes")
os.system("adduser --system --shell /bin/false --group --disabled-login
xtreamcodes > /dev/null")
if not os.path.exists("/home/xtreamcodes"): os.mkdir("/home/xtreamcodes")
return True
def install(rType="MAIN"):
global rInstall, rDownloadURL
printc("Downloading Software")
try: rURL = rDownloadURL[rInstall[rType]]
except:
printc("Invalid download URL!", col.FAIL)
return False
os.system('wget -q -O "/tmp/xtreamcodes.tar.gz" "%s"' % rURL)
if os.path.exists("/tmp/xtreamcodes.tar.gz"):
printc("Installing Software")
if os.path.exists("/home/xtreamcodes/iptv_xtream_codes/GeoLite2.mmdb"):
os.system('chattr -f -i
/home/xtreamcodes/iptv_xtream_codes/GeoLite2.mmdb > /dev/null')
os.system('tar -zxvf "/tmp/xtreamcodes.tar.gz" -C "/home/xtreamcodes/" >
/dev/null')
try: os.remove("/tmp/xtreamcodes.tar.gz")
except: pass
return True
printc("Failed to download installation file!", col.FAIL)
return False
def installadminpanel():
rURL =
"https://bitbucket.org/emre1393/xtreamui_mirror/downloads/release_22f.zip"
printc("Downloading Admin Panel")
os.system('wget -q -O "/tmp/update.zip" "%s"' % rURL)
if os.path.exists("/tmp/update.zip"):
try: is_ok = zipfile.ZipFile("/tmp/update.zip")
except:
printc("Invalid link or zip file is corrupted!", col.FAIL)
os.remove("/tmp/update.zip")
return False
printc("Installing Admin Panel")
os.system('unzip -o /tmp/update.zip -d /tmp/update/ > /dev/null && cp -rf
/tmp/update/XtreamUI-master/* /home/xtreamcodes/iptv_xtream_codes/ > /dev/null &&
rm -rf /tmp/update/XtreamUI-master > /dev/null && rm -rf /tmp/update > /dev/null &&
chown -R xtreamcodes:xtreamcodes /home/xtreamcodes > /dev/null')
try: os.remove("/tmp/update.zip")
except: pass
rURL2 = "https://bitbucket.org/emre1393/xtreamui_mirror/downloads/newstuff.zip"
printc("Downloading New Stuff for Admin Panel")
os.system('wget -q -O "/tmp/update2.zip" "%s"' % rURL2)
if os.path.exists("/tmp/update2.zip"):
try: is_ok = zipfile.ZipFile("/tmp/update2.zip")
except:
printc("Invalid link or zip file is corrupted!", col.FAIL)
os.remove("/tmp/update2.zip")
return False
printc("Installing New Stuff for Admin Panel")
os.system('unzip -o /tmp/update2.zip -d /tmp/update2/ > /dev/null && cp -rf
/tmp/update2/* /home/xtreamcodes/iptv_xtream_codes/ > /dev/null && rm -rf
/tmp/update2/* > /dev/null && rm -rf /tmp/update2 > /dev/null && chown -R
xtreamcodes:xtreamcodes /home/xtreamcodes/ > /dev/null > /dev/null')
return True
printc("Failed to download installation file!", col.FAIL)
return False
def start(first=True):
if first: printc("Starting Xtream Codes")
else: printc("Restarting Xtream Codes")
os.system("/home/xtreamcodes/iptv_xtream_codes/start_services.sh > /dev/null")
if __name__ == "__main__":