summarylogtreecommitdiffstats
path: root/PKGBUILD
blob: 07ca67854a554719a7b331956c932edd79278093 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
# Maintainer: Nocifer <apmichalopoulos at gmail dot com>
# Contributor: Mesmer <mesmer@fisica.if.uff.br>
# Contributor: Troy Will <troydwill at gmail dot com>
# Contributor: /dev/rs0                  </dev/rs0@secretco.de.com>
# Contributor: Jacek Burghardt           <jacek@hebe.us>
# Contributor: Vojtech Aschenbrenner     <v@asch.cz>
# Contributor: Jason Gardner             <buhrietoe@gmail.com>
# Contributor: Ross melin                <rdmelin@gmail.com>
# Contributor: (Parabola): Márcio Silva   <coadde@lavabit.com>
# Contributor: (Parabola): André Silva    <emulatorman@lavabit.com>
# Contributor: Charles Spence IV         <cspence@unomaha.edu>
# Contributor: Joe Julian                <me@joejulian.name>
# Orginally based on a Debian Squeeze package

pkgname=zoneminder
pkgver=1.36.35
pkgrel=1
pkgdesc='A full-featured, open source, state-of-the-art video surveillance software system'
arch=('any')
url='https://zoneminder.com/'
license=('GPL-2.0-only')
depends=('polkit' 'ffmpeg'
         'php-apcu' 'php-fpm' 'php-gd'
         'perl-archive-zip' 'perl-data-dump' 'perl-date-manip' 'perl-datetime' 'perl-dbd-mysql' 'perl-device-serialport' 'perl-file-slurp'
         'perl-image-info' 'perl-libwww' 'perl-mime-lite' 'perl-mime-tools' 'perl-net-sftp-foreign' 'perl-number-bytes-human' 'perl-php-serialization'
         'perl-sys-cpu' 'perl-sys-meminfo' 'perl-sys-mmap' 'perl-uri-encode'
         # ONVIF
         'perl-data-uuid' 'perl-io-interface' 'perl-io-socket-multicast' 'perl-soap-wsdl' 'perl-xml-libxml' 'perl-xml-parser'
         # TLS
         'perl-lwp-protocol-https'
         # Telemetry
         'perl-json-maybexs'
         # Encryption
         'perl-crypt-eksblowfish' 'perl-data-entropy'
         # JSON Web Token API
         'libjwt')
makedepends=('cmake')
optdepends=('mariadb'
            'apache'
            'nginx'
            'fcgiwrap: required if using nginx'
            'spawn-fcgi: required if using nginx'
            'multiwatch: required if using nginx'
            'pod2man: required for Docker support'
            'zmeventnotification: machine learning-powered recognition engine & event notification server'
            'vlc: may achieve better performance than FFmpeg with some camera models'
            'libvncserver: allows for CCTV-like monitoring of remote desktop sessions')
backup=("etc/nginx/sites-available/${pkgname}.conf"
        "etc/httpd/conf/extra/${pkgname}.conf"
        "etc/php/conf.d/${pkgname}.ini")
install=${pkgname}.install
source=("https://github.com/ZoneMinder/zoneminder/archive/refs/tags/${pkgver}.tar.gz"
        'https://github.com/ZoneMinder/CakePHP-Enum-Behavior/archive/refs/tags/1.0-zm.tar.gz'
        'https://github.com/FriendsOfCake/crud/archive/refs/tags/v3.2.0.tar.gz'
        'https://github.com/ZoneMinder/RtspServer/archive/055d81fe1293429e496b19104a9ed3360755a440.zip'
        'zoneminder-nginx.conf'
        'zoneminder-httpd.conf'
        'zoneminder-php.ini'
        'fcgiwrap-multiwatch.service')
sha256sums=('c3636ded4e0e5c5c62535c55153371212a379dbb1aed8c911bd6287721c3d49a'
            'dbd231e97b950c698f0f501d6a53c7291c9985e766b09e3afe00cfe69a969f44'
            '55be29e1eccb44d4ad0db8b23c37cec50f5341f8e498583d472ed1f0493876e3'
            'fad0f1646f65f1518dfde3390e6c907319bc67b61f2e04f5d5ac4144ab61131d'
            '92803838896f045612cdb88807763ff446f38f8bb136712429daeb2e3848fa0f'
            '62a3a907f48441cc40743d5b6957c727e90a34b310c6cad4b5344c91a8971e67'
            '8e1131dd6bf3796f5bcc9422c96ef77388d7ab0d8e8fc17f6b8dd1e8acc2442a'
            'e95f9bef77aef647dd633bd9ad75dc099b6d7184684e133f2f20702de83a6260')

prepare () {
    cd ${pkgname}-${pkgver}

    # Fix the launcher
    sed -i 's|localhost/zm|localhost:8095|g' misc/${pkgname}.desktop.in

    # Tweak the systemd service file
    sed -i 's|After=network.target mysqld.service httpd.service|After=network.target mysqld.service httpd.service nginx.service|g' misc/${pkgname}.service.in
    sed -i 's|Requires=mysqld.service httpd.service|Wants=mysqld.service httpd.service nginx.service|g' misc/${pkgname}.service.in

    # Move third-party plugins into place
    mv ../CakePHP-Enum-Behavior-1.0-zm/* web/api/app/Plugin/CakePHP-Enum-Behavior
    mv ../crud-3.2.0/* web/api/app/Plugin/Crud
    mv ../RtspServer-055d81fe1293429e496b19104a9ed3360755a440/* dep/RtspServer
}

build() {
    cd ${pkgname}-${pkgver}

    cmake -DCMAKE_INSTALL_PREFIX=/usr \
          -DLIBJWT_LIBRARY=/usr/lib/libjwt.so \
          -DZM_CONFIG_DIR=/etc/${pkgname} \
          -DZM_CONFIG_SUBDIR=/etc/${pkgname}/conf.d \
          -DZM_RUNDIR=/run/${pkgname} \
          -DZM_SOCKDIR=/run/${pkgname} \
          -DZM_LOGDIR=/var/log/${pkgname} \
          -DZM_TMPDIR=/var/tmp/${pkgname} \
          -DZM_CONTENTDIR=/var/lib/${pkgname} \
          -DZM_CACHEDIR=/var/lib/${pkgname}/cache \
          -DZM_WEBDIR=/usr/share/webapps/${pkgname}/www \
          -DZM_CGIDIR=/usr/share/webapps/${pkgname}/cgi-bin \
          -DZM_WEB_USER=http .

    cmake --build .
}

package() {
    cd ${pkgname}-${pkgver}

    make DESTDIR=${pkgdir} install

    # Set Polkit directory permissions in accordance with Arch policy
    chmod 750                                                   ${pkgdir}/usr/share/polkit-1/rules.d
    chown root:polkitd                                          ${pkgdir}/usr/share/polkit-1/rules.d

    # Create ZM_LOGDIR
    install -dm755 -o http -g http                              ${pkgdir}/var/log/${pkgname}

    # Create ZM_CONTENTDIR and its subfolders
    install -dm775 -o http -g http                              ${pkgdir}/var/lib/${pkgname}/{cache,events,images}

    # Link ZM_CGIDIR and ZM_CACHEDIR inside ZM_WEBDIR and set correct permissions
    ln -sf /usr/share/webapps/${pkgname}/cgi-bin                ${pkgdir}/usr/share/webapps/${pkgname}/www
    ln -sf /var/lib/${pkgname}/cache                            ${pkgdir}/usr/share/webapps/${pkgname}/www
    chown -Rh http:http                                         ${pkgdir}/usr/share/webapps/${pkgname}

    # Link ZM_WEBDIR/api/app/tmp to ZM_TMPDIR
    ln -sf /var/tmp/${pkgname}                                  ${pkgdir}/usr/share/webapps/${pkgname}/www/api/app/tmp

    # Fix for hardcoded /zm/ links (credit goes to @Kubax on AUR)
    ln -sf /usr/share/webapps/${pkgname}/www                    ${pkgdir}/usr/share/webapps/${pkgname}/www/zm

    # Set correct permissions for ZM_CONFIG_DIR & ZM_CONFIG_SUBDIR
    chmod -R 755                                                ${pkgdir}/etc/${pkgname}
    chmod 644                                                   ${pkgdir}/etc/${pkgname}/zm.conf
    chmod 644                                                   ${pkgdir}/etc/${pkgname}/conf.d/*

    # Nginx
    install -Dm644 $srcdir/${pkgname}-nginx.conf                ${pkgdir}/etc/nginx/sites-available/${pkgname}.conf

    # Apache
    install -Dm644 $srcdir/${pkgname}-httpd.conf                ${pkgdir}/etc/httpd/conf/extra/${pkgname}.conf

    # php.ini extension
    install -Dm644 $srcdir/${pkgname}-php.ini                   ${pkgdir}/etc/php/conf.d/${pkgname}.ini

    # fcgiwrap-multiwatch service
    install -Dm644 $srcdir/fcgiwrap-multiwatch.service          ${pkgdir}/usr/lib/systemd/system/fcgiwrap-multiwatch.service

    # systemd service
    install -Dm644 misc/${pkgname}.service                      ${pkgdir}/usr/lib/systemd/system/${pkgname}.service

    # systemd tmpfile
    install -Dm644 misc/${pkgname}-tmpfiles.conf                ${pkgdir}/usr/lib/tmpfiles.d/${pkgname}.conf

    # logrotate conf file
    install -Dm644 misc/logrotate.conf                          ${pkgdir}/etc/logrotate.d/${pkgname}

    # database schemas
    install -Dm644 db/zm*.sql                                   ${pkgdir}/usr/share/${pkgname}/db
}