|
1 | 1 | %define debug_package %{nil} |
2 | | -%global __brp_strip %{nil} |
| 2 | +%define _build_id_links none |
3 | 3 |
|
4 | | -%global pyenv_root %{__pyenv_root} |
5 | | -%global python_version %{__python_version} |
6 | | - |
7 | | -# ===================== |
8 | | -# Directories |
9 | | -# ===================== |
10 | | - |
11 | | -# Airflow |
| 4 | +%global pyenv_root /opt/redborder/pyenv |
| 5 | +%global python_version 3.11.13 |
12 | 6 | %global airflow_dir /opt/airflow |
13 | 7 | %global airflow_venv_path %{airflow_dir}/venv |
14 | 8 |
|
15 | | -# ===================== |
16 | | -# Filtering provides/requires |
17 | | -# ===================== |
18 | | -%global __provides_exclude ^python3$|libpython3\.11\.so\.1\.0.*|libpython3\.so.*|libsqlite3.* |
19 | | -%global __requires_exclude ^python3$ |
| 9 | +%define __brp_strip %{nil} |
| 10 | +%global __brp_strip_exclude_from %{airflow_venv_path}/.* |
20 | 11 |
|
| 12 | +# Exclude provisions and requirements from pyenv and Airflow |
| 13 | +%global __provides_exclude ^python3$|libpython3.*|libsqlite3.* |
| 14 | +%global __provides_exclude_from %{pyenv_root}/.*|%{airflow_dir}/.* |
| 15 | +%global __requires_exclude ^python3$ |
| 16 | +%global __requires_exclude_from %{pyenv_root}/.*|%{airflow_dir}/.* |
21 | 17 | %undefine __brp_mangle_shebangs |
22 | 18 |
|
23 | 19 | Name: redborder-malware-pythonpyenv |
24 | 20 | Version: %{__version} |
25 | 21 | Release: %{__release}%{?dist} |
26 | | -Summary: Python %{python_version} with pyenv in /opt/redborder/pyenv |
| 22 | +Summary: Airflow virtualenv based on Python %{python_version} from redborder-pythonpyenv |
27 | 23 | License: MIT |
28 | 24 | ExclusiveArch: x86_64 |
29 | 25 |
|
30 | | -# ===================== |
31 | | -# Sources (vendored) |
32 | | -# ===================== |
33 | 26 | Source0: airflow_requirements.txt |
34 | 27 |
|
35 | | -BuildRequires: gcc, gcc-c++, make, zlib-devel, bzip2-devel, readline-devel, sqlite-devel, openssl-devel, xz-devel, libffi-devel, git, curl, autoconf, automake, libtool, gcc-gfortran, autoconf, openblas-devel, wget, unzip, findutils, libvirt-devel, pkgconfig, krb5-devel, mariadb-devel, graphviz-devel, openldap-devel |
36 | | - |
37 | | -Requires: bash, openblas-devel |
| 28 | +BuildRequires: redborder-pythonpyenv |
| 29 | +BuildRequires: krb5-devel, gcc, libffi-devel, openldap-devel, mariadb-devel, graphviz-devel, pkgconfig, wget, unzip, findutils, libvirt-devel |
| 30 | +Requires: redborder-pythonpyenv, bash |
38 | 31 |
|
39 | 32 | %description |
40 | | -This package installs pyenv into %{pyenv_root}, Python %{python_version}, |
41 | | -and one isolated virtualenvs: for Airflow. |
| 33 | +This package installs an isolated Airflow virtualenv at %{airflow_dir}, |
| 34 | +using the Python %{python_version} provided by redborder-pythonpyenv. |
42 | 35 |
|
43 | 36 | %prep |
44 | 37 | # No source to unpack |
45 | 38 |
|
46 | 39 | %build |
47 | | -mkdir -p %{pyenv_root} |
48 | | -export PYENV_ROOT=%{pyenv_root} |
49 | | -export PATH="$PYENV_ROOT/bin:$PATH" |
50 | | - |
51 | | -# Install pyenv |
52 | | -git clone https://github.com/pyenv/pyenv.git %{pyenv_root} |
53 | | - |
54 | | -# Instalar SQLite 3.45.3 |
55 | | -SQLITE_VERSION=3.45.3 |
56 | | -SQLITE_PREFIX=$PYENV_ROOT/.deps/sqlite |
57 | | - |
58 | | -mkdir -p $SQLITE_PREFIX |
59 | | -curl -LO https://www.sqlite.org/2024/sqlite-autoconf-3450300.tar.gz |
60 | | -tar xzf sqlite-autoconf-3450300.tar.gz |
61 | | -cd sqlite-autoconf-3450300 |
62 | | -./configure --prefix=$SQLITE_PREFIX |
63 | | -make -j$(nproc) |
64 | | -make install |
65 | | -cd .. |
66 | | - |
67 | | -# Export build flags for Python |
68 | | -export CPPFLAGS="-I$SQLITE_PREFIX/include" |
69 | | -export LDFLAGS="-L$SQLITE_PREFIX/lib -Wl,-rpath,$SQLITE_PREFIX/lib" |
70 | | -export LD_RUN_PATH="$SQLITE_PREFIX/lib" |
71 | | -export PKG_CONFIG_PATH="$SQLITE_PREFIX/lib/pkgconfig" |
72 | | -export CONFIGURE_OPTS="--with-ensurepip=install --enable-loadable-sqlite-extensions" |
73 | | - |
74 | | -# Build Python |
75 | | -eval "$(%{pyenv_root}/bin/pyenv init -)" |
76 | | -%{pyenv_root}/bin/pyenv install %{python_version} |
77 | | -%{pyenv_root}/bin/pyenv global %{python_version} |
78 | | -PYTHON_BIN=%{pyenv_root}/versions/%{python_version}/bin/python3 |
79 | | - |
80 | | -$PYTHON_BIN -m pip install --upgrade pip setuptools virtualenv |
81 | | - |
82 | | -# Macro to install requirements in a venv |
83 | | -%global install_requirements() \ |
84 | | - $PYTHON_BIN -m venv %1 ; \ |
85 | | - %1/bin/pip install --upgrade pip setuptools ; \ |
86 | | - %1/bin/pip install --no-deps -r %2 \ |
87 | | - %{nil} |
88 | | - |
89 | | -# ===================== |
90 | | -# VENV airflow |
91 | | -# ===================== |
92 | | -mkdir -p %{airflow_dir} |
93 | | -$PYTHON_BIN -m virtualenv %{airflow_venv_path} |
94 | | -%{airflow_venv_path}/bin/pip install -r $RPM_SOURCE_DIR/airflow_requirements.txt |
95 | | - |
96 | | -%check |
97 | 40 |
|
98 | 41 | %install |
99 | | -# Airflow |
100 | 42 | mkdir -p %{buildroot}%{airflow_dir} |
101 | | -cp -a %{airflow_dir}/. %{buildroot}%{airflow_dir}/ |
102 | 43 |
|
103 | | -# ===================== |
104 | | -# Strip unnecessary caches |
105 | | -# ===================== |
106 | | -find %{buildroot} -name '__pycache__' -type d -exec rm -rf {} + |
107 | | -find %{buildroot} -name '*.pyc' -delete |
| 44 | +# Create venv using Python from pyenv |
| 45 | +%{pyenv_root}/versions/%{python_version}/bin/python3 -m venv %{buildroot}%{airflow_venv_path} |
| 46 | +%{buildroot}%{airflow_venv_path}/bin/pip install --upgrade pip setuptools |
| 47 | + |
| 48 | +# Installation requirements |
| 49 | +%{buildroot}%{airflow_venv_path}/bin/pip install --no-cache-dir -r %{SOURCE0} |
| 50 | + |
| 51 | +# Rewrite shebangs for all binaries |
| 52 | +find %{buildroot}%{airflow_venv_path}/bin -type f -exec sed -i \ |
| 53 | + "1 s|^#!.*python3$|#!%{airflow_venv_path}/bin/python3|" {} \; |
| 54 | + |
| 55 | +# Update pyvenv.cfg |
| 56 | +sed -i "s|^home = .*|home = %{pyenv_root}/versions/%{python_version}|" \ |
| 57 | + %{buildroot}%{airflow_venv_path}/pyvenv.cfg |
| 58 | + |
| 59 | +sed -i "s|^command = .*|command = %{pyenv_root}/versions/%{python_version}/bin/python3 -m venv %{airflow_venv_path}|" \ |
| 60 | + %{buildroot}%{airflow_venv_path}/pyvenv.cfg |
| 61 | + |
| 62 | +# Update activation scripts |
| 63 | +for script in activate activate.csh activate.fish; do |
| 64 | + sed -i "s|/builddir/build/BUILDROOT/.*%{airflow_venv_path}|%{airflow_venv_path}|g" \ |
| 65 | + %{buildroot}%{airflow_venv_path}/bin/$script |
| 66 | +done |
108 | 67 |
|
109 | 68 | %files |
110 | | -%{pyenv_root} |
111 | 69 | %{airflow_venv_path} |
112 | 70 |
|
113 | 71 | %changelog |
114 | | -* Mon Sep 22 2025 Vicente Mesa <vimesa@redborder.com> |
115 | | -- Add airflow venv |
| 72 | +* Mon Sep 22 2025 Vicente Mesa <vimesa@redborder.com> - 0.0.1 |
| 73 | +- Create airflow venv |
0 commit comments