Difference between revisions of "Setting up RPM Building for SME Server on rocky 8"

From SME Server
Jump to navigationJump to search
 
(30 intermediate revisions by one other user not shown)
Line 1: Line 1:
Login as brianr.
+
<!-- Updated - July 2023 - Added latest smeserver-10-x86_64-base.cfg contents and git details
 +
 
 +
Updated Aug 2023 - Add Rocky 8 build details and notification of EL8 plague-client.
 +
 
 +
And added in instructions for pulling git repos down and mockbuilding locall.
 +
-->
 +
<nowiki>__TOC__</nowiki>
 +
 
 +
==Creating the build system==
 +
 
 +
Build yourself a Rock8 system, probably minimal, but any level will do.
 +
 
 +
https://rockylinux.org/download/
 +
 
 +
Then login to the new system as "brianr" (or whatever user you created as part of the install.)
  
 
  sudo dnf install epel-release
 
  sudo dnf install epel-release
Line 5: Line 19:
 
  sudo /usr/sbin/usermod -G mock brianr
 
  sudo /usr/sbin/usermod -G mock brianr
 
  sudo dnf install glances
 
  sudo dnf install glances
  sudo yum install make rpm-build rpm-sig
+
  sudo yum install make rpm-build rpm-sign
 +
sudo dnf install xz
 +
 
  
 
(Missing python-ctypes??)
 
(Missing python-ctypes??)
Line 23: Line 39:
 
  sudo wget http://mirror.contribs.org/contribs/dani/mock/smeserver-10-x86_64-base.cfg
 
  sudo wget http://mirror.contribs.org/contribs/dani/mock/smeserver-10-x86_64-base.cfg
 
  sudo chown root:mock /etc/mock/*
 
  sudo chown root:mock /etc/mock/*
 +
 +
Note that the /etc/mock/smeserver-10-x86_64-base.cfg  file is incomplete (and actually the only one we really want!). Ideally the full one will be uploaded in time. See later, I copied from my Centos 7 build system.
 +
 +
Here it is:
 +
 +
config_opts['package_manager'] = 'yum'
 +
config_opts['use_nspawn'] = False
 +
 +
# see bugs <nowiki>https://bugzilla.redhat.com/show_bug.cgi?id=2076847</nowiki> and <nowiki>https://bugzilla.redhat.com/show_bug.cgi?id=2076847</nowiki>
 +
config_opts['plugin_conf']["copy_enable"] = True
 +
config_opts['plugin_conf']['copy_opts']= {
 +
  'files': [  ("/etc/mock/perl.prov", "/usr/lib/rpm/redhat/perl.prov"),
 +
            ("/etc/mock/perl.prov", "/usr/lib/rpm/perl.prov"),
 +
  ],
 +
}
 +
 +
config_opts['root'] = 'smeserver-10-x86_64'
 +
config_opts['target_arch'] = 'x86_64'
 +
config_opts['dist'] = '.el7.sme'
 +
config_opts['chroot_setup_cmd'] = ' install @buildsys-build  @buildsys scl-utils-build python27-build '
 +
 
 +
config_opts['plugin_conf']['ccache_opts']['dir'] = "%(cache_topdir)s/ccache/x86_64/"
 +
 
 +
config_opts['macros']['%distribution'] = "SME Server v10"
 +
config_opts['macros']['%packager'] = "Koozali.org <<nowiki>http://www.koozali.org</nowiki>>"
 +
config_opts['macros']['%vendor'] = "Koozali.org <<nowiki>http://www.koozali.org</nowiki>>"
 +
config_opts['macros']['%dist'] = ".el7.sme"
 +
 
 +
config_opts['yum.conf'] = """
 +
[main]
 +
cachedir=/var/cache/yum
 +
debuglevel=4
 +
logfile=/var/log/yum.log
 +
reposdir=/dev/null
 +
retries=20
 +
obsoletes=1
 +
gpgcheck=0
 +
assumeyes=1
 +
syslog_ident=mock
 +
syslog_device=
 +
 
 +
[os]
 +
name=os
 +
baseurl=<nowiki>http://buildsys.koozali.org/build/7/os/x86_64</nowiki>
 +
exclude=buildsys-macros
 +
 
 +
[updates]
 +
name=updates
 +
baseurl=<nowiki>http://buildsys.koozali.org/build/7/updates/x86_64</nowiki>
 +
exclude=buildsys-macros
 +
 
 +
[smeos]
 +
name=os
 +
baseurl=<nowiki>http://buildsys.koozali.org/build/10/smeos/x86_64</nowiki>
 +
exclude=buildsys-macros
 +
 +
[smeupdates]
 +
name=os
 +
baseurl=<nowiki>http://buildsys.koozali.org/build/10/smeupdates/x86_64</nowiki>
 +
exclude=buildsys-macros
 +
 +
[fastrack]
 +
name=fastrack
 +
baseurl=<nowiki>http://buildsys.koozali.org/build/7/fastrack/x86_64</nowiki>
 +
 
 +
# centos cr
 +
[opt1]
 +
name=opt1
 +
baseurl=<nowiki>http://buildsys.koozali.org/build/7/opt1/x86_64</nowiki>
 +
 
 +
# centos extra
 +
[opt2]
 +
name=opt2
 +
baseurl=<nowiki>http://buildsys.koozali.org/build/7/opt2/x86_64</nowiki>
 +
 +
# Not used
 +
[opt3]
 +
name=opt3
 +
baseurl=<nowiki>http://buildsys.koozali.org/build/7/opt3/x86_64</nowiki>
 +
 +
[epel]
 +
name=epel
 +
baseurl=<nowiki>http://download.fedoraproject.org/pub/epel/7/x86_64</nowiki>
 +
#baseurl=<nowiki>http://buildsys.koozali.org/build/7/epel/x86_64</nowiki>
 +
includepkgs=ccache mhash* perl-Taint-Util libdb4 libdb4-devel php-channel-horde php-horde-* perl-Class-Method-Modifiers perl-Class-XSAccessor perl-Devel-GlobalDestruction perl-Sub-Name perl-indirect perl-B-Hooks-OP-Check perl-ExtUtils-Depends perl-Lexical-SealRequireHints perl-Params-Classify perl-Dist-CheckConflicts perl-Math-Int64 perl-Sort-Naturally perl-Sub-Exporter* perl-Bytes-Random-Secure perl-Crypt-Random-TESHA2 perl-Crypt-Random-Seed perl-Math-Random-ISAAC kmodtool libmaxminddb-devel libmaxminddb perl-Module-Build-Tiny perl-Mojolicious perl-Net-CIDR-Lite mod_perl mod_perl-devel perl-Apache-Test pyzor perl-Linux-Pid perl-BSD-Resource perl-dev  perl-Data-Dumper perl-Razor-Agent perl-generators* perl-Net-Patricia meson libidn2* ninja-build python36-Cython epel-rpm-macros lua-srpm-macros libnetfilter_log* courier-unicode* perl-Path-Class perl-String-Random perl-Test-Class perl-Test-Mojo perl-MRO-Compat perl-Class-Accessor libebml* libmatroska* pugixml* spdlog* multilib-rpm-config cmake3* libuv libzstd rhash google-benchmark* libnet10-* perl-Crypt-GPG gnupg1 perl-Lingua-Stem-Snowball* perl-Lingua-StopWords perl-rpm-build-perl* fmt* perl-Class-Virtual perl-Carp-Assert pyPdf python2-apipkg python2-bottle python2-dateutil python2-docutils python-gevent python2-simplejson python-sqlite3dbm python2-future python2-attrs python2-packaging python2-certifi perl-Email-MIME perl-Email-Simple perl-Net-IP perl-Net-SMTPS perl-Throwable perl-Sub-Override perl-Moose perl-Email-Abstract perl-Eval-Closure perl-Email-Date-Format perl-Devel-PartialDump perl-namespace-clean perl-B-Hooks-EndOfScope perl-Variable-Magic latexmk python3-sphinx* python36-sphinx* python36-pygments python36-jinja2 python36-docutils python36-markupsafe clamav* perl-TAP-Harness-Env rust ghc-* rust-* llvm13-libs pandoc golang* perl-Net-LibIDN* perl-Net-Patricia re2c perl-Data-Validate-IP perl-Clone-PP perl-ExtUtils-Manifest* perl-ExtUtils-InstallPaths* perl-ExtUtils-Helpers* perl-ExtUtils-Config*
 +
 +
[openfusion]
 +
name=openfusion
 +
baseurl=<nowiki>http://repo.openfusion.net/centos7-x86_64</nowiki>
 +
includepkgs=perl-Lingua* perl-Snowball* perl-Text-German perl-MooX* perl-Scalar-List-Utils perl-Throwable perl-Moose perl-Try-Tiny perl-Devel-StackTrace perl-Devel-OverloadInfo perl-Sub-Name perl-Module-Runtime-Conflicts perl-Test-File-ShareDir perl-Test-Exception perl-Test-Output perl-Net-IDN-Encode perl-Path-Tiny perl-Class-Tiny perl-Unicode-UTF8 perl-Net-Server perl-Email-Address-XS perl-MaxMind-* perl-Geo-IP perl-IP-Country-DB_File perl-IP-Country perl-Math-Int128 perl-Data-IEEE754 perl-namespace-autoclean perl-Net-Works perl-List-AllUtils perl-Data-Printer perl-IP-Country perl-Sub-Identify perl-Test-Warnings perl-Hash-FieldHash perl-Data-Dumper-Concise perl-Encode-Detect
 +
 +
[rpmfusion]
 +
name=rpmfusion
 +
baseurl=<nowiki>http://download1.rpmfusion.org/free/el/updates/7/x86_64</nowiki>
 +
#mirrorlist=<nowiki>http://mirrors.rpmfusion.org/mirrorlist?repo=free-el-updates-released-7&arch=$basearch</nowiki>
 +
#baseurl=<nowiki>http://ucmirror.canterbury.ac.nz/linux/rpmfusion/free/el/updates/7/x86_64/</nowiki>
 +
includepkgs=ffmpeg* libva* x264-libs xvidcore librtmp buildsys-build-rpmfusion-kerneldevpkgs-current-* buildsys-build-rpmfusion-* libmpeg2* mpeg2dec
 +
 +
[sclo-sclo]
 +
name=sclo-sclo
 +
baseurl=<nowiki>http://mirror.centos.org/centos/7/sclo/x86_64/sclo</nowiki>
 +
includepkgs=python27*
 +
 +
[sclo-rh]
 +
name=sclo-rh
 +
baseurl=<nowiki>http://mirror.centos.org/centos/7/sclo/x86_64/rh</nowiki>
 +
includepkgs=python27* python33* rh-mongodb26* rh-mongodb32* rh-mongodb34* nodejs010* rh-nodejs6* devtoolset-* devtoolset-9*
 +
 +
[buildsys-core]
 +
name=buildsys-core
 +
baseurl=<nowiki>http://buildsys.koozali.org/build/10/smeserver-core/x86_64</nowiki>
 +
includepkgs=bglibs bglibs-devel buildsys-macros cvm* dietlibc* e-smith-devtools perl-Test-Inline perl-IO-Socket-IP perl-Geography-Countries perl-Object-Persistence perl-bareword-filehandles perl-multidimensional perl-strictures perl-Module-Runtime perl-Role-Tiny perl-Sub-Quote perl-Bytes-Random-Secure perl-Net-Ident perl-generators DCC python3-lxml libnetfilter_acct* qmail perl-Net-IMAP-Simple  perl-Regexp-Common perl-Email-Sender perl-Moo perl-Mail-DMARC clamav*
 +
 +
[buildsys-contribs]
 +
name=buildsys-contribs
 +
baseurl=<nowiki>http://buildsys.koozali.org/build/10/smeserver-contribs/x86_64</nowiki>
 +
includepkgs=libevent2* perl-Ezmlm perl-IPC-Run libevhtp* libsearpc* ccnet* libccnet* libzdb* libccnet* evhtp* sqlite* ocaml camlp5 python27-python-versiontools libarchive* libupnp-* duktape-* fmt-* spdlog-* ezmlm* c-icap*
 +
 +
[groups]
 +
name=groups
 +
baseurl=<nowiki>http://buildsys.koozali.org/build/10/smeserver-groups/x86_64</nowiki>
 +
"""
 +
 +
 +
Then:
  
 
  #!/bin/sh
 
  #!/bin/sh
Line 30: Line 171:
 
   mkdir ~/rpmbuild/$i
 
   mkdir ~/rpmbuild/$i
 
  done
 
  done
 +
 +
==Install / Access CVS==
  
 
  sudo dnf install cvs
 
  sudo dnf install cvs
Line 64: Line 207:
  
 
and reboot.
 
and reboot.
 +
 +
==GIT==
 +
 +
The git utilities currently developed live in the smedev/smeserver-gitutils repo.
 +
 +
Pull it over as follows:
 +
 +
git clone  https://src.koozali.org/smedev/smeserver-gitutils.git
 +
 +
Then copy the shell scripts to ~/bin or wherever.
 +
 +
mkdir ~/bin
 +
cp smeserver-gitutils/git-*.sh  ~/bin/.
 +
mkdir ~/.smegit
 +
cp smeserver-gitutils/conf ~/.smegit/config
 +
 +
Then edit the ~/.smegit/conf for your own setup.  Make sure that ~/bin is in the $PATH - you can use .bashrc to set this up if necessary.
 +
 +
The gitutils use the change-log and BogusDataBot.sh scripts which are normally installed from smeserver-mock.  Until an EL8 rpm is built, then you need to copy these to ~/bin or /usr/bin from your EL7 or SMEServer system.
 +
 +
They also use the json utilities "jq", and "git-lfs" plugin and "lua" (needed for change-log) so you need:
 +
 +
sudo dnf install jq
 +
sudo dnf install lua
 +
sudo dnf install git-lfs
 +
 +
 +
Git is quite sensitive to the local time, so make sure your timezone is correct: 
 +
 +
timedatectl
 +
timedatectl list_timezones | grep London
 +
timedatectl set-timezone Europe/London
 +
 +
If you want to save your credentials to the gitea server, then do this:
 +
 +
git config --global credential.helper store
 +
 +
Then next time you need to access the repo to push and it asks for your credentials it will save them. 
 +
This saves them apparently in plain to a restricted file called ".git-credentials" somewhere, however I've not found it yet!
 +
 +
===Using the git utilities===
 +
 +
Say you want to move a package from CVS to the GIT system. Here are the instructions:
 +
 +
* git-cvs2git.sh packagename organisation  #Bring it across from CVS, create an equivalent git repo
 +
* git-get-repo-and-build.sh packagename organisation #Prime it down from the gitr repo and "make mockbuild" on it.
 +
* git-make-release.sh packagename organisation tagname releasetype #Create the release as part of the repo and copy the rpms to it as attachments.
 +
 +
releasetypes are draft, prerelease or release. Note that a draft release is not visible unless you are logged in with write access to the repo.
 +
 +
=== Mockbuilding direct from the git repos ===
 +
 +
First create some sort of directory structure to hold the repo contents - this is what I use:<syntaxhighlight lang="shell">
 +
cd ~
 +
mkdir -p GITFiles
 +
cd GITFiles
 +
mkdir -p {smedev,smecontribs,smeserver}
 +
 +
</syntaxhighlight>and add in the common directory which provides an environment for the mockbuild .<syntaxhighlight lang="shell">
 +
cd smecontribs
 +
git clone https://src.koozali.org/smedev/common.git
 +
cd smeserver
 +
git clone https://src.koozali.org/smedev/common.git
 +
</syntaxhighlight>we then can add in the repo we want to work on (you get the git clone link by browsing to [https://src.koozali.org/smecontribs/smeserver-mailstats https://src.koozali.org] and then (e.g.) https://src.koozali.org/smecontribs/smeserver-mailstats, or you can "guess" the URL!<syntaxhighlight lang="shell">
 +
cd ~/GITFiles/smecontribs
 +
git clone https://src.koozali.org/smecontribs/smeserver-mailstats
 +
</syntaxhighlight>Then to mockbuild it  locally you can:<syntaxhighlight>
 +
cd ~/smecontribs/smeserver-mailstats
 +
make mockbuild
 +
</syntaxhighlight>after a lot of on screen messages you should finally see a positive outcome message.
 +
 +
If you want to pull down a complete set of repos for (e.g.) the core system, then by using one of the git-utils you can do this:<syntaxhighlight lang="shell">
 +
cd ~/GITFiles/smeserver
 +
git-list-all-org-repos.sh smeserver | xargs -I % sh -c 'git clone https://src.koozali.org/smeserver/%'
 +
</syntaxhighlight>
 +
 +
==Submitting jobs to the build system==
  
 
Need also to copy over from current build system ~/.plague-client.cfg .rpmmacros .cvspass (although this one is empty?)
 
Need also to copy over from current build system ~/.plague-client.cfg .rpmmacros .cvspass (although this one is empty?)
 
AND smeserver-10-x86_64-base.cfg from (and to) /etc/mock as the one downloaded above seems to be not complete for sme10.
 
  
 
make mockbuild runs ok.
 
make mockbuild runs ok.
  
Not yet tried submitting build to buildsys - need to find plageu-client to download  - found Centos 7
+
Not yet tried submitting build to buildsys - need to find plague-client to download  - found Centos 7
  
 
  wget ftp://ftp.pbone.net/mirror/ftp.centos.org/7.9.2009/infra/x86_64/infra-common/Packages/p/plague-client-0.4.5.8-19.el7.4.noarch.rpm
 
  wget ftp://ftp.pbone.net/mirror/ftp.centos.org/7.9.2009/infra/x86_64/infra-common/Packages/p/plague-client-0.4.5.8-19.el7.4.noarch.rpm
 +
wget ftp://ftp.pbone.net/mirror/ftp.centos.org/7.9.2009/infra/x86_64/infra-common/Packages/p/plague-common-0.4.5.8-19.el7.4.noarch.rpm
 +
wget ftp://ftp.pbone.net/mirror/vault.centos.org/7.6.1810/cloud/x86_64/openstack-stein/python2-pyOpenSSL-19.0.0-1.el7.noarch.rpm
 +
wget ftp://ftp.pbone.net/mirror/ftp.centos.org/7.9.2009/cloud/x86_64/openstack-stein/Packages/p/python2-cryptography-2.5-1.el7.x86_64.rpm
 +
 +
Need python2
 +
  sudo dnf install python2
 +
Unfortunately it seems that the plague client needs things that Rocky is unable to provide (or at least I can't sort out!!). The perceived wisdom is to wait for the move from CVS to git which is expected for SME11. (Aug 2023) Apparently Jean-Paul has built a Plague-client for EL8 now - but I've not tried it!
 +
 +
[[Category:Developer]]

Latest revision as of 09:30, 17 March 2024

__TOC__

Creating the build system

Build yourself a Rock8 system, probably minimal, but any level will do.

https://rockylinux.org/download/

Then login to the new system as "brianr" (or whatever user you created as part of the install.)

sudo dnf install epel-release
sudo dnf install mock
sudo /usr/sbin/usermod -G mock brianr
sudo dnf install glances
sudo yum install make rpm-build rpm-sign
sudo dnf install xz


(Missing python-ctypes??)

cd /etc/mock/
sudo rm site-defaults.cfg 
sudo dnf install wget
sudo wget http://mirror.contribs.org/contribs/dani/mock/site-defaults.cfg
sudo wget http://mirror.contribs.org/contribs/dani/mock/smeserver-8-i386-base.cfg
sudo wget http://mirror.contribs.org/contribs/dani/mock/smeserver-8-i386-iso.cfg
sudo wget http://mirror.contribs.org/contribs/dani/mock/smeserver-8-x86_64-base.cfg
sudo wget http://mirror.contribs.org/contribs/dani/mock/smeserver-8-x86_64-iso.cfg
sudo wget http://mirror.contribs.org/contribs/dani/mock/smeserver-9-i386-base.cfg
sudo wget http://mirror.contribs.org/contribs/dani/mock/smeserver-9-i386-iso.cfg
sudo wget http://mirror.contribs.org/contribs/dani/mock/smeserver-9-x86_64-base.cfg
sudo wget http://mirror.contribs.org/contribs/dani/mock/smeserver-9-x86_64-iso.cfg
sudo wget http://mirror.contribs.org/contribs/dani/mock/smeserver-10-x86_64-base.cfg
sudo chown root:mock /etc/mock/*

Note that the /etc/mock/smeserver-10-x86_64-base.cfg file is incomplete (and actually the only one we really want!). Ideally the full one will be uploaded in time. See later, I copied from my Centos 7 build system.

Here it is:

config_opts['package_manager'] = 'yum'
config_opts['use_nspawn'] = False

# see bugs https://bugzilla.redhat.com/show_bug.cgi?id=2076847 and https://bugzilla.redhat.com/show_bug.cgi?id=2076847
config_opts['plugin_conf']["copy_enable"] = True
config_opts['plugin_conf']['copy_opts']= {
 'files': [  ("/etc/mock/perl.prov", "/usr/lib/rpm/redhat/perl.prov"),
           ("/etc/mock/perl.prov", "/usr/lib/rpm/perl.prov"),
 ],
}

config_opts['root'] = 'smeserver-10-x86_64'
config_opts['target_arch'] = 'x86_64'
config_opts['dist'] = '.el7.sme'
config_opts['chroot_setup_cmd'] = ' install @buildsys-build  @buildsys scl-utils-build python27-build '
 
config_opts['plugin_conf']['ccache_opts']['dir'] = "%(cache_topdir)s/ccache/x86_64/"
 
config_opts['macros']['%distribution'] = "SME Server v10"
config_opts['macros']['%packager'] = "Koozali.org <http://www.koozali.org>"
config_opts['macros']['%vendor'] = "Koozali.org <http://www.koozali.org>"
config_opts['macros']['%dist'] = ".el7.sme"
 
config_opts['yum.conf'] = """
[main]
cachedir=/var/cache/yum
debuglevel=4
logfile=/var/log/yum.log
reposdir=/dev/null
retries=20
obsoletes=1
gpgcheck=0
assumeyes=1
syslog_ident=mock
syslog_device=
 
[os]
name=os
baseurl=http://buildsys.koozali.org/build/7/os/x86_64
exclude=buildsys-macros
 
[updates]
name=updates
baseurl=http://buildsys.koozali.org/build/7/updates/x86_64
exclude=buildsys-macros
 
[smeos]
name=os
baseurl=http://buildsys.koozali.org/build/10/smeos/x86_64
exclude=buildsys-macros

[smeupdates]
name=os
baseurl=http://buildsys.koozali.org/build/10/smeupdates/x86_64
exclude=buildsys-macros

[fastrack]
name=fastrack
baseurl=http://buildsys.koozali.org/build/7/fastrack/x86_64
 
# centos cr
[opt1]
name=opt1
baseurl=http://buildsys.koozali.org/build/7/opt1/x86_64
 
# centos extra
[opt2]
name=opt2
baseurl=http://buildsys.koozali.org/build/7/opt2/x86_64

# Not used
[opt3]
name=opt3
baseurl=http://buildsys.koozali.org/build/7/opt3/x86_64

[epel]
name=epel
baseurl=http://download.fedoraproject.org/pub/epel/7/x86_64
#baseurl=http://buildsys.koozali.org/build/7/epel/x86_64
includepkgs=ccache mhash* perl-Taint-Util libdb4 libdb4-devel php-channel-horde php-horde-* perl-Class-Method-Modifiers perl-Class-XSAccessor perl-Devel-GlobalDestruction perl-Sub-Name perl-indirect perl-B-Hooks-OP-Check perl-ExtUtils-Depends perl-Lexical-SealRequireHints perl-Params-Classify perl-Dist-CheckConflicts perl-Math-Int64 perl-Sort-Naturally perl-Sub-Exporter* perl-Bytes-Random-Secure perl-Crypt-Random-TESHA2 perl-Crypt-Random-Seed perl-Math-Random-ISAAC kmodtool libmaxminddb-devel libmaxminddb perl-Module-Build-Tiny perl-Mojolicious perl-Net-CIDR-Lite mod_perl mod_perl-devel perl-Apache-Test pyzor perl-Linux-Pid perl-BSD-Resource perl-dev  perl-Data-Dumper perl-Razor-Agent perl-generators* perl-Net-Patricia meson libidn2* ninja-build python36-Cython epel-rpm-macros lua-srpm-macros libnetfilter_log* courier-unicode* perl-Path-Class perl-String-Random perl-Test-Class perl-Test-Mojo perl-MRO-Compat perl-Class-Accessor libebml* libmatroska* pugixml* spdlog* multilib-rpm-config cmake3* libuv libzstd rhash google-benchmark* libnet10-* perl-Crypt-GPG gnupg1 perl-Lingua-Stem-Snowball* perl-Lingua-StopWords perl-rpm-build-perl* fmt* perl-Class-Virtual perl-Carp-Assert pyPdf python2-apipkg python2-bottle python2-dateutil python2-docutils python-gevent python2-simplejson python-sqlite3dbm python2-future python2-attrs python2-packaging python2-certifi perl-Email-MIME perl-Email-Simple perl-Net-IP perl-Net-SMTPS perl-Throwable perl-Sub-Override perl-Moose perl-Email-Abstract perl-Eval-Closure perl-Email-Date-Format perl-Devel-PartialDump perl-namespace-clean perl-B-Hooks-EndOfScope perl-Variable-Magic latexmk python3-sphinx* python36-sphinx* python36-pygments python36-jinja2 python36-docutils python36-markupsafe clamav* perl-TAP-Harness-Env rust ghc-* rust-* llvm13-libs pandoc golang* perl-Net-LibIDN* perl-Net-Patricia re2c perl-Data-Validate-IP perl-Clone-PP perl-ExtUtils-Manifest* perl-ExtUtils-InstallPaths* perl-ExtUtils-Helpers* perl-ExtUtils-Config*

[openfusion]
name=openfusion
baseurl=http://repo.openfusion.net/centos7-x86_64
includepkgs=perl-Lingua* perl-Snowball* perl-Text-German perl-MooX* perl-Scalar-List-Utils perl-Throwable perl-Moose perl-Try-Tiny perl-Devel-StackTrace perl-Devel-OverloadInfo perl-Sub-Name perl-Module-Runtime-Conflicts perl-Test-File-ShareDir perl-Test-Exception perl-Test-Output perl-Net-IDN-Encode perl-Path-Tiny perl-Class-Tiny perl-Unicode-UTF8 perl-Net-Server perl-Email-Address-XS perl-MaxMind-* perl-Geo-IP perl-IP-Country-DB_File perl-IP-Country perl-Math-Int128 perl-Data-IEEE754 perl-namespace-autoclean perl-Net-Works perl-List-AllUtils perl-Data-Printer perl-IP-Country perl-Sub-Identify perl-Test-Warnings perl-Hash-FieldHash perl-Data-Dumper-Concise perl-Encode-Detect

[rpmfusion]
name=rpmfusion
baseurl=http://download1.rpmfusion.org/free/el/updates/7/x86_64
#mirrorlist=http://mirrors.rpmfusion.org/mirrorlist?repo=free-el-updates-released-7&arch=$basearch
#baseurl=http://ucmirror.canterbury.ac.nz/linux/rpmfusion/free/el/updates/7/x86_64/
includepkgs=ffmpeg* libva* x264-libs xvidcore librtmp buildsys-build-rpmfusion-kerneldevpkgs-current-* buildsys-build-rpmfusion-* libmpeg2* mpeg2dec 

[sclo-sclo]
name=sclo-sclo
baseurl=http://mirror.centos.org/centos/7/sclo/x86_64/sclo
includepkgs=python27*

[sclo-rh]
name=sclo-rh
baseurl=http://mirror.centos.org/centos/7/sclo/x86_64/rh
includepkgs=python27* python33* rh-mongodb26* rh-mongodb32* rh-mongodb34* nodejs010* rh-nodejs6* devtoolset-* devtoolset-9*

[buildsys-core]
name=buildsys-core
baseurl=http://buildsys.koozali.org/build/10/smeserver-core/x86_64
includepkgs=bglibs bglibs-devel buildsys-macros cvm* dietlibc* e-smith-devtools perl-Test-Inline perl-IO-Socket-IP perl-Geography-Countries perl-Object-Persistence perl-bareword-filehandles perl-multidimensional perl-strictures perl-Module-Runtime perl-Role-Tiny perl-Sub-Quote perl-Bytes-Random-Secure perl-Net-Ident perl-generators DCC python3-lxml libnetfilter_acct* qmail perl-Net-IMAP-Simple  perl-Regexp-Common perl-Email-Sender perl-Moo perl-Mail-DMARC clamav*

[buildsys-contribs]
name=buildsys-contribs
baseurl=http://buildsys.koozali.org/build/10/smeserver-contribs/x86_64
includepkgs=libevent2* perl-Ezmlm perl-IPC-Run libevhtp* libsearpc* ccnet* libccnet* libzdb* libccnet* evhtp* sqlite* ocaml camlp5 python27-python-versiontools libarchive* libupnp-* duktape-* fmt-* spdlog-* ezmlm* c-icap*

[groups]
name=groups
baseurl=http://buildsys.koozali.org/build/10/smeserver-groups/x86_64
"""


Then:

#!/bin/sh
mkdir ~/rpmbuild
for i in BUILD BUILDROOT RPMS SOURCES SPECS SRPMS
do
 mkdir ~/rpmbuild/$i
done

Install / Access CVS

sudo dnf install cvs
sudo nano /etc/profile.d/smebuild.sh

# Developer environment
# This gets symlinked into /etc/profile.d
export CVS_RSH=ssh # tell CVS to use ssh
 # DO NOT set CVSROOT
alias rm='rm -i'
alias cp='cp -i --preserve=timestamps'
alias mv='mv -i'

Create the ssh details for the build server:

mkdir -p ~/.ssh
nano ~/.ssh/config
Host  shell.koozali.org
User  brianr
Port  222
IdentityFile /home/brianr/.ssh/smeserver-buildsys
ForwardAgent yes

Make Sure your public and private keys are syncronised onto the build server (I just copied the key files to the rocky server from my Centos 7 server).

Then pull in the complete Contribs tree

cvs -z3 -d:ext:shell.koozali.org:/cvs/smeserver co -P rpms

Disable selinux by editing config replace "enforcing" by "disabled"

sudo nano /etc/sysconfig/selinux

and reboot.

GIT

The git utilities currently developed live in the smedev/smeserver-gitutils repo.

Pull it over as follows:

git clone  https://src.koozali.org/smedev/smeserver-gitutils.git

Then copy the shell scripts to ~/bin or wherever.

mkdir ~/bin
cp smeserver-gitutils/git-*.sh  ~/bin/.
mkdir ~/.smegit
cp smeserver-gitutils/conf ~/.smegit/config

Then edit the ~/.smegit/conf for your own setup. Make sure that ~/bin is in the $PATH - you can use .bashrc to set this up if necessary.

The gitutils use the change-log and BogusDataBot.sh scripts which are normally installed from smeserver-mock. Until an EL8 rpm is built, then you need to copy these to ~/bin or /usr/bin from your EL7 or SMEServer system.

They also use the json utilities "jq", and "git-lfs" plugin and "lua" (needed for change-log) so you need:

sudo dnf install jq
sudo dnf install lua
sudo dnf install git-lfs


Git is quite sensitive to the local time, so make sure your timezone is correct:

timedatectl 
timedatectl list_timezones | grep London
timedatectl set-timezone Europe/London

If you want to save your credentials to the gitea server, then do this:

git config --global credential.helper store

Then next time you need to access the repo to push and it asks for your credentials it will save them. This saves them apparently in plain to a restricted file called ".git-credentials" somewhere, however I've not found it yet!

Using the git utilities

Say you want to move a package from CVS to the GIT system. Here are the instructions:

  • git-cvs2git.sh packagename organisation #Bring it across from CVS, create an equivalent git repo
  • git-get-repo-and-build.sh packagename organisation #Prime it down from the gitr repo and "make mockbuild" on it.
  • git-make-release.sh packagename organisation tagname releasetype #Create the release as part of the repo and copy the rpms to it as attachments.

releasetypes are draft, prerelease or release. Note that a draft release is not visible unless you are logged in with write access to the repo.

Mockbuilding direct from the git repos

First create some sort of directory structure to hold the repo contents - this is what I use:

cd ~
mkdir -p GITFiles
cd GITFiles
mkdir -p {smedev,smecontribs,smeserver}

and add in the common directory which provides an environment for the mockbuild .

cd smecontribs
git clone https://src.koozali.org/smedev/common.git
cd smeserver
git clone https://src.koozali.org/smedev/common.git

we then can add in the repo we want to work on (you get the git clone link by browsing to https://src.koozali.org and then (e.g.) https://src.koozali.org/smecontribs/smeserver-mailstats, or you can "guess" the URL!

cd ~/GITFiles/smecontribs
git clone https://src.koozali.org/smecontribs/smeserver-mailstats

Then to mockbuild it locally you can:

cd ~/smecontribs/smeserver-mailstats
make mockbuild

after a lot of on screen messages you should finally see a positive outcome message. If you want to pull down a complete set of repos for (e.g.) the core system, then by using one of the git-utils you can do this:

cd ~/GITFiles/smeserver
git-list-all-org-repos.sh smeserver | xargs -I % sh -c 'git clone https://src.koozali.org/smeserver/%'

Submitting jobs to the build system

Need also to copy over from current build system ~/.plague-client.cfg .rpmmacros .cvspass (although this one is empty?)

make mockbuild runs ok.

Not yet tried submitting build to buildsys - need to find plague-client to download - found Centos 7

wget ftp://ftp.pbone.net/mirror/ftp.centos.org/7.9.2009/infra/x86_64/infra-common/Packages/p/plague-client-0.4.5.8-19.el7.4.noarch.rpm
wget ftp://ftp.pbone.net/mirror/ftp.centos.org/7.9.2009/infra/x86_64/infra-common/Packages/p/plague-common-0.4.5.8-19.el7.4.noarch.rpm
wget ftp://ftp.pbone.net/mirror/vault.centos.org/7.6.1810/cloud/x86_64/openstack-stein/python2-pyOpenSSL-19.0.0-1.el7.noarch.rpm
wget ftp://ftp.pbone.net/mirror/ftp.centos.org/7.9.2009/cloud/x86_64/openstack-stein/Packages/p/python2-cryptography-2.5-1.el7.x86_64.rpm

Need python2

 sudo dnf install python2

Unfortunately it seems that the plague client needs things that Rocky is unable to provide (or at least I can't sort out!!). The perceived wisdom is to wait for the move from CVS to git which is expected for SME11. (Aug 2023) Apparently Jean-Paul has built a Plague-client for EL8 now - but I've not tried it!