You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
108 lines
3.6 KiB
108 lines
3.6 KiB
# -*- coding: utf-8 -*-
|
|
|
|
# Copyright 2017 Mir Calculate. http://www.calculate-linux.org
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
import sys
|
|
from calculate.lib.utils.files import grepFile
|
|
from calculate.lib.utils.tools import cached
|
|
from os import path
|
|
|
|
_ = lambda x: x
|
|
from calculate.lib.cl_lang import setLocalTranslate
|
|
|
|
setLocalTranslate('cl_lib3', sys.modules[__name__])
|
|
|
|
class X86(object):
|
|
def __init__(self, rootdn):
|
|
self.rootdn = rootdn
|
|
self.usrlib = path.join(rootdn, "usr/lib")
|
|
self.lib = path.join(rootdn, "lib")
|
|
self.cusrlib = path.join(rootdn, "usr/lib")
|
|
self.clib = path.join(rootdn, "lib")
|
|
self.libmodules = path.join(rootdn, "lib/modules")
|
|
self.pythonsite = path.join(rootdn, "usr/lib/python2.7/site-packages")
|
|
self.libopengl = path.join(rootdn, "usr/lib/opengl")
|
|
|
|
class Amd64(object):
|
|
def __init__(self, rootdn):
|
|
self.rootdn = rootdn
|
|
self.usrlib = path.join(rootdn, "usr/lib64")
|
|
self.lib = path.join(rootdn, "lib64")
|
|
self.cusrlib = path.join(rootdn, "usr/lib")
|
|
self.clib = path.join(rootdn, "lib")
|
|
self.libmodules = path.join(rootdn, "lib/modules")
|
|
self.pythonsite = path.join(rootdn, "usr/lib64/python2.7/site-packages")
|
|
self.libopengl = path.join(rootdn, "usr/lib64/opengl")
|
|
|
|
@cached(each_instance=True)
|
|
def SystemPath(rootdn):
|
|
lib64path = path.join(rootdn, "lib64")
|
|
libpath = path.join(rootdn, "lib")
|
|
if path.exists(lib64path):
|
|
return Amd64(rootdn)
|
|
else:
|
|
return X86(rootdn)
|
|
|
|
|
|
class SystemType(object):
|
|
"""
|
|
Тип контейнера текущей системы
|
|
"""
|
|
Uml = "uml"
|
|
VServer = "vserver"
|
|
OpenVZ = "openvz"
|
|
LXC = "lxc"
|
|
Docker = "docker"
|
|
Xen0 = "xen0"
|
|
XenU = "xenU"
|
|
Rkt = "rkt"
|
|
SystemdNSpawn = "systemd-nspawn"
|
|
NotDetected = ""
|
|
|
|
@classmethod
|
|
def detect_container(cls):
|
|
if grepFile("/proc/cpuinfo", "UML"):
|
|
return cls.Uml
|
|
elif grepFile("/proc/self/status",
|
|
"(s_context|VxID):\s*[1-9]"):
|
|
return cls.VServer
|
|
elif (path.exists("/proc/vz/veinfo")
|
|
and not path.exists("/proc/vz/version")):
|
|
return cls.OpenVZ
|
|
elif grepFile("/proc/self/status", "envID:\s*[1-9]"):
|
|
return cls.OpenVZ #old test
|
|
elif grepFile("/proc/1/environ", "container=lxc"):
|
|
return cls.LXC
|
|
elif grepFile("/proc/1/environ", "container=rkt"):
|
|
return cls.Rkt
|
|
elif grepFile("/proc/1/environ", "container=systemd-nspawn"):
|
|
return cls.SystemdNSpawn
|
|
elif path.exists("/.dockerenv"):
|
|
return cls.Docker
|
|
elif grepFile("/proc/1/environ", "container=docker"):
|
|
return cls.Docker
|
|
return cls.NotDetected
|
|
|
|
@classmethod
|
|
def detect_vm(cls):
|
|
if path.exists("/proc/xen"):
|
|
if grepFile("/proc/xen/capabilities", "control_d"):
|
|
return cls.Xen0
|
|
return cls.XenU
|
|
return cls.NotDetected
|
|
|
|
@classmethod
|
|
def detect(cls):
|
|
return cls.detect_container() or cls.detect_vm()
|