From 8bca1681f354e48d3513851e4d4b2918ff9e9174 Mon Sep 17 00:00:00 2001 From: Ivan Kapelyukhin Date: Fri, 20 Oct 2017 16:16:56 +0200 Subject: [PATCH 1/5] Add hacks to build for ruby2.5 --- .ruby-version | 2 +- Makefile | 4 ++++ package/rmt.spec | 17 ++++++++--------- ...-rails.patch => use-ruby-2.5-in-rails.patch} | 2 +- ...-cli.patch => use-ruby-2.5-in-rmt-cli.patch} | 2 +- 5 files changed, 15 insertions(+), 12 deletions(-) rename package/{use-ruby-2.4-in-rails.patch => use-ruby-2.5-in-rails.patch} (89%) rename package/{use-ruby-2.4-in-rmt-cli.patch => use-ruby-2.5-in-rmt-cli.patch} (85%) diff --git a/.ruby-version b/.ruby-version index 55bc9834c..2cc0d985f 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -ruby-2.4.1 +ruby-2.5 diff --git a/Makefile b/Makefile index 7290e9e99..c4bb704b3 100644 --- a/Makefile +++ b/Makefile @@ -47,5 +47,9 @@ dist: clean man cd $(NAME)-$(VERSION) && bundler package --all rm -rf $(NAME)-$(VERSION)/vendor/bundle/ + # bundler hacks for ruby2.5 + sed -i '/source .*rubygems\.org/d' $(NAME)-$(VERSION)/Gemfile + sed -i '/remote: .*rubygems\.org/d' $(NAME)-$(VERSION)/Gemfile.lock + tar cfvj package/$(NAME)-$(VERSION).tar.bz2 $(NAME)-$(VERSION)/ rm -rf $(NAME)-$(VERSION)/ diff --git a/package/rmt.spec b/package/rmt.spec index 17c58c8bd..a9d271340 100644 --- a/package/rmt.spec +++ b/package/rmt.spec @@ -31,21 +31,20 @@ Source0: %{name}-%{version}.tar.bz2 Source1: rmt-rpmlintrc Source2: rmt.conf Source3: rmt.8.gz -Patch0: use-ruby-2.4-in-rmt-cli.patch -Patch1: use-ruby-2.4-in-rails.patch +Patch0: use-ruby-2.5-in-rmt-cli.patch +Patch1: use-ruby-2.5-in-rails.patch BuildRequires: gcc BuildRequires: libcurl-devel BuildRequires: libffi-devel BuildRequires: libmysqlclient-devel BuildRequires: libxml2-devel BuildRequires: libxslt-devel -BuildRequires: ruby2.4 -BuildRequires: ruby2.4-devel -BuildRequires: ruby2.4-rubygem-bundler +BuildRequires: ruby2.5 +BuildRequires: ruby2.5-devel +BuildRequires: ruby2.5-stdlib BuildRequires: fdupes Requires: mariadb -Requires(post): ruby2.4 -Requires(post): ruby2.4-rubygem-bundler +Requires(post): ruby2.5 Requires(post): timezone Requires(post): util-linux Requires(post): shadow @@ -71,7 +70,7 @@ cp -p %SOURCE2 . %patch1 -p1 %build -bundle.ruby2.4 install %{?jobs:--jobs %jobs} --without test development --deployment --standalone +bundle.ruby.ruby2.5 install %{?jobs:--jobs %jobs} --without test development --deployment --standalone %install mkdir -p %{buildroot}%{www_base} @@ -94,7 +93,7 @@ mv %{_builddir}/rmt.conf %{buildroot}%{_sysconfdir}/rmt.conf # cleanup unneeded files rm -r %{buildroot}%{www_base}/service -rm -r %{buildroot}%{www_base}/vendor/bundle/ruby/2.4.0/cache +rm -r %{buildroot}%{www_base}/vendor/bundle/ruby/2.5.0/cache find %{buildroot}%{www_base} "(" -name "*.c" -o -name "*.h" -o -name .keep ")" -delete rm -rf %{buildroot}%{www_base}/vendor/cache rm -rf %{buildroot}%{www_base}/vendor/bundle/ruby/*/gems/*/doc diff --git a/package/use-ruby-2.4-in-rails.patch b/package/use-ruby-2.5-in-rails.patch similarity index 89% rename from package/use-ruby-2.4-in-rails.patch rename to package/use-ruby-2.5-in-rails.patch index a710f1c75..035b58f15 100644 --- a/package/use-ruby-2.4-in-rails.patch +++ b/package/use-ruby-2.5-in-rails.patch @@ -4,7 +4,7 @@ index 5badb2f..2936967 100755 +++ b/bin/rails @@ -1,4 +1,4 @@ -#!/usr/bin/env ruby -+#!/usr/bin/ruby.ruby2.4 ++#!/usr/bin/ruby.ruby2.5 begin load File.expand_path('../spring', __FILE__) rescue LoadError => e diff --git a/package/use-ruby-2.4-in-rmt-cli.patch b/package/use-ruby-2.5-in-rmt-cli.patch similarity index 85% rename from package/use-ruby-2.4-in-rmt-cli.patch rename to package/use-ruby-2.5-in-rmt-cli.patch index 595b987a4..1fd67da5b 100644 --- a/package/use-ruby-2.4-in-rmt-cli.patch +++ b/package/use-ruby-2.5-in-rmt-cli.patch @@ -4,5 +4,5 @@ index 8e9c41d..16481f5 100755 +++ b/bin/rmt-cli @@ -1,2 +1,2 @@ -#!/usr/bin/env ruby -+#!/usr/bin/ruby.ruby2.4 ++#!/usr/bin/ruby.ruby2.5 From d03126a3345c21879c644a9c9267c2bb78c6dfa6 Mon Sep 17 00:00:00 2001 From: Ivan Kapelyukhin Date: Mon, 23 Oct 2017 12:51:57 +0200 Subject: [PATCH 2/5] Make Ruby version conditional based on OS version --- package/rmt.spec | 26 +++++++++++++++++++++++++- package/use-ruby-2.4-in-rails.patch | 10 ++++++++++ package/use-ruby-2.4-in-rmt-cli.patch | 8 ++++++++ 3 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 package/use-ruby-2.4-in-rails.patch create mode 100644 package/use-ruby-2.4-in-rmt-cli.patch diff --git a/package/rmt.spec b/package/rmt.spec index a9d271340..13515e24d 100644 --- a/package/rmt.spec +++ b/package/rmt.spec @@ -15,6 +15,9 @@ # Please submit bugfixes or comments via http://bugs.opensuse.org/ # +%if (0%{?suse_version} > 0 && 0%{?suse_version} <= 1320) || (0%{?sle_version} > 0 && 0%{?sle_version} <= 120300) +%define use_ruby_2_4 1 +%endif %define www_base /srv/www/rmt/ %define systemd_dir %{_prefix}/lib/systemd/system/ @@ -31,20 +34,36 @@ Source0: %{name}-%{version}.tar.bz2 Source1: rmt-rpmlintrc Source2: rmt.conf Source3: rmt.8.gz +%if 0%{?use_ruby_2_4} +Patch0: use-ruby-2.4-in-rmt-cli.patch +Patch1: use-ruby-2.4-in-rails.patch +%else Patch0: use-ruby-2.5-in-rmt-cli.patch Patch1: use-ruby-2.5-in-rails.patch +%endif BuildRequires: gcc BuildRequires: libcurl-devel BuildRequires: libffi-devel BuildRequires: libmysqlclient-devel BuildRequires: libxml2-devel BuildRequires: libxslt-devel +%if 0%{?use_ruby_2_4} +BuildRequires: ruby2.4 +BuildRequires: ruby2.4-devel +BuildRequires: ruby2.4-rubygem-bundler +%else BuildRequires: ruby2.5 BuildRequires: ruby2.5-devel BuildRequires: ruby2.5-stdlib +%endif BuildRequires: fdupes Requires: mariadb +%if 0%{?use_ruby_2_4} +Requires(post): ruby2.4 +Requires(post): ruby2.4-rubygem-bundler +%else Requires(post): ruby2.5 +%endif Requires(post): timezone Requires(post): util-linux Requires(post): shadow @@ -70,7 +89,12 @@ cp -p %SOURCE2 . %patch1 -p1 %build +%if 0%{?use_ruby_2_4} +bundle.ruby2.4 install %{?jobs:--jobs %jobs} --without test development --deployment --standalone +%else bundle.ruby.ruby2.5 install %{?jobs:--jobs %jobs} --without test development --deployment --standalone +%endif + %install mkdir -p %{buildroot}%{www_base} @@ -93,7 +117,7 @@ mv %{_builddir}/rmt.conf %{buildroot}%{_sysconfdir}/rmt.conf # cleanup unneeded files rm -r %{buildroot}%{www_base}/service -rm -r %{buildroot}%{www_base}/vendor/bundle/ruby/2.5.0/cache +rm -r %{buildroot}%{www_base}/vendor/bundle/ruby/2.*.0/cache find %{buildroot}%{www_base} "(" -name "*.c" -o -name "*.h" -o -name .keep ")" -delete rm -rf %{buildroot}%{www_base}/vendor/cache rm -rf %{buildroot}%{www_base}/vendor/bundle/ruby/*/gems/*/doc diff --git a/package/use-ruby-2.4-in-rails.patch b/package/use-ruby-2.4-in-rails.patch new file mode 100644 index 000000000..a710f1c75 --- /dev/null +++ b/package/use-ruby-2.4-in-rails.patch @@ -0,0 +1,10 @@ +diff --git a/bin/rails b/bin/rails +index 5badb2f..2936967 100755 +--- a/bin/rails ++++ b/bin/rails +@@ -1,4 +1,4 @@ +-#!/usr/bin/env ruby ++#!/usr/bin/ruby.ruby2.4 + begin + load File.expand_path('../spring', __FILE__) + rescue LoadError => e diff --git a/package/use-ruby-2.4-in-rmt-cli.patch b/package/use-ruby-2.4-in-rmt-cli.patch new file mode 100644 index 000000000..595b987a4 --- /dev/null +++ b/package/use-ruby-2.4-in-rmt-cli.patch @@ -0,0 +1,8 @@ +diff --git a/bin/rmt-cli b/bin/rmt-cli +index 8e9c41d..16481f5 100755 +--- a/bin/rmt-cli ++++ b/bin/rmt-cli +@@ -1,2 +1,2 @@ +-#!/usr/bin/env ruby ++#!/usr/bin/ruby.ruby2.4 + From f37062d577931310e4815e41070a784da710350b Mon Sep 17 00:00:00 2001 From: Ivan Kapelyukhin Date: Mon, 23 Oct 2017 15:19:08 +0200 Subject: [PATCH 3/5] Downgrade Ruby version to 2.4 in .ruby-version --- .ruby-version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ruby-version b/.ruby-version index 2cc0d985f..0465952a8 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -ruby-2.5 +ruby-2.4 From c2d753509de29a680a67398441941487e08aee56 Mon Sep 17 00:00:00 2001 From: Ivan Kapelyukhin Date: Tue, 24 Oct 2017 14:23:32 +0200 Subject: [PATCH 4/5] Fix paths according to maintenance team feedback --- Makefile | 1 - package/rmt-rpmlintrc | 19 +++++----- package/rmt.conf | 2 +- package/rmt.spec | 66 ++++++++++++++++++++++------------- service/rmt-migration.service | 4 +-- service/rmt.service | 6 ++-- 6 files changed, 58 insertions(+), 40 deletions(-) diff --git a/Makefile b/Makefile index c4bb704b3..9ca7fd671 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,5 @@ NAME = rmt VERSION = 0.0.1 -WWW_BASE = /srv/www all: @: diff --git a/package/rmt-rpmlintrc b/package/rmt-rpmlintrc index 53523c7f8..f54673ef7 100644 --- a/package/rmt-rpmlintrc +++ b/package/rmt-rpmlintrc @@ -1,11 +1,12 @@ addFilter("non-standard-uid") addFilter("script-without-shebang") -addFilter("hidden-file-or-dir /srv/www/rmt/vendor/bundle/*") -addFilter("unexpanded-macro /srv/www/rmt/vendor/bundle/*") -addFilter("zero-length /srv/www/rmt/vendor/bundle/*") -addFilter("wrong-script-end-of-line-encoding /srv/www/rmt/vendor/bundle/*") -addFilter("hidden-file-or-dir /srv/www/rmt/.bundle") -addFilter("file-not-in-%lang /srv/www/rmt/vendor/bundle/*") -addFilter("no-soname /srv/www/rmt/vendor/bundle/*") -addFilter("non-executable-script /srv/www/rmt/vendor/bundle/*") -addFilter("E: env-script-interpreter .* /srv/www/rmt/vendor/bundle/*") +addFilter("hidden-file-or-dir /usr/share/rmt/*") +addFilter("hidden-file-or-dir /usr/lib64/rmt/vendor/bundle/*") +addFilter("unexpanded-macro /usr/lib64/rmt/vendor/bundle/*") +addFilter("zero-length /usr/lib64/rmt/vendor/bundle/*") +addFilter("wrong-script-end-of-line-encoding /usr/lib64/rmt/vendor/bundle/*") +addFilter("hidden-file-or-dir /usr/lib64/rmt/.bundle") +addFilter("file-not-in-%lang /usr/lib64/rmt/vendor/bundle/*") +addFilter("no-soname /usr/lib64/rmt/vendor/bundle/*") +addFilter("non-executable-script /usr/lib64/rmt/vendor/bundle/*") +addFilter("E: env-script-interpreter .* /usr/lib64/rmt/vendor/bundle/*") diff --git a/package/rmt.conf b/package/rmt.conf index 2d98b32d2..1c588f445 100644 --- a/package/rmt.conf +++ b/package/rmt.conf @@ -13,7 +13,7 @@ scc: password: mirroring: - base_dir: /srv/www/rmt/public/repo/ + base_dir: /usr/share/rmt/public/repo/ mirror_url_prefix: /repo/ mirror_src: false verify_rpm_checksums: false diff --git a/package/rmt.spec b/package/rmt.spec index 13515e24d..385658442 100644 --- a/package/rmt.spec +++ b/package/rmt.spec @@ -19,7 +19,9 @@ %define use_ruby_2_4 1 %endif -%define www_base /srv/www/rmt/ +%define app_dir /usr/share/rmt/ +%define lib_dir %{_libdir}/rmt/ +%define data_dir /var/lib/rmt/ %define systemd_dir %{_prefix}/lib/systemd/system/ %define rmt_user _rmt %define rmt_group nginx @@ -97,10 +99,21 @@ bundle.ruby.ruby2.5 install %{?jobs:--jobs %jobs} --without test development --d %install -mkdir -p %{buildroot}%{www_base} -cp -ar . %{buildroot}%{www_base} +mkdir -p %{buildroot}%{data_dir} +mkdir -p %{buildroot}%{lib_dir} +mkdir -p %{buildroot}%{app_dir} + +mv log %{buildroot}%{data_dir} +mv tmp %{buildroot}%{data_dir} +mv public %{buildroot}%{data_dir} +mv vendor %{buildroot}%{lib_dir} + +cp -ar . %{buildroot}%{app_dir} +ln -s %{data_dir}/log %{buildroot}%{app_dir}/log +ln -s %{data_dir}/tmp %{buildroot}%{app_dir}/tmp +ln -s %{data_dir}/public %{buildroot}%{app_dir}/public mkdir -p %{buildroot}%{_bindir} -ln -s %{www_base}/bin/rmt-cli %{buildroot}%{_bindir} +ln -s %{app_dir}/bin/rmt-cli %{buildroot}%{_bindir} install -D -m 644 %_sourcedir/rmt.8.gz %{buildroot}%_mandir/man8/rmt.8.gz # systemd @@ -115,27 +128,31 @@ ln -fs %{_sbindir}/service %{buildroot}%{_sbindir}/rcrmt-migration mkdir -p %{buildroot}%{_sysconfdir} mv %{_builddir}/rmt.conf %{buildroot}%{_sysconfdir}/rmt.conf +sed -i '/BUNDLE_PATH: .*/cBUNDLE_PATH: "\/usr\/lib64\/rmt\/vendor\/bundle\/"' %{buildroot}%{app_dir}/.bundle/config + # cleanup unneeded files -rm -r %{buildroot}%{www_base}/service -rm -r %{buildroot}%{www_base}/vendor/bundle/ruby/2.*.0/cache -find %{buildroot}%{www_base} "(" -name "*.c" -o -name "*.h" -o -name .keep ")" -delete -rm -rf %{buildroot}%{www_base}/vendor/cache -rm -rf %{buildroot}%{www_base}/vendor/bundle/ruby/*/gems/*/doc -rm -rf %{buildroot}%{www_base}/vendor/bundle/ruby/*/gems/*/examples -rm -rf %{buildroot}%{www_base}/vendor/bundle/ruby/*/gems/*/samples -rm -rf %{buildroot}%{www_base}/vendor/bundle/ruby/*/gems/*/test -rm -rf %{buildroot}%{www_base}/vendor/bundle/ruby/*/gems/*/ports -rm -rf %{buildroot}%{www_base}/vendor/bundle/ruby/*/gems/*/ext -rm -rf %{buildroot}%{www_base}/vendor/bundle/ruby/*/gems/*/bin -rm -rf %{buildroot}%{www_base}/vendor/bundle/ruby/*/gems/*/spec -rm -rf %{buildroot}%{www_base}/vendor/bundle/ruby/*/gems/*/.gitignore - -%fdupes %{buildroot}/%{_prefix} -%fdupes %{buildroot}/srv +rm -r %{buildroot}%{app_dir}/service +find %{buildroot}%{lib_dir} "(" -name "*.c" -o -name "*.h" -o -name .keep ")" -delete +find %{buildroot}%{app_dir} -name .keep -delete +find %{buildroot}%{data_dir} -name .keep -delete +rm -r %{buildroot}%{lib_dir}/vendor/bundle/ruby/2.*.0/cache +rm -rf %{buildroot}%{lib_dir}/vendor/cache +rm -rf %{buildroot}%{lib_dir}/vendor/bundle/ruby/*/gems/*/doc +rm -rf %{buildroot}%{lib_dir}/vendor/bundle/ruby/*/gems/*/examples +rm -rf %{buildroot}%{lib_dir}/vendor/bundle/ruby/*/gems/*/samples +rm -rf %{buildroot}%{lib_dir}/vendor/bundle/ruby/*/gems/*/test +rm -rf %{buildroot}%{lib_dir}/vendor/bundle/ruby/*/gems/*/ports +rm -rf %{buildroot}%{lib_dir}/vendor/bundle/ruby/*/gems/*/ext +rm -rf %{buildroot}%{lib_dir}/vendor/bundle/ruby/*/gems/*/bin +rm -rf %{buildroot}%{lib_dir}/vendor/bundle/ruby/*/gems/*/spec +rm -rf %{buildroot}%{lib_dir}/vendor/bundle/ruby/*/gems/*/.gitignore + +%fdupes %{buildroot}/%{lib_dir} %files %defattr(-,root,root) -%attr(-,%{rmt_user},%{rmt_group}) %{www_base} +%attr(-,%{rmt_user},%{rmt_group}) %{app_dir} +%attr(-,%{rmt_user},%{rmt_group}) %{data_dir} %config(noreplace) %{_sysconfdir}/rmt.conf %doc %{_mandir}/man8/rmt.8.gz %{_bindir}/rmt-cli @@ -144,18 +161,19 @@ rm -rf %{buildroot}%{www_base}/vendor/bundle/ruby/*/gems/*/.gitignore %{_libexecdir}/systemd/system/rmt.target %{_libexecdir}/systemd/system/rmt.service %{_libexecdir}/systemd/system/rmt-migration.service +%{_libdir}/rmt %pre getent group %{rmt_group} >/dev/null || %{_sbindir}/groupadd -r %{rmt_group} getent passwd %{rmt_user} >/dev/null || \ %{_sbindir}/useradd -g %{rmt_group} -s /bin/false -r \ - -c "user for RMT" -d %{www_base} %{rmt_user} + -c "user for RMT" -d %{app_dir} %{rmt_user} %service_add_pre rmt.target rmt.service rmt-migration.service %post %service_add_post rmt.target rmt.service rmt-migration.service -cd /srv/www/rmt && runuser -u %{rmt_user} -g %{rmt_group} -- bin/rails secrets:setup >/dev/null -cd /srv/www/rmt && runuser -u %{rmt_user} -g %{rmt_group} -- bin/rails runner -e production "Rails::Secrets.write({'production' => {'secret_key_base' => SecureRandom.hex(64)}}.to_yaml)" +cd /usr/share/rmt && runuser -u %{rmt_user} -g %{rmt_group} -- bin/rails secrets:setup >/dev/null +cd /usr/share/rmt && runuser -u %{rmt_user} -g %{rmt_group} -- bin/rails runner -e production "Rails::Secrets.write({'production' => {'secret_key_base' => SecureRandom.hex(64)}}.to_yaml)" %preun %service_del_preun rmt.target rmt.service rmt-migration.service diff --git a/service/rmt-migration.service b/service/rmt-migration.service index ca245f131..3d4aaa8ed 100644 --- a/service/rmt-migration.service +++ b/service/rmt-migration.service @@ -7,8 +7,8 @@ Before=rmt.service [Service] Type=oneshot User=_rmt -WorkingDirectory=/srv/www/rmt -ExecStart=/srv/www/rmt/bin/rails db:create db:migrate RAILS_ENV=production +WorkingDirectory=/usr/share/rmt +ExecStart=/usr/share/rmt/bin/rails db:create db:migrate RAILS_ENV=production [Install] WantedBy=rmt.target diff --git a/service/rmt.service b/service/rmt.service index 67949501f..5eac306e7 100644 --- a/service/rmt.service +++ b/service/rmt.service @@ -7,10 +7,10 @@ After=rmt-migration.service [Service] Type=forking User=_rmt -WorkingDirectory=/srv/www/rmt -ExecStart=/srv/www/rmt/bin/rails server -e production --daemon +WorkingDirectory=/usr/share/rmt +ExecStart=/usr/share/rmt/bin/rails server -e production --daemon ExecStop=/usr/bin/kill -15 $MAINPID -PIDFile=/srv/www/rmt/tmp/pids/server.pid +PIDFile=/usr/share/rmt/tmp/pids/server.pid Restart=always [Install] From bacc3ef9f07ff3095ce622c609e8e8bc4fa16d39 Mon Sep 17 00:00:00 2001 From: Ivan Kapelyukhin Date: Tue, 24 Oct 2017 16:44:59 +0200 Subject: [PATCH 5/5] Make OBS robots happy, apply patches properly --- package/rmt.spec | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/package/rmt.spec b/package/rmt.spec index 385658442..ffd9a2ec3 100644 --- a/package/rmt.spec +++ b/package/rmt.spec @@ -36,13 +36,10 @@ Source0: %{name}-%{version}.tar.bz2 Source1: rmt-rpmlintrc Source2: rmt.conf Source3: rmt.8.gz -%if 0%{?use_ruby_2_4} Patch0: use-ruby-2.4-in-rmt-cli.patch Patch1: use-ruby-2.4-in-rails.patch -%else -Patch0: use-ruby-2.5-in-rmt-cli.patch -Patch1: use-ruby-2.5-in-rails.patch -%endif +Patch2: use-ruby-2.5-in-rmt-cli.patch +Patch3: use-ruby-2.5-in-rails.patch BuildRequires: gcc BuildRequires: libcurl-devel BuildRequires: libffi-devel @@ -87,8 +84,14 @@ RMT superseeds the main functionality of SMT in SLES 15. cp -p %SOURCE2 . %setup -q + +%if 0%{?use_ruby_2_4} %patch0 -p1 %patch1 -p1 +%else +%patch2 -p1 +%patch3 -p1 +%endif %build %if 0%{?use_ruby_2_4}