N
NiceOS Build Portal
Enterprise build observability for published NiceOS package builds.

input/ca-certificates.spec

raw · 8.7 KiB

%bcond_with bootstrap

%global ssl_certs_dir   %{_sysconfdir}/ssl/certs
%global crt_dir         %{_sysconfdir}/pki/tls/certs
%global _ca_trust_dir   %{_sysconfdir}/pki/ca-trust

%global __requires_exclude perl

Name:           ca-certificates
Version:        1.16.1
Release:        3%{?dist}
Summary:        Utilities for managing CA certificates
Summary(ru):    Утилиты для управления сертификатами CA
License:        MPL-2.0 AND (MIT OR GPL-3.0-or-later)
URL:            https://niceos.ru/packages/%{name}

Source0:        https://github.com/lfs-book/make-ca/archive/refs/tags/v%{version}.tar.gz

# RU: Источники российских доверенных сертификатов (используются подпакетом в %post).
# EN: Russian CA sources (used by the subpackage in %post).
Source1:        https://gu-st.ru/content/lending/russian_trusted_root_ca_pem.crt
Source2:        https://gu-st.ru/content/lending/russian_trusted_sub_ca_pem.crt

# RU: Базовый bundle + вспомогательные файлы.
# EN: Base bundle + helper files.
Source3:        ca-bundle.crt
Source4:        remove-expired-certs.sh
Source5:        pythoncerts.sh

Packager:       NICE SOFT GROUP LLC (ООО "НАЙС СОФТ ГРУПП") 5024245440 <niceos@ncsgp.ru>
Vendor:         NiceSOFT
Distribution:   NiceOS.Core
BugURL:         https://bugs.niceos.ru/
VCS:            https://specs.niceos.ru/rpms/%{name}

BuildRequires:  openssl
BuildRequires:  p11-kit

Requires:       openssl-libs
Requires:       p11-kit
Requires:       nss
Requires:       sed
Requires:       p11-kit-trust
Requires:       /usr/bin/trust
Requires:       /usr/bin/update-ca-trust
Requires:       update-ca-trust
Requires:       %{name}-pki = %{version}-%{release}
Requires(posttrans): /usr/bin/ln

Provides:       %{name}-mozilla = %{version}-%{release}
Provides:       %{name}-pki
Provides:       make-ca

%description
The ca-certificates package provides the tools and baseline certificate bundle
used to validate SSL/TLS connections system-wide. It installs the make-ca
utility, a base CA bundle, and helper scripts to maintain the system trust
store on NiceOS.

%description -l ru
Пакет ca-certificates содержит инструменты и базовый набор корневых сертификатов,
которые используются для проверки подлинности SSL/TLS-соединений в системе.
Он устанавливает утилиту make-ca, базовый CA-bundle и вспомогательные скрипты
для обслуживания системного хранилища доверия в NiceOS.

%package        russian-ca
Summary:        Russian trusted root CAs
Summary(ru):    Российские доверенные корневые сертификаты
Requires:       %{name} = %{version}-%{release}
Requires:       openssl
Requires:       p11-kit-trust
Requires:       /usr/bin/update-ca-trust

%description -n %{name}-russian-ca
This subpackage adds Russian trusted CA certificates to the system trust store
by generating OpenSSL trusted PEM files in /etc/ssl/local and running
update-ca-trust. Installation and removal automatically rebuild the trust store.

%description -l ru -n %{name}-russian-ca
Подпакет добавляет российские доверенные сертификаты в системное хранилище доверия
через генерацию OpenSSL trusted PEM-файлов в /etc/ssl/local и последующий
update-ca-trust. Установка и удаление подпакета автоматически пересобирают trust store.

%prep
%autosetup -p1 -n make-ca-%{version}

%build
# RU: Upstream make-ca не модифицируем через cat >>; симлинк создаётся в %posttrans.
# EN: Do not modify upstream make-ca via cat >>; the symlink is created in %posttrans.
:

%install
rm -rf %{buildroot}

# Install make-ca (base)
make install DESTDIR=%{buildroot}

# Base bundle
install -vdm 0755 %{buildroot}%{crt_dir}
install -m 0644 %{SOURCE3} %{buildroot}%{crt_dir}/ca-bundle.crt

# Helper script
install -vdm 0755 %{buildroot}%{_bindir}
install -m 0755 %{SOURCE4} %{buildroot}%{_bindir}/remove-expired-certs.sh

# python cert env hint (ship as config)
install -vdm 0755 %{buildroot}%{_sysconfdir}/profile.d
install -m 0644 %{SOURCE5} %{buildroot}%{_sysconfdir}/profile.d/pythoncerts.sh

# RU: russian-ca: сохраняем исходные сертификаты в ФС, используем их в %post.
# EN: russian-ca: install raw input certs into the filesystem for use in %post.
install -vdm 0755 %{buildroot}%{_datadir}/%{name}/niceos
install -m 0644 %{SOURCE1} %{buildroot}%{_datadir}/%{name}/niceos/russian_trusted_root_ca_pem.crt
install -m 0644 %{SOURCE2} %{buildroot}%{_datadir}/%{name}/niceos/russian_trusted_sub_ca_pem.crt

%post
%systemd_post update-pki.service
%systemd_post update-pki.timer
# RU: Активируем таймер обновления сертификатов (без фейла в chroot/контейнере).
# EN: Activate the certificate update timer (do not fail in chroot/containers).
systemctl enable --now update-pki.timer >/dev/null 2>&1 || :
%{_bindir}/remove-expired-certs.sh || :
/usr/bin/update-ca-trust || :

%posttrans
ln -sf %{crt_dir}/ca-bundle.crt %{ssl_certs_dir}/ca-certificates.crt || :
# RU: Не удаляем широкими масками файлы в /etc/pki/anchors (могут принадлежать другим пакетам/пользователю).
# EN: Do not remove files from /etc/pki/anchors with broad globs (may belong to other packages/user).
/usr/sbin/make-ca -g --force >/dev/null 2>&1 || :
/usr/bin/update-ca-trust || :
systemctl try-restart update-pki.timer >/dev/null 2>&1 || :

%preun
%systemd_preun update-pki.timer

%postun
%systemd_postun update-pki.timer
/usr/bin/update-ca-trust || :

%post -n %{name}-russian-ca
# RU: Генерируем доверенные PEM в /etc/ssl/local, затем обновляем trust store.
# EN: Generate trusted PEMs in /etc/ssl/local, then rebuild the trust store.
install -d -m 0755 /etc/ssl/local || :

# RU: Важно: генерируем именно PEM (без -text/-fingerprint), чтобы make-ca/openssl корректно парсили файл.
# EN: Important: generate PEM only (no -text/-fingerprint) so make-ca/openssl can parse the file correctly.
openssl x509 -in %{_datadir}/%{name}/niceos/russian_trusted_root_ca_pem.crt \
  -setalias "Russian Trusted Root CA" \
  -addtrust serverAuth -addtrust emailProtection -addtrust codeSigning \
  -out /etc/ssl/local/Russian_Trusted_Root_CA.pem || :

openssl x509 -in %{_datadir}/%{name}/niceos/russian_trusted_sub_ca_pem.crt \
  -setalias "Russian Trusted Sub CA" \
  -addtrust serverAuth -addtrust emailProtection -addtrust codeSigning \
  -out /etc/ssl/local/Russian_Trusted_Sub_CA.pem || :

/usr/bin/update-ca-trust || :
systemctl try-restart update-pki.timer >/dev/null 2>&1 || :

%postun -n %{name}-russian-ca
rm -f /etc/ssl/local/Russian_Trusted_Root_CA.pem /etc/ssl/local/Russian_Trusted_Sub_CA.pem || :
/usr/bin/update-ca-trust || :
systemctl try-restart update-pki.timer >/dev/null 2>&1 || :

%files
%defattr(-,root,root)
%config(noreplace) %{_sysconfdir}/make-ca/CS.txt
%config(noreplace) %{_sysconfdir}/make-ca/make-ca.conf.dist
%config(noreplace) %{_sysconfdir}/make-ca/ISRG_Root_X1.pem
%{crt_dir}/ca-bundle.crt
%{_bindir}/remove-expired-certs.sh
%{_libexecdir}/make-ca/copy-trust-modifications
%{_sbindir}/make-ca
%{_mandir}/man8/make-ca.8*
%{_unitdir}/update-pki.service
%{_unitdir}/update-pki.timer
%config(noreplace) %{_sysconfdir}/profile.d/pythoncerts.sh

%files russian-ca
%defattr(-,root,root)
%{_datadir}/%{name}/niceos/russian_trusted_root_ca_pem.crt
%{_datadir}/%{name}/niceos/russian_trusted_sub_ca_pem.crt
# RU: /etc/ssl/local/Russian_Trusted_*.pem создаются в %post, в %files не перечисляем.
# EN: /etc/ssl/local/Russian_Trusted_*.pem are generated in %post, do NOT list them in %files.

%changelog
* Sat May 02 2026 NiceOS Team <niceos@ncsgp.ru> - 1.16.1-3
- Enable and start update-pki.timer (Включён и запущен update-pki.timer)
- Fix russian-ca cleanup and generate PEM-only outputs (Исправлено удаление russian-ca и генерация чистых PEM)

* Thu Dec 18 2025 Stanislav Belikov <sbelikov@ncsgp.ru> - 1.16.1-2
- Split Russian trusted CAs into ca-certificates-russian-ca subpackage
- Generate /etc/ssl/local/Russian_Trusted_*.pem in %post as trusted PEMs via openssl x509 -addtrust
- Remove generated PEMs in %postun and rebuild trust store
- Add postun hooks for trust store rebuild

* Sat May 10 2025 NiceOS Team <niceos@ncsgp.ru> - 1.16.1-1
- Initial build for NiceOS (Первая сборка для НАЙС.ОС)