#
# spec file for package blog
#
# Copyright (c) 2025 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via https://bugs.opensuse.org/
#


Name:           blog
Version:        2.34
%define sonum   2
Release:        1.1
Summary:        Boot logging
License:        GPL-2.0-or-later
Group:          System/Base
URL:            https://github.com/bitstreamout/showconsole
Source:         https://github.com/bitstreamout/showconsole/archive/v%{version}.tar.gz#/showconsole-%{version}.tar.gz
Source1:        blog-rpmlintrc
Patch0:         blog-install.patch
Patch1:         blog-3215.patch
BuildRequires:  bash
%if 0%{suse_version} >= 1550
# regenerate_initrd_post moved to rpm-config-SUSE:initrd.macros
BuildRequires:  rpm-config-SUSE >= 0.g11
%{regenerate_initrd_requires}
%else
Requires(post): /usr/bin/mkdir
Recommends:     suse-module-tools
%endif
Requires(post): coreutils
BuildRoot:      %{_tmppath}/%{name}-%{version}-build
Provides:       sysvinit-tools:/sbin/blogd
Suggests:       blog-plymouth = %{version}

%description
The blogd daemon determines the real underlying character device of
/dev/console. Blogd spawns a pty/tty pair to reconnect the current
/dev/console with the slave of the pty/tty pair. During writing
information from this slave to the real character device a ring
buffer is used to hold the information for writing it to an existing
logging file.

%package -n libblogger%{sonum}
Summary:        FIFO interface used by startproc
Group:          System/Libraries
%if %sonum == 2
Provides:       %{name}:%{_libdir}/libblogger.so.2
%endif

%description -n libblogger%{sonum}
The libaray for the FIFO interface used by the LSB startproc command.

%package	plymouth
Summary:        Replaces plymouth by blogd
Group:          System/Base
Requires:       blog = %{version}
Requires:       systemd
Conflicts:      plymouth
Conflicts:      plymouth-dracut

%description	plymouth
The Blogd daemon can be used as a replacement for Plymouth in situations where
a splash screen and/or usage of a frame buffer is unwanted.  The Blogd is also
a Plymouth agent. That means, it can handle requests for a password prompt by
the system password service of systemd.
The blogd daemon writes out boot log messages to every terminal device used by
/dev/console and to the log file /var/log/boot.log.  When halting or rebooting
the system, it moves the log file to /var/log/boot.old and appends all log
messages upto to point at which the file systems becomes unavailable.

%package	devel
Summary:        Provides library and header for boot logging
Group:          Development/Libraries/C and C++
Requires:       libblogger%{sonum} = %{version}

%description	devel
The libaray and the header file for the FIFO interface used to build
the LSB startproc command.

%prep
%setup -q -n showconsole-%version
%patch -P0
%patch -P1
for l in rt util pthread
do
    ln -sf %{_libdir}/lib${l}.so.[0-9] lib${l}.so
done

%build
make V=1 %{?_smp_mflags} CC="%__cc" \
    LIBDIR=%{_libdir} \
    INCDIR=%{_includedir} \
    SYSDUNITS=%{_unitdir} \
    BOOT_LOGFILE=%{_localstatedir}/log/boot.log \
    BOOT_OLDLOGFILE=%{_localstatedir}/log/boot.old

%install
%make_install \
    MANPATH=%{_mandir} \
    INSTBINFLAGS="-m 0744" \
%if 0%{?suse_version} >= 1550
    SBINDIR=%{_sbindir} \
%endif
    LIBDIR=%{_libdir} \
    INCDIR=%{_includedir} \
    SYSDUNITS=%{_unitdir} \
    BOOT_LOGFILE=%{_localstatedir}/log/boot.log \
    BOOT_OLDLOGFILE=%{_localstatedir}/log/boot.old

rm %{buildroot}%{_unitdir}/systemd-ask-password-blog.service.wants/systemd-vconsole-setup.service

%post   -n libblogger%{sonum} -p /sbin/ldconfig
%postun -n libblogger%{sonum} -p /sbin/ldconfig

%post   plymouth
ln -sf ../systemd-vconsole-setup.service %{_unitdir}/systemd-ask-password-blog.service.wants/
test -x /bin/systemctl && /bin/systemctl daemon-reload >/dev/null 2>&1 || :
%if 0%{suse_version} >= 1550
%{regenerate_initrd_post}
%else
! command -v mkdir >/dev/null || mkdir -p /run/regenerate-initrd/
test ! -d /run/regenerate-initrd || > /run/regenerate-initrd/all
%endif

%postun plymouth
test -x /bin/systemctl && /bin/systemctl daemon-reload >/dev/null 2>&1 || :

%posttrans plymouth
%if 0%{suse_version} >= 1550
%{regenerate_initrd_posttrans}
%else
if test -x /usr/lib/module-init-tools/regenerate-initrd-posttrans
then
    /usr/lib/module-init-tools/regenerate-initrd-posttrans
fi
%endif

%files
%defattr(-,root,root)
%license COPYING
%doc README
%if 0%{?suse_version} < 1550
/sbin/blogctl
/sbin/blogd
/sbin/blogger
/sbin/isserial
/sbin/setconsole
/sbin/showconsole
%else
%{_sbindir}/blogctl
%{_sbindir}/blogd
%{_sbindir}/blogger
%{_sbindir}/isserial
%{_sbindir}/setconsole
%{_sbindir}/showconsole
%endif
%doc %{_mandir}/man8/blogctl.8.gz
%doc %{_mandir}/man8/blogd.8.gz
%doc %{_mandir}/man8/blogger.8.gz
%doc %{_mandir}/man8/isserial.8.gz
%doc %{_mandir}/man8/setconsole.8.gz
%doc %{_mandir}/man8/showconsole.8.gz

%files -n libblogger%{sonum}
%{_libdir}/libblogger.so.*

%files devel
%defattr(-,root,root)
%{_includedir}/libblogger.h
%{_libdir}/libblogger.so

%files plymouth
%defattr(-,root,root)
%dir %{_prefix}/lib/dracut/
%dir %{_prefix}/lib/dracut/modules.d/
%dir %{_prefix}/lib/dracut/modules.d/99blog/
%dir %{_unitdir}/default.target.wants/
%dir %{_unitdir}/emergency.target.wants/
%dir %{_unitdir}/initrd-switch-root.target.wants/
%dir %{_unitdir}/rescue.target.wants/
%dir %{_unitdir}/sysinit.target.wants/
%dir %{_unitdir}/halt.target.wants/
%dir %{_unitdir}/reboot.target.wants/
%dir %{_unitdir}/poweroff.target.wants/
%dir %{_unitdir}/kexec.target.wants/
%dir %{_unitdir}/local-fs-pre.target.wants/
%dir %{_unitdir}/systemd-ask-password-blog.service.wants/
%{_prefix}/lib/dracut/modules.d/99blog/module-setup.sh
%{_unitdir}/blog-halt.service
%{_unitdir}/blog-kexec.service
%{_unitdir}/blog-poweroff.service
%{_unitdir}/blog-quit.service
%{_unitdir}/blog-reboot.service
%{_unitdir}/blog-store-messages.service
%{_unitdir}/blog-switch-initramfs.service
%{_unitdir}/blog-switch-root.service
%{_unitdir}/blog-umount.service
%{_unitdir}/blog.service
%{_unitdir}/systemd-ask-password-blog.path
%{_unitdir}/systemd-ask-password-blog.service
%{_unitdir}/default.target.wants/blog-quit.service
%{_unitdir}/emergency.target.wants/blog-quit.service
%{_unitdir}/halt.target.wants/blog-halt.service
%{_unitdir}/halt.target.wants/blog-switch-initramfs.service
%{_unitdir}/initrd-switch-root.target.wants/blog-switch-root.service
%{_unitdir}/initrd-switch-root.target.wants/blog.service
%{_unitdir}/kexec.target.wants/blog-kexec.service
%{_unitdir}/kexec.target.wants/blog-switch-initramfs.service
%{_unitdir}/local-fs-pre.target.wants/blog-umount.service
%{_unitdir}/poweroff.target.wants/blog-poweroff.service
%{_unitdir}/poweroff.target.wants/blog-switch-initramfs.service
%{_unitdir}/reboot.target.wants/blog-reboot.service
%{_unitdir}/reboot.target.wants/blog-switch-initramfs.service
%{_unitdir}/rescue.target.wants/blog-quit.service
%{_unitdir}/sysinit.target.wants/blog-store-messages.service
%{_unitdir}/sysinit.target.wants/blog.service
%ghost %attr(0644,root,root) %{_unitdir}/systemd-ask-password-blog.service.wants/systemd-vconsole-setup.service

%changelog
* Thu Apr 17 2025 Dr. Werner Fink <werner@suse.de>
- Add patch blog-3215.patch
  * Try to avoid blocking mode of 3215 console on s390x as holding
    the output at `MORE' stops blogd, that is that it can not see
    any messages over its socket like switch of the root file system.
* Thu Apr 17 2025 Dr. Werner Fink <werner@suse.de>
- Add patch blog-install.patch
  * Fixes install problems
  * Use module-setup.sh to install in BUILDROOT
* Wed Apr 16 2025 Dr. Werner Fink <werner@suse.de>
- Update to version 2.34
  * Make it work on s390x (still no 3215 console)
    This is a bug fix release.  But still no support in conmode
    3215 as there is a race triggered by using conmode 3215.
    The order of the systemd units seems to change with this
    console mode.
* Fri Apr 11 2025 Dr. Werner Fink <werner@suse.de>
- Use rpm-config-SUSE instead of suse-module-tools for suse version
  above 1550 and add code for the missing macros for older
  distributions like leap 15.6
* Thu Apr 10 2025 Dr. Werner Fink <werner@suse.de>
- The suse-module-tools are required at build otherwise blog
  is not in the initrd
* Thu Apr  3 2025 Dr. Werner Fink <werner@suse.de>
- Update to version 2.32
  * Better 3270 console support, use uevent below /sys file system
* Wed Apr  2 2025 Dr. Werner Fink <werner@suse.de>
- Update to version 2.31
  * Handel BS on password prompt as well
  * Drop spining code as systemd uses clear to end of line
    escape sequence (hard coded!) for its cylon lines.
- blog: again suggest blog-plymouth
* Mon Mar 31 2025 Dr. Werner Fink <werner@suse.de>
- Update to version 2.30
  * The asking variable is not shared
  * Allow password asking prompt to be repeated if empty.
  * Make spinner support UTF-8 multibyte conform.
  * Spinner lines of system still not handled.
* Fri Mar 28 2025 Dr. Werner Fink <werner@suse.de>
- Update to version 2.29
  * Make sure that password prompt is seen Latest
    Use a temporary buffer to be silent during asking passwords.
    And stop system console output during password questions
    only if temporary buffer becomes short. As well as do coloring
    on /dev/ttysclp0 for S390.
- Drop patch.patch as now upstream
* Fri Mar 28 2025 Dr. Werner Fink <werner@suse.de>
- Modify temporary patch patch.patch
  * Use a temporary buffer to be silent during asking passwords
  * Stop system console output during password questions only
    if temporary buffer becomes short
* Thu Mar 27 2025 Dr. Werner Fink <werner@suse.de>
- Add temporary patch named patch.patch
  * Stop system console output during password questions
  * Do coloring on /dev/ttysclp0
* Wed Mar 12 2025 Dr. Werner Fink <werner@suse.de>
- blog: recommend blog-plymouth instead of only suggesting
  * More house advertising to make plymouth support of blogd
    more familiar and known by the users
* Wed Nov 29 2023 Dr. Werner Fink <werner@suse.de>
- Update to version 2.28
  * UTMP support is gone, remove dependency also add support for
    initramfs at shutdown.
* Mon Jul 10 2023 Dr. Werner Fink <werner@suse.de>
- Fix big endian cast problems to be able to read commands
  and answers (blogctl) as well as passphrases (blogd)
* Tue Dec 27 2022 Ludwig Nussel <lnussel@suse.com>
- Replace transitional %%usrmerged macro with regular version check (boo#1206798)
* Fri Dec  3 2021 Dr. Werner Fink <werner@suse.de>
- Update to version 2.26
  * On s390/x and PPC64 gcc misses unused arg0
- Remove patch fcb9e0c2.patch as now part of tar ball
* Thu Dec  2 2021 Dr. Werner Fink <werner@suse.de>
- Add upstream patch fcb9e0c2.patch
  * On s390/x and PPC64 gcc misses unused arg0
* Thu Dec  2 2021 Dr. Werner Fink <werner@suse.de>
- Update to version 2.24
  * Avoid install errror due missed directory
* Thu Dec  2 2021 Dr. Werner Fink <werner@suse.de>
- Update to version 2.22
  * Avoid KillMode=none for newer systemd version as well as rework
    the systemd unit files of blog (boo#1186506)
* Thu Sep 30 2021 Dr. Werner Fink <werner@suse.de>
- Move to /usr for UsrMerge (boo#1191057)
* Fri Apr  9 2021 Dr. Werner Fink <werner@suse.de>
- Update to version 2.21
  * Merge pull request #4 from samueldr/fix/makefile
    Fixup Makefile for better build system support
  * Silent new gcc compiler
* Fri Apr  9 2021 Dr. Werner Fink <werner@suse.de>
- Fix package split done for shared library packaging guideline (bsc#1184479).
* Thu Jan  9 2020 Dr. Werner Fink <werner@suse.de>
- Update to version 2.20
  * Silent some gcc warnings, also avoid common variable (boo#1160385)
  * Include <sys/sysmacros.h> for makedev
  * sort input files (boo#1041090)
  * libconsole: never return empty list from getconsoles()
  * libconsole: Really allow to use /dev/console as a fallback in showconsole
  * libconsole: Add console into the list only when successfully allocated
  * libconsole: Correctly ignore early consoles
- Remove obsolate patch blog-Remove-unused-header.patch
* Fri Aug 30 2019 Bjørn Lie <bjorn.lie@gmail.com>
- Add blog-Remove-unused-header.patch: Fix build with new glibc
  (gh#bitstreamout/showconsole#3).
* Sat Apr 20 2019 Jan Engelhardt <jengelh@inai.de>
- Implement shared library packaging guideline.
* Thu Aug  2 2018 werner@suse.de
- Update to version 2.19 which integrates the patches now removed:
  * sysmacros.patch
  * libconsole-Really-allow-to-use-dev-console-as-a-fall.patch
  * libconsole-never-return-empty-list-from-getconsoles.patch
  * showconsole-2.18.tar.gz
  * libconsole-Add-console-into-the-list-only-when-succe.patch
  * libconsole-Correctly-ignore-early-consoles.patch
  as well as the changes
  * Correct wants directory for systemd-ask-password-blog.service
  * Sort input files for reproducible builds
* Wed Aug  1 2018 schwab@suse.de
- sysmacros.patch: Include <sys/sysmacros.h> for makedev
* Mon Mar 19 2018 kukuk@suse.de
- Use %%license instead of %%doc [bsc#1082318]
* Tue Dec 12 2017 pmladek@suse.com
- hardening of the console list generation (bsc#1071568):
  * libconsole-never-return-empty-list-from-getconsoles.patch
  * libconsole-Really-allow-to-use-dev-console-as-a-fall.patch
  * libconsole-Add-console-into-the-list-only-when-succe.patch
  * libconsole-Correctly-ignore-early-consoles.patch
* Mon Nov  6 2017 werner@suse.de
- Change description of blog-plymouth in same manner as used by
  the release notes
* Thu Apr 27 2017 werner@suse.de
- Add coreutils as required by post scriptlet (boo#1036436)
* Wed Jan 25 2017 werner@suse.de
- Use github source from tagged version
* Wed Jan 25 2017 werner@suse.de
- Use https://github.com/bitstreamout/showconsole as URL
* Thu Aug 11 2016 olaf@aepfle.de
- Install binaries with read permissions (bnc#990837)
* Mon Feb 22 2016 werner@suse.de
- Do not use privata glibc API (boo#967437) but implement
  missing shared memory mkstemp()
- Remove patch remove-bad-symbol-use.patch
* Mon Feb 22 2016 schwab@suse.de
- remove-bad-symbol-use.patch: Remove bad use of internal glibc interface
  (bnc#967437)
* Fri Feb 19 2016 werner@suse.de
- Make clear that blog is split off from sysvinit-tools
- Avoid to be tagged with GLIBC_PRIVATE
- Use libblogger.so with version, that is major and minor
* Fri Feb 19 2016 werner@suse.de
- Bug fix version: Handle chached password request gracefully
* Wed Feb 10 2016 meissner@suse.com
- add blog-rpmlintrc. The all-manual handling of systemd services
  is required according to Werner.
* Thu Feb  4 2016 werner@suse.de
- Let libblogger become a shared library
* Fri Jan 22 2016 werner@suse.de
- Clean up service uits for close and umount
* Fri Jan 15 2016 werner@suse.de
- First initial package after splitting apart from sysvinit
  * Now blogd can replace plymouth(9) even from initrd
  * Also blogd is able to handle password requests from
    from systemd API
  * The blogd daemon writes out console messages even on reboot
    or halt up to the file systems become unavailable.
  * No locking of the console devices, no frame buffer switching.