156 lines
6.4 KiB
Diff
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)
|