podman support added

This commit is contained in:
Louis Abel 2022-05-24 20:35:58 -07:00
parent 16da35da3d
commit 223c0c468c
Signed by: label
GPG Key ID: B37E62D143879B36
2 changed files with 99 additions and 16 deletions

View File

@ -11,7 +11,7 @@ rlvars = rldict['9']
r = Checks(rlvars, config['arch']) r = Checks(rlvars, config['arch'])
r.check_valid_arch() r.check_valid_arch()
a = RepoSync(rlvars, config, major="9", repo="ResilientStorage", parallel=True, ignore_debug=True, ignore_source=True) a = RepoSync(rlvars, config, major="9", repo="ResilientStorage", parallel=True, ignore_debug=False, ignore_source=False)
a.run() a.run()
#a.generate_conf() #a.generate_conf()
#somedir = a.generate_compose_dirs() #somedir = a.generate_compose_dirs()

View File

@ -10,6 +10,7 @@ import os
import os.path import os.path
import subprocess import subprocess
import shlex import shlex
import time
#import pipes #import pipes
from common import Color from common import Color
@ -54,6 +55,7 @@ class RepoSync:
self.major_version = major self.major_version = major
self.date_stamp = config['date_stamp'] self.date_stamp = config['date_stamp']
self.repo_base_url = config['repo_base_url'] self.repo_base_url = config['repo_base_url']
self.compose_root = config['compose_root']
self.compose_base = config['compose_root'] + "/" + major self.compose_base = config['compose_root'] + "/" + major
# Relevant major version items # Relevant major version items
@ -65,6 +67,12 @@ class RepoSync:
self.multilib = rlvars['provide_multilib'] self.multilib = rlvars['provide_multilib']
self.repo = repo self.repo = repo
# each el can have its own designated container to run stuff in,
# otherwise we'll just default to the default config.
self.container = config['container']
if 'container' in rlvars and len(rlvars['container']) > 0:
self.container = rlvars['container']
self.staging_dir = os.path.join( self.staging_dir = os.path.join(
config['staging_root'], config['staging_root'],
config['category_stub'], config['category_stub'],
@ -258,6 +266,9 @@ class RepoSync:
# available arch for an el because that would imply each repo # available arch for an el because that would imply each repo
# gets an i686 repo. However, being able to set "arch" to i686 # gets an i686 repo. However, being able to set "arch" to i686
# should be possible, thus avoiding this block altogether. # should be possible, thus avoiding this block altogether.
# "available_arches" in the configuration isn't meant to be a
# restriction here, but mainly a restriction in the lorax
# process (which isn't done here)
if 'x86_64' in a and 'all' in r and self.multilib: if 'x86_64' in a and 'all' in r and self.multilib:
i686_os_sync_path = os.path.join( i686_os_sync_path = os.path.join(
sync_root, sync_root,
@ -334,18 +345,23 @@ class RepoSync:
repos_to_sync = [repo] repos_to_sync = [repo]
for r in repos_to_sync: for r in repos_to_sync:
podman_loop_list = [] entry_name_list = []
for a in arches_to_sync:
repo_name = r repo_name = r
if r in self.repo_renames: if r in self.repo_renames:
repo_name = self.repo_renames[r] repo_name = self.repo_renames[r]
for a in arches_to_sync:
# There should be a check here that if it's "all" and multilib # There should be a check here that if it's "all" and multilib
# is on, i686 should get synced too. # is on, i686 should get synced too.
entry_name = '{}-{}'.format(r, a) entry_name = '{}-{}'.format(r, a)
debug_entry_name = '{}-debug-{}'.format(r, a) debug_entry_name = '{}-debug-{}'.format(r, a)
entry_name_list.append(entry_name)
if not self.ignore_debug:
entry_name_list.append(debug_entry_name)
entry_point_sh = os.path.join( entry_point_sh = os.path.join(
entries_dir, entries_dir,
entry_name entry_name
@ -370,14 +386,14 @@ class RepoSync:
'debug/tree' 'debug/tree'
) )
sync_cmd = "/usr/bin/dnf -c {} --download-metadata --repoid={} -p {} --forcearch {} --norepopath".format( sync_cmd = "/usr/bin/dnf reposync -c {} --download-metadata --repoid={} -p {} --forcearch {} --norepopath".format(
self.dnf_config, self.dnf_config,
r, r,
os_sync_path, os_sync_path,
a a
) )
debug_sync_cmd = "/usr/bin/dnf -c {} --download-metadata --repoid={}-debug -p {} --forcearch {} --norepopath".format( debug_sync_cmd = "/usr/bin/dnf reposync -c {} --download-metadata --repoid={}-debug -p {} --forcearch {} --norepopath".format(
self.dnf_config, self.dnf_config,
r, r,
debug_sync_path, debug_sync_path,
@ -389,21 +405,88 @@ class RepoSync:
entry_point_open.write('#!/bin/bash\n') entry_point_open.write('#!/bin/bash\n')
entry_point_open.write('/usr/bin/dnf install dnf-plugins-core -y\n') entry_point_open.write('/usr/bin/dnf install dnf-plugins-core -y\n')
entry_point_open.write(sync_cmd) entry_point_open.write(sync_cmd + '\n')
debug_entry_point_open.write('#!/bin/bash\n') debug_entry_point_open.write('#!/bin/bash\n')
debug_entry_point_open.write('/usr/bin/dnf install dnf-plugins-core -y\n') debug_entry_point_open.write('/usr/bin/dnf install dnf-plugins-core -y\n')
debug_entry_point_open.write(debug_sync_cmd) debug_entry_point_open.write(debug_sync_cmd + '\n')
entry_point_open.close() entry_point_open.close()
debug_entry_point_open.close() debug_entry_point_open.close()
# Add to list here
podman_loop_list.append(entry_point_sh) os.chmod(entry_point_sh, 0o755)
podman_loop_list.append(debug_entry_point_sh) os.chmod(debug_entry_point_sh, 0o755)
# We ignoring sources?
if not self.ignore_source:
source_entry_name = '{}-source'.format(r)
entry_name_list.append(source_entry_name)
source_entry_point_sh = os.path.join(
entries_dir,
source_entry_name
)
source_sync_path = os.path.join(
sync_root,
repo_name,
'source/tree'
)
source_sync_cmd = "/usr/bin/dnf reposync -c {} --download-metadata --repoid={}-source -p {} --norepopath".format(
self.dnf_config,
repo_name,
source_sync_path
)
source_entry_point_open = open(source_entry_point_sh, "w+")
source_entry_point_open.write('#!/bin/bash\n')
source_entry_point_open.write('/usr/bin/dnf install dnf-plugins-core -y\n')
source_entry_point_open.write(source_sync_cmd + '\n')
source_entry_point_open.close()
os.chmod(source_entry_point_sh, 0o755)
# Spawn up all podman processes for repo # Spawn up all podman processes for repo
print(podman_loop_list) self.log.info('Starting podman processes for %s ...' % r)
podman_loop_list.clear()
#print(entry_name_list)
for pod in entry_name_list:
podman_cmd_entry = '{} run -d --rm -it -v "{}:{}:z" -v "{}:{}:z" -v "{}:{}:z" --name {} --entrypoint {}/{} {}'.format(
cmd,
self.compose_root,
self.compose_root,
self.dnf_config,
self.dnf_config,
entries_dir,
entries_dir,
pod,
entries_dir,
pod,
self.container
)
#print(podman_cmd_entry)
process = subprocess.call(
shlex.split(podman_cmd_entry),
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL
)
join_all_pods = ' '.join(entry_name_list)
time.sleep(1)
self.log.info('Syncing %s ...' % r)
pod_watcher = '{} wait {}'.format(
cmd,
join_all_pods
)
#print(pod_watcher)
watch_man = subprocess.call(
shlex.split(pod_watcher),
stdout=sys.stdout,
stderr=sys.stderr
)
entry_name_list.clear()
self.log.info('Syncing %s completed' % r)
def generate_compose_dirs(self) -> str: def generate_compose_dirs(self) -> str:
""" """
@ -526,7 +609,7 @@ class RepoSync:
""" """
cmd = None cmd = None
if os.path.exists("/usr/bin/podman"): if os.path.exists("/usr/bin/podman"):
cmd = "/usr/bin/podman run" cmd = "/usr/bin/podman"
else: else:
self.log.error('/usr/bin/podman was not found. Good bye.') self.log.error('/usr/bin/podman was not found. Good bye.')
raise SystemExit("\n\n/usr/bin/podman was not found.\n\nPlease " raise SystemExit("\n\n/usr/bin/podman was not found.\n\nPlease "