|
|
|
@ -34,7 +34,8 @@ from calculate.lib.utils.files import (
|
|
|
|
|
makeDirectory, writeFile, readLinesFile, chmod, chown, FilePermission,
|
|
|
|
|
find, FindFileType, removeFileWithEmptyDirectory, check_rw,
|
|
|
|
|
tar_xz_directory, sha256sum,
|
|
|
|
|
copyWithPath, countFiles, listDirectory, getRunCommands, isMount, readFile)
|
|
|
|
|
copyWithPath, countFiles, listDirectory, getRunCommands, isMount, readFile,
|
|
|
|
|
DirectoryRCS, RCSError)
|
|
|
|
|
from calculate.lib.utils.git import Git
|
|
|
|
|
from calculate.builder.variables.action import Actions
|
|
|
|
|
from calculate.lib.utils.portage import (Layman, EmergeLog, EmergeLogNamedTask,
|
|
|
|
@ -1220,12 +1221,18 @@ class Builder(Update):
|
|
|
|
|
Выполнить сборку пакета
|
|
|
|
|
"""
|
|
|
|
|
deo = self.get_default_emerge_opts()
|
|
|
|
|
if "features-getbinpkg" in params:
|
|
|
|
|
env_update = {"FEATURES": "-getbinpkg"}
|
|
|
|
|
params = [x for x in params if x != "features-getbinpkg"]
|
|
|
|
|
else:
|
|
|
|
|
env_update = None
|
|
|
|
|
extra_params = [x for x in params if x.startswith("-")]
|
|
|
|
|
packages = [x for x in params if not x.startswith("-")]
|
|
|
|
|
logfile = self._get_log_file()
|
|
|
|
|
with EmergeParser(self.chrootize(builder_path, EmergeCommand(
|
|
|
|
|
packages, emerge_default_opts=deo,
|
|
|
|
|
extra_params=extra_params, use=use,
|
|
|
|
|
env_update=env_update,
|
|
|
|
|
logfile=logfile))) as emerge:
|
|
|
|
|
try:
|
|
|
|
|
emerge.question.action = lambda x: False
|
|
|
|
@ -1544,9 +1551,21 @@ class Builder(Update):
|
|
|
|
|
"""
|
|
|
|
|
deo = self.get_default_emerge_opts()
|
|
|
|
|
logfile = self._get_log_file()
|
|
|
|
|
# в случае использования base binhost
|
|
|
|
|
env_update = {}
|
|
|
|
|
if self.clVars.GetBool('cl_builder_binhost_base_set'):
|
|
|
|
|
env_update = {"PKGDIR": self.clVars.Get('cl_builder_pkgdir_stable'),
|
|
|
|
|
"FEATURES": "-getbinpkg"}
|
|
|
|
|
# удалить Packages файл, для того, чтобы он переформировался при
|
|
|
|
|
# следующем вызове emerge
|
|
|
|
|
index_fn = path.join(env_update['PKGDIR'], "Packages")
|
|
|
|
|
if path.exists(index_fn):
|
|
|
|
|
os.unlink(index_fn)
|
|
|
|
|
|
|
|
|
|
with EmergeParser(self.chrootize(builder_path, EmergeCommand(
|
|
|
|
|
["=%s" % x for x in packages] + ["@system"],
|
|
|
|
|
emerge_default_opts=deo,
|
|
|
|
|
env_update=env_update,
|
|
|
|
|
extra_params=["-pKve"], logfile=logfile))) as emerge:
|
|
|
|
|
try:
|
|
|
|
|
emerge.question.action = lambda x: False
|
|
|
|
@ -1700,8 +1719,9 @@ class Builder(Update):
|
|
|
|
|
if clear_req_pkgs:
|
|
|
|
|
try:
|
|
|
|
|
hide_packages(*clear_req_pkgs, prefix=builder_path)
|
|
|
|
|
|
|
|
|
|
self.emerge(builder_path, "-O", "=%s" % pkg)
|
|
|
|
|
# собрать пакет из исходников
|
|
|
|
|
self.emerge(builder_path, "features-getbinpkg",
|
|
|
|
|
"-O", "=%s" % pkg)
|
|
|
|
|
except EmergeError:
|
|
|
|
|
old_logfile = self._get_log_file()
|
|
|
|
|
pkg_path = str(pkg).replace("/", "_")
|
|
|
|
@ -1770,3 +1790,53 @@ class Builder(Update):
|
|
|
|
|
logfile=logfile))
|
|
|
|
|
dracut.execute()
|
|
|
|
|
return dracut.success()
|
|
|
|
|
|
|
|
|
|
def set_base_binhost(self, binhost):
|
|
|
|
|
"""
|
|
|
|
|
Использовать базовый бинарный хост
|
|
|
|
|
:param binhost:
|
|
|
|
|
:return:
|
|
|
|
|
"""
|
|
|
|
|
self.clVars.Write('cl_update_binhost', binhost)
|
|
|
|
|
self.clVars.Set('cl_update_package_cache_set', 'on')
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
def index_pkgdir(self, pkgdir, trunkdir, stabledir):
|
|
|
|
|
"""
|
|
|
|
|
Спрять pkgdir при использование base binhost, для корректного вычисления
|
|
|
|
|
зависимостей
|
|
|
|
|
:param pkgdir:
|
|
|
|
|
:param trunkdir:
|
|
|
|
|
:param stabledir:
|
|
|
|
|
:return:
|
|
|
|
|
"""
|
|
|
|
|
drcs = DirectoryRCS(pkgdir, trunkdir, stabledir)
|
|
|
|
|
if drcs.not_prepared():
|
|
|
|
|
try:
|
|
|
|
|
drcs.fixing()
|
|
|
|
|
except RCSError as e:
|
|
|
|
|
raise BuilderError(
|
|
|
|
|
_("Failed to update trunk binaries: %s") % str(e))
|
|
|
|
|
else:
|
|
|
|
|
try:
|
|
|
|
|
drcs.indexing()
|
|
|
|
|
except RCSError as e:
|
|
|
|
|
raise BuilderError(
|
|
|
|
|
_("Failed to prepare stable binaries: %s") % str(e))
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
def fix_pkgdir(self, pkgdir, trunkdir, stabledir):
|
|
|
|
|
"""
|
|
|
|
|
Зафиксировать изменения по собранным бинарным пакетам
|
|
|
|
|
:param pkgdir:
|
|
|
|
|
:param trunkdir:
|
|
|
|
|
:param stabledir:
|
|
|
|
|
:return:
|
|
|
|
|
"""
|
|
|
|
|
try:
|
|
|
|
|
drcs = DirectoryRCS(pkgdir, trunkdir, stabledir)
|
|
|
|
|
drcs.fixing()
|
|
|
|
|
except RCSError as e:
|
|
|
|
|
raise BuilderError(
|
|
|
|
|
_("Failed to merge prepared binaries: %s") % str(e))
|
|
|
|
|
return True
|
|
|
|
|