diff --git a/.gitignore b/.gitignore index a0c60c3..6ec5802 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -/dist-git-*.tar.gz +/dist-git-0.10.tar.gz +/dist-git-0.11.tar.gz diff --git a/dist-git.spec b/dist-git.spec index b9bec9d..bacd46f 100644 --- a/dist-git.spec +++ b/dist-git.spec @@ -1,14 +1,17 @@ %global selinux_variants mls targeted +%global selinux_policyver %(%{__sed} -e 's,.*selinux-policy-\\([^/]*\\)/.*,\\1,' /usr/share/selinux/devel/policyhelp || echo 0.0.0) %global modulename dist_git -%global installdir /var/lib/dist-git + Name: dist-git -Version: 1.20 +Version: 0.11 Release: 2%{?dist} Summary: Package source version control system -# upload.cgi uses GPLv1 -License: MIT AND GPL-1.0-only +Group: Applications/Productivity + +# upload.cgi uses GPLv1 and pkgdb_sync_git_branches.py uses GPLv2+ +License: MIT and GPLv1 and GPLv2+ URL: https://github.com/release-engineering/dist-git # Source is created by # git clone https://github.com/release-engineering/dist-git.git @@ -20,37 +23,17 @@ BuildArch: noarch BuildRequires: systemd Requires: httpd +Requires: gitolite3 Requires: perl(Sys::Syslog) -Requires: (dist-git-selinux if selinux-policy-targeted) -Requires: git Requires: git-daemon +Requires: python-requests Requires: mod_ssl -Requires: crudini -%if 0%{?rhel} && 0%{?rhel} < 10 +Requires: fedmsg +Requires: cronie Requires(pre): shadow-utils -%endif - -Requires: python3-requests -Recommends: python3-grokmirror -Suggests: python3-fedmsg -Suggests: fedora-messaging - -BuildRequires: python3-devel -BuildRequires: python3-pytest -BuildRequires: python3-requests - -# this should be Requires but see https://bugzilla.redhat.com/show_bug.cgi?id=1833810 -Recommends: moreutils - -%if 0%{?fedora} && 0%{?fedora} >= 41 -# The `cgi` module was removed from the Python 3.13 standard library -BuildRequires: python3-legacy-cgi -Requires: python3-legacy-cgi -%endif - %description -DistGit is a Git repository specifically designed to hold RPM +Dist Git is a remote Git repository specifically designed to hold RPM package sources. @@ -58,11 +41,16 @@ package sources. Summary: SELinux support for dist-git BuildRequires: checkpolicy +BuildRequires: policycoreutils +BuildRequires: selinux-policy-devel BuildRequires: hardlink Requires: %name = %version-%release -BuildRequires: selinux-policy-devel -%{?selinux_requires} +%if "%{_selinux_policy_version}" != "" +Requires: selinux-policy >= %{selinux_policyver} +%endif +Requires(post): /usr/sbin/semodule, /sbin/restorecon +Requires(postun): /usr/sbin/semodule, /sbin/restorecon %description selinux @@ -91,65 +79,76 @@ cd - %pre -%if 0%{?rhel} && 0%{?rhel} < 10 # ------------------------------------------------------------------------------ # Users and Groups # ------------------------------------------------------------------------------ getent group packager > /dev/null || \ groupadd -r packager -exit 0 -%endif -%check -%pytest -vv . +getent group gen-acls > /dev/null || \ + groupadd -r gen-acls + +getent passwd gen-acls > /dev/null || \ + useradd -r -g gen-acls -G packager -s /bin/bash \ + -d %{_sharedstatedir}/dist-git/git gen-acls %install # ------------------------------------------------------------------------------ -# /usr/share/ ........... scripts +# /usr/share/ .... static files # ------------------------------------------------------------------------------ -install -d %{buildroot}%{_datadir}/dist-git/ +install -d %{buildroot}%{_datadir}/dist-git + cp -a scripts/dist-git/* %{buildroot}%{_datadir}/dist-git/ # ------------------------------------------------------------------------------ # /etc/ .......... config files # ------------------------------------------------------------------------------ install -d %{buildroot}%{_sysconfdir}/dist-git -cp -a configs/dist-git/dist-git.conf %{buildroot}%{_sysconfdir}/dist-git/ install -d %{buildroot}%{_sysconfdir}/httpd/conf.d/dist-git +install -d %{buildroot}%{_sysconfdir}/cron.d/dist-git mkdir -p %{buildroot}%{_unitdir} -cp -a configs/httpd/dist-git.conf %{buildroot}%{_sysconfdir}/httpd/conf.d/ +cp -a configs/dist-git/dist-git.conf %{buildroot}%{_sysconfdir}/dist-git/ +cp -a configs/gitolite/gitolite.rc %{buildroot}%{_sysconfdir}/dist-git/ +cp -a configs/httpd/dist-git.conf %{buildroot}%{_sysconfdir}/httpd/conf.d/ +cp -a configs/httpd/ssl.conf.example %{buildroot}%{_sysconfdir}/httpd/conf.d/ cp -a configs/httpd/dist-git/* %{buildroot}%{_sysconfdir}/httpd/conf.d/dist-git/ +cp -a configs/cron/* %{buildroot}%{_sysconfdir}/cron.d/dist-git/ cp -a configs/systemd/* %{buildroot}%{_unitdir}/ -install -m0644 -D configs/sysusers.d/dist-git.conf %{buildroot}%{_sysusersdir}/dist-git.conf - # ------------------------------------------------------------------------------ # /var/lib/ ...... dynamic persistent files # ------------------------------------------------------------------------------ -install -d %{buildroot}%{installdir} -install -d %{buildroot}%{installdir}/git -install -d %{buildroot}%{installdir}/cache -install -d %{buildroot}%{installdir}/cache/lookaside -install -d %{buildroot}%{installdir}/cache/lookaside/pkgs -install -d %{buildroot}%{installdir}/web +install -d %{buildroot}%{_sharedstatedir}/dist-git +install -d %{buildroot}%{_sharedstatedir}/dist-git/git +install -d %{buildroot}%{_sharedstatedir}/dist-git/git/rpms +install -d %{buildroot}%{_sharedstatedir}/dist-git/gitolite +install -d %{buildroot}%{_sharedstatedir}/dist-git/gitolite/conf +install -d %{buildroot}%{_sharedstatedir}/dist-git/gitolite/logs +install -d %{buildroot}%{_sharedstatedir}/dist-git/gitolite/local +install -d %{buildroot}%{_sharedstatedir}/dist-git/gitolite/local/VREF +install -d %{buildroot}%{_sharedstatedir}/dist-git/cache +install -d %{buildroot}%{_sharedstatedir}/dist-git/cache/lookaside +install -d %{buildroot}%{_sharedstatedir}/dist-git/cache/lookaside/pkgs +install -d %{buildroot}%{_sharedstatedir}/dist-git/web +install -d %{buildroot}%{_sharedstatedir}/dist-git/gitolite +install -d %{buildroot}%{_sharedstatedir}/dist-git/gitolite/hooks +install -d %{buildroot}%{_sharedstatedir}/dist-git/gitolite/hooks/common -cp -a scripts/httpd/upload.cgi %{buildroot}%{installdir}/web/ +cp -a scripts/httpd/upload.cgi %{buildroot}%{_sharedstatedir}/dist-git/web/ -%if 0%{?rhel} && 0%{?rhel} < 8 - sed -i '1 s|#.*|#!/usr/bin/python2|' %{buildroot}%{installdir}/web/upload.cgi -%endif +cp -a scripts/git/hooks/update-block-push-origin \ + %{buildroot}%{_sharedstatedir}/dist-git/gitolite/local/VREF/update-block-push-origin -# ------------------------------------------------------------------------------ -# /usr/bin/ ...... links to executable files -# ------------------------------------------------------------------------------ -install -d %{buildroot}%{_bindir} -ln -s %{_datadir}/dist-git/setup_git_package %{buildroot}%{_bindir}/setup_git_package -ln -s %{_datadir}/dist-git/mkbranch %{buildroot}%{_bindir}/mkbranch -ln -s %{_datadir}/dist-git/mkbranch_branching %{buildroot}%{_bindir}/mkbranch_branching -ln -s %{_datadir}/dist-git/remove_unused_sources %{buildroot}%{_bindir}/remove_unused_sources -mv %{buildroot}%{_datadir}/dist-git/dist-git-gc %{buildroot}%{_bindir}/dist-git-gc +ln -f -s %{_sysconfdir}/dist-git/gitolite.rc \ + %{buildroot}%{_sharedstatedir}/dist-git/git/.gitolite.rc + +ln -f -s %{_sharedstatedir}/dist-git/gitolite \ + %{buildroot}%{_sharedstatedir}/dist-git/git/.gitolite + +ln -f -s %{_sharedstatedir}/dist-git/git/rpms \ + %{buildroot}%{_sharedstatedir}/dist-git/git/repositories # ------------------------------------------------------------------------------ # SELinux @@ -163,7 +162,8 @@ do done cd - -hardlink -cv %{buildroot}%{_datadir}/selinux +/usr/sbin/hardlink -cv %{buildroot}%{_datadir}/selinux + %post selinux for selinuxvariant in %{selinux_variants} @@ -171,16 +171,8 @@ do /usr/sbin/semodule -s ${selinuxvariant} -i \ %{_datadir}/selinux/${selinuxvariant}/%{modulename}.pp &> /dev/null || : done -%{_sbindir}/restorecon -v %{installdir}/cache || : -%{_sbindir}/restorecon -v %{installdir}/cache/lookaside || : -%{_sbindir}/restorecon -v %{installdir}/cache/lookaside/pkgs || : -%{_sbindir}/restorecon -v %{installdir}/git || : -%{_sbindir}/restorecon -Rv %{installdir}/web/ || : +%{_sbindir}/restorecon -Rv %{_sharedstatedir}/dist-git || : -%systemd_post dist-git.socket - -%preun -%systemd_preun dist-git.socket %postun selinux if [ $1 -eq 0 ] ; then @@ -190,8 +182,6 @@ if [ $1 -eq 0 ] ; then done fi -%systemd_postun dist-git.socket - %files # ------------------------------------------------------------------------------ @@ -200,19 +190,27 @@ fi %license LICENSE %doc README.md +# ------------------------------------------------------------------------------ +# /usr/share/ .... static files +# ------------------------------------------------------------------------------ +%dir %{_datadir}/dist-git +%attr (755, -, -) %{_datadir}/dist-git/* + # ------------------------------------------------------------------------------ # /etc/ .......... config files # ------------------------------------------------------------------------------ %dir %{_sysconfdir}/dist-git %config(noreplace) %{_sysconfdir}/dist-git/dist-git.conf +%config(noreplace) %{_sysconfdir}/dist-git/gitolite.rc +%config(noreplace) %{_sysconfdir}/httpd/conf.d/dist-git.conf +%config %{_sysconfdir}/httpd/conf.d/ssl.conf.example %dir %{_sysconfdir}/httpd/conf.d/dist-git %config(noreplace) %{_sysconfdir}/httpd/conf.d/dist-git/* -%config(noreplace) %{_sysconfdir}/httpd/conf.d/dist-git.conf - +%dir %{_sysconfdir}/cron.d/dist-git +%config(noreplace) %{_sysconfdir}/cron.d/dist-git/cgit_pkg_list.cron +%config(noreplace) %{_sysconfdir}/cron.d/dist-git/dist_git_sync.cron %{_unitdir}/dist-git@.service %{_unitdir}/dist-git.socket -%{_unitdir}/dist-git-gc.service -%{_unitdir}/dist-git-gc.timer # ------------------------------------------------------------------------------ # /var/lib/ ...... dynamic persistent files @@ -220,130 +218,83 @@ fi # non-standard-dir-perm: # - git repositories and their contents must have w permission for their creators -%dir %{installdir} -%attr (2775, -, packager) %{installdir}/git -%dir %{installdir}/web -%attr (755, apache, apache) %{installdir}/web/upload.cgi -%dir %{installdir}/cache -%dir %{installdir}/cache/lookaside -%attr (2775, apache, apache) %{installdir}/cache/lookaside/pkgs +%dir %{_sharedstatedir}/dist-git +%dir %{_sharedstatedir}/dist-git/git +%attr (2775, -, packager) %{_sharedstatedir}/dist-git/git/rpms +%dir %{_sharedstatedir}/dist-git/gitolite +%attr (755, gen-acls, gen-acls) %{_sharedstatedir}/dist-git/gitolite/conf +# non-standard-dir-perm: +# - write access needed into log directory for gitolite +%attr (775, gen-acls, packager) %{_sharedstatedir}/dist-git/gitolite/logs +%dir %{_sharedstatedir}/dist-git/gitolite/local +# non-standard-dir-perm: +# - write access needed for gitolite admin groups +%attr (775, gen-acls, packager) %{_sharedstatedir}/dist-git/gitolite/local/VREF +# non-standard-executable-perm: +# - write access needed for gitolite admin groups +# - exec permission needed for execution by git (it's a git hook script) +%attr (775, gen-acls, packager) %{_sharedstatedir}/dist-git/gitolite/local/VREF/update-block-push-origin +# non-standard-dir-perm: +# - write access needed for gitolite admin groups +%attr (770, -, packager) %{_sharedstatedir}/dist-git/gitolite/hooks +# script-without-shebang: +# zero-length: +# - initial empty file required by gitolite with the correct perms +%dir %{_sharedstatedir}/dist-git/gitolite/hooks/common +%ghost %attr (775, gen-acls, packager) %{_sharedstatedir}/dist-git/gitolite/hooks/common/update +%dir %{_sharedstatedir}/dist-git/web +%attr (755, apache, apache) %{_sharedstatedir}/dist-git/web/upload.cgi +%dir %{_sharedstatedir}/dist-git/cache +%dir %{_sharedstatedir}/dist-git/cache/lookaside +%attr (755, apache, apache) %{_sharedstatedir}/dist-git/cache/lookaside/pkgs +%{_sharedstatedir}/dist-git/git/repositories +%{_sharedstatedir}/dist-git/git/.gitolite +%{_sharedstatedir}/dist-git/git/.gitolite.rc -# ------------------------------------------------------------------------------ -# /usr/share ...... executable files -# ------------------------------------------------------------------------------ - -%dir %{_datadir}/dist-git -%attr (775, -, -) %{_datadir}/dist-git/* -%{_bindir}/dist-git-gc -# TODO: move _datadir executables to _libexecdir, and drop these symlinks -%{_bindir}/mkbranch -%{_bindir}/mkbranch_branching -%{_bindir}/remove_unused_sources -%{_bindir}/setup_git_package - -%{_sysusersdir}/dist-git.conf %files selinux +%defattr(-,root,root,0755) %doc selinux/* %{_datadir}/selinux/*/%{modulename}.pp %changelog -* Wed Jul 15 2026 Fedora Release Engineering - 1.20-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_45_Mass_Rebuild +* Wed Jun 17 2015 Fedora Release Engineering - 0.11-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild -* Tue Jul 07 2026 Miroslav Suchý 1.20-1 -- Fix tests for Python 3.15: replace removed CGIHTTPRequestHandler +* Tue May 05 2015 Adam Samalik 0.11-1 +- SELinux subpackage +* Mon Apr 27 2015 Adam Samalik 0.10-1 +- perl require and files update (asamalik@redhat.com) -* Fri Feb 13 2026 Pavel Raiskup 1.19-1 -- Avoid using parameterized and nose -- Add sysusers.d config file to allow rpm to create users/groups automatically +* Thu Apr 23 2015 Adam Samalik 0.9-1 +- update hook update (asamalik@redhat.com) -* Fri Sep 27 2024 Pavel Raiskup 1.18-1 -- replace test on _selinux_policy_version by macro that does it all -- handle situation when _selinux_policy_version is not defined -- silence pylint -- remove rhel7 specific code -- Move %%_bindir symlinks out from dist-git-selinux -- Depend on python3-legacy-cgi for F41+ -- licensing: update the project's COPYING file -- dist-git: move the code into sub-directory +* Thu Apr 23 2015 Adam Samalik 0.8-1 +- review update (asamalik@redhat.com) -* Wed Jan 04 2023 Miroslav Suchý 1.17-1 -- use spdx license -- use pytest instead of nose test +* Wed Apr 22 2015 Adam Samalik 0.7-1 +- git hooks permissions (asamalik@redhat.com) +- noreplace configs (asamalik@redhat.com) +- fixes after rpmlint (asamalik@redhat.com) -* Mon Oct 5 2020 clime - 1.16-1 -- fixed exceptions for fedora-messaging -- fixed topic for fedora-messaging (to git.lookaside.new) -- spec tweak not to require distgit-selinux in containers -- only Suggests fedmsg -- garbage collection (git gc) script and systemd timer - for its periodic run added +* Wed Apr 22 2015 Adam Samalik 0.6-1 +- license + description (asamalik@redhat.com) +- cron files fix (asamalik@redhat.com) -* Fri Jun 12 2020 clime - 1.15-1 -- added support for fedora-messaging +* Wed Apr 15 2015 Adam Samalik 0.5-1 +- git hook: update-block-push-origin (asamalik@redhat.com) +- lookaside-upload config comments (asamalik@redhat.com) +- gen-acls user fix (asamalik@redhat.com) +- ssl httpd configs as examples (asamalik@redhat.com) -* Thu May 21 2020 clime - 1.14-1 -- disable unit tests temporarily as they do not pass - with network disabled during build +* Fri Apr 10 2015 Adam Samalik 0.4-1 +- spec and config fix +- systemd services +* Tue Mar 31 2015 Adam Samalik 0.3-1 +- alpha package (asamalik@redhat.com) -* Thu May 21 2020 clime - 1.13-1 -- fedmsg made an optional (recommnended) dependency -- slight refactoring of upload.cgi script -- tests added and documented +* Mon Mar 30 2015 Adam Samalik 0.2-1 +- new package built with tito -* Tue May 28 2019 Miroslav Suchy - 1.12-1 -- remove old changelog entries -- do not specify full path for hardlink [RHBZ#1714637] -- add script for removing unused source tarballs in lookaside cache -* Tue Apr 30 2019 clime 1.11-1 -- remove python3-configparser require -- move scripts to bindir - -* Mon Mar 11 2019 clime 1.10-1 -- python3 support -- fix post-receive hook in case post.receive.d is empty - -* Fri Nov 23 2018 clime 1.9-1 -- do not create sources file when creating a repo -- set umask 0002 in all available dist-git scripts -- Use REMOTE_USER as fallback for GSS_NAME -- add support for setting mtime for an uploaded file - -* Tue Aug 14 2018 clime 1.8-1 -- add disable group check option -- add lookaside_dir option -- deprecate cache_dir -- fix python-grokmirror dep - -* Mon Feb 26 2018 clime 1.7-1 -- move 'fedmsgs', 'old_paths', 'nomd5' options to optional upload section - -* Mon Feb 19 2018 clime 1.6-1 -- add 'fedmsgs', 'old_paths', and 'default_namespace' config options -- remove domain_read_all_domains_state SELinux rule -- require dist-git-selinux -- give optional map permission to git_system_t on git_user_content_t -- update requires to work for all environments -- make the package completely distribution-agnostic - -* Mon Dec 18 2017 clime 1.5-1 -- make selinux policy build on f27+ -- add optional map SELinux permission for httpd_t - -* Tue Jul 25 2017 clime 1.4-1 -- disable md5 uploading by default - -* Mon Jun 26 2017 clime 1.3-1 -- translate '/' to '-' in package name for mailinglist hook - (graybrandon@gmail.com) - -* Fri May 26 2017 clime 1.2-1 -- remove mail git hook -- grokmirror support - -* Wed May 03 2017 clime 1.1-1 -- fix default config value for email -- fix name/email switch diff --git a/packit.yaml b/packit.yaml deleted file mode 100644 index 0b8d165..0000000 --- a/packit.yaml +++ /dev/null @@ -1,24 +0,0 @@ -upstream_project_url: https://github.com/release-engineering/dist-git -upstream_tag_template: dist-git-{version}-1 -issue_repository: https://github.com/release-engineering/dist-git -copy_upstream_release_description: false - -jobs: -- job: pull_from_upstream - trigger: release - dist_git_branches: - - rawhide - - epel9 - -- job: koji_build - trigger: commit - allowed_committers: ['packit'] - dist_git_branches: - - fedora-all - - epel9 - -- job: bodhi_update - trigger: commit - dist_git_branches: - - fedora-all - - epel9 diff --git a/sources b/sources index 02a6f8a..f778c0d 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (dist-git-1.20.tar.gz) = f68aa733a2d0e0faa8973ced5260a1c5b0f6892c5ebfca977ac17ca3bfbda33225d866bb1c16abe761452d17594399a75815a49f5d941dd2e0c5404a69a1f3be +1c82ae7de4beec883efa1b11c5518eac dist-git-0.11.tar.gz