From 1a5c849d0ca5e5c35e5cfd042c09cc9e05480caa Mon Sep 17 00:00:00 2001
From: Marcel Telka <marcel@telka.sk>
Date: Sun, 07 Apr 2024 17:15:49 +0200
Subject: [PATCH] perl/Test2-Plugin-NoWarnings: update to 0.10

---
 tools/userland-zone |   74 ++++++++++++++++++++++++++++--------
 1 files changed, 57 insertions(+), 17 deletions(-)

diff --git a/tools/userland-zone b/tools/userland-zone
index 327da7a..aa9ced4 100755
--- a/tools/userland-zone
+++ b/tools/userland-zone
@@ -23,25 +23,28 @@
 import errno
 import logging
 import os
+import pwd
 import subprocess
 
 logger = logging.getLogger("userland-zone")
 
-BUILD_ZONE_NAME = "prbuilder"
+BUILD_ZONE_NAME = "bz"
 TEMPLATE_ZONE_NAME = "-".join([BUILD_ZONE_NAME, "template"])
 ZONES_ROOT = "/zones"
 ARCHIVES_DIR = "/ws/archives"
 CODE_DIR = "/ws/code"
 DEVELOPER_PACKAGES = ["build-essential"]
 
-ETC_SYSDING_CONF = ["#!/usr/bin/ksh", "setup_timezone UTC", "setup_locale en_US.UTF-8"]
-
 
 class Zone:
-    def __init__(self, name, path=None, brand="nlipkg"):
+    def __init__(
+        self, name, path=None, brand="nlipkg", user="oi", user_id=1000,
+    ):
         self._name = name
         self._path = path or self._get_zone_path()
         self._brand = brand
+        self._user = user
+        self._user_id = user_id
 
     @property
     def name(self):
@@ -115,10 +118,31 @@
         zone_root_path = os.path.join(self._path, "root")
         return self._pkg(["-R", zone_root_path, "update"])
 
-    def configure(self, sysding_lines=ETC_SYSDING_CONF):
+    def configure(self, sysding_lines=None):
+        sysding_config = [
+            "#!/usr/bin/ksh",
+            "setup_timezone UTC",
+            "setup_locale en_US.UTF-8",
+            'setup_user_account {user} {uid} {gid} "{gecos}" {home} {shell}'.format(
+                user=self._user,
+                uid=self._user_id,
+                gid="10",
+                gecos="Build user",
+                home="/export/home/{}".format(self._user),
+                shell="/usr/bin/bash",
+            ),
+            "/usr/sbin/usermod -P'Primary Administrator' {user}".format(
+                user=self._user
+            ),
+        ]
+
+        if sysding_lines:
+            sysding_config.extend(sysding_lines)
+        sysding_config.append("\n")
+
         sysding_conf = os.path.join(self._path, "root", "etc", "sysding.conf")
         with open(sysding_conf, "w") as f:
-            f.write("\n".join(sysding_lines))
+            f.write("\n".join(sysding_config))
 
 
 def execute(cmd, args, **kwargs):
@@ -152,6 +176,7 @@
         raise argparse.ArgumentTypeError("{} is not a valid path".format(path))
 
     parser = argparse.ArgumentParser()
+    parser.add_argument("--prefix", default=BUILD_ZONE_NAME, help="Zone name prefix")
     subparsers = parser.add_subparsers(title="subcommands", dest="subcommand")
 
     # create-template
@@ -163,6 +188,18 @@
         help="Zone path",
         default=os.path.join(ZONES_ROOT, TEMPLATE_ZONE_NAME),
         dest="zone_path",
+    )
+    ct_parser.add_argument(
+        "-u",
+        help="User ID to use for build user",
+        default=os.getuid(),
+        dest="uid",
+    )
+    ct_parser.add_argument(
+        "-l",
+        help="User name to use for build user",
+        default=pwd.getpwuid(os.getuid()).pw_name,
+        dest="user",
     )
 
     # update-template
@@ -210,8 +247,8 @@
     return args
 
 
-def create_template(zone_path, zone_name=TEMPLATE_ZONE_NAME):
-    zone = Zone(path=zone_path, name=zone_name)
+def create_template(zone_path, zone_name=TEMPLATE_ZONE_NAME, user='oi', user_id=1000):
+    zone = Zone(path=zone_path, name=zone_name, user=user, user_id=user_id)
     zone.create()
     zone.install()
     zone.configure()
@@ -226,8 +263,8 @@
     zone.delete()
 
 
-def spawn_zone(id, archive_dir=ARCHIVES_DIR, code_dir=CODE_DIR):
-    name = "{}-{}".format(BUILD_ZONE_NAME, id)
+def spawn_zone(id, prefix=BUILD_ZONE_NAME, archive_dir=ARCHIVES_DIR, code_dir=CODE_DIR):
+    name = "{}-{}".format(prefix, id)
     zone = Zone(name=name, path=os.path.join(ZONES_ROOT, name))
 
     template_zone = Zone(name=TEMPLATE_ZONE_NAME)
@@ -262,8 +299,8 @@
     zone.boot()
 
 
-def update_template():
-    zone = Zone(name=TEMPLATE_ZONE_NAME)
+def update_template(zone_name=TEMPLATE_ZONE_NAME):
+    zone = Zone(name=zone_name)
     zone.update()
 
 
@@ -271,15 +308,18 @@
     args = parse_arguments()
 
     if args.subcommand == "create-template":
-        create_template(zone_path=args.zone_path)
+        zone_name = '{}-{}'.format(args.prefix, 'template')
+        create_template(zone_path=args.zone_path, zone_name=zone_name, user=args.user, user_id=args.uid)
     elif args.subcommand == "destroy-template":
-        destroy_zone(zone_name=TEMPLATE_ZONE_NAME)
+        zone_name = '{}-{}'.format(args.prefix, 'template')
+        destroy_zone(zone_name=zone_name)
     elif args.subcommand == "update-template":
-        update_template()
+        zone_name = '{}-{}'.format(args.prefix, 'template')
+        update_template(zone_name=zone_name)
     elif args.subcommand == "spawn-zone":
-        spawn_zone(id=args.id, archive_dir=args.archive_dir, code_dir=args.code_dir)
+        spawn_zone(id=args.id, prefix=args.prefix, archive_dir=args.archive_dir, code_dir=args.code_dir)
     elif args.subcommand == "destroy-zone":
-        zone_name = "{}-{}".format(BUILD_ZONE_NAME, args.id)
+        zone_name = "{}-{}".format(args.prefix, args.id)
         destroy_zone(zone_name=zone_name)
 
 

--
Gitblit v1.9.3