Changes

Jump to navigation Jump to search
13,193 bytes removed ,  17:06, 11 October 2022
Line 1: Line 1:  
{{Level|Developer}}
 
{{Level|Developer}}
   −
{{WIP box|}}
+
{{WIP box|unnilennium}}
 +
 
 +
===Versions===
 +
VER=10
 +
VERSION=$VER.1
 +
VERPREV=$VER.0
 +
TESTING=
 +
# where is PREV could be "" "testing or "obsolete"
 +
FROM=
 +
# where we put new one could be "" "testing or "obsolete"
 +
TO=
 +
 
 +
go back
 +
* [[Build_an_Official_ISO#Create release specific folder and link (or rename the folder)]]
 +
* [[Build_an_Official_ISO#Build & Release SME Server 10]]
    
===Introduction===
 
===Introduction===
Line 12: Line 26:  
[[bugzilla:7931]]
 
[[bugzilla:7931]]
 
Please read Bug #7931 regarding repodata and symlinks.
 
Please read Bug #7931 regarding repodata and symlinks.
  −
{{Warning box| '''due to the recent change of some plugins, this howto is only workable now, with the [http://mirror.de-labrusse.fr/Sme-Server/mock-1.1.41/ Mock Version: 1.1.41]''' --[[User:Stephdl|Stephdl]] ([[User talk:Stephdl|talk]]) 21:40, 16 March 2015 (CET)
  −
du to the work of dani, we should use theversion of mock > 1.2 --[[User:Stephdl|Stephdl]] ([[User talk:Stephdl|talk]]) 11:06, 29 June 2015 (CEST)}}
      
{{Warning box| build of iso on cluster should be done on builder7 with releases user }}
 
{{Warning box| build of iso on cluster should be done on builder7 with releases user }}
   −
====Folder structure, both local and buildsys====
+
====Local Only: Requirements====
 
+
====='''Local Only''': mock requirement=====
This document presumes that
  −
~/builds_bin is builds_bin from CVS
  −
~/cdrom.image is cdrom.image from CVS
  −
~/anaconda-po contains '''the anaconda translations'''
  −
~/smeserver '''contains a local smeserver mirror'''
  −
~/smeserver/rpms is rpms folder from CVS
  −
 
  −
if absent then :
  −
cd ~
  −
mkdir -p smeserver/builds_bin smeserver/cdrom.image smeserver/cdrom.image
  −
ln -s smeserver/builds_bin builds_bin
  −
ln -s smeserver/cdrom.image cdrom.image
  −
mkdir anaconda-po
  −
 
  −
 
  −
then update content or populate
  −
cd smeserver
  −
cvs -z3 -d:pserver:anonymous@smeserver.cvs.sourceforge.net:/cvsroot/smeserver co -P builds_bin
  −
cvs -z3 -d:pserver:anonymous@smeserver.cvs.sourceforge.net:/cvsroot/smeserver co -P cdrom.image
  −
cvs -z3 -d:pserver:anonymous@smeserver.cvs.sourceforge.net:/cvsroot/smeserver co -P rpms
  −
cd ~
  −
 
  −
===='''Local Only''': mock requirement====
   
on centos 7
 
on centos 7
 
  yum install python-decoratortools
 
  yum install python-decoratortools
   −
===='''Local Only''': mock plugin : iso_prepare====
+
====='''Local Only''': mock plugin : iso_prepare=====
 
You have to install a new plugin for mock : Iso_prepare<br />
 
You have to install a new plugin for mock : Iso_prepare<br />
   −
copy the content of http://bugs.contribs.org/attachment.cgi?id=5145 and paste it in  
+
copy the content of https://bugs.contribs.org/attachment.cgi?id=6286 (updated for CentOS 7 and python 3.6) and paste it in  
  sudo vim /usr/lib/python2.6/site-packages/mockbuild/plugins/iso_prepare.py
+
  sudo wget https://bugs.contribs.org/attachment.cgi?id=6286 -O /usr/lib/python3.6/site-packages/mockbuild/plugins/iso_prepare.py
on centos 7
  −
 
  −
sudo vim /usr/lib/python2.7/site-packages/mockbuild/plugins/iso_prepare.py
  −
 
  −
then you will need to comment the two follwoing lines (32 and 33) if you build on a centos 7 box:
  −
#        for l in glob.glob("/dev/loop*"):
  −
#            buildroot.mounts.add(BindMountPoint(srcpath=l, bindpath=buildroot.make_chroot_path(l)))
     −
===='''Local Only''': update_repos====
+
====='''Local Only''': update_repos=====
 
The script update_repos relies on RPM2 which can be found as a RPM.
 
The script update_repos relies on RPM2 which can be found as a RPM.
 
  yum install perl-RPM2 repoview --enablerepo=epel
 
  yum install perl-RPM2 repoview --enablerepo=epel
Line 65: Line 46:  
{{Note box|Note that update_repos copies packages from smeupdates-testing to stage but not from smetest, so packages freshly built won't be included into the new ISO until they are manually moved from smetest to smeupdates-testing}}
 
{{Note box|Note that update_repos copies packages from smeupdates-testing to stage but not from smetest, so packages freshly built won't be included into the new ISO until they are manually moved from smetest to smeupdates-testing}}
 
The buildsys has two main folders that are relevant for building an ISO.
 
The buildsys has two main folders that are relevant for building an ISO.
  repo      => '/build/smeserver/repo/ ', eg '/build/smeserver/repo/testing/9/'
+
  repo      => '/build/smeserver/repo/ ', eg '/build/smeserver/repo/testing/10/'
  stage    => '/build/smeserver/stage/', eg  '/build/smeserver/stage/9/'
+
  stage    => '/build/smeserver/stage/', eg  '/build/smeserver/stage/10/'
    
* '''repo''' is the folder that replicates to the mirrors. Be careful of all changes here.
 
* '''repo''' is the folder that replicates to the mirrors. Be careful of all changes here.
Line 73: Line 54:  
It also needs all GPG keys for every package that it sees, it can take a while to find them all.
 
It also needs all GPG keys for every package that it sees, it can take a while to find them all.
   −
===='''Local Only''': Create the repo folder and the binary program folder====
+
====='''Local Only''': Create the repo folder and the binary program folder=====
'''Local Only'''
   
  mkdir -p /build/smeserver/repo
 
  mkdir -p /build/smeserver/repo
 
  mkdir -p /build/smeserver/stage/bin
 
  mkdir -p /build/smeserver/stage/bin
Line 81: Line 61:     
Eg  
 
Eg  
  /bin/cd ~/builds_bin
+
  /bin/cd ~/smeserver/builds_bin
 
  /usr/bin/cvs update -dPA
 
  /usr/bin/cvs update -dPA
  /bin/cp ~/builds_bin/* /build/smeserver/stage/bin
+
  /bin/cp ~/smeserver/builds_bin/* /build/smeserver/stage/bin
   −
===='''Local Only''': Mock Special Settings====
+
====='''Local Only''': Mock Special Settings=====
 
* hard-coded UID of release account
 
* hard-coded UID of release account
   −
verify that in all '''/etc/mock/smeserver-{i386,x86_64}-iso.cfg''' you have '''config_opts['chrootuid'] = os.getuid()'''
+
verify that in all '''/etc/mock/smeserver-10-{i386,x86_64}-iso.cfg''' you have '''config_opts['chrootuid'] = os.getuid()'''
 
  - config_opts['chrootuid'] = 10020
 
  - config_opts['chrootuid'] = 10020
 
  + config_opts['chrootuid'] = os.getuid()
 
  + config_opts['chrootuid'] = os.getuid()
   −
* {{Note box|Due to local settings you have to edit each configuration of mock and edit '''smeserver-X-{i386,x86_64}-iso.cfg''' files to include /build in the chroot}}
+
*  
:''These are the changes that you need to made if you do not have the nfs mounts on your local machine
+
{{Note box|Due to local settings you have to edit each configuration of mock and edit '''smeserver-X-{i386,x86_64}-iso.cfg''' files to include /build in the chroot}}
 +
:''These are the changes that you need to made if you do not have the nfs mounts on your local machine''
 
  config_opts['plugin_conf']['mount_opts']['dirs'].append(('storage:/export/build', '/build', 'nfs', 'defaults,noatime,nodiratime,nosuid'))
 
  config_opts['plugin_conf']['mount_opts']['dirs'].append(('storage:/export/build', '/build', 'nfs', 'defaults,noatime,nodiratime,nosuid'))
 
  config_opts['plugin_conf']['mount_opts']['dirs'].append(('storage:/mirrors', '/mirrors', 'nfs', 'defaults,noatime,nodiratime,nosuid'))
 
  config_opts['plugin_conf']['mount_opts']['dirs'].append(('storage:/mirrors', '/mirrors', 'nfs', 'defaults,noatime,nodiratime,nosuid'))
Line 102: Line 83:  
  config_opts['plugin_conf']['bind_mount_opts']['dirs'].append(('/build', '/build' ))
 
  config_opts['plugin_conf']['bind_mount_opts']['dirs'].append(('/build', '/build' ))
 
Eg:
 
Eg:
  sudo vim /etc/mock/smeserver-9-x86_64-iso.cfg
+
  sudo vim /etc/mock/smeserver-10-x86_64-iso.cfg
   −
===='''Local Only''': Patch a Mock Plugin====
+
====='''Local Only''': Patch a Mock Plugin=====
 +
{{Note box|this does not seems to be needed anymore on a CentOS 7 builder using python3.6 as per 2020/06/11}}
 
There is also an update to /usr/lib/python2.6/site-packages/mockbuild/mounts.py that needs to happen so loop devices get mounted correctly. Check '''/var/lib/mock/smeserver-VERSION-ARCH/result/root.log''' after '''mock -r smeserver-VERSION-ARCH-iso --init (eg mock -r smeserver-8-i386-iso --init)'''. The mounting of the /dev/loopX should pass (return code 0). If it fails (return code 32) then the patch below is needed on your build host. see http://bugs.contribs.org/show_bug.cgi?id=7675#c61
 
There is also an update to /usr/lib/python2.6/site-packages/mockbuild/mounts.py that needs to happen so loop devices get mounted correctly. Check '''/var/lib/mock/smeserver-VERSION-ARCH/result/root.log''' after '''mock -r smeserver-VERSION-ARCH-iso --init (eg mock -r smeserver-8-i386-iso --init)'''. The mounting of the /dev/loopX should pass (return code 0). If it fails (return code 32) then the patch below is needed on your build host. see http://bugs.contribs.org/show_bug.cgi?id=7675#c61
   Line 155: Line 137:  
  sudo patch -N  /usr/lib/python2.6/site-packages/mockbuild/plugins/mount.py < mount.py.20150626.daniel.berteaud.patch
 
  sudo patch -N  /usr/lib/python2.6/site-packages/mockbuild/plugins/mount.py < mount.py.20150626.daniel.berteaud.patch
   −
===Preparation for a new ISO release===
+
====CVS Folder structure, both local and buildsys====
 +
 
 +
as releases user do
 +
 
 +
This document presumes that
 +
~/smeserver/builds_bin is builds_bin from CVS
 +
~/smeserver/cdrom.image is cdrom.image from CVS
 +
~/anaconda-po contains '''the anaconda translations'''
 +
~/smeserver/releases '''contains a local smeserver mirror'''
 +
~/smeserver/rpms is rpms folder from CVS
 +
 
 +
if absent then :
 +
cd ~
 +
mkdir -p smeserver/builds_bin smeserver/cdrom.image smeserver/cdrom.image
 +
ln -s smeserver/builds_bin builds_bin
 +
ln -s smeserver/cdrom.image cdrom.image
 +
mkdir -p anaconda-po
 +
 
 +
then update content or populate
 +
cd smeserver
 +
cvs -z3 -d:pserver:anonymous@shell.koozali.org:/cvs/smeserver co -P builds_bin
 +
cvs -z3 -d:pserver:anonymous@shell.koozali.org:/cvs/smeserver co -P cdrom.image
 +
cvs -z3 -d:pserver:anonymous@shell.koozali.org:/cvs/smeserver co -P rpms
 +
cd ~
 +
 
 +
 
 +
===Preparation of a new Major Release===
 +
this part is a work in progress and might help for SME 11
 +
 
 +
====Check how to tweak Anaconda====
 +
download last anaconda package from CentOS and update source in buildsys. Do this on shell VM.<syntaxhighlight lang="bash">
 +
wget https://vault.centos.org/7.9.2009/os/Source/SPackages/anaconda-21.48.22.159-1.el7.centos.src.rpm
 +
~/smeserver/common/cvs-import.sh -b sme10 anaconda-21.48.22.159-1.el7.centos.src.rpm
 +
cd ~/smeserver/rpms/anaconda/sme10
 +
prepa
   −
====Generate a new Changelogs====
+
</syntaxhighlight>then you want to harvest the patch we already have. For SME10:
When generating an ISO the Release Notes for the ISO should contain the full delta from the last ISO. Ian gets a script for doing that
+
# 100-anaconda-koozali-product.patch
====The Smeserver version name====
+
# 101-anaconda-koozali-add-koozali-install-class.patch
The Version number comes from a rpm, smeserver-release, you need to bump the version in the spec file and build the rpm, think to push it to smeupdates-testing.
+
<syntaxhighlight>
====RPM dependencies====
+
wget https://viewvc.koozali.org/smeserver/rpms/anaconda/sme10/100-anaconda-koozali-product.patch
The smeos, smeupdates, and smeupdates-testing repos are included so we can stage the packages we are going to release without actually having to release them. Normally the smeupdates-testing repo is used for verification (testing is for developer testing).
+
cvs add 100-anaconda-koozali-product.patch
'''During the ISO release schedule (usually very short) we hold moving packages to updates-testing until the ISO is built.'''
     −
=====Examples of dependencies=====
+
wget https://viewvc.koozali.org/smeserver/rpms/anaconda/sme10/101-anaconda-koozali-add-koozali-install-class.patch
 +
cvs add 101-anaconda-koozali-add-koozali-install-class.patch
   −
cp /mirrors/rpmforge/redhat/el6/en/i386/dag/RPMS/perl-Taint-Util-0.08-1.el6.rf.i686.rpm /build/smeserver/repo/testing/9/smetest/i386/RPMS/
     −
cp /mirrors/centos/6/os/i386/Packages/libtevent-0* /build/smeserver/repo/testing/9/smeupdates-testing/i386/RPMS/
+
#alternative could to play with
 +
#$ cvs update -p -r rev file.txt > file.txt
 +
#$ cvs add file.txt
 +
#$ cvs commit
 +
</syntaxhighlight>then add to the spec file the needed elements to apply the patches, and udpate changelog<syntaxhighlight lang="spec">
 +
## at beginning
   −
This shows that on the buildsys the /mirrors has the main upstream repos and they will normally hold the RPM needed to resolve the dependency. You need to get it into smeupdates-testing, but it is safer to first copy the RPM to smetest and check that all is well.
+
#KOOZALI
 +
Patch100: 100-anaconda-koozali-product.patch
 +
Patch101: 101-anaconda-koozali-add-koozali-install-class.patch
 +
#ENDKOOZALI
   −
=====Rpm update cycle=====
  −
If an RPM is released during the update cycle:<br />
     −
smetest->smeupdates-testing->smeupdates
+
### in %prep
   −
If an RPM is only needed for a new ISO and never needed as an update (before the ISO is released) :<br />
+
#KOOZALI
 +
%patch100 -p1
 +
pushd pyanaconda/installclasses/
 +
cp -f centos.py koozali.py
 +
popd
 +
%patch101 -p1
 +
#END KOOZALI
   −
/mirrors->smeupdates-testing->smeos
     −
Note that you don't put it into smeos, that is taken care of by the build scripts.
     −
=====What are smeos/smeextras=====
+
### in changelog
* Every package that needs to be in the ISO will go into smeos, '''by the buildsys.'''
+
* Tue Feb 16 2021 Jean-Philipe Pialasse <tests@pialasse.com> 21.48.22.159-2.sme
* Packages that are needed for building the ISO, but not actually needed in the ISO, will be in smeextras
+
- patch for product.img branding of anaconda
=====How get a Fully updated ISO=====
  −
If your Iso is not fully updated and a 'yum update' fetch updates after the first boot, in generally centos updates. You will need to push missed updates from smetest to smeupdates-testing.
  −
====RPM QA verification====
  −
{{Warning box|'''During the ISO release schedule, ALL RPMS MUST BE VERIFIED IN SMEUPDATES-TESTING.'''}}
     −
====Server-Manager translations====
  −
Check translations from https://translate.koozali.org/patches/ if the filesize is >0 then need to patch smeserver-locale (to sme8 & sme9) and produce new rpms that will must be pushed to smeupdate-testing
     −
====Anaconda translations====
  −
Check installer translations from https://translate.koozali.org/anaconda/<br />
     −
get the latest files ('''-w 1''' means wait one second between two requests, to prevent your IP behing blacklisted):
+
</syntaxhighlight>then commit<syntaxhighlight>
wget --mirror --no-parent -w 1 -A.mo -P ~/anaconda-po https://translate.koozali.org/anaconda/
+
cvs commit
 +
</syntaxhighlight>also prepare for later usage<syntaxhighlight lang="bash">
 +
make clean
 +
make prep
 +
</syntaxhighlight>if it fails applying the patches you will need to manually modify the files and ceate new patches...
   −
====Check if installer needs re-building====
+
====Update isolinux content====
{{Warning box|If either anaconda has changed OR there is new content in cdrom.image (apart from the release note) then the installer needs to be rebuilt (by the script build_installer). Otherwise just the ISO needs to be built (by the script Build_ISO).}}
+
TODO
    
====Update cdrom.image content====
 
====Update cdrom.image content====
Line 209: Line 230:  
create a new tree if this is a new SME version
 
create a new tree if this is a new SME version
 
  cd smeserver
 
  cd smeserver
  cvs -z3 -d:ext:smeserver.cvs.sourceforge.net:/cvsroot/smeserver co -P cdrom.image
+
  cvs -z3 -d:ext:shell.koozali.org:/cvs/smeserver co -P cdrom.image
 
  cd cdrom.image  
 
  cd cdrom.image  
 
  cp -r sme9 sme10
 
  cp -r sme9 sme10
Line 230: Line 251:  
  find ./ -name CVS -prune -o -print | xargs cvs add
 
  find ./ -name CVS -prune -o -print | xargs cvs add
 
  cvs commit -m 'new cdrom.image version for sme10'
 
  cvs commit -m 'new cdrom.image version for sme10'
      
alternatively to only update content
 
alternatively to only update content
Line 236: Line 256:  
  cvs update -dPA
 
  cvs update -dPA
   −
====Check Anaconda version====
  −
Check which anaconda was used upstream, (eg http://vault.centos.org/5.11/os/SRPMS/ & http://vault.centos.org/6.6/os/Source/SPackages/) and is it newer than the one in CVS. If it is then anaconda needs to be updated and patched. |
  −
The latest Anaconda also needs to be in smeextras.
     −
====Bump smeserver-release if needed====
  −
Most of the time, we'll create a new ISO when we release a new SME Server version. So, we have to bump the version of the smeserver-release RPM.
     −
{{Note box|Be careful to bump the version, the release and the displayversion macro, eg
+
===Preparation for a new ISO release===
   −
%define version 8.2
+
====Generate a new Changelogs====
%define release 0.rc2
+
When generating an ISO the Release Notes for the ISO should contain the full delta from the last ISO. Ian gets a script for doing that
%define displayversion %{version}rc2
     −
}}
+
When it is available you need to put it there:
   −
====Bump version in the splash screen====
+
to do this :
This is only needed on SME9: we need to update the title of the splsh screen. For this, we have to update the title line in cdrom.images/sme9/isolinux/isolinux.cfg, eg
+
cd ~/smeserver/cdrom.image
 +
cvs update -dPA
 +
cd  sme10/
 +
then copy the new version, as instance you could do this:
 +
cp ~/ReleaseNotes.txt README.txt
   −
  menu title Welcome to SME Server 9.1 beta3
+
then commit:
 +
  cvs commit -m "Release 10.1" README.txt
   −
====Remove the 'Beta warning' in Anaconda====
+
====The Smeserver version name====
=====For SME10 ??=====
+
The Version number comes from a rpm, smeserver-release, you need to bump the version in the spec file and build the rpm, think to push it to smeupdates-testing.
 +
====RPM dependencies====
 +
The smeos, smeupdates, and smeupdates-testing repos are included so we can stage the packages we are going to release without actually having to release them. Normally the smeupdates-testing repo is used for verification (testing is for developer testing).
 +
'''During the ISO release schedule (usually very short) we hold moving packages to updates-testing until the ISO is built.'''
   −
yet to be discovered
+
=====Examples of dependencies=====
    +
cp /mirrors/rpmforge/redhat/el6/en/i386/dag/RPMS/perl-Taint-Util-0.08-1.el6.rf.i686.rpm /build/smeserver/repo/testing/9/smetest/i386/RPMS/
   −
=====For SME9=====
+
cp /mirrors/centos/6/os/i386/Packages/libtevent-0* /build/smeserver/repo/testing/9/smeupdates-testing/i386/RPMS/
   −
The Iso gets a 'beta' tag with warnings during the install process. How remove the beta tag, '''add --final in the /build/smeserver/stage/bin/build_installer'''
+
This shows that on the buildsys the /mirrors has the main upstream repos and they will normally hold the RPM needed to resolve the dependency. You need to get it into smeupdates-testing, but it is safer to first copy the RPM to smetest and check that all is well.
   −
# add --final when we have final product
+
=====Rpm update cycle=====
  PYTHONPATH=/usr/lib/anaconda/ sudo /usr/lib/anaconda-runtime/buildinstall \
+
If an RPM is released during the update cycle:<br />
      --product "$distname" \
  −
      --version "${distvers/[^0-9.]*/}" \
  −
      --release "$distname" \
  −
      --brand "centos" \
  −
      '''--final \'''
  −
      --bugurl http://bugs.contribs.org/ \
  −
      --output $(pwd)/$distarch/ \
  −
      /build/smeserver/repo/$distrel/smeextras/$distarch/ \
  −
      $(pwd)/$distarch/
  −
  /bin/sed -i -e "s|packagedir =.*|packagedir = Packages|" $(pwd)/$distarch/.treeinfo
      +
smetest->smeupdates-testing->smeupdates
   −
=====For SME8=====
+
If an RPM is only needed for a new ISO and never needed as an update (before the ISO is released) :<br />
   −
Edit cdrom.image/sme8/updates/installclasses/smeinstallclass.py and remove the "betanag" entry from the dispatch.setStepList list
+
/mirrors->smeupdates-testing->smeos
   −
    def setSteps(self, dispatch):
+
Note that you don't put it into smeos, that is taken care of by the build scripts.
        dispatch.setStepList(
  −
                "betanag",  <- remove this line
  −
                "language",
  −
                "keyboard",
  −
                "findrootparts",
     −
===Prepare SME Server 10===
+
=====What are smeos/smeextras=====
 +
* Every package that needs to be in the ISO will go into smeos, '''by the buildsys.'''
 +
* Packages that are needed for building the ISO, but not actually needed in the ISO, will be in smeextras
 +
=====How get a Fully updated ISO=====
 +
If your Iso is not fully updated and a 'yum update' fetch updates after the first boot, in generally centos updates. You will need to push missed updates from smetest to smeupdates-testing.
 +
====RPM QA verification====
 +
{{Warning box|'''During the ISO release schedule, ALL RPMS MUST BE VERIFIED IN SMEUPDATES-TESTING.'''}}
   −
===='''Local Only''': Update local mirror as seen by the chroot====
+
====Server-Manager translations====
'''Local Only'''
+
Check translations from https://translate.koozali.org/patches/ if the filesize is >0 then need to patch smeserver-locale (to sme10) and produce new rpms that will must be pushed to smeupdate-testing
rsync -av --delete --progress ~/smeserver/releases/10/ /build/smeserver/repo/10
     −
====Create release specific folder and link (or rename the folder)====
+
====Anaconda translations====
The build_installer and build_ISO expect to be run from a directory that points to the head of the stage (ex. /build/stage/8). This is usually a symlink to 8.1 or 8.1beta1. The script fully expands the symlink and pulls off the last element to figure out what version we are going to build.
+
Check installer translations from https://translate.koozali.org/anaconda/<br />
VER=10
  −
VERSION=$VER.0.alpha2
  −
VERPREV=$VER.0.alpha1
     −
mkdir -p /build/smeserver/stage/$VERSION/{SRPMS,x86_64}
+
get the latest files ('''-w 1''' means wait one second between two requests, to prevent your IP behing blacklisted):
  cd /build/smeserver/stage/
+
  wget --mirror --no-parent -w 1 -A.mo -P ~/anaconda-po https://translate.koozali.org/anaconda/
rm -f $VER
  −
ln -s $VERSION $VER
     −
'''Local Only'''
+
you can also fast the operation by doing the following if you only need on sme version:
  mkdir -p /build/smeserver/stage/extra/isolinux/
+
  mkdir -p ~/anaconda-po/sme10
 +
wget --mirror --no-parent -w 1 -A.mo -P ~/anaconda-po/sme10 https://translate.koozali.org/anaconda/sme10/
   −
====Create cdrom content====
+
====Check if installer needs re-building====
When starting from fresh rsync can copy cdrom.image content, it also generates the folder tree.
+
{{Warning box|If either anaconda has changed OR there is new content in cdrom.image (apart from the release note) then the installer needs to be rebuilt (by the script build_installer). Otherwise just the ISO needs to be built (by the script Build_ISO).}}
{{Warning box|'''Note that this would remove everything else out of the target directory, eg translations.'''}}
  −
Also note that the isolinux content goes into a temporary directory, /build/smeserver/stage/extra/isolinux/
     −
rsync -a --delete --delete-excluded --exclude 'CVS/' --exclude 'isolinux/' ~/cdrom.image/sme10/ /build/smeserver/stage/10/x86_64/
  −
rsync -a --delete --delete-excluded --exclude 'CVS/' ~/cdrom.image/sme10/isolinux/ /build/smeserver/stage/extra/isolinux/10/
     −
====OR Refresh cdrom content====
  −
If only refreshing the files, then remove the delete.
     −
rsync -a --exclude 'CVS/' --exclude 'isolinux/' ~/cdrom.image/sme10/ /build/smeserver/stage/10/x86_64/
+
====Check Anaconda version====
rsync -a --exclude 'CVS/' ~/cdrom.image/sme10/isolinux/ /build/smeserver/stage/extra/isolinux/10/
+
Check which anaconda was used upstream, (eg http://vault.centos.org/5.11/os/SRPMS/ & http://vault.centos.org/6.6/os/Source/SPackages/) and is it newer than the one in CVS. If it is then anaconda needs to be updated and patched. |
 +
The latest Anaconda also needs to be in smeextras.
   −
====Create the remaining folders====
+
====Bump smeserver-release if needed====
{{Note box|Note: images and isolinux do not need to be created as they are removed anyway in build_installer}}
+
Most of the time, we'll create a new ISO when we release a new SME Server version. So, we have to bump the version of the smeserver-release RPM.
   −
* x86_64
+
{{Note box|Be careful to bump the version, the release and the displayversion macro, eg
cd /build/smeserver/stage/10/x86_64
  −
ln -s Packages/ SME
  −
mkdir -p /build/smeserver/stage/10/x86_64/repodata/
  −
mkdir -p /build/smeserver/stage/10/x86_64/updates/po
  −
mkdir -p /build/smeserver/stage/10/x86_64/updates/textw
  −
mkdir -p /build/smeserver/stage/10/x86_64/updates/iw
  −
mkdir -p /build/smeserver/stage/10/x86_64/updates/storage/devicelibs
     −
* other directories
+
%define version 10.1
  mkdir -p /build/smeserver/stage/iso/10/x86_64
+
  %define release 0.rc2
  mkdir -p /build/smeserver/stage/iso/10/source
+
  %define displayversion %{version}rc2
   −
====Copy anaconda translations====
+
or with final release:
Anaconda translations need copying to /updates/po from ~/anaconda-po
  −
cp -R ~/anaconda-po/translate.koozali.org/anaconda/sme10/* /build/smeserver/stage/10/i386/updates/po/
     −
====Copy anaconda content====
+
%define version 10.1
See ~/cdrom.image/sme10/updates/README.txt for details of what to copy. The patched anaconda files from ~/smeserver/rpms/anaconda/sme10 will go to updates directory. The exact directory depends on the anaconda version, eg  ~/smeserver/rpms/anaconda/sme10/anaconda-21.48.22.56
+
  %define release 1
  cd ~/smeserver/rpms/anaconda/sme10/
+
  %define displayversion %{version}
  make prep
  −
cd ~/smeserver/rpms/anaconda/sme10/anaconda-21.48.22.56
     −
'''this does not work and need to be updated.'''
+
Do not forget the changelog !
 +
}}
   −
cp -R storage /build/smeserver/stage/10/x86_64/updates/
+
====Bump version in the splash screen====
cp -R textw/*.py /build/smeserver/stage/10/x86_64/updates/textw
+
We need to update the title of the splash screen. For this, we have to update the title line in cdrom.images/sme10/isolinux/isolinux.cfg, eg
cp -R iw/*.py /build/smeserver/stage/10/x86_64/updates/iw
  −
cp *.py /build/smeserver/stage/10/x86_64/updates
  −
cp lang-table /build/smeserver/stage/10/x86_64/updates
     −
===='''Local Only''': Hack: Permission Fixup====
+
menu title Welcome to SME Server 10.1 RC1
This is only needed on local server if permissions are incorrect. It should not be needed.<br />
     −
'''Local Only'''
  −
sudo chmod -R a+w /build/smeserver/stage
     −
===='''Local Only''': Create stage content====
+
to do this :
{{Note box|Note: This step occurs every hours on the buildsys.}}
+
cd ~/smeserver/cdrom.image
'''Local Only'''
+
cvs update -dPA
  /build/smeserver/stage/bin/update_repos
+
  cd  sme10/isolinux/
 +
vim isolinux.cfg
   −
===Prepare SME Server 9===
+
then edit, and finish with:
 +
cvs commit -m "Release 10.1" isolinux.cfg
   −
===='''Local Only''': Update local mirror as seen by the chroot====
+
====Bump version in /etc/*release* files====
'''Local Only'''
+
We need to update the title of the initial boot screen when the iso installer has been launched.
  rsync -av --delete --progress ~/smeserver/releases/9/ /build/smeserver/repo/9
+
to do this :
 +
  cd ~/smeserver/cdrom.image
 +
cvs update -dPA
 +
cd  sme10/product/etc
   −
====Create release specific folder and link (or rename the folder)====
+
then update all the files there where you can see a 10.* version number.
The build_installer and build_ISO expect to be run from a directory that points to the head of the stage (ex. /build/stage/8). This is usually a symlink to 8.1 or 8.1beta1. The script fully expands the symlink and pulls off the last element to figure out what version we are going to build.  
+
centos-release  e-smith-release  os-release  redhat-release  system-release-cpe
   −
mkdir -p /build/smeserver/stage/9.2/{SRPMS,i386,x86_64}
+
====Remove the 'Beta warning' in Anaconda====
cd /build/smeserver/stage/
+
=====For SME10=====
rm -f 9
  −
ln -s 9.2 9
     −
'''Local Only'''
+
edit the file .buildstamp
  mkdir -p /build/smeserver/stage/extra/isolinux/
+
  cd /build/smeserver/stage/extra/images/10/product
 +
vim .buildstamp
   −
====Create cdrom content====
+
[Main]
When starting from fresh rsync can copy cdrom.image content, it also generates the folder tree.
+
Product=Koozali SME Server
{{Warning box|'''Note that this would remove everything else out of the target directory, eg translations.'''}}
+
Version=10alpha5
Also note that the isolinux content goes into a temporary directory, /build/smeserver/stage/extra/isolinux/
+
BugURL=https://bugs.koozali.org
 +
IsFinal=False
 +
UUID=alpha5.x86_64
 +
[Compose]
 +
Lorax=19.6.66-1
   −
rsync -a --delete --delete-excluded --exclude 'CVS/' --exclude 'isolinux/' ~/cdrom.image/sme9/ /build/smeserver/stage/9/x86_64/
  −
rsync -a --delete --delete-excluded --exclude 'CVS/' --exclude 'isolinux/' ~/cdrom.image/sme9/ /build/smeserver/stage/9/i386/
  −
rsync -a --delete --delete-excluded --exclude 'CVS/' ~/cdrom.image/sme9/isolinux/ /build/smeserver/stage/extra/isolinux/9/
     −
====OR Refresh cdrom content====
+
change isFinal to True
If only refreshing the files, then remove the delete.
     −
rsync -a --exclude 'CVS/' --exclude 'isolinux/' ~/cdrom.image/sme9/ /build/smeserver/stage/9/x86_64/
+
Also bump the '''Version''' !
rsync -a --exclude 'CVS/' --exclude 'isolinux/' ~/cdrom.image/sme9/ /build/smeserver/stage/9/i386/
  −
rsync -a --exclude 'CVS/' ~/cdrom.image/sme9/isolinux/ /build/smeserver/stage/extra/isolinux/9/
     −
====Create the remaining folders====
  −
{{Note box|Note: images and isolinux do not need to be created as they are removed anyway in build_installer}}
     −
* i386
  −
cd /build/smeserver/stage/9/i386
  −
ln -s Packages/ SME
  −
mkdir -p /build/smeserver/stage/9/i386/repodata/
  −
mkdir -p /build/smeserver/stage/9/i386/updates/po
  −
mkdir -p /build/smeserver/stage/9/i386/updates/textw
  −
mkdir -p /build/smeserver/stage/9/i386/updates/iw
  −
mkdir -p /build/smeserver/stage/9/i386/updates/storage/devicelibs
     −
* x86_64
+
===Prepare SME Server 10===
cd /build/smeserver/stage/9/x86_64
  −
ln -s Packages/ SME
  −
mkdir -p /build/smeserver/stage/9/x86_64/repodata/
  −
mkdir -p /build/smeserver/stage/9/x86_64/updates/po
  −
mkdir -p /build/smeserver/stage/9/x86_64/updates/textw
  −
mkdir -p /build/smeserver/stage/9/x86_64/updates/iw
  −
mkdir -p /build/smeserver/stage/9/x86_64/updates/storage/devicelibs
  −
 
  −
* other directories
  −
mkdir -p /build/smeserver/stage/iso/9/i386
  −
mkdir -p /build/smeserver/stage/iso/9/x86_64
  −
mkdir -p /build/smeserver/stage/iso/9/source
  −
 
  −
====Copy anaconda translations====
  −
Anaconda translations need copying to /updates/po from ~/anaconda-po
  −
cp -R ~/anaconda-po/translate.koozali.org/anaconda/sme9/* /build/smeserver/stage/9/i386/updates/po/
  −
cp -R ~/anaconda-po/translate.koozali.org/anaconda/sme9/* /build/smeserver/stage/9/x86_64/updates/po/
  −
 
  −
====Copy anaconda content====
  −
See ~/cdrom.image/sme9/updates/README.txt for details of what to copy. The patched anaconda files from ~/smecore/rpms/anaconda/sme9 will go to updates directory. The exact directory depends on the anaconda version, eg  ~/smecore/rpms/anaconda/sme9/anaconda-13.21.254
  −
cd ~/smecore/rpms/anaconda/sme9/
  −
make prep
  −
cd ~/smecore/rpms/anaconda/sme9/anaconda-13.21.254
  −
cp -R storage /build/smeserver/stage/9/i386/updates/
  −
cp -R textw/*.py /build/smeserver/stage/9/i386/updates/textw
  −
cp -R iw/*.py /build/smeserver/stage/9/i386/updates/iw
  −
cp *.py /build/smeserver/stage/9/i386/updates
  −
cp lang-table /build/smeserver/stage/9/i386/updates
  −
 
  −
cp -R storage /build/smeserver/stage/9/x86_64/updates/
  −
cp -R textw/*.py /build/smeserver/stage/9/x86_64/updates/textw
  −
cp -R iw/*.py /build/smeserver/stage/9/x86_64/updates/iw
  −
cp *.py /build/smeserver/stage/9/x86_64/updates
  −
cp lang-table /build/smeserver/stage/9/x86_64/updates
  −
 
  −
===='''Local Only''': Hack: Permission Fixup====
  −
This is only needed on local server if permissions are incorrect. It should not be needed.<br />
      +
===='''Local Only''': Update local mirror as seen by the chroot====
 
'''Local Only'''
 
'''Local Only'''
  sudo chmod -R a+w /build/smeserver/stage
+
  rsync -av --delete --progress ~/smeserver/releases/10/ /build/smeserver/repo/10
   −
===='''Local Only''': Create stage content====
+
====Create release specific folder and link (or rename the folder)====
{{Note box|Note: This step occurs every hours on the buildsys.}}
+
The build_installer and build_ISO expect to be run from a directory that points to the head of the stage (ex. /build/stage/8). This is usually a symlink to 8.1 or 8.1beta1. The script fully expands the symlink and pulls off the last element to figure out what version we are going to build.
'''Local Only'''
  −
/build/smeserver/stage/bin/update_repos
      +
get the version string [[Build_an_Official_ISO#Versions]]
   −
===Prepare SME Server 8===
+
{{Note box|Note: images and isolinux do not need to be created as they are removed anyway in build_installer(from SME9, need to check)}}
 
+
mkdir -p /build/smeserver/stage/$VERSION/{SRPMS,x86_64}
===='''Local Only''': Update local mirror as seen by the chroot====
+
mkdir -p /build/smeserver/stage/$VERSION/x86_64/{Packages,EFI,images,isolinux,LiveOS,repodata,repoview,updates}
  rsync -av --delete --progress ~/smeserver/releases/8/ /build/smeserver/repo/8/
+
  mkdir -p /build/smeserver/stage/$VERSION/x86_64/Packages/base
 +
mkdir -p /build/smeserver/stage/$VERSION/x86_64/images/pxeboot
 +
mkdir -p /build/smeserver/stage/$VERSION/x86_64/updates/{po,textw,iw,storage/devicelibs}
 +
cd /build/smeserver/stage/
 +
rm -f $VER
 +
ln -s $VERSION $VER
 +
Get last LiveOS from centos
 +
cd /build/smeserver/stage/$VERSION/x86_64/LiveOS
 +
wget <nowiki>http://mirror.centos.org/centos/7/os/x86_64/LiveOS/squashfs.img</nowiki>
 +
Get CentOS last images content
 +
cd /build/smeserver/stage/$VERSION/x86_64/images
 +
wget <nowiki>http://mirror.centos.org/centos/7/os/x86_64/images/boot.iso</nowiki> <nowiki>http://mirror.centos.org/centos/7/os/x86_64/images/efiboot.img</nowiki>
 +
cd /build/smeserver/stage/$VERSION/x86_64/images/pxeboot
 +
wget <nowiki>http://mirror.centos.org/centos/7/os/x86_64/images/pxeboot/initrd.img</nowiki> <nowiki>http://mirror.centos.org/centos/7/os/x86_64/images/pxeboot/vmlinuz</nowiki>
   −
====Create release specific folder and link (or rename folder)====
+
Prepare to build the product.img
The build_installer and build_ISO expect to be run from a directory that points to the head of the stage (ex. /build/stage/8). This is usually a symlink to 8.1 or 8.1beta1. The script fully expands the symlink and pulls off the last element to figure out what version we are going to build.  
+
  rsync -arv /build/smeserver/repo/$FROM/$VERPREV/smeos/x86_64/product /build/smeserver/stage/$VERSION/x86_64/
  mkdir -p /build/smeserver/stage/8.2/{SRPMS,i386,x86_64}
  −
cd /build/smeserver/stage/
  −
rm 8
  −
ln -s 8.2 8
     −
  mkdir -p /build/smeserver/stage/extra/isolinux/
+
Populate isolinux dir:
 +
rsync -arv /mirrors/centos/7/os/x86_64/isolinux/* /build/smeserver/stage/$VERSION/x86_64/isolinux/
 +
could also be from previous iso
 +
  rsync -arv /build/smeserver/stage/$VERPREV/x86_64/isolinux/* /build/smeserver/stage/$VERSION/x86_64/isolinux/
 +
Populate EFI
 +
rsync -arv /mirrors/centos/7/os/x86_64/EFI /build/smeserver/stage/$VERSION/x86_64/
 +
could also be from previous iso
 +
rsync -arv /build/smeserver/stage/$VERPREV/x86_64/EFI /build/smeserver/stage/$VERSION/x86_64/
    
====Create cdrom content====
 
====Create cdrom content====
 
When starting from fresh rsync can copy cdrom.image content, it also generates the folder tree.
 
When starting from fresh rsync can copy cdrom.image content, it also generates the folder tree.
{{Warning box|'''Note that this would remove everything else out of the target directory, eg translations.'''}}
+
{{Warning box|'''Before doing this, you should use an account with CVS write access to bump the version or alter  the following files:
Also note that the isolinux content goes into a temporary directory, /build/smeserver/stage/extra/isolinux/
+
#Packages/base/comp.xml
 
+
#isolinux{boot.msg, help.txt,isolinux.cfg}
rsync -a --delete --delete-excluded --exclude 'CVS/' --exclude 'isolinux/' ~/cdrom.image/sme8/ /build/smeserver/stage/8/x86_64/
+
#netinstall/isolinux/isolinux.cfg
rsync -a --delete --delete-excluded --exclude 'CVS/' --exclude 'isolinux/' ~/cdrom.image/sme8/ /build/smeserver/stage/8/i386/
+
#product/.buildstamp
rsync -a --delete --delete-excluded --exclude 'CVS/' ~/cdrom.image/sme8/isolinux/ /build/smeserver/stage/extra/isolinux/8/
+
#updates/README.txt'''}}
   −
====OR Refresh cdrom content====
+
==== Refresh cdrom content====
 
If only refreshing the files, then remove the delete.
 
If only refreshing the files, then remove the delete.
 +
cd ~/smeserver
 +
cvs -z3 -d:pserver:anonymous@shell.koozali.org:/cvs/smeserver co -P cdrom.image
   −
  rsync -a --exclude 'CVS/' --exclude 'isolinux/' ~/cdrom.image/sme8/ /build/smeserver/stage/8/x86_64/
+
  rsync -arv --exclude 'CVS/' ~/smeserver/cdrom.image/sme$VER/ /build/smeserver/stage/$VER/x86_64/
  rsync -a --exclude 'CVS/' --exclude 'isolinux/' ~/cdrom.image/sme8/ /build/smeserver/stage/8/i386/
+
  cd /build/smeserver/stage/extra/images/$VER/product/
  rsync -a --exclude 'CVS/' ~/cdrom.image/sme8/isolinux/ /build/smeserver/stage/extra/isolinux/8/
     −
====Create the remaining folders====
+
====Copy anaconda translations====
{{Note box|Note: images and isolinux do not need to be created as they are removed anyway in build_installer}}
+
Anaconda translations need copying to /updates/po from ~/anaconda-po
 +
see [[Build_an_Official_ISO#Anaconda translations]] to get updated strings
 +
cp -R ~/anaconda-po/translate.koozali.org/anaconda/sme$VER/* /build/smeserver/stage/$VER/x86_64/updates/po/
   −
* i386
+
====Copy anaconda content to create product.img====
cd /build/smeserver/stage/8/i386
+
See ~/smeserver/cdrom.image/sme$VER/updates/README.txt for details of what to copy. The patched anaconda files from ~/smeserver/rpms/anaconda/sme$VER will go to updates directory. The exact directory depends on the anaconda version, eg ~/smeserver/rpms/anaconda/sme$VER/anaconda-21.48.22.56
ln -s SME Packages
  −
mkdir -p /build/smeserver/stage/8/i386/repodata
  −
  mkdir -p /build/smeserver/stage/8/i386/updates/po
  −
cp ~/cdrom.image/sme8/SME/base/comps.xml /build/smeserver/stage/8/i386/repodata/
     −
* x86_64
+
if first time running cvs (here example as anonymous, but can use your login):
cd /build/smeserver/stage/8/x86_64
  −
ln -s SME Packages
  −
mkdir -p /build/smeserver/stage/8/x86_64/repodata
  −
mkdir -p /build/smeserver/stage/8/x86_64/updates/po
  −
cp ~/cdrom.image/sme8/SME/base/comps.xml /build/smeserver/stage/8/x86_64/repodata/
     −
* other directories
+
  mkdir -p ~/smeserver
  mkdir -p /build/smeserver/stage/iso/8/i386
+
  pushd ~/smeserver
  mkdir -p /build/smeserver/stage/iso/8/x86_64
+
  cvs -z3 -d:pserver:anonymous@shell.koozali.org:/cvs/smeserver co -P rpms/anaconda
  mkdir -p /build/smeserver/stage/iso/8/source
+
popd
 
  −
====Copy anaconda translations====
  −
Anaconda translations need copying to /updates/po from ~/anaconda-po
     −
cp -R ~/anaconda-po/translate.koozali.org/anaconda/sme8/* /build/smeserver/stage/8/i386/updates/po/
+
then you can simply
cp -R ~/anaconda-po/translate.koozali.org/anaconda/sme8/* /build/smeserver/stage/8/x86_64/updates/po/
     −
====Copy anaconda content====
+
  pushd ~/smeserver/rpms/anaconda/sme10/
See ~/cdrom.image/sme8/updates/README.txt for details of what to copy. The patched anaconda files from ~/smecore/rpms/anaconda/sme8 will go to updates directory. The exact directory depends on the anaconda version,
+
  cvs update -dPA
eg ~/smecore/rpms/anaconda/sme8/anaconda-11.1.2.263. One file (bootloaderInfo.py) also comes from booty. '''Finally lang-names needs to come from the actual anaconda RPM to updates which is a manual step.'''
  −
 
  −
cd ~/smecore/rpms/anaconda/sme8/
   
  make prep
 
  make prep
  cd ~/smecore/rpms/anaconda/sme8/anaconda-11.1.2.263
+
  popd
  cp anaconda bootloader.py findpackageset.py fsset.py instdata.py kickstart.py lang-table language.py packages.py partedUtils.py raid.py upgrade.py yuminstall.py /build/smeserver/stage/8/i386/updates/
+
pushd /build/smeserver/stage/$VERSION/x86_64/product/
  cp anaconda bootloader.py findpackageset.py fsset.py instdata.py kickstart.py lang-table language.py packages.py partedUtils.py raid.py upgrade.py yuminstall.py /build/smeserver/stage/8/x86_64/updates/
+
/bin/cp -f --preserve=timestamps ~/smeserver/rpms/anaconda/sme10/anaconda-21.48.22.159/pyanaconda/installclasses/koozali.py  run/install/product/pyanaconda/installclasses/
 +
  /bin/cp -f --preserve=timestamps ~/smeserver/rpms/anaconda/sme10/anaconda-21.48.22.159/pyanaconda/installclasses/koozali.py usr/lib64/python2.7/site-packages/pyanaconda/installclasses/
 +
/bin/cp -f --preserve=timestamps ~/smeserver/rpms/anaconda/sme10/anaconda-21.48.22.159/pyanaconda/installclasses/centos.py usr/lib64/python2.7/site-packages/pyanaconda/installclasses/
 +
  /bin/cp -f --preserve=timestamps ~/smeserver/rpms/anaconda/sme10/anaconda-21.48.22.159/pyanaconda/installclasses/fedora.py usr/lib64/python2.7/site-packages/pyanaconda/installclasses/
 +
popd
   −
cd textw
+
For testing purpose you can do this, but BUILD SCRIPT DOES IT ! build new product.img and copy it to stage, if you want but it should be done by the build.ISO script
cp confirm_text.py progress_text.py timezone_text.py upgrade_bootloader_text.py upgrade_text.py /build/smeserver/stage/8/i386/updates/
  −
cp confirm_text.py progress_text.py timezone_text.py upgrade_bootloader_text.py upgrade_text.py /build/smeserver/stage/8/x86_64/updates/
     −
  cd  ~/smecore/rpms/booty/sme8/
+
  #find . | cpio -c -o | gzip -9cv > ../product.img; cd ..
make prep
+
#mkdir -p /build/smeserver/stage/$VER/x86_64/images/
cp ~/smecore/rpms/booty/sme8/booty-0.80.6/bootloaderInfo.py /build/smeserver/stage/8/i386/updates/
+
  #cp product.img /build/smeserver/stage/$VER/x86_64/images/
  cp ~/smecore/rpms/booty/sme8/booty-0.80.6/bootloaderInfo.py /build/smeserver/stage/8/x86_64/updates/
      
===='''Local Only''': Hack: Permission Fixup====
 
===='''Local Only''': Hack: Permission Fixup====
This is only needed on local server if permissions are incorrect. '''It should not be needed.'''
+
This is only needed on local server if permissions are incorrect. It should not be needed.<br />
* Massage permissions before starting ISO building
  −
'''Local Only'''<br />
  −
 
   
  sudo chmod -R a+w /build/smeserver/stage
 
  sudo chmod -R a+w /build/smeserver/stage
    
===='''Local Only''': Create stage content====
 
===='''Local Only''': Create stage content====
{{Note box|Note: This step occurs every hours on the buildsys.}}
+
{{Note box|Note: This step occurs every hours on the buildsys as cron task.}}
 
  /build/smeserver/stage/bin/update_repos
 
  /build/smeserver/stage/bin/update_repos
 +
 +
 +
    
===Build & Release SME Server 10===
 
===Build & Release SME Server 10===
   −
VER=10
+
get the version string [[Build_an_Official_ISO#Versions]]
VERSION=$VER.0.alpha1
  −
VERPREV=$VER.0.alpha0
      
You can find logs of the related scripts build_ISO and build_installer<br />
 
You can find logs of the related scripts build_ISO and build_installer<br />
Line 563: Line 509:  
and after if you have no errors  
 
and after if you have no errors  
 
  /build/smeserver/stage/$VER/build_ISO.x86_64
 
  /build/smeserver/stage/$VER/build_ISO.x86_64
      
====Build SME Server 10 64 bit ISO====
 
====Build SME Server 10 64 bit ISO====
rm -f /build/smeserver/stage/$VER/x86_64/SME
+
as releases on builder7
 
  mock -r smeserver-$VER-x86_64-iso --init
 
  mock -r smeserver-$VER-x86_64-iso --init
  mock -r smeserver-$VER-x86_64-iso --mount --cwd /build/smeserver/stage/$VER --unpriv --chroot /build/smeserver/stage/bin/build_installer
+
  # not to do #mock -r smeserver-$VER-x86_64-iso --mount --cwd /build/smeserver/stage/$VER --unpriv --chroot /build/smeserver/stage/bin/build_installer
 
  mock -r smeserver-$VER-x86_64-iso --mount --cwd /build/smeserver/stage/$VER --unpriv --chroot /build/smeserver/stage/bin/build_ISO
 
  mock -r smeserver-$VER-x86_64-iso --mount --cwd /build/smeserver/stage/$VER --unpriv --chroot /build/smeserver/stage/bin/build_ISO
pushd /build/smeserver/stage/$VER/x86_64/
+
 
ln -s Packages SME
  −
popd
   
=====local only=====
 
=====local only=====
rm -f /build/smeserver/stage/$VER/x86_64/SME
   
  mock -r smeserver-$VER-x86_64-iso --init
 
  mock -r smeserver-$VER-x86_64-iso --init
  mock -r smeserver-$VER-x86_64-iso --mount --cwd /build/smeserver/stage/$VER --unpriv --chroot /build/smeserver/stage/bin/build_installer
+
  #not to do #mock -r smeserver-$VER-x86_64-iso --mount --cwd /build/smeserver/stage/$VER --unpriv --chroot /build/smeserver/stage/bin/build_installer
 
  sudo chmod -R a+w /build/smeserver/stage
 
  sudo chmod -R a+w /build/smeserver/stage
 
  mock -r smeserver-$VER-x86_64-iso --mount --cwd /build/smeserver/stage/$VER --unpriv --chroot /build/smeserver/stage/bin/build_ISO
 
  mock -r smeserver-$VER-x86_64-iso --mount --cwd /build/smeserver/stage/$VER --unpriv --chroot /build/smeserver/stage/bin/build_ISO
pushd /build/smeserver/stage/$VER/x86_64/
  −
ln -s Packages SME
  −
popd
     −
===Build & Release SME Server 9===
  −
You can find logs of the related scripts build_ISO and build_installer<br />
     −
If something goes wrong, please verify first
  −
/build/smeserver/stage/9/build_installer.i386
  −
or
  −
/build/smeserver/stage/9/build_installer.x86_64
  −
and after if you have no errors
  −
/build/smeserver/stage/9/build_ISO.i386
  −
or
  −
/build/smeserver/stage/9/build_ISO.x86_64
  −
====Build SME Server 9 32 bit ISO====
  −
rm -f /build/smeserver/stage/9/i386/SME
  −
mock -r smeserver-9-i386-iso --init
  −
mock -r smeserver-9-i386-iso --mount --cwd /build/smeserver/stage/9 --unpriv --chroot /build/smeserver/stage/bin/build_installer
  −
mock -r smeserver-9-i386-iso --mount --cwd /build/smeserver/stage/9 --unpriv --chroot /build/smeserver/stage/bin/build_ISO
  −
pushd /build/smeserver/stage/9/i386/
  −
ln -s Packages SME
  −
popd
  −
=====local only=====
  −
rm -f /build/smeserver/stage/9/i386/SME
  −
mock -r smeserver-9-i386-iso --init
  −
mock -r smeserver-9-i386-iso --mount --cwd /build/smeserver/stage/9 --unpriv --chroot /build/smeserver/stage/bin/build_installer
  −
sudo chmod -R a+w /build/smeserver/stage
  −
mock -r smeserver-9-i386-iso --mount --cwd /build/smeserver/stage/9 --unpriv --chroot /build/smeserver/stage/bin/build_ISO
  −
pushd /build/smeserver/stage/9/i386/
  −
ln -s Packages SME
  −
popd
  −
  −
====Build SME Server 9 64 bit ISO====
  −
rm -f /build/smeserver/stage/9/x86_64/SME
  −
mock -r smeserver-9-x86_64-iso --init
  −
mock -r smeserver-9-x86_64-iso --mount --cwd /build/smeserver/stage/9 --unpriv --chroot /build/smeserver/stage/bin/build_installer
  −
mock -r smeserver-9-x86_64-iso --mount --cwd /build/smeserver/stage/9 --unpriv --chroot /build/smeserver/stage/bin/build_ISO
  −
pushd /build/smeserver/stage/9/x86_64/
  −
ln -s Packages SME
  −
popd
  −
=====local only=====
  −
rm -f /build/smeserver/stage/9/x86_64/SME
  −
mock -r smeserver-9-x86_64-iso --init
  −
mock -r smeserver-9-x86_64-iso --mount --cwd /build/smeserver/stage/9 --unpriv --chroot /build/smeserver/stage/bin/build_installer
  −
sudo chmod -R a+w /build/smeserver/stage
  −
mock -r smeserver-9-x86_64-iso --mount --cwd /build/smeserver/stage/9 --unpriv --chroot /build/smeserver/stage/bin/build_ISO
  −
pushd /build/smeserver/stage/9/x86_64/
  −
ln -s Packages SME
  −
popd
  −
  −
  −
===Build & Release SME Server 8===
  −
You can find logs of the related scripts build_ISO and build_installer<br />
  −
  −
If something goes wrong, please verify first
  −
/build/smeserver/stage/8/build_installer.i386
  −
or
  −
/build/smeserver/stage/8/build_installer.x86_64
  −
and after if you have no errors
  −
/build/smeserver/stage/8/build_ISO.i386
  −
or
  −
/build/smeserver/stage/8/build_ISO.x86_64
  −
====Build SME Server 8 32 bit ISO====
  −
mock -r smeserver-8-i386-iso --init
  −
mock -r smeserver-8-i386-iso --mount --cwd /build/smeserver/stage/8 --unpriv --chroot /build/smeserver/stage/bin/build_installer
  −
mock -r smeserver-8-i386-iso --mount --cwd /build/smeserver/stage/8 --unpriv --chroot /build/smeserver/stage/bin/build_ISO
  −
  −
=====local only=====
  −
mock -r smeserver-8-i386-iso --init
  −
mock -r smeserver-8-i386-iso --mount --cwd /build/smeserver/stage/8 --unpriv --chroot /build/smeserver/stage/bin/build_installer
  −
sudo chmod -R a+w /build/smeserver/stage
  −
mock -r smeserver-8-i386-iso --mount --cwd /build/smeserver/stage/8 --unpriv --chroot /build/smeserver/stage/bin/build_ISO
  −
  −
====Build SME Server 8 64 bit ISO====
  −
mock -r smeserver-8-x86_64-iso --init
  −
mock -r smeserver-8-x86_64-iso --mount --cwd /build/smeserver/stage/8 --unpriv --chroot /build/smeserver/stage/bin/build_installer
  −
mock -r smeserver-8-x86_64-iso --mount --cwd /build/smeserver/stage/8 --unpriv --chroot /build/smeserver/stage/bin/build_ISO
  −
=====local only=====
  −
mock -r smeserver-8-x86_64-iso --init
  −
mock -r smeserver-8-x86_64-iso --mount --cwd /build/smeserver/stage/8 --unpriv --chroot /build/smeserver/stage/bin/build_installer
  −
sudo chmod -R a+w /build/smeserver/stage
  −
mock -r smeserver-8-x86_64-iso --mount --cwd /build/smeserver/stage/8 --unpriv --chroot /build/smeserver/stage/bin/build_ISO
      
===Where are My F... ISO===
 
===Where are My F... ISO===
ls /build/smeserver/stage/iso/8/
  −
i386  source  x86_64
  −
and
  −
ls /build/smeserver/stage/iso/9/
  −
i386  source  x86_64
  −
or
   
  ls /build/smeserver/stage/iso/10/
 
  ls /build/smeserver/stage/iso/10/
 
  source  x86_64
 
  source  x86_64
   −
===Developer Access Needed===
+
===Developer Access Needed to release ISO===
From this point a developer access to the buildsys and the main repo is Needed, sorry guys
+
From this point a developer access to the buildsys and the main repo is Needed, sorry guys. Has to be done from buildsrv
 
  −
====SME10====
     −
VER=10
+
get the version string [[Build_an_Official_ISO#Versions]]
VERSION=$VER.0.alpha1
  −
VERPREV=$VER.0.alpha0
      
=====Prepare directory structure for SME10 release=====
 
=====Prepare directory structure for SME10 release=====
SME 10.x test releases will go to /build/smeserver/repo/testing/9. Check that the link points to the correct testing release. Note when uploading Jigdos the ‘10’ link will not be pointing to the new directory.
+
SME 10.x test releases will go to /build/smeserver/repo/testing/10. Check that the link points to the correct testing release. Note when uploading Jigdos the ‘10’ link will not be pointing to the new directory.
  mkdir -p /build/smeserver/repo/testing/$VERSION/iso/source/
+
  mkdir -p /build/smeserver/repo/$TO/$VERSION/iso/source/
  mkdir -p /build/smeserver/repo/testing/$VERSION/iso/x86_64/
+
  mkdir -p /build/smeserver/repo/$TO/$VERSION/iso/x86_64/
  mkdir -p /build/smeserver/repo/testing/$VERSION/smeos/x86_64/
+
  mkdir -p /build/smeserver/repo/$TO/$VERSION/smeos/x86_64/
 
      
=====Copy SME Server 10 64 bit Jigdo to mirror=====
 
=====Copy SME Server 10 64 bit Jigdo to mirror=====
  /bin/cp -a /build/smeserver/stage/iso/$VER/x86_64/smeserver-$VERSION-x86_64.jigdo /build/smeserver/repo/testing/$VERSION/iso/x86_64/
+
  /bin/cp -a /build/smeserver/stage/iso/$VER/x86_64/smeserver-$VERSION-x86_64.jigdo /build/smeserver/repo/$TO/$VERSION/iso/x86_64/
  /bin/cp -a /build/smeserver/stage/iso/$VER/x86_64/smeserver-$VERSION-x86_64.template /build/smeserver/repo/testing/$VERSION/iso/x86_64/
+
  /bin/cp -a /build/smeserver/stage/iso/$VER/x86_64/smeserver-$VERSION-x86_64.template /build/smeserver/repo/$TO/$VERSION/iso/x86_64/
  rsync -a --delete /build/smeserver/stage/$VER/x86_64/ /build/smeserver/repo/testing/$VERSION/smeos/x86_64/
+
  rsync -a --delete /build/smeserver/stage/$VER/x86_64/ /build/smeserver/repo/$TO/$VERSION/smeos/x86_64/
 
      
=====Copy SME Server 10 SRPMS Jigdo to mirror=====
 
=====Copy SME Server 10 SRPMS Jigdo to mirror=====
  /bin/cp -a /build/smeserver/stage/iso/$VER/source/smeserver-$VERSION-SRPMS.jigdo /build/smeserver/repo/testing/$VERSION/iso/source/
+
  /bin/cp -a /build/smeserver/stage/iso/$VER/source/smeserver-$VERSION-SRPMS.jigdo /build/smeserver/repo/$TO/$VERSION/iso/source/
  /bin/cp -a /build/smeserver/stage/iso/$VER/source/smeserver-$VERSION-SRPMS.template /build/smeserver/repo/testing/$VERSION/iso/source/
+
  /bin/cp -a /build/smeserver/stage/iso/$VER/source/smeserver-$VERSION-SRPMS.template /build/smeserver/repo/$TO/$VERSION/iso/source/
  rsync -a --delete /build/smeserver/stage/$VER/SRPMS/ /build/smeserver/repo/testing/$VERSION/smeos/SRPMS
+
  rsync -a --delete /build/smeserver/stage/$VER/SRPMS/ /build/smeserver/repo/$TO/$VERSION/smeos/SRPMS
    
=====Copy SME Server 10 ISOs to mirror=====
 
=====Copy SME Server 10 ISOs to mirror=====
  rsync -a --delete /build/smeserver/stage/iso/$VER/ /build/smeserver/repo/testing/$VERSION/iso
+
  rsync -a --delete /build/smeserver/stage/iso/$VER/ /build/smeserver/repo/$TO/$VERSION/iso
       
=====Hard links=====
 
=====Hard links=====
 
As an example how to create the hard links:
 
As an example how to create the hard links:
  cp -lr /build/smeserver/repo/testing/$VERPREV/smeos/* /build/smeserver/repo/testing/$VERSION/smeos/
+
  cp -lr /build/smeserver/repo/$FROM/$VERPREV/smeos/* /build/smeserver/repo/$TO/$VERSION/smeos/
  mkdir -p /build/smeserver/repo/testing/$VERSION/smeaddons/
+
  mkdir -p /build/smeserver/repo/$TO/$VERSION/smeaddons/
  mkdir -p /build/smeserver/repo/testing/$VERSION/smecontribs/
+
  mkdir -p /build/smeserver/repo/$TO/$VERSION/smecontribs/
  mkdir -p /build/smeserver/repo/testing/$VERSION/smedev/
+
  mkdir -p /build/smeserver/repo/$TO/$VERSION/smedev/
  mkdir -p /build/smeserver/repo/testing/$VERSION/smeextras/
+
  mkdir -p /build/smeserver/repo/$TO/$VERSION/smeextras/
  mkdir -p /build/smeserver/repo/testing/$VERSION/smetest/
+
  mkdir -p /build/smeserver/repo/$TO/$VERSION/smetest/
  mkdir -p /build/smeserver/repo/testing/$VERSION/smeupdates/
+
  mkdir -p /build/smeserver/repo/$TO/$VERSION/smeupdates/
  mkdir -p /build/smeserver/repo/testing/$VERSION/smeupdates-testing/
+
  mkdir -p /build/smeserver/repo/$TO/$VERSION/smeupdates-testing/
  cp -lr /build/smeserver/repo/testing/$VERPREV/smecontribs/* /build/smeserver/repo/testing/$VERSION/smecontribs/
+
  cp -lr /build/smeserver/repo/$FROM/$VERPREV/smecontribs/* /build/smeserver/repo/$TO/$VERSION/smecontribs/
  cp -lr /build/smeserver/repo/testing/$VERPREV/smedev/* /build/smeserver/repo/testing/$VERSION/smedev/
+
  cp -lr /build/smeserver/repo/$FROM/$VERPREV/smedev/* /build/smeserver/repo/$TO/$VERSION/smedev/
  cp -lr /build/smeserver/repo/testing/$VERPREV/smeextras/* /build/smeserver/repo/testing/$VERSION/smeextras/
+
  cp -lr /build/smeserver/repo/$FROM/$VERPREV/smeextras/* /build/smeserver/repo/$TO/$VERSION/smeextras/
  cp -lr /build/smeserver/repo/testing/$VERPREV/smetest/* /build/smeserver/repo/testing/$VERSION/smetest/
+
  cp -lr /build/smeserver/repo/$FROM/$VERPREV/smetest/* /build/smeserver/repo/$TO/$VERSION/smetest/
  cp -lr /build/smeserver/repo/testing/$VERPREV/smeupdates/* /build/smeserver/repo/testing/$VERSION/smeupdates/
+
  cp -lr /build/smeserver/repo/$FROM/$VERPREV/smeupdates/* /build/smeserver/repo/$TO/$VERSION/smeupdates/
  cp -lr /build/smeserver/repo/testing/$VERPREV/smeupdates-testing/* /build/smeserver/repo/testing/$VERSION/smeupdates-testing/
+
  cp -lr /build/smeserver/repo/$FROM/$VERPREV/smeupdates-testing/* /build/smeserver/repo/$TO/$VERSION/smeupdates-testing/
  cp -lr /build/smeserver/repo/testing/$VERPREV/smeaddons/* /build/smeserver/repo/testing/$VERSION/smeaddons/
+
  cp -lr /build/smeserver/repo/$FROM/$VERPREV/smeaddons/* /build/smeserver/repo/$TO/$VERSION/smeaddons/
   −
====SME9====
+
=====Switch main version link=====
=====Prepare directory structure for SME9 release=====
+
and finally
SME 9.x test releases will go to /build/smeserver/repo/testing/9. Check that the link points to the correct testing release. Note when uploading Jigdos the ‘9’ link will not be pointing to the new directory.
  −
mkdir -p /build/smeserver/repo/testing/9.0/iso/i386/
  −
mkdir -p /build/smeserver/repo/testing/9.0/iso/source/
  −
mkdir -p /build/smeserver/repo/testing/9.0/iso/x86_64/
  −
mkdir -p /build/smeserver/repo/testing/9.0/smeos/x86_64/
  −
mkdir -p /build/smeserver/repo/testing/9.0/smeos/i386/
     −
=====Copy SME Server 9 64 bit Jigdo to mirror=====
+
  pushd /build/smeserver/repo/$TO/
  /bin/cp -a /build/smeserver/stage/iso/9/x86_64/smeserver-9.0-x86_64.jigdo /build/smeserver/repo/testing/9.0/iso/x86_64/
+
  unlink $VER
  /bin/cp -a /build/smeserver/stage/iso/9/x86_64/smeserver-9.0-x86_64.template /build/smeserver/repo/testing/9.0/iso/x86_64/
+
ln -s $VERSION $VER
  rsync -a --delete /build/smeserver/stage/9/x86_64/ /build/smeserver/repo/testing/9.0/smeos/x86_64/
+
  popd
   −
=====Copy SME Server 9 32 bit Jigdo to mirror=====
  −
/bin/cp -a /build/smeserver/stage/iso/9/i386/smeserver-9.0-i386.jigdo /build/smeserver/repo/testing/9.0/iso/i386/
  −
/bin/cp -a /build/smeserver/stage/iso/9/i386/smeserver-9.0-i386.template /build/smeserver/repo/testing/9.0/iso/i386/
  −
rsync -a --delete /build/smeserver/stage/9/i386/ /build/smeserver/repo/testing/9.0/smeos/i386
     −
=====Copy SME Server 9 SRPMS Jigdo to mirror=====
  −
/bin/cp -a /build/smeserver/stage/iso/9/source/smeserver-9.0-SRPMS.jigdo /build/smeserver/repo/testing/9.0/iso/source/
  −
/bin/cp -a /build/smeserver/stage/iso/9/source/smeserver-9.0-SRPMS.template /build/smeserver/repo/testing/9.0/iso/source/
  −
rsync -a --delete /build/smeserver/stage/9/SRPMS/ /build/smeserver/repo/testing/9.0/smeos/SRPMS
     −
=====Copy SME Server 9 ISOs to mirror=====
+
[[Category:SME Server Development Framework]]
rsync -a --delete /build/smeserver/stage/iso/9/ /build/smeserver/repo/testing/9.0/iso
+
[[Category:Development Tools]]
 +
 
 +
==check if all deps are there ==
 +
need to move to the correct section
 +
 
    +
first createrepo
 +
createrepo --database --update --skip-symlinks --simple-md-filenames --groupfile repodata/comps.xml /build/smeserver/stage/$VER/x86_64
   −
=====Hard links=====
+
then use repoclosure
As an example how to create the hard links:
+
  repoclosure --repofrompath=stage,/build/smeserver/stage/10/x86_64 -c yum.conf
  cp -lr /build/smeserver/repo/testing/9.0rc1/smeos/* /build/smeserver/repo/testing/9.0/smeos/
  −
  mkdir -p /build/smeserver/repo/testing/9.0/smeaddons/
  −
mkdir -p /build/smeserver/repo/testing/9.0/smecontribs/
  −
mkdir -p /build/smeserver/repo/testing/9.0/smedev/
  −
mkdir -p /build/smeserver/repo/testing/9.0/smeextras/
  −
  mkdir -p /build/smeserver/repo/testing/9.0/smetest/
  −
mkdir -p /build/smeserver/repo/testing/9.0/smeupdates/
  −
mkdir -p /build/smeserver/repo/testing/9.0/smeupdates-testing/
  −
cp -lr /build/smeserver/repo/testing/9.0rc1/smecontribs/* /build/smeserver/repo/testing/9.0/smecontribs/
  −
cp -lr /build/smeserver/repo/testing/9.0rc1/smedev/* /build/smeserver/repo/testing/9.0/smedev/
  −
cp -lr /build/smeserver/repo/testing/9.0rc1/smeextras/* /build/smeserver/repo/testing/9.0/smeextras/
  −
cp -lr /build/smeserver/repo/testing/9.0rc1/smetest/* /build/smeserver/repo/testing/9.0/smetest/
  −
cp -lr /build/smeserver/repo/testing/9.0rc1/smeupdates/* /build/smeserver/repo/testing/9.0/smeupdates/
  −
cp -lr /build/smeserver/repo/testing/9.0rc1/smeupdates-testing/* /build/smeserver/repo/testing/9.0/smeupdates-testing/
  −
cp -lr /build/smeserver/repo/testing/9.0rc1/smeaddons/* /build/smeserver/repo/testing/9.0/smeaddons/
      +
will output
 +
Added stage repo from /build/smeserver/stage/10/x86_64
 +
Reading in repository metadata - please wait....
 +
Checking Dependencies
 +
Repos looked at: 1
 +
    stage
 +
Num Packages in Repos: 1421
   −
====SME8====
  −
=====Prepare directory structure for SME8 release=====
  −
SME 8.x test releases will go to /build/smeserver/repo/testing/8. Check that the link points to the correct testing release. Note when uploading Jigdos the ‘8’ link will not be pointing to the new directory.
  −
mkdir -p /build/smeserver/repo/testing/8.1/iso/i386/
  −
mkdir -p /build/smeserver/repo/testing/8.1/iso/source/
  −
mkdir -p /build/smeserver/repo/testing/8.1/iso/x86_64/
  −
mkdir -p /build/smeserver/repo/testing/8.1/smeos/i386/
  −
mkdir -p /build/smeserver/repo/testing/8.1/smeos/SRPMS/
  −
mkdir -p /build/smeserver/repo/testing/8.1/smeos/x86_64/
     −
=====Copy SME Server 8 64 bit Jigdo to mirror=====
+
content of yum.conf used for this test
  /bin/cp -a /build/smeserver/stage/iso/8/x86_64/smeserver-8.1-x86_64.jigdo /build/smeserver/repo/testing/8.1/iso/x86_64/
+
[main]
  /bin/cp -a /build/smeserver/stage/iso/8/x86_64/smeserver-8.1-x86_64.template /build/smeserver/repo/testing/8.1/iso/x86_64/
+
  cachedir=/tmp/cache/yum/$basearch/$releasever
  rsync -a --delete /build/smeserver/stage/8/x86_64/ /build/smeserver/repo/testing/8.1/smeos/x86_64/
+
keepcache=0
 +
debuglevel=2
 +
logfile=/dev/null
 +
exactarch=1
 +
obsoletes=1
 +
gpgcheck=1
 +
plugins=1
 +
  installonly_limit=5
 +
reposdir=/etc/yum.smerepos.d
 +
  distroverpkg=centos-release
   −
=====Copy SME Server 8 32 bit Jigdo to mirror=====
  −
/bin/cp -a /build/smeserver/stage/iso/8/i386/smeserver-8.1-i386.jigdo /build/smeserver/repo/testing/8.1/iso/i386/
  −
/bin/cp -a /build/smeserver/stage/iso/8/i386/smeserver-8.1-i386.template /build/smeserver/repo/testing/8.1/iso/i386/
  −
rsync -a --delete /build/smeserver/stage/8/i386/ /build/smeserver/repo/testing/8.1/smeos/i386
     −
=====Copy SME Server 8 SRPMS Jigdo to mirror=====
+
if you get an error
  /bin/cp -a /build/smeserver/stage/iso/8/source/smeserver-8.1-SRPMS.jigdo /build/smeserver/repo/testing/8.1/iso/source/
+
  package: php80-php-intl-8.0.23-1.el7.remi.x86_64 from stage
/bin/cp -a /build/smeserver/stage/iso/8/source/smeserver-8.1-SRPMS.template /build/smeserver/repo/testing/8.1/iso/source/
+
  unresolved deps:
rsync -a --delete /build/smeserver/stage/8/SRPMS/ /build/smeserver/repo/testing/8.1/smeos/SRPMS
+
    libicuuc.so.71()(64bit)
 +
    libicuio.so.71()(64bit)
 +
    libicui18n.so.71()(64bit)
 +
    libicudata.so.71()(64bit)
   −
=====Copy SME Server 8 ISOs to mirror=====
  −
rsync -a --delete /build/smeserver/stage/iso/8/ /build/smeserver/repo/testing/8.1/iso
      +
then on a SME do
 +
yum whatprovides */libicuuc.so.71
   −
[[Category:SME Server Development Framework]]
+
then add the missing rpm in the updates repo and sync it with update_repos script
[[Category:Development Tools]]
 
Super Admin, Wiki & Docs Team, Bureaucrats, Interface administrators, Administrators
3,250

edits

Navigation menu