]> git.ipfire.org Git - thirdparty/mkosi.git/commitdiff
gentoo: drop portage dependency
authorPaymon MARANDI <Paymon MARANDI darwinskernel@gmail.com>
Thu, 25 May 2023 14:22:55 +0000 (10:22 -0400)
committerPaymon MARANDI <darwinskernel@gmail.com>
Fri, 23 Jun 2023 13:31:40 +0000 (09:31 -0400)
Signed-off-by: Paymon MARANDI <darwinskernel@gmail.com>
.github/workflows/ci.yml
mkosi/distributions/gentoo.py

index 8a1c232304294e57908cfc6116e38b66ee85cadd..070ee0652285eab4f0bd22ceeec66fff98c94808 100644 (file)
@@ -134,36 +134,6 @@ jobs:
     - name: Install dependencies
       run: sudo apt-get update && sudo apt-get install --no-install-recommends python3-pexpect python3-pytest
 
-    - name: Install Gentoo dependencies (portage)
-      if: matrix.distro == 'gentoo'
-      run: |
-        sudo tee /usr/lib/sysusers.d/acct-user-portage.conf > /dev/null <<- EOF
-        # /usr/lib/sysusers.d/portage.conf
-        u portage - "Portage system user" /var/lib/portage/home -
-        EOF
-        sudo systemd-sysusers --no-pager
-
-        sudo install --owner=portage --group=portage --mode=0755 --directory /var/db/repos
-        sudo install --owner=portage --group=portage --mode=0755 --directory /etc/portage/repos.conf
-        sudo install --owner=portage --group=portage --mode=0755 --directory /var/cache/binpkgs
-        sudo tee /etc/portage/repos.conf/eselect-repo.conf > /dev/null <<- EOF
-        [gentoo]
-        location = /var/db/repos/gentoo
-        sync-type = git
-        sync-uri = https://anongit.gentoo.org/git/repo/gentoo.git
-        EOF
-
-        git clone https://anongit.gentoo.org/git/proj/portage.git --depth=1
-        cd portage
-        tee setup.cfg > /dev/null <<- EOF
-        [build_ext]
-        portage-ext-modules=true
-        EOF
-
-        sudo python setup.py install
-
-        sudo ln -s --relative /var/db/repos/gentoo/profiles/default/linux/amd64/17.1/no-multilib/systemd/merged-usr /etc/portage/make.profile
-
     # Do a manual install so we have the latest changes from the pull request available.
     - name: Install
       run: sudo python3 -m pip install ..
index f728111ba5e5063dacfb865c8b51d7aaa1f0569b..fad957163fe5c9157c7787bf53d924ea29e67da9 100644 (file)
@@ -1,6 +1,5 @@
 # SPDX-License-Identifier: LGPL-2.1+
 
-import logging
 import os
 import re
 import urllib.parse
@@ -65,6 +64,15 @@ def invoke_emerge(
                           env=env)
 
 
+@dataclass
+class GentooConstants:
+    gentoo_mirrors: str
+    portdir: Path
+    binrepos_conf_file: Path
+    ebuild_sh_env_dir: Path
+    user_config_path: Path
+
+
 @dataclass
 class GentooAtoms:
     stage2: List[str]
@@ -77,7 +85,7 @@ class Gentoo:
     arch_profile: Path
     arch: str
     emerge_vars: dict[str, str]
-    portage_cfg_dir: Path
+    user_config_path: Path
     root: Path
     stage3_cache: Path
     stage3_tar_path: Path
@@ -102,6 +110,13 @@ class Gentoo:
         ],
         system=["@system"]
     )
+    portage_consts: GentooConstants = GentooConstants(
+        gentoo_mirrors="http://distfiles.gentoo.org",
+        portdir=Path("/var/db/repos/gentoo"),
+        binrepos_conf_file=Path("etc/portage/binrepos.conf"),
+        ebuild_sh_env_dir=Path("etc/portage/env"),
+        user_config_path=Path("etc/portage")
+    )
 
     EMERGE_UPDATE_OPTS = [
         "--update",
@@ -136,80 +151,17 @@ class Gentoo:
         "noinfo",
     ]
 
-    @staticmethod
-    def try_import_portage() -> dict[str, str]:
-        NEED_PORTAGE_MSG = "You need portage(5) for Gentoo"
-        PORTAGE_INSTALL_INSTRUCTIONS = """\
-        # Following is known to work on most systemd-based systems:
-        sudo tee /usr/lib/sysusers.d/acct-user-portage.conf > /dev/null <<- EOF
-        # /usr/lib/sysusers.d/portage.conf
-        u portage - "Portage system user" /var/lib/portage/home -
-        EOF
-
-        sudo systemd-sysusers --no-pager
-
-        sudo install --owner=portage --group=portage --mode=0755 --directory /var/db/repos
-        sudo install --owner=portage --group=portage --mode=0755 --directory /etc/portage/repos.conf
-        sudo install --owner=portage --group=portage --mode=0755 --directory /var/cache/binpkgs
-
-        sudo tee /etc/portage/repos.conf/eselect-repo.conf > /dev/null <<- EOF
-        [gentoo]
-        location = /var/db/repos/gentoo
-        sync-type = git
-        sync-uri = https://anongit.gentoo.org/git/repo/gentoo.git
-        EOF
-
-        git clone https://anongit.gentoo.org/git/proj/portage.git --depth=1
-        cd portage
-        tee setup.cfg > /dev/null <<- EOF
-        [build_ext]
-        portage-ext-modules=true
-        EOF
-
-        python setup.py build_ext --inplace --portage-ext-modules
-
-        sudo python setup.py install
-
-        sudo ln -s --relative \
-            /var/db/repos/gentoo/profiles/default/linux/amd64/17.1/no-multilib/systemd/merged-usr \
-            /etc/portage/make.profile
-        """
-        try:
-            from portage.const import (  # type: ignore
-                BINREPOS_CONF_FILE,
-                EBUILD_SH_ENV_DIR,
-                USER_CONFIG_PATH,
-            )
-        except ImportError as e:
-            logging.warn(NEED_PORTAGE_MSG)
-            logging.info(PORTAGE_INSTALL_INSTRUCTIONS)
-            raise e
-
-        return dict(ebuild_sh_env_dir=EBUILD_SH_ENV_DIR,
-                    portage_cfg_dir=USER_CONFIG_PATH,
-                    binrepos_conf_file=BINREPOS_CONF_FILE)
-
     def __init__(self, state: MkosiState) -> None:
         # TOCLEANUP: legacy namig, to be cleaned up
         self.state = state
         self.config = self.state.config
         self.root = self.state.root
-        self.portage_consts = self.try_import_portage()
-
-        from portage.package.ebuild.config import config as portage_cfg  # type: ignore
-
-        self.portage_cfg = portage_cfg()
-
-        PORTAGE_MISCONFIGURED_MSG = "Missing defaults for portage, bailing out"
-        # we check for PORTDIR, but we could check for any other one
-        if self.portage_cfg['PORTDIR'] is None:
-            die(PORTAGE_MISCONFIGURED_MSG)
 
         self.arch, _ = state.installer.architecture(state.config.architecture)
         self.arch_profile = Path(f"default/linux/{self.arch}/{state.config.release}/no-multilib/systemd/merged-usr")
         self.get_current_stage3()
 
-        self.portage_cfg_dir = self.stage3_cache / self.portage_consts["portage_cfg_dir"]
+        self.user_config_path = self.stage3_cache / self.portage_consts.user_config_path
 
         self.emerge_vars = {
             "FEATURES": " ".join(self.portage_features),
@@ -230,7 +182,7 @@ class Gentoo:
 
         # http://distfiles.gentoo.org/releases/amd64/autobuilds/latest-stage3.txt
         stage3tsf_path_url = urllib.parse.urljoin(
-            self.portage_cfg["GENTOO_MIRRORS"].partition(" ")[0],
+            self.portage_consts.gentoo_mirrors.partition(" ")[0],
             f"releases/{self.arch}/autobuilds/latest-stage3.txt",
         )
 
@@ -255,7 +207,7 @@ class Gentoo:
 
     def fetch_fix_stage3(self) -> None:
         stage3_url_path = urllib.parse.urljoin(
-            self.portage_cfg["GENTOO_MIRRORS"],
+            self.portage_consts.gentoo_mirrors,
             f"releases/{self.arch}/autobuilds/{self.stage3_tar}",
         )
         if not self.stage3_tar_path.is_file():
@@ -288,7 +240,7 @@ class Gentoo:
                 self.mkosi_conf()
 
     def set_useflags(self) -> None:
-        package_use = self.portage_cfg_dir / "package.use"
+        package_use = self.user_config_path / "package.use"
         package_use.mkdir(exist_ok=True)
 
         package_use.joinpath("systemd").write_text(
@@ -323,9 +275,9 @@ class Gentoo:
             )
 
     def mkosi_conf(self) -> None:
-        package_env = self.portage_cfg_dir / "package.env"
+        package_env = self.user_config_path / "package.env"
         package_env.mkdir(exist_ok=True)
-        ebuild_sh_env_dir = self.stage3_cache / self.portage_consts["ebuild_sh_env_dir"]
+        ebuild_sh_env_dir = self.stage3_cache / self.portage_consts.ebuild_sh_env_dir
         ebuild_sh_env_dir.mkdir(exist_ok=True)
 
         # apply whatever we put in mkosi_conf to runs invocation of emerge
@@ -346,7 +298,7 @@ class Gentoo:
             )
         )
 
-        repos_cfg = self.stage3_cache / self.portage_consts["binrepos_conf_file"]
+        repos_cfg = self.stage3_cache / self.portage_consts.binrepos_conf_file
         with repos_cfg.open(mode='a') as f:
             for repo in self.config.repositories:
                 f.write(
@@ -361,9 +313,9 @@ class Gentoo:
 
     def sync_profiles(self) -> None:
         root_portage_cfg = self.root
-        root_portage_cfg /= self.portage_cfg_dir.relative_to(self.stage3_cache)
+        root_portage_cfg /= self.user_config_path.relative_to(self.stage3_cache)
         root_portage_cfg.mkdir(parents=True, exist_ok=True)
-        copy_path(self.portage_cfg_dir, root_portage_cfg)
+        copy_path(self.user_config_path, root_portage_cfg)
 
     def get_snapshot_of_portage_tree(self) -> None:
         bwrap_params: list[PathString] = ["--bind", self.state.cache / "repos", "/var/db/repos"]