Compare commits
747 Commits
1.36.12_he
...
multistrea
Author | SHA1 | Date |
---|---|---|
Isaac Connor | a250567e74 | |
Isaac Connor | 8c8a9ca32a | |
Isaac Connor | fd489c2c8d | |
Isaac Connor | a66adb6dcd | |
Isaac Connor | 6bd04de5f6 | |
Isaac Connor | 82a5f3a059 | |
Isaac Connor | 81048b6191 | |
Isaac Connor | 77793da70e | |
Isaac Connor | edbe726e86 | |
Isaac Connor | 1bc0e1820e | |
Isaac Connor | c081637036 | |
Isaac Connor | 4dd454325c | |
Isaac Connor | 30e4d72c1d | |
Isaac Connor | 7101a70774 | |
Isaac Connor | 60d2186ff4 | |
Isaac Connor | 7b7ac8fc7e | |
Isaac Connor | 7c3ab46408 | |
Isaac Connor | d10d5201ac | |
Isaac Connor | 4edd5c1bf5 | |
Isaac Connor | 8215b04fb0 | |
Isaac Connor | f1db88510e | |
Isaac Connor | 854d11ce9d | |
Isaac Connor | d86456b6f2 | |
Isaac Connor | 12ebdacf54 | |
Isaac Connor | fe0e4627ef | |
Isaac Connor | 28d5614da0 | |
Isaac Connor | f683557b0e | |
Isaac Connor | e8edeab641 | |
Isaac Connor | 61fe35a32a | |
Isaac Connor | f6d0274f74 | |
Isaac Connor | 4fa804e9a2 | |
Isaac Connor | cca7953856 | |
Isaac Connor | fe72fd83f8 | |
Isaac Connor | cfcc39defb | |
Isaac Connor | 2f287a5050 | |
makers-mark | 9733cdb576 | |
Isaac Connor | 3fad178528 | |
Isaac Connor | ea671a57f8 | |
Isaac Connor | 6b18b2889d | |
Isaac Connor | 69faa42ca7 | |
Isaac Connor | 6511dc8a4f | |
Isaac Connor | e2df6e5074 | |
Isaac Connor | a65f2b42ce | |
Isaac Connor | 0382a677df | |
Isaac Connor | ef13c84d8b | |
Isaac Connor | b4511a8fc3 | |
Isaac Connor | c42b75a252 | |
Isaac Connor | 4cbc55d160 | |
Isaac Connor | 5a57122891 | |
Isaac Connor | 5312d11e78 | |
Isaac Connor | ed360348ef | |
Isaac Connor | aa320cb28f | |
Isaac Connor | 5d8db0a320 | |
Isaac Connor | 7bc46ba7a8 | |
Isaac Connor | 6e01bca187 | |
Isaac Connor | a9ef5bf731 | |
Isaac Connor | 31a1ef6cb4 | |
Isaac Connor | 090c803b98 | |
Isaac Connor | 35bca1d89b | |
Isaac Connor | 3b84d7d82a | |
Isaac Connor | 1f78776093 | |
Isaac Connor | 7b66d751d8 | |
Isaac Connor | 089c6044f1 | |
Isaac Connor | 76c4560c25 | |
Isaac Connor | e6a12d20c6 | |
Isaac Connor | 45559123af | |
Isaac Connor | 1fc0e93673 | |
Isaac Connor | 27e87fc21f | |
Isaac Connor | eef172379c | |
Isaac Connor | 1277e75278 | |
Isaac Connor | 5f9dcabee1 | |
Petter Reinholdtsen | 5647c224d1 | |
Isaac Connor | 37069cb6fc | |
Isaac Connor | 2b289abb95 | |
Isaac Connor | ca42a46bb4 | |
Isaac Connor | 1cddac4efd | |
Isaac Connor | c927ef4b52 | |
Isaac Connor | b5098a1ab9 | |
Isaac Connor | 11a140d48e | |
Isaac Connor | 1783eff58a | |
Isaac Connor | 7b9c86111c | |
Isaac Connor | 65dacbc317 | |
Isaac Connor | 089563d1ce | |
Isaac Connor | 82a4cbaec5 | |
Isaac Connor | 072d181f79 | |
Isaac Connor | ea6a84ae66 | |
Isaac Connor | 1f19ad7c9d | |
Isaac Connor | 01f4aee450 | |
maddios | b47e96d7cf | |
Isaac Connor | 6aaebafd17 | |
pkubaj | 74a2276671 | |
Isaac Connor | ba73321628 | |
Isaac Connor | 28d8b22377 | |
Isaac Connor | 21218491f7 | |
Isaac Connor | b626de50dc | |
Isaac Connor | d51eb63947 | |
Isaac Connor | f9f2615d48 | |
Isaac Connor | 7468727b75 | |
Isaac Connor | a1bf8f7f5b | |
Isaac Connor | af5436d009 | |
Isaac Connor | e8bb095730 | |
Isaac Connor | e061f3b34a | |
Isaac Connor | 6037cdc2a3 | |
Isaac Connor | 77d3109152 | |
Isaac Connor | 67556430c6 | |
Isaac Connor | 4be9c6cdd2 | |
Isaac Connor | 81ffc6df4e | |
Isaac Connor | ffdb0f9824 | |
Isaac Connor | 46a835b28a | |
Isaac Connor | 1f75b017cc | |
Isaac Connor | cc65c99791 | |
Isaac Connor | 40e7f607f5 | |
Isaac Connor | 2529765df3 | |
Isaac Connor | 2c798069d3 | |
Isaac Connor | bd89e85ea0 | |
Isaac Connor | 0a30c55042 | |
Isaac Connor | 084a66af4b | |
Isaac Connor | 6ee3c238e7 | |
Isaac Connor | f63c124988 | |
Isaac Connor | 18610fd601 | |
Isaac Connor | ae6925fb89 | |
Isaac Connor | 805ef16e73 | |
Isaac Connor | 7b18b22f82 | |
Isaac Connor | 9160ee932f | |
Isaac Connor | 836fe8c2b1 | |
Isaac Connor | b1d881b118 | |
Isaac Connor | a0666e777a | |
Isaac Connor | c37d8eeded | |
Isaac Connor | 1c9f43bcaf | |
Isaac Connor | 96b4af6255 | |
Isaac Connor | 7e1df53aa6 | |
Isaac Connor | 4945a016cf | |
Isaac Connor | ab9c538c37 | |
Isaac Connor | 03897bf68e | |
Isaac Connor | 78a803abf8 | |
Isaac Connor | 20629fdf5a | |
Isaac Connor | f48511acba | |
Isaac Connor | 6cbc4c0a7a | |
Isaac Connor | 4e9a56624d | |
Isaac Connor | e63222d733 | |
Isaac Connor | 71c29afa7b | |
Isaac Connor | d00430f799 | |
Isaac Connor | c84f42e280 | |
Isaac Connor | e35dc3902e | |
Isaac Connor | d94c100a72 | |
Isaac Connor | 8872b8be63 | |
Isaac Connor | 795c5bb7d7 | |
Isaac Connor | ac03a88550 | |
Isaac Connor | 529e889d99 | |
Isaac Connor | 14e578cdb2 | |
Isaac Connor | a7fd65d844 | |
Isaac Connor | 6f3e22f2a0 | |
Isaac Connor | 8d0463bbff | |
Isaac Connor | 98e29e7ef6 | |
Isaac Connor | 9d37fbcd8e | |
Isaac Connor | dc9f7b4d1d | |
Isaac Connor | acff4fb9c0 | |
Isaac Connor | c76e688f05 | |
Isaac Connor | 53c57478b8 | |
Isaac Connor | 82a26a1f83 | |
Isaac Connor | bdf55f105e | |
Isaac Connor | 0573c09b50 | |
Isaac Connor | 71931f007a | |
Isaac Connor | 944c04e5b4 | |
Isaac Connor | 9036728bdc | |
Isaac Connor | 01eac4a277 | |
Isaac Connor | 3ac5402699 | |
Isaac Connor | caeaf91cad | |
Isaac Connor | 8868a0fc41 | |
Isaac Connor | 1561adbef9 | |
Isaac Connor | 193f349e38 | |
Isaac Connor | 036d47a832 | |
Isaac Connor | 6d30f5431b | |
Isaac Connor | a0215067e4 | |
Isaac Connor | 883772295d | |
Isaac Connor | 6cd1f6b5f3 | |
Isaac Connor | dc756ad670 | |
Isaac Connor | 9d71f1192a | |
Isaac Connor | 721769993b | |
Isaac Connor | 8d85d0f640 | |
Isaac Connor | 5ac9f88d00 | |
Isaac Connor | 2c0c257d76 | |
Isaac Connor | 0732d4c1b3 | |
Isaac Connor | 377219befe | |
Isaac Connor | ed84b59671 | |
Isaac Connor | 5d0bd978e4 | |
Isaac Connor | 43c1886267 | |
Isaac Connor | b8f6172110 | |
Isaac Connor | 474f65cff3 | |
Isaac Connor | 4c2d50c1f4 | |
Isaac Connor | 44d88edbbb | |
Isaac Connor | f263da8986 | |
Isaac Connor | 30d4900b45 | |
Isaac Connor | 508be72e08 | |
Isaac Connor | 96a58f8c88 | |
Isaac Connor | 66517218f1 | |
Isaac Connor | 5d23362ae0 | |
Isaac Connor | 38105c6796 | |
Isaac Connor | 7aefd657c7 | |
Isaac Connor | 7abbfc2fb5 | |
Isaac Connor | e617eb8615 | |
Isaac Connor | ce81099489 | |
Isaac Connor | 8c2dec03b6 | |
Isaac Connor | 6609c154f2 | |
Isaac Connor | f737e3e945 | |
Isaac Connor | 1fd99424bb | |
Isaac Connor | b2d9e5608f | |
Isaac Connor | 364ae03195 | |
Isaac Connor | 0119ff46aa | |
Isaac Connor | 93055f44e8 | |
Isaac Connor | 814eca2b4f | |
Isaac Connor | a799eb3ad9 | |
Isaac Connor | b26ce4378d | |
Isaac Connor | 5f27c124c3 | |
Isaac Connor | ae4a33beb2 | |
Isaac Connor | 3208059040 | |
Isaac Connor | 8619971864 | |
Isaac Connor | 61f7989bec | |
Isaac Connor | dd949bb129 | |
Isaac Connor | 0e3f694097 | |
Isaac Connor | 97164fd4d7 | |
Isaac Connor | 3f0bdf6332 | |
Isaac Connor | 224b34d69d | |
Isaac Connor | 1168fc52a5 | |
Isaac Connor | df88c5bbef | |
Isaac Connor | 4122ae99a5 | |
Isaac Connor | b4314e5d46 | |
Isaac Connor | e063f0715f | |
Isaac Connor | dedd755e5c | |
Isaac Connor | 644c6e6b41 | |
Isaac Connor | 76b75cc69b | |
Isaac Connor | fee69d3bc2 | |
Isaac Connor | 0c157904e6 | |
Isaac Connor | 2a160f045d | |
Isaac Connor | c2bd2dc129 | |
Isaac Connor | 9fe2762bc8 | |
Isaac Connor | 5955e4b410 | |
Isaac Connor | d8e4a77424 | |
Isaac Connor | a946c45614 | |
SzymekCRX | 2bcad7bf5e | |
Isaac Connor | 6478999ecf | |
Isaac Connor | a74b785d08 | |
Isaac Connor | a2ec18be5a | |
Isaac Connor | d62d88a0a3 | |
Isaac Connor | c864d0765b | |
Isaac Connor | cebe86feb2 | |
Isaac Connor | d56de57494 | |
Isaac Connor | a55bd23bf6 | |
Isaac Connor | 7f573b147f | |
Isaac Connor | fb67c6a3e7 | |
Isaac Connor | 3770306817 | |
Isaac Connor | cc51642eff | |
Isaac Connor | 509cecf9f5 | |
Isaac Connor | 72d2b99ca4 | |
Isaac Connor | 1e38cf8bb7 | |
Isaac Connor | 51e77438fa | |
Isaac Connor | 0c222f66ee | |
Isaac Connor | 8afed25d18 | |
Isaac Connor | 5e21d4833a | |
Isaac Connor | 9169da6963 | |
Isaac Connor | df1b42ab53 | |
Isaac Connor | 3d2615d66f | |
Isaac Connor | 824322dff6 | |
Isaac Connor | 6992644fc3 | |
Isaac Connor | c6eedd434c | |
Isaac Connor | 4351f51929 | |
Isaac Connor | ccdf002c18 | |
Isaac Connor | ac15ea42cd | |
Isaac Connor | 52f0240334 | |
Isaac Connor | 6d7f752eb0 | |
Isaac Connor | 16d0e269df | |
Isaac Connor | bfcc6ed13e | |
Pascal Muetschard | 14e6d660e7 | |
Isaac Connor | 9f023f7bdd | |
Isaac Connor | 4af605e675 | |
Isaac Connor | d1596dee02 | |
makers-mark | 276add8ee4 | |
Isaac Connor | e1d49ea172 | |
Isaac Connor | 3f6d6fe7a0 | |
Isaac Connor | 8cbd401dee | |
Isaac Connor | d55ada339c | |
Isaac Connor | c05200d2a7 | |
Håvard Flaget Aasen | f2281d1017 | |
Håvard Flaget Aasen | 5970416f0b | |
Isaac Connor | c81f3d9c61 | |
Isaac Connor | 45b7c7b105 | |
Isaac Connor | d8b51fcf38 | |
Isaac Connor | 8d1c45162d | |
Isaac Connor | 7bda103b99 | |
Isaac Connor | d960f9b6af | |
Isaac Connor | 6c4156a483 | |
Isaac Connor | 1606f7918a | |
Isaac Connor | 809cb651c0 | |
Isaac Connor | 5f381a244f | |
Isaac Connor | d71a5932f5 | |
Isaac Connor | 452d28a66b | |
Isaac Connor | 26ac52aaa9 | |
Isaac Connor | 086bf7a84f | |
Isaac Connor | 411d15605a | |
Isaac Connor | 8a9c283c1c | |
Isaac Connor | 64ab429519 | |
Isaac Connor | 74ac79479f | |
Isaac Connor | 4fee4d01e3 | |
Isaac Connor | 00f9cb791c | |
Isaac Connor | f60282eaf5 | |
Isaac Connor | 6fd33b4627 | |
Mike Dussault | d38a6adec4 | |
Isaac Connor | 2056172ea9 | |
Isaac Connor | 126a102426 | |
Isaac Connor | 0bac052a0a | |
Isaac Connor | 5cdc0efdb8 | |
Isaac Connor | aafec8ead6 | |
Peter Keresztes Schmidt | cd45c61555 | |
Peter Keresztes Schmidt | c027b7a38d | |
Peter Keresztes Schmidt | 97b38bd4ab | |
Isaac Connor | c6cac57fb1 | |
Isaac Connor | 0ba3d863a6 | |
Mike Dussault | 814124251e | |
Mike Dussault | 2cf16eb495 | |
Mike Dussault | 146ff1ac7a | |
Mike Dussault | e4542de6f2 | |
Mike Dussault | 9370cfe25c | |
Mike Dussault | 305af08112 | |
Mike Dussault | 3723e136b1 | |
Isaac Connor | 614750963b | |
Isaac Connor | 7079516e09 | |
Isaac Connor | 2dfbc013cb | |
Isaac Connor | 505f3d1b32 | |
Isaac Connor | a465403c72 | |
Isaac Connor | 7f09cddcd7 | |
Isaac Connor | e394248baf | |
Isaac Connor | 94cd3a6e69 | |
Isaac Connor | 52129c94ec | |
Isaac Connor | ba26235763 | |
Isaac Connor | c72d34f176 | |
Isaac Connor | 75a014321e | |
Isaac Connor | 1f04723f3a | |
haade | a0142d3896 | |
Isaac Connor | 7ed76b5677 | |
TheRealJiffy | ca293eb288 | |
Alejandro Criado-Pérez | 1e71300a3b | |
criadoperez | e462c23115 | |
criadoperez | 9f683c0c91 | |
criadoperez | 8554ccd649 | |
Isaac Connor | 9bbdd36252 | |
Isaac Connor | 509a5549be | |
Isaac Connor | aca477e737 | |
Isaac Connor | 95a7c6c32f | |
Isaac Connor | ac375bc623 | |
Isaac Connor | 9cf4e89254 | |
Isaac Connor | f54e779b21 | |
Isaac Connor | 202d95fc5a | |
Isaac Connor | ee65d3e3dc | |
Isaac Connor | fe734d4e1e | |
Isaac Connor | 1c01936f75 | |
Isaac Connor | ee609ad28b | |
Steve Gilvarry | dcd2c16774 | |
Isaac Connor | 7dbd950574 | |
Isaac Connor | f40e2be28a | |
Isaac Connor | 43dfeb5b84 | |
Isaac Connor | cbc376bb5a | |
Isaac Connor | 2e4bb73204 | |
Isaac Connor | 655daf4fbe | |
Isaac Connor | b8022cdda2 | |
Isaac Connor | e98728c529 | |
Isaac Connor | 568be3fc54 | |
Isaac Connor | 92f6d3cbae | |
Isaac Connor | 6022dd59eb | |
Isaac Connor | 4bdf965dcb | |
Isaac Connor | 2a0ddc6337 | |
5472qaywsx | d81be9701a | |
Andrea Vezzali | e75d5a89e9 | |
Isaac Connor | 0bf417bae0 | |
ColorfullyZhang | 9e4f203632 | |
ColorfullyZhang | 874552c06b | |
Isaac Connor | c233ec3b8c | |
Mike Dussault | e63be2b18e | |
Isaac Connor | c5f4623104 | |
Isaac Connor | 38cda24b53 | |
Isaac Connor | cddb9d88bf | |
Isaac Connor | de299ab882 | |
Isaac Connor | 8272411bb2 | |
Isaac Connor | 120d9764bc | |
Isaac Connor | c7aa41502a | |
Andrea Vezzali | 787b7f1874 | |
Andrea Vezzali | c4a49721d2 | |
Isaac Connor | 6dbfd22190 | |
Andrea Vezzali | 4b4152b837 | |
Peter Keresztes Schmidt | a4ebf533a9 | |
Peter Keresztes Schmidt | 93c5ad0939 | |
Isaac Connor | 94c1b3445d | |
Isaac Connor | 292b3c1d37 | |
Isaac Connor | c66489fb30 | |
Isaac Connor | d98d20958c | |
Isaac Connor | fe72056d73 | |
Isaac Connor | 34d9f87d6d | |
Isaac Connor | 12783f6edf | |
Isaac Connor | 03892796eb | |
Isaac Connor | 888d79706a | |
Isaac Connor | a99f9091fc | |
Isaac Connor | 2f12615f08 | |
Isaac Connor | 7ca7d40b6f | |
Isaac Connor | c78e035057 | |
Isaac Connor | aae967e895 | |
Isaac Connor | 7748307c5a | |
Isaac Connor | d3cfd3c224 | |
Isaac Connor | 30fa641186 | |
Isaac Connor | 1cb9f98e9b | |
Isaac Connor | 160f775f91 | |
Isaac Connor | dd6adc08a8 | |
Isaac Connor | 4b1da156a0 | |
5472qaywsx | a7f13c82d5 | |
Andrea Vezzali | 2724a238e1 | |
Isaac Connor | fba7dba3d0 | |
Isaac Connor | 1700e2f919 | |
ColorfullyZhang | f5d8eaa2ad | |
ColorfullyZhang | 6009bba339 | |
Isaac Connor | e6f4cdb584 | |
Isaac Connor | 547fed2e22 | |
Mike Dussault | 3f97df72c8 | |
Isaac Connor | 1ee85caaae | |
Isaac Connor | d2cf89565e | |
Isaac Connor | 03f0762709 | |
Isaac Connor | bf5c0a8617 | |
Isaac Connor | 167dece604 | |
Isaac Connor | e140620900 | |
Isaac Connor | 7aa955abd2 | |
Isaac Connor | 503f0da9da | |
Andrea Vezzali | 3e5d377f7a | |
Andrea Vezzali | 966749ff86 | |
Isaac Connor | 58f933ba1e | |
Isaac Connor | a05560e797 | |
Isaac Connor | dd2a12675f | |
Andrea Vezzali | 97c10fc135 | |
Peter Keresztes Schmidt | 5fda85bf2e | |
Peter Keresztes Schmidt | ecf6cc80aa | |
Isaac Connor | 15adc47c61 | |
Isaac Connor | 385d1602e0 | |
Isaac Connor | c2472894be | |
Isaac Connor | a9379e5813 | |
Isaac Connor | 009b3ceffc | |
Isaac Connor | e18f8019b0 | |
Isaac Connor | a44bbf8e34 | |
Isaac Connor | 227e5794fa | |
Isaac Connor | c5b097af0a | |
Isaac Connor | b2415643f6 | |
Isaac Connor | 68fc57ef7b | |
Isaac Connor | 4b8ac48590 | |
criadoperez | 4a717820b1 | |
criadoperez | 876fca188b | |
Isaac Connor | f576613c7d | |
Peter Keresztes Schmidt | 6e96cbe14a | |
Peter Keresztes Schmidt | 0ac060fb78 | |
Peter Keresztes Schmidt | 443b84270a | |
Peter Keresztes Schmidt | c9f162f70e | |
Peter Keresztes Schmidt | c83882a4c7 | |
Peter Keresztes Schmidt | 615e3dd76b | |
Peter Keresztes Schmidt | 5dc328e68b | |
Isaac Connor | 263a846251 | |
Isaac Connor | 440bb12a9a | |
Isaac Connor | 9d461203bd | |
Isaac Connor | 8c45739875 | |
Isaac Connor | fe6f71e1dc | |
Isaac Connor | 328bd15360 | |
Isaac Connor | 381fa0d08d | |
Isaac Connor | 8199554217 | |
Isaac Connor | 1a0d488457 | |
Isaac Connor | 6b481fa2b5 | |
Isaac Connor | d102732a7e | |
Isaac Connor | 048b8b13a3 | |
Isaac Connor | 6de8c71d2a | |
Isaac Connor | 4af979c842 | |
Isaac Connor | a52b9057ba | |
Isaac Connor | 11137f9b7a | |
gmanproxtreme | 84ccf10e65 | |
Isaac Connor | a4c079d1b3 | |
Isaac Connor | dbe16a9cb4 | |
Isaac Connor | 7c1c8482c6 | |
Isaac Connor | 2640791b89 | |
Isaac Connor | 848a537a0f | |
Isaac Connor | 4596f61250 | |
r01k | 79e041d0f0 | |
Isaac Connor | 4a5bc88882 | |
Isaac Connor | 68a7635d9b | |
Isaac Connor | 7a6c244aa7 | |
Isaac Connor | 89d7685b14 | |
Isaac Connor | 44823e0c94 | |
Isaac Connor | 8ddec91870 | |
Isaac Connor | 7127a944a1 | |
Isaac Connor | ba9a871daf | |
Isaac Connor | eb1124c406 | |
Isaac Connor | b9efe627f3 | |
Isaac Connor | e7e8996060 | |
Isaac Connor | c12d88d874 | |
Isaac Connor | 301d8fa5fa | |
Andrew Bauer | aa48133096 | |
Isaac Connor | 92a924044a | |
Isaac Connor | a311455526 | |
Isaac Connor | 248ca9a5f9 | |
Isaac Connor | cd3359c3eb | |
Isaac Connor | ccb4bb27dd | |
Isaac Connor | bae8d38301 | |
Isaac Connor | cb4e17e49a | |
Isaac Connor | 066bb891af | |
Isaac Connor | f0b2f75d91 | |
Isaac Connor | 672de6e84f | |
Isaac Connor | 500ced2dc5 | |
Isaac Connor | f2a1d06f64 | |
Isaac Connor | eecf568041 | |
Isaac Connor | 105851b70c | |
Isaac Connor | f236e25e22 | |
Isaac Connor | 1f1678064e | |
Isaac Connor | 222909feb3 | |
Isaac Connor | 7db25a5e1b | |
Isaac Connor | acdd8bb08b | |
Isaac Connor | a3a592d5e1 | |
Isaac Connor | 45bf28a104 | |
Isaac Connor | 7dc36f67db | |
Isaac Connor | 0bcbff5dd5 | |
Isaac Connor | bed41ca44b | |
Isaac Connor | 91903d2822 | |
Isaac Connor | 5bc9cfaa6a | |
Isaac Connor | 85d5dd806e | |
Isaac Connor | dffc7aa2fd | |
Peter Keresztes Schmidt | fb1849ff47 | |
Peter Keresztes Schmidt | cce4b0aac4 | |
Peter Keresztes Schmidt | 2c0cf7a5a7 | |
Peter Keresztes Schmidt | b5765b4535 | |
Peter Keresztes Schmidt | 7d84568b65 | |
Peter Keresztes Schmidt | 50b73cf3d2 | |
Peter Keresztes Schmidt | 4392198d14 | |
Isaac Connor | 9cb19005e5 | |
Steven Gilvarry | cb32630dc0 | |
anon8675309 | 47f171c75c | |
anon8675309 | 649b5585c4 | |
Isaac Connor | 75180f78e2 | |
Isaac Connor | 14047bc820 | |
Isaac Connor | 1766bbdfcd | |
Isaac Connor | b0cf3a4732 | |
Isaac Connor | 413ac984eb | |
Isaac Connor | 4ff4e1f780 | |
Isaac Connor | 54f676a501 | |
Isaac Connor | c6209ce460 | |
Isaac Connor | 3bb2b804b3 | |
Isaac Connor | 24a77d7fb3 | |
Isaac Connor | 8df915e7a4 | |
Isaac Connor | cc486beed5 | |
Isaac Connor | 411a5181e6 | |
Peter Keresztes Schmidt | eaf2e51b0c | |
Peter Keresztes Schmidt | 80b08a2075 | |
Peter Keresztes Schmidt | 65656de6ce | |
Peter Keresztes Schmidt | c60b577aec | |
Peter Keresztes Schmidt | fc15afefcf | |
Peter Keresztes Schmidt | cf9c47149f | |
Isaac Connor | 2b6d54fd81 | |
Isaac Connor | 6373ef9be7 | |
Kendric Evans | 7e8a064725 | |
Isaac Connor | 415dce6548 | |
Pliable Pixels | 6c3f18a347 | |
Isaac Connor | e9845d96f4 | |
anon8675309 | c0875838af | |
anon8675309 | d927db1c0d | |
anon8675309 | f852f1716e | |
anon8675309 | 479385bac7 | |
anon8675309 | 1e834f6088 | |
anon8675309 | 1096fa3f87 | |
Andrew Bauer | 0edc91ffca | |
Andrew Bauer | ec861c5e2b | |
Andrew Bauer | db7c5df8c1 | |
Andrew Bauer | b59e911c43 | |
Isaac Connor | 9438445d74 | |
Isaac Connor | e6b67dcdc2 | |
Isaac Connor | c3fb84bf88 | |
Isaac Connor | 29fb2d3885 | |
Peter Keresztes Schmidt | ea10939970 | |
Peter Keresztes Schmidt | 531694bf8d | |
Isaac Connor | cc2403924a | |
Isaac Connor | 94634f1ca7 | |
Isaac Connor | d221d6ab3b | |
Isaac Connor | da208457b8 | |
Isaac Connor | 0cbb132f08 | |
Isaac Connor | 9001327883 | |
Isaac Connor | 821031f10e | |
Isaac Connor | fa11c20bf8 | |
Peter Keresztes Schmidt | d69afc9672 | |
Peter Keresztes Schmidt | 6114d40593 | |
Peter Keresztes Schmidt | f675afc3f2 | |
Peter Keresztes Schmidt | 3e8b10d813 | |
Peter Keresztes Schmidt | c823b9c00e | |
Peter Keresztes Schmidt | 707975e567 | |
Peter Keresztes Schmidt | dff5452f11 | |
Peter Keresztes Schmidt | 335e950654 | |
Peter Keresztes Schmidt | 7c6a6ac309 | |
Peter Keresztes Schmidt | ce55ba5fb7 | |
Isaac Connor | c2f4d65860 | |
Isaac Connor | c56025beab | |
Isaac Connor | 9f8c8a2664 | |
Peter Keresztes Schmidt | f374b319e0 | |
Peter Keresztes Schmidt | 28d813b95a | |
Peter Keresztes Schmidt | ff8c9f67c1 | |
Peter Keresztes Schmidt | 1fe30c848d | |
Peter Keresztes Schmidt | b2ee71c96e | |
Peter Keresztes Schmidt | e1fe53338c | |
Peter Keresztes Schmidt | 8dae46bc75 | |
Peter Keresztes Schmidt | 95dd0c1491 | |
Isaac Connor | af46f8cad5 | |
Isaac Connor | 7878fbc878 | |
Isaac Connor | 786d0c553e | |
Isaac Connor | fd9bef228d | |
Peter Keresztes Schmidt | 07dbb75c56 | |
Isaac Connor | 46c730e27b | |
Isaac Connor | 268da411d9 | |
Isaac Connor | 4a40214f73 | |
Isaac Connor | 55f2a7f55e | |
Isaac Connor | 0301011f7e | |
Isaac Connor | afecd33879 | |
Isaac Connor | 91892c79b1 | |
Isaac Connor | 97d077d623 | |
Isaac Connor | dbb8019852 | |
Isaac Connor | 84035ef4f7 | |
Isaac Connor | 3d70e621b2 | |
Peter Keresztes Schmidt | b0b2f5fc16 | |
Peter Keresztes Schmidt | 44ace34593 | |
Peter Keresztes Schmidt | 48b1e8a055 | |
Peter Keresztes Schmidt | d8d27bcc92 | |
Peter Keresztes Schmidt | 6c68397249 | |
Peter Keresztes Schmidt | 46155942c1 | |
Peter Keresztes Schmidt | d64b57e63c | |
Peter Keresztes Schmidt | 7474294ac3 | |
Peter Keresztes Schmidt | 129bd3f907 | |
Peter Keresztes Schmidt | 154b17d5f3 | |
Peter Keresztes Schmidt | 2a32f75a24 | |
Steve Gilvarry | b29a785a7c | |
Peter Keresztes Schmidt | 07b81f446f | |
Peter Keresztes Schmidt | f1279a3ebf | |
Isaac Connor | dc6c00ba88 | |
Peter Keresztes Schmidt | 0d81199fc9 | |
Peter Keresztes Schmidt | 2d71743372 | |
Isaac Connor | f0e5eece18 | |
Isaac Connor | bbdf01880a | |
Peter Keresztes Schmidt | 73351f4387 | |
Peter Keresztes Schmidt | f9d859cad8 | |
Peter Keresztes Schmidt | 0625f6ca1c | |
Peter Keresztes Schmidt | 5c96eedac8 | |
Peter Keresztes Schmidt | 3d34e6f177 | |
Peter Keresztes Schmidt | 762476ec76 | |
Peter Keresztes Schmidt | a9ad5c5eee | |
Peter Keresztes Schmidt | 7d15396833 | |
Peter Keresztes Schmidt | 1a6904a297 | |
Peter Keresztes Schmidt | 70c626a30e | |
Peter Keresztes Schmidt | 0b7f9396b4 | |
Peter Keresztes Schmidt | 7d501a6585 | |
Isaac Connor | cca30661d7 | |
Isaac Connor | 9cce9744d2 | |
Isaac Connor | 9f685d6c2b | |
Peter Keresztes Schmidt | 32f139ef7f | |
Peter Keresztes Schmidt | db9b739562 | |
Isaac Connor | a78feb739e | |
Isaac Connor | b16eb510d0 | |
Isaac Connor | 205c488741 | |
Isaac Connor | d713770dea | |
Isaac Connor | 72d07d1428 | |
Isaac Connor | ad0e7a5c1a | |
Isaac Connor | fc6202d349 | |
Isaac Connor | 1b67074d35 | |
Xulunix | 2cbb24d7b9 | |
Isaac Connor | e4d3394888 | |
Isaac Connor | 9a03c2c16a | |
Isaac Connor | ed5262432f | |
Isaac Connor | 5529075fb3 | |
Peter Keresztes Schmidt | 0ea14317a4 | |
Peter Keresztes Schmidt | 7ec37405a6 | |
Peter Keresztes Schmidt | e724a93395 | |
Isaac Connor | bc3d1d161a | |
Peter Keresztes Schmidt | 81a1546a2b | |
Peter Keresztes Schmidt | f2bee0704a | |
Peter Keresztes Schmidt | ed7759897b | |
Isaac Connor | f8b779dc25 | |
Isaac Connor | cc3bce48b7 | |
Isaac Connor | c686fa5949 | |
Isaac Connor | d2941d6b87 | |
Isaac Connor | 50fe7100fa | |
Isaac Connor | 4825370a7f | |
Isaac Connor | 0bcb30b8a9 | |
Isaac Connor | fd21edb7a9 | |
Peter Keresztes Schmidt | f3cb14cc17 | |
Peter Keresztes Schmidt | 764f10bf82 | |
Isaac Connor | 4f2945bd57 | |
Peter Keresztes Schmidt | fead79185b | |
Isaac Connor | dab2792077 | |
Peter Keresztes Schmidt | 8129600a37 | |
Peter Keresztes Schmidt | 5d93555d9f | |
Peter Keresztes Schmidt | 9a983bb321 | |
Peter Keresztes Schmidt | 8b87830e3e | |
Peter Keresztes Schmidt | d2932b5d68 | |
Peter Keresztes Schmidt | 62f60b76d6 | |
Peter Keresztes Schmidt | 837b32ccff | |
Peter Keresztes Schmidt | 2bda413698 | |
Peter Keresztes Schmidt | a8b9d15d1b | |
Isaac Connor | 28a6a3e41e | |
Peter Keresztes Schmidt | e34b6500d9 | |
Peter Keresztes Schmidt | b8178dbb79 | |
Peter Keresztes Schmidt | 45654cb514 | |
Peter Keresztes Schmidt | caadc41bfd | |
Peter Keresztes Schmidt | b81689aa3f | |
Isaac Connor | 2e61ee4c95 | |
Peter Keresztes Schmidt | 339cfd49bc | |
Peter Keresztes Schmidt | e8adf5d331 | |
Isaac Connor | 09b0353592 | |
Isaac Connor | 855a81b975 | |
Isaac Connor | 096581b7f1 | |
Isaac Connor | 8511d814df | |
Isaac Connor | 195f9fc403 | |
Isaac Connor | 7417d32fbc | |
Isaac Connor | 16cc69ca2b | |
Isaac Connor | c590157431 | |
Peter Keresztes Schmidt | 8379ab70be | |
Isaac Connor | 824a6dc15b | |
Isaac Connor | 799a0ed7ba | |
Isaac Connor | 82c7474786 | |
Isaac Connor | a266388898 | |
Isaac Connor | 6e70eb5963 | |
Zoltan Gera | 714dd0aa9f | |
Isaac Connor | cf03bb9548 | |
Isaac Connor | 9e64b912a8 | |
Peter Keresztes Schmidt | 6b478484bd | |
Peter Keresztes Schmidt | d413f3c78f | |
Peter Keresztes Schmidt | 8a8dc48206 | |
Peter Keresztes Schmidt | 9f4e7178d4 | |
Peter Keresztes Schmidt | 0392828ef8 | |
Peter Keresztes Schmidt | e232b5d1a7 | |
Peter Keresztes Schmidt | 9900fc1273 | |
Peter Keresztes Schmidt | e5cac38521 | |
Peter Keresztes Schmidt | 93abbdf964 | |
Shao Yu-Lung (Allen) | 4a1d983ff1 | |
anon8675309 | b2391e952f | |
Isaac Connor | 317ce7692e | |
Isaac Connor | bc384d6fbe | |
Andrew Bauer | 2e12bc08cd | |
Andrew Bauer | 8d8b87743e | |
Peter Keresztes Schmidt | e881e97c06 | |
Andrew Bauer | eb387b5453 | |
Isaac Connor | da8128aba1 | |
Isaac Connor | f4ce2c1ea4 | |
Isaac Connor | fa34d00392 | |
Isaac Connor | a6de3e15f4 | |
Isaac Connor | aa157bfd78 |
|
@ -1,17 +1,19 @@
|
||||||
task:
|
task:
|
||||||
name: freebsd-build
|
name: freebsd-build
|
||||||
freebsd_instance:
|
freebsd_instance:
|
||||||
image_family: freebsd-12-2
|
matrix:
|
||||||
|
- image_family: freebsd-12-2
|
||||||
|
- image_family: freebsd-13-0
|
||||||
|
|
||||||
prepare_script:
|
prepare_script:
|
||||||
- pkg install -yq git cmake jpeg-turbo mysql80-client ffmpeg libvncserver libjwt catch p5-DBI p5-DBD-mysql p5-Date-Manip p5-Test-LWP-UserAgent p5-Sys-Mmap
|
- pkg install -yq git cmake pkgconf jpeg-turbo mysql80-client ffmpeg libvncserver libjwt catch p5-DBI p5-DBD-mysql p5-Date-Manip p5-Test-LWP-UserAgent p5-Sys-Mmap v4l_compat
|
||||||
|
|
||||||
configure_script:
|
configure_script:
|
||||||
- git submodule update --init --recursive
|
- git submodule update --init --recursive
|
||||||
- mkdir build
|
- mkdir build
|
||||||
- cd build
|
- cd build
|
||||||
- cmake --version
|
- cmake --version
|
||||||
- cmake ../ -DBUILD_MAN=0 -DBUILD_TEST_SUITE=1 -DENABLE_WERROR=1
|
- cmake ../ -DBUILD_MAN=0 -DBUILD_TEST_SUITE=1 -DENABLE_WERROR=1 -DCMAKE_C_FLAGS="-Wno-deprecated-declarations" -DCMAKE_CXX_FLAGS="-Wno-deprecated-declarations"
|
||||||
|
|
||||||
build_script:
|
build_script:
|
||||||
- cd build
|
- cd build
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
web/api/lib
|
web/api/lib
|
||||||
web/includes/csrf/
|
web/includes/csrf/
|
||||||
web/js/videojs.zoomrotate.js
|
web/js/videojs.zoomrotate.js
|
||||||
web/skins/classic/js/bootstrap.js
|
web/skins/classic/js/bootstrap-4.5.0.js
|
||||||
web/skins/classic/js/chosen
|
web/skins/classic/js/chosen
|
||||||
web/skins/classic/js/dateTimePicker
|
web/skins/classic/js/dateTimePicker
|
||||||
web/skins/classic/js/jquery-*.js
|
web/skins/classic/js/jquery-*.js
|
||||||
|
|
|
@ -0,0 +1,51 @@
|
||||||
|
name: CI Ubuntu Bionic (18.04)
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- '*'
|
||||||
|
pull_request:
|
||||||
|
branches: [ master ]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
shell: bash
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
crypto_backend: [ openssl ]
|
||||||
|
jwt_backend: [ libjwt, jwt_cpp ]
|
||||||
|
include:
|
||||||
|
- crypto_backend: openssl
|
||||||
|
crypto_package: libssl-dev
|
||||||
|
jwt_package: libjwt-dev
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container: ubuntu:bionic
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Update packages
|
||||||
|
run: apt-get -qq update && apt-get -qq upgrade && apt-get -qq install software-properties-common
|
||||||
|
- name: Install git
|
||||||
|
run: |
|
||||||
|
add-apt-repository ppa:git-core/ppa
|
||||||
|
apt-get -qq update
|
||||||
|
apt-get -qq install git
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
- name: Install dependencies
|
||||||
|
run: >
|
||||||
|
apt-get -qq install make cmake g++
|
||||||
|
default-libmysqlclient-dev
|
||||||
|
libavcodec-dev libavformat-dev libavutil-dev libswresample-dev libswscale-dev
|
||||||
|
libcurl4-gnutls-dev libvlc-dev libvncserver-dev
|
||||||
|
libdate-manip-perl libdbd-mysql-perl libsys-mmap-perl libwww-perl
|
||||||
|
libpolkit-gobject-1-dev
|
||||||
|
${{ matrix.crypto_package }} ${{ matrix.jwt_package }}
|
||||||
|
- name: Prepare
|
||||||
|
run: mkdir build
|
||||||
|
- name: Configure
|
||||||
|
run: cd build && cmake --version && cmake .. -DBUILD_MAN=0 -DENABLE_WERROR=1 -DZM_CRYPTO_BACKEND=${{ matrix.crypto_backend }} -DZM_JWT_BACKEND=${{ matrix.jwt_backend }}
|
||||||
|
- name: Build
|
||||||
|
run: cd build && make -j3 | grep --line-buffered -Ev '^(cp lib\/|Installing.+\.pm)' && (exit ${PIPESTATUS[0]})
|
|
@ -0,0 +1,57 @@
|
||||||
|
name: CI Debian Bullseye
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- '*'
|
||||||
|
pull_request:
|
||||||
|
branches: [ master ]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
shell: bash
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
crypto_backend: [ gnutls, openssl ]
|
||||||
|
jwt_backend: [ libjwt, jwt_cpp ]
|
||||||
|
include:
|
||||||
|
- crypto_backend: gnutls
|
||||||
|
crypto_package: libgnutls28-dev
|
||||||
|
jwt_package: libjwt-gnutls-dev
|
||||||
|
- crypto_backend: openssl
|
||||||
|
crypto_package: libssl-dev
|
||||||
|
jwt_package: libjwt-dev
|
||||||
|
exclude:
|
||||||
|
- crypto_backend: gnutls
|
||||||
|
jwt_backend: jwt_cpp
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container: debian:bullseye
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Update packages
|
||||||
|
run: apt-get -qq update && apt-get -qq upgrade
|
||||||
|
- name: Install git
|
||||||
|
run: apt-get -qq install git
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
- name: Install dependencies
|
||||||
|
run: >
|
||||||
|
apt-get -qq install make cmake g++
|
||||||
|
default-libmysqlclient-dev
|
||||||
|
libavcodec-dev libavformat-dev libavutil-dev libswresample-dev libswscale-dev
|
||||||
|
libcurl4-gnutls-dev libvlc-dev libvncserver-dev
|
||||||
|
libdate-manip-perl libdbd-mysql-perl libsys-mmap-perl libwww-perl
|
||||||
|
libpolkit-gobject-1-dev
|
||||||
|
catch2
|
||||||
|
${{ matrix.crypto_package }} ${{ matrix.jwt_package }}
|
||||||
|
- name: Prepare
|
||||||
|
run: mkdir build
|
||||||
|
- name: Configure
|
||||||
|
run: cd build && cmake --version && cmake .. -DBUILD_MAN=0 -DBUILD_TEST_SUITE=1 -DENABLE_WERROR=1 -DZM_CRYPTO_BACKEND=${{ matrix.crypto_backend }} -DZM_JWT_BACKEND=${{ matrix.jwt_backend }}
|
||||||
|
- name: Build
|
||||||
|
run: cd build && make -j3 | grep --line-buffered -Ev '^(cp lib\/|Installing.+\.pm)' && (exit ${PIPESTATUS[0]})
|
||||||
|
- name: Run tests
|
||||||
|
run: cd build/tests && ./tests "~[notCI]"
|
|
@ -0,0 +1,54 @@
|
||||||
|
name: CI Debian Buster
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- '*'
|
||||||
|
pull_request:
|
||||||
|
branches: [ master ]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
shell: bash
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
crypto_backend: [ gnutls, openssl ]
|
||||||
|
jwt_backend: [ libjwt, jwt_cpp ]
|
||||||
|
include:
|
||||||
|
- crypto_backend: gnutls
|
||||||
|
crypto_package: libgnutls28-dev
|
||||||
|
jwt_package: libjwt-gnutls-dev
|
||||||
|
- crypto_backend: openssl
|
||||||
|
crypto_package: libssl-dev
|
||||||
|
jwt_package: libjwt-dev
|
||||||
|
exclude:
|
||||||
|
- crypto_backend: gnutls
|
||||||
|
jwt_backend: jwt_cpp
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container: debian:buster
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Update packages
|
||||||
|
run: apt-get -qq update && apt-get -qq upgrade
|
||||||
|
- name: Install git
|
||||||
|
run: apt-get -qq install git
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
- name: Install dependencies
|
||||||
|
run: >
|
||||||
|
apt-get -qq install make cmake g++
|
||||||
|
default-libmysqlclient-dev
|
||||||
|
libavcodec-dev libavformat-dev libavutil-dev libswresample-dev libswscale-dev
|
||||||
|
libcurl4-gnutls-dev libvlc-dev libvncserver-dev
|
||||||
|
libdate-manip-perl libdbd-mysql-perl libsys-mmap-perl libwww-perl
|
||||||
|
libpolkit-gobject-1-dev
|
||||||
|
${{ matrix.crypto_package }} ${{ matrix.jwt_package }}
|
||||||
|
- name: Prepare
|
||||||
|
run: mkdir build
|
||||||
|
- name: Configure
|
||||||
|
run: cd build && cmake --version && cmake .. -DBUILD_MAN=0 -DENABLE_WERROR=1 -DZM_CRYPTO_BACKEND=${{ matrix.crypto_backend }} -DZM_JWT_BACKEND=${{ matrix.jwt_backend }}
|
||||||
|
- name: Build
|
||||||
|
run: cd build && make -j3 | grep --line-buffered -Ev '^(cp lib\/|Installing.+\.pm)' && (exit ${PIPESTATUS[0]})
|
|
@ -0,0 +1,39 @@
|
||||||
|
name: CI CentOS 7
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- '*'
|
||||||
|
pull_request:
|
||||||
|
branches: [ master ]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
crypto_backend: [ gnutls, openssl ]
|
||||||
|
jwt_backend: [ libjwt, jwt_cpp ]
|
||||||
|
exclude:
|
||||||
|
- crypto_backend: gnutls
|
||||||
|
jwt_backend: jwt_cpp
|
||||||
|
- crypto_backend: gnutls
|
||||||
|
jwt_backend: libjwt
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container: centos:7
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Enable RPMFusion and EPEL
|
||||||
|
run: yum -y install https://mirrors.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
|
||||||
|
- name: Install git
|
||||||
|
run: yum -y install https://repo.ius.io/ius-release-el7.rpm && yum -y install git224
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
- name: Install dependencies
|
||||||
|
run: yum -y update && yum -y install make cmake3 gcc-c++ mariadb-devel ffmpeg-devel libcurl-devel vlc-devel libvncserver-devel libjpeg-turbo-devel "perl(Date::Manip)" "perl(DBD::mysql)" "perl(ExtUtils::MakeMaker)" "perl(Sys::Mmap)" "perl(Sys::Syslog)" "perl(LWP::UserAgent)" polkit-devel libjwt-devel
|
||||||
|
- name: Prepare
|
||||||
|
run: mkdir build
|
||||||
|
- name: Configure
|
||||||
|
run: cd build && cmake3 --version && cmake3 .. -DBUILD_MAN=0 -DENABLE_WERROR=1 -DZM_CRYPTO_BACKEND=${{ matrix.crypto_backend }} -DZM_JWT_BACKEND=${{ matrix.jwt_backend }}
|
||||||
|
- name: Build
|
||||||
|
run: cd build && make -j3 | grep --line-buffered -Ev '^(cp lib\/|Installing.+\.pm)' && (exit ${PIPESTATUS[0]})
|
|
@ -0,0 +1,41 @@
|
||||||
|
name: CI CentOS 8
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- '*'
|
||||||
|
pull_request:
|
||||||
|
branches: [ master ]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
crypto_backend: [ gnutls, openssl ]
|
||||||
|
jwt_backend: [ libjwt, jwt_cpp ]
|
||||||
|
exclude:
|
||||||
|
- crypto_backend: gnutls
|
||||||
|
jwt_backend: jwt_cpp
|
||||||
|
- crypto_backend: gnutls
|
||||||
|
jwt_backend: libjwt
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container: centos:8
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Enable RPMFusion, EPEL and PowerTools
|
||||||
|
run: yum -y install "dnf-command(config-manager)" https://mirrors.rpmfusion.org/free/el/rpmfusion-free-release-8.noarch.rpm https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm && yum config-manager --set-enabled powertools
|
||||||
|
- name: Install git
|
||||||
|
run: yum -y install git
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
- name: Install dependencies
|
||||||
|
run: yum -y update && yum -y install make cmake gcc-c++ catch-devel mariadb-devel ffmpeg-devel libcurl-devel vlc-devel libvncserver-devel libjpeg-turbo-devel "perl(Date::Manip)" "perl(DBD::mysql)" "perl(ExtUtils::MakeMaker)" "perl(Sys::Mmap)" "perl(Sys::Syslog)" "perl(LWP::UserAgent)" polkit-devel libjwt-devel
|
||||||
|
- name: Prepare
|
||||||
|
run: mkdir build
|
||||||
|
- name: Configure
|
||||||
|
run: cd build && cmake --version && cmake .. -DBUILD_MAN=0 -DBUILD_TEST_SUITE=1 -DENABLE_WERROR=1 -DZM_CRYPTO_BACKEND=${{ matrix.crypto_backend }} -DZM_JWT_BACKEND=${{ matrix.jwt_backend }}
|
||||||
|
- name: Build
|
||||||
|
run: cd build && make -j3 | grep --line-buffered -Ev '^(cp lib\/|Installing.+\.pm)' && (exit ${PIPESTATUS[0]})
|
||||||
|
- name: Run tests
|
||||||
|
run: cd build/tests && ./tests "~[notCI]"
|
|
@ -0,0 +1,21 @@
|
||||||
|
name: CI ESLint
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- '*'
|
||||||
|
pull_request:
|
||||||
|
branches: [ master ]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
eslint:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
- name: Install ESLint
|
||||||
|
run: npm install eslint@5.12.0 eslint-config-google@0.11.0 eslint-plugin-html@5.0.0 eslint-plugin-php-markup@0.2.5
|
||||||
|
- name: Run ESLint
|
||||||
|
run: npx eslint --ext .php,.js .
|
|
@ -0,0 +1,40 @@
|
||||||
|
name: CI Debian Stretch
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- '*'
|
||||||
|
pull_request:
|
||||||
|
branches: [ master ]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
shell: bash
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container: debian:stretch-backports
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Update packages
|
||||||
|
run: apt-get -qq update && apt-get -qq upgrade
|
||||||
|
- name: Install git
|
||||||
|
run: apt-get -qq install git/stretch-backports git-man/stretch-backports
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
- name: Install dependencies
|
||||||
|
run: >
|
||||||
|
apt-get -qq install make cmake g++
|
||||||
|
default-libmysqlclient-dev
|
||||||
|
libavcodec-dev libavformat-dev libavutil-dev libswresample-dev libswscale-dev
|
||||||
|
libcurl4-gnutls-dev libvlc-dev libvncserver-dev
|
||||||
|
libdate-manip-perl libdbd-mysql-perl libsys-mmap-perl libwww-perl
|
||||||
|
libpolkit-gobject-1-dev
|
||||||
|
libssl-dev
|
||||||
|
- name: Prepare
|
||||||
|
run: mkdir build
|
||||||
|
- name: Configure
|
||||||
|
run: cd build && cmake --version && cmake .. -DBUILD_MAN=0 -DENABLE_WERROR=1
|
||||||
|
- name: Build
|
||||||
|
run: cd build && make -j3 | grep --line-buffered -Ev '^(cp lib\/|Installing.+\.pm)' && (exit ${PIPESTATUS[0]})
|
|
@ -1,25 +0,0 @@
|
||||||
name: CI Xenial
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- '*'
|
|
||||||
pull_request:
|
|
||||||
branches: [ master ]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
runs-on: zm-xenial-ci
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
with:
|
|
||||||
submodules: recursive
|
|
||||||
- name: Install dependencies
|
|
||||||
run: sudo apt-get update && sudo apt-get install libavdevice-dev libcurl4-gnutls-dev libvlc-dev libvncserver-dev libdate-manip-perl libdbd-mysql-perl libsys-mmap-perl libpolkit-gobject-1-dev
|
|
||||||
- name: Prepare
|
|
||||||
run: mkdir build
|
|
||||||
- name: Configure
|
|
||||||
run: cd build && cmake --version && cmake .. -DBUILD_MAN=0 -DENABLE_WERROR=1
|
|
||||||
- name: Build
|
|
||||||
run: cd build && make -j3 | grep --line-buffered -Ev '^(cp lib\/|Installing.+\.pm)' && (exit ${PIPESTATUS[0]})
|
|
|
@ -52,8 +52,8 @@ jobs:
|
||||||
git submodule init
|
git submodule init
|
||||||
git submodule update --init --recursive
|
git submodule update --init --recursive
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get install libavdevice-dev libavcodec-dev libavformat-dev libavutil-dev libswresample-dev libswscale-dev libjwt-gnutls-dev
|
sudo apt-get install libavcodec-dev libavformat-dev libavutil-dev libswresample-dev libswscale-dev libjwt-gnutls-dev
|
||||||
sudo apt-get install libbz2-dev libgcrypt20-dev libcurl4-gnutls-dev libjpeg-turbo8-dev libturbojpeg0-dev
|
sudo apt-get install libbz2-dev libcurl4-gnutls-dev libjpeg-turbo8-dev libturbojpeg0-dev
|
||||||
sudo apt-get install default-libmysqlclient-dev libpcre3-dev libpolkit-gobject-1-dev libv4l-dev libvlc-dev
|
sudo apt-get install default-libmysqlclient-dev libpcre3-dev libpolkit-gobject-1-dev libv4l-dev libvlc-dev
|
||||||
sudo apt-get install libdate-manip-perl libdbd-mysql-perl libphp-serialization-perl libsys-mmap-perl
|
sudo apt-get install libdate-manip-perl libdbd-mysql-perl libphp-serialization-perl libsys-mmap-perl
|
||||||
sudo apt-get install libwww-perl libdata-uuid-perl libssl-dev libcrypt-eksblowfish-perl libdata-entropy-perl
|
sudo apt-get install libwww-perl libdata-uuid-perl libssl-dev libcrypt-eksblowfish-perl libdata-entropy-perl
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
name: Create packages
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- '*'
|
||||||
|
pull_request:
|
||||||
|
branches: [ master ]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
package:
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
os_dist:
|
||||||
|
- os: debian
|
||||||
|
dist: buster
|
||||||
|
- os: debian
|
||||||
|
dist: bullseye
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
- name: Run packpack
|
||||||
|
env:
|
||||||
|
SMPFLAGS: -j4
|
||||||
|
OS: ${{ matrix.os_dist.os }}
|
||||||
|
DIST: ${{ matrix.os_dist.dist }}
|
||||||
|
DOCKER_REPO: iconzm/packpack
|
||||||
|
run: utils/packpack/startpackpack.sh
|
|
@ -124,6 +124,7 @@ src/zmc
|
||||||
src/zmf
|
src/zmf
|
||||||
src/zms
|
src/zms
|
||||||
src/zmu
|
src/zmu
|
||||||
|
src/zm_rtsp_server
|
||||||
src/zoneminder-zmc.8
|
src/zoneminder-zmc.8
|
||||||
src/zoneminder-zmc.8.gz
|
src/zoneminder-zmc.8.gz
|
||||||
src/zoneminder-zmf.8
|
src/zoneminder-zmf.8
|
||||||
|
|
|
@ -11,6 +11,7 @@ deb:
|
||||||
- docker
|
- docker
|
||||||
script:
|
script:
|
||||||
- yes "" | ./utils/do_debian_package.sh --snapshot=stable --type=binary --interactive=no --dput=no --debbuild-extra=--no-sign || true
|
- yes "" | ./utils/do_debian_package.sh --snapshot=stable --type=binary --interactive=no --dput=no --debbuild-extra=--no-sign || true
|
||||||
|
timeout: 2h
|
||||||
artifacts:
|
artifacts:
|
||||||
paths:
|
paths:
|
||||||
- '*.deb'
|
- '*.deb'
|
||||||
|
|
58
.travis.yml
58
.travis.yml
|
@ -1,58 +0,0 @@
|
||||||
language: cpp
|
|
||||||
sudo: required
|
|
||||||
dist: bionic
|
|
||||||
git:
|
|
||||||
depth: 9999999
|
|
||||||
notifications:
|
|
||||||
irc: chat.freenode.net#zoneminder-dev
|
|
||||||
branches:
|
|
||||||
except:
|
|
||||||
- modern
|
|
||||||
cache: ccache
|
|
||||||
addons:
|
|
||||||
ssh_known_hosts: zmrepo.zoneminder.com
|
|
||||||
apt:
|
|
||||||
sources:
|
|
||||||
- sourceline: ppa:iconnor/zoneminder-master
|
|
||||||
- key_url: http://keyserver.ubuntu.com:11371/pks/lookup?op=get&search=0x4D0BF748776FFB04
|
|
||||||
packages:
|
|
||||||
- gdebi
|
|
||||||
- yum-utils
|
|
||||||
- patch
|
|
||||||
- git
|
|
||||||
- curl
|
|
||||||
- sshfs
|
|
||||||
- sed
|
|
||||||
- binfmt-support
|
|
||||||
- qemu
|
|
||||||
- qemu-user-static
|
|
||||||
- dnsutils
|
|
||||||
- traceroute
|
|
||||||
install:
|
|
||||||
- update-binfmts --enable qemu-arm
|
|
||||||
|
|
||||||
env:
|
|
||||||
- SMPFLAGS=-j4 OS=eslint DIST=eslint
|
|
||||||
- SMPFLAGS=-j4 OS=ubuntu DIST=bionic DOCKER_REPO=iconzm/packpack
|
|
||||||
|
|
||||||
compiler:
|
|
||||||
- gcc
|
|
||||||
services:
|
|
||||||
- mysql
|
|
||||||
- docker
|
|
||||||
|
|
||||||
script:
|
|
||||||
- utils/packpack/startpackpack.sh
|
|
||||||
|
|
||||||
before_deploy:
|
|
||||||
- openssl aes-256-cbc -K $encrypted_62a62750aa73_key -iv $encrypted_62a62750aa73_iv -in ./utils/packpack/deploy_rsa.enc -out /tmp/deploy_rsa -d
|
|
||||||
- eval "$(ssh-agent -s)"
|
|
||||||
- chmod 600 /tmp/deploy_rsa
|
|
||||||
- ssh-add /tmp/deploy_rsa
|
|
||||||
|
|
||||||
deploy:
|
|
||||||
provider: script
|
|
||||||
skip_cleanup: true
|
|
||||||
script: utils/packpack/rsync_xfer.sh
|
|
||||||
on:
|
|
||||||
branch: master
|
|
305
CMakeLists.txt
305
CMakeLists.txt
|
@ -69,9 +69,7 @@ include(GNUInstallDirs)
|
||||||
include(CheckIncludeFile)
|
include(CheckIncludeFile)
|
||||||
include(CheckIncludeFiles)
|
include(CheckIncludeFiles)
|
||||||
include(CheckFunctionExists)
|
include(CheckFunctionExists)
|
||||||
include(CheckPrototypeDefinition_fixed)
|
|
||||||
include(CheckTypeSize)
|
include(CheckTypeSize)
|
||||||
include(CheckStructHasMember)
|
|
||||||
include(CheckSendfile)
|
include(CheckSendfile)
|
||||||
|
|
||||||
# Configuration options
|
# Configuration options
|
||||||
|
@ -169,6 +167,8 @@ set(ZM_NO_X10 "OFF" CACHE BOOL
|
||||||
set(ZM_ONVIF "ON" CACHE BOOL
|
set(ZM_ONVIF "ON" CACHE BOOL
|
||||||
"Set to ON to enable basic ONVIF support. This is EXPERIMENTAL and may not
|
"Set to ON to enable basic ONVIF support. This is EXPERIMENTAL and may not
|
||||||
work with all cameras claiming to be ONVIF compliant. default: ON")
|
work with all cameras claiming to be ONVIF compliant. default: ON")
|
||||||
|
set(ZM_NO_PCRE "OFF" CACHE BOOL
|
||||||
|
"Set to ON to skip libpcre3 checks and force building ZM without libpcre3. default: OFF")
|
||||||
set(ZM_NO_RTSPSERVER "OFF" CACHE BOOL
|
set(ZM_NO_RTSPSERVER "OFF" CACHE BOOL
|
||||||
"Set to ON to skip building ZM with rtsp server support. default: OFF")
|
"Set to ON to skip building ZM with rtsp server support. default: OFF")
|
||||||
set(ZM_PERL_MM_PARMS INSTALLDIRS=vendor NO_PACKLIST=1 NO_PERLLOCAL=1 CACHE STRING
|
set(ZM_PERL_MM_PARMS INSTALLDIRS=vendor NO_PACKLIST=1 NO_PERLLOCAL=1 CACHE STRING
|
||||||
|
@ -192,6 +192,24 @@ set(ZM_MANPAGE_DEST_PREFIX "share/man" CACHE PATH
|
||||||
set(ZM_CAKEPHP_CACHE "Apc" CACHE STRING
|
set(ZM_CAKEPHP_CACHE "Apc" CACHE STRING
|
||||||
"Set the CakePHP cache engine, default: Apc")
|
"Set the CakePHP cache engine, default: Apc")
|
||||||
|
|
||||||
|
# Supported crypto backends. Using OpenSSL by default to be compatible with jwt-cpp.
|
||||||
|
set(ZM_CRYPTO_BACKEND_OPTIONS gnutls openssl)
|
||||||
|
set(ZM_CRYPTO_BACKEND openssl CACHE STRING "Determines which crypto backend should be used.")
|
||||||
|
set_property(CACHE ZM_CRYPTO_BACKEND PROPERTY STRINGS ${ZM_CRYPTO_BACKEND_OPTIONS})
|
||||||
|
|
||||||
|
if(NOT ZM_CRYPTO_BACKEND IN_LIST ZM_CRYPTO_BACKEND_OPTIONS)
|
||||||
|
message(FATAL_ERROR "Invalid value for ZM_CRYPTO_BACKEND. Possible options: ${ZM_CRYPTO_BACKEND_OPTIONS}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Supported JWT backends. Using jwt-cpp as default.
|
||||||
|
set(ZM_JWT_BACKEND_OPTIONS libjwt jwt_cpp)
|
||||||
|
set(ZM_JWT_BACKEND jwt_cpp CACHE STRING "Determines which JWT backend should be used.")
|
||||||
|
set_property(CACHE ZM_JWT_BACKEND PROPERTY STRINGS ${ZM_JWT_BACKEND_OPTIONS})
|
||||||
|
|
||||||
|
if(NOT ZM_JWT_BACKEND IN_LIST ZM_JWT_BACKEND_OPTIONS)
|
||||||
|
message(FATAL_ERROR "Invalid value for ZM_JWT_BACKEND. Possible options: ${ZM_JWT_BACKEND_OPTIONS}")
|
||||||
|
endif()
|
||||||
|
|
||||||
# Reassign some variables if a target distro has been specified
|
# Reassign some variables if a target distro has been specified
|
||||||
if(ZM_TARGET_DISTRO MATCHES "^fc")
|
if(ZM_TARGET_DISTRO MATCHES "^fc")
|
||||||
set(ZM_CAKEPHP_CACHE "Memcached")
|
set(ZM_CAKEPHP_CACHE "Memcached")
|
||||||
|
@ -252,11 +270,6 @@ if(ZM_SYSTEMD OR (IS_DIRECTORY /usr/lib/systemd/system) OR (IS_DIRECTORY /lib/sy
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# System checks
|
# System checks
|
||||||
check_include_file("libv4l1-videodev.h" HAVE_LIBV4L1_VIDEODEV_H)
|
|
||||||
if(NOT HAVE_LIBV4L1_VIDEODEV_H)
|
|
||||||
check_include_file("linux/videodev.h" HAVE_LINUX_VIDEODEV_H)
|
|
||||||
endif()
|
|
||||||
check_include_file("linux/videodev2.h" HAVE_LINUX_VIDEODEV2_H)
|
|
||||||
check_include_file("execinfo.h" HAVE_EXECINFO_H)
|
check_include_file("execinfo.h" HAVE_EXECINFO_H)
|
||||||
if(HAVE_EXECINFO_H)
|
if(HAVE_EXECINFO_H)
|
||||||
check_function_exists("backtrace" HAVE_DECL_BACKTRACE)
|
check_function_exists("backtrace" HAVE_DECL_BACKTRACE)
|
||||||
|
@ -336,19 +349,20 @@ else()
|
||||||
"ZoneMinder requires jpeg but it was not found on your system")
|
"ZoneMinder requires jpeg but it was not found on your system")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# LIBJWT
|
# libjwt
|
||||||
find_package(LibJWT)
|
if (${ZM_JWT_BACKEND} STREQUAL "libjwt")
|
||||||
if(LIBJWT_FOUND)
|
find_package(LibJWT REQUIRED COMPONENTS ${ZM_CRYPTO_BACKEND})
|
||||||
set(HAVE_LIBJWT 1)
|
if(LIBJWT_FOUND)
|
||||||
set(optlibsfound "${optlibsfound} LIBJWT")
|
set(HAVE_LIBJWT 1)
|
||||||
list(APPEND ZM_BIN_LIBS "${LIBJWT_LIBRARY}")
|
set(optlibsfound "${optlibsfound} LIBJWT")
|
||||||
else()
|
else()
|
||||||
set(optlibsnotfound "${optlibsnotfound} LIBJWT")
|
set(optlibsnotfound "${optlibsnotfound} LIBJWT")
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# gnutls (using find_library and find_path)
|
# GnuTLS
|
||||||
if(HAVE_LIBJWT)
|
if (${ZM_CRYPTO_BACKEND} STREQUAL "gnutls")
|
||||||
find_library(GNUTLS_LIBRARIES gnutls)
|
find_library(GNUTLS_LIBRARIES gnutls REQUIRED)
|
||||||
if(GNUTLS_LIBRARIES)
|
if(GNUTLS_LIBRARIES)
|
||||||
set(HAVE_LIBGNUTLS 1)
|
set(HAVE_LIBGNUTLS 1)
|
||||||
list(APPEND ZM_BIN_LIBS "${GNUTLS_LIBRARIES}")
|
list(APPEND ZM_BIN_LIBS "${GNUTLS_LIBRARIES}")
|
||||||
|
@ -358,23 +372,18 @@ if(HAVE_LIBJWT)
|
||||||
set(CMAKE_REQUIRED_INCLUDES "${GNUTLS_INCLUDE_DIR}")
|
set(CMAKE_REQUIRED_INCLUDES "${GNUTLS_INCLUDE_DIR}")
|
||||||
endif()
|
endif()
|
||||||
mark_as_advanced(FORCE GNUTLS_LIBRARIES GNUTLS_INCLUDE_DIR)
|
mark_as_advanced(FORCE GNUTLS_LIBRARIES GNUTLS_INCLUDE_DIR)
|
||||||
check_include_file("gnutls/gnutls.h" HAVE_GNUTLS_GNUTLS_H)
|
|
||||||
set(optlibsfound "${optlibsfound} GnuTLS")
|
set(optlibsfound "${optlibsfound} GnuTLS")
|
||||||
else()
|
else()
|
||||||
set(optlibsnotfound "${optlibsnotfound} GnuTLS")
|
set(optlibsnotfound "${optlibsnotfound} GnuTLS")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
|
||||||
|
|
||||||
# OpenSSL
|
# OpenSSL
|
||||||
if(NOT HAVE_LIBGNUTLS OR NOT HAVE_LIBJWT)
|
elseif (${ZM_CRYPTO_BACKEND} STREQUAL "openssl")
|
||||||
find_package(OpenSSL)
|
find_package(OpenSSL REQUIRED)
|
||||||
if(OPENSSL_FOUND)
|
if(OPENSSL_FOUND)
|
||||||
set(HAVE_LIBOPENSSL 1)
|
set(HAVE_LIBOPENSSL 1)
|
||||||
set(HAVE_LIBCRYPTO 1)
|
|
||||||
list(APPEND ZM_BIN_LIBS "${OPENSSL_LIBRARIES}")
|
list(APPEND ZM_BIN_LIBS "${OPENSSL_LIBRARIES}")
|
||||||
include_directories("${OPENSSL_INCLUDE_DIR}")
|
include_directories("${OPENSSL_INCLUDE_DIR}")
|
||||||
set(CMAKE_REQUIRED_INCLUDES "${OPENSSL_INCLUDE_DIR}")
|
set(CMAKE_REQUIRED_INCLUDES "${OPENSSL_INCLUDE_DIR}")
|
||||||
check_include_file("openssl/md5.h" HAVE_OPENSSL_MD5_H)
|
|
||||||
set(optlibsfound "${optlibsfound} OpenSSL")
|
set(optlibsfound "${optlibsfound} OpenSSL")
|
||||||
else()
|
else()
|
||||||
set(optlibsnotfound "${optlibsnotfound} OpenSSL")
|
set(optlibsnotfound "${optlibsnotfound} OpenSSL")
|
||||||
|
@ -400,38 +409,24 @@ else()
|
||||||
message(FATAL_ERROR "ZoneMinder requires pthread but it was not found on your system")
|
message(FATAL_ERROR "ZoneMinder requires pthread but it was not found on your system")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# pcre (using find_library and find_path)
|
# Do not check for cURL if ZM_NO_CURL is on
|
||||||
find_library(PCRE_LIBRARIES pcre)
|
if(NOT ZM_NO_PRCE)
|
||||||
if(PCRE_LIBRARIES)
|
# pcre (using find_library and find_path)
|
||||||
set(HAVE_LIBPCRE 1)
|
find_library(PCRE_LIBRARIES pcre)
|
||||||
list(APPEND ZM_BIN_LIBS "${PCRE_LIBRARIES}")
|
if(PCRE_LIBRARIES)
|
||||||
find_path(PCRE_INCLUDE_DIR pcre.h)
|
set(HAVE_LIBPCRE 1)
|
||||||
if(PCRE_INCLUDE_DIR)
|
list(APPEND ZM_BIN_LIBS "${PCRE_LIBRARIES}")
|
||||||
include_directories("${PCRE_INCLUDE_DIR}")
|
find_path(PCRE_INCLUDE_DIR pcre.h)
|
||||||
set(CMAKE_REQUIRED_INCLUDES "${PCRE_INCLUDE_DIR}")
|
if(PCRE_INCLUDE_DIR)
|
||||||
|
include_directories("${PCRE_INCLUDE_DIR}")
|
||||||
|
set(CMAKE_REQUIRED_INCLUDES "${PCRE_INCLUDE_DIR}")
|
||||||
|
endif()
|
||||||
|
mark_as_advanced(FORCE PCRE_LIBRARIES PCRE_INCLUDE_DIR)
|
||||||
|
check_include_file("pcre.h" HAVE_PCRE_H)
|
||||||
|
set(optlibsfound "${optlibsfound} PCRE")
|
||||||
|
else()
|
||||||
|
set(optlibsnotfound "${optlibsnotfound} PCRE")
|
||||||
endif()
|
endif()
|
||||||
mark_as_advanced(FORCE PCRE_LIBRARIES PCRE_INCLUDE_DIR)
|
|
||||||
check_include_file("pcre.h" HAVE_PCRE_H)
|
|
||||||
set(optlibsfound "${optlibsfound} PCRE")
|
|
||||||
else()
|
|
||||||
set(optlibsnotfound "${optlibsnotfound} PCRE")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# gcrypt (using find_library and find_path)
|
|
||||||
find_library(GCRYPT_LIBRARIES gcrypt)
|
|
||||||
if(GCRYPT_LIBRARIES)
|
|
||||||
set(HAVE_LIBGCRYPT 1)
|
|
||||||
list(APPEND ZM_BIN_LIBS "${GCRYPT_LIBRARIES}")
|
|
||||||
find_path(GCRYPT_INCLUDE_DIR gcrypt.h)
|
|
||||||
if(GCRYPT_INCLUDE_DIR)
|
|
||||||
include_directories("${GCRYPT_INCLUDE_DIR}")
|
|
||||||
set(CMAKE_REQUIRED_INCLUDES "${GCRYPT_INCLUDE_DIR}")
|
|
||||||
endif()
|
|
||||||
mark_as_advanced(FORCE GCRYPT_LIBRARIES GCRYPT_INCLUDE_DIR)
|
|
||||||
check_include_file("gcrypt.h" HAVE_GCRYPT_H)
|
|
||||||
set(optlibsfound "${optlibsfound} GCrypt")
|
|
||||||
else()
|
|
||||||
set(optlibsnotfound "${optlibsnotfound} GCrypt")
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# mysqlclient (using find_library and find_path)
|
# mysqlclient (using find_library and find_path)
|
||||||
|
@ -453,129 +448,19 @@ else()
|
||||||
message(FATAL_ERROR "ZoneMinder requires mysqlclient but it was not found on your system")
|
message(FATAL_ERROR "ZoneMinder requires mysqlclient but it was not found on your system")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
find_package(FFMPEG 55.34.100 REQUIRED
|
||||||
|
COMPONENTS
|
||||||
|
avcodec
|
||||||
|
avformat
|
||||||
|
avutil
|
||||||
|
swresample
|
||||||
|
swscale)
|
||||||
|
|
||||||
|
set(CMAKE_REQUIRED_INCLUDES ${FFMPEG_avutil_INCLUDE_DIRS})
|
||||||
|
check_include_file("libavutil/hwcontext.h" HAVE_LIBAVUTIL_HWCONTEXT_H)
|
||||||
|
|
||||||
set(PATH_FFMPEG "")
|
set(PATH_FFMPEG "")
|
||||||
set(OPT_FFMPEG "no")
|
set(OPT_FFMPEG "no")
|
||||||
# avformat (using find_library and find_path)
|
|
||||||
find_library(AVFORMAT_LIBRARIES avformat)
|
|
||||||
if(AVFORMAT_LIBRARIES)
|
|
||||||
set(HAVE_LIBAVFORMAT 1)
|
|
||||||
list(APPEND ZM_BIN_LIBS "${AVFORMAT_LIBRARIES}")
|
|
||||||
find_path(AVFORMAT_INCLUDE_DIR "libavformat/avformat.h" /usr/include/ffmpeg)
|
|
||||||
if(AVFORMAT_INCLUDE_DIR)
|
|
||||||
include_directories("${AVFORMAT_INCLUDE_DIR}")
|
|
||||||
set(CMAKE_REQUIRED_INCLUDES "${AVFORMAT_INCLUDE_DIR}")
|
|
||||||
endif()
|
|
||||||
mark_as_advanced(FORCE AVFORMAT_LIBRARIES AVFORMAT_INCLUDE_DIR)
|
|
||||||
check_include_file("libavformat/avformat.h" HAVE_LIBAVFORMAT_AVFORMAT_H)
|
|
||||||
set(optlibsfound "${optlibsfound} AVFormat")
|
|
||||||
else()
|
|
||||||
set(optlibsnotfound "${optlibsnotfound} AVFormat")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# avcodec (using find_library and find_path)
|
|
||||||
find_library(AVCODEC_LIBRARIES avcodec)
|
|
||||||
if(AVCODEC_LIBRARIES)
|
|
||||||
set(HAVE_LIBAVCODEC 1)
|
|
||||||
list(APPEND ZM_BIN_LIBS "${AVCODEC_LIBRARIES}")
|
|
||||||
find_path(AVCODEC_INCLUDE_DIR "libavcodec/avcodec.h" /usr/include/ffmpeg)
|
|
||||||
if(AVCODEC_INCLUDE_DIR)
|
|
||||||
include_directories("${AVCODEC_INCLUDE_DIR}")
|
|
||||||
set(CMAKE_REQUIRED_INCLUDES "${AVCODEC_INCLUDE_DIR}")
|
|
||||||
endif()
|
|
||||||
mark_as_advanced(FORCE AVCODEC_LIBRARIES AVCODEC_INCLUDE_DIR)
|
|
||||||
check_include_file("libavcodec/avcodec.h" HAVE_LIBAVCODEC_AVCODEC_H)
|
|
||||||
set(optlibsfound "${optlibsfound} AVCodec")
|
|
||||||
else()
|
|
||||||
message(WARNING "\nWhile it should be possible to build ZM without AVCODEC the result will pretty useless.")
|
|
||||||
set(optlibsnotfound "${optlibsnotfound} AVCodec")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# avdevice (using find_library and find_path)
|
|
||||||
find_library(AVDEVICE_LIBRARIES avdevice)
|
|
||||||
if(AVDEVICE_LIBRARIES)
|
|
||||||
set(HAVE_LIBAVDEVICE 1)
|
|
||||||
list(APPEND ZM_BIN_LIBS "${AVDEVICE_LIBRARIES}")
|
|
||||||
find_path(AVDEVICE_INCLUDE_DIR "libavdevice/avdevice.h" /usr/include/ffmpeg)
|
|
||||||
if(AVDEVICE_INCLUDE_DIR)
|
|
||||||
include_directories("${AVDEVICE_INCLUDE_DIR}")
|
|
||||||
set(CMAKE_REQUIRED_INCLUDES "${AVDEVICE_INCLUDE_DIR}")
|
|
||||||
endif()
|
|
||||||
mark_as_advanced(FORCE AVDEVICE_LIBRARIES AVDEVICE_INCLUDE_DIR)
|
|
||||||
check_include_file("libavdevice/avdevice.h" HAVE_LIBAVDEVICE_AVDEVICE_H)
|
|
||||||
set(optlibsfound "${optlibsfound} AVDevice")
|
|
||||||
else()
|
|
||||||
set(optlibsnotfound "${optlibsnotfound} AVDevice")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# avutil (using find_library and find_path)
|
|
||||||
find_library(AVUTIL_LIBRARIES avutil)
|
|
||||||
if(AVUTIL_LIBRARIES)
|
|
||||||
set(HAVE_LIBAVUTIL 1)
|
|
||||||
list(APPEND ZM_BIN_LIBS "${AVUTIL_LIBRARIES}")
|
|
||||||
find_path(AVUTIL_INCLUDE_DIR "libavutil/avutil.h" /usr/include/ffmpeg)
|
|
||||||
if(AVUTIL_INCLUDE_DIR)
|
|
||||||
include_directories("${AVUTIL_INCLUDE_DIR}")
|
|
||||||
set(CMAKE_REQUIRED_INCLUDES "${AVUTIL_INCLUDE_DIR}")
|
|
||||||
endif()
|
|
||||||
mark_as_advanced(FORCE AVUTIL_LIBRARIES AVUTIL_INCLUDE_DIR)
|
|
||||||
check_include_file("libavutil/avutil.h" HAVE_LIBAVUTIL_AVUTIL_H)
|
|
||||||
check_include_file("libavutil/mathematics.h" HAVE_LIBAVUTIL_MATHEMATICS_H)
|
|
||||||
check_include_file("libavutil/hwcontext.h" HAVE_LIBAVUTIL_HWCONTEXT_H)
|
|
||||||
set(optlibsfound "${optlibsfound} AVUtil")
|
|
||||||
else()
|
|
||||||
set(optlibsnotfound "${optlibsnotfound} AVUtil")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# swscale (using find_library and find_path)
|
|
||||||
find_library(SWSCALE_LIBRARIES swscale)
|
|
||||||
if(SWSCALE_LIBRARIES)
|
|
||||||
set(HAVE_LIBSWSCALE 1)
|
|
||||||
list(APPEND ZM_BIN_LIBS "${SWSCALE_LIBRARIES}")
|
|
||||||
find_path(SWSCALE_INCLUDE_DIR "libswscale/swscale.h" /usr/include/ffmpeg)
|
|
||||||
if(SWSCALE_INCLUDE_DIR)
|
|
||||||
include_directories("${SWSCALE_INCLUDE_DIR}")
|
|
||||||
set(CMAKE_REQUIRED_INCLUDES "${SWSCALE_INCLUDE_DIR}")
|
|
||||||
endif()
|
|
||||||
mark_as_advanced(FORCE SWSCALE_LIBRARIES SWSCALE_INCLUDE_DIR)
|
|
||||||
check_include_file("libswscale/swscale.h" HAVE_LIBSWSCALE_SWSCALE_H)
|
|
||||||
set(optlibsfound "${optlibsfound} SWScale")
|
|
||||||
else()
|
|
||||||
set(optlibsnotfound "${optlibsnotfound} SWScale")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# SWresample (using find_library and find_path)
|
|
||||||
find_library(SWRESAMPLE_LIBRARIES swresample)
|
|
||||||
if(SWRESAMPLE_LIBRARIES)
|
|
||||||
set(HAVE_LIBSWRESAMPLE 1)
|
|
||||||
list(APPEND ZM_BIN_LIBS "${SWRESAMPLE_LIBRARIES}")
|
|
||||||
find_path(SWRESAMPLE_INCLUDE_DIR "libswresample/swresample.h" /usr/include/ffmpeg)
|
|
||||||
if(SWRESAMPLE_INCLUDE_DIR)
|
|
||||||
include_directories("${SWRESAMPLE_INCLUDE_DIR}")
|
|
||||||
set(CMAKE_REQUIRED_INCLUDES "${SWRESAMPLE_INCLUDE_DIR}")
|
|
||||||
endif()
|
|
||||||
mark_as_advanced(FORCE SWRESAMPLE_LIBRARIES SWRESAMPLE_INCLUDE_DIR)
|
|
||||||
check_include_file("libswresample/swresample.h" HAVE_LIBSWRESAMPLE_SWRESAMPLE_H)
|
|
||||||
set(optlibsfound "${optlibsfound} SWResample")
|
|
||||||
else()
|
|
||||||
set(optlibsnotfound "${optlibsnotfound} SWResample")
|
|
||||||
|
|
||||||
# AVresample (using find_library and find_path)
|
|
||||||
find_library(AVRESAMPLE_LIBRARIES avresample)
|
|
||||||
if(AVRESAMPLE_LIBRARIES)
|
|
||||||
set(HAVE_LIBAVRESAMPLE 1)
|
|
||||||
list(APPEND ZM_BIN_LIBS "${AVRESAMPLE_LIBRARIES}")
|
|
||||||
find_path(AVRESAMPLE_INCLUDE_DIR "libavresample/avresample.h" /usr/include/ffmpeg)
|
|
||||||
if(AVRESAMPLE_INCLUDE_DIR)
|
|
||||||
include_directories("${AVRESAMPLE_INCLUDE_DIR}")
|
|
||||||
set(CMAKE_REQUIRED_INCLUDES "${AVRESAMPLE_INCLUDE_DIR}")
|
|
||||||
endif()
|
|
||||||
mark_as_advanced(FORCE AVRESAMPLE_LIBRARIES AVRESAMPLE_INCLUDE_DIR)
|
|
||||||
check_include_file("libavresample/avresample.h" HAVE_LIBAVRESAMPLE_AVRESAMPLE_H)
|
|
||||||
set(optlibsfound "${optlibsfound} AVResample")
|
|
||||||
else()
|
|
||||||
set(optlibsnotfound "${optlibsnotfound} AVResample")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Find the path to the ffmpeg executable
|
# Find the path to the ffmpeg executable
|
||||||
find_program(FFMPEG_EXECUTABLE
|
find_program(FFMPEG_EXECUTABLE
|
||||||
|
@ -642,34 +527,25 @@ endif()
|
||||||
#
|
#
|
||||||
# *** END OF LIBRARY CHECKS ***
|
# *** END OF LIBRARY CHECKS ***
|
||||||
|
|
||||||
# Check for gnutls or crypto
|
# If libjwt is not present we fall back to jwt-cpp which requires OpenSSL
|
||||||
if((NOT HAVE_LIBCRYPTO) AND (NOT HAVE_LIBGNUTLS))
|
if((NOT HAVE_LIBJWT) AND (NOT HAVE_LIBOPENSSL))
|
||||||
message(FATAL_ERROR "ZoneMinder requires crypto or gnutls but none were found on your system")
|
message(FATAL_ERROR "Using the jwt-cpp backend requires OpenSSL as crypto backend.")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Check for V4L header files and enable ZM_HAS_V4L, ZM_HAS_V4L1, ZM_HAS_V4L2 accordingly
|
find_package(V4L2)
|
||||||
# Setting to zeros first is required because ZM uses #define for these
|
if(TARGET V4L2::videodev2)
|
||||||
set(ZM_HAS_V4L 0)
|
|
||||||
set(ZM_HAS_V4L1 0)
|
|
||||||
set(ZM_HAS_V4L2 0)
|
|
||||||
if(HAVE_LINUX_VIDEODEV_H OR HAVE_LIBV4L1_VIDEODEV_H)
|
|
||||||
set(ZM_HAS_V4L 1)
|
|
||||||
set(ZM_HAS_V4L1 1)
|
|
||||||
endif()
|
|
||||||
if(HAVE_LINUX_VIDEODEV2_H)
|
|
||||||
set(ZM_HAS_V4L 1)
|
|
||||||
set(ZM_HAS_V4L2 1)
|
set(ZM_HAS_V4L2 1)
|
||||||
endif()
|
else()
|
||||||
if((NOT HAVE_LINUX_VIDEODEV_H)
|
set(ZM_HAS_V4L2 0)
|
||||||
AND (NOT HAVE_LIBV4L1_VIDEODEV_H)
|
|
||||||
AND (NOT HAVE_LINUX_VIDEODEV2_H))
|
|
||||||
message(AUTHOR_WARNING "Video 4 Linux headers weren't found - Analog and USB camera support will not be available")
|
message(AUTHOR_WARNING "Video 4 Linux headers weren't found - Analog and USB camera support will not be available")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Check for PCRE and enable ZM_PCRE accordingly
|
# Check for PCRE and enable ZM_PCRE accordingly
|
||||||
set(ZM_PCRE 0)
|
set(ZM_PCRE 0)
|
||||||
if(HAVE_LIBPCRE AND HAVE_PCRE_H)
|
if(HAVE_LIBPCRE AND HAVE_PCRE_H)
|
||||||
set(ZM_PCRE 1)
|
set(ZM_PCRE 1)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Check for mmap and enable in all components
|
# Check for mmap and enable in all components
|
||||||
set(ZM_MEM_MAPPED 0)
|
set(ZM_MEM_MAPPED 0)
|
||||||
set(ENABLE_MMAP no)
|
set(ENABLE_MMAP no)
|
||||||
|
@ -685,42 +561,6 @@ if(ZM_ONVIF)
|
||||||
set(ZM_HAS_ONVIF 1)
|
set(ZM_HAS_ONVIF 1)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Check for authentication functions
|
|
||||||
if(HAVE_OPENSSL_MD5_H)
|
|
||||||
set(CMAKE_REQUIRED_LIBRARIES "${OPENSSL_LIBRARIES}")
|
|
||||||
set(CMAKE_REQUIRED_INCLUDES "${OPENSSL_INCLUDE_DIR}")
|
|
||||||
check_prototype_definition(
|
|
||||||
MD5
|
|
||||||
"unsigned char *MD5(const unsigned char *d, size_t n, unsigned char *md)" "NULL" "openssl/md5.h"
|
|
||||||
HAVE_MD5_OPENSSL)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(HAVE_GNUTLS_GNUTLS_H)
|
|
||||||
set(CMAKE_REQUIRED_LIBRARIES "${GNUTLS_LIBRARIES}")
|
|
||||||
set(CMAKE_REQUIRED_INCLUDES "${GNUTLS_INCLUDE_DIR}")
|
|
||||||
check_prototype_definition(
|
|
||||||
gnutls_fingerprint
|
|
||||||
"int gnutls_fingerprint (gnutls_digest_algorithm_t algo, const gnutls_datum_t * data, void *result, size_t * result_size)" "0" "stdlib.h;gnutls/gnutls.h"
|
|
||||||
HAVE_DECL_GNUTLS_FINGERPRINT)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(NOT HAVE_DECL_GNUTLS_FINGERPRINT AND HAVE_MD5_OPENSSL)
|
|
||||||
set(HAVE_DECL_MD5 1)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if((NOT HAVE_MD5_OPENSSL) AND (NOT HAVE_DECL_GNUTLS_FINGERPRINT))
|
|
||||||
message(AUTHOR_WARNING
|
|
||||||
"ZoneMinder requires a working MD5 function for hashed authentication but
|
|
||||||
none were found - hashed authentication will not be available")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Dirty fix for zm_user only using openssl's md5 if gnutls and gcrypt are not available.
|
|
||||||
# This needs to be fixed in zm_user.[h,cpp] but such fix will also require changes to configure.ac
|
|
||||||
if(HAVE_LIBCRYPTO AND HAVE_OPENSSL_MD5_H AND HAVE_MD5_OPENSSL)
|
|
||||||
set(HAVE_GCRYPT_H 0)
|
|
||||||
set(HAVE_GNUTLS_OPENSSL_H 0)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Check for Perl
|
# Check for Perl
|
||||||
find_package(Perl)
|
find_package(Perl)
|
||||||
if(NOT PERL_FOUND)
|
if(NOT PERL_FOUND)
|
||||||
|
@ -858,6 +698,9 @@ endif()
|
||||||
message(STATUS "Optional libraries found:${optlibsfound}")
|
message(STATUS "Optional libraries found:${optlibsfound}")
|
||||||
message(STATUS "Optional libraries not found:${optlibsnotfound}")
|
message(STATUS "Optional libraries not found:${optlibsnotfound}")
|
||||||
|
|
||||||
|
message(STATUS "Enabled crypto backend: ${ZM_CRYPTO_BACKEND}")
|
||||||
|
message(STATUS "Enabled JWT backend: ${ZM_JWT_BACKEND}")
|
||||||
|
|
||||||
# Run ZM configuration generator
|
# Run ZM configuration generator
|
||||||
message(STATUS "Running ZoneMinder configuration generator")
|
message(STATUS "Running ZoneMinder configuration generator")
|
||||||
execute_process(COMMAND perl ${CMAKE_CURRENT_BINARY_DIR}/zmconfgen.pl RESULT_VARIABLE ZMCONFGEN_RESULT)
|
execute_process(COMMAND perl ${CMAKE_CURRENT_BINARY_DIR}/zmconfgen.pl RESULT_VARIABLE ZMCONFGEN_RESULT)
|
||||||
|
|
|
@ -1,29 +0,0 @@
|
||||||
@CHECK_PROTOTYPE_DEFINITION_HEADER@
|
|
||||||
|
|
||||||
static void cmakeRequireSymbol(int dummy, ...) {
|
|
||||||
(void) dummy;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void checkSymbol(void) {
|
|
||||||
#ifndef @CHECK_PROTOTYPE_DEFINITION_SYMBOL@
|
|
||||||
cmakeRequireSymbol(0, &@CHECK_PROTOTYPE_DEFINITION_SYMBOL@);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
@CHECK_PROTOTYPE_DEFINITION_PROTO@ {
|
|
||||||
return @CHECK_PROTOTYPE_DEFINITION_RETURN@;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef __CLASSIC_C__
|
|
||||||
int main() {
|
|
||||||
int ac;
|
|
||||||
char*av[];
|
|
||||||
#else
|
|
||||||
int main(int ac, char *av[]) {
|
|
||||||
#endif
|
|
||||||
checkSymbol();
|
|
||||||
if (ac > 1000) {
|
|
||||||
return *av[0];
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
|
@ -1,98 +0,0 @@
|
||||||
# - Check if the protoype we expect is correct.
|
|
||||||
# check_prototype_definition(FUNCTION PROTOTYPE RETURN HEADER VARIABLE)
|
|
||||||
# FUNCTION - The name of the function (used to check if prototype exists)
|
|
||||||
# PROTOTYPE- The prototype to check.
|
|
||||||
# RETURN - The return value of the function.
|
|
||||||
# HEADER - The header files required.
|
|
||||||
# VARIABLE - The variable to store the result.
|
|
||||||
# Example:
|
|
||||||
# check_prototype_definition(getpwent_r
|
|
||||||
# "struct passwd *getpwent_r(struct passwd *src, char *buf, int buflen)"
|
|
||||||
# "NULL"
|
|
||||||
# "unistd.h;pwd.h"
|
|
||||||
# SOLARIS_GETPWENT_R)
|
|
||||||
# The following variables may be set before calling this macro to
|
|
||||||
# modify the way the check is run:
|
|
||||||
#
|
|
||||||
# CMAKE_REQUIRED_FLAGS = string of compile command line flags
|
|
||||||
# CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar)
|
|
||||||
# CMAKE_REQUIRED_INCLUDES = list of include directories
|
|
||||||
# CMAKE_REQUIRED_LIBRARIES = list of libraries to link
|
|
||||||
|
|
||||||
#=============================================================================
|
|
||||||
# Copyright 2005-2009 Kitware, Inc.
|
|
||||||
# Copyright 2010-2011 Andreas Schneider <asn@cryptomilk.org>
|
|
||||||
#
|
|
||||||
# Distributed under the OSI-approved BSD License (the "License");
|
|
||||||
# see accompanying file Copyright.txt for details.
|
|
||||||
#
|
|
||||||
# This software is distributed WITHOUT ANY WARRANTY; without even the
|
|
||||||
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
# See the License for more information.
|
|
||||||
#=============================================================================
|
|
||||||
# (To distribute this file outside of CMake, substitute the full
|
|
||||||
# License text for the above reference.)
|
|
||||||
#
|
|
||||||
|
|
||||||
|
|
||||||
get_filename_component(__check_proto_def_dir "${CMAKE_CURRENT_LIST_FILE}" PATH)
|
|
||||||
|
|
||||||
|
|
||||||
function(CHECK_PROTOTYPE_DEFINITION _FUNCTION _PROTOTYPE _RETURN _HEADER _VARIABLE)
|
|
||||||
|
|
||||||
if ("${_VARIABLE}" MATCHES "^${_VARIABLE}$")
|
|
||||||
set(CHECK_PROTOTYPE_DEFINITION_CONTENT "/* */\n")
|
|
||||||
|
|
||||||
set(CHECK_PROTOTYPE_DEFINITION_FLAGS ${CMAKE_REQUIRED_FLAGS})
|
|
||||||
if (CMAKE_REQUIRED_LIBRARIES)
|
|
||||||
set(CHECK_PROTOTYPE_DEFINITION_LIBS
|
|
||||||
LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
|
|
||||||
else()
|
|
||||||
set(CHECK_PROTOTYPE_DEFINITION_LIBS)
|
|
||||||
endif()
|
|
||||||
if (CMAKE_REQUIRED_INCLUDES)
|
|
||||||
set(CMAKE_SYMBOL_EXISTS_INCLUDES
|
|
||||||
"-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}")
|
|
||||||
else()
|
|
||||||
set(CMAKE_SYMBOL_EXISTS_INCLUDES)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
foreach(_FILE ${_HEADER})
|
|
||||||
set(CHECK_PROTOTYPE_DEFINITION_HEADER
|
|
||||||
"${CHECK_PROTOTYPE_DEFINITION_HEADER}#include <${_FILE}>\n")
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
set(CHECK_PROTOTYPE_DEFINITION_SYMBOL ${_FUNCTION})
|
|
||||||
set(CHECK_PROTOTYPE_DEFINITION_PROTO ${_PROTOTYPE})
|
|
||||||
set(CHECK_PROTOTYPE_DEFINITION_RETURN ${_RETURN})
|
|
||||||
|
|
||||||
configure_file("${__check_proto_def_dir}/CheckPrototypeDefinition.c.in"
|
|
||||||
"${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckPrototypeDefinition.c" @ONLY)
|
|
||||||
|
|
||||||
file(READ ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckPrototypeDefinition.c _SOURCE)
|
|
||||||
|
|
||||||
try_compile(${_VARIABLE}
|
|
||||||
${CMAKE_BINARY_DIR}
|
|
||||||
${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckPrototypeDefinition.c
|
|
||||||
COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
|
|
||||||
${CHECK_PROTOTYPE_DEFINITION_LIBS}
|
|
||||||
CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${CHECK_PROTOTYPE_DEFINITION_FLAGS}
|
|
||||||
"${CMAKE_SYMBOL_EXISTS_INCLUDES}"
|
|
||||||
OUTPUT_VARIABLE OUTPUT)
|
|
||||||
|
|
||||||
if (${_VARIABLE})
|
|
||||||
set(${_VARIABLE} 1 CACHE INTERNAL "Have correct prototype for ${_FUNCTION}")
|
|
||||||
message(STATUS "Checking prototype ${_FUNCTION} for ${_VARIABLE} - True")
|
|
||||||
file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
|
|
||||||
"Determining if the prototype ${_FUNCTION} exists for ${_VARIABLE} passed with the following output:\n"
|
|
||||||
"${OUTPUT}\n\n")
|
|
||||||
else ()
|
|
||||||
message(STATUS "Checking prototype ${_FUNCTION} for ${_VARIABLE} - False")
|
|
||||||
set(${_VARIABLE} 0 CACHE INTERNAL "Have correct prototype for ${_FUNCTION}")
|
|
||||||
file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
|
|
||||||
"Determining if the prototype ${_FUNCTION} exists for ${_VARIABLE} failed with the following output:\n"
|
|
||||||
"${OUTPUT}\n\n${_SOURCE}\n\n")
|
|
||||||
endif ()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
endfunction()
|
|
|
@ -1,98 +0,0 @@
|
||||||
# - Check if the protoype we expect is correct.
|
|
||||||
# check_prototype_definition(FUNCTION PROTOTYPE RETURN HEADER VARIABLE)
|
|
||||||
# FUNCTION - The name of the function (used to check if prototype exists)
|
|
||||||
# PROTOTYPE- The prototype to check.
|
|
||||||
# RETURN - The return value of the function.
|
|
||||||
# HEADER - The header files required.
|
|
||||||
# VARIABLE - The variable to store the result.
|
|
||||||
# Example:
|
|
||||||
# check_prototype_definition(getpwent_r
|
|
||||||
# "struct passwd *getpwent_r(struct passwd *src, char *buf, int buflen)"
|
|
||||||
# "NULL"
|
|
||||||
# "unistd.h;pwd.h"
|
|
||||||
# SOLARIS_GETPWENT_R)
|
|
||||||
# The following variables may be set before calling this macro to
|
|
||||||
# modify the way the check is run:
|
|
||||||
#
|
|
||||||
# CMAKE_REQUIRED_FLAGS = string of compile command line flags
|
|
||||||
# CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar)
|
|
||||||
# CMAKE_REQUIRED_INCLUDES = list of include directories
|
|
||||||
# CMAKE_REQUIRED_LIBRARIES = list of libraries to link
|
|
||||||
|
|
||||||
#=============================================================================
|
|
||||||
# Copyright 2005-2009 Kitware, Inc.
|
|
||||||
# Copyright 2010-2011 Andreas Schneider <asn@cryptomilk.org>
|
|
||||||
#
|
|
||||||
# Distributed under the OSI-approved BSD License (the "License");
|
|
||||||
# see accompanying file Copyright.txt for details.
|
|
||||||
#
|
|
||||||
# This software is distributed WITHOUT ANY WARRANTY; without even the
|
|
||||||
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
# See the License for more information.
|
|
||||||
#=============================================================================
|
|
||||||
# (To distribute this file outside of CMake, substitute the full
|
|
||||||
# License text for the above reference.)
|
|
||||||
#
|
|
||||||
|
|
||||||
|
|
||||||
get_filename_component(__check_proto_def_dir "${CMAKE_CURRENT_LIST_FILE}" PATH)
|
|
||||||
|
|
||||||
|
|
||||||
function(CHECK_PROTOTYPE_DEFINITION _FUNCTION _PROTOTYPE _RETURN _HEADER _VARIABLE)
|
|
||||||
|
|
||||||
if ("${_VARIABLE}" MATCHES "^${_VARIABLE}$")
|
|
||||||
set(CHECK_PROTOTYPE_DEFINITION_CONTENT "/* */\n")
|
|
||||||
|
|
||||||
set(CHECK_PROTOTYPE_DEFINITION_FLAGS ${CMAKE_REQUIRED_FLAGS})
|
|
||||||
if (CMAKE_REQUIRED_LIBRARIES)
|
|
||||||
set(CHECK_PROTOTYPE_DEFINITION_LIBS
|
|
||||||
${LINK_LIBRARIES} ${CMAKE_REQUIRED_LIBRARIES})
|
|
||||||
else()
|
|
||||||
set(CHECK_PROTOTYPE_DEFINITION_LIBS)
|
|
||||||
endif()
|
|
||||||
if (CMAKE_REQUIRED_INCLUDES)
|
|
||||||
set(CMAKE_SYMBOL_EXISTS_INCLUDES
|
|
||||||
"-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}")
|
|
||||||
else()
|
|
||||||
set(CMAKE_SYMBOL_EXISTS_INCLUDES)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
foreach(_FILE ${_HEADER})
|
|
||||||
set(CHECK_PROTOTYPE_DEFINITION_HEADER
|
|
||||||
"${CHECK_PROTOTYPE_DEFINITION_HEADER}#include <${_FILE}>\n")
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
set(CHECK_PROTOTYPE_DEFINITION_SYMBOL ${_FUNCTION})
|
|
||||||
set(CHECK_PROTOTYPE_DEFINITION_PROTO ${_PROTOTYPE})
|
|
||||||
set(CHECK_PROTOTYPE_DEFINITION_RETURN ${_RETURN})
|
|
||||||
|
|
||||||
configure_file("${__check_proto_def_dir}/CheckPrototypeDefinition.c.in"
|
|
||||||
"${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckPrototypeDefinition.c" @ONLY)
|
|
||||||
|
|
||||||
file(READ ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckPrototypeDefinition.c _SOURCE)
|
|
||||||
|
|
||||||
try_compile(${_VARIABLE}
|
|
||||||
${CMAKE_BINARY_DIR}
|
|
||||||
${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckPrototypeDefinition.c
|
|
||||||
COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
|
|
||||||
${CHECK_PROTOTYPE_DEFINITION_LIBS}
|
|
||||||
CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${CHECK_PROTOTYPE_DEFINITION_FLAGS}
|
|
||||||
"${CMAKE_SYMBOL_EXISTS_INCLUDES}"
|
|
||||||
OUTPUT_VARIABLE OUTPUT)
|
|
||||||
|
|
||||||
if (${_VARIABLE})
|
|
||||||
set(${_VARIABLE} 1 CACHE INTERNAL "Have correct prototype for ${_FUNCTION}")
|
|
||||||
message(STATUS "Checking prototype ${_FUNCTION} for ${_VARIABLE} - True")
|
|
||||||
file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
|
|
||||||
"Determining if the prototype ${_FUNCTION} exists for ${_VARIABLE} passed with the following output:\n"
|
|
||||||
"${OUTPUT}\n\n")
|
|
||||||
else ()
|
|
||||||
message(STATUS "Checking prototype ${_FUNCTION} for ${_VARIABLE} - False")
|
|
||||||
set(${_VARIABLE} 0 CACHE INTERNAL "Have correct prototype for ${_FUNCTION}")
|
|
||||||
file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
|
|
||||||
"Determining if the prototype ${_FUNCTION} exists for ${_VARIABLE} failed with the following output:\n"
|
|
||||||
"${OUTPUT}\n\n${_SOURCE}\n\n")
|
|
||||||
endif ()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
endfunction()
|
|
|
@ -0,0 +1,163 @@
|
||||||
|
#[=======================================================================[.rst:
|
||||||
|
FindFFMPEG
|
||||||
|
----------
|
||||||
|
|
||||||
|
Find the FFmpeg and associated libraries.
|
||||||
|
|
||||||
|
|
||||||
|
This module accepts following COMPONENTS::
|
||||||
|
|
||||||
|
avcodec
|
||||||
|
avdevice
|
||||||
|
avfilter
|
||||||
|
avformat
|
||||||
|
avutil
|
||||||
|
swresample
|
||||||
|
swscale
|
||||||
|
|
||||||
|
IMPORTED Targets
|
||||||
|
^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
This module defines the following :prop_tgt:`IMPORTED` targets:
|
||||||
|
|
||||||
|
``FFMPEG::<component>``
|
||||||
|
The FFmpeg component.
|
||||||
|
|
||||||
|
Result Variables
|
||||||
|
^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
``FFMPEG_INCLUDE_DIRS``
|
||||||
|
Include directories necessary to use FFmpeg.
|
||||||
|
``FFMPEG_LIBRARIES``
|
||||||
|
Libraries necessary to use FFmpeg. Note that this only includes libraries for the components requested.
|
||||||
|
``FFMPEG_VERSION``
|
||||||
|
The version of FFMPEG found (avutil).
|
||||||
|
|
||||||
|
|
||||||
|
For each component, the following are provided:
|
||||||
|
|
||||||
|
``FFMPEG_<component>_FOUND``
|
||||||
|
FFmpeg component was found.
|
||||||
|
``FFMPEG_<component>_INCLUDE_DIRS``
|
||||||
|
Include directories for the component.
|
||||||
|
``FFMPEG_<component>_LIBRARIES``
|
||||||
|
Libraries for the component.
|
||||||
|
|
||||||
|
#]=======================================================================]
|
||||||
|
|
||||||
|
function(_ffmpeg_find component pkgconfig_name header)
|
||||||
|
find_package(PkgConfig)
|
||||||
|
pkg_check_modules(PC_FFMPEG_${component} ${pkgconfig_name})
|
||||||
|
|
||||||
|
find_path(FFMPEG_${component}_INCLUDE_DIR
|
||||||
|
NAMES "lib${component}/${header}"
|
||||||
|
HINTS
|
||||||
|
${PC_FFMPEG_${component}_INCLUDEDIR}
|
||||||
|
${PC_FFMPEG_${component}_INCLUDE_DIRS}
|
||||||
|
PATH_SUFFIXES
|
||||||
|
ffmpeg)
|
||||||
|
mark_as_advanced("FFMPEG_${component}_INCLUDE_DIR")
|
||||||
|
|
||||||
|
find_library(FFMPEG_${component}_LIBRARY
|
||||||
|
NAMES
|
||||||
|
${component}
|
||||||
|
${PC_FFMPEG_${component}_LIBRARIES}
|
||||||
|
HINTS
|
||||||
|
${PC_FFMPEG_${component}_LIBDIR}
|
||||||
|
${PC_FFMPEG_${component}_LIBRARY_DIRS})
|
||||||
|
mark_as_advanced("${component}_LIBRARY")
|
||||||
|
|
||||||
|
if(FFMPEG_${component}_LIBRARY AND FFMPEG_${component}_INCLUDE_DIR)
|
||||||
|
set(_deps_found TRUE)
|
||||||
|
set(_deps_link)
|
||||||
|
foreach(_ffmpeg_dep IN LISTS ARGN)
|
||||||
|
if(TARGET "FFMPEG::${_ffmpeg_dep}")
|
||||||
|
list(APPEND _deps_link "FFMPEG::${_ffmpeg_dep}")
|
||||||
|
else()
|
||||||
|
set(_deps_found FALSE)
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
if(_deps_found)
|
||||||
|
if(NOT TARGET "FFMPEG::${component}")
|
||||||
|
add_library("FFMPEG::${component}" UNKNOWN IMPORTED)
|
||||||
|
set_target_properties("FFMPEG::${component}" PROPERTIES
|
||||||
|
IMPORTED_LOCATION "${FFMPEG_${component}_LIBRARY}"
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "${FFMPEG_${component}_INCLUDE_DIR}"
|
||||||
|
IMPORTED_LINK_INTERFACE_LIBRARIES "${_deps_link}")
|
||||||
|
endif()
|
||||||
|
set(FFMPEG_${component}_FOUND 1 PARENT_SCOPE)
|
||||||
|
set(FFMPEG_${component}_VERSION "${PC_FFMPEG_${component}_VERSION}" PARENT_SCOPE)
|
||||||
|
else()
|
||||||
|
set("FFMPEG_${component}_FOUND" 0 PARENT_SCOPE)
|
||||||
|
set(what)
|
||||||
|
if(NOT FFMPEG_${component}_LIBRARY)
|
||||||
|
set(what "library")
|
||||||
|
endif()
|
||||||
|
if(NOT FFMPEG_${component}_INCLUDE_DIR)
|
||||||
|
if(what)
|
||||||
|
string(APPEND what " or headers")
|
||||||
|
else()
|
||||||
|
set(what "headers")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
set("FFMPEG_${component}_NOT_FOUND_MESSAGE"
|
||||||
|
"Could not find the ${what} for ${component}."
|
||||||
|
PARENT_SCOPE)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
_ffmpeg_find(avutil libavutil avutil.h)
|
||||||
|
_ffmpeg_find(swresample libswresample swresample.h
|
||||||
|
avutil)
|
||||||
|
_ffmpeg_find(swscale libswscale swscale.h
|
||||||
|
avutil)
|
||||||
|
_ffmpeg_find(avcodec libavcodec avcodec.h
|
||||||
|
avutil)
|
||||||
|
_ffmpeg_find(avformat libavformat avformat.h
|
||||||
|
avcodec avutil)
|
||||||
|
_ffmpeg_find(avfilter libavfilter avfilter.h
|
||||||
|
avutil)
|
||||||
|
_ffmpeg_find(avdevice libavdevice avdevice.h
|
||||||
|
avformat avutil)
|
||||||
|
|
||||||
|
if(TARGET FFMPEG::avutil)
|
||||||
|
set(FFMPEG_VERSION "${FFMPEG_avutil_VERSION}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(FFMPEG_INCLUDE_DIRS)
|
||||||
|
set(FFMPEG_LIBRARIES)
|
||||||
|
set(_ffmpeg_required_vars)
|
||||||
|
foreach(_ffmpeg_component IN LISTS FFMPEG_FIND_COMPONENTS)
|
||||||
|
if(TARGET "FFMPEG::${_ffmpeg_component}")
|
||||||
|
set(FFMPEG_${_ffmpeg_component}_INCLUDE_DIRS
|
||||||
|
"${FFMPEG_${_ffmpeg_component}_INCLUDE_DIR}")
|
||||||
|
set(FFMPEG_${_ffmpeg_component}_LIBRARIES
|
||||||
|
"${FFMPEG_${_ffmpeg_component}_LIBRARY}")
|
||||||
|
list(APPEND FFMPEG_INCLUDE_DIRS
|
||||||
|
"${FFMPEG_${_ffmpeg_component}_INCLUDE_DIRS}")
|
||||||
|
list(APPEND FFMPEG_LIBRARIES
|
||||||
|
"${FFMPEG_${_ffmpeg_component}_LIBRARIES}")
|
||||||
|
if(FFMEG_FIND_REQUIRED_${_ffmpeg_component})
|
||||||
|
list(APPEND _ffmpeg_required_vars
|
||||||
|
"FFMPEG_${_ffmpeg_required_vars}_INCLUDE_DIRS"
|
||||||
|
"FFMPEG_${_ffmpeg_required_vars}_LIBRARIES")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
unset(_ffmpeg_component)
|
||||||
|
|
||||||
|
if(FFMPEG_INCLUDE_DIRS)
|
||||||
|
list(REMOVE_DUPLICATES FFMPEG_INCLUDE_DIRS)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
include(FindPackageHandleStandardArgs)
|
||||||
|
find_package_handle_standard_args(FFMPEG
|
||||||
|
REQUIRED_VARS
|
||||||
|
FFMPEG_INCLUDE_DIRS
|
||||||
|
FFMPEG_LIBRARIES
|
||||||
|
${_ffmpeg_required_vars}
|
||||||
|
VERSION_VAR
|
||||||
|
FFMPEG_VERSION
|
||||||
|
HANDLE_COMPONENTS)
|
||||||
|
unset(_ffmpeg_required_vars)
|
|
@ -0,0 +1,100 @@
|
||||||
|
# FindFmt
|
||||||
|
# -------
|
||||||
|
# Finds the Fmt library
|
||||||
|
#
|
||||||
|
# This will define the following variables::
|
||||||
|
#
|
||||||
|
# FMT_FOUND - system has Fmt
|
||||||
|
# FMT_INCLUDE_DIRS - the Fmt include directory
|
||||||
|
# FMT_LIBRARIES - the Fmt libraries
|
||||||
|
#
|
||||||
|
# and the following imported targets::
|
||||||
|
#
|
||||||
|
# Fmt::Fmt - The Fmt library
|
||||||
|
|
||||||
|
if(ENABLE_INTERNAL_FMT)
|
||||||
|
include(ExternalProject)
|
||||||
|
file(STRINGS ${CMAKE_SOURCE_DIR}/tools/depends/target/libfmt/Makefile VER REGEX "^[ ]*VERSION[ ]*=.+$")
|
||||||
|
string(REGEX REPLACE "^[ ]*VERSION[ ]*=[ ]*" "" FMT_VERSION "${VER}")
|
||||||
|
|
||||||
|
# allow user to override the download URL with a local tarball
|
||||||
|
# needed for offline build envs
|
||||||
|
if(FMT_URL)
|
||||||
|
get_filename_component(FMT_URL "${FMT_URL}" ABSOLUTE)
|
||||||
|
else()
|
||||||
|
set(FMT_URL http://mirrors.kodi.tv/build-deps/sources/fmt-${FMT_VERSION}.tar.gz)
|
||||||
|
endif()
|
||||||
|
if(VERBOSE)
|
||||||
|
message(STATUS "FMT_URL: ${FMT_URL}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(APPLE)
|
||||||
|
set(EXTRA_ARGS "-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(FMT_LIBRARY ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/lib/libfmt.a)
|
||||||
|
set(FMT_INCLUDE_DIR ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/include)
|
||||||
|
externalproject_add(fmt
|
||||||
|
URL ${FMT_URL}
|
||||||
|
DOWNLOAD_DIR ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/download
|
||||||
|
PREFIX ${CORE_BUILD_DIR}/fmt
|
||||||
|
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}
|
||||||
|
-DCMAKE_CXX_EXTENSIONS=${CMAKE_CXX_EXTENSIONS}
|
||||||
|
-DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}
|
||||||
|
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
|
||||||
|
-DCMAKE_INSTALL_LIBDIR=lib
|
||||||
|
-DFMT_DOC=OFF
|
||||||
|
-DFMT_TEST=OFF
|
||||||
|
"${EXTRA_ARGS}"
|
||||||
|
BUILD_BYPRODUCTS ${FMT_LIBRARY})
|
||||||
|
set_target_properties(fmt PROPERTIES FOLDER "External Projects")
|
||||||
|
|
||||||
|
include(FindPackageHandleStandardArgs)
|
||||||
|
find_package_handle_standard_args(Fmt
|
||||||
|
REQUIRED_VARS FMT_LIBRARY FMT_INCLUDE_DIR
|
||||||
|
VERSION_VAR FMT_VERSION)
|
||||||
|
|
||||||
|
set(FMT_LIBRARIES ${FMT_LIBRARY})
|
||||||
|
set(FMT_INCLUDE_DIRS ${FMT_INCLUDE_DIR})
|
||||||
|
|
||||||
|
else()
|
||||||
|
|
||||||
|
find_package(FMT 6.1.2 CONFIG REQUIRED QUIET)
|
||||||
|
|
||||||
|
if(PKG_CONFIG_FOUND)
|
||||||
|
pkg_check_modules(PC_FMT libfmt QUIET)
|
||||||
|
if(PC_FMT_VERSION AND NOT FMT_VERSION)
|
||||||
|
set(FMT_VERSION ${PC_FMT_VERSION})
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
find_path(FMT_INCLUDE_DIR NAMES fmt/format.h
|
||||||
|
PATHS ${PC_FMT_INCLUDEDIR})
|
||||||
|
|
||||||
|
find_library(FMT_LIBRARY_RELEASE NAMES fmt
|
||||||
|
PATHS ${PC_FMT_LIBDIR})
|
||||||
|
find_library(FMT_LIBRARY_DEBUG NAMES fmtd
|
||||||
|
PATHS ${PC_FMT_LIBDIR})
|
||||||
|
|
||||||
|
include(SelectLibraryConfigurations)
|
||||||
|
select_library_configurations(FMT)
|
||||||
|
|
||||||
|
include(FindPackageHandleStandardArgs)
|
||||||
|
find_package_handle_standard_args(Fmt
|
||||||
|
REQUIRED_VARS FMT_LIBRARY FMT_INCLUDE_DIR FMT_VERSION
|
||||||
|
VERSION_VAR FMT_VERSION)
|
||||||
|
|
||||||
|
if(FMT_FOUND)
|
||||||
|
set(FMT_LIBRARIES ${FMT_LIBRARY})
|
||||||
|
set(FMT_INCLUDE_DIRS ${FMT_INCLUDE_DIR})
|
||||||
|
|
||||||
|
if(NOT TARGET fmt)
|
||||||
|
add_library(fmt UNKNOWN IMPORTED)
|
||||||
|
set_target_properties(fmt PROPERTIES
|
||||||
|
IMPORTED_LOCATION "${FMT_LIBRARY}"
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "${FMT_INCLUDE_DIR}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
endif()
|
||||||
|
mark_as_advanced(FMT_INCLUDE_DIR FMT_LIBRARY)
|
|
@ -1,28 +1,89 @@
|
||||||
include(FindPackageHandleStandardArgs)
|
#[=======================================================================[.rst:
|
||||||
|
FindLibJWT
|
||||||
|
----------
|
||||||
|
|
||||||
|
Find the JWT C Library (libjwt)
|
||||||
|
|
||||||
|
|
||||||
|
This module accepts optional COMPONENTS to select the crypto backend (these are mutually exclusive)::
|
||||||
|
|
||||||
|
openssl (default)
|
||||||
|
gnutls
|
||||||
|
|
||||||
|
IMPORTED Targets
|
||||||
|
^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
This module defines the following :prop_tgt:`IMPORTED` targets:
|
||||||
|
|
||||||
|
``JWT::libjwt``
|
||||||
|
The JWT library, if found with the specified crypto backend.
|
||||||
|
|
||||||
|
Result Variables
|
||||||
|
^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
``LIBJWT_FOUND``
|
||||||
|
System has libjwt
|
||||||
|
``LIBJWT_INCLUDE_DIRS``
|
||||||
|
The libjwt include directory
|
||||||
|
``LIBJWT_LIBRARIES``
|
||||||
|
The libraries needed to use libjwt
|
||||||
|
#]=======================================================================]
|
||||||
|
|
||||||
|
include(FindPackageHandleStandardArgs)
|
||||||
find_package(PkgConfig QUIET)
|
find_package(PkgConfig QUIET)
|
||||||
|
|
||||||
|
if(LibJWT_FIND_COMPONENTS)
|
||||||
|
set(LIBJWT_CRYPTO_BACKEND "")
|
||||||
|
foreach(component IN LISTS LibJWT_FIND_COMPONENTS)
|
||||||
|
if(component MATCHES "^(openssl|gnutls)")
|
||||||
|
if(LIBJWT_CRYPTO_BACKEND)
|
||||||
|
message(FATAL_ERROR "LibJWT: Only one crypto library can be selected.")
|
||||||
|
endif()
|
||||||
|
set(LIBJWT_CRYPTO_BACKEND ${component})
|
||||||
|
else()
|
||||||
|
message(FATAL_ERROR "LibJWT: Wrong crypto backend specified.")
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
else()
|
||||||
|
set(LIBJWT_CRYPTO_BACKEND "openssl")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(LIBJWT_LIB_NAMES "")
|
||||||
|
if(LIBJWT_CRYPTO_BACKEND STREQUAL "openssl")
|
||||||
|
set(LIBJWT_LIB_NAMES "jwt" "libjwt")
|
||||||
|
elseif(LIBJWT_CRYPTO_BACKEND STREQUAL "gnutls")
|
||||||
|
set(LIBJWT_LIB_NAMES "jwt-gnutls" "libjwt-gnutls")
|
||||||
|
endif()
|
||||||
|
|
||||||
pkg_check_modules(PC_LIBJWT QUIET libjwt)
|
pkg_check_modules(PC_LIBJWT QUIET libjwt)
|
||||||
|
|
||||||
find_path(LIBJWT_INCLUDE_DIR
|
find_path(LIBJWT_INCLUDE_DIR
|
||||||
NAMES jwt.h
|
NAMES jwt.h
|
||||||
HINTS ${PC_LIBJWT_INCLUDEDIR} ${PC_LIBJWT_INCLUDE_DIRS}
|
HINTS
|
||||||
)
|
${PC_LIBJWT_INCLUDEDIR}
|
||||||
|
${PC_LIBJWT_INCLUDE_DIRS})
|
||||||
|
mark_as_advanced(LIBJWT_INCLUDE_DIR)
|
||||||
|
|
||||||
find_library(LIBJWT_LIBRARY
|
find_library(LIBJWT_LIBRARY
|
||||||
NAMES jwt-gnutls libjwt-gnutls liblibjwt-gnutls
|
NAMES ${LIBJWT_LIB_NAMES}
|
||||||
HINTS ${PC_LIBJWT_LIBDIR} ${PC_LIBJWT_LIBRARY_DIR}
|
HINTS
|
||||||
)
|
${PC_LIBJWT_LIBDIR}
|
||||||
|
${PC_LIBJWT_LIBRARY_DIR})
|
||||||
|
mark_as_advanced(LIBJWT_LIBRARY)
|
||||||
|
|
||||||
find_package_handle_standard_args(LibJWT
|
find_package_handle_standard_args(LibJWT
|
||||||
REQUIRED_VARS LIBJWT_INCLUDE_DIR LIBJWT_LIBRARY
|
REQUIRED_VARS
|
||||||
)
|
LIBJWT_INCLUDE_DIR
|
||||||
|
LIBJWT_LIBRARY
|
||||||
|
FAIL_MESSAGE
|
||||||
|
"Could NOT find LibJWT with the crypto backend ${LIBJWT_CRYPTO_BACKEND}.")
|
||||||
|
|
||||||
if(LIBJWT_FOUND)
|
if(LIBJWT_FOUND)
|
||||||
add_library(libjwt STATIC IMPORTED GLOBAL)
|
set(LIBJWT_LIBRARIES ${LIBJWT_LIBRARY})
|
||||||
set_target_properties(libjwt PROPERTIES
|
set(LIBJWT_INCLUDE_DIRS ${LIBJWT_INCLUDE_DIR})
|
||||||
IMPORTED_LOCATION "${LIBJWT_LIBRARY}"
|
|
||||||
INTERFACE_INCLUDE_DIRECTORIES "${LIBJWT_INCLUDE_DIR}"
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
mark_as_advanced(LIBJWT_INCLUDE_DIR LIBJWT_LIBRARY)
|
add_library(JWT::libjwt UNKNOWN IMPORTED)
|
||||||
|
set_target_properties(JWT::libjwt PROPERTIES
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "${LIBJWT_INCLUDE_DIRS}"
|
||||||
|
IMPORTED_LOCATION "${LIBJWT_LIBRARY}")
|
||||||
|
endif()
|
||||||
|
|
|
@ -0,0 +1,99 @@
|
||||||
|
#[=======================================================================[.rst:
|
||||||
|
FindV4L2
|
||||||
|
----------
|
||||||
|
|
||||||
|
Find V4L2 headers and libv4l2
|
||||||
|
|
||||||
|
|
||||||
|
This module accepts optional COMPONENTS:
|
||||||
|
|
||||||
|
videodev2 (default)
|
||||||
|
libv4l2
|
||||||
|
|
||||||
|
IMPORTED Targets
|
||||||
|
^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
This module defines the following :prop_tgt:`IMPORTED` targets::
|
||||||
|
|
||||||
|
``V4L2::videodev2``
|
||||||
|
The Video for Linux Two header file, if found.
|
||||||
|
``V4L2::libv4l2``
|
||||||
|
A thin abstraction layer on top of video4linux2 devices, if found.
|
||||||
|
|
||||||
|
Result Variables
|
||||||
|
^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
``V4L2_FOUND``
|
||||||
|
System has v4l2 support. If no components are specified only the videodev2.h header has to be found.
|
||||||
|
``V4L2_INCLUDE_DIRS``
|
||||||
|
The v4l2 include directories.
|
||||||
|
``V4L2_LIBRARIES``
|
||||||
|
The libraries needed to have v4l2 support according to the specified components.
|
||||||
|
#]=======================================================================]
|
||||||
|
|
||||||
|
find_path(V4L2_VIDEODEV2_INCLUDE_DIR
|
||||||
|
NAMES linux/videodev2.h)
|
||||||
|
mark_as_advanced(V4L2_VIDEODEV2_INCLUDE_DIR)
|
||||||
|
|
||||||
|
if(EXISTS "${V4L2_VIDEODEV2_INCLUDE_DIR}")
|
||||||
|
set(V4L2_videodev2_FOUND TRUE)
|
||||||
|
else()
|
||||||
|
set(V4L2_videodev2_FOUND FALSE)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
pkg_check_modules(PC_V4L2_LIBV4L2 QUIET libv4l2)
|
||||||
|
|
||||||
|
find_path(V4L2_LIBV4L2_INCLUDE_DIR
|
||||||
|
NAMES libv4l2.h
|
||||||
|
HINTS
|
||||||
|
${PC_V4L2_LIBV4L2_INCLUDEDIR}
|
||||||
|
${PC_V4L2_LIBV4L2_INCLUDE_DIRS})
|
||||||
|
mark_as_advanced(V4L2_LIBV4L2_INCLUDE_DIR)
|
||||||
|
|
||||||
|
find_library(V4L2_LIBV4L2_LIBRARY
|
||||||
|
NAMES ${PC_V4L2_LIBV4L2_LIBRARIES}
|
||||||
|
HINTS
|
||||||
|
${PC_V4L2_LIBV4L2_LIBDIR}
|
||||||
|
${PC_V4L2_LIBV4L2_LIBRARY_DIR})
|
||||||
|
mark_as_advanced(V4L2_LIBV4L2_LIBRARY)
|
||||||
|
|
||||||
|
if(EXISTS "${V4L2_LIBV4L2_INCLUDE_DIR}" AND
|
||||||
|
EXISTS "${V4L2_LIBV4L2_LIBRARY}")
|
||||||
|
set(V4L2_libv4l2_FOUND TRUE)
|
||||||
|
else()
|
||||||
|
set(V4L2_libv4l2_FOUND FALSE)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
include(FindPackageHandleStandardArgs)
|
||||||
|
find_package_handle_standard_args(V4L2
|
||||||
|
REQUIRED_VARS
|
||||||
|
V4L2_VIDEODEV2_INCLUDE_DIR
|
||||||
|
HANDLE_COMPONENTS)
|
||||||
|
|
||||||
|
set(V4L2_INCLUDE_DIRS)
|
||||||
|
set(V4L2_LIBRARIES)
|
||||||
|
|
||||||
|
if(V4L2_videodev2_FOUND)
|
||||||
|
set(V4L2_VIDEODEV2_INCLUDE_DIRS ${V4L2_VIDEODEV2_INCLUDE_DIR})
|
||||||
|
list(APPEND V4L2_INCLUDE2_DIRS
|
||||||
|
"${V4L2_VIDEODEV2_INCLUDE_DIRS}")
|
||||||
|
|
||||||
|
add_library(V4L2::videodev2 INTERFACE IMPORTED)
|
||||||
|
set_target_properties(V4L2::videodev2 PROPERTIES
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "${V4L2_VIDEODEV2_INCLUDE_DIRS}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(V4L2_libv4l2_FOUND)
|
||||||
|
set(V4L2_LIBV4L2_INCLUDE_DIRS ${V4L2_LIBV4L2_INCLUDE_DIR})
|
||||||
|
set(V4L2_LIBV4L2_LIBRARIES ${V4L2_LIBV4L2_LIBRARY})
|
||||||
|
|
||||||
|
list(APPEND V4L2_INCLUDE_DIRS
|
||||||
|
"${V4L2_LIBV4L2_INCLUDE_DIRS}")
|
||||||
|
list(APPEND V4L2_LIBRARIES
|
||||||
|
"${V4L2_LIBV4L2_LIBRARIES}")
|
||||||
|
|
||||||
|
add_library(V4L2::libv4l2 UNKNOWN IMPORTED)
|
||||||
|
set_target_properties(V4L2::libv4l2 PROPERTIES
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "${V4L2_LIBV4L2_INCLUDE_DIRS}"
|
||||||
|
IMPORTED_LOCATION "${V4L2_LIBV4L2_LIBRARY}")
|
||||||
|
endif()
|
|
@ -6,6 +6,7 @@ target_compile_options(zm-warning-interface
|
||||||
-Wformat-security
|
-Wformat-security
|
||||||
-Wno-cast-function-type
|
-Wno-cast-function-type
|
||||||
$<$<VERSION_LESS:$<CXX_COMPILER_VERSION>,11>:-Wno-clobbered>
|
$<$<VERSION_LESS:$<CXX_COMPILER_VERSION>,11>:-Wno-clobbered>
|
||||||
|
$<$<VERSION_LESS:$<CXX_COMPILER_VERSION>,5.1>:-Wno-missing-field-initializers>
|
||||||
-Wno-unused-parameter
|
-Wno-unused-parameter
|
||||||
-Woverloaded-virtual
|
-Woverloaded-virtual
|
||||||
-Wvla)
|
-Wvla)
|
||||||
|
@ -23,7 +24,8 @@ if(ASAN)
|
||||||
-fno-omit-frame-pointer
|
-fno-omit-frame-pointer
|
||||||
-fsanitize=address
|
-fsanitize=address
|
||||||
-fsanitize-recover=address
|
-fsanitize-recover=address
|
||||||
-fsanitize-address-use-after-scope)
|
-fsanitize-address-use-after-scope
|
||||||
|
-Wno-stringop-truncation)
|
||||||
|
|
||||||
target_link_options(zm-compile-option-interface
|
target_link_options(zm-compile-option-interface
|
||||||
INTERFACE
|
INTERFACE
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
configure_file(zm_create.sql.in "${CMAKE_CURRENT_BINARY_DIR}/zm_create.sql" @ONLY)
|
configure_file(zm_create.sql.in "${CMAKE_CURRENT_BINARY_DIR}/zm_create.sql" @ONLY)
|
||||||
configure_file(zm_update-1.31.30.sql.in "${CMAKE_CURRENT_BINARY_DIR}/zm_update-1.31.30.sql" @ONLY)
|
configure_file(zm_update-1.31.30.sql.in "${CMAKE_CURRENT_BINARY_DIR}/zm_update-1.31.30.sql" @ONLY)
|
||||||
configure_file(zm_update-1.35.24.sql.in "${CMAKE_CURRENT_BINARY_DIR}/zm_update-1.35.24.sql" @ONLY)
|
configure_file(zm_update-1.35.24.sql.in "${CMAKE_CURRENT_BINARY_DIR}/zm_update-1.35.24.sql" @ONLY)
|
||||||
|
configure_file(zm_update-1.37.4.sql.in "${CMAKE_CURRENT_BINARY_DIR}/zm_update-1.37.4.sql" @ONLY)
|
||||||
|
|
||||||
# Glob all database upgrade scripts
|
# Glob all database upgrade scripts
|
||||||
file(GLOB dbfileslist RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "zm_update-*.sql")
|
file(GLOB dbfileslist RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "zm_update-*.sql")
|
||||||
|
@ -15,6 +16,8 @@ install(FILES ${dbfileslist} DESTINATION "${CMAKE_INSTALL_DATADIR}/zoneminder/db
|
||||||
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/zm_update-1.31.30.sql" DESTINATION "${CMAKE_INSTALL_DATADIR}/zoneminder/db")
|
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/zm_update-1.31.30.sql" DESTINATION "${CMAKE_INSTALL_DATADIR}/zoneminder/db")
|
||||||
# install zm_update-1.35.24.sql
|
# install zm_update-1.35.24.sql
|
||||||
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/zm_update-1.35.24.sql" DESTINATION "${CMAKE_INSTALL_DATADIR}/zoneminder/db")
|
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/zm_update-1.35.24.sql" DESTINATION "${CMAKE_INSTALL_DATADIR}/zoneminder/db")
|
||||||
|
# install zm_update-1.37.4.sql
|
||||||
|
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/zm_update-1.37.4.sql" DESTINATION "${CMAKE_INSTALL_DATADIR}/zoneminder/db")
|
||||||
|
|
||||||
# install zm_create.sql
|
# install zm_create.sql
|
||||||
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/zm_create.sql" DESTINATION "${CMAKE_INSTALL_DATADIR}/zoneminder/db")
|
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/zm_create.sql" DESTINATION "${CMAKE_INSTALL_DATADIR}/zoneminder/db")
|
||||||
|
@ -22,3 +25,8 @@ install(FILES "${CMAKE_CURRENT_BINARY_DIR}/zm_create.sql" DESTINATION "${CMAKE_I
|
||||||
# install triggers.sql
|
# install triggers.sql
|
||||||
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/triggers.sql" DESTINATION "${CMAKE_INSTALL_DATADIR}/zoneminder/db")
|
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/triggers.sql" DESTINATION "${CMAKE_INSTALL_DATADIR}/zoneminder/db")
|
||||||
|
|
||||||
|
# install manufacturers.sql
|
||||||
|
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/manufacturers.sql" DESTINATION "${CMAKE_INSTALL_DATADIR}/zoneminder/db")
|
||||||
|
|
||||||
|
# install models.sql
|
||||||
|
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/models.sql" DESTINATION "${CMAKE_INSTALL_DATADIR}/zoneminder/db")
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
INSERT IGNORE INTO Manufacturers VALUES (1, 'Acti');
|
||||||
|
INSERT IGNORE INTO Manufacturers VALUES (2, 'Amcrest');
|
||||||
|
INSERT IGNORE INTO Manufacturers VALUES (3, 'Airlink101');
|
||||||
|
INSERT IGNORE INTO Manufacturers VALUES (4, 'Arecont Vision');
|
||||||
|
INSERT IGNORE INTO Manufacturers VALUES (5, 'Axis');
|
||||||
|
INSERT IGNORE INTO Manufacturers VALUES (6, 'Dahua');
|
||||||
|
INSERT IGNORE INTO Manufacturers VALUES (7, 'D-Link');
|
||||||
|
INSERT IGNORE INTO Manufacturers VALUES (8, 'Edimax');
|
||||||
|
INSERT IGNORE INTO Manufacturers VALUES (9, 'Foscam');
|
||||||
|
INSERT IGNORE INTO Manufacturers VALUES (10, 'Gadspot');
|
||||||
|
INSERT IGNORE INTO Manufacturers VALUES (11, 'GrandStream');
|
||||||
|
INSERT IGNORE INTO Manufacturers VALUES (12, 'HikVision');
|
||||||
|
INSERT IGNORE INTO Manufacturers VALUES (13, 'JVC');
|
||||||
|
INSERT IGNORE INTO Manufacturers VALUES (14, 'Maginon');
|
||||||
|
INSERT IGNORE INTO Manufacturers VALUES (15, 'Mobotix');
|
||||||
|
INSERT IGNORE INTO Manufacturers VALUES (16, 'Oncam Grandeye');
|
||||||
|
INSERT IGNORE INTO Manufacturers VALUES (17, 'Panasonic');
|
||||||
|
INSERT IGNORE INTO Manufacturers VALUES (18, 'Pelco');
|
||||||
|
INSERT IGNORE INTO Manufacturers VALUES (19, 'Sony');
|
||||||
|
INSERT IGNORE INTO Manufacturers VALUES (20, 'TP-Link');
|
||||||
|
INSERT IGNORE INTO Manufacturers VALUES (21, 'Trendnet');
|
||||||
|
INSERT IGNORE INTO Manufacturers VALUES (22, 'VisionTek');
|
||||||
|
INSERT IGNORE INTO Manufacturers VALUES (23, 'Vivotek');
|
||||||
|
INSERT IGNORE INTO Manufacturers VALUES (24, 'Wansview');
|
|
@ -0,0 +1,56 @@
|
||||||
|
/* INSERT INTO Manufacturers VALUES (1, 'Acti'); */
|
||||||
|
INSERT IGNORE INTO Models (ManufacturerId,Name) VALUES (1, 'A21');
|
||||||
|
INSERT IGNORE INTO Models (ManufacturerId,Name) VALUES (1, 'A23');
|
||||||
|
INSERT IGNORE INTO Models (ManufacturerId,Name) VALUES (1, 'A24');
|
||||||
|
INSERT IGNORE INTO Models (ManufacturerId,Name) VALUES (1, 'A28');
|
||||||
|
INSERT IGNORE INTO Models (ManufacturerId,Name) VALUES (1, 'A31');
|
||||||
|
INSERT IGNORE INTO Models (ManufacturerId,Name) VALUES (1, 'A310');
|
||||||
|
INSERT IGNORE INTO Models (ManufacturerId,Name) VALUES (1, 'A311');
|
||||||
|
INSERT IGNORE INTO Models (ManufacturerId,Name) VALUES (1, 'A32');
|
||||||
|
INSERT IGNORE INTO Models (ManufacturerId,Name) VALUES (1, 'A41');
|
||||||
|
INSERT IGNORE INTO Models (ManufacturerId,Name) VALUES (1, 'A415');
|
||||||
|
INSERT IGNORE INTO Models (ManufacturerId,Name) VALUES (1, 'A416');
|
||||||
|
INSERT IGNORE INTO Models (ManufacturerId,Name) VALUES (1, 'A418');
|
||||||
|
INSERT IGNORE INTO Models (ManufacturerId,Name) VALUES (1, 'A42');
|
||||||
|
INSERT IGNORE INTO Models (ManufacturerId,Name) VALUES (1, 'A421');
|
||||||
|
INSERT IGNORE INTO Models (ManufacturerId,Name) VALUES (1, 'A43');
|
||||||
|
INSERT IGNORE INTO Models (ManufacturerId,Name) VALUES (1, 'A45');
|
||||||
|
INSERT IGNORE INTO Models (ManufacturerId,Name) VALUES (1, 'A46');
|
||||||
|
INSERT IGNORE INTO Models (ManufacturerId,Name) VALUES (1, 'A48');
|
||||||
|
INSERT IGNORE INTO Models (ManufacturerId,Name) VALUES (1, 'A74');
|
||||||
|
/*
|
||||||
|
INSERT INTO Manufacturers VALUES (2, 'Amcrest');
|
||||||
|
*/
|
||||||
|
INSERT IGNORE INTO Models (ManufacturerId,Name) VALUES (2, 'IP8M-T2499EW');
|
||||||
|
INSERT IGNORE INTO Models (ManufacturerId,Name) VALUES (2, 'ASH42-B');
|
||||||
|
/*
|
||||||
|
INSERT INTO Manufacturers VALUES (3, 'Airlink101');
|
||||||
|
INSERT INTO Manufacturers VALUES (4, 'Arecont Vision');
|
||||||
|
INSERT INTO Manufacturers VALUES (5, 'Axis');
|
||||||
|
INSERT INTO Manufacturers VALUES (6, 'Dahua');
|
||||||
|
INSERT INTO Manufacturers VALUES (7, 'D-Link');
|
||||||
|
*/
|
||||||
|
INSERT IGNORE INTO Models (ManufacturerId,Name) VALUES (7, 'DCS-930L');
|
||||||
|
INSERT IGNORE INTO Models (ManufacturerId,Name) VALUES (7, 'DCS-932L');
|
||||||
|
INSERT IGNORE INTO Models (ManufacturerId,Name) VALUES (7, 'DCS-933L');
|
||||||
|
INSERT IGNORE INTO Models (ManufacturerId,Name) VALUES (7, 'DCS-942L');
|
||||||
|
INSERT IGNORE INTO Models (ManufacturerId,Name) VALUES (7, 'DCS-5020L');
|
||||||
|
/*
|
||||||
|
INSERT INTO Manufacturers VALUES (8, 'Edimax');
|
||||||
|
INSERT INTO Manufacturers VALUES (9, 'Foscam');
|
||||||
|
INSERT INTO Manufacturers VALUES (10, 'Gadspot');
|
||||||
|
INSERT INTO Manufacturers VALUES (11, 'GrandStream');
|
||||||
|
INSERT INTO Manufacturers VALUES (12, 'HikVision');
|
||||||
|
INSERT INTO Manufacturers VALUES (13, 'JVC');
|
||||||
|
INSERT INTO Manufacturers VALUES (14, 'Maginon');
|
||||||
|
INSERT INTO Manufacturers VALUES (15, 'Mobotix');
|
||||||
|
INSERT INTO Manufacturers VALUES (16, 'Oncam Grandeye');
|
||||||
|
INSERT INTO Manufacturers VALUES (17, 'Panasonic');
|
||||||
|
INSERT INTO Manufacturers VALUES (18, 'Pelco');
|
||||||
|
INSERT INTO Manufacturers VALUES (19, 'Sony');
|
||||||
|
INSERT INTO Manufacturers VALUES (20, 'TP-Link');
|
||||||
|
INSERT INTO Manufacturers VALUES (21, 'Trendnet');
|
||||||
|
INSERT INTO Manufacturers VALUES (22, 'VisionTek');
|
||||||
|
INSERT INTO Manufacturers VALUES (23, 'Vivotek');
|
||||||
|
INSERT INTO Manufacturers VALUES (24, 'Wansview');
|
||||||
|
*/
|
|
@ -283,6 +283,7 @@ CREATE TABLE `Filters` (
|
||||||
`Id` int(10) unsigned NOT NULL auto_increment,
|
`Id` int(10) unsigned NOT NULL auto_increment,
|
||||||
`Name` varchar(64) NOT NULL default '',
|
`Name` varchar(64) NOT NULL default '',
|
||||||
`UserId` int(10) unsigned,
|
`UserId` int(10) unsigned,
|
||||||
|
`ExecuteInterval` int(10) unsigned NOT NULL default '60',
|
||||||
`Query_json` text NOT NULL,
|
`Query_json` text NOT NULL,
|
||||||
`AutoArchive` tinyint(3) unsigned NOT NULL default '0',
|
`AutoArchive` tinyint(3) unsigned NOT NULL default '0',
|
||||||
`AutoUnarchive` tinyint(3) unsigned NOT NULL default '0',
|
`AutoUnarchive` tinyint(3) unsigned NOT NULL default '0',
|
||||||
|
@ -412,6 +413,7 @@ CREATE TABLE `Models` (
|
||||||
DROP TABLE IF EXISTS `MonitorPresets`;
|
DROP TABLE IF EXISTS `MonitorPresets`;
|
||||||
CREATE TABLE `MonitorPresets` (
|
CREATE TABLE `MonitorPresets` (
|
||||||
`Id` int(10) unsigned NOT NULL auto_increment,
|
`Id` int(10) unsigned NOT NULL auto_increment,
|
||||||
|
`ModelId` int unsigned, FOREIGN KEY (`ModelId`) REFERENCES `Models` (Id),
|
||||||
`Name` varchar(64) NOT NULL default '',
|
`Name` varchar(64) NOT NULL default '',
|
||||||
`Type` enum('Local','Remote','File','Ffmpeg','Libvlc','cURL','WebSite','NVSocket','VNC') NOT NULL default 'Local',
|
`Type` enum('Local','Remote','File','Ffmpeg','Libvlc','cURL','WebSite','NVSocket','VNC') NOT NULL default 'Local',
|
||||||
`Device` tinytext,
|
`Device` tinytext,
|
||||||
|
@ -447,12 +449,20 @@ CREATE TABLE `Monitors` (
|
||||||
`Notes` TEXT,
|
`Notes` TEXT,
|
||||||
`ServerId` int(10) unsigned,
|
`ServerId` int(10) unsigned,
|
||||||
`StorageId` smallint(5) unsigned default 0,
|
`StorageId` smallint(5) unsigned default 0,
|
||||||
|
`ManufacturerId` int unsigned, FOREIGN KEY (`ManufacturerId`) REFERENCES `Manufacturers` (Id),
|
||||||
|
`ModelId` int unsigned, FOREIGN KEY (`ModelId`) REFERENCES `Models` (Id),
|
||||||
`Type` enum('Local','Remote','File','Ffmpeg','Libvlc','cURL','WebSite','NVSocket','VNC') NOT NULL default 'Local',
|
`Type` enum('Local','Remote','File','Ffmpeg','Libvlc','cURL','WebSite','NVSocket','VNC') NOT NULL default 'Local',
|
||||||
`Function` enum('None','Monitor','Modect','Record','Mocord','Nodect') NOT NULL default 'Monitor',
|
`Function` enum('None','Monitor','Modect','Record','Mocord','Nodect') NOT NULL default 'Monitor',
|
||||||
|
`Capturing` enum('None','Ondemand', 'Always') NOT NULL default 'Always',
|
||||||
|
`Analysing` enum('None','Always') NOT NULL default 'Always',
|
||||||
|
`AnalysisSource` enum('Primary','Secondary') NOT NULL DEFAULT 'Primary',
|
||||||
|
`Recording` enum('None', 'OnMotion', 'Always') NOT NULL default 'Always',
|
||||||
`Enabled` tinyint(3) unsigned NOT NULL default '1',
|
`Enabled` tinyint(3) unsigned NOT NULL default '1',
|
||||||
`DecodingEnabled` tinyint(3) unsigned NOT NULL default '1',
|
`DecodingEnabled` tinyint(3) unsigned NOT NULL default '1',
|
||||||
`LinkedMonitors` varchar(255),
|
`LinkedMonitors` varchar(255),
|
||||||
`Triggers` set('X10') NOT NULL default '',
|
`Triggers` set('X10') NOT NULL default '',
|
||||||
|
`EventStartCommand` VARCHAR(255) NOT NULL DEFAULT '',
|
||||||
|
`EventEndCommand` VARCHAR(255) NOT NULL DEFAULT '',
|
||||||
`ONVIF_URL` VARCHAR(255) NOT NULL DEFAULT '',
|
`ONVIF_URL` VARCHAR(255) NOT NULL DEFAULT '',
|
||||||
`ONVIF_Username` VARCHAR(64) NOT NULL DEFAULT '',
|
`ONVIF_Username` VARCHAR(64) NOT NULL DEFAULT '',
|
||||||
`ONVIF_Password` VARCHAR(64) NOT NULL DEFAULT '',
|
`ONVIF_Password` VARCHAR(64) NOT NULL DEFAULT '',
|
||||||
|
@ -487,6 +497,7 @@ CREATE TABLE `Monitors` (
|
||||||
`OutputContainer` enum('auto','mp4','mkv'),
|
`OutputContainer` enum('auto','mp4','mkv'),
|
||||||
`EncoderParameters` TEXT,
|
`EncoderParameters` TEXT,
|
||||||
`RecordAudio` TINYINT NOT NULL DEFAULT '0',
|
`RecordAudio` TINYINT NOT NULL DEFAULT '0',
|
||||||
|
`RecordingSource` enum('Primary','Secondary','Both') NOT NULL DEFAULT 'Primary',
|
||||||
`RTSPDescribe` tinyint(1) unsigned,
|
`RTSPDescribe` tinyint(1) unsigned,
|
||||||
`Brightness` mediumint(7) NOT NULL default '-1',
|
`Brightness` mediumint(7) NOT NULL default '-1',
|
||||||
`Contrast` mediumint(7) NOT NULL default '-1',
|
`Contrast` mediumint(7) NOT NULL default '-1',
|
||||||
|
@ -971,81 +982,81 @@ INSERT INTO `Controls` VALUES (NULL,'Amcrest HTTP API','Ffmpeg','Amcrest_HTTP',0
|
||||||
-- Add some monitor preset values
|
-- Add some monitor preset values
|
||||||
--
|
--
|
||||||
|
|
||||||
INSERT into MonitorPresets VALUES (NULL,'Amcrest, IP8M-T2499EW 640x480, RTP/RTSP','Ffmpeg','rtsp',0,255,'rtsp','rtpRtsp','NULL',554,'rtsp://<username>:<password>@<ip-address>/cam/realmonitor?channel=1&subtype=1',NULL,640,480,3,NULL,0,NULL,NULL,NULL,100,100);
|
INSERT into MonitorPresets VALUES (NULL,NULL,'Amcrest, IP8M-T2499EW 640x480, RTP/RTSP','Ffmpeg','rtsp',0,255,'rtsp','rtpRtsp','NULL',554,'rtsp://<username>:<password>@<ip-address>/cam/realmonitor?channel=1&subtype=1',NULL,640,480,3,NULL,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT into MonitorPresets VALUES (NULL,'Amcrest, IP8M-T2499EW 3840x2160, RTP/RTSP','Ffmpeg','rtsp',0,255,'rtsp','rtpRtsp','NULL',554,'rtsp://<username>:<password>@<ip-address>/cam/realmonitor?channel=1&subtype=0',NULL,3840,2160,3,NULL,0,NULL,NULL,NULL,100,100);
|
INSERT into MonitorPresets VALUES (NULL,NULL,'Amcrest, IP8M-T2499EW 3840x2160, RTP/RTSP','Ffmpeg','rtsp',0,255,'rtsp','rtpRtsp','NULL',554,'rtsp://<username>:<password>@<ip-address>/cam/realmonitor?channel=1&subtype=0',NULL,3840,2160,3,NULL,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'Axis IP, 320x240, mpjpeg','Remote','http',0,0,'http','simple','<ip-address>',80,'/axis-cgi/mjpg/video.cgi?resolution=320x240',NULL,320,240,3,NULL,0,NULL,NULL,NULL,100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'Axis IP, 320x240, mpjpeg','Remote','http',0,0,'http','simple','<ip-address>',80,'/axis-cgi/mjpg/video.cgi?resolution=320x240',NULL,320,240,3,NULL,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'Axis IP, 320x240, mpjpeg, max 5 FPS','Remote','http',0,0,'http','simple','<ip-address>',80,'/axis-cgi/mjpg/video.cgi?resolution=320x240&req_fps=5',NULL,320,240,3,NULL,0,NULL,NULL,NULL,100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'Axis IP, 320x240, mpjpeg, max 5 FPS','Remote','http',0,0,'http','simple','<ip-address>',80,'/axis-cgi/mjpg/video.cgi?resolution=320x240&req_fps=5',NULL,320,240,3,NULL,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'Axis IP, 320x240, jpeg','Remote','http',0,0,'http','simple','<ip-address>',80,'/axis-cgi/jpg/image.cgi?resolution=320x240',NULL,320,240,3,NULL,0,NULL,NULL,NULL,100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'Axis IP, 320x240, jpeg','Remote','http',0,0,'http','simple','<ip-address>',80,'/axis-cgi/jpg/image.cgi?resolution=320x240',NULL,320,240,3,NULL,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'Axis IP, 320x240, jpeg, max 5 FPS','Remote','http',0,0,'http','simple','<ip-address>',80,'/axis-cgi/jpg/image.cgi?resolution=320x240',NULL,320,240,3,5.0,0,NULL,NULL,NULL,100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'Axis IP, 320x240, jpeg, max 5 FPS','Remote','http',0,0,'http','simple','<ip-address>',80,'/axis-cgi/jpg/image.cgi?resolution=320x240',NULL,320,240,3,5.0,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'Axis IP, 640x480, mpjpeg','Remote','http',0,0,'http','simple','<ip-address>',80,'/axis-cgi/mjpg/video.cgi?resolution=640x480',NULL,640,480,3,NULL,0,NULL,NULL,NULL,100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'Axis IP, 640x480, mpjpeg','Remote','http',0,0,'http','simple','<ip-address>',80,'/axis-cgi/mjpg/video.cgi?resolution=640x480',NULL,640,480,3,NULL,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'Axis IP, 640x480, mpjpeg, max 5 FPS','Remote','http',0,0,'http','simple','<ip-address>',80,'/axis-cgi/mjpg/video.cgi?resolution=640x480&req_fps=5',NULL,640,480,3,NULL,0,NULL,NULL,NULL,100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'Axis IP, 640x480, mpjpeg, max 5 FPS','Remote','http',0,0,'http','simple','<ip-address>',80,'/axis-cgi/mjpg/video.cgi?resolution=640x480&req_fps=5',NULL,640,480,3,NULL,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'Axis IP, 640x480, jpeg','Remote','http',0,0,'http','simple','<ip-address>',80,'/axis-cgi/jpg/image.cgi?resolution=640x480',NULL,640,480,3,NULL,0,NULL,NULL,NULL,100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'Axis IP, 640x480, jpeg','Remote','http',0,0,'http','simple','<ip-address>',80,'/axis-cgi/jpg/image.cgi?resolution=640x480',NULL,640,480,3,NULL,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'Axis IP, 640x480, jpeg, max 5 FPS','Remote','http',0,0,'http','simple','<ip-address>',80,'/axis-cgi/jpg/image.cgi?resolution=640x480',NULL,640,480,3,5.0,0,NULL,NULL,NULL,100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'Axis IP, 640x480, jpeg, max 5 FPS','Remote','http',0,0,'http','simple','<ip-address>',80,'/axis-cgi/jpg/image.cgi?resolution=640x480',NULL,640,480,3,5.0,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'Axis IP, 320x240, mpjpeg, B&W','Remote','http',0,0,'http','simple','<ip-address>',80,'/axis-cgi/mjpg/video.cgi?resolution=320x240&color=0',NULL,320,240,3,NULL,0,NULL,NULL,NULL,100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'Axis IP, 320x240, mpjpeg, B&W','Remote','http',0,0,'http','simple','<ip-address>',80,'/axis-cgi/mjpg/video.cgi?resolution=320x240&color=0',NULL,320,240,3,NULL,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'Axis IP, 640x480, mpjpeg, B&W','Remote','http',0,0,'http','simple','<ip-address>',80,'/axis-cgi/mjpg/video.cgi?resolution=640x480&color=0',NULL,640,480,3,NULL,0,NULL,NULL,NULL,100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'Axis IP, 640x480, mpjpeg, B&W','Remote','http',0,0,'http','simple','<ip-address>',80,'/axis-cgi/mjpg/video.cgi?resolution=640x480&color=0',NULL,640,480,3,NULL,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'Axis IP PTZ, 320x240, mpjpeg','Remote','http',0,0,'http','simple','<ip-address>',80,'/axis-cgi/mjpg/video.cgi?resolution=320x240',NULL,320,240,3,NULL,1,4,NULL,'<ip-address>:<port>',100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'Axis IP PTZ, 320x240, mpjpeg','Remote','http',0,0,'http','simple','<ip-address>',80,'/axis-cgi/mjpg/video.cgi?resolution=320x240',NULL,320,240,3,NULL,1,4,NULL,'<ip-address>:<port>',100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'Axis IP PTZ, 320x240, mpjpeg, max 5 FPS','Remote','http',0,0,'http','simple','<ip-address>',80,'/axis-cgi/mjpg/video.cgi?resolution=320x240&req_fps=5',NULL,320,240,3,NULL,1,4,NULL,'<ip-address>:<port>',100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'Axis IP PTZ, 320x240, mpjpeg, max 5 FPS','Remote','http',0,0,'http','simple','<ip-address>',80,'/axis-cgi/mjpg/video.cgi?resolution=320x240&req_fps=5',NULL,320,240,3,NULL,1,4,NULL,'<ip-address>:<port>',100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'Axis IP PTZ, 320x240, jpeg','Remote','http',0,0,'http','simple','<ip-address>',80,'/axis-cgi/jpg/image.cgi?resolution=320x240',NULL,320,240,3,NULL,1,4,NULL,'<ip-address>:<port>',100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'Axis IP PTZ, 320x240, jpeg','Remote','http',0,0,'http','simple','<ip-address>',80,'/axis-cgi/jpg/image.cgi?resolution=320x240',NULL,320,240,3,NULL,1,4,NULL,'<ip-address>:<port>',100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'Axis IP PTZ, 320x240, jpeg, max 5 FPS','Remote','http',0,0,'http','simple','<ip-address>',80,'/axis-cgi/jpg/image.cgi?resolution=320x240',NULL,320,240,3,5.0,1,4,NULL,'<ip-address>:<port>',100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'Axis IP PTZ, 320x240, jpeg, max 5 FPS','Remote','http',0,0,'http','simple','<ip-address>',80,'/axis-cgi/jpg/image.cgi?resolution=320x240',NULL,320,240,3,5.0,1,4,NULL,'<ip-address>:<port>',100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'Axis IP PTZ, 640x480, mpjpeg','Remote','http',0,0,'http','simple','<ip-address>',80,'/axis-cgi/mjpg/video.cgi?resolution=640x480',NULL,640,480,3,NULL,1,4,NULL,'<ip-address>:<port>',100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'Axis IP PTZ, 640x480, mpjpeg','Remote','http',0,0,'http','simple','<ip-address>',80,'/axis-cgi/mjpg/video.cgi?resolution=640x480',NULL,640,480,3,NULL,1,4,NULL,'<ip-address>:<port>',100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'Axis IP PTZ, 640x480, mpjpeg, max 5 FPS','Remote','http',0,0,'http','simple','<ip-address>',80,'/axis-cgi/mjpg/video.cgi?resolution=640x480&req_fps=5',NULL,640,480,3,NULL,1,4,NULL,'<ip-address>:<port>',100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'Axis IP PTZ, 640x480, mpjpeg, max 5 FPS','Remote','http',0,0,'http','simple','<ip-address>',80,'/axis-cgi/mjpg/video.cgi?resolution=640x480&req_fps=5',NULL,640,480,3,NULL,1,4,NULL,'<ip-address>:<port>',100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'Axis IP PTZ, 640x480, jpeg','Remote','http',0,0,'http','simple','<ip-address>',80,'/axis-cgi/jpg/image.cgi?resolution=640x480',NULL,640,480,3,NULL,1,4,NULL,'<ip-address>:<port>',100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'Axis IP PTZ, 640x480, jpeg','Remote','http',0,0,'http','simple','<ip-address>',80,'/axis-cgi/jpg/image.cgi?resolution=640x480',NULL,640,480,3,NULL,1,4,NULL,'<ip-address>:<port>',100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'Axis IP PTZ, 640x480, jpeg, max 5 FPS','Remote','http',0,0,'http','simple','<ip-address>',80,'/axis-cgi/jpg/image.cgi?resolution=640x480',NULL,640,480,3,5.0,1,4,NULL,'<ip-address>:<port>',100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'Axis IP PTZ, 640x480, jpeg, max 5 FPS','Remote','http',0,0,'http','simple','<ip-address>',80,'/axis-cgi/jpg/image.cgi?resolution=640x480',NULL,640,480,3,5.0,1,4,NULL,'<ip-address>:<port>',100,100);
|
||||||
INSERT into MonitorPresets VALUES (NULL,'Axis IP, mpeg4, unicast','Remote','rtsp',0,255,'rtsp','rtpUni','<ip-address>',554,'/mpeg4/media.amp','/trackID=',NULL,NULL,3,NULL,0,NULL,NULL,NULL,100,100);
|
INSERT into MonitorPresets VALUES (NULL,NULL,'Axis IP, mpeg4, unicast','Remote','rtsp',0,255,'rtsp','rtpUni','<ip-address>',554,'/mpeg4/media.amp','/trackID=',NULL,NULL,3,NULL,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT into MonitorPresets VALUES (NULL,'Axis IP, mpeg4, multicast','Remote','rtsp',0,255,'rtsp','rtpMulti','<ip-address>',554,'/mpeg4/media.amp','/trackID=',NULL,NULL,3,NULL,0,NULL,NULL,NULL,100,100);
|
INSERT into MonitorPresets VALUES (NULL,NULL,'Axis IP, mpeg4, multicast','Remote','rtsp',0,255,'rtsp','rtpMulti','<ip-address>',554,'/mpeg4/media.amp','/trackID=',NULL,NULL,3,NULL,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT into MonitorPresets VALUES (NULL,'Axis IP, mpeg4, RTP/RTSP','Remote','rtsp',0,255,'rtsp','rtpRtsp','<ip-address>',554,'/mpeg4/media.amp','/trackID=',NULL,NULL,3,NULL,0,NULL,NULL,NULL,100,100);
|
INSERT into MonitorPresets VALUES (NULL,NULL,'Axis IP, mpeg4, RTP/RTSP','Remote','rtsp',0,255,'rtsp','rtpRtsp','<ip-address>',554,'/mpeg4/media.amp','/trackID=',NULL,NULL,3,NULL,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT into MonitorPresets VALUES (NULL,'Axis IP, mpeg4, RTP/RTSP/HTTP','Remote',NULL,NULL,NULL,'rtsp','rtpRtspHttp','<ip-address>',554,'/mpeg4/media.amp','/trackID=',NULL,NULL,3,NULL,0,NULL,NULL,NULL,100,100);
|
INSERT into MonitorPresets VALUES (NULL,NULL,'Axis IP, mpeg4, RTP/RTSP/HTTP','Remote',NULL,NULL,NULL,'rtsp','rtpRtspHttp','<ip-address>',554,'/mpeg4/media.amp','/trackID=',NULL,NULL,3,NULL,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'D-link DCS-930L, 640x480, mjpeg','Remote','http',0,0,'http','simple','<ip-address>',80,'/mjpeg.cgi',NULL,640,480,3,NULL,0,NULL,NULL,NULL,100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'D-link DCS-930L, 640x480, mjpeg','Remote','http',0,0,'http','simple','<ip-address>',80,'/mjpeg.cgi',NULL,640,480,3,NULL,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'D-Link DCS-5020L, 640x480, mjpeg','Remote','http',0,0,'http','simple','<username>:<pwd>@<ip-address>','80','/video.cgi',NULL,640,480,0,NULL,1,'34',NULL,'<username>:<pwd>@<ip-address>',100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'D-Link DCS-5020L, 640x480, mjpeg','Remote','http',0,0,'http','simple','<username>:<pwd>@<ip-address>','80','/video.cgi',NULL,640,480,0,NULL,1,'34',NULL,'<username>:<pwd>@<ip-address>',100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'Panasonic IP, 320x240, mpjpeg','Remote','http',0,0,'http','simple','<ip-address>',80,'/nphMotionJpeg?Resolution=320x240&Quality=Standard',NULL,320,240,3,NULL,0,NULL,NULL,NULL,100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'Panasonic IP, 320x240, mpjpeg','Remote','http',0,0,'http','simple','<ip-address>',80,'/nphMotionJpeg?Resolution=320x240&Quality=Standard',NULL,320,240,3,NULL,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'Panasonic IP, 320x240, jpeg','Remote','http',0,0,'http','simple','<ip-address>',80,'/SnapshotJPEG?Resolution=320x240&Quality=Standard',NULL,320,240,3,NULL,0,NULL,NULL,NULL,100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'Panasonic IP, 320x240, jpeg','Remote','http',0,0,'http','simple','<ip-address>',80,'/SnapshotJPEG?Resolution=320x240&Quality=Standard',NULL,320,240,3,NULL,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'Panasonic IP, 320x240, jpeg, max 5 FPS','Remote','http',0,0,'http','simple','<ip-address>',80,'/SnapshotJPEG?Resolution=320x240&Quality=Standard',NULL,320,240,3,5.0,0,NULL,NULL,NULL,100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'Panasonic IP, 320x240, jpeg, max 5 FPS','Remote','http',0,0,'http','simple','<ip-address>',80,'/SnapshotJPEG?Resolution=320x240&Quality=Standard',NULL,320,240,3,5.0,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'Panasonic IP, 640x480, mpjpeg','Remote','http',0,0,'http','simple','<ip-address>',80,'/nphMotionJpeg?Resolution=640x480&Quality=Standard',NULL,640,480,3,NULL,0,NULL,NULL,NULL,100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'Panasonic IP, 640x480, mpjpeg','Remote','http',0,0,'http','simple','<ip-address>',80,'/nphMotionJpeg?Resolution=640x480&Quality=Standard',NULL,640,480,3,NULL,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'Panasonic IP, 640x480, jpeg','Remote','http',0,0,'http','simple','<ip-address>',80,'/SnapshotJPEG?Resolution=640x480&Quality=Standard',NULL,640,480,3,NULL,0,NULL,NULL,NULL,100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'Panasonic IP, 640x480, jpeg','Remote','http',0,0,'http','simple','<ip-address>',80,'/SnapshotJPEG?Resolution=640x480&Quality=Standard',NULL,640,480,3,NULL,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'Panasonic IP, 640x480, jpeg, max 5 FPS','Remote','http',0,0,'http','simple','<ip-address>',80,'/SnapshotJPEG?Resolution=640x480&Quality=Standard',NULL,640,480,3,5.0,0,NULL,NULL,NULL,100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'Panasonic IP, 640x480, jpeg, max 5 FPS','Remote','http',0,0,'http','simple','<ip-address>',80,'/SnapshotJPEG?Resolution=640x480&Quality=Standard',NULL,640,480,3,5.0,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'Panasonic IP PTZ, 320x240, mpjpeg','Remote','http',0,0,'http','simple','<ip-address>',80,'/nphMotionJpeg?Resolution=320x240&Quality=Standard',NULL,320,240,3,NULL,1,5,NULL,'<ip-address>:<port>',100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'Panasonic IP PTZ, 320x240, mpjpeg','Remote','http',0,0,'http','simple','<ip-address>',80,'/nphMotionJpeg?Resolution=320x240&Quality=Standard',NULL,320,240,3,NULL,1,5,NULL,'<ip-address>:<port>',100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'Panasonic IP PTZ, 320x240, jpeg','Remote','http',0,0,'http','simple','<ip-address>',80,'/SnapshotJPEG?Resolution=320x240&Quality=Standard',NULL,320,240,3,NULL,1,5,NULL,'<ip-address>:<port>',100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'Panasonic IP PTZ, 320x240, jpeg','Remote','http',0,0,'http','simple','<ip-address>',80,'/SnapshotJPEG?Resolution=320x240&Quality=Standard',NULL,320,240,3,NULL,1,5,NULL,'<ip-address>:<port>',100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'Panasonic IP PTZ, 320x240, jpeg, max 5 FPS','Remote','http',0,0,'http','simple','<ip-address>',80,'/SnapshotJPEG?Resolution=320x240&Quality=Standard',NULL,320,240,3,5.0,1,5,NULL,'<ip-address>:<port>',100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'Panasonic IP PTZ, 320x240, jpeg, max 5 FPS','Remote','http',0,0,'http','simple','<ip-address>',80,'/SnapshotJPEG?Resolution=320x240&Quality=Standard',NULL,320,240,3,5.0,1,5,NULL,'<ip-address>:<port>',100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'Panasonic IP PTZ, 640x480, mpjpeg','Remote','http',0,0,'http','simple','<ip-address>',80,'/nphMotionJpeg?Resolution=640x480&Quality=Standard',NULL,640,480,3,NULL,1,5,NULL,'<ip-address>:<port>',100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'Panasonic IP PTZ, 640x480, mpjpeg','Remote','http',0,0,'http','simple','<ip-address>',80,'/nphMotionJpeg?Resolution=640x480&Quality=Standard',NULL,640,480,3,NULL,1,5,NULL,'<ip-address>:<port>',100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'Panasonic IP PTZ, 640x480, jpeg','Remote','http',0,0,'http','simple','<ip-address>',80,'/SnapshotJPEG?Resolution=640x480&Quality=Standard',NULL,640,480,3,NULL,1,5,NULL,'<ip-address>:<port>',100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'Panasonic IP PTZ, 640x480, jpeg','Remote','http',0,0,'http','simple','<ip-address>',80,'/SnapshotJPEG?Resolution=640x480&Quality=Standard',NULL,640,480,3,NULL,1,5,NULL,'<ip-address>:<port>',100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'Panasonic IP PTZ, 640x480, jpeg, max 5 FPS','Remote','http',0,0,'http','simple','<ip-address>',80,'/SnapshotJPEG?Resolution=640x480&Quality=Standard',NULL,640,480,3,5.0,1,5,NULL,'<ip-address>:<port>',100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'Panasonic IP PTZ, 640x480, jpeg, max 5 FPS','Remote','http',0,0,'http','simple','<ip-address>',80,'/SnapshotJPEG?Resolution=640x480&Quality=Standard',NULL,640,480,3,5.0,1,5,NULL,'<ip-address>:<port>',100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'Gadspot IP, jpeg','Remote','http',0,0,'http','simple','<ip-address>',80,'/Jpeg/CamImg.jpg',NULL,NULL,NULL,3,NULL,0,NULL,NULL,NULL,100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'Gadspot IP, jpeg','Remote','http',0,0,'http','simple','<ip-address>',80,'/Jpeg/CamImg.jpg',NULL,NULL,NULL,3,NULL,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'Gadspot IP, jpeg, max 5 FPS','Remote','http',0,0,'http','simple','<ip-address>',80,'/Jpeg/CamImg.jpg',NULL,NULL,NULL,3,5.0,0,NULL,NULL,NULL,100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'Gadspot IP, jpeg, max 5 FPS','Remote','http',0,0,'http','simple','<ip-address>',80,'/Jpeg/CamImg.jpg',NULL,NULL,NULL,3,5.0,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'Gadspot IP, mpjpeg','Remote','http',0,0,'http','simple','<ip-address>',80,'/GetData.cgi',NULL,NULL,NULL,3,NULL,0,NULL,NULL,NULL,100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'Gadspot IP, mpjpeg','Remote','http',0,0,'http','simple','<ip-address>',80,'/GetData.cgi',NULL,NULL,NULL,3,NULL,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'Gadspot IP, mpjpeg','Remote','http',0,0,'http','simple','<ip-address>',80,'/Jpeg/CamImg.jpg',NULL,NULL,NULL,3,5.0,0,NULL,NULL,NULL,100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'Gadspot IP, mpjpeg','Remote','http',0,0,'http','simple','<ip-address>',80,'/Jpeg/CamImg.jpg',NULL,NULL,NULL,3,5.0,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'IP Webcam by Pavel Khlebovich 1920x1080','Remote','/dev/video<?>','0',255,'http','simple','<ip-address>','8080','/video','',1920,1080,0,NULL,0,'0','','',100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'IP Webcam by Pavel Khlebovich 1920x1080','Remote','/dev/video<?>','0',255,'http','simple','<ip-address>','8080','/video','',1920,1080,0,NULL,0,'0','','',100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'VEO Observer, jpeg','Remote','http',0,0,'http','simple','<ip-address>',80,'/Jpeg/CamImg.jpg',NULL,NULL,NULL,3,NULL,0,NULL,NULL,NULL,100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'VEO Observer, jpeg','Remote','http',0,0,'http','simple','<ip-address>',80,'/Jpeg/CamImg.jpg',NULL,NULL,NULL,3,NULL,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'Blue Net Video Server, jpeg','Remote','http',0,0,'http','simple','<ip-address>',80,'/cgi-bin/image.cgi?control=0&id=admin&passwd=admin',NULL,320,240,3,NULL,0,NULL,NULL,NULL,100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'Blue Net Video Server, jpeg','Remote','http',0,0,'http','simple','<ip-address>',80,'/cgi-bin/image.cgi?control=0&id=admin&passwd=admin',NULL,320,240,3,NULL,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT into MonitorPresets VALUES (NULL,'ACTi IP, mpeg4, unicast','Remote',NULL,NULL,NULL,'rtsp','rtpUni','<ip-address>',7070,'','/track',NULL,NULL,3,NULL,0,NULL,NULL,NULL,100,100);
|
INSERT into MonitorPresets VALUES (NULL,NULL,'ACTi IP, mpeg4, unicast','Remote',NULL,NULL,NULL,'rtsp','rtpUni','<ip-address>',7070,'','/track',NULL,NULL,3,NULL,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'Axis FFMPEG H.264','Ffmpeg',NULL,NULL,NULL,NULL,NULL,'rtsp://<host/address>/axis-media/media.amp?videocodec=h264',NULL,NULL,NULL,640,480,3,NULL,0,NULL,NULL,NULL,100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'Axis FFMPEG H.264','Ffmpeg',NULL,NULL,NULL,NULL,NULL,'rtsp://<host/address>/axis-media/media.amp?videocodec=h264',NULL,NULL,NULL,640,480,3,NULL,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'Vivotek FFMPEG','Ffmpeg',NULL,NULL,NULL,NULL,NULL,'rtsp://<host/address>:554/live.sdp',NULL,NULL,NULL,352,240,NULL,NULL,0,NULL,NULL,NULL,100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'Vivotek FFMPEG','Ffmpeg',NULL,NULL,NULL,NULL,NULL,'rtsp://<host/address>:554/live.sdp',NULL,NULL,NULL,352,240,NULL,NULL,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'Axis FFMPEG','Ffmpeg',NULL,NULL,NULL,NULL,NULL,'rtsp://<host/address>/axis-media/media.amp',NULL,NULL,NULL,640,480,NULL,NULL,0,NULL,NULL,NULL,100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'Axis FFMPEG','Ffmpeg',NULL,NULL,NULL,NULL,NULL,'rtsp://<host/address>/axis-media/media.amp',NULL,NULL,NULL,640,480,NULL,NULL,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'ACTi TCM FFMPEG','Ffmpeg',NULL,NULL,NULL,NULL,NULL,'rtsp://admin:123456@<host/address>:7070',NULL,NULL,NULL,320,240,NULL,NULL,0,NULL,NULL,NULL,100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'ACTi TCM FFMPEG','Ffmpeg',NULL,NULL,NULL,NULL,NULL,'rtsp://admin:123456@<host/address>:7070',NULL,NULL,NULL,320,240,NULL,NULL,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'BTTV Video (V4L2), PAL, 320x240','Local','/dev/video<?>',0,255,NULL,'v4l2',NULL,NULL,NULL,NULL,320,240,1345466932,NULL,0,NULL,NULL,NULL,100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'BTTV Video (V4L2), PAL, 320x240','Local','/dev/video<?>',0,255,NULL,'v4l2',NULL,NULL,NULL,NULL,320,240,1345466932,NULL,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'BTTV Video (V4L2), PAL, 320x240, max 5 FPS','Local','/dev/video<?>',0,255,NULL,'v4l2',NULL,NULL,NULL,NULL,320,240,1345466932,5.0,0,NULL,NULL,NULL,100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'BTTV Video (V4L2), PAL, 320x240, max 5 FPS','Local','/dev/video<?>',0,255,NULL,'v4l2',NULL,NULL,NULL,NULL,320,240,1345466932,5.0,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'BTTV Video (V4L2), PAL, 640x480','Local','/dev/video<?>',0,255,NULL,'v4l2',NULL,NULL,NULL,NULL,640,480,1345466932,NULL,0,NULL,NULL,NULL,100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'BTTV Video (V4L2), PAL, 640x480','Local','/dev/video<?>',0,255,NULL,'v4l2',NULL,NULL,NULL,NULL,640,480,1345466932,NULL,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'BTTV Video (V4L2), PAL, 640x480, max 5 FPS','Local','/dev/video<?>',0,255,NULL,'v4l2',NULL,NULL,NULL,NULL,640,480,1345466932,5.0,0,NULL,NULL,NULL,100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'BTTV Video (V4L2), PAL, 640x480, max 5 FPS','Local','/dev/video<?>',0,255,NULL,'v4l2',NULL,NULL,NULL,NULL,640,480,1345466932,5.0,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'BTTV Video (V4L2), NTSC, 320x240','Local','/dev/video<?>',0,45056,NULL,'v4l2',NULL,NULL,NULL,NULL,320,240,1345466932,NULL,0,NULL,NULL,NULL,100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'BTTV Video (V4L2), NTSC, 320x240','Local','/dev/video<?>',0,45056,NULL,'v4l2',NULL,NULL,NULL,NULL,320,240,1345466932,NULL,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'BTTV Video (V4L2), NTSC, 320x240, max 5 FPS','Local','/dev/video<?>',0,45056,NULL,'v4l2',NULL,NULL,NULL,NULL,320,240,1345466932,5.0,0,NULL,NULL,NULL,100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'BTTV Video (V4L2), NTSC, 320x240, max 5 FPS','Local','/dev/video<?>',0,45056,NULL,'v4l2',NULL,NULL,NULL,NULL,320,240,1345466932,5.0,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'BTTV Video (V4L2), NTSC, 640x480','Local','/dev/video<?>',0,45056,NULL,'v4l2',NULL,NULL,NULL,NULL,640,480,1345466932,NULL,0,NULL,NULL,NULL,100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'BTTV Video (V4L2), NTSC, 640x480','Local','/dev/video<?>',0,45056,NULL,'v4l2',NULL,NULL,NULL,NULL,640,480,1345466932,NULL,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'BTTV Video (V4L2), NTSC, 640x480, max 5 FPS','Local','/dev/video<?>',0,45056,NULL,'v4l2',NULL,NULL,NULL,NULL,640,480,1345466932,5.0,0,NULL,NULL,NULL,100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'BTTV Video (V4L2), NTSC, 640x480, max 5 FPS','Local','/dev/video<?>',0,45056,NULL,'v4l2',NULL,NULL,NULL,NULL,640,480,1345466932,5.0,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'BTTV Video (V4L1), PAL, 320x240','Local','/dev/video<?>',0,0,NULL,'v4l1',NULL,NULL,NULL,NULL,320,240,13,NULL,0,NULL,NULL,NULL,100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'BTTV Video (V4L1), PAL, 320x240','Local','/dev/video<?>',0,0,NULL,'v4l1',NULL,NULL,NULL,NULL,320,240,13,NULL,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'BTTV Video (V4L1), PAL, 320x240, max 5 FPS','Local','/dev/video<?>',0,0,NULL,'v4l1',NULL,NULL,NULL,NULL,320,240,13,5.0,0,NULL,NULL,NULL,100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'BTTV Video (V4L1), PAL, 320x240, max 5 FPS','Local','/dev/video<?>',0,0,NULL,'v4l1',NULL,NULL,NULL,NULL,320,240,13,5.0,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'BTTV Video (V4L1), PAL, 640x480','Local','/dev/video<?>',0,0,NULL,'v4l1',NULL,NULL,NULL,NULL,640,480,13,NULL,0,NULL,NULL,NULL,100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'BTTV Video (V4L1), PAL, 640x480','Local','/dev/video<?>',0,0,NULL,'v4l1',NULL,NULL,NULL,NULL,640,480,13,NULL,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'BTTV Video (V4L1), PAL, 640x480, max 5 FPS','Local','/dev/video<?>',0,0,NULL,'v4l1',NULL,NULL,NULL,NULL,640,480,13,5.0,0,NULL,NULL,NULL,100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'BTTV Video (V4L1), PAL, 640x480, max 5 FPS','Local','/dev/video<?>',0,0,NULL,'v4l1',NULL,NULL,NULL,NULL,640,480,13,5.0,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'BTTV Video (V4L1), NTSC, 320x240','Local','/dev/video<?>',0,1,NULL,'v4l1',NULL,NULL,NULL,NULL,320,240,13,NULL,0,NULL,NULL,NULL,100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'BTTV Video (V4L1), NTSC, 320x240','Local','/dev/video<?>',0,1,NULL,'v4l1',NULL,NULL,NULL,NULL,320,240,13,NULL,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'BTTV Video (V4L1), NTSC, 320x240, max 5 FPS','Local','/dev/video<?>',0,1,NULL,'v4l1',NULL,NULL,NULL,NULL,320,240,13,5.0,0,NULL,NULL,NULL,100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'BTTV Video (V4L1), NTSC, 320x240, max 5 FPS','Local','/dev/video<?>',0,1,NULL,'v4l1',NULL,NULL,NULL,NULL,320,240,13,5.0,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'BTTV Video (V4L1), NTSC, 640x480','Local','/dev/video<?>',0,1,NULL,'v4l1',NULL,NULL,NULL,NULL,640,480,13,NULL,0,NULL,NULL,NULL,100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'BTTV Video (V4L1), NTSC, 640x480','Local','/dev/video<?>',0,1,NULL,'v4l1',NULL,NULL,NULL,NULL,640,480,13,NULL,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'BTTV Video (V4L1), NTSC, 640x480, max 5 FPS','Local','/dev/video<?>',0,1,NULL,'v4l1',NULL,NULL,NULL,NULL,640,480,13,5.0,0,NULL,NULL,NULL,100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'BTTV Video (V4L1), NTSC, 640x480, max 5 FPS','Local','/dev/video<?>',0,1,NULL,'v4l1',NULL,NULL,NULL,NULL,640,480,13,5.0,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'Remote ZoneMinder','Remote',NULL,NULL,NULL,'http','simple','<ip-address>',80,'/cgi-bin/nph-zms?mode=jpeg&monitor=<monitor-id>&scale=100&maxfps=5&buffer=0',NULL,NULL,NULL,3,NULL,0,NULL,NULL,NULL,100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'Remote ZoneMinder','Remote',NULL,NULL,NULL,'http','simple','<ip-address>',80,'/cgi-bin/nph-zms?mode=jpeg&monitor=<monitor-id>&scale=100&maxfps=5&buffer=0',NULL,NULL,NULL,3,NULL,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'Foscam FI8620 FFMPEG H.264','Ffmpeg',NULL,NULL,NULL,NULL,'','','','rtsp://<username>:<pwd>@<ip-address>:554/11',NULL,704,576,0,NULL,1,'10','<admin_pwd>','<ip-address>',100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'Foscam FI8620 FFMPEG H.264','Ffmpeg',NULL,NULL,NULL,NULL,'','','','rtsp://<username>:<pwd>@<ip-address>:554/11',NULL,704,576,0,NULL,1,'10','<admin_pwd>','<ip-address>',100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'Foscam FI8608W FFMPEG H.264','Ffmpeg',NULL,NULL,NULL,NULL,'','','','rtsp://<username>:<pwd>@<ip-address>:554/11',NULL,640,480,0,NULL,1,'11','<admin_pwd>','<ip-address>',100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'Foscam FI8608W FFMPEG H.264','Ffmpeg',NULL,NULL,NULL,NULL,'','','','rtsp://<username>:<pwd>@<ip-address>:554/11',NULL,640,480,0,NULL,1,'11','<admin_pwd>','<ip-address>',100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'Foscam FI9821W FFMPEG H.264','Ffmpeg',NULL,NULL,NULL,NULL,'','','','rtsp://<username>:<pwd>@<ip-address>:88/videoMain',NULL,1280,720,0,NULL,1,'12','<admin_pwd>','<ip-address>',100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'Foscam FI9821W FFMPEG H.264','Ffmpeg',NULL,NULL,NULL,NULL,'','','','rtsp://<username>:<pwd>@<ip-address>:88/videoMain',NULL,1280,720,0,NULL,1,'12','<admin_pwd>','<ip-address>',100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'Loftek Sentinel PTZ, 640x480, mjpeg','Remote','http',0,0,NULL,NULL,'<ip-address>','80','/videostream.cgi?user=<username>&pwd=<password>&resolution=32&rate=11',NULL,640,480,4,NULL,1,'13','','<username>:<pwd>@<ip-address>',100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'Loftek Sentinel PTZ, 640x480, mjpeg','Remote','http',0,0,NULL,NULL,'<ip-address>','80','/videostream.cgi?user=<username>&pwd=<password>&resolution=32&rate=11',NULL,640,480,4,NULL,1,'13','','<username>:<pwd>@<ip-address>',100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'Airlink 777W PTZ, 640x480, mjpeg','Remote','http',0,0,NULL,NULL,'<username>:<password>@<ip-address>','80','/cgi/mjpg/mjpg.cgi',NULL,640,480,4,NULL,1,'7','','<username>:<pwd>@<ip-address>',100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'Airlink 777W PTZ, 640x480, mjpeg','Remote','http',0,0,NULL,NULL,'<username>:<password>@<ip-address>','80','/cgi/mjpg/mjpg.cgi',NULL,640,480,4,NULL,1,'7','','<username>:<pwd>@<ip-address>',100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'SunEyes SP-P1802SWPTZ','Libvlc','/dev/video<?>','0',255,'','rtpMulti','','80','rtsp://<ip-address>:554/11','',1920,1080,0,0.00,1,'16','-speed=64','<ip-address>:<port>',100,33);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'SunEyes SP-P1802SWPTZ','Libvlc','/dev/video<?>','0',255,'','rtpMulti','','80','rtsp://<ip-address>:554/11','',1920,1080,0,0.00,1,'16','-speed=64','<ip-address>:<port>',100,33);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'Qihan IP, 1280x720, RTP/RTSP','Ffmpeg','rtsp',0,255,'rtsp','rtpRtsp',NULL,554,'rtsp://<ip-address>/tcp_live/ch0_0',NULL,1280,720,3,NULL,0,NULL,NULL,NULL,100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'Qihan IP, 1280x720, RTP/RTSP','Ffmpeg','rtsp',0,255,'rtsp','rtpRtsp',NULL,554,'rtsp://<ip-address>/tcp_live/ch0_0',NULL,1280,720,3,NULL,0,NULL,NULL,NULL,100,100);
|
||||||
INSERT INTO MonitorPresets VALUES (NULL,'Qihan IP, 1920x1080, RTP/RTSP','Ffmpeg','rtsp',0,255,'rtsp','rtpRtsp',NULL,554,'rtsp://<ip-address>/tcp_live/ch0_0',NULL,1920,1080,3,NULL,0,NULL,NULL,NULL,100,100);
|
INSERT INTO MonitorPresets VALUES (NULL,NULL,'Qihan IP, 1920x1080, RTP/RTSP','Ffmpeg','rtsp',0,255,'rtsp','rtpRtsp',NULL,554,'rtsp://<ip-address>/tcp_live/ch0_0',NULL,1920,1080,3,NULL,0,NULL,NULL,NULL,100,100);
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Add some zone preset values
|
-- Add some zone preset values
|
||||||
|
@ -1080,11 +1091,11 @@ CREATE TABLE MontageLayouts (
|
||||||
PRIMARY KEY (`Id`)
|
PRIMARY KEY (`Id`)
|
||||||
);
|
);
|
||||||
|
|
||||||
INSERT INTO MontageLayouts (`Name`,`Positions`) VALUES ('Freeform', '{ "default":{"float":"left","left":"0px","right":"0px","top":"0px","bottom":"0px"} }' );
|
INSERT INTO MontageLayouts (`Name`,`Positions`) VALUES ('Freeform', '{ "default":{"float":"left","left":"0px","right":"0px","top":"0px","bottom":"0px","width":"auto"} }' );
|
||||||
INSERT INTO MontageLayouts (`Name`,`Positions`) VALUES ('2 Wide', '{ "default":{"float":"left", "width":"49%","left":"0px","right":"0px","top":"0px","bottom":"0px"} }' );
|
INSERT INTO MontageLayouts (`Name`,`Positions`) VALUES ('2 Wide', '{ "default":{"float":"left", "width":"50%","left":"0px","right":"0px","top":"0px","bottom":"0px"} }' );
|
||||||
INSERT INTO MontageLayouts (`Name`,`Positions`) VALUES ('3 Wide', '{ "default":{"float":"left", "width":"33%","left":"0px","right":"0px","top":"0px","bottom":"0px"} }' );
|
INSERT INTO MontageLayouts (`Name`,`Positions`) VALUES ('3 Wide', '{ "default":{"float":"left", "width":"33%","left":"0px","right":"0px","top":"0px","bottom":"0px"} }' );
|
||||||
INSERT INTO MontageLayouts (`Name`,`Positions`) VALUES ('4 Wide', '{ "default":{"float":"left", "width":"24.5%","left":"0px","right":"0px","top":"0px","bottom":"0px"} }' );
|
INSERT INTO MontageLayouts (`Name`,`Positions`) VALUES ('4 Wide', '{ "default":{"float":"left", "width":"25%","left":"0px","right":"0px","top":"0px","bottom":"0px"} }' );
|
||||||
INSERT INTO MontageLayouts (`Name`,`Positions`) VALUES ('5 Wide', '{ "default":{"float":"left", "width":"19%","left":"0px","right":"0px","top":"0px","bottom":"0px"} }' );
|
INSERT INTO MontageLayouts (`Name`,`Positions`) VALUES ('5 Wide', '{ "default":{"float":"left", "width":"20%","left":"0px","right":"0px","top":"0px","bottom":"0px"} }' );
|
||||||
|
|
||||||
CREATE TABLE Sessions (
|
CREATE TABLE Sessions (
|
||||||
id char(32) not null,
|
id char(32) not null,
|
||||||
|
@ -1115,6 +1126,9 @@ CREATE TABLE Snapshot_Events (
|
||||||
|
|
||||||
-- We generally don't alter triggers, we drop and re-create them, so let's keep them in a separate file that we can just source in update scripts.
|
-- We generally don't alter triggers, we drop and re-create them, so let's keep them in a separate file that we can just source in update scripts.
|
||||||
source @PKGDATADIR@/db/triggers.sql
|
source @PKGDATADIR@/db/triggers.sql
|
||||||
|
|
||||||
|
source @PKGDATADIR@/db/manufacturers.sql
|
||||||
|
source @PKGDATADIR@/db/models.sql
|
||||||
--
|
--
|
||||||
-- Apply the initial configuration
|
-- Apply the initial configuration
|
||||||
--
|
--
|
||||||
|
|
|
@ -56,7 +56,7 @@ EXECUTE stmt;
|
||||||
SET @s = (SELECT IF(
|
SET @s = (SELECT IF(
|
||||||
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema = DATABASE()
|
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema = DATABASE()
|
||||||
AND table_name = 'Monitor_Status'
|
AND table_name = 'Monitor_Status'
|
||||||
AND column_name = 'DayEvents'
|
AND column_name = 'DayEventDiskSpace'
|
||||||
) > 0,
|
) > 0,
|
||||||
"ALTER TABLE `Monitor_Status` DROP `DayEventDiskSpace`",
|
"ALTER TABLE `Monitor_Status` DROP `DayEventDiskSpace`",
|
||||||
"SELECT 'Column DayEventDiskSpace already removed from Monitor_Status'"
|
"SELECT 'Column DayEventDiskSpace already removed from Monitor_Status'"
|
||||||
|
|
|
@ -0,0 +1,47 @@
|
||||||
|
SET @s = (SELECT IF(
|
||||||
|
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema = DATABASE()
|
||||||
|
AND table_name = 'Monitors'
|
||||||
|
AND column_name = 'ManufacturerId'
|
||||||
|
) > 0,
|
||||||
|
"SELECT 'Column ManufacturerId already exists in Monitors'",
|
||||||
|
"ALTER TABLE `Monitors` ADD `ManufacturerId` int(10) unsigned AFTER `StorageId`"
|
||||||
|
));
|
||||||
|
|
||||||
|
PREPARE stmt FROM @s;
|
||||||
|
EXECUTE stmt;
|
||||||
|
|
||||||
|
SET @s = (SELECT IF(
|
||||||
|
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE table_schema = DATABASE()
|
||||||
|
AND table_name = 'Monitors'
|
||||||
|
AND column_name = 'ManufacturerId'
|
||||||
|
) > 0,
|
||||||
|
"SELECT 'FOREIGN KEY for ManufacturerId already exists in Monitors'",
|
||||||
|
"ALTER TABLE `Monitors` ADD FOREIGN KEY (`ManufacturerId`) REFERENCES `Manufacturers` (Id)"
|
||||||
|
));
|
||||||
|
|
||||||
|
PREPARE stmt FROM @s;
|
||||||
|
EXECUTE stmt;
|
||||||
|
|
||||||
|
SET @s = (SELECT IF(
|
||||||
|
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema = DATABASE()
|
||||||
|
AND table_name = 'Monitors'
|
||||||
|
AND column_name = 'ModelId'
|
||||||
|
) > 0,
|
||||||
|
"SELECT 'Column ModelId already exists in Monitors'",
|
||||||
|
"ALTER TABLE `Monitors` ADD `ModelId` int(10) unsigned AFTER `ManufacturerId`"
|
||||||
|
));
|
||||||
|
|
||||||
|
PREPARE stmt FROM @s;
|
||||||
|
EXECUTE stmt;
|
||||||
|
|
||||||
|
SET @s = (SELECT IF(
|
||||||
|
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE table_schema = DATABASE()
|
||||||
|
AND table_name = 'Monitors'
|
||||||
|
AND column_name = 'ModelId'
|
||||||
|
) > 0,
|
||||||
|
"SELECT 'FOREIGN KEY for ModelId already exists in Monitors'",
|
||||||
|
"ALTER TABLE `Monitors` ADD FOREIGN KEY (`ModelId`) REFERENCES `Models` (Id)"
|
||||||
|
));
|
||||||
|
|
||||||
|
PREPARE stmt FROM @s;
|
||||||
|
EXECUTE stmt;
|
|
@ -1,2 +0,0 @@
|
||||||
UPDATE Monitors set Importance = 'Normal' where Importance IS NULL;
|
|
||||||
ALTER TABLE `Monitors` MODIFY `Importance` enum('Normal','Less','Not') NOT NULL default 'Normal';
|
|
|
@ -0,0 +1 @@
|
||||||
|
ALTER TABLE `Monitors` MODIFY `Longitude` DECIMAL(11,8);
|
|
@ -0,0 +1,7 @@
|
||||||
|
UPDATE MontageLayouts SET `Positions` = '{ "default":{"float":"left","left":"0px","right":"0px","top":"0px","bottom":"0px","width":"auto"} }' WHERE `Name`='Freeform';
|
||||||
|
UPDATE MontageLayouts SET `Positions` = '{ "default":{"float":"left", "width":"49%","left":"0px","right":"0px","top":"0px","bottom":"0px"} }' WHERE `Name`='2 Wide';
|
||||||
|
UPDATE MontageLayouts SET `Positions` = '{ "default":{"float":"left", "width":"25%","left":"0px","right":"0px","top":"0px","bottom":"0px"} }' WHERE `Name`='4 Wide';
|
||||||
|
UPDATE MontageLayouts SET `Positions` = '{ "default":{"float":"left", "width":"20%","left":"0px","right":"0px","top":"0px","bottom":"0px"} }' WHERE `Name`='5 Wide';
|
||||||
|
|
||||||
|
UPDATE Monitors set Importance = 'Normal' where Importance IS NULL;
|
||||||
|
ALTER TABLE `Monitors` MODIFY `Importance` enum('Normal','Less','Not') NOT NULL default 'Normal';
|
|
@ -0,0 +1,74 @@
|
||||||
|
SET @s = (SELECT IF(
|
||||||
|
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema = DATABASE()
|
||||||
|
AND table_name = 'Monitors'
|
||||||
|
AND column_name = 'ManufacturerId'
|
||||||
|
) > 0,
|
||||||
|
"SELECT 'Column ManufacturerId already exists in Monitors'",
|
||||||
|
"ALTER TABLE `Monitors` ADD `ManufacturerId` int(10) unsigned AFTER `StorageId`"
|
||||||
|
));
|
||||||
|
|
||||||
|
PREPARE stmt FROM @s;
|
||||||
|
EXECUTE stmt;
|
||||||
|
|
||||||
|
SET @s = (SELECT IF(
|
||||||
|
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE table_schema = DATABASE()
|
||||||
|
AND table_name = 'Monitors'
|
||||||
|
AND column_name = 'ManufacturerId'
|
||||||
|
) > 0,
|
||||||
|
"SELECT 'FOREIGN KEY for ManufacturerId already exists in Monitors'",
|
||||||
|
"ALTER TABLE `Monitors` ADD FOREIGN KEY (`ManufacturerId`) REFERENCES `Manufacturers` (Id)"
|
||||||
|
));
|
||||||
|
|
||||||
|
PREPARE stmt FROM @s;
|
||||||
|
EXECUTE stmt;
|
||||||
|
|
||||||
|
SET @s = (SELECT IF(
|
||||||
|
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema = DATABASE()
|
||||||
|
AND table_name = 'Monitors'
|
||||||
|
AND column_name = 'ModelId'
|
||||||
|
) > 0,
|
||||||
|
"SELECT 'Column ModelId already exists in Monitors'",
|
||||||
|
"ALTER TABLE `Monitors` ADD `ModelId` int(10) unsigned AFTER `ManufacturerId`"
|
||||||
|
));
|
||||||
|
|
||||||
|
PREPARE stmt FROM @s;
|
||||||
|
EXECUTE stmt;
|
||||||
|
|
||||||
|
SET @s = (SELECT IF(
|
||||||
|
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE table_schema = DATABASE()
|
||||||
|
AND table_name = 'Monitors'
|
||||||
|
AND column_name = 'ModelId'
|
||||||
|
) > 0,
|
||||||
|
"SELECT 'FOREIGN KEY for ModelId already exists in Monitors'",
|
||||||
|
"ALTER TABLE `Monitors` ADD FOREIGN KEY (`ModelId`) REFERENCES `Models` (Id)"
|
||||||
|
));
|
||||||
|
|
||||||
|
PREPARE stmt FROM @s;
|
||||||
|
EXECUTE stmt;
|
||||||
|
|
||||||
|
SET @s = (SELECT IF(
|
||||||
|
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema = DATABASE()
|
||||||
|
AND table_name = 'MonitorPresets'
|
||||||
|
AND column_name = 'ModelId'
|
||||||
|
) > 0,
|
||||||
|
"SELECT 'Column ModelId already exists in MonitorPresets'",
|
||||||
|
"ALTER TABLE `MonitorPresets` ADD `ModelId` int(10) unsigned AFTER `Id`"
|
||||||
|
));
|
||||||
|
|
||||||
|
PREPARE stmt FROM @s;
|
||||||
|
EXECUTE stmt;
|
||||||
|
|
||||||
|
SET @s = (SELECT IF(
|
||||||
|
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE table_schema = DATABASE()
|
||||||
|
AND table_name = 'MonitorPresets'
|
||||||
|
AND column_name = 'ModelId'
|
||||||
|
) > 0,
|
||||||
|
"SELECT 'FOREIGN KEY for ModelId already exists in MonitorPresets'",
|
||||||
|
"ALTER TABLE `MonitorPresets` ADD FOREIGN KEY (`ModelId`) REFERENCES `Models` (Id)"
|
||||||
|
));
|
||||||
|
|
||||||
|
PREPARE stmt FROM @s;
|
||||||
|
EXECUTE stmt;
|
||||||
|
|
||||||
|
UPDATE `MonitorPresets` SET `ModelId`=(SELECT `Id` FROM `Models` WHERE `Name`='IP8M-T2499EW') WHERE `Name` like 'Amcrest, IP8M-T2499EW
|
||||||
|
%';
|
|
@ -0,0 +1,2 @@
|
||||||
|
source @PKGDATADIR@/db/manufacturers.sql
|
||||||
|
source @PKGDATADIR@/db/models.sql
|
|
@ -0,0 +1,31 @@
|
||||||
|
--
|
||||||
|
-- This update adds EventStartCommand and EventEndCommand
|
||||||
|
--
|
||||||
|
|
||||||
|
SET @s = (SELECT IF(
|
||||||
|
(SELECT COUNT(*)
|
||||||
|
FROM INFORMATION_SCHEMA.COLUMNS
|
||||||
|
WHERE table_name = 'Monitors'
|
||||||
|
AND table_schema = DATABASE()
|
||||||
|
AND column_name = 'EventEndCommand'
|
||||||
|
) > 0,
|
||||||
|
"SELECT 'Column EventEndCommand already exists in Monitors'",
|
||||||
|
"ALTER TABLE `Monitors` ADD COLUMN `EventEndCommand` VARCHAR(255) NOT NULL DEFAULT '' AFTER `Triggers`"
|
||||||
|
));
|
||||||
|
|
||||||
|
PREPARE stmt FROM @s;
|
||||||
|
EXECUTE stmt;
|
||||||
|
|
||||||
|
SET @s = (SELECT IF(
|
||||||
|
(SELECT COUNT(*)
|
||||||
|
FROM INFORMATION_SCHEMA.COLUMNS
|
||||||
|
WHERE table_name = 'Monitors'
|
||||||
|
AND table_schema = DATABASE()
|
||||||
|
AND column_name = 'EventStartCommand'
|
||||||
|
) > 0,
|
||||||
|
"SELECT 'Column EventStartCommand already exists in Monitors'",
|
||||||
|
"ALTER TABLE `Monitors` ADD COLUMN `EventStartCommand` VARCHAR(255) NOT NULL DEFAULT '' AFTER `Triggers`"
|
||||||
|
));
|
||||||
|
|
||||||
|
PREPARE stmt FROM @s;
|
||||||
|
EXECUTE stmt;
|
|
@ -0,0 +1,18 @@
|
||||||
|
--
|
||||||
|
-- Update Filters table to have a ExecuteInterval Column
|
||||||
|
--
|
||||||
|
|
||||||
|
SELECT 'Checking for ExecuteInterval in Filters';
|
||||||
|
SET @s = (SELECT IF(
|
||||||
|
(SELECT COUNT(*)
|
||||||
|
FROM INFORMATION_SCHEMA.COLUMNS
|
||||||
|
WHERE table_name = 'Filters'
|
||||||
|
AND table_schema = DATABASE()
|
||||||
|
AND column_name = 'ExecuteInterval'
|
||||||
|
) > 0,
|
||||||
|
"SELECT 'Column ExecuteInterval already exists in Filters'",
|
||||||
|
"ALTER TABLE Filters ADD COLUMN `ExecuteInterval` int(10) unsigned NOT NULL default '60' AFTER `UserId`"
|
||||||
|
));
|
||||||
|
|
||||||
|
PREPARE stmt FROM @s;
|
||||||
|
EXECUTE stmt;
|
|
@ -0,0 +1,59 @@
|
||||||
|
SET @s = (SELECT IF(
|
||||||
|
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema = DATABASE()
|
||||||
|
AND table_name = 'Monitors'
|
||||||
|
AND column_name = 'Capturing'
|
||||||
|
) > 0,
|
||||||
|
"SELECT 'Column Capturing already exists in Monitors'",
|
||||||
|
"ALTER TABLE `Monitors` ADD `Capturing` enum('None','Ondemand', 'Always') NOT NULL default 'Always' AFTER `Function`"
|
||||||
|
));
|
||||||
|
|
||||||
|
PREPARE stmt FROM @s;
|
||||||
|
EXECUTE stmt;
|
||||||
|
|
||||||
|
SET @s = (SELECT IF(
|
||||||
|
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema = DATABASE()
|
||||||
|
AND table_name = 'Monitors'
|
||||||
|
AND column_name = 'Analysing'
|
||||||
|
) > 0,
|
||||||
|
"SELECT 'Column Analysing already exists in Monitors'",
|
||||||
|
"ALTER TABLE `Monitors` ADD `Analysing` enum('None','Always') NOT NULL default 'Always'"
|
||||||
|
));
|
||||||
|
|
||||||
|
PREPARE stmt FROM @s;
|
||||||
|
EXECUTE stmt;
|
||||||
|
|
||||||
|
SET @s = (SELECT IF(
|
||||||
|
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema = DATABASE()
|
||||||
|
AND table_name = 'Monitors'
|
||||||
|
AND column_name = 'AnalysisSource'
|
||||||
|
) > 0,
|
||||||
|
"SELECT 'Column AnalysisSource already exists in Monitors'",
|
||||||
|
"ALTER TABLE `Monitors` ADD `AnalysisSource` enum('Primary','Secondary') NOT NULL DEFAULT 'Primary' AFTER `Analysing`"
|
||||||
|
));
|
||||||
|
|
||||||
|
PREPARE stmt FROM @s;
|
||||||
|
EXECUTE stmt;
|
||||||
|
|
||||||
|
SET @s = (SELECT IF(
|
||||||
|
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema = DATABASE()
|
||||||
|
AND table_name = 'Monitors'
|
||||||
|
AND column_name = 'Recording'
|
||||||
|
) > 0,
|
||||||
|
"SELECT 'Column Recording already exists in Monitors'",
|
||||||
|
"ALTER TABLE `Monitors` ADD `Recording` enum('None', 'OnMotion', 'Always') NOT NULL default 'Always'"
|
||||||
|
));
|
||||||
|
|
||||||
|
PREPARE stmt FROM @s;
|
||||||
|
EXECUTE stmt;
|
||||||
|
|
||||||
|
SET @s = (SELECT IF(
|
||||||
|
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema = DATABASE()
|
||||||
|
AND table_name = 'Monitors'
|
||||||
|
AND column_name = 'RecordingSource'
|
||||||
|
) > 0,
|
||||||
|
"SELECT 'Column RecordingSource already exists in Monitors'",
|
||||||
|
"ALTER TABLE `Monitors` ADD `RecordingSource` enum('Primary','Secondary','Both') NOT NULL DEFAULT 'Primary' AFTER `RecordAudio`"
|
||||||
|
));
|
||||||
|
|
||||||
|
PREPARE stmt FROM @s;
|
||||||
|
EXECUTE stmt;
|
|
@ -5,7 +5,6 @@ Maintainer: Isaac Connor <isaac@zoneminder.com>
|
||||||
Uploaders: Isaac Connor <isaac@zoneminder.com>
|
Uploaders: Isaac Connor <isaac@zoneminder.com>
|
||||||
Build-Depends: debhelper, sphinx-doc, dh-linktree, dh-apache2
|
Build-Depends: debhelper, sphinx-doc, dh-linktree, dh-apache2
|
||||||
,cmake
|
,cmake
|
||||||
,libavdevice-dev
|
|
||||||
,libavcodec-dev
|
,libavcodec-dev
|
||||||
,libavformat-dev
|
,libavformat-dev
|
||||||
,libavutil-dev
|
,libavutil-dev
|
||||||
|
@ -14,7 +13,6 @@ Build-Depends: debhelper, sphinx-doc, dh-linktree, dh-apache2
|
||||||
,ffmpeg
|
,ffmpeg
|
||||||
,net-tools
|
,net-tools
|
||||||
,libbz2-dev
|
,libbz2-dev
|
||||||
,libgcrypt20-dev
|
|
||||||
,libcurl4-gnutls-dev
|
,libcurl4-gnutls-dev
|
||||||
,libturbojpeg0-dev
|
,libturbojpeg0-dev
|
||||||
,default-libmysqlclient-dev | libmysqlclient-dev | libmariadbclient-dev-compat
|
,default-libmysqlclient-dev | libmysqlclient-dev | libmariadbclient-dev-compat
|
||||||
|
|
|
@ -41,7 +41,6 @@ Copyright: 2005-2013 Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
License: Expat
|
License: Expat
|
||||||
|
|
||||||
Files:
|
Files:
|
||||||
cmake/Modules/CheckPrototypeDefinition*.cmake
|
|
||||||
cmake/Modules/FindGLIB2.cmake
|
cmake/Modules/FindGLIB2.cmake
|
||||||
cmake/Modules/FindPolkit.cmake
|
cmake/Modules/FindPolkit.cmake
|
||||||
cmake/Modules/GNUInstallDirs.cmake
|
cmake/Modules/GNUInstallDirs.cmake
|
||||||
|
|
|
@ -9,7 +9,6 @@ Build-Depends: debhelper (>= 9), cmake
|
||||||
, libjpeg8-dev | libjpeg-dev
|
, libjpeg8-dev | libjpeg-dev
|
||||||
, libpcre3-dev
|
, libpcre3-dev
|
||||||
, libavcodec-dev, libavformat-dev (>= 3:0.svn20090204), libswscale-dev (>= 3:0.svn20090204), libavutil-dev
|
, libavcodec-dev, libavformat-dev (>= 3:0.svn20090204), libswscale-dev (>= 3:0.svn20090204), libavutil-dev
|
||||||
, libavdevice-dev
|
|
||||||
, libv4l-dev (>= 0.8.3)
|
, libv4l-dev (>= 0.8.3)
|
||||||
, libbz2-dev
|
, libbz2-dev
|
||||||
, ffmpeg | libav-tools
|
, ffmpeg | libav-tools
|
||||||
|
@ -17,7 +16,7 @@ Build-Depends: debhelper (>= 9), cmake
|
||||||
, libnetpbm10-dev
|
, libnetpbm10-dev
|
||||||
, libvlccore-dev, libvlc-dev
|
, libvlccore-dev, libvlc-dev
|
||||||
, libcurl4-gnutls-dev | libcurl4-nss-dev | libcurl4-openssl-dev
|
, libcurl4-gnutls-dev | libcurl4-nss-dev | libcurl4-openssl-dev
|
||||||
, libgcrypt11-dev, libpolkit-gobject-1-dev
|
, libpolkit-gobject-1-dev
|
||||||
, libphp-serialization-perl
|
, libphp-serialization-perl
|
||||||
, libdate-manip-perl, libmime-lite-perl, libmime-tools-perl, libdbd-mysql-perl
|
, libdate-manip-perl, libmime-lite-perl, libmime-tools-perl, libdbd-mysql-perl
|
||||||
, libwww-perl, libarchive-tar-perl, libarchive-zip-perl, libdevice-serialport-perl
|
, libwww-perl, libarchive-tar-perl, libarchive-zip-perl, libdevice-serialport-perl
|
||||||
|
@ -47,7 +46,7 @@ Depends: ${shlibs:Depends}, ${misc:Depends}, ${perl:Depends}
|
||||||
,libnumber-bytes-human-perl
|
,libnumber-bytes-human-perl
|
||||||
,libfile-slurp-perl
|
,libfile-slurp-perl
|
||||||
, libpcre3
|
, libpcre3
|
||||||
, ffmpeg | libav-tools, libavdevice53 | libavdevice55 | libavdevice57
|
, ffmpeg | libav-tools
|
||||||
, rsyslog | system-log-daemon
|
, rsyslog | system-log-daemon
|
||||||
, netpbm
|
, netpbm
|
||||||
, zip
|
, zip
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
../redhat/misc/redalert.wav
|
../redhat/common/redalert.wav
|
|
@ -27,7 +27,7 @@ Source: ZoneMinder-%{version}.tar.gz
|
||||||
|
|
||||||
BuildRequires: cmake polkit-devel
|
BuildRequires: cmake polkit-devel
|
||||||
BuildRequires: perl-DBI perl-DBD-mysql perl-Date-Manip perl-Sys-Mmap
|
BuildRequires: perl-DBI perl-DBD-mysql perl-Date-Manip perl-Sys-Mmap
|
||||||
BuildRequires: libjpeg62 libjpeg62-devel libmysqld-devel libSDL-devel libgcrypt-devel libgnutls-devel
|
BuildRequires: libjpeg62 libjpeg62-devel libmysqld-devel libSDL-devel libgnutls-devel
|
||||||
BuildRequires: libffmpeg-devel x264
|
BuildRequires: libffmpeg-devel x264
|
||||||
BuildRequires: pcre-devel w32codec-all
|
BuildRequires: pcre-devel w32codec-all
|
||||||
|
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
%global _hardened_build 1
|
%global _hardened_build 1
|
||||||
|
|
||||||
Name: zoneminder
|
Name: zoneminder
|
||||||
Version: 1.36.12
|
Version: 1.37.6
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
Summary: A camera monitoring and analysis tool
|
Summary: A camera monitoring and analysis tool
|
||||||
Group: System Environment/Daemons
|
Group: System Environment/Daemons
|
||||||
|
@ -430,26 +430,8 @@ ln -sf %{_sysconfdir}/zm/www/zoneminder.nginx.conf %{_sysconfdir}/zm/www/zonemin
|
||||||
%dir %attr(755,nginx,nginx) %{_localstatedir}/log/zoneminder
|
%dir %attr(755,nginx,nginx) %{_localstatedir}/log/zoneminder
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
* Fri Dec 10 2021 Andrew Bauer <zonexpertconsulting@outlook.com> - 1.36.12-1
|
* Mon Jul 05 2021 Andrew Bauer <zonexpertconsulting@outlook.com> - 1.37.1-1
|
||||||
- 1.36.12 release
|
- 1.37.x development build
|
||||||
|
|
||||||
* Wed Nov 17 2021 Andrew Bauer <zonexpertconsulting@outlook.com> - 1.36.11-1
|
|
||||||
- 1.36.11 release
|
|
||||||
|
|
||||||
* Mon Oct 25 2021 Andrew Bauer <zonexpertconsulting@outlook.com> - 1.36.10-1
|
|
||||||
- 1.36.10 release
|
|
||||||
|
|
||||||
* Tue Oct 19 2021 Andrew Bauer <zonexpertconsulting@outlook.com> - 1.36.9-1
|
|
||||||
- 1.36.9 release
|
|
||||||
|
|
||||||
* Wed Oct 06 2021 Andrew Bauer <zonexpertconsulting@outlook.com> - 1.36.8-1
|
|
||||||
- 1.36.8 release
|
|
||||||
|
|
||||||
* Mon Sep 13 2021 Andrew Bauer <zonexpertconsulting@outlook.com> - 1.36.7-1
|
|
||||||
- 1.36.7 release
|
|
||||||
|
|
||||||
* Wed Sep 08 2021 Andrew Bauer <zonexpertconsulting@outlook.com> - 1.36.6-1
|
|
||||||
- 1.36.6 release
|
|
||||||
|
|
||||||
* Tue Jun 22 2021 Andrew Bauer <zonexpertconsulting@outlook.com> - 1.36.5-1
|
* Tue Jun 22 2021 Andrew Bauer <zonexpertconsulting@outlook.com> - 1.36.5-1
|
||||||
- 1.36.5 release
|
- 1.36.5 release
|
||||||
|
|
|
@ -8,14 +8,14 @@ Build-Depends: debhelper (>= 9), po-debconf (>= 1.0), autoconf, automake, libtoo
|
||||||
, libdate-manip-perl, libwww-perl
|
, libdate-manip-perl, libwww-perl
|
||||||
, libjpeg8-dev | libjpeg9-dev | libjpeg62-turbo-dev
|
, libjpeg8-dev | libjpeg9-dev | libjpeg62-turbo-dev
|
||||||
, libpcre3-dev
|
, libpcre3-dev
|
||||||
, libavcodec-ffmpeg-dev, libavformat-ffmpeg-dev, libswscale-ffmpeg-dev, libavutil-ffmpeg-dev, libavdevice-ffmpeg-dev
|
, libavcodec-ffmpeg-dev, libavformat-ffmpeg-dev, libswscale-ffmpeg-dev, libavutil-ffmpeg-dev
|
||||||
, libv4l-dev (>= 0.8.3)
|
, libv4l-dev (>= 0.8.3)
|
||||||
, libbz2-dev
|
, libbz2-dev
|
||||||
, libsys-mmap-perl
|
, libsys-mmap-perl
|
||||||
, libdevice-serialport-perl, libarchive-zip-perl, libmime-lite-perl
|
, libdevice-serialport-perl, libarchive-zip-perl, libmime-lite-perl
|
||||||
, libvlccore-dev, libvlc-dev
|
, libvlccore-dev, libvlc-dev
|
||||||
, libcurl4-gnutls-dev | libcurl4-nss-dev | libcurl4-openssl-dev
|
, libcurl4-gnutls-dev | libcurl4-nss-dev | libcurl4-openssl-dev
|
||||||
, libgcrypt11-dev | libgcrypt20-dev, libpolkit-gobject-1-dev
|
, libpolkit-gobject-1-dev
|
||||||
, libdbi-perl, libnet-sftp-foreign-perl, libexpect-perl, libmime-tools-perl
|
, libdbi-perl, libnet-sftp-foreign-perl, libexpect-perl, libmime-tools-perl
|
||||||
Standards-Version: 3.9.6
|
Standards-Version: 3.9.6
|
||||||
Homepage: http://www.zoneminder.com/
|
Homepage: http://www.zoneminder.com/
|
||||||
|
|
|
@ -15,7 +15,6 @@ DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
|
||||||
DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
|
DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
|
||||||
|
|
||||||
CFLAGS = -Wall
|
CFLAGS = -Wall
|
||||||
CXXFLAGS = -DHAVE_LIBCRYPTO
|
|
||||||
|
|
||||||
ifneq (,$(findstring debug,$(DEB_BUILD_OPTIONS)))
|
ifneq (,$(findstring debug,$(DEB_BUILD_OPTIONS)))
|
||||||
DEBOPT = --enable-debug
|
DEBOPT = --enable-debug
|
||||||
|
|
|
@ -1,10 +0,0 @@
|
||||||
zoneminder (1.28.1-1) unstable; urgency=low
|
|
||||||
|
|
||||||
This version is no longer automatically initialize or upgrade database.
|
|
||||||
See README.Debian for details.
|
|
||||||
|
|
||||||
Changed installation paths (please correct your web server configuration):
|
|
||||||
/usr/share/zoneminder --> /usr/share/zoneminder/www
|
|
||||||
/usr/lib/cgi-bin --> /usr/lib/zoneminder/cgi-bin
|
|
||||||
|
|
||||||
-- Dmitry Smirnov <onlyjob@debian.org> Tue, 31 Mar 2015 15:12:17 +1100
|
|
|
@ -1,130 +0,0 @@
|
||||||
Zoneminder for Debian
|
|
||||||
---------------------
|
|
||||||
|
|
||||||
Initializing database
|
|
||||||
---------------------
|
|
||||||
|
|
||||||
pv /usr/share/zoneminder/db/zm_create.sql | sudo mysql --defaults-file=/etc/mysql/debian.cnf
|
|
||||||
OR
|
|
||||||
cat /usr/share/zoneminder/db/zm_create.sql | sudo mysql --defaults-file=/etc/mysql/debian.cnf
|
|
||||||
|
|
||||||
echo 'grant lock tables,alter,create,index,select,insert,update,delete on zm.* to 'zmuser'@localhost identified by "zmpass";'\
|
|
||||||
| sudo mysql --defaults-file=/etc/mysql/debian.cnf mysql
|
|
||||||
|
|
||||||
Hint: generate secure password with `pwgen` and update "/etc/zm/zm.conf"
|
|
||||||
accordingly.
|
|
||||||
|
|
||||||
The following command can help to ensure that zoneminder can read its
|
|
||||||
configuration file:
|
|
||||||
|
|
||||||
chgrp -c www-data /etc/zm/zm.conf
|
|
||||||
|
|
||||||
|
|
||||||
Upgrading database
|
|
||||||
------------------
|
|
||||||
|
|
||||||
The database is updated automatically on installation. You should not need to take this step.
|
|
||||||
|
|
||||||
Assuming that database is on "localhost" then the following command can be
|
|
||||||
used to upgrade "zm" database:
|
|
||||||
|
|
||||||
zmupdate.pl
|
|
||||||
|
|
||||||
Additional permissions may be required to perform upgrade:
|
|
||||||
|
|
||||||
echo 'grant lock tables, create, alter on zm.* to 'zmuser'@localhost identified by "zmpass";'\
|
|
||||||
| sudo mysql --defaults-file=/etc/mysql/debian.cnf mysql
|
|
||||||
|
|
||||||
The following command prints the current version of zoneminder database:
|
|
||||||
|
|
||||||
echo 'select Value from Config where Name = "ZM_DYN_CURR_VERSION";' \
|
|
||||||
| sudo mysql --defaults-file=/etc/mysql/debian.cnf --skip-column-names zm
|
|
||||||
|
|
||||||
|
|
||||||
Enabling service
|
|
||||||
----------------
|
|
||||||
|
|
||||||
By default Zoneminder service is not automatically started and needs to be
|
|
||||||
manually enabled once database is configured:
|
|
||||||
|
|
||||||
sudo systemctl enable zoneminder.service
|
|
||||||
|
|
||||||
|
|
||||||
Web server set-up
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
There are few manual steps to get the web interface working:
|
|
||||||
|
|
||||||
## Apache2
|
|
||||||
|
|
||||||
Apache can be configured as folder "/zm" using sample .conf:
|
|
||||||
|
|
||||||
sudo a2enconf zoneminder
|
|
||||||
|
|
||||||
Alternatively Apache web site configuration template can be used to setup
|
|
||||||
zoneminder as "http://zoneminder":
|
|
||||||
|
|
||||||
sudo cp -v /usr/share/doc/zoneminder/examples/apache.conf /etc/apache2/sites-available/
|
|
||||||
sudo a2ensite zoneminder.conf
|
|
||||||
|
|
||||||
Common configuration steps for Apache2:
|
|
||||||
|
|
||||||
sudo a2enmod cgi
|
|
||||||
sudo service apache2 reload
|
|
||||||
|
|
||||||
|
|
||||||
## nginx / fcgiwrap
|
|
||||||
|
|
||||||
Nginx needs "php-fpm" package to support PHP and "fcgiwrap" package
|
|
||||||
for binary "cgi-bin" applications:
|
|
||||||
|
|
||||||
sudo apt-get install php-fpm fcgiwrap
|
|
||||||
|
|
||||||
To enable a URL alias that makes Zoneminder available from
|
|
||||||
|
|
||||||
http://yourserver/zm
|
|
||||||
|
|
||||||
the following line is to be added to "server" section of a web site
|
|
||||||
configuration:
|
|
||||||
|
|
||||||
include /usr/share/doc/zoneminder/examples/nginx.conf;
|
|
||||||
|
|
||||||
For "default" web site it would be sufficient to include the above
|
|
||||||
statement to the file
|
|
||||||
|
|
||||||
/etc/nginx/sites-enabled/default
|
|
||||||
|
|
||||||
To avoid problems with feeds from multiple cameras "fcgiwrap" should be
|
|
||||||
configured to start at least as many processes as there are cameras.
|
|
||||||
It can be done by adjusting DAEMON_OPTS in "/etc/default/fcgiwrap".
|
|
||||||
Systemd users may be affected by the following bug:
|
|
||||||
|
|
||||||
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=792705
|
|
||||||
|
|
||||||
|
|
||||||
## Note:
|
|
||||||
|
|
||||||
When Zoneminder web site is running it may be necessary to set
|
|
||||||
Options/Paths/PATH_ZMS to "/zm/cgi-bin/nph-zms" or according to chosen web
|
|
||||||
site configuration.
|
|
||||||
|
|
||||||
|
|
||||||
Changing the location for images and events
|
|
||||||
-------------------------------------------
|
|
||||||
|
|
||||||
ZoneMinder is now able to be configured to use an alternative location for storing
|
|
||||||
events and images at compile time. This package makes use of that, so symlinks in
|
|
||||||
/usr/share/zoneminder/www are no longer necessary.
|
|
||||||
|
|
||||||
Access to /dev/video*
|
|
||||||
---------------------
|
|
||||||
|
|
||||||
For cameras which require access to /dev/video*, zoneminder may need the
|
|
||||||
www-data user added to the video group in order to see those cameras:
|
|
||||||
|
|
||||||
adduser www-data video
|
|
||||||
|
|
||||||
Note that all web applications running on the zoneminder server will then have
|
|
||||||
access to all video devices on the system.
|
|
||||||
|
|
||||||
-- Vagrant Cascadian <vagrant@debian.org> Sun, 27 Mar 2011 13:06:56 -0700
|
|
|
@ -1,12 +0,0 @@
|
||||||
|
|
||||||
## Separate substantial /usr/share into its own arch-all package.
|
|
||||||
|
|
||||||
## Decide how to handle database updates.
|
|
||||||
|
|
||||||
* Consider possibility that database may be on another machine (#469239).
|
|
||||||
* Consider dbconfig-common? Probably not (what if database is not on localhost?).
|
|
||||||
|
|
||||||
### Run `zmupdate.pl` from service control scripts (init.d, service) on start?
|
|
||||||
|
|
||||||
Automatic upgrade will break "one DB, many zoneminders" setup (unimportant?).
|
|
||||||
|
|
|
@ -1,3 +0,0 @@
|
||||||
zoneminder (1.35.6~20200825.27-xenial) xenial; urgency=low
|
|
||||||
*
|
|
||||||
-- Isaac Connor <isaac@zoneminder.com> Tue, 25 Aug 2020 09:28:18 -0400
|
|
|
@ -1,3 +0,0 @@
|
||||||
.gitattributes
|
|
||||||
web/api/.gitattributes
|
|
||||||
web/api/.gitignore
|
|
|
@ -1 +0,0 @@
|
||||||
9
|
|
|
@ -1,57 +0,0 @@
|
||||||
# Remember to enable cgi mod (i.e. "a2enmod cgi").
|
|
||||||
ScriptAlias /zm/cgi-bin "/usr/lib/zoneminder/cgi-bin"
|
|
||||||
<Directory "/usr/lib/zoneminder/cgi-bin">
|
|
||||||
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
|
|
||||||
AllowOverride All
|
|
||||||
Require all granted
|
|
||||||
</Directory>
|
|
||||||
|
|
||||||
|
|
||||||
# Order matters. This alias must come first.
|
|
||||||
Alias /zm/cache /var/cache/zoneminder/cache
|
|
||||||
<Directory /var/cache/zoneminder/cache>
|
|
||||||
Options -Indexes +FollowSymLinks
|
|
||||||
AllowOverride None
|
|
||||||
<IfModule mod_authz_core.c>
|
|
||||||
# Apache 2.4
|
|
||||||
Require all granted
|
|
||||||
</IfModule>
|
|
||||||
<IfModule !mod_authz_core.c>
|
|
||||||
# Apache 2.2
|
|
||||||
Order deny,allow
|
|
||||||
Allow from all
|
|
||||||
</IfModule>
|
|
||||||
</Directory>
|
|
||||||
|
|
||||||
Alias /zm /usr/share/zoneminder/www
|
|
||||||
<Directory /usr/share/zoneminder/www>
|
|
||||||
Options -Indexes +FollowSymLinks
|
|
||||||
<IfModule mod_dir.c>
|
|
||||||
DirectoryIndex index.php
|
|
||||||
</IfModule>
|
|
||||||
</Directory>
|
|
||||||
|
|
||||||
# For better visibility, the following directives have been migrated from the
|
|
||||||
# default .htaccess files included with the CakePHP project.
|
|
||||||
# Parameters not set here are inherited from the parent directive above.
|
|
||||||
<Directory "/usr/share/zoneminder/www/api">
|
|
||||||
RewriteEngine on
|
|
||||||
RewriteRule ^$ app/webroot/ [L]
|
|
||||||
RewriteRule (.*) app/webroot/$1 [L]
|
|
||||||
RewriteBase /zm/api
|
|
||||||
</Directory>
|
|
||||||
|
|
||||||
<Directory "/usr/share/zoneminder/www/api/app">
|
|
||||||
RewriteEngine on
|
|
||||||
RewriteRule ^$ webroot/ [L]
|
|
||||||
RewriteRule (.*) webroot/$1 [L]
|
|
||||||
RewriteBase /zm/api
|
|
||||||
</Directory>
|
|
||||||
|
|
||||||
<Directory "/usr/share/zoneminder/www/api/app/webroot">
|
|
||||||
RewriteEngine On
|
|
||||||
RewriteCond %{REQUEST_FILENAME} !-d
|
|
||||||
RewriteCond %{REQUEST_FILENAME} !-f
|
|
||||||
RewriteRule ^ index.php [L]
|
|
||||||
RewriteBase /zm/api
|
|
||||||
</Directory>
|
|
|
@ -1,165 +0,0 @@
|
||||||
Source: zoneminder
|
|
||||||
Section: net
|
|
||||||
Priority: optional
|
|
||||||
Maintainer: Isaac Connor <isaac@zoneminder.com>
|
|
||||||
Uploaders: Isaac Connor <isaac@zoneminder.com>
|
|
||||||
Build-Depends: debhelper (>= 9), dh-systemd, python3-sphinx, apache2-dev, dh-linktree, dh-systemd, dh-apache2
|
|
||||||
,cmake
|
|
||||||
,libavdevice-dev (>= 6:10~)
|
|
||||||
,libavcodec-dev (>= 6:10~)
|
|
||||||
,libavformat-dev (>= 6:10~)
|
|
||||||
,libavutil-dev (>= 6:10~)
|
|
||||||
,libswresample-dev | libavresample-dev
|
|
||||||
,libswscale-dev (>= 6:10~)
|
|
||||||
,ffmpeg | libav-tools
|
|
||||||
,net-tools
|
|
||||||
,libbz2-dev
|
|
||||||
,libgcrypt-dev | libgcrypt11-dev
|
|
||||||
,libcurl4-gnutls-dev
|
|
||||||
,libgnutls-openssl-dev
|
|
||||||
,libjpeg8-dev | libjpeg9-dev | libjpeg62-turbo-dev
|
|
||||||
,default-libmysqlclient-dev | libmysqlclient-dev | libmariadbclient-dev-compat
|
|
||||||
,libpcre3-dev
|
|
||||||
,libpolkit-gobject-1-dev
|
|
||||||
,libv4l-dev (>= 0.8.3) [!hurd-any]
|
|
||||||
,libvlc-dev
|
|
||||||
,libdate-manip-perl
|
|
||||||
,libdbd-mysql-perl
|
|
||||||
,libphp-serialization-perl
|
|
||||||
,libsys-mmap-perl [!hurd-any]
|
|
||||||
,libwww-perl
|
|
||||||
,libdata-uuid-perl
|
|
||||||
,libssl-dev
|
|
||||||
,libcrypt-eksblowfish-perl
|
|
||||||
,libdata-entropy-perl
|
|
||||||
,libvncserver-dev
|
|
||||||
Standards-Version: 3.9.8
|
|
||||||
Homepage: http://www.zoneminder.com/
|
|
||||||
Vcs-Browser: http://anonscm.debian.org/cgit/collab-maint/zoneminder.git
|
|
||||||
Vcs-Git: git://anonscm.debian.org/collab-maint/zoneminder.git
|
|
||||||
|
|
||||||
Package: zoneminder
|
|
||||||
Architecture: any
|
|
||||||
Depends: ${shlibs:Depends}, ${misc:Depends}, ${perl:Depends}
|
|
||||||
,javascript-common
|
|
||||||
,libswscale-ffmpeg3|libswscale4|libswscale3|libswscale5
|
|
||||||
,libswresample2|libswresample3|libswresample24|libswresample-ffmpeg1
|
|
||||||
,ffmpeg | libav-tools
|
|
||||||
,libdate-manip-perl, libmime-lite-perl, libmime-tools-perl
|
|
||||||
,libdbd-mysql-perl
|
|
||||||
,libphp-serialization-perl
|
|
||||||
,libmodule-load-conditional-perl
|
|
||||||
,libnet-sftp-foreign-perl
|
|
||||||
,libarchive-zip-perl
|
|
||||||
,libdbd-mysql-perl
|
|
||||||
,libdevice-serialport-perl
|
|
||||||
,libimage-info-perl
|
|
||||||
,libjson-maybexs-perl
|
|
||||||
,libsys-mmap-perl [!hurd-any]
|
|
||||||
,liburi-encode-perl
|
|
||||||
,libwww-perl, liburi-perl
|
|
||||||
,libdata-dump-perl
|
|
||||||
,libdatetime-perl
|
|
||||||
,libclass-std-fast-perl
|
|
||||||
,libsoap-wsdl-perl
|
|
||||||
,libio-socket-multicast-perl
|
|
||||||
,libdigest-sha-perl
|
|
||||||
,libsys-cpu-perl, libsys-meminfo-perl
|
|
||||||
,libdata-uuid-perl
|
|
||||||
,libnumber-bytes-human-perl
|
|
||||||
,libfile-slurp-perl
|
|
||||||
,mysql-client | mariadb-client | virtual-mysql-client
|
|
||||||
,perl-modules
|
|
||||||
,php5-mysql | php-mysql, php5-gd | php-gd , php5-apcu | php-apcu , php-apc | php-apcu-bc, php-json | php5-json
|
|
||||||
,policykit-1
|
|
||||||
,rsyslog | system-log-daemon
|
|
||||||
,zip
|
|
||||||
,libpcre3
|
|
||||||
,libssl | libssl1.0.0 | libssl1.1
|
|
||||||
,libcrypt-eksblowfish-perl
|
|
||||||
,libdata-entropy-perl
|
|
||||||
,libvncclient1|libvncclient0
|
|
||||||
Recommends: ${misc:Recommends}
|
|
||||||
,libapache2-mod-php5 | libapache2-mod-php | php5-fpm | php-fpm
|
|
||||||
,mysql-server | mariadb-server | virtual-mysql-server
|
|
||||||
,zoneminder-doc (>= ${source:Version})
|
|
||||||
,ffmpeg
|
|
||||||
Suggests: fcgiwrap, logrotate
|
|
||||||
Description: video camera security and surveillance solution
|
|
||||||
ZoneMinder is intended for use in single or multi-camera video security
|
|
||||||
applications, including commercial or home CCTV, theft prevention and child
|
|
||||||
or family member or home monitoring and other care scenarios. It
|
|
||||||
supports capture, analysis, recording, and monitoring of video data coming
|
|
||||||
from one or more video or network cameras attached to a Linux system.
|
|
||||||
ZoneMinder also support web and semi-automatic control of Pan/Tilt/Zoom
|
|
||||||
cameras using a variety of protocols. It is suitable for use as a home
|
|
||||||
video security system and for commercial or professional video security
|
|
||||||
and surveillance. It can also be integrated into a home automation system
|
|
||||||
via X.10 or other protocols.
|
|
||||||
|
|
||||||
#Package: libzoneminder-perl
|
|
||||||
#Section: perl
|
|
||||||
#Architecture: all
|
|
||||||
#Multi-Arch: foreign
|
|
||||||
#Depends: ${misc:Depends}, ${perl:Depends}
|
|
||||||
# ,libarchive-zip-perl
|
|
||||||
# ,libdbd-mysql-perl
|
|
||||||
# ,libdevice-serialport-perl
|
|
||||||
# ,libimage-info-perl
|
|
||||||
# ,libjson-maybexs-perl
|
|
||||||
# ,libsys-mmap-perl [!hurd-any]
|
|
||||||
# ,liburi-encode-perl
|
|
||||||
# ,libwww-perl
|
|
||||||
#Description: ZoneMinder Perl libraries
|
|
||||||
# ZoneMinder is intended for use in single or multi-camera video security
|
|
||||||
# applications, including commercial or home CCTV, theft prevention and child
|
|
||||||
# or family member or home monitoring and other care scenarios. It
|
|
||||||
# supports capture, analysis, recording, and monitoring of video data coming
|
|
||||||
# from one or more video or network cameras attached to a Linux system.
|
|
||||||
# ZoneMinder also support web and semi-automatic control of Pan/Tilt/Zoom
|
|
||||||
# cameras using a variety of protocols. It is suitable for use as a home
|
|
||||||
# video security system and for commercial or professional video security
|
|
||||||
# and surveillance. It can also be integrated into a home automation system
|
|
||||||
# via X.10 or other protocols.
|
|
||||||
# .
|
|
||||||
# This package provides ZoneMinder Perl libraries; it can be used to
|
|
||||||
# write custom interfaces as well.
|
|
||||||
|
|
||||||
Package: zoneminder-doc
|
|
||||||
Section: doc
|
|
||||||
Architecture: all
|
|
||||||
Multi-Arch: foreign
|
|
||||||
Depends: ${misc:Depends}, ${sphinxdoc:Depends}, python3-sphinx-rtd-theme
|
|
||||||
Suggests: www-browser
|
|
||||||
Description: ZoneMinder documentation
|
|
||||||
ZoneMinder is intended for use in single or multi-camera video security
|
|
||||||
applications, including commercial or home CCTV, theft prevention and child
|
|
||||||
or family member or home monitoring and other care scenarios. It
|
|
||||||
supports capture, analysis, recording, and monitoring of video data coming
|
|
||||||
from one or more video or network cameras attached to a Linux system.
|
|
||||||
ZoneMinder also support web and semi-automatic control of Pan/Tilt/Zoom
|
|
||||||
cameras using a variety of protocols. It is suitable for use as a home
|
|
||||||
video security system and for commercial or professional video security
|
|
||||||
and surveillance. It can also be integrated into a home automation system
|
|
||||||
via X.10 or other protocols.
|
|
||||||
.
|
|
||||||
This package provides ZoneMinder documentation in HTML format.
|
|
||||||
|
|
||||||
Package: zoneminder-dbg
|
|
||||||
Section: debug
|
|
||||||
Priority: extra
|
|
||||||
Architecture: any
|
|
||||||
Depends: zoneminder (= ${binary:Version}), ${misc:Depends}
|
|
||||||
Description: Zoneminder -- debugging symbols
|
|
||||||
ZoneMinder is intended for use in single or multi-camera video security
|
|
||||||
applications, including commercial or home CCTV, theft prevention and child
|
|
||||||
or family member or home monitoring and other care scenarios. It
|
|
||||||
supports capture, analysis, recording, and monitoring of video data coming
|
|
||||||
from one or more video or network cameras attached to a Linux system.
|
|
||||||
ZoneMinder also support web and semi-automatic control of Pan/Tilt/Zoom
|
|
||||||
cameras using a variety of protocols. It is suitable for use as a home
|
|
||||||
video security system and for commercial or professional video security
|
|
||||||
and surveillance. It can also be integrated into a home automation system
|
|
||||||
via X.10 or other protocols.
|
|
||||||
.
|
|
||||||
This package provides debugging symbols
|
|
|
@ -1,168 +0,0 @@
|
||||||
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
|
|
||||||
Upstream-Name: ZoneMinder
|
|
||||||
Upstream-Contact: Philip Coombes <philip.coombes@zoneminder.com>
|
|
||||||
Source: https://github.com/ZoneMinder/ZoneMinder
|
|
||||||
Comment:
|
|
||||||
This package was originally debianized by matrix <matrix@cecilia>
|
|
||||||
on Mon, 7 Mar 2005 02:07:57 -0500.
|
|
||||||
It was re-done for submission to the Debian project by Peter Howard
|
|
||||||
<pjh@northern-ridge.com.au> on Fri, 8 Dec 2006 10:19:43 +1100
|
|
||||||
Files-Excluded:
|
|
||||||
web/skins/*/js/jquery-*
|
|
||||||
|
|
||||||
Files: *
|
|
||||||
Copyright: 2001-2014 Philip Coombes <philip.coombes@zoneminder.com>
|
|
||||||
2008 Brian Rudy <brudyNO@SPAMpraecogito.com>
|
|
||||||
2014 Vincent Giovannone
|
|
||||||
2013 Tim Craig <timcraigNO@SPAMsonic.net>
|
|
||||||
2003-2008 Corey DeLasaux
|
|
||||||
2001-2010 Chris Kistner
|
|
||||||
License: GPL-2+
|
|
||||||
|
|
||||||
Files: distros/*
|
|
||||||
Copyright: 2001-2008 Philip Coombes <philip.coombes@zoneminder.com>
|
|
||||||
2014 Isaac Connor <iconnor@connortechnology.com>
|
|
||||||
2005 Serg Oskin
|
|
||||||
License: GPL-2+
|
|
||||||
|
|
||||||
Files: web/skins/*/js/jquery-*
|
|
||||||
Copyright: 2010 John Resig
|
|
||||||
2010 The Dojo Foundation
|
|
||||||
License: GPL-2 or Expat
|
|
||||||
Comment:
|
|
||||||
Dual licensed under the MIT or GPL Version 2 licenses.
|
|
||||||
http://jquery.org/license
|
|
||||||
.
|
|
||||||
Includes Sizzle.js http://sizzlejs.com/
|
|
||||||
Released under the MIT, BSD, and GPL Licenses.
|
|
||||||
|
|
||||||
Files: web/api/*
|
|
||||||
Copyright: 2005-2013 Cake Software Foundation, Inc. (http://cakefoundation.org)
|
|
||||||
License: Expat
|
|
||||||
|
|
||||||
Files:
|
|
||||||
cmake/Modules/CheckPrototypeDefinition*.cmake
|
|
||||||
cmake/Modules/FindGLIB2.cmake
|
|
||||||
cmake/Modules/FindPolkit.cmake
|
|
||||||
cmake/Modules/GNUInstallDirs.cmake
|
|
||||||
Copyright:
|
|
||||||
2005-2011 Kitware, Inc.
|
|
||||||
2010-2011 Andreas Schneider <asn@cryptomilk.org>
|
|
||||||
2009 Dario Freddi <drf@kde.org>
|
|
||||||
2008 Laurent Montel, <montel@kde.org>
|
|
||||||
2011 Nikita Krupen'ko <krnekit@gmail.com>
|
|
||||||
License: BSD-3-clause
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions are
|
|
||||||
met:
|
|
||||||
.
|
|
||||||
* Redistributions of source code must retain the above copyright notice,
|
|
||||||
this list of conditions and the following disclaimer.
|
|
||||||
.
|
|
||||||
* Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
this list of conditions and the following disclaimer in the documentation
|
|
||||||
and/or other materials provided with the distribution.
|
|
||||||
.
|
|
||||||
* The names of Kitware, Inc., the Insight Consortium, or the names of
|
|
||||||
any consortium members, or of any contributors, may not be used to
|
|
||||||
endorse or promote products derived from this software without
|
|
||||||
specific prior written permission.
|
|
||||||
.
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS ``AS IS''
|
|
||||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
||||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
||||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
||||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
Files: cmake/Modules/FindPerlModules.cmake
|
|
||||||
Copyright: 2012 Iowa State University
|
|
||||||
License: Boost-1.0
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
|
||||||
.
|
|
||||||
Permission is hereby granted, free of charge, to any person or organization
|
|
||||||
obtaining a copy of the software and accompanying documentation covered by
|
|
||||||
this license (the "Software") to use, reproduce, display, distribute,
|
|
||||||
execute, and transmit the Software, and to prepare derivative works of the
|
|
||||||
Software, and to permit third-parties to whom the Software is furnished to
|
|
||||||
do so, all subject to the following:
|
|
||||||
.
|
|
||||||
The copyright notices in the Software and this entire statement, including
|
|
||||||
the above license grant, this restriction and the following disclaimer,
|
|
||||||
must be included in all copies of the Software, in whole or in part, and
|
|
||||||
all derivative works of the Software, unless such copies or derivative
|
|
||||||
works are solely in the form of machine-executable object code generated by
|
|
||||||
a source language processor.
|
|
||||||
.
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
|
||||||
SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
|
||||||
FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
|
||||||
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
||||||
DEALINGS IN THE SOFTWARE.
|
|
||||||
|
|
||||||
Files: debian/*
|
|
||||||
Copyright: 2015 Dmitry Smirnov <onlyjob@debian.org>
|
|
||||||
2007-2014 Peter Howard <pjh@northern-ridge.com.au>
|
|
||||||
2010-2012 Vagrant Cascadian <vagrant@debian.org>
|
|
||||||
2001-2008 Philip Coombes <philip.coombes@zoneminder.com>
|
|
||||||
License: GPL-2+
|
|
||||||
|
|
||||||
License: Expat
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
.
|
|
||||||
The above copyright notice and this permission notice shall be included in
|
|
||||||
all copies or substantial portions of the Software.
|
|
||||||
.
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
THE SOFTWARE.
|
|
||||||
|
|
||||||
License: GPL-2+
|
|
||||||
This package is free software; you can redistribute it and/or modify it
|
|
||||||
under the terms of the GNU General Public License as published by the
|
|
||||||
Free Software Foundation; either version 2 of the License, or (at your
|
|
||||||
option) any later version.
|
|
||||||
.
|
|
||||||
This package is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
General Public License for more details.
|
|
||||||
.
|
|
||||||
You should have received a copy of the GNU General Public
|
|
||||||
License along with this package; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
.
|
|
||||||
The complete text of the GNU General Public License version 2
|
|
||||||
can be found in "/usr/share/common-licenses/GPL-2".
|
|
||||||
|
|
||||||
License: GPL-2
|
|
||||||
This package is free software; you can redistribute it and/or modify it
|
|
||||||
under the terms of the GNU General Public License as published by the
|
|
||||||
Free Software Foundation; version 2 of the License.
|
|
||||||
.
|
|
||||||
This package is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
General Public License for more details.
|
|
||||||
.
|
|
||||||
You should have received a copy of the GNU General Public
|
|
||||||
License along with this package; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
.
|
|
||||||
The complete text of the GNU General Public License version 2
|
|
||||||
can be found in "/usr/share/common-licenses/GPL-2".
|
|
|
@ -1,32 +0,0 @@
|
||||||
location /zm/cgi-bin {
|
|
||||||
gzip off;
|
|
||||||
alias /usr/lib/zoneminder/cgi-bin;
|
|
||||||
|
|
||||||
include /etc/nginx/fastcgi_params;
|
|
||||||
fastcgi_param SCRIPT_FILENAME $request_filename;
|
|
||||||
fastcgi_pass unix:/var/run/fcgiwrap.socket;
|
|
||||||
}
|
|
||||||
|
|
||||||
location /zm {
|
|
||||||
# if ($scheme ~ ^http:){
|
|
||||||
# rewrite ^(.*)$ https://$host$1 permanent;
|
|
||||||
# }
|
|
||||||
|
|
||||||
gzip off;
|
|
||||||
alias /usr/share/zoneminder/www;
|
|
||||||
index index.php;
|
|
||||||
|
|
||||||
location ~ \.php$ {
|
|
||||||
if (!-f $request_filename) { return 404; }
|
|
||||||
expires epoch;
|
|
||||||
include /etc/nginx/fastcgi_params;
|
|
||||||
fastcgi_param SCRIPT_FILENAME $request_filename;
|
|
||||||
fastcgi_index index.php;
|
|
||||||
fastcgi_pass unix:/var/run/php5-fpm.sock;
|
|
||||||
}
|
|
||||||
|
|
||||||
location ~ \.(jpg|jpeg|gif|png|ico)$ {
|
|
||||||
access_log off;
|
|
||||||
expires 33d;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,7 +0,0 @@
|
||||||
|
|
||||||
[dch]
|
|
||||||
id-length = 0
|
|
||||||
|
|
||||||
[import-orig]
|
|
||||||
pristine-tar = False
|
|
||||||
merge = False
|
|
|
@ -1,2 +0,0 @@
|
||||||
usr/share/man/man3
|
|
||||||
usr/share/perl5
|
|
|
@ -1,96 +0,0 @@
|
||||||
#!/usr/bin/make -f
|
|
||||||
# -*- makefile -*-
|
|
||||||
|
|
||||||
# Uncomment this to turn on verbose mode.
|
|
||||||
#export DH_VERBOSE=1
|
|
||||||
|
|
||||||
export DEB_BUILD_MAINT_OPTIONS = hardening=+all
|
|
||||||
export DEB_LDFLAGS_MAINT_APPEND += -Wl,--as-needed
|
|
||||||
|
|
||||||
ifeq ($(DEB_BUILD_ARCH_OS),hurd)
|
|
||||||
ARGS:= -DZM_NO_MMAP=ON
|
|
||||||
endif
|
|
||||||
|
|
||||||
%:
|
|
||||||
dh $@ --parallel --buildsystem=cmake --builddirectory=dbuild \
|
|
||||||
--with systemd,sphinxdoc,apache2,linktree
|
|
||||||
|
|
||||||
override_dh_auto_configure:
|
|
||||||
dh_auto_configure -- $(ARGS) \
|
|
||||||
-DCMAKE_VERBOSE_MAKEFILE=ON \
|
|
||||||
-DCMAKE_BUILD_TYPE=Release \
|
|
||||||
-DZM_CONFIG_DIR="/etc/zm" \
|
|
||||||
-DZM_CONFIG_SUBDIR="/etc/zm/conf.d" \
|
|
||||||
-DZM_RUNDIR="/run/zm" \
|
|
||||||
-DZM_SOCKDIR="/run/zm" \
|
|
||||||
-DZM_TMPDIR="/tmp/zm" \
|
|
||||||
-DZM_CGIDIR="/usr/lib/zoneminder/cgi-bin" \
|
|
||||||
-DZM_CACHEDIR="/var/cache/zoneminder/cache" \
|
|
||||||
-DZM_DIR_EVENTS="/var/cache/zoneminder/events" \
|
|
||||||
-DZM_PATH_SHUTDOWN="/sbin/shutdown" \
|
|
||||||
-DZM_PATH_ZMS="/zm/cgi-bin/nph-zms"
|
|
||||||
|
|
||||||
override_dh_clean:
|
|
||||||
dh_clean $(MANPAGES1)
|
|
||||||
$(RM) -r docs/_build
|
|
||||||
|
|
||||||
build-indep:
|
|
||||||
#$(MAKE) -C docs text
|
|
||||||
$(MAKE) -C docs html
|
|
||||||
|
|
||||||
MANPAGES1 = dbuild/scripts/zmupdate.pl.1
|
|
||||||
$(MANPAGES1):
|
|
||||||
# generate man page(s):
|
|
||||||
pod2man -s1 --stderr --utf8 $(patsubst %.1, %, $@) $@
|
|
||||||
|
|
||||||
## reproducible build:
|
|
||||||
LAST_CHANGE=$(shell dpkg-parsechangelog -S Date)
|
|
||||||
BUILD_DATE=$(shell LC_ALL=C date -u "+%B %d, %Y" -d "$(LAST_CHANGE)")
|
|
||||||
override_dh_installman: $(MANPAGES1)
|
|
||||||
$(MAKE) -C docs man SPHINXOPTS="-D today=\"$(BUILD_DATE)\""
|
|
||||||
dh_installman --language=C $(MANPAGES1)
|
|
||||||
|
|
||||||
override_dh_auto_install:
|
|
||||||
dh_auto_install --destdir=$(CURDIR)/debian/tmp
|
|
||||||
# remove worthless files:
|
|
||||||
$(RM) -v $(CURDIR)/debian/tmp/usr/share/perl5/*/*/*/.packlist
|
|
||||||
$(RM) -v $(CURDIR)/debian/tmp/usr/share/perl5/*/*.in
|
|
||||||
# remove empty directories:
|
|
||||||
find $(CURDIR)/debian/tmp/usr -type d -empty -delete -printf 'removed %p\n'
|
|
||||||
# remove extra-license-file:
|
|
||||||
$(RM) -v $(CURDIR)/debian/tmp/usr/share/zoneminder/www/api/lib/Cake/LICENSE.txt
|
|
||||||
|
|
||||||
override_dh_fixperms:
|
|
||||||
dh_fixperms
|
|
||||||
#
|
|
||||||
# As requested by the Debian Webapps Policy Manual §3.2.1
|
|
||||||
chown root:www-data $(CURDIR)/debian/zoneminder/etc/zm/zm.conf
|
|
||||||
chmod 640 $(CURDIR)/debian/zoneminder/etc/zm/zm.conf
|
|
||||||
|
|
||||||
override_dh_systemd_start:
|
|
||||||
dh_systemd_start --no-start
|
|
||||||
|
|
||||||
override_dh_systemd_enable:
|
|
||||||
dh_systemd_enable --no-enable
|
|
||||||
|
|
||||||
override_dh_apache2:
|
|
||||||
dh_apache2 --noenable
|
|
||||||
|
|
||||||
override_dh_strip:
|
|
||||||
[ -d "$(CURDIR)/debian/zoneminder-dbg" ] \
|
|
||||||
&& dh_strip --dbg-package=zoneminder-dbg \
|
|
||||||
|| dh_strip
|
|
||||||
|
|
||||||
#%:
|
|
||||||
# dh $@ --parallel --buildsystem=autoconf --with autoreconf
|
|
||||||
#
|
|
||||||
#override_dh_auto_configure:
|
|
||||||
# dh_auto_configure -- \
|
|
||||||
# --sysconfdir=/etc/zm \
|
|
||||||
# --with-mysql=/usr \
|
|
||||||
# --with-webdir=/usr/share/zoneminder \
|
|
||||||
# --with-ffmpeg=/usr \
|
|
||||||
# --with-cgidir=/usr/lib/cgi-bin \
|
|
||||||
# --with-webuser=www-data \
|
|
||||||
# --with-webgroup=www-data \
|
|
||||||
# --enable-mmap=yes
|
|
|
@ -1 +0,0 @@
|
||||||
3.0 (quilt)
|
|
|
@ -1,5 +0,0 @@
|
||||||
## We're using "libjs-jquery" instead.
|
|
||||||
source-is-missing web/skins/*/js/jquery-3.5.1.min.js
|
|
||||||
|
|
||||||
## Acknowledged, will repack eventually.
|
|
||||||
source-contains-prebuilt-javascript-object web/skins/*/js/jquery-3.5.1.min.js
|
|
|
@ -1,8 +0,0 @@
|
||||||
Document: zoneminder-doc
|
|
||||||
Title: Zoneminder documentation
|
|
||||||
Abstract: This document describes how to use Zoneminder.
|
|
||||||
Section: System/Administration
|
|
||||||
|
|
||||||
Format: HTML
|
|
||||||
Index: /usr/share/doc/zoneminder-doc/html/index.html
|
|
||||||
Files: /usr/share/doc/zoneminder-doc/html/*
|
|
|
@ -1 +0,0 @@
|
||||||
docs/_build/html usr/share/doc/zoneminder-doc/
|
|
|
@ -1,2 +0,0 @@
|
||||||
## Convenience symlink:
|
|
||||||
/usr/share/doc/zoneminder-doc/html /usr/share/doc/zoneminder/html
|
|
|
@ -1 +0,0 @@
|
||||||
conf debian/conf/apache2/zoneminder.conf nginx
|
|
|
@ -1,5 +0,0 @@
|
||||||
Unless bug is specific to Debian please consider reporting it directly to
|
|
||||||
upstream developer(s):
|
|
||||||
|
|
||||||
https://github.com/ZoneMinder/ZoneMinder/issues
|
|
||||||
|
|
|
@ -1,10 +0,0 @@
|
||||||
var/log/zm
|
|
||||||
var/lib/zm
|
|
||||||
var/cache/zoneminder/events
|
|
||||||
var/cache/zoneminder/images
|
|
||||||
var/cache/zoneminder/temp
|
|
||||||
var/cache/zoneminder/cache
|
|
||||||
usr/share/zoneminder/db
|
|
||||||
usr/share/zoneminder/fonts
|
|
||||||
etc/zm/
|
|
||||||
etc/zm/conf.d
|
|
|
@ -1 +0,0 @@
|
||||||
README.md
|
|
|
@ -1,2 +0,0 @@
|
||||||
debian/examples/*
|
|
||||||
dbuild/misc/apache.conf
|
|
|
@ -1,12 +0,0 @@
|
||||||
etc/zm/zm.conf
|
|
||||||
etc/zm/conf.d/*
|
|
||||||
usr/bin
|
|
||||||
usr/lib/zoneminder
|
|
||||||
usr/share/polkit-1
|
|
||||||
usr/share/zoneminder/db
|
|
||||||
usr/share/zoneminder/www
|
|
||||||
usr/share/zoneminder/fonts
|
|
||||||
|
|
||||||
# libzoneminder-perl files:
|
|
||||||
usr/share/man/man3
|
|
||||||
usr/share/perl5
|
|
|
@ -1 +0,0 @@
|
||||||
/var/tmp /usr/share/zoneminder/www/api/app/tmp
|
|
|
@ -1,6 +0,0 @@
|
||||||
## cakephp
|
|
||||||
#replace /usr/share/php/Cake /usr/share/zoneminder/www/api/lib/Cake
|
|
||||||
|
|
||||||
## libjs-jquery
|
|
||||||
#replace /usr/share/javascript/jquery/jquery.min.js /usr/share/zoneminder/www/skins/classic/js/jquery-3.5.1.min.js
|
|
||||||
#replace /usr/share/javascript/jquery/jquery.min.js /usr/share/zoneminder/www/skins/flat/js/jquery-3.5.1.min.js
|
|
|
@ -1,14 +0,0 @@
|
||||||
# Depends: policykit-1
|
|
||||||
unusual-interpreter usr/bin/zmsystemctl.pl #!/usr/bin/pkexec
|
|
||||||
|
|
||||||
# Intentionally not others-readable, #637685.
|
|
||||||
non-standard-file-perm etc/zm/zm.conf 0640 != 0644
|
|
||||||
|
|
||||||
# Bundled Cake PHP framework, not intended for direct execution:
|
|
||||||
script-not-executable usr/share/zoneminder/www/api/*
|
|
||||||
|
|
||||||
# Annoying but seems to be too much troubles to fix; should be fixed upstream:
|
|
||||||
script-with-language-extension usr/bin/*.pl
|
|
||||||
|
|
||||||
# dh-linktree:
|
|
||||||
package-contains-broken-symlink usr/share/zoneminder/www/api/lib/Cake/*
|
|
|
@ -1,13 +0,0 @@
|
||||||
/var/log/zm/*.log {
|
|
||||||
missingok
|
|
||||||
notifempty
|
|
||||||
sharedscripts
|
|
||||||
delaycompress
|
|
||||||
compress
|
|
||||||
postrotate
|
|
||||||
/usr/bin/zmpkg.pl logrot >>/dev/null 2>&1 || :
|
|
||||||
endscript
|
|
||||||
daily
|
|
||||||
rotate 7
|
|
||||||
maxage 7
|
|
||||||
}
|
|
|
@ -1 +0,0 @@
|
||||||
rm_conffile /etc/zm/apache.conf 1.28.1-5~
|
|
|
@ -1 +0,0 @@
|
||||||
docs/_build/man/*.1
|
|
|
@ -1,101 +0,0 @@
|
||||||
#! /bin/sh
|
|
||||||
|
|
||||||
set +e
|
|
||||||
|
|
||||||
if [ "$1" = "configure" ]; then
|
|
||||||
|
|
||||||
. /etc/zm/zm.conf
|
|
||||||
for CONFFILE in /etc/zm/conf.d/*.conf; do
|
|
||||||
. "$CONFFILE"
|
|
||||||
done
|
|
||||||
|
|
||||||
# The logs can contain passwords, etc... so by setting group root, only www-data can read them, not people in the www-data group
|
|
||||||
chown www-data:root /var/log/zm
|
|
||||||
chown www-data:www-data /var/lib/zm
|
|
||||||
chown www-data:www-data /var/cache/zoneminder /var/cache/zoneminder/*
|
|
||||||
if [ ! -e "/etc/apache2/mods-enabled/cgi.load" ] && [ "$(command -v a2enmod)" != "" ]; then
|
|
||||||
echo "The cgi module is not enabled in apache2. I am enabling it using a2enmod cgi."
|
|
||||||
a2enmod cgi
|
|
||||||
fi
|
|
||||||
if [ ! -e "/etc/apache2/mods-enabled/rewrite.load" ] && [ "$(command -v a2enmod)" != "" ]; then
|
|
||||||
echo "The rewrite module is not enabled in apache2. I am enabling it using a2enmod rewrite."
|
|
||||||
a2enmod rewrite
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$ZM_DB_HOST" = "localhost" ]; then
|
|
||||||
|
|
||||||
if [ -e "/lib/systemd/system/mysql.service" ] || [ -e "/lib/systemd/system/mariadb.service" ] || [ -e "/etc/init.d/mysql" ]; then
|
|
||||||
# Ensure zoneminder is stopped
|
|
||||||
deb-systemd-invoke stop zoneminder.service || exit $?
|
|
||||||
|
|
||||||
#
|
|
||||||
# Get mysql started if it isn't running
|
|
||||||
#
|
|
||||||
|
|
||||||
if [ -e "/lib/systemd/system/mariadb.service" ]; then
|
|
||||||
DBSERVICE="mariadb.service"
|
|
||||||
else
|
|
||||||
DBSERVICE="mysql.service"
|
|
||||||
fi
|
|
||||||
echo "Detected db service is $DBSERVICE"
|
|
||||||
if systemctl is-failed --quiet $DBSERVICE; then
|
|
||||||
echo "$DBSERVICE is in a failed state; it will not be started."
|
|
||||||
echo "If you have already resolved the problem preventing $DBSERVICE from running,"
|
|
||||||
echo "run sudo systemctl restart $DBSERVICE then run sudo dpkg-reconfigure zoneminder."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! systemctl is-active --quiet mysql.service mariadb.service; then
|
|
||||||
# Due to /etc/init.d service autogeneration, mysql.service always returns the status of mariadb.service
|
|
||||||
# However, mariadb.service will not return the status of mysql.service.
|
|
||||||
deb-systemd-invoke start $DBSERVICE
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Make sure systemctl status exit code is 0; i.e. the DB is running
|
|
||||||
if systemctl is-active --quiet "$DBSERVICE"; then
|
|
||||||
mysqladmin --defaults-file=/etc/mysql/debian.cnf -f reload
|
|
||||||
# test if database if already present...
|
|
||||||
if ! $(echo quit | mysql --defaults-file=/etc/mysql/debian.cnf zm > /dev/null 2> /dev/null) ; then
|
|
||||||
echo "Creating zm db"
|
|
||||||
cat /usr/share/zoneminder/db/zm_create.sql | mysql --defaults-file=/etc/mysql/debian.cnf
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
echo "Error creating db."
|
|
||||||
exit 1;
|
|
||||||
fi
|
|
||||||
# This creates the user.
|
|
||||||
echo "CREATE USER '${ZM_DB_USER}'@localhost IDENTIFIED BY '${ZM_DB_PASS}';" | mysql --defaults-file=/etc/mysql/debian.cnf mysql
|
|
||||||
fi
|
|
||||||
echo "Updating permissions for user ${ZM_DB_USER}@localhost"
|
|
||||||
echo "GRANT LOCK TABLES,ALTER,DROP,SELECT,INSERT,UPDATE,DELETE,CREATE,INDEX,ALTER ROUTINE,CREATE ROUTINE, TRIGGER,EXECUTE,REFERENCES ON ${ZM_DB_NAME}.* TO '${ZM_DB_USER}'@localhost;" | mysql --defaults-file=/etc/mysql/debian.cnf mysql
|
|
||||||
|
|
||||||
zmupdate.pl -s --nointeractive
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
echo "Error updating db."
|
|
||||||
exit 1;
|
|
||||||
fi
|
|
||||||
zmupdate.pl --nointeractive -f
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
echo "Error updating config."
|
|
||||||
exit 1;
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Add any new PTZ control configurations to the database (will not overwrite)
|
|
||||||
zmcamtool.pl --import >/dev/null 2>&1
|
|
||||||
echo "Done Updating; starting ZoneMinder."
|
|
||||||
else
|
|
||||||
echo 'NOTE: MySQL/MariaDB not running; please start mysql and run dpkg-reconfigure zoneminder when it is running.'
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo 'MySQL/MariaDB not found; assuming remote server.'
|
|
||||||
fi
|
|
||||||
|
|
||||||
else
|
|
||||||
echo "Not doing database upgrade due to remote db server ($ZM_DB_HOST)."
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Done Updating; starting ZoneMinder."
|
|
||||||
deb-systemd-invoke restart zoneminder.service
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
#DEBHELPER#
|
|
|
@ -1,14 +0,0 @@
|
||||||
#! /bin/sh
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
if [ "$1" = "purge" ]; then
|
|
||||||
echo "
|
|
||||||
Reminder: to completely remove \"zoneminder\" it may be necessary
|
|
||||||
* to delete database using the following sample command:
|
|
||||||
sudo mysqladmin --defaults-file=/etc/mysql/debian.cnf -f drop zm
|
|
||||||
* to delete remaining data files in "/var/cache/zoneminder".
|
|
||||||
"
|
|
||||||
fi
|
|
||||||
|
|
||||||
#DEBHELPER#
|
|
|
@ -1,11 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
## Remove obsolete symlink which is in the way of dh_apache2:
|
|
||||||
ol="/etc/apache2/conf-available/zoneminder.conf"
|
|
||||||
if [ -h "${ol}" ]; then
|
|
||||||
[ "$(readlink ${ol})" = "/etc/zm/apache.conf" ] && rm -f "${ol}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
#DEBHELPER#
|
|
|
@ -1,23 +0,0 @@
|
||||||
# ZoneMinder systemd unit file
|
|
||||||
# This file is intended to work with Debian distributions
|
|
||||||
|
|
||||||
[Unit]
|
|
||||||
Description=ZoneMinder CCTV recording and surveillance system
|
|
||||||
After=network.target mysql.service
|
|
||||||
# Remarked out so that it will start ZM on machines that don't have mysql installed
|
|
||||||
#Requires=mysql.service
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
#User=www-data
|
|
||||||
Type=forking
|
|
||||||
ExecStart=/usr/bin/zmpkg.pl start
|
|
||||||
ExecReload=/usr/bin/zmpkg.pl restart
|
|
||||||
ExecStop=/usr/bin/zmpkg.pl stop
|
|
||||||
PIDFile=/run/zm/zm.pid
|
|
||||||
Restart=always
|
|
||||||
RestartSec=10
|
|
||||||
Environment=TZ=:/etc/localtime
|
|
||||||
TimeoutSec=600
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
|
@ -1,4 +0,0 @@
|
||||||
d /run/zm 0755 www-data www-data
|
|
||||||
d /tmp/zm 0755 www-data www-data
|
|
||||||
d /var/tmp/zm 0755 www-data www-data
|
|
||||||
d /var/cache/zoneminder/cache 0755 www-data www-data
|
|
|
@ -2,9 +2,8 @@ Source: zoneminder
|
||||||
Section: net
|
Section: net
|
||||||
Priority: optional
|
Priority: optional
|
||||||
Maintainer: Isaac Connor <isaac@zoneminder.com>
|
Maintainer: Isaac Connor <isaac@zoneminder.com>
|
||||||
Build-Depends: debhelper (>= 12), sphinx-doc, python3-sphinx, dh-linktree, dh-apache2
|
Build-Depends: debhelper (>= 11), sphinx-doc, python3-sphinx, dh-linktree, dh-apache2
|
||||||
,cmake
|
,cmake
|
||||||
,libavdevice-dev
|
|
||||||
,libavcodec-dev
|
,libavcodec-dev
|
||||||
,libavformat-dev
|
,libavformat-dev
|
||||||
,libavutil-dev
|
,libavutil-dev
|
||||||
|
@ -13,12 +12,10 @@ Build-Depends: debhelper (>= 12), sphinx-doc, python3-sphinx, dh-linktree, dh-ap
|
||||||
,ffmpeg
|
,ffmpeg
|
||||||
,net-tools
|
,net-tools
|
||||||
,libbz2-dev
|
,libbz2-dev
|
||||||
,libgcrypt20-dev
|
|
||||||
,libcurl4-gnutls-dev
|
,libcurl4-gnutls-dev
|
||||||
,libjpeg-turbo8-dev | libjpeg62-turbo-dev | libjpeg8-dev | libjpeg9-dev
|
,libjpeg-turbo8-dev | libjpeg62-turbo-dev | libjpeg8-dev | libjpeg9-dev
|
||||||
,libturbojpeg0-dev
|
,libturbojpeg0-dev
|
||||||
,default-libmysqlclient-dev | libmysqlclient-dev | libmariadbclient-dev-compat
|
,default-libmysqlclient-dev | libmysqlclient-dev | libmariadbclient-dev-compat
|
||||||
,libpcre3-dev
|
|
||||||
,libpolkit-gobject-1-dev
|
,libpolkit-gobject-1-dev
|
||||||
,libv4l-dev [!hurd-any]
|
,libv4l-dev [!hurd-any]
|
||||||
,libvlc-dev
|
,libvlc-dev
|
||||||
|
@ -39,9 +36,10 @@ Homepage: https://www.zoneminder.com/
|
||||||
Package: zoneminder
|
Package: zoneminder
|
||||||
Architecture: any
|
Architecture: any
|
||||||
Depends: ${shlibs:Depends}, ${misc:Depends}, ${perl:Depends}
|
Depends: ${shlibs:Depends}, ${misc:Depends}, ${perl:Depends}
|
||||||
|
,sudo
|
||||||
,javascript-common
|
,javascript-common
|
||||||
,libswscale5
|
,libswscale5|libswscale4
|
||||||
,libswresample3
|
,libswresample3|libswresample2
|
||||||
,ffmpeg
|
,ffmpeg
|
||||||
,libdate-manip-perl, libmime-lite-perl, libmime-tools-perl
|
,libdate-manip-perl, libmime-lite-perl, libmime-tools-perl
|
||||||
,libdbd-mysql-perl
|
,libdbd-mysql-perl
|
||||||
|
@ -71,11 +69,10 @@ Depends: ${shlibs:Depends}, ${misc:Depends}, ${perl:Depends}
|
||||||
,policykit-1
|
,policykit-1
|
||||||
,rsyslog | system-log-daemon
|
,rsyslog | system-log-daemon
|
||||||
,zip
|
,zip
|
||||||
,libpcre3
|
|
||||||
,libcrypt-eksblowfish-perl
|
,libcrypt-eksblowfish-perl
|
||||||
,libdata-entropy-perl
|
,libdata-entropy-perl
|
||||||
,libvncclient1|libvncclient0
|
,libvncclient1|libvncclient0
|
||||||
,libjwt-gnutls0
|
,libjwt-gnutls0|libjwt0
|
||||||
Recommends: ${misc:Recommends}
|
Recommends: ${misc:Recommends}
|
||||||
,libapache2-mod-php | php-fpm
|
,libapache2-mod-php | php-fpm
|
||||||
,default-mysql-server | mariadb-server | virtual-mysql-server
|
,default-mysql-server | mariadb-server | virtual-mysql-server
|
||||||
|
|
|
@ -41,7 +41,6 @@ Copyright: 2005-2013 Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
License: Expat
|
License: Expat
|
||||||
|
|
||||||
Files:
|
Files:
|
||||||
cmake/Modules/CheckPrototypeDefinition*.cmake
|
|
||||||
cmake/Modules/FindGLIB2.cmake
|
cmake/Modules/FindGLIB2.cmake
|
||||||
cmake/Modules/FindPolkit.cmake
|
cmake/Modules/FindPolkit.cmake
|
||||||
cmake/Modules/GNUInstallDirs.cmake
|
cmake/Modules/GNUInstallDirs.cmake
|
||||||
|
|
|
@ -19,6 +19,7 @@ override_dh_auto_configure:
|
||||||
-DCMAKE_VERBOSE_MAKEFILE=ON \
|
-DCMAKE_VERBOSE_MAKEFILE=ON \
|
||||||
-DCMAKE_BUILD_TYPE=Release \
|
-DCMAKE_BUILD_TYPE=Release \
|
||||||
-DBUILD_MAN=0 \
|
-DBUILD_MAN=0 \
|
||||||
|
-DZM_NO_PCRE=ON \
|
||||||
-DZM_CONFIG_DIR="/etc/zm" \
|
-DZM_CONFIG_DIR="/etc/zm" \
|
||||||
-DZM_CONFIG_SUBDIR="/etc/zm/conf.d" \
|
-DZM_CONFIG_SUBDIR="/etc/zm/conf.d" \
|
||||||
-DZM_RUNDIR="/run/zm" \
|
-DZM_RUNDIR="/run/zm" \
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
d /run/zm 0755 www-data www-data
|
d /run/zm 0755 www-data www-data
|
||||||
d /tmp/zm 0755 www-data www-data
|
d /tmp/zm 0755 www-data www-data
|
||||||
d /var/tmp/zm 0755 www-data www-data
|
d /var/tmp/zm 0755 www-data www-data 7d
|
||||||
d /var/cache/zoneminder/cache 0755 www-data www-data
|
d /var/cache/zoneminder/cache 0755 www-data www-data
|
||||||
|
|
|
@ -337,175 +337,3 @@ Reload Apache to enable your changes and then start ZoneMinder.
|
||||||
sudo systemctl start zoneminder
|
sudo systemctl start zoneminder
|
||||||
|
|
||||||
You are now ready to go with ZoneMinder. Open a browser and type either ``localhost/zm`` one the local machine or ``{IP-OF-ZM-SERVER}/zm`` if you connect from a remote computer.
|
You are now ready to go with ZoneMinder. Open a browser and type either ``localhost/zm`` one the local machine or ``{IP-OF-ZM-SERVER}/zm`` if you connect from a remote computer.
|
||||||
|
|
||||||
|
|
||||||
Easy Way: Debian Jessie
|
|
||||||
-----------------------
|
|
||||||
|
|
||||||
**Step 1:** Setup Sudo
|
|
||||||
|
|
||||||
By default Debian does not come with sudo. Log in as root or use su command.
|
|
||||||
N.B. The instructions below are for setting up sudo for your current account, you can
|
|
||||||
do this as root if you prefer.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
apt-get update
|
|
||||||
apt-get install sudo
|
|
||||||
usermod -a -G sudo <username>
|
|
||||||
exit
|
|
||||||
|
|
||||||
Logout or try ``newgrp`` to reload user groups
|
|
||||||
|
|
||||||
**Step 2:** Run sudo and update
|
|
||||||
|
|
||||||
Now run session using sudo and ensure system is updated.
|
|
||||||
::
|
|
||||||
|
|
||||||
sudo -i
|
|
||||||
apt-get upgrade
|
|
||||||
|
|
||||||
**Step 3:** Install Apache and MySQL
|
|
||||||
|
|
||||||
These are not dependencies for the package as they could
|
|
||||||
be installed elsewhere.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
apt-get install apache2 mysql-server
|
|
||||||
|
|
||||||
**Step 4:** Edit sources.list to add jessie-backports
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
nano /etc/apt/sources.list
|
|
||||||
|
|
||||||
Add the following to the bottom of the file
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
# Backports repository
|
|
||||||
deb http://archive.debian.org/debian/ jessie-backports main contrib non-free
|
|
||||||
|
|
||||||
CTRL+o and <Enter> to save
|
|
||||||
CTRL+x to exit
|
|
||||||
|
|
||||||
Run the following
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
echo 'Acquire::Check-Valid-Until no;' > /etc/apt/apt.conf.d/99no-check-valid-until
|
|
||||||
|
|
||||||
**Step 5:** Install ZoneMinder
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
apt-get update
|
|
||||||
apt-get install zoneminder
|
|
||||||
|
|
||||||
**Step 6:** Read the Readme
|
|
||||||
|
|
||||||
The rest of the install process is covered in the README.Debian, so feel free to have
|
|
||||||
a read.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
zcat /usr/share/doc/zoneminder/README.Debian.gz
|
|
||||||
|
|
||||||
**Step 7:** Setup Database
|
|
||||||
|
|
||||||
Install the zm database and setup the user account. Refer to Hints in Ubuntu install
|
|
||||||
should you choose to change default database user and password.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
cat /usr/share/zoneminder/db/zm_create.sql | sudo mysql --defaults-file=/etc/mysql/debian.cnf
|
|
||||||
echo 'grant lock tables,alter,create,select,insert,update,delete,index on zm.* to 'zmuser'@localhost identified by "zmpass";' | sudo mysql --defaults-file=/etc/mysql/debian.cnf mysql
|
|
||||||
|
|
||||||
**Step 8:** zm.conf Permissions
|
|
||||||
|
|
||||||
Adjust permissions to the zm.conf file to allow web account to access it.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
chgrp -c www-data /etc/zm/zm.conf
|
|
||||||
|
|
||||||
**Step 9:** Setup ZoneMinder service
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
systemctl enable zoneminder.service
|
|
||||||
|
|
||||||
**Step 10:** Configure Apache
|
|
||||||
|
|
||||||
The following commands will setup the default /zm virtual directory and configure
|
|
||||||
required apache modules.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
a2enconf zoneminder
|
|
||||||
a2enmod cgi
|
|
||||||
a2enmod rewrite
|
|
||||||
|
|
||||||
**Step 11:** Edit Timezone in PHP
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
nano /etc/php5/apache2/php.ini
|
|
||||||
|
|
||||||
Search for [Date] (Ctrl + w then type Date and press Enter) and change
|
|
||||||
date.timezone for your time zone. **Don't forget to remove the ; from in front
|
|
||||||
of date.timezone**
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
[Date]
|
|
||||||
; Defines the default timezone used by the date functions
|
|
||||||
; http://php.net/date.timezone
|
|
||||||
date.timezone = America/New_York
|
|
||||||
|
|
||||||
CTRL+o then [Enter] to save
|
|
||||||
|
|
||||||
CTRL+x to exit
|
|
||||||
|
|
||||||
|
|
||||||
**Step 12:** Please check the configuration
|
|
||||||
|
|
||||||
1. Check path of ZM_PATH in '/etc/zm/conf.d/zmcustom.conf' is ZM_PATH_ZMS=/zm/cgi-bin/nph-zms
|
|
||||||
::
|
|
||||||
cat /etc/zm/conf.d/zmcustom.conf
|
|
||||||
|
|
||||||
2. Check config of /etc/apache2/conf-enabled/zoneminder.conf has the same ScriptAlias /zm/cgi-bin that is configured
|
|
||||||
in ZM_PATH. The part /nph-zms has to be left out of the ScriptAlias
|
|
||||||
|
|
||||||
ScriptAlias /zm/cgi-bin "/usr/lib/zoneminder/cgi-bin"
|
|
||||||
<Directory "/usr/lib/zoneminder/cgi-bin">
|
|
||||||
|
|
||||||
::
|
|
||||||
cat /etc/apache2/conf-enabled/zoneminder.conf
|
|
||||||
|
|
||||||
**Step 13:** Start ZoneMinder
|
|
||||||
|
|
||||||
Reload Apache to enable your changes and then start ZoneMinder.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
systemctl reload apache2
|
|
||||||
systemctl start zoneminder
|
|
||||||
|
|
||||||
**Step 14:** Making sure ZoneMinder works
|
|
||||||
|
|
||||||
1. Open up a browser and go to ``http://hostname_or_ip/zm`` - should bring up ZoneMinder Console
|
|
||||||
|
|
||||||
2. (Optional API Check)Open up a tab in the same browser and go to ``http://hostname_or_ip/zm/api/host/getVersion.json``
|
|
||||||
|
|
||||||
If it is working correctly you should get version information similar to the example below:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
{
|
|
||||||
"version": "1.34.0",
|
|
||||||
"apiversion": "1.34.0.1"
|
|
||||||
}
|
|
||||||
|
|
||||||
**Congratulations** Your installation is complete
|
|
||||||
|
|
|
@ -77,7 +77,7 @@ To start the build, simply execute the following command from the root folder of
|
||||||
|
|
||||||
OS=<distroname> DIST=<distrorel> utils/packpack/startpackpack.sh
|
OS=<distroname> DIST=<distrorel> utils/packpack/startpackpack.sh
|
||||||
|
|
||||||
Where <distroname> is the name of the distro you wish to build on, such as fedora, and <distrorev> is release name or number of the distro you wish to build on. Redhat distros expect a number for <distrorev> while Debian and Ubuntu distros expect a name. For example:
|
Where <distroname> is the name of the distro you wish to build on, such as fedora, and <distrorel> is the release name or number of the distro you wish to build on. Redhat distros expect a number for <distrorel> while Debian and Ubuntu distros expect a name. For example:
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
|
@ -85,7 +85,7 @@ Where <distroname> is the name of the distro you wish to build on, such as fedor
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
OS=ubuntu DIST=xenial utils/packpack/startpackpack.sh
|
OS=ubuntu DIST=hirsute utils/packpack/startpackpack.sh
|
||||||
|
|
||||||
Once you enter the appropriate command, go get a coffee while a ZoneMinder package is built. When the build finished, you can find the resulting packages under a subfolder called "build".
|
Once you enter the appropriate command, go get a coffee while a ZoneMinder package is built. When the build finished, you can find the resulting packages under a subfolder called "build".
|
||||||
|
|
||||||
|
@ -93,13 +93,13 @@ Note that this will build packages with x86_64 architecture. This build method c
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
OS=ubuntu DIST=xenial ARCH=i386 utils/packpack/startpackpack.sh
|
OS=ubuntu DIST=hirsute ARCH=i386 utils/packpack/startpackpack.sh
|
||||||
|
|
||||||
For advanced users who really want to go out into uncharted waters, it is theoretically possible to build arm packages as well, as long as the host architecture is compatible.
|
For advanced users who really want to go out into uncharted waters, it is theoretically possible to build arm packages as well, as long as the host architecture is compatible.
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
OS=ubuntu DIST=xenial ARCH=armhfp utils/packpack/startpackpack.sh
|
OS=ubuntu DIST=hirsute ARCH=armhfp utils/packpack/startpackpack.sh
|
||||||
|
|
||||||
Building arm packages in this manner has not been tested by us, however.
|
Building arm packages in this manner has not been tested by us, however.
|
||||||
|
|
||||||
|
|
|
@ -176,175 +176,6 @@ CTRL+x to exit
|
||||||
|
|
||||||
PPA install may need some tweaking of ZMS_PATH in ZoneMinder options. `Socket_sendto or no live streaming`_
|
PPA install may need some tweaking of ZMS_PATH in ZoneMinder options. `Socket_sendto or no live streaming`_
|
||||||
|
|
||||||
Easy Way: Ubuntu 16.04 (Xenial)
|
|
||||||
-------------------------------
|
|
||||||
These instructions are for a brand new ubuntu 16.04 system which does not have ZM
|
|
||||||
installed.
|
|
||||||
|
|
||||||
|
|
||||||
It is recommended that you use an Ubuntu Server install and select the LAMP option
|
|
||||||
during install to install Apache, MySQL and PHP. If you failed to do this you can
|
|
||||||
achieve the same result by running:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
sudo tasksel install lamp-server
|
|
||||||
|
|
||||||
During installation it will ask you to set up a master/root password for the MySQL.
|
|
||||||
Installing LAMP is not ZoneMinder specific so you will find plenty of resources to
|
|
||||||
guide you with a quick search.
|
|
||||||
|
|
||||||
**Step 1:** Either run commands in this install using sudo or use the below to become root
|
|
||||||
::
|
|
||||||
|
|
||||||
sudo -i
|
|
||||||
|
|
||||||
**Step 2:** Update Repos
|
|
||||||
|
|
||||||
.. topic :: Latest Release
|
|
||||||
|
|
||||||
ZoneMinder is now part of the current standard Ubuntu repository, but
|
|
||||||
sometimes the official repository can lag behind. To find out check our
|
|
||||||
`releases page <https://github.com/ZoneMinder/zoneminder/releases>`_ for
|
|
||||||
the latest release.
|
|
||||||
|
|
||||||
Alternatively, the ZoneMinder project team maintains a `PPA <https://askubuntu.com/questions/4983/what-are-ppas-and-how-do-i-use-them>`_, which is updated immediately
|
|
||||||
following a new release of ZoneMinder. To use this repository instead of the
|
|
||||||
official Ubuntu repository, enter the following from the command line:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
add-apt-repository ppa:iconnor/zoneminder
|
|
||||||
add-apt-repository ppa:iconnor/zoneminder-1.32
|
|
||||||
|
|
||||||
Update repo and upgrade.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
apt-get update
|
|
||||||
apt-get upgrade
|
|
||||||
apt-get dist-upgrade
|
|
||||||
|
|
||||||
|
|
||||||
**Step 3:** Configure MySQL
|
|
||||||
|
|
||||||
.. sidebar :: Note
|
|
||||||
|
|
||||||
The MySQL default configuration file (/etc/mysql/mysql.cnf)is read through
|
|
||||||
several symbolic links beginning with /etc/mysql/my.cnf as follows:
|
|
||||||
|
|
||||||
| /etc/mysql/my.cnf -> /etc/alternatives/my.cnf
|
|
||||||
| /etc/alternatives/my.cnf -> /etc/mysql/mysql.cnf
|
|
||||||
| /etc/mysql/mysql.cnf is a basic file
|
|
||||||
|
|
||||||
Certain new defaults in MySQL 5.7 cause some issues with ZoneMinder < 1.32.0,
|
|
||||||
the workaround is to modify the sql_mode setting of MySQL. Please note that these
|
|
||||||
changes are NOT required for ZoneMinder 1.32.0 and some people have reported them
|
|
||||||
causing problems in 1.32.0.
|
|
||||||
|
|
||||||
To better manage the MySQL server it is recommended to copy the sample config file and
|
|
||||||
replace the default my.cnf symbolic link.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
rm /etc/mysql/my.cnf (this removes the current symbolic link)
|
|
||||||
cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/my.cnf
|
|
||||||
|
|
||||||
To change MySQL settings:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
nano /etc/mysql/my.cnf
|
|
||||||
|
|
||||||
In the [mysqld] section add the following
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
sql_mode = NO_ENGINE_SUBSTITUTION
|
|
||||||
|
|
||||||
CTRL+o then [Enter] to save
|
|
||||||
|
|
||||||
CTRL+x to exit
|
|
||||||
|
|
||||||
Restart MySQL
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
systemctl restart mysql
|
|
||||||
|
|
||||||
|
|
||||||
**Step 4:** Install ZoneMinder
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
apt-get install zoneminder
|
|
||||||
|
|
||||||
**Step 5:** Configure the ZoneMinder Database
|
|
||||||
|
|
||||||
This step should not be required on ZoneMinder 1.32.0.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
mysql -uroot -p < /usr/share/zoneminder/db/zm_create.sql
|
|
||||||
mysql -uroot -p -e "grant lock tables,alter,drop,select,insert,update,delete,create,index,alter routine,create routine, trigger,execute on zm.* to 'zmuser'@localhost identified by 'zmpass';"
|
|
||||||
|
|
||||||
|
|
||||||
**Step 6:** Set permissions
|
|
||||||
|
|
||||||
Set /etc/zm/zm.conf to root:www-data 740 and www-data access to content
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
chmod 740 /etc/zm/zm.conf
|
|
||||||
chown root:www-data /etc/zm/zm.conf
|
|
||||||
chown -R www-data:www-data /usr/share/zoneminder/
|
|
||||||
|
|
||||||
**Step 7:** Configure Apache correctly:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
a2enmod cgi
|
|
||||||
a2enmod rewrite
|
|
||||||
a2enconf zoneminder
|
|
||||||
|
|
||||||
You may also want to enable to following modules to improve caching performance
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
a2enmod expires
|
|
||||||
a2enmod headers
|
|
||||||
|
|
||||||
**Step 8:** Enable and start Zoneminder
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
systemctl enable zoneminder
|
|
||||||
systemctl start zoneminder
|
|
||||||
|
|
||||||
**Step 10:** Reload Apache service
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
systemctl reload apache2
|
|
||||||
|
|
||||||
**Step 11:** Making sure ZoneMinder works
|
|
||||||
|
|
||||||
1. Open up a browser and go to ``http://hostname_or_ip/zm`` - should bring up ZoneMinder Console
|
|
||||||
|
|
||||||
2. (Optional API Check)Open up a tab in the same browser and go to ``http://hostname_or_ip/zm/api/host/getVersion.json``
|
|
||||||
|
|
||||||
If it is working correctly you should get version information similar to the example below:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
{
|
|
||||||
"version": "1.34.0",
|
|
||||||
"apiversion": "1.34.0.1"
|
|
||||||
}
|
|
||||||
|
|
||||||
**Congratulations** Your installation is complete
|
|
||||||
|
|
||||||
PPA install may need some tweaking of ZMS_PATH in ZoneMinder options. `Socket_sendto or no live streaming`_
|
|
||||||
|
|
||||||
Harder Way: Build Package From Source
|
Harder Way: Build Package From Source
|
||||||
-------------------------------------
|
-------------------------------------
|
||||||
|
@ -382,7 +213,7 @@ To build the latest stable release:
|
||||||
|
|
||||||
|
|
||||||
Note that the distribution will be guessed using ``lsb_release -a 2>/dev/null | grep Codename | awk '{print $2}'``
|
Note that the distribution will be guessed using ``lsb_release -a 2>/dev/null | grep Codename | awk '{print $2}'``
|
||||||
which simply extracts your distribution name - like "xenial", "bionic" etc. You
|
which simply extracts your distribution name - like "bionic", "hirsute" etc. You
|
||||||
can always specify it using --distro=your distro name if you know it. As far as the script
|
can always specify it using --distro=your distro name if you know it. As far as the script
|
||||||
goes, it checks if your distro is "trusty" in which case it pulls in pre-systemd
|
goes, it checks if your distro is "trusty" in which case it pulls in pre-systemd
|
||||||
release configurations and if its not "trusty" it assumes its based on systemd
|
release configurations and if its not "trusty" it assumes its based on systemd
|
||||||
|
|
|
@ -6,7 +6,7 @@ Here are some options for using ZoneMinder on Mobile devices:
|
||||||
Third party mobile clients
|
Third party mobile clients
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
* zmNinja (`source code <https://github.com/pliablepixels/zmNinja>`__, needs APIs to be installed to work)
|
* zmNinja (`source code <https://github.com/pliablepixels/zmNinja>`__, needs APIs to be installed to work)
|
||||||
* Available in App Store, Play Store and for Desktops - `website <http://pliablepixels.github.io/zmNinja/>`__
|
* Available in App Store, Play Store and for Desktops - `website <http://pliablepixels.github.io/>`__
|
||||||
|
|
||||||
Using the existing web console
|
Using the existing web console
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
@ -17,4 +17,4 @@ Discontinued clients
|
||||||
The following are a list of clients that do not work and have not been updated:
|
The following are a list of clients that do not work and have not been updated:
|
||||||
|
|
||||||
* eyeZM
|
* eyeZM
|
||||||
* zmView
|
* zmView
|
||||||
|
|
|
@ -308,7 +308,7 @@ our @options = (
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name => 'ZM_AUTH_HASH_IPS',
|
name => 'ZM_AUTH_HASH_IPS',
|
||||||
default => 'yes',
|
default => 'no',
|
||||||
description => 'Include IP addresses in the authentication hash',
|
description => 'Include IP addresses in the authentication hash',
|
||||||
help => q`
|
help => q`
|
||||||
When ZoneMinder is running in hashed authenticated mode it can
|
When ZoneMinder is running in hashed authenticated mode it can
|
||||||
|
@ -346,7 +346,7 @@ our @options = (
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name => 'ZM_AUTH_HASH_LOGINS',
|
name => 'ZM_AUTH_HASH_LOGINS',
|
||||||
default => 'no',
|
default => 'yes',
|
||||||
description => 'Allow login by authentication hash',
|
description => 'Allow login by authentication hash',
|
||||||
help => q`
|
help => q`
|
||||||
The normal process for logging into ZoneMinder is via the login
|
The normal process for logging into ZoneMinder is via the login
|
||||||
|
@ -508,7 +508,7 @@ our @options = (
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name => 'ZM_SYSTEM_SHUTDOWN',
|
name => 'ZM_SYSTEM_SHUTDOWN',
|
||||||
default => 'yes',
|
default => 'no',
|
||||||
description => 'Allow Admin users to power off or restart the system from the ZoneMinder UI.',
|
description => 'Allow Admin users to power off or restart the system from the ZoneMinder UI.',
|
||||||
help => 'The system will need to have sudo installed and the following added to /etc/sudoers~~
|
help => 'The system will need to have sudo installed and the following added to /etc/sudoers~~
|
||||||
~~
|
~~
|
||||||
|
@ -1064,7 +1064,7 @@ our @options = (
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name => 'ZM_FFMPEG_FORMATS',
|
name => 'ZM_FFMPEG_FORMATS',
|
||||||
default => 'mpg mpeg wmv asf avi* mov swf 3gp**',
|
default => 'mp4* mpg mpeg wmv asf avi mov swf 3gp**',
|
||||||
description => 'Formats to allow for ffmpeg video generation',
|
description => 'Formats to allow for ffmpeg video generation',
|
||||||
help => q`
|
help => q`
|
||||||
Ffmpeg can generate video in many different formats. This
|
Ffmpeg can generate video in many different formats. This
|
||||||
|
@ -1096,7 +1096,7 @@ our @options = (
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name => 'ZM_LOG_LEVEL_SYSLOG',
|
name => 'ZM_LOG_LEVEL_SYSLOG',
|
||||||
default => '0',
|
default => '-1',
|
||||||
description => 'Save logging output to the system log',
|
description => 'Save logging output to the system log',
|
||||||
help => q`
|
help => q`
|
||||||
ZoneMinder logging is now more integrated between
|
ZoneMinder logging is now more integrated between
|
||||||
|
@ -1604,7 +1604,7 @@ our @options = (
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name => 'ZM_WEB_EVENT_DISK_SPACE',
|
name => 'ZM_WEB_EVENT_DISK_SPACE',
|
||||||
default => 'no',
|
default => 'yes',
|
||||||
description => 'Whether to show disk space used by each event.',
|
description => 'Whether to show disk space used by each event.',
|
||||||
help => q`
|
help => q`
|
||||||
Adds another column to the listing of events
|
Adds another column to the listing of events
|
||||||
|
@ -1634,7 +1634,7 @@ our @options = (
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name => 'ZM_WEB_ID_ON_CONSOLE',
|
name => 'ZM_WEB_ID_ON_CONSOLE',
|
||||||
default => 'no',
|
default => 'yes',
|
||||||
description => 'Should the console list the monitor id',
|
description => 'Should the console list the monitor id',
|
||||||
help => q`
|
help => q`
|
||||||
Some find it useful to have the id always visible
|
Some find it useful to have the id always visible
|
||||||
|
@ -2270,7 +2270,7 @@ our @options = (
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name => 'ZM_MAX_RESTART_DELAY',
|
name => 'ZM_MAX_RESTART_DELAY',
|
||||||
default => '600',
|
default => '30',
|
||||||
description => 'Maximum delay (in seconds) for daemon restart attempts.',
|
description => 'Maximum delay (in seconds) for daemon restart attempts.',
|
||||||
help => q`
|
help => q`
|
||||||
The zmdc (zm daemon control) process controls when processeses
|
The zmdc (zm daemon control) process controls when processeses
|
||||||
|
@ -2855,7 +2855,7 @@ our @options = (
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name => 'ZM_WEB_H_REFRESH_MAIN',
|
name => 'ZM_WEB_H_REFRESH_MAIN',
|
||||||
default => '60',
|
default => '240',
|
||||||
introduction => q`
|
introduction => q`
|
||||||
There are now a number of options that are grouped into
|
There are now a number of options that are grouped into
|
||||||
bandwidth categories, this allows you to configure the
|
bandwidth categories, this allows you to configure the
|
||||||
|
@ -3113,7 +3113,7 @@ our @options = (
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name => 'ZM_WEB_H_AJAX_TIMEOUT',
|
name => 'ZM_WEB_H_AJAX_TIMEOUT',
|
||||||
default => '3000',
|
default => '10000',
|
||||||
description => 'How long to wait for Ajax request responses (ms)',
|
description => 'How long to wait for Ajax request responses (ms)',
|
||||||
help => q`
|
help => q`
|
||||||
The newer versions of the live feed and event views use Ajax to
|
The newer versions of the live feed and event views use Ajax to
|
||||||
|
|
|
@ -29,6 +29,7 @@ use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
|
|
||||||
require ZoneMinder::Base;
|
require ZoneMinder::Base;
|
||||||
|
require ZoneMinder::Object;
|
||||||
require ZoneMinder::Monitor;
|
require ZoneMinder::Monitor;
|
||||||
|
|
||||||
our $VERSION = $ZoneMinder::Base::VERSION;
|
our $VERSION = $ZoneMinder::Base::VERSION;
|
||||||
|
@ -42,24 +43,116 @@ our $VERSION = $ZoneMinder::Base::VERSION;
|
||||||
use ZoneMinder::Logger qw(:all);
|
use ZoneMinder::Logger qw(:all);
|
||||||
use ZoneMinder::Database qw(:all);
|
use ZoneMinder::Database qw(:all);
|
||||||
|
|
||||||
|
use parent qw(ZoneMinder::Object);
|
||||||
|
|
||||||
|
use vars qw/ $table $primary_key %fields $serial %defaults $debug/;
|
||||||
|
$table = 'Controls';
|
||||||
|
$serial = $primary_key = 'Id';
|
||||||
|
%fields = map { $_ => $_ } qw(
|
||||||
|
Id
|
||||||
|
Name
|
||||||
|
Type
|
||||||
|
Protocol
|
||||||
|
CanWake
|
||||||
|
CanSleep
|
||||||
|
CanReset
|
||||||
|
CanReboot
|
||||||
|
CanZoom
|
||||||
|
CanAutoZoom
|
||||||
|
CanZoomAbs
|
||||||
|
CanZoomRel
|
||||||
|
CanZoomCon
|
||||||
|
MinZoomRange
|
||||||
|
MaxZoomRange
|
||||||
|
MinZoomStep
|
||||||
|
MaxZoomStep
|
||||||
|
HasZoomSpeed
|
||||||
|
MinZoomSpeed
|
||||||
|
MaxZoomSpeed
|
||||||
|
CanFocus
|
||||||
|
CanAutoFocus
|
||||||
|
CanFocusAbs
|
||||||
|
CanFocusRel
|
||||||
|
CanFocusCon
|
||||||
|
MinFocusRange
|
||||||
|
MaxFocusRange
|
||||||
|
MinFocusStep
|
||||||
|
MaxFocusStep
|
||||||
|
HasFocusSpeed
|
||||||
|
MinFocusSpeed
|
||||||
|
MaxFocusSpeed
|
||||||
|
CanIris
|
||||||
|
CanAutoIris
|
||||||
|
CanIrisAbs
|
||||||
|
CanIrisRel
|
||||||
|
CanIrisCon
|
||||||
|
MinIrisRange
|
||||||
|
MaxIrisRange
|
||||||
|
MinIrisStep
|
||||||
|
MaxIrisStep
|
||||||
|
HasIrisSpeed
|
||||||
|
MinIrisSpeed
|
||||||
|
MaxIrisSpeed
|
||||||
|
CanGain
|
||||||
|
CanAutoGain
|
||||||
|
CanGainAbs
|
||||||
|
CanGainRel
|
||||||
|
CanGainCon
|
||||||
|
MinGainRange
|
||||||
|
MaxGainRange
|
||||||
|
MinGainStep
|
||||||
|
MaxGainStep
|
||||||
|
HasGainSpeed
|
||||||
|
MinGainSpeed
|
||||||
|
MaxGainSpeed
|
||||||
|
CanWhite
|
||||||
|
CanAutoWhite
|
||||||
|
CanWhiteAbs
|
||||||
|
CanWhiteRel
|
||||||
|
CanWhiteCon
|
||||||
|
MinWhiteRange
|
||||||
|
MaxWhiteRange
|
||||||
|
MinWhiteStep
|
||||||
|
MaxWhiteStep
|
||||||
|
HasWhiteSpeed
|
||||||
|
MinWhiteSpeed
|
||||||
|
MaxWhiteSpeed
|
||||||
|
HasPresets
|
||||||
|
NumPresets
|
||||||
|
HasHomePreset
|
||||||
|
CanSetPresets
|
||||||
|
CanMove
|
||||||
|
CanMoveDiag
|
||||||
|
CanMoveMap
|
||||||
|
CanMoveAbs
|
||||||
|
CanMoveRel
|
||||||
|
CanMoveCon
|
||||||
|
CanPan
|
||||||
|
MinPanRange
|
||||||
|
MaxPanRange
|
||||||
|
MinPanStep
|
||||||
|
MaxPanStep
|
||||||
|
HasPanSpeed
|
||||||
|
MinPanSpeed
|
||||||
|
MaxPanSpeed
|
||||||
|
HasTurboPan
|
||||||
|
TurboPanSpeed
|
||||||
|
CanTilt
|
||||||
|
MinTiltRange
|
||||||
|
MaxTiltRange
|
||||||
|
MinTiltStep
|
||||||
|
MaxTiltStep
|
||||||
|
HasTiltSpeed
|
||||||
|
MinTiltSpeed
|
||||||
|
MaxTiltSpeed
|
||||||
|
HasTurboTilt
|
||||||
|
TurboTiltSpeed
|
||||||
|
CanAutoScan
|
||||||
|
NumScanPaths
|
||||||
|
);
|
||||||
|
|
||||||
our $AUTOLOAD;
|
our $AUTOLOAD;
|
||||||
|
|
||||||
sub new {
|
|
||||||
my $class = shift;
|
|
||||||
my $id = shift;
|
|
||||||
if ( !defined($id) ) {
|
|
||||||
Fatal('No monitor defined when invoking protocol '.$class);
|
|
||||||
}
|
|
||||||
my $self = {};
|
|
||||||
$self->{name} = $class;
|
|
||||||
$self->{id} = $id;
|
|
||||||
bless($self, $class);
|
|
||||||
return $self;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub DESTROY {
|
|
||||||
}
|
|
||||||
|
|
||||||
sub AUTOLOAD {
|
sub AUTOLOAD {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $class = ref($self);
|
my $class = ref($self);
|
||||||
|
@ -79,24 +172,24 @@ sub AUTOLOAD {
|
||||||
|
|
||||||
sub getKey {
|
sub getKey {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
return $self->{id};
|
return $self->{Id};
|
||||||
}
|
}
|
||||||
|
|
||||||
sub open {
|
sub open {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
Fatal('No open method defined for protocol '.$self->{name});
|
Fatal('No open method defined for protocol '.$self->{Protocol});
|
||||||
}
|
}
|
||||||
|
|
||||||
sub close {
|
sub close {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
$self->{state} = 'closed';
|
$self->{state} = 'closed';
|
||||||
Debug('No close method defined for protocol '.$self->{name});
|
Debug('No close method defined for protocol '.$self->{Protocol});
|
||||||
}
|
}
|
||||||
|
|
||||||
sub loadMonitor {
|
sub loadMonitor {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
if ( !$self->{Monitor} ) {
|
if ( !$self->{Monitor} ) {
|
||||||
if ( !($self->{Monitor} = ZoneMinder::Monitor->find_one(Id=>$self->{id})) ) {
|
if ( !($self->{Monitor} = ZoneMinder::Monitor->find_one(Id=>$self->{MonitorId})) ) {
|
||||||
Fatal('Monitor id '.$self->{id}.' not found');
|
Fatal('Monitor id '.$self->{id}.' not found');
|
||||||
}
|
}
|
||||||
if ( defined($self->{Monitor}->{AutoStopTimeout}) ) {
|
if ( defined($self->{Monitor}->{AutoStopTimeout}) ) {
|
||||||
|
|
|
@ -51,11 +51,21 @@ sub open {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
$self->loadMonitor();
|
$self->loadMonitor();
|
||||||
if ( $self->{Monitor}->{ControlAddress} !~ /^\w+:\/\// ) {
|
|
||||||
# Has no scheme at the beginning, so won't parse as a URI
|
if ($self->{Monitor}->{ControlAddress} and ($self->{Monitor}->{ControlAddress} ne 'user:pass@ip')) {
|
||||||
$self->{Monitor}->{ControlAddress} = 'http://'.$self->{Monitor}->{ControlAddress};
|
Debug("Getting connection details from Control Address " . $self->{Monitor}->{ControlAddress});
|
||||||
}
|
if ( $self->{Monitor}->{ControlAddress} !~ /^\w+:\/\// ) {
|
||||||
$uri = URI->new($self->{Monitor}->{ControlAddress});
|
# Has no scheme at the beginning, so won't parse as a URI
|
||||||
|
$self->{Monitor}->{ControlAddress} = 'http://'.$self->{Monitor}->{ControlAddress};
|
||||||
|
}
|
||||||
|
$uri = URI->new($self->{Monitor}->{ControlAddress});
|
||||||
|
} elsif ($self->{Monitor}->{Path}) {
|
||||||
|
Debug("Getting connection details from Path " . $self->{Monitor}->{Path});
|
||||||
|
$uri = URI->new($self->{Monitor}->{Path});
|
||||||
|
$uri->scheme('http');
|
||||||
|
$uri->port(80);
|
||||||
|
$uri->path('');
|
||||||
|
}
|
||||||
|
|
||||||
use LWP::UserAgent;
|
use LWP::UserAgent;
|
||||||
$self->{ua} = LWP::UserAgent->new;
|
$self->{ua} = LWP::UserAgent->new;
|
||||||
|
@ -64,6 +74,7 @@ sub open {
|
||||||
$self->{state} = 'closed';
|
$self->{state} = 'closed';
|
||||||
|
|
||||||
my ( $username, $password, $host ) = ( $uri->authority() =~ /^([^:]+):([^@]*)@(.+)$/ );
|
my ( $username, $password, $host ) = ( $uri->authority() =~ /^([^:]+):([^@]*)@(.+)$/ );
|
||||||
|
Debug("Have username: $username password: $password host: $host from authority:" . $uri->authority());
|
||||||
|
|
||||||
$uri->userinfo(undef);
|
$uri->userinfo(undef);
|
||||||
|
|
||||||
|
@ -75,40 +86,47 @@ sub open {
|
||||||
# test auth
|
# test auth
|
||||||
my $res = $self->{ua}->get($uri->canonical().$url);
|
my $res = $self->{ua}->get($uri->canonical().$url);
|
||||||
|
|
||||||
if ( $res->is_success ) {
|
if ($res->is_success) {
|
||||||
if ( $res->content() ne "Properties.PTZ.PTZ=yes\n" ) {
|
if ($res->content() ne "Properties.PTZ.PTZ=yes\n") {
|
||||||
Warning('Response suggests that camera doesn\'t support PTZ. Content:('.$res->content().')');
|
Warning('Response suggests that camera doesn\'t support PTZ. Content:('.$res->content().')');
|
||||||
}
|
}
|
||||||
$self->{state} = 'open';
|
$self->{state} = 'open';
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if ($res->status_line() eq '404 Not Found') {
|
||||||
|
#older style
|
||||||
|
$url = 'axis-cgi/com/ptz.cgi';
|
||||||
|
$res = $self->{ua}->get($uri->canonical().$url);
|
||||||
|
Debug("Result from getting ".$uri->canonical().$url . ':' . $res->status_line());
|
||||||
|
}
|
||||||
|
|
||||||
if ( $res->status_line() eq '401 Unauthorized' ) {
|
if ($res->status_line() eq '401 Unauthorized') {
|
||||||
|
|
||||||
my $headers = $res->headers();
|
my $headers = $res->headers();
|
||||||
foreach my $k ( keys %$headers ) {
|
foreach my $k ( keys %$headers ) {
|
||||||
Debug("Initial Header $k => $$headers{$k}");
|
Debug("Initial Header $k => $$headers{$k}");
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( $$headers{'www-authenticate'} ) {
|
if ( $$headers{'www-authenticate'} ) {
|
||||||
my ( $auth, $tokens ) = $$headers{'www-authenticate'} =~ /^(\w+)\s+(.*)$/;
|
foreach my $auth_header ( ref $$headers{'www-authenticate'} eq 'ARRAY' ? @{$$headers{'www-authenticate'}} : ($$headers{'www-authenticate'})) {
|
||||||
if ( $tokens =~ /\w+="([^"]+)"/i ) {
|
my ( $auth, $tokens ) = $auth_header =~ /^(\w+)\s+(.*)$/;
|
||||||
if ( $realm ne $1 ) {
|
if ( $tokens =~ /\w+="([^"]+)"/i ) {
|
||||||
$realm = $1;
|
if ( $realm ne $1 ) {
|
||||||
$self->{ua}->credentials($uri->host_port(), $realm, $username, $password);
|
$realm = $1;
|
||||||
$res = $self->{ua}->get($uri->canonical().$url);
|
$self->{ua}->credentials($uri->host_port(), $realm, $username, $password);
|
||||||
if ( $res->is_success() ) {
|
$res = $self->{ua}->get($uri->canonical().$url);
|
||||||
Info("Auth succeeded after setting realm to $realm. You can set this value in the Control Device field to speed up connections and remove these log entries.");
|
if ( $res->is_success() ) {
|
||||||
$self->{state} = 'open';
|
Info("Auth succeeded after setting realm to $realm. You can set this value in the Control Device field to speed up connections and remove these log entries.");
|
||||||
return;
|
$self->{state} = 'open';
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Error('Authentication still failed after updating REALM status: '.$res->status_line);
|
||||||
|
} else {
|
||||||
|
Error('Authentication failed, not a REALM problem');
|
||||||
}
|
}
|
||||||
Error('Authentication still failed after updating REALM status: '.$res->status_line);
|
|
||||||
} else {
|
} else {
|
||||||
Error('Authentication failed, not a REALM problem');
|
Error('Failed to match realm in tokens');
|
||||||
}
|
} # end if
|
||||||
} else {
|
} # end foreach auth header
|
||||||
Error('Failed to match realm in tokens');
|
|
||||||
} # end if
|
|
||||||
} else {
|
} else {
|
||||||
Debug('No headers line');
|
Debug('No headers line');
|
||||||
} # end if headers
|
} # end if headers
|
||||||
|
|
|
@ -41,120 +41,133 @@ our @ISA = qw(ZoneMinder::Control);
|
||||||
|
|
||||||
use ZoneMinder::Logger qw(:all);
|
use ZoneMinder::Logger qw(:all);
|
||||||
use ZoneMinder::Config qw(:all);
|
use ZoneMinder::Config qw(:all);
|
||||||
|
use ZoneMinder::General qw(:all);
|
||||||
|
|
||||||
use Time::HiRes qw( usleep );
|
use Time::HiRes qw( usleep );
|
||||||
|
use URI::Encode qw(uri_encode);
|
||||||
|
|
||||||
sub open
|
our $REALM = '';
|
||||||
{
|
our $PROTOCOL = 'http://';
|
||||||
my $self = shift;
|
our $USERNAME = 'admin';
|
||||||
|
our $PASSWORD = '';
|
||||||
|
our $ADDRESS = '';
|
||||||
|
our $BASE_URL = '';
|
||||||
|
|
||||||
$self->loadMonitor();
|
sub open {
|
||||||
Debug( "Camera open" );
|
my $self = shift;
|
||||||
use LWP::UserAgent;
|
$self->loadMonitor();
|
||||||
$self->{ua} = LWP::UserAgent->new;
|
|
||||||
$self->{ua}->agent( "ZoneMinder Control Agent/".ZoneMinder::Base::ZM_VERSION );
|
|
||||||
|
|
||||||
$self->{state} = 'open';
|
if (($self->{Monitor}->{ControlAddress} =~ /^(?<PROTOCOL>https?:\/\/)?(?<USERNAME>[^:@]+)?:?(?<PASSWORD>[^\/@]+)?@?(?<ADDRESS>.*)$/)) {
|
||||||
|
$PROTOCOL = $+{PROTOCOL} if $+{PROTOCOL};
|
||||||
|
$USERNAME = $+{USERNAME} if $+{USERNAME};
|
||||||
|
$PASSWORD = $+{PASSWORD} if $+{PASSWORD};
|
||||||
|
$ADDRESS = $+{ADDRESS} if $+{ADDRESS};
|
||||||
|
} else {
|
||||||
|
Error('Failed to parse auth from address ' . $self->{Monitor}->{ControlAddress});
|
||||||
|
$ADDRESS = $self->{Monitor}->{ControlAddress};
|
||||||
|
}
|
||||||
|
if ( !($ADDRESS =~ /:/) ) {
|
||||||
|
Error('You generally need to also specify the port. I will append :80');
|
||||||
|
$ADDRESS .= ':80';
|
||||||
|
}
|
||||||
|
$BASE_URL = $PROTOCOL.($USERNAME?$USERNAME.':'.$PASSWORD.'@':'').$ADDRESS;
|
||||||
|
|
||||||
|
use LWP::UserAgent;
|
||||||
|
$self->{ua} = LWP::UserAgent->new;
|
||||||
|
$self->{ua}->agent( 'ZoneMinder Control Agent/'.ZoneMinder::Base::ZM_VERSION );
|
||||||
|
$self->{state} = 'open';
|
||||||
}
|
}
|
||||||
|
|
||||||
sub close
|
sub close {
|
||||||
{
|
my $self = shift;
|
||||||
my $self = shift;
|
$self->{state} = 'closed';
|
||||||
$self->{state} = 'closed';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub printMsg
|
sub sendCmd {
|
||||||
{
|
my ($self, $cmd, $speedcmd) = @_;
|
||||||
my $msg = shift;
|
|
||||||
my $msg_len = length($msg);
|
|
||||||
|
|
||||||
Debug( $msg."[".$msg_len."]" );
|
$self->printMsg( $speedcmd, 'Tx' );
|
||||||
|
$self->printMsg( $cmd, 'Tx' );
|
||||||
|
|
||||||
|
my $req = HTTP::Request->new( GET => $BASE_URL."/cgi-bin/camctrl/eCamCtrl.cgi?stream=0&$speedcmd&$cmd");
|
||||||
|
my $res = $self->{ua}->request($req);
|
||||||
|
|
||||||
|
if (!$res->is_success) {
|
||||||
|
Error('Request failed: '.$res->status_line().' (URI: '.$req->as_string().')');
|
||||||
|
}
|
||||||
|
return $res->is_success;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub sendCmd
|
sub moveConUp {
|
||||||
{
|
my ($self, $params) = @_;
|
||||||
my ($self, $cmd, $speedcmd) = @_;
|
my $speed = 'speedtilt=' . ($params->{tiltspeed} - 6);
|
||||||
|
$self->sendCmd( 'move=up', $speed );
|
||||||
my $result = undef;
|
|
||||||
|
|
||||||
printMsg( $speedcmd, "Tx" );
|
|
||||||
printMsg( $cmd, "Tx" );
|
|
||||||
|
|
||||||
my $req = HTTP::Request->new( GET => "http://" . $self->{Monitor}->{ControlAddress} . "/cgi-bin/camctrl/eCamCtrl.cgi?stream=0&$speedcmd&$cmd" );
|
|
||||||
my $res = $self->{ua}->request($req);
|
|
||||||
|
|
||||||
if ( $res->is_success )
|
|
||||||
{
|
|
||||||
$result = !undef;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Error( "Request failed: '" . $res->status_line() . "' (URI: '" . $req->as_string() . "')" );
|
|
||||||
}
|
|
||||||
|
|
||||||
return( $result );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub moveConUp
|
sub moveConDown {
|
||||||
{
|
my ($self, $params) = @_;
|
||||||
my ($self, $params) = @_;
|
my $speed = 'speedtilt=' . ($params->{tiltspeed} - 6);
|
||||||
my $speed = 'speedtilt=' . ($params->{tiltspeed} - 6);
|
$self->sendCmd( 'move=down', $speed );
|
||||||
Debug( "Move Up" );
|
|
||||||
$self->sendCmd( 'move=up', $speed );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub moveConDown
|
sub moveConLeft {
|
||||||
{
|
my ($self, $params) = @_;
|
||||||
my ($self, $params) = @_;
|
my $speed = 'speedpan=-' . $params->{panspeed};
|
||||||
my $speed = 'speedtilt=' . ($params->{tiltspeed} - 6);
|
$self->sendCmd( 'move=left', $speed );
|
||||||
Debug( "Move Down" );
|
|
||||||
$self->sendCmd( 'move=down', $speed );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub moveConLeft
|
sub moveConRight {
|
||||||
{
|
my ($self, $params) = @_;
|
||||||
my ($self, $params) = @_;
|
my $speed = 'speedpan=' . ($params->{panspeed} - 6);
|
||||||
my $speed = 'speedpan=-' . $params->{panspeed};
|
$self->sendCmd( 'move=right', $speed );
|
||||||
Debug( "Move Left" );
|
|
||||||
$self->sendCmd( 'move=left', $speed );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub moveConRight
|
sub moveStop {
|
||||||
{
|
my $self = shift;
|
||||||
my ($self, $params) = @_;
|
Debug( "Move Stop: not implemented" );
|
||||||
my $speed = 'speedpan=' . ($params->{panspeed} - 6);
|
# not implemented
|
||||||
Debug( "Move Right" );
|
|
||||||
$self->sendCmd( 'move=right', $speed );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub moveStop
|
sub zoomConTele {
|
||||||
{
|
my ($self, $params) = @_;
|
||||||
my $self = shift;
|
my $speed = 'speedzoom=' . ($params->{speed} - 6);
|
||||||
Debug( "Move Stop" );
|
$self->sendCmd( 'zoom=tele', $speed );
|
||||||
# not implemented
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub zoomConTele
|
sub zoomConWide {
|
||||||
{
|
my ($self, $params) = @_;
|
||||||
my ($self, $params) = @_;
|
my $speed = 'speedzoom=' . ($params->{speed} - 6);
|
||||||
my $speed = 'speedzoom=' . ($params->{speed} - 6);
|
$self->sendCmd( 'zoom=wide', $speed );
|
||||||
Debug( "Zoom In" );
|
|
||||||
$self->sendCmd( 'zoom=tele', $speed );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub zoomConWide
|
sub reset {
|
||||||
{
|
my $self = shift;
|
||||||
my ($self, $params) = @_;
|
$self->sendCmd( 'move=home' );
|
||||||
my $speed = 'speedzoom=' . ($params->{speed} - 6);
|
|
||||||
Debug( "Zoom Out" );
|
|
||||||
$self->sendCmd( 'zoom=wide', $speed );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub reset
|
sub get_config {
|
||||||
{
|
my $self = shift;
|
||||||
my $self = shift;
|
|
||||||
Debug( "Camera Reset" );
|
my $url = $BASE_URL.'/cgi-bin/admin/lsctrl.cgi?cmd=queryStatus&retType=javascript';
|
||||||
$self->sendCmd( 'move=home' );
|
my $req = new HTTP::Request(GET => $url);
|
||||||
|
my $response = $self->{ua}->request($req);
|
||||||
|
if ( $response->is_success() ) {
|
||||||
|
my $resp = $response->decoded_content;
|
||||||
|
return ZoneMinder::General::parseNameEqualsValueToHash($resp);
|
||||||
|
}
|
||||||
|
Warn("Failed to get config from $url: " . $response->status_line());
|
||||||
|
return;
|
||||||
|
} # end sub get_config
|
||||||
|
|
||||||
|
sub set_config {
|
||||||
|
my $self = shift;
|
||||||
|
my $diff = shift;
|
||||||
|
|
||||||
|
my $url = $BASE_URL.'/cgi-bin/'.$USERNAME.'/setparam.cgi?'.
|
||||||
|
join('&', map { $_.'='.uri_encode($$diff{$_}) } keys %$diff);
|
||||||
|
my $response = $self->{ua}->get($url);
|
||||||
|
Debug($response->content);
|
||||||
|
return $response->is_success();
|
||||||
}
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|
|
@ -43,6 +43,7 @@ require Date::Parse;
|
||||||
require POSIX;
|
require POSIX;
|
||||||
use Date::Format qw(time2str);
|
use Date::Format qw(time2str);
|
||||||
use Time::HiRes qw(gettimeofday tv_interval stat);
|
use Time::HiRes qw(gettimeofday tv_interval stat);
|
||||||
|
use Scalar::Util qw(looks_like_number);
|
||||||
|
|
||||||
#our @ISA = qw(ZoneMinder::Object);
|
#our @ISA = qw(ZoneMinder::Object);
|
||||||
use parent qw(ZoneMinder::Object);
|
use parent qw(ZoneMinder::Object);
|
||||||
|
@ -601,7 +602,7 @@ sub CopyTo {
|
||||||
# First determine if we can move it to the dest.
|
# First determine if we can move it to the dest.
|
||||||
# We do this before bothering to lock the event
|
# We do this before bothering to lock the event
|
||||||
my ( $NewPath ) = ( $NewStorage->Path() =~ /^(.*)$/ ); # De-taint
|
my ( $NewPath ) = ( $NewStorage->Path() =~ /^(.*)$/ ); # De-taint
|
||||||
if ( ! $$NewStorage{Id} ) {
|
if ( ! looks_like_number($$NewStorage{Id}) ) {
|
||||||
return 'New storage does not have an id. Moving will not happen.';
|
return 'New storage does not have an id. Moving will not happen.';
|
||||||
} elsif ( $$NewStorage{Id} == $$self{StorageId} ) {
|
} elsif ( $$NewStorage{Id} == $$self{StorageId} ) {
|
||||||
return 'Event is already located at ' . $NewPath;
|
return 'Event is already located at ' . $NewPath;
|
||||||
|
@ -733,19 +734,22 @@ sub MoveTo {
|
||||||
|
|
||||||
my $was_in_transaction = !$ZoneMinder::Database::dbh->{AutoCommit};
|
my $was_in_transaction = !$ZoneMinder::Database::dbh->{AutoCommit};
|
||||||
$ZoneMinder::Database::dbh->begin_work() if !$was_in_transaction;
|
$ZoneMinder::Database::dbh->begin_work() if !$was_in_transaction;
|
||||||
$self->lock_and_load(); # The fact that we are in a transaction might not imply locking
|
if (!$self->lock_and_load()) {
|
||||||
|
Warning('Unable to lock event record '.$$self{Id}); # The fact that we are in a transaction might not imply locking
|
||||||
|
$ZoneMinder::Database::dbh->commit() if !$was_in_transaction;
|
||||||
|
return 'Unable to lock event record';
|
||||||
|
}
|
||||||
|
|
||||||
my $OldStorage = $self->Storage(undef);
|
my $OldStorage = $self->Storage(undef);
|
||||||
|
|
||||||
my $error = $self->CopyTo($NewStorage);
|
my $error = $self->CopyTo($NewStorage);
|
||||||
return $error if $error;
|
if (!$error) {
|
||||||
|
# Succeeded in copying all files, so we may now update the Event.
|
||||||
|
$$self{StorageId} = $$NewStorage{Id};
|
||||||
|
$self->Storage($NewStorage);
|
||||||
|
$error .= $self->save();
|
||||||
|
|
||||||
# Succeeded in copying all files, so we may now update the Event.
|
# Going to leave it to upper layer as to whether we rollback or not
|
||||||
$$self{StorageId} = $$NewStorage{Id};
|
}
|
||||||
$self->Storage($NewStorage);
|
|
||||||
$error .= $self->save();
|
|
||||||
|
|
||||||
# Going to leave it to upper layer as to whether we rollback or not
|
|
||||||
$ZoneMinder::Database::dbh->commit() if !$was_in_transaction;
|
$ZoneMinder::Database::dbh->commit() if !$was_in_transaction;
|
||||||
return $error if $error;
|
return $error if $error;
|
||||||
|
|
||||||
|
|
|
@ -56,6 +56,7 @@ $primary_key = 'Id';
|
||||||
%fields = map { $_ => $_ } qw(
|
%fields = map { $_ => $_ } qw(
|
||||||
Id
|
Id
|
||||||
Name
|
Name
|
||||||
|
ExecuteInterval
|
||||||
Query_json
|
Query_json
|
||||||
AutoArchive
|
AutoArchive
|
||||||
AutoUnarchive
|
AutoUnarchive
|
||||||
|
@ -106,7 +107,6 @@ sub Execute {
|
||||||
$sql =~ s/zmSystemLoad/$load/g;
|
$sql =~ s/zmSystemLoad/$load/g;
|
||||||
}
|
}
|
||||||
|
|
||||||
$sql .= ' FOR UPDATE' if $$self{LockRows};
|
|
||||||
|
|
||||||
Debug("Filter::Execute SQL ($sql)");
|
Debug("Filter::Execute SQL ($sql)");
|
||||||
my $sth = $ZoneMinder::Database::dbh->prepare_cached($sql)
|
my $sth = $ZoneMinder::Database::dbh->prepare_cached($sql)
|
||||||
|
@ -371,10 +371,7 @@ sub Sql {
|
||||||
if ( @auto_terms ) {
|
if ( @auto_terms ) {
|
||||||
$sql .= ' AND ( '.join(' or ', @auto_terms).' )';
|
$sql .= ' AND ( '.join(' or ', @auto_terms).' )';
|
||||||
}
|
}
|
||||||
if ( !$filter_expr->{sort_field} ) {
|
|
||||||
$filter_expr->{sort_field} = 'StartDateTime';
|
|
||||||
$filter_expr->{sort_asc} = 0;
|
|
||||||
}
|
|
||||||
my $sort_column = '';
|
my $sort_column = '';
|
||||||
if ( $filter_expr->{sort_field} eq 'Id' ) {
|
if ( $filter_expr->{sort_field} eq 'Id' ) {
|
||||||
$sort_column = 'E.Id';
|
$sort_column = 'E.Id';
|
||||||
|
@ -406,14 +403,21 @@ sub Sql {
|
||||||
$sort_column = 'E.MaxScore';
|
$sort_column = 'E.MaxScore';
|
||||||
} elsif ( $filter_expr->{sort_field} eq 'DiskSpace' ) {
|
} elsif ( $filter_expr->{sort_field} eq 'DiskSpace' ) {
|
||||||
$sort_column = 'E.DiskSpace';
|
$sort_column = 'E.DiskSpace';
|
||||||
} else {
|
} elsif ( $filter_expr->{sort_field} ne '' ) {
|
||||||
$sort_column = 'E.StartDateTime';
|
$sort_column = 'E.'.$filter_expr->{sort_field};
|
||||||
}
|
}
|
||||||
my $sort_order = $filter_expr->{sort_asc} ? 'ASC' : 'DESC';
|
if ( $sort_column ne '' ) {
|
||||||
$sql .= ' ORDER BY '.$sort_column.' '.$sort_order;
|
$sql .= ' ORDER BY '.$sort_column.' '.($filter_expr->{sort_asc} ? 'ASC' : 'DESC');
|
||||||
if ( $filter_expr->{limit} ) {
|
}
|
||||||
|
if ($filter_expr->{limit}) {
|
||||||
$sql .= ' LIMIT 0,'.$filter_expr->{limit};
|
$sql .= ' LIMIT 0,'.$filter_expr->{limit};
|
||||||
}
|
}
|
||||||
|
if ($$self{LockRows}) {
|
||||||
|
$sql .= ' FOR UPDATE';
|
||||||
|
if ($filter_expr->{skip_locked}) {
|
||||||
|
$sql .= ' SKIP LOCKED';
|
||||||
|
}
|
||||||
|
}
|
||||||
$self->{Sql} = $sql;
|
$self->{Sql} = $sql;
|
||||||
} # end if has Sql
|
} # end if has Sql
|
||||||
return $self->{Sql};
|
return $self->{Sql};
|
||||||
|
|
|
@ -31,6 +31,8 @@ our %EXPORT_TAGS = (
|
||||||
systemStatus
|
systemStatus
|
||||||
packageControl
|
packageControl
|
||||||
daemonControl
|
daemonControl
|
||||||
|
parseNameEqualsValueToHash
|
||||||
|
hash_diff
|
||||||
) ]
|
) ]
|
||||||
);
|
);
|
||||||
push( @{$EXPORT_TAGS{all}}, @{$EXPORT_TAGS{$_}} ) foreach keys %EXPORT_TAGS;
|
push( @{$EXPORT_TAGS{all}}, @{$EXPORT_TAGS{$_}} ) foreach keys %EXPORT_TAGS;
|
||||||
|
@ -534,6 +536,42 @@ sub jsonDecode {
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub parseNameEqualsValueToHash {
|
||||||
|
my %settings;
|
||||||
|
foreach my $line ( split ( /\r?\n/, $_[0] ) ) {
|
||||||
|
next if ! $line;
|
||||||
|
next if ! ( $line =~ /=/ );
|
||||||
|
my ($name, $value ) = split('=', $line);
|
||||||
|
$value =~ s/^'//;
|
||||||
|
$value =~ s/'$//;
|
||||||
|
$settings{$name} = defined $value ? $value : '';
|
||||||
|
}
|
||||||
|
return %settings;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub hash_diff {
|
||||||
|
# assumes keys of second hash are all in the first hash
|
||||||
|
my ( $settings, $defaults ) = @_;
|
||||||
|
my %updates;
|
||||||
|
|
||||||
|
foreach my $setting ( keys %{$settings} ) {
|
||||||
|
next if ! exists $$defaults{$setting};
|
||||||
|
if (
|
||||||
|
($$settings{$setting} and ! $$defaults{$setting})
|
||||||
|
or
|
||||||
|
(!$$settings{$setting} and $$defaults{$setting})
|
||||||
|
or
|
||||||
|
(
|
||||||
|
($$settings{$setting} and $$defaults{$setting} and (
|
||||||
|
$$settings{$setting} ne $$defaults{$setting}))
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
$updates{$setting} = $$defaults{$setting};
|
||||||
|
}
|
||||||
|
} # end foreach setting
|
||||||
|
return %updates;
|
||||||
|
}
|
||||||
|
|
||||||
sub packageControl {
|
sub packageControl {
|
||||||
my $command = shift;
|
my $command = shift;
|
||||||
my $string = $Config{ZM_PATH_BIN}.'/zmpkg.pl '.$command;
|
my $string = $Config{ZM_PATH_BIN}.'/zmpkg.pl '.$command;
|
||||||
|
@ -598,6 +636,8 @@ of the ZoneMinder scripts
|
||||||
packageControl
|
packageControl
|
||||||
daemonControl
|
daemonControl
|
||||||
systemStatus
|
systemStatus
|
||||||
|
parseNameEqualsValueToHash
|
||||||
|
hash_diff
|
||||||
) ]
|
) ]
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -42,6 +42,7 @@ our @ISA = qw(Exporter ZoneMinder::Base);
|
||||||
# will save memory.
|
# will save memory.
|
||||||
our %EXPORT_TAGS = (
|
our %EXPORT_TAGS = (
|
||||||
constants => [ qw(
|
constants => [ qw(
|
||||||
|
STATE_UNKNOWN
|
||||||
STATE_IDLE
|
STATE_IDLE
|
||||||
STATE_PREALARM
|
STATE_PREALARM
|
||||||
STATE_ALARM
|
STATE_ALARM
|
||||||
|
@ -98,11 +99,12 @@ our $VERSION = $ZoneMinder::Base::VERSION;
|
||||||
use ZoneMinder::Config qw(:all);
|
use ZoneMinder::Config qw(:all);
|
||||||
use ZoneMinder::Logger qw(:all);
|
use ZoneMinder::Logger qw(:all);
|
||||||
|
|
||||||
use constant STATE_IDLE => 0;
|
use constant STATE_UNKNOWN => 0;
|
||||||
use constant STATE_PREALARM => 1;
|
use constant STATE_IDLE => 1;
|
||||||
use constant STATE_ALARM => 2;
|
use constant STATE_PREALARM => 2;
|
||||||
use constant STATE_ALERT => 3;
|
use constant STATE_ALARM => 3;
|
||||||
use constant STATE_TAPE => 4;
|
use constant STATE_ALERT => 4;
|
||||||
|
use constant STATE_TAPE => 5;
|
||||||
|
|
||||||
use constant ACTION_GET => 1;
|
use constant ACTION_GET => 1;
|
||||||
use constant ACTION_SET => 2;
|
use constant ACTION_SET => 2;
|
||||||
|
@ -169,6 +171,7 @@ our $mem_data = {
|
||||||
zmc_heartbeat_time => { type=>'time_t64', seq=>$mem_seq++ },
|
zmc_heartbeat_time => { type=>'time_t64', seq=>$mem_seq++ },
|
||||||
last_write_time => { type=>'time_t64', seq=>$mem_seq++ },
|
last_write_time => { type=>'time_t64', seq=>$mem_seq++ },
|
||||||
last_read_time => { type=>'time_t64', seq=>$mem_seq++ },
|
last_read_time => { type=>'time_t64', seq=>$mem_seq++ },
|
||||||
|
last_viewed_time => { type=>'time_t64', seq=>$mem_seq++ },
|
||||||
control_state => { type=>'uint8[256]', seq=>$mem_seq++ },
|
control_state => { type=>'uint8[256]', seq=>$mem_seq++ },
|
||||||
alarm_cause => { type=>'int8[256]', seq=>$mem_seq++ },
|
alarm_cause => { type=>'int8[256]', seq=>$mem_seq++ },
|
||||||
video_fifo => { type=>'int8[64]', seq=>$mem_seq++ },
|
video_fifo => { type=>'int8[64]', seq=>$mem_seq++ },
|
||||||
|
|
|
@ -37,6 +37,7 @@ require ZoneMinder::Memory;
|
||||||
require ZoneMinder::Monitor_Status;
|
require ZoneMinder::Monitor_Status;
|
||||||
require ZoneMinder::Event_Summary;
|
require ZoneMinder::Event_Summary;
|
||||||
require ZoneMinder::Zone;
|
require ZoneMinder::Zone;
|
||||||
|
use ZoneMinder::Logger qw(:all);
|
||||||
|
|
||||||
#our @ISA = qw(Exporter ZoneMinder::Base);
|
#our @ISA = qw(Exporter ZoneMinder::Base);
|
||||||
use parent qw(ZoneMinder::Object);
|
use parent qw(ZoneMinder::Object);
|
||||||
|
@ -240,20 +241,26 @@ sub control {
|
||||||
my $command = shift;
|
my $command = shift;
|
||||||
my $process = shift;
|
my $process = shift;
|
||||||
|
|
||||||
if ( $command eq 'stop' or $command eq 'restart' ) {
|
if ($command eq 'stop' or $command eq 'restart') {
|
||||||
if ( $process ) {
|
if ($process) {
|
||||||
`/usr/bin/zmdc.pl stop $process -m $$monitor{Id}`;
|
ZoneMinder::General::runCommand("zmdc.pl stop $process -m $$monitor{Id}");
|
||||||
} else {
|
} else {
|
||||||
`/usr/bin/zmdc.pl stop zma -m $$monitor{Id}`;
|
if ($monitor->{Type} eq 'Local') {
|
||||||
`/usr/bin/zmdc.pl stop zmc -m $$monitor{Id}`;
|
ZoneMinder::General::runCommand('zmdc.pl stop zmc -d '.$monitor->{Device});
|
||||||
|
} else {
|
||||||
|
ZoneMinder::General::runCommand('zmdc.pl stop zmc -m '.$monitor->{Id});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ( $command eq 'start' or $command eq 'restart' ) {
|
if ( $command eq 'start' or $command eq 'restart' ) {
|
||||||
if ( $process ) {
|
if ( $process ) {
|
||||||
`/usr/bin/zmdc.pl start $process -m $$monitor{Id}`;
|
ZoneMinder::General::runCommand("zmdc.pl start $process -m $$monitor{Id}");
|
||||||
} else {
|
} else {
|
||||||
`/usr/bin/zmdc.pl start zmc -m $$monitor{Id}`;
|
if ($monitor->{Type} eq 'Local') {
|
||||||
`/usr/bin/zmdc.pl start zma -m $$monitor{Id}`;
|
ZoneMinder::General::runCommand('zmdc.pl start zmc -d '.$monitor->{Device});
|
||||||
|
} else {
|
||||||
|
ZoneMinder::General::runCommand('zmdc.pl start zmc -m '.$monitor->{Id});
|
||||||
|
}
|
||||||
} # end if
|
} # end if
|
||||||
}
|
}
|
||||||
} # end sub control
|
} # end sub control
|
||||||
|
@ -323,6 +330,37 @@ sub resumeMotionDetection {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub Control {
|
||||||
|
my $self = shift;
|
||||||
|
if (!exists $$self{Control}) {
|
||||||
|
if ($$self{ControlId}) {
|
||||||
|
require ZoneMinder::Control;
|
||||||
|
my $Control = ZoneMinder::Control->find_one(Id=>$$self{ControlId});
|
||||||
|
if ($Control) {
|
||||||
|
my $Protocol = $$Control{Protocol};
|
||||||
|
|
||||||
|
if (!$Protocol) {
|
||||||
|
Error("No protocol set in control $$Control{Id}, trying Name $$Control{Name}");
|
||||||
|
$Protocol = $$Control{Name};
|
||||||
|
}
|
||||||
|
require Module::Load::Conditional;
|
||||||
|
if (!Module::Load::Conditional::can_load(modules => {'ZoneMinder::Control::'.$Protocol => undef})) {
|
||||||
|
Error("Can't load ZoneMinder::Control::$Protocol\n$Module::Load::Conditional::ERROR");
|
||||||
|
return undef;
|
||||||
|
}
|
||||||
|
bless $Control, 'ZoneMinder::Control::'.$Protocol;
|
||||||
|
$$Control{MonitorId} = $$self{Id};
|
||||||
|
$$self{Control} = $Control;
|
||||||
|
} else {
|
||||||
|
Error("Unable to load control for control $$self{ControlId} for monitor $$self{Id}");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Info("No ControlId set in monitor $$self{Id}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $$self{Control};
|
||||||
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
__END__
|
__END__
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,6 @@ use autouse 'Pod::Usage'=>qw(pod2usage);
|
||||||
use POSIX qw/strftime EPIPE EINTR/;
|
use POSIX qw/strftime EPIPE EINTR/;
|
||||||
use Socket;
|
use Socket;
|
||||||
use Data::Dumper;
|
use Data::Dumper;
|
||||||
use Module::Load::Conditional qw{can_load};
|
|
||||||
|
|
||||||
use constant MAX_CONNECT_DELAY => 15;
|
use constant MAX_CONNECT_DELAY => 15;
|
||||||
use constant MAX_COMMAND_WAIT => 1800;
|
use constant MAX_COMMAND_WAIT => 1800;
|
||||||
|
@ -102,40 +101,21 @@ if ($options{command}) {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
# The server isn't there
|
# The server isn't there
|
||||||
my $monitor = zmDbGetMonitorAndControl($id);
|
require ZoneMinder::Monitor;
|
||||||
|
|
||||||
|
my $monitor = ZoneMinder::Monitor->find_one(Id=>$id);
|
||||||
Fatal("Unable to load control data for monitor $id") if !$monitor;
|
Fatal("Unable to load control data for monitor $id") if !$monitor;
|
||||||
|
|
||||||
my $protocol = $monitor->{Protocol};
|
my $control = $monitor->Control();
|
||||||
|
|
||||||
|
my $protocol = $control->{Protocol};
|
||||||
if (!$protocol) {
|
if (!$protocol) {
|
||||||
Fatal('No protocol is set in monitor. Please edit the monitor, edit control type, select the control capability and fill in the Protocol field');
|
Fatal('No protocol is set in monitor. Please edit the monitor, edit control type, select the control capability and fill in the Protocol field');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (-x $protocol) {
|
|
||||||
# Protocol is actually a script!
|
|
||||||
# Holdover from previous versions
|
|
||||||
my $command .= $protocol.' '.$arg_string;
|
|
||||||
Debug($command);
|
|
||||||
|
|
||||||
my $output = qx($command);
|
|
||||||
my $status = $? >> 8;
|
|
||||||
if ($status || logDebugging()) {
|
|
||||||
chomp($output);
|
|
||||||
Debug("Output: $output");
|
|
||||||
}
|
|
||||||
if ($status) {
|
|
||||||
Error("Command '$command' exited with status: $status");
|
|
||||||
exit($status);
|
|
||||||
}
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
Info("Starting control server $id/$protocol");
|
Info("Starting control server $id/$protocol");
|
||||||
close(CLIENT);
|
close(CLIENT);
|
||||||
|
|
||||||
if (!can_load(modules => {'ZoneMinder::Control::'.$protocol => undef})) {
|
|
||||||
Fatal("Can't load ZoneMinder::Control::$protocol\n$Module::Load::Conditional::ERROR");
|
|
||||||
}
|
|
||||||
|
|
||||||
my $zm_terminate = 0;
|
my $zm_terminate = 0;
|
||||||
sub TermHandler {
|
sub TermHandler {
|
||||||
Info('Received TERM, exiting');
|
Info('Received TERM, exiting');
|
||||||
|
@ -150,7 +130,6 @@ if ($options{command}) {
|
||||||
|
|
||||||
$0 = $0.' --id '.$id;
|
$0 = $0.' --id '.$id;
|
||||||
|
|
||||||
my $control = ('ZoneMinder::Control::'.$protocol)->new($id);
|
|
||||||
my $control_key = $control->getKey();
|
my $control_key = $control->getKey();
|
||||||
$control->loadMonitor();
|
$control->loadMonitor();
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue