From 2e1f666adf95327906188e958342181c502c49c6 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 19 Nov 2020 13:34:03 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BC=D0=B5=D0=BD=D0=BD?= =?UTF-8?q?=D1=8B=D0=B5:?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * main.cl.ebuild_phase - возвращающая текущую фазу сборки пакета * main.cl.chroot_status - определение запуска утилит происходит с использованием chroot или нет * main.cl.system_boot_set - определение происходит загрузка системы или нет --- calculate/vars/main/cl/__init__.py | 33 ++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 calculate/vars/main/cl/__init__.py diff --git a/calculate/vars/main/cl/__init__.py b/calculate/vars/main/cl/__init__.py new file mode 100644 index 0000000..18213e9 --- /dev/null +++ b/calculate/vars/main/cl/__init__.py @@ -0,0 +1,33 @@ +import os +from calculate.utils.fs import readFile +from calculate.variables.datavars import Variable, Namespace, Dependence, \ + StringType, BooleanType, Calculate + +def get_ebuild_phase(): + return os.environ.get("EBUILD_PHASE", "") + +def get_chroot_status(): + """Detect chroot mode by different mountinfo""" + pid = os.getpid() + try: + if not os.access('/proc/self/mountinfo', R_OK) or \ + not os.access('/proc/1/mountinfo', R_OK): + return False + infos = [readFile(x) for x in ('/proc/1/mountinfo', + '/proc/self/mountinfo')] + return infos[0] != infos[1] + except Exception: + return False + +def is_system_boot(): + if os.readlink('/proc/self/fd/0') == '/dev/console': + return True + else: + return False + +Variable("ebuild_phase", type=StringType, + source=Calculate(get_ebuild_phase)) +Variable("chroot_status", type=BooleanType, + source=Calculate(get_chroot_status)) +Variable("system_boot_set", type=BooleanType, + source=Calculate(is_system_boot))