Пакет sp: Specfile

Name:           sp
Version:        4.2
Release:        alt6.qa0.M60T.1
Summary:        School Portal
Summary(ru):    Школьный портал
License:        Distributable, non-free
Group:          Education
Url:            http://spcms.ru
Packager:       Andrey Stroganov <dja@altlinux.org>
Source:         sp-4.2.tar
BuildRequires:  fpc
Requires:       perl-base perl-CGI perl-CGI-Session perl-Archive-Zip perl-GD perl-GD-Graph perl-CGI-SpeedyCGI perl-Magick perl-Mail-Sender perl-Text-Iconv perl-DBD-InterBase perl-HTML-TagFilter pwgen perl-IO-Compress
Requires(post): apache2 firebird-classic squid-server net-tools apache-common
Autoprov:       0
Autoreq:        0

# for UDF, because:
# verify-elf: ERROR: ./usr/lib/firebird/UDF/UDFLib.dll: TEXTREL entry found: 0x00000000
%set_verify_elf_method textrel=relaxed

# -------------------------------------------
# Описание на английском
# -------------------------------------------
%description
Integrated school control system.

# -------------------------------------------
# Описание на русском
# -------------------------------------------
%description -l ru
Комплексная система управления школой.

# add by snejok@
# -------------------------------------------
# Распаковываем
# -------------------------------------------
%prep
%setup
# Build UDFlib for Firebird
mkdir -p usr/lib/firebird/UDF/
cd UDFlib-src
fpc -Mdelphi -Xc -Cccdecl UDFLib.dpr -oUDFLib.dll
mv UDFLib.dll ..
cd ..
rm -rf UDFlib-src

# -------------------------------------------
# Установка. Устанавливаем всё, что нужно в $RPM_BUILD_ROOT как в /
# -------------------------------------------
%install
mkdir -p %buildroot/
mkdir -p %buildroot/var/www/cgi-bin/sp/
mkdir -p %buildroot/var/www/html/sp/

# add by snejok@
cp -r * %buildroot/

# UDFlib
mkdir -p      %buildroot/%_libdir/firebird/UDF/
mv UDFLib.dll %buildroot/%_libdir/firebird/UDF/UDFLib.dll

# -------------------------------------------
# Список файлов, которые попадут в пакет
# -------------------------------------------
%files
%defattr(440, apache, apache, 755)
%attr(640,apache,apache)     %config(noreplace) /var/www/cgi-bin/sp/sp.conf
%dir /var/lib/firebird/xxi/
%attr(660,firebird,firebird) %config(noreplace) /var/lib/firebird/xxi/*
%attr(440,firebird,firebird) %_libdir/firebird/UDF/UDFLib.dll
%attr(640,apache,apache)     /var/www/html/.htaccess
%attr(640,apache,apache)     %config /etc/httpd2/conf/sites-available/000-sp.conf
%attr(750,root,root)         /usr/sbin/sp-add-admin
%attr(444,root,root) %doc /usr/share/doc/sp/LICENSE
%attr(444,root,root) %doc /usr/share/doc/sp/LICENSE.alt
%attr(444,root,root) %doc /usr/share/doc/sp/README
%dir /var/www/cgi-bin/sp/
%dir /var/www/html/sp/
%dir /usr/share/doc/sp/
/var/www/cgi-bin/sp/*
/var/www/html/sp/*
%ghost %attr(640,apache,squid) /var/www/sp_htpasswd
%ghost %attr(640,apache,squid) /var/www/sp_users_allowed

# -------------------------------------------
# Команды, выполняющиеся после распаковки файлов из пакета при установке на целевую систему
# -------------------------------------------
%post

# -----------------------------------------------------------
# Firebird классик:
# -----------------------------------------------------------
#chown -R firebird:firebird /var/lib/firebird/xxi/
#chmod 660 /var/lib/firebird/xxi/*.*
#chmod 755 /usr/lib/firebird/UDF/UDFLib.dll

# снимаем ограничение на 5 коннектов к fb
if ! grep -q "per_source = UNLIMITED" /etc/xinetd.d/firebird; then
	perl -i -p -e 's/^\s*disable\s+=\s+no$/disable = no\nper_source = UNLIMITED/' /etc/xinetd.d/firebird
fi

# без этого classic просто не работает, а нужен здесь и сейчас
# boris: если xinetd запущен не был, то его надо запустить руками -- такая идеология
# перезапуск по причинам:
# 1) чтобы xinetd заработал, если не работал
# 2) если xinetd работал, чтобы узнал о том, что теперь у нас есть fb
# 3) если xinetd и fb были установлены до нас и всё работало, ничего страшного
# service xinetd restart

# если xinetd не был стартован, стартуем, делаем своё, опускаем как было

# в каком состоянии xinetd?
#if service xinetd status; then
#    XINETD_WAS_STARTED=1
#else
#    XINETD_WAS_STARTED=0
#fi

# xinetd...
#if [ "$XINETD_WAS_STARTED" -eq "0" ]; then
#    # не был стартован
#    echo Temporary starting xinetd...
#    service xinetd start
#else
#    # был стартован. заставляем подхватить конфиг fb
#    echo xinetd in running, restarting to ensure fb config read...
#    service xinetd restart
#fi

# по умолчанию fb нет в автозапуске, включаем
# chkconfig firebird on

# -----------------------------------------------------------
# Apache
# -----------------------------------------------------------
a2enmod cgi
a2enmod rewrite
a2enmod deflate
a2enmod headers

# Выключем "It Works!"
a2dissite 000-default
# Включаем SP
a2ensite  000-sp

perl -i-original -p -e 's/^ServerTokens Full$/ServerTokens Prod/' /etc/httpd2/conf/extra-available/httpd-default.conf

chown apache2.apache2 /var/www/html/.htaccess

# chkconfig httpd2 on
# service httpd2 restart
service httpd2 condrestart

# в 5.0 уберём
chsh -s /bin/bash apache2

# -----------------------------------------------------------
# SP Setup
# -----------------------------------------------------------

cd /var/www/cgi-bin/sp/

perl setup.pl --yes

# Действие ($1)                     Значение параметра
# ====================================================
# Установка в первый раз            1
# Обновление                        2 или больше
# Удаление последней версии пакета  0

# выполнять только если установка в первый раз
# Експеримент: XXI поставляется опорталенной
#if [ "$1" -eq 1 ]; then
#	perl update_xxi.pl sp.conf sp.sql
#fi


# больше не нужны
rm -f -- update_xxi.pl
rm -f -- sp.sql

chmod 500 /usr/sbin/sp-add-admin

# xinetd не был стартован изначально, укладываем как было
#if [ "$XINETD_WAS_STARTED" -eq "0" ]; then
#    echo xinetd was stopped befor sp. Stopping back...
#    service xinetd stop
#fi

# -----------------------------------------------------------
# Squid: управление доступом в интернет
# -----------------------------------------------------------

if ! grep -q "^acl sp_users_allowed" /etc/squid/squid.conf; then
	# правим конфиг кальмара
	perl -i-original -p -e 's!^icap_enable on!icap_enable off!; s!^auth_param!#auth_param!; s!^acl password proxy_auth REQUIRED!#acl password proxy_auth REQUIRED!; s!^http_access deny all!#http_access deny all!; s!^http_access allow password!#http_access allow password!; s!^htcp_access allow localnet!#htcp_access allow localnet!' /etc/squid/squid.conf
	
	echo '
# ==============================
# School Portal Internet Control
# To disable replace /etc/squid/squid.conf with /etc/squid/squid.conf-original
# ==============================
auth_param basic program /usr/lib/squid/ncsa_auth /var/www/sp_htpasswd
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive on
acl sp_users_allowed proxy_auth "/var/www/sp_users_allowed"
http_access allow sp_users_allowed
http_access deny all
' >> /etc/squid/squid.conf
fi

# в 5.0 уберём
usermod -G wheel,_webserver apache2

# в 5.0 уберём
# чтобы было безопасно поставить второй раз, сначала проверим, потом допишем
APACHE_SUDOER_LINE='apache2      ALL=(ALL)       NOPASSWD: /usr/sbin/smbldap-useradd,/usr/sbin/smbldap-passwd,/usr/sbin/smbldap-usermod,/usr/sbin/smbldap-groupadd,/usr/bin/ldapsearch,/usr/bin/ldapmodify,/bin/touch,/bin/chmod,/etc/init.d/squid reload'
if ! grep -q "$APACHE_SUDOER_LINE" /etc/sudoers; then
	echo "$APACHE_SUDOER_LINE" >> /etc/sudoers
fi

# выполнять только если установка в первый раз
if [ "$1" -eq 1 ]; then

	echo 'auth = basic'                                 >> /var/www/cgi-bin/sp/sp.conf
	echo 'htpasswd = /var/www/sp_htpasswd'              >> /var/www/cgi-bin/sp/sp.conf
	echo 'sp_users_allowed = /var/www/sp_users_allowed' >> /var/www/cgi-bin/sp/sp.conf

fi

#touch /var/www/sp_htpasswd
#touch /var/www/sp_users_allowed

#chown apache2.squid  /var/www/sp_htpasswd  /var/www/sp_users_allowed
#chmod 660            /var/www/sp_htpasswd  /var/www/sp_users_allowed

# выполнять только если установка в первый раз
if [ "$1" -eq 1 ]; then

	# По дефолту никому в инет нельзя
	# для этого добавим юзера с неугадываемым паролем
	SP_HTPASSWD=$(pwgen --secure 32 1)
	/usr/bin/htpasswd -cb /var/www/sp_htpasswd sp_dummy_user $SP_HTPASSWD
	echo 'sp_dummy_user' >> /var/www/sp_users_allowed

fi

# chkconfig squid on
# service squid restart
service squid condrestart

# -----------------------------------------------------------
# Интеграция с LDAP
#
# Сегодня, 12 скн 2011, при установке ALT Linux 6 rc1 как сервера
# LDAP не настроен
#
# в 5.0 уберём в любом случае
# -----------------------------------------------------------

# mv -f /var/www/cgi-bin/sp/smbldap-passwd /usr/sbin/smbldap-passwd
# chown root.root /usr/sbin/smbldap-passwd /sbin/sp-ldap-setup
# chmod 755 /usr/sbin/smbldap-passwd /sbin/sp-ldap-setup

# выполнять только если установка в первый раз
# if [ "$1" -eq 1 ]; then
# 
# 	sp-ldap-setup
# 
# fi

echo ''
echo '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
echo '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
echo '!!!                                                              !!!'
echo '!!!       School Portal installed.                               !!!'
echo '!!!       Direct your browser to this server to log in.          !!!'
echo '!!!                                                              !!!'
echo '!!!       Login:    admin                                        !!!'
echo '!!!       password: smenimenya                                   !!!'
echo '!!!                                                              !!!'
echo '!!!       CHANGE PASSWORD NOW!                                   !!!'
echo '!!!                                                              !!!'
echo '!!!       Alphabet book: http://spcms.ru/download#abook          !!!'
echo '!!!       Support:       http://spcms.ru                         !!!'
echo '!!!                                                              !!!'
echo '!!!       Please, read in russian: /usr/share/doc/sp/README      !!!'
echo '!!!                                                              !!!'
echo '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
echo '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
echo ''
echo 'If not sure what to type in browser, try:'
ifconfig | awk '/inet addr/ {print $2}' | awk -F ':' '{print "http://"; $2}'
echo ''
echo ''

# -------------------------------------------
# Команды, выполняющиеся после при удалении пакета
# -------------------------------------------
%preun

# возвращаем всё как было
a2ensite  default
a2dissite 000-sp

%changelog
* Mon Apr 15 2013 Aleksey Avdeev <solo@altlinux.ru> 4.2-alt6.qa0.M60T.1
- Backports to t6
- Rebuild with apache2-2.2.24-alt0.M60T.1 (fix unmets)

* Fri Sep 21 2012 Repocop Q. A. Robot <repocop@altlinux.org> 4.2-alt6.qa1
- NMU (by repocop). See http://www.altlinux.org/Tools/Repocop
- applied repocop fixes:
  * vendor-tag for sp-debuginfo
  * vendor-tag for sp

* Thu Sep 13 2012 Andrey Stroganov <dja@altlinux.org> 4.2-alt6
- /usr/lib replaced with macros
* Thu Sep 5 2012 Andrey Stroganov <dja@altlinux.org> 4.2-alt5
- UDFlib source code
* Tue Sep 13 2011 Andrey Stroganov <dja@altlinux.org> 4.2-alt4
- added README, final installation message now shorter
* Mon Sep 12 2011 Andrey Stroganov <dja@altlinux.org> 4.2-alt3
- deps concretized, permissions fixed, spec cleanup and optimization,
- config cleanup, added useful details to installation message,
- postin: removed some warnings, config converted to in utf-8
* Thu Sep 1 2011 Andrey Stroganov <dja@altlinux.org> 4.2-alt2
- license added, spec cleanups
* Mon Jul 18 2011 Andrey Stroganov <dja@altlinux.org> 4.2-alt1
- initial build for alt 6