Compare commits
839 Commits
Author | SHA1 | Date | |
---|---|---|---|
440317c552 | |||
fd23d27bba | |||
c9af05aeb0 | |||
5bd1f5e97c | |||
215ffb81ae | |||
7052ea8859 | |||
dd922b7775 | |||
2877cd2748 | |||
1d688ad1ff | |||
723a6a494f | |||
db26467d0b | |||
8d15e2806d | |||
f4700bef17 | |||
abf763683d | |||
0ad56ac087 | |||
81226d3bcc | |||
358281816f | |||
98327336ac | |||
89c4e2e88f | |||
521f3f2ab6 | |||
b17f6a3279 | |||
08313f07db | |||
01d19fe5fb | |||
093f306ec7 | |||
667354a158 | |||
53141556f7 | |||
88893abc50 | |||
082a9fb50d | |||
917c15420c | |||
ef116c12ef | |||
03d56ac0c9 | |||
86c97de908 | |||
967ccc0d44 | |||
6f52ea0f1a | |||
c50e67dbc0 | |||
31876f3776 | |||
4fd2de3935 | |||
b53f8b0a24 | |||
1c2e59e64b | |||
c757630f7a | |||
1c140bb593 | |||
5c1130eafe | |||
b189f3c9a2 | |||
783fd3c094 | |||
8bc038ea02 | |||
8428373178 | |||
ddcca22498 | |||
0f89b0ae4b | |||
9a83b97d33 | |||
a993e2f4ce | |||
fe9928443f | |||
d2082a896b | |||
a763665f32 | |||
2b09ee23c8 | |||
40a46cd675 | |||
9e2075a4af | |||
7355cdb888 | |||
a4c52f9b3b | |||
013f0d110e | |||
4ba0069a8a | |||
99099e03bb | |||
6ec890aa30 | |||
e39aa41c7c | |||
a7202756ab | |||
596955f6b4 | |||
14e07c9b56 | |||
3f9accced2 | |||
1cd9fb1485 | |||
9b517ceebb | |||
97a5c63d48 | |||
f79cddbf44 | |||
c3d5542bee | |||
a28b29f953 | |||
4cc79de59c | |||
af7be5c1be | |||
09b7ce481f | |||
3839eddb60 | |||
ebe3828b5e | |||
d532d087fe | |||
bbc669d2a7 | |||
74df7b6a59 | |||
624693bb22 | |||
5218d4d094 | |||
c9978e21c9 | |||
547c3cf84f | |||
c41a007870 | |||
60c0e25c49 | |||
0d1b4942c3 | |||
cba47bc0b2 | |||
e1e4f706ee | |||
603bd923e1 | |||
c2064220d0 | |||
1fb67a69f9 | |||
e0a071e9e5 | |||
a90cb7679b | |||
d307a559c0 | |||
3659f3d1ed | |||
87429cda34 | |||
b2db2816fa | |||
d5aca4ad52 | |||
57cef0f4cf | |||
ea2ba79f96 | |||
f5416a4501 | |||
553930da0d | |||
40e98ff42a | |||
615b847cf9 | |||
8e4b38ef18 | |||
004f35c186 | |||
a2ffc2ab63 | |||
837466742e | |||
b1ff00e36b | |||
04c9795586 | |||
001faa160e | |||
eb5b8365c3 | |||
29f1b52dee | |||
93f94e16ac | |||
16c9a6c862 | |||
92b61944dd | |||
1620028382 | |||
df2eb81928 | |||
52016223ab | |||
50e6ec1c3a | |||
b3b1daf989 | |||
2163506a8e | |||
21f695d7ba | |||
5107631271 | |||
676a9d24b7 | |||
e8e01417b2 | |||
1885b9e18e | |||
780f44246f | |||
1eea6c8e99 | |||
9417ad24a2 | |||
7331ab6d96 | |||
cc1ea7fa25 | |||
e5574db63c | |||
8771ac9828 | |||
6047cbcd0a | |||
ad437292ab | |||
bd946bf564 | |||
867997b588 | |||
6bab2bda8d | |||
de5e7da26d | |||
c287b1ea6e | |||
a12b0f101e | |||
0028a3ba5b | |||
09a146b54c | |||
5f6a7a2517 | |||
1a0c641df3 | |||
d16fcb8a9d | |||
391859ded4 | |||
e7e255488d | |||
cb4ff53efd | |||
087ad65518 | |||
15be9aad67 | |||
c04cf033a8 | |||
0bae44985c | |||
e788060456 | |||
d93c739d38 | |||
4c0fcc5535 | |||
268dc6447c | |||
6cb0440d4a | |||
bd70f07f8b | |||
ecfafd0c4a | |||
236c15dbac | |||
e0e49ec31a | |||
746713eb9f | |||
102761efac | |||
caf30e9958 | |||
9f8571f622 | |||
b804987254 | |||
2b9d73c847 | |||
cab95d15f3 | |||
b79323b4b7 | |||
3e8032d867 | |||
ef52c066d2 | |||
c32365d671 | |||
7a45daf853 | |||
fea0a7911a | |||
f63e78a800 | |||
0790a9243b | |||
590dde8206 | |||
40e26e4407 | |||
35345dc529 | |||
36181e3593 | |||
dadda1c175 | |||
719b4e04b6 | |||
692571a7f8 | |||
ff3d37517f | |||
d8d9f5431e | |||
8f27ee6afe | |||
797e900268 | |||
74ff517e09 | |||
0455738fa8 | |||
5782083921 | |||
be4042d7e4 | |||
f32b719630 | |||
512895a6f2 | |||
f6328158ed | |||
042a82c463 | |||
853c3852fd | |||
b55a5dfdbd | |||
4e0cbe0dcb | |||
58960e5e01 | |||
84d43f51ff | |||
e02fc0f97d | |||
157a0b8660 | |||
202aa1e8ca | |||
72a4ea9e5c | |||
243c8a4542 | |||
c7b0ea28b2 | |||
0b46076ae7 | |||
3632568e29 | |||
361bb2dc7b | |||
61ab0b0b48 | |||
734a9611e5 | |||
368a060a5e | |||
923b794cc6 | |||
f45e25ea2c | |||
81b9e8d0af | |||
07163889a3 | |||
04804d8883 | |||
bedbbb0c3a | |||
4c47c49eab | |||
29cad671dc | |||
705ac8104a | |||
d73b0c381f | |||
fe0777eaf2 | |||
f16d2cde9b | |||
7a19274211 | |||
36d0b9156c | |||
6aa4eb7778 | |||
76bef22633 | |||
7cb420dc4c | |||
99c39d5ee9 | |||
2ee9b97020 | |||
29d791afe1 | |||
7b1298d7d0 | |||
f948c885bc | |||
473dd4af61 | |||
f5fee5afa1 | |||
5e7846b519 | |||
e5c6203412 | |||
bba8f06422 | |||
076786f482 | |||
28a70e878e | |||
d7d89b9db6 | |||
44209ddfb3 | |||
e355510575 | |||
3713365950 | |||
1801fcdc3d | |||
18698ef5d4 | |||
d08848a4d0 | |||
48510beb28 | |||
751afa6cf2 | |||
64dced3dc8 | |||
b2b2c12cdf | |||
91c413ecbf | |||
2bd45fea0d | |||
c73c5f1eef | |||
7426ff6f9c | |||
0e465b0820 | |||
19b62a4370 | |||
ed997ab417 | |||
376a0f87ef | |||
c2a30bc4c1 | |||
9532bc7405 | |||
0351abcb92 | |||
a2605594d3 | |||
f2176428bc | |||
91a5a24b1b | |||
d94db19410 | |||
515672c170 | |||
8a23276748 | |||
a7a4004f53 | |||
22d10b5a69 | |||
7809cc8a5e | |||
bdf4a01b3b | |||
c71817c2e8 | |||
c22d2c7393 | |||
e794ced82a | |||
e1b7ba1204 | |||
f82ad15689 | |||
f8403c5f42 | |||
4d579ef8c1 | |||
b6c3949d41 | |||
c10b1a7920 | |||
9c3cee22a6 | |||
a41d270743 | |||
ebbbab71fb | |||
a9a930b37b | |||
b5eabcb311 | |||
7ed4628597 | |||
827991d7ac | |||
56af4a0b66 | |||
3d8154d87f | |||
d56afb17c2 | |||
5084dc1579 | |||
d3129d81ab | |||
e8138099cb | |||
fe9fb27679 | |||
692897c9bf | |||
85e8b631a1 | |||
9c50b29d22 | |||
de80024445 | |||
5a43c23b83 | |||
4458be2763 | |||
0f5c1d6433 | |||
4e9c63d8aa | |||
7e3431a4c0 | |||
79efa46226 | |||
f9507ae4b7 | |||
8434f192c9 | |||
d476a36f24 | |||
3a3552f154 | |||
466a83e407 | |||
93cc9f435b | |||
62a6612a79 | |||
f2016d1b71 | |||
715ad22409 | |||
1aaf16e8b7 | |||
3a554e1c84 | |||
cf99826386 | |||
9b18c94ddd | |||
985dd2998a | |||
f46fafa4ed | |||
4ba938d17f | |||
0f093a1087 | |||
4ac414c691 | |||
4391b33fbc | |||
826b244bae | |||
eac6129fb3 | |||
ed3aeb60d8 | |||
6c16aedadd | |||
d1fc5b7796 | |||
4e107840a1 | |||
8c7890fcbc | |||
15e7600ae4 | |||
57cd65115d | |||
990a9dcb71 | |||
a8bca6727b | |||
8b6f09c7d5 | |||
1ec7dfcc95 | |||
0bc2daf4ad | |||
ed0c6c90a7 | |||
2e674aa2d0 | |||
c9ceaff648 | |||
dfdd1de8e8 | |||
77196fdcca | |||
99d31eb0b5 | |||
8171f20309 | |||
8d42eac029 | |||
9d1e3f2d60 | |||
f9cc283477 | |||
89d3dd7d0c | |||
7f0d9572e3 | |||
69f67649f3 | |||
b1d705487a | |||
bbfe11f557 | |||
7116566519 | |||
2ea88cabce | |||
846a85e939 | |||
9f1f247484 | |||
1efc713ae3 | |||
ec7e843024 | |||
afbd4a0f60 | |||
446b855d03 | |||
7186daeb1c | |||
4fbeae6f7e | |||
b96aae6780 | |||
d3d8e3b766 | |||
f1fb7607b5 | |||
048c0053f5 | |||
a7c85af7cc | |||
6822f605d1 | |||
64aced5d8d | |||
bdc0d0a2a6 | |||
8e57996b9c | |||
9d0e30f728 | |||
b556ee3c30 | |||
cd4591501f | |||
1989b886f5 | |||
6e9e0dffe1 | |||
8f07df8c43 | |||
f35efa4a05 | |||
79442aa60e | |||
bc587252b4 | |||
1824e05393 | |||
e0637ce2a2 | |||
7e1e54a63e | |||
42ec6eeb95 | |||
5c48a83547 | |||
e165e9d8f7 | |||
f97d06873e | |||
959da1a423 | |||
081c517e21 | |||
dc41cd5f4a | |||
893c3028a1 | |||
13153d341b | |||
71fb5a7ca3 | |||
387a7072f9 | |||
65adfe8e16 | |||
efff62d21e | |||
4e36b2fb9e | |||
fda64ee225 | |||
b4b03d3505 | |||
ca3fd66ad3 | |||
1bb3a4330e | |||
0c9c54f481 | |||
db81cd38b8 | |||
4f72107c98 | |||
dfd0273a2c | |||
508cb47c1e | |||
f155f0bc22 | |||
8ddbc72644 | |||
91b1cfb08c | |||
cd6ea369d7 | |||
95665357f5 | |||
8cc7553acd | |||
938c47f950 | |||
eb079b9699 | |||
98e87aa772 | |||
d0751b1f2c | |||
4f81baf02f | |||
3e51996286 | |||
bf1c8b3fbf | |||
e051ad1e06 | |||
6977e1e7bd | |||
aaf2611b82 | |||
4129eb85c3 | |||
180997be4a | |||
6af3888fda | |||
cb4b17e1d5 | |||
3a424c5726 | |||
3f6a74b5bd | |||
ce325cf3d0 | |||
b4f5979354 | |||
bbf8219504 | |||
e58fc05a7d | |||
e17da9f060 | |||
b134f3c935 | |||
1ce6abc6e4 | |||
64dda6172e | |||
f623ce13ba | |||
ea289aff48 | |||
2dbefce8db | |||
1dce7601cf | |||
aecf3eede2 | |||
3dfd71eb03 | |||
8d6b2bdee6 | |||
afb121c72e | |||
e09669fb73 | |||
96490c6c3e | |||
2a75965449 | |||
8adf762acc | |||
a13c44d2d6 | |||
718a3b7a3f | |||
5992629869 | |||
43922d8192 | |||
49dffce0d0 | |||
e4d2422974 | |||
0ffbe9bb58 | |||
12869d5dca | |||
5de59917cd | |||
89a430fe5a | |||
e4bf6effe1 | |||
d833b439c7 | |||
af6f90f9cb | |||
6e182a9414 | |||
6822269c84 | |||
1812e27e1e | |||
b7d9cec76a | |||
e225af87fb | |||
58dc418e87 | |||
ab62d9bafc | |||
35a70fd5c1 | |||
072b529c9c | |||
979060da69 | |||
410958a2a7 | |||
76220d811d | |||
5919719f3e | |||
20a6d670ca | |||
b76a350d7b | |||
cdb74d9677 | |||
905f2c62c1 | |||
61fab326c3 | |||
237342254f | |||
a339c8e8ff | |||
f98edaff58 | |||
d5a5962ee2 | |||
5ba5461a80 | |||
0f4c2756ec | |||
6111325402 | |||
b772f92c22 | |||
eb27d92383 | |||
f6c44f3d0c | |||
7bca441acd | |||
25689d6345 | |||
f675996e60 | |||
cb0d0012c9 | |||
1400bab1e1 | |||
cb2a3d65d8 | |||
6bafd28e3e | |||
5e4dbd6adf | |||
0a32d9ed9d | |||
6b38073372 | |||
d2b410efe8 | |||
7c5b482392 | |||
874700ecb4 | |||
1060651116 | |||
afe8df823f | |||
6fb1e12ca6 | |||
38524e70af | |||
94048ba2fe | |||
960e7a2466 | |||
513c0839a5 | |||
848e99b4af | |||
977b9af923 | |||
77965c614a | |||
780e469f82 | |||
65dfff8eb0 | |||
951ae86520 | |||
920f01cf45 | |||
8be2bb2083 | |||
203a70bdbd | |||
b1cb57ab48 | |||
c6954816be | |||
396653c9a6 | |||
7df7428acf | |||
204318ef44 | |||
f9218366fa | |||
3abd3cf835 | |||
a0cf39811c | |||
ac69aebf4e | |||
07a195ab05 | |||
867a5d4d69 | |||
7abe6af068 | |||
efdd1b1c68 | |||
1817da3ebc | |||
76616fcab9 | |||
2a6d271d2d | |||
66c61e581d | |||
de0dcc79f4 | |||
14984b3199 | |||
1c967a0431 | |||
ab78d18491 | |||
30254eb527 | |||
dbce751225 | |||
91ebd4193e | |||
48e31ca0f1 | |||
528e676d4d | |||
b3cde0cdc8 | |||
88ae8848de | |||
31f7c408d4 | |||
a0dc16535d | |||
67caca8171 | |||
48492bf405 | |||
ed2e1193cb | |||
74b7d9478f | |||
00eff6fa85 | |||
96249760fd | |||
011cf4356b | |||
da896c79f2 | |||
33a4c10f7a | |||
0a30deb7e2 | |||
e055eb3542 | |||
00154ef899 | |||
fc99f7f6ab | |||
b0fe54d034 | |||
22fa90d785 | |||
0240e95621 | |||
3a2130eb48 | |||
4543bbc49f | |||
433e23022a | |||
d141fff4c1 | |||
1894893a6f | |||
d957227d40 | |||
725ecc75a6 | |||
30e2232b71 | |||
b8bb87390f | |||
ab82ed3fac | |||
cbaf4d6941 | |||
f74586c94c | |||
d1991ddc7d | |||
8cc184c7e7 | |||
8ac781bd8b | |||
b47df1d71d | |||
f747b89a5d | |||
f2a9529e29 | |||
44546c4816 | |||
57ecc71ebe | |||
365f983c2d | |||
db9458b4ad | |||
b7aedad589 | |||
86f4f940c7 | |||
986c13f4c7 | |||
01fc001990 | |||
7dbfe8533c | |||
4c5568f807 | |||
d3ecfbf4e7 | |||
367deb0897 | |||
0fda481317 | |||
677ac1bc4c | |||
7ebdfc1866 | |||
ea4b883b3f | |||
2b46473cb0 | |||
2c965f7cfb | |||
79f170ff01 | |||
523765188a | |||
384f43748b | |||
629e247570 | |||
2f6ba72cea | |||
41b598936f | |||
cbd65805f8 | |||
05bf6da6ce | |||
89b11a6112 | |||
444cfb58b1 | |||
cecb8d7dba | |||
ce71447928 | |||
ecf1143524 | |||
cd6d3815d6 | |||
88008ad40b | |||
6583acc129 | |||
344b6be624 | |||
c7c949eead | |||
d6447bb437 | |||
a25186b5ea | |||
939d9b0d45 | |||
b02d70df38 | |||
5facbb1b35 | |||
9f02c98d1b | |||
bc4c073b43 | |||
cff204ca46 | |||
fa70f85acb | |||
e8354e59c9 | |||
a9e99a82c5 | |||
0b56beea89 | |||
9b4be311e6 | |||
354c98bbf0 | |||
89126185eb | |||
bed2d7f5f6 | |||
de640bb005 | |||
6ca49d4865 | |||
26bbab959f | |||
b56ac216ce | |||
03050dd389 | |||
5db1ed2baf | |||
9a8c2103d4 | |||
fd07ec7cb8 | |||
d0e3be5ce6 | |||
43c8962b0f | |||
6427a6ec09 | |||
933a75bf57 | |||
eb69ea3cf1 | |||
1b07ef795e | |||
402ac5a469 | |||
8a65b6a0f4 | |||
824af776d9 | |||
dd955c5e59 | |||
260c8159c7 | |||
d21b09d547 | |||
1608b7a93f | |||
26075bad79 | |||
deacaa94be | |||
c3255cb00d | |||
1619380fdc | |||
3a6011aad4 | |||
b6ac14880b | |||
1c40252112 | |||
42523d1aa3 | |||
bf94306e25 | |||
cc20132a1f | |||
afa81c81cd | |||
e7f8b365cd | |||
dfc3dafe37 | |||
d47891b19c | |||
bc1994c31b | |||
ae70b53074 | |||
765f34f3f4 | |||
46f212f1d9 | |||
c564eda438 | |||
9baf26ce56 | |||
c6c50bb3c5 | |||
58622fa5b6 | |||
ed7171e8cc | |||
db514b6f4f | |||
9f6ff9f0ee | |||
db3b04c90b | |||
377d135667 | |||
2eb4a9fa3f | |||
36c5ebbd78 | |||
a6ab5edc02 | |||
43b690c1a2 | |||
05c4fdd99d | |||
97c2c18ca3 | |||
eeb0ddeed5 | |||
83fc9a29a4 | |||
f980dcafd5 | |||
e2bb75a723 | |||
1b232ef8f3 | |||
e2cae77ecd | |||
32ca0a827a | |||
7a756aeaf2 | |||
2e74f8242c | |||
be512ee2b3 | |||
36f8572dfe | |||
e2434abc96 | |||
c77bbdae5e | |||
7784a815a3 | |||
3fb89d89d1 | |||
4d4903e7ec | |||
0926190a70 | |||
4621dbbade | |||
1adc0977e7 | |||
ee07661411 | |||
1d718077f9 | |||
6532ed61e0 | |||
9036751cbe | |||
81519dcca4 | |||
86e411df12 | |||
3f8aee2d84 | |||
06b66fd04c | |||
7c8f101868 | |||
325f818494 | |||
f22d6ed689 | |||
20f8172e44 | |||
65aeb7aac4 | |||
50e4ef0330 | |||
cbed880961 | |||
b42fe67f89 | |||
edcbb2633e | |||
4fa3f59675 | |||
5cc0cdb701 | |||
5a32b94da1 | |||
a8c6339bfc | |||
e3ec786c41 | |||
198b65ab29 | |||
1c2d9c4124 | |||
b4db5a5b78 | |||
fb0a8bc9da | |||
9dc7792b9f | |||
bc524baa19 | |||
6484a99ccb | |||
5c4d526660 | |||
7db69ccf13 | |||
435730095c | |||
b1cb08a815 | |||
1fbc52372c | |||
1e5463db21 | |||
ca9b38e141 | |||
7d62e9e0fa | |||
522f9a7345 | |||
5d0928f2aa | |||
5a0a00f296 | |||
4a6974415f | |||
643ab39fb8 | |||
a9446fa1e4 | |||
e403df0094 | |||
85227cd335 | |||
a4eeeed7ea | |||
6ef869b6c5 | |||
ecbc376360 | |||
59a54534e7 | |||
e5cc461f4a | |||
b10f5f5abc | |||
0ae3b2ad61 | |||
375d345325 | |||
551e9801b2 | |||
23e9de7630 | |||
4be017508b | |||
d4aceca201 | |||
bcf4295086 | |||
44035fba50 | |||
6a988d8297 | |||
98cfa74e88 | |||
887b99c63b | |||
6111c3be7c | |||
ae43b232db | |||
5fc43ada06 | |||
cb1033fd19 | |||
075945a858 | |||
701c4a0237 | |||
0756d354bb | |||
53b470118d | |||
e02745c89c | |||
9164ea8111 | |||
89bd1882c0 | |||
a15a716066 | |||
c5e55e7f2e | |||
19ec74de4d | |||
4fdff55d0e | |||
1dc2a6951a | |||
70048ad796 | |||
d50463a2c4 | |||
883cfce04c | |||
8e7f48339b | |||
934f6fe726 | |||
3030131322 | |||
f17ea16a7d | |||
867a4c06ec | |||
5b714d0b10 | |||
e45d836e88 | |||
215f1bc80b | |||
c42c59d9ac | |||
6cc27f7e48 | |||
5e06bad941 | |||
41ae6eedb3 | |||
dd2a936cc7 | |||
e52fbfd1f2 | |||
cc259c8122 | |||
50b946decb | |||
70bb77e11e | |||
459d0f711e | |||
0d8a9634e3 | |||
d1a7c4922b | |||
551d71750a | |||
189b156854 | |||
0d2b1158f2 | |||
0255878ced | |||
2d3465c59d | |||
bf5ca4c4b4 | |||
73c6793c66 | |||
3cf4d8ec1f | |||
71ab395bff | |||
2c33b9a9c6 | |||
c0d9204daf | |||
12b7200f9e | |||
2edd4e19f8 | |||
551e2a2938 | |||
9d37aed199 | |||
41075c974e | |||
672777dd5e | |||
527e4550d6 | |||
f1c5e18cd9 | |||
084fa11984 | |||
a000f27092 | |||
c054be6dac | |||
d44b5e7ba3 | |||
a2323d1496 | |||
dd5301a10d |
@ -1,13 +0,0 @@
|
||||
### Steps to reproduce
|
||||
1.
|
||||
2.
|
||||
3.
|
||||
|
||||
### Expected behaviour
|
||||
|
||||
|
||||
### Observed behaviour
|
||||
|
||||
|
||||
### Additional data (ticket URL, log, timestamp, stack trace etc.)
|
||||
|
6
.gitmodules
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
[submodule "app-vmmgr"]
|
||||
path = apk/vmmgr
|
||||
url = ssh://git@git.spotter.cz:2222/Spotter-Cluster/vmmgr.git
|
||||
[submodule "spoc"]
|
||||
path = apk/spoc
|
||||
url = ssh://git@git.spotter.cz:2222/Spotter-Cluster/spoc.git
|
@ -1,32 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# For production builds change to DEBUG=0 or comment the line entirely
|
||||
export DEBUG=1
|
||||
|
||||
SOURCE_DIR=$(realpath $(dirname "${0}"))
|
||||
|
||||
# Install shared packages and perform OS customization
|
||||
${SOURCE_DIR}/basic.sh
|
||||
|
||||
# Install applications
|
||||
${SOURCE_DIR}/ckan.sh
|
||||
# ${SOURCE_DIR}/crisiscleanup.sh
|
||||
# ${SOURCE_DIR}/cts.sh
|
||||
${SOURCE_DIR}/gnuhealth.sh
|
||||
${SOURCE_DIR}/kanboard.sh
|
||||
${SOURCE_DIR}/mifosx.sh
|
||||
${SOURCE_DIR}/motech.sh
|
||||
${SOURCE_DIR}/opendatakit-build.sh
|
||||
${SOURCE_DIR}/opendatakit.sh
|
||||
${SOURCE_DIR}/openmapkit.sh
|
||||
${SOURCE_DIR}/pandora.sh
|
||||
${SOURCE_DIR}/sahana.sh
|
||||
${SOURCE_DIR}/sambro.sh
|
||||
${SOURCE_DIR}/seeddms.sh
|
||||
${SOURCE_DIR}/sigmah.sh
|
||||
${SOURCE_DIR}/ushahidi.sh
|
||||
|
||||
# Perform cleanup only if DEBUG environment variable is not set
|
||||
if [ ${DEBUG:-0} -eq 0 ]; then
|
||||
${SOURCE_DIR}/zz-cleanup.sh
|
||||
fi
|
87
README.md
@ -1,87 +0,0 @@
|
||||
This is the main repository containing all installation scripts, configuration and customization of operating system all application present in Spotter Cluster virtual machine.
|
||||
|
||||
## Virtual machine specifications
|
||||
- **Memory:** 4 GB
|
||||
- **CPU:** 1 processor, 2 cores
|
||||
- **Hard Disk:** SCSI, 60 GB
|
||||
|
||||
## Operating system installation
|
||||
|
||||
Download **Alpine Virtual 3.7.0 x86_64** from <https://alpinelinux.org/downloads/> and boot from it. At the login prompt, use the root user without password to log in.
|
||||
|
||||
```
|
||||
# Set up interfaces (leave the default choices)
|
||||
setup-interfaces
|
||||
ifup eth0
|
||||
|
||||
# Download and launch the setup script
|
||||
wget dl.dasm.cz/alpine.sh
|
||||
sh alpine.sh
|
||||
```
|
||||
|
||||
The script will perform the bare Alpine linux installation into VM using LUKS-on-LVM. The default disk encryption password is `password`. No root password is set.
|
||||
|
||||
## Application installation
|
||||
|
||||
### First time setup
|
||||
```
|
||||
# Install git
|
||||
apk --no-cache add git
|
||||
|
||||
# Clone the repository
|
||||
git clone https://gitlab.dasm.cz:8443/Spotter-Cluster/Spotter-Cluster.git
|
||||
|
||||
# Enter the repository directory
|
||||
cd Spotter-Cluster
|
||||
|
||||
# Optional: Edit the install sequence script
|
||||
vi 00-install.sh
|
||||
|
||||
# Launch the script
|
||||
./00-install.sh
|
||||
```
|
||||
|
||||
### Resuming from a snapshot
|
||||
Assumes that the repository has already been cloned.
|
||||
```
|
||||
# Enter the repository directory
|
||||
cd Spotter-Cluster
|
||||
|
||||
# Update repository
|
||||
git pull
|
||||
|
||||
# Optional: Edit the install sequence script
|
||||
vi 00-install.sh
|
||||
|
||||
# Launch the script
|
||||
./00-install.sh
|
||||
```
|
||||
|
||||
## Port assignment
|
||||
|
||||
| Application | Internal Port | HTTP Port | HTTPS Port |
|
||||
|-----------------|------------------:|----------:|-----------:|
|
||||
| ActiveMQ | 61616 (ActiveMQ) | N/A | N/A |
|
||||
| CKAN | 8003 (HTTP) | 8803 | 8403 |
|
||||
| CKAN Datapusher | 8004 (HTTP) | N/A | N/A |
|
||||
| Crisis Cleanup | 8005 (HTTP) | 8805 | 8405 |
|
||||
| CTS | 8006 (HTTP) | 8806 | 8406 |
|
||||
| GNU Health | 8008 (HTTP) | 8808 | 8408 |
|
||||
| KanBoard | 8009 (HTTP) | 8809 | 8409 |
|
||||
| MariaDB | 3306 (MySQL) | N/A | N/A |
|
||||
| Mifos X | 8012 (HTTP) | 8812 | 8412 |
|
||||
| Motech | 8013 (HTTP) | 8813 | 8413 |
|
||||
| ODK Aggregate | 8015, 8016 (HTTP) | 8815 | 8415 |
|
||||
| ODK Build | 8017 (HTTP) | 8817 | 8417 |
|
||||
| OpenMapKit | 8007 (HTTP) | 8807 | 8407 |
|
||||
| Pan.do/ra | 8002 (HTTP) | 8802 | 8402 |
|
||||
| Postfix | 25 (SMTP) | N/A | N/A |
|
||||
| Postgres | 5432 (Postgres) | N/A | N/A |
|
||||
| RabbitMQ | 5672 (AMQP) | N/A | N/A |
|
||||
| Redis | 6379 (Redis) | N/A | N/A |
|
||||
| Sahana | 8001 (HTTP) | 8801 | 8401 |
|
||||
| SAMBRO | 8001 (HTTP) | 8899 | 8499 |
|
||||
| SeedDMS | 8010 (HTTP) | 8810 | 8410 |
|
||||
| Sigmah | 8011 (HTTP) | 8811 | 8011 |
|
||||
| Solr | 8983 (HTTP) | N/A | N/A |
|
||||
| Ushahidi | 8014 (HTTP) | 8814 | 8414 |
|
15
activemq.sh
@ -1,15 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
SOURCE_DIR=$(realpath $(dirname "${0}"))/activemq
|
||||
|
||||
# Build Docker container
|
||||
docker build -t activemq ${SOURCE_DIR}
|
||||
|
||||
# Configure ActiveMQ
|
||||
mkdir -p /srv/activemq/data
|
||||
chown -R 61616:61616 /srv/activemq/data
|
||||
|
||||
# Configure Solr service
|
||||
cp ${SOURCE_DIR}/etc/init.d/activemq /etc/init.d/activemq
|
||||
rc-update add activemq
|
||||
service activemq start
|
@ -1,35 +0,0 @@
|
||||
FROM alpine:3.7
|
||||
MAINTAINER Disassembler <disassembler@dasm.cz>
|
||||
|
||||
RUN \
|
||||
# Install Java 1.8 JRE
|
||||
apk --no-cache add openjdk8-jre-base paxctl \
|
||||
# Fix grsec attributes to loosen memory protection restrictions
|
||||
&& paxctl -cm /usr/lib/jvm/java-1.8-openjdk/jre/bin/java \
|
||||
&& paxctl -cm /usr/lib/jvm/java-1.8-openjdk/bin/java \
|
||||
# Cleanup
|
||||
&& apk --no-cache del paxctl
|
||||
|
||||
RUN \
|
||||
# Download and install ActiveMQ
|
||||
wget http://archive.apache.org/dist/activemq/5.15.2/apache-activemq-5.15.2-bin.tar.gz -O /tmp/activemq.tgz \
|
||||
&& tar xf /tmp/activemq.tgz -C /srv \
|
||||
&& mv /srv/apache-activemq-5.15.2 /srv/activemq \
|
||||
&& rm -f /tmp/activemq.tgz \
|
||||
# Create OS user
|
||||
&& addgroup -S -g 61616 activemq \
|
||||
&& adduser -S -u 61616 -h /srv/activemq -s /bin/false -g activemq -G activemq activemq \
|
||||
&& mkdir /srv/activemq/tmp \
|
||||
&& chown activemq:activemq /srv/activemq/tmp \
|
||||
# Configure Java heap size
|
||||
&& sed -i "s/-Xms64M -Xmx1G/-Xms32M -Xmx256M/" /srv/activemq/bin/env \
|
||||
# Make start/stop script visible globally
|
||||
&& ln -s /srv/activemq/bin/activemq /usr/local/bin/activemq
|
||||
|
||||
COPY docker/ /
|
||||
|
||||
VOLUME ["/srv/activemq/data"]
|
||||
EXPOSE 61616
|
||||
|
||||
USER activemq
|
||||
CMD ["activemq", "console"]
|
@ -1,20 +0,0 @@
|
||||
#!/sbin/openrc-run
|
||||
|
||||
description="ActiveMQ docker container"
|
||||
|
||||
depend() {
|
||||
need docker net
|
||||
use dns logger netmount
|
||||
}
|
||||
|
||||
start() {
|
||||
/usr/bin/docker run -d --rm \
|
||||
--name activemq \
|
||||
-h activemq \
|
||||
-v /srv/activemq/data:/srv/activemq/data \
|
||||
activemq
|
||||
}
|
||||
|
||||
stop() {
|
||||
/usr/bin/docker stop activemq
|
||||
}
|
100
alpine.sh
@ -1,100 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Prerequisites
|
||||
# setup-interfaces
|
||||
# ifup eth0
|
||||
|
||||
# Set up repositories
|
||||
cat <<EOF >/etc/apk/repositories
|
||||
http://dl-cdn.alpinelinux.org/alpine/v3.7/main
|
||||
http://dl-cdn.alpinelinux.org/alpine/v3.7/community
|
||||
#http://dl-cdn.alpinelinux.org/alpine/edge/main
|
||||
#http://dl-cdn.alpinelinux.org/alpine/edge/community
|
||||
#http://dl-cdn.alpinelinux.org/alpine/edge/testing
|
||||
EOF
|
||||
|
||||
# Install disk management tools
|
||||
apk --no-cache add lvm2 cryptsetup e2fsprogs syslinux
|
||||
|
||||
# Create disk partitions
|
||||
cat <<EOF | fdisk /dev/sda
|
||||
n
|
||||
p
|
||||
1
|
||||
|
||||
+100m
|
||||
a
|
||||
1
|
||||
n
|
||||
p
|
||||
2
|
||||
|
||||
|
||||
t
|
||||
2
|
||||
8e
|
||||
w
|
||||
EOF
|
||||
|
||||
# Set up partition encryption
|
||||
echo -n 'password' | cryptsetup -q luksFormat /dev/sda2
|
||||
echo -n 'password' | cryptsetup open --type luks /dev/sda2 system
|
||||
|
||||
# Set up LVM
|
||||
pvcreate /dev/mapper/system
|
||||
vgcreate vg0 /dev/mapper/system
|
||||
lvcreate -L 4G vg0 -n swap
|
||||
lvcreate -l 100%FREE vg0 -n root
|
||||
|
||||
# Format
|
||||
mkfs.ext4 -m0 /dev/sda1
|
||||
mkfs.ext4 -m1 /dev/vg0/root
|
||||
mkswap /dev/vg0/swap
|
||||
|
||||
# Mount
|
||||
mount -t ext4 /dev/vg0/root /mnt
|
||||
mkdir /mnt/boot
|
||||
mount -t ext4 /dev/sda1 /mnt/boot
|
||||
|
||||
# Install Alpine linux
|
||||
setup-disk -m sys /mnt
|
||||
|
||||
# Update boot-time volume information
|
||||
BOOT_UUID=$(blkid /dev/sda1 | awk '{print $2}' | tr -d '"')
|
||||
cat <<EOF >/mnt/etc/fstab
|
||||
/dev/vg0/root / ext4 rw,noatime,data=ordered 0 1
|
||||
${BOOT_UUID} /boot ext4 rw,noatime,data=ordered 0 2
|
||||
/dev/vg0/swap swap swap defaults 0 0
|
||||
EOF
|
||||
echo "system /dev/sda2 none luks" >/mnt/etc/crypttab
|
||||
|
||||
# Rebuild initfs
|
||||
sed -i 's/lvm/lvm cryptsetup/' /mnt/etc/mkinitfs/mkinitfs.conf
|
||||
mkinitfs -c /mnt/etc/mkinitfs/mkinitfs.conf -b /mnt $(ls /mnt/lib/modules)
|
||||
|
||||
# Update extlinux
|
||||
sed -i 's/rootfstype=ext4/rootfstype=ext4 cryptroot=\/dev\/sda2 cryptdm=system/' /mnt/etc/update-extlinux.conf
|
||||
chroot /mnt update-extlinux
|
||||
|
||||
# Set time zone
|
||||
chroot /mnt setup-timezone -z Europe/Prague
|
||||
|
||||
# Set hostname
|
||||
echo 'vm' >/mnt/etc/hostname
|
||||
sed -i 's/localhost/vm/' /mnt/etc/network/interfaces
|
||||
sed -i 's/localhost /vm localhost /' /mnt/etc/hosts
|
||||
|
||||
# Enable services on boot
|
||||
ln -s /etc/init.d/networking /mnt/etc/runlevels/boot
|
||||
ln -s /etc/init.d/urandom /mnt/etc/runlevels/boot
|
||||
|
||||
# Install bootloader to MBR
|
||||
dd bs=440 count=1 conv=notrunc if=/mnt/usr/share/syslinux/mbr.bin of=/dev/sda
|
||||
|
||||
# Unmount and shut down
|
||||
umount /mnt/boot
|
||||
umount /mnt
|
||||
swapoff -a
|
||||
vgchange -a n
|
||||
cryptsetup luksClose system
|
||||
poweroff
|
28
apk/py3-secure-cookie/APKBUILD
Normal file
@ -0,0 +1,28 @@
|
||||
# Maintainer: Disassembler <disassembler@dasm.cz>
|
||||
pkgname=py3-secure-cookie
|
||||
_pkgname=secure-cookie
|
||||
pkgver=0.1.0
|
||||
pkgrel=0
|
||||
pkgdesc="Secure cookie and session interface for WSGI applications"
|
||||
url="https://secure-cookie.readthedocs.io/"
|
||||
arch="noarch"
|
||||
license="MIT"
|
||||
depends="python3"
|
||||
makedepends="py3-setuptools"
|
||||
checkdepends="py3-pytest py3-werkzeug"
|
||||
source="https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz"
|
||||
builddir="$srcdir/$_pkgname-$pkgver"
|
||||
|
||||
build() {
|
||||
python3 setup.py build
|
||||
}
|
||||
|
||||
package() {
|
||||
python3 setup.py install --prefix=/usr --root="$pkgdir"
|
||||
}
|
||||
|
||||
check() {
|
||||
PYTHONPATH=$PWD/build/lib pytest
|
||||
}
|
||||
|
||||
sha512sums="2e57dba6f73ceb03eda33c804dbe2277c9fe700dd1be219bb3d8d43a5c9105c2323fb6b28d74d3a1dfc8fbbd938b91ab54d3e1bac1dc74490335b1d27e43b55a secure-cookie-0.1.0.tar.gz"
|
1
apk/spoc
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit 8c22df2e71de329a286e75af9bff69e82876db35
|
1
apk/vmmgr
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit 1c810db9472f50bd9dbe1e0f38df72590b120124
|
55
basic.sh
@ -1,55 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
SOURCE_DIR=$(realpath $(dirname "${0}"))/basic
|
||||
|
||||
# Install packages
|
||||
apk --no-cache add --virtual .useful curl git file htop libressl openssh-server openssh-sftp-server
|
||||
apk --no-cache add docker gettext kbd-misc python2 nginx
|
||||
|
||||
# Copy profile files and settings
|
||||
mkdir -p /root/.config/htop /root/.ssh
|
||||
cp ${SOURCE_DIR}/root/.profile /root/.profile
|
||||
cp ${SOURCE_DIR}/root/.ssh/authorized_keys /root/.ssh/authorized_keys
|
||||
cp ${SOURCE_DIR}/root/.config/htop/htoprc /root/.config/htop/htoprc
|
||||
|
||||
# Copy boot configuration
|
||||
cp ${SOURCE_DIR}/boot/extlinux.conf /boot/extlinux.conf
|
||||
cp ${SOURCE_DIR}/boot/spotter.txt /boot/spotter.txt
|
||||
cp ${SOURCE_DIR}/etc/inittab /etc/inittab
|
||||
|
||||
# Enable support for Czech characters
|
||||
cp ${SOURCE_DIR}/etc/rc.conf /etc/rc.conf
|
||||
cp ${SOURCE_DIR}/etc/conf.d/consolefont /etc/conf.d/consolefont
|
||||
|
||||
# Set legal banner with URL
|
||||
cp ${SOURCE_DIR}/etc/issue.template /etc/issue.template
|
||||
cp ${SOURCE_DIR}/sbin/issue-gen /sbin/issue-gen
|
||||
>/etc/motd
|
||||
|
||||
# Configure NTP client
|
||||
cp ${SOURCE_DIR}/etc/conf.d/ntpd /etc/conf.d/ntpd
|
||||
|
||||
# Create a self-signed certificate
|
||||
mkdir /etc/ssl/private
|
||||
openssl req -x509 -new -out /etc/ssl/certs/services.pem -keyout /etc/ssl/private/services.key -nodes -days 3654 -subj "/C=CZ/CN=$(hostname -f)"
|
||||
chmod 640 /etc/ssl/private/services.key
|
||||
|
||||
# Configure nginx
|
||||
mkdir /etc/nginx/apps
|
||||
cp ${SOURCE_DIR}/etc/nginx/nginx.conf /etc/nginx/nginx.conf
|
||||
cp ${SOURCE_DIR}/etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf
|
||||
|
||||
# Copy Portal resources
|
||||
cp ${SOURCE_DIR}/usr/local/bin/portal-app-manager /usr/local/bin/portal-app-manager
|
||||
cp -r ${SOURCE_DIR}/srv/portal /srv/portal
|
||||
|
||||
# Configure services
|
||||
for SERVICE in consolefont crond nginx ntpd sshd; do
|
||||
rc-update add ${SERVICE} boot
|
||||
service ${SERVICE} start
|
||||
done
|
||||
|
||||
# Configure Docker service
|
||||
cp ${SOURCE_DIR}/etc/init.d/docker /etc/init.d/docker
|
||||
rc-update add docker
|
||||
service docker start
|
@ -1,9 +0,0 @@
|
||||
DEFAULT vm
|
||||
PROMPT 0
|
||||
ALLOWOPTIONS 0
|
||||
NOESCAPE 1
|
||||
DISPLAY spotter.txt
|
||||
LABEL vm
|
||||
LINUX vmlinuz-virthardened
|
||||
INITRD initramfs-virthardened
|
||||
APPEND root=/dev/vg0/root modules=sd-mod,usb-storage,ext4 pax_nouderef quiet rootfstype=ext4 cryptroot=/dev/sda2 cryptdm=system
|
@ -1,4 +0,0 @@
|
||||
|
||||
|
||||
Startuji SpotterVM...
|
||||
|
@ -1 +0,0 @@
|
||||
NTPD_OPTS="-N -p tik.cesnet.cz -p tak.cesnet.cz"
|
@ -1,42 +0,0 @@
|
||||
#!/sbin/openrc-run
|
||||
# Copyright 1999-2013 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
command="${DOCKERD_BINARY:-/usr/bin/dockerd}"
|
||||
pidfile="${DOCKER_PIDFILE:-/run/${RC_SVCNAME}.pid}"
|
||||
command_args="-p \"${pidfile}\" ${DOCKER_OPTS}"
|
||||
DOCKER_LOGFILE="${DOCKER_LOGFILE:-/var/log/${RC_SVCNAME}.log}"
|
||||
DOCKER_ERRFILE="${DOCKER_ERRFILE:-${DOCKER_LOGFILE}}"
|
||||
DOCKER_OUTFILE="${DOCKER_OUTFILE:-${DOCKER_LOGFILE}}"
|
||||
start_stop_daemon_args="--background \
|
||||
--stderr \"${DOCKER_ERRFILE}\" --stdout \"${DOCKER_OUTFILE}\""
|
||||
|
||||
grsecdir=/proc/sys/kernel/grsecurity
|
||||
|
||||
depend() {
|
||||
need sysfs
|
||||
}
|
||||
|
||||
start_pre() {
|
||||
checkpath -f -m 0644 -o root:docker "$DOCKER_LOGFILE"
|
||||
|
||||
for i in $disable_grsec; do
|
||||
if [ -e "$grsecdir/$i" ]; then
|
||||
einfo " Disabling $i"
|
||||
echo 0 > "$grsecdir/$i"
|
||||
fi
|
||||
done
|
||||
ulimit -n 1048576
|
||||
|
||||
# Having non-zero limits causes performance problems due to accounting overhead
|
||||
# in the kernel. We recommend using cgroups to do container-local accounting.
|
||||
ulimit -p unlimited
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
start_post() {
|
||||
until [ -e /var/run/docker.sock ]; do
|
||||
usleep 100000
|
||||
done
|
||||
}
|
@ -1,36 +0,0 @@
|
||||
|
||||
[1;32m _____ _ _ __ ____ __
|
||||
/ ____| | | | | \\ \\ / / \\/ |
|
||||
| (___ _ __ ___ | |_| |_ ___ _ _\\ \\ / /| \\ / |
|
||||
\\___ \\| '_ \\ / _ \\| __| __/ _ \\ '__\\ \\/ / | |\\/| |
|
||||
____) | |_) | (_) | |_| || __/ | \\ / | | | |
|
||||
|_____/| .__/ \\___/ \\__|\\__\\___|_| \\/ |_| |_|
|
||||
| |
|
||||
|_|[0m
|
||||
|
||||
|
||||
|
||||
|
||||
[1;33mUPOZORNĚNÍ:[0m Neoprávněný přístup k tomuto zařízení je zakázán.
|
||||
Musíte mít výslovné oprávnění k přístupu nebo konfiguraci tohoto zařízení.
|
||||
Neoprávněné pokusy a kroky k přístupu nebo používání tohoto systému mohou mít
|
||||
za následek občanské nebo trestní sankce.
|
||||
|
||||
|
||||
[1;33mCAUTION:[0m Unauthozired access to this device is prohibited.
|
||||
You must have explicit, authorized permission to access or configure this
|
||||
device. Unauthorized attempts and actions to access or use this system may
|
||||
result in civil or criminal penalties.
|
||||
|
||||
|
||||
|
||||
|
||||
Pro přístup k aplikacím otevřete URL [1mhttps://${URL}/[0m ve Vašem
|
||||
internetovém prohlížeči.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
[0;30m
|
@ -1,17 +0,0 @@
|
||||
server {
|
||||
listen [::]:80 default_server ipv6only=off;
|
||||
return 301 https://$host$request_uri;
|
||||
}
|
||||
|
||||
server {
|
||||
listen [::]:443 ssl http2 default_server ipv6only=off;
|
||||
|
||||
add_header Strict-Transport-Security "max-age=31536000;";
|
||||
|
||||
root /srv/portal;
|
||||
index index.html;
|
||||
|
||||
location / {
|
||||
try_files $uri $uri/ =404;
|
||||
}
|
||||
}
|
@ -1,2 +0,0 @@
|
||||
alias ll="ls -la"
|
||||
alias view="vi"
|
@ -1,2 +0,0 @@
|
||||
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILc3Mu7OlKrV7VqDQZ31vT3I3JJxtNNBiemUTRQVOZ3I Disassembler
|
||||
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDMLx88cP67gOmmwDj2vjnPZnZp4KT/aqAkIEVBasss073wtU+tHAia5qKB+PJau3WnUSid/ZVcwHNXgrXE69DS2ZlBQFFBCJdWKP1Pd528Ot66mw9FaZvxRLaeA60yxC9dTFD0WCyVJw3HSdkJf17NYTtKcPQcn5DGfrdPHX16C3KUxOJXveTBOiieWbkQ1uUCTYyfeR9Qj+RR0gPogK217dNxGd4F3PJ3hXPKWDVpSH9JBnpG64mab3krhb6/eMUnLPUUAtgF6b0vXWNahFlA3NsriQiJy5mroLQCL2feqfkGVKlbxpRwgkGOPph4UK6RgNehF7oPwni/zMQ2rjxbpIWredlOPNvU7F8BebiuU8K4/16tz6xRiSgYzpm9nTHvJaz3W12b8Co145zPcmIdRg5KCQDEf+xB7gfpK/uo3qmc7ddMtA4oqUztbAlpfW6qR+i4X5ed9LnWdMKoWeB5Xn52cbKuTvD1qmVWGm0IPF/r+hw7Gn97nyq1Oatn9LKTJaLZeaJ9b1nBGL56U5i+4hdZPema7tVgWEYfYKTq4hrKWdWwJjlpJjqZ2qLltJmkJMNji9Ve+xBe+nRjW9wNk7c7fDxPvJe45EbrqDQNFxXjw4CKOIIt/k6e/imrVf9S7Or4Vxi+OJCQLZYT8EPb/VUuPn0JhtpIlBvD3xCDjw== vampola.karel@gmail.com
|
@ -1,4 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
export URL=$(ip route get 1 | awk '{print $NF;exit}')
|
||||
envsubst </etc/issue.template >/etc/issue
|
@ -1,85 +0,0 @@
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: 'Calibri', 'Verdana', 'Tahoma', sans-serif;
|
||||
background-color: silver;
|
||||
color: black;
|
||||
line-height: 150%;
|
||||
margin: 25px 30px;
|
||||
}
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
h1, h2 {
|
||||
font-size: 150%;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
h2 a {
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
h2 img {
|
||||
float: right;
|
||||
margin-left: 10px;
|
||||
margin-bottom:10px;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
}
|
||||
|
||||
ul {
|
||||
margin-left: 30px;
|
||||
}
|
||||
|
||||
header {
|
||||
color: white;
|
||||
}
|
||||
|
||||
header h1 {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
header p {
|
||||
padding: 0px;
|
||||
margin: 0px;
|
||||
}
|
||||
|
||||
.c, .c2 {
|
||||
background-color: white;
|
||||
position: relative;
|
||||
min-width: 365px;
|
||||
max-width: 365px;
|
||||
width: 90%;
|
||||
float: left;
|
||||
min-height: 175px;
|
||||
margin-top: 13px;
|
||||
margin-right: 13px;
|
||||
border: solid 1px black;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.c {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.c2 {
|
||||
max-width: 765px;
|
||||
width: 95%;
|
||||
}
|
||||
|
||||
.ico {
|
||||
margin-right: 5px;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.cleaner {
|
||||
clear: both;
|
||||
}
|
Before ![]() (image error) Size: 5.4 KiB |
Before ![]() (image error) Size: 69 KiB |
Before ![]() (image error) Size: 17 KiB |
Before ![]() (image error) Size: 70 KiB |
Before ![]() (image error) Size: 12 KiB |
Before ![]() (image error) Size: 15 KiB |
Before ![]() (image error) Size: 6.4 KiB |
Before ![]() (image error) Size: 119 KiB |
Before ![]() (image error) Size: 42 KiB |
Before ![]() (image error) Size: 12 KiB |
Before ![]() (image error) Size: 48 KiB |
Before ![]() (image error) Size: 21 KiB |
Before ![]() (image error) Size: 36 KiB |
Before ![]() (image error) Size: 83 KiB |
Before ![]() (image error) Size: 101 KiB |
Before ![]() (image error) Size: 16 KiB |
Before ![]() (image error) Size: 7.9 KiB |
Before ![]() (image error) Size: 47 KiB |
Before ![]() (image error) Size: 6.1 KiB |
Before ![]() (image error) Size: 22 KiB |
Before ![]() (image error) Size: 21 KiB |
Before ![]() (image error) Size: 16 KiB |
Before ![]() (image error) Size: 13 KiB |
Before ![]() (image error) Size: 12 KiB |
Before ![]() (image error) Size: 32 KiB |
Before ![]() (image error) Size: 23 KiB |
Before ![]() (image error) Size: 53 KiB |
Before ![]() (image error) Size: 9.2 KiB |
Before ![]() (image error) Size: 17 KiB |
Before ![]() (image error) Size: 33 KiB |
Before ![]() (image error) Size: 4.3 KiB |
@ -1,306 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="cs">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="author" content="TS">
|
||||
<meta name="copyright" content="page is under CC BY-NC-ND 3.0 CZ">
|
||||
<meta name="generator" content="Spotter.ngo">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Cluster NGO</title>
|
||||
<link rel="icon" href="img/cluster_spotter.png" type="image/png">
|
||||
<link rel="stylesheet" href="css/style.css" type="text/css" media="screen">
|
||||
<script src="js/jquery-3.3.1.min.js" type="text/javascript"></script>
|
||||
<script src="js/script.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<h1>CLUSTER NGO</h1>
|
||||
<p>Sada softwarových nástrojů určená pro krizový management.</p>
|
||||
</header>
|
||||
|
||||
<div class="c c2" id="sahana-eden">
|
||||
<h2><a href="#"><img src="img/EDEN.png" alt="Sahana EDEN" title="Sahana EDEN">Sahana EDEN</a></h2>
|
||||
<p><strong>Registr kontaktů</strong> asociací, organizací, jednotek zaměstnanců, dobrovolníků, <strong>Registr prostředků</strong>, materiálních zdrojů určených pro činnost v krizových situacích, <strong>logistika</strong> krizového zboží ve skladištích, úkrytech, <strong>organizace lidských zdrojů</strong>, diobrovolníků, <strong>mapová vizualizace</strong> pro lokalizaci a popis krizové události a <strong>mnoho dalších funkcí</strong>.</p>
|
||||
<ul>
|
||||
<li><strong>Login:</strong> <span class="login"></span></li>
|
||||
<li><strong>Heslo:</strong> <span class="password"></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="c" id="sahana-eden-demo">
|
||||
<h2><a href="#"><img src="img/EDEN.png" alt="Sahana EDEN DEMO" title="Sahana EDEN DEMO">Sahana EDEN DEMO</a></h2>
|
||||
<p>Přístup určený k bezpečnému vyzkoušení aplikace. Zde můžete přidávat i mazat testovací data.</p>
|
||||
<ul>
|
||||
<li><strong>Login:</strong> <span class="login"></span></li>
|
||||
<li><strong>Heslo:</strong> <span class="password"></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="c" id="sambro">
|
||||
<h2><a href="#"><img src="img/EDEN.png" alt="Sahana EDEN SAMBRO" title="Sahana EDEN SAMBRO">Sahana EDEN SAMBRO</a></h2>
|
||||
<p>Samostatná instance Sahana EDEN s šablonou SAMBRO.</p>
|
||||
<ul>
|
||||
<li><strong>Login:</strong> <span class="login"></span></li>
|
||||
<li><strong>Heslo:</strong> <span class="password"></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="c" id="sambro-mobile">
|
||||
<h2><a href="#"><img src="img/EDEN.png" alt="SAMBRO Mobile" title="SAMBRO Mobile">SAMBRO Mobile</a></h2>
|
||||
<p>Mobilní klient k aplikaci Sahana EDEN.<br>
|
||||
<a href="https://itunes.apple.com/us/app/sambro-mobile/id1127251669"><img src="img/ios.png" class="ico" alt="IOS">IOS 6.0 a vyšší</a><br>
|
||||
<a href="https://play.google.com/store/apps/details?id=io.sahana.sambro.mobile"><img src="img/android.png" class="ico" alt="Android">Android 4.0 a vyšší</a>
|
||||
</p>
|
||||
<ul>
|
||||
<li><strong>URL:</strong> <span class="clienturl"></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="c" id="crisis-cleanup">
|
||||
<h2><a href="#"><img src="img/Crisis_Cleanup.png" alt="Crisis Cleanup" title="Crisis Cleanup">Crisis Cleanup</a></h2>
|
||||
<p><strong>Mapování krizové pomoci</strong> při odstraňování následků katastrof a koordinaci práce. Jde o majetek, ne o lidi.</p>
|
||||
<ul>
|
||||
<li><strong>Login:</strong> <span class="login"></span></li>
|
||||
<li><strong>Heslo:</strong> <span class="password"></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="c" id="ckan">
|
||||
<h2><a href="#"><img src="img/CKAN.png" alt="CKAN" title="CKAN">CKAN</a></h2>
|
||||
<p><strong>Repository</strong> management a datová analýza pro vytváření otevřených dat.</p>
|
||||
<ul>
|
||||
<li><strong>Login:</strong> <span class="login"></span></li>
|
||||
<li><strong>Heslo:</strong> <span class="password"></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="c" id="opendatakit-build">
|
||||
<h2><a href="#"><img src="img/ODK.png" alt="Open Data Kit" title="Open Data Kit">ODK Build</a></h2>
|
||||
<p><strong>Sběr dat s pomocí smartphone</strong>.<br>Aplikace pro návrh formulářů<br>
|
||||
<a href="http://opendatakit.org/xiframe/">XLSForm</a> - online konverter XLS.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="c" id="opendatakit-clients">
|
||||
<h2><a href="#"><img src="img/ODK_Collect.png" alt="Open Data Kit" title="Open Data Kit">ODK Collect</a></h2>
|
||||
<p>Mobilní aplikace<br>
|
||||
<a href="https://play.google.com/store/apps/details?id=org.odk.collect.android"><img src="img/android.png" class="ico" alt="ODK Collect">ODK Collect pro Android</a><br>
|
||||
</p>
|
||||
<ul>
|
||||
<li><strong>URL:</strong> <span class="clienturl"></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="c" id="opendatakit">
|
||||
<h2><a href="#"><img src="img/ODK.png" alt="Open Data Kit" title="Open Data Kit">ODK Aggregate</a></h2>
|
||||
<p><strong>Sběr dat s pomocí smartphone</strong>.<br>
|
||||
<a href="http://geoodk.com">GeoODK Collect</a> - náhrada papírových dotazníků smartphonem.
|
||||
</p>
|
||||
<ul>
|
||||
<li><strong>Login:</strong> <span class="login"></span></li>
|
||||
<li><strong>Heslo:</strong> <span class="password"></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="c" id="openmapkit">
|
||||
<h2><a href="#"><img src="img/OMK.png" alt="Open Map Kit" title="Open Map Kit">OpenMapKit Server</a></h2>
|
||||
<p><strong>Sběr dat s pomocí smartphone</strong>.<br>
|
||||
<ul>
|
||||
<li><strong>Login:</strong> <span class="login"></span></li>
|
||||
<li><strong>Heslo:</strong> <span class="password"></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="c" id="geoodk-clients">
|
||||
<h2><a href="#"><img src="img/GeoODK_Collect.png" alt="GeoODK Collect" title="GeoODK Collect">GeoODK Collect</a></h2>
|
||||
<p>Mobilní aplikace<br>
|
||||
<a href="https://play.google.com/store/apps/details?id=com.geoodk.collect.android"><img src="img/android.png" class="ico" alt="GeoODK Collect">GeoODK Collect pro Android</a>
|
||||
</p>
|
||||
<ul>
|
||||
<li><strong>URL:</strong> <span class="clienturl"></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="c" id="openmapkit-clients">
|
||||
<h2><a href="#"><img src="img/OMK.png" alt="Open Map Kit" title="Open Map Kit">OpenMapKit</a></h2>
|
||||
<p>Mobilní aplikace<br>
|
||||
<a href="https://play.google.com/store/apps/details?id=org.odk.collect.android"><img src="img/android.png" class="ico" alt="ODK Collect">ODK Collect pro Android</a><br>
|
||||
<a href="https://play.google.com/store/apps/details?id=org.redcross.openmapkit"><img src="img/android.png" class="ico" alt="Android">OpenMapKit pro Android 4.1 a vyšší</a>
|
||||
</p>
|
||||
<ul>
|
||||
<li><strong>URL:</strong> <span class="clienturl"></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="c" id="frontlinesms">
|
||||
<h2><a href="#"><img src="img/FrontlineSMS.png" alt="FrontlineSMS" title="FrontlineSMS">FrontlineSMS</a></h2>
|
||||
<p><strong>SMS messaging</strong> přes veřejné datové brány</p>
|
||||
<ul>
|
||||
<li><strong>Login:</strong> <span class="login"></span></li>
|
||||
<li><strong>Heslo:</strong> <span class="password"></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="c" id="seeddms">
|
||||
<h2><a href="#"><img src="img/SeedDMS.png" alt="SeedDMS" title="SeedDMS">SeedDMS</a></h2>
|
||||
<p><strong>Dokument management</strong> na dokumentaci a projektovou dokumentaci</p>
|
||||
<ul>
|
||||
<li><strong>Login:</strong> <span class="login"></span></li>
|
||||
<li><strong>Heslo:</strong> <span class="password"></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="c" id="pandora">
|
||||
<h2><a href="#"><img src="img/Pandora.png" alt="Pan.do/ra" title="Pan.do/ra">Pan.do/ra</a></h2>
|
||||
<p><strong>Media management</strong> na foto a video z krizové události. Tvorba metadat, komentářů, lokalizace v čase a na mapě.</p>
|
||||
<ul>
|
||||
<li><strong>Login:</strong> <span class="login"></span></li>
|
||||
<li><strong>Heslo:</strong> <span class="password"></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="c" id="ushahidi">
|
||||
<h2><a href="#"><img src="img/Ushahidi.png" alt="Ushahidi" title="Ushahidi">Ushahidi</a></h2>
|
||||
<p>Reakce na krizovou událost. Shromažďujte zprávy od obětí a pracovníků v terénu prostřednictvím SMS, e-mailu, webu, Twitteru.</p>
|
||||
<ul>
|
||||
<li><strong>Login:</strong> <span class="login"></span></li>
|
||||
<li><strong>Heslo:</strong> <span class="password"></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="c" id="ushahidi-mobile">
|
||||
<h2><a href="#"><img src="img/Ushahidi_mobile.png" alt="Ushahidi" title="Ushahidi">Ushahidi Mobile</a></h2>
|
||||
<p>Mobilní aplikace Ushahidi pro<br>
|
||||
<a href="https://itunes.apple.com/us/app/ushahidi-mobile/id1205994516?mt=8"><img src="img/ios.png" class="ico" alt="IOS">IOS 9.0 a vyšší</a><br>
|
||||
<a href="https://play.google.com/store/apps/details?id=com.ushahidi.mobile"><img src="img/android.png" class="ico" alt="Android">Android 4.4 a vyšší</a>
|
||||
</p>
|
||||
<ul>
|
||||
<li><strong>URL:</strong> <span class="clienturl"></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="c" id="sms-sync-gateway">
|
||||
<h2><a href="#"><img src="img/SMS_Sync.png" alt="SMS Sync Gateway" title="SMS Sync Gateway">SMS Sync Gateway</a></h2>
|
||||
<p>Mobilní aplikace pro<br>
|
||||
<a href="https://play.google.com/store/apps/details?id=org.addhen.smssync"><img src="img/android.png" class="ico" alt="Android">Android 2.3 a vyšší</a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="c" id="kanboard">
|
||||
<h2><a href="#"><img src="img/Kanboard.png" alt="Kanboard" title="Kanboard">Kanboard</a></h2>
|
||||
<p>Usnadňuje tvorbu a řízení projektů s pomocí Kanban metodiky.</p>
|
||||
<ul>
|
||||
<li><strong>Login:</strong> <span class="login"></span></li>
|
||||
<li><strong>Heslo:</strong> <span class="password"></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="c" id="kanboard-mobile">
|
||||
<h2><a href="#"><img src="img/Kanboard.png" alt="Kanboard" title="Kanboard">Kanboard Mobile</a></h2>
|
||||
<p>Mobilní aplikace<br>
|
||||
<a href="https://play.google.com/store/apps/details?id=eu.it_quality.kanboard"><img src="img/android.png" class="ico" alt="KanBoard">KanBoard client pro Android 4.1 a vyšší</a><br>
|
||||
<a href="https://f-droid.org/packages/in.andres.kandroid/"><img src="img/android.png" class="ico" alt="Android">Kandroid pro Android 4.2 a vyšší</a>
|
||||
</p>
|
||||
<ul>
|
||||
<li><strong>URL:</strong> <span class="clienturl"></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="c" id="cts">
|
||||
<h2><a href="#"><img src="img/CTS.png" alt="CTS" title="CTS">CTS</a></h2>
|
||||
<p>Logistika hmotné pomoci pro humanitární potřeby.</p>
|
||||
<ul>
|
||||
<li><strong>Login:</strong> <span class="login"></span></li>
|
||||
<li><strong>Heslo:</strong> <span class="password"></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="c" id="gnuhealth">
|
||||
<h2><a href="#"><img src="img/GNU_Health.png" alt="GNU Health" title="GNU Health">GNU Health</a></h2>
|
||||
<p>Zdravotní a nemocniční informační systém.</p>
|
||||
<ul>
|
||||
<li><strong>Login:</strong> <span class="login"></span></li>
|
||||
<li><strong>Heslo:</strong> <span class="password"></span></li>
|
||||
<li><strong>Heslo k demu:</strong> <span class="demopassword">gnusolidario</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="c" id="gnuhealth-clients">
|
||||
<h2><a href="#"><img src="img/GNU_Health.png" alt="GNU Health" title="GNU Health">GNU Health klienti</a></h2>
|
||||
<p>Klientské aplikace platformy Tryton GNU Health pro<br>
|
||||
<a href="https://downloads.tryton.org/4.2/tryton-last.exe"><img src="img/Windows.png" class="ico" alt="Windows">Windows</a><br>
|
||||
<a href="https://downloads.tryton.org/4.2/tryton-last.dmg"><img src="img/MacOS.png" class="ico" alt="MacOS">MacOS</a><br>
|
||||
<a href="https://downloads.tryton.org/4.2/tryton-last.tar.gz"><img src="img/Linux.png" class="ico" alt="Linux">Linux</a>
|
||||
</p>
|
||||
<ul>
|
||||
<li><strong>URL:</strong> <span class="clienturl"></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="c" id="sigmah">
|
||||
<h2><a href="#"><img src="img/Sigmah.png" alt="Sigmah" title="Sigmah">Sigmah</a></h2>
|
||||
<p>Rozpočtování získávání finančních prostředků.</p>
|
||||
<ul>
|
||||
<li><strong>Login:</strong> <span class="login"></span></li>
|
||||
<li><strong>Heslo:</strong> <span class="password"></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="c" id="motech">
|
||||
<h2><a href="#"><img src="img/Motech.png" alt="Motech" title="Motech">Motech</a></h2>
|
||||
<p>Integrace zdravotnických a komunikačních služeb.</p>
|
||||
<ul>
|
||||
<li><strong>Login:</strong> <span class="login"></span></li>
|
||||
<li><strong>Heslo:</strong> <span class="password"></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="c" id="mifosx">
|
||||
<h2><a href="#"><img src="img/MifosX.png" alt="Mifos X" title="Mifos X">Mifos X</a></h2>
|
||||
<p>Nástroj na rozvojovou, humanitární pomoc a mikrofinancování.</p>
|
||||
<ul>
|
||||
<li><strong>Login:</strong> <span class="login"></span></li>
|
||||
<li><strong>Heslo:</strong> <span class="password"></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="c" id="mifosx-mobile">
|
||||
<h2><a href="#"><img src="img/MifosX_Mobile.png" alt="Mifos X" title="Mifos X">Mifos X</a></h2>
|
||||
<p>Mobilní aplikace<br>
|
||||
<a href="https://play.google.com/store/apps/details?id=com.mifos.mifosxdroid"><img src="img/android.png" class="ico" alt="KanBoard">Mifos X client pro Android 3.0 a vyšší</a><br>
|
||||
</p>
|
||||
<ul>
|
||||
<li><strong>URL:</strong> <span class="clienturl"></span></li>
|
||||
<li><strong>Tenant ID:</strong> <span>default</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="c" id="diaspora">
|
||||
<h2><a href="#"><img src="img/Diaspora.png" alt="diaspora*" title="diaspora*">diaspora*</a></h2>
|
||||
<p>Autonomní sociání síť s možností propojení do cizích sociálních sítí.</p>
|
||||
<ul>
|
||||
<li><strong>Login:</strong> <span class="login"></span></li>
|
||||
<li><strong>Heslo:</strong> <span class="password"></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="c" id="openid">
|
||||
<h2><a href="http://openid.net"><img src="img/OpenID.png" alt="OpenID" title="OpenID">OpenID</a></h2>
|
||||
<p>Pro ověření identity budete potřebovat účet OpenID. Zaregistrujte se. Registraci využijete v software Sahana EDEN.</p>
|
||||
</div>
|
||||
|
||||
<div class="c" id="posm">
|
||||
<h2><a href="#"><img src="img/POSM.png" alt="POSM" title="POSM">POSM</a></h2>
|
||||
<p><strong>Portable Open Street Map</strong> - softwarový balík na offline používání OpenStreet Map v samostatné virtuální image.</p>
|
||||
</div>
|
||||
|
||||
<div class="c" id="cluster-spotter">
|
||||
<h2><a href="http://spotter.ngo"><img src="img/cluster_spotter.png" alt="Cluster Spotter" title="Cluster Spotter">Cluster Spotter</a></h2>
|
||||
<p>Info o Misi a Vizi projektu, včetně kontaktu. Zachovejte data bezpečná a neposkytujte je nepovolaným osobám.<br>
|
||||
<small>CC 4.0 CZ by <a href="http://trendspotter.cz">TS</a>. Content is based on PD, CC, GNU/GPL. Brand names, trademarks belong to their respective holders.</small>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="cleaner"></div>
|
||||
</body>
|
||||
</html>
|
@ -1 +0,0 @@
|
||||
{"cluster-spotter": {}}
|
2
basic/srv/portal/js/jquery-3.3.1.min.js
vendored
@ -1,12 +0,0 @@
|
||||
$(function() {
|
||||
$.getJSON('js/apps.json', function(data) {
|
||||
$.each(data, function(id, props) {
|
||||
var div = $('#'+id).show();
|
||||
if (props.hasOwnProperty('url'))
|
||||
div.find('h2 a').attr('href', props.url.replace('{host}', window.location.hostname));
|
||||
$.each(props, function(key, value) {
|
||||
div.find('.'+key).text(value.replace('{host}', window.location.hostname));
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
@ -1,33 +0,0 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
import argparse
|
||||
import json
|
||||
|
||||
def main(args):
|
||||
jsonfile = '/srv/portal/js/apps.json'
|
||||
|
||||
data = {}
|
||||
with open(jsonfile, 'r') as f:
|
||||
data = json.load(f)
|
||||
if not args.app in data:
|
||||
data[args.app] = {}
|
||||
if args.url:
|
||||
data[args.app]['url'] = args.url
|
||||
if args.login:
|
||||
data[args.app]['login'] = args.login
|
||||
if args.password:
|
||||
data[args.app]['password'] = args.password
|
||||
if args.property:
|
||||
for key, value in args.property:
|
||||
data[args.app][key] = value
|
||||
with open(jsonfile, 'w') as f:
|
||||
json.dump(data, f)
|
||||
|
||||
if __name__ == '__main__':
|
||||
parser = argparse.ArgumentParser(description='Spotter Cluster portal application manager')
|
||||
parser.add_argument('app', help='Application ID.')
|
||||
parser.add_argument('url', nargs='?', help='URL to the application. Use "{host}" as a host placeholder.')
|
||||
parser.add_argument('login', nargs='?', help='Administrative login.')
|
||||
parser.add_argument('password', nargs='?', help='Administrative password.')
|
||||
parser.add_argument('-p', '--property', nargs=2, action='append', help='Add arbitrary key-value to the application properties')
|
||||
main(parser.parse_args())
|
117
build/build-all.sh
Executable file
@ -0,0 +1,117 @@
|
||||
#!/bin/sh
|
||||
set -ev
|
||||
|
||||
ROOT=$(dirname $(dirname $(realpath "${0}")))
|
||||
|
||||
# Build documentation
|
||||
cd ${ROOT}/doc
|
||||
make html
|
||||
|
||||
# Build basic tar
|
||||
cd ${ROOT}/vm
|
||||
tar czpf /srv/build/vm.tar.gz *
|
||||
|
||||
# Build native apps
|
||||
cd ${ROOT}/apk/py3-secure-cookie
|
||||
apk add -U py3-setuptools py3-pytest py3-werkzeug
|
||||
abuild -F
|
||||
|
||||
cd ${ROOT}/apk/spoc
|
||||
abuild -F
|
||||
|
||||
cd ${ROOT}/apk/vmmgr
|
||||
abuild -F
|
||||
|
||||
# Build runtimes
|
||||
cd ${ROOT}/lxc-shared
|
||||
spoc-image build -p alpine3.8/image
|
||||
spoc-image build -p alpine3.8-java8/image
|
||||
spoc-image build -p alpine3.8-ruby2.4/image
|
||||
spoc-image build -p alpine3.10/image
|
||||
spoc-image build -p alpine3.10-nodejs10/image
|
||||
spoc-image build -p alpine3.11/image
|
||||
spoc-image build -p alpine3.11-python2.7/image
|
||||
spoc-image build -p alpine3.12/image
|
||||
spoc-image build -p alpine3.12-java8/image
|
||||
spoc-image build -p alpine3.12-php7.3/image
|
||||
spoc-image build -p alpine3.12-python3.8/image
|
||||
spoc-image build -p alpine3.12-ruby2.4/image
|
||||
spoc-image build -p alpine3.12-ruby2.7/image
|
||||
spoc-image build -p alpine3.12-tomcat7/image
|
||||
spoc-image build -p alpine3.12-tomcat8.5/image
|
||||
spoc-image build -p debian10/image
|
||||
|
||||
# Build services
|
||||
cd ${ROOT}/lxc-services
|
||||
spoc-image build -p activemq/image
|
||||
spoc-image build -p mariadb/image
|
||||
spoc-image build -p mongodb/image
|
||||
spoc-image build -p postgres/image
|
||||
spoc-image build -p postgis/image
|
||||
spoc-image build -p rabbitmq/image
|
||||
spoc-image build -p redis/image
|
||||
spoc-image build -p solr6/image
|
||||
|
||||
# Build applications
|
||||
cd ${ROOT}/lxc-apps
|
||||
|
||||
spoc-image build -p ckan/ckan.image
|
||||
spoc-image build -p ckan/ckan-datapusher.image
|
||||
spoc-app publish ckan/app
|
||||
|
||||
spoc-image build -p crisiscleanup/image
|
||||
spoc-app publish crisiscleanup/app
|
||||
|
||||
spoc-image build -p cts/image
|
||||
spoc-app publish cts/app
|
||||
|
||||
spoc-image build -p decidim/decidim-nginx.image
|
||||
spoc-image build -p decidim/decidim.image
|
||||
spoc-app publish decidim/app
|
||||
|
||||
spoc-image build -p dhis2/image
|
||||
spoc-app publish dhis2/app
|
||||
|
||||
spoc-image build -p frontlinesms/image
|
||||
spoc-app publish frontlinesms/app
|
||||
|
||||
spoc-image build -p gnuhealth/image
|
||||
spoc-app publish gnuhealth/app
|
||||
|
||||
spoc-image build -p kanboard/image
|
||||
spoc-app publish kanboard/app
|
||||
|
||||
spoc-image build -p mifosx/image
|
||||
spoc-app publish mifosx/app
|
||||
|
||||
spoc-image build -p motech/image
|
||||
spoc-app publish motech/app
|
||||
|
||||
spoc-image build -p odoo/image
|
||||
spoc-app publish odoo/app
|
||||
|
||||
spoc-image build -p opendatakit/opendatakit.image
|
||||
spoc-image build -p opendatakit/opendatakit-build.image
|
||||
spoc-app publish opendatakit/app
|
||||
|
||||
spoc-image build -p openmapkit/image
|
||||
spoc-app publish openmapkit/app
|
||||
|
||||
spoc-image build -p pandora/image
|
||||
spoc-app publish pandora/app
|
||||
|
||||
spoc-image build -p sahana/image
|
||||
spoc-app publish sahana/app
|
||||
spoc-app publish sahana-demo/app
|
||||
spoc-app publish sambro/app
|
||||
spoc-app publish safire/app
|
||||
spoc-app publish share/app
|
||||
|
||||
spoc-image build -p seeddms/image
|
||||
spoc-app publish seeddms/app
|
||||
|
||||
spoc-image build -p taarifa/image
|
||||
spoc-app publish taarifa/app
|
||||
|
||||
spoc-image build -p ushahidi/image
|
||||
spoc-app publish ushahidi/app
|
29
build/clean-all.sh
Executable file
@ -0,0 +1,29 @@
|
||||
#!/bin/sh
|
||||
set -ev
|
||||
|
||||
# Clean documentation
|
||||
rm -rf /srv/build/doc/*
|
||||
|
||||
# Clean basic tar
|
||||
rm -f /srv/build/vm.tar.gz
|
||||
|
||||
# Clean native apps
|
||||
rm -rf /srv/build/alpine/*
|
||||
|
||||
# Clean built LXC packages
|
||||
rm -rf /srv/build/spoc
|
||||
|
||||
# Remove nginx configs
|
||||
for CONF in $(find /etc/nginx/conf.d -name '*.conf' -a ! -name repo.conf -a ! -name default.conf); do
|
||||
rm -f ${CONF}
|
||||
done
|
||||
service nginx reload
|
||||
|
||||
# Stop running containers
|
||||
for APP in $(spoc-container list); do
|
||||
spoc-container stop ${APP}
|
||||
done
|
||||
|
||||
# Remove data
|
||||
rm -rf /var/lib/spoc
|
||||
rm -rf /var/log/spoc
|
32
build/etc/abuild.conf
Normal file
@ -0,0 +1,32 @@
|
||||
export CFLAGS="-Os -fomit-frame-pointer"
|
||||
export CXXFLAGS="$CFLAGS"
|
||||
export CPPFLAGS="$CFLAGS"
|
||||
export LDFLAGS="-Wl,--as-needed"
|
||||
|
||||
export JOBS=2
|
||||
export MAKEFLAGS=-j$JOBS
|
||||
|
||||
# remove line below to disable colors
|
||||
USE_COLORS=1
|
||||
|
||||
# uncomment line below to enable ccache support.
|
||||
#USE_CCACHE=1
|
||||
|
||||
SRCDEST=/var/cache/distfiles
|
||||
|
||||
# uncomment line below to store built packages in other location
|
||||
# The package will be stored as $REPODEST/$repo/$pkgname-$pkgver-r$pkgrel.apk
|
||||
# where $repo is the name of the parent directory of $startdir.
|
||||
REPODEST=/srv/build/alpine/v3.12
|
||||
|
||||
# PACKAGER and MAINTAINER are used by newapkbuild when creating new aports for
|
||||
# the APKBUILD's "Contributor:" and "Maintainer:" comments, respectively.
|
||||
#PACKAGER="Your Name <your@email.address>"
|
||||
#MAINTAINER="$PACKAGER"
|
||||
PACKAGER_PRIVKEY="/root/repo.spotter.cz.rsa"
|
||||
|
||||
# what to clean up after a successful build
|
||||
CLEANUP="srcdir bldroot pkgdir deps"
|
||||
|
||||
# what to cleanup after a failed build
|
||||
ERROR_CLEANUP="bldroot deps"
|
8
build/etc/nginx/conf.d/repo.conf
Normal file
@ -0,0 +1,8 @@
|
||||
server {
|
||||
listen [::]:80;
|
||||
server_name repo.build.vm;
|
||||
|
||||
location / {
|
||||
root /srv/build;
|
||||
}
|
||||
}
|
36
build/install-toolchain.sh
Executable file
@ -0,0 +1,36 @@
|
||||
#!/bin/sh
|
||||
set -ev
|
||||
|
||||
cd $(realpath $(dirname "${0}"))
|
||||
|
||||
# Install basic build tools
|
||||
apk update
|
||||
apk add git file htop less openssh-client tree
|
||||
# Install Alpine SDK (for APK builds)
|
||||
apk add alpine-sdk
|
||||
# Install Sphinx support (for documentation builds)
|
||||
apk add py3-sphinx py3-sphinx_rtd_theme
|
||||
|
||||
# Copy root profile files and settings
|
||||
mkdir -p /root/.config/htop
|
||||
cp root/.profile /root/.profile
|
||||
cp root/.config/htop/htoprc /root/.config/htop/htoprc
|
||||
|
||||
# Prepare abuild toolchain
|
||||
adduser root abuild
|
||||
cp etc/abuild.conf /etc/abuild.conf
|
||||
|
||||
# Prepare local APK repository
|
||||
cp etc/nginx/conf.d/repo.conf /etc/nginx/conf.d/repo.conf
|
||||
echo "172.17.0.1 repo.build.vm" >>/etc/hosts
|
||||
service nginx reload
|
||||
|
||||
# Change SPOC repository
|
||||
sed -i 's/https:\/\/repo\.spotter\.cz/http:\/\/repo.build.vm/' /etc/spoc/spoc.conf
|
||||
|
||||
# Supply abuild key
|
||||
# echo '/root/repo.spotter.cz.rsa' | abuild-keygen
|
||||
|
||||
# Supply SPOC key
|
||||
# openssl ecparam -genkey -name secp384r1 -out /etc/spoc/publish.key
|
||||
# openssl ec -in /etc/spoc/publish.key -pubout -out /tmp/repository.pub
|
2
build/root/.profile
Normal file
@ -0,0 +1,2 @@
|
||||
alias ll="ls -la"
|
||||
alias view="vi -R"
|
@ -1,17 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
SOURCE_DIR=$(realpath $(dirname "${0}"))/ckan-datapusher
|
||||
|
||||
# Build Docker container
|
||||
docker build -t ckan-datapusher ${SOURCE_DIR}
|
||||
|
||||
# Configure CKAN DataPusher
|
||||
mkdir -p /srv/ckan-datapusher/conf /srv/ckan-datapusher/data
|
||||
cp ${SOURCE_DIR}/srv/ckan-datapusher/conf/datapusher.wsgi /srv/ckan-datapusher/conf/datapusher.wsgi
|
||||
cp ${SOURCE_DIR}/srv/ckan-datapusher/conf/datapusher_settings.py /srv/ckan-datapusher/conf/datapusher_settings.py
|
||||
chown -R 8004:8004 /srv/ckan-datapusher/data
|
||||
|
||||
# Configure CKAN DataPusher service
|
||||
cp ${SOURCE_DIR}/etc/init.d/ckan-datapusher /etc/init.d/ckan-datapusher
|
||||
rc-update add ckan-datapusher
|
||||
service ckan-datapusher start
|
@ -1,47 +0,0 @@
|
||||
FROM alpine:3.7
|
||||
MAINTAINER Disassembler <disassembler@dasm.cz>
|
||||
|
||||
RUN \
|
||||
# Install Python2 runtime
|
||||
apk --no-cache add python2
|
||||
|
||||
RUN \
|
||||
# Install runtime XML dependencies
|
||||
apk --no-cache add libxml2 libxslt
|
||||
|
||||
RUN \
|
||||
# Install runtime dependencies
|
||||
apk --no-cache add libffi libressl uwsgi-python
|
||||
|
||||
RUN \
|
||||
# Install build dependencies
|
||||
apk --no-cache add --virtual .deps build-base git libffi-dev libressl-dev libxml2-dev libxslt-dev py2-pip python2-dev \
|
||||
# Install CKAN DataPusher
|
||||
&& mkdir -p /srv/ckan-datapusher \
|
||||
&& cd /srv/ckan-datapusher \
|
||||
&& pip install -U setuptools \
|
||||
&& pip install -e 'git+https://github.com/ckan/datapusher.git#egg=datapusher' \
|
||||
# Hackfix the X509_STORE_CTX wrapper
|
||||
&& sed -i 's/\[security\]//' /srv/ckan-datapusher/src/datapusher/requirements.txt \
|
||||
&& pip install -r /srv/ckan-datapusher/src/datapusher/requirements.txt \
|
||||
# Create OS user
|
||||
&& addgroup -S -g 8004 ckan-datapusher \
|
||||
&& adduser -S -u 8004 -h /srv/ckan-datapusher -s /bin/false -g ckan-datapusher -G ckan-datapusher ckan-datapusher \
|
||||
&& chown -R ckan-datapusher:ckan-datapusher /srv/ckan-datapusher \
|
||||
# Cleanup
|
||||
&& apk --no-cache del .deps \
|
||||
&& find /srv/ckan-datapusher/src -name '.git*' -exec rm -rf {} + \
|
||||
&& rm -rf /root/.cache
|
||||
|
||||
COPY docker/ /
|
||||
|
||||
RUN \
|
||||
# Hackfix the self-signed certificate verification
|
||||
cd /usr/lib/python2.7/site-packages \
|
||||
&& patch -p0 </srv/ckan-datapusher/ssl_verify.patch
|
||||
|
||||
VOLUME ["/etc/ckan-datapusher", "/srv/ckan-datapusher/data"]
|
||||
EXPOSE 8004
|
||||
|
||||
USER ckan-datapusher
|
||||
CMD ["uwsgi", "--plugin", "python", "--http-socket", "0.0.0.0:8004", "--wsgi-file", "/etc/ckan-datapusher/datapusher.wsgi", "--enable-threads"]
|
@ -1,10 +0,0 @@
|
||||
--- orig/web.py
|
||||
+++ ckanserviceprovider/web.py
|
||||
@@ -733,6 +733,7 @@
|
||||
try:
|
||||
result = requests.post(
|
||||
result_url,
|
||||
+ verify=False,
|
||||
data=json.dumps(job_dict, cls=DatetimeJsonEncoder),
|
||||
headers=headers)
|
||||
|
@ -1,21 +0,0 @@
|
||||
#!/sbin/openrc-run
|
||||
|
||||
description="CKAN DataPusher docker container"
|
||||
|
||||
depend() {
|
||||
need docker net
|
||||
use dns logger netmount
|
||||
}
|
||||
|
||||
start() {
|
||||
/usr/bin/docker run -d --rm \
|
||||
--name ckan-datapusher \
|
||||
-h ckan-datapusher \
|
||||
-v /srv/ckan-datapusher/conf:/etc/ckan-datapusher \
|
||||
-v /srv/ckan-datapusher/data:/srv/ckan-datapusher/data \
|
||||
ckan-datapusher
|
||||
}
|
||||
|
||||
stop() {
|
||||
/usr/bin/docker stop ckan-datapusher
|
||||
}
|
69
ckan.sh
@ -1,69 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
SOURCE_DIR=$(realpath $(dirname "${0}"))/ckan
|
||||
|
||||
# Check prerequisites
|
||||
docker image ls | grep -q ckan-datapusher || $(realpath $(dirname "${0}"))/ckan-datapusher.sh
|
||||
docker image ls | grep -q postfix || $(realpath $(dirname "${0}"))/postfix.sh
|
||||
docker image ls | grep -q postgres || $(realpath $(dirname "${0}"))/postgres.sh
|
||||
docker image ls | grep -q redis || $(realpath $(dirname "${0}"))/redis.sh
|
||||
docker image ls | grep -q solr || $(realpath $(dirname "${0}"))/solr.sh
|
||||
|
||||
# Build Docker container
|
||||
docker build -t ckan ${SOURCE_DIR}
|
||||
|
||||
# Create database
|
||||
export CKAN_PWD=$(head -c 18 /dev/urandom | base64)
|
||||
export CKAN_DS_PWD=$(head -c 18 /dev/urandom | base64)
|
||||
envsubst <${SOURCE_DIR}/createdb.sql | docker exec -i postgres psql
|
||||
|
||||
# Configure CKAN Solr core
|
||||
docker exec solr solr create -p 8983 -c ckan
|
||||
cp ${SOURCE_DIR}/srv/solr/data/ckan/conf/schema.xml /srv/solr/data/ckan/conf/schema.xml
|
||||
cp ${SOURCE_DIR}/srv/solr/data/ckan/conf/solrconfig.xml /srv/solr/data/ckan/conf/solrconfig.xml
|
||||
chown 8983:8983 /srv/solr/data/ckan/conf/schema.xml
|
||||
service solr restart
|
||||
|
||||
# Configure CKAN
|
||||
mkdir -p /srv/ckan/conf /srv/ckan/data
|
||||
chown -R 8003:8003 /srv/ckan/data
|
||||
export CKAN_SECRET=$(head -c 18 /dev/urandom | base64)
|
||||
export CKAN_UUID=$(cat /proc/sys/kernel/random/uuid)
|
||||
envsubst <${SOURCE_DIR}/srv/ckan/conf/ckan.ini >/srv/ckan/conf/ckan.ini
|
||||
cp ${SOURCE_DIR}/srv/ckan/conf/who.ini /srv/ckan/conf/who.ini
|
||||
cp ${SOURCE_DIR}/srv/ckan/update-ip.sh /srv/ckan/update-ip.sh
|
||||
/srv/ckan/update-ip.sh
|
||||
|
||||
# Set "production values" (increases performance) only if the DEBUG environment variable is not set
|
||||
if [ ${DEBUG:-0} -eq 0 ]; then
|
||||
sed -i 's/debug = true/debug = false/' /srv/ckan/conf/ckan.ini
|
||||
fi
|
||||
|
||||
# Populate database
|
||||
docker run --rm -h ckan --link postgres --link redis --link solr -v /srv/ckan/conf:/etc/ckan -v /srv/ckan/data:/srv/ckan/storage ckan paster --plugin=ckan db init -c /etc/ckan/ckan.ini
|
||||
docker run --rm -h ckan --link postgres --link redis --link solr -v /srv/ckan/conf:/etc/ckan -v /srv/ckan/data:/srv/ckan/storage ckan paster --plugin=ckanext-spatial spatial initdb -c /etc/ckan/ckan.ini
|
||||
docker run --rm -h ckan --link postgres --link redis --link solr -v /srv/ckan/conf:/etc/ckan -v /srv/ckan/data:/srv/ckan/storage ckan paster --plugin=ckan datastore set-permissions -c /etc/ckan/ckan.ini | docker exec -i postgres psql
|
||||
|
||||
# Create admin account
|
||||
export CKAN_ADMIN_USER="admin"
|
||||
export CKAN_ADMIN_UUID=$(cat /proc/sys/kernel/random/uuid)
|
||||
export CKAN_ADMIN_APIKEY=$(cat /proc/sys/kernel/random/uuid)
|
||||
export CKAN_ADMIN_PWD=$(head -c 12 /dev/urandom | base64)
|
||||
export CKAN_ADMIN_HASH=$(docker run --rm ckan python -c "from passlib.hash import pbkdf2_sha512;print pbkdf2_sha512.encrypt('${CKAN_ADMIN_PWD}')")
|
||||
export CKAN_ADMIN_EMAIL="admin@example.com"
|
||||
envsubst <${SOURCE_DIR}/adminpwd.sql | docker exec -i postgres psql ckan
|
||||
|
||||
# Configure CKAN service
|
||||
cp ${SOURCE_DIR}/etc/init.d/ckan /etc/init.d/ckan
|
||||
rc-update add ckan
|
||||
service ckan start
|
||||
|
||||
# Create nginx app definition
|
||||
cp ${SOURCE_DIR}/etc/nginx/conf.d/ckan.conf /etc/nginx/conf.d/ckan.conf
|
||||
service nginx reload
|
||||
|
||||
# Install cron job
|
||||
cp ${SOURCE_DIR}/etc/periodic/hourly/ckan /etc/periodic/hourly/ckan
|
||||
|
||||
# Add portal application definition
|
||||
portal-app-manager ckan "https://{host}:8403/" "${CKAN_ADMIN_USER}" "${CKAN_ADMIN_PWD}"
|
@ -1,54 +0,0 @@
|
||||
FROM alpine:3.7
|
||||
MAINTAINER Disassembler <disassembler@dasm.cz>
|
||||
|
||||
RUN \
|
||||
# Install Python2 runtime
|
||||
apk --no-cache add python2
|
||||
|
||||
RUN \
|
||||
# Install runtime XML dependencies
|
||||
apk --no-cache add libxml2 libxslt
|
||||
|
||||
RUN \
|
||||
# Add edge/testing repository
|
||||
echo '@edge http://dl-cdn.alpinelinux.org/alpine/edge/testing' >>/etc/apk/repositories \
|
||||
# Install runtime dependencies
|
||||
&& apk --no-cache add geos@edge libjpeg-turbo libmagic libpq py2-pip zlib
|
||||
|
||||
RUN \
|
||||
# Install build dependencies
|
||||
apk --no-cache add --virtual .deps build-base git libjpeg-turbo-dev libxml2-dev libxslt-dev postgresql-dev python2-dev zlib-dev \
|
||||
# Hackfix for python find_library('c') call
|
||||
&& ln -s /lib/ld-musl-x86_64.so.1 /lib/libc.so.1 \
|
||||
# Install CKAN
|
||||
&& mkdir -p /srv/ckan \
|
||||
&& cd /srv/ckan \
|
||||
&& pip install -U setuptools \
|
||||
&& pip install -e 'git+https://github.com/ckan/ckan.git#egg=ckan' \
|
||||
# Force psycopg2 version update for compatibility with PostgreSQL 10
|
||||
&& sed -i 's/psycopg2==2.4.5/psycopg2==2.7.1/' /srv/ckan/src/ckan/requirements.txt \
|
||||
&& pip install -r /srv/ckan/src/ckan/requirements.txt \
|
||||
# Install CKAN extensions
|
||||
&& pip install -e 'git+https://github.com/ckan/ckanext-basiccharts#egg=ckanext_basiccharts' \
|
||||
&& pip install -e 'git+https://github.com/ckan/ckanext-spatial#egg=ckanext_spatial' \
|
||||
&& pip install -e 'git+https://github.com/ckan/ckanext-geoview#egg=ckanext_geoview' \
|
||||
&& pip install -e 'git+https://github.com/ckan/ckanext-mapviews#egg=ckanext_mapviews' \
|
||||
&& pip install -e 'git+https://github.com/XVTSolutions/ckanext-spatialUI#egg=ckanext_spatialui' \
|
||||
&& pip install -e 'git+https://github.com/aptivate/ckanext-datasetthumbnail#egg=ckanext_datasetthumbnail' \
|
||||
&& pip install -e 'git+https://github.com/datagvat/ckanext-dgvat_xls#egg=ckanext_dgvat_xls' \
|
||||
&& pip install -r /srv/ckan/src/ckanext-spatial/pip-requirements.txt \
|
||||
&& pip install -r /srv/ckan/src/ckanext-dgvat-xls/requirements.txt \
|
||||
# Create OS user
|
||||
&& addgroup -S -g 8003 ckan \
|
||||
&& adduser -S -u 8003 -h /srv/ckan -s /bin/false -g ckan -G ckan ckan \
|
||||
&& chown -R ckan:ckan /srv/ckan \
|
||||
# Cleanup
|
||||
&& apk --no-cache del .deps \
|
||||
&& find /srv/ckan/src -name '.git*' -exec rm -rf {} + \
|
||||
&& rm -rf /root/.cache
|
||||
|
||||
VOLUME ["/etc/ckan", "/srv/ckan/storage"]
|
||||
EXPOSE 8003
|
||||
|
||||
USER ckan
|
||||
CMD ["paster", "serve", "/etc/ckan/ckan.ini"]
|
@ -1,33 +0,0 @@
|
||||
#!/sbin/openrc-run
|
||||
|
||||
description="CKAN docker container"
|
||||
|
||||
depend() {
|
||||
need docker net postgres
|
||||
use dns logger netmount postfix
|
||||
after ckan-datapusher redis solr
|
||||
}
|
||||
|
||||
start_pre() {
|
||||
/srv/ckan/update-ip.sh
|
||||
}
|
||||
|
||||
start() {
|
||||
/usr/bin/docker run -d --rm \
|
||||
--name ckan \
|
||||
-h ckan \
|
||||
--link ckan-datapusher \
|
||||
--link postfix \
|
||||
--link postgres \
|
||||
--link redis \
|
||||
--link solr \
|
||||
--link ckan-datapusher \
|
||||
-p 127.0.0.1:8003:8003 \
|
||||
-v /srv/ckan/conf:/etc/ckan \
|
||||
-v /srv/ckan/data:/srv/ckan/storage \
|
||||
ckan
|
||||
}
|
||||
|
||||
stop() {
|
||||
/usr/bin/docker stop ckan
|
||||
}
|
@ -1,11 +0,0 @@
|
||||
server {
|
||||
listen [::]:8803 ipv6only=off;
|
||||
listen [::]:8403 ssl http2 ipv6only=off;
|
||||
|
||||
access_log /var/log/nginx/ckan.access.log;
|
||||
error_log /var/log/nginx/ckan.error.log;
|
||||
|
||||
location / {
|
||||
proxy_pass http://127.0.0.1:8003;
|
||||
}
|
||||
}
|
@ -1,4 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
docker exec ckan paster --plugin=ckan tracking update -c /etc/ckan/ckan.ini >/dev/null
|
||||
docker exec ckan paster --plugin=ckan search-index rebuild -r -c /etc/ckan/ckan.ini >/dev/null
|
@ -1,4 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
URL=$(ip route get 1 | awk '{print $NF;exit}')
|
||||
sed -i "s|^ckan\.site_url.*|ckan.site_url = https://${URL}:8403|" /srv/ckan/conf/ckan.ini
|
@ -1,48 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
SOURCE_DIR=$(realpath $(dirname "${0}"))/crisiscleanup
|
||||
|
||||
# Check prerequisites
|
||||
docker image ls | grep -q postfix || $(realpath $(dirname "${0}"))/postfix.sh
|
||||
docker image ls | grep -q postgres || $(realpath $(dirname "${0}"))/postgres.sh
|
||||
docker image ls | grep -q ruby || $(realpath $(dirname "${0}"))/ruby.sh
|
||||
|
||||
# Build Docker container
|
||||
docker build -t crisiscleanup ${SOURCE_DIR}
|
||||
|
||||
# Create database
|
||||
export CRISISCLEANUP_PWD=$(head -c 18 /dev/urandom | base64)
|
||||
envsubst <${SOURCE_DIR}/createdb.sql | docker exec -i postgres psql
|
||||
|
||||
# Copy existing config files into persistent storage
|
||||
mkdir -p /srv/crisiscleanup/conf
|
||||
chown 8005:8005 /srv/crisiscleanup/conf
|
||||
docker run --rm -v /srv/crisiscleanup/conf:/mnt/conf crisiscleanup cp -rp /srv/crisiscleanup/config/. /mnt/conf
|
||||
chown root:root /srv/crisiscleanup/conf
|
||||
|
||||
# Configure CrisisCleanup
|
||||
export CRISISCLEANUP_ADMIN_USER="Admin"
|
||||
export CRISISCLEANUP_ADMIN_EMAIL="admin@example.com"
|
||||
export CRISISCLEANUP_ADMIN_PWD=$(head -c 12 /dev/urandom | base64)
|
||||
envsubst <${SOURCE_DIR}/srv/crisiscleanup/conf/database.yml >/srv/crisiscleanup/conf/database.yml
|
||||
cp ${SOURCE_DIR}/srv/crisiscleanup/conf/boot.rb /srv/crisiscleanup/conf/boot.rb
|
||||
cp ${SOURCE_DIR}/srv/crisiscleanup/conf/initializers/devise.rb /srv/crisiscleanup/conf/initializers/devise.rb
|
||||
cp ${SOURCE_DIR}/srv/crisiscleanup/conf/environments/production.rb /srv/crisiscleanup/conf/environments/production.rb
|
||||
|
||||
# Populate database
|
||||
envsubst <${SOURCE_DIR}/srv/crisiscleanup/db/seeds.rb >/tmp/seeds.rb
|
||||
docker run --rm -h crisiscleanup --link postgres -v /srv/crisiscleanup/conf:/srv/crisiscleanup/config crisiscleanup rake db:schema:load
|
||||
docker run --rm -h crisiscleanup --link postgres -v /srv/crisiscleanup/conf:/srv/crisiscleanup/config -v /tmp/seeds.rb:/srv/crisiscleanup/db/seeds.rb crisiscleanup rake db:seed
|
||||
rm /tmp/seeds.rb
|
||||
|
||||
# Create CrisisCleanup service
|
||||
cp ${SOURCE_DIR}/etc/init.d/crisiscleanup /etc/init.d/crisiscleanup
|
||||
rc-update add crisiscleanup
|
||||
service crisiscleanup start
|
||||
|
||||
# Create nginx app definition
|
||||
cp ${SOURCE_DIR}/etc/nginx/conf.d/crisiscleanup.conf /etc/nginx/conf.d/crisiscleanup.conf
|
||||
service nginx reload
|
||||
|
||||
# Add portal application definition
|
||||
portal-app-manager crisis-cleanup "https://{host}:8405/" "${CRISISCLEANUP_ADMIN_EMAIL}" "${CRISISCLEANUP_ADMIN_PWD}"
|
@ -1,51 +0,0 @@
|
||||
FROM ruby
|
||||
MAINTAINER Disassembler <disassembler@dasm.cz>
|
||||
|
||||
RUN \
|
||||
# Install NodeJS runtime
|
||||
apk --no-cache add nodejs paxctl \
|
||||
# Fix grsec attributes to loosen memory protection restrictions
|
||||
&& paxctl -cm /usr/bin/node \
|
||||
# Cleanup
|
||||
&& apk --no-cache del paxctl
|
||||
|
||||
RUN \
|
||||
# Install runtime dependencies
|
||||
apk --no-cache add libpq libxml2 libxslt tzdata
|
||||
|
||||
ENV RAILS_ENV production
|
||||
|
||||
RUN \
|
||||
# Install build dependencies
|
||||
apk --no-cache add --virtual .deps build-base git libxml2-dev libxslt-dev linux-headers postgresql-dev yarn zlib-dev \
|
||||
# Clone CrisisCleanup
|
||||
&& git clone --depth 1 https://github.com/CrisisCleanup/crisiscleanup /srv/crisiscleanup \
|
||||
# Hackfix ruby dependency versions
|
||||
&& sed -i 's/2\.2\.5/2.3.6/' /srv/crisiscleanup/Gemfile \
|
||||
&& sed -i 's/rdoc (4\.2\.0)/rdoc (4.3.0)/' /srv/crisiscleanup/Gemfile.lock \
|
||||
# Install Ruby and NodeJS dependencies
|
||||
&& cd /srv/crisiscleanup \
|
||||
&& bundle config build.nokogiri --use-system-libraries \
|
||||
&& bundle install \
|
||||
&& npm install \
|
||||
&& yarn \
|
||||
# Create CrisisCleanup secret
|
||||
&& echo -e "production:\n secret_key_base: $(rake secret)" >/srv/crisiscleanup/config/secrets.yml \
|
||||
# Generate static resources
|
||||
&& rake assets:precompile \
|
||||
# Create OS user
|
||||
&& addgroup -S -g 8005 crisiscleanup \
|
||||
&& adduser -S -u 8005 -h /srv/crisiscleanup -s /bin/false -g crisiscleanup -G crisiscleanup crisiscleanup \
|
||||
&& chown -R crisiscleanup:crisiscleanup /srv/crisiscleanup \
|
||||
# Cleanup
|
||||
&& apk --no-cache del .deps \
|
||||
&& find /srv/crisiscleanup -name '.git*' -exec rm -rf {} + \
|
||||
&& rm -rf /usr/local/share/.cache \
|
||||
&& rm -rf /root/.bundle /root/.config /root/.npm
|
||||
|
||||
VOLUME ["/srv/crisiscleanup/config"]
|
||||
EXPOSE 8005
|
||||
|
||||
USER crisiscleanup
|
||||
WORKDIR /srv/crisiscleanup
|
||||
CMD ["rails", "server"]
|
@ -1,11 +0,0 @@
|
||||
server {
|
||||
listen [::]:8805 ipv6only=off;
|
||||
listen [::]:8405 ssl http2 ipv6only=off;
|
||||
|
||||
access_log /var/log/nginx/crisiscleanup.access.log;
|
||||
error_log /var/log/nginx/crisiscleanup.error.log;
|
||||
|
||||
location / {
|
||||
proxy_pass http://127.0.0.1:8005;
|
||||
}
|
||||
}
|
49
cts.sh
@ -1,49 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
SOURCE_DIR=$(realpath $(dirname "${0}"))/cts
|
||||
|
||||
# Check prerequisites
|
||||
docker image ls | grep -q postgres || $(realpath $(dirname "${0}"))/postgres.sh
|
||||
|
||||
# Build Docker container
|
||||
docker build -t cts ${SOURCE_DIR}
|
||||
|
||||
# Create database
|
||||
export CTS_PWD=$(head -c 18 /dev/urandom | base64)
|
||||
envsubst <${SOURCE_DIR}/createdb.sql | docker exec -i postgres psql
|
||||
|
||||
# Copy existing config files into persistent storage
|
||||
mkdir -p /srv/cts/conf
|
||||
docker run --rm -v /srv/cts/conf:/mnt/conf cts cp /srv/cts/cts/settings/base.py /mnt/conf/
|
||||
|
||||
# Configure CTS
|
||||
export CTS_SECRET=$(head -c 26 /dev/urandom | base64)
|
||||
envsubst <${SOURCE_DIR}/srv/cts/conf/spotter.py >/srv/cts/conf/spotter.py
|
||||
touch /srv/cts/conf/__init__.py
|
||||
|
||||
# Set "production values" (increases performance) only if the DEBUG environment variable is not set
|
||||
if [ ${DEBUG:-0} -eq 0 ]; then
|
||||
sed -i 's/DEBUG = True/DEBUG = False/' /srv/cts/conf/spotter.py
|
||||
fi
|
||||
|
||||
# Populate database
|
||||
docker run --rm -h cts --link postgres -v /srv/cts/conf:/srv/cts/cts/settings cts manage.py migrate
|
||||
|
||||
# Create admin account
|
||||
export CTS_ADMIN_EMAIL=admin@example.com
|
||||
export CTS_ADMIN_PWD=$(head -c 12 /dev/urandom | base64)
|
||||
export CTS_ADMIN_HASH=$(docker run --rm -h cts -v /srv/cts/conf:/srv/cts/cts/settings cts python -c "from django.contrib.auth.hashers import make_password; print make_password('${CTS_ADMIN_PWD}')")
|
||||
export CTS_ADMIN_SECRET=$(head -c 12 /dev/urandom | sha256sum | cut -c1-13)
|
||||
envsubst <${SOURCE_DIR}/adminpwd.sql | docker exec -i postgres psql cts
|
||||
|
||||
# Create CTS service
|
||||
cp ${SOURCE_DIR}/etc/init.d/cts /etc/init.d/cts
|
||||
rc-update add cts
|
||||
service cts start
|
||||
|
||||
# Create nginx app definition
|
||||
cp ${SOURCE_DIR}/etc/nginx/conf.d/cts.conf /etc/nginx/conf.d/cts.conf
|
||||
service nginx reload
|
||||
|
||||
# Add portal application definition
|
||||
portal-app-manager cts "https://{host}:8406/" "${CTS_ADMIN_EMAIL}" "${CTS_ADMIN_PWD}"
|
@ -1,46 +0,0 @@
|
||||
FROM alpine:3.7
|
||||
MAINTAINER Disassembler <disassembler@dasm.cz>
|
||||
|
||||
RUN \
|
||||
# Install Python2 runtime
|
||||
apk --no-cache add python2
|
||||
|
||||
RUN \
|
||||
# Add edge/testing repository
|
||||
echo '@edge http://dl-cdn.alpinelinux.org/alpine/edge/testing' >>/etc/apk/repositories \
|
||||
# Install runtime dependencies
|
||||
&& apk --no-cache add geos@edge libpq nginx s6 zlib
|
||||
|
||||
RUN \
|
||||
# Install build dependencies
|
||||
apk --no-cache add --virtual .deps build-base git postgresql-dev python2-dev py2-pip zlib-dev \
|
||||
# Install CTS
|
||||
&& git clone --depth 1 https://github.com/theirc/CTS /srv/cts \
|
||||
# Force psycopg2 version update for compatibility with PostgreSQL 10
|
||||
&& sed -i 's/psycopg2==2.5.2/psycopg2==2.7.1/' /srv/cts/requirements/base.txt \
|
||||
&& pip install -r /srv/cts/requirements/production.txt \
|
||||
# Hackfix geos version detection
|
||||
&& sed -i 's/\$//' /usr/lib/python2.7/site-packages/django/contrib/gis/geos/libgeos.py \
|
||||
# Make manage.py globally executable
|
||||
&& chmod +x /srv/cts/manage.py \
|
||||
&& ln -s /srv/cts/manage.py /usr/local/bin/manage.py \
|
||||
# Compile static files
|
||||
&& sed -i '/debug_toolbar/d' /srv/cts/cts/settings/dev.py \
|
||||
&& DJANGO_SETTINGS_MODULE=cts.settings.dev manage.py collectstatic -l --noinput \
|
||||
# Create OS user
|
||||
&& addgroup -S -g 8006 cts \
|
||||
&& adduser -S -u 8006 -h /srv/cts -s /bin/false -g cts -G cts cts \
|
||||
&& chown -R cts:cts /srv/cts \
|
||||
# Cleanup
|
||||
&& apk --no-cache del .deps \
|
||||
&& find /srv/cts -name '.git*' -exec rm -rf {} + \
|
||||
&& rm -rf /root/.cache
|
||||
|
||||
COPY docker/ /
|
||||
|
||||
VOLUME ["/srv/cts/cts/settings"]
|
||||
EXPOSE 8006
|
||||
|
||||
ENV DJANGO_SETTINGS_MODULE cts.settings.spotter
|
||||
WORKDIR /srv/cts
|
||||
CMD ["s6-svscan", "/etc/services.d"]
|
@ -1,22 +0,0 @@
|
||||
#!/sbin/openrc-run
|
||||
|
||||
description="CTS docker container"
|
||||
|
||||
depend() {
|
||||
need docker net postgres
|
||||
use dns logger netmount
|
||||
}
|
||||
|
||||
start() {
|
||||
/usr/bin/docker run -d --rm \
|
||||
--name cts \
|
||||
-h cts \
|
||||
--link postgres \
|
||||
-p 127.0.0.1:8006:8006 \
|
||||
-v /srv/cts/conf:/srv/cts/cts/settings \
|
||||
cts
|
||||
}
|
||||
|
||||
stop() {
|
||||
/usr/bin/docker stop cts
|
||||
}
|
@ -1,11 +0,0 @@
|
||||
server {
|
||||
listen [::]:8806 ipv6only=off;
|
||||
listen [::]:8406 ssl http2 ipv6only=off;
|
||||
|
||||
access_log /var/log/nginx/cts.access.log;
|
||||
error_log /var/log/nginx/cts.error.log;
|
||||
|
||||
location / {
|
||||
proxy_pass http://127.0.0.1:8006;
|
||||
}
|
||||
}
|
19
doc/Makefile
Normal file
@ -0,0 +1,19 @@
|
||||
# Minimal makefile for Sphinx documentation
|
||||
#
|
||||
|
||||
# You can set these variables from the command line.
|
||||
SPHINXOPTS =
|
||||
SPHINXBUILD = sphinx-build-3
|
||||
SOURCEDIR = .
|
||||
BUILDDIR = /srv/build/doc
|
||||
|
||||
# Put it first so that "make" without argument is like "make help".
|
||||
help:
|
||||
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
||||
|
||||
.PHONY: help Makefile
|
||||
|
||||
# Catch-all target: route all unknown targets to Sphinx using the new
|
||||
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
|
||||
%: Makefile
|
||||
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
21
doc/applications/attachments/images-list-apps.csv
Normal file
@ -0,0 +1,21 @@
|
||||
Application,Container,Host
|
||||
CKAN,ckan,ckan
|
||||
Crisis Cleanup,crisiscleanup,cc
|
||||
CTS,cts,cts
|
||||
EcoGIS,ecogis,ecogis
|
||||
FrontlineSMS,frontlinesms,sms
|
||||
GNU Health,gnuhealth,gh
|
||||
Kanboard,kanboard,kb
|
||||
Mifos X,mifosx,mifosx
|
||||
Motech,motech,motech
|
||||
ODK Aggregate,opendatakit,odk
|
||||
ODK Build,opendatakit-build,odkbuild
|
||||
Odoo,odoo,odoo
|
||||
OpenMapKit,openmapkit,omk
|
||||
Pan.do/ra,pandora,pandora
|
||||
Sahana,sahana,sahana
|
||||
Sahana - Demo,sahana-demo,sahana-demo
|
||||
SAMBRO,sambro,sambro
|
||||
SeedDMS,seeddms,dms
|
||||
Sigmah,sigmah,sigmah
|
||||
Ushahidi,ushahidi,ush
|
|
13
doc/applications/attachments/images-list-basic.csv
Normal file
@ -0,0 +1,13 @@
|
||||
Product,Layer
|
||||
Alpine 3.8,alpine3.8
|
||||
Alpine 3.8 - PHP 5.6,alpine3.8-php5.6
|
||||
Alpine 3.9 - Ruby 2.4,alpine3.8-ruby2.4
|
||||
Alpine 3.9,alpine3.9
|
||||
Alpine 3.9 - Java 8,alpine3.9-java8
|
||||
Alpine 3.9 - PHP 7.2,alpine3.9-php7.2
|
||||
Alpine 3.9 - Python 2.7,alpine3.9-python2.7
|
||||
Alpine 3.9 - Python 3.6,alpine3.9-python3.6
|
||||
Alpine 3.9 - Ruby 2.4,alpine3.9-ruby2.4
|
||||
Alpine 3.9 - Ruby 2.6,alpine3.9-ruby2.6
|
||||
Alpine 3.9 - Tomcat 7,alpine3.9-tomcat7
|
||||
Alpine 3.9 - Tomcat 8.5,alpine3.9-tomcat8.5
|
|
8
doc/applications/attachments/images-list-services.csv
Normal file
@ -0,0 +1,8 @@
|
||||
Product,Layer,UID/GID,Internal Port
|
||||
ActiveMQ,activemq,61616,61616 (ActiveMQ)
|
||||
MariaDB,mariadb,3306,3306 (MySQL)
|
||||
Postgres,postgres,5432,5432 (Postgres)
|
||||
PostGIS,postgis,5432,5432 (Postgres)
|
||||
RabbitMQ,rabbitmq,5672,5672 (AMQP)
|
||||
Redis,redis,6379,6379 (Redis)
|
||||
Solr 6,solr6,8983,8983 (HTTP)
|
|
12
doc/applications/attachments/map-services.csv
Normal file
@ -0,0 +1,12 @@
|
||||
Application,Data sources,Map viewer,Configurable,Notes
|
||||
CKAN,OSM (`Stamen <http://maps.stamen.com>`_),Leaflet,No,[1]
|
||||
CrisisCleanup v2,Google Maps,Google Maps,No,
|
||||
CrisisCleanup v3,OSM,Leaflet,No,
|
||||
Crismapp,OSM,Leaflet,,
|
||||
CTS,"OSM, `ArcGIS <http://server.arcgisonline.com/arcgis/rest/services>`_",Leaflet,No,
|
||||
EcoGIS,,FreeGIS + OpenLayers 2,Probably,[2]
|
||||
Odoo,Google Maps,Google Maps,No,[3]
|
||||
OpenMapKit,OSM,N/A,Yes,[4]
|
||||
Pan.do/ra,Google Maps,Google Maps + OxMap,No,
|
||||
Sahana Eden,OSM (`HOT <https://www.hotosm.org/>`_),OpenLayers 2,"Yes, very",[5]
|
||||
Ushahidi,"OSM (`Mapbox <https://www.mapbox.com/about/maps/>`_, `HOT`_)",Leaflet,No,
|
|
78
doc/applications/ckan.rst
Normal file
@ -0,0 +1,78 @@
|
||||
CKAN
|
||||
====
|
||||
|
||||
Overview
|
||||
--------
|
||||
|
||||
CKAN is an open-source DMS (data management system) for powering data hubs and data portals. CKAN makes it easy to publish, share and use data. It is written in python, has Flask-based web interface and uses Postgres database with PostGIS extension. CKAN exposes API which allows third parties to create extensions.
|
||||
|
||||
The project is split to several components. The most important ones are:
|
||||
|
||||
- **ckan** - https://github.com/ckan/ckan - The main DMS component with Flask frontend.
|
||||
- **datapusher** - https://github.com/ckan/datapusher - A standalone web service that pushes data files from a CKAN site's resources into its DataStore.
|
||||
- **ckan-service-provider** - https://github.com/ckan/ckan-service-provider - A library for making web services that make functions available as synchronous or asynchronous jobs.
|
||||
|
||||
Apart from that, CKAN requires a *Redis* in-memory data store and *Solr* search platform instance. Note that CKAN is shipped with Solr schemas which don't work well with up-to-date versions of Solr, therefore we use older Solr 6.5.1.
|
||||
|
||||
DataPusher
|
||||
----------
|
||||
|
||||
DataPusher is running as a separate service. Its development is a bit out of sync with the core ckan component. SKAN has already moved to python 3, however datapusher is still working only with python 2.7. Due to that, DataPusher has its own image and is running as a separate container.
|
||||
|
||||
Alpine, being a progressive linux distribution, stopped supporting uwsgi connector for python 2.7 in Alpine 3.11, therefore the container needs to be based on older Alpine 3.10 which still ships with *uwsgi-python2*.
|
||||
|
||||
The connection between CKAN and DataPusher is done via HTTPS endpoints. There is a possibility to disable TLS certificate verification, but a better solution seems to be import any self-signed certificate into the DataPusher's trust store. There is a script which automatically handles the import whenever the DataPusher container starts.
|
||||
|
||||
Extensions
|
||||
----------
|
||||
|
||||
CKAN container comes with several preinstalled and preconfigured extensions. Historically, there were more extensions, but over the time CKAN's API evolved and the development has moved to python 3, so majority of the historical extensions are no longer operational.
|
||||
|
||||
ckan/ckanext-basiccharts
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
- URL: https://github.com/ckan/ckanext-basiccharts
|
||||
|
||||
Adds Line, Bar and Pie charts. It uses Flot Charts, which is compatible with all major browsers (including IE6+).
|
||||
|
||||
ckan/ckanext-spatial
|
||||
^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
- URL: https://github.com/ckan/ckanext-spatial
|
||||
|
||||
Contains plugins that add geospatial capabilities to CKAN. E.g. a spatial field on the default CKAN dataset schema which allows to perform spatial queries and to display the dataset extent on the frontend.
|
||||
|
||||
ckan/ckanext-geoview
|
||||
^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
- URL: https://github.com/ckan/ckanext-geoview
|
||||
|
||||
Contains view plugins to display geospatial files and services in CKAN. It contains an OpenLayers based viewer and other view plugins that used to be part of ckanext-spatial.
|
||||
|
||||
ckan/ckanext-mapviews
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
- URL: https://github.com/ckan/ckanext-mapviews
|
||||
|
||||
Adds regular and choropleth maps to CKAN, using the new CKAN Resource View. It uses LeafletJS, which is compatible with all major browsers (including IE7+).
|
||||
|
||||
XVTSolutions/ckanext-spatialUI
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
- URL: https://github.com/XVTSolutions/ckanext-spatialUI
|
||||
|
||||
Provides the UI elements for spatial search. Spatial search widget and dataset extent map.
|
||||
|
||||
aptivate/ckanext-datasetthumbnail
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
- URL: https://github.com/aptivate/ckanext-datasetthumbnail
|
||||
|
||||
Adds support for generation and display of thumbnail images.
|
||||
|
||||
datagvat/ckanext-dgvat_xls
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
- URL: https://github.com/datagvat/ckanext-dgvat_xls
|
||||
|
||||
Allows group admin to export datasets from their organizations to export all datasets to a .xls worksheet. Sysadmins may choose to export datasets from any organization they want or to export all datasets of all groups.
|
21
doc/applications/crisiscleanup.rst
Normal file
@ -0,0 +1,21 @@
|
||||
CrisisCleanup
|
||||
=============
|
||||
|
||||
Overview
|
||||
--------
|
||||
|
||||
Crisis Cleanup is a collaboration platform that connects disaster recovery organization volunteers with people who need help after a disaster. It is a Ruby on Rails application written for Ruby 2.6 with NodeJS-dependent web frontend.
|
||||
|
||||
Upstream URL: https://github.com/CrisisCleanup/crisiscleanup-2
|
||||
|
||||
Version 2 maintenance
|
||||
---------------------
|
||||
|
||||
As of 2020-03-27, CrisisCleanup v2 is no longer maintained. The maintenance has been discontinued in favor of CrisisCleanup v3, which splits the backend and frontend into two separate projects. Unfortunately the source of the backend part hasn't been opened and the creator has no plants to do so, so currently only the frontend application as available on https://github.com/CrisisCleanup/crisiscleanup-3-web.
|
||||
|
||||
Version 3 uses OpenStreetMap and Leaflet, whereas version 2 used Google Maps.
|
||||
|
||||
NodeJS compatibility
|
||||
--------------------
|
||||
|
||||
The application uses NodeJS to generate and pack assets, however due to its age, yarn dependencies installation fails on NodeJS versions newer than 8, therefore the NodeJS version has been frozen on 8.14.0 provided by Alpine 3.8.
|
26
doc/applications/decidim.rst
Normal file
@ -0,0 +1,26 @@
|
||||
Decidim
|
||||
=======
|
||||
|
||||
Overview
|
||||
--------
|
||||
|
||||
Decidim is a participatory democracy platform for cities and organizations. Decidim is written and runs on Ruby 2.6, where it is installed as Ruby Gem. Incoming HTTP requests are handled via passenger nginx plugin.
|
||||
|
||||
Upstream URL: https://github.com/decidim/decidim
|
||||
|
||||
Passenger nginx plugin
|
||||
----------------------
|
||||
|
||||
The passenger plugin work as application proxy between HTTP server and Ruby on Rails applications. Nginix doesn't have modules API like Apache does, so all nginx module must be present at compile time and only then they can be loaded and unloaded at runtime. Passenger plugin is not present in the standard Alpine nginx packages, therefore for passenger to work, a custom version of nginx including the passenger plugin needs to be compiled. Passenger sources contain ``passenger-install-nginx-module`` script which eases and semi-automates the compilation.
|
||||
|
||||
Database upgrades
|
||||
-----------------
|
||||
|
||||
Decidim creates a series of database migration scripts under ``db/migrate`` directory. Unfortunately, these script are not created deterministically as their file names are always created with current build's timestamp. The same script using the same Decidim version therefore always ends up with different database migration scripts. Newly added scripts in a new version of Decidim are not sorted at the end, so it's impossible to determine which scripts need to applied from the filenames alone.
|
||||
|
||||
During manual upgrade, the workaround is to compare the directories between the old and the new image, stripping the timestamp and running only the scripts which don't exist in the old directory, however this is impossible to be done during automatic upgrade, as the old image is removed before the upgrade script is executed.
|
||||
|
||||
Additional site creation
|
||||
------------------------
|
||||
|
||||
Decidim allows to create managed sites using the superadmin interface on ``https://<Decidim URL>/system/``. The sites require their own (sub)domains, therefore some additional considerations must be taken when setting up HTTP reverse proxies and TLS certificates.
|
97
doc/applications/frontlinesms.rst
Normal file
@ -0,0 +1,97 @@
|
||||
FrontlineSMS
|
||||
============
|
||||
|
||||
Overview
|
||||
--------
|
||||
|
||||
FrontlineSMS is a system for both manual and automatic processing of SMS, supporting creation of various SMS workflows. The application is written in Java (resp. Groovy) and uses Grails layout engine. It has its own installer which deploys single-tenant Jetty lightweight applicaiton server. To work efficiently, FrontlineSMS requires a device with SMS capabilities or a connection to third-party service such as Twilio.
|
||||
|
||||
The version of FrontlineSMS is no longer maintained by the original developers and no new updates are expected to appear. The manufacturer currently offers and supports only a cloud version of FrontlineSMS.
|
||||
|
||||
Upstream URL: https://github.com/frontlinesms/frontlinesms2
|
||||
|
||||
Fork URL: https://github.com/trendspotter/frontlinesms2 - the fork contains the last known working version of installer as a release.
|
||||
|
||||
Modem capabilities
|
||||
------------------
|
||||
|
||||
There are special considerations to be taken whenever an application witch direct access to hardware is run in a container. Currently FrontlineSMS has not been tested with such device and it is expected that some extra work or container configuration not present in any other application needs to be done in order to make the hardware device available and usable by the container.
|
||||
|
||||
Localization
|
||||
------------
|
||||
|
||||
FrontlineSMS is localized to Czech only locally on SpoterVM. Upstream doesn't contain the localization as the application is not developed anymore. The localization is supplied as a Java property file ``WEB-INF/grails-app/i18n/messages_cs.properties`` and then once again as the same file packed and minifies as ``assets/i18n/frontlinesms-core_messages_cs.js``. The minified file can be created using ``frontlinesms-lang-js.py`` helper script in SpotterVM repository.
|
||||
|
||||
Java support
|
||||
------------
|
||||
|
||||
Due to the age of the application (latest release somewhere in 2014), FrontlineSMS doesn't work well with current versions of Java runtime. The last know working version is Java 8.222.10 supplied by Alpine 3.8. More recent version, e.g. Java 8.242 cause HTTP connection accept failures.
|
||||
|
||||
X server
|
||||
--------
|
||||
|
||||
Although FrontlineSMS is a web application, it requires X server as it attempts to install a systray icon. On a headless server, this requirement can be worked around using ``xf86-video-dummy`` package which works as a *blackhole* display driver.
|
||||
|
||||
The X server is then started as
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
Xorg -noreset +extension GLX +extension RANDR +extension RENDER -config dummy.conf :10
|
||||
|
||||
Where the ``dummy.conf`` looks as follows
|
||||
|
||||
.. code-block:: xorg.conf
|
||||
|
||||
Section "ServerFlags"
|
||||
Option "DontVTSwitch" "true"
|
||||
Option "AllowMouseOpenFail" "true"
|
||||
Option "PciForceNone" "true"
|
||||
Option "AutoEnableDevices" "false"
|
||||
Option "AutoAddDevices" "false"
|
||||
EndSection
|
||||
|
||||
Section "InputDevice"
|
||||
Identifier "dummy_mouse"
|
||||
Option "CorePointer" "true"
|
||||
Driver "void"
|
||||
EndSection
|
||||
|
||||
Section "InputDevice"
|
||||
Identifier "dummy_keyboard"
|
||||
Option "CoreKeyboard" "true"
|
||||
Driver "void"
|
||||
EndSection
|
||||
|
||||
Section "Device"
|
||||
Identifier "dummy_videocard"
|
||||
Driver "dummy"
|
||||
Option "ConstantDPI" "true"
|
||||
VideoRam 192000
|
||||
EndSection
|
||||
|
||||
Section "Monitor"
|
||||
Identifier "dummy_monitor"
|
||||
HorizSync 5.0 - 1000.0
|
||||
VertRefresh 5.0 - 200.0
|
||||
Modeline "1280x720" 27.41 1280 1312 1416 1448 720 737 740 757
|
||||
EndSection
|
||||
|
||||
Section "Screen"
|
||||
Identifier "dummy_screen"
|
||||
Device "dummy_videocard"
|
||||
Monitor "dummy_monitor"
|
||||
DefaultDepth 24
|
||||
SubSection "Display"
|
||||
Viewport 0 0
|
||||
Depth 24
|
||||
Modes "1280x720"
|
||||
Virtual 8192 4096
|
||||
EndSubSection
|
||||
EndSection
|
||||
|
||||
Section "ServerLayout"
|
||||
Identifier "dummy_layout"
|
||||
Screen "dummy_screen"
|
||||
InputDevice "dummy_mouse"
|
||||
InputDevice "dummy_keyboard"
|
||||
EndSection
|
25
doc/applications/images-list.rst
Normal file
@ -0,0 +1,25 @@
|
||||
List of existing container images
|
||||
=================================
|
||||
|
||||
Basic and runtime images
|
||||
------------------------
|
||||
|
||||
.. csv-table::
|
||||
:file: attachments/images-list-basic.csv
|
||||
:header-rows: 1
|
||||
|
||||
Common service images
|
||||
---------------------
|
||||
|
||||
.. csv-table::
|
||||
:file: attachments/images-list-services.csv
|
||||
:header-rows: 1
|
||||
|
||||
List of application images
|
||||
--------------------------
|
||||
|
||||
All application images have the application user UID/GID 8080 and listen on internal port 8080 (HTTP).
|
||||
|
||||
.. csv-table::
|
||||
:file: attachments/images-list-apps.csv
|
||||
:header-rows: 1
|
21
doc/applications/index.rst
Normal file
@ -0,0 +1,21 @@
|
||||
Applications and containers
|
||||
===========================
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
images-list
|
||||
tech-knowledge
|
||||
map-services
|
||||
ckan
|
||||
crisiscleanup
|
||||
decidim
|
||||
frontlinesms
|
||||
kanboard
|
||||
opendatakit
|
||||
openmapkit
|
||||
pandora
|
||||
sahana
|
||||
sahana-configuration-report
|
||||
seeddms
|
||||
taarifa
|
121
doc/applications/kanboard.rst
Normal file
@ -0,0 +1,121 @@
|
||||
Kanboard
|
||||
========
|
||||
|
||||
Overview
|
||||
--------
|
||||
|
||||
Kanboard is a Kanban project management tool written in PHP. It supports creation of projects and their population with tasks, provides Kanban boards with swimlanes, charts etc. It is extensile via plugins.
|
||||
|
||||
Upstream URL: https://github.com/kanboard/kanboard
|
||||
|
||||
Localization
|
||||
------------
|
||||
|
||||
Kanboard is localized via PHP files containing associative arrays with original English string and the translation in the respective language. Every plugin has its own localization files. Due to this, we currently maintain forks or 4 repositories with plugins where the original maintainer decided to discontinue support.
|
||||
|
||||
Plugins
|
||||
-------
|
||||
|
||||
Following list summarizes state of Kanboard plugins used or requested in our container as of 05/2020.
|
||||
|
||||
BlueTeck/kanboard_plugin_overwrite_translation
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
- URL: https://github.com/BlueTeck/kanboard_plugin_overwrite_translation
|
||||
|
||||
Supplies translation strings via additional configuration file for other plugins which are missing or have incorrect translations. Not updated anymore, however the maintainer is active on GitHub. This plugin has initially been requested to be included in our installation, but due to its purpose, it's mostly useless as all translations were done in the respective plugin localization files.
|
||||
|
||||
BlueTeck/kanboard_plugin_coverimage
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
- URL: https://github.com/BlueTeck/kanboard_plugin_coverimage
|
||||
|
||||
This plugin adds a cover image function to tasks on the board, and allows you to set a project image to use as a logo for projects. Development is active.
|
||||
|
||||
BlueTeck/kanboard_plugin_metadata
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
- URL: https://github.com/BlueTeck/kanboard_plugin_metadata
|
||||
|
||||
This plugin adds a basic GUI for Plugin Metadata. Not updated anymore, however the maintainer is active on GitHub.
|
||||
|
||||
eSkiSo/Subtaskdate
|
||||
^^^^^^^^^^^^^^^^^^
|
||||
|
||||
- URL: https://github.com/eSkiSo/Subtaskdate
|
||||
|
||||
Adds a new due date field for subtasks, including events, API and search functions. Development is active.
|
||||
|
||||
kanboard/plugin-budget
|
||||
^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
- URL: https://github.com/kanboard/plugin-budget
|
||||
- Fork URL: https://github.com/trendspotter/kanboard-plugin-budget
|
||||
|
||||
Allows to create budget lines, see expenses based on sub-task time tracking and manage user hourly rates. Repository has been forked. The original repository is archived.
|
||||
|
||||
kanboard/plugin-calendar
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
- URL: https://github.com/kanboard/plugin-calendar
|
||||
|
||||
Adds embedded calendar view for Kanboard. Development is active.
|
||||
|
||||
kanboard/plugin-chat
|
||||
^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
- URL: https://github.com/kanboard/plugin-chat
|
||||
- Fork URL: https://github.com/trendspotter/kanboard-plugin-chat
|
||||
|
||||
Minimalist internal chat for Kanboard. Allows only one room for all users. Repository has been forked. The original repository is archived.
|
||||
|
||||
kanboard/plugin-gantt
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
- URL: https://github.com/kanboard/plugin-gantt
|
||||
|
||||
Adds Gantt charts for Kanboard. Development is active.
|
||||
|
||||
kanboard/plugin-gravatar
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
- URL: https://github.com/kanboard/plugin-gravatar
|
||||
|
||||
Enables Gravatar icons for Kanboard users. Repository is archived. There are no strings for translation, so it hasn't been forked.
|
||||
|
||||
kanboard/plugin-registration
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
- URL: https://github.com/kanboard/plugin-registration
|
||||
|
||||
Allows new user to sign up to Kanboard. Development is active.
|
||||
|
||||
kanboard/plugin-sms-2fa
|
||||
^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
- URL: https://github.com/kanboard/plugin-sms-2fa
|
||||
- Fork URL: https://github.com/trendspotter/kanboard-plugin-sms-2fa
|
||||
|
||||
Allows to use text messages (SMS) instead of the default TOTP system (Time-based One-time Password Algorithm). Works with Twilio service. Repository has been forked. The original repository is archived.
|
||||
|
||||
kanboard/plugin-task-board-date
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
- URL: https://github.com/kanboard/plugin-task-board-date
|
||||
|
||||
Adds new date field for tasks to define the visibility on the board and dashboard. Repository is archived. There are no strings for translation, so it hasn't been forked.
|
||||
|
||||
oliviermaridat/kanboard-milestone-plugin
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
- URL: https://github.com/oliviermaridat/kanboard-milestone-plugin
|
||||
|
||||
Adds section for milestones to show their related tasks. Development is active.
|
||||
|
||||
xavividal/kanboard-plugin-relationgraph
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
- URL: https://github.com/xavividal/kanboard-plugin-relationgraph
|
||||
- Fork URL: https://github.com/trendspotter/kanboard-plugin-relationgraph
|
||||
|
||||
Shows relations between tasks using a graph library. Repository has been forked. The original repository is inactive.
|
12
doc/applications/map-services.rst
Normal file
@ -0,0 +1,12 @@
|
||||
Map services used in applications
|
||||
=================================
|
||||
|
||||
.. csv-table::
|
||||
:file: attachments/map-services.csv
|
||||
:header-rows: 1
|
||||
|
||||
1. Used by CKAN extensions *reclineview*, *spatial* and *geoview*.
|
||||
2. Untested as the EcoGIS source code is not fully open. Looks like the data sources are configurable, but the full documentation is only in Italian.
|
||||
3. Used by Odoo *Google Maps* module to display company/partner address on map.
|
||||
4. Map is used by OMK and ODK Android clients. OMK Server only offers API.
|
||||
5. Sahana Eden supports multitude of connectors and protocols to process map and feature data. ArcGIS REST, Bing maps, GeoJSON, GeoRSS, Google Maps, GPX, KML, MGRS, OSM, OWM, Shapefile, TMS, WFS, WMS and XYZ.
|
24
doc/applications/opendatakit.rst
Normal file
@ -0,0 +1,24 @@
|
||||
OpenDataKit
|
||||
===========
|
||||
|
||||
Overview
|
||||
--------
|
||||
|
||||
OpenDataKit is a suite of tools that help organizations collect and manage data, typically via mobile application. The most interesting components used on SpotterVM are
|
||||
|
||||
- **ODK Aggregate** - Main data storage server and analysis tool, written in Java, running on Apache Tomcat using PostgreSQL database.
|
||||
- **ODK Build** - Drag-and-drop form designer, written in Ruby 2.4, requires NodeJS for frontend assets.
|
||||
- **build2xlsform** - Service to convert ODK Build forms to xlsform-compliant XLSX, written in LiveScript (NodeJS).
|
||||
|
||||
Upstream URLs:
|
||||
|
||||
- **ODK Aggregate** - https://github.com/getodk/build
|
||||
- **ODK Build** - https://github.com/getodk/build
|
||||
- **build2xlsform** - https://github.com/getodk/build2xlsform
|
||||
|
||||
ODK Build exports
|
||||
-----------------
|
||||
|
||||
ODK Build runs in a container separate from ODK Aggregate and doesn't use any database engine for its persistent storage. ODK Build can however export the designed form to ODK Aggregate via HTTP endpoint. In case HTTPS is used with self-signed certificate, it needs to be imported to OpenSSL trust store prior to first communication attempt. In our container, this is ensured by ``add-ca-cert`` script.
|
||||
|
||||
build2xlsform lives in the same container as ODK Build and allows for export of ODK Build JSON forms to XLSX files editable via any modern office suite.
|
12
doc/applications/openmapkit.rst
Normal file
@ -0,0 +1,12 @@
|
||||
OpenMapKit
|
||||
==========
|
||||
|
||||
Overview
|
||||
--------
|
||||
|
||||
OpenMapKit is a standalone extension to OpenDataKit providing mapping features and handles collection and aggregation of OpenStreetMap and OpenDataKit data generated via mobile applications.
|
||||
|
||||
NodeJS compatibility
|
||||
--------------------
|
||||
|
||||
OpenMapKit is purely NodeJS application. Unfortunately it depends on a libxmljs module in version incompatible with NodeJS version newer that 10. Due to that OpenMapKit is currently frozen on NodeJS 10.19.0 provided by Alpine 3.10.
|
25
doc/applications/pandora.rst
Normal file
@ -0,0 +1,25 @@
|
||||
Pan.do/ra
|
||||
=========
|
||||
|
||||
Overview
|
||||
--------
|
||||
|
||||
Pan.do/ra is a free, open source media archive platform. It allows to manage large, decentralized collections of video and collaboratively create metadata and time-based annotations. Pan.do/ra is a Django-based application written in python and is split to several components, most notably OxJS javascript framework and oxtimelines. It heavily relies on *ffmpeg* and uses *RabbitMQ* to pass messages between the components.
|
||||
|
||||
Upstream URLs
|
||||
^^^^^^^^^^^^^
|
||||
|
||||
- Pan.do/ra: https://code.0x2620.org/0x2620/pandora
|
||||
- OxJS: https://code.0x2620.org/0x2620/oxjs
|
||||
- python-ox: https://code.0x2620.org/0x2620/python-ox
|
||||
- oxtimelines: https://code.0x2620.org/0x2620/oxtimelines
|
||||
|
||||
Localization
|
||||
------------
|
||||
|
||||
Czech localtization for Pan.do/ra currently exists only in SpotterVM repository. Separate localization is required for Pan.do/ra and OxJS framework which it uses. Moreover, the list of supported languages is hardcoded, so localization entails also modification of this fixed list of languages.
|
||||
|
||||
Python 3.8 compatibility
|
||||
------------------------
|
||||
|
||||
Pandora uses Celery message broker, however depends on a version with known incompatibility with python 3.8, see https://github.com/celery/celery/issues/5761. This can be worked around by setting environment variable ``COLUMNS`` to value ``80`` prior to launching the celery process. The affected services run by container's s6 daemon supervisor are currently configured to use this workaround.
|