Tarantool development patches archive
 help / color / mirror / Atom feed
* [Tarantool-patches] [PATCH v1] Make S3 paths the same to Tarantool documented
@ 2020-02-18  7:47 Alexander V. Tikhonov
  2020-02-18 12:24 ` Oleg Piskunov
  2020-02-18 17:08 ` Alexander Turenko
  0 siblings, 2 replies; 4+ messages in thread
From: Alexander V. Tikhonov @ 2020-02-18  7:47 UTC (permalink / raw)
  To: Oleg Piskunov; +Cc: tarantool-patches

Changed the Vanilla paths of the packages in S3 to
the Tarantool documented on its web site, to give
the ability to Tarantool users to continue use it
w/o changes.

Also moved the RPM sources packages to the standalone
path.

Follows up #3380
---

Github: https://github.com/tarantool/tarantool/tree/avtikhon/gh-3380-rpm-packages-paths-full-ci
Issue: https://github.com/tarantool/tarantool/issues/3380

 tools/update_repo.sh | 73 +++++++++++++++++++++++++++++++-------------
 1 file changed, 51 insertions(+), 22 deletions(-)

diff --git a/tools/update_repo.sh b/tools/update_repo.sh
index 65a977187..ec6146514 100755
--- a/tools/update_repo.sh
+++ b/tools/update_repo.sh
@@ -405,42 +405,68 @@ EOF
 }
 
 # The 'pack_rpm' function especialy created for RPM packages. It works
-# with RPM packing OS like Centos, Fedora. It is based on globaly known
+# with RPM packing OS like CentOS, Fedora. It is based on globaly known
 # tool 'createrepo' from:
-#     https://linux.die.net/man/8/createrepo
+#   https://linux.die.net/man/8/createrepo
 # This tool works with single distribution of the given OS.
-# Result of the routine is the rpm package for YUM repository with
-# file structure equal to the Centos/Fedora:
-#     http://mirror.centos.org/centos/7/os/x86_64/Packages/
-#     http://mirrors.kernel.org/fedora/releases/30/Everything/x86_64/os/Packages/t/
+#
+# Vanilla RPM packages structure for YUM repositories looks like:
+#   CentOS:
+#     Binaries: http://mirror.centos.org/centos/7/os/x86_64/Packages/
+#     Sources: http://vault.centos.org/8.1.1911/BaseOS/Source/SPackages/
+#  Fedora:
+#     Binaries: http://mirrors.kernel.org/fedora/releases/30/Everything/x86_64/os/Packages/t/
+#     Sources: http://mirrors.kernel.org/fedora/releases/30/Everything/source/tree/Packages/t/
+# Decided to have back port capability at Tarantool links:
+#   CentOS:
+#     Tarantool: https://www.tarantool.io/en/download/os-installation/rhel-centos/
+#     Changed Vanila -> MCS S3:
+#       centos/7/os/x86_64/Packages -> centos/7/x86_64/Packages
+#       8.1.1911/BaseOS/Source/SPackages -> centos/8.1.1911/SRPMS/Packages
+#   Fedora:
+#     Tarantool: https://www.tarantool.io/en/download/os-installation/fedora/
+#     Changed Vanila -> MCS S3:
+#       fedora/releases/30/Everything/x86_64/os/Packages -> fedora/30/x86_64/Packages
+#       fedora/releases/30/Everything/source/tree/Packages -> fedora/30/SRPMS/Packages
 function pack_rpm {
-    if ! ls $repo/*.rpm >/dev/null ; then
-        echo "ERROR: Current '$repo' path doesn't have RPM packages in path"
-        usage
-        exit 1
-    fi
+    pack_subdir=$1
+    pack_patterns=$2
+
+    for pack_pattern in $pack_patterns ; do
+        if ! ls $repo/$pack_pattern >/dev/null ; then
+            if [ "$pack_pattern" == "*.noarch.rpm" ]; then
+                pack_patterns=$(echo "$pack_patterns" | sed "s#$pack_pattern##g")
+                continue
+            fi
+            echo "ERROR: Current '$repo' path doesn't have $pack_pattern packages in path"
+            usage
+            exit 1
+        fi
+    done
 
     # prepare the workspace
     prepare_ws ${os}_${option_dist}
 
     # copy the needed package binaries to the workspace
-    cp $repo/*.rpm $ws/.
+    for pack_pattern in $pack_patterns ; do
+        cp $repo/$pack_pattern $ws/.
+    done
 
     pushd $ws
 
     # set the paths
-    if [ "$os" == "el" ]; then
-        repopath=$option_dist/os/x86_64
-        rpmpath=Packages
-    elif [ "$os" == "fedora" ]; then
-        repopath=releases/$option_dist/Everything/x86_64/os
-        rpmpath=Packages/$proddir
+    repopath=$option_dist/$pack_subdir
+    rpmpath=Packages
+    if [ "$os" == "fedora" ]; then
+        rpmpath=$rpmpath/$proddir
     fi
     packpath=$repopath/$rpmpath
 
     # prepare local repository with packages
     $mk_dir $packpath
-    mv *.rpm $packpath/.
+    for pack_pattern in $pack_patterns ; do
+        mv $pack_pattern $packpath/.
+    done
     cd $repopath
 
     # copy the current metadata files from S3
@@ -547,8 +573,10 @@ EOF
     gpg --detach-sign --armor repodata/repomd.xml
 
     # copy the packages to S3
-    for file in $rpmpath/*.rpm ; do
-        $aws_cp_public $file "$bucket_path/$repopath/$file"
+    for pack_pattern in $pack_patterns ; do
+        for file in $rpmpath/$pack_pattern ; do
+            $aws_cp_public $file "$bucket_path/$repopath/$file"
+        done
     done
 
     # update the metadata at the S3
@@ -563,7 +591,8 @@ EOF
 if [ "$os" == "ubuntu" -o "$os" == "debian" ]; then
     pack_deb
 elif [ "$os" == "el" -o "$os" == "fedora" ]; then
-    pack_rpm
+    pack_rpm x86_64 "*.x86_64.rpm *.noarch.rpm"
+    pack_rpm SRPMS "*.src.rpm"
 else
     echo "USAGE: given OS '$os' is not supported, use any single from the list: $alloss"
     usage
-- 
2.17.1

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [Tarantool-patches] [PATCH v1] Make S3 paths the same to Tarantool documented
  2020-02-18  7:47 [Tarantool-patches] [PATCH v1] Make S3 paths the same to Tarantool documented Alexander V. Tikhonov
@ 2020-02-18 12:24 ` Oleg Piskunov
  2020-02-18 17:08 ` Alexander Turenko
  1 sibling, 0 replies; 4+ messages in thread
From: Oleg Piskunov @ 2020-02-18 12:24 UTC (permalink / raw)
  To: Alexander V. Tikhonov; +Cc: tarantool-patches

[-- Attachment #1: Type: text/plain, Size: 4986 bytes --]


Sasha, could you please remove comments about Vanilla packages structure.
For the rest - LGTM
 
Regards,
Oleg
  
>Вторник, 18 февраля 2020, 10:47 +03:00 от Alexander V. Tikhonov <avtikhon@tarantool.org>:
> 
>Changed the Vanilla paths of the packages in S3 to
>the Tarantool documented on its web site, to give
>the ability to Tarantool users to continue use it
>w/o changes.
>
>Also moved the RPM sources packages to the standalone
>path.
>
>Follows up #3380
>---
>
>Github:  https://github.com/tarantool/tarantool/tree/avtikhon/gh-3380-rpm-packages-paths-full-ci
>Issue:  https://github.com/tarantool/tarantool/issues/3380
>
> tools/update_repo.sh | 73 +++++++++++++++++++++++++++++++-------------
> 1 file changed, 51 insertions(+), 22 deletions(-)
>
>diff --git a/tools/update_repo.sh b/tools/update_repo.sh
>index 65a977187..ec6146514 100755
>--- a/tools/update_repo.sh
>+++ b/tools/update_repo.sh
>@@ -405,42 +405,68 @@ EOF
> }
> 
> # The 'pack_rpm' function especialy created for RPM packages. It works
>-# with RPM packing OS like Centos, Fedora. It is based on globaly known
>+# with RPM packing OS like CentOS, Fedora. It is based on globaly known
> # tool 'createrepo' from:
>-#  https://linux.die.net/man/8/createrepo
>+#  https://linux.die.net/man/8/createrepo
> # This tool works with single distribution of the given OS.
>-# Result of the routine is the rpm package for YUM repository with
>-# file structure equal to the Centos/Fedora:
>-#  http://mirror.centos.org/centos/7/os/x86_64/Packages/
>-#  http://mirrors.kernel.org/fedora/releases/30/Everything/x86_64/os/Packages/t/
>+#
>+# Vanilla RPM packages structure for YUM repositories looks like:
>+# CentOS:
>+# Binaries:  http://mirror.centos.org/centos/7/os/x86_64/Packages/
>+# Sources:  http://vault.centos.org/8.1.1911/BaseOS/Source/SPackages/
>+# Fedora:
>+# Binaries:  http://mirrors.kernel.org/fedora/releases/30/Everything/x86_64/os/Packages/t/
>+# Sources:  http://mirrors.kernel.org/fedora/releases/30/Everything/source/tree/Packages/t/
>+# Decided to have back port capability at Tarantool links:
>+# CentOS:
>+# Tarantool:  https://www.tarantool.io/en/download/os-installation/rhel-centos/
>+# Changed Vanila -> MCS S3:
>+# centos/7/os/x86_64/Packages -> centos/7/x86_64/Packages
>+# 8.1.1911/BaseOS/Source/SPackages -> centos/8.1.1911/SRPMS/Packages
>+# Fedora:
>+# Tarantool:  https://www.tarantool.io/en/download/os-installation/fedora/
>+# Changed Vanila -> MCS S3:
>+# fedora/releases/30/Everything/x86_64/os/Packages -> fedora/30/x86_64/Packages
>+# fedora/releases/30/Everything/source/tree/Packages -> fedora/30/SRPMS/Packages
> function pack_rpm {
>- if ! ls $repo/*.rpm >/dev/null ; then
>- echo "ERROR: Current '$repo' path doesn't have RPM packages in path"
>- usage
>- exit 1
>- fi
>+ pack_subdir=$1
>+ pack_patterns=$2
>+
>+ for pack_pattern in $pack_patterns ; do
>+ if ! ls $repo/$pack_pattern >/dev/null ; then
>+ if [ "$pack_pattern" == "*.noarch.rpm" ]; then
>+ pack_patterns=$(echo "$pack_patterns" | sed "s#$pack_pattern##g")
>+ continue
>+ fi
>+ echo "ERROR: Current '$repo' path doesn't have $pack_pattern packages in path"
>+ usage
>+ exit 1
>+ fi
>+ done
> 
>     # prepare the workspace
>     prepare_ws ${os}_${option_dist}
> 
>     # copy the needed package binaries to the workspace
>- cp $repo/*.rpm $ws/.
>+ for pack_pattern in $pack_patterns ; do
>+ cp $repo/$pack_pattern $ws/.
>+ done
> 
>     pushd $ws
> 
>     # set the paths
>- if [ "$os" == "el" ]; then
>- repopath=$option_dist/os/x86_64
>- rpmpath=Packages
>- elif [ "$os" == "fedora" ]; then
>- repopath=releases/$option_dist/Everything/x86_64/os
>- rpmpath=Packages/$proddir
>+ repopath=$option_dist/$pack_subdir
>+ rpmpath=Packages
>+ if [ "$os" == "fedora" ]; then
>+ rpmpath=$rpmpath/$proddir
>     fi
>     packpath=$repopath/$rpmpath
> 
>     # prepare local repository with packages
>     $mk_dir $packpath
>- mv *.rpm $packpath/.
>+ for pack_pattern in $pack_patterns ; do
>+ mv $pack_pattern $packpath/.
>+ done
>     cd $repopath
> 
>     # copy the current metadata files from S3
>@@ -547,8 +573,10 @@ EOF
>     gpg --detach-sign --armor repodata/repomd.xml
> 
>     # copy the packages to S3
>- for file in $rpmpath/*.rpm ; do
>- $aws_cp_public $file "$bucket_path/$repopath/$file"
>+ for pack_pattern in $pack_patterns ; do
>+ for file in $rpmpath/$pack_pattern ; do
>+ $aws_cp_public $file "$bucket_path/$repopath/$file"
>+ done
>     done
> 
>     # update the metadata at the S3
>@@ -563,7 +591,8 @@ EOF
> if [ "$os" == "ubuntu" -o "$os" == "debian" ]; then
>     pack_deb
> elif [ "$os" == "el" -o "$os" == "fedora" ]; then
>- pack_rpm
>+ pack_rpm x86_64 "*.x86_64.rpm *.noarch.rpm"
>+ pack_rpm SRPMS "*.src.rpm"
> else
>     echo "USAGE: given OS '$os' is not supported, use any single from the list: $alloss"
>     usage
>--
>2.17.1
>  
 
 
--
Oleg Piskunov
 

[-- Attachment #2: Type: text/html, Size: 7295 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [Tarantool-patches] [PATCH v1] Make S3 paths the same to Tarantool documented
  2020-02-18  7:47 [Tarantool-patches] [PATCH v1] Make S3 paths the same to Tarantool documented Alexander V. Tikhonov
  2020-02-18 12:24 ` Oleg Piskunov
@ 2020-02-18 17:08 ` Alexander Turenko
  2020-02-19 10:53   ` Alexander Tikhonov
  1 sibling, 1 reply; 4+ messages in thread
From: Alexander Turenko @ 2020-02-18 17:08 UTC (permalink / raw)
  To: Alexander V. Tikhonov; +Cc: Oleg Piskunov, tarantool-patches

> Make S3 paths the same to Tarantool documented

Please, add a prefix: gitlab-ci, infra or so. Before we use 'gitlab-ci'.

'S3 paths' does not say anything about change you doing. Is it about
tarballs? Or packages? Or some other part of infrastructure?

> Changed the Vanilla paths of the packages in S3 to
> the Tarantool documented on its web site, to give
> the ability to Tarantool users to continue use it
> w/o changes.

Here you introduce the term 'the Vanilla paths' (which is used as
'Vanila' below), but it is neither commonly known nor explained. In fact
you meant base URL of main CentOS/Fedora repository. Since we providing
our own repository it obviously will have its own base URL.

> 
> Also moved the RPM sources packages to the standalone
> path.
> 
> Follows up #3380

Maybe like so:

 | gitlab-ci: adjust base URL of RPM/Deb repositories
 |
 | Our S3 based repositories now reflect packagecloud.io repositories
 | structure.
 |
 | It will allow us to migrate from packagecloud.io w/o much complicating
 | redirection rules on a web server serving download.tarantool.org.
 |
 | Deploy source packages (*.src.rpm) into separate 'SRPM' repository
 | like packagecloud.io does.
 |
 | <everything else you change>
 | 
 | Follows up #3380

See, I didn't introduced any new term, but described why and how the
behaviour of the script was changed.

> ---
> 
> Github: https://github.com/tarantool/tarantool/tree/avtikhon/gh-3380-rpm-packages-paths-full-ci
> Issue: https://github.com/tarantool/tarantool/issues/3380
> 
>  tools/update_repo.sh | 73 +++++++++++++++++++++++++++++++-------------
>  1 file changed, 51 insertions(+), 22 deletions(-)
> 
> diff --git a/tools/update_repo.sh b/tools/update_repo.sh
> index 65a977187..ec6146514 100755
> --- a/tools/update_repo.sh
> +++ b/tools/update_repo.sh
> @@ -405,42 +405,68 @@ EOF
>  }
>  
>  # The 'pack_rpm' function especialy created for RPM packages. It works
> -# with RPM packing OS like Centos, Fedora. It is based on globaly known
> +# with RPM packing OS like CentOS, Fedora. It is based on globaly known

If you want to fix typos, then fix also 'globaly'.

>  # tool 'createrepo' from:
> -#     https://linux.die.net/man/8/createrepo
> +#   https://linux.die.net/man/8/createrepo
>  # This tool works with single distribution of the given OS.
> -# Result of the routine is the rpm package for YUM repository with
> -# file structure equal to the Centos/Fedora:
> -#     http://mirror.centos.org/centos/7/os/x86_64/Packages/
> -#     http://mirrors.kernel.org/fedora/releases/30/Everything/x86_64/os/Packages/t/
> +#
> +# Vanilla RPM packages structure for YUM repositories looks like:
> +#   CentOS:
> +#     Binaries: http://mirror.centos.org/centos/7/os/x86_64/Packages/
> +#     Sources: http://vault.centos.org/8.1.1911/BaseOS/Source/SPackages/
> +#  Fedora:
> +#     Binaries: http://mirrors.kernel.org/fedora/releases/30/Everything/x86_64/os/Packages/t/
> +#     Sources: http://mirrors.kernel.org/fedora/releases/30/Everything/source/tree/Packages/t/
> +# Decided to have back port capability at Tarantool links:
> +#   CentOS:
> +#     Tarantool: https://www.tarantool.io/en/download/os-installation/rhel-centos/
> +#     Changed Vanila -> MCS S3:
> +#       centos/7/os/x86_64/Packages -> centos/7/x86_64/Packages
> +#       8.1.1911/BaseOS/Source/SPackages -> centos/8.1.1911/SRPMS/Packages
> +#   Fedora:
> +#     Tarantool: https://www.tarantool.io/en/download/os-installation/fedora/
> +#     Changed Vanila -> MCS S3:
> +#       fedora/releases/30/Everything/x86_64/os/Packages -> fedora/30/x86_64/Packages
> +#       fedora/releases/30/Everything/source/tree/Packages -> fedora/30/SRPMS/Packages

If we agree to don't bother anybody to imagine what 'Vanilla/Vanila' is
(and what is meant under 'MCS S3', which is just file storage), then
let's just show base URLs.

However it is okay to give links to intructions, which will allow to
verify that the URLs are right.

>  function pack_rpm {
> -    if ! ls $repo/*.rpm >/dev/null ; then
> -        echo "ERROR: Current '$repo' path doesn't have RPM packages in path"
> -        usage
> -        exit 1
> -    fi
> +    pack_subdir=$1
> +    pack_patterns=$2
> +
> +    for pack_pattern in $pack_patterns ; do
> +        if ! ls $repo/$pack_pattern >/dev/null ; then
> +            if [ "$pack_pattern" == "*.noarch.rpm" ]; then
> +                pack_patterns=$(echo "$pack_patterns" | sed "s#$pack_pattern##g")
> +                continue
> +            fi
> +            echo "ERROR: Current '$repo' path doesn't have $pack_pattern packages in path"
> +            usage
> +            exit 1
> +        fi
> +    done

This logic is flawed (say, it will not work with vshard). Okay, let's
give an error if there are no files, but it should not require files to
be present for a certain architecture.

I would collect files using globs. Then check whether we found at least
one. Then use this list of files. A kind of this:

 | # Collect RPM files matching provided glob.
 | rpms=''
 | for glog in ${globs}; do
 |     for file in ${repo}/${glob}; do
 |         rpms="${rpms} ${file}"
 |     done
 | done
 |
 | # Verify that at least one RPM file is found.
 | if [ -z "${rpms}" ]; then
 |     <...>
 | fi

But feel free to pick up any way, I'll not push you for mine one.

>  
>      # prepare the workspace
>      prepare_ws ${os}_${option_dist}
>  
>      # copy the needed package binaries to the workspace
> -    cp $repo/*.rpm $ws/.
> +    for pack_pattern in $pack_patterns ; do
> +        cp $repo/$pack_pattern $ws/.
> +    done

After the change above it can be simplified to:

 | cp ${rpms} "$ws/"

Note: no quotes around ${rpms} to use file glob expansion.

>  
>      pushd $ws
>  
>      # set the paths
> -    if [ "$os" == "el" ]; then
> -        repopath=$option_dist/os/x86_64
> -        rpmpath=Packages
> -    elif [ "$os" == "fedora" ]; then
> -        repopath=releases/$option_dist/Everything/x86_64/os
> -        rpmpath=Packages/$proddir
> +    repopath=$option_dist/$pack_subdir
> +    rpmpath=Packages
> +    if [ "$os" == "fedora" ]; then
> +        rpmpath=$rpmpath/$proddir
>      fi

I don't think that we need different layout for CentOS and Fedora.
Packagecloud.io has the same flat layout for both.

>      packpath=$repopath/$rpmpath
>  
>      # prepare local repository with packages
>      $mk_dir $packpath
> -    mv *.rpm $packpath/.
> +    for pack_pattern in $pack_patterns ; do
> +        mv $pack_pattern $packpath/.
> +    done

Same as above.

>      cd $repopath
>  
>      # copy the current metadata files from S3
> @@ -547,8 +573,10 @@ EOF
>      gpg --detach-sign --armor repodata/repomd.xml
>  
>      # copy the packages to S3
> -    for file in $rpmpath/*.rpm ; do
> -        $aws_cp_public $file "$bucket_path/$repopath/$file"
> +    for pack_pattern in $pack_patterns ; do
> +        for file in $rpmpath/$pack_pattern ; do
> +            $aws_cp_public $file "$bucket_path/$repopath/$file"
> +        done

Same as above.

>      done
>  
>      # update the metadata at the S3
> @@ -563,7 +591,8 @@ EOF
>  if [ "$os" == "ubuntu" -o "$os" == "debian" ]; then
>      pack_deb
>  elif [ "$os" == "el" -o "$os" == "fedora" ]; then
> -    pack_rpm
> +    pack_rpm x86_64 "*.x86_64.rpm *.noarch.rpm"
> +    pack_rpm SRPMS "*.src.rpm"

It deserves a comment.

>  else
>      echo "USAGE: given OS '$os' is not supported, use any single from the list: $alloss"
>      usage
> -- 
> 2.17.1
> 

And while we're here: I would extract explicit keyid to an environment
variable (it is a least in 'SignWith:').

I would also use `gpg -u <keyid> <...>` when signing, because it is
possible that there is more then one key for a user/machine.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [Tarantool-patches] [PATCH v1] Make S3 paths the same to Tarantool documented
  2020-02-18 17:08 ` Alexander Turenko
@ 2020-02-19 10:53   ` Alexander Tikhonov
  0 siblings, 0 replies; 4+ messages in thread
From: Alexander Tikhonov @ 2020-02-19 10:53 UTC (permalink / raw)
  To: Alexander Turenko; +Cc: Oleg Piskunov, tarantool-patches

[-- Attachment #1: Type: text/plain, Size: 8827 bytes --]

Alexander, thanks a lot for a deep review, I've answered the questions below.


>Вторник, 18 февраля 2020, 20:08 +03:00 от Alexander Turenko <alexander.turenko@tarantool.org>:
>
>> Make S3 paths the same to Tarantool documented
>
>Please, add a prefix: gitlab-ci, infra or so. Before we use 'gitlab-ci'.
>
>'S3 paths' does not say anything about change you doing. Is it about
>tarballs? Or packages? Or some other part of infrastructure?
>
>> Changed the Vanilla paths of the packages in S3 to
>> the Tarantool documented on its web site, to give
>> the ability to Tarantool users to continue use it
>> w/o changes.
>
>Here you introduce the term 'the Vanilla paths' (which is used as
>'Vanila' below), but it is neither commonly known nor explained. In fact
>you meant base URL of main CentOS/Fedora repository. Since we providing
>our own repository it obviously will have its own base URL.
>
>> 
>> Also moved the RPM sources packages to the standalone
>> path.
>> 
>> Follows up #3380
>
>Maybe like so:
>
> | gitlab-ci: adjust base URL of RPM/Deb repositories
> |
> | Our S3 based repositories now reflect packagecloud.io repositories
> | structure.
> |
> | It will allow us to migrate from packagecloud.io w/o much complicating
> | redirection rules on a web server serving download.tarantool.org.
> |
> | Deploy source packages (*.src.rpm) into separate 'SRPM' repository
> | like packagecloud.io does.
> |
> | <everything else you change>
> | 
> | Follows up #3380
>
>See, I didn't introduced any new term, but described why and how the
>behaviour of the script was changed.
Thank for the complete commit message, I've used it completely and
added comment about changed signing key.
>
>> ---
>> 
>> Github:  https://github.com/tarantool/tarantool/tree/avtikhon/gh-3380-rpm-packages-paths-full-ci
>> Issue:  https://github.com/tarantool/tarantool/issues/3380
>> 
>>  tools/update_repo.sh | 73 +++++++++++++++++++++++++++++++-------------
>>  1 file changed, 51 insertions(+), 22 deletions(-)
>> 
>> diff --git a/tools/update_repo.sh b/tools/update_repo.sh
>> index 65a977187..ec6146514 100755
>> --- a/tools/update_repo.sh
>> +++ b/tools/update_repo.sh
>> @@ -405,42 +405,68 @@ EOF
>>  }
>> 
>>  # The 'pack_rpm' function especialy created for RPM packages. It works
>> -# with RPM packing OS like Centos, Fedora. It is based on globaly known
>> +# with RPM packing OS like CentOS, Fedora. It is based on globaly known
>
>If you want to fix typos, then fix also 'globaly'. 
Right, corrected.
>
>
>>  # tool 'createrepo' from:
>> -#  https://linux.die.net/man/8/createrepo
>> +#  https://linux.die.net/man/8/createrepo
>>  # This tool works with single distribution of the given OS.
>> -# Result of the routine is the rpm package for YUM repository with
>> -# file structure equal to the Centos/Fedora:
>> -#  http://mirror.centos.org/centos/7/os/x86_64/Packages/
>> -#  http://mirrors.kernel.org/fedora/releases/30/Everything/x86_64/os/Packages/t/
>> +#
>> +# Vanilla RPM packages structure for YUM repositories looks like:
>> +#   CentOS:
>> +#     Binaries:  http://mirror.centos.org/centos/7/os/x86_64/Packages/
>> +#     Sources:  http://vault.centos.org/8.1.1911/BaseOS/Source/SPackages/
>> +#  Fedora:
>> +#     Binaries:  http://mirrors.kernel.org/fedora/releases/30/Everything/x86_64/os/Packages/t/
>> +#     Sources:  http://mirrors.kernel.org/fedora/releases/30/Everything/source/tree/Packages/t/
>> +# Decided to have back port capability at Tarantool links:
>> +#   CentOS:
>> +#     Tarantool:  https://www.tarantool.io/en/download/os-installation/rhel-centos/
>> +#     Changed Vanila -> MCS S3:
>> +#       centos/7/os/x86_64/Packages -> centos/7/x86_64/Packages
>> +#       8.1.1911/BaseOS/Source/SPackages -> centos/8.1.1911/SRPMS/Packages
>> +#   Fedora:
>> +#     Tarantool:  https://www.tarantool.io/en/download/os-installation/fedora/
>> +#     Changed Vanila -> MCS S3:
>> +#       fedora/releases/30/Everything/x86_64/os/Packages -> fedora/30/x86_64/Packages
>> +#       fedora/releases/30/Everything/source/tree/Packages -> fedora/30/SRPMS/Packages
>
>If we agree to don't bother anybody to imagine what 'Vanilla/Vanila' is
>(and what is meant under 'MCS S3', which is just file storage), then
>let's just show base URLs.
>
>However it is okay to give links to intructions, which will allow to
>verify that the URLs are right. 
Ok, I've removed all links and information about OS's structures and wrote
links on the Tarantool instructions.
>
>
>>  function pack_rpm {
>> -    if ! ls $repo/*.rpm >/dev/null ; then
>> -        echo "ERROR: Current '$repo' path doesn't have RPM packages in path"
>> -        usage
>> -        exit 1
>> -    fi
>> +    pack_subdir=$1
>> +    pack_patterns=$2
>> +
>> +    for pack_pattern in $pack_patterns ; do
>> +        if ! ls $repo/$pack_pattern >/dev/null ; then
>> +            if [ "$pack_pattern" == "*.noarch.rpm" ]; then
>> +                pack_patterns=$(echo "$pack_patterns" | sed "s#$pack_pattern##g")
>> +                continue
>> +            fi
>> +            echo "ERROR: Current '$repo' path doesn't have $pack_pattern packages in path"
>> +            usage
>> +            exit 1
>> +        fi
>> +    done
>
>This logic is flawed (say, it will not work with vshard). Okay, let's
>give an error if there are no files, but it should not require files to
>be present for a certain architecture. 
Ok, I see, I've fixed it for all the patterns and set checker that some
packages found to be registered.
>
>
>I would collect files using globs. Then check whether we found at least
>one. Then use this list of files. A kind of this:
>
> | # Collect RPM files matching provided glob.
> | rpms=''
> | for glog in ${globs}; do
> |     for file in ${repo}/${glob}; do
> |         rpms="${rpms} ${file}"
> |     done
> | done
> |
> | # Verify that at least one RPM file is found.
> | if [ -z "${rpms}" ]; then
> |     <...>
> | fi
>
>But feel free to pick up any way, I'll not push you for mine one. 
Ok, sure, I've integrated your way with some minor corrections.
>
>
>> 
>>      # prepare the workspace
>>      prepare_ws ${os}_${option_dist}
>> 
>>      # copy the needed package binaries to the workspace
>> -    cp $repo/*.rpm $ws/.
>> +    for pack_pattern in $pack_patterns ; do
>> +        cp $repo/$pack_pattern $ws/.
>> +    done
>
>After the change above it can be simplified to:
>
> | cp ${rpms} "$ws/"
>
>Note: no quotes around ${rpms} to use file glob expansion.
Ok, done.
>
>> 
>>      pushd $ws
>> 
>>      # set the paths
>> -    if [ "$os" == "el" ]; then
>> -        repopath=$option_dist/os/x86_64
>> -        rpmpath=Packages
>> -    elif [ "$os" == "fedora" ]; then
>> -        repopath=releases/$option_dist/Everything/x86_64/os
>> -        rpmpath=Packages/$proddir
>> +    repopath=$option_dist/$pack_subdir
>> +    rpmpath=Packages
>> +    if [ "$os" == "fedora" ]; then
>> +        rpmpath=$rpmpath/$proddir
>>      fi
>
>I don't think that we need different layout for CentOS and Fedora.
>Packagecloud.io has the same flat layout for both. 
Ok, I've removed extra subdirs and set common paths setup for
Fedora and CentOS.
>
>
>>      packpath=$repopath/$rpmpath
>> 
>>      # prepare local repository with packages
>>      $mk_dir $packpath
>> -    mv *.rpm $packpath/.
>> +    for pack_pattern in $pack_patterns ; do
>> +        mv $pack_pattern $packpath/.
>> +    done
>
>Same as above. 
Ok, done.
>
>
>>      cd $repopath
>> 
>>      # copy the current metadata files from S3
>> @@ -547,8 +573,10 @@ EOF
>>      gpg --detach-sign --armor repodata/repomd.xml
>> 
>>      # copy the packages to S3
>> -    for file in $rpmpath/*.rpm ; do
>> -        $aws_cp_public $file "$bucket_path/$repopath/$file"
>> +    for pack_pattern in $pack_patterns ; do
>> +        for file in $rpmpath/$pack_pattern ; do
>> +            $aws_cp_public $file "$bucket_path/$repopath/$file"
>> +        done
>
>Same as above. 
Ok, done.
>
>
>>      done
>> 
>>      # update the metadata at the S3
>> @@ -563,7 +591,8 @@ EOF
>>  if [ "$os" == "ubuntu" -o "$os" == "debian" ]; then
>>      pack_deb
>>  elif [ "$os" == "el" -o "$os" == "fedora" ]; then
>> -    pack_rpm
>> +    pack_rpm x86_64 "*.x86_64.rpm *.noarch.rpm"
>> +    pack_rpm SRPMS "*.src.rpm"
>
>It deserves a comment. 
Added the comment.
>
>
>>  else
>>      echo "USAGE: given OS '$os' is not supported, use any single from the list: $alloss"
>>      usage
>> -- 
>> 2.17.1
>> 
>
>And while we're here: I would extract explicit keyid to an environment
>variable (it is a least in 'SignWith:'). 
Ok, I've moved it to gitlab-ci variable "GPG_SIGN_KEY"
>
>
>I would also use `gpg -u <keyid> <...>` when signing, because it is
>possible that there is more then one key for a user/machine. 
Ok, sure, thanks.
>


-- 
Alexander Tikhonov

[-- Attachment #2: Type: text/html, Size: 14232 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2020-02-19 10:53 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-02-18  7:47 [Tarantool-patches] [PATCH v1] Make S3 paths the same to Tarantool documented Alexander V. Tikhonov
2020-02-18 12:24 ` Oleg Piskunov
2020-02-18 17:08 ` Alexander Turenko
2020-02-19 10:53   ` Alexander Tikhonov

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox