From d4b65a63c42286723427f726be2819b2bb6f1ff9dbac09911f5c704207f8f776 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Chv=C3=A1tal?= Date: Thu, 19 Jun 2014 09:12:17 +0000 Subject: [PATCH] Accepting request 238043 from home:mcaj:branches:server:irc Hi bitlbee can be run ad deamon now ! for security reason its run as user bitlbee. here is a full list of changes i did there: - Added init.d and systemd to be able run the bitlbee as standard service. - Rc$service script is runnig as symlink for systemd and init.d. - Improved way how user bitlbee is add into system via rpm. - Fixed warning about wrong license: its still "GNU General Public License version 2 (GPL v2)" but osc marks it via shorcut : GPL-2.0+ - The PID directory is /var/run/bitlbee/ or /run/bitlbee/ depends on the version. - The PID directory is created via systemd or initd script, bacuse its in tmpfs. - Each BuildRequires is on one line to avoid duplicate packages. - Removed if for SLES9 - not need any more - Run spec-clean on the spec file and fixed a small bug is spec file after clearing no "fixme" any more there. ps : the warning bitlbee.x86_64: W: call-to-mktemp /usr/sbin/bitlbee need to be patch in future, however my C skills are very low .... OBS-URL: https://build.opensuse.org/request/show/238043 OBS-URL: https://build.opensuse.org/package/show/server:irc/bitlbee?expand=0&rev=23 --- bitlbee.changes | 33 ++++++++++ bitlbee.init.d-suse.in | 123 ++++++++++++++++++++++++++++++++++ bitlbee.service-suse.in | 29 ++++++++ bitlbee.spec | 143 +++++++++++++++++++++++++++++----------- 4 files changed, 291 insertions(+), 37 deletions(-) create mode 100644 bitlbee.init.d-suse.in create mode 100644 bitlbee.service-suse.in diff --git a/bitlbee.changes b/bitlbee.changes index e6506f1..fb9d4ef 100644 --- a/bitlbee.changes +++ b/bitlbee.changes @@ -1,3 +1,36 @@ +------------------------------------------------------------------- +Wed Jun 18 14:11:16 UTC 2014 - mcaj@suse.com + +- Removed if for SLES9 - not need any more +- Run spec-clean on the spec file. + +------------------------------------------------------------------- +Wed Jun 18 13:07:23 UTC 2014 - mcaj@suse.com + +- The PID directory is /var/run/bitlbee/ or /run/bitlbee/ depends on the version. +- The PID directory is created via systemd or initd script, bacuse its in tmpfs. +- Each BuildRequires is on one line to avoid duplicate packages. + +------------------------------------------------------------------- +Tue Jun 17 13:05:14 UTC 2014 - mcaj@suse.com + +- I fixed systemd service sctipt to be able run under the user bitlbee. +- The PID file is now /var/run/bitlbee/bitlbee.pid. +- The directory /var/run/bitlbee/ is own by user bitlbee. +- The build is also done for pid and sock under /var/run/bitlbee/. +- The creating the user bitlbee is done via the command useradd now. +- Information about creating new user on directory is accnouce via logger now. +- Added copyrigth and credention to init and systemd service file. + +------------------------------------------------------------------- +Fri Jun 6 12:32:29 UTC 2014 - mcaj@suse.com + +- Added init.d and systemd to be able run the bitlbee as standard service. +- Improved way how user bitlbee is add into system via rpm. +- Fixed warning about wrong license: + its still "GNU General Public License version 2 (GPL v2)" but osc marks it + via shorcut : GPL-2.0+ + ------------------------------------------------------------------- Thu Jan 30 19:17:00 UTC 2014 - cs@suse.com diff --git a/bitlbee.init.d-suse.in b/bitlbee.init.d-suse.in new file mode 100644 index 0000000..e5d21eb --- /dev/null +++ b/bitlbee.init.d-suse.in @@ -0,0 +1,123 @@ +#!/bin/sh +# Copyright (c) 1995-2014 SUSE Linux AG, Nuernberg, Germany. +# All rights reserved. +# +# Author: Martin Caj +# +# /etc/init.d/bitlbee +# +# and it's symbolic link +# +# /usr/sbin/rcbitlbee +# +### BEGIN INIT INFO +# Provides: bitlbee +# Required-Start: $remote_fs $syslog +# Should-Start: +# Required-Stop: $remote_fs $syslog +# Should-Stop: +# Default-Start: 2 3 5 +# Default-Stop: 0 1 6 +# Description: Start bitblee IM to IRC gateway +# Short-Description: IM to IRC gateway +### END INIT INFO + +# Check for missing binaries (stale symlinks should not happen) +BITLBEE_BIN="/usr/sbin/bitlbee" +BITLBEE_ETC="/etc/bitlbee" +BITLBEE_PIDDIR="/var/run/bitlbee" +BITLBEE_PID=""$BITLBEE_PIDDIR"/bitlbee.pid" +BITLBEE_PARAM="-p $BITLBEE_PID" + +test -x $BITLBEE_BIN || { echo "$BITLBEE_BIN not installed"; + if [ "$1" = "stop" ]; then exit 0; + else exit 5; fi; } + +# /var/run might be tmfs, so if $BITLBEE_PIDDIR not exist yet create it now. +if [ ! -d "$BITLBEE_PIDDIR" ]; then + /usr/bin/mkdir -p "$BITLBEE_PIDDIR" + /usr/bin/chown bitlbee.bitlbee "$BITLBEE_PIDDIR" +fi + +# Shell functions sourced from /etc/rc.status: +# rc_check check and set local and overall rc status +# rc_status check and set local and overall rc status +# rc_status -v ditto but be verbose in local rc status +# rc_status -v -r ditto and clear the local rc status +# rc_status -s display "skipped" and exit with status 3 +# rc_status -u display "unused" and exit with status 3 +# rc_failed set local and overall rc status to failed +# rc_failed set local and overall rc status to +# rc_reset clear local rc status (overall remains) +# rc_exit exit appropriate to overall rc status +# rc_active checks whether a service is activated by symlinks +# rc_splash arg sets the boot splash screen to arg (if active) +. /etc/rc.status + +# First reset status of this service +rc_reset + +# Return values acc. to LSB for all commands but status: +# 0 - success +# 1 - generic or unspecified error +# 2 - invalid or excess argument(s) +# 3 - unimplemented feature (e.g. "reload") +# 4 - user had insufficient privileges +# 5 - program is not installed +# 6 - program is not configured +# 7 - program is not running +# 8--199 - reserved (8--99 LSB, 100--149 distrib, 150--199 appl) +# +# Note that starting an already running service, stopping +# or restarting a not-running service as well as the restart +# with force-reload (in case signaling is not supported) are +# considered a success. + +case "$1" in + start) + echo -n "Starting bitlbee server" + startproc $BITLBEE_BIN $BITLBEE_PARAM + rc_status -v + ;; + stop) + echo -n "Shutting down bitlbee server" + killproc -TERM $BITLBEE_BIN + rc_status -v + ;; + try-restart) + $0 status >/dev/null && $0 restart + rc_status + ;; + restart) + $0 stop + $0 start + rc_status + ;; +# force-reload) +# echo -n "Reload console mouse support (bitlbee)" +# $0 stop && $0 start +# rc_status +# ;; +# reload) +# echo -n "Reload console mouse support (bitlbee)" +# rc_failed 3 +# rc_status -v +# ;; + status) + echo -n "Checking for bitlbee server: " + checkproc $BITLBEE_BIN + rc_status -v + ;; + probe) + BITLBEE_RESTART="False" + for file in "$BITLBEE_SYSCONFIG" "$BITLBEE_ETC"/* ; do + test "$file" -nt "$BITLBEE_PID" && BITLBEE_RESTART="True" + done + test "$BITLBEE_RESTART" = "True" && echo restart + ;; + *) + echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload|reload|probe}" + exit 1 + ;; +esac +rc_exit diff --git a/bitlbee.service-suse.in b/bitlbee.service-suse.in new file mode 100644 index 0000000..6f05ea0 --- /dev/null +++ b/bitlbee.service-suse.in @@ -0,0 +1,29 @@ +# Copyright (c) 1995-2014 SUSE Linux AG, Nuernberg, Germany. +# All rights reserved. +# +# Author: Martin Caj +# +# /usr/lib/systemd/system/bitlbee-server.service +# +# and it's symbolic link +# +# /usr/sbin/rcbitlbee + +[Unit] +Description=Bitblee Daemonm the IM to IRC gateway +After=network.target + +[Service] +Type=forking +ExecStartPre=/usr/bin/mkdir -p /run/bitlbee +ExecStartPre=/usr/bin/chown bitlbee.bitlbee /run/bitlbee +ExecStart=/usr/sbin/bitlbee +PIDFile=/var/run/bitlbee/bitlbee.pid +ExecReload=/bin/kill -HUP $MAINPID +KillMode=process +Restart=always +User=bitlbee +Group=bitlbee + +[Install] +WantedBy=multi-user.target diff --git a/bitlbee.spec b/bitlbee.spec index d326a37..ec0b51d 100644 --- a/bitlbee.spec +++ b/bitlbee.spec @@ -1,4 +1,7 @@ -# vim: set ts=4 sw=4 et: +# +# spec file for package bitlbee +# +# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany. # Copyright (c) 2012 Pascal Bleser # # All modifications and additions to the file contributed by third parties @@ -11,25 +14,51 @@ # published by the Open Source Initiative. # Please submit bugfixes or comments via http://bugs.opensuse.org/ +# -# See http://bugs.bitlbee.org/bitlbee/ticket/1004 + +# Define way to log messages for the machine: +%define nnmmsg logger -t %{name}/rpm %if 0%{?suse_version} >= 1100 %define with_libotr 1 %endif - +#define systemd for the new OpenSUSE only: +%if 0%{?suse_version} >= 1310 + %define with_systemd 1 +%else + %define with_systemd 0 +%endif +# define patch where the service will have pid and socket store: +%if 0%{?suse_version} >= 1310 + %define daemon_piddir /run/%{name} +%else + %define daemon_piddir %{_localstatedir}/run/%{name} +%endif Name: bitlbee Version: 3.2.1 Release: 0 Summary: IRC to other Chat Networks Gateway +License: GPL-2.0 +Group: Productivity/Networking/IRC +Url: http://www.bitlbee.org/ Source: http://get.bitlbee.org/src/bitlbee-%{version}.tar.gz Source1: %{name}.xinetd-suse.in -URL: http://www.bitlbee.org/ -Group: Productivity/Networking/IRC -License: GNU General Public License version 2 (GPL v2) -BuildRoot: %{_tmppath}/build-%{name}-%{version} +Source2: %{name}.service-suse.in +Source3: %{name}.init.d-suse.in +BuildRequires: gcc +BuildRequires: glib2-devel +BuildRequires: glibc-devel +BuildRequires: gnutls-devel +BuildRequires: libgcrypt-devel +BuildRequires: lzo-devel +BuildRequires: make +BuildRequires: pkgconfig +BuildRequires: zlib-devel +Requires: logrotate Requires: xinetd -BuildRequires: make gcc glibc-devel pkgconfig gnutls-devel libgcrypt-devel -BuildRequires: zlib-devel glib2-devel lzo-devel glib2-devel +Requires(pre): %{_sbindir}/groupadd +Requires(pre): %{_sbindir}/useradd +BuildRoot: %{_tmppath}/%{name}-%{version}-build %if 0%{?suse_version} >= 1010 BuildRequires: xmlto %endif @@ -46,8 +75,9 @@ BuildRequires: libotr-devel %if 0%{?suse_version} >= 1110 BuildRequires: libpurple-devel %endif - -PreReq: /usr/sbin/groupadd /usr/sbin/useradd +%if %{with_systemd} +BuildRequires: systemd +%endif %description We are both console lovers. But it is annoying to have a few tty's open with @@ -94,13 +124,10 @@ This package contains the user guide: %setup -q # make it verbose! -find . -name Makefile -exec %__sed -i.orig 's|@$(CC)|$(CC)|;s|@$(LD)|$(LD)|' {} \; +find . -name Makefile -exec sed -i.orig 's|@$(CC)|$(CC)|;s|@$(LD)|$(LD)|' {} \; %build -# fix to find the glib-2.0 pkgconfig on SLES_9 -%if 0%{?suse_version} < 1030 -export PKG_CONFIG_PATH="/opt/gnome/%{_lib}/pkgconfig" -%endif + # not autoconf CFLAGS="%{optflags} -fno-strict-aliasing" \ CXXFLAGS="%{optflags} -fno-strict-aliasing" \ @@ -111,9 +138,9 @@ CXXFLAGS="%{optflags} -fno-strict-aliasing" \ --mandir="%{_mandir}" \ --datadir="%{_datadir}/%{name}" \ --plugindir="%{_libdir}/%{name}" \ - --pidfile="%{_localstatedir}/run/%{name}.pid" \ + --pidfile="%{daemon_piddir}/%{name}.pid" \ --config="%{_localstatedir}/lib/%{name}" \ - --ipcsocket="%{_localstatedir}/run/%{name}.sock" \ + --ipcsocket="%{daemon_piddir}/%{name}.sock" \ %if 0%{?suse_version} >= 1110 --purple=1 \ %else @@ -136,53 +163,95 @@ CXXFLAGS="%{optflags} -fno-strict-aliasing" \ --plugins=1 \ --ssl=gnutls -%__make %{?_smp_flags} +make %{?_smp_flags} %install -%__install -d "%{buildroot}%{_mandir}/man1" -%__install -d "%{buildroot}%{_mandir}/man8" -%__install -d "%{buildroot}%{_sysconfdir}/bitlbee" -%__install -d "%{buildroot}%{_localstatedir}/lib/bitlbee" +install -d "%{buildroot}%{_mandir}/man1" +install -d "%{buildroot}%{_mandir}/man8" +install -d "%{buildroot}%{_sysconfdir}/bitlbee" +install -d "%{buildroot}%{_localstatedir}/lib/bitlbee" %if 0%{?suse_version} >= 1010 -%__make DESTDIR="%{buildroot}" -C doc +make DESTDIR=%{buildroot} -C doc %endif -%makeinstall install-etc +%{makeinstall} install-etc -%__install -d "%{buildroot}%{_sysconfdir}/xinetd.d" -%__sed -e "s+@@BITLBEE@@+%{_sbindir}/bitlbee+g" \ +install -d "%{buildroot}%{_sysconfdir}/xinetd.d" +sed -e "s+@@BITLBEE@@+%{_sbindir}/bitlbee+g" \ < "%{SOURCE1}" > "%{buildroot}%{_sysconfdir}/xinetd.d/bitlbee" %if 0%{?suse_version} >= 1030 %fdupes -s %endif -%__install -d "%{buildroot}%{_docdir}/%{name}" +%if %{with_systemd} + install -D -p -m 0644 %{SOURCE2} %{buildroot}%{_unitdir}/%{name}.service + ln -s %{_sbindir}/service %{buildroot}/%{_sbindir}/rc%{name} +%else + install -D -p -m 0755 %{SOURCE3} %{buildroot}%{_initrddir}/%{name} + ln -s %{_initrddir}/%{name} %{buildroot}/%{_sbindir}/rc%{name} +%endif + +install -d "%{buildroot}%{_docdir}/%{name}" LM="$PWD/%{name}.lang" echo -n > "$LM" for f in COPYING doc/AUTHORS doc/CHANGES doc/CREDITS doc/FAQ doc/README; do b="${f##*/}" - %__install -m0644 "$f" "%{buildroot}%{_docdir}/%{name}/$b" + install -m0644 "$f" "%{buildroot}%{_docdir}/%{name}/$b" echo "%doc %{_docdir}/%{name}/$b" >>"$LM" done -%__install -d "%{buildroot}%{_docdir}/%{name}/user-guide" -%__cp -a doc/user-guide/*.{txt,html} "%{buildroot}%{_docdir}/%{name}/user-guide/" +install -d "%{buildroot}%{_docdir}/%{name}/user-guide" +cp -a doc/user-guide/*.{txt,html} "%{buildroot}%{_docdir}/%{name}/user-guide/" + %pre -/usr/bin/getent group bitlbee &>/dev/null || /usr/sbin/groupadd -r bitlbee &>/dev/null || : -/usr/bin/getent passwd bitlbee &>/dev/null || \ -/usr/sbin/useradd -g bitlbee -s /bin/false -r -c "User for bitlbee" \ - -d "%{_localstatedir}/run/bitlbee" bitlbee &>/dev/null || : +# create default user if its need it. +if id bitlbee > /dev/null 2>&1;then + : OK user %{name} already present + %{nnmmsg} "info: The user %{name} for package %{name} is already present" +else + useradd -r -g bitlbee -s /bin/false -c "bitlbee User" -d %{_localstatedir}/lib/%{name} bitlbee 2> /dev/null || : + %{nnmmsg} "Added user bitlbee for package %{name}" +fi -%clean -%{?buildroot:%__rm -rf "%{buildroot}"} +%if %{with_systemd} + %service_add_pre %{name}.service +%endif + +%post +%if %{with_systemd} + %service_add_post %{name}.service +%else +%{fillup_and_insserv -n %{name} } +%endif + +%preun +%if %{with_systemd} + %service_del_preun %{name}.service +%else + %stop_on_removal %{name} +%endif + +%postun +%if %{with_systemd} + %service_del_postun %{name} +%else + %restart_on_update %{name} + %insserv_cleanup +%endif %files -f %{name}.lang %defattr(-,root,root) %doc %dir %{_docdir}/%{name} %config(noreplace) %{_sysconfdir}/xinetd.d/bitlbee %attr(0750,root,bitlbee) %dir %{_sysconfdir}/bitlbee +%if %{with_systemd} +%{_unitdir}/%{name}.service +%else +%attr(755,root,root) %{_initrddir}/%{name} +%endif +%{_sbindir}/rc%{name} %config(noreplace) %attr(0640,root,bitlbee) %{_sysconfdir}/bitlbee/bitlbee.conf %config(noreplace) %attr(0640,root,bitlbee) %{_sysconfdir}/bitlbee/motd.txt %{_sbindir}/bitlbee