mirror of https://github.com/containers/podman.git
				
				
				
			
		
			
				
	
	
		
			369 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			369 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| %global with_debug 1
 | |
| 
 | |
| %if 0%{?with_debug}
 | |
| %global _find_debuginfo_dwz_opts %{nil}
 | |
| %global _dwz_low_mem_die_limit 0
 | |
| %else
 | |
| %global debug_package %{nil}
 | |
| %endif
 | |
| 
 | |
| # RHEL's default %%gobuild macro doesn't account for the BUILDTAGS variable, so we
 | |
| # set it separately here and do not depend on RHEL's go-[s]rpm-macros package
 | |
| # until that's fixed.
 | |
| # c9s bz: https://bugzilla.redhat.com/show_bug.cgi?id=2227328
 | |
| # c8s bz: https://bugzilla.redhat.com/show_bug.cgi?id=2227331
 | |
| %if %{defined rhel} && !%{defined eln}
 | |
| %define gobuild(o:) go build -buildmode pie -compiler gc -tags="rpm_crashtraceback libtrust_openssl ${BUILDTAGS:-}" -ldflags "-linkmode=external -compressdwarf=false ${LDFLAGS:-} -B 0x$(head -c20 /dev/urandom|od -An -tx1|tr -d ' \\n') -extldflags '%__global_ldflags'" -a -v -x %{?**};
 | |
| # python3 dep conditional for rhel8
 | |
| %if %{?rhel} == 8
 | |
| %define rhel8py3 1
 | |
| %endif
 | |
| %endif
 | |
| 
 | |
| %global gomodulesmode GO111MODULE=on
 | |
| 
 | |
| %if %{defined rhel}
 | |
| # _user_tmpfiles.d currently undefined on rhel
 | |
| %global _user_tmpfilesdir %{_datadir}/user-tmpfiles.d
 | |
| %endif
 | |
| 
 | |
| %if %{defined fedora}
 | |
| %define build_with_btrfs 1
 | |
| %endif
 | |
| 
 | |
| %if %{defined copr_username}
 | |
| %define copr_build 1
 | |
| %endif
 | |
| 
 | |
| %global container_base_path github.com/containers
 | |
| %global container_base_url https://%{container_base_path}
 | |
| 
 | |
| # For LDFLAGS
 | |
| %global ld_project %{container_base_path}/%{name}/v4
 | |
| %global ld_libpod %{ld_project}/libpod
 | |
| 
 | |
| # %%{name}
 | |
| %global git0 %{container_base_url}/%{name}
 | |
| 
 | |
| # dnsname
 | |
| %global repo_plugins dnsname
 | |
| %global git_plugins %{container_base_url}/%{repo_plugins}
 | |
| %global commit_plugins 18822f9a4fb35d1349eb256f4cd2bfd372474d84
 | |
| %global import_path_plugins %{container_base_path}/%{repo_plugins}
 | |
| 
 | |
| Name: podman
 | |
| %if %{defined copr_build}
 | |
| Epoch: 102
 | |
| %else
 | |
| Epoch: 5
 | |
| %endif
 | |
| # DO NOT TOUCH the Version string!
 | |
| # The TRUE source of this specfile is:
 | |
| # https://github.com/containers/podman/blob/main/rpm/podman.spec
 | |
| # If that's what you're reading, Version must be 0, and will be updated by Packit for
 | |
| # copr and koji builds.
 | |
| # If you're reading this on dist-git, the version is automatically filled in by Packit.
 | |
| Version: 0
 | |
| # The `AND` needs to be uppercase in the License for SPDX compatibility
 | |
| License: Apache-2.0 AND BSD-2-Clause AND BSD-3-Clause AND ISC AND MIT AND MPL-2.0
 | |
| Release: %autorelease
 | |
| %if %{defined golang_arches_future}
 | |
| ExclusiveArch: %{golang_arches_future}
 | |
| %else
 | |
| ExclusiveArch: aarch64 ppc64le s390x x86_64
 | |
| %endif
 | |
| Summary: Manage Pods, Containers and Container Images
 | |
| URL: https://%{name}.io/
 | |
| # All SourceN files fetched from upstream
 | |
| Source0: %{git0}/archive/v%{version}.tar.gz
 | |
| Source1: %{git_plugins}/archive/%{commit_plugins}/%{repo_plugins}-%{commit_plugins}.tar.gz
 | |
| Provides: %{name}-manpages = %{epoch}:%{version}-%{release}
 | |
| BuildRequires: %{_bindir}/envsubst
 | |
| %if %{defined build_with_btrfs}
 | |
| BuildRequires: btrfs-progs-devel
 | |
| %endif
 | |
| BuildRequires: gcc
 | |
| BuildRequires: glib2-devel
 | |
| BuildRequires: glibc-devel
 | |
| BuildRequires: glibc-static
 | |
| BuildRequires: golang
 | |
| BuildRequires: git-core
 | |
| %if !%{defined gobuild}
 | |
| BuildRequires: go-rpm-macros
 | |
| %endif
 | |
| BuildRequires: gpgme-devel
 | |
| BuildRequires: libassuan-devel
 | |
| BuildRequires: libgpg-error-devel
 | |
| BuildRequires: libseccomp-devel
 | |
| BuildRequires: libselinux-devel
 | |
| BuildRequires: shadow-utils-subid-devel
 | |
| BuildRequires: pkgconfig
 | |
| BuildRequires: make
 | |
| BuildRequires: man-db
 | |
| BuildRequires: ostree-devel
 | |
| BuildRequires: systemd
 | |
| BuildRequires: systemd-devel
 | |
| %if %{defined rhel8py3}
 | |
| BuildRequires: python3
 | |
| %endif
 | |
| Requires: catatonit
 | |
| Requires: conmon >= 2:2.1.7-2
 | |
| Requires: containers-common-extra
 | |
| %if %{defined rhel} && !%{defined eln}
 | |
| Recommends: gvisor-tap-vsock-gvforwarder
 | |
| %else
 | |
| Requires: gvisor-tap-vsock-gvforwarder
 | |
| %endif
 | |
| Recommends: gvisor-tap-vsock
 | |
| Provides: %{name}-quadlet
 | |
| Obsoletes: %{name}-quadlet <= 5:4.4.0-1
 | |
| Provides: %{name}-quadlet = %{epoch}:%{version}-%{release}
 | |
| 
 | |
| %description
 | |
| %{name} (Pod Manager) is a fully featured container engine that is a simple
 | |
| daemonless tool.  %{name} provides a Docker-CLI comparable command line that
 | |
| eases the transition from other container engines and allows the management of
 | |
| pods, containers and images.  Simply put: alias docker=%{name}.
 | |
| Most %{name} commands can be run as a regular user, without requiring
 | |
| additional privileges.
 | |
| 
 | |
| %{name} uses Buildah(1) internally to create container images.
 | |
| Both tools share image (not container) storage, hence each can use or
 | |
| manipulate images (but not containers) created by the other.
 | |
| 
 | |
| %{summary}
 | |
| %{repo} Simple management tool for pods, containers and images
 | |
| 
 | |
| %package docker
 | |
| Summary: Emulate Docker CLI using %{name}
 | |
| BuildArch: noarch
 | |
| Requires: %{name} = %{epoch}:%{version}-%{release}
 | |
| Conflicts: docker
 | |
| Conflicts: docker-latest
 | |
| Conflicts: docker-ce
 | |
| Conflicts: docker-ee
 | |
| Conflicts: moby-engine
 | |
| 
 | |
| %description docker
 | |
| This package installs a script named docker that emulates the Docker CLI by
 | |
| executes %{name} commands, it also creates links between all Docker CLI man
 | |
| pages and %{name}.
 | |
| 
 | |
| %package tests
 | |
| Summary: Tests for %{name}
 | |
| 
 | |
| Requires: %{name} = %{epoch}:%{version}-%{release}
 | |
| Requires: bats
 | |
| Requires: jq
 | |
| Requires: skopeo
 | |
| Requires: nmap-ncat
 | |
| Requires: httpd-tools
 | |
| Requires: openssl
 | |
| Requires: socat
 | |
| Requires: buildah
 | |
| Requires: gnupg
 | |
| 
 | |
| %description tests
 | |
| %{summary}
 | |
| 
 | |
| This package contains system tests for %{name}
 | |
| 
 | |
| %package remote
 | |
| Summary: (Experimental) Remote client for managing %{name} containers
 | |
| 
 | |
| %description remote
 | |
| Remote client for managing %{name} containers.
 | |
| 
 | |
| This experimental remote client is under heavy development. Please do not
 | |
| run %{name}-remote in production.
 | |
| 
 | |
| %{name}-remote uses the version 2 API to connect to a %{name} client to
 | |
| manage pods, containers and container images. %{name}-remote supports ssh
 | |
| connections as well.
 | |
| 
 | |
| %package plugins
 | |
| Summary: Plugins for %{name}
 | |
| Requires: dnsmasq
 | |
| Recommends: gvisor-tap-vsock
 | |
| 
 | |
| %description plugins
 | |
| This plugin sets up the use of dnsmasq on a given CNI network so
 | |
| that Pods can resolve each other by name.  When configured,
 | |
| the pod and its IP address are added to a network specific hosts file
 | |
| that dnsmasq will read in.  Similarly, when a pod
 | |
| is removed from the network, it will remove the entry from the hosts
 | |
| file.  Each CNI network will have its own dnsmasq instance.
 | |
| 
 | |
| %package -n %{name}sh
 | |
| Summary: Confined login and user shell using %{name}
 | |
| Requires: %{name} = %{epoch}:%{version}-%{release}
 | |
| Provides: %{name}-shell = %{epoch}:%{version}-%{release}
 | |
| Provides: %{name}-%{name}sh = %{epoch}:%{version}-%{release}
 | |
| 
 | |
| %description -n %{name}sh
 | |
| %{name}sh provides a confined login and user shell with access to volumes and
 | |
| capabilities specified in user quadlets.
 | |
| 
 | |
| It is a symlink to %{_bindir}/%{name} and execs into the `%{name}sh` container
 | |
| when `%{_bindir}/%{name}sh` is set as a login shell or set as os.Args[0].
 | |
| 
 | |
| %prep
 | |
| %autosetup -Sgit -n %{name}-%{version}
 | |
| sed -i 's;@@PODMAN@@\;$(BINDIR);@@PODMAN@@\;%{_bindir};' Makefile
 | |
| 
 | |
| # These changes are only meant for copr builds
 | |
| %if %{defined copr_build}
 | |
| # podman --version should show short sha
 | |
| sed -i "s/^const RawVersion = .*/const RawVersion = \"##VERSION##-##SHORT_SHA##\"/" version/rawversion/version.go
 | |
| # use ParseTolerant to allow short sha in version
 | |
| sed -i "s/^var Version.*/var Version, err = semver.ParseTolerant(rawversion.RawVersion)/" version/version.go
 | |
| %endif
 | |
| 
 | |
| # untar dnsname
 | |
| tar zxf %{SOURCE1}
 | |
| 
 | |
| %build
 | |
| %set_build_flags
 | |
| export CGO_CFLAGS=$CFLAGS
 | |
| 
 | |
| # These extra flags present in $CFLAGS have been skipped for now as they break the build
 | |
| CGO_CFLAGS=$(echo $CGO_CFLAGS | sed 's/-flto=auto//g')
 | |
| CGO_CFLAGS=$(echo $CGO_CFLAGS | sed 's/-Wp,D_GLIBCXX_ASSERTIONS//g')
 | |
| CGO_CFLAGS=$(echo $CGO_CFLAGS | sed 's/-specs=\/usr\/lib\/rpm\/redhat\/redhat-annobin-cc1//g')
 | |
| 
 | |
| %ifarch x86_64
 | |
| export CGO_CFLAGS+=" -m64 -mtune=generic -fcf-protection=full"
 | |
| %endif
 | |
| 
 | |
| LDFLAGS="-X %{ld_libpod}/define.buildInfo=$(date +%s) \
 | |
|          -X %{ld_libpod}/config._installPrefix=%{_prefix} \
 | |
|          -X %{ld_libpod}/config._etcDir=%{_sysconfdir} \
 | |
|          -X %{ld_project}/pkg/systemd/quadlet._binDir=%{_bindir}"
 | |
| 
 | |
| # build rootlessport first
 | |
| %gobuild -o bin/rootlessport ./cmd/rootlessport
 | |
| 
 | |
| export BASEBUILDTAGS="seccomp exclude_graphdriver_devicemapper $(hack/systemd_tag.sh) $(hack/libsubid_tag.sh)"
 | |
| 
 | |
| # build %%{name}
 | |
| export BUILDTAGS="$BASEBUILDTAGS $(hack/btrfs_installed_tag.sh) $(hack/btrfs_tag.sh) $(hack/libdm_tag.sh)"
 | |
| %gobuild -o bin/%{name} ./cmd/%{name}
 | |
| 
 | |
| # build %%{name}-remote
 | |
| export BUILDTAGS="$BASEBUILDTAGS exclude_graphdriver_btrfs btrfs_noversion remote"
 | |
| %gobuild -o bin/%{name}-remote ./cmd/%{name}
 | |
| 
 | |
| # build quadlet
 | |
| export BUILDTAGS="$BASEBUILDTAGS $(hack/btrfs_installed_tag.sh) $(hack/btrfs_tag.sh)"
 | |
| %gobuild -o bin/quadlet ./cmd/quadlet
 | |
| 
 | |
| # reset LDFLAGS for plugins binaries
 | |
| LDFLAGS=''
 | |
| 
 | |
| %{__make} docs docker-docs
 | |
| 
 | |
| # build dnsname the old way otherwise it fails on koji
 | |
| cd %{repo_plugins}-%{commit_plugins}
 | |
| mkdir _build
 | |
| cd _build
 | |
| mkdir -p src/%{container_base_path}
 | |
| ln -s ../../../../ src/%{import_path_plugins}
 | |
| cd ..
 | |
| ln -s vendor src
 | |
| export GOPATH=$(pwd)/_build:$(pwd)
 | |
| %define gomodulesmode GO111MODULE=off
 | |
| %gobuild -o bin/dnsname %{import_path_plugins}/plugins/meta/dnsname
 | |
| cd ..
 | |
| 
 | |
| %install
 | |
| install -dp %{buildroot}%{_unitdir}
 | |
| PODMAN_VERSION=%{version} %{__make} PREFIX=%{buildroot}%{_prefix} ETCDIR=%{_sysconfdir} \
 | |
|        install.bin \
 | |
|        install.man \
 | |
|        install.systemd \
 | |
|        install.completions \
 | |
|        install.docker \
 | |
|        install.docker-docs \
 | |
|        install.remote \
 | |
| %if %{defined _modulesloaddir}
 | |
|         install.modules-load
 | |
| %endif
 | |
| 
 | |
| sed -i 's;%{buildroot};;g' %{buildroot}%{_bindir}/docker
 | |
| 
 | |
| # install dnsname plugin
 | |
| cd %{repo_plugins}-%{commit_plugins}
 | |
| %{__make} PREFIX=%{_prefix} DESTDIR=%{buildroot} install
 | |
| cd ..
 | |
| 
 | |
| # do not include docker and podman-remote man pages in main package
 | |
| for file in `find %{buildroot}%{_mandir}/man[15] -type f | sed "s,%{buildroot},," | grep -v -e remote -e docker`; do
 | |
|     echo "$file*" >> podman.file-list
 | |
| done
 | |
| 
 | |
| rm -f %{buildroot}%{_mandir}/man5/docker*.5
 | |
| 
 | |
| install -d -p %{buildroot}/%{_datadir}/%{name}/test/system
 | |
| cp -pav test/system %{buildroot}/%{_datadir}/%{name}/test/
 | |
| 
 | |
| #define license tag if not already defined
 | |
| %{!?_licensedir:%global license %doc}
 | |
| 
 | |
| %files -f %{name}.file-list
 | |
| %license LICENSE
 | |
| %doc README.md CONTRIBUTING.md install.md transfer.md
 | |
| %{_bindir}/%{name}
 | |
| %dir %{_libexecdir}/%{name}
 | |
| %{_libexecdir}/%{name}/rootlessport
 | |
| %{_libexecdir}/%{name}/quadlet
 | |
| %{_datadir}/bash-completion/completions/%{name}
 | |
| # By "owning" the site-functions dir, we don't need to Require zsh
 | |
| %dir %{_datadir}/zsh/site-functions
 | |
| %{_datadir}/zsh/site-functions/_%{name}
 | |
| %dir %{_datadir}/fish/vendor_completions.d
 | |
| %{_datadir}/fish/vendor_completions.d/%{name}.fish
 | |
| %{_unitdir}/%{name}*
 | |
| %{_userunitdir}/%{name}*
 | |
| %{_tmpfilesdir}/%{name}.conf
 | |
| %{_systemdgeneratordir}/%{name}-system-generator
 | |
| %{_systemdusergeneratordir}/%{name}-user-generator
 | |
| %if %{defined _modulesloaddir}
 | |
| %{_modulesloaddir}/%{name}-iptables.conf
 | |
| %endif
 | |
| 
 | |
| %files docker
 | |
| %{_bindir}/docker
 | |
| %{_mandir}/man1/docker*.1*
 | |
| %{_tmpfilesdir}/%{name}-docker.conf
 | |
| %{_user_tmpfilesdir}/%{name}-docker.conf
 | |
| 
 | |
| %files remote
 | |
| %license LICENSE
 | |
| %{_bindir}/%{name}-remote
 | |
| %{_mandir}/man1/%{name}-remote*.*
 | |
| %{_datadir}/bash-completion/completions/%{name}-remote
 | |
| %dir %{_datadir}/fish/vendor_completions.d
 | |
| %{_datadir}/fish/vendor_completions.d/%{name}-remote.fish
 | |
| %dir %{_datadir}/zsh/site-functions
 | |
| %{_datadir}/zsh/site-functions/_%{name}-remote
 | |
| 
 | |
| %files tests
 | |
| %{_datadir}/%{name}/test
 | |
| 
 | |
| %files plugins
 | |
| %license %{repo_plugins}-%{commit_plugins}/LICENSE
 | |
| %doc %{repo_plugins}-%{commit_plugins}/{README.md,README_PODMAN.md}
 | |
| %dir %{_libexecdir}/cni
 | |
| %{_libexecdir}/cni/dnsname
 | |
| 
 | |
| %files -n %{name}sh
 | |
| %{_bindir}/%{name}sh
 | |
| 
 | |
| %changelog
 | |
| %if %{defined autochangelog}
 | |
| %autochangelog
 | |
| %else
 | |
| * Mon May 01 2023 RH Container Bot <rhcontainerbot@fedoraproject.org>
 | |
| - Placeholder changelog for envs that are not autochangelog-ready
 | |
| %endif
 |