chore: merge devel -> main

This commit is contained in:
Louis Abel 2022-10-10 11:54:24 -07:00
commit 171cb7f2c7
Signed by: label
GPG Key ID: B37E62D143879B36
64 changed files with 4113 additions and 394 deletions

View File

@ -57,7 +57,7 @@ RUN rm -rf /etc/yum.repos.d/*.repo /get_arch
RUN pip install awscli RUN pip install awscli
ARG BRANCH r9 ARG BRANCH=r9
RUN git clone https://git.resf.org/sig_core/kickstarts.git --branch $BRANCH /kickstarts RUN git clone https://git.resf.org/sig_core/kickstarts.git --branch $BRANCH /kickstarts
RUN pip install 'git+https://git.resf.org/sig_core/toolkit.git@devel#egg=empanadas&subdirectory=iso/empanadas' RUN pip install 'git+https://git.resf.org/sig_core/toolkit.git@devel#egg=empanadas&subdirectory=iso/empanadas'

View File

@ -1 +1 @@
__version__ = '0.2.0' __version__ = '0.4.0'

View File

@ -0,0 +1,137 @@
---
'8':
fullname: 'Rocky Linux 8'
revision: '8.7'
rclvl: 'RC1'
major: '8'
minor: '7'
profile: '8'
bugurl: 'https://bugs.rockylinux.org'
checksum: 'sha256'
fedora_major: '20'
allowed_arches:
- x86_64
- aarch64
provide_multilib: False
project_id: '26694529-26cd-44bd-bc59-1c1195364322'
repo_symlinks:
devel: 'Devel'
NFV: 'nfv'
renames:
all: 'devel'
all_repos:
- 'BaseOS'
- 'AppStream'
- 'PowerTools'
- 'HighAvailability'
- 'ResilientStorage'
- 'RT'
- 'NFV'
- 'extras'
- 'devel'
- 'plus'
structure:
packages: 'os/Packages'
repodata: 'os/repodata'
iso_map:
xorrisofs: False
iso_level: False
images:
dvd:
disc: True
variant: 'AppStream'
repos:
- 'BaseOS'
- 'AppStream'
minimal:
disc: True
isoskip: True
repos:
- 'minimal'
- 'BaseOS'
variant: 'minimal'
BaseOS:
disc: False
isoskip: True
variant: 'BaseOS'
repos:
- 'BaseOS'
- 'AppStream'
lorax:
repos:
- 'BaseOS'
- 'AppStream'
variant: 'BaseOS'
lorax_removes:
- 'libreport-rhel-anaconda-bugzilla'
required_pkgs:
- 'lorax'
- 'genisoimage'
- 'isomd5sum'
- 'lorax-templates-rhel'
- 'lorax-templates-generic'
- 'xorriso'
cloudimages:
images:
EC2:
format: raw
GenericCloud:
format: qcow2
livemap:
git_repo: 'https://git.resf.org/sig_core/kickstarts.git'
branch: 'r8'
ksentry:
Workstation: rocky-live-workstation.ks
Workstation-Lite: rocky-live-workstation-lite.ks
XFCE: rocky-live-xfce.ks
KDE: rocky-live-kde.ks
allowed_arches:
- x86_64
required_pkgs:
- 'lorax-lmc-novirt'
- 'vim-minimal'
- 'pykickstart'
- 'git'
variantmap:
git_repo: 'https://git.rockylinux.org/rocky/pungi-rocky.git'
branch: 'r8-beta'
git_raw_path: 'https://git.rockylinux.org/rocky/pungi-rocky/-/raw/r8-beta/'
repoclosure_map:
arches:
x86_64: '--forcearch=x86_64 --arch=x86_64 --arch=athlon --arch=i686 --arch=i586 --arch=i486 --arch=i386 --arch=noarch'
aarch64: '--forcearch=aarch64 --arch=aarch64 --arch=noarch'
ppc64le: '--forcearch=ppc64le --arch=ppc64le --arch=noarch'
s390x: '--forcearch=s390x --arch=s390x --arch=noarch'
repos:
BaseOS: []
AppStream:
- BaseOS
PowerTools:
- BaseOS
- AppStream
HighAvailability:
- BaseOS
- AppStream
ResilientStorage:
- BaseOS
- AppStream
RT:
- BaseOS
- AppStream
NFV:
- BaseOS
- AppStream
extra_files:
git_repo: 'https://git.rockylinux.org/staging/src/rocky-release.git'
git_raw_path: 'https://git.rockylinux.org/staging/src/rocky-release/-/raw/r8/'
branch: 'r8'
gpg:
stable: 'SOURCES/RPM-GPG-KEY-rockyofficial'
testing: 'SOURCES/RPM-GPG-KEY-rockytesting'
list:
- 'SOURCES/COMMUNITY-CHARTER'
- 'SOURCES/EULA'
- 'SOURCES/LICENSE'
- 'SOURCES/RPM-GPG-KEY-rockyofficial'
- 'SOURCES/RPM-GPG-KEY-rockytesting'
...

View File

@ -1,21 +1,24 @@
--- ---
'8': '8':
fullname: 'Rocky Linux 8' fullname: 'Rocky Linux 8'
revision: '8.6' revision: '8.7'
rclvl: 'RC2' rclvl: 'RC1'
major: '8' major: '8'
minor: '6' minor: '7'
profile: '8' profile: '8'
bugurl: 'https://bugs.rockylinux.org' bugurl: 'https://bugs.rockylinux.org'
checksum: 'sha256'
fedora_major: '20'
allowed_arches: allowed_arches:
- x86_64 - x86_64
- aarch64 - aarch64
provide_multilib: False provide_multilib: False
project_id: '' project_id: 'e9cfc87c-d2d2-42d5-a121-852101f1a966'
repo_symlinks: repo_symlinks:
devel: 'Devel' devel: 'Devel'
NFV: 'nfv' NFV: 'nfv'
renames: {} renames:
all: 'devel'
all_repos: all_repos:
- 'BaseOS' - 'BaseOS'
- 'AppStream' - 'AppStream'
@ -27,23 +30,6 @@
- 'extras' - 'extras'
- 'devel' - 'devel'
- 'plus' - 'plus'
- 'rockyrpi'
no_comps_or_groups:
- 'extras'
- 'devel'
- 'plus'
- 'rockyrpi'
comps_or_groups:
- 'BaseOS'
- 'AppStream'
- 'PowerTools'
- 'HighAvailability'
- 'ResilientStorage'
- 'RT'
- 'NFV'
has_modules:
- 'AppStream'
- 'PowerTools'
structure: structure:
packages: 'os/Packages' packages: 'os/Packages'
repodata: 'os/repodata' repodata: 'os/repodata'
@ -93,7 +79,7 @@
format: qcow2 format: qcow2
livemap: livemap:
git_repo: 'https://git.resf.org/sig_core/kickstarts.git' git_repo: 'https://git.resf.org/sig_core/kickstarts.git'
branch: 'r9' branch: 'r8'
ksentry: ksentry:
Workstation: rocky-live-workstation.ks Workstation: rocky-live-workstation.ks
Workstation-Lite: rocky-live-workstation-lite.ks Workstation-Lite: rocky-live-workstation-lite.ks

View File

@ -0,0 +1,137 @@
---
'8':
fullname: 'Rocky Linux 8'
revision: '8.8'
rclvl: 'RC1'
major: '8'
minor: '8'
profile: '8'
bugurl: 'https://bugs.rockylinux.org'
checksum: 'sha256'
fedora_major: '20'
allowed_arches:
- x86_64
- aarch64
provide_multilib: False
project_id: '3b0e9ec7-0679-4176-b253-8528eb3255eb'
repo_symlinks:
devel: 'Devel'
NFV: 'nfv'
renames:
all: 'devel'
all_repos:
- 'BaseOS'
- 'AppStream'
- 'PowerTools'
- 'HighAvailability'
- 'ResilientStorage'
- 'RT'
- 'NFV'
- 'extras'
- 'devel'
- 'plus'
structure:
packages: 'os/Packages'
repodata: 'os/repodata'
iso_map:
xorrisofs: False
iso_level: False
images:
dvd:
disc: True
variant: 'AppStream'
repos:
- 'BaseOS'
- 'AppStream'
minimal:
disc: True
isoskip: True
repos:
- 'minimal'
- 'BaseOS'
variant: 'minimal'
BaseOS:
disc: False
isoskip: True
variant: 'BaseOS'
repos:
- 'BaseOS'
- 'AppStream'
lorax:
repos:
- 'BaseOS'
- 'AppStream'
variant: 'BaseOS'
lorax_removes:
- 'libreport-rhel-anaconda-bugzilla'
required_pkgs:
- 'lorax'
- 'genisoimage'
- 'isomd5sum'
- 'lorax-templates-rhel'
- 'lorax-templates-generic'
- 'xorriso'
cloudimages:
images:
EC2:
format: raw
GenericCloud:
format: qcow2
livemap:
git_repo: 'https://git.resf.org/sig_core/kickstarts.git'
branch: 'r8'
ksentry:
Workstation: rocky-live-workstation.ks
Workstation-Lite: rocky-live-workstation-lite.ks
XFCE: rocky-live-xfce.ks
KDE: rocky-live-kde.ks
allowed_arches:
- x86_64
required_pkgs:
- 'lorax-lmc-novirt'
- 'vim-minimal'
- 'pykickstart'
- 'git'
variantmap:
git_repo: 'https://git.rockylinux.org/rocky/pungi-rocky.git'
branch: 'r8s'
git_raw_path: 'https://git.rockylinux.org/rocky/pungi-rocky/-/raw/r8s/'
repoclosure_map:
arches:
x86_64: '--forcearch=x86_64 --arch=x86_64 --arch=athlon --arch=i686 --arch=i586 --arch=i486 --arch=i386 --arch=noarch'
aarch64: '--forcearch=aarch64 --arch=aarch64 --arch=noarch'
ppc64le: '--forcearch=ppc64le --arch=ppc64le --arch=noarch'
s390x: '--forcearch=s390x --arch=s390x --arch=noarch'
repos:
BaseOS: []
AppStream:
- BaseOS
PowerTools:
- BaseOS
- AppStream
HighAvailability:
- BaseOS
- AppStream
ResilientStorage:
- BaseOS
- AppStream
RT:
- BaseOS
- AppStream
NFV:
- BaseOS
- AppStream
extra_files:
git_repo: 'https://git.rockylinux.org/staging/src/rocky-release.git'
git_raw_path: 'https://git.rockylinux.org/staging/src/rocky-release/-/raw/r8/'
branch: 'r8'
gpg:
stable: 'SOURCES/RPM-GPG-KEY-rockyofficial'
testing: 'SOURCES/RPM-GPG-KEY-rockytesting'
list:
- 'SOURCES/COMMUNITY-CHARTER'
- 'SOURCES/EULA'
- 'SOURCES/LICENSE'
- 'SOURCES/RPM-GPG-KEY-rockyofficial'
- 'SOURCES/RPM-GPG-KEY-rockytesting'
...

View File

@ -8,13 +8,14 @@
profile: '9-beta' profile: '9-beta'
bugurl: 'https://bugs.rockylinux.org' bugurl: 'https://bugs.rockylinux.org'
checksum: 'sha256' checksum: 'sha256'
fedora_major: '20'
allowed_arches: allowed_arches:
- x86_64 - x86_64
- aarch64 - aarch64
- ppc64le - ppc64le
- s390x - s390x
provide_multilib: True provide_multilib: True
project_id: '' project_id: '0048077b-1573-4cb7-8ba7-cce823857ba5'
repo_symlinks: repo_symlinks:
NFV: 'nfv' NFV: 'nfv'
renames: renames:
@ -87,8 +88,10 @@
Workstation-Lite: rocky-live-workstation-lite.ks Workstation-Lite: rocky-live-workstation-lite.ks
XFCE: rocky-live-xfce.ks XFCE: rocky-live-xfce.ks
KDE: rocky-live-kde.ks KDE: rocky-live-kde.ks
MATE: rocky-live-mate.ks
allowed_arches: allowed_arches:
- x86_64 - x86_64
- aarch64
required_pkgs: required_pkgs:
- 'lorax-lmc-novirt' - 'lorax-lmc-novirt'
- 'vim-minimal' - 'vim-minimal'

View File

@ -8,6 +8,7 @@
profile: '9' profile: '9'
bugurl: 'https://bugs.rockylinux.org' bugurl: 'https://bugs.rockylinux.org'
checksum: 'sha256' checksum: 'sha256'
fedora_major: '20'
allowed_arches: allowed_arches:
- x86_64 - x86_64
- aarch64 - aarch64
@ -88,8 +89,10 @@
Workstation-Lite: rocky-live-workstation-lite.ks Workstation-Lite: rocky-live-workstation-lite.ks
XFCE: rocky-live-xfce.ks XFCE: rocky-live-xfce.ks
KDE: rocky-live-kde.ks KDE: rocky-live-kde.ks
MATE: rocky-live-mate.ks
allowed_arches: allowed_arches:
- x86_64 - x86_64
- aarch64
required_pkgs: required_pkgs:
- 'lorax-lmc-novirt' - 'lorax-lmc-novirt'
- 'vim-minimal' - 'vim-minimal'

View File

@ -0,0 +1,58 @@
# This is specifically for secondary/tertiary architectures
---
'9altarch':
fullname: 'Rocky Linux 9.0'
revision: '9.0'
rclvl: 'RC2'
major: '9'
minor: '0'
profile: '9'
bugurl: 'https://bugs.rockylinux.org'
checksum: 'sha256'
fedora_major: '20'
allowed_arches:
- armv7hl
- riscv64
provide_multilib: False
project_id: ''
renames:
all: 'devel'
all_repos:
- 'all'
- 'BaseOS'
- 'AppStream'
- 'CRB'
- 'extras'
- 'plus'
structure:
packages: 'os/Packages'
repodata: 'os/repodata'
iso_map: {}
livemap: {}
repoclosure_map:
arches:
armv7hl: '--forcearch=armv7hl --arch=noarch'
riscv64: '--forcearch=riscv64 --arch=noarch'
repos:
devel: []
BaseOS: []
AppStream:
- BaseOS
CRB:
- BaseOS
- AppStream
extra_files:
git_repo: 'https://git.rockylinux.org/staging/src/rocky-release.git'
git_raw_path: 'https://git.rockylinux.org/staging/src/rocky-release/-/raw/r9/'
branch: 'r9'
gpg:
stable: 'SOURCES/RPM-GPG-KEY-Rocky-9'
testing: 'SOURCES/RPM-GPG-KEY-Rocky-9-Testing'
list:
- 'SOURCES/Contributors'
- 'SOURCES/COMMUNITY-CHARTER'
- 'SOURCES/EULA'
- 'SOURCES/LICENSE'
- 'SOURCES/RPM-GPG-KEY-Rocky-9'
- 'SOURCES/RPM-GPG-KEY-Rocky-9-Testing'
...

View File

@ -1,20 +1,21 @@
--- ---
'9-lookahead': '9-lookahead':
fullname: 'Rocky Linux 9.1' fullname: 'Rocky Linux 9.2'
revision: '9.1' revision: '9.2'
rclvl: 'LH1' rclvl: 'LH1'
major: '9' major: '9'
minor: '1' minor: '2'
profile: '9-lookahead' profile: '9-lookahead'
bugurl: 'https://bugs.rockylinux.org' bugurl: 'https://bugs.rockylinux.org'
checksum: 'sha256' checksum: 'sha256'
fedora_major: '20'
allowed_arches: allowed_arches:
- x86_64 - x86_64
- aarch64 - aarch64
- ppc64le - ppc64le
- s390x - s390x
provide_multilib: True provide_multilib: True
project_id: '' project_id: '6794b5a8-290b-4d0d-ad5a-47164329cbb0'
repo_symlinks: repo_symlinks:
NFV: 'nfv' NFV: 'nfv'
renames: renames:
@ -87,8 +88,10 @@
Workstation-Lite: rocky-live-workstation-lite.ks Workstation-Lite: rocky-live-workstation-lite.ks
XFCE: rocky-live-xfce.ks XFCE: rocky-live-xfce.ks
KDE: rocky-live-kde.ks KDE: rocky-live-kde.ks
MATE: rocky-live-mate.ks
allowed_arches: allowed_arches:
- x86_64 - x86_64
- aarch64
required_pkgs: required_pkgs:
- 'lorax-lmc-novirt' - 'lorax-lmc-novirt'
- 'vim-minimal' - 'vim-minimal'

View File

@ -88,6 +88,7 @@
KDE: rocky-live-kde.ks KDE: rocky-live-kde.ks
allowed_arches: allowed_arches:
- x86_64 - x86_64
- aarch64
required_pkgs: required_pkgs:
- 'lorax-lmc-novirt' - 'lorax-lmc-novirt'
- 'vim-minimal' - 'vim-minimal'

View File

@ -388,7 +388,7 @@ class ImageBuild:
except Exception as e: except Exception as e:
log.exception(e) log.exception(e)
finally: finally:
f.flush() f.flush()
def run(): def run():
try: try:

View File

@ -17,6 +17,8 @@ parser.add_argument('--logger', type=str)
parser.add_argument('--extra-iso', type=str, help="Granular choice in which iso is built") parser.add_argument('--extra-iso', type=str, help="Granular choice in which iso is built")
parser.add_argument('--extra-iso-mode', type=str, default='local') parser.add_argument('--extra-iso-mode', type=str, default='local')
parser.add_argument('--hashed', action='store_true') parser.add_argument('--hashed', action='store_true')
parser.add_argument('--updated-image', action='store_true')
parser.add_argument('--image-increment',type=str, default='0')
results = parser.parse_args() results = parser.parse_args()
rlvars = rldict[results.release] rlvars = rldict[results.release]
major = rlvars['major'] major = rlvars['major']
@ -32,7 +34,9 @@ a = IsoBuild(
extra_iso_mode=results.extra_iso_mode, extra_iso_mode=results.extra_iso_mode,
compose_dir_is_here=results.local_compose, compose_dir_is_here=results.local_compose,
hashed=results.hashed, hashed=results.hashed,
logger=results.logger logger=results.logger,
updated_image=results.updated_image,
image_increment=results.image_increment
) )
def run(): def run():

View File

@ -14,7 +14,8 @@ parser = argparse.ArgumentParser(description="Peridot Sync and Compose")
# All of our options # All of our options
parser.add_argument('--release', type=str, help="Major Release Version or major-type (eg 9-beta)", required=True) parser.add_argument('--release', type=str, help="Major Release Version or major-type (eg 9-beta)", required=True)
parser.add_argument('--symlink', action='store_true', help="symlink") parser.add_argument('--sig', type=str, help="SIG Name if applicable")
parser.add_argument('--symlink', action='store_true', help="symlink to latest")
parser.add_argument('--logger', type=str) parser.add_argument('--logger', type=str)
# Parse them # Parse them
@ -48,6 +49,9 @@ def run():
profile = rlvars['profile'] profile = rlvars['profile']
logger = log logger = log
if results.sig is not None:
shortname = 'SIG-' + results.sig
generated_dir = Shared.generate_compose_dirs( generated_dir = Shared.generate_compose_dirs(
compose_base, compose_base,
shortname, shortname,

View File

@ -0,0 +1,38 @@
# This is for doing repoclosures upstream
import argparse
from empanadas.common import *
from empanadas.util import Checks
from empanadas.util import RepoSync
# Start up the parser baby
parser = argparse.ArgumentParser(description="Peridot Upstream Repoclosure")
# All of our options
parser.add_argument('--release', type=str, help="Major Release Version or major-type (eg 9-beta)", required=True)
parser.add_argument('--simple', action='store_false')
parser.add_argument('--enable-repo-gpg-check', action='store_true')
parser.add_argument('--hashed', action='store_true')
parser.add_argument('--logger', type=str)
# Parse them
results = parser.parse_args()
rlvars = rldict[results.release]
major = rlvars['major']
r = Checks(rlvars, config['arch'])
r.check_valid_arch()
a = RepoSync(
rlvars,
config,
major=major,
hashed=results.hashed,
parallel=results.simple,
repo_gpg_check=results.enable_repo_gpg_check,
logger=results.logger,
)
def run():
a.run_upstream_repoclosure()

View File

@ -9,7 +9,7 @@ from empanadas.util import IsoBuild
parser = argparse.ArgumentParser(description="ISO Artifact Builder") parser = argparse.ArgumentParser(description="ISO Artifact Builder")
parser.add_argument('--release', type=str, help="Major Release Version", required=True) parser.add_argument('--release', type=str, help="Major Release Version", required=True)
parser.add_argument('--s3', action='store_true', help="Release Candidate") parser.add_argument('--s3', action='store_true', help="S3")
parser.add_argument('--arch', type=str, help="Architecture") parser.add_argument('--arch', type=str, help="Architecture")
parser.add_argument('--local-compose', action='store_true', help="Compose Directory is Here") parser.add_argument('--local-compose', action='store_true', help="Compose Directory is Here")
parser.add_argument('--force-download', action='store_true', help="Force a download") parser.add_argument('--force-download', action='store_true', help="Force a download")

View File

@ -9,7 +9,7 @@ from empanadas.util import IsoBuild
parser = argparse.ArgumentParser(description="ISO Artifact Builder") parser = argparse.ArgumentParser(description="ISO Artifact Builder")
parser.add_argument('--release', type=str, help="Major Release Version", required=True) parser.add_argument('--release', type=str, help="Major Release Version", required=True)
parser.add_argument('--s3', action='store_true', help="Release Candidate") parser.add_argument('--s3', action='store_true', help="S3")
parser.add_argument('--rc', action='store_true', help="Release Candidate") parser.add_argument('--rc', action='store_true', help="Release Candidate")
parser.add_argument('--arch', type=str, help="Architecture") parser.add_argument('--arch', type=str, help="Architecture")
parser.add_argument('--local-compose', action='store_true', help="Compose Directory is Here") parser.add_argument('--local-compose', action='store_true', help="Compose Directory is Here")

View File

@ -26,6 +26,9 @@ parser.add_argument('--refresh-treeinfo', action='store_true')
# I am aware this is confusing, I want podman to be the default option # I am aware this is confusing, I want podman to be the default option
parser.add_argument('--simple', action='store_false') parser.add_argument('--simple', action='store_false')
parser.add_argument('--logger', type=str) parser.add_argument('--logger', type=str)
parser.add_argument('--disable-gpg-check', action='store_false')
parser.add_argument('--disable-repo-gpg-check', action='store_false')
parser.add_argument('--clean-old-packages', action='store_true')
# Parse them # Parse them
results = parser.parse_args() results = parser.parse_args()
@ -54,6 +57,9 @@ a = RepoSync(
logger=results.logger, logger=results.logger,
refresh_extra_files=results.refresh_extra_files, refresh_extra_files=results.refresh_extra_files,
refresh_treeinfo=results.refresh_treeinfo, refresh_treeinfo=results.refresh_treeinfo,
gpg_check=results.disable_gpg_check,
repo_gpg_check=results.disable_repo_gpg_check,
reposync_clean_old=results.clean_old_packages,
) )
def run(): def run():

View File

@ -15,7 +15,7 @@ parser = argparse.ArgumentParser(description="Peridot Sync and Compose")
# All of our options # All of our options
parser.add_argument('--release', type=str, help="Major Release Version", required=True) parser.add_argument('--release', type=str, help="Major Release Version", required=True)
parser.add_argument('--repo', type=str, help="Repository name") parser.add_argument('--repo', type=str, help="Repository name")
parser.add_argument('--sig', type=str, help="SIG name") parser.add_argument('--sig', type=str, help="SIG name", required=True)
parser.add_argument('--arch', type=str, help="Architecture") parser.add_argument('--arch', type=str, help="Architecture")
parser.add_argument('--ignore-debug', action='store_true') parser.add_argument('--ignore-debug', action='store_true')
parser.add_argument('--ignore-source', action='store_true') parser.add_argument('--ignore-source', action='store_true')
@ -25,9 +25,13 @@ parser.add_argument('--hashed', action='store_true')
parser.add_argument('--dry-run', action='store_true') parser.add_argument('--dry-run', action='store_true')
parser.add_argument('--full-run', action='store_true') parser.add_argument('--full-run', action='store_true')
parser.add_argument('--no-fail', action='store_true') parser.add_argument('--no-fail', action='store_true')
parser.add_argument('--refresh-extra-files', action='store_true')
# I am aware this is confusing, I want podman to be the default option # I am aware this is confusing, I want podman to be the default option
parser.add_argument('--simple', action='store_false') parser.add_argument('--simple', action='store_false')
parser.add_argument('--logger', type=str) parser.add_argument('--logger', type=str)
parser.add_argument('--disable-gpg-check', action='store_false')
parser.add_argument('--disable-repo-gpg-check', action='store_false')
parser.add_argument('--clean-old-packages', action='store_true')
# Parse them # Parse them
results = parser.parse_args() results = parser.parse_args()
@ -46,6 +50,7 @@ a = SigRepoSync(
repo=results.repo, repo=results.repo,
arch=results.arch, arch=results.arch,
ignore_source=results.ignore_source, ignore_source=results.ignore_source,
ignore_debug=results.ignore_debug,
repoclosure=results.repoclosure, repoclosure=results.repoclosure,
skip_all=results.skip_all, skip_all=results.skip_all,
hashed=results.hashed, hashed=results.hashed,
@ -53,7 +58,11 @@ a = SigRepoSync(
dryrun=results.dry_run, dryrun=results.dry_run,
fullrun=results.full_run, fullrun=results.full_run,
nofail=results.no_fail, nofail=results.no_fail,
logger=results.logger refresh_extra_files=results.refresh_extra_files,
logger=results.logger,
gpg_check=results.disable_gpg_check,
repo_gpg_check=results.disable_repo_gpg_check,
reposync_clean_old=results.clean_old_packages,
) )

View File

@ -1,17 +1,43 @@
--- ---
altarch: altarch:
'8': '8':
rockyrpi: profile: 'altarch'
allowed_arches: project_id: 'a1aac235-dd66-4d5b-8ff0-87467732f322'
- aarch64 repo:
project_id: '' altarch-common:
additional_dirs: allowed_arches:
- 'images' - aarch64
altarch-rockyrpi:
allowed_arches:
- aarch64
additional_dirs:
- 'images'
extra_files:
git_repo: 'https://git.rockylinux.org/staging/src/rocky-release-altarch.git'
git_raw_path: 'https://git.rockylinux.org/staging/src/rocky-release-altarch/-/raw/r8/'
branch: 'r8'
gpg:
stable: 'SOURCES/RPM-GPG-KEY-Rocky-SIG-AltArch'
list:
- 'SOURCES/RPM-GPG-KEY-Rocky-SIG-AltArch'
'9': '9':
rockyrpi: profile: 'altarch'
allowed_arches: project_id: '6047887d-a395-4bc7-a0bd-fc1873b5d13d'
- aarch64 repo:
project_id: '' altarch-common:
additional_dirs: allowed_arches:
- 'images' - aarch64
altarch-rockyrpi:
allowed_arches:
- aarch64
additional_dirs:
- 'images'
extra_files:
git_repo: 'https://git.rockylinux.org/staging/src/rocky-release-altarch.git'
git_raw_path: 'https://git.rockylinux.org/staging/src/rocky-release-altarch/-/raw/r9/'
branch: 'r9'
gpg:
stable: 'SOURCES/RPM-GPG-KEY-Rocky-SIG-AltArch'
list:
- 'SOURCES/RPM-GPG-KEY-Rocky-SIG-AltArch'
... ...

View File

@ -2,16 +2,17 @@
cloud: cloud:
'8': '8':
profile: 'cloud' profile: 'cloud'
cloud-kernel: project_id: 'f91da90d-5bdb-4cf2-80ea-e07f8dae5a5c'
project_id: 'f91da90d-5bdb-4cf2-80ea-e07f8dae5a5c' addtional_dirs: []
allowed_arches: repo:
- aarch64 cloud-kernel:
- x86_64 allowed_arches:
cloud-common: - aarch64
allowed_arches: - x86_64
- aarch64 cloud-common:
- x86_64 allowed_arches:
project_id: 'f91da90d-5bdb-4cf2-80ea-e07f8dae5a5c' - aarch64
- x86_64
extra_files: extra_files:
git_repo: 'https://git.rockylinux.org/staging/src/rocky-release-cloud.git' git_repo: 'https://git.rockylinux.org/staging/src/rocky-release-cloud.git'
git_raw_path: 'https://git.rockylinux.org/staging/src/rocky-release-cloud/-/raw/r8/' git_raw_path: 'https://git.rockylinux.org/staging/src/rocky-release-cloud/-/raw/r8/'
@ -21,18 +22,28 @@ cloud:
list: list:
- 'SOURCES/RPM-GPG-KEY-Rocky-SIG-Cloud' - 'SOURCES/RPM-GPG-KEY-Rocky-SIG-Cloud'
'9': '9':
cloud-kernel: profile: 'cloud'
project_id: '' project_id: '15016370-1410-4459-a1a2-a1576041fd19'
allowed_arches: addtional_dirs: []
- aarch64 repo:
- x86_64 cloud-kernel:
- ppc64le allowed_arches:
- s390x - aarch64
cloud-common: - x86_64
project_id: '' - ppc64le
allowed_arches: - s390x
- aarch64 cloud-common:
- x86_64 allowed_arches:
- ppc64le - aarch64
- s390x - x86_64
- ppc64le
- s390x
extra_files:
git_repo: 'https://git.rockylinux.org/staging/src/rocky-release-cloud.git'
git_raw_path: 'https://git.rockylinux.org/staging/src/rocky-release-cloud/-/raw/r9/'
branch: 'r9'
gpg:
stable: 'SOURCES/RPM-GPG-KEY-Rocky-SIG-Cloud'
list:
- 'SOURCES/RPM-GPG-KEY-Rocky-SIG-Cloud'
... ...

View File

@ -1,13 +1,49 @@
--- ---
core: core:
'8': '8':
core-common: profile: 'core'
project_id: '' project_id: ''
core-infra: addtional_dirs: []
project_id: '' repo:
core-common:
allowed_arches:
- x86_64
- aarch64
core-infra:
allowed_arches:
- x86_64
- aarch64
extra_files:
git_repo: 'https://git.rockylinux.org/staging/src/rocky-release-core.git'
git_raw_path: 'https://git.rockylinux.org/staging/src/rocky-release-core/-/raw/r8/'
branch: 'r8'
gpg:
stable: 'SOURCES/RPM-GPG-KEY-Rocky-SIG-Core'
list:
- 'SOURCES/RPM-GPG-KEY-Rocky-SIG-Core'
'9': '9':
core-common: profile: 'core'
project_id: '' project_id: ''
core-infra: addtional_dirs: []
project_id: '' repo:
core-common:
allowed_arches:
- x86_64
- aarch64
- ppc64le
- s390x
core-infra:
allowed_arches:
- x86_64
- aarch64
- ppc64le
- s390x
extra_files:
git_repo: 'https://git.rockylinux.org/staging/src/rocky-release-core.git'
git_raw_path: 'https://git.rockylinux.org/staging/src/rocky-release-core/-/raw/r9/'
branch: 'r9'
gpg:
stable: 'SOURCES/RPM-GPG-KEY-Rocky-SIG-Core'
list:
- 'SOURCES/RPM-GPG-KEY-Rocky-SIG-Core'
... ...

View File

@ -0,0 +1,37 @@
---
desktop:
'8':
profile: 'desktop'
project_id: '8b3c9b53-0633-47bd-98a3-1ca3ec141278'
addtional_dirs: []
repo:
desktop-common:
allowed_arches:
- x86_64
- aarch64
extra_files:
git_repo: 'https://git.rockylinux.org/staging/src/rocky-release-desktop.git'
git_raw_path: 'https://git.rockylinux.org/staging/src/rocky-release-desktop/-/raw/r8/'
branch: 'r8'
gpg:
stable: 'SOURCES/RPM-GPG-KEY-Rocky-SIG-Desktop'
list:
- 'SOURCES/RPM-GPG-KEY-Rocky-SIG-Desktop'
'9':
profile: 'desktop'
project_id: 'b0460c25-22cf-496c-a3a3-067b9a2af14a'
addtional_dirs: []
repo:
desktop-common:
allowed_arches:
- x86_64
- aarch64
extra_files:
git_repo: 'https://git.rockylinux.org/staging/src/rocky-release-desktop.git'
git_raw_path: 'https://git.rockylinux.org/staging/src/rocky-release-desktop/-/raw/r9/'
branch: 'r9'
gpg:
stable: 'SOURCES/RPM-GPG-KEY-Rocky-SIG-Desktop'
list:
- 'SOURCES/RPM-GPG-KEY-Rocky-SIG-Desktop'
...

View File

@ -0,0 +1,38 @@
---
virt:
'8':
profile: 'virt'
project_id: 'd911867a-658e-4f41-8343-5ceac6c41f67'
addtional_dirs: []
repo:
virt-common:
allowed_arches:
- x86_64
- aarch64
extra_files:
git_repo: 'https://git.rockylinux.org/staging/src/rocky-release-virt.git'
git_raw_path: 'https://git.rockylinux.org/staging/src/rocky-release-virt/-/raw/r8/'
branch: 'r8'
gpg:
stable: 'SOURCES/RPM-GPG-KEY-Rocky-SIG-Virt'
list:
- 'SOURCES/RPM-GPG-KEY-Rocky-SIG-Virt'
'9':
profile: 'virt'
project_id: '925ceece-47ce-4f51-90f7-ff8689e4fe5e'
addtional_dirs: []
repo:
virt-common:
allowed_arches:
- x86_64
- aarch64
- ppc64le
extra_files:
git_repo: 'https://git.rockylinux.org/staging/src/rocky-release-virt.git'
git_raw_path: 'https://git.rockylinux.org/staging/src/rocky-release-virt/-/raw/r9/'
branch: 'r9'
gpg:
stable: 'SOURCES/RPM-GPG-KEY-Rocky-SIG-Virt'
list:
- 'SOURCES/RPM-GPG-KEY-Rocky-SIG-Virt'
...

View File

@ -0,0 +1,41 @@
This directory contains ISO's for the {{ arch }} architecture. You will see
multiple types of ISO's, including accompanying manifests and CHECKSUM files
that match the given ISO. You will see the following formats:
* Rocky-X.Y-ARCH-TYPE (ISO File)
* Rocky-X.Y-DATE-ARCH-TYPE (ISO File)
* Rocky-ARCH-TYPE (Symlink)
X will be the major release.
Y will be the minor release.
ARCH is the given architecture.
DATE will be the date the ISO was built (if applicable)
TYPE will be the type of ISO (boot, dvd, minimal)
The first format is the most common and is the day-of-release ISO.
The second format is in the case of rebuilt ISO's, in the case of addressing
a bug or providing an updated image (eg for a newer kernel, a newer secure
boot shim, and so on).
The third format in the list is a symlink to the "latest" ISO. Currently, this
is not advertised on the main site, but there may be potential for this in
the future as a value add.
This is "unversioned" ISO symlink is for these cases:
* A pre-determined download location for users/mirrors/service providers who
want an always available and deterministic download location, which can be
easier to script
* osinfo database / libvirt use where if a user selects Rocky Linux X, it
should be aware of and be able to download from that location. This should
be fully supported in Rocky Linux 8.7 and 9.1, and future Fedora versions.
If you have any questions, please reach out to us:
* https://chat.rockylinux.org ~Development, ~Infrastructure, ~General
* https://forums.rockylinux.org
* https://lists.resf.org/mailman3/lists/rocky.lists.resf.org/ - Rocky General Mail List
* https://lists.resf.org/mailman3/lists/rocky-mirror.lists.resf.org/ - Mirror Mail List

View File

@ -11,6 +11,15 @@ metadata provides.
# Notes # # Notes #
## Unversioned ISO Files ##
There are unversioned ISO files in the isos and live directories per
architecture. This is to allow libvirt users an easy way to download an ISO for
a given release of their choosing easily. It also allows users as a whole to
always have a pre-determined path to download the latest ISO of a given release
by just relying on it being in the URL itself rather than in the ISO name. Note
that these unversioned ISO files may or may not advertised on the main site.
## Checksums ## ## Checksums ##
CHECKSUM Validation: https://github.com/rocky-linux/checksums CHECKSUM Validation: https://github.com/rocky-linux/checksums

View File

@ -23,3 +23,9 @@ fi
{{ make_manifest }} {{ make_manifest }}
{% if extra_iso_mode == "podman" %}
# symlink to unversioned image name
ln -sf {{ isoname }} {{ generic_isoname }}
ln -sf {{ isoname }}.manifest {{ generic_isoname }}.manifest
{% endif %}

View File

@ -53,6 +53,8 @@ elif [ -f "/usr/bin/isoinfo" ]; then
grep -v '/TRANS.TBL$' | sort >> lorax/images/boot.iso.manifest grep -v '/TRANS.TBL$' | sort >> lorax/images/boot.iso.manifest
fi fi
find lorax -perm 700 -exec chmod 755 {} \;
tar czf "${LORAX_TAR}" lorax "${LOGFILE}" tar czf "${LORAX_TAR}" lorax "${LOGFILE}"
tar_ret_val=$? tar_ret_val=$?

View File

@ -18,9 +18,9 @@ cd /builddir
{{ git_clone }} {{ git_clone }}
if [ -d "/builddir/ks/live/{{ major }}/peridot" ]; then if [ -d "/builddir/ks/live/{{ major }}/peridot" ]; then
pushd /builddir/ks/live/{{ major }}/peridot || { echo "Could not change directory"; exit 1; } pushd /builddir/ks/live/{{ major }}/{{ arch }}/peridot || { echo "Could not change directory"; exit 1; }
else else
pushd /builddir/ks/live/{{ major }}/staging || { echo "Could not change directory"; exit 1; } pushd /builddir/ks/live/{{ major }}/{{ arch }}/stage || { echo "Could not change directory"; exit 1; }
fi fi
ksflatten -c {{ ks_file }} -o /builddir/ks.cfg ksflatten -c {{ ks_file }} -o /builddir/ks.cfg
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then

View File

@ -0,0 +1,21 @@
<template>
<name>Rocky-{{major}}-{{type}}-{{version_variant}}.{{iso8601date}}.{{release}}.{{architecture}}</name>
<os>
<name>Fedora</name>
<version>{{fedora_major}}</version>
<arch>{{architecture}}</arch>
<install type='url'>
<url>https://download.rockylinux.org/stg/rocky/{{major}}/BaseOS/{{architecture}}/{{installdir}}</url>
</install>
<icicle>
<extra_command>rpm -qa --qf '%{NAME},%{VERSION},%{RELEASE},%{ARCH},%{EPOCH},%{SIZE},%{SIGMD5},%{BUILDTIME}\n'</extra_command>
</icicle>
<kernelparam>console=tty0 inst.usefbx</kernelparam>
</os>
<description>Rocky-{{major}}-{{type}}-{{version_variant}}.{{iso8601date}}.{{release}}.{{architecture}} Generated on {{utcnow}}</description>
<disk>
<size>{{size}}</size>
</disk>
</template>

View File

@ -10,7 +10,6 @@
<icicle> <icicle>
<extra_command>rpm -qa --qf '%{NAME},%{VERSION},%{RELEASE},%{ARCH},%{EPOCH},%{SIZE},%{SIGMD5},%{BUILDTIME}\n'</extra_command> <extra_command>rpm -qa --qf '%{NAME},%{VERSION},%{RELEASE},%{ARCH},%{EPOCH},%{SIZE},%{SIGMD5},%{BUILDTIME}\n'</extra_command>
</icicle> </icicle>
<kernelparam>console=tty0 inst.usefbx</kernelparam>
</os> </os>
<description>Rocky-{{major}}-{{type}}-{{version_variant}}.{{iso8601date}}.{{release}}.{{architecture}} Generated on {{utcnow}}</description> <description>Rocky-{{major}}-{{type}}-{{version_variant}}.{{iso8601date}}.{{release}}.{{architecture}} Generated on {{utcnow}}</description>
<disk> <disk>

View File

@ -3,24 +3,24 @@
name={{repo.name}} name={{repo.name}}
baseurl={{ repo.baseurl }} baseurl={{ repo.baseurl }}
enabled=1 enabled=1
gpgcheck=1 gpgcheck={{ gpg_check }}
repo_gpgcheck=1 repo_gpgcheck={{ repo_gpg_check }}
gpgkey={{ repo.gpgkey }} gpgkey={{ repo.gpgkey }}
[{{ repo.name }}-debug] [{{ repo.name }}-debug]
name={{repo.name}} name={{repo.name}}
baseurl={{ repo.baseurl }}-debug baseurl={{ repo.baseurl }}-debug
enabled=1 enabled=1
gpgcheck=1 gpgcheck={{ gpg_check }}
repo_gpgcheck=1 repo_gpgcheck={{ repo_gpg_check }}
gpgkey={{ repo.gpgkey }} gpgkey={{ repo.gpgkey }}
[{{ repo.name }}-source] [{{ repo.name }}-source]
name={{repo.name}} name={{repo.name}}
baseurl={{ repo.srcbaseurl }} baseurl={{ repo.srcbaseurl }}
enabled=1 enabled=1
gpgcheck=1 gpgcheck={{ gpg_check }}
repo_gpgcheck=1 repo_gpgcheck={{ repo_gpg_check }}
gpgkey={{ repo.gpgkey }} gpgkey={{ repo.gpgkey }}
{% endfor %} {% endfor %}

View File

@ -3,6 +3,7 @@ set -o pipefail
{{ import_gpg_cmd }} | tee -a {{ sync_log }} {{ import_gpg_cmd }} | tee -a {{ sync_log }}
{{ dnf_plugin_cmd }} | tee -a {{ sync_log }} {{ dnf_plugin_cmd }} | tee -a {{ sync_log }}
sed -i 's/enabled=1/enabled=0/g' /etc/yum.repos.d/*.repo sed -i 's/enabled=1/enabled=0/g' /etc/yum.repos.d/*.repo
{{ metadata_cmd }} | tee -a {{ sync_log }}
{{ sync_cmd }} | tee -a {{ sync_log }} {{ sync_cmd }} | tee -a {{ sync_log }}
# Yes this is a bit hacky. Can't think of a better way to do this. # Yes this is a bit hacky. Can't think of a better way to do this.
@ -18,8 +19,13 @@ if [ "$ret_val" -eq 0 ]; then
echo "SOME PACKAGES DID NOT DOWNLOAD" | tee -a {{ sync_log }} echo "SOME PACKAGES DID NOT DOWNLOAD" | tee -a {{ sync_log }}
exit 1 exit 1
else else
{% if deploy_extra_files %}
pushd {{ download_path }}
curl -RO {{ gpg_key_url }}
popd
{% endif %}
exit 0 exit 0
fi fi
fi fi
# {{ check_cmd }} | tee -a {{ sync_log }} # {{ check_cmd }} | tee -a {{ sync_log }}

View File

@ -4,6 +4,7 @@ set -o pipefail
{{ arch_force_cp }} | tee -a {{ sync_log }} {{ arch_force_cp }} | tee -a {{ sync_log }}
{{ dnf_plugin_cmd }} | tee -a {{ sync_log }} {{ dnf_plugin_cmd }} | tee -a {{ sync_log }}
sed -i 's/enabled=1/enabled=0/g' /etc/yum.repos.d/*.repo sed -i 's/enabled=1/enabled=0/g' /etc/yum.repos.d/*.repo
{{ metadata_cmd }} | tee -a {{ sync_log }}
{{ sync_cmd }} | tee -a {{ sync_log }} {{ sync_cmd }} | tee -a {{ sync_log }}
# Yes this is a bit hacky. Can't think of a better way to do this. # Yes this is a bit hacky. Can't think of a better way to do this.
@ -25,6 +26,11 @@ if [ "$ret_val" -eq 0 ]; then
# echo "Repository is empty." | tee -a {{ sync_log }} # echo "Repository is empty." | tee -a {{ sync_log }}
# rm -rf {{ download_path }} # rm -rf {{ download_path }}
#fi #fi
{%- if deploy_extra_files %}
pushd {{ download_path }}
curl -RO {{ gpg_key_url }}
popd
{% endif %}
exit 0 exit 0
fi fi
fi fi

View File

@ -1,6 +1,10 @@
-indev {{ boot_iso }} -indev {{ boot_iso }}
-outdev {{ isoname }} -outdev {{ isoname }}
-boot_image any replay -boot_image any replay
-joliet on
-system_id {{ 'PPC' if arch == 'ppc64le' else 'LINUX' }}
-compliance joliet_long_names
{{ '-compliance untranslated_names' if arch == 'ppc64le' }}
-volid {{ volid }} -volid {{ volid }}
{{ graft }} {{ graft }}
-end -end

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -61,6 +61,8 @@ class IsoBuild:
extra_iso_mode: str = 'local', extra_iso_mode: str = 'local',
compose_dir_is_here: bool = False, compose_dir_is_here: bool = False,
hashed: bool = False, hashed: bool = False,
updated_image: bool = False,
image_increment: str = '0',
image=None, image=None,
logger=None logger=None
): ):
@ -93,13 +95,18 @@ class IsoBuild:
self.checksum = rlvars['checksum'] self.checksum = rlvars['checksum']
self.profile = rlvars['profile'] self.profile = rlvars['profile']
self.hashed = hashed self.hashed = hashed
self.updated_image = updated_image
self.updated_image_increment = "." + image_increment
self.updated_image_date = (time.strftime("%Y%m%d", time.localtime())
+ self.updated_image_increment)
# Relevant major version items # Relevant major version items
self.arch = arch self.arch = arch
self.arches = rlvars['allowed_arches'] self.arches = rlvars['allowed_arches']
self.release = rlvars['revision'] self.release = rlvars['revision']
self.minor_version = rlvars['minor'] self.minor_version = rlvars['minor']
self.revision = rlvars['revision'] + "-" + rlvars['rclvl'] self.revision_level = rlvars['revision'] + "-" + rlvars['rclvl']
self.revision = rlvars['revision']
self.rclvl = rlvars['rclvl'] self.rclvl = rlvars['rclvl']
self.repos = rlvars['iso_map']['lorax']['repos'] self.repos = rlvars['iso_map']['lorax']['repos']
self.repo_base_url = config['repo_base_url'] self.repo_base_url = config['repo_base_url']
@ -113,12 +120,6 @@ class IsoBuild:
if 'container' in rlvars and len(rlvars['container']) > 0: if 'container' in rlvars and len(rlvars['container']) > 0:
self.container = rlvars['container'] self.container = rlvars['container']
self.staging_dir = os.path.join(
config['staging_root'],
config['category_stub'],
self.revision
)
# all bucket related info # all bucket related info
self.s3_region = config['aws_region'] self.s3_region = config['aws_region']
self.s3_bucket = config['bucket'] self.s3_bucket = config['bucket']
@ -196,7 +197,7 @@ class IsoBuild:
self.compose_dir_is_here, self.compose_dir_is_here,
self.hashed self.hashed
) )
self.log.info(self.revision) self.log.info(self.revision_level)
def run(self): def run(self):
work_root = os.path.join( work_root = os.path.join(
@ -502,6 +503,7 @@ class IsoBuild:
self.log.info('Removing boot.iso from %s' % image) self.log.info('Removing boot.iso from %s' % image)
try: try:
os.remove(path_to_image + '/images/boot.iso') os.remove(path_to_image + '/images/boot.iso')
os.remove(path_to_image + '/images/boot.iso.manifest')
except: except:
self.log.error( self.log.error(
'[' + Color.BOLD + Color.YELLOW + 'FAIL' + Color.END + '] ' + '[' + Color.BOLD + Color.YELLOW + 'FAIL' + Color.END + '] ' +
@ -509,21 +511,9 @@ class IsoBuild:
) )
def _copy_boot_to_work(self, force_unpack, arch): def _copy_boot_to_work(self, force_unpack, arch):
src_to_image = os.path.join( src_to_image = os.path.join(self.lorax_work_dir, arch, 'lorax')
self.lorax_work_dir, iso_to_go = os.path.join(self.iso_work_dir, arch)
arch, path_to_src_image = os.path.join(src_to_image, 'images/boot.iso')
'lorax'
)
iso_to_go = os.path.join(
self.iso_work_dir,
arch
)
path_to_src_image = '{}/{}'.format(
src_to_image,
'/images/boot.iso'
)
rclevel = '' rclevel = ''
if self.release_candidate: if self.release_candidate:
@ -538,15 +528,13 @@ class IsoBuild:
'boot' 'boot'
) )
isobootpath = '{}/{}'.format( isobootpath = os.path.join(iso_to_go, discname)
iso_to_go, manifest = '{}.manifest'.format(isobootpath)
discname link_name = '{}-{}-boot.iso'.format(self.shortname, arch)
) link_manifest = link_name + '.manifest'
isobootpath = os.path.join(iso_to_go, discname)
manifest = '{}.{}'.format( linkbootpath = os.path.join(iso_to_go, link_name)
isobootpath, manifestlink = os.path.join(iso_to_go, link_manifest)
'manifest'
)
if not force_unpack: if not force_unpack:
file_check = isobootpath file_check = isobootpath
@ -556,9 +544,18 @@ class IsoBuild:
self.log.info('Copying %s boot iso to work directory...' % arch) self.log.info('Copying %s boot iso to work directory...' % arch)
os.makedirs(iso_to_go, exist_ok=True) os.makedirs(iso_to_go, exist_ok=True)
shutil.copy2(path_to_src_image, isobootpath) try:
shutil.copy2(path_to_src_image, isobootpath)
if os.path.exists(linkbootpath):
os.remove(linkbootpath)
os.symlink(discname, linkbootpath)
except Exception as e:
self.log.error(Color.FAIL + 'We could not copy the image or create a symlink.')
raise SystemExit(e)
if os.path.exists(path_to_src_image + '.manifest'): if os.path.exists(path_to_src_image + '.manifest'):
shutil.copy2(path_to_src_image + '.manifest', manifest) shutil.copy2(path_to_src_image + '.manifest', manifest)
os.symlink(manifest.split('/')[-1], manifestlink)
self.log.info('Creating checksum for %s boot iso...' % arch) self.log.info('Creating checksum for %s boot iso...' % arch)
checksum = Shared.get_checksum(isobootpath, self.checksum, self.log) checksum = Shared.get_checksum(isobootpath, self.checksum, self.log)
@ -569,6 +566,14 @@ class IsoBuild:
c.write(checksum) c.write(checksum)
c.close() c.close()
linksum = Shared.get_checksum(linkbootpath, self.checksum, self.log)
if not linksum:
self.log.error(Color.FAIL + linkbootpath + ' not found! Did we actually make the symlink?')
return
with open(linkbootpath + '.CHECKSUM', "w+") as l:
l.write(linksum)
l.close()
def _copy_nondisc_to_repo(self, force_unpack, arch, repo): def _copy_nondisc_to_repo(self, force_unpack, arch, repo):
""" """
Syncs data from a non-disc set of images to the appropriate repo. Repo Syncs data from a non-disc set of images to the appropriate repo. Repo
@ -581,6 +586,13 @@ class IsoBuild:
'os' 'os'
) )
kspathway = os.path.join(
self.compose_latest_sync,
repo,
arch,
'kickstart'
)
src_to_image = os.path.join( src_to_image = os.path.join(
self.lorax_work_dir, self.lorax_work_dir,
arch, arch,
@ -614,6 +626,7 @@ class IsoBuild:
try: try:
shutil.copytree(src_to_image, pathway, copy_function=shutil.copy2, dirs_exist_ok=True) shutil.copytree(src_to_image, pathway, copy_function=shutil.copy2, dirs_exist_ok=True)
shutil.copytree(src_to_image, kspathway, copy_function=shutil.copy2, dirs_exist_ok=True)
except: except:
self.log.error('%s already exists??' % repo) self.log.error('%s already exists??' % repo)
@ -769,11 +782,14 @@ class IsoBuild:
mock_sh_template = self.tmplenv.get_template('extraisobuild.tmpl.sh') mock_sh_template = self.tmplenv.get_template('extraisobuild.tmpl.sh')
iso_template = self.tmplenv.get_template('buildExtraImage.tmpl.sh') iso_template = self.tmplenv.get_template('buildExtraImage.tmpl.sh')
xorriso_template = self.tmplenv.get_template('xorriso.tmpl.txt') xorriso_template = self.tmplenv.get_template('xorriso.tmpl.txt')
iso_readme_template = self.tmplenv.get_template('ISOREADME.tmpl')
mock_iso_path = '/var/tmp/lorax-{}.cfg'.format(self.major_version) mock_iso_path = '/var/tmp/lorax-{}.cfg'.format(self.major_version)
mock_sh_path = '{}/extraisobuild-{}-{}.sh'.format(entries_dir, arch, image) mock_sh_path = '{}/extraisobuild-{}-{}.sh'.format(entries_dir, arch, image)
iso_template_path = '{}/buildExtraImage-{}-{}.sh'.format(entries_dir, arch, image) iso_template_path = '{}/buildExtraImage-{}-{}.sh'.format(entries_dir, arch, image)
xorriso_template_path = '{}/xorriso-{}-{}.txt'.format(entries_dir, arch, image) xorriso_template_path = '{}/xorriso-{}-{}.txt'.format(entries_dir, arch, image)
iso_readme_path = '{}/{}/README'.format(self.iso_work_dir, arch)
print(iso_readme_path)
log_root = os.path.join( log_root = os.path.join(
work_root, work_root,
@ -801,6 +817,10 @@ class IsoBuild:
if self.release_candidate: if self.release_candidate:
rclevel = '-' + self.rclvl rclevel = '-' + self.rclvl
datestamp = ''
if self.updated_image:
datestamp = '-' + self.updated_image_date
volid = '{}-{}-{}{}-{}-{}'.format( volid = '{}-{}-{}{}-{}-{}'.format(
self.shortname, self.shortname,
self.major_version, self.major_version,
@ -810,15 +830,17 @@ class IsoBuild:
volname volname
) )
isoname = '{}-{}.{}{}-{}-{}.iso'.format( isoname = '{}-{}{}{}-{}-{}.iso'.format(
self.shortname, self.shortname,
self.major_version, self.revision,
self.minor_version,
rclevel, rclevel,
datestamp,
arch, arch,
image image
) )
generic_isoname = '{}-{}-{}.iso'.format(self.shortname, arch, image)
lorax_pkg_cmd = '/usr/bin/dnf install {} -y {}'.format( lorax_pkg_cmd = '/usr/bin/dnf install {} -y {}'.format(
' '.join(required_pkgs), ' '.join(required_pkgs),
log_path_command log_path_command
@ -867,6 +889,7 @@ class IsoBuild:
isoname=isoname, isoname=isoname,
volid=volid, volid=volid,
graft=xorpoint, graft=xorpoint,
arch=arch,
) )
xorriso_template_entry = open(xorriso_template_path, "w+") xorriso_template_entry = open(xorriso_template_path, "w+")
xorriso_template_entry.write(xorriso_template_output) xorriso_template_entry.write(xorriso_template_output)
@ -894,6 +917,11 @@ class IsoBuild:
make_manifest=make_manifest, make_manifest=make_manifest,
lorax_pkg_cmd=lorax_pkg_cmd, lorax_pkg_cmd=lorax_pkg_cmd,
isoname=isoname, isoname=isoname,
generic_isoname=generic_isoname,
)
iso_readme_template_output = iso_readme_template.render(
arch=arch
) )
mock_iso_entry = open(mock_iso_path, "w+") mock_iso_entry = open(mock_iso_path, "w+")
@ -908,6 +936,10 @@ class IsoBuild:
iso_template_entry.write(iso_template_output) iso_template_entry.write(iso_template_output)
iso_template_entry.close() iso_template_entry.close()
iso_readme_entry = open(iso_readme_path, "w+")
iso_readme_entry.write(iso_readme_template_output)
iso_readme_entry.close()
os.chmod(mock_sh_path, 0o755) os.chmod(mock_sh_path, 0o755)
os.chmod(iso_template_path, 0o755) os.chmod(iso_template_path, 0o755)
@ -943,6 +975,11 @@ class IsoBuild:
isos_dir = os.path.join(work_root, "isos") isos_dir = os.path.join(work_root, "isos")
bad_exit_list = [] bad_exit_list = []
checksum_list = [] checksum_list = []
datestamp = ''
if self.updated_image:
datestamp = '-' + self.updated_image_date
for i in images: for i in images:
entry_name_list = [] entry_name_list = []
image_name = i image_name = i
@ -956,17 +993,25 @@ class IsoBuild:
if self.release_candidate: if self.release_candidate:
rclevel = '-' + self.rclvl rclevel = '-' + self.rclvl
isoname = '{}/{}-{}.{}{}-{}-{}.iso'.format( isoname = '{}/{}-{}{}{}-{}-{}.iso'.format(
a, a,
self.shortname, self.shortname,
self.major_version, self.revision,
self.minor_version,
rclevel, rclevel,
datestamp,
a,
i
)
genericname = '{}/{}-{}-{}.iso'.format(
a,
self.shortname,
a, a,
i i
) )
checksum_list.append(isoname) checksum_list.append(isoname)
checksum_list.append(genericname)
for pod in entry_name_list: for pod in entry_name_list:
podman_cmd_entry = '{} run -d -it -v "{}:{}" -v "{}:{}" --name {} --entrypoint {}/{} {}'.format( podman_cmd_entry = '{} run -d -it -v "{}:{}" -v "{}:{}" --name {} --entrypoint {}/{} {}'.format(
@ -1358,6 +1403,7 @@ class IsoBuild:
source_path = latest_artifacts[arch] source_path = latest_artifacts[arch]
drop_name = source_path.split('/')[-1] drop_name = source_path.split('/')[-1]
checksum_name = drop_name + '.CHECKSUM'
full_drop = '{}/{}'.format( full_drop = '{}/{}'.format(
image_arch_dir, image_arch_dir,
drop_name drop_name
@ -1407,6 +1453,15 @@ class IsoBuild:
arch, arch,
formattype formattype
) )
latest_path = latest_name.split('/')[-1]
latest_checksum = '{}/{}-{}-{}.latest.{}.{}.CHECKSUM'.format(
image_arch_dir,
self.shortname,
self.major_version,
imagename,
arch,
formattype
)
# For some reason python doesn't have a "yeah just change this # For some reason python doesn't have a "yeah just change this
# link" part of the function # link" part of the function
if os.path.exists(latest_name): if os.path.exists(latest_name):
@ -1414,6 +1469,17 @@ class IsoBuild:
os.symlink(drop_name, latest_name) os.symlink(drop_name, latest_name)
self.log.info('Creating checksum for latest symlinked image...')
shutil.copy2(checksum_drop, latest_checksum)
with open(latest_checksum, 'r') as link:
checkdata = link.read()
checkdata = checkdata.replace(drop_name, latest_path)
with open(latest_checksum, 'w+') as link:
link.write(checkdata)
link.close()
self.log.info(Color.INFO + 'Image download phase completed') self.log.info(Color.INFO + 'Image download phase completed')
@ -1436,6 +1502,8 @@ class LiveBuild:
image=None, image=None,
justcopyit: bool = False, justcopyit: bool = False,
force_build: bool = False, force_build: bool = False,
updated_image: bool = False,
image_increment: str = '0',
logger=None logger=None
): ):
@ -1449,7 +1517,6 @@ class LiveBuild:
self.major_version = major self.major_version = major
self.compose_dir_is_here = compose_dir_is_here self.compose_dir_is_here = compose_dir_is_here
self.date_stamp = config['date_stamp'] self.date_stamp = config['date_stamp']
self.date = time.strftime("%Y%m%d", time.localtime())
self.compose_root = config['compose_root'] self.compose_root = config['compose_root']
self.compose_base = config['compose_root'] + "/" + major self.compose_base = config['compose_root'] + "/" + major
self.current_arch = config['arch'] self.current_arch = config['arch']
@ -1483,6 +1550,11 @@ class LiveBuild:
if 'container' in rlvars and len(rlvars['container']) > 0: if 'container' in rlvars and len(rlvars['container']) > 0:
self.container = rlvars['container'] self.container = rlvars['container']
self.updated_image = updated_image
self.updated_image_increment = "." + image_increment
self.date = (time.strftime("%Y%m%d", time.localtime())
+ self.updated_image_increment)
# Templates # Templates
file_loader = FileSystemLoader(f"{_rootdir}/templates") file_loader = FileSystemLoader(f"{_rootdir}/templates")
self.tmplenv = Environment(loader=file_loader) self.tmplenv = Environment(loader=file_loader)
@ -1643,16 +1715,17 @@ class LiveBuild:
) )
required_pkgs = self.livemap['required_pkgs'] required_pkgs = self.livemap['required_pkgs']
volid = '{}-{}-{}'.format( volid = '{}-{}-{}-{}'.format(
self.shortname, self.shortname,
image, self.major_version,
self.release self.minor_version,
image
) )
isoname = '{}-{}-{}-{}-{}.iso'.format( isoname = '{}-{}-{}-{}-{}.iso'.format(
self.shortname, self.shortname,
image,
self.release, self.release,
image,
self.current_arch, self.current_arch,
self.date self.date
) )
@ -1865,11 +1938,18 @@ class LiveBuild:
live_dir_arch = os.path.join(self.live_work_dir, arch) live_dir_arch = os.path.join(self.live_work_dir, arch)
isoname = '{}-{}-{}-{}-{}.iso'.format( isoname = '{}-{}-{}-{}-{}.iso'.format(
self.shortname, self.shortname,
image,
self.release, self.release,
image,
arch, arch,
self.date self.date
) )
isolink = '{}-{}-{}-{}-{}.iso'.format(
self.shortname,
self.major_version,
image,
arch,
'latest'
)
live_res_dir = '/var/lib/mock/{}-{}-{}/result'.format( live_res_dir = '/var/lib/mock/{}-{}-{}/result'.format(
self.shortname.lower(), self.shortname.lower(),
self.major_version, self.major_version,
@ -1907,8 +1987,17 @@ class LiveBuild:
self.log.info(Color.INFO + 'Copying image to work directory') self.log.info(Color.INFO + 'Copying image to work directory')
source_path = os.path.join(live_res_dir, isoname) source_path = os.path.join(live_res_dir, isoname)
dest_path = os.path.join(live_dir_arch, isoname) dest_path = os.path.join(live_dir_arch, isoname)
link_path = os.path.join(live_dir_arch, isolink)
os.makedirs(live_dir_arch, exist_ok=True) os.makedirs(live_dir_arch, exist_ok=True)
shutil.copy2(source_path, dest_path) try:
shutil.copy2(source_path, dest_path)
if os.path.exists(link_path):
os.remove(link_path)
os.symlink(isoname, link_path)
except:
self.log.error(Color.FAIL + 'We could not copy the image or create a symlink.')
return
self.log.info(Color.INFO + 'Generating checksum') self.log.info(Color.INFO + 'Generating checksum')
checksum = Shared.get_checksum(dest_path, self.checksum, self.log) checksum = Shared.get_checksum(dest_path, self.checksum, self.log)
if not checksum: if not checksum:
@ -1917,3 +2006,11 @@ class LiveBuild:
with open(dest_path + '.CHECKSUM', "w+") as c: with open(dest_path + '.CHECKSUM', "w+") as c:
c.write(checksum) c.write(checksum)
c.close() c.close()
linksum = Shared.get_checksum(link_path, self.checksum, self.log)
if not linksum:
self.log.error(Color.FAIL + link_path + ' not found. Did we copy it?')
return
with open(link_path + '.CHECKSUM', "w+") as c:
c.write(linksum)
c.close()

View File

@ -5,6 +5,7 @@ import json
import hashlib import hashlib
import shlex import shlex
import subprocess import subprocess
import shutil
import yaml import yaml
import requests import requests
import boto3 import boto3
@ -401,7 +402,21 @@ class Shared:
return cmd return cmd
@staticmethod @staticmethod
def generate_conf(data, logger, dest_path='/var/tmp') -> str: def generate_conf(
shortname,
major_version,
repos,
repo_base_url,
project_id,
hashed,
extra_files,
gpgkey,
gpg_check,
repo_gpg_check,
templates,
logger,
dest_path='/var/tmp'
) -> str:
""" """
Generates the necessary repo conf file for the operation. This repo Generates the necessary repo conf file for the operation. This repo
file should be temporary in nature. This will generate a repo file file should be temporary in nature. This will generate a repo file
@ -413,35 +428,35 @@ class Shared:
""" """
fname = os.path.join( fname = os.path.join(
dest_path, dest_path,
"{}-{}-config.repo".format(data.shortname, data.major_version) "{}-{}-config.repo".format(shortname, major_version)
) )
data.log.info('Generating the repo configuration: %s' % fname) logger.info('Generating the repo configuration: %s' % fname)
if data.repo_base_url.startswith("/"): if repo_base_url.startswith("/"):
logger.error("Local file syncs are not supported.") logger.error("Local file syncs are not supported.")
raise SystemExit(Color.BOLD + "Local file syncs are not " raise SystemExit(Color.BOLD + "Local file syncs are not "
"supported." + Color.END) "supported." + Color.END)
prehashed = '' prehashed = ''
if data.hashed: if hashed:
prehashed = "hashed-" prehashed = "hashed-"
# create dest_path # create dest_path
if not os.path.exists(dest_path): if not os.path.exists(dest_path):
os.makedirs(dest_path, exist_ok=True) os.makedirs(dest_path, exist_ok=True)
config_file = open(fname, "w+") config_file = open(fname, "w+")
repolist = [] repolist = []
for repo in data.repos: for repo in repos:
constructed_url = '{}/{}/repo/{}{}/$basearch'.format( constructed_url = '{}/{}/repo/{}{}/$basearch'.format(
data.repo_base_url, repo_base_url,
data.project_id, project_id,
prehashed, prehashed,
repo, repo,
) )
constructed_url_src = '{}/{}/repo/{}{}/src'.format( constructed_url_src = '{}/{}/repo/{}{}/src'.format(
data.repo_base_url, repo_base_url,
data.project_id, project_id,
prehashed, prehashed,
repo, repo,
) )
@ -450,12 +465,16 @@ class Shared:
'name': repo, 'name': repo,
'baseurl': constructed_url, 'baseurl': constructed_url,
'srcbaseurl': constructed_url_src, 'srcbaseurl': constructed_url_src,
'gpgkey': data.extra_files['git_raw_path'] + data.extra_files['gpg'][data.gpgkey] 'gpgkey': extra_files['git_raw_path'] + extra_files['gpg'][gpgkey]
} }
repolist.append(repodata) repolist.append(repodata)
template = data.tmplenv.get_template('repoconfig.tmpl') template = templates.get_template('repoconfig.tmpl')
output = template.render(repos=repolist) output = template.render(
repos=repolist,
gpg_check=gpg_check,
repo_gpg_check=repo_gpg_check
)
config_file.write(output) config_file.write(output)
config_file.close() config_file.close()
@ -821,7 +840,14 @@ class Shared:
isokwargs["input_charset"] = None isokwargs["input_charset"] = None
if opts['use_xorrisofs']: if opts['use_xorrisofs']:
cmd = ['/usr/bin/xorriso', '-dialog', 'on', '<', opts['graft_points']] cmd = [
'/usr/bin/xorriso',
'-dialog',
'on',
'<',
opts['graft_points'],
'2>&1'
]
else: else:
cmd = Shared.get_mkisofs_cmd( cmd = Shared.get_mkisofs_cmd(
opts['iso_name'], opts['iso_name'],
@ -937,7 +963,7 @@ class Shared:
Write compose info similar to pungi. Write compose info similar to pungi.
arches and repos may be better suited for a dictionary. that is a arches and repos may be better suited for a dictionary. that is a
future thing we will work on for 0.3.0. future thing we will work on for 0.5.0.
""" """
cijson = file_path + '.json' cijson = file_path + '.json'
ciyaml = file_path + '.yaml' ciyaml = file_path + '.yaml'
@ -961,3 +987,90 @@ class Shared:
with open(ciyaml, 'w+') as ymdump: with open(ciyaml, 'w+') as ymdump:
yaml.dump(jsonData, ymdump) yaml.dump(jsonData, ymdump)
ymdump.close() ymdump.close()
@staticmethod
def symlink_to_latest(shortname, major_version, generated_dir, compose_latest_dir, logger):
"""
Emulates pungi and symlinks latest-Rocky-X
This link will be what is updated in full runs. Whatever is in this
'latest' directory is what is rsynced on to staging after completion.
This link should not change often.
"""
try:
os.remove(compose_latest_dir)
except:
pass
logger.info('Symlinking to latest-{}-{}...'.format(shortname, major_version))
os.symlink(generated_dir, compose_latest_dir)
@staticmethod
def deploy_extra_files(extra_files, sync_root, global_work_root, logger):
"""
deploys extra files based on info of rlvars including a
extra_files.json
might also deploy COMPOSE_ID and maybe in the future a metadata dir with
a bunch of compose-esque stuff.
"""
#logger.info(Color.INFO + 'Deploying treeinfo, discinfo, and media.repo')
cmd = Shared.git_cmd(logger)
tmpclone = '/tmp/clone'
extra_files_dir = os.path.join(
global_work_root,
'extra-files'
)
metadata_dir = os.path.join(
sync_root,
"metadata"
)
if not os.path.exists(extra_files_dir):
os.makedirs(extra_files_dir, exist_ok=True)
if not os.path.exists(metadata_dir):
os.makedirs(metadata_dir, exist_ok=True)
clonecmd = '{} clone {} -b {} -q {}'.format(
cmd,
extra_files['git_repo'],
extra_files['branch'],
tmpclone
)
git_clone = subprocess.call(
shlex.split(clonecmd),
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL
)
logger.info(Color.INFO + 'Deploying extra files to work and metadata directories ...')
# Copy files to work root
for extra in extra_files['list']:
src = '/tmp/clone/' + extra
# Copy extra files to root of compose here also - The extra files
# are meant to be picked up by our ISO creation process and also
# exist on our mirrors.
try:
shutil.copy2(src, extra_files_dir)
shutil.copy2(src, metadata_dir)
except:
logger.warn(Color.WARN + 'Extra file not copied: ' + src)
try:
shutil.rmtree(tmpclone)
except OSError as e:
logger.error(Color.FAIL + 'Directory ' + tmpclone +
' could not be removed: ' + e.strerror
)
@staticmethod
def dnf_sync(repo, sync_root, work_root, arch, logger):
"""
This is for normal dnf syncs. This is very slow.
"""
logger.error('DNF syncing has been removed.')
logger.error('Please install podman and enable parallel')
raise SystemExit()

View File

@ -1,6 +1,6 @@
[tool.poetry] [tool.poetry]
name = "empanadas" name = "empanadas"
version = "0.3.0" version = "0.4.0"
description = "hand crafted ISOs with love and spice" description = "hand crafted ISOs with love and spice"
authors = ["Louis Abel <label@rockylinux.org>", "Neil Hanlon <neil@rockylinux.org>"] authors = ["Louis Abel <label@rockylinux.org>", "Neil Hanlon <neil@rockylinux.org>"]
@ -34,6 +34,7 @@ build-image = "empanadas.scripts.build_image:run"
finalize_compose = "empanadas.scripts.finalize_compose:run" finalize_compose = "empanadas.scripts.finalize_compose:run"
pull-cloud-image = "empanadas.scripts.pull_cloud_image:run" pull-cloud-image = "empanadas.scripts.pull_cloud_image:run"
generate_compose = "empanadas.scripts.generate_compose:run" generate_compose = "empanadas.scripts.generate_compose:run"
peridot_repoclosure = "empanadas.scripts.peridot_repoclosure:run"
[build-system] [build-system]
requires = ["poetry-core>=1.0.0"] requires = ["poetry-core>=1.0.0"]

View File

@ -2,4 +2,4 @@ from empanadas import __version__
def test_version(): def test_version():
assert __version__ == '0.2.0' assert __version__ == '0.4.0'

View File

@ -1 +1 @@
# Mirrormanager Mangling tools # Mirrormanager Mangling tools and other Accessories

View File

@ -7,3 +7,4 @@ LIST=${LIST:-mirrorlist}
MIRRORLIST_BASE="http://mirrors.rockylinux.org/${LIST}" MIRRORLIST_BASE="http://mirrors.rockylinux.org/${LIST}"
MIRROR_DISPLAY_COUNT=1 MIRROR_DISPLAY_COUNT=1
GIT_URL="https://git.rockylinux.org"

View File

@ -0,0 +1,3 @@
# Generators
These help generate comps or other data we need for peridot or pungi

20
mangle/generators/common Normal file
View File

@ -0,0 +1,20 @@
# To be sourced by scripts to use
if [ -z "$RLVER" ]; then
echo "You must set RLVER."
exit 1
fi
PREPOPDROP="/tmp/prepopulate.json"
VERSDROP="/tmp/versions.list"
# Source Major common
# Override: Not Allowed
test -f "$(dirname "${BASH_SOURCE[0]}")/common_${RLVER}" && source "$(dirname "${BASH_SOURCE[0]}")/common_${RLVER}"
if [ "$?" -ne 0 ]; then
echo "Could not source common_${RLVER}"
exit 1
fi
STREAM_COMPOSE_BASEURL="https://composes.stream.centos.org/production"
COMPOSE_BASEDIR="/mnt/compose"

View File

@ -0,0 +1,31 @@
class common:
def rlver(self, rlver):
default = "Not Supported"
return getattr(self, 'rl' + str(rlver), lambda: default)()
def rl8(self):
REPOS = {
'AppStream': ['aarch64', 'x86_64'],
'BaseOS': ['aarch64', 'x86_64'],
'HighAvailability': ['aarch64', 'x86_64'],
'PowerTools': ['aarch64', 'x86_64'],
'ResilientStorage': ['aarch64', 'x86_64'],
'RT': ['x86_64'],
}
return REPOS
def rl9(self):
REPOS = {
'AppStream': ['aarch64', 'ppc64le', 's390x', 'x86_64'],
'BaseOS': ['aarch64', 'ppc64le', 's390x', 'x86_64'],
'CRB': ['aarch64', 'ppc64le', 's390x', 'x86_64'],
'HighAvailability': ['aarch64', 'ppc64le', 's390x', 'x86_64'],
'NFV': ['x86_64'],
'ResilientStorage': ['ppc64le', 's390x', 'x86_64'],
'RT': ['x86_64'],
'SAP': ['ppc64le', 's390x', 'x86_64'],
'SAPHANA': ['ppc64le', 'x86_64']
}
return REPOS
switcher = common()

View File

@ -0,0 +1,4 @@
# To be sourced by scripts to use
REPO=("BaseOS" "AppStream" "CRB" "HighAvailability" "ResilientStorage" "NFV" "RT")
ARCH=("aarch64" "x86_64")

View File

@ -0,0 +1,4 @@
# To be sourced by scripts to use
REPO=("BaseOS" "AppStream" "CRB" "HighAvailability" "ResilientStorage" "NFV" "RT" "SAP" "SAPHANA")
ARCH=("aarch64" "ppc64le" "s390x" "x86_64")

View File

@ -0,0 +1,18 @@
#!/bin/bash
source common
if [ ! -f "/usr/bin/pungi-koji" ]; then
echo "You must have pungi installed."
exit 1
fi
VER="${RLVER}"
BRANCH="r${VER}"
REPO="${GIT_URL}/rocky/pungi-rocky.git"
CMD="/usr/bin/pungi-koji --production --no-latest-link --just-phase init --config rocky.conf --compose-dir /var/tmp/composes/ --label RC-${VER}"
git clone ${REPO} -b ${BRANCH} /var/tmp/pungi
pushd /var/tmp/pungi
${CMD}
popd

View File

@ -0,0 +1,38 @@
#!/bin/bash
# Parses a local compose's repos
#set -x
if [ -n "$1" ] && [ -n "$2" ]; then
MAJOR=$1
DATE=$2
else
echo "Major version not specified"
exit 1
fi
# Verify the date format
echo "${DATE}" | grep -Eq '[0-9]+\.[0-9]'
grep_val=$?
if [ "$grep_val" -ne 0 ]; then
echo "Date format incorrect. You must use: YYYYMMDD.X"
fi
export RLVER=$MAJOR
source common
drop="${PREPOPDROP}"
current=$(pwd)
compose_dir="${COMPOSE_BASEDIR}/Rocky-${MAJOR}-${DATE}/compose"
pushd "${compose_dir}" || { echo "Could not change directory"; exit 1; }
/usr/bin/python3 "${current}/prepopulate_parser.py"
ret_val=$?
popd || { echo "Could not change back..."; exit 1; }
if [ "$ret_val" -ne "0" ]; then
echo "There was an error running through the parser."
exit 1
fi
echo "File located at: $drop"

View File

@ -0,0 +1,52 @@
#!/bin/bash
# Parses a CentOS Stream compose's repos
#set -x
if [ -n "$1" ] && [ -n "$2" ]; then
MAJOR=$1
DATE=$2
else
echo "Major version not specified"
exit 1
fi
# Verify the date format
echo "${DATE}" | grep -Eq '[0-9]+\.[0-9]'
grep_val=$?
if [ "$grep_val" -ne 0 ]; then
echo "Date format incorrect. You must use: YYYYMMDD.X"
fi
export RLVER=$MAJOR
source common
drop="${PREPOPDROP}"
current=$(pwd)
tmpdir=$(mktemp -d)
stream_compose_url="${STREAM_COMPOSE_BASEURL}/CentOS-Stream-${MAJOR}-${DATE}/compose"
pushd "${tmpdir}" || { echo "Could not change directory"; exit 1; }
for x in "${REPO[@]}"; do
echo "Working on ${x}"
for y in "${ARCH[@]}"; do
repodatas=( $(dnf reposync --repofrompath ${x},${stream_compose_url}/${x}/${y}/os --download-metadata --repoid=${x} -p ${x}/${y} --forcearch ${y} --norepopath --remote-time --assumeyes -u | grep repodata) )
mkdir -p "${x}/${y}/repodata"
pushd "${x}/${y}/repodata" || { echo "Could not change directory"; exit 1; }
for z in "${repodatas[@]}"; do
wget -q -nc "${z}"
done
wget -q -nc "${stream_compose_url}/${x}/${y}/os/repodata/repomd.xml"
popd || { echo "Could not change back..."; exit 1; }
done
done
/usr/bin/python3 "${current}/prepopulate_parser.py"
ret_val=$?
popd || { echo "Could not change back..."; exit 1; }
if [ "$ret_val" -ne "0" ]; then
echo "There was an error running through the parser."
exit 1
fi
echo "File located at: $drop"

View File

@ -0,0 +1,52 @@
#!/bin/bash
# Parses a CentOS Stream compose's repos
#set -x
if [ -n "$1" ] && [ -n "$2" ]; then
MAJOR=$1
DATE=$2
else
echo "Major version not specified"
exit 1
fi
# Verify the date format
echo "${DATE}" | grep -Eq '[0-9]+\.[0-9]'
grep_val=$?
if [ "$grep_val" -ne 0 ]; then
echo "Date format incorrect. You must use: YYYYMMDD.X"
fi
export RLVER=$MAJOR
source common
drop="${VERSDROP}"
current=$(pwd)
tmpdir=$(mktemp -d)
stream_compose_url="${STREAM_COMPOSE_BASEURL}/CentOS-Stream-${MAJOR}-${DATE}/compose"
pushd "${tmpdir}" || { echo "Could not change directory"; exit 1; }
for x in "${REPO[@]}"; do
echo "Working on ${x}"
for y in "${ARCH[@]}"; do
repodatas=( $(dnf reposync --repofrompath ${x},${stream_compose_url}/${x}/${y}/os --download-metadata --repoid=${x} -p ${x}/${y} --forcearch ${y} --norepopath --remote-time --assumeyes -u | grep repodata) )
mkdir -p "${x}/${y}/repodata"
pushd "${x}/${y}/repodata" || { echo "Could not change directory"; exit 1; }
for z in "${repodatas[@]}"; do
wget -q -nc "${z}"
done
wget -q -nc "${stream_compose_url}/${x}/${y}/os/repodata/repomd.xml"
popd || { echo "Could not change back..."; exit 1; }
done
done
/usr/bin/python3 "${current}/version_parser.py"
ret_val=$?
popd || { echo "Could not change back..."; exit 1; }
if [ "$ret_val" -ne "0" ]; then
echo "There was an error running through the parser."
exit 1
fi
echo "File located at: $drop"

View File

@ -0,0 +1,69 @@
#!/usr/bin/env python3
import os
import os.path
import json
import dnf
import createrepo_c as cr
from common import *
REPOS = switcher.rlver((os.environ['RLVER']))
# Source packages we do not ship or are rocky branded
IGNORES = [
'insights-client',
'rhc',
'centos-indexhtml',
'centos-logos',
'centos-stream-release',
'redhat-indexhtml',
'redhat-logos',
'redhat-release'
]
def warningcb(warning_type, message):
print("WARNING: %s" % message)
return True
repo_prepop = {}
for k in REPOS:
repo_prepop[k] = {}
for arch in REPOS[k]:
PRIMARY_XML_PATH = None
FILELISTS_XML_PATH = None
OTHER_XML_PATH = None
REPO_PATH = k + '/' + arch
repomd = cr.Repomd()
cr.xml_parse_repomd(os.path.join(REPO_PATH, "repodata/repomd.xml"), repomd, warningcb)
for record in repomd.records:
if record.type == "primary":
PRIMARY_XML_PATH = os.path.join(REPO_PATH, record.location_href)
elif record.type == "filelists":
FILELISTS_XML_PATH = os.path.join(REPO_PATH, record.location_href)
elif record.type == "other":
OTHER_XML_PATH = os.path.join(REPO_PATH, record.location_href)
package_iterator = cr.PackageIterator(primary_path=PRIMARY_XML_PATH, filelists_path=FILELISTS_XML_PATH, other_path=OTHER_XML_PATH, warningcb=warningcb)
repo_prepop[k][arch] = {}
for pkg in package_iterator:
name = pkg.name + '.' + pkg.arch
subject = dnf.subject.Subject(pkg.rpm_sourcerpm)
possible_nevra = subject.get_nevra_possibilities()
srcname = possible_nevra[0].name
# Ignore packages (by source) that we do not ship
if srcname in IGNORES:
continue
# Create the initial list if the package (by source) does not exist
if srcname not in repo_prepop[k][arch]:
repo_prepop[k][arch][srcname] = []
# Avoids duplicate entries - This is especially helpful for modules
if name not in repo_prepop[k][arch][srcname]:
repo_prepop[k][arch][srcname].append(name)
# Sorts the list items
repo_prepop[k][arch][srcname].sort()
entry_point = open('/tmp/prepopulate.json', 'w+')
json.dump(repo_prepop, entry_point, indent=2, sort_keys=True)
entry_point.close()

View File

@ -0,0 +1,72 @@
#!/usr/bin/env python3
import os
import os.path
import json
import dnf
import createrepo_c as cr
from common import *
REPOS = switcher.rlver((os.environ['RLVER']))
# Source packages we do not ship or are rocky branded
IGNORES = [
'insights-client',
'rhc',
'centos-indexhtml',
'centos-logos',
'centos-stream-release',
'redhat-indexhtml',
'redhat-logos',
'redhat-release'
]
def warningcb(warning_type, message):
print("WARNING: %s" % message)
return True
repo_prepop = {}
with open('/tmp/versions.list', 'w+') as fp:
for k in REPOS:
repo_prepop[k] = {}
for arch in REPOS[k]:
PRIMARY_XML_PATH = None
FILELISTS_XML_PATH = None
OTHER_XML_PATH = None
REPO_PATH = k + '/' + arch
repomd = cr.Repomd()
cr.xml_parse_repomd(os.path.join(REPO_PATH, "repodata/repomd.xml"), repomd, warningcb)
for record in repomd.records:
if record.type == "primary":
PRIMARY_XML_PATH = os.path.join(REPO_PATH, record.location_href)
elif record.type == "filelists":
FILELISTS_XML_PATH = os.path.join(REPO_PATH, record.location_href)
elif record.type == "other":
OTHER_XML_PATH = os.path.join(REPO_PATH, record.location_href)
package_iterator = cr.PackageIterator(primary_path=PRIMARY_XML_PATH, filelists_path=FILELISTS_XML_PATH, other_path=OTHER_XML_PATH, warningcb=warningcb)
repo_prepop[k][arch] = {}
for pkg in package_iterator:
subject = dnf.subject.Subject(pkg.rpm_sourcerpm)
possible_nevra = subject.get_nevra_possibilities()
srcname = possible_nevra[0].name
srcvers = possible_nevra[0].version
srcrele = possible_nevra[0].release
full = srcname + '-' + srcvers + '-' + srcrele
# Ignore packages (by source) that we do not ship
if srcname in IGNORES:
continue
# Create the initial list if the package (by source) does not exist
if srcname not in repo_prepop[k][arch]:
repo_prepop[k][arch][srcname] = {}
# Avoids duplicate entries - This is especially helpful for modules
repo_prepop[k][arch][srcname]['version'] = srcvers
repo_prepop[k][arch][srcname]['release'] = srcrele
fp.write(full + '\n')
fp.close()
entry_point = open('/tmp/versions.json', 'w+')
json.dump(repo_prepop, entry_point, indent=2, sort_keys=True)
entry_point.close()

View File

@ -22,6 +22,7 @@ PRODUCTION_ROOT="/mnt/repos-production"
# Override: Not Allowed # Override: Not Allowed
# relative to ${ENV}_ROOT # relative to ${ENV}_ROOT
CATEGORY_STUB="mirror/pub/rocky" CATEGORY_STUB="mirror/pub/rocky"
SIG_CATEGORY_STUB="mirror/pub/sig"
# Override: Required # Override: Required
#RELEASE_DIR="${CATEGORY_STUB}/${REVISION}${APPEND_TO_DIR}" #RELEASE_DIR="${CATEGORY_STUB}/${REVISION}${APPEND_TO_DIR}"

View File

@ -0,0 +1,51 @@
#!/bin/bash
# Syncs everything from staging to production
# Source common variables
# shellcheck disable=SC2046,1091,1090
source "$(dirname "$0")/common"
REV=${REVISION}${APPEND_TO_DIR}
cd "${STAGING_ROOT}/${CATEGORY_STUB}/${REV}" || { echo "Failed to change directory"; ret_val=1; exit 1; }
ret_val=$?
if [ $ret_val -eq "0" ]; then
# Full file list update for rocky linux itself
echo "Starting full file list for category"
cd "${PRODUCTION_ROOT}/${CATEGORY_STUB}/" || { echo "Failed to change directory"; exit 1; }
find . > "${PRODUCTION_ROOT}/${CATEGORY_STUB}/fullfilelist" & CATEPID=$!
echo "Starting full file list for root"
cd "${PRODUCTION_ROOT}/" || { echo "Failed to change directory"; exit 1; }
find . > "${PRODUCTION_ROOT}/fullfilelist" & ROOTPID=$!
wait $CATEPID
wait $ROOTPID
echo "Generating filelist for quick-fedora-mirror users"
if [[ -f /usr/local/bin/create-filelist ]]; then
# We're already here, but Justin Case wanted this
cd "${PRODUCTION_ROOT}/${CATEGORY_STUB}/" || { echo "Failed to change directory"; exit 1; }
/bin/cp fullfiletimelist-rocky fullfiletimelist-rocky-old
/usr/local/bin/create-filelist > fullfiletimelist-rocky & CREALIPID=$!
# We're already here, but Justin Case wanted this
cd "${PRODUCTION_ROOT}/" || { echo "Failed to change directory"; exit 1; }
/bin/cp fullfiletimelist-rocky fullfiletimelist-rocky-old
/usr/local/bin/create-filelist > fullfiletimelist-rocky & ROOTLIPID=$!
wait $CREALIPID
wait $ROOTLIPID
cd "${PRODUCTION_ROOT}/${CATEGORY_STUB}/" || { echo "Failed to change directory"; exit 1; }
chown 10004:10005 fullfilelist fullfiletimelist-rocky fullfiletimelist fullfiletimelist-rocky-linux
cp fullfiletimelist-rocky fullfiletimelist
cp fullfiletimelist-rocky fullfiletimelist-rocky-linux
cd "${PRODUCTION_ROOT}/" || { echo "Failed to change directory"; exit 1; }
chown 10004:10005 fullfilelist fullfiletimelist-rocky fullfiletimelist
cp fullfiletimelist-rocky fullfiletimelist
fi
fi

View File

@ -0,0 +1,31 @@
#!/bin/bash
# Syncs everything from staging to production
# Source common variables
# shellcheck disable=SC2046,1091,1090
source "$(dirname "$0")/common"
REV=${REVISION}${APPEND_TO_DIR}
cd "${STAGING_ROOT}/${CATEGORY_STUB}/${REV}" || { echo "Failed to change directory"; ret_val=1; exit 1; }
ret_val=$?
if [ $ret_val -eq "0" ]; then
# Full file list update for rocky linux itself
cd "${PRODUCTION_ROOT}/${CATEGORY_STUB}/" || { echo "Failed to change directory"; exit 1; }
# Hardlink everything except xml files
#hardlink -x '.*\.xml.*' "${REVISION}"
echo "Starting full file list for category"
find . > fullfilelist
echo "Generating filelist for quick-fedora-mirror users"
if [[ -f /usr/local/bin/create-filelist ]]; then
# We're already here, but Justin Case wanted this
cd "${PRODUCTION_ROOT}/${CATEGORY_STUB}/" || { echo "Failed to change directory"; exit 1; }
/bin/cp fullfiletimelist-rocky fullfiletimelist-rocky-old
/usr/local/bin/create-filelist > fullfiletimelist-rocky
cp fullfiletimelist-rocky fullfiletimelist
cp fullfiletimelist-rocky fullfiletimelist-rocky-linux
fi
chown 10004:10005 fullfilelist fullfiletimelist-rocky fullfiletimelist fullfiletimelist-rocky-linux
fi

View File

@ -0,0 +1,28 @@
#!/bin/bash
# Syncs everything from staging to production
# Source common variables
# shellcheck disable=SC2046,1091,1090
source "$(dirname "$0")/common"
REV=${REVISION}${APPEND_TO_DIR}
cd "${STAGING_ROOT}/${CATEGORY_STUB}/${REV}" || { echo "Failed to change directory"; ret_val=1; exit 1; }
ret_val=$?
if [ $ret_val -eq "0" ]; then
# Full file list update for production root
cd "${PRODUCTION_ROOT}/" || echo { echo "Failed to change directory"; exit 1; }
echo "Starting full file list for root"
find . > fullfilelist
echo "Generating filelist for quick-fedora-mirror users"
if [[ -f /usr/local/bin/create-filelist ]]; then
# We're already here, but Justin Case wanted this
cd "${PRODUCTION_ROOT}/" || { echo "Failed to change directory"; exit 1; }
/bin/cp fullfiletimelist-rocky fullfiletimelist-rocky-old
/usr/local/bin/create-filelist > fullfiletimelist-rocky
cp fullfiletimelist-rocky fullfiletimelist
fi
chown 10004:10005 fullfilelist fullfiletimelist-rocky fullfiletimelist
fi

View File

@ -0,0 +1,28 @@
#!/bin/bash
# Syncs everything from staging to production
# Source common variables
# shellcheck disable=SC2046,1091,1090
source "$(dirname "$0")/common"
REV=${REVISION}${APPEND_TO_DIR}
cd "${PRODUCTION_ROOT}/${SIG_CATEGORY_STUB}" || { echo "Failed to change directory"; ret_val=1; exit 1; }
ret_val=$?
if [ $ret_val -eq "0" ]; then
# Full file list update for production root
cd "${PRODUCTION_ROOT}/${SIG_CATEGORY_STUB}" || { echo "Failed to change directory"; exit 1; }
echo "Starting full file list for root"
find . > fullfilelist
echo "Generating filelist for quick-fedora-mirror users"
if [[ -f /usr/local/bin/create-filelist ]]; then
# We're already here, but Justin Case wanted this
cd "${PRODUCTION_ROOT}/${SIG_CATEGORY_STUB}" || { echo "Failed to change directory"; exit 1; }
/bin/cp fullfiletimelist-sig fullfiletimelist-sig-old
/usr/local/bin/create-filelist > fullfiletimelist-sig
cp fullfiletimelist-sig fullfiletimelist
fi
chown 10004:10005 fullfilelist fullfiletimelist-sig fullfiletimelist
fi

View File

@ -14,33 +14,34 @@ if [ $ret_val -eq "0" ]; then
TARGET="${PRODUCTION_ROOT}/${CATEGORY_STUB}/${REV:0:3}" TARGET="${PRODUCTION_ROOT}/${CATEGORY_STUB}/${REV:0:3}"
mkdir -p "${TARGET}" mkdir -p "${TARGET}"
echo "Syncing ${REVISION}" echo "Syncing ${REVISION}"
sudo -l && time fpsync -o '-av --numeric-ids --no-compress --chown=10004:10005' -n 24 -t /mnt/compose/partitions "${STAGING_ROOT}/${CATEGORY_STUB}/${REV}/" "${TARGET}/" sudo -l && time fpsync -n 24 -o '-a --numeric-ids --no-compress --chown=10004:10005' -t /mnt/compose/partitions "${STAGING_ROOT}/${CATEGORY_STUB}/${REV}/" "${TARGET}/"
# Full file list update for production root # Full file list update for production root
cd "${PRODUCTION_ROOT}/" || { echo "Failed to change directory"; exit 1; } #cd "${PRODUCTION_ROOT}/" || { echo "Failed to change directory"; exit 1; }
echo "Getting a full file list for the root dir" #echo "Getting a full file list for the root dir"
find . > fullfilelist #find . > fullfilelist
if [[ -f /usr/local/bin/create-filelist ]]; then #if [[ -f /usr/local/bin/create-filelist ]]; then
# We're already here, but Justin Case wanted this # # We're already here, but Justin Case wanted this
cd "${PRODUCTION_ROOT}/" || { echo "Failed to change directory"; exit 1; } # cd "${PRODUCTION_ROOT}/" || { echo "Failed to change directory"; exit 1; }
/bin/cp fullfiletimelist-rocky fullfiletimelist-rocky-old # /bin/cp fullfiletimelist-rocky fullfiletimelist-rocky-old
/usr/local/bin/create-filelist > fullfiletimelist-rocky # /usr/local/bin/create-filelist > fullfiletimelist-rocky
cp fullfiletimelist-rocky fullfiletimelist # cp fullfiletimelist-rocky fullfiletimelist
fi #fi
# Full file list update for rocky linux itself ## Full file list update for rocky linux itself
cd "${PRODUCTION_ROOT}/${CATEGORY_STUB}/" || { echo "Failed to change directory"; exit 1; } cd "${PRODUCTION_ROOT}/${CATEGORY_STUB}/" || { echo "Failed to change directory"; exit 1; }
# Hardlink everything except xml files ## Hardlink everything except xml files
echo "Hard linking" echo "Hard linking"
hardlink -x '.*\.xml.*' "${REVISION}" hardlink -x '.*\.xml.*' "${REVISION}"
echo "Getting a full file list for the rocky dir" #echo "Getting a full file list for the rocky dir"
find . > fullfilelist #find . > fullfilelist
if [[ -f /usr/local/bin/create-filelist ]]; then #if [[ -f /usr/local/bin/create-filelist ]]; then
# We're already here, but Justin Case wanted this # # We're already here, but Justin Case wanted this
cd "${PRODUCTION_ROOT}/${CATEGORY_STUB}/" || { echo "Failed to change directory"; exit 1; } # cd "${PRODUCTION_ROOT}/${CATEGORY_STUB}/" || { echo "Failed to change directory"; exit 1; }
/bin/cp fullfiletimelist-rocky fullfiletimelist-rocky-old # /bin/cp fullfiletimelist-rocky fullfiletimelist-rocky-old
/usr/local/bin/create-filelist > fullfiletimelist-rocky # /usr/local/bin/create-filelist > fullfiletimelist-rocky
cp fullfiletimelist-rocky fullfiletimelist # cp fullfiletimelist-rocky fullfiletimelist
fi #fi
chown 10004:10005 fullfilelist fullfiletimelist-rocky fullfiletimelist #chown 10004:10005 fullfilelist fullfiletimelist-rocky fullfiletimelist
echo "Syncing to prod completed. Please run the file list script."
fi fi

29
sync/sync-to-prod-sig.sh Normal file
View File

@ -0,0 +1,29 @@
#!/bin/bash
# Source common variables
# shellcheck disable=SC2046,1091,1090
source "$(dirname "$0")/common"
#if [[ $# -eq 0 ]] || [[ $# -eq 1 ]]; then
# echo "Not enough information."
# echo "You must use: shortname sig"
# exit 1
#fi
cd "${STAGING_ROOT}/${SIG_CATEGORY_STUB}/${MAJOR}" || { echo "Failed to change directory"; ret_val=1; exit 1; }
ret_val=$?
if [ $ret_val -eq "0" ]; then
TARGET=${PRODUCTION_ROOT}/${SIG_CATEGORY_STUB}/${MAJOR}/
mkdir -p "${TARGET}"
# disabling because none of our files should be starting with dashes. If they
# are something is *seriously* wrong here.
# shellcheck disable=SC2035
sudo -l && find **/* -maxdepth 0 -type d | parallel --will-cite -j 18 sudo rsync -av --chown=10004:10005 --progress --relative --human-readable \
{} "${TARGET}"
cd "${PRODUCTION_ROOT}/${SIG_CATEGORY_STUB}/" || { echo "Failed to change directory"; exit 1; }
echo "Hard linking"
hardlink -x '.*\.xml.*' "${MAJOR}"
echo "Syncing to prod completed. Please run the file list script."
fi

View File

@ -33,27 +33,29 @@ if [ $ret_val -eq "0" ]; then
fi fi
# Full file list update for production root # Full file list update for production root
cd "${PRODUCTION_ROOT}/" || echo { echo "Failed to change directory"; exit 1; } #cd "${PRODUCTION_ROOT}/" || echo { echo "Failed to change directory"; exit 1; }
find . > fullfilelist #find . > fullfilelist
if [[ -f /usr/local/bin/create-filelist ]]; then #if [[ -f /usr/local/bin/create-filelist ]]; then
# We're already here, but Justin Case wanted this # # We're already here, but Justin Case wanted this
cd "${PRODUCTION_ROOT}/" || { echo "Failed to change directory"; exit 1; } # cd "${PRODUCTION_ROOT}/" || { echo "Failed to change directory"; exit 1; }
/bin/cp fullfiletimelist-rocky fullfiletimelist-rocky-old # /bin/cp fullfiletimelist-rocky fullfiletimelist-rocky-old
/usr/local/bin/create-filelist > fullfiletimelist-rocky # /usr/local/bin/create-filelist > fullfiletimelist-rocky
cp fullfiletimelist-rocky fullfiletimelist # cp fullfiletimelist-rocky fullfiletimelist
fi #fi
# Full file list update for rocky linux itself ## Full file list update for rocky linux itself
cd "${PRODUCTION_ROOT}/${CATEGORY_STUB}/" || { echo "Failed to change directory"; exit 1; } cd "${PRODUCTION_ROOT}/${CATEGORY_STUB}/" || { echo "Failed to change directory"; exit 1; }
# Hardlink everything except xml files ## Hardlink everything except xml files
echo "Hard linking"
hardlink -x '.*\.xml.*' "${REVISION}" hardlink -x '.*\.xml.*' "${REVISION}"
find . > fullfilelist #find . > fullfilelist
if [[ -f /usr/local/bin/create-filelist ]]; then #if [[ -f /usr/local/bin/create-filelist ]]; then
# We're already here, but Justin Case wanted this # # We're already here, but Justin Case wanted this
cd "${PRODUCTION_ROOT}/${CATEGORY_STUB}/" || { echo "Failed to change directory"; exit 1; } # cd "${PRODUCTION_ROOT}/${CATEGORY_STUB}/" || { echo "Failed to change directory"; exit 1; }
/bin/cp fullfiletimelist-rocky fullfiletimelist-rocky-old # /bin/cp fullfiletimelist-rocky fullfiletimelist-rocky-old
/usr/local/bin/create-filelist > fullfiletimelist-rocky # /usr/local/bin/create-filelist > fullfiletimelist-rocky
cp fullfiletimelist-rocky fullfiletimelist # cp fullfiletimelist-rocky fullfiletimelist
fi #fi
chown 10004:10005 fullfilelist fullfiletimelist-rocky fullfiletimelist #chown 10004:10005 fullfilelist fullfiletimelist-rocky fullfiletimelist
echo "Syncing to prod completed. Please run the file list script."
fi fi

View File

@ -26,7 +26,7 @@ if [ $ret_val -eq "0" ]; then
# shellcheck disable=SC2035 # shellcheck disable=SC2035
#sudo -l && find **/* -maxdepth 0 -type d | parallel --will-cite -j 18 sudo rsync -av --chown=10004:10005 --progress --relative --human-readable \ #sudo -l && find **/* -maxdepth 0 -type d | parallel --will-cite -j 18 sudo rsync -av --chown=10004:10005 --progress --relative --human-readable \
# {} "${TARGET}" # {} "${TARGET}"
sudo -l && time fpsync -o '-av --numeric-ids --no-compress --chown=10004:10005' -n 24 -t /mnt/compose/partitions "/mnt/compose/${MAJ}/latest-${SHORT}-${MAJ}${PROFILE}/compose/" "${TARGET}/" sudo -l && time fpsync -n 24 -o '-a --numeric-ids --no-compress --chown=10004:10005' -t /mnt/compose/partitions "/mnt/compose/${MAJ}/latest-${SHORT}-${MAJ}${PROFILE}/compose/" "${TARGET}/"
# This is temporary until we implement rsync into empanadas # This is temporary until we implement rsync into empanadas
#if [ -f "COMPOSE_ID" ]; then #if [ -f "COMPOSE_ID" ]; then

View File

@ -0,0 +1,40 @@
#!/bin/bash
# Source common variables
# shellcheck disable=SC2046,1091,1090
source "$(dirname "$0")/common"
if [[ $# -eq 0 ]]; then
echo "You must specify a short name."
exit 1
fi
# Major Version (eg, 8)
MAJ=${RLVER}
# Short name (eg, NFV, extras, Rocky, gluster9)
SHORT=${1}
PROFILE=${2}
cd "/mnt/compose/${MAJ}/latest-${SHORT}-${MAJ}${PROFILE}/compose" || { echo "Failed to change directory"; ret_val=1; exit 1; }
ret_val=$?
if [ $ret_val -eq "0" ]; then
TARGET="${STAGING_ROOT}/${CATEGORY_STUB}/${REV}"
mkdir -p "${TARGET}"
# disabling because none of our files should be starting with dashes. If they
# are something is *seriously* wrong here.
# shellcheck disable=SC2035
#sudo -l && find **/* -maxdepth 0 -type d | parallel --will-cite -j 18 sudo rsync -av --chown=10004:10005 --progress --relative --human-readable \
# {} "${TARGET}"
sudo -l && time fpsync -n 18 -o '-a --numeric-ids --no-compress --chown=10004:10005' -t /mnt/compose/partitions "/mnt/compose/${MAJ}/latest-${SHORT}-${MAJ}${PROFILE}/compose/" "${TARGET}/"
# This is temporary until we implement rsync into empanadas
#if [ -f "COMPOSE_ID" ]; then
# cp COMPOSE_ID "${TARGET}"
# chown 10004:10005 "${TARGET}/COMPOSE_ID"
#fi
#if [ -d "metadata" ]; then
# rsync -av --chown=10004:10005 --progress --relative --human-readable metadata "${TARGET}"
#fi
fi

View File

@ -4,9 +4,9 @@
# shellcheck disable=SC2046,1091,1090 # shellcheck disable=SC2046,1091,1090
source "$(dirname "$0")/common" source "$(dirname "$0")/common"
if [[ $# -eq 0 ]] || [[ $# -eq 1 ]]; then if [[ $# -eq 0 ]]; then
echo "Not enough information." echo "Not enough information."
echo "You must use: shortname sig" echo "You must use: sig"
exit 1 exit 1
fi fi
@ -17,11 +17,11 @@ SHORT=${1}
# Note, this should be lowercase. eg, storage. # Note, this should be lowercase. eg, storage.
SIG=${2} SIG=${2}
cd "/mnt/compose/${MAJ}/latest-${SHORT}-${MAJ}/compose" || { echo "Failed to change directory"; ret_val=1; exit 1; } cd "/mnt/compose/${MAJ}/latest-SIG-${SHORT}-${MAJ}/compose" || { echo "Failed to change directory"; ret_val=1; exit 1; }
ret_val=$? ret_val=$?
if [ $ret_val -eq "0" ]; then if [ $ret_val -eq "0" ]; then
TARGET=${STAGING_ROOT}/${CATEGORY_STUB}/${REV}/${SIG} TARGET=${STAGING_ROOT}/${SIG_CATEGORY_STUB}/
mkdir -p "${TARGET}" mkdir -p "${TARGET}"
# disabling because none of our files should be starting with dashes. If they # disabling because none of our files should be starting with dashes. If they
# are something is *seriously* wrong here. # are something is *seriously* wrong here.