]> TLD Linux GIT Repositories - packages/php-dirs.git/commitdiff
- from PLD
authorMarcin Krol <hawk@tld-linux.org>
Sat, 18 Jul 2015 14:45:42 +0000 (14:45 +0000)
committerMarcin Krol <hawk@tld-linux.org>
Sat, 18 Jul 2015 14:45:42 +0000 (14:45 +0000)
php-dirs.spec [new file with mode: 0644]
php-dirs.tmpfiles [new file with mode: 0644]
php-session.sh [new file with mode: 0755]

diff --git a/php-dirs.spec b/php-dirs.spec
new file mode 100644 (file)
index 0000000..cf0b01c
--- /dev/null
@@ -0,0 +1,64 @@
+# TODO
+# - move tmpwatch S: to php-session package (as session files file storage no
+#   longer can cleanup itself due dir perms)
+Summary:       Common dirs for different PHP versions
+Summary(pl.UTF-8):     Wspólne katalogi dla różnych wersji PHP
+Name:          php-dirs
+Version:       1.5
+Release:       2
+License:       GPL
+Group:         Base
+Source0:       php-session.sh
+Source1:       %{name}.tmpfiles
+BuildRequires: rpmbuild(macros) >= 1.644
+Requires(postun):      /usr/sbin/groupdel
+Requires(pre): /usr/bin/getgid
+Requires(pre): /usr/sbin/groupadd
+Suggests:      tmpwatch
+Provides:      group(http)
+BuildArch:     noarch
+BuildRoot:     %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
+
+%description
+Common directories for PHP version 4 and version 5.
+
+%description -l pl.UTF-8
+Wspólne katalogi dla PHP w wersji 4 oraz 5.
+
+%prep
+
+%install
+rm -rf $RPM_BUILD_ROOT
+install -d $RPM_BUILD_ROOT{%{php_data_dir}/tests,/etc/cron.hourly,/var/{cache,log,run}/php,/var/log/archive/php} \
+       $RPM_BUILD_ROOT%{_docdir}/phpdoc \
+       $RPM_BUILD_ROOT%{systemdtmpfilesdir}
+
+install -p %{SOURCE0} $RPM_BUILD_ROOT/etc/cron.hourly
+cp -p %{SOURCE1} $RPM_BUILD_ROOT%{systemdtmpfilesdir}/%{name}.conf
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%pre
+%groupadd -g 51 http
+
+%postun
+if [ "$1" = "0" ]; then
+       %groupremove http
+fi
+
+%files
+%defattr(644,root,root,755)
+%{systemdtmpfilesdir}/%{name}.conf
+%attr(755,root,root) %{_sysconfdir}/cron.hourly/php-session.sh
+%dir %{php_data_dir}
+%dir %{php_data_dir}/tests
+%dir %{_docdir}/phpdoc
+%attr(775,root,http) %dir %verify(not group mode) /var/log/php
+%attr(770,root,root) %dir %verify(not group mode) /var/log/archive/php
+# no +r, so only predictable names can be used. currently php-soap wsdl cache is there
+%attr(730,root,http) %dir %verify(not group mode) /var/cache/php
+# http needs only x for directory (otherwise it knows session file
+# names and can read it contents)
+# keep o+x for fcgi.sock (lighttpd)
+%attr(731,root,http) %dir %verify(not group mode) /var/run/php
diff --git a/php-dirs.tmpfiles b/php-dirs.tmpfiles
new file mode 100644 (file)
index 0000000..5f8fa50
--- /dev/null
@@ -0,0 +1 @@
+d /var/run/php 0731 root http -
diff --git a/php-session.sh b/php-session.sh
new file mode 100755 (executable)
index 0000000..d7bc1a7
--- /dev/null
@@ -0,0 +1,48 @@
+#!/bin/sh
+
+[ -x /usr/sbin/tmpwatch ] || exit 0
+
+session_dirs="/var/run/php /var/run/php-ug"
+
+# use tmpwatch with --test to remove only files matching to 'sess_*' pattern
+cleanup_dir() {
+       local session_dir=$1
+
+       test -d "$session_dir" || return
+
+       /usr/sbin/tmpwatch $gc_time $session_dir --test | while read action type file; do
+               case "$action $type $file" in
+               'removing file '*/sess_*)
+                       rm "$file"
+                       ;;
+               esac
+       done
+}
+
+# find minimum gc time from any of the php engines
+find_gc_time() {
+       gc_time=0
+       local gc php
+       for php in php php4 php52 php53 php54 php55 php56; do
+               gc=
+               if [ -x /usr/bin/$php ]; then
+                       gc=$($php -r 'echo max(round(ini_get("session.gc_maxlifetime")/3600), 1);' 2> /dev/null)
+               elif [ -r /etc/$php/php.ini ]; then
+                       gc=$(awk -F"=" '/^session.gc_maxlifetime[ \t]*=/ { t=sprintf("%d", ($2/3600)); if (t<1) { t=1; }; print t; exit;}' /etc/$php/php.ini)
+               fi
+               [ -n "$gc" ] || continue
+
+               if [ "$gc" -lt "$gc_time" ] || [ $gc_time -eq 0 ]; then
+                       gc_time=$gc
+               fi
+       done
+}
+
+find_gc_time
+[ $gc_time -gt 0 ] || exit 0
+
+for session_dir in $session_dirs; do
+       cleanup_dir $session_dir
+done
+
+exit 0