Add SOP that deals with OpenH264
Signed-off-by: Patrik Polakovič <patrik@alphamail.org>
This commit is contained in:
parent
b52b32f2d9
commit
c5e22908dd
2 changed files with 206 additions and 185 deletions
|
@ -1,185 +0,0 @@
|
|||
== Generating Openh264 Composes
|
||||
|
||||
=== Description
|
||||
|
||||
Openh264 repos are a special case and we need to generate the composes
|
||||
for it in a different way. We use ODCS to generate the private compose
|
||||
and send the rpms to Cisco to publish them on their CDN. We publish the
|
||||
repodata on our side.
|
||||
|
||||
[WARNING]
|
||||
.Warning
|
||||
====
|
||||
We do not have all the appropriate legal rights to distribute these
|
||||
packages, so we need to be extra carefull to make sure they are never
|
||||
distributed via our build system or websites
|
||||
====
|
||||
|
||||
=== Action
|
||||
|
||||
==== Permissions needed
|
||||
|
||||
You will need some ODCS permissions in order to request private composes
|
||||
and composes from tags. You can set this in infra/ansible in
|
||||
inventory/group_vars/odcs in the odcs_allowed_clients_users variable.
|
||||
See other releng users entries for format.
|
||||
|
||||
==== Get the odcs token
|
||||
|
||||
In order to generate an odcs compose, you need a openidc token.
|
||||
|
||||
Run the odcs-token.py under `scripts/odcs/` from pagure releng
|
||||
repository to generate the token.
|
||||
|
||||
....
|
||||
$ ./odcs-token.py
|
||||
....
|
||||
|
||||
==== Make sure rpms are written out with the right signature
|
||||
|
||||
....
|
||||
$ koji write-signed-rpm eb10b464 openh264-2.2.0-1.fc38
|
||||
....
|
||||
|
||||
Where the key for that branch is listed, then the open264 package and
|
||||
version.
|
||||
|
||||
==== Generate a private odcs compose
|
||||
|
||||
With the token generated above, generate the odcs private compose
|
||||
|
||||
....
|
||||
$ python odcs-private-compose.py <token> <koji_tag> <signingkeyid>
|
||||
....
|
||||
|
||||
`koji_tag`: fxx-openh264 (Openh264 builds are tagged to fxx-openh264
|
||||
tags where [.title-ref]#xx# represents the fedora release)
|
||||
|
||||
`signingkeyid`: The short hash of the key for this Fedora branch.
|
||||
|
||||
The composes are stored under `/srv/odcs/private/` dir on
|
||||
`odcs-backend-releng01.iad2.fedoraproject.org`
|
||||
|
||||
==== Pull the compose to your local machine
|
||||
|
||||
We need to extract the rpms and tar them to send them to Cisco. In order
|
||||
to that, first of all we need to pull the compose to our local machine.
|
||||
|
||||
===== Move the compose to your home dir on odcs-backend-releng01.iad2.fedoraproject.org
|
||||
|
||||
Since the compose is owned by [.title-ref]#odcs-server# pull it into
|
||||
your home dir
|
||||
|
||||
....
|
||||
$ mkdir ~/32-openh264
|
||||
$ sudo rsync -avhHP /srv/odcs/private/odcs-3835/ ~/32-openh264/
|
||||
$ sudo chown -R mohanboddu:mohanboddu ~/32-openh264/
|
||||
....
|
||||
|
||||
===== Sync the compose to your local machine
|
||||
|
||||
Pull in the compose from your home dir on odcs releng backend to your
|
||||
local machine into a temp working dir
|
||||
|
||||
....
|
||||
$ mkdir openh264-20200813
|
||||
$ scp -rv odcs-backend-releng01.iad2.fedoraproject.org:/home/fedora/mohanboddu/32-openh264/ openh264-20200813/
|
||||
....
|
||||
|
||||
===== Make the changes needed
|
||||
|
||||
Please follow the following commands to make the necessary tar files to
|
||||
send to Cisco
|
||||
|
||||
....
|
||||
$ cd openh264-20200813
|
||||
$ mkdir 32-rpms
|
||||
# Copy rpms including devel rpms
|
||||
$ cp -rv 32-openh264/compose/Temporary/*/*/*/*/*rpm 32-rpms/
|
||||
# Copy debuginfo rpms
|
||||
$ cp -rv 32-openh264/compose/Temporary/*/*/*/*/*/*rpm 32-rpms/
|
||||
# copy the src.rpm
|
||||
$ cp -rv 32-openh264/compose/Temporary/*/*/*/*/*src.rpm 32-rpms/
|
||||
$ cd 32-rpms
|
||||
# Create the tar file with the rpms
|
||||
$ tar -cJvf ../fedora-32-openh264-rpms.tar.xz *rpm
|
||||
....
|
||||
|
||||
We need to send this tar file to Cisco along with the list of rpms in
|
||||
each tarball.
|
||||
|
||||
===== Syncing the compose to sundries01
|
||||
|
||||
Once we get a confirmation from Cisco that the rpms are updated on their
|
||||
CDN, verify them by using curl. For example:
|
||||
|
||||
....
|
||||
$ curl -I http://ciscobinary.openh264.org/openh264-2.1.1-1.fc32.x86_64.rpm
|
||||
....
|
||||
|
||||
Now push these composes to *sundries01.iad2.fedoraproject.org* and
|
||||
*mm-backend01.iad2.fedoraproject.org*
|
||||
|
||||
On sundries01 we need to sync to a directory that is owned by _apache_,
|
||||
so first we sync to the home directory on sundries01. Same with
|
||||
mm-backend01 as the directory is owned by _root_.
|
||||
|
||||
Create a temp working directory on sundries01
|
||||
|
||||
....
|
||||
$ ssh sundries01.iad2.fedoraproject.org
|
||||
$ mkdir openh264-20200825
|
||||
....
|
||||
|
||||
Create a temp working directory on mm-backend01
|
||||
|
||||
....
|
||||
$ ssh mm-backend01.iad2.fedoraproject.org
|
||||
$ mkdir openh264-20200825
|
||||
....
|
||||
|
||||
Then from your local machine, sync the compose
|
||||
|
||||
....
|
||||
$ cd openh264-20200825
|
||||
$ rsync -avhHP 32-openh264 sundries01.iad2.fedoraproject.org:/home/fedora/mohanboddu/openh264-20200825
|
||||
$ rsync -avhHP 32-openh264 mm-backend01.iad2.fedoraproject.org:/home/fedora/mohanboddu/openh264-20200825
|
||||
....
|
||||
|
||||
On sundries01
|
||||
|
||||
....
|
||||
$ cd openh264-20200825
|
||||
$ sudo rsync -avhHP 32-openh264/compose/Temporary/ /srv/web/codecs.fedoraproject.org/openh264/32/
|
||||
....
|
||||
|
||||
On mm-backend01
|
||||
|
||||
....
|
||||
$ cd openh264-20200825
|
||||
$ sudo rsync -avhHP 32-openh264/compose/Temporary/ /srv/codecs.fedoraproject.org/openh264/32/
|
||||
....
|
||||
|
||||
===== Extra info
|
||||
|
||||
Normally that should be it, but in some cases you may want to push
|
||||
things out faster than normal, and here's a few things you can do to do
|
||||
that:
|
||||
|
||||
On mm-backend01.iad2.fedoraproject.org you can run:
|
||||
|
||||
....
|
||||
# sudo -u mirrormanager /usr/local/bin/umdl-required codecs /var/log/mirrormanager/umdl-required.log
|
||||
....
|
||||
|
||||
This will have mirrormanager scan the codecs dir and update it if it's
|
||||
changed.
|
||||
|
||||
On batcave01.iad2.fedoraproject.org you can use ansible to force all the
|
||||
proxies to sync the codec content from sundries01:
|
||||
|
||||
....
|
||||
# ansible -a '/usr/bin/rsync --delete -a --no-owner --no-group sundries01::codecs.fedoraproject.org/ /srv/web/codecs.fedoraproject.org/' proxies
|
||||
....
|
||||
|
||||
Mirrorlist servers should update every 15min.
|
206
modules/releng_misc_guide/pages/sop_openh264.adoc
Normal file
206
modules/releng_misc_guide/pages/sop_openh264.adoc
Normal file
|
@ -0,0 +1,206 @@
|
|||
== Generating OpenH264 RPMs and sending them to Cisco
|
||||
|
||||
=== Description
|
||||
|
||||
OpenH264 RPMs are a special case and we need to handle it with caution.
|
||||
|
||||
The process is as follows:
|
||||
|
||||
. We generate and sign the RPMs using `koji dist-repo`.
|
||||
. We send the RPMs to Cisco for hosting.
|
||||
. Once we get confirmation from Cisco that they published the RPMs on their CDN
|
||||
we publish the repodata on our side.
|
||||
|
||||
=== Legal background
|
||||
|
||||
OpenH264 is a free software library for real-time encoding and decoding video
|
||||
streams in the H.264/MPEG-4 AVC format.
|
||||
|
||||
In 2013 Cisco released both binaries and source code, and pay all royalties for
|
||||
its use to MPEG LA themselves for any software projects that use Cisco's
|
||||
precompiled binaries (thus making Cisco's OpenH264 binaries free to use);
|
||||
any software projects that use Cisco's source code instead of its binaries
|
||||
would be legally responsible for paying all royalties to MPEG LA themselves,
|
||||
however.
|
||||
|
||||
The workaround is that the Cisco binaries are built in Fedora's infrastructure
|
||||
but *distributed* by Cisco.
|
||||
|
||||
[WARNING]
|
||||
.Warning
|
||||
====
|
||||
The RPMs *must never* be distributed via our build system or websites.
|
||||
====
|
||||
|
||||
=== The process
|
||||
|
||||
==== Permissions needed
|
||||
|
||||
. Make sure to have a valid Kerberos token (`kinit`).
|
||||
. Relevant FAS group membership.
|
||||
. *TODO*
|
||||
|
||||
==== Generating the repository
|
||||
|
||||
Once a request comes in through the RelEng issue tracker to update OpenH264 to
|
||||
a new version we will first need to generate the RPMs and repodata. We do this
|
||||
using the `koji dist-repo` utility.
|
||||
|
||||
[NOTE]
|
||||
.Note
|
||||
====
|
||||
The arguments that should be passed to the commands will certainly vary from the
|
||||
examples listed below.
|
||||
|
||||
Practice common sense and double check everything.
|
||||
====
|
||||
|
||||
Run this command:
|
||||
|
||||
....
|
||||
$ koji dist-repo f43-openh264 31645531 --noinherit --with-src -a aarch -a
|
||||
ppc64le -a s390x -a x86_64
|
||||
....
|
||||
|
||||
In the case of the above command:
|
||||
|
||||
. `f43-openh264` is the tag the builds are tagged into.
|
||||
. `31645531` is the signing key for the RPMs. The keys for various versions
|
||||
can be found https://fedoraproject.org/security[here].
|
||||
. `--noinherit` causes only packages tagged into `f43-openh264` to be included,
|
||||
without inheritance from the parent tag (e.g. `f43`).
|
||||
. `--with-src` causes the source RPM to be included.
|
||||
. `-a <ARG>` options are the respective architectures.
|
||||
|
||||
After the command finishes the directory should appear
|
||||
https://kojipkgs.fedoraproject.org/repos-dist[here].
|
||||
|
||||
The RPMs are visible through the web frontend, but we have a rewrite rule that
|
||||
redirects any attempt to download them to a wiki page saying why that is not
|
||||
possible.
|
||||
|
||||
In order to get to the RPMs themselves we must do it from a host on which Koji
|
||||
is mounted where they will be in the `/mnt/koji/repos-dist/f43-openh264` directory.
|
||||
|
||||
For example:
|
||||
|
||||
....
|
||||
$ ssh compose-branched01.iad2.fedoraproject.org
|
||||
....
|
||||
|
||||
After you verify that everything needed is there you may clone the directory to
|
||||
your local machine.
|
||||
|
||||
....
|
||||
$ rsync -avhHP username@compose-branched01.iad2.fedoraproject.org:/mnt/koji/repos-dist/f43-openh264/6555489 /home/username/openh264/2.6.0/f43
|
||||
....
|
||||
|
||||
==== Sending the RPMs to Cisco for hosting
|
||||
|
||||
===== Preparing the tarball
|
||||
|
||||
We now have the necessary directory on our local machine. Now we need to package
|
||||
it into a tarball and send it to Cisco.
|
||||
|
||||
Create a new directory into which we can copy the RPMs and out of which we will
|
||||
create the tarball.
|
||||
|
||||
....
|
||||
$ mkdir /home/username/openh264/2.6.0/f43/f43_2.6.0_rpms
|
||||
....
|
||||
|
||||
Copy the RPMs (including the source RPM) from the original directory to the
|
||||
new directory.
|
||||
|
||||
....
|
||||
$ cd /home/username/openh264/2.6.0/f43/
|
||||
$ cp -rv 6553481/*/*/*/*rpm f43_2.6.0_rpms
|
||||
....
|
||||
|
||||
Create a list of the RPMs that will be sent to Cisco along with the tarball.
|
||||
|
||||
....
|
||||
$ ls f43_2.6.0_rpms > f43_2.6.0_rpms_list.txt
|
||||
....
|
||||
|
||||
Create the tarball.
|
||||
|
||||
....
|
||||
$ tar -cJvf f43_2.6.0_rpms.tar.xz f43_2.6.0_rpms
|
||||
....
|
||||
|
||||
===== Sending the tarball to Cisco
|
||||
|
||||
*TODO*
|
||||
|
||||
[NOTE]
|
||||
.Note
|
||||
====
|
||||
We used to do this through e-mail. However, lately we have started experiencing issues
|
||||
with e-mail filters (can't send tarballs). We are trying to reach Cisco about
|
||||
possible solutions to this issue.
|
||||
====
|
||||
|
||||
==== Publishing the repodata
|
||||
|
||||
Once we receive confirmation from Cisco that their CDN was updated we can
|
||||
verify it using `curl`.
|
||||
|
||||
....
|
||||
$ curl -I http://ciscobinary.openh264.org/openh264-2.6.0-1.fc43.x86_64.rpm
|
||||
....
|
||||
|
||||
Now it is time to publish the repodata on our infrastructure.
|
||||
Navigate to the relevant directory on your local machine and sync the
|
||||
`dist-repo` directory to your home directory on `sundries01`.
|
||||
|
||||
....
|
||||
$ rsync -avhHP 6556232 sundries01.iad2.fedoraproject.org/home/fedora/username/openh264/2.6.0/43
|
||||
....
|
||||
|
||||
Connect to `sundries01`.
|
||||
|
||||
....
|
||||
$ ssh sundries01.iad2.fedoraproject.org
|
||||
....
|
||||
|
||||
Navigate to the relevant directory.
|
||||
|
||||
....
|
||||
$ pwd
|
||||
/home/fedora/username/openh264/2.6.0/43
|
||||
....
|
||||
|
||||
Sync the contents of the directory to `/srv/web/codecs.fedoraproject.org`.
|
||||
|
||||
....
|
||||
$ sudo rsync -avhHP 6556232/. /srv/web/codecs.fedoraproject.org/openh264/43
|
||||
....
|
||||
|
||||
Make sure the directory is owned by root.
|
||||
|
||||
....
|
||||
$ sudo chown -R root:root /srv/web/codecs.fedoraproject.org/openh264/43
|
||||
....
|
||||
|
||||
*TODO*
|
||||
|
||||
[NOTE]
|
||||
.Note
|
||||
====
|
||||
This section will have to be improved with more details.
|
||||
====
|
||||
|
||||
In the database:
|
||||
....
|
||||
update directory set ctime=0 where name like 'ct.org/openh264/43%codecs.fedoraproject.org/openh264/43%';
|
||||
delete from repository where prefix like '%cisco%43%';
|
||||
....
|
||||
|
||||
In a MirrorManager OpenShift debug container:
|
||||
....
|
||||
(app-root) sh-5.2$ scan-primary-mirror --category "Fedora Codecs" -d
|
||||
....
|
||||
|
||||
=== Resources
|
||||
. https://src.fedoraproject.org/rpms/openh264[OpenH264 dist-git repository]
|
Loading…
Add table
Add a link
Reference in a new issue