Tagarchief: rpmbuild

Cacti 1.0.4 op Centos7 met PHP7 en Percona-server

Als je een server hebt met Centos7 gecombineerd met PHP7.x en dus ook Percona Server 5.x geinstalleerd, dan is het installeren van Cacti wel een beetje een domper.

Want, de vereisten van Cacti op hun website zijn als volgt (belangrijkste items):

  • httpd,php,php-mysql,php-snmp
  • php-xml
  • mysql,mysql-server

Dat zou zeggen, de installatie is zo gedaan. Kwestie van yum install en klaar. Maar helaas;

Error: Package: 1:mariadb-5.5.52-1.el7.x86_64 (base)
           Requires: mariadb-libs(x86-64) = 1:5.5.52-1.el7
           Available: 1:mariadb-libs-5.5.52-1.el7.x86_64 (base)
               mariadb-libs(x86-64) = 1:5.5.52-1.el7
Error: Package: php-ldap-5.4.16-42.el7.x86_64 (base)
           Requires: php-common(x86-64) = 5.4.16-42.el7
           Installed: php-common-7.0.17-1.el7.remi.x86_64 (@remi-php70)
               php-common(x86-64) = 7.0.17-1.el7.remi
           Available: php-common-5.4.16-42.el7.x86_64 (base)
               php-common(x86-64) = 5.4.16-42.el7
Error: Package: php-snmp-5.4.16-42.el7.x86_64 (base)
           Requires: php-common(x86-64) = 5.4.16-42.el7
           Installed: php-common-7.0.17-1.el7.remi.x86_64 (@remi-php70)
               php-common(x86-64) = 7.0.17-1.el7.remi
           Available: php-common-5.4.16-42.el7.x86_64 (base)
               php-common(x86-64) = 5.4.16-42.el7
Error: php-mysql conflicts with php-mysqlnd-7.0.17-1.el7.remi.x86_64
Error: Package: php-mbstring-5.4.16-42.el7.x86_64 (base)
           Requires: php-common(x86-64) = 5.4.16-42.el7
           Installed: php-common-7.0.17-1.el7.remi.x86_64 (@remi-php70)
               php-common(x86-64) = 7.0.17-1.el7.remi
           Available: php-common-5.4.16-42.el7.x86_64 (base)
               php-common(x86-64) = 5.4.16-42.el7
Error: Package: cacti-1.0.4-1.el7.noarch (epel)
           Requires: php-mysql
           Available: php-mysqlnd-5.4.16-42.el7.x86_64 (base)
               php-mysql = 5.4.16-42.el7
           Installed: php-mysqlnd-7.0.17-1.el7.remi.x86_64 (@remi-php70)
               Not found
Error: Package: php-xml-5.4.16-42.el7.x86_64 (base)
           Requires: php-common(x86-64) = 5.4.16-42.el7
           Installed: php-common-7.0.17-1.el7.remi.x86_64 (@remi-php70)
               php-common(x86-64) = 7.0.17-1.el7.remi
           Available: php-common-5.4.16-42.el7.x86_64 (base)
               php-common(x86-64) = 5.4.16-42.el7
Error: Package: php-mysql-5.4.16-42.el7.x86_64 (base)
           Requires: php-pdo(x86-64) = 5.4.16-42.el7
           Installed: php-pdo-7.0.17-1.el7.remi.x86_64 (@remi-php70)
               php-pdo(x86-64) = 7.0.17-1.el7.remi
           Available: php-pdo-5.4.16-42.el7.x86_64 (base)
               php-pdo(x86-64) = 5.4.16-42.el7
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest

De optie –enablerepo=remi-php70 geeft wel een deel opgelost terug maar niet alles. Jammer genoeg.

Error: Package: cacti-1.0.4-1.el7.noarch (epel)
           Requires: php-mysql
           Available: php-mysql-5.4.16-42.el7.x86_64 (base)
               php-mysql = 5.4.16-42.el7
           Available: php-mysqlnd-5.4.16-42.el7.x86_64 (base)
               php-mysql = 5.4.16-42.el7
           Available: php-pecl-mysql-1.0.0-0.8.20151007git294ce3b.el7.remi.7.0.x86_64 (remi-php70)
               php-mysql = 1:1.0.0
           Available: php-pecl-mysql-1.0.0-0.9.20151007git294ce3b.el7.remi.7.0.x86_64 (remi-php70)
               php-mysql = 1:1.0.0
           Installed: php-mysqlnd-7.0.17-1.el7.remi.x86_64 (@remi-php70)
               Not found
           Available: php-mysqlnd-7.0.16-1.el7.remi.x86_64 (remi-php70)
               Not found
Error: Package: 1:mariadb-5.5.52-1.el7.x86_64 (base)
           Requires: mariadb-libs(x86-64) = 1:5.5.52-1.el7
           Available: 1:mariadb-libs-5.5.52-1.el7.x86_64 (base)
               mariadb-libs(x86-64) = 1:5.5.52-1.el7
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest

De optie –skip-broken geeft helemaal niet het gewenste resultaat. Oftewel we zijn weer terug bij af.

Er is een weg dat we het wel aan de praat krijgen middels de source RPM.

We maken allereerst een extra user aan “rpmbuild” en installeren de package rpmbuild. Onder de user rpmbuild downloaden we de source RPM voor cacti versie 1.0.4 en pakken deze uit:

useradd rpmbuild
yum install -y rpm-build
su - rpmbuild

wget https://dl.fedoraproject.org/pub/epel/7/SRPMS/c/cacti-1.0.4-1.el7.src.rpm

rpm -i cacti-1.0.4-1.el7.src.rpm

Er zijn dan een tweetal directories aangemaakt in de map “rpmbuild”. We open de directory “SPECS” en stellen de originele even veilig waarna we de “cacti.spec” openen met een text editor zoals VIM:cd

cd rpmbuild/

ls -l
total 0
drwxr-xr-x. 2 rpmbuild rpmbuild 124 Mar 31 13:46 SOURCES
drwxr-xr-x. 2 rpmbuild rpmbuild  24 Mar 31 13:46 SPECS

cd SPECS
cp cacti.spec cacti.orig

vim cacti.spec

Op regel nummer 13 en 14 vind je de vereisten php (en componenten) en mariadb terug. Deze kan je uitzetten door een ‘#’ er voor te zetten:

#Requires: php, php-ldap, php-mbstring, php-mysql, php-pdo, php-snmp, php-xml
#Requires: mariadb

Hierna moeten nog 2 regels uitgezet worden door een comment (‘#’) te plaatsen op regel 46 en 71:

#%{__install} -d -m 0755 %{buildroot}/%{_pkgdocdir}
#%{__cp} -a docs/ %{buildroot}/%{_pkgdocdir}

Daarna, zet in de regel 3 iets extra’s neer om een eigen release naam aan te duiden, zodat duidelijk is dat deze niet origineel is:

Release: 1%{?dist}
word:
Release: 1%{?dist}.bj

Nu is alles in place om de RPM weer terug te bouwen:

rpmbuild -ba cacti.spec

Er is zijn nu diverse files gemaakt waarmee je verder kan. Je kan ook de nieuwe Source RPM kopieren om weer extra aanpassingen elders te maken. Dat doen we nu niet, we gaan de gecompileerde RPM installeren. Deze is gemaakt in de directory rpmbuild/RPMS/. Uiteraard moeten we weer uit het user account ‘rpmbuild’ gaan en root access hebben. De installatie kan door middel van:

yum install /home/rpmbuild/rpmbuild/RPMS/noarch/cacti-1.0.4-1.el7.centos.bj.noarch.rpm

En daarmee is Cacti door Yum geinstalleerd op een CentOS7 machine met PHP7.0 en Percona-Server 5.7.

Het beste is dan te starten vanaf stap 2:

http://docs.cacti.net/manual:088:1_installation.1_install_unix.5_install_and_configure_cacti

In mijn geval n.a.v. de nieuwe server is het volgende eerst inregelen, en dan op stap 2 verder:

mv /etc/httpd/conf.d/cacti.conf /etc/httpd/conf.d/cacti.conf.old
ln -s /usr/share/cacti /var/www/cacti

vim /etc/httpd/conf.d/cacti.pc-mania.nl.conf:
<VirtualHost *:80>
 DocumentRoot /var/www/cacti/
 ServerName cacti.pc-mania.nl
 <Directory /var/www/cacti/>
      AllowOverride all
      Options MultiViews IncludesNoExec FollowSymLinks
 </Directory>
</VirtualHost>

<VirtualHost *:443>
 DocumentRoot /var/www/cacti
 ServerName cacti.pc-mania.nl
 SSLEngine on
 SSLCertificateFile /etc/letsencrypt/live/cacti.pc-mania.nl/cert.pem
 SSLCertificateKeyFile /etc/letsencrypt/live/cacti.pc-mania.nl/privkey.pem
 SSLCertificateChainFile /etc/letsencrypt/live/cacti.pc-mania.nl/chain.pem

<Directory /var/www/cacti/>
       <IfModule mod_authz_core.c>
               # httpd 2.4
               Require all granted
       </IfModule>
       <IfModule !mod_authz_core.c>
               # httpd 2.2
               Order allow,deny
               Allow from all
       </IfModule>
      AllowOverride all
      Options MultiViews IncludesNoExec FollowSymLinks
</Directory>

<Directory /var/www/cacti/install>
        # mod_security overrides.
        # Uncomment these if you use mod_security.
        # allow POST of application/x-www-form-urlencoded during install
        #SecRuleRemoveById 960010
        # permit the specification of the rrdtool paths during install
        #SecRuleRemoveById 900011
</Directory>


# These sections marked "Require all denied" (or "Deny from all")
# should not be modified.
# These are in place in order to harden Cacti.
<Directory /var/www/cacti/log>
        <IfModule mod_authz_core.c>
                Require all denied
        </IfModule>
        <IfModule !mod_authz_core.c>
                Order deny,allow
                Deny from all
        </IfModule>
</Directory>
<Directory /var/www/cacti/rra>
        <IfModule mod_authz_core.c>
                Require all denied
        </IfModule>
        <IfModule !mod_authz_core.c>
                Order deny,allow
                Deny from all
        </IfModule>
</Directory>

</VirtualHost>