156 lines
6.4 KiB
Diff

diff --git a/mkosi/installer/__init__.py b/mkosi/installer/__init__.py
index fa7418ae09a6..5d64801bbe52 100644
--- a/mkosi/installer/__init__.py
+++ b/mkosi/installer/__init__.py
@@ -157,7 +157,8 @@ class PackageManager:
@classmethod
def remove(cls, context: Context, packages: Sequence[str]) -> None:
- pass
+ raise NotImplementedError()
+ #pass
@classmethod
def sync(cls, context: Context, force: bool) -> None:
diff --git a/mkosi/installer/emerge.py b/mkosi/installer/emerge.py
index a6d9ce9b00ec..f6b243ad55d7 100644
--- a/mkosi/installer/emerge.py
+++ b/mkosi/installer/emerge.py
@@ -48,10 +48,10 @@ class Emerge(PackageManager):
def scripts(cls, context: Context) -> dict[str, list[PathString]]:
return {
"emerge": cls.apivfs_script_cmd(context) + cls.env_cmd(context) + cls.cmd(context),
- "mkosi-install": ["emerge"],
- "mkosi-upgrade": ["emerge", "--update"],
- "mkosi-remove": ["emerge", "--unmerge"],
- "mkosi-reinstall": ["emerge"],
+ "mkosi-install": ["--update"],
+ "mkosi-upgrade": ["--update", "--deep", "@world"],
+ "mkosi-remove": ["--unmerge", "--with-bdeps=y"],
+ "mkosi-reinstall": [],
}
# TODO: remove this if it's identical to super
@@ -126,8 +126,37 @@ class Emerge(PackageManager):
# "--ro-bind", cls.stage3 / "etc/xml", cls.installroot / "etc/xml",
# "--symlink", cls.installroot / "etc/xml", "/etc/xml",
+ #(context.root / "usr/share/openpgp-keys").mkdir(parents=True, exist_ok=True)
+ #(context.root / "usr/bin").mkdir(parents=True, exist_ok=True)
+ #copy_tree(
+ # cls.stage3 / "usr/share/openpgp-keys/gentoo-release.asc",
+ # context.root / "usr/share/openpgp-keys/gentoo-release.asc",
+ # dereference=True,
+ # sandbox=context.sandbox,
+ #)
+ #copy_tree(
+ # cls.stage3 / "usr/bin/getuto",
+ # context.root / "usr/bin/getuto",
+ # dereference=True,
+ # sandbox=context.sandbox,
+ #)
+
+ # Получаем путь назначения ВНУТРИ overlay/sandbox
+ sandbox_dest = context.root / "etc/portage/make.profile"
+
+ # Гарантируем существование родительского каталога
+# sandbox_dest_parent = sandbox_dest.parent
+# if not sandbox_dest_parent.exists():
+# print(f"Creating missing directory in sandbox: {sandbox_dest_parent}")
+# sandbox_dest_parent.mkdir(parents=True, exist_ok=True)
+
+# print("Destination dir contents:")
+# if sandbox_dest.exists():
+# for entry in sandbox_dest.iterdir():
+# print(entry, ":", "dir" if entry.is_dir() else "symlink" if entry.is_symlink() else "file")
+
# /etc/portage/make.profile is not a symlink and will probably prevent most merges.
- mounts += ["--symlink", (cls.stage3 / "etc/portage/make.profile").readlink(), cls.installroot / "etc/portage/make.profile"] # fmt: skip
+ #mounts += ["--symlink", (cls.stage3 / "etc/portage/make.profile").readlink(), cls.installroot / "etc/portage/make.profile"] # fmt: skip
return mounts
@@ -162,7 +191,7 @@ class Emerge(PackageManager):
if not (stage3_cache_dir / current).exists():
output_dir = stage3_cache_dir / current.parent
- with complete_step(f"Fetching the latest stage3 snapshot into {stage3_cache_dir / current}"):
+ with complete_step(f"Fetching the latest stage3 snapshot from {stage3_url} into {stage3_cache_dir / current}"):
for i in stage3_cache_dir.iterdir():
if i.is_dir() and i != output_dir:
rmtree(i)
@@ -221,18 +250,19 @@ class Emerge(PackageManager):
def cmd(cls, context: Context) -> list[PathString]:
return [
cls.executable(context.config),
- "--buildpkg=y",
+ #"--buildpkg=y",
"--usepkg=y",
- # "--getbinpkg=y",
- "--binpkg-respect-use=y",
+ "--usepkgonly=y",
+ #"--getbinpkg=y",
+ "--binpkg-respect-use=n",
"--jobs",
"--load-average",
"--root-deps=rdeps",
"--with-bdeps-auto=n",
"--verbose-conflicts",
"--noreplace",
- "--update",
- "--newuse",
+ #"--update",
+ #"--newuse",
*(["--verbose", "--quiet-fail=n"] if ARG_DEBUG.get() else ["--quiet-build", "--quiet"]),
f"--root={cls.installroot}",
]
@@ -298,11 +328,25 @@ class Emerge(PackageManager):
petition the upstream to ship git with stage3
""")
)
- # run(
- # ["emerge-webrsync", "--verbose"],
- # sandbox=cls.sandbox(context, apivfs=False),
- # env={'HOME': '/var/lib/portage/home'}
- # )
+ #run(
+ # ["emerge-webrsync", "--verbose"],
+ # sandbox=cls.sandbox(context, apivfs=False),
+ # env={'HOME': '/var/lib/portage/home'}
+ #)
+ #run(
+ # ["emerge", "sec-keys/openpgp-keys-gentoo-release"],
+ # sandbox=cls.sandbox(context, apivfs=False),
+ # env={'ROOT': cls.installroot}
+ #)
+ #run(
+ # ["getuto"],
+ # sandbox=cls.sandbox(context, apivfs=False)
+ #)
+ #run(
+ # ["ls", "-l", "/tmp/root/etc/portage"],
+ # sandbox=cls.sandbox(context, apivfs=False),
+ # env={'HOME': '/var/lib/portage/home'}
+ #)
if not force:
return
@@ -326,4 +370,16 @@ class Emerge(PackageManager):
*,
apivfs: bool = True,
) -> None:
- cls.invoke(context, cls.installroot, (), packages, apivfs=apivfs)
+ prefix = cls.scripts(context)["mkosi-install"]
+ cls.invoke(context, cls.installroot, packages, options=prefix, apivfs=apivfs)
+
+ @classmethod
+ def remove(
+ cls,
+ context: Context,
+ packages: Sequence[str],
+ *,
+ apivfs: bool = True,
+ ) -> None:
+ prefix = cls.scripts(context)["mkosi-remove"]
+ cls.invoke(context, cls.installroot, arguments=list(packages), options=prefix, apivfs=True)