Compare commits
2975 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
c73c5f022a | ||
![]() |
336a3418e9 | ||
![]() |
27bdcb072c | ||
![]() |
3c71712653 | ||
![]() |
ed675f628d | ||
![]() |
62a34a6105 | ||
![]() |
0f1b1fc433 | ||
![]() |
0134325bfe | ||
![]() |
d2bcb4c34a | ||
![]() |
1e5ea5ff6f | ||
![]() |
1183448f4f | ||
![]() |
cd424ac955 | ||
![]() |
e7bb32a485 | ||
![]() |
d9b091be1a | ||
![]() |
4d4385a840 | ||
![]() |
a68069d3ee | ||
![]() |
544e49ecf8 | ||
![]() |
9f7c479b0d | ||
![]() |
eaeb96ae14 | ||
![]() |
2058903689 | ||
![]() |
40e970d828 | ||
![]() |
9a2de6cad5 | ||
![]() |
b6c8bc17da | ||
![]() |
8a16a8ffe0 | ||
![]() |
22a95cae08 | ||
![]() |
e4c51fe22e | ||
![]() |
c5c984f3e5 | ||
![]() |
13acbe94b0 | ||
![]() |
88168842dc | ||
![]() |
5e732ce67f | ||
![]() |
d746bf3353 | ||
![]() |
b4e38e8741 | ||
![]() |
e74b129f22 | ||
![]() |
0516aa5971 | ||
![]() |
20650fd3e7 | ||
![]() |
36b38d5118 | ||
![]() |
513c759e5c | ||
![]() |
8e6e92b37c | ||
![]() |
0df22b0504 | ||
![]() |
4388da4859 | ||
![]() |
500e26d500 | ||
![]() |
0351d2fb5e | ||
![]() |
1cdfc3e6f6 | ||
![]() |
af85242be5 | ||
![]() |
28bde64e9a | ||
![]() |
770587eee2 | ||
![]() |
d1e57d6bd2 | ||
![]() |
d21348822c | ||
![]() |
c0d07013fc | ||
![]() |
4932495daa | ||
![]() |
45dbdb3b82 | ||
![]() |
4f7ce2b8a7 | ||
![]() |
3de15bed49 | ||
![]() |
bd5f010409 | ||
![]() |
d423c3c2d9 | ||
![]() |
9ff4947021 | ||
![]() |
e174972fe2 | ||
![]() |
8c8b0b2c62 | ||
![]() |
b419daf43a | ||
![]() |
bf9dbc0321 | ||
![]() |
e63326bbea | ||
![]() |
5209508584 | ||
![]() |
425442c248 | ||
![]() |
b6c919a0e8 | ||
![]() |
58d568685e | ||
![]() |
c891c1df7e | ||
![]() |
4d9a4e4dc4 | ||
![]() |
208cd6ab4e | ||
![]() |
c8e555c9b3 | ||
![]() |
e4761966f3 | ||
![]() |
2eed08965c | ||
![]() |
f9ae449ebb | ||
![]() |
c2c710a9d1 | ||
![]() |
4d4762106e | ||
![]() |
3aa0bb42a7 | ||
![]() |
ce80eb5939 | ||
![]() |
8f7f08cea9 | ||
![]() |
81a2a013c8 | ||
![]() |
f0ccc61b05 | ||
![]() |
7eaf68cd41 | ||
![]() |
c8feef9063 | ||
![]() |
c7eb225de4 | ||
![]() |
35b5e8e670 | ||
![]() |
69a18c7375 | ||
![]() |
8b77877d6b | ||
![]() |
6558fb41f1 | ||
![]() |
3b60da7cd4 | ||
![]() |
4325658924 | ||
![]() |
01d3595a83 | ||
![]() |
dd8b195db9 | ||
![]() |
dc5999a3c7 | ||
![]() |
ac9735b8d3 | ||
![]() |
836990aaca | ||
![]() |
c4b8ef5586 | ||
![]() |
5c8d1da6e5 | ||
![]() |
b377858178 | ||
![]() |
ba88e6e17c | ||
![]() |
069005cc29 | ||
![]() |
b34186ff0c | ||
![]() |
6d9e0ae5f5 | ||
![]() |
fa9989bf51 | ||
![]() |
15447780fa | ||
![]() |
f26489d653 | ||
![]() |
655f5cb7b0 | ||
![]() |
45f5539f9c | ||
![]() |
58e7bcd260 | ||
![]() |
19c64497ef | ||
![]() |
5022cfaf37 | ||
![]() |
502782f5ed | ||
![]() |
f8a7af1970 | ||
![]() |
a3b4daba4e | ||
![]() |
da34292f10 | ||
![]() |
870014d879 | ||
![]() |
1093ae3f9b | ||
![]() |
16cbf0ef34 | ||
![]() |
898485adbe | ||
![]() |
7d41e56e02 | ||
![]() |
4ecd33514c | ||
![]() |
e2d9d29164 | ||
![]() |
b7a8731e9c | ||
![]() |
02a5771666 | ||
![]() |
151ba3e15e | ||
![]() |
f4a4800174 | ||
![]() |
0ebc94821d | ||
![]() |
483ca2305b | ||
![]() |
01db973bec | ||
![]() |
01d289cb4f | ||
![]() |
27ff2d63e2 | ||
![]() |
02fca137b3 | ||
![]() |
850f08d37f | ||
![]() |
e4cf6d294a | ||
![]() |
0bb32723e8 | ||
![]() |
a791651366 | ||
![]() |
0e26641158 | ||
![]() |
ff23ede250 | ||
![]() |
e15a02caf1 | ||
![]() |
5d2b4c84fc | ||
![]() |
1b01d920db | ||
![]() |
5e461ff1ce | ||
![]() |
2c56f5248b | ||
![]() |
24a3c06a35 | ||
![]() |
f1342ebcfd | ||
![]() |
588820ff13 | ||
![]() |
9e64abc9d9 | ||
![]() |
7426a3a287 | ||
![]() |
5581a40b2b | ||
![]() |
6a4b33a960 | ||
![]() |
2d701b77e2 | ||
![]() |
77c45141bc | ||
![]() |
ac377df504 | ||
![]() |
083cd12727 | ||
![]() |
14e1201d82 | ||
![]() |
e477377214 | ||
![]() |
522b13e5d4 | ||
![]() |
b3c1a8d937 | ||
![]() |
6918d21639 | ||
![]() |
b4e3a61fe4 | ||
![]() |
0720b0c2a8 | ||
![]() |
0592776504 | ||
![]() |
2f0abcf7fa | ||
![]() |
2de42dc72a | ||
![]() |
87d63e5f32 | ||
![]() |
c5fedf71c2 | ||
![]() |
b02db0b46c | ||
![]() |
003230d137 | ||
![]() |
e70c6863f9 | ||
![]() |
2b70db09fe | ||
![]() |
9283f7fc3d | ||
![]() |
11c2072580 | ||
![]() |
45c5c0ff57 | ||
![]() |
440b788bd5 | ||
![]() |
ec67c362f7 | ||
![]() |
5e283e0cc5 | ||
![]() |
85e6e26f9d | ||
![]() |
b3a14cfc35 | ||
![]() |
85871f325a | ||
![]() |
ffea31dfd6 | ||
![]() |
7cd267c421 | ||
![]() |
449b0a226c | ||
![]() |
be1ec81a58 | ||
![]() |
13ae51c54a | ||
![]() |
1a092f8ee7 | ||
![]() |
26d5e18e7d | ||
![]() |
6d4784bba8 | ||
![]() |
f9cb44982e | ||
![]() |
f67c8fd11c | ||
![]() |
168789c609 | ||
![]() |
e70f4b7197 | ||
![]() |
81e5fae6dc | ||
![]() |
e98bb8d3c0 | ||
![]() |
4719fbd443 | ||
![]() |
2f967e9077 | ||
![]() |
240f28d5dc | ||
![]() |
96bb62a010 | ||
![]() |
81ebfb7902 | ||
![]() |
60c58ec6df | ||
![]() |
6fdf6f747e | ||
![]() |
0635a16d2b | ||
![]() |
91cddd9fb0 | ||
![]() |
970b4dfb5d | ||
![]() |
c2df07efd1 | ||
![]() |
1d3d7a0e75 | ||
![]() |
9afa8101b4 | ||
![]() |
0a215c2476 | ||
![]() |
5f33c94f09 | ||
![]() |
51e1bf4452 | ||
![]() |
c0ab542310 | ||
![]() |
ca88646ad2 | ||
![]() |
3f3b7e429e | ||
![]() |
af65af5e14 | ||
![]() |
ce89ac53fa | ||
![]() |
ccd08a08d1 | ||
![]() |
e6bec47aec | ||
![]() |
186d50dec3 | ||
![]() |
b5c03d509d | ||
![]() |
5321480fb5 | ||
![]() |
00fe2e2c67 | ||
![]() |
4d8776a35c | ||
![]() |
a7ae5162e7 | ||
![]() |
98dfd49f6e | ||
![]() |
eddec30f4a | ||
![]() |
e70263dc30 | ||
![]() |
64e8b706ad | ||
![]() |
5062bfe95a | ||
![]() |
de18ad8b36 | ||
![]() |
1404ac3285 | ||
![]() |
622135c570 | ||
![]() |
40587e4d8e | ||
![]() |
c290205fb9 | ||
![]() |
127d88efcc | ||
![]() |
fac733a0a1 | ||
![]() |
4de59b58b3 | ||
![]() |
1ef72dc481 | ||
![]() |
07cdde07c0 | ||
![]() |
a015d2c399 | ||
![]() |
0a9ce40ff9 | ||
![]() |
275f996226 | ||
![]() |
9bb38ce501 | ||
![]() |
d206bc238d | ||
![]() |
c17066cb07 | ||
![]() |
30d2e69304 | ||
![]() |
d73191099a | ||
![]() |
3f837a2fc2 | ||
![]() |
487ccd45b4 | ||
![]() |
f2d09038d5 | ||
![]() |
252de3b0d4 | ||
![]() |
c8d49b71cb | ||
![]() |
72af1378e4 | ||
![]() |
dee7ec41f5 | ||
![]() |
432a0c720e | ||
![]() |
720771709f | ||
![]() |
16b3afe0ab | ||
![]() |
2896fa398a | ||
![]() |
50769843ba | ||
![]() |
2995282d49 | ||
![]() |
39a94dd4d4 | ||
![]() |
6324c5f97b | ||
![]() |
7e66b82e0e | ||
![]() |
4523db7036 | ||
![]() |
b402ee4c5f | ||
![]() |
6a33cbc6dc | ||
![]() |
16094398d7 | ||
![]() |
9f238868e9 | ||
![]() |
37c8f6f897 | ||
![]() |
624f8ca1a7 | ||
![]() |
df210e6e45 | ||
![]() |
b57aba6acf | ||
![]() |
7a7c7bd97b | ||
![]() |
4f71a73e3f | ||
![]() |
041574a1ee | ||
![]() |
3ca368fbbe | ||
![]() |
c67499b222 | ||
![]() |
5f1df69528 | ||
![]() |
1781062bfe | ||
![]() |
68f21035c1 | ||
![]() |
885be6ccb2 | ||
![]() |
5a2257c445 | ||
![]() |
ee3cc02864 | ||
![]() |
bf9aaa9076 | ||
![]() |
154db3ea90 | ||
![]() |
4a194007a8 | ||
![]() |
60b5c47240 | ||
![]() |
d59d03ce27 | ||
![]() |
eb1969d267 | ||
![]() |
b8e42f062f | ||
![]() |
e97b35a3b0 | ||
![]() |
a9f9272388 | ||
![]() |
a3c2ef9b6e | ||
![]() |
a925528657 | ||
![]() |
850d90b416 | ||
![]() |
93e8b5aa14 | ||
![]() |
2c235f3b53 | ||
![]() |
ea41275b5d | ||
![]() |
d033e5a7cf | ||
![]() |
a394ba59a3 | ||
![]() |
547e0456a9 | ||
![]() |
6163c91cd6 | ||
![]() |
672f980335 | ||
![]() |
a6a15dc834 | ||
![]() |
39102b149c | ||
![]() |
e670e61297 | ||
![]() |
d3fd958c4c | ||
![]() |
0b1e6fb9ac | ||
![]() |
e3982b9175 | ||
![]() |
01560a95b1 | ||
![]() |
882d99a6ec | ||
![]() |
67af23321c | ||
![]() |
ea17380591 | ||
![]() |
7070df161c | ||
![]() |
196199e662 | ||
![]() |
950b18b8a1 | ||
![]() |
bd9c177c4e | ||
![]() |
837f8883a2 | ||
![]() |
73038b4b33 | ||
![]() |
0f98f2f55b | ||
![]() |
7c6ef5dba7 | ||
![]() |
56fd14c5fa | ||
![]() |
70eae57b03 | ||
![]() |
43ee57d069 | ||
![]() |
e33800c8e6 | ||
![]() |
fc845973cc | ||
![]() |
901bfb2a3f | ||
![]() |
16b815e58d | ||
![]() |
6134cac0ab | ||
![]() |
f090d605dc | ||
![]() |
e3182203f2 | ||
![]() |
e318fea70f | ||
![]() |
8119b33f3a | ||
![]() |
2b414703cf | ||
![]() |
accea759f6 | ||
![]() |
8828075637 | ||
![]() |
684322e1e2 | ||
![]() |
ef47911beb | ||
![]() |
64e5f65eab | ||
![]() |
329e4a83e9 | ||
![]() |
2551abf9ca | ||
![]() |
d459b8d828 | ||
![]() |
81e8c219ef | ||
![]() |
a7c2a2de16 | ||
![]() |
cb7c97d49b | ||
![]() |
010103a3e3 | ||
![]() |
d0e5d90bbb | ||
![]() |
3274a0b5bc | ||
![]() |
64964d7888 | ||
![]() |
d7e0874c8c | ||
![]() |
91e6623579 | ||
![]() |
f396e2781e | ||
![]() |
d2742b1d62 | ||
![]() |
0ede78d0af | ||
![]() |
742da1b9d7 | ||
![]() |
1355a2b4a2 | ||
![]() |
91ba149d98 | ||
![]() |
fe0e1e518e | ||
![]() |
4e889be7d8 | ||
![]() |
f58a388cdb | ||
![]() |
9bfc8237e0 | ||
![]() |
0d0e5581a5 | ||
![]() |
7dfdcf9b3f | ||
![]() |
3b22b7a100 | ||
![]() |
4444bd191c | ||
![]() |
bfc29736a5 | ||
![]() |
1da893ed06 | ||
![]() |
df662a1349 | ||
![]() |
8c87bee0f6 | ||
![]() |
237570af44 | ||
![]() |
0a2ce9a95a | ||
![]() |
b20fae09d6 | ||
![]() |
2abe5aed4b | ||
![]() |
8bbdd957fb | ||
![]() |
f5302c7409 | ||
![]() |
6d1582096d | ||
![]() |
819c7e72f6 | ||
![]() |
9878ea8a02 | ||
![]() |
50fbeb0168 | ||
![]() |
68678e243d | ||
![]() |
3db93fa19b | ||
![]() |
68772e3f6d | ||
![]() |
14f126ee88 | ||
![]() |
82bd29c2d0 | ||
![]() |
e7b1772f3b | ||
![]() |
fc2979f9da | ||
![]() |
c9b6971489 | ||
![]() |
d270662b73 | ||
![]() |
120d407d38 | ||
![]() |
6965b6ceae | ||
![]() |
8d72c83ca9 | ||
![]() |
5d346e9062 | ||
![]() |
45744386d7 | ||
![]() |
ff7275faf8 | ||
![]() |
1bca7b6d88 | ||
![]() |
afc1d348e0 | ||
![]() |
c4c0dbcad5 | ||
![]() |
9ba52edba9 | ||
![]() |
94126c5280 | ||
![]() |
7e446517fb | ||
![]() |
5b984b82ff | ||
![]() |
04a045ba48 | ||
![]() |
50064448b3 | ||
![]() |
0cd4c8a8fe | ||
![]() |
9752773caa | ||
![]() |
7a195c8eac | ||
![]() |
d9cfe82b51 | ||
![]() |
3ed2502cab | ||
![]() |
69160baa95 | ||
![]() |
5505bd34ad | ||
![]() |
7f7a648881 | ||
![]() |
00dc6423ab | ||
![]() |
da66fb9724 | ||
![]() |
c88a540000 | ||
![]() |
e04a9b35b8 | ||
![]() |
2caebce73d | ||
![]() |
91bff7719a | ||
![]() |
470260444a | ||
![]() |
0f00051870 | ||
![]() |
e1001cc829 | ||
![]() |
8322bf3cef | ||
![]() |
1b7435c4b7 | ||
![]() |
1304cc708d | ||
![]() |
cfe034e0f9 | ||
![]() |
b3aa01a435 | ||
![]() |
bc58fe8e14 | ||
![]() |
1375cec93a | ||
![]() |
9f6326d127 | ||
![]() |
c49ba7a432 | ||
![]() |
b7c65288ad | ||
![]() |
cca7492032 | ||
![]() |
95a5cc9230 | ||
![]() |
96887861c5 | ||
![]() |
bca0620105 | ||
![]() |
dbbdaf91fc | ||
![]() |
da513b438a | ||
![]() |
2d5e4f2dcc | ||
![]() |
c10df9033a | ||
![]() |
861c571352 | ||
![]() |
617c1ca682 | ||
![]() |
de5e579e6c | ||
![]() |
0fdf9804ac | ||
![]() |
c9c8606e87 | ||
![]() |
725a6669fe | ||
![]() |
222035684f | ||
![]() |
6603bd7b40 | ||
![]() |
282ea0866a | ||
![]() |
8a6adc4e69 | ||
![]() |
9ac7c57061 | ||
![]() |
f2b77e913d | ||
![]() |
e7bbdfa937 | ||
![]() |
03eb726415 | ||
![]() |
ba38d95549 | ||
![]() |
19244f43f0 | ||
![]() |
4fae085c6e | ||
![]() |
432c5a8a93 | ||
![]() |
d5807a04e4 | ||
![]() |
e3651ea5b8 | ||
![]() |
75171c09e3 | ||
![]() |
bbe7f80be2 | ||
![]() |
078233ada8 | ||
![]() |
8ff38531b6 | ||
![]() |
019d78f398 | ||
![]() |
7335476a07 | ||
![]() |
4f934ee622 | ||
![]() |
d7599c21ae | ||
![]() |
6662e39e9d | ||
![]() |
df1615de1b | ||
![]() |
2519cc8708 | ||
![]() |
086b022698 | ||
![]() |
9c25636217 | ||
![]() |
7a2dfd9232 | ||
![]() |
029525ab4d | ||
![]() |
4e1f2a4ae9 | ||
![]() |
09e1a91002 | ||
![]() |
4c1c1349d3 | ||
![]() |
414deb3ab1 | ||
![]() |
b3b9ba4722 | ||
![]() |
f64f6d21e9 | ||
![]() |
34f91f1730 | ||
![]() |
7943fe0611 | ||
![]() |
4af7fa5d94 | ||
![]() |
4cbdde88c2 | ||
![]() |
a4ab1f6b8c | ||
![]() |
69d30adca2 | ||
![]() |
02f0da720c | ||
![]() |
8b9b1225ad | ||
![]() |
3f2c2b2ff8 | ||
![]() |
4c461a2055 | ||
![]() |
f49c3af192 | ||
![]() |
082cf33f88 | ||
![]() |
c3715c2194 | ||
![]() |
8109114d9e | ||
![]() |
6f4f77b1eb | ||
![]() |
42126c47eb | ||
![]() |
084304531a | ||
![]() |
34bac321f4 | ||
![]() |
4217baa714 | ||
![]() |
158c077dee | ||
![]() |
d03f245bca | ||
![]() |
fa156fbd52 | ||
![]() |
3b52569be5 | ||
![]() |
4f93dee697 | ||
![]() |
a880c08076 | ||
![]() |
cb8ffbd8dc | ||
![]() |
d94412984c | ||
![]() |
9bb7cb12f1 | ||
![]() |
bec03c8566 | ||
![]() |
19a54e1641 | ||
![]() |
f383624abe | ||
![]() |
1a0c4fe09a | ||
![]() |
bc42a2a343 | ||
![]() |
1cf0f0f140 | ||
![]() |
e998f19a8c | ||
![]() |
83a6413bb4 | ||
![]() |
48f4054a9c | ||
![]() |
c6a202ede0 | ||
![]() |
2397b3847c | ||
![]() |
71b3d6148f | ||
![]() |
880714283b | ||
![]() |
cfae7d81f9 | ||
![]() |
5c9dc1855e | ||
![]() |
d9deaee1e2 | ||
![]() |
679effcecd | ||
![]() |
a7056fc894 | ||
![]() |
19584f5c11 | ||
![]() |
aa12a1be85 | ||
![]() |
1f06f90b95 | ||
![]() |
1ae636b265 | ||
![]() |
6a677a6baa | ||
![]() |
9672c47652 | ||
![]() |
4de2f81e60 | ||
![]() |
4c5e843d94 | ||
![]() |
2b72ffda07 | ||
![]() |
db2d264045 | ||
![]() |
3fe8f44006 | ||
![]() |
eb0e9eacfa | ||
![]() |
7639b75311 | ||
![]() |
2f88ea9d25 | ||
![]() |
371d772c4c | ||
![]() |
3f7f6b7ced | ||
![]() |
cbf7d9a7ca | ||
![]() |
d63a725c65 | ||
![]() |
52cb52271f | ||
![]() |
0a4a6feab0 | ||
![]() |
6080aadf49 | ||
![]() |
b91506b4fb | ||
![]() |
d739ce3e57 | ||
![]() |
76b49c87bc | ||
![]() |
0d0168b1e7 | ||
![]() |
61d84abbd4 | ||
![]() |
fa0b65decf | ||
![]() |
0a6b450684 | ||
![]() |
b0567148ce | ||
![]() |
795ed2919a | ||
![]() |
00522b3d05 | ||
![]() |
ec4a1fd0e7 | ||
![]() |
8727207987 | ||
![]() |
bd961f7b6e | ||
![]() |
e9c98ab822 | ||
![]() |
d11dafd1db | ||
![]() |
5d6521f8ee | ||
![]() |
57434aa107 | ||
![]() |
61823316dc | ||
![]() |
3dd1d8aebf | ||
![]() |
3b087a00cb | ||
![]() |
b63981fb9f | ||
![]() |
358b13376a | ||
![]() |
82e26b118b | ||
![]() |
92f69bb29e | ||
![]() |
6e3e82a6f0 | ||
![]() |
504cef36c1 | ||
![]() |
d731823758 | ||
![]() |
0012aea921 | ||
![]() |
72b0a21e35 | ||
![]() |
f1d3b48db6 | ||
![]() |
cde7eb1310 | ||
![]() |
2ce930e9e2 | ||
![]() |
744dd45758 | ||
![]() |
55bdc7a512 | ||
![]() |
4ccb83803a | ||
![]() |
d0beb6875f | ||
![]() |
50c5a4df24 | ||
![]() |
51a82bf443 | ||
![]() |
b012802f95 | ||
![]() |
593cf5718f | ||
![]() |
cda19df5ca | ||
![]() |
b761c7d093 | ||
![]() |
2f8dfe4446 | ||
![]() |
2ec84c30db | ||
![]() |
06472cb11e | ||
![]() |
8156c90032 | ||
![]() |
8d5f42ff2e | ||
![]() |
d532b721a2 | ||
![]() |
588b5d3b6c | ||
![]() |
ab4bbddef7 | ||
![]() |
50c6516d6e | ||
![]() |
615b6b200b | ||
![]() |
1a7bf29bd5 | ||
![]() |
31d66e1417 | ||
![]() |
a382f2b803 | ||
![]() |
7c1d4c3b10 | ||
![]() |
6b8882b773 | ||
![]() |
9d004042f5 | ||
![]() |
d8dbf4d835 | ||
![]() |
8ce103f889 | ||
![]() |
4a2a33c081 | ||
![]() |
ff4d35b038 | ||
![]() |
e879c7df0d | ||
![]() |
5cf4aad1f9 | ||
![]() |
bcc05b6ada | ||
![]() |
4ab6c46a27 | ||
![]() |
b8b86b3b10 | ||
![]() |
ba68541d2e | ||
![]() |
41c0aa5c66 | ||
![]() |
334792abda | ||
![]() |
19cb9fdbc5 | ||
![]() |
20c0da709b | ||
![]() |
f6fd368f17 | ||
![]() |
285485009a | ||
![]() |
edf375860d | ||
![]() |
2610758faa | ||
![]() |
fe6737439a | ||
![]() |
0ce4cca4ec | ||
![]() |
54c66559e0 | ||
![]() |
45c2716e0e | ||
![]() |
f067250979 | ||
![]() |
5a08729644 | ||
![]() |
9d3e4faf3d | ||
![]() |
9ebf9c63a5 | ||
![]() |
21eb83b3c2 | ||
![]() |
7ac2d214f6 | ||
![]() |
5a3b3f78d8 | ||
![]() |
1c26120056 | ||
![]() |
7141cb1674 | ||
![]() |
fb9283a06c | ||
![]() |
6c9bfaf1b7 | ||
![]() |
e3ffe5dc61 | ||
![]() |
5184044faf | ||
![]() |
59c2e4d8bf | ||
![]() |
1f0416bbbb | ||
![]() |
d7d1c40866 | ||
![]() |
9d23c63c38 | ||
![]() |
72eac9e9c3 | ||
![]() |
4fd3247386 | ||
![]() |
e19b5911cf | ||
![]() |
9fe1c47048 | ||
![]() |
74ee085400 | ||
![]() |
4323dbbc49 | ||
![]() |
41e75d9d8f | ||
![]() |
c69b2603de | ||
![]() |
df74c87e2c | ||
![]() |
d715422e62 | ||
![]() |
0a697bb59a | ||
![]() |
022d1eee4f | ||
![]() |
dec77ac467 | ||
![]() |
850173043a | ||
![]() |
0302b7ce1c | ||
![]() |
79536c4b4b | ||
![]() |
f1bba1de0e | ||
![]() |
7475898034 | ||
![]() |
8e3fef2144 | ||
![]() |
b8a9c84845 | ||
![]() |
a23c5915a2 | ||
![]() |
5fb809c2ec | ||
![]() |
6dae0283de | ||
![]() |
7f05277f5f | ||
![]() |
6ef861ba0b | ||
![]() |
4ce743a939 | ||
![]() |
53c5a8559d | ||
![]() |
f5b1e65b30 | ||
![]() |
cd77988ee8 | ||
![]() |
f860c2b4ca | ||
![]() |
e6089c560e | ||
![]() |
455ff74aee | ||
![]() |
1f99ac5d0a | ||
![]() |
5096a90461 | ||
![]() |
8a35227d5d | ||
![]() |
4381e095cb | ||
![]() |
2fa6d25dc5 | ||
![]() |
fcde75d792 | ||
![]() |
0fc8e10167 | ||
![]() |
3a25872f26 | ||
![]() |
5c1da4f19c | ||
![]() |
d9829c3348 | ||
![]() |
52952f3335 | ||
![]() |
3e2fdb2b7b | ||
![]() |
9aaaa6f00e | ||
![]() |
af0d279e1b | ||
![]() |
82b0bcc24d | ||
![]() |
b24b170f06 | ||
![]() |
30211575c3 | ||
![]() |
ed40489e45 | ||
![]() |
c503802463 | ||
![]() |
e5a54c64df | ||
![]() |
f93b04fe1f | ||
![]() |
3b0fdc5117 | ||
![]() |
a9e686528d | ||
![]() |
2c65314066 | ||
![]() |
69d9e11e1f | ||
![]() |
d55d28aecd | ||
![]() |
a515eabcd4 | ||
![]() |
a0f7bedee0 | ||
![]() |
3179d88f36 | ||
![]() |
9298200188 | ||
![]() |
cf5746ca76 | ||
![]() |
2c8c81bc2d | ||
![]() |
07cc163d26 | ||
![]() |
ed0ea3a539 | ||
![]() |
6fafcf042a | ||
![]() |
c03fe4b044 | ||
![]() |
e50fd56dba | ||
![]() |
473ce12730 | ||
![]() |
21616e4ec2 | ||
![]() |
922ad2ff5a | ||
![]() |
f32e408705 | ||
![]() |
f6ea4847da | ||
![]() |
01ab62514b | ||
![]() |
cfa0ffa505 | ||
![]() |
ec4d773c5b | ||
![]() |
6aea40a58b | ||
![]() |
20045be2f2 | ||
![]() |
c45e3a81ba | ||
![]() |
6ee15019db | ||
![]() |
2f6877a8db | ||
![]() |
469badb8e5 | ||
![]() |
d2b4cfb5b1 | ||
![]() |
2163523359 | ||
![]() |
53ec75ae34 | ||
![]() |
bc7646fd21 | ||
![]() |
4b89991f06 | ||
![]() |
0248213f6a | ||
![]() |
36057e6f87 | ||
![]() |
886b8fd7e4 | ||
![]() |
73f1a4c471 | ||
![]() |
c1df67e3d2 | ||
![]() |
35607331de | ||
![]() |
64e0ecd6e7 | ||
![]() |
e07ad71326 | ||
![]() |
b20293a0c9 | ||
![]() |
2e9690d34c | ||
![]() |
1ce759ff58 | ||
![]() |
8f3257cd27 | ||
![]() |
aa474b4fec | ||
![]() |
92fcd8fe27 | ||
![]() |
21bae5adc0 | ||
![]() |
6108733178 | ||
![]() |
ece5272fb5 | ||
![]() |
813cb3279b | ||
![]() |
2fd904e728 | ||
![]() |
4ac031abcd | ||
![]() |
8996181e7f | ||
![]() |
bb71fed220 | ||
![]() |
0aaa667842 | ||
![]() |
528263df4b | ||
![]() |
a1e988781b | ||
![]() |
c91d0b1d05 | ||
![]() |
943dd6f5a7 | ||
![]() |
06f6fd62a2 | ||
![]() |
23afac142e | ||
![]() |
212d163906 | ||
![]() |
b2a3b0b95d | ||
![]() |
41a4ba4027 | ||
![]() |
f6bd930611 | ||
![]() |
f108f203d9 | ||
![]() |
9cb5174396 | ||
![]() |
a66e0b0ead | ||
![]() |
0c3deebed9 | ||
![]() |
1d771a9daa | ||
![]() |
2938ced67e | ||
![]() |
0734a2406c | ||
![]() |
237721c9f4 | ||
![]() |
305564f5c3 | ||
![]() |
1a2032b34a | ||
![]() |
5da3067c95 | ||
![]() |
2d63681d5d | ||
![]() |
bb7d0ce8cd | ||
![]() |
a25a48a071 | ||
![]() |
9973e871fd | ||
![]() |
cd2867d3f5 | ||
![]() |
6b84f8dd09 | ||
![]() |
216974b40f | ||
![]() |
a6f1e27f4b | ||
![]() |
fa5a175a5a | ||
![]() |
289a1a7091 | ||
![]() |
82a85dbf3c | ||
![]() |
47da71b760 | ||
![]() |
6154d2aa3e | ||
![]() |
d0fb2bf9bc | ||
![]() |
4b01143ab6 | ||
![]() |
264ee95ae4 | ||
![]() |
09335f1e40 | ||
![]() |
a7976786d5 | ||
![]() |
7356e5f88c | ||
![]() |
cc332b5c86 | ||
![]() |
c7fd5f3928 | ||
![]() |
63b8e461b5 | ||
![]() |
f58953bbe9 | ||
![]() |
ba657c49cd | ||
![]() |
6e7a29a162 | ||
![]() |
d0968a24ad | ||
![]() |
14189a9c44 | ||
![]() |
f43a783403 | ||
![]() |
f3da3bc92e | ||
![]() |
15f0847305 | ||
![]() |
261db5104c | ||
![]() |
a045f18373 | ||
![]() |
c6e0d21f53 | ||
![]() |
4b35b77e93 | ||
![]() |
b33d2fcbd7 | ||
![]() |
790f729c77 | ||
![]() |
caae3c8cea | ||
![]() |
94e5a97d0d | ||
![]() |
f8b13a58a8 | ||
![]() |
ea5ec2fd29 | ||
![]() |
2027e03378 | ||
![]() |
4c0dea749e | ||
![]() |
06470f37a0 | ||
![]() |
ec3a78a4ca | ||
![]() |
0b0c8e1547 | ||
![]() |
7b675caaaf | ||
![]() |
6c01360bd6 | ||
![]() |
929eb5813e | ||
![]() |
576704f3a8 | ||
![]() |
12c56c38fa | ||
![]() |
57983466b6 | ||
![]() |
441ef22410 | ||
![]() |
24e0b40f50 | ||
![]() |
1a8a6baca2 | ||
![]() |
ddff7f0738 | ||
![]() |
9c767b2acc | ||
![]() |
755a3f401e | ||
![]() |
14c5c54884 | ||
![]() |
e98d2c35da | ||
![]() |
c56c8b1946 | ||
![]() |
d0dda72c55 | ||
![]() |
e47b002cca | ||
![]() |
1a8f353fec | ||
![]() |
2645d45dbd | ||
![]() |
a6a3346109 | ||
![]() |
936457c5d1 | ||
![]() |
d0d3921073 | ||
![]() |
591f3bae89 | ||
![]() |
9dd4308b77 | ||
![]() |
64e1cbc550 | ||
![]() |
c2d61e7663 | ||
![]() |
514eb25e60 | ||
![]() |
242b33bc20 | ||
![]() |
d4448d4652 | ||
![]() |
c8bd9a646d | ||
![]() |
e1b8b4b85d | ||
![]() |
5eb32db8cf | ||
![]() |
1738bfa382 | ||
![]() |
253d06079c | ||
![]() |
ee20b0a3a7 | ||
![]() |
5957cb0d3a | ||
![]() |
7844dcafef | ||
![]() |
4859fdc5ef | ||
![]() |
178d46c96f | ||
![]() |
7c79d5c51f | ||
![]() |
4a5600bb26 | ||
![]() |
f4d9d6e4df | ||
![]() |
8f756e2d47 | ||
![]() |
3a1d47601a | ||
![]() |
8cfefb0834 | ||
![]() |
a6fae36838 | ||
![]() |
ea81602ab3 | ||
![]() |
ccabd6716e | ||
![]() |
9f0f7caec0 | ||
![]() |
ee26fb48cb | ||
![]() |
7d504d8bbc | ||
![]() |
6f040732b5 | ||
![]() |
daaabfc5b0 | ||
![]() |
beccc4be56 | ||
![]() |
639170e155 | ||
![]() |
3044ca0f5f | ||
![]() |
110cc81f47 | ||
![]() |
fc765de029 | ||
![]() |
77db8b5de8 | ||
![]() |
b7258fd2a5 | ||
![]() |
caa2f4e659 | ||
![]() |
0cce85d302 | ||
![]() |
a6979bfad9 | ||
![]() |
08b00706ab | ||
![]() |
337e391054 | ||
![]() |
87036412b7 | ||
![]() |
ca713a0d99 | ||
![]() |
ff8562177d | ||
![]() |
f02d814b2d | ||
![]() |
132812e009 | ||
![]() |
dd9e81b6c2 | ||
![]() |
19f5424315 | ||
![]() |
7b264a266e | ||
![]() |
8c1f65dc78 | ||
![]() |
51c2adb5bf | ||
![]() |
219e0b3a51 | ||
![]() |
df6c47bf53 | ||
![]() |
6ae04d864d | ||
![]() |
828ab104f8 | ||
![]() |
f81881d9bf | ||
![]() |
0e0afc7784 | ||
![]() |
c052b455e8 | ||
![]() |
47318f958c | ||
![]() |
3db2bf6f44 | ||
![]() |
8d6bdf60df | ||
![]() |
cfe3695eca | ||
![]() |
a1eac77b48 | ||
![]() |
3a7f2abb39 | ||
![]() |
83e0d7e017 | ||
![]() |
9532c601fd | ||
![]() |
460781b9b0 | ||
![]() |
63a6ea856b | ||
![]() |
64e6b43554 | ||
![]() |
0ebf134714 | ||
![]() |
e7053cfcdc | ||
![]() |
0826ca5e00 | ||
![]() |
67b1e271d8 | ||
![]() |
5ae78b16b6 | ||
![]() |
e93a08be8e | ||
![]() |
2f361e764a | ||
![]() |
2549d22cd4 | ||
![]() |
37e489f3fb | ||
![]() |
0c48446851 | ||
![]() |
af97b34c99 | ||
![]() |
d61b058c65 | ||
![]() |
e464c92669 | ||
![]() |
2b74ef3727 | ||
![]() |
5dd558d31f | ||
![]() |
1abce07826 | ||
![]() |
b898504f30 | ||
![]() |
56ca9544c3 | ||
![]() |
9db352bc76 | ||
![]() |
573d2edbe9 | ||
![]() |
963b3349e3 | ||
![]() |
d16599bedd | ||
![]() |
e9a587e71a | ||
![]() |
a8a02d9a9c | ||
![]() |
2b75ae2fcf | ||
![]() |
56cfb1d0ca | ||
![]() |
b03465f5da | ||
![]() |
d8dc675f5c | ||
![]() |
125f2b313e | ||
![]() |
ecd8ea102e | ||
![]() |
313336f1ba | ||
![]() |
df4072ffd8 | ||
![]() |
3b7dccd199 | ||
![]() |
cc3086d8d3 | ||
![]() |
dbbca1f7aa | ||
![]() |
b091a81832 | ||
![]() |
84ef6ea73f | ||
![]() |
94959d0d4a | ||
![]() |
8e07418044 | ||
![]() |
0b1d4c5f46 | ||
![]() |
33f363ec07 | ||
![]() |
b7c823f3e8 | ||
![]() |
fa7868006c | ||
![]() |
b90b71bed1 | ||
![]() |
7ba79eb763 | ||
![]() |
38e26e242f | ||
![]() |
d58b3f4a9a | ||
![]() |
138131e68c | ||
![]() |
dc573dc8b5 | ||
![]() |
0bb7d9da31 | ||
![]() |
4acebb18ff | ||
![]() |
ee121fe8da | ||
![]() |
6bb49dc0b9 | ||
![]() |
29d4b2b776 | ||
![]() |
87547ee37b | ||
![]() |
e5567b64a1 | ||
![]() |
76c2e46e74 | ||
![]() |
48b684b0ce | ||
![]() |
f8a65fefcc | ||
![]() |
38c33577de | ||
![]() |
e328140bc2 | ||
![]() |
3cd1e5350a | ||
![]() |
f51cdd161e | ||
![]() |
22ae4101fb | ||
![]() |
f9f458e996 | ||
![]() |
db5179ce54 | ||
![]() |
d19271d41c | ||
![]() |
60d357d753 | ||
![]() |
09859dcfbc | ||
![]() |
ed711c0397 | ||
![]() |
d3700887ae | ||
![]() |
10bb659acd | ||
![]() |
300c410071 | ||
![]() |
5b478252ad | ||
![]() |
74286ca146 | ||
![]() |
6a1617b6c1 | ||
![]() |
31e1b6663f | ||
![]() |
f70949aab3 | ||
![]() |
39dd64c156 | ||
![]() |
22a4219d21 | ||
![]() |
997317c393 | ||
![]() |
59c6ea219d | ||
![]() |
627506276f | ||
![]() |
cd969ada4a | ||
![]() |
7f1c545d6b | ||
![]() |
eb88651abd | ||
![]() |
1ebd6e4665 | ||
![]() |
42e22ad461 | ||
![]() |
312e86f992 | ||
![]() |
a2bbecc03f | ||
![]() |
c0b601a95b | ||
![]() |
e6fa69ee03 | ||
![]() |
14d1ba7ce0 | ||
![]() |
78a0ae00a0 | ||
![]() |
ea88df84db | ||
![]() |
f18a567dfb | ||
![]() |
9d05b49a90 | ||
![]() |
3febd00c7f | ||
![]() |
539afe9882 | ||
![]() |
55df916305 | ||
![]() |
108a565f7e | ||
![]() |
c1808a5ddd | ||
![]() |
a08b42e258 | ||
![]() |
66061e6a9b | ||
![]() |
1c74739a12 | ||
![]() |
3e272ce3b6 | ||
![]() |
5fb986bcf7 | ||
![]() |
1d40e7b443 | ||
![]() |
91fbe7b61d | ||
![]() |
453c82e048 | ||
![]() |
fbf97b749f | ||
![]() |
2853c10406 | ||
![]() |
b2669eda0d | ||
![]() |
fa589ed95e | ||
![]() |
1279a6d9e6 | ||
![]() |
2d222ca313 | ||
![]() |
e170e97d4c | ||
![]() |
c16c83e31c | ||
![]() |
4def4dd284 | ||
![]() |
9253d3b699 | ||
![]() |
fc8cb71953 | ||
![]() |
86d20b95f4 | ||
![]() |
f709f551e2 | ||
![]() |
6726c29737 | ||
![]() |
294f43b8e0 | ||
![]() |
fd8d880c09 | ||
![]() |
b0b3ba9066 | ||
![]() |
f0db1a40d7 | ||
![]() |
55215299e1 | ||
![]() |
de43ca96c6 | ||
![]() |
9db14f1863 | ||
![]() |
56a4a72a60 | ||
![]() |
78dc77b30f | ||
![]() |
217c278e72 | ||
![]() |
62b40e92b3 | ||
![]() |
8101d467bd | ||
![]() |
66cf002640 | ||
![]() |
0f09f5085a | ||
![]() |
312eb157af | ||
![]() |
43c7384cb7 | ||
![]() |
7d8b75d4d6 | ||
![]() |
ef70b621b8 | ||
![]() |
6d3af0cd8c | ||
![]() |
1241636263 | ||
![]() |
bbde9e967c | ||
![]() |
1664a17b5d | ||
![]() |
9577cfcb5e | ||
![]() |
8ba04e90c0 | ||
![]() |
2315b438b6 | ||
![]() |
25c52404b0 | ||
![]() |
da1e904822 | ||
![]() |
48b7b2fd57 | ||
![]() |
dcbfa57ecb | ||
![]() |
855d19d6a0 | ||
![]() |
8d55cc33e2 | ||
![]() |
ed5615712c | ||
![]() |
723d385bb7 | ||
![]() |
16d83a8f7c | ||
![]() |
99cc8d6b27 | ||
![]() |
109d97eade | ||
![]() |
45d7dc7026 | ||
![]() |
4923aaa5a7 | ||
![]() |
d3baffeda3 | ||
![]() |
61ca08c696 | ||
![]() |
d030b5d811 | ||
![]() |
320015dc60 | ||
![]() |
0ff33e6853 | ||
![]() |
f0a9cdc47d | ||
![]() |
311358dfd5 | ||
![]() |
42498b0bec | ||
![]() |
04245dc58f | ||
![]() |
268f8bec65 | ||
![]() |
aaf99c412a | ||
![]() |
be61a528ff | ||
![]() |
708524d899 | ||
![]() |
c269d841a4 | ||
![]() |
d11f7eaf41 | ||
![]() |
440449c8d8 | ||
![]() |
3e82d34b9b | ||
![]() |
ef42bc653b | ||
![]() |
25b24ef445 | ||
![]() |
87429d3719 | ||
![]() |
832bd79596 | ||
![]() |
4f5b53273f | ||
![]() |
39e52edbb5 | ||
![]() |
535b4b43f9 | ||
![]() |
b0f9fc8e70 | ||
![]() |
272d7b27ee | ||
![]() |
d19a63f735 | ||
![]() |
931ab1b9c1 | ||
![]() |
4a1fc3ffb5 | ||
![]() |
87b210012f | ||
![]() |
8df8dbc6cf | ||
![]() |
aca20317c1 | ||
![]() |
f47cd2e190 | ||
![]() |
2daaff60be | ||
![]() |
4070ecf8c2 | ||
![]() |
4074b86cf7 | ||
![]() |
e383cd9169 | ||
![]() |
14fce266c2 | ||
![]() |
f6aeeb0fa7 | ||
![]() |
fbf6db75ab | ||
![]() |
eb66ab1b77 | ||
![]() |
2aac9e8ab7 | ||
![]() |
414ef3384e | ||
![]() |
8af06d8c8e | ||
![]() |
84687fc254 | ||
![]() |
fb6f1a243c | ||
![]() |
732721f480 | ||
![]() |
61f783eda4 | ||
![]() |
4b40ee99d6 | ||
![]() |
1b0beb6a42 | ||
![]() |
6b6e583499 | ||
![]() |
a92f856709 | ||
![]() |
c46fe4b499 | ||
![]() |
bfe1c0ec4a | ||
![]() |
88f697f7cc | ||
![]() |
fdc8ebeae1 | ||
![]() |
f242f75b53 | ||
![]() |
6c4fd39ef6 | ||
![]() |
254500b4f3 | ||
![]() |
90e5333d27 | ||
![]() |
23b6202d15 | ||
![]() |
7cddee1ef1 | ||
![]() |
bf0ee4a30a | ||
![]() |
e76a75084c | ||
![]() |
d7d127362a | ||
![]() |
80730729a2 | ||
![]() |
940b108567 | ||
![]() |
22b5537402 | ||
![]() |
2ff49db10d | ||
![]() |
5f9a9cb508 | ||
![]() |
3fd49e7331 | ||
![]() |
9fadcda73e | ||
![]() |
4c4aef9fcc | ||
![]() |
f845592b10 | ||
![]() |
3b42595e3a | ||
![]() |
ae719bcf73 | ||
![]() |
c3bf3c1859 | ||
![]() |
1e19fbb5f1 | ||
![]() |
4b7f8892f1 | ||
![]() |
33c5e6ac74 | ||
![]() |
fb65c0e9b1 | ||
![]() |
6fc37180b3 | ||
![]() |
855d198053 | ||
![]() |
6bb8f11b2d | ||
![]() |
f5fe9968eb | ||
![]() |
85d92b34b9 | ||
![]() |
0a5843c26e | ||
![]() |
fcf09991fe | ||
![]() |
a6655ef1cb | ||
![]() |
c61bd1d53f | ||
![]() |
dfe0b69c99 | ||
![]() |
de99796884 | ||
![]() |
d1cf7ee57e | ||
![]() |
28d21594e4 | ||
![]() |
c3b79755e4 | ||
![]() |
c9842d447c | ||
![]() |
887c882c74 | ||
![]() |
0826d69857 | ||
![]() |
04a3a5a440 | ||
![]() |
96ba0ee0e1 | ||
![]() |
930caca038 | ||
![]() |
332f4d0574 | ||
![]() |
a021270496 | ||
![]() |
75a1a46a7d | ||
![]() |
4c43675fbd | ||
![]() |
c2684eed3c | ||
![]() |
153a81817d | ||
![]() |
7e70c848dc | ||
![]() |
817a09abd5 | ||
![]() |
18e75b7237 | ||
![]() |
d58c6dcd1f | ||
![]() |
22974320b1 | ||
![]() |
53441e3854 | ||
![]() |
6902f8467a | ||
![]() |
d57cba1508 | ||
![]() |
9b0e99830b | ||
![]() |
24edc3f0bf | ||
![]() |
d8e7a766f6 | ||
![]() |
6c75cca1a7 | ||
![]() |
d3f042f48a | ||
![]() |
fbce0ac8fa | ||
![]() |
f353159185 | ||
![]() |
2d7a01cc4e | ||
![]() |
747500c990 | ||
![]() |
5655ee94c4 | ||
![]() |
105b33c5d6 | ||
![]() |
0e7e2b3a28 | ||
![]() |
cb8abf6ac3 | ||
![]() |
529457ad70 | ||
![]() |
696ebf2809 | ||
![]() |
9ada48d9fb | ||
![]() |
1481f2c504 | ||
![]() |
4b1b259b51 | ||
![]() |
843265e816 | ||
![]() |
660344fa1b | ||
![]() |
2e5f968e8c | ||
![]() |
89a2bb1359 | ||
![]() |
343e7b1592 | ||
![]() |
9109d6a05c | ||
![]() |
3c7133766e | ||
![]() |
915a4d7ab3 | ||
![]() |
e6adea88f4 | ||
![]() |
bf551ec8e7 | ||
![]() |
801f5fffd7 | ||
![]() |
b5d34197b3 | ||
![]() |
f75710f24b | ||
![]() |
6af2cd80f3 | ||
![]() |
ea1cfd6fa5 | ||
![]() |
a73654bcc1 | ||
![]() |
55d193be10 | ||
![]() |
eb115d4522 | ||
![]() |
17d91ac9fc | ||
![]() |
872e87a937 | ||
![]() |
b41c3c7c4f | ||
![]() |
6725222ad6 | ||
![]() |
18b3daca51 | ||
![]() |
289589376f | ||
![]() |
3c648de8cf | ||
![]() |
90639dca6e | ||
![]() |
7660482735 | ||
![]() |
082b52f143 | ||
![]() |
b6a106d5d7 | ||
![]() |
ea1c71f4a8 | ||
![]() |
deb46c6330 | ||
![]() |
52b8dec35f | ||
![]() |
1a5bd72cb6 | ||
![]() |
57d7b5a05d | ||
![]() |
b7735f8240 | ||
![]() |
0dcb593e74 | ||
![]() |
ec7f983ed2 | ||
![]() |
fa21b1ac43 | ||
![]() |
2ded9deb98 | ||
![]() |
93c1903580 | ||
![]() |
92b17514e2 | ||
![]() |
6cd0968bf1 | ||
![]() |
5f4b6985d7 | ||
![]() |
f8dfbf2780 | ||
![]() |
a5440dd8a0 | ||
![]() |
df4f835cb5 | ||
![]() |
0e9a45e647 | ||
![]() |
3969edc9fd | ||
![]() |
a7298c0fd9 | ||
![]() |
4878730bab | ||
![]() |
45c32af561 | ||
![]() |
a1fe1eca5e | ||
![]() |
66b6a32272 | ||
![]() |
4b12010548 | ||
![]() |
41481a51f2 | ||
![]() |
2b75167855 | ||
![]() |
ddaf4d7c2f | ||
![]() |
50e27348db | ||
![]() |
5970f03da9 | ||
![]() |
c84d69db6d | ||
![]() |
6f271c6745 | ||
![]() |
a4761ed886 | ||
![]() |
d902f4df12 | ||
![]() |
2884a9ffc6 | ||
![]() |
6233d13ed5 | ||
![]() |
c17b25e2c3 | ||
![]() |
88624a98ee | ||
![]() |
8e3c9774a2 | ||
![]() |
4e725f7651 | ||
![]() |
f65adc3a1f | ||
![]() |
7a7693caa6 | ||
![]() |
33ed2af24a | ||
![]() |
2fb7fb9496 | ||
![]() |
e93735613d | ||
![]() |
a20d9f353c | ||
![]() |
a2543cfae0 | ||
![]() |
fb08e306a1 | ||
![]() |
fd4256223c | ||
![]() |
b1fe99e112 | ||
![]() |
33f2a7075d | ||
![]() |
1366eda7db | ||
![]() |
0c5943a33b | ||
![]() |
af2f8fb8a6 | ||
![]() |
135f5a4a40 | ||
![]() |
dbb25d5807 | ||
![]() |
75478fa726 | ||
![]() |
46ecc66d5b | ||
![]() |
ca4255ffd2 | ||
![]() |
c72b6d2a67 | ||
![]() |
59903a3d1a | ||
![]() |
bad4e7cff0 | ||
![]() |
4f6751080c | ||
![]() |
1fbb620c0a | ||
![]() |
a8b4b6fc28 | ||
![]() |
c56b31d323 | ||
![]() |
a72fad3607 | ||
![]() |
17524cfb10 | ||
![]() |
ff3007c782 | ||
![]() |
2bb53ceb96 | ||
![]() |
6e0254bba0 | ||
![]() |
af0e18f361 | ||
![]() |
5e6ca681e4 | ||
![]() |
9e650e18b8 | ||
![]() |
1e158e76e4 | ||
![]() |
5b671e7bda | ||
![]() |
4fcdbe71db | ||
![]() |
bec5b9b965 | ||
![]() |
f524dab1d7 | ||
![]() |
1c9e96b033 | ||
![]() |
68d7e79c8e | ||
![]() |
6ad3a61400 | ||
![]() |
3c9c7f0d02 | ||
![]() |
4802271feb | ||
![]() |
abb393ff70 | ||
![]() |
0bf03b8234 | ||
![]() |
fc5becc6b5 | ||
![]() |
dd10808f9f | ||
![]() |
e5f7f447d9 | ||
![]() |
346a16957c | ||
![]() |
e6772d8ab8 | ||
![]() |
17c1d707cd | ||
![]() |
4b3bba7a54 | ||
![]() |
5072272075 | ||
![]() |
75251e5557 | ||
![]() |
faaef35a6a | ||
![]() |
e75cc3a92f | ||
![]() |
9da44ea593 | ||
![]() |
2f244429aa | ||
![]() |
fbe2f0f2a6 | ||
![]() |
44a4a4a95d | ||
![]() |
ecf1a32187 | ||
![]() |
3e831918ba | ||
![]() |
9652f0542b | ||
![]() |
62da202f72 | ||
![]() |
67878d87ad | ||
![]() |
02425de990 | ||
![]() |
58ae87e3cb | ||
![]() |
729247d921 | ||
![]() |
fab8e6b52a | ||
![]() |
cf4dae5a7d | ||
![]() |
ccab24e8b6 | ||
![]() |
43473db434 | ||
![]() |
1eda1adbc4 | ||
![]() |
4919955fca | ||
![]() |
518b425d73 | ||
![]() |
1c57fee848 | ||
![]() |
f1ed46afd3 | ||
![]() |
c910a0e173 | ||
![]() |
e2eafc54aa | ||
![]() |
48bbbac527 | ||
![]() |
c1ea6c4236 | ||
![]() |
ba4a0ed801 | ||
![]() |
81621071bd | ||
![]() |
d78d35b4ec | ||
![]() |
c3a4eb3bfb | ||
![]() |
cf65db6023 | ||
![]() |
ff3ab2585e | ||
![]() |
4636f47aad | ||
![]() |
5706d38c1e | ||
![]() |
9658d49e60 | ||
![]() |
7198044843 | ||
![]() |
10464ebb5a | ||
![]() |
c73a242a57 | ||
![]() |
000eb7b6a5 | ||
![]() |
5b1d0ea311 | ||
![]() |
8edaa3dbe0 | ||
![]() |
48584bb434 | ||
![]() |
79c6ee78d0 | ||
![]() |
720a9c0403 | ||
![]() |
eae7160422 | ||
![]() |
34b54f0553 | ||
![]() |
18f696afa4 | ||
![]() |
cf8d454988 | ||
![]() |
9844476804 | ||
![]() |
772d9c8132 | ||
![]() |
800c76d4e4 | ||
![]() |
28e947dedb | ||
![]() |
13be394f51 | ||
![]() |
7770efbde9 | ||
![]() |
f09601da50 | ||
![]() |
1921e4e0fa | ||
![]() |
dc581a9403 | ||
![]() |
6986e7e020 | ||
![]() |
fe61c69c31 | ||
![]() |
40d2df860c | ||
![]() |
f5be48770b | ||
![]() |
95f979c734 | ||
![]() |
37d1f05a85 | ||
![]() |
6a2e5525d0 | ||
![]() |
e66848a048 | ||
![]() |
139bb371d0 | ||
![]() |
0e8332045d | ||
![]() |
2704406819 | ||
![]() |
6e2f6dfec4 | ||
![]() |
e92bfd6547 | ||
![]() |
225cc44e7b | ||
![]() |
e1a028fe18 | ||
![]() |
167264ff50 | ||
![]() |
06dbfa3d1f | ||
![]() |
6cd17ad27a | ||
![]() |
5afb635482 | ||
![]() |
d575aec130 | ||
![]() |
d9f7a72b1d | ||
![]() |
c1d64125af | ||
![]() |
681e8c98bd | ||
![]() |
1b7f9d51d8 | ||
![]() |
aca06e05ed | ||
![]() |
efb53e8e76 | ||
![]() |
dee23e98b6 | ||
![]() |
ab53050e3f | ||
![]() |
83838472eb | ||
![]() |
72bfa88861 | ||
![]() |
9ada5b912c | ||
![]() |
2bf4739ac5 | ||
![]() |
adc8549845 | ||
![]() |
300090047c | ||
![]() |
399c278b15 | ||
![]() |
08576a055c | ||
![]() |
9f8fbc2f39 | ||
![]() |
4ef931f6c4 | ||
![]() |
7272771664 | ||
![]() |
7dc7ab9226 | ||
![]() |
fc417ab19d | ||
![]() |
9194a341ea | ||
![]() |
18756426e7 | ||
![]() |
a62f20c894 | ||
![]() |
0067437724 | ||
![]() |
5be1452169 | ||
![]() |
b8b23b8a65 | ||
![]() |
88d77d4197 | ||
![]() |
f1478dff8a | ||
![]() |
37b6076117 | ||
![]() |
8fa4d4dbfa | ||
![]() |
faae20fbca | ||
![]() |
85b0c97d41 | ||
![]() |
1cdb50d38f | ||
![]() |
1a6ee15cd7 | ||
![]() |
8b4362da7a | ||
![]() |
40dd28066f | ||
![]() |
95f32c2b92 | ||
![]() |
521020a453 | ||
![]() |
4ba72ab270 | ||
![]() |
a050c7b02c | ||
![]() |
6068b86d76 | ||
![]() |
b656f24383 | ||
![]() |
a7fe5ffd24 | ||
![]() |
6efd09a236 | ||
![]() |
dacf1dcda2 | ||
![]() |
b2621f52b5 | ||
![]() |
399640f872 | ||
![]() |
e9869fb222 | ||
![]() |
46b1845534 | ||
![]() |
1549f63eac | ||
![]() |
efbd67eac2 | ||
![]() |
70a643b720 | ||
![]() |
52952245e9 | ||
![]() |
6796a31786 | ||
![]() |
ab89fe87eb | ||
![]() |
54bc9fa7ae | ||
![]() |
504da588d4 | ||
![]() |
6d15c195c5 | ||
![]() |
fa3b981540 | ||
![]() |
f14ac5f3bf | ||
![]() |
65a6d4ae3d | ||
![]() |
a500cc7cf2 | ||
![]() |
adf0e9d952 | ||
![]() |
2807623716 | ||
![]() |
716a091c84 | ||
![]() |
2fcb10caa8 | ||
![]() |
1dee064452 | ||
![]() |
9887766aab | ||
![]() |
ac20d1b1d5 | ||
![]() |
97dc925ed4 | ||
![]() |
f3773f2eda | ||
![]() |
6b5efb8e40 | ||
![]() |
236fc76e92 | ||
![]() |
fe651b4f1d | ||
![]() |
03f0318bed | ||
![]() |
7c18db7bd7 | ||
![]() |
6dabdf9089 | ||
![]() |
fddf8e2547 | ||
![]() |
40bc588fa3 | ||
![]() |
792b0a7bb2 | ||
![]() |
38749562c4 | ||
![]() |
8d2eac4bec | ||
![]() |
5e074d0cca | ||
![]() |
9ac00f305f | ||
![]() |
217c1766d2 | ||
![]() |
3a4aae8ed7 | ||
![]() |
18a7ed9c3d | ||
![]() |
49d44abcca | ||
![]() |
3a910729b1 | ||
![]() |
f1a549171d | ||
![]() |
9fd9fb1670 | ||
![]() |
8d92382911 | ||
![]() |
8427dcb42e | ||
![]() |
4c1c4aaf63 | ||
![]() |
e77a343dca | ||
![]() |
3c3df62a8a | ||
![]() |
3a09f3a3e5 | ||
![]() |
3762406fe5 | ||
![]() |
22868f35f9 | ||
![]() |
773e0b9bf7 | ||
![]() |
34fb92e8a4 | ||
![]() |
9aad51d5af | ||
![]() |
2aba958382 | ||
![]() |
b031054422 | ||
![]() |
51e1207512 | ||
![]() |
8354830d2c | ||
![]() |
52d34db7ac | ||
![]() |
6d9e68949c | ||
![]() |
76d70e0282 | ||
![]() |
0515d39eab | ||
![]() |
c677233c38 | ||
![]() |
27d5c63fc6 | ||
![]() |
a0fd288e55 | ||
![]() |
1c158759b1 | ||
![]() |
fd9b765bfd | ||
![]() |
2594e8f1fa | ||
![]() |
608a5854f7 | ||
![]() |
38e4de5908 | ||
![]() |
d81801d2a9 | ||
![]() |
d45839facf | ||
![]() |
1949725792 | ||
![]() |
306c7d9f91 | ||
![]() |
cce38cdaae | ||
![]() |
2c26fe40f4 | ||
![]() |
b9d3d46996 | ||
![]() |
c681428740 | ||
![]() |
a45adc3473 | ||
![]() |
df1f10712d | ||
![]() |
475cb9f651 | ||
![]() |
abad5448e2 | ||
![]() |
f7b6c10890 | ||
![]() |
02544f6b45 | ||
![]() |
fe5bb74983 | ||
![]() |
db74a04fa6 | ||
![]() |
3baf720f92 | ||
![]() |
4cf02caa43 | ||
![]() |
02c4ee5323 | ||
![]() |
2993ad76e8 | ||
![]() |
46264131c1 | ||
![]() |
4f1da190bf | ||
![]() |
4c0e0d1b2d | ||
![]() |
69f4b0e037 | ||
![]() |
b20c0146a3 | ||
![]() |
515e211983 | ||
![]() |
f0d0ed8c24 | ||
![]() |
bcc1ebb8ea | ||
![]() |
583197a7cf | ||
![]() |
aa962c105a | ||
![]() |
9eeb7f22e0 | ||
![]() |
1e27805d71 | ||
![]() |
2aebe1dbbc | ||
![]() |
efa6aa9673 | ||
![]() |
285f95fd76 | ||
![]() |
82805ca638 | ||
![]() |
f14db8b1b5 | ||
![]() |
32b7bf94b0 | ||
![]() |
38611dabcf | ||
![]() |
a5ae1cad8e | ||
![]() |
3400b5259c | ||
![]() |
22e327c188 | ||
![]() |
a5c5f455c7 | ||
![]() |
6f28510015 | ||
![]() |
bc0c8ab7e8 | ||
![]() |
facf84374c | ||
![]() |
3cdeebfd34 | ||
![]() |
323ad1714d | ||
![]() |
c99cb35ba8 | ||
![]() |
eeaebc4b1c | ||
![]() |
1812e06258 | ||
![]() |
f8ee4896f2 | ||
![]() |
4ead6f00d0 | ||
![]() |
1019a6551b | ||
![]() |
592801e91a | ||
![]() |
dc49f922dc | ||
![]() |
92411e7b5e | ||
![]() |
7a1ec283d2 | ||
![]() |
3a7409033b | ||
![]() |
8d2ef3e361 | ||
![]() |
5f0760dcfa | ||
![]() |
565e914a99 | ||
![]() |
31d6ef9e34 | ||
![]() |
6e4e55a9b9 | ||
![]() |
df57bb39ed | ||
![]() |
3990f45aee | ||
![]() |
af69799b7b | ||
![]() |
28af2ef416 | ||
![]() |
9726c25907 | ||
![]() |
b9f207fcf3 | ||
![]() |
b8ffa0129a | ||
![]() |
0d6b1ac914 | ||
![]() |
112109f0f2 | ||
![]() |
78101faae7 | ||
![]() |
5e853b4ef6 | ||
![]() |
6967cd8da0 | ||
![]() |
735239886c | ||
![]() |
0978ad77b6 | ||
![]() |
e1aa621109 | ||
![]() |
a1ccef82a1 | ||
![]() |
69d62a6929 | ||
![]() |
cd41455a6d | ||
![]() |
b30dfd8fe4 | ||
![]() |
af5e59795a | ||
![]() |
872ea17956 | ||
![]() |
5dcdb06275 | ||
![]() |
81eedc635b | ||
![]() |
c331437853 | ||
![]() |
1803319cba | ||
![]() |
9d8f230102 | ||
![]() |
ad1dbc673a | ||
![]() |
b891b5d74c | ||
![]() |
8dbef6d1cd | ||
![]() |
0d00793657 | ||
![]() |
06aa9902a5 | ||
![]() |
8b30b03dbb | ||
![]() |
cc8c0e2b50 | ||
![]() |
8585bd77cd | ||
![]() |
4c594ac9fa | ||
![]() |
5632ff668f | ||
![]() |
7d23d2e293 | ||
![]() |
cb1870cb7a | ||
![]() |
a7efe6cebc | ||
![]() |
ca05604ebf | ||
![]() |
8b54bebb9c | ||
![]() |
d39707042c | ||
![]() |
88eabb92e6 | ||
![]() |
ff783dae74 | ||
![]() |
da08502660 | ||
![]() |
96dd5ef442 | ||
![]() |
58d70aa58a | ||
![]() |
5f807d6c08 | ||
![]() |
6203cd255b | ||
![]() |
27a0ec8574 | ||
![]() |
976bb6719d | ||
![]() |
afb4f201c7 | ||
![]() |
90d557679c | ||
![]() |
0d191e5232 | ||
![]() |
02f876d508 | ||
![]() |
58f21fa6f9 | ||
![]() |
e548f2e9c7 | ||
![]() |
fd4e7eeed4 | ||
![]() |
979c4af4ef | ||
![]() |
4149d5d4cf | ||
![]() |
1b53bd41e4 | ||
![]() |
488ffec0d3 | ||
![]() |
225891651c | ||
![]() |
979bcce963 | ||
![]() |
cbd2d69425 | ||
![]() |
312325e0fa | ||
![]() |
c0f1afbab7 | ||
![]() |
aaed8c8501 | ||
![]() |
588748f710 | ||
![]() |
d21a79372b | ||
![]() |
9c36abff7e | ||
![]() |
2fdd0d6bd0 | ||
![]() |
e9c537ee3b | ||
![]() |
9e753af793 | ||
![]() |
8a0d6b5c2a | ||
![]() |
a0e24d0e93 | ||
![]() |
03b9da27c4 | ||
![]() |
85daa3e92f | ||
![]() |
06d0e05c20 | ||
![]() |
d66cb69d72 | ||
![]() |
b6d73d6cb5 | ||
![]() |
54c6bd3304 | ||
![]() |
48a5588cb5 | ||
![]() |
cf3962c1ad | ||
![]() |
2eeb659780 | ||
![]() |
8f8353383b | ||
![]() |
d5a7afc968 | ||
![]() |
0d7ac3168a | ||
![]() |
ce6af54dc7 | ||
![]() |
6b34ce9e3a | ||
![]() |
55390c9a53 | ||
![]() |
09da8bdd26 | ||
![]() |
af3db7f534 | ||
![]() |
486d2b4e3c | ||
![]() |
37b2fb3e2d | ||
![]() |
d84a9c2387 | ||
![]() |
56309541fe | ||
![]() |
841f8afb9a | ||
![]() |
9a9158cd8d | ||
![]() |
04ebfd7c87 | ||
![]() |
a801da84c1 | ||
![]() |
cac14efc46 | ||
![]() |
f9c095cb5a | ||
![]() |
bed30badf8 | ||
![]() |
dcc5be20ac | ||
![]() |
9856aeb9e5 | ||
![]() |
4cc1d4308d | ||
![]() |
92ff4231f6 | ||
![]() |
b7ed559c2e | ||
![]() |
9bec388fad | ||
![]() |
31380b118e | ||
![]() |
7c1eba1b4a | ||
![]() |
3be9755cab | ||
![]() |
cfdeed6d37 | ||
![]() |
4b982ddaf8 | ||
![]() |
c560d9960c | ||
![]() |
ae9ddeb768 | ||
![]() |
a5fac810bb | ||
![]() |
16a00e216a | ||
![]() |
bfaaf84131 | ||
![]() |
4e91c43aea | ||
![]() |
383fa34cd4 | ||
![]() |
139deb5b20 | ||
![]() |
e83196d903 | ||
![]() |
880db21993 | ||
![]() |
ffc280796b | ||
![]() |
a2656ac0ad | ||
![]() |
6cbbb7754f | ||
![]() |
8face72273 | ||
![]() |
90421b1c3b | ||
![]() |
716d027737 | ||
![]() |
a58d5ff4d5 | ||
![]() |
477da8e1f7 | ||
![]() |
27d476a2dc | ||
![]() |
d25bd81e83 | ||
![]() |
153ce85e8c | ||
![]() |
36bf1a84d9 | ||
![]() |
5eaecc2c82 | ||
![]() |
5cb9977782 | ||
![]() |
0f54b81d65 | ||
![]() |
9d97c17ef2 | ||
![]() |
3734b8be4b | ||
![]() |
c0847a4255 | ||
![]() |
780bc9450a | ||
![]() |
8b1811f1e2 | ||
![]() |
487d3ef760 | ||
![]() |
2cd16db544 | ||
![]() |
774f084933 | ||
![]() |
462361d34d | ||
![]() |
9a246c05e2 | ||
![]() |
98e92a1a1d | ||
![]() |
c0d588dff6 | ||
![]() |
6c2873ec90 | ||
![]() |
7f04d80813 | ||
![]() |
11bf41d362 | ||
![]() |
cdf8a77bf4 | ||
![]() |
395ceef93b | ||
![]() |
3014bcc3a4 | ||
![]() |
a15e058e9e | ||
![]() |
ab22f3c3cf | ||
![]() |
927ad37dad | ||
![]() |
b34d88812e | ||
![]() |
3c702138ad | ||
![]() |
3c7cb34eb9 | ||
![]() |
7d27ec6007 | ||
![]() |
531ebe7207 | ||
![]() |
e6840a69ba | ||
![]() |
f18d867dfd | ||
![]() |
6968965dee | ||
![]() |
a90959d89b | ||
![]() |
d996b18dba | ||
![]() |
360aed1b44 | ||
![]() |
cc16df256a | ||
![]() |
4e9660c33d | ||
![]() |
e776be037f | ||
![]() |
62f7d59acb | ||
![]() |
46fdf6d0a6 | ||
![]() |
6cc91f1f4d | ||
![]() |
36e25dc3c6 | ||
![]() |
01b95e2299 | ||
![]() |
2ff343102a | ||
![]() |
0e129268d7 | ||
![]() |
e6f5006335 | ||
![]() |
68d0092b40 | ||
![]() |
7ac2d3ad5d | ||
![]() |
548e28ddfb | ||
![]() |
11a67de7cb | ||
![]() |
4a5fac63c7 | ||
![]() |
4289cafceb | ||
![]() |
9500480dbf | ||
![]() |
d9a4c2015f | ||
![]() |
db83ca4b83 | ||
![]() |
bb1afcef17 | ||
![]() |
a8874ea6ca | ||
![]() |
ae5c7353bd | ||
![]() |
a9e2fefba5 | ||
![]() |
a13dd67e93 | ||
![]() |
dc6f598394 | ||
![]() |
6e202765af | ||
![]() |
a91172f69b | ||
![]() |
8a79a8747f | ||
![]() |
83ebf619b8 | ||
![]() |
1906cac606 | ||
![]() |
a9cd70a578 | ||
![]() |
d5f22e5345 | ||
![]() |
efed9f310f | ||
![]() |
1d08ffe06d | ||
![]() |
0bbd3928a6 | ||
![]() |
ccf161b102 | ||
![]() |
853c29c922 | ||
![]() |
7a36a887ef | ||
![]() |
ea42b716f0 | ||
![]() |
7654897474 | ||
![]() |
700672cf62 | ||
![]() |
dd94f8cc9b | ||
![]() |
0e8795942b | ||
![]() |
042aa84214 | ||
![]() |
d417e0442d | ||
![]() |
c4780c522c | ||
![]() |
19a349bc8c | ||
![]() |
4d5d98af61 | ||
![]() |
ca69e4c5ad | ||
![]() |
e7e4b003d7 | ||
![]() |
ed4faadb20 | ||
![]() |
f436a9dbe5 | ||
![]() |
b7ee540a71 | ||
![]() |
fb38980ec1 | ||
![]() |
31b48bf8e8 | ||
![]() |
e36eff95a8 | ||
![]() |
809685b308 | ||
![]() |
fcbcc735ac | ||
![]() |
803a6b4899 | ||
![]() |
3fd1eb51fe | ||
![]() |
c43d1af44f | ||
![]() |
49879a9268 | ||
![]() |
ecb5f67a12 | ||
![]() |
2651abeaa3 | ||
![]() |
ac153ca0ce | ||
![]() |
c4f3e19ba4 | ||
![]() |
d13cfa8193 | ||
![]() |
c29806143b | ||
![]() |
03a8e10088 | ||
![]() |
ab0fbef5fc | ||
![]() |
c411d6b43d | ||
![]() |
e84b5cd6e5 | ||
![]() |
498462942f | ||
![]() |
f78606a42e | ||
![]() |
d671aae4be | ||
![]() |
78989baeab | ||
![]() |
9b55ca632e | ||
![]() |
8ea4227f47 | ||
![]() |
19c0298e91 | ||
![]() |
0d8b69c361 | ||
![]() |
c22ccc2fe1 | ||
![]() |
14a5eb3d63 | ||
![]() |
cfef0c9b8f | ||
![]() |
2db84cdb6c | ||
![]() |
fa1aa29509 | ||
![]() |
3a88ca5789 | ||
![]() |
b49864691f | ||
![]() |
512935f1b9 | ||
![]() |
7de8aaf802 | ||
![]() |
ab6b947127 | ||
![]() |
92fc723e1f | ||
![]() |
5e1b35be13 | ||
![]() |
fe9807faa3 | ||
![]() |
653d71eadf | ||
![]() |
8b85690663 | ||
![]() |
ecc73334ac | ||
![]() |
d9bd83d067 | ||
![]() |
16939b1f4b | ||
![]() |
64930d7d65 | ||
![]() |
4bca1bb66e | ||
![]() |
02ccfe54d8 | ||
![]() |
4e84fb804f | ||
![]() |
71326772b1 | ||
![]() |
71ca792638 | ||
![]() |
f1a8a9f245 | ||
![]() |
86d24e0e99 | ||
![]() |
65409dbbfd | ||
![]() |
ddf9762f3d | ||
![]() |
b7102bd446 | ||
![]() |
8bb7560dcc | ||
![]() |
37851d67b8 | ||
![]() |
1362b9f480 | ||
![]() |
228670f03e | ||
![]() |
1de9431bb9 | ||
![]() |
ecf354798a | ||
![]() |
1999b0e771 | ||
![]() |
4300e1e9f3 | ||
![]() |
332e47c84a | ||
![]() |
02ca76490a | ||
![]() |
2b9bc8448f | ||
![]() |
7b896c7faf | ||
![]() |
c2b8fc1b7c | ||
![]() |
a81bf3cebe | ||
![]() |
7748f434a5 | ||
![]() |
f09ea92941 | ||
![]() |
9eb44646b6 | ||
![]() |
6214e81f3b | ||
![]() |
c9beeab72f | ||
![]() |
0bf797f43a | ||
![]() |
a067cb0ae7 | ||
![]() |
75bbd10017 | ||
![]() |
1dbf593c02 | ||
![]() |
a2c21f26fd | ||
![]() |
6f4be206ed | ||
![]() |
8fb0412236 | ||
![]() |
1d3a1d2828 | ||
![]() |
65d90f6cab | ||
![]() |
ff0f09a9ef | ||
![]() |
9196e041eb | ||
![]() |
26488eb0e9 | ||
![]() |
1acb0c7854 | ||
![]() |
39d7df86f6 | ||
![]() |
e901002fae | ||
![]() |
37421e46fb | ||
![]() |
09dce10d61 | ||
![]() |
440a67d846 | ||
![]() |
36520ace5a | ||
![]() |
868725e235 | ||
![]() |
072d98509a | ||
![]() |
3d9809ad55 | ||
![]() |
0a87285672 | ||
![]() |
41f64b07ed | ||
![]() |
636311c15d | ||
![]() |
23c158dc2d | ||
![]() |
f641a79537 | ||
![]() |
011e9be0fa | ||
![]() |
1afd0a040c | ||
![]() |
8323399f85 | ||
![]() |
02f8574641 | ||
![]() |
ac65ee3339 | ||
![]() |
9f9c38bf37 | ||
![]() |
1d80a0cf57 | ||
![]() |
bf9625188e | ||
![]() |
c55c69dcbe | ||
![]() |
9eb8b8c160 | ||
![]() |
b00aada2f4 | ||
![]() |
01137b36e6 | ||
![]() |
5f886fe6ab | ||
![]() |
fa8e3230c7 | ||
![]() |
8af7efe1ef | ||
![]() |
9e9f913131 | ||
![]() |
e4df7a37fb | ||
![]() |
433ae886fa | ||
![]() |
f8c0abb66a | ||
![]() |
6fd9eed0bf | ||
![]() |
b45d83b5c6 | ||
![]() |
7eb751bbe9 | ||
![]() |
f47b077ea7 | ||
![]() |
4949977ed4 | ||
![]() |
6d52f742f3 | ||
![]() |
ccda78fe5f | ||
![]() |
2246a06085 | ||
![]() |
9760e11e52 | ||
![]() |
5ad7308186 | ||
![]() |
59e8772f2d | ||
![]() |
5402efea38 | ||
![]() |
274c8e5e6f | ||
![]() |
a5fe1a7f95 | ||
![]() |
0a5d710e0d | ||
![]() |
c81f4f13f5 | ||
![]() |
a8734bbb7a | ||
![]() |
09f20ed436 | ||
![]() |
c02235ad0a | ||
![]() |
6bbb731ae5 | ||
![]() |
55779a400a | ||
![]() |
41c7a61d3d | ||
![]() |
436f060a4b | ||
![]() |
ba430b4c96 | ||
![]() |
80de89ede9 | ||
![]() |
606fd619d3 | ||
![]() |
2c654419e1 | ||
![]() |
ba8f869187 | ||
![]() |
bd419743ed | ||
![]() |
d0ffb060ce | ||
![]() |
f1d7478127 | ||
![]() |
c7bb50752c | ||
![]() |
87c1f57a6f | ||
![]() |
cb1d716682 | ||
![]() |
06a7d83b2b | ||
![]() |
aec26f9b52 | ||
![]() |
a673ee64a4 | ||
![]() |
44f0247421 | ||
![]() |
bfd764969e | ||
![]() |
71ed083b9b | ||
![]() |
f014d3bd60 | ||
![]() |
da454684c7 | ||
![]() |
c5054eee24 | ||
![]() |
2586f46ea7 | ||
![]() |
a66821eeba | ||
![]() |
55adfdb27a | ||
![]() |
6e34421bc9 | ||
![]() |
16a6f0404a | ||
![]() |
92625ce7cc | ||
![]() |
ddd9be99f3 | ||
![]() |
66fd41e796 | ||
![]() |
0786fddf73 | ||
![]() |
ea7a056c52 | ||
![]() |
a0357dcc4f | ||
![]() |
ff7d6ad7b9 | ||
![]() |
64dfac0f74 | ||
![]() |
97af2c7f3c | ||
![]() |
45fd101836 | ||
![]() |
9beda86434 | ||
![]() |
6ff0f3a1bc | ||
![]() |
81d34f319a | ||
![]() |
1cc0d98088 | ||
![]() |
0518c0b7ab | ||
![]() |
7445ddf590 | ||
![]() |
3d65345653 | ||
![]() |
4ef18ece36 | ||
![]() |
e4c28007ff | ||
![]() |
a0444ba8be | ||
![]() |
bfa6606664 | ||
![]() |
f13cfa518f | ||
![]() |
718d40d14c | ||
![]() |
bf0f775033 | ||
![]() |
ebffb38875 | ||
![]() |
de96278a92 | ||
![]() |
f0e32db2a3 | ||
![]() |
cfa97f234b | ||
![]() |
a5763c87ab | ||
![]() |
8d96ce761b | ||
![]() |
3ce714a63f | ||
![]() |
75f781be2c | ||
![]() |
78b7313d80 | ||
![]() |
8588319444 | ||
![]() |
11e2d057f8 | ||
![]() |
56786d7a19 | ||
![]() |
78edc87088 | ||
![]() |
8c9bb20ce6 | ||
![]() |
466a45760a | ||
![]() |
dd5675422b | ||
![]() |
fc0f3fb9d8 | ||
![]() |
3e67cd3224 | ||
![]() |
57592bf9ca | ||
![]() |
5d6ce14d72 | ||
![]() |
03fffc6473 | ||
![]() |
9d0f835dbf | ||
![]() |
6012cbfbbf | ||
![]() |
1d21ad981a | ||
![]() |
3738820f2c | ||
![]() |
ee10fb4a70 | ||
![]() |
2691cb0a33 | ||
![]() |
0aae081c11 | ||
![]() |
3117713278 | ||
![]() |
0b91f084f7 | ||
![]() |
286438d3af | ||
![]() |
063df54d1c | ||
![]() |
fea0b63359 | ||
![]() |
1906e608ea | ||
![]() |
d314aae823 | ||
![]() |
85e2ca5d6a | ||
![]() |
25dbe24b4c | ||
![]() |
4f7c66b4ee | ||
![]() |
2feb3a439c | ||
![]() |
714a41990c | ||
![]() |
6d30b72e96 | ||
![]() |
1ab999c889 | ||
![]() |
b5f88f2c46 | ||
![]() |
6b632970ef | ||
![]() |
75806ade10 | ||
![]() |
2a4e91787a | ||
![]() |
86bfd09d5b | ||
![]() |
1db01cfd68 | ||
![]() |
7c09016e94 | ||
![]() |
486f4327f7 | ||
![]() |
cf786af9a3 | ||
![]() |
7d019d57e9 | ||
![]() |
dcf64d9754 | ||
![]() |
36ba34983e | ||
![]() |
8d7ab95739 | ||
![]() |
e2b5433838 | ||
![]() |
88b06e1a13 | ||
![]() |
dfeb0a940f | ||
![]() |
344cad50ff | ||
![]() |
9b100f8d48 | ||
![]() |
801b01a085 | ||
![]() |
4d5921d42f | ||
![]() |
32ca5201e6 | ||
![]() |
f3de13a76b | ||
![]() |
527b47e352 | ||
![]() |
29c8128460 | ||
![]() |
c1e977d195 | ||
![]() |
4bd38fe7f0 | ||
![]() |
b70268f411 | ||
![]() |
247bdbf5c5 | ||
![]() |
a474c66cb9 | ||
![]() |
3f07283cbe | ||
![]() |
9e91772c66 | ||
![]() |
f56a22e9f8 | ||
![]() |
0958946db4 | ||
![]() |
9f3ac78a75 | ||
![]() |
73ded8124e | ||
![]() |
447bcb8470 | ||
![]() |
d01b784e2d | ||
![]() |
539abd91e8 | ||
![]() |
00c9d27276 | ||
![]() |
57fd7c6a9a | ||
![]() |
8f0bb15518 | ||
![]() |
6a696503b0 | ||
![]() |
1ababb979c | ||
![]() |
a26e9d48c3 | ||
![]() |
6ad3f2e923 | ||
![]() |
ad9f9447e2 | ||
![]() |
fc399cff81 | ||
![]() |
6111ea3d6e | ||
![]() |
ee1969a1b4 | ||
![]() |
cc2d62bc76 | ||
![]() |
72d81f77cb | ||
![]() |
08caee40c5 | ||
![]() |
2b257cb568 | ||
![]() |
cbcb50c01e | ||
![]() |
1e61cdd901 | ||
![]() |
1c59fb73eb | ||
![]() |
79ccb8d343 | ||
![]() |
a9d8685158 | ||
![]() |
98b238796a | ||
![]() |
4629948dde | ||
![]() |
753a27b745 | ||
![]() |
7650c99398 | ||
![]() |
1c06b405ee | ||
![]() |
df8a3d426f | ||
![]() |
fa1eb0e233 | ||
![]() |
6925cdc902 | ||
![]() |
bf98b314ee | ||
![]() |
a1d80ca673 | ||
![]() |
77cb7ffa55 | ||
![]() |
4bdbd5077e | ||
![]() |
5710b5fca8 | ||
![]() |
c87b9ccf62 | ||
![]() |
5850765e70 | ||
![]() |
4e5083ae92 | ||
![]() |
b627d71931 | ||
![]() |
877e079880 | ||
![]() |
b6c96f133a | ||
![]() |
0fbba2b8e5 | ||
![]() |
eabb94b34f | ||
![]() |
467edeb201 | ||
![]() |
c8c3038930 | ||
![]() |
114f33ace4 | ||
![]() |
ab49c689fc | ||
![]() |
75ed63d581 | ||
![]() |
89f6273bef | ||
![]() |
39247d21e1 | ||
![]() |
c03c606676 | ||
![]() |
9d9d164063 | ||
![]() |
521b01efc6 | ||
![]() |
3ff6855694 | ||
![]() |
bf50b3d1f7 | ||
![]() |
a0db8ecfe3 | ||
![]() |
f70ff8c13e | ||
![]() |
e8464ae657 | ||
![]() |
9be5332164 | ||
![]() |
e82e6d839a | ||
![]() |
c459a0f5cf | ||
![]() |
dc16df2dc8 | ||
![]() |
bab23b459e | ||
![]() |
7543d3c3ba | ||
![]() |
b44e45c5d0 | ||
![]() |
e51246a245 | ||
![]() |
b5e10b76c9 | ||
![]() |
b519150536 | ||
![]() |
aa59e6615c | ||
![]() |
0a8dc032c6 | ||
![]() |
5d3f8cb3fb | ||
![]() |
cef53442fc | ||
![]() |
503e21dadc | ||
![]() |
28e0c55c10 | ||
![]() |
1aa50a2181 | ||
![]() |
4c84fd3c2c | ||
![]() |
b4fa36ce6b | ||
![]() |
4874d7dd15 | ||
![]() |
e0c374f81a | ||
![]() |
40f0711dcc | ||
![]() |
b7199c5797 | ||
![]() |
32028ad0be | ||
![]() |
6c089ea317 | ||
![]() |
7c329f85a6 | ||
![]() |
735da0a0c2 | ||
![]() |
be3af06cf0 | ||
![]() |
adcc29c5e8 | ||
![]() |
295e63f1c1 | ||
![]() |
50f83fbbf9 | ||
![]() |
01d99a0699 | ||
![]() |
3a2cb57d5f | ||
![]() |
9e39b323ca | ||
![]() |
0775f476d7 | ||
![]() |
728158feaa | ||
![]() |
5c5085e5df | ||
![]() |
95a7b1e69c | ||
![]() |
a11f92737c | ||
![]() |
e0cfb5ce70 | ||
![]() |
625c010896 | ||
![]() |
2172de1b55 | ||
![]() |
b7bda4c744 | ||
![]() |
d4478e5fd6 | ||
![]() |
271064c49c | ||
![]() |
0f1c4d253d | ||
![]() |
7b569c3bd2 | ||
![]() |
0b68c6694f | ||
![]() |
aefa359115 | ||
![]() |
4b439f2379 | ||
![]() |
38cc41f069 | ||
![]() |
018ef7eb4b | ||
![]() |
48d974415b | ||
![]() |
e3cd075245 | ||
![]() |
d08902fa1a | ||
![]() |
8daad18e10 | ||
![]() |
9c7923dc50 | ||
![]() |
85e3eec3de | ||
![]() |
efba30a660 | ||
![]() |
60fa889c6b | ||
![]() |
2e716b2444 | ||
![]() |
7b9dbd572b | ||
![]() |
ac72abd3fa | ||
![]() |
572b71e0da | ||
![]() |
ac821ba302 | ||
![]() |
d212d0a713 | ||
![]() |
81cc367c87 | ||
![]() |
9ede089b7e | ||
![]() |
7fa04e7b07 | ||
![]() |
7d2e1717f0 | ||
![]() |
86b7b1a6da | ||
![]() |
ca831f8510 | ||
![]() |
6c45b9aee7 | ||
![]() |
09091252ff | ||
![]() |
658a30db5a | ||
![]() |
f24809e868 | ||
![]() |
d192ade8ef | ||
![]() |
e88a0e449f | ||
![]() |
2f4ded8f5b | ||
![]() |
baa5cccb81 | ||
![]() |
c54a1a45c3 | ||
![]() |
06f4a1a653 | ||
![]() |
cd7f20caf9 | ||
![]() |
1e9656fead | ||
![]() |
656be6dd7a | ||
![]() |
05cc9c2860 | ||
![]() |
34e901e827 | ||
![]() |
f9cb4261ab | ||
![]() |
273ee95ace | ||
![]() |
3f8cb5b4c1 | ||
![]() |
799744c7f5 | ||
![]() |
f286189466 | ||
![]() |
9f120db6df | ||
![]() |
1eb6f9a3db | ||
![]() |
39afa8246f | ||
![]() |
50002ba17a | ||
![]() |
aaf82facae | ||
![]() |
f286380ba8 | ||
![]() |
a5efd6ee9e | ||
![]() |
0d66b53eac | ||
![]() |
78875a6441 | ||
![]() |
f1cc230052 | ||
![]() |
c7abbd1360 | ||
![]() |
e5a54fe4fd | ||
![]() |
216cd98c0a | ||
![]() |
b34d409f02 | ||
![]() |
08f9ad6eeb | ||
![]() |
78817c1991 | ||
![]() |
367da3d355 | ||
![]() |
6feda8bfb0 | ||
![]() |
52d71f74ee | ||
![]() |
37aa111de1 | ||
![]() |
97db88bcf3 | ||
![]() |
5e925e2c4b | ||
![]() |
fb4e7f7bdd | ||
![]() |
270bbe708f | ||
![]() |
a0d38a48b3 | ||
![]() |
8ffa433a3c | ||
![]() |
967bf4fa46 | ||
![]() |
f089a63811 | ||
![]() |
074c9d8549 | ||
![]() |
aa146d5d2d | ||
![]() |
992b5da49b | ||
![]() |
1915baf98a | ||
![]() |
d55e20811d | ||
![]() |
1703c7c354 | ||
![]() |
840014a1c7 | ||
![]() |
07b0e3e36f | ||
![]() |
f52642134c | ||
![]() |
583517cf1e | ||
![]() |
f9234ed3de | ||
![]() |
a9a53302d5 | ||
![]() |
81736a6c10 | ||
![]() |
327019e282 | ||
![]() |
182c069703 | ||
![]() |
5ec136cd46 | ||
![]() |
74a72d698c | ||
![]() |
8f1f1739eb | ||
![]() |
9b49b2a64a | ||
![]() |
9cd517008f | ||
![]() |
6938f566db | ||
![]() |
7fba3472cd | ||
![]() |
c4937558ab | ||
![]() |
3d2ffcf2da | ||
![]() |
9b6f69a9f8 | ||
![]() |
ff07a294df | ||
![]() |
949dc19d2c | ||
![]() |
6254b3f380 | ||
![]() |
4d64c51186 | ||
![]() |
c613376d4d | ||
![]() |
23c670144a | ||
![]() |
3a1bf0268e | ||
![]() |
288fe6422c | ||
![]() |
c2dbb25145 | ||
![]() |
f9ed0aa916 | ||
![]() |
481db3209a | ||
![]() |
df5ec8d7b8 | ||
![]() |
8a4bbe1fed | ||
![]() |
59fbc2ac9c | ||
![]() |
70ad40f809 | ||
![]() |
af4b604050 | ||
![]() |
88edf77ee8 | ||
![]() |
2dc53d1b18 | ||
![]() |
56a294b24a | ||
![]() |
90669b40d0 | ||
![]() |
25e695306f | ||
![]() |
cc36357bea | ||
![]() |
b7641b6a8b | ||
![]() |
3f937dec9e | ||
![]() |
7ce01df694 | ||
![]() |
36624395d8 | ||
![]() |
5014799f6e | ||
![]() |
90d6f8ba54 | ||
![]() |
b906120e3d | ||
![]() |
1638961e7a | ||
![]() |
5bde0c97e4 | ||
![]() |
594f62ecd9 | ||
![]() |
77d86b51e1 | ||
![]() |
b21af26147 | ||
![]() |
09d89fd410 | ||
![]() |
23aec4d791 | ||
![]() |
756bedc6d9 | ||
![]() |
218b278f71 | ||
![]() |
efd6c6b151 | ||
![]() |
bd3c5668f9 | ||
![]() |
029c2797d5 | ||
![]() |
92323b1ab7 | ||
![]() |
a2c07c4184 | ||
![]() |
db24ad1d57 | ||
![]() |
6bb0c12308 | ||
![]() |
a5747ba796 | ||
![]() |
402f1a8a17 | ||
![]() |
84e17f5def | ||
![]() |
45d4f7867f | ||
![]() |
91fbbaadce | ||
![]() |
477c36f382 | ||
![]() |
101039ef21 | ||
![]() |
ca5ace8a15 | ||
![]() |
9a77f765df | ||
![]() |
11948ede38 | ||
![]() |
1d0d368b83 | ||
![]() |
cb04f09483 | ||
![]() |
2434875723 | ||
![]() |
d98ce4d601 | ||
![]() |
bcc5ba502a | ||
![]() |
626b07400e | ||
![]() |
588e394b46 | ||
![]() |
ae3adc7a32 | ||
![]() |
7ca6b68cb7 | ||
![]() |
6d82b93faf | ||
![]() |
12fd7006a6 | ||
![]() |
d3a7e40fc5 | ||
![]() |
b20a3ee8c3 | ||
![]() |
abd4d1ded1 | ||
![]() |
7819ff90db | ||
![]() |
421e328b7e | ||
![]() |
a20ef864a0 | ||
![]() |
c5b2643294 | ||
![]() |
b918dd6cfa | ||
![]() |
53428fb2fe | ||
![]() |
afad204944 | ||
![]() |
be03fea776 | ||
![]() |
a64cc77dcb | ||
![]() |
3bcb0748ed | ||
![]() |
0fd6b829a0 | ||
![]() |
aa23ebcc38 | ||
![]() |
529e8cdb84 | ||
![]() |
8a3bff53cc | ||
![]() |
7bdf519a51 | ||
![]() |
3f939deb74 | ||
![]() |
0b806e6cac | ||
![]() |
660592eae8 | ||
![]() |
343b1e7981 | ||
![]() |
67c41be9ae | ||
![]() |
f022969217 | ||
![]() |
8470d9bb36 | ||
![]() |
2c218d35b4 | ||
![]() |
71420a0e23 | ||
![]() |
b13e72408f | ||
![]() |
dfeaa4469b | ||
![]() |
38ab24b144 | ||
![]() |
2fbe009a28 | ||
![]() |
7c060800ef | ||
![]() |
3f7f1c8b2e | ||
![]() |
dd425da37d | ||
![]() |
c7d6af8ce9 | ||
![]() |
62f9e144cd | ||
![]() |
6b2f9c8def | ||
![]() |
355600566d | ||
![]() |
8929a9714e | ||
![]() |
5ebe334e42 | ||
![]() |
c87032aa60 | ||
![]() |
451b6865e5 | ||
![]() |
4f6818fc17 | ||
![]() |
bfe7d2b4d4 | ||
![]() |
f4a72ed98f | ||
![]() |
9dc24445a9 | ||
![]() |
a28c517691 | ||
![]() |
ada8e4ae21 | ||
![]() |
33c27630b5 | ||
![]() |
0a17aecff2 | ||
![]() |
30159d775e | ||
![]() |
bbf0068878 | ||
![]() |
bf691d594b | ||
![]() |
ba7a1eb6e6 | ||
![]() |
a2398e446a | ||
![]() |
3adb20f336 | ||
![]() |
8b0fd60ffc | ||
![]() |
5cf19ab1e6 | ||
![]() |
d0abb39132 | ||
![]() |
2cb3d1a244 | ||
![]() |
7861e07282 | ||
![]() |
e8e7f3fafa | ||
![]() |
2af33ad275 | ||
![]() |
d6dae65386 | ||
![]() |
00717530b9 | ||
![]() |
c13eebe1b0 | ||
![]() |
e8d9a4a0df | ||
![]() |
8193bfb09b | ||
![]() |
59895c673d | ||
![]() |
61e5887bb5 | ||
![]() |
982a4d593f | ||
![]() |
80a0e7a77e | ||
![]() |
7fd760177c | ||
![]() |
7f50d14cbe | ||
![]() |
586d8ce3c6 | ||
![]() |
d6502e4c13 | ||
![]() |
c1c595a0b7 | ||
![]() |
1c92ddfc51 | ||
![]() |
4034f71279 | ||
![]() |
2428dc528f | ||
![]() |
3070512c7c | ||
![]() |
caa4029870 | ||
![]() |
9150bdee85 | ||
![]() |
f7c658aa40 | ||
![]() |
8e1c375a8a | ||
![]() |
c070e421b1 | ||
![]() |
11d17f7d92 | ||
![]() |
246ffe46bd | ||
![]() |
26a63295d6 | ||
![]() |
113483f638 | ||
![]() |
d3ab78ccfd | ||
![]() |
646898fa81 | ||
![]() |
5034384fec | ||
![]() |
cbfa8ff23e | ||
![]() |
f860bf69a9 | ||
![]() |
0928298eb6 | ||
![]() |
497d8b2e70 | ||
![]() |
b88d4e852e | ||
![]() |
6d74b23e2c | ||
![]() |
45e66a04aa | ||
![]() |
1bfa361f65 | ||
![]() |
e19d750b3f | ||
![]() |
83c2f042ae | ||
![]() |
c02b2ad8cc | ||
![]() |
827364daa9 | ||
![]() |
dbdbfe8622 | ||
![]() |
bc76dce517 | ||
![]() |
098eb711ad | ||
![]() |
b307f52899 | ||
![]() |
c4258db23a | ||
![]() |
9d1e9eb1af | ||
![]() |
edd3239885 | ||
![]() |
89f8605568 | ||
![]() |
b59e1f6b1c | ||
![]() |
f542264bc3 | ||
![]() |
eecfdb788a | ||
![]() |
13717f003b | ||
![]() |
cf8ed0735d | ||
![]() |
7ff2ca32f2 | ||
![]() |
ff25e09a64 | ||
![]() |
15f7b5c8ed | ||
![]() |
7383b17a08 | ||
![]() |
41f5d4d3b4 | ||
![]() |
055cc338a9 | ||
![]() |
65c4c990b1 | ||
![]() |
7037f35235 | ||
![]() |
64eeb8944c | ||
![]() |
2cac034043 | ||
![]() |
c998ea9b21 | ||
![]() |
ca5e7c72e6 | ||
![]() |
e3c758fa82 | ||
![]() |
7284a25479 | ||
![]() |
53d4d90b34 | ||
![]() |
8d86a8dbcf | ||
![]() |
c0d286df72 | ||
![]() |
0ca90f3f23 | ||
![]() |
4f80c0d477 | ||
![]() |
94aa473a91 | ||
![]() |
1e8b5ad927 | ||
![]() |
4055cc2760 | ||
![]() |
f47f9abd28 | ||
![]() |
945aeb39eb | ||
![]() |
259c7499b1 | ||
![]() |
17edbb2ce8 | ||
![]() |
c7b433aa48 | ||
![]() |
68b2fdad52 | ||
![]() |
6356a67935 | ||
![]() |
f008eb4732 | ||
![]() |
565c24e72b | ||
![]() |
01d6617e0b | ||
![]() |
322e68e343 | ||
![]() |
0c91cf3941 | ||
![]() |
9679bcd1f6 | ||
![]() |
8c86118409 | ||
![]() |
34bdd3256b | ||
![]() |
e85e118e5b | ||
![]() |
a971485c24 | ||
![]() |
5771035584 | ||
![]() |
f1bc10b135 | ||
![]() |
56a3beb851 | ||
![]() |
85b9ca618a | ||
![]() |
03f9daa98b | ||
![]() |
a28fa2b6ca | ||
![]() |
9ea7893c15 | ||
![]() |
1c9fd09e09 | ||
![]() |
48ab3737b7 | ||
![]() |
8bc31b6698 | ||
![]() |
d6b193d69b | ||
![]() |
98546684fb | ||
![]() |
88573fab3f | ||
![]() |
19091acf49 | ||
![]() |
28085b16cb | ||
![]() |
c1692e8069 | ||
![]() |
3c55909eb4 | ||
![]() |
d8aeb0bf13 | ||
![]() |
00ff04c598 | ||
![]() |
8fa61ba298 | ||
![]() |
64a4cccbe3 | ||
![]() |
ad55965fd6 | ||
![]() |
bd99db7a28 | ||
![]() |
8c62433e6e | ||
![]() |
a55a1cac4a | ||
![]() |
25d67d4c78 | ||
![]() |
f8c6910609 | ||
![]() |
f0ae8a4cf5 | ||
![]() |
bada311fdd | ||
![]() |
f309f68b18 | ||
![]() |
2d86885703 | ||
![]() |
c9fcd1724e | ||
![]() |
dfffbc9f6a | ||
![]() |
4f6cf0275d | ||
![]() |
695dbfb1f0 | ||
![]() |
ee5335424c | ||
![]() |
f8fcdf19e1 | ||
![]() |
e269f93617 | ||
![]() |
92408189e5 | ||
![]() |
bee3ee1450 | ||
![]() |
1bfa2c2e3f | ||
![]() |
78fe559269 | ||
![]() |
8818d1326e | ||
![]() |
16ff2cd65e | ||
![]() |
82ebd71150 | ||
![]() |
6aabd8c39f | ||
![]() |
3a2138c6f3 | ||
![]() |
5ea4ae3b28 | ||
![]() |
0758a4bd09 | ||
![]() |
2c83209141 | ||
![]() |
8b4c402f10 | ||
![]() |
34d5a09e18 | ||
![]() |
d9af017dbd | ||
![]() |
a22589c861 | ||
![]() |
379ce21ae7 | ||
![]() |
c27f96c32f | ||
![]() |
b66f8038e9 | ||
![]() |
3a054d6f9f | ||
![]() |
7d4b420e80 | ||
![]() |
800ba2c9e4 | ||
![]() |
b0ad7f1782 | ||
![]() |
05e56608d7 | ||
![]() |
c89dea4892 | ||
![]() |
1451073223 | ||
![]() |
8b8907cac4 | ||
![]() |
312f0de353 | ||
![]() |
27cfa491bd | ||
![]() |
869ee5f61d | ||
![]() |
6b1c3aa1da | ||
![]() |
604cf68b10 | ||
![]() |
96afe00017 | ||
![]() |
d3201c3e0a | ||
![]() |
2042167e8e | ||
![]() |
21a1ed0f1e | ||
![]() |
81cd8f042b | ||
![]() |
1c4703fc71 | ||
![]() |
bbdf196c08 | ||
![]() |
c37da951af | ||
![]() |
37b30edac7 | ||
![]() |
acc21b5f59 | ||
![]() |
655094eb34 | ||
![]() |
3b1da04370 | ||
![]() |
a24cb81330 | ||
![]() |
abe4ca6583 | ||
![]() |
afa6854df7 | ||
![]() |
b3158cf76a | ||
![]() |
7291e54174 | ||
![]() |
6aa7a49b40 | ||
![]() |
27f32959f6 | ||
![]() |
cf4ddfc7eb | ||
![]() |
950cbbd6e9 | ||
![]() |
d0f4e8d12e | ||
![]() |
541f1defc0 | ||
![]() |
aaefb8df10 | ||
![]() |
47a1407f11 | ||
![]() |
3d9e9b6442 | ||
![]() |
581c80326e | ||
![]() |
4c339af3a9 | ||
![]() |
eeb7c331a8 | ||
![]() |
ef3823456c | ||
![]() |
69f882fe6c | ||
![]() |
dfaaf99229 | ||
![]() |
32747d4073 | ||
![]() |
c4d601d10d | ||
![]() |
4864fc5dcf | ||
![]() |
f77f9bf2c4 | ||
![]() |
8d0dae14c7 | ||
![]() |
4a27cf52ed | ||
![]() |
2f71aaa244 | ||
![]() |
995a6fc882 | ||
![]() |
bfcbbe1501 | ||
![]() |
d4b9ee4d53 | ||
![]() |
034d11e890 | ||
![]() |
efb3c60419 | ||
![]() |
62b748bb8f | ||
![]() |
118b7c0872 | ||
![]() |
23f850e0bf | ||
![]() |
220f760c7a | ||
![]() |
41ef1f21a3 | ||
![]() |
8a70a18bf3 | ||
![]() |
b4e636b7bb | ||
![]() |
ac890e22a0 | ||
![]() |
0a3ac5ac5c | ||
![]() |
b662ec3afe | ||
![]() |
3a99b1929c | ||
![]() |
7e3f786bcc | ||
![]() |
f8ccdd31ab | ||
![]() |
e455d4a730 | ||
![]() |
8bddde6ed0 | ||
![]() |
93310f0097 | ||
![]() |
b4c9b743ed | ||
![]() |
acfc43546f | ||
![]() |
53047d03fd | ||
![]() |
0fd496ee1c | ||
![]() |
d019ebe557 | ||
![]() |
ef1576c17d | ||
![]() |
d921410b6b | ||
![]() |
5c476fdb96 | ||
![]() |
d7d28c81c4 | ||
![]() |
e71e4796b2 | ||
![]() |
9211380701 | ||
![]() |
146a1b0449 | ||
![]() |
e34a04f38d | ||
![]() |
f65eb7d035 | ||
![]() |
6f2d9a5b0b | ||
![]() |
f1ad93e6c2 | ||
![]() |
d96f507c42 | ||
![]() |
0b7720328d | ||
![]() |
04ddcc742b | ||
![]() |
162f67d6b2 | ||
![]() |
a8cb408d80 | ||
![]() |
d8589f6ce0 | ||
![]() |
de08f6de8b | ||
![]() |
8aac0339d5 | ||
![]() |
21e6e0564d | ||
![]() |
21123240ba | ||
![]() |
1a38d5057f | ||
![]() |
c0834b05fd | ||
![]() |
34b6028797 | ||
![]() |
a9196e2534 | ||
![]() |
5b1c852661 | ||
![]() |
0bf696a046 | ||
![]() |
e03bf9edb6 | ||
![]() |
68a2ee313a | ||
![]() |
e4df55ece6 | ||
![]() |
a0594098cd | ||
![]() |
43a6378c94 | ||
![]() |
4044295ace | ||
![]() |
5c5cccefc8 | ||
![]() |
0e2e311177 | ||
![]() |
f1805b451e | ||
![]() |
72ecb20621 | ||
![]() |
ed7e942722 | ||
![]() |
5a4476e186 | ||
![]() |
656fd80254 | ||
![]() |
93fb499ebd | ||
![]() |
12b23f8d16 | ||
![]() |
8ab321b798 | ||
![]() |
8b52baabde | ||
![]() |
ab279c7d10 | ||
![]() |
791fa07752 | ||
![]() |
a75cf5f6b3 | ||
![]() |
a77b943fd7 | ||
![]() |
ca82d221de | ||
![]() |
96a1e4a4cb | ||
![]() |
44cf39a505 | ||
![]() |
e6b223ea59 | ||
![]() |
ee254b3093 | ||
![]() |
6cf02b20e8 | ||
![]() |
e68daf21de | ||
![]() |
8d2532bf08 | ||
![]() |
3163b44da9 | ||
![]() |
8de715331b | ||
![]() |
8c2764ef57 | ||
![]() |
87ff5494f0 | ||
![]() |
bad83619a2 | ||
![]() |
be9310d9ff | ||
![]() |
e5e05de464 | ||
![]() |
b482b41a3f | ||
![]() |
dd4f9f9504 | ||
![]() |
068d3b717c | ||
![]() |
065622e5fe | ||
![]() |
7f1bbb235d | ||
![]() |
eff707190a | ||
![]() |
42ed268056 | ||
![]() |
1d2cd60c38 | ||
![]() |
b6550e2838 | ||
![]() |
4fc151e6b2 | ||
![]() |
ac56922348 | ||
![]() |
8d1ad8fb99 | ||
![]() |
a52a8bd066 | ||
![]() |
bfb04ca919 | ||
![]() |
6c681fd68d | ||
![]() |
1630fd2510 | ||
![]() |
59f6367d4b | ||
![]() |
56b3a72e74 | ||
![]() |
b8e322578c | ||
![]() |
485abcacca | ||
![]() |
cfa2e2c6d1 | ||
![]() |
37c1d6b6fb | ||
![]() |
69ca1e07e5 | ||
![]() |
6238e5357c | ||
![]() |
674a473027 | ||
![]() |
5c37feabc6 | ||
![]() |
0f27b43789 | ||
![]() |
3088506b2f | ||
![]() |
b8d7d0c973 | ||
![]() |
7c9062e490 | ||
![]() |
43878b1bb5 | ||
![]() |
1763afbf54 | ||
![]() |
63ab4503ab | ||
![]() |
9f22d4d494 | ||
![]() |
597b3e8dc8 | ||
![]() |
4ac21f3d65 | ||
![]() |
b342d6f6c2 | ||
![]() |
3c69e7174d | ||
![]() |
75cc987767 | ||
![]() |
b35f9b55cf | ||
![]() |
6ddfc89e5a | ||
![]() |
08bb559963 | ||
![]() |
c5ceb17bb2 | ||
![]() |
9f90fd9394 | ||
![]() |
554a347011 | ||
![]() |
d746ccd93f | ||
![]() |
e838953414 | ||
![]() |
f571dca485 | ||
![]() |
66b6a1adf8 | ||
![]() |
d9c90a37bb | ||
![]() |
ef467b12e5 | ||
![]() |
5123f49006 | ||
![]() |
829cbb3ebd | ||
![]() |
593fa5e6ee | ||
![]() |
b58c63fbf2 | ||
![]() |
3c0bde7f4c | ||
![]() |
5d7d8edb66 | ||
![]() |
a8788f72cd | ||
![]() |
0c6fec1596 | ||
![]() |
f2d6bf61c2 | ||
![]() |
fedece2d40 | ||
![]() |
d8e3b095dc | ||
![]() |
4aa843a6ec | ||
![]() |
bf2ed794fc | ||
![]() |
9ae4089994 | ||
![]() |
568512bb38 | ||
![]() |
4ddfa473e8 | ||
![]() |
a64c3c2922 | ||
![]() |
aaa9f4dde7 | ||
![]() |
77be1a0504 | ||
![]() |
30470b4ece | ||
![]() |
4bc5aa65a5 | ||
![]() |
f3b921781a | ||
![]() |
024f5a5bf1 | ||
![]() |
99001cd478 | ||
![]() |
92e232c572 | ||
![]() |
f80eb86a3d | ||
![]() |
74b775085c | ||
![]() |
be71ee4770 | ||
![]() |
5166dc70d4 | ||
![]() |
8ce2298a8f | ||
![]() |
6ed8a7a492 | ||
![]() |
936d550d70 | ||
![]() |
a8aa7875fa | ||
![]() |
3558184cf2 | ||
![]() |
02c439ff79 | ||
![]() |
8d2ee0a352 | ||
![]() |
43be75308a | ||
![]() |
d96693a437 | ||
![]() |
4ff3e3deb2 | ||
![]() |
452d6fafb8 | ||
![]() |
bab6b0a307 | ||
![]() |
f9e15cba1c | ||
![]() |
149aab7e6f | ||
![]() |
2fc6471c98 | ||
![]() |
676b81bd02 | ||
![]() |
f5f666c16e | ||
![]() |
bf7444c7ff | ||
![]() |
7927ca4286 | ||
![]() |
a0f90dadbd | ||
![]() |
596cc7e7c1 | ||
![]() |
0264a6c2fb | ||
![]() |
aa088539cd | ||
![]() |
f08c2ed809 | ||
![]() |
041f2feb99 | ||
![]() |
b229149c1a | ||
![]() |
471d515cfa | ||
![]() |
3ba4b9b513 | ||
![]() |
031ea7f3a5 | ||
![]() |
43eb266ce6 | ||
![]() |
77780ff61f | ||
![]() |
5cf3d9e4b5 | ||
![]() |
68d83517e6 | ||
![]() |
01789f7627 | ||
![]() |
f3769d9507 | ||
![]() |
acdba5802a | ||
![]() |
893b78d686 | ||
![]() |
2edb37f722 | ||
![]() |
7efa541482 | ||
![]() |
6fcbf7d074 | ||
![]() |
a0f5ce823b | ||
![]() |
72f596fa12 | ||
![]() |
f613ed1bb6 | ||
![]() |
d7f19721e5 | ||
![]() |
9d72e3b91a | ||
![]() |
4089f470f9 | ||
![]() |
21e5c1e4dc | ||
![]() |
99ab1afb24 | ||
![]() |
351a7020d4 | ||
![]() |
815e0972a1 | ||
![]() |
d1a4a37fb3 | ||
![]() |
5e3691a251 | ||
![]() |
cd23d59c5b | ||
![]() |
6f7577541f | ||
![]() |
6adff7c813 | ||
![]() |
84d176ede4 | ||
![]() |
6d3b0ac5c5 | ||
![]() |
7008522988 | ||
![]() |
aefbdf4249 | ||
![]() |
80bf1bc064 | ||
![]() |
2f06a55484 | ||
![]() |
e05f91f0d4 | ||
![]() |
9ded756d5f | ||
![]() |
9ed9215d24 | ||
![]() |
5f711cd01d | ||
![]() |
42054846de | ||
![]() |
c5266aad7b | ||
![]() |
d4ddbe8e14 | ||
![]() |
11c2159711 | ||
![]() |
1c35c7d2c8 | ||
![]() |
ccf230cd9f | ||
![]() |
055f420a43 | ||
![]() |
402f12f0e9 | ||
![]() |
1a6ecbd1f0 | ||
![]() |
480ea781a7 | ||
![]() |
9d72acaa22 | ||
![]() |
57ed2d6f02 | ||
![]() |
efc430e691 | ||
![]() |
95537e5360 | ||
![]() |
868989d604 | ||
![]() |
8d57f4c923 | ||
![]() |
ead58095b4 | ||
![]() |
8db8ab7d76 | ||
![]() |
c568ce3b0e | ||
![]() |
6abc2fc22c | ||
![]() |
3179110d6e | ||
![]() |
f633e804f8 | ||
![]() |
384dcde593 | ||
![]() |
8c3b2ce6e3 | ||
![]() |
b95d6bc867 | ||
![]() |
fb1aeada9a | ||
![]() |
976b6ba244 | ||
![]() |
d0b89df690 | ||
![]() |
1ff12020f0 | ||
![]() |
7b85e8d224 | ||
![]() |
89825bbf1c | ||
![]() |
2bbcad6dc6 | ||
![]() |
283dd40bf2 | ||
![]() |
f97a0619c9 | ||
![]() |
b98b573523 | ||
![]() |
2c030b317f | ||
![]() |
0c9fe9a684 | ||
![]() |
8e984c58c9 | ||
![]() |
280fc2886f | ||
![]() |
3586175adc | ||
![]() |
43ded3b094 | ||
![]() |
17c0ce031f | ||
![]() |
05077b8ebe | ||
![]() |
feaefe30e0 | ||
![]() |
e09d951920 | ||
![]() |
2b2058ffbf | ||
![]() |
ba8a9dc06f | ||
![]() |
7d01ef1c1f | ||
![]() |
73c1c9ef69 | ||
![]() |
12bd7fe981 | ||
![]() |
d7813ff86f | ||
![]() |
c4ca800723 | ||
![]() |
dd2d69d992 | ||
![]() |
a687480026 | ||
![]() |
9221302abb | ||
![]() |
fcc1dae6ba | ||
![]() |
30b1cf804f | ||
![]() |
9166c5b548 | ||
![]() |
ef910efd9b | ||
![]() |
7d3b3a19a5 | ||
![]() |
3a4c6eb427 | ||
![]() |
0ff45a80a5 | ||
![]() |
9acdc1d039 | ||
![]() |
4f885a755f | ||
![]() |
ddd3e952cf | ||
![]() |
4a80e9d44c | ||
![]() |
cadefa666d | ||
![]() |
870404a2fb | ||
![]() |
7e2c34c36d | ||
![]() |
d5971c0006 | ||
![]() |
e2d80a4a57 | ||
![]() |
8aab2fd700 | ||
![]() |
fa965a6bd6 | ||
![]() |
b17043d514 | ||
![]() |
8e00e90935 | ||
![]() |
121b76f927 | ||
![]() |
f90ced107c | ||
![]() |
ff752e853b | ||
![]() |
c78f110a9e | ||
![]() |
3abbb38d72 | ||
![]() |
9605e6a765 | ||
![]() |
80d8fa3e60 | ||
![]() |
60b84998de | ||
![]() |
be19c565cb | ||
![]() |
d5f8a6ad5f | ||
![]() |
8a11b46b72 | ||
![]() |
55fc805081 | ||
![]() |
800c55b6fd | ||
![]() |
4d7cba6bb9 | ||
![]() |
7b98043cae | ||
![]() |
e1044d5a94 | ||
![]() |
2a89fae133 | ||
![]() |
6a1bb3841d | ||
![]() |
77015ad342 | ||
![]() |
94e46ad16d | ||
![]() |
62efdb45b5 | ||
![]() |
582403a571 | ||
![]() |
02409b41fd | ||
![]() |
38af1f50ec | ||
![]() |
e32d6d8570 | ||
![]() |
81c63ba431 | ||
![]() |
b83ef543f3 | ||
![]() |
3e410aed0b | ||
![]() |
0b9c41ea04 | ||
![]() |
4fae234e85 | ||
![]() |
6131f23591 | ||
![]() |
f5f3e2437a | ||
![]() |
fae495f8a5 | ||
![]() |
fe54f6e269 | ||
![]() |
baeb34d970 | ||
![]() |
87e297a3cf | ||
![]() |
b1d6384407 | ||
![]() |
8659e641b3 | ||
![]() |
e47f46affc | ||
![]() |
09aa43e843 | ||
![]() |
dbbbaa60c8 | ||
![]() |
45e1895345 | ||
![]() |
97ca130112 | ||
![]() |
043a3bb638 | ||
![]() |
f51547799f | ||
![]() |
ac00613bda |
17
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@ -0,0 +1,17 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a bug report to help us improve
|
||||
title: ''
|
||||
labels: 'bug - unconfirmed'
|
||||
assignees: ''
|
||||
---
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description about the issue you encounter.
|
||||
|
||||
**To Reproduce**
|
||||
Steps to reproduce the behavior.
|
||||
|
||||
**Debug file**
|
||||
|
||||
If possible, please add a debug report. To do that, drag a text file with the debug report in here.
|
4
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
contact_links:
|
||||
- name: Have an idea for a new app in the RaspiBlitz? Make a suggestion in the app ideas section
|
||||
url: https://github.com/raspiblitz/raspiblitz/discussions/categories/feature-app-ideas
|
||||
about: Feature and app ideas
|
7
.github/ISSUE_TEMPLATE/documentation_improvement.md
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
---
|
||||
name: Documentation Improvement
|
||||
about: Improvement suggestions for the documentation
|
||||
title: ''
|
||||
labels: 'documentation'
|
||||
assignees: ''
|
||||
---
|
7
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
---
|
||||
name: Feature Request
|
||||
about: Enhancement suggestions for the RaspiBlitz
|
||||
title: ''
|
||||
labels: 'enhancement'
|
||||
assignees: ''
|
||||
---
|
105
.github/workflows/amd64-fatpack-image.yml
vendored
Normal file
@ -0,0 +1,105 @@
|
||||
name: amd64-fatpack-image-build
|
||||
|
||||
concurrency:
|
||||
group: amd64-fatpack-image-build-${{ github.head_ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
#push:
|
||||
# branches: ["dev", "v1.10"]
|
||||
# paths:
|
||||
# - 'build_sdcard.sh'
|
||||
# - 'home.admin/bitcoin.install.sh'
|
||||
# - 'home.admin/lnd.install.sh'
|
||||
# - 'home.admin/cl.install.sh'
|
||||
# - 'home.admin/cl-plugin.cln-grpc.sh'
|
||||
# - 'home.admin/tor.install.sh'
|
||||
# - 'home.admin/blitz.i2pd.sh'
|
||||
# - 'home.admin/blitz.web.sh'
|
||||
# - 'home.admin/bonus.nodejs.sh'
|
||||
# - 'home.admin/bonus.rtl.sh'
|
||||
# - 'home.admin/bonus.btcpayserver.sh'
|
||||
# - 'home.admin/bonus.thunderhub.sh'
|
||||
# - 'home.admin/bonus.jam.sh install'
|
||||
# - 'home.admin/bonus.mempool.sh'
|
||||
# - 'home.admin/blitz.web.api.sh'
|
||||
# - 'home.admin/blitz.web.ui.sh'
|
||||
# - 'home.admin/blitz.display.sh'
|
||||
# - 'ci/amd64/**'
|
||||
#pull_request:
|
||||
# branches: ["dev", "v1.10"]
|
||||
# paths:
|
||||
# - 'build_sdcard.sh'
|
||||
# - 'home.admin/bitcoin.install.sh'
|
||||
# - 'home.admin/lnd.install.sh'
|
||||
# - 'home.admin/cl.install.sh'
|
||||
# - 'home.admin/cl-plugin.cln-grpc.sh'
|
||||
# - 'home.admin/tor.install.sh'
|
||||
# - 'home.admin/blitz.i2pd.sh'
|
||||
# - 'home.admin/blitz.web.sh'
|
||||
# - 'home.admin/bonus.nodejs.sh'
|
||||
# - 'home.admin/bonus.rtl.sh'
|
||||
# - 'home.admin/bonus.btcpayserver.sh'
|
||||
# - 'home.admin/bonus.thunderhub.sh'
|
||||
# - 'home.admin/bonus.jam.sh install'
|
||||
# - 'home.admin/bonus.mempool.sh'
|
||||
# - 'home.admin/blitz.web.api.sh'
|
||||
# - 'home.admin/blitz.web.ui.sh'
|
||||
# - 'home.admin/blitz.display.sh'
|
||||
# - 'ci/amd64/**'
|
||||
|
||||
jobs:
|
||||
amd64-image-build:
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Set values
|
||||
id: set_values
|
||||
run: |
|
||||
echo "BUILD_DATE=$(date +"%Y-%m-%d")" >> $GITHUB_ENV
|
||||
echo "BUILD_VERSION=$(git describe --always --tags)" >> $GITHUB_ENV
|
||||
if [ -z "$GITHUB_HEAD_REF" ]; then
|
||||
echo "BRANCH_NAME=$(echo ${GITHUB_REF#refs/heads/})" >> $GITHUB_ENV
|
||||
else
|
||||
echo "BRANCH_NAME=${GITHUB_HEAD_REF}" >> $GITHUB_ENV
|
||||
fi
|
||||
if [[ "${{github.event_name}}" == "pull_request" ]]; then
|
||||
echo "GITHUB_USER=${{github.event.pull_request.head.repo.owner.login}}" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "GITHUB_USER=$(echo ${{github.repository}} | cut -d'/' -f1)" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
- name: Display the build name
|
||||
run: echo "Building the raspiblitz-amd64-debian-image-${{env.BUILD_DATE}}-${{env.BUILD_VERSION}}"
|
||||
|
||||
- name: Run the build script
|
||||
run: |
|
||||
echo "Using the variables: --pack fatpack --github_user ${{steps.set_values.outputs.GITHUB_USER}} --branch ${{env.BRANCH_NAME}} --preseed_file preseed.cfg --boot uefi --desktop none"
|
||||
cd ci/amd64
|
||||
bash packer.build.amd64-debian.sh --pack fatpack --github_user ${{steps.set_values.outputs.GITHUB_USER}} --branch ${{env.BRANCH_NAME}} --preseed_file preseed.cfg --boot uefi --desktop none
|
||||
|
||||
- name: Compute checksum of the raw image
|
||||
run: |
|
||||
cd ci/amd64/builds/raspiblitz-amd64-debian-fatpack-qemu/
|
||||
sha256sum raspiblitz-amd64-debian-fatpack.qcow2 > raspiblitz-amd64-debian-fatpack.qcow2.sha256
|
||||
|
||||
- name: Compress image
|
||||
run: |
|
||||
cd ci/amd64/builds/raspiblitz-amd64-debian-fatpack-qemu/
|
||||
gzip -v9 raspiblitz-amd64-debian-fatpack.qcow2
|
||||
|
||||
- name: Compute checksum of the compressed image
|
||||
run: |
|
||||
cd ci/amd64/builds/raspiblitz-amd64-debian-fatpack-qemu/
|
||||
sha256sum raspiblitz-amd64-debian-fatpack.qcow2.gz > raspiblitz-amd64-debian-fatpack.qcow2.gz.sha256
|
||||
|
||||
- name: Upload the image and checksums
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: raspiblitz-amd64-image-${{env.BUILD_DATE}}-${{env.BUILD_VERSION}}
|
||||
path: |
|
||||
${{github.workspace}}/ci/amd64/builds/raspiblitz-amd64-debian-fatpack-qemu/raspiblitz-amd64-debian-fatpack.qcow2.sha256
|
||||
${{github.workspace}}/ci/amd64/builds/raspiblitz-amd64-debian-fatpack-qemu/raspiblitz-amd64-debian-fatpack.qcow2.gz
|
||||
${{github.workspace}}/ci/amd64/builds/raspiblitz-amd64-debian-fatpack-qemu/raspiblitz-amd64-debian-fatpack.qcow2.gz.sha256
|
89
.github/workflows/amd64-lean-image.yml
vendored
Normal file
@ -0,0 +1,89 @@
|
||||
name: amd64-lean-image-build
|
||||
|
||||
concurrency:
|
||||
group: amd64-lean-image-build-${{ github.head_ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches: ['dev', 'v1.10']
|
||||
paths:
|
||||
- 'build_sdcard.sh'
|
||||
- 'home.admin/bitcoin.install.sh'
|
||||
- 'home.admin/tor.install.sh'
|
||||
- 'home.admin/blitz.i2pd.sh'
|
||||
- 'home.admin/blitz.web.sh'
|
||||
- 'home.admin/blitz.display.sh'
|
||||
- 'ci/amd64/**'
|
||||
pull_request:
|
||||
branches: ['dev', 'v1.10']
|
||||
paths:
|
||||
- 'build_sdcard.sh'
|
||||
- 'home.admin/bitcoin.install.sh'
|
||||
- 'home.admin/tor.install.sh'
|
||||
- 'home.admin/blitz.i2pd.sh'
|
||||
- 'home.admin/blitz.web.sh'
|
||||
- 'home.admin/blitz.display.sh'
|
||||
- 'ci/amd64/**'
|
||||
|
||||
jobs:
|
||||
amd64-image-build:
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- name: Maximize build space
|
||||
uses: easimon/maximize-build-space@master
|
||||
with:
|
||||
root-reserve-mb: 12288
|
||||
temp-reserve-mb: 12288
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Set values
|
||||
id: set_values
|
||||
run: |
|
||||
echo "BUILD_DATE=$(date +"%Y-%m-%d")" >> $GITHUB_ENV
|
||||
echo "BUILD_VERSION=$(git describe --always --tags)" >> $GITHUB_ENV
|
||||
if [ -z "$GITHUB_HEAD_REF" ]; then
|
||||
echo "BRANCH_NAME=$(echo ${GITHUB_REF#refs/heads/})" >> $GITHUB_ENV
|
||||
else
|
||||
echo "BRANCH_NAME=${GITHUB_HEAD_REF}" >> $GITHUB_ENV
|
||||
fi
|
||||
if [[ "${{github.event_name}}" == "pull_request" ]]; then
|
||||
echo "GITHUB_USER=${{github.event.pull_request.head.repo.owner.login}}" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "GITHUB_USER=$(echo ${{github.repository}} | cut -d'/' -f1)" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
- name: Display the build name
|
||||
run: echo "Building the raspiblitz-amd64-debian-image-${{env.BUILD_DATE}}-${{env.BUILD_VERSION}}"
|
||||
|
||||
- name: Run the build script
|
||||
run: |
|
||||
echo "Using the variables: --pack lean --github_user ${{steps.set_values.outputs.GITHUB_USER}} --branch ${{env.BRANCH_NAME}} --preseed_file preseed.cfg --boot uefi --desktop gnome"
|
||||
cd ci/amd64
|
||||
bash packer.build.amd64-debian.sh --pack lean --github_user ${{steps.set_values.outputs.GITHUB_USER}} --branch ${{env.BRANCH_NAME}} --preseed_file preseed.cfg --boot uefi --desktop gnome
|
||||
|
||||
- name: Compute checksum of the raw image
|
||||
run: |
|
||||
cd ci/amd64/builds/raspiblitz-amd64-debian-lean-qemu
|
||||
sha256sum raspiblitz-amd64-debian-lean.qcow2 > raspiblitz-amd64-debian-lean.qcow2.sha256
|
||||
|
||||
- name: Compress image
|
||||
run: |
|
||||
cd ci/amd64/builds/raspiblitz-amd64-debian-lean-qemu
|
||||
gzip -v9 raspiblitz-amd64-debian-lean.qcow2
|
||||
|
||||
- name: Compute checksum of the compressed image
|
||||
run: |
|
||||
cd ci/amd64/builds/raspiblitz-amd64-debian-lean-qemu
|
||||
sha256sum raspiblitz-amd64-debian-lean.qcow2.gz > raspiblitz-amd64-debian-lean.qcow2.gz.sha256
|
||||
|
||||
- name: Upload the image and checksums
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: raspiblitz-amd64-image-${{env.BUILD_DATE}}-${{env.BUILD_VERSION}}
|
||||
path: |
|
||||
${{github.workspace}}/ci/amd64/builds/raspiblitz-amd64-debian-lean-qemu/raspiblitz-amd64-debian-lean.qcow2.sha256
|
||||
${{github.workspace}}/ci/amd64/builds/raspiblitz-amd64-debian-lean-qemu/raspiblitz-amd64-debian-lean.qcow2.gz
|
||||
${{github.workspace}}/ci/amd64/builds/raspiblitz-amd64-debian-lean-qemu/raspiblitz-amd64-debian-lean.qcow2.gz.sha256
|
83
.github/workflows/amd64-lean-legacyboot-image.yml
vendored
Normal file
@ -0,0 +1,83 @@
|
||||
name: amd64-lean-legacyboot-image-build
|
||||
|
||||
concurrency:
|
||||
group: amd64-lean-legacyboot-image-build-${{ github.head_ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches: ['dev', 'v1.10']
|
||||
paths:
|
||||
- 'build_sdcard.sh'
|
||||
- 'home.admin/bitcoin.install.sh'
|
||||
- 'home.admin/tor.install.sh'
|
||||
- 'home.admin/blitz.i2pd.sh'
|
||||
- 'home.admin/blitz.web.sh'
|
||||
- 'home.admin/blitz.display.sh'
|
||||
- 'ci/amd64/**'
|
||||
pull_request:
|
||||
branches: ['dev', 'v1.10']
|
||||
paths:
|
||||
- 'build_sdcard.sh'
|
||||
- 'home.admin/bitcoin.install.sh'
|
||||
- 'home.admin/tor.install.sh'
|
||||
- 'home.admin/blitz.i2pd.sh'
|
||||
- 'home.admin/blitz.web.sh'
|
||||
- 'home.admin/blitz.display.sh'
|
||||
- 'ci/amd64/**'
|
||||
|
||||
jobs:
|
||||
amd64-image-build:
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Set values
|
||||
id: set_values
|
||||
run: |
|
||||
echo "BUILD_DATE=$(date +"%Y-%m-%d")" >> $GITHUB_ENV
|
||||
echo "BUILD_VERSION=$(git describe --always --tags)" >> $GITHUB_ENV
|
||||
if [ -z "$GITHUB_HEAD_REF" ]; then
|
||||
echo "BRANCH_NAME=$(echo ${GITHUB_REF#refs/heads/})" >> $GITHUB_ENV
|
||||
else
|
||||
echo "BRANCH_NAME=${GITHUB_HEAD_REF}" >> $GITHUB_ENV
|
||||
fi
|
||||
if [[ "${{github.event_name}}" == "pull_request" ]]; then
|
||||
echo "GITHUB_USER=${{github.event.pull_request.head.repo.owner.login}}" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "GITHUB_USER=$(echo ${{github.repository}} | cut -d'/' -f1)" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
- name: Display the build name
|
||||
run: echo "Building the raspiblitz-amd64-debian-image-${{env.BUILD_DATE}}-${{env.BUILD_VERSION}}"
|
||||
|
||||
- name: Run the build script
|
||||
run: |
|
||||
echo "Using the variables: --pack lean --github_user ${{steps.set_values.outputs.GITHUB_USER}} --branch ${{env.BRANCH_NAME}} --preseed_file preseed.cfg --boot bios --desktop none"
|
||||
cd ci/amd64
|
||||
bash packer.build.amd64-debian.sh --pack lean --github_user ${{steps.set_values.outputs.GITHUB_USER}} --branch ${{env.BRANCH_NAME}} --preseed_file preseed.cfg --boot bios --desktop none
|
||||
|
||||
- name: Compute checksum of the raw image
|
||||
run: |
|
||||
cd ci/amd64/builds/raspiblitz-amd64-debian-lean-qemu
|
||||
sha256sum raspiblitz-amd64-debian-lean.qcow2 > raspiblitz-amd64-debian-lean.qcow2.sha256
|
||||
|
||||
- name: Compress image
|
||||
run: |
|
||||
cd ci/amd64/builds/raspiblitz-amd64-debian-lean-qemu
|
||||
gzip -v9 raspiblitz-amd64-debian-lean.qcow2
|
||||
|
||||
- name: Compute checksum of the compressed image
|
||||
run: |
|
||||
cd ci/amd64/builds/raspiblitz-amd64-debian-lean-qemu
|
||||
sha256sum raspiblitz-amd64-debian-lean.qcow2.gz > raspiblitz-amd64-debian-lean.qcow2.gz.sha256
|
||||
|
||||
- name: Upload the image and checksums
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: raspiblitz-amd64-image-${{env.BUILD_DATE}}-${{env.BUILD_VERSION}}
|
||||
path: |
|
||||
${{github.workspace}}/ci/amd64/builds/raspiblitz-amd64-debian-lean-qemu/raspiblitz-amd64-debian-lean.qcow2.sha256
|
||||
${{github.workspace}}/ci/amd64/builds/raspiblitz-amd64-debian-lean-qemu/raspiblitz-amd64-debian-lean.qcow2.gz
|
||||
${{github.workspace}}/ci/amd64/builds/raspiblitz-amd64-debian-lean-qemu/raspiblitz-amd64-debian-lean.qcow2.gz.sha256
|
93
.github/workflows/arm64-rpi-base-image.yml
vendored
Normal file
@ -0,0 +1,93 @@
|
||||
name: arm64-rpi-base-image-build
|
||||
|
||||
concurrency:
|
||||
group: arm64-rpi-base-image-build-${{ github.head_ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches: ['dev', 'v1.10', 'v1.11']
|
||||
paths:
|
||||
- 'build_sdcard.sh'
|
||||
- 'home.admin/config.scripts/bitcoin.install.sh'
|
||||
- 'home.admin/config.scripts/tor.install.sh'
|
||||
- 'home.admin/config.scripts/blitz.i2pd.sh'
|
||||
- 'home.admin/config.scripts/blitz.web.sh'
|
||||
- 'home.admin/config.scripts/blitz.display.sh'
|
||||
- 'ci/arm64-rpi/**'
|
||||
- 'home.admin/config.scripts/bonus.btc-rpc-explorer.sh'
|
||||
- 'home.admin/config.scripts/bonus.btcpayserver.sh'
|
||||
- 'home.admin/config.scripts/bonus.jam.sh'
|
||||
- 'home.admin/config.scripts/bonus.joinmarket.sh'
|
||||
- 'home.admin/config.scripts/bonus.lnbits.sh'
|
||||
- 'home.admin/config.scripts/bonus.mempool.sh'
|
||||
- 'home.admin/config.scripts/bonus.nodejs.sh'
|
||||
- 'home.admin/config.scripts/bonus.rtl.sh'
|
||||
- 'home.admin/config.scripts/bonus.thunderhub.sh'
|
||||
- 'home.admin/config.scripts/blitz.web.api.sh'
|
||||
- 'home.admin/config.scripts/blitz.web.ui'
|
||||
pull_request:
|
||||
branches: ['dev', 'v1.10', 'v1.11']
|
||||
paths:
|
||||
- 'build_sdcard.sh'
|
||||
- 'home.admin/config.scripts/bitcoin.install.sh'
|
||||
- 'home.admin/config.scripts/tor.install.sh'
|
||||
- 'home.admin/config.scripts/blitz.i2pd.sh'
|
||||
- 'home.admin/config.scripts/blitz.web.sh'
|
||||
- 'home.admin/config.scripts/blitz.display.sh'
|
||||
- 'ci/arm64-rpi/**'
|
||||
- 'home.admin/config.scripts/bonus.btc-rpc-explorer.sh'
|
||||
- 'home.admin/config.scripts/bonus.btcpayserver.sh'
|
||||
- 'home.admin/config.scripts/bonus.jam.sh'
|
||||
- 'home.admin/config.scripts/bonus.joinmarket.sh'
|
||||
- 'home.admin/config.scripts/bonus.lnbits.sh'
|
||||
- 'home.admin/config.scripts/bonus.mempool.sh'
|
||||
- 'home.admin/config.scripts/bonus.nodejs.sh'
|
||||
- 'home.admin/config.scripts/bonus.rtl.sh'
|
||||
- 'home.admin/config.scripts/bonus.thunderhub.sh'
|
||||
- 'home.admin/config.scripts/blitz.web.api.sh'
|
||||
- 'home.admin/config.scripts/blitz.web.ui'
|
||||
|
||||
jobs:
|
||||
arm64-rpi-base-image-build:
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Set values
|
||||
id: set_values
|
||||
run: |
|
||||
echo "BUILD_VERSION=$(git describe --always --tags)" >> $GITHUB_ENV
|
||||
if [ -z "$GITHUB_HEAD_REF" ]; then
|
||||
echo "BRANCH_NAME=$(echo ${GITHUB_REF#refs/heads/})" >> $GITHUB_ENV
|
||||
else
|
||||
echo "BRANCH_NAME=${GITHUB_HEAD_REF}" >> $GITHUB_ENV
|
||||
fi
|
||||
if [[ "${{github.event_name}}" == "pull_request" ]]; then
|
||||
echo "GITHUB_USER=${{github.event.pull_request.head.repo.owner.login}}" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "GITHUB_USER=$(echo ${{github.repository}} | cut -d'/' -f1)" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
- name: Display the build name
|
||||
run: echo "Building the raspiblitz-arm64-rpi-base-image"
|
||||
|
||||
- name: Run the build script
|
||||
run: |
|
||||
echo "Using the variables: --pack base --github_user ${{steps.set_values.outputs.GITHUB_USER}} --branch ${{env.BRANCH_NAME}} --image_size 18G"
|
||||
cd ci/arm64-rpi
|
||||
bash packer.build.arm64-rpi.sh --pack base --github_user ${{steps.set_values.outputs.GITHUB_USER}} --branch ${{env.BRANCH_NAME}} --image_size 18G
|
||||
|
||||
- name: Calculate the checksum of the raw image
|
||||
run: |
|
||||
cd ci/arm64-rpi
|
||||
sha256sum raspiblitz-arm64-rpi-base.img > raspiblitz-arm64-rpi-base.img.sha256
|
||||
|
||||
- name: Upload the base image and checksum
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: raspiblitz-arm64-rpi-base-image-${{ env.BUILD_VERSION }}
|
||||
path: |
|
||||
${{ github.workspace }}/ci/arm64-rpi/raspiblitz-arm64-rpi-base.img.sha256
|
||||
${{ github.workspace }}/ci/arm64-rpi/raspiblitz-arm64-rpi-base.img
|
83
.github/workflows/arm64-rpi-lean-image.yml
vendored
Normal file
@ -0,0 +1,83 @@
|
||||
name: arm64-rpi-lean-image-build
|
||||
|
||||
concurrency:
|
||||
group: arm64-rpi-lean-image-build-${{ github.head_ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches: ['dev', 'v1.10']
|
||||
paths:
|
||||
- 'build_sdcard.sh'
|
||||
- 'home.admin/bitcoin.install.sh'
|
||||
- 'home.admin/tor.install.sh'
|
||||
- 'home.admin/blitz.i2pd.sh'
|
||||
- 'home.admin/blitz.web.sh'
|
||||
- 'home.admin/blitz.display.sh'
|
||||
- 'ci/arm64-rpi/**'
|
||||
pull_request:
|
||||
branches: ['dev', 'v1.10']
|
||||
paths:
|
||||
- 'build_sdcard.sh'
|
||||
- 'home.admin/bitcoin.install.sh'
|
||||
- 'home.admin/tor.install.sh'
|
||||
- 'home.admin/blitz.i2pd.sh'
|
||||
- 'home.admin/blitz.web.sh'
|
||||
- 'home.admin/blitz.display.sh'
|
||||
- 'ci/arm64-rpi/**'
|
||||
|
||||
jobs:
|
||||
arm64-rpi-image-build:
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Set values
|
||||
id: set_values
|
||||
run: |
|
||||
echo "BUILD_DATE=$(date +"%Y-%m-%d")" >> $GITHUB_ENV
|
||||
echo "BUILD_VERSION=$(git describe --always --tags)" >> $GITHUB_ENV
|
||||
if [ -z "$GITHUB_HEAD_REF" ]; then
|
||||
echo "BRANCH_NAME=$(echo ${GITHUB_REF#refs/heads/})" >> $GITHUB_ENV
|
||||
else
|
||||
echo "BRANCH_NAME=${GITHUB_HEAD_REF}" >> $GITHUB_ENV
|
||||
fi
|
||||
if [[ "${{github.event_name}}" == "pull_request" ]]; then
|
||||
echo "GITHUB_USER=${{github.event.pull_request.head.repo.owner.login}}" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "GITHUB_USER=$(echo ${{github.repository}} | cut -d'/' -f1)" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
- name: Display the build name
|
||||
run: echo "Building the raspiblitz-arm64-rpi-lean-image-${{ env.BUILD_DATE }}-${{ env.BUILD_VERSION }}"
|
||||
|
||||
- name: Run the build script
|
||||
run: |
|
||||
echo "Using the variables: --pack lean --github_user ${{steps.set_values.outputs.GITHUB_USER}} --branch ${{env.BRANCH_NAME}}"
|
||||
cd ci/arm64-rpi
|
||||
bash packer.build.arm64-rpi.sh --pack lean --github_user ${{steps.set_values.outputs.GITHUB_USER}} --branch ${{env.BRANCH_NAME}}
|
||||
|
||||
- name: Compute checksum of the raw image
|
||||
run: |
|
||||
cd ci/arm64-rpi
|
||||
sha256sum raspiblitz-arm64-rpi-lean.img > raspiblitz-arm64-rpi-lean.img.sha256
|
||||
|
||||
- name: Compress image
|
||||
run: |
|
||||
cd ci/arm64-rpi
|
||||
gzip -v9 raspiblitz-arm64-rpi-lean.img
|
||||
|
||||
- name: Compute checksum of the compressed image
|
||||
run: |
|
||||
cd ci/arm64-rpi
|
||||
sha256sum raspiblitz-arm64-rpi-lean.img.gz > raspiblitz-arm64-rpi-lean.img.gz.sha256
|
||||
|
||||
- name: Upload the image and checksums
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: raspiblitz-arm64-rpi-image-${{ env.BUILD_DATE }}-${{ env.BUILD_VERSION }}
|
||||
path: |
|
||||
${{ github.workspace }}/ci/arm64-rpi/raspiblitz-arm64-rpi-lean.img.sha256
|
||||
${{ github.workspace }}/ci/arm64-rpi/raspiblitz-arm64-rpi-lean.img.gz
|
||||
${{ github.workspace }}/ci/arm64-rpi/raspiblitz-arm64-rpi-lean.img.gz.sha256
|
20
.github/workflows/spelling.yml
vendored
Normal file
@ -0,0 +1,20 @@
|
||||
name: Spelling
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches: ['dev', 'v1.10', 'v1.11']
|
||||
pull_request:
|
||||
branches: ['dev', 'v1.10', 'v1.11']
|
||||
|
||||
jobs:
|
||||
spelling:
|
||||
name: Spell Check with Typos
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout Actions Repository
|
||||
uses: actions/checkout@v4
|
||||
- name: Spell Check Repo
|
||||
uses: crate-ci/typos@master
|
||||
with:
|
||||
config: typos.toml
|
38
.github/workflows/test-bats.yml
vendored
Normal file
@ -0,0 +1,38 @@
|
||||
name: Test bats
|
||||
|
||||
concurrency:
|
||||
group: test-bats-${{ github.head_ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches: ["dev"]
|
||||
paths:
|
||||
- "home.admin/config.scripts/bonus.postgresql.sh"
|
||||
pull_request:
|
||||
branches: ["dev"]
|
||||
paths:
|
||||
- "home.admin/config.scripts/bonus.postgresql.sh"
|
||||
|
||||
jobs:
|
||||
run-bats-tests:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Install bats
|
||||
run: |
|
||||
sudo apt update &>/dev/null
|
||||
sudo apt install -y bats
|
||||
|
||||
- name: Run the bats tests with postgresql 15
|
||||
run: |
|
||||
cd test
|
||||
sudo bats ./bonus.postgresql-15.bats
|
||||
|
||||
- name: Run the bats tests with postgresql 13
|
||||
run: |
|
||||
cd test
|
||||
sudo bats ./bonus.postgresql-13.bats
|
8
.gitignore
vendored
@ -3,6 +3,10 @@ home.admin/.DS_Store
|
||||
*.log
|
||||
*.pyc
|
||||
__pycache__
|
||||
rpc_pb2.pyc
|
||||
rpc_pb2_grpc.pyc
|
||||
lightning_pb2.pyc
|
||||
lightning_pb2_grpc.pyc
|
||||
/.vagrant/
|
||||
ci/amd64/builds
|
||||
ci/arm64-rpi/raspiblitz-arm64-rpi*
|
||||
ci/arm64-rpi/.packer*
|
||||
ci/arm64-rpi/packer-builder-arm
|
||||
|
2
.shellcheckrc
Normal file
@ -0,0 +1,2 @@
|
||||
shell=bash
|
||||
source=/dev/null
|
253
CHANGES.md
@ -1,4 +1,242 @@
|
||||
# CHANGES between Releases
|
||||
## What's new in Version 1.11.1 of RaspiBlitz?
|
||||
|
||||
- New: Set Timezone SSHMENU > SYSTEM > TIME [details](https://github.com/raspiblitz/raspiblitz/issues/1712)
|
||||
- New: Labelbase 2.2.1 [details](https://x.com/labelbase_space)
|
||||
- New: Redesign WebUI Setup & Recovery
|
||||
- Update: amd64 base image: debian-12.6.0-amd64-netinst.iso
|
||||
- Update: LNbits 0.12.8 [details](https://github.com/lnbits/lnbits/releases/tag/0.12.8)
|
||||
- Update: Specter Desktop 2.0.4 with reactivated UPDATE option [details](https://github.com/cryptoadvance/specter-desktop/releases/tag/v2.0.4)
|
||||
- Update: BTCPayServer 1.13.0 [details](https://github.com/btcpayserver/btcpayserver/releases/tag/v1.13.0)
|
||||
- Update: acme.sh 3.0.7 (repair duckdns.org dyndns)
|
||||
- Update: show progress of electrs building index on LCD
|
||||
- Update: lndmanage 0.16.0 [details](https://github.com/bitromortac/lndmanage)
|
||||
- Update: Lightning Terminal v0.12.5-alpha [details](https://github.com/lightninglabs/lightning-terminal/releases/tag/v0.12.5-alpha)
|
||||
- Update: PyBlock 2.7.2 [details](https://github.com/curly60e/pyblock/blob/master/README.md)
|
||||
- Update: Bitcoin Core 27.1 (as tested update) [details](https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-27.1.md)
|
||||
- Experimental: charge-lnd install script [details](https://github.com/raspiblitz/raspiblitz/discussions/3955)
|
||||
- Experimental: config.scripts/lnd.signaddress.sh to easy sign messages on addresses on LND [details](https://github.com/raspiblitz/raspiblitz/issues/4540)
|
||||
- Experimental: config.scripts/bonus.elements.sh install elements blockchain platform [details](https://github.com/ElementsProject/elements)
|
||||
- Deprecated: Sphinx-Relay [details](https://github.com/raspiblitz/raspiblitz/issues/2558)
|
||||
- Remove: AutoPilot & Keysend from SSH menus [details](https://github.com/raspiblitz/raspiblitz/issues/1953#issuecomment-1811553602)
|
||||
- Remove: Tallycoin-Connect [see service shutdown](https://x.com/djbooth007/status/1784409117563720082)
|
||||
- Remove: IP2Tor Shoplist [details](https://github.com/raspiblitz/raspiblitz/issues/4589)
|
||||
- Remove: CopyStation Script [details](https://github.com/raspiblitz/raspiblitz/issues/4538)
|
||||
|
||||
## What's new in Version 1.11.0 of RaspiBlitz?
|
||||
|
||||
- New: RaspberryPi5 tested & enabling NVMe PCIe Hats
|
||||
- New: BTCPay Server PostgreSQL database backup and restore options [details](https://github.com/raspiblitz/raspiblitz/pull/4409)
|
||||
- New: Reset option for the self-signed TLS certificate [details](https://github.com/raspiblitz/raspiblitz/pull/4412)
|
||||
- New on WebUI: Electrum Connect Screen
|
||||
- Update: RaspberryOS arm64 base image 2024-03-15 (Debian 12 Bookworm) [details](https://downloads.raspberrypi.com/raspios_full_arm64/release_notes.txt)
|
||||
- Update: amd64 base image: debian-12.5.0-amd64-netinst.iso
|
||||
- Update: Bitcoin Core v26.0 [details](https://bitcoincore.org/en/releases/26.0/)
|
||||
- Update: LND v0.17.3-beta [details](https://github.com/lightningnetwork/lnd/releases/tag/v0.17.3-beta)
|
||||
- Update: Core Lightning v24.02.1 [details](https://github.com/ElementsProject/lightning/releases/tag/v24.02.1)
|
||||
- Update: C-lightningREST v0.10.7 [details](https://github.com/Ride-The-Lightning/c-lightning-REST/releases/tag/v0.10.7)
|
||||
- Update: Electrum Server in Rust (electrs) v0.10.4 [details](https://github.com/romanz/electrs/blob/master/RELEASE-NOTES.md#0104-mar-15-2024)
|
||||
- Update: Fulcrum Electrum server v1.10.0 (CLI install script) [details](https://github.com/cculianu/Fulcrum/releases/tag/v1.10.0)
|
||||
- Update: BTC-RPC-Explorer v3.4.0 [details](https://github.com/janoside/btc-rpc-explorer/blob/master/CHANGELOG.md#v340)
|
||||
- Update: JoinMarket v0.9.11 [details](https://github.com/JoinMarket-Org/joinmarket-clientserver/releases/tag/v0.9.11)
|
||||
- Update: Jam (JoinMarket Web UI) v0.2.0 [details](https://github.com/joinmarket-webui/jam/releases/tag/v0.2.0)
|
||||
- Update: JoininBox v0.8.3 [details](https://github.com/openoms/joininbox/releases/tag/v0.8.3)
|
||||
- Update: RTL v0.14.1 [details](https://github.com/Ride-The-Lightning/RTL/releases/tag/v0.14.1)
|
||||
- Update: Thunderhub v0.13.30 [details](https://github.com/apotdevin/thunderhub/releases/tag/v0.13.30)
|
||||
- Update: CLBOSS 0.13+ (latest master 0673c50) [details](https://github.com/ZmnSCPxj/clboss/releases/tag/v0.13)
|
||||
- Update: BTCPayServer v1.12.5 [details](https://github.com/btcpayserver/btcpayserver/releases/tag/v1.12.5)
|
||||
- Update: Channel Tools (chantools) v0.12.0 [details](https://github.com/lightninglabs/chantools/releases/tag/v0.12.0)
|
||||
- Update: LNbits 0.11.3 [details](https://github.com/lnbits/lnbits/releases/tag/0.11.3)
|
||||
- Update: Circuitbreaker v0.5.1 [details](https://github.com/lightningequipment/circuitbreaker/blob/master/README.md)
|
||||
- Update: LNDg v1.8.0 [details](https://github.com/cryptosharks131/lndg/releases/tag/v1.8.0)
|
||||
- Update: Balance of Satoshis v17.9.1 [details](https://www.npmjs.com/package/balanceofsatoshis/v/17.9.1)
|
||||
- Experimental: LNDK (runs on top of LND to help forward onion messages (BOLT 12)) [details](https://github.com/lndk-org/lndk)
|
||||
- Fix: PyBlock 2.2.3 [details](https://github.com/curly60e/pyblock/blob/master/README.md)
|
||||
- Refactor: Wifi config with file on sd card
|
||||
- Deactivated for Repair: lnproxy [details](https://github.com/raspiblitz/raspiblitz/issues/4122)
|
||||
- Deprecated: Homer Dashboard (remove from SSH menus, config script will stay with possible future removal)
|
||||
- Deprecated: Bitcoinminds (remove from SSH menus, config script will stay with possible future removal)
|
||||
- Remove: ItchySats (unmaintained project / in consent with dev)
|
||||
|
||||
## What's new in Version 1.10.0 of RaspiBlitz?
|
||||
|
||||
- Update: RaspiOS base image from 2023-05-03
|
||||
- Update: Bitcoin Core v25.0.0 [details](https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-25.0.md)
|
||||
- Update: LND v0.16.4-beta [details](https://github.com/lightningnetwork/lnd/releases/tag/v0.16.4-beta)
|
||||
- Update: Core Lightning v23.08.1 [details](https://github.com/ElementsProject/lightning/releases/tag/v23.08.1)
|
||||
- Update: Suez - Channel Visualization for LND & CLN [details](https://github.com/prusnak/suez)
|
||||
- Update: Electrum Server in Rust (electrs) v0.10.0 [details](https://github.com/romanz/electrs/blob/master/RELEASE-NOTES.md#0100-jul-22-2023)
|
||||
- Update: C-lightningREST v0.10.5 [details](https://github.com/Ride-The-Lightning/c-lightning-REST/releases/tag/v0.10.5)
|
||||
- Update: RTL v0.14.0 [details](https://github.com/Ride-The-Lightning/RTL/releases/tag/v0.14.0)
|
||||
- Update: Lightning Terminal v0.10.1-alpha [details](https://github.com/lightninglabs/lightning-terminal/releases/tag/v0.10.1-alpha)
|
||||
- Update: Channel Tools (chantools) v0.11.3 [details](https://github.com/guggero/chantools/releases/tag/v0.11.3)
|
||||
- Update: LNDg v1.7.0 [details](https://github.com/cryptosharks131/lndg)
|
||||
- Update: Thunderhub v0.13.19 [details](https://github.com/apotdevin/thunderhub/releases/tag/v0.13.19)
|
||||
- Update: LNbits 0.10.10 [details](https://github.com/lnbits/lnbits/releases/tag/0.10.10)
|
||||
- Update: BTCPayServer 1.10.3 (postgres by default with sqlite migration) [details](https://github.com/btcpayserver/btcpayserver/releases/tag/v1.10.3)
|
||||
- Update: Specter Desktop 1.13.1 [details](https://github.com/cryptoadvance/specter-desktop/releases/tag/v1.13.1)
|
||||
- Update: Kindle-Display 0.5.1 [details](https://github.com/dennisreimann/kindle-display/)
|
||||
- Update: JoinMarket v0.9.10 [details](https://github.com/JoinMarket-Org/joinmarket-clientserver/releases/tag/v0.9.10)
|
||||
- Update: JoininBox v0.8.1 [details](https://github.com/openoms/joininbox/releases/tag/v0.8.1)
|
||||
- Update: Balance of Satoshis 15.11.0 (bos) [details](https://github.com/alexbosworth/balanceofsatoshis/blob/master/CHANGELOG.md#15110)
|
||||
- Fix: Homebanking Interface FinTS/HBCI (experimental) [details](https://github.com/rootzoll/raspiblitz/issues/1186)
|
||||
- Remove: Spark Wallet and Sparko CLN plugin (not maintained anymore)
|
||||
- Remove: Faraday, Loop, Pool single installs - used in the LiT package instead
|
||||
- Remove: deactivate LNproxy in the menu and in provision
|
||||
- Info: the users not intended to be logged in will not be available to change into (manage them from admin with sudo)
|
||||
|
||||
## What's new in Version 1.9.0 of RaspiBlitz?
|
||||
|
||||
- New: Automated disk image build for amd64 (VM, laptop, desktop, server) and arm64-rpi (Raspberry Pi) [details](https://github.com/rootzoll/raspiblitz/tree/dev/ci/README.md)
|
||||
- New: Fatpack & Minimal sd card builds [details](SECURITY.md#minimal-sd-card-build)
|
||||
- New: I2P support for Bitcoin Core (i2pacceptincoming=1) [details](https://github.com/rootzoll/raspiblitz/issues/2413)
|
||||
- New: CLN Watchtower (The Eye of Satoshi) [details](https://github.com/talaia-labs/rust-teos/tree/master/watchtower-plugin)
|
||||
- New: LNDg v1.6.0 [details](https://github.com/cryptosharks131/lndg)
|
||||
- New: Support of X708 UPS HAT [details](https://github.com/rootzoll/raspiblitz/pull/3087)
|
||||
- New: BOS Telegram Bot Support (see OPTIONS on LND Balance of Satoshis menu entry)
|
||||
- New: LightningTipBot v0.5 [details](https://github.com/LightningTipBot/LightningTipBot)
|
||||
- New: ↬lnproxy cli shortcut and server [details](https://github.com/lnproxy)
|
||||
- New: Homebanking Interface FinTS/HBCI (experimental) [details](https://github.com/rootzoll/raspiblitz/issues/1186)
|
||||
- New on WebUI: Jam (JoinMarket Web UI) v0.1.5 [details](https://github.com/joinmarket-webui/joinmarket-webui/releases/tag/v0.1.5)
|
||||
- New on WebUI: Generate/Download Debug Report from Settings
|
||||
- Update: Bitcoin Core v24.0.1 [details](https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-24.0.1.md)
|
||||
- Update: LND v0.16.2-beta [details](https://github.com/lightningnetwork/lnd/releases/tag/v0.16.2-beta)
|
||||
- Update: Core Lightning v23.02.2 [details](https://github.com/ElementsProject/lightning/releases/tag/v23.02.2)
|
||||
- Update: C-lightningREST v0.10.2 [details](https://github.com/Ride-The-Lightning/c-lightning-REST/releases/tag/v0.10.2)
|
||||
- Update: Electrum Server in Rust (electrs) v0.9.11 [details](https://github.com/romanz/electrs/blob/master/RELEASE-NOTES.md#0911-jan-5-2023)
|
||||
- Update: Lightning Terminal v0.8.6-alpha [details](https://github.com/lightninglabs/lightning-terminal/releases/tag/v0.8.6-alpha)
|
||||
- Update: RTL v0.13.6 with update option [details](https://github.com/Ride-The-Lightning/RTL/releases/tag/v0.13.6)
|
||||
- Update: Thunderhub v0.13.16 with balance sharing disabled [details](https://github.com/apotdevin/thunderhub/releases/tag/v0.13.16)
|
||||
- Update: LNbits 0.10.6 [details](https://github.com/lnbits/lnbits/releases/tag/0.10.6)
|
||||
- Update: BTCPayServer 1.9.3 (postgres by default with sqlite migration) [details](https://github.com/btcpayserver/btcpayserver/releases/tag/v1.9.3)
|
||||
- Update: ItchySats 0.7.0 [details](https://github.com/itchysats/itchysats/releases/tag/0.7.0)
|
||||
- Update: Channel Tools (chantools) v0.10.5 [details](https://github.com/guggero/chantools/releases/tag/v0.10.5)
|
||||
- Update: JoinMarket v0.9.9 [details](https://github.com/JoinMarket-Org/joinmarket-clientserver/releases/tag/v0.9.9)
|
||||
- Update: JoininBox v0.7.7 [details](https://github.com/openoms/joininbox/releases/tag/v0.7.7)
|
||||
- Update: Balance of Satoshis 13.15.0 (bos) [details](https://github.com/alexbosworth/balanceofsatoshis/blob/master/CHANGELOG.md#13150)
|
||||
- Update: lndmanage 0.15.0 [details](https://github.com/bitromortac/lndmanage)
|
||||
- Update: Circuitbreaker with webUI [details](https://github.com/lightningequipment/circuitbreaker/blob/master/README.md)
|
||||
- Update: Suez - Channel Visualization for LND & CL [details](https://github.com/prusnak/suez)
|
||||
- Update: Tallycoin Connect v1.8.0 [details](https://github.com/djbooth007/tallycoin_connect/releases/tag/v1.8.0)
|
||||
- Update: Fulcrum install script (CLI only) v1.9.1 [details](https://github.com/cculianu/Fulcrum/releases/tag/v1.9.1)
|
||||
- Fixed: SCB/Emergency-Backup to USB drive (now also with CLN emergency.recover file)
|
||||
- Info: Run RaspiBlitz on Proxmox [details](https://github.com/rootzoll/raspiblitz/tree/dev/alternative.platforms/Proxmox)
|
||||
- Info: IP2Tor fix fulmo shop & added new ip2tor.com shop
|
||||
- Info: 32GB sdcard is now enforced (after being recommended since v1.5)
|
||||
- Info: 'Reindex Blockchain' is now part of 'repair' menu
|
||||
|
||||
## What's new in Version 1.8.0c of RaspiBlitz?
|
||||
|
||||
- Update: LND v0.15.4 (emergency hotfix release) [details](https://github.com/lightningnetwork/lnd/releases/tag/v0.15.4-beta)
|
||||
- Update: Electrum Server in Rust (electrs) v0.9.9 [details](https://github.com/romanz/electrs/blob/master/RELEASE-NOTES.md#099-jul-12-2022)
|
||||
|
||||
## What's new in Version 1.8.0b of RaspiBlitz?
|
||||
|
||||
- Update: LND v0.15.2 (emergency hotfix release) [details](https://github.com/lightningnetwork/lnd/releases/tag/v0.15.2-beta)
|
||||
|
||||
## What's new in Version 1.8.0 of RaspiBlitz?
|
||||
|
||||
- New: Multilanguage WebUI [details](https://github.com/cstenglein/raspiblitz-web)
|
||||
- New: BackendAPI [details](https://github.com/fusion44/blitz_api)
|
||||
- New: ZRAM - compressed swap in memory [details](https://github.com/rootzoll/raspiblitz/issues/2905)
|
||||
- New: Core Lightning GRPC plugin [details](https://github.com/rootzoll/raspiblitz/pull/3109)
|
||||
- New: Core Lightning connection to BTCPayServer (CONNECT menu) [details](https://github.com/rootzoll/raspiblitz/issues/3155)
|
||||
- New: Alby (Connection Menu) [details](https://getalby.com/)
|
||||
- New: Homer Dashboard 22.06.1 [details](https://github.com/bastienwirtz/homer#readme)
|
||||
- New: ItchySats 0.5.0 [details](https://github.com/itchysats/itchysats/)
|
||||
- New: ckbunker CLI install script (experimental) [details](https://github.com/rootzoll/raspiblitz/issues/1062)
|
||||
- Update: Bitcoin Core v23.0 [details](https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-23.0.md)
|
||||
- Update: Core Lightning (CLN - formerly C-lightning) v0.11.2 [details](https://github.com/ElementsProject/lightning/releases/tag/v0.11.2)
|
||||
- Update: LND v0.15.0 [details](https://github.com/lightningnetwork/lnd/releases/tag/v0.15.0-beta)
|
||||
- Update: RTL v0.12.3 [details](https://github.com/Ride-The-Lightning/RTL/releases/tag/v0.12.3)
|
||||
- Update: LNbits 0.9.1 [details](https://github.com/lnbits/lnbits-legend/releases/tag/0.9.1)
|
||||
- Update: C-lightningREST v0.7.2 [details](https://github.com/Ride-The-Lightning/c-lightning-REST/releases/tag/v0.7.2)
|
||||
- Update: CLBOSS 0.13A [details](https://github.com/ZmnSCPxj/clboss/releases/tag/0.13A)
|
||||
- Update: Channel Tools (chantools) v0.10.4 [details](https://github.com/guggero/chantools/blob/master/README.md)
|
||||
- Update: Lightning Terminal v0.9.2-alpha with Lightning Node Connect over Tor [details](https://github.com/lightninglabs/lightning-terminal/releases/tag/v0.9.2-alpha)
|
||||
- Update: JoinMarket v0.9.6 [details](https://github.com/JoinMarket-Org/joinmarket-clientserver/releases/tag/v0.9.6)
|
||||
- Update: JoininBox v0.6.8 [details](https://github.com/openoms/joininbox/releases/tag/v0.6.8)
|
||||
- Update: JoinMarket Web UI (Jam) v0.0.9 (CLI install script) [details](https://github.com/joinmarket-webui/joinmarket-webui/releases/tag/v0.0.9)
|
||||
- Update: Electrum Server in Rust (electrs) v0.9.7 [details](https://github.com/romanz/electrs/blob/master/RELEASE-NOTES.md#097-apr-30-2022)
|
||||
- Update: Fulcrum Electrum server v1.7.0 (CLI install script) [issue](https://github.com/rootzoll/raspiblitz/issues/2924)
|
||||
- Update: BTCPayServer 1.6.1 [details](https://github.com/btcpayserver/btcpayserver/releases/tag/v1.6.1)
|
||||
- Update: Mempool 2.4.0 [details](hhttps://github.com/mempool/mempool/releases/tag/v2.4.0)
|
||||
- Update: Helipad (Podcasting 2.0 Boostagram reader) v0.1.10 [details](https://github.com/Podcastindex-org/helipad/releases/tag/v0.1.10)
|
||||
- Update: Adapted Umbrel Migration for new 0.5.0 version with Core Lightning
|
||||
- Info: Run RaspiBlitz on amd64 bare metal and virtual machines [details](https://github.com/rootzoll/raspiblitz/tree/dev/alternative.platforms)
|
||||
|
||||
## What's new in Version 1.7.2 of RaspiBlitz?
|
||||
|
||||
- Refactor: Cache & Backgroundscan of Systeminfo
|
||||
- New: Compact the LND channel.db monthly on restart, on-demand from menu and before backups [issue](https://github.com/rootzoll/raspiblitz/issues/2752)
|
||||
- New: Run C-lightning backup-compact regularly [issue](https://github.com/rootzoll/raspiblitz/issues/2869)
|
||||
- New: Switch LNbits between lnd & c-lightning [issue](https://github.com/rootzoll/raspiblitz/issues/2556)
|
||||
- New: Tallycoin Connect [details](https://github.com/djbooth007/tallycoin_connect#readme)
|
||||
- New: Helipad (Podcasting 2.0 Boostagram reader) [details](https://github.com/Podcastindex-org/helipad)
|
||||
- New: Migration from Citadel to RaspiBlitz [details](https://github.com/rootzoll/raspiblitz/issues/2642)
|
||||
- New: Bitcoinminds.org local on RaspiBlitz [details](https://github.com/raulcano/bitcoinminds)
|
||||
- New: JoinMarket Web UI v0.0.3 (CLI install of the first public alpha release) [details](https://github.com/joinmarket-webui/joinmarket-webui/releases/tag/v0.0.3)
|
||||
- New: Fulcrum Electrum server v1.6.0 (CLI install script) [issue](https://github.com/rootzoll/raspiblitz/issues/2924)
|
||||
- Update: LND v0.14.2-beta [details](https://github.com/lightningnetwork/lnd/releases/tag/v0.14.2-beta)
|
||||
- Update: C-lightning v0.10.2 [details](https://github.com/ElementsProject/lightning/releases/tag/v0.10.2)
|
||||
- Update: LNbits 0.7.0 [details](https://github.com/lnbits/lnbits-legend/releases/tag/0.7.0)
|
||||
- Update: RTL v0.12.1 [details](https://github.com/Ride-The-Lightning/RTL/releases/tag/v0.12.1)
|
||||
- Update: C-lightningREST v0.6.1 [details](https://github.com/Ride-The-Lightning/c-lightning-REST/releases/tag/v0.6.1)
|
||||
- Update: CL Spark Wallet v0.3.1 [details](https://github.com/shesek/spark-wallet/releases/tag/v0.3.1)
|
||||
- Update: CL Sparko plugin v0.2.8 [details](https://github.com/fiatjaf/sparko/releases/tag/v2.8)
|
||||
- Update: Lightning Terminal v0.6.3-alpha with Lightning Node Connect over Tor [details](https://github.com/lightninglabs/lightning-terminal/releases/tag/v0.6.3-alpha)
|
||||
- Update: Channel Tools (chantools) v0.10.1 [details](https://github.com/guggero/chantools/releases/tag/v0.10.1)
|
||||
- Update: BTCPayServer v1.4.4 with UPDATE option [details](https://github.com/btcpayserver/btcpayserver/releases/tag/v1.4.4)
|
||||
- Update: Electrum Server in Rust (electrs) v0.9.5 [details](https://github.com/romanz/electrs/blob/master/RELEASE-NOTES.md#095-feb-4-2022)
|
||||
- Update: JoinMarket v0.9.5 [details](https://github.com/JoinMarket-Org/joinmarket-clientserver/releases/tag/v0.9.5)
|
||||
- Update: JoininBox v0.6.7 [details](https://github.com/openoms/joininbox/releases/tag/v0.6.7)
|
||||
- Update: Thunderhub v0.13.6 [details](https://github.com/apotdevin/thunderhub/releases/tag/v0.13.6)
|
||||
- Update: BTC-RPC-Explorer v3.3.0 [details](https://github.com/janoside/btc-rpc-explorer/blob/master/CHANGELOG.md#v330)
|
||||
- Update: Specter Desktop 1.8.1 [details](https://github.com/cryptoadvance/specter-desktop/releases/tag/v1.8.1)
|
||||
- Update: Mempool 2.3.1 [details](https://github.com/mempool/mempool/releases/tag/v2.3.1)
|
||||
- Update: PyBlock to 1.1.8.5 (adapt to new install mechanism)
|
||||
- Update: Balance of Satoshis 11.50.0 (BOS) [details](https://github.com/alexbosworth/balanceofsatoshis/blob/master/CHANGELOG.md#11500)
|
||||
- Update: Re-Add connecting node with Zap mobile wallet iOS & Android
|
||||
- Update: additional redaction of private data in debug logs
|
||||
- Security: Verify git commits and tags everywhere possible [issue](https://github.com/rootzoll/raspiblitz/issues/2686)
|
||||
- Fixed: LND repair options, SEED+SCB and rescue-file restore, RESET options [issue](https://github.com/rootzoll/raspiblitz/issues/2832)
|
||||
- Info: All existing IP2Tor subscriptions need to be canceled & renewed to be functional again.
|
||||
- Info: 32GB sd card is now required (was already long time recommended on shopping list)
|
||||
- Info: The touchscreen graphical mode is back to experimental for now and missing some UI fixes. This might take until v1.8.1 where the touchscreen will get a refactor/rewrite.
|
||||
|
||||
## What's new in Version 1.7.1 of RaspiBlitz?
|
||||
|
||||
There was a small patch-update with raspiblitz-v1.7.1-2021-10-28.img.gz to fix a restart-loop after blockchain was self-synced.
|
||||
|
||||
- New: C-lightning v0.10.1 [details](https://github.com/ElementsProject/lightning/releases/tag/v0.10.1)
|
||||
- New: C-lightningREST v0.5.1 [details](https://github.com/Ride-The-Lightning/c-lightning-REST/releases/tag/v0.5.1)
|
||||
- New: CL Spark Wallet v0.3.0rc with BOLT12 offers [details](https://github.com/shesek/spark-wallet/releases)
|
||||
- New: CL plugin: Sparko [details](https://github.com/fiatjaf/sparko)
|
||||
- New: CL plugin: CLBOSS The Core Lightning Node Manager [details](https://github.com/ZmnSCPxj/clboss#clboss-the-c-lightning-node-manager)
|
||||
- New: Refactored Setup-Process [details](https://github.com/rootzoll/raspiblitz/issues/1126#issuecomment-829757665)
|
||||
- New: Suez - channel visualization for LND and CL [info](https://github.com/rootzoll/raspiblitz/issues/2366#issuecomment-939521302)[details](https://github.com/prusnak/suez)
|
||||
- New: LND Static Channel Backup to Nextcloud
|
||||
- New: Allow SphinxApp to connect over Tor
|
||||
- New: Parallel TESTNET & SIGNET services
|
||||
- Update: Bitcoin Core v22.0 [details](https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-22.0.md)
|
||||
- Update: LND v0.13.3 [details](https://github.com/lightningnetwork/lnd/releases/tag/v0.13.3-beta)
|
||||
- Update: Specter Desktop 1.6.0 [details](https://github.com/cryptoadvance/specter-desktop/blob/master/README.md)
|
||||
- Update: JoinMarket v0.9.2 [details](https://github.com/JoinMarket-Org/joinmarket-clientserver/releases/tag/v0.9.2)
|
||||
- Update: JoininBox v0.6.1 [details](https://github.com/openoms/joininbox/releases/tag/v0.6.1)
|
||||
- Update: Electrum Server in Rust (electrs) v0.9.0 [details](https://github.com/romanz/electrs/blob/v0.9.0/RELEASE-NOTES.md)
|
||||
- Update: Mempool 2.2.2 [details](https://github.com/mempool/mempool)
|
||||
- Update: BTC-RPC-Explorer v3.2.0 [details](https://github.com/janoside/btc-rpc-explorer/blob/master/CHANGELOG.md#v320)
|
||||
- Update: stacking-sats-kraken 0.4.4 [details](https://github.com/dennisreimann/stacking-sats-kraken/blob/master/README.md)
|
||||
- Update: BTCPayServer 1.2.3 [details](https://github.com/btcpayserver/btcpayserver/releases/tag/v1.2.3)
|
||||
- Update: Lightning Terminal v0.5.1-alpha [details](https://github.com/lightninglabs/lightning-terminal/releases/tag/v0.5.1-alpha)
|
||||
- Update: RTL 0.11.2 [details](https://github.com/Ride-The-Lightning/RTL/releases/tag/v0.11.2)
|
||||
- Update: Lightning Terminal v0.5.0-alpha [details](https://github.com/lightninglabs/lightning-terminal/releases/tag/v0.5.0-alpha)
|
||||
- Update: Thunderhub v0.12.30 [details](https://github.com/apotdevin/thunderhub/releases/tag/v0.12.30)
|
||||
- Update: Pool CLI v0.5.1-alpha [details](https://github.com/lightninglabs/pool/releases/tag/v0.5.1-alpha)
|
||||
- Update: Balance of Satoshis 10.7.8 (BOS) + keep data on reinstall [details](https://github.com/alexbosworth/balanceofsatoshis/blob/master/CHANGELOG.md#version-8010)
|
||||
- Update: Channel Tools (chantools) v0.9.3 [details](https://github.com/guggero/chantools/blob/master/README.md)
|
||||
- Update: Circuitbreaker v0.3.0 [details](https://github.com/lightningequipment/circuitbreaker/blob/master/README.md)
|
||||
- Remove: DropBox Backup (its recommended to change to Nextcloud Backup)
|
||||
- Remove: Litecoin (fork recommended) [details](https://github.com/rootzoll/raspiblitz/issues/2542)
|
||||
|
||||
## What's new in Version 1.7.0 of RaspiBlitz?
|
||||
|
||||
@ -56,7 +294,7 @@
|
||||
- Update: BTCPay Server 1.0.5.9 [details](https://github.com/btcpayserver/btcpayserver/releases/tag/v1.0.5.9)
|
||||
- Update: Loop 0.11.1
|
||||
- Update: stacking-sats-kraken 0.3.0
|
||||
- Update: Experimental BTRFS support
|
||||
- Update: Experimental BTRFS support
|
||||
- Fix: DropBox API
|
||||
|
||||
## What's new in Version 1.6.1 of RaspiBlitz?
|
||||
@ -77,7 +315,7 @@
|
||||
- New: Circuit Breaker (config-script) [details](https://github.com/rootzoll/raspiblitz/issues/1581)
|
||||
- New: PyBlock (Python Util & Fun Scripts) [details](https://github.com/curly60e/pyblock/blob/master/README.md)
|
||||
- New: Mempool Explorer [details](https://github.com/mempool/mempool)
|
||||
- New: dynu.com as alternative option for LetsEncrpyt FreeDNS provider
|
||||
- New: dynu.com as alternative option for LetsEncrypt FreeDNS provider
|
||||
- New: Experimental running RaspiBlitz as VM (vagrant & docker)
|
||||
|
||||
For ALL small bug fixes & improvements see: https://github.com/rootzoll/raspiblitz/milestone/11
|
||||
@ -95,7 +333,7 @@ For ALL small bug fixes & improvements see: https://github.com/rootzoll/raspibli
|
||||
- Update: ElectRS 0.8.5 [details](https://github.com/romanz/electrs/blob/master/RELEASE-NOTES.md#085-1-july-2020)
|
||||
- Update: JoinMarket v0.6.3.1 [details](https://github.com/JoinMarket-Org/joinmarket-clientserver/releases/tag/v0.6.3.1)
|
||||
- New: Nginx Web Server
|
||||
- New: Subscriptions Management
|
||||
- New: Subscriptions Management
|
||||
- New: IP2Tor Bridge (optional subscription service)
|
||||
- New: Balance of Satoshis v5.41.0 (with update option) [details](https://github.com/alexbosworth/balanceofsatoshis)
|
||||
- New: Faraday [details](https://github.com/lightninglabs/faraday)
|
||||
@ -109,12 +347,12 @@ For ALL small bug fixes & improvements see: https://github.com/rootzoll/raspibli
|
||||
- Fix: DropBox StaticChannelBackup
|
||||
- Removed: Shango from the list of Mobile Wallets
|
||||
- Removed: Torrent Download of Blockchain (Copy over LAN now default for RP3)
|
||||
- Shoppinglist: 4GB RaspberryPi 4 is now default for Standard Package (will still run with less)
|
||||
- Shoppinglist: 4GB RaspberryPi 4 is now default for Standard Package (will still run with less)
|
||||
|
||||
## What's new in Version 1.5.1 of RaspiBlitz?
|
||||
|
||||
- Bugfix: DropBox Backup of Static-Channel-Backup
|
||||
- Bugfix: Torrentfiles with active tracker
|
||||
- Bugfix: Torrentfiles with active tracker
|
||||
|
||||
## What.s new in Version 1.5 of RaspiBlitz?
|
||||
|
||||
@ -140,7 +378,7 @@ Beside many small improvements and changes, these are most important changes:
|
||||
- New: Make it easier to Copy The Blockchain over Network from running Blitz
|
||||
- New: Forwarding Fee Report on Main Menu
|
||||
- New: Easy Setup of Auto-Backup of SCB to Dropbox
|
||||
- New: LND Interims Updates (verified & reckless) [details](https://github.com/rootzoll/raspiblitz/issues/1116#issuecomment-619467148)
|
||||
- New: LND Interims Updates (verified & reckless) [details](https://github.com/rootzoll/raspiblitz/issues/1116#issuecomment-619467148)
|
||||
- New: Sync RaspiBlitz with your forked GitHub repo thru menu [details](FAQ.md#how-can-i-sync-a-branch-of-my-forked-github-with-my-local-raspiblitz)
|
||||
- Removed: Clone Blockchain from second HDD (use CopyStation script)
|
||||
|
||||
@ -247,4 +485,3 @@ Version 1.1 packs some first fixes and enhancements to make the RaspiBlitz more
|
||||
- Removed: FTP download option for blockchain
|
||||
|
||||
For full details see issue list of [Release 1.1 Milestone](https://github.com/rootzoll/raspiblitz/milestone/3?closed=1).
|
||||
|
||||
|
6
CODEOWNERS
Normal file
@ -0,0 +1,6 @@
|
||||
# For info see https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners
|
||||
|
||||
# These owners will be the default owners for everything in the repo.
|
||||
# Unless a later match takes precedence, these users will be requested for review when someone opens a pull request.
|
||||
|
||||
* @rootzoll @openoms
|
93
CONTRIBUTING.md
Normal file
@ -0,0 +1,93 @@
|
||||
# Community development
|
||||
|
||||
Everybody is welcome to join, improve, and extend the RaspiBlitz - it's a work in progress. Check the issues if you wanna help out or add new ideas. You can find the scripts used for RaspiBlitz interactions on the device at /home/admin or in this Git repo's subfolder home.admin.
|
||||
|
||||
## Understanding Blitz project
|
||||
|
||||
RaspiBlitz is inspired by the [RaspiBolt guide](https://raspibolt.github.io/raspibolt/). Tutorial on how to build a lightning node on the RaspberryPi. So much thx to Stadicus :)
|
||||
To start your Deep Dive into the RaspiBlitz project, watch [this video](https://www.youtube.com/watch?v=QXUGg45CWLo).
|
||||
|
||||
### Blitz philosophy
|
||||
|
||||
* DIY community development, if you are unhappy with the code, fork and pull request, this will make you DYOR instead of depending on the developers.
|
||||
* If you ask when the next release will be available, we don't know, but if you contribute, it might be faster.
|
||||
* Be sure to contribute back, every little help is wanted.
|
||||
|
||||
## Getting started
|
||||
|
||||
Get all details on "How to contribute to RaspiBlitz Development" on [this video](https://www.youtube.com/watch?v=ZVtZepV3OfM).
|
||||
|
||||
### Levels
|
||||
|
||||
All levels are important. Even advanced users help on basic levels for other Blitzers. Every help is welcome.
|
||||
Not all enhancements needs to go through all levels, these are levels of difficulty, scalability depends on your skills.
|
||||
|
||||
#### Basic
|
||||
|
||||
1. **Reporting user side** --> Open an issue to indicate a problem or make a feature request.
|
||||
1. **Community support** --> Solve other people issues.
|
||||
1. **Good first issue** --> The purpose of the good first issue label is to highlight which issues are suitable for a new contributor without a deep understanding of the codebase.
|
||||
|
||||
#### Medium
|
||||
|
||||
1. **Sovereignty** --> Fork the repo to have the changes controlled by you.
|
||||
1. **Experiment** --> Try things out on your RaspiBlitz.
|
||||
1. **Executable** --> Turn your experiment into a basic shell script.
|
||||
|
||||
#### Advanced
|
||||
|
||||
1. **Config script** --> Integrate your executable into the RaspiBlitz environment.
|
||||
1. **SSH-GUI** --> Make it easier for others to use your config script.
|
||||
1. **WEB-GUI** --> Turn your feature into customer ready
|
||||
|
||||
### Workflow
|
||||
|
||||
Use the `github` command from terminal to set your RaspiBlitz to your own forked repo and development branch and use the command `patch` to sync your RaspiBlitz quickly with your latest commits.
|
||||
|
||||
**Solving issues**
|
||||
|
||||
You do not need to request permission to start working on an issue. However,
|
||||
you are encouraged to leave a comment if you are planning to work on it. This
|
||||
will help other contributors monitor which issues are actively being addressed
|
||||
and is also an effective way to request assistance if and when you need it.
|
||||
|
||||
#### Pull Request
|
||||
|
||||
1. Make sure it is compatible with Blitz philosophy.
|
||||
1. Fork the repo
|
||||
1. Commit changes on the new branch
|
||||
1. Open a pull request (PRs are made to the `dev` branch unless indicated otherwise by a collaborator.
|
||||
|
||||
#### Review
|
||||
|
||||
##### Conceptual review
|
||||
|
||||
A review can be a conceptual review, where the reviewer leaves a comment
|
||||
|
||||
* Concept (N)ACK, meaning "I do (not) agree with the general goal of this pull
|
||||
request",
|
||||
* Approach (N)ACK, meaning Concept ACK, but "I do (not) agree with the
|
||||
approach of this change".
|
||||
|
||||
A NACK needs to include a rationale why the change is not worthwhile.
|
||||
NACKs without accompanying reasoning may be disregarded.
|
||||
|
||||
##### Code review
|
||||
|
||||
After conceptual agreement on the change, code review can be provided. A review begins with the urgent necessity of the changes.
|
||||
Start from urgent to less important:
|
||||
1. Security risk.
|
||||
1. Code that breaks the environment.
|
||||
1. Enhancing current services functionality.
|
||||
1. Solving a common issue.
|
||||
1. Adding new applications.
|
||||
|
||||
Project maintainers reserve the right to weigh the opinions of peer reviewers using common sense judgement and may also weigh based on merit.
|
||||
Reviewers that have demonstrated a deeper commitment and understanding of the project over time or who have clear domain expertise may naturally have more weight, as one would expect in all walks of life.
|
||||
|
||||
## Release policy
|
||||
The project leader is the release manager for each RaspiBlitz release.
|
||||
|
||||
## Copyright
|
||||
By contributing to this repository, you agree to license your work under the [MIT license](https://github.com/raspiblitz/raspiblitz/blob/master/LICENSE).
|
||||
Any work contributed where you are not the original author must contain its license header with the original author(s) and source.
|
943
FAQ.md
@ -1,943 +0,0 @@
|
||||
<!-- omit in toc -->
|
||||
# FAQ - Frequently Asked Questions
|
||||
|
||||
- [What changed on the single RaspiBlitz updates?](#what-changed-on-the-single-raspiblitz-updates)
|
||||
- [How to update my RaspiBlitz (since 1.2)?](#how-to-update-my-raspiblitz-since-12)
|
||||
- [How to update my RaspiBlitz from older versions like v1.0 or v1.1?](#how-to-update-my-raspiblitz-from-older-versions-like-v10-or-v11)
|
||||
- [How to verify the SD card image after download?](#how-to-verify-the-sd-card-image-after-download)
|
||||
- [How to update an old RaspiBlitz BEFORE v1.0? (LEGACY)](#how-to-update-a-old-raspiblitz-before-v10-legacy)
|
||||
- [Why do I need to re-burn my SD card for an update?](#why-do-i-need-to-re-burn-my-sd-card-for-an-update)
|
||||
- [I have the full blockchain on another computer. How do I copy it to the RaspiBlitz?](#i-have-the-full-blockchain-on-another-computer-how-do-i-copy-it-to-the-raspiblitz)
|
||||
- [How do I generate a Debug Report?](#how-do-i-generate-a-debug-report)
|
||||
- [Can I run my RaspiBlitz on Solar Energy?](#can-i-run-my-raspiblitz-on-solar-energy)
|
||||
- [Why is my "final sync" taking so long?](#why-is-my-final-sync-taking-so-long)
|
||||
- [How do I backup my Lightning Node?](#how-to-backup-my-lightning-node)
|
||||
- [1) Securing your On-Chain and Channel-Funds during Operation](#1-securing-your-on-chain--and-channel-funds-during-operation)
|
||||
- [2) Making a complete LND data backup](#2-making-a-complete-lnd-data-backup)
|
||||
- [How can I recover my coins from a failing RaspiBlitz?](#how-can-i-recover-my-coins-from-a-failing-raspiblitz)
|
||||
- [1) Recover LND data](#1-recover-lnd-data)
|
||||
- [2) Recover from Wallet Seed](#2-recover-from-wallet-seed)
|
||||
- [What is this mnemonic seed word list?](#what-is-this-mnemonic-seed-word-list)
|
||||
- [How to move funds & channels from RaspiBlitz to LND Lightning Desktop App?](#how-to-move-funds--channels-from-raspiblitz-to-lnd-lightning-desktop-app)
|
||||
- [How do I change the Name/Alias of my lightning node](#how-do-i-change-the-namealias-of-my-lightning-node)
|
||||
- [What to do when on SSH I see "WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!"](#what-to-do-when-on-ssh-i-see-warning-remote-host-identification-has-changed)
|
||||
- [When using Auto-Unlock, how much security do I lose?](#when-using-auto-unlock-how-much-security-do-i-lose)
|
||||
- [I connected my HDD but it still says 'Connect HDD' on the display?](#i-connected-my-hdd-but-it-still-says-connect-hdd-on-the-display)
|
||||
- [How do I shrink the QR code for connecting my Shango/Zap/Zeus mobile phone?](#how-do-i-shrink-the-qr-code-for-connecting-my-shangozapzeus-mobile-phone)
|
||||
- [Why is my bitcoin IP on the display red?](#why-is-my-bitcoin-ip-on-the-display-red)
|
||||
- [Why is my node address on the display red?](#why-is-my-node-address-on-the-display-red)
|
||||
- [Why is my node address on the display yellow (not green)?](#why-is-my-node-address-on-the-display-yellow-not-green)
|
||||
- [Can I run the RaspiBlitz as Backend for BTCPayServer?](#can-i-run-the-raspiblitz-as-backend-for-btcpayserver)
|
||||
- [I don't have a LAN port on my Laptop - how do I connect to my RaspiBlitz?](#i-dont-have-a-lan-port-on-my-laptop---how-to-connect-to-my-raspiblitz)
|
||||
- [Is it possible to connect the Blitz over Wifi instead of using a LAN cable?](#is-it-possible-to-connect-the-blitz-over-wifi-instead-of-using-a-lan-cable)
|
||||
- [Can I directly connect the RaspiBlitz with my laptop?](#can-i-directly-connect-the-raspiblitz-with-my-laptop)
|
||||
- [How do I unplug/shutdown safely without SSH](#how-do-i-unplugshutdown-safely-without-ssh)
|
||||
- [How can I build an SD card from another branch?](#how-can-i-build-an-sd-card-from-another-branch)
|
||||
- [How can I build an SD card from my forked GitHub Repo?](#how-can-i-build-an-sd-card-from-my-forked-github-repo)
|
||||
- [How can I checkout a new branch from the RaspiBlitz repo to my forked repo?](#how-can-i-checkout-a-new-branch-from-the-raspiblitz-repo-to-my-forked-repo)
|
||||
- [How can I sync a branch of my forked GitHub with my local RaspiBlitz?](#how-can-i-sync-a-branch-of-my-forked-github-with-my-local-raspiblitz)
|
||||
- [How contribute a feature/change from my forked branch back to the RaspiBlitz repo?](#how-contribute-a-featurechange-from-my-forked-branch-back-to-the-raspiblitz-repo)
|
||||
- [How can I help with testing a Pull Request?](#how-can-i-help-testing-a-pull-request)
|
||||
- [How to attach the RaspberryPi to the HDD?](#how-to-attach-the-raspberrypi-to-the-hdd)
|
||||
- [What other case options do I have?](#what-other-case-options-do-i-have)
|
||||
- [Are those "Under-Voltage detected" warnings a problem?](#are-those-under-voltage-detected-warnings-a-problem)
|
||||
- [Is using the prepared SD card image secure?](#is-using-the-prepared-sd-card-image-secure)
|
||||
- [What is the process of creating a new SD card image release?](#what-is-the-process-of-creating-a-new-sd-card-image-release)
|
||||
- [How do I return to the menu after exiting to the command line](#how-do-i-return-to-the-menu-after-exiting-to-the-command-line)
|
||||
- [Can I run RaspiBlitz on other computers than RaspberryPi?](#can-i-run-raspiblitz-on-other-computers-than-raspberrypi)
|
||||
- [Can I flip the screen?](#can-i-flip-the-screen)
|
||||
- [How do I setup fresh/clean/reset and not getting into recovery mode?](#how-to-setup-freshcleanreset-and-not-getting-into-recovery-mode)
|
||||
- [My blockchain data is corrupted - what can I do?](#my-blockchain-data-is-corrupted---what-can-i-do)
|
||||
- [Can I run the RaspiBlitz without a display/LCD?](#can-i-run-the-raspiblitz-without-a-displaylcd)
|
||||
- [How do I set up VNC?](#how-do-i-set-up-vnc)
|
||||
- [I have two RaspiBlitz in my network - can they both be public?](#i-have-two-raspiblitz-in-my-network---can-they-both-be-public)
|
||||
- [How do I change the public port LND/Lightning node is running on?](#how-to-change-the-public-port-lndlightning-node-is-running-on)
|
||||
- [How do I solve a "signature mismatch after caveat verification" error?](#how-to-solve-a-signature-mismatch-after-caveat-verification-error)
|
||||
- [Why is my node not routing?](#why-is-my-node-not-routing)
|
||||
- [How can I update LND or bitcoind even before the next RaspiBlitz update?](#how-can-i-update-lnd-or-bitcoind-even-before-the-next-raspiblitz-update)
|
||||
- [I cannot connect per SSH to my RaspiBlitz. What can I do?](#i-cannot-connect-per-ssh-to-my-raspiblitz-what-to-do)
|
||||
- [How do I setup port-forwarding with a SSH tunnel?](#how-to-setup-port-forwarding-with-a-ssh-tunnel)
|
||||
- [How do I setup just a port-forwarding user on my public server?](#how-to-setup-just-a-port-forwarding-user-on-my-public-server)
|
||||
- [How do I connect a UPS to the RaspiBlitz?](#how-to-connect-a-ups-to-the-raspiblitz)
|
||||
- [Why use BTRFS on RaspiBlitz?](#why-use-btrfs-on-raspiblitz)
|
||||
- [Storing your important Data in RAID1 with a USB Thumb Drive](#storing-your-important-data-in-raid1-with-a-usb-thumb-drive)
|
||||
- [Snapshotting the Blockchain](#snapshotting-the-blockchain)
|
||||
- [How do I use BTRFS on RaspiBlitz?](#how-to-use-btrfs-on-raspiblitz)
|
||||
- [How do I recover a BTRFS partition?](#how-to-recover-a-btrfs-partition)
|
||||
- [How do I fix a displayed Error in my Config?](#how-do-i-fix-a-displayed-error-in-my-config)
|
||||
- [How do I fix my upside down LCD after update?](#how-to-fix-my-upside-down-lcd-after-update)
|
||||
- [How can I repair my SSH login?](#how-can-i-repair-my-ssh-login)
|
||||
- [How to use the Let's Encrypt client](#how-to-use-the-lets-encrypt-client)
|
||||
- [Let's Encrypt - HTTP-01](#lets-encrypt---http-01)
|
||||
- [Let's Encrypt - DNS-01](#lets-encrypt---dns-01)
|
||||
- [Let's Encrypt - eMail Address](#lets-encrypt---email-address)
|
||||
- [Let's Encrypt - Installation details](#lets-encrypt---installation-details)
|
||||
- [How can I customize my RaspiBlitz or add other software?](#how-can-i-customize-my-raspiblitz-or-add-other-software)
|
||||
- [How do I find the IP address when running without a display?](#how-do-i-find-the-ip-address-when-running-without-a-display)
|
||||
|
||||
---
|
||||
|
||||
## What changed on the single RaspiBlitz updates?
|
||||
|
||||
See the [CHANGES.md](CHANGES.md) file for details.
|
||||
|
||||
## How do I update my RaspiBlitz (since 1.2)?
|
||||
|
||||
The update should be quite simple - you don't need to close any channels:
|
||||
|
||||
- It would be best to get a second 16GB or 32GB SD card - but you can also reuse your old one
|
||||
- In the SSH main menu of you RaspiBlitz choose `UPDATE` & follow the dialogs until shutdown
|
||||
- Download the new RaspiBlitz image file from the [GitHub README](https://github.com/rootzoll/raspiblitz/blob/dev/README.md#installing-the-software)
|
||||
- Write the new image to the (new) SD card with a tool like [balena etcher](https://www.balena.io/etcher/)
|
||||
- RaspiBlitz with new SD card image - it now goes through a recover/update phase - this may take some time.
|
||||
- Once that's done, login once via SSH and use the password raspiblitz and set a new password A (can be your old one or a new one).
|
||||
|
||||
After the final reboot your RaspiBlitz should be ready, running the new RaspiBlitz version.
|
||||
|
||||
## How do I update my RaspiBlitz from older versions like v1.0 or v1.1?
|
||||
|
||||
To update you DON'T NEED to close any channels, remove funding, or download the blockchain again.
|
||||
|
||||
Here is a YouTube video tutorial on how to update: https://www.youtube.com/watch?v=Xvn0WQfHUdI
|
||||
|
||||
Simply [Download the new RaspiBlitz SD card image](https://github.com/rootzoll/raspiblitz#installing-the-software) to your laptop and have an SD card writer ready. Then login into your RaspiBlitz with SSH and:
|
||||
|
||||
- main menu > OFF
|
||||
- remove power
|
||||
- remove SD card
|
||||
|
||||
Write the new image to your SD card .. yes, you simply overwrite the old one. It's OK, all your personal data is on the HDD. If you want to be extra safe you can make an image backup of your old SD card first - but that is optional. If you made manual changes to your RaspiBlitz with scripts on the SD card you might want to check on this FAQ question first: [Why do I need to re-burn my SD card for an update?](FAQ.md#why-do-i-need-to-re-burn-my-sd-card-for-an-update).
|
||||
|
||||
- insert new SD card image
|
||||
- power on the RaspiBlitz again
|
||||
|
||||
You should see that it switched into recover/backup mode. It's now provisioning the fresh OS on the sd card with your old settings and data. This process can take some time, especially if you had the RTL Web UI activated. Follow the instructions on the display ... if it takes longer than an hour .. [get support](https://github.com/rootzoll/raspiblitz#support).
|
||||
|
||||
When the update/recover process is ready you will see a `FINAL RECOVER LOGIN NEEDED` message on the display. Login via SSH by using the password `raspiblitz` and set your Password A again. It can be the same as the old one, but consider using the occasion to make a password change for security reasons. If you had auto-unlock activated you might also be asked to enter your old Password C again. Then it wil make a final reboot.
|
||||
|
||||
After your RaspiBlitz is done catching up with the latest blockchain data you should see your status screen displaying your funds and channels. Your backup is complete.
|
||||
|
||||
## How to verify the SD card image after download?
|
||||
|
||||
You can do a quick check to verify that the sha256 hash of the file you downloaded is the same as the sha256 hash mentioned below the download link, or use the torrent download which will also check the file for a checksum after download. But this does not prove to you that the SD card image was actually built by the lead developer of the RaspiBlitz project.
|
||||
|
||||
To verify that the download was actually signed by [rootzoll](https://keybase.io/rootzoll) you need to use GPG and import the following public key:
|
||||
|
||||
```
|
||||
curl https://keybase.io/rootzoll/pgp_keys.asc | gpg --import
|
||||
```
|
||||
|
||||
Next, download the "signature file" for the SD card image. It's the same download link as for the image file - just added a `.sig` at the end. You should also always find the download link for the signature file in the README right below the image download link following the `SIGNATURE` link.
|
||||
|
||||
If you know have all the three elements needed - the imported public key, the image signature and the image file itself - you can verify the download with:
|
||||
|
||||
```
|
||||
gpg --verify [SIGNATURE-FILE] [IMAGE-FILE]
|
||||
```
|
||||
|
||||
As a result you should see a "correct signature" message with a main fingerprint the same as you can find on the [keybase.io/rootzoll](https://keybase.io/rootzoll) that is ending on `1C73 060C 7C17 6461`. If that fingerprint is correct, the SD card image you downloaded is a original release RaspiBlitz.
|
||||
|
||||
## How to update an old RaspiBlitz BEFORE v1.0? (LEGACY)
|
||||
|
||||
If your old RaspiBlitz is version 0.98 or higher, just follow the update instructions in the README.
|
||||
|
||||
If you run a version earlier then 0.98 you basically need to setup a new RaspiBlitz to update - but you can keep the blockchain data on the HDD, so you don't need have that long waiting time again:
|
||||
|
||||
1. Close all open lightning channels you have (`lncli closeallchannels --force`) or use the menu option 'CLOSE ALL' if available. Wait until all closing transactions are done.
|
||||
|
||||
2. Move all on-chain funds to a wallet outside raspiblitz (`lncli sendcoins --conf_target 3 <ADDRESS> <AMT>`) or use the menu option 'CASHOUT' if available
|
||||
|
||||
3. Prepare the HDD for the new setup by running the script `/home/admin/XXcleanHDD.sh` (Blockchain will stay on HDD)
|
||||
|
||||
4. Then shutdown RaspiBlitz (`sudo shutdown now`), flash the SD card with new image, redo a fresh setup of RaspiBlitz, move your funds back in, and re-open your channels
|
||||
|
||||
## Why do I need to re-burn my SD card for an update?
|
||||
|
||||
I know it would be nicer to run just an update script and be ready to go. But then the scripts would need to be written in a much more complex way to be able to work with any versions of LND and Bitcoind (they are already complex enough with all the edge cases) and testing would become even more time consuming than it is now. That's not something that a single developer can deliver.
|
||||
|
||||
For some, it might be a pain point to make an update by re-burning a new SD card - especially if you added your own scripts or made changes to the system - but that's by design. It's a way to enforce a "clean state" with every update - the same state that I tested and developed the scripts with. The reason for that pain: I simply cannot write and support scripts that run on every modified system forever - that's simply too much work.
|
||||
|
||||
With the SD card update mechanism I reduce complexity, I deliver a "clean state" OS, LND/Bitcoind and the scripts tightly bundled together exactly in the dependency/combination like I tested them and it's much easier to reproduce bug reports and give support that way.
|
||||
|
||||
Of course, people should modify the system, add own scripts, etc ... but if you want to also have the benefit of the updates of the RaspiBlitz, you have two ways to do it:
|
||||
|
||||
1. Contribute your changes back to the main project as pull requests so that they become part of the next update - the next SD card release.
|
||||
|
||||
2. Make your changes so that they survive an SD card update easily - put all your scripts and extra data onto the HDD, AND document for yourself how to activate them again after an update. The file `/mnt/hdd/app-data/custom-installs.sh` runs with sudo rights after an update/recovery from a fresh SD card. This is the place to put all the install commands, cronjobs or editing of system configs for your personal modifications of RaspiBlitz.
|
||||
|
||||
*BTW there is a beneficial side effect when updating with a new SD card: You also get rid of any malware or system bloat that happened in the past. You start with a fresh system :)*
|
||||
|
||||
## I have the full blockchain on another computer. How do I copy it to the RaspiBlitz?
|
||||
|
||||
Copying a already synced blockchain from another computer (for example your Laptop) can be a quick way to get the RaspiBlitz started or replacing a corrupted blockchain with a fresh one. Also that way you have synced and verified the blockchain yourself, and are not trusting the RaspiBlitz Torrent downloads (Don't trust, verify).
|
||||
|
||||
One requirement is that the blockchain is from another bitcoin-core client with version greater or equal to 0.17.1.
|
||||
|
||||
But we don't copy the data via USB to the device, because the HDD needs to be formatted in EXT4 and that is usually not read/writable by Windows or Mac computers. So I will explain a way to copy the data through your local network. This should work from Windows, Mac, Linux and even from another already synced RaspiBlitz.
|
||||
|
||||
Both computers (your RaspberryPi and the other computer with the full blockchain) need to be connected to the same local network. Make sure that bitcoind/bitcoin-qt is stopped on the computer containing the blockchain. If your blockchain source is another RaspiBlitz with v1.5 or higher - go to `REPAIR` > `COPY-SOURCE`. If your RaspiBlitz is below v1.5 then on the terminal `sudo systemctl stop bitcoind` and then go to the directory where the blockchain data is with `cd /mnt/hdd/bitcoin` - when the copy/transfer is done later reboot a RaspiBlitz source with `sudo shutdown -r now`.
|
||||
|
||||
If everything described above is in order, start the setup of the new RaspiBlitz with a fresh SD card (like explained in the README) - it's OK that there is no blockchain data on your HDD yet - just follow the setup. When you get to the setup-point `Getting the Blockchain` choose the COPY option. Starting from version 1.0 of the RaspiBlitz this will give you further detailed instructions how to transfer the blockchain data onto your RaspiBlitz. In short: On your computer with the blockchain data source you will execute SCP commands that will copy the data over your local network to your RaspiBlitz.
|
||||
|
||||
Once you finished all the transfers, the Raspiblitz will make a quick-check on the data - but that will not guarantee that everything in detail was OK with the transfer. Check further FAQ answers if you get stuck or see a final sync with a value below 90%.
|
||||
|
||||
## How do I generate a Debug Report?
|
||||
|
||||
If your RaspiBlitz is not working correctly and you like to get help from the community, it's good to provide more debug information, so others can better diagnose your problem - please follow the following steps to generate a debug report:
|
||||
|
||||
- SSH into your raspiblitz as admin user with your password A
|
||||
- If you see the menu - use CTRL+C to get to the terminal
|
||||
- To generate debug report run: `./XXdebugLogs.sh`
|
||||
- Then copy all output beginning with `*** RASPIBLITZ LOGS ***` and share this
|
||||
|
||||
*PLEASE NOTICE: It's possible that these logs can contain private information (like IPs, node IDs, ...) - just share publicly what you feel OK with.*
|
||||
|
||||
## Can I run my RaspiBlitz on Solar Energy?
|
||||
|
||||
Yes - take a look at the project of [Chimezie Chuta](https://twitter.com/mezie16/status/1264513274080636928?s=20)
|
||||
|
||||

|
||||
|
||||
More details in his book ["A-Z of Building your own Full Bitcoin Lightning Node: A hand Book for Enthusiasts"](https://blockspace.shop/products/a-z-of-building-your-own-full-bitcoin-lightning-node-a-hand-book-for-enthusiasts)
|
||||
|
||||
## Why is my "final sync" taking so long?
|
||||
|
||||
First of all if you see a final sync over 90% and you can see from time to time small increase - you should be OK ... this can take a looong time to catch up with the network. Only in the case that you actively choose the `SYNC` option in the `Getting the Blockchain` is a final sync under 90% OK. If you did a torrent or a copy from another computer and you are seeing under 90% something went wrong, and the setup process is ignoring your prepared Blockchain and doing a full sync - which can almost take forever on a raspberryPi.
|
||||
|
||||
If something is wrong (like mentioned above) then try again from the beginning. You need to reset your HDD for a fresh start: SSH in as admin user. Abort the final sync info with CTRL+c to get to the terminal. Then run `sudo /home/admin/XXcleanHDD.sh -all` and follow the script to delete all data in HDD. When finished power down with `sudo shutdown now`. Then make a fresh SD card from image and this time try another option to get the blockchain. If you run into trouble the second time, please report an issue on GitHub.
|
||||
|
||||
## How do I backup my Lightning Node?
|
||||
|
||||
There are two ways of performing a Backup:
|
||||
|
||||
### 1) Securing your On-Chain- and Channel-Funds during Operation
|
||||
|
||||
This is best done by auto backing-up the 'channel.backup' file to a remote location. But it just secures the funds you have in your on-chain wallet or in your channels. On recovery the channels will get closed. For details on how to setup see the README:
|
||||
https://github.com/rootzoll/raspiblitz/blob/v1.2/README.md#backup-for-on-chain---channel-funds
|
||||
|
||||
### 2) Making a complete LND data backup
|
||||
|
||||
This backups all your LND data - including all open channels. But it's just intended to use when you move your LND data between computers, during update situations, or in rescue recoveries, because replaying out-dated backups can lead to the loss of all channel funds.
|
||||
|
||||
To backup LND data in a rescue situation see next question "How can I recover my coins from a failing RaspiBlitz?".
|
||||
|
||||
## How can I recover my coins from a failing RaspiBlitz?
|
||||
|
||||
On a RaspiBlitz you have coins in your on-chain wallet (bitcoin wallet) and also coins in lightning channels. First we will try to recover all of them while trying to keep your channels open with "Recover LND data". If that is not possible you can fall back to the second option "Recover from Wallet Seed".
|
||||
|
||||
### 1) Recover LND data
|
||||
|
||||
The best chance to recover all your LND data/channels is when you still can SSH into the RaspiBlitz and the HDD is still usable/reachable (mounted) - even if it shows some errors. If this is not possible anymore you should skip to the second option "Recover from Wallet Seed" or try to recover the LND data from the HDD (directory `lnd`) from another computer.
|
||||
|
||||
If you still can SSH in and HDD is readable, we can try to rescue/export your LND data (funds and channels) from a RaspiBlitz to then be able to restore it back to a fresh one. For this you can use the following procedure ...
|
||||
|
||||
To rescue/export your Lightning data from a RaspiBlitz (since v1.1):
|
||||
|
||||
* SSH into your RaspiBlitz and EXIT to terminal from the menu.
|
||||
* then run: `/home/admin/config.scripts/lnd.rescue.sh backup`
|
||||
* follow the instructions of the script.
|
||||
|
||||
This will create a lnd-rescue file (ends on gz.tar) that contains all the data from the LND. The script offers you a command to transfer the lnd-rescue file to your laptop. If the transfer was successful you can now setup a fresh RaspiBlitz. Do all the setup until you have a clean new Lightning node running - just without any funding or channels.
|
||||
|
||||
Then to restore your old LND data and to recover your funds and channels:
|
||||
|
||||
* SSH into your new RaspiBlitz and EXIT to terminal from the menu.
|
||||
* then run: `/home/admin/config.scripts/lnd.rescue.sh restore`
|
||||
* follow the instructions of the script.
|
||||
|
||||
This script will offer you a way to transfer the lnd-rescue file from your laptop to the new RaspiBlitz and will restore the old data. LND then gets restarted for you, and after some time it should show you the status screen again with your old funds and channels.
|
||||
|
||||
**Be aware that if backup is some hours old, channels could have been closed by the other party and it may take some time until you see funds back on-chain. If backup is somewhat older then 1 day also the channel counter-parties may have used your offline time to cheat you with an old state. And if your backup was not the latest state it could also be happening that you are posting an old channel state (seen as cheating) and funds of that channel get forfeited as punishment. So again .. this backup method can be risky, use with caution. While it's recommended to try in recover and rescue situations - it's not for regular backups.**
|
||||
|
||||
### 2) Recover from Wallet Seed
|
||||
|
||||
Remember those 24 words you were writing down during the setup? That's your "cipher seed" - These words are very important for recovering your wallet. If you don't have them anymore: go back to option "Recover LND data" (see above) and check all possible ways to recover data from the HDD. If you still have the word seed: good, but read the following carefully:
|
||||
|
||||
With the word seed you can recover the on-chain funds that LND was managing for you - but it does not contain all the details about the channels you have open - it's mostly the key to your funding wallet. If you were able to close all channels or never opened any, then you should be safe: The best results to recover on-chain funds from wallet seeds have been reported from people installing the Lightning Labs App on laptop and then using the wallet seed (and same wallet passwords): https://github.com/lightninglabs/lightning-app/releases. Other people were succesful in this process using the Zap Desktop wallet (OSX, Win, Linux): https://zap.jackmallers.com/download
|
||||
|
||||
If you had open channels it would be best to check if you have also the `channel.backup` file (Static-Channel-Backup feature) that is available since LND 0.6 (RaspiBlitz v1.2) and use it in the process below ... for more details on the `channel.backup` file see [README.md on backups](README.md#backup-for-on-chain---channel-funds).
|
||||
|
||||
- SetUp a fresh RaspiBlitz (fresh SD-Card image and clean HDD).
|
||||
- During the new SetUp, when you get to the point of creating the LND wallet (see image below).
|
||||
- Choose `OLD - I had an old Node I want to recover/restore` option and then
|
||||
- Choose `SEED+SCB - Seed & channel.backup file` option
|
||||
- and follow the instructions to upload your `channel.backup` file and enter your seed
|
||||
|
||||
Then give LND some time to re-scan the blockchain. In the end you will have restored your funding wallet. You maybe need to wait for your old channel counterparts to force close the old channels until you see the coins displayed again.
|
||||
|
||||
If you don't have the `channel.backup` file but only the seed words there is a last hope - read this article:
|
||||
https://medium.com/@guggero/did-you-lose-funds-on-the-lightning-network-because-of-a-disk-crash-8971b6a92494
|
||||
|
||||
*Important: If you see a zero balance for on-chain funds after restoring from seed ... see details discussed [here](https://github.com/rootzoll/raspiblitz/issues/278) - you might try setup fresh this time with bigger look-ahead number.*
|
||||
|
||||
## What is this mnemonic seed word list?
|
||||
|
||||
With the 24 word list given you by LND upon wallet creation you can recover your private key. You should write it down and store it at a safe place. Bear in mind that *this 24 word mnemonic seed is not based on the BIP 39* and therefore cannot be recovered using a Bitcoin wallet.
|
||||
|
||||
For more background on the LND mnemonic seed [read this article](https://github.com/lightningnetwork/lnd/blob/master/docs/recovery.md#recovering-funds-from-lnd-funds-are-safu).
|
||||
|
||||
|
||||
## How do I move funds & channels from RaspiBlitz to LND Lightning Desktop App?
|
||||
|
||||
Before you start - download a LND-data-rescue file from your RaspiBlitz to your laptop `main menu -> UPDATE -> Update Anyway -> Start Update -> Download Backup -> FOLLOW INSTRUCTIONS and press Enter when ready with download -> START UPDATE`. Now your RaspiBlitz will power down.
|
||||
|
||||
Now install the LND Lightning Desktop App for your OS: https://github.com/lightninglabs/lightning-app/releases
|
||||
|
||||
Then start the App and create a new wallet - it's a throw-away wallet (will be deleted afterwards with no funds) - so you don't need to keep seeds safe. To get easily through the setup just make a photo of the seed with your mobile. If you get asked for funding - just click "done" until you reach the basic wallet screen. Then close the LND Desktop App.
|
||||
|
||||
Now find out the path where LND stores the wallet data on your computer.
|
||||
|
||||
Linux: [USER-DIRECTORY]/.config/lightning-app/lnd
|
||||
OSX: [USER-DIRECTORY]/Library/Application Support/lightning-app/lnd
|
||||
Windows: %USERPROFILE%\AppData\Roaming\lightning-app\lnd
|
||||
|
||||
Then open that directory on your local file manager and delete all data in the `lnd` directory.
|
||||
|
||||
Now unpack the lnd-rescue you made before and copy all the data from the `mnt/hdd/lnd` directory (including sub directories) into the LND-Path lnd directory. Delete the "lnd.conf" file.
|
||||
|
||||
Now start the Lightning App again. Your wallet password should now be your RaspIBlitz Password C.
|
||||
|
||||
**If it's working and you have access to your funds/channels on the Desktop App ... don't start the RaspiBlitz anymore. Delete SD card and HDD.**
|
||||
|
||||
## How do I change the Name/Alias of my lightning node
|
||||
|
||||
Use the "Change Name/Alias of Node" option in the main menu. The RaspiBlitz will automatically reboot after this.
|
||||
|
||||
## What to do when on SSH I see "WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!"
|
||||
|
||||
This means that he public SSH key of the RaspiBlitz has changed to the one you logged in with the last time under that IP.
|
||||
|
||||
It's OK when happening during an update - when you changed the SD card image. If it's really happening out of the blue - check your local network setup for a problem. Maybe the local IP of your RaspiBlitz changed? Is there a second RaspiBlitz connected? It's a security warning, so at least take some time to check if anything is strange. But also don't immediately panic - when it's in your local network, normally it's some network thing - not an intruder.
|
||||
|
||||
To fix this and to be able to login with SSH again, you have to remove the old public key for that IP from your local client computer. Just run the following command (with the replaced IP of your RaspiBlitz): `ssh-keygen -R IP-OF-YOUR-RASPIBLITZ` or remove the line for this IP manually from the known_hosts file (see the path to the file in the warning message).
|
||||
|
||||
After that, you should be able to login with SSH again.
|
||||
|
||||
## When using Auto-Unlock, how much security do I lose?
|
||||
|
||||
The idea of the "wallet lock" in general, is that your private key / seed / wallet is stored in a encrypted way on your HDD. On every restart, you have to input the password once manually (unlock your wallet), so that the LND can read and write to the encrypted wallet again. This improves your security if your RaspiBlitz gets stolen or taken away - it loses power and then your wallet is safe - the attacker cannot access your wallet.
|
||||
|
||||
When you activate the "Auto-Unlock" feature of the RaspiBlitz, the password of the wallet gets stored on the RaspiBlitz. So if an attacker steals the RaspiBlitz physically, it's now possible for them to find the password and unlock the wallet.
|
||||
|
||||
## I connected my HDD but it still says 'Connect HDD' on the display?
|
||||
|
||||
Your HDD may have no partitions yet. SSH into the RaspiBlitz as admin (see command and password on display) and you should be offered the option to create a partition. If this is not the case:
|
||||
|
||||
Check/Exchange the USB cable. Connect the HDD to another computer and check if it shows up at all.
|
||||
|
||||
OSX: https://www.howtogeek.com/212836/how-to-use-your-macs-disk-utility-to-partition-wipe-repair-restore-and-copy-drives/
|
||||
|
||||
Windows: https://www.lifewire.com/how-to-open-disk-management-2626080
|
||||
|
||||
Linux/Ubuntu (desktop): https://askubuntu.com/questions/86724/how-do-i-open-the-disk-utility-in-unity
|
||||
|
||||
Linux/Raspbian (command line): https://www.addictivetips.com/ubuntu-linux-tips/manually-partition-a-hard-drive-command-line-linux/
|
||||
|
||||
## How do I shrink the QR code for connecting my Shango/Zap/Zeus mobile phone?
|
||||
|
||||
Make the fonts smaller until the QR code fits into your (fullscreen) terminal. In OSX use `CMD` + `-` key. In LINUX use `CTRL`+ `-` key. On WINDOWS Putty go into the settings and change the font size: https://globedrill.com/change-font-size-putty
|
||||
|
||||
## Why is my bitcoin IP on the display red?
|
||||
|
||||
The bitcoin IP is red when the RaspiBlitz detects that it cannot reach the port of bitcoin node from the outside. This means the bitcoin node can peer with other bitcoin nodes, but other bitcoin nodes cannot initiate a peering with you. Don't worry, you don't need a publicly reachable bitcoin node to run a (public) lightning node. If you want to change this however, you need to forward port 8333 on your router to the the RaspiBlitz. How to do this is different on every router.
|
||||
|
||||
Some routers support a feature called UPnP where devices can automatically request a forwarding to be publicly reachable. By turning on `BTC UPnP` in the main menu `SERVICES` section, you can try if your router supports this feature.
|
||||
|
||||
On details how to set port forwarding manually on your router model see: https://portforward.com
|
||||
|
||||
## Why is my node address on the display red?
|
||||
|
||||
The node address is red when the RaspiBlitz detects that it cannot reach the port of the LND node from the outside - when the device is behind a NAT or firewall of the the router. Your node is not publicly reachable. This means you can peer+openChannel with other public nodes, but other nodes cannot peer+openChannel with you. To change this you need to forward port 9735 on your router to the the RaspiBlitz. How to do this is different on every router.
|
||||
|
||||
Some routers support a feature called UPnP where devices can automatically request a forwarding to be publicly reachable. By turning on `LND UPnP` in the main menu `SERVICES` section, you can try if your router supports this feature.
|
||||
|
||||
On details how to set port forwarding manually on your router model see: https://portforward.com
|
||||
|
||||
Also the self-testing of the RaspiBlitz to see if the port is forwarded or not might not work if your router is not supporting [Hairpinning](https://en.wikipedia.org/wiki/Hairpinning).
|
||||
|
||||
## Why is my node address on the display yellow (not green)?
|
||||
|
||||
Yellow is OK. The RaspiBlitz can detect that it can reach a service on the port 9735 of your public IP - this is in most cases the LND of your RaspiBlitz. But the RaspiBlitz cannot 100% for sure detect that this is its own LND service on that port - that's why it's just yellow, not green.
|
||||
|
||||
For details on how to set port forwarding on your router model see: https://portforward.com
|
||||
|
||||
## Can I run the RaspiBlitz as Backend for BTCPayServer?
|
||||
|
||||
BTCPay Server is a solution to be your own payment processor to accept Lightning Payments for your online store: https://github.com/btcpayserver/btcpayserver
|
||||
|
||||
You can find setup instructions for a experimental setup here: https://goo.gl/KnTzLu
|
||||
|
||||
Thanks to @RobEdb (ask on twitter for more details) for running his demo store with RaspiBlitz: https://store.edberg.eu - buy a picture of [him and Andreas](https://store.edberg.eu/produkt/jag-andreas/) :)
|
||||
|
||||
## I don't have a LAN port on my Laptop - how do I connect to my RaspiBlitz?
|
||||
|
||||
You don't need a LAN port on your laptop as long as you can connect over WLAN to the same LAN router/switch the RaspiBlitz is connected to .. and you are on the same local network.
|
||||
|
||||
## Is it possible to connect the Blitz over Wifi instead of using a LAN cable?
|
||||
|
||||
A LAN cable is recommended because it reduces a possible source of error on the network connection side. But how to setup WLAN when you don't have a LAN-Router/Switch available see here:
|
||||
https://stadicus.github.io/RaspiBolt/raspibolt_20_pi.html#prepare-wifi
|
||||
|
||||
## Can I directly connect the RaspiBlitz to my laptop?
|
||||
|
||||
If you have a LAN port on your laptop - or you have a USB-LAN adapter, you can connect the RaspiBlitz directly (without a router/switch) to your laptop and share the WIFI internet connection. You can follow this [guide for OSX](https://medium.com/@tzhenghao/how-to-ssh-into-your-raspberry-pi-with-a-mac-and-ethernet-cable-636a197d055).
|
||||
|
||||
In short for OSX:
|
||||
|
||||
* make sure all VPNs are off (can interfere with local LAN)
|
||||
* connect with LAN directly
|
||||
* Settings > Sharing/Freigaben > activate "internet sharing" from WLAN to Ethernet
|
||||
* Settings > Network > Ethernet-Adapter > set to DHCP
|
||||
* in terminal > `ifconfig` there you should see the IP of the bridge100
|
||||
* in terminal > `arp -a` and check for an IP of a client to the bridge
|
||||
* in terminal > ssh admin@[clientIP]
|
||||
|
||||
If anyone has experience on doing this in Linux/Win, please share.
|
||||
|
||||
## How do I unplug/shutdown safely without SSH
|
||||
|
||||
Just removing power from the RaspiBlitz can lead to data corruption if the HDD is right in the middle of a writing process. The safest way is always to SSH into the RaspiBlitz and use the "POWER OFF" option in the main menu.
|
||||
|
||||
But if cannot login with SSH and you need to power off at least remove the LAN cable (network connection)first for sometime (around 10-30 secs - until you can see no more blinking lights on the HDD) and then remove the power cable. This should minimize the risk if data corruption in this situations.
|
||||
|
||||
## How can I build an SD card from another branch?
|
||||
|
||||
There might be new, but not released features in development that are not yet in the master branch - but you want to try them out.
|
||||
|
||||
To build a SD card image from another branch than master, you follow the [Build the SD Card Image](README.md#build-the-sd-card-image) from the README, but execute the build script from the other branch and add the name of that branch as a parameter to the build script.
|
||||
|
||||
For example if you want to make a build from the 'dev' branch you execute the following command:
|
||||
|
||||
`wget --no-cache https://raw.githubusercontent.com/rootzoll/raspiblitz/dev/build_sdcard.sh && sudo bash build_sdcard.sh false false rootzoll dev lcd true true`
|
||||
|
||||
## How can I build an SD card from my forked GitHub Repo?
|
||||
|
||||
If you fork the RaspiBlitz repo (much welcome) and you want to run that code on your RaspiBlitz, there are two ways to do that:
|
||||
|
||||
* The quick way: For small changes in scripts, go to `/home/admin` on your running RaspiBlitz, delete the old git with `sudo rm -r raspiblitz` then replace it with your code `git clone [YOURREPO]` and `/home/admin/XXsyncScripts.sh`
|
||||
|
||||
* The long way: If you like to install/remove/change services and system configurations you need to build a SD card from your own code. Prepare like in [Build the SD Card Image](README.md#build-the-sd-card-image) from the README but in the end run the command:
|
||||
|
||||
`wget --no-cache https://raw.githubusercontent.com/[GITHUB-USERNAME]/raspiblitz/[BRANCH]/build_sdcard.sh && sudo bash build_sdcard.sh false false [GITHUB-USERNAME] [BRANCH] lcd true true`
|
||||
|
||||
If you are then working in your forked repo and want to update the scripts on your RaspiBlitz with your latest repo changes, run `/home/admin/XXsyncScripts.sh` - That's OK as long as you don't make changes to the SD card build script - for that you would need to build a fresh SD card again from your repo.
|
||||
|
||||
## How can I checkout a new branch from the RaspiBlitz repo to my forked repo?
|
||||
|
||||
You need to have your forked repo checked-out on your laptop. There your should see your forked repo as `origin` when you run `git remote -v`. If you don't see an additional `upstream` remote yet, then create it with the following command: `git remote add upstream https://github.com/rootzoll/raspiblitz.git`.
|
||||
|
||||
So, first checkout the new branch named `BRANCH` from the original RaspBlitz repo to your local computer with: `git fetch upstream` and then `git checkout -b BRANCH upstream/BRANCH`.
|
||||
|
||||
Now push the new branch to your forked GitHub repo with `git push -u origin BRANCH`.
|
||||
|
||||
Once the branch is available and synced between the RaspiBlitz GitHub repo, your forked GitHub repo and your local computer git repo, you can start developing.
|
||||
|
||||
## How can I sync a branch of my forked GitHub with my local RaspiBlitz?
|
||||
|
||||
Since v1.5 of RaspiBlitz there has been an easy way thru the SSH menus: Under `MAIN MENU > UPDATE > PATCH` you have the option to change the GitHub repository and and branch to sync with. You change the GitHub Reposity by setting the GitHub username where you forked the Repo.
|
||||
|
||||
So for example: If you forked the RaspiBlitz project (rootzoll/raspiblitz) on GitHub and your GitHub project page is now called: https://github.com/raumi75/raspiblitz ... then just change the repo to sync/patch with to your username `raumi75`.
|
||||
|
||||
Now you can use the `Patch/Sync RaspiBlitz with GitHub Repo` to easily keep your RaspiBlitz in sync with your forked repository and develop your own customizations and features.
|
||||
|
||||
Background info and doing it manually:
|
||||
|
||||
There is a git copy of the original RaspiBlitz GitHub repo on your physical RaspiBlitz in the folder `/home/admin/raspiblitz`. If you change into that folder and run `git remote -v` you can see the set origin repo.
|
||||
|
||||
You need to change that origin repo to your forked repo. You do that with:
|
||||
```
|
||||
git remote set-url origin [THE-URL-OF-YOUR-FORKED-REPO]
|
||||
```
|
||||
|
||||
Now to sync your branch namend BRANCH on your forked repo with your RaspiBlitz, you always just run:
|
||||
```
|
||||
/home/admin/XXsyncScripts.sh BRANCH
|
||||
```
|
||||
|
||||
So your workflow can go like this: You write code on your local computer. Commit to your local repo, push it to your forked repo and use the sync-script above to get the code to your RaspiBlitz.
|
||||
|
||||
## How contribute a feature/change from my forked branch back to the RaspiBlitz repo?
|
||||
|
||||
In the same way as described above, you can build a new feature or test a change. Once you have something ready that you want to contribute back, you make sure it's pushed to your forked GitHub repo, and then start a pull request from your forked repo to the RaspiBlitz repo.
|
||||
|
||||
See more info: https://yangsu.github.io/pull-request-tutorial/
|
||||
|
||||
## How can I help testing a Pull Request?
|
||||
|
||||
Make sure to have the correct base image.
|
||||
Then go to the command line and create a branch for the PR:
|
||||
|
||||
```
|
||||
cd /home/admin/raspiblitz
|
||||
git fetch origin pull/[PRNUMBER]/head:pr[PRNUMBER]
|
||||
git checkout pr[PRNUMBER]
|
||||
cd /home/admin
|
||||
./XXsyncScripts.sh -justinstall
|
||||
```
|
||||
|
||||
Now you have the code of the PR active - depending on what scripts are changed you might need to reboot.
|
||||
|
||||
To change back to the code:
|
||||
```
|
||||
./XXsyncScripts.sh master
|
||||
```
|
||||
|
||||
## How to attach the RaspberryPi to the HDD?
|
||||
|
||||
Try a rubber band.
|
||||
|
||||
## What other case options do I have?
|
||||
|
||||
You can put the heatsink-case (top-part mentioned in the shopping lists) into a customized 3D printed case for the RaspiBlitz called "Lightning Shell" - great work by @CryptoCloaks
|
||||
|
||||
https://www.cryptocloaks.com/product/lightningshell/ (Delivery from USA)
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
Also there is the ZKDS metal case available that also needs some extra hardware (SATA-USB expansion board and USB bridge).
|
||||
|
||||
https://diynodes.com (delivery from UK)
|
||||
|
||||

|
||||
|
||||
## Are those "Under-Voltage detected" warnings a problem?
|
||||
|
||||
When your USB power adapter for the RaspiBlitz delivers too low of a power level, those messages with "Under-Voltage detected" (under-voltage) are shown on the display. This can lead to data loss/corruption on the HDD. If you see this just one or two times it's not OK, but can be in a tolerant window. Nevertheless it is important to make sure that your USB power adapter can deliver at least 3A (big and stable is good). If you still see those warnings maybe get a second USB Power adapter just for the HDD, and power the HDD through a Y-Cable - see https://en.wikipedia.org/wiki/Y-cable#USB or put a USB Hub with extra power between the Raspberry and the HDD.
|
||||
|
||||
## Is using the prepared SD card image secure?
|
||||
|
||||
Using pre-built software almost always shifts trust to the one who made the binary. But at least you can check with the SHA checksum after downloading to verify that the image downloaded is really the one offered by the GitHub repo. To do so, make a quick check that your browser is really on the correct GitHub page, and that the HTTPS of the GitHub page is signed by 'DigiCert'. Then compare the SHA-256 string (always next to the download link of the image on the README) with the result of the command `shasum -a 256 [DOWNLOADED-FILE-TO-CHECK]` (Mac/Linux). Still, this is not optimal and if at least some people from the community request it, I will consider signing the download as an author for the future.
|
||||
|
||||
The best way would be to build the SD card yourself. You use the script `build_sdcard.sh` for this. Take a few minutes to check if you see anything suspicious in that build script and then follow the [README](README.md#build-the-sd-card-image) on this.
|
||||
|
||||
|
||||
## What is the process of creating a new SD card image release?
|
||||
|
||||
Work notes for the process of producing a new SD card image release:
|
||||
|
||||
* Start [`Ubuntu LIVE`](http://releases.ubuntu.com/18.04.3/ubuntu-18.04.3-desktop-amd64.iso) from USB stick on the Build Computer (press F12 on startup)
|
||||
* Connect to a secure WiFi (hardware switch on) or LAN
|
||||
* Download the latest RaspiOS-64bit (zip & sig file) namend in the [build_sdcard.sh](./build_sdcard.sh) and note the SHA256 checksum
|
||||
* From the browser `Show All Downloads` and from the context menu select `Open Containing Folder`
|
||||
* On that file manager open context (right click) on the white-space and select `Open in Terminal`
|
||||
* Compare the checksum with the one you just made note of, using `shasum -a 256 *.zip`
|
||||
* Install curl if needed `sudo apt-get install -f curl net-tools`
|
||||
* Check signature: `curl https://www.raspberrypi.org/raspberrypi_downloads.gpg.key | gpg --import && gpg --verify *.sig`
|
||||
* The result should say "correct signature" and the fingerprint should end with `8738 CD6B 956F 460C`
|
||||
* Insert an NTFS formatted USB stick and use the file manager to move all files to the USB
|
||||
* Use in file manager context on NTFS USB stick `extract here` to unzip
|
||||
* Connect SD card reader with a 8GB SD card
|
||||
* In the file manager open context on the .img-file, select `Open With Disk Image Writer` and write the image to the SD card
|
||||
* In the file manager open context on `boot` drive free space `open in terminal`
|
||||
* Run the commands: `touch ssh` and `exit`
|
||||
* Eject the `boot` and the `NTFS` volume
|
||||
* Connect a RaspiBlitz (without HDD) to network, insert sd card and power up
|
||||
* Find the IP of the RaspiBlitz (arp -a or check router)
|
||||
* In terminal `ssh pi@[IP-OF-RASPIBLITZ]`
|
||||
* Password is `raspberry`
|
||||
* Run the following command BUT REPLACE `[BRANCH]` with the branch-string of your latest version
|
||||
* `wget --no-cache https://raw.githubusercontent.com/rootzoll/raspiblitz/[BRANCH]/build_sdcard.sh && sudo bash build_sdcard.sh false true rootzoll [BRANCH] lcd true true`
|
||||
* Monitor/Check outputs for warnings/errors - install LCD
|
||||
* Login new with `ssh admin@[IP-OF-RASPIBLITZ]` (pw: raspiblitz) and run `./XXprepareRelease.sh`
|
||||
* Disconnect WiFi/LAN on build laptop (hardware switch off) and shutdown
|
||||
* Remove `Ubuntu LIVE` USB stick and cut power from the RaspberryPi
|
||||
* Connect USB stick with latest `TAILS` (make it stay offline)
|
||||
* Power on the Build Laptop (press F12 for boot menu)
|
||||
* Connect USB stick with GPG signing keys - decrypt drive if needed
|
||||
* Open Terminal and cd into directory of USB Stick under `/media/amnesia`
|
||||
* Run `gpg --import ./sub.key`, check and `exit`
|
||||
* Disconnect USB stick with GPG keys
|
||||
* Take the SD card from the RaspberryPi and connect with an external SD card reader to the laptop
|
||||
* Click on `boot` volume once in the file manger
|
||||
* Connect the NTFS USB stick, open in file manager and delete old files
|
||||
* Open Terminal and cd into directory of NTFS USB stick under `/media/amnesia`
|
||||
* Run `df` to check on the SD card device name (`boot` - ignore last partition number)
|
||||
* `dd if=/dev/[sdcarddevice] | gzip > ./raspiblitz-vX.X-YEAR-MONTH-DAY.img.gz`
|
||||
* When finished you should see that more then 7GB were copied
|
||||
* Then run `shasum -a 256 *.gz > sha256.txt`
|
||||
* Sign with `gpg --output raspiblitz-vX.X-YEAR-MONTH-DAY.img.gz.sig --detach-sign *.gz`
|
||||
* Shutdown build computer
|
||||
* Connect the NTFS USB stick to MacOS (it is just read-only)
|
||||
* Run tests on the new image
|
||||
* Upload the new image to the Download Server - put sig-file next to it
|
||||
* Copy SHA256-String into GitHub README and update the download link
|
||||
|
||||
## How do I return to the menu after exiting to the command line
|
||||
|
||||
Type the command `raspiblitz` to return to the main menu if you exited to the command line.
|
||||
|
||||
## Can I run RaspiBlitz on other computers than RaspberryPi?
|
||||
|
||||
There is an experimental section in this GitHub that tries to build for other SingleBoardComputers. Feel free to try it out and share your experience: [alternative.platforms/README.md](alternative.platforms/README.md)
|
||||
|
||||
## Can I flip the screen?
|
||||
|
||||
There is now an option under `SETTINGS` to rotate the screen.
|
||||
|
||||
To do it manually: For the default 3.5" LCD you need to edit the /boot/config.txt. Run `sudo nano /boot/config.txt`
|
||||
Look for the line `dtoverlay=tft35a:rotate=270` towards the end. To flip the screen with 180 degrees change the line to `dtoverlay=tft35a:rotate=90` and reboot with `sudo reboot`. Reference: https://github.com/goodtft/LCD-show/issues/34
|
||||
|
||||
## How do I setup fresh/clean/reset and without going into recovery mode?
|
||||
|
||||
When you put in a SD card with a new/clean RaspiBlitz image the RaspiBlitz will go into recovery mode because it detects the old data on your HDD and assumes you just want to continue to work with this data.
|
||||
|
||||
But there might be cases where you want to start a totally fresh/clean RaspiBlitz from the beginning. To do so you need to delete the old data from the HDD. Choose the option `RESET-ALL` under `REPAIR` to delete all data and start fresh.
|
||||
|
||||
When the HDD is clean, then flash a new RaspiBlitz sd card and your setup should start fresh.
|
||||
|
||||
## My blockchain data is corrupted - what can I do?
|
||||
|
||||
You could try to re-index, but that can take a very long time - multiple days or even weeks. But there are other options:
|
||||
|
||||
1. Get new Blockchain
|
||||
|
||||
Use `REPAIR` in the SSH main menu and then choose `RESET-CHAIN`. Then you get offered multiple options to get new blockchain data.
|
||||
|
||||
2. Backup LND Data, make fresh Blitz, Replay LND Data
|
||||
|
||||
You can backup your channel and wallet data, make a complete fresh RaspiBlitz and after that is setup, you replace the LND data with your old data. Also make sure to check again on your power supply - it needs to deliver equal or more then 3A, and should deliver a stable current. If you think your HDD or SD card is degrading - maybe this is a good time to replace it. See for details the FAQ question: [How can I recover my coins from a failing RaspiBlitz?](FAQ.md#how-can-i-recover-my-coins-from-a-failing-raspiblitz)*
|
||||
|
||||
## Can I run the RaspiBlitz without a display/LCD?
|
||||
|
||||
The display is one of the nice features of the RaspiBlitz but it can run without it. Maybe not all the add-on features can be used to the full extent, but you can get started without the LCD and if you wish, plug it on later.
|
||||
|
||||
If you want to use the HDMI output you can place a file called `hdmi` on the `boot` section of the RaspiBlitz sd card ... just connect the sd card to your laptop, create that file and then boot it up in the RaspberryPi.
|
||||
|
||||
If you are already logged in you can use on the console the commands:
|
||||
|
||||
- `hdmi` --> switch to HDMI
|
||||
- `lcd` --> switch to LCD
|
||||
|
||||
## How do I set up VNC?
|
||||
|
||||
Enter the Console/Terminal by selecting the last option from the Raspiblitz menu.
|
||||

|
||||
|
||||
Enable the VNC server using raspi-config:
|
||||
|
||||
`sudo raspi-config`
|
||||
|
||||
In the menu, go to
|
||||
*Interfacing Options > VNC > Enable*
|
||||

|
||||
|
||||
After that reboot the Raspiblitz. You can do this easily from the Raspiblitz menu.
|
||||
In the command line, type:
|
||||
`menu`
|
||||
The Raspiblitz menu has a reboot option if you scroll down. Select it and reboot.
|
||||
|
||||

|
||||
|
||||
|
||||
After the Raspiblitz is rebooted, set a password for the VNC Server:
|
||||
`sudo vncpasswd -service`
|
||||
|
||||
Set the Authentication parameter:
|
||||
`sudo echo "Authentication=VncAuth" > /etc/vnc/config.d/common.custom`
|
||||
|
||||
Restart the VNC Server for settings to take effect:
|
||||
`sudo systemctl restart vncserver-x11-serviced`
|
||||
|
||||
Open the relevant port in the firewall (ufw):
|
||||
`sudo ufw allow vnc`
|
||||
|
||||
Start the VNC server from the Raspiblitz:
|
||||
`vncserver`
|
||||
This will run by default in the display number '1'. If you want to specify another number, run this (change *\<display-number\>* to whatever you prefer):
|
||||
`vncserver :<display-number>`
|
||||
|
||||

|
||||
|
||||
From the VNC client (e.g. your PC, laptop), connect to the IP that the previous command has displayed in the screen (I covered it in pink in the screenshot). If everything is alright, you can see the display from the VNC client now.
|
||||
|
||||
In order to stop broadcasting your display, stop the server from the Raspiblitz with this:
|
||||
`vncserver -kill :<display-number>`
|
||||
|
||||
For example:
|
||||
`vncserver -kill :1`
|
||||
|
||||
|
||||
**Note**: You may have to set the resolution through raspi-config in certain situations:
|
||||
`sudo raspi-config`
|
||||
*Advanced Options > Resolution*
|
||||
|
||||
**Hint**: From macOS, there is a built in VNC client hidden away at: /System/Library/CoreServices/Applications/Screen\ Sharing.app
|
||||
|
||||
**Hint 2**: Find more info about VNC in Raspberry [here](https://www.raspberrypi.org/documentation/remote-access/vnc/).
|
||||
|
||||
## I have two RaspiBlitz in my network - can they both be public?
|
||||
|
||||
Yes but you need to change the port number (for example to 9736) on at least one of your RaspiBlitzes - see how to change a port below. Then you can forward both ports from your home internet router to the matching RaspiBlitzes.
|
||||
|
||||
## How do I change the public port LND/Lightning node is running on?
|
||||
|
||||
There is a experimental script you can call from the terminal that will make all changes for you ... see details here: https://github.com/rootzoll/raspiblitz/issues/100#issuecomment-466722712
|
||||
|
||||
## How do I solve a "signature mismatch after caveat verification" error?
|
||||
|
||||
If you get this error by LND it means that something is wrong with the macaroons being used to communicate with LND .. see: https://github.com/lightningnetwork/lnd/blob/master/docs/macaroons.md
|
||||
|
||||
Fixing this depends on where you get this error:
|
||||
|
||||
* If you get it in a mobile wallet, then redo the connection with the RaspiBlitz to get fresh macaroons.
|
||||
* If you get this from RTL or from the scripts of the SSH menus of the RaspiBlitz, then go to "EXPORT Macacroons and TLS.cert" in SSH main menu and choose the the "RESET Macaroons & TLS" option.
|
||||
|
||||
Also make sure to check again on your power supply - it needs to deliver equal or more then 3A and should deliver a stable current. If you think your HDD is degrading - maybe this is a good time to replace it. See for details the FAQ question: [How can I recover my coins from a failing RaspiBlitz?](FAQ.md#how-can-i-recover-my-coins-from-a-failing-raspiblitz)
|
||||
|
||||
## Why is my node not routing?
|
||||
|
||||
1. You don't have inbound liquidity
|
||||
2. Low uptime
|
||||
3. Capital is committed to competitive destinations
|
||||
4. Capital committed to destinations no one wants to send to
|
||||
5. Fees are too high
|
||||
6. Your inbound liquidity doesn't have good inbound liquidity itself
|
||||
|
||||
## How can I update LND or bitcoind even before the next RaspiBlitz update?
|
||||
|
||||
Try updating before a official RaspiBlitz at your own risk - you can find some info about that here:
|
||||
https://stadicus.github.io/RaspiBolt/raspibolt_faq.html#how-to-upgrade-bitcoin-core
|
||||
|
||||
## I cannot connect via SSH to my RaspiBlitz. What do I do?
|
||||
|
||||
- Check the command again with how it shows on the display - do you have it typed in correctly?
|
||||
- Replace `ssh` with `sudo ssh` and try it (laptop admin password might be required).
|
||||
|
||||
If that doesn't work, try to ping the IP of the RaspiBlitz with `ping [IP-of-RaspiBlitz]`. If you get no response on the ping requests and the device is not reachable, try this check list:
|
||||
|
||||
- Make sure that your RaspiBlitz and your laptop are really on the same local network
|
||||
- Check if you have a VPN running on your laptop - some VPNs block local network
|
||||
- Some Routers have `IP Isolation` switched on - not allowing two devices to connect
|
||||
|
||||
If you've checked those and SSH is still not working: Join the conversation on [GitHub Issue #420](https://github.com/rootzoll/raspiblitz/issues/420).
|
||||
|
||||
## How to setup port-forwarding with a SSH tunnel?
|
||||
|
||||
To use a public server for port-forwarding thru a SSH tunnel you can use the following experimental script on the RaspiBlitz (since v1.2):
|
||||
|
||||
`/home/admin/config.scripts/internet.sshtunnel.py`
|
||||
|
||||
But first you need to make sure that the public server you are using is supporting SSH reverse-tunneling and authentication by public authorized key. Check the `/etc/ssh/sshd_config` on the public server. It should contain the following settings:
|
||||
|
||||
```
|
||||
RSAAuthentication yes
|
||||
PubkeyAuthentication yes
|
||||
GatewayPorts yes
|
||||
AllowTcpForwarding yes
|
||||
ClientAliveInterval 60
|
||||
ClientAliveCountMax 2
|
||||
```
|
||||
|
||||
*Last two parameters were added as used in the ssh tunnel demo at #GPN19 https://media.ccc.de/v/gpn19-76-einen-server-daheim-ohne-ffentliche-ipv4-adresse#t=911*
|
||||
|
||||
You can add those at the end of the file, save and reboot.
|
||||
|
||||
On the RaspiBlitz you can then setup for example to forward the gRPC port 10009 (internal port) to the port 20009 on the public server (external port) with the user = `test` and server address = `raspiblitz.com` with the following command:
|
||||
|
||||
`/home/admin/config.scripts/internet.sshtunnel.py on test@raspiblitz.com "10009<20009"`
|
||||
|
||||
You can even set multiple port forwardings like with:
|
||||
|
||||
`/home/admin/config.scripts/internet.sshtunnel.py on test@raspiblitz.com "10009<20009" "8080<9090"`
|
||||
|
||||
Please be aware that after you set such a port forwarding you will need to set the domain of the public server as a `DynamicDNS` name (leave update url empty) and then connect mobile wallets fresh, or export the macaroons/certs again. When connecting the mobile wallets you may need to adjust ports manually after QR code scan. And if you SSH tunnel the LND node port `9735` you may also need to set the custom LND port script and maybe also a manual set of the domain in the LND service would be needed. This all is very experimental at the moment ... better integration will come in the future.
|
||||
|
||||
To switch this SSH tunneling off again use:
|
||||
|
||||
`/home/admin/config.scripts/internet.sshtunnel.py off` and also deactivate the DynamicDNS again.
|
||||
|
||||
To check if a tunnel is running on the tunneling server check: `netstat -tulpn`
|
||||
|
||||
## How do I setup just a port-forwarding user on my public server?
|
||||
|
||||
Make sure the `/etc/ssh/sshd_config` has the following lines at the end:
|
||||
|
||||
```
|
||||
RSAAuthentication yes
|
||||
PubkeyAuthentication yes
|
||||
GatewayPorts yes
|
||||
AllowTcpForwarding yes
|
||||
AuthorizedKeysFile /etc/ssh/authorized_keys/%u
|
||||
```
|
||||
|
||||
The last one stores all authorized_keys in one directory with a file per user. See https://serverfault.com/questions/313465/is-a-central-location-for-authorized-keys-a-good-idea#424659 To prepare this run:
|
||||
```
|
||||
mkdir /etc/ssh/authorized_keys
|
||||
groupadd forwardings
|
||||
```
|
||||
|
||||
To add a forwarding user run:
|
||||
```
|
||||
useradd -g forwardings -d /home [USERNAME]
|
||||
echo 'command="date" [CONTENT-OF-RASPIBLITZ-ROOT-SSH-PUBKEY]' > /etc/ssh/authorized_keys/[USERNAME]
|
||||
```
|
||||
|
||||
The `[CONTENT-OF-RASPIBLITZ-ROOT-SSH-PUBKEY]` you get when running the `internet.sshtunnel.py` script on the RaspiBlitz (see above). Now restart the RaspiBlitz. The server should not need a restart after adding a additional forwarding user.
|
||||
|
||||
To check if a tunnel is running on on server check: `netstat -tulpn`
|
||||
|
||||
To check for any errors on RaspiBlitz after restart check logs: `sudo journalctl -f -u autossh-tunnel.service`
|
||||
|
||||
## How do I connect a UPS to the RaspiBlitz?
|
||||
|
||||
A UPS (Uninterruptible Power Supply) is used to protect the RaspiBlitz against power outages. Normally you put it just between your normal power outlet and your RaspiBlitz and you are set. But some UPS offer a way to communicate with devices. This can be very useful for example if on a longer power outage the battery of the UPS runs low the RaspiBlitz could detect this and power down in a clean way - instead of a sudden stop that risks data loss or corruption.
|
||||
|
||||
There is an experimental script to connect the RaspiBlitz to a UPS over USB cable build by APC - the Model tested with was [APC Back-UPS BX - BX700U-GR](https://www.amazon.de/APC-Back-UPS-Unterbrechungsfreie-Stromversorgung-BX700U-GR/dp/B00T7BYRCK) but it should work with every APC model offering a USB port.
|
||||
|
||||
To turn it on run from terminal: `/home/admin/config.scripts/blitz.ups.sh on apcusb`
|
||||
|
||||
If you have other UPS models or ways to connect ... feel free to extend this script.
|
||||
|
||||
## Why use BTRFS on RaspiBlitz?
|
||||
|
||||
The file system [BTRFS](https://de.wikipedia.org/wiki/Btrfs) for your HDD/SSD provides two new features to make the data storage more resilient:
|
||||
|
||||
### Storing your important Data in RAID1 with a USB Thumb Drive
|
||||
|
||||
BTRFS comes with build in RAID features - that means that data can be stored on two physical drives at the same time and if one is failing the other one can be used to heal the other one or its replacement.
|
||||
|
||||
For the Raspiblitz this means that you can connect an additional 32GB USB3 Thumb Drive (under 10 USD) and have it running in a RAID with your HDD/SSD - keeping your LND channel data and all other important data of your RaspiBlitz double-safe.
|
||||
|
||||
### Snapshotting the Blockchain
|
||||
|
||||
BTRFS comes with a build in snapshot feature - that means that your RaspiBlitz can make every day a backup of the blockchain data and if a blockchain corruption occurs (exmaple thru a power outage) there is no need to sync the complete chain again. Just switch back to the last backup state and quickly sync up from there. On BTRFS such backups can be done as snapshots that dont need much more space on the drive and are quickly done - no need to buy a bigger SSD or wait for copying over 200GB.
|
||||
|
||||
## How do I use BTRFS on RaspiBlitz?
|
||||
|
||||
Because the BTRFS is still experimental it's a bit hidden. There are two ways to activate:
|
||||
|
||||
- When you start a fresh setup just connect a 32GB Thumb Drive on the second USB3 port from the beginning and you should be asked during HDD setup if you want to try out BTRFS and gave the Thumb Drive as RAID1.
|
||||
|
||||
- If you have a existing RaspiBlitz and you want to switch to BTRFS then you need to export a Migration File (MAINMENU > REPAIR > MIGRATION) an then format your HDD/SSD clean. When you import a Migration File during a fresh Setup (see above) you will get the option to format the HDD/SSD with BTRFS.
|
||||
|
||||
Once the Blitz is running on BTRFS you can use the '/home/admin/config.scripts/blitz.datadrive.sh' script to add a RAID drive or make a snapshot.
|
||||
|
||||
## How to recover a BTRFS partition?
|
||||
|
||||
This articles goes thru the usual options:
|
||||
https://ownyourbits.com/2019/03/03/how-to-recover-a-btrfs-partition/
|
||||
https://seravo.fi/2015/using-raid-btrfs-recovering-broken-disks
|
||||
|
||||
## How do I fix a displayed Error in my Config?
|
||||
|
||||
When the LCD display is telling you to do a config check:
|
||||
- go to the RaspiBlitz terminal (X on main menu) and run './XXsyncScripts.sh'
|
||||
- start reboot with command: './XXshutdown.sh reboot'
|
||||
- go to the RaspiBlitz terminal run the command: 'check'
|
||||
- now edit the RaspiBlitz config and get rid of the errors: 'nano /mnt/hdd/raspiblitz.conf'
|
||||
- save config with: CTRL+o
|
||||
- exit nano editor with: CTRL+x
|
||||
- start reboot with command: './XXshutdown.sh reboot'
|
||||
|
||||
## How to fix my upside down LCD after update?
|
||||
|
||||
Some displays have a different orientation. To fix this activate/deactivate the LCD-ROTATION option in the MAINMENU > SERVICES and let it reboot. You might need to do this up to 3 times until your display works correctly.
|
||||
|
||||
## How can I repair my SSH login?
|
||||
|
||||
If you cannot login via SSH into your RaspiBlitz your SSH RaspiBlitz certs might be corrupted. To renew and reset those do the following (since version 1.5):
|
||||
|
||||
- shutdown the RaspiBlitz - if you dont have touchscreen activated, disconnect LAN cable, wait until HDD/SSD activity slows down (no constant blinking) and then cut the power
|
||||
- take out the SD card and connect it to your laptop - it should appear as a `boot` drive
|
||||
- in the root directory of that `boot` drive create a file called `ssh.reset`
|
||||
- that file can be empty or just copy another file on that drive and rename it ()
|
||||
- eject the drive from your laptop safely
|
||||
- put SD card back into the RaspiBlitz (also make sure LAN cable is connected again)
|
||||
- power up - the RaspiBlitz should boot up & reboot again
|
||||
- then try again to SSH login
|
||||
|
||||
If you see a "REMOTE HOST IDENTIFICATION HAS CHANGED!" warning on login, that's what we wanted - the SSH cert of your RaspiBlitz changed - thats good. We just need to remove the old one from our laptop first - on OSX you can use `rm ~/.ssh/known_hosts` (deletes all cached server certs) or remove the line with your RaspiBlitz IP manually from the `~/.ssh/known_hosts` file with a text editor.
|
||||
|
||||
## How to use the Let's Encrypt client
|
||||
|
||||
The [Let's Encrypt](https://letsencrypt.org/) client software [acme.sh](https://github.com/acmesh-official/acme.sh) is
|
||||
included (since v1.6) and can be used to create TLS certificates that are signed by the Certificate Authority (*Root
|
||||
CA*) **Let's Encrypt** and which are therefore trusted on all modern platforms.
|
||||
|
||||
In order to successfully get a signed certificate you need to **verify ownership** over a **DNS domain** or a **full
|
||||
qualified domain name** (**FQDN**). Currently Let's Encrypt **doesn't** issue certificates for IP addresses. The two
|
||||
most common standards for verification of control are `HTTP-01` and `DNS-01`.
|
||||
|
||||
The **acme.sh** client supports both modes and has a large number of DNS services (more than 50) it can interact with.
|
||||
More details can be found on the [acme.sh wiki](https://github.com/acmesh-official/acme.sh/wiki).
|
||||
|
||||
### Let's Encrypt - HTTP-01
|
||||
|
||||
To use `HTTP-01` your RaspiBlitz needs to be accessible directly from the Internet on a **public IP address** on **port
|
||||
80**. If you don't have a public IPv4/IPv6 IP on either `eth0` or `wlan0` then it might be possible to use **NAT port
|
||||
forwarding** or an **autossh-tunnel** to fulfill this requirement.
|
||||
|
||||
If everything (this includes creating a `DNS A` or `DNS CNAME` record that points to a static or dynamic IP address) is
|
||||
set up so that the Let's Encrypt servers can reach your RaspiBlitz on port 80 then the following command will perform
|
||||
the initial creation of a signed certificate and will also store the configuration data needed to regularly refresh it.
|
||||
Just run this once and then lean back and forget about it. :-D
|
||||
|
||||
```
|
||||
~/.acme.sh/acme.sh --keylength ec-256 --issue -d hostname.example.com -w /var/www/letsencrypt/
|
||||
```
|
||||
|
||||
### Let's Encrypt - DNS-01
|
||||
|
||||
The `DNS-01` standard **proves ownership** by creating `DNS TXT` records on the domain or subdomain you want to use.
|
||||
This requires interaction with and access to a dns server but comes with the benefit that `wildcard certificates`
|
||||
can be issued.
|
||||
|
||||
It is beyond the scope of this FAQ entry to explain all details of this - please refer to the official documentation.
|
||||
Assuming you are using the [DuckDNS](https://www.duckdns.org/) dynamic DNS service then the following command will
|
||||
get a certificate (including a wildcard subject alternative name (**SAN**) listing). It will also take care of continuous
|
||||
renewals.
|
||||
|
||||
```
|
||||
export DuckDNS_Token="abcdefgh-0123-56ij-78kl-abcd9012efgh"
|
||||
~/.acme.sh/acme.sh --issue --keylength ec-256 --dns dns_duckdns -d hostname.duckdns.org -d *.hostname.duckdns.org
|
||||
```
|
||||
|
||||
As mentioned, more that 50 other services (including self-hosted options like e.g. `nsupdate` or `PowerDNS`) are supported.
|
||||
|
||||
### Let's Encrypt - eMail Address
|
||||
|
||||
The installation process of the `acme.sh` client includes a prompt for an eMail address. The data entered there is
|
||||
stored in the `accounts.conf` file as `ACCOUNT_EMAIL`. This address is used by Let's Encrypt to notify you about
|
||||
the expiry of certificates (which is not really needed as renewals are automated) and also about changes to their
|
||||
**Terms of Service**. For more details please check their [privacy policy](https://letsencrypt.org/privacy/).
|
||||
|
||||
It is currently considered completely fine to leave this field empty and not provide an eMail address.
|
||||
|
||||
### Let's Encrypt - Installation details
|
||||
|
||||
The `acme.sh` script is installed in `/home/admin/.acme.sh/` - the configuration and the certificates are stored on the
|
||||
external hard disk in `/mnt/hdd/app-data/letsencrypt`.
|
||||
|
||||
### How can I customize my RaspiBlitz or add other software?
|
||||
|
||||
The RaspiBlitz is your computer to experiment with. Feel free to add your own scripts, edit the system or install further software from the command line. Just keep in mind that after an update/recovery the RaspiBlitz starts with a fresh and clean operating system again. So all your editings and installs might be gone. To prevent this you should do the following:
|
||||
|
||||
- place your own scripts and data that should survive an update/recovery into the `/mnt/hdd/app-data` directory
|
||||
- put all install commands & modification of the system into the script `/mnt/hdd/app-data/custom-installs.sh` which will be started automatically on a recovery/update.
|
||||
|
||||
# Versioning
|
||||
|
||||
* Major Updates: 1.0.0, 2.0.0, 3.0.0, ... are epic updates signaling that the software reached a new era.
|
||||
* Main Updates: 1.1.0, 1.2.0, 1.3.0, ... are breaking updates - the reflashing of the sd ard is mandatory.
|
||||
* Minor Updates: 1.1.0, 1.2.0, 1.3.0, ... are soft updates - can be done by 'patching' the scripts & code, but new sd card reflash is still advised.
|
||||
|
||||
# GitHub Workflow
|
||||
|
||||
- Development is done on the 'dev' branch, new features should be done on single feature branches and merged into 'dev' once ready.
|
||||
- When a release of a new main-update (see above) comes closer, a new release branch gets created from 'dev' with the first release candidate - the RCs and the final release sd card will be build from this branch.
|
||||
- All minor-releases will basically all work with the same 'build_sdcard.sh' script so that the code could be updated by just calling 'patch'. Emergency updates on lnd & bitcoin may break this guideline, but basic structure & packaging should stay mostly consistent over a main-update version.
|
||||
- Once a release is ready, that release branch will be set as the "default" branch on GitHub (so its shown as main page)
|
||||
- Hot fixes & new features for minor verisons will be created as single branches from the release branch, and once ready will be merged back into that release branch as a Pull Request using 'Squash-Merge' AND then, this 'Squash-Merge' (one single commit) will get cherry-picked into the 'dev' branch ('git cherry-pick COMMITHASH' - may call 'git fetch' & 'git pull' before to make a clean cherry-pick into dev).
|
||||
|
||||
|
||||
# How do I find the IP address when running without a display?
|
||||
|
||||
If you can login into your local internet router it should show you the IP address assigned to the RaspberryPi.
|
||||
|
||||
Another way is to use [Angry IP Scanner](https://angryip.org/) to find the IP address.
|
||||
|
||||
You can also put an empty file just called `hdmi` (without any ending) onto the sd card when connected to your laptop and then start it up on the RaspberryPi. This will activate the HDMI port and if you connect a HDMI monitor to the RaspberryPi it will show you the RaspiBlitz status screen containing the local IP address.
|
||||
|
||||
|
4
LICENSE
@ -1,6 +1,6 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2018 The RaspiBlitz developers
|
||||
Copyright (c) 2018-2022 The RaspiBlitz developers
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
THE SOFTWARE.
|
||||
|
127
Makefile
Normal file
@ -0,0 +1,127 @@
|
||||
SHELL = /bin/bash
|
||||
GITHUB_ACTOR = $(shell git remote -v | grep origin | head -1 | cut -d/ -f4)
|
||||
GITHUB_HEAD_REF = $(shell git rev-parse --abbrev-ref HEAD)
|
||||
|
||||
amd64-lean-desktop-uefi-image:
|
||||
# Run the build script
|
||||
cd ci/amd64 && \
|
||||
sudo bash packer.build.amd64-debian.sh \
|
||||
--pack lean \
|
||||
--github_user $(GITHUB_ACTOR) \
|
||||
--branch $(GITHUB_HEAD_REF) \
|
||||
--preseed_file preseed.cfg \
|
||||
--boot uefi \
|
||||
--desktop gnome
|
||||
|
||||
# Compute the checksum of the qemu image
|
||||
cd ci/amd64/builds/raspiblitz-amd64-debian-lean-qemu && \
|
||||
sha256sum raspiblitz-amd64-debian-lean.qcow2 > raspiblitz-amd64-debian-lean.qcow2.sha256
|
||||
|
||||
# Compress the image
|
||||
cd ci/amd64/builds/raspiblitz-amd64-debian-lean-qemu && \
|
||||
gzip -v9 raspiblitz-amd64-debian-lean.qcow2
|
||||
|
||||
# Compute the checksum of the compressed image
|
||||
cd ci/amd64/builds/raspiblitz-amd64-debian-lean-qemu && \
|
||||
sha256sum raspiblitz-amd64-debian-lean.qcow2.gz > raspiblitz-amd64-debian-lean.qcow2.gz.sha256
|
||||
|
||||
# List the generated files
|
||||
ls -lah ci/amd64/builds/raspiblitz-amd64-debian-lean-qemu/raspiblitz-amd64-debian-lean.qcow2.*
|
||||
|
||||
amd64-lean-server-legacyboot-image:
|
||||
# Run the build script
|
||||
cd ci/amd64 && \
|
||||
sudo bash packer.build.amd64-debian.sh \
|
||||
--pack lean \
|
||||
--github_user $(GITHUB_ACTOR) \
|
||||
--branch $(GITHUB_HEAD_REF) \
|
||||
--preseed_file preseed.cfg \
|
||||
--boot bios-256k.bin \
|
||||
--desktop none
|
||||
|
||||
# Compute the checksum of the qemu image
|
||||
cd ci/amd64/builds/raspiblitz-amd64-debian-lean-qemu && \
|
||||
sha256sum raspiblitz-amd64-debian-lean.qcow2 > raspiblitz-amd64-debian-lean.qcow2.sha256
|
||||
|
||||
# Compress the image
|
||||
cd ci/amd64/builds/raspiblitz-amd64-debian-lean-qemu && \
|
||||
gzip -v9 raspiblitz-amd64-debian-lean.qcow2
|
||||
|
||||
# Compute the checksum of the compressed image
|
||||
cd ci/amd64/builds/raspiblitz-amd64-debian-lean-qemu && \
|
||||
sha256sum raspiblitz-amd64-debian-lean.qcow2.gz > raspiblitz-amd64-debian-lean.qcow2.gz.sha256
|
||||
|
||||
# List the generated files
|
||||
ls -lah ci/amd64/builds/raspiblitz-amd64-debian-lean-qemu/raspiblitz-amd64-debian-lean.qcow2.*
|
||||
|
||||
amd64-fatpack-desktop-uefi-image:
|
||||
# Run the build script
|
||||
cd ci/amd64 && \
|
||||
sudo bash packer.build.amd64-debian.sh \
|
||||
--pack fatpack \
|
||||
--github_user $(GITHUB_ACTOR) \
|
||||
--branch $(GITHUB_HEAD_REF) \
|
||||
--preseed_file preseed.cfg \
|
||||
--boot uefi \
|
||||
--desktop gnome
|
||||
|
||||
# Compute the checksum of the qemu image
|
||||
cd ci/amd64/builds/raspiblitz-amd64-debian-fatpack-qemu && \
|
||||
sha256sum raspiblitz-amd64-debian-fatpack.qcow2 > raspiblitz-amd64-debian-fatpack.qcow2.sha256
|
||||
|
||||
# Compress the image
|
||||
cd ci/amd64/builds/raspiblitz-amd64-debian-fatpack-qemu && \
|
||||
gzip -v9 raspiblitz-amd64-debian-fatpack.qcow2
|
||||
|
||||
# Compute the checksum of the compressed image
|
||||
cd ci/amd64/builds/raspiblitz-amd64-debian-fatpack-qemu && \
|
||||
sha256sum raspiblitz-amd64-debian-fatpack.qcow2.gz > raspiblitz-amd64-debian-fatpack.qcow2.gz.sha256
|
||||
|
||||
# List the generated files
|
||||
ls -lah ci/amd64/builds/raspiblitz-amd64-debian-lean-qemu/raspiblitz-amd64-debian-fatpack.qcow2.*
|
||||
|
||||
arm64-rpi-lean-image:
|
||||
# Run the build script
|
||||
cd ci/arm64-rpi && \
|
||||
sudo bash packer.build.arm64-rpi.local.sh \
|
||||
--pack lean \
|
||||
--github_user $(GITHUB_ACTOR) \
|
||||
--branch $(GITHUB_HEAD_REF)
|
||||
|
||||
# Compute the checksum of the raw image
|
||||
cd ci/arm64-rpi/packer-builder-arm && \
|
||||
sha256sum raspiblitz-arm64-rpi-lean.img > raspiblitz-arm64-rpi-lean.img.sha256
|
||||
|
||||
# Compress the image
|
||||
cd ci/arm64-rpi/packer-builder-arm && \
|
||||
gzip -v9 raspiblitz-arm64-rpi-lean.img
|
||||
|
||||
# Compute the checksum of the compressed image
|
||||
cd ci/arm64-rpi/packer-builder-arm && \
|
||||
sha256sum raspiblitz-arm64-rpi-lean.img.gz > raspiblitz-arm64-rpi-lean.img.gz.sha256
|
||||
|
||||
# List the generated files
|
||||
ls -lah ci/arm64-rpi/packer-builder-arm/raspiblitz-arm64-rpi-lean.img.*
|
||||
|
||||
arm64-rpi-fatpack-image:
|
||||
# Run the build script
|
||||
cd ci/arm64-rpi && \
|
||||
bash packer.build.arm64-rpi.local.sh \
|
||||
--pack fatpack \
|
||||
--github_user $(GITHUB_ACTOR) \
|
||||
--branch $(GITHUB_HEAD_REF)
|
||||
|
||||
# Compute the checksum of the raw image
|
||||
cd ci/arm64-rpi/packer-builder-arm && \
|
||||
sha256sum raspiblitz-arm64-rpi-fatpack.img > raspiblitz-arm64-rpi-fatpack.img.sha256
|
||||
|
||||
# Compress the image
|
||||
cd ci/arm64-rpi/packer-builder-arm && \
|
||||
gzip -v9 raspiblitz-arm64-rpi-fatpack.img
|
||||
|
||||
# Compute the checksum of the compressed image
|
||||
cd ci/arm64-rpi/packer-builder-arm && \
|
||||
sha256sum raspiblitz-arm64-rpi-fatpack.img.gz > raspiblitz-arm64-rpi-fatpack.img.gz.sha256
|
||||
|
||||
# List the generated files
|
||||
ls -lah ci/arm64-rpi/packer-builder-arm/raspiblitz-arm64-rpi-fatpack.img.*
|
73
SECURITY.md
@ -1,73 +0,0 @@
|
||||
# Security Policy
|
||||
|
||||
*NOTE: This document is just a first draft and still under contruction.*
|
||||
|
||||
Only use this software with funds you could afford to lose. Especially a lightning wallet that is a hot wallet, which has constant connection to the internet and can be target of exploitation.
|
||||
|
||||
Just because the software is OpenSource does not mean its free of errors. Especially if you run additional apps, the RaspiBlitz team cannot review all the code of those external projects.
|
||||
|
||||
The software is provided "AS IS", without warrenty of any kind. In no event shall the
|
||||
authors or copyright holders be liable for any claim, damages or other
|
||||
liability. [details on legal license](LICENSE.md)
|
||||
|
||||
## Supported Versions
|
||||
|
||||
Updates are made only for the latest version.
|
||||
|
||||
Security patches can be done with `MAINMENU > UPDATE > PATCH` for the current branch in the case of a high risk issue before next release.
|
||||
|
||||
The latest version always have the `latest` tag. To make sure you are using the lastest version, run:
|
||||
```
|
||||
curl -s https://api.github.com/repos/rootzoll/raspiblitz/releases/latest|grep tag_name|head -1|cut -d '"' -f4
|
||||
```
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
To report security issues send an email to christian@rotzoll.de (not for support).
|
||||
|
||||
The following keys may be used to communicate sensitive information to developers:
|
||||
|
||||
| Name | Fingerprint | 64-bit |
|
||||
|------|-------------|--------|
|
||||
|Rootzoll|92A7 46AE 33A3 C186 D014 BF5C 1C73 060C 7C17 6461|1C73 060C 7C17 6461|
|
||||
|Openoms|13C6 88DB 5B9C 745D E4D2 E454 5BFB 7760 9B08 1B65|5BFB 7760 9B08 1B65|
|
||||
|
||||
You can import a key by running the following command with that individual’s fingerprint:
|
||||
```
|
||||
curl https://keybase.io/rootzoll/pgp_keys.asc | gpg --import
|
||||
curl https://keybase.io/oms/pgp_keys.asc | gpg --import
|
||||
```
|
||||
Ensure that you put quotes around fingerprints containing spaces if importing with other methods.
|
||||
|
||||
# Online Security
|
||||
|
||||
* Wi-fi and Bluetooth is disabled by default in the build script.
|
||||
* UFW is active and only specific ports are open, closing ports and removing hidden services when services are uninstalled.
|
||||
* Fail-2-Ban is protecting the SSH login against brute-force-attacks.
|
||||
* Admin (and Joinmarket [optional]) users have passwordless sudo access to be able to perform installations and read password without much user interaction.
|
||||
|
||||
# Physical Security
|
||||
|
||||
* The lightning wallet and user interfaces are password protected by default so this has more privacy implications (in the case of physical theft) than security.
|
||||
* Optional log in through SSH using a hardware wallet.
|
||||
* LUKS encryption would be welcome in the future.
|
||||
|
||||
# On-chain Funds
|
||||
|
||||
Please keep in mind that there can be two different on-chain wallets on the RaspiBlitz:
|
||||
|
||||
## Lightning Wallet (default)
|
||||
|
||||
The default is the on-chain lightning wallet - that's the wallet where you normally send your funds before opening a channel & where your funds return to when you close a channel. With the initial word seed you get during RaspiBlitz setup, you can get access again to this on-chain wallet. Keep the seed words secure in a off-line location.
|
||||
|
||||
## Bitcoin Core Wallet (deactivated by default)
|
||||
|
||||
Beside lightning you have a bitcoin core installed. Normally, bitcoin core acts just as a blockchain informational service to the lightning wallet and its internal seperate on-chain wallet is deactivated.
|
||||
|
||||
Some apps (like Fully Noded or JoinMarket) activate the bitcoin core wallet and use it for their own needs. This on-chain balance will not be reflected in the rest of the RaspiBlitz software and is NOT backuped by the seed words from the RaspiBlitz setup. If you make use of the bitcoin core wallet please take care of these funds.
|
||||
|
||||
# Off-chain Funds (Lightning Channels)
|
||||
|
||||
Please note that there is no perfect backup concept for the funds in your lightning channels yet. We strongly recommend using the `Static Channel Backup` provided by LND and consider off-line location backup of that file to have the best chances to recover Lightning funds in a case of recoverying from a disaster.
|
||||
|
||||
For more practical information on this topic see: [Backup Channel Funds](README.md#backup-for-on-chain---channel-funds)
|
228
WORKSHOP.md
@ -1,228 +0,0 @@
|
||||
# RaspiBlitz Workshop Tutorial
|
||||
|
||||
One goal of the RaspiBlitz project is to provide an open DIY platform for workshops - to setup your own lightning node and learn to manage it. This tutorial is collecting best practices on how to organise a RaspiBlitz workshop.
|
||||
|
||||
<br/>
|
||||
|
||||
# Time Planning
|
||||
|
||||
First thing on planning a RaspiBlitz workshop is to calculate the time needed correctly. For example, the setup from scratch with no further support is still a weekend project - mostly because downloading and syncing the blockchain takes a lot of time.
|
||||
|
||||
|
||||
So the time required for the workshop all depends on the preparation you as a workshop organizer are interested to provide ahead of the workshop. This document outlines three starting configurations... going from most preparation required to least.
|
||||
|
||||
Note that the time estimates below are about getting a node to a "clean setup". They do not include the funding & setting up channels process - which is adding an additional 30 min to 1 hour to the calculation.
|
||||
|
||||
|
||||
Also, if your group is lager then 5 participants, calculate some extra time for individual support. You can compensate for that if you let two participants work together on one RaspiBlitz setup; this way you limit individual support and let them help each other.
|
||||
|
||||
|
||||
## Workshop Scenario A) Provide a Ready-2-Go RaspiBlitz
|
||||
|
||||
_Estimated Duration: 2 Hours_
|
||||
|
||||
Sure, one part of the fun for participants is to assemble the hardware themselves. But if you aim for the shortest workshop possible, then this is the way to go (around 2 hours length). If you have the RaspiBlitz already assembled to be operational at the workshop you should already set them up with a basic setup, maybe even transfer a small amount of coins onto them. This way you can give the workshop participants the A.B.C.D passwords on a sheet of paper and let them jump right into learning how to manage a node. While waiting for confirmations on the first channel opening you can use the time to explain how to build a RaspiBlitz from scratch and some Lightning basics.
|
||||
|
||||
These are the following steps you need to prepare (follow links for details):
|
||||
|
||||
- [Buy all the Hardware](WORKSHOP.md#buy-all-the-hardware)
|
||||
- [Assemble all the Hardware](WORKSHOP.md#assemble-all-the-hardware)
|
||||
- [Prepare HDDs with Blockchain Data](WORKSHOP.md#prepare-hdds-with-blockchain-data)
|
||||
- [Prepare SD cards with latest RaspiBlitz image](WORKSHOP.md#prepare-sd-cards-with-latest-raspiblitz-image)
|
||||
- Run Basic Node Setup
|
||||
- [Setup Workshop Environment](WORKSHOP.md#setup-workshop-environment)
|
||||
|
||||
_NOTE: Make sure that the blockchain of the RaspiBlitzes are synced before the workshop begins._
|
||||
|
||||
## Workshop Scenario B) Provide a RaspiBlitz Hardware-Kit
|
||||
|
||||
_Estimated Duration: 3 Hours_
|
||||
|
||||
|
||||
In this workshop scenario you buy all the hardware but let participants assemble the RaspiBlitz themselves - that's half the fun and people get a feel for the gear. But to keep the blockchain sync time short and be able to keep in a 3 hour timeframe you need to prepare the HDDs with blockchain data not much older than one day. Start ordering the parts at least one week before the workshop (budget as needed) and plan the day before completely for copying blockchain data to all those HDDs.
|
||||
|
||||
|
||||
These are the following steps you need to prepare (follow links for details):
|
||||
|
||||
- [Buy all the Hardware](WORKSHOP.md#buy-all-the-hardware)
|
||||
- [Prepare HDDs with Blockchain Data](WORKSHOP.md#prepare-hdds-with-blockchain-data)
|
||||
- [Prepare SD cards with latest RaspiBlitz image](WORKSHOP.md#prepare-sd-cards-with-latest-raspiblitz-image)
|
||||
- [Setup Workshop Environment](WORKSHOP.md#setup-workshop-environment)
|
||||
|
||||
Variation: If you don't have a big bugdet to prefinance the parts or people have already hardware they want to bring you can just buy the HDDs and SD cards and prepare them to run this scenario.
|
||||
|
||||
|
||||
## Workshop Scenario C) Bring your own Hardware
|
||||
|
||||
|
||||
_Estimated Duration: 4–6 Hours_
|
||||
|
||||
This scenario is advised only for small groups, or you'll need to bring multiple blockchain copy stations - see details on "Prepare HDDs with Blockchain Data". Otherwise it needs the least prepartion time and prefinance and can be announced to participants about 5 days beforehand, so that they have time to order all the parts online.
|
||||
|
||||
|
||||
- [Instruct Participants to bring Hardware](WORKSHOP.md#instruct-participants-to-bring-hardware)
|
||||
- [Prepare Blockchain Copy Station](WORKSHOP.md#prepare-blockchain-copy-station)
|
||||
- [Setup Workshop Environment](WORKSHOP.md#setup-workshop-environment)
|
||||
|
||||
|
||||
As soon as the participants arrive at the workhop, make sure to check their hardware list. We also suggest taking their HDDs and starting the blockchain copy process before official starting time.
|
||||
|
||||
|
||||
<br/>
|
||||
|
||||
|
||||
# Checklist for Running a Workshop
|
||||
|
||||
Make sure you have the following hardware and infrastructure ready for the workshop:
|
||||
|
||||
- Lots of 'multiple power outlets/extensions' (min. 2 per participants - RaspiBlitz + Laptop)
|
||||
- Network-Switch with enough ports (min. 1 per RaspiBlitz)
|
||||
- Enough LAN network cables (short ones to connect the RaspiBlitzes)
|
||||
- Good internet connection at location with LAN port (or a WLAN to LAN adapter)
|
||||
- Extra WLAN Router (if you are not sure if LAN & WLAN is not on the same network at location)
|
||||
- One or two USB SD card adapters
|
||||
- One or two USB-C to USB-A adapters
|
||||
- Some Tape, Markers & Pens always come in handy (also for participants to wirte down seeds & passwords)
|
||||
- Potentially some bitcoin funds (if people dont have their own to start funding channels)
|
||||
|
||||
Participants need to bring at least their laptops.
|
||||
|
||||
<br/>
|
||||
|
||||
# Running of the Workshop
|
||||
|
||||
_The basic structure of the workshop is set by the RaspiBlitz setup process. Simply follow that. The following parts should share some experiences and suggestions on how you can optimize the time and mentoring during this process. Feel free to share your experience here._
|
||||
|
||||
## Welcome and Intro
|
||||
|
||||
In the beginning, it's great to give a small introduction to the Lightning Network and show the RaspiBlitz GitHub page to let everybody know where to find the basic info. But try to keep it around 10 min, in order to not waste time.
|
||||
|
||||
|
||||
Also, even before the intro, take care of the blockchain preparation. If people bring clean HDDs, hook them up to your blockchain copy station as soon as possible. If you have to copy on location, plan to spend time for some deeper educational intro while the HDDs get prepared.
|
||||
|
||||
## Assembling
|
||||
|
||||
If you hand out hardware kits or people bring their own hardware, it's time to put it together. If you are in a ready-2-go scenario, of course skip this and just hand them out.
|
||||
|
||||
## Basic Setup
|
||||
|
||||
|
||||
Connect everybody's laptop to the same local network the RaspiBlitzes are connected to. Be prepared to explain how to open a terminal - Windows' users especially need some help here (see README on this).
|
||||
|
||||
|
||||
Then everybody is SSHing into the RaspiBlitz and is following the setup dialog. Hand out paper and pens for people to write down their passwords and wallet seeds.
|
||||
|
||||
## Waiting Time
|
||||
|
||||
After the lightning wallet setup comes the longest waiting time during the workshop - around 30 min. When you have a presynced ready-2-go or up to 1 hour for the other scenarios. It's the time when the node is syncing up the blockchain and LND is scanning. If you see someone's blockchain progress under 97%, something is wrong - possibly the HDD was not correctly prepared or the blockchain data is way too old to finish during workshop time if you work with old RaspberryPi3. The new RaspberryPi4 with SSD can catch up much faster.
|
||||
|
||||
|
||||
Use this time for a more in-depth educational segment on lightning in general. This time can also be used to demo with one RaspiBlitz that is already on clean-setup (you prepared before the workshop) how the funding, setting up channels and the other features of the RaspiBlitz work. That way people see what are the next steps once their node is ready and even if your workshop time is over by then they can know the next steps to do at home.
|
||||
|
||||
Also this time is good for troubleshooting in individual sessions. If someone is not able to finish the sync on location in time shutdown the Raspiblitz from SSH terminal with CTRL+C and then `shutdown now`. If the device gets connected back up at home it should pickup the sync/scan process (let people know about the wallet unlock).
|
||||
|
||||
|
||||
## Finalizing Setup
|
||||
|
||||
Once the RaspiBlitz is ready (LCD shows status screen) and people can SSH into the main menu, let them go into the `SERVICES` section and activate the `RTL WebUI`. It's the best interface to then continue with the peering, funding and channel opening.
|
||||
|
||||
## Funding, Channels, API
|
||||
|
||||
Check how much time is left to go thru the next steps of connecting to peers, funding and opening channels. While you wait on funding or channel opening confirmations, its a good moment to try to connect users mobile wallets with the device. But just so that on the local network for demo - dynamicDNS is something people then can try at home with port forwarding on their routers.
|
||||
|
||||
Its also nice to add casual social open-end segment to the end of the workshop. So people can already go into personal conversations, music and beverages while some last nodes sync up, confirmations come in and people sending their first satoshis on some lightning chess or from node to node.
|
||||
|
||||
Here are some videos that show what else is possible with the RaspiBlitz:
|
||||
|
||||
- [Lightning Network LND API - Buying Stickers using Commandline](https://youtu.be/tocJFPU8sAc) 24min
|
||||
|
||||
<br/>
|
||||
|
||||
# Organisation Tasks
|
||||
|
||||
|
||||
*Which of the following organisation tasks are relevant for you depends on which starting scenario you choose (see above). Here is the complete possible list with details:*
|
||||
|
||||
|
||||
## Buy all the Hardware
|
||||
|
||||
See the shopping list on the RaspiBlitz Github README. You need to buy all of those, and every participant also needs a short (about 1m) network cable.
|
||||
|
||||
|
||||
From experience start ordering two weeks before the workshop (if you need to assemble) and minimum one week if you're handing out hardware kits - even if you have Amazon Prime. There is always a shipment coming late, and it's a lot of packages.
|
||||
|
||||
|
||||
If you like to support the RaspiBlitz project you can order a ready-2-go RaspiBlitz or a all-you-need-hardwareset for your RaspiBlitz workshop from [raspiblitz.com](https://raspiblitz.com)
|
||||
|
||||
## Instruct Participants to Bring Hardware
|
||||
|
||||
This is for the scenario where people bring their own hardware. Make sure to let them know at least a week before the event so that there is enough time for online ordering. Also make sure that especially the power supply needs to provide 3A and a stable current (big fat with a thick cable is good) because that's the most often error source if people just reuse some old weak power supply.
|
||||
|
||||
In all scenarios make sure people bring their laptops.
|
||||
|
||||
## Assemble all the Hardware
|
||||
|
||||
|
||||
Basically you follow the assembly instructions on the RaspiBlitz GitHUb README. Think of a safe way to transport the assembled devices to the workshop location - HDDs like it soft.
|
||||
|
||||
|
||||
## Prepare HDDs with Blockchain Data
|
||||
|
||||
This is the most time consuming part of the preparation. Try it once to get a feel for how much time you need to prepare one HDD. If you prepare more than one HDD check out the "Copystation" script below.
|
||||
|
||||
A prepared HDD is formatted in EXT4 and named "BLOCKCHAIN". In a folder called `bitcoin` it contains a copy of the following data folders from a running Bitcoin core client (same version on RaspiBlitz).
|
||||
|
||||
```
|
||||
/bitcoin/blocks
|
||||
/bitcoin/chainstate
|
||||
```
|
||||
|
||||
The bitcoin core client (0.17.1 or higher) needs to be stopped while the data is copied to the HDD.
|
||||
|
||||
The easiest way to get a "template" of such HDD is to setup a fresh RaspiBlitz (without channel and fundings) and then run the script `/home/admin/XXcleanHDD.sh` and manually delete all rest data from the HDD and just leave those folders.
|
||||
|
||||
|
||||
Once you have that "template" you can make an image from that and write that image to the other HDDs.
|
||||
|
||||
|
||||
|
||||
## Prepare Blockchain Copy Station
|
||||
|
||||
In the RaspiBlitz GitHub repo and also on every RaspiBlitz (since v1.3) you can find the script:
|
||||
`/home/admin/XXcopyStation.sh`
|
||||
|
||||
This can be used to prepare and keep multiple HDDs in snyc with blockchain data in preparation of a workshop. You can start it directly on a RaspiBlitz and turn it into "Copy Station Mode" by executing on the command line:
|
||||
|
||||
`sudo /home/admin/XXcopyStation.sh`
|
||||
|
||||
_Beware that it will not run as a Lightning Node during that time (LND is stopped). And to reset it back into normal mode you need to stop the script with `CTLR+c` and the reboot with `sudo shutdown -r now`._
|
||||
|
||||
|
||||
In "Copy Station Mode" the RaspiBlitz will just run the bitcoind (so it needs network connection), copy fresh blockchain data over to a template folder on the HDD called `/mnt/hdd/templateHDD` and from there sync it to further HDDs that get connected to it.
|
||||
|
||||
If you run it in a setup like on this photo with an extra powered USB hub, you can connect up to 10 HDDs at once to be synced with an almost up-to-date blockchain.
|
||||
|
||||
At the moment the "Blockchain Copy Station" is just a computer (laptop - not a RaspberryPi) having an image of a "template" HDD (see above) and you can attach (with a USB3.0 Hub) multiple fresh HHDs to it and start writing in the template image to that.
|
||||
|
||||
To update the "template" HDD for the next workshop use it for a fresh clean RaspiBllitz setup just days before, sync the blockchain to 100% and repeat the process above.
|
||||
|
||||
_This version is not tested, but seems like the easiest to setup so far. Images can have the problem of being too large when some 1TB HDDs are just some bytes smaller. So for the template HDD it would be best to find the smallest 1TB HDD possible or just writing the image to HDDs of the same brand & model._
|
||||
|
||||
Copying the blockchain between RaspberryPis during the workshop is not an option, because the network and its USB2 is too slow and will take 3 to 4 hours.
|
||||
|
||||
For former workshops I had a laptop just with the data and had a script that was formatting and rsyning that data over to a fresh HDD. That took around 1,5 hours per HDD.
|
||||
|
||||
_If someone has a better idea for a 'Blockchain Copy Station', please feel free to contribute._
|
||||
|
||||
## Prepare SD Cards with Latest RaspiBlitz Image
|
||||
|
||||
Download the latest RaspiBlitz SD card image from the README page. `Balena Etcher` is the best image writing software for this use case because if you have multiple sd card adapters, you can write multiple cards at once,cutting down your preparation time.
|
||||
|
||||
## Setup Workshop Environment
|
||||
|
||||
See hardware checklist for what to bring to the workshop in the earlier chapter.
|
||||
|
||||
Setup power outlets for everybody. Its always good to be way early at the workshop location for setup, especially if you run the "pre-sync" of the ready-2-go scenario.
|
||||
|
||||
Most important is the network setup. Every RaspiBlitz needs a LAN port in the switch and that switch needs to be on the same local network as the WLAN so that participants laptop can SSH into the RaspiBlitz. If that is not the case or you cannot confirm that before the event its best to bring an additional WLAN router. Then you give the WLAN router internet uplink thru the available LAN cable and you put the network switch for the Raspiblitzes behind that router and open an additional WLAN on that WLAN router for everybody to connect to. It's OK to be behind a NAT; it's just important for everybody to be behind the same NAT.
|
||||
|
150
alternative.platforms/Proxmox/README.md
Normal file
@ -0,0 +1,150 @@
|
||||
# Install Raspiblitz on proxmox
|
||||
|
||||
Here I want to show you how to install a new Raspiblitz on a Debian VM on Proxmox and get it running. My Raspiblitz ran very long and stable on a Raspberry Pi 4 with 8GB RAM. It would very likely continue to do so for a longer time, however my Lightning Node is growing more and more and various apps and services are built on top of my Node. So the issue of availability and backup becomes more and more important. Therefore I decided to migrate the Raspiblitz to a VM in Proxmox. So I have much more room to maneuver regarding backup and administration.
|
||||
|
||||
This guide here will help you to set up a completely new Raspiblitz with Proxmox. The guide for the migration will follow soon...
|
||||
|
||||
### What is needed?
|
||||
|
||||
- Proxmox installation on an Intel NUC, laptop or server
|
||||
- at least 1TB SSD
|
||||
|
||||
You have several options for the SSD: Either you install the 1TB SSD in the system and install your Proxmox host on it or (as I did) you have an internal SSD (in my case 500GB M2 SSD) where the host operating system is located. I connected the 1TB SSD via SATA to my Intel NUC. This is used exclusively for storing the blockchain and Lightning Node.
|
||||
|
||||
## Create Debian VM
|
||||
|
||||
We install Raspiblitz on a fresh Debian machine. Therefore we have to download the ISO file from Debian first. Here just choose the right processor architecture: (For me it is amd64)
|
||||
|
||||
[https://www.debian.org/distrib/netinst](https://www.debian.org/distrib/netinst)
|
||||
|
||||
Afterwards this ISO file can be uploaded under Proxmox. To do this, click on the Local Storage, ISO Images and on Upload:
|
||||
|
||||

|
||||
|
||||
Now you can create a new virtual machine by clicking on "Create VM" in the upper right corner. Now we click on it.
|
||||
|
||||

|
||||
|
||||
A settings window appears where we can now specify the properties of the VM. In my example, the properties look like this:
|
||||
|
||||
VM ID and name can be selected by yourself.
|
||||
|
||||

|
||||
|
||||
Under the item "OS" we now select the previously downloaded ISO file:
|
||||
|
||||

|
||||
|
||||
Under "System" we can leave the default settings. I have checked Qemu Agent so that the VM can communicate with the Proxmox host via Qemu Agent and transfer data.
|
||||
|
||||

|
||||
|
||||
Under "Disks" you can now specify the desired size of the VM. I have set the same size (32GB) as my SD cards from the Raspiblitz are big. This can be increased at any time in the future, if you need more space and the host machine also has this space available. Another advantage why I virtualized my Raspiblitz :)
|
||||
|
||||

|
||||
|
||||
Under "CPU" you can specify the desired number of cores. Of course, this depends on your host operating system. My Intel NUC has 4 cores, so I can provide 4 cores to the VM.
|
||||
|
||||

|
||||
|
||||
Under "Memory" you must specify the desired RAM number in MB. This also depends on your host. If possible, I would enter 8GB or more. **Small hint: 1GB = 1024 MB. So 8GB = 8192 MB. (8 x 1024)**
|
||||
|
||||

|
||||
|
||||
The VM also needs a network adapter. You also have to select this adapter based on your Proxmox installation. Default will be vmbr0. On my Proxmox I have configured several VLAN, where vmbr3 is my BTC VLAN. But this is only the case for me.
|
||||
|
||||

|
||||
|
||||
After that you can click on "Finish" and the VM will be created. This now also appears with name on the left side and can now be started. (Right click -> Start)
|
||||
|
||||
Now you can open the console (top right) of the VM and do the Debian installation steps normally. I have abbreviated the steps a bit here:
|
||||
|
||||
- Install
|
||||
- Select Language
|
||||
- Select Location
|
||||
- Select Keyboard Language
|
||||
- Set Hostname
|
||||
- Set domain (or just leave it empty)
|
||||
- Set root password
|
||||
- Create new user (mine is called "pi")
|
||||
- Set password for user pi
|
||||
- Guided - use entire disk
|
||||
- Select SCSI3 harddisk
|
||||
- All files in one partition
|
||||
- Finish partitioning and write changes to disk
|
||||
- "Write the changes to disks?" -> Yes
|
||||
- Scan extra installation media? -> No
|
||||
- Package manager -> Select your country
|
||||
- Package manager -> deb.debian.org
|
||||
- http proxy -> leave empty and continue
|
||||
- Participate in the package usage survey? -> No
|
||||
- Software selection: SSH server and standard utilities should be sufficient here
|
||||
- Install the GRUB boot loader to your primary drive? -> Yes
|
||||
- Select /dev/sda
|
||||
|
||||
The VM is now installed and starts to boot. In the meantime you can remove the ISO file. (VM -> Hardware -> CD/DVD Drive -> Do not use any media -> OK)
|
||||
|
||||
## Add storage
|
||||
|
||||
Now to install Raspiblitz on this new VM we need to do 2 things: Connect the hard disk for the blockchain data and pass it to the VM and install the SD Card Builder Script of Raspiblitz. We start first with the hard disk, where there are 2 variants:
|
||||
|
||||
### Variant 1: External hard disk
|
||||
|
||||
Now connect the hard drive to the host system using SATA or USB. In my example here I use a USB hard disk, which I connected via USB 3.1 to the Intel NUC. The best thing to do now is to shutdown the Raspiblitz VM.
|
||||
|
||||
Now you need to log in to the console on the Proxmox host system and do the following:
|
||||
|
||||
https://www.youtube.com/watch?v=U-UTMuhmC1U
|
||||
|
||||
The commands from the video here again to copy:
|
||||
|
||||
```
|
||||
ls -n /dev/disk/by-id/
|
||||
/sbin/qm set [VM-ID] -virtio2 /dev/disk/by-id/[DISK-ID]
|
||||
```
|
||||
|
||||
It is important here that the hard disk is passed through by ID. If something changes in the dev sda order in the future, the correct hard disk is still connected to the VM.
|
||||
|
||||
### Variant 2: Use internal storage
|
||||
|
||||
If you have enough space on the host operating system, you do not have to use an external hard disk. You can simply add a second hard disk to the VM under "Hardware -> Add -> Hard Disk". I would recommend at least 1TB as storage size.
|
||||
|
||||
* * *
|
||||
|
||||
Regardless of whether variant 1 or 2 was executed, the VM should now have 2 hard disks connected in the hardware overview: A smaller one (e.g. 32GB) where the operating system of Raspiblitz will be installed and run and a larger one (e.g. 1TB or more) where all the blockchain data will be stored later.
|
||||
|
||||

|
||||
|
||||
## Install Raspiblitz
|
||||
|
||||
Now we are ready to install Raspiblitz via script. For this we start the Raspiblitz VM and log in as root user in the console. First of all update everything:
|
||||
|
||||
```
|
||||
apt update
|
||||
apt upgrade -y
|
||||
apt install sudo
|
||||
```
|
||||
|
||||
Now we need to download the Build SDCard Script from Rootzoll. The version can be customized as you like. The latest version (as of block time 768745) is the 1.9.
|
||||
|
||||
```
|
||||
wget https://raw.githubusercontent.com/rootzoll/raspiblitz/v1.9/build_sdcard.sh
|
||||
```
|
||||
|
||||
And run:
|
||||
|
||||
```
|
||||
sudo bash build_sdcard.sh
|
||||
```
|
||||
|
||||
The script now shows you information from your system. If all this is correct, start with "yes".
|
||||
|
||||

|
||||
|
||||
Now the installation takes a few minutes. Do not abort or shut down the VM here, just let it install. When everything is finished, a reboot is needed:
|
||||
|
||||
```
|
||||
sudo shutdown -r now
|
||||
```
|
||||
|
||||
Now you can call the IP address of your VM in the browser and perform the normal installation steps of Raspiblitz.
|
BIN
alternative.platforms/Proxmox/images/2022-09-21_16-05.png
Normal file
After Width: | Height: | Size: 31 KiB |
BIN
alternative.platforms/Proxmox/images/2022-09-21_20-03.png
Normal file
After Width: | Height: | Size: 21 KiB |
BIN
alternative.platforms/Proxmox/images/2022-09-21_20-04.png
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
alternative.platforms/Proxmox/images/2022-09-21_20-05.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
alternative.platforms/Proxmox/images/2022-09-21_20-06.png
Normal file
After Width: | Height: | Size: 30 KiB |
BIN
alternative.platforms/Proxmox/images/2022-09-21_20-06_1.png
Normal file
After Width: | Height: | Size: 43 KiB |
BIN
alternative.platforms/Proxmox/images/2022-09-21_20-07.png
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
alternative.platforms/Proxmox/images/2022-09-21_20-08.png
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
alternative.platforms/Proxmox/images/2022-09-21_20-16.png
Normal file
After Width: | Height: | Size: 6.8 KiB |
BIN
alternative.platforms/Proxmox/images/2022-09-21_21-04.png
Normal file
After Width: | Height: | Size: 44 KiB |
BIN
alternative.platforms/Proxmox/images/2022-09-21_21-16.png
Normal file
After Width: | Height: | Size: 3.8 KiB |
61
alternative.platforms/QEMU/raspiblitz-on-qemu.md
Normal file
@ -0,0 +1,61 @@
|
||||
Documentation focused on install for macos dev environment. Do not rely on this setup for mainnet nodes.
|
||||
|
||||
1. Download [Debian 10.4 Minimal Image](https://mac.getutm.app/gallery/debian-10-4-minimal)
|
||||
2. Resize the image container to 30GB
|
||||
`qemu-img resize ~/Library/Containers/com.utmapp.UTM/Data/Documents/Debian\ ARM.utm/Images/debian.qcow2 +30G`
|
||||
3. Add USB Device to the VM
|
||||
- Right click the VM from the list.
|
||||
- Select `new drive` from the Drives Menu
|
||||
- Update the interface to `USB`
|
||||
- Update size to 40GB
|
||||
4. Install Dependencies
|
||||
- `sudo apt install mount e2fsprogs gnupg2`
|
||||
- Install [armbian-config](https://github.com/armbian/config#armbian-configuration-utility)
|
||||
```
|
||||
echo "deb [arch=arm64] http://apt.armbian.com $(lsb_release -cs) main" > /etc/apt/sources.list.d/armbian.list
|
||||
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 9F0E78D5
|
||||
sudo apt update
|
||||
sudo apt install armbian-config
|
||||
```
|
||||
5. (Optional) Switch to swapfile - [Reference](https://www.linuxuprising.com/2018/08/how-to-use-swap-file-instead-of-swap.html)
|
||||
```
|
||||
sudo swapoff /dev/vda3
|
||||
sudo vim /etc/fstab
|
||||
sudo dd if=/dev/zero of=/swapfile bs=1024 count=1048576`
|
||||
sudo chmod 600 /swapfile
|
||||
sudo mkswap /swapfile
|
||||
sudo swapon /swapfile
|
||||
swapon -s
|
||||
```
|
||||
6. Update `/etc/apt/sources` to `bullseye` and add `raspi.list`
|
||||
```
|
||||
deb https://archive.raspberrypi.org/debian/ bullseye main
|
||||
deb-src https://archive.raspberrypi.org/debian/ bullseye main
|
||||
```
|
||||
- [https://ict.gctaa.net/resources/adding_raspbian_repo.html](https://ict.gctaa.net/resources/adding_raspbian_repo.html)
|
||||
- [https://www.linuxquestions.org/questions/blog/craigevil-176422/raspberry-pi-os-debian-11-bullseye-apt-repos-38636/](https://www.linuxquestions.org/questions/blog/craigevil-176422/raspberry-pi-os-debian-11-bullseye-apt-repos-38636/)
|
||||
- [https://www.cyberciti.biz/faq/update-upgrade-debian-10-to-debian-11-bullseye/](https://www.cyberciti.biz/faq/update-upgrade-debian-10-to-debian-11-bullseye/)
|
||||
- [https://www.tomshardware.com/how-to/upgrade-raspberry-pi-os-to-bullseye-from-buster](https://www.tomshardware.com/how-to/upgrade-raspberry-pi-os-to-bullseye-from-buster)
|
||||
7. Add /usr/sbin to path
|
||||
1. `sudo vim ~/.bashrc`
|
||||
2. Add `PATH=$PATH:/usr/sbin` to the end of the file
|
||||
3. Save File `:wq!`
|
||||
4. Run `source ~/.bashrc`
|
||||
|
||||
8. Add keys
|
||||
```
|
||||
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 82B129927FA3303E
|
||||
sudo apt-key adv --recv-keys --keyserver **keys.openpgp.org** 74A941BA219EC810
|
||||
```
|
||||
9. Resize partition - [Source](https://askubuntu.com/a/116367)
|
||||
1. Run `sudo fdisk /dev/sda`
|
||||
- use `p` to list the partitions. Make note of the start cylinder of `/dev/sda1`
|
||||
- use `d` to **delete** first the swap partition (`2`) and then the `/dev/sda1` partition. This is very scary but is actually harmless as the data is not written to the disk until you write the changes to the disk.
|
||||
- use `n` to **create** a new primary partition. Make sure its start cylinder is exactly the same as the old `/dev/sda1` used to have. For the end cylinder agree with the default choice, which is to make the partition to span the whole disk.
|
||||
- review your changes, make a deep breath and use `w` to write the new partition table to disk.
|
||||
2. Reboot with `sudo reboot`.
|
||||
10. Make usb filesystem by running command `mkfs.ext4 /dev/sda1` where `/dev/sda1` is your new disk.
|
||||
11. [Install raspiblitz via build script](https://github.com/rootzoll/raspiblitz/tree/v1.7/alternative.platforms#building-the-raspiblitz-scripts)
|
||||
12. [Configure signet](https://github.com/rootzoll/raspiblitz/issues/1500#issuecomment-982779830)
|
||||
13. Reboot with `sudo reboot`.
|
||||
14. Login with `admin` user. Default password: `raspiblitz`
|
@ -1,24 +1,116 @@
|
||||
<!-- omit in toc -->
|
||||
# ⚡️ Alternative platforms for the RaspiBlitz ⚡️
|
||||
- [Minimum requirements](#minimum-requirements)
|
||||
- [Recommended specs](#recommended-specs)
|
||||
- [amd64 image](#amd64-image)
|
||||
- [Requirements](#requirements)
|
||||
- [Automated builds](#automated-builds)
|
||||
- [Virtual Machine](#virtual-machine)
|
||||
- [Create the base image](#create-the-base-image)
|
||||
- [Building the Raspiblitz scripts](#building-the-raspiblitz-scripts)
|
||||
- [Notes](#notes)
|
||||
- [Data drive](#data-drive)
|
||||
- [Armbian](#armbian)
|
||||
- [Ubuntu](#ubuntu)
|
||||
- [Python upgrade](#python-upgrade)
|
||||
- [Manual image release for amd64](#manual-image-release-for-amd64)
|
||||
- [Requirements:](#requirements-1)
|
||||
- [Create an NTFS formatted USB Stick / USB disk](#create-an-ntfs-formatted-usb-stick--usb-disk)
|
||||
- [Boot Ubuntu Live from USB](#boot-ubuntu-live-from-usb)
|
||||
- [Download and verify the base image](#download-and-verify-the-base-image)
|
||||
- [Flash the base image to the installation medium](#flash-the-base-image-to-the-installation-medium)
|
||||
- [Install Debian to the OS disk](#install-debian-to-the-os-disk)
|
||||
- [Install the RaspiBlitz Scripts](#install-the-raspiblitz-scripts)
|
||||
- [Prepare the release](#prepare-the-release)
|
||||
- [Clean and shutdown the build machine](#clean-and-shutdown-the-build-machine)
|
||||
- [Start Tails](#start-tails)
|
||||
- [Import the signing keys](#import-the-signing-keys)
|
||||
- [Prepare the disk](#prepare-the-disk)
|
||||
- [Verify the downloaded image](#verify-the-downloaded-image)
|
||||
- [Linux instructions](#linux-instructions)
|
||||
- [Create a torrent](#create-a-torrent)
|
||||
|
||||
Minimum requirements:
|
||||
* ARMv7, ARMv8 or x86 processor (32 or 64 bit)
|
||||
## Minimum requirements
|
||||
* ARMv8 or x86 processor (64 bit)
|
||||
* 1 GB RAM
|
||||
* \> 300 GB HDD
|
||||
|
||||
Desirable:
|
||||
* \> 2GB DDR3 RAM
|
||||
* USB 3.0 or SATA connector
|
||||
* SSD
|
||||
* Compact case with efficient cooling (heatsink / fan)
|
||||
* HDMI / GPIO screen
|
||||
* 500 GB HDD
|
||||
* Python >=3.9 (see [how to upgrade below](#python-upgrade) )
|
||||
|
||||
### Recommended specs
|
||||
* \> 2GB DDR3 ECC RAM (8GB+ if using ZFS)
|
||||
* USB 3.0 / SATA / PCIE / NVME connectors
|
||||
* SSD - multiple disks for redundancy
|
||||
|
||||
Specifications of the tested hardware: [hw_comparison.md](hw_comparison.md)
|
||||
|
||||
All testers are welcome. Open an issue for your specific board to collaborate and share your experience.
|
||||
|
||||
---
|
||||
## Armbian Buster
|
||||
## amd64 image
|
||||
### Requirements
|
||||
* amd64 Laptop, Desktop or Server connected to the internet via a LAN cable
|
||||
|
||||
* `OS disk`: min 32GB SSD is recommended to run the system on
|
||||
* if the computer can boot from an SDcard an Endurance type card can be used similar to the RPi setup
|
||||
* USB SSD recommendation: [Sandisk Extreme Pro USB 128 GB](https://www.amazon.co.uk/SanDisk-Extreme-Solid-State-Flash/dp/B01MU8TZRV)
|
||||
* if the laptop has an optical drive an [Optical Drive Bay Caddy / adapter](https://www.amazon.co.uk/dp/B07SHSCVC7/) can be used to change it to a second SSD instead.
|
||||
* `Data disk`: a new, minimum 1TB SSD is recommended - stores data independent of the operating system
|
||||
* usually placed internally
|
||||
### Automated builds
|
||||
* find the download links or build locally with the instructions in: [/ci/README.md](/ci/README.md)
|
||||
|
||||
## Virtual Machine
|
||||
|
||||
Instructions to run a RaspiBlitz as a VM on a Linux host machine.
|
||||
The process is similar if you want to run RaspiBlitz on the bare metal.
|
||||
|
||||
Tested with:
|
||||
* Debian image in VirtualBox and linux virt-manager / [cockpit-machines](https://github.com/cockpit-project/cockpit-machines)
|
||||
* Ubuntu image in VirtualBox and linux virt-manager / [cockpit-machines](https://github.com/cockpit-project/cockpit-machines)
|
||||
* Debian image in VirtualBox https://github.com/rootzoll/raspiblitz/issues/2756#issuecomment-983532237
|
||||
* TrueNAS (FreeBSD bhyve) with an Ubuntu VM: https://github.com/rootzoll/raspiblitz/issues/2104#issuecomment-917444238
|
||||
* [QEMU+UTM](https://github.com/rootzoll/raspiblitz/blob/dev/alternative.platforms/QEMU/raspiblitz-on-qemu.md)
|
||||
|
||||
### Create the base image
|
||||
* Download and install the base OS on an at least 32GB drive
|
||||
* Debian is the most tested and is closest to the RaspberryOS: <https://www.debian.org/distrib/>
|
||||
* Ubuntu should work, but less tested
|
||||
* To just experiment can load a virtualbox image from: <https://www.osboxes.org/debian/> or <https://www.osboxes.org/ubuntu>.
|
||||
These not need installation, password: `osboxes.org`
|
||||
|
||||
### Building the Raspiblitz scripts
|
||||
* Run the build script in the terminal of the base OS (with sudo access):
|
||||
|
||||
```bash
|
||||
# download the build script
|
||||
wget https://raw.githubusercontent.com/rootzoll/raspiblitz/dev/build_sdcard.sh
|
||||
# run
|
||||
sudo bash build_sdcard.sh -f false -b dev -d headless -t false -w off
|
||||
```
|
||||
```
|
||||
Options:
|
||||
-EXPORT just print build parameters & exit'
|
||||
-h, --help this help info
|
||||
-i, --interaction [0|1] interaction before proceeding with execution (default: 1)
|
||||
-f, --fatpack [0|1] fatpack mode (default: 1)
|
||||
-u, --github-user [raspiblitz|other] github user to be checked from the repo (default: raspiblitz)
|
||||
-b, --branch [v1.7|v1.8] branch to be built on (default: v1.10)
|
||||
-d, --display [lcd|hdmi|headless] display class (default: lcd)
|
||||
-t, --tweak-boot-drive [0|1] tweak boot drives (default: 1)
|
||||
-w, --wifi-region [off|US|GB|other] wifi iso code (default: US) or 'off'
|
||||
```
|
||||
|
||||
* Switch off when ready
|
||||
* Attach an other disk (can be even small if you prune or [stop bitcoind](https://github.com/rootzoll/raspiblitz/issues/1500#issuecomment-982779830) manually.
|
||||
The second virtual disk will be used as the BLOCKCHAIN drive.
|
||||
This makes that data portable and independent from the OS similar to the combination of the SDcard and separate SSD.
|
||||
|
||||
### Notes
|
||||
|
||||
#### Data drive
|
||||
* create a raw image of 500+ GB for best compatibility
|
||||
* if there are permission issues try to symlink the disk image to `/var/lib/libvirt/images`
|
||||
|
||||
## Armbian
|
||||
Many SBC-s are supported:
|
||||
https://www.armbian.com/download/
|
||||
|
||||
@ -27,14 +119,13 @@ To verify the downloaded image follow: https://docs.armbian.com/User-Guide_Getti
|
||||
Tested on:
|
||||
* Odroid XU4 / HC1 / HC2 with the Armbian Buster image from https://www.armbian.com/odroid-xu4/
|
||||
|
||||
|
||||
Burn the image to the SDcard with [Etcher](https://www.balena.io/etcher/).
|
||||
|
||||
Assemble and boot.
|
||||
Assemble and boot.
|
||||
|
||||
`ssh root@192.168.x.x`
|
||||
|
||||
password: 1234
|
||||
password: `1234`
|
||||
|
||||
Follow the instructions in the terminal. Set the new password to `raspiblitz` and name the new user `admin` to keep in line with the rest of the setup.
|
||||
|
||||
@ -42,8 +133,7 @@ Continue with building the SDcard: https://github.com/rootzoll/raspiblitz#build-
|
||||
|
||||
---
|
||||
|
||||
## Ubuntu Bionic
|
||||
|
||||
## Ubuntu
|
||||
A common distro to be supplied by the manufacturer for various boards.
|
||||
|
||||
Tested on:
|
||||
@ -74,26 +164,258 @@ Continue with building the SDcard: https://github.com/rootzoll/raspiblitz#build-
|
||||
|
||||
---
|
||||
|
||||
## DietPi
|
||||
## Python upgrade
|
||||
* run the commands below in the terminal line-by-line
|
||||
```bash
|
||||
# select version
|
||||
pythonVersion="3.10.4"
|
||||
majorPythonVersion=$(echo "$pythonVersion" | awk -F. '{print $1"."$2}' )
|
||||
# update and upgrade
|
||||
sudo apt update
|
||||
sudo apt upgrade -y
|
||||
# dependencies
|
||||
sudo apt install wget software-properties-common build-essential libnss3-dev zlib1g-dev libgdbm-dev libncurses5-dev libssl-dev libffi-dev libreadline-dev libsqlite3-dev libbz2-dev -y
|
||||
# download
|
||||
wget https://www.python.org/ftp/python/${pythonVersion}/Python-${pythonVersion}.tgz
|
||||
# optional signature for verification
|
||||
wget https://www.python.org/ftp/python/${pythonVersion}/Python-${pythonVersion}.tgz.asc
|
||||
# get PGP pubkey of Pablo Galindo Salgado
|
||||
gpg --recv-key CFDCA245B1043CF2A5F97865FFE87404168BD847
|
||||
# check for: Good signature from "Pablo Galindo Salgado <pablogsal@gmail.com>"
|
||||
gpg --verify Python-${pythonVersion}.tgz.asc
|
||||
# unzip
|
||||
tar xvf Python-${pythonVersion}.tgz
|
||||
cd Python-${pythonVersion}
|
||||
# configure
|
||||
./configure --enable-optimizations
|
||||
# install
|
||||
sudo make altinstall
|
||||
# move the python binary to the expected directory
|
||||
sudo mv $(which python${majorPythonVersion}) /usr/bin/
|
||||
# check
|
||||
ls -la /usr/bin/python${majorPythonVersion}
|
||||
# make the new version the default
|
||||
sudo rm /etc/alternatives/python
|
||||
sudo update-alternatives --install /usr/bin/python python /usr/bin/python${majorPythonVersion} 1
|
||||
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python${majorPythonVersion} 1
|
||||
# check
|
||||
python --version
|
||||
python3 --version
|
||||
```
|
||||
|
||||
Many SBC-s are supported:
|
||||
https://dietpi.com/#download
|
||||
## Manual image release for amd64
|
||||
|
||||
Tested on:
|
||||
Work notes partially based on: https://github.com/rootzoll/raspiblitz/blob/v1.7/FAQ.md#what-is-the-process-of-creating-a-new-sd-card-image-release
|
||||
|
||||
* Odroid HC1
|
||||
* Odroid HC2 (the same board with a 3.5" 12V HDD)
|
||||
* Odroid XU4 (with HDMI screen)
|
||||
* Raspberry Pi 3 B+ (with the default GPIO or HDMI display)
|
||||
### Requirements:
|
||||
* amd64 Laptop or Server connected to the internet via a LAN cable
|
||||
* [`Ubuntu Live`](https://releases.ubuntu.com/focal/ubuntu-20.04.5-desktop-amd64.iso) USB Stick to start on a clean system
|
||||
* `Installation medium`: min 8GB SDcard / USB stick to install the base image from
|
||||
* `OS disk`: min 32 GB Endurance type SDcard or USB SSD to run the operating system on
|
||||
* (`Data disk`: a new, minimum 1TB SSD is recommended - not needed to create the image release)
|
||||
* [`Tails USB Stick`](https://tails.boum.org/install/download/) to sign the image offline
|
||||
* PGP keys on an USB stick to sign the image
|
||||
* NTFS formatted USB Stick or disk to store the signed image (can reuse the Installation medium)
|
||||
|
||||
### Create an NTFS formatted USB Stick / USB disk
|
||||
* can be prepared any time on a separate computer and can reuse the Installation medium
|
||||
|
||||
### Boot Ubuntu Live from USB
|
||||
* Start [`Ubuntu Live`](https://releases.ubuntu.com/focal/ubuntu-20.04.5-desktop-amd64.iso) from USB stick
|
||||
* Under Settings: best to set correct keyboard language & power settings to prevent monitor turn off
|
||||
|
||||
### Download and verify the base image
|
||||
* Download the latest [Debian Desktop netinst.io, SHA512SUMS and Signature](https://www.debian.org/download) and verify the [downloaded image](https://www.debian.org/CD/verify)
|
||||
* In a terminal can use the following commands (see the comments for the explanations and an example output)
|
||||
```bash
|
||||
# Download the base image:
|
||||
wget https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-11.3.0-amd64-netinst.iso
|
||||
# Download the SHA512SUMS:
|
||||
wget https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/SHA512SUMS
|
||||
# Download the Signature:
|
||||
wget https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/SHA512SUMS.sign
|
||||
|
||||
# Verify:
|
||||
# download the signing pubkey:
|
||||
gpg --keyserver keyring.debian.org --receive-key DF9B9C49EAA9298432589D76DA87E80D6294BE9B
|
||||
# gpg: key DA87E80D6294BE9B: public key "Debian CD signing key <debian-cd@lists.debian.org>" imported
|
||||
# gpg: Total number processed: 1
|
||||
# gpg: imported: 1
|
||||
# Verify the signature of the SHA512SUMS file
|
||||
gpg --verify gpg --verify SHA512SUMS.sign
|
||||
# Look for the output 'Good signature':
|
||||
# gpg: assuming signed data in 'SHA512SUMS'
|
||||
# gpg: Signature made Sat 26 Mar 2022 21:22:41 GMT
|
||||
# gpg: using RSA key DF9B9C49EAA9298432589D76DA87E80D6294BE9B
|
||||
# gpg: Good signature from "Debian CD signing key <debian-cd@lists.debian.org>" [unknown]
|
||||
# gpg: WARNING: This key is not certified with a trusted signature!
|
||||
# gpg: There is no indication that the signature belongs to the owner.
|
||||
# Primary key fingerprint: DF9B 9C49 EAA9 2984 3258 9D76 DA87 E80D 6294 BE9B
|
||||
|
||||
# Compare the hash to the hash of the image file:
|
||||
sha512sum -c SHA512SUMS --ignore-missing
|
||||
# Look for the output 'OK':
|
||||
# debian-11.3.0-amd64-netinst.iso: OK
|
||||
```
|
||||
### Flash the base image to the installation medium
|
||||
* Connect an SDcard reader with a min 8GB SDcard or an USB stick.
|
||||
* In the file manager open the context menu (right click) on the `netinst.iso` file.
|
||||
* Select the option `Open With Other Application` and choose `Open With Disk Image Writer`.
|
||||
* Write the image to the SDcard / USB SSD (Installation medium).
|
||||
* Shut down the Laptop now and remove the `Ubuntu Live` USB Stick.
|
||||
|
||||
### Install Debian to the OS disk
|
||||
* Connect the Laptop / Server to the LAN (with cable) with only the OS disk connected (no Data disk)
|
||||
* Insert the installation medium to the USB and power up - boot from USB.
|
||||
* Continue to work on the screen of the laptop or a connected monitor
|
||||
* Install Debian with the defaults:
|
||||
* leave the root password empty (root user disabled)
|
||||
* create a new user called `pi`, set the password to `raspiblitz`
|
||||
* use a single partition for the OS
|
||||
* Choose: `Guided - use entire disk`
|
||||
* Select the OS disk
|
||||
* All files in one partition
|
||||
* Can remove the `Swap` partition - a swap file will be created on the Data disk later
|
||||
* At the `Software selection` choose:
|
||||
* Debian desktop environment
|
||||
* GNOME (could be other as preferred)
|
||||
* SSH server
|
||||
* standard system utilities
|
||||
* Install GRUB on the primary partition (OS Disk)
|
||||
|
||||
|
||||
The HDMI screen tested: https://www.aliexpress.com/item/3-5-inch-LCD-HDMI-USB-Touch-Screen-Real-HD-1920x1080-LCD-Display-Py-for-Raspberri/32818537950.html
|
||||
### Install the RaspiBlitz Scripts
|
||||
* Once the setup is finished reboot and log in with the `pi` user (pw: `raspiblitz`)
|
||||
* Run the following commands to build from the `dev` branch or change `dev` with the branch name of your version:
|
||||
```bash
|
||||
# download
|
||||
wget https://raw.githubusercontent.com/rootzoll/raspiblitz/dev/build_sdcard.sh
|
||||
# run
|
||||
sudo bash build_sdcard.sh -f true -b dev -d headless -t false -w off
|
||||
```
|
||||
* The `[sudo] password for pi:` is `raspiblitz`
|
||||
* Confirm the chosen parameters
|
||||
* Monitor/Check outputs for warnings/errors
|
||||
* (Optional for development - copy the output to a build_sdcard.sh.log)
|
||||
|
||||
Detailed instructions for the RaspiBlitz-on-DietPi: [alternative.platforms/dietpi/README.md](/alternative.platforms/dietpi/README.md)
|
||||
* Useful settings:
|
||||
* In Settings - Power - Automatic Suspend - Plugged In - Off
|
||||
* In Tweaks - General - Suspend when laptop lid is closed - Off
|
||||
|
||||
---
|
||||
For the process to build a custom SDcard image release see:
|
||||
https://github.com/rootzoll/raspiblitz/blob/dev/FAQ.md#what-is-the-process-of-creating-a-new-sd-card-image-release
|
||||
|
||||
Extras for advanced users and powerful hardware:
|
||||
https://github.com/openoms/bitcoin-tutorials/
|
||||
### Prepare the release
|
||||
#### Clean and shutdown the build machine
|
||||
* run the command (same as running `release` under `admin`):
|
||||
```bash
|
||||
sudo -u admin /home/admin/config.scripts/blitz.preparerelease.sh
|
||||
```
|
||||
* This will shut down the laptop.
|
||||
* Remove the `Installation medium` and the `Ubuntu Live` USB stick and the LAN cable
|
||||
#### Start Tails
|
||||
* Connect the `Tails USB Stick` (make it stay offline)
|
||||
* Boot Tails and set and Admin password in Additional Settings (will need it to work with the disk)
|
||||
* Set the screen to not switch off: Settings > Power -> Blank screen - Never
|
||||
#### Import the signing keys
|
||||
* Connect USB stick with GPG signing keys - decrypt drive if needed
|
||||
* Open Terminal and cd into directory of USB Stick under `/media/amnesia`
|
||||
* Run `gpg --import ./secret-key-backup.key`, check and `exit`
|
||||
* Disconnect USB stick with GPG keys
|
||||
##### Prepare the disk
|
||||
* Start Disks and resize the OS disk partition to 10GB
|
||||
* Connect the NTFS USB stick, open in file manager and delete old files
|
||||
* Open a terminal from the NTFS disk with right click
|
||||
* Run `lsblk` in a terminal to double check the OS disk device name (ignore last partition number)
|
||||
* Clone and compress the OS disk image (copy 11GB so the 10GB sized partition is comfortably included):
|
||||
```bash
|
||||
sudo dd if=/dev/[OSdiskddevice] bs=1G count=11 status=progress | gzip > raspiblitz-amd64-vX.X.X-YEAR-MONTH-DAY.img.gz
|
||||
```
|
||||
* When finished you should see that 30GB was copied (the resulting compressed file is less than 3GB).
|
||||
* Create sha256 hash of the image:
|
||||
```bash
|
||||
sha256sum *.gz > raspiblitz-amd64-vX.X.X-YEAR-MONTH-DAY.img.gz.sha256
|
||||
```
|
||||
* Sign the sha256 hash file:
|
||||
```bash
|
||||
gpg --detach-sign --armor *.sha256
|
||||
```
|
||||
* Check the files:
|
||||
```bash
|
||||
ls
|
||||
raspiblitz-amd64-vX.X.X-YEAR-MONTH-DAY.img.gz
|
||||
raspiblitz-amd64-vX.X.X-YEAR-MONTH-DAY.img.gz.sha256
|
||||
raspiblitz-amd64-vX.X.X-YEAR-MONTH-DAY.img.gz.sha256.asc
|
||||
```
|
||||
|
||||
* Test with:
|
||||
```bash
|
||||
gpg --verify *.asc
|
||||
shasum -c *.sha256
|
||||
```
|
||||
|
||||
* Shutdown the build computer
|
||||
* Upload the new image to server - put the .sig file and .sha256 next to it
|
||||
* Copy the sha256sum to GitHub README and update the download link
|
||||
|
||||
### Verify the downloaded image
|
||||
#### Linux instructions
|
||||
* Open a terminal in the directory with the downloaded files
|
||||
```
|
||||
raspiblitz-amd64-vX.X.X-YEAR-MONTH-DAY.img.gz
|
||||
raspiblitz-amd64-vX.X.X-YEAR-MONTH-DAY.img.gz.sha256
|
||||
raspiblitz-amd64-vX.X.X-YEAR-MONTH-DAY.img.gz.sha256.asc
|
||||
```
|
||||
* Paste the following commands (see the comments for the explanations and an example output)
|
||||
```bash
|
||||
# Import the signing pubkey:
|
||||
curl https://keybase.io/oms/pgp_keys.asc | gpg --import
|
||||
|
||||
# Verify the signature of the sha256 hash:
|
||||
gpg --verify *.asc
|
||||
# Look for the output 'Good signature':
|
||||
# gpg: assuming signed data in 'raspiblitz-amd64-vX.X.X-YEAR-MONTH-DAY.img.gz.sha256'
|
||||
# gpg: Signature made Mon DAY MONTH YEAR xx:xx:xx GMT
|
||||
# gpg: using RSA key 13C688DB5B9C745DE4D2E4545BFB77609B081B65
|
||||
# gpg: Good signature from "openoms <oms@tuta.io>" [unknown]
|
||||
# gpg: WARNING: This key is not certified with a trusted signature!
|
||||
# gpg: There is no indication that the signature belongs to the owner.
|
||||
# Primary key fingerprint: 13C6 88DB 5B9C 745D E4D2 E454 5BFB 7760 9B08 1B65
|
||||
|
||||
# Compare the sha256 hash to the hash of the image file
|
||||
shasum -c *.sha256
|
||||
# Look for the output 'OK' :
|
||||
# raspiblitz-amd64-vX.X.X-YEAR-MONTH-DAY.img.gz: OK
|
||||
```
|
||||
|
||||
### Create a torrent
|
||||
* Create Torrent file from image (for example with Transmission / qbBittorrent) and place in the `home.admin/assets` folder & link on README
|
||||
* Tracker list recommended to be used with the torrent:
|
||||
```
|
||||
udp://tracker.coppersurfer.tk:6969/announce
|
||||
http://tracker.yoshi210.com:6969/announce
|
||||
http://open.acgtracker.com:1096/announce
|
||||
http://tracker.skyts.net:6969/announce
|
||||
udp://9.rarbg.me:2780/announce
|
||||
http://tracker2.itzmx.com:6961/announce
|
||||
udp://exodus.desync.com:6969/announce
|
||||
http://pow7.com:80/announce
|
||||
udp://tracker.leechers-paradise.org:6969
|
||||
```
|
||||
* Comments:
|
||||
```
|
||||
raspiblitz-raspiblitz-amd64-vX.X.X-YEAR-MONTH-DAY
|
||||
|
||||
raspiblitz-raspiblitz-amd64-vX.X.X-YEAR-MONTH-DAY image, sha256sum and signature
|
||||
|
||||
Find more info at: https://github.com/rootzoll/raspiblitz/tree/dev/alternative.platforms
|
||||
|
||||
# Import the signing pubkey:
|
||||
curl https://keybase.io/oms/pgp_keys.asc | gpg --import
|
||||
gpg --verify *.asc
|
||||
|
||||
# Verify the signature of the sha256 hash (Look for the output 'Good signature'):
|
||||
gpg --verify *.asc
|
||||
# Look for the output 'Good signature'
|
||||
|
||||
# Compare the sha256 hash to the hash of the image file (Look for the output 'OK'):
|
||||
shasum -c *.sha256
|
||||
```
|
||||
|
@ -12,7 +12,7 @@ On MacOS you need to install:
|
||||
1. brew: `/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"`
|
||||
2. packer: `brew install packer`
|
||||
3. vagrant: `brew install vagrant`
|
||||
4. virtualbox: `brew cask install virtualbox` (maybe re-run after you changed the requested secruity permission to be successfull)
|
||||
4. virtualbox: `brew cask install virtualbox` (maybe re-run after you changed the requested security permission to be successful)
|
||||
|
||||
```
|
||||
cd alternative.platforms/amd64/packer
|
||||
|
@ -21,18 +21,8 @@
|
||||
"ssh_username": "vagrant",
|
||||
"type": "virtualbox-iso",
|
||||
"vboxmanage": [
|
||||
[
|
||||
"modifyvm",
|
||||
"{{.Name}}",
|
||||
"--memory",
|
||||
"1024"
|
||||
],
|
||||
[
|
||||
"modifyvm",
|
||||
"{{.Name}}",
|
||||
"--cpus",
|
||||
"1"
|
||||
]
|
||||
["modifyvm", "{{.Name}}", "--memory", "1024"],
|
||||
["modifyvm", "{{.Name}}", "--cpus", "1"]
|
||||
],
|
||||
"vm_name": "raspiblitz-amd64"
|
||||
}
|
||||
@ -63,10 +53,9 @@
|
||||
],
|
||||
"variables": {
|
||||
"branch": "dev",
|
||||
"github_user": "rootzoll",
|
||||
"iso_checksum": "2af8f43d4a7ab852151a7f630ba596572213e17d3579400b5648eba4cc974ed0",
|
||||
"github_user": "raspiblitz",
|
||||
"iso_checksum": "23ab444503069d9ef681e3028016250289a33cc7bab079259b73100daee0af66",
|
||||
"iso_checksum_type": "sha256",
|
||||
"iso_url": "https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-10.6.0-amd64-netinst.iso"
|
||||
"iso_url": "https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-12.2.0-amd64-netinst.iso"
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -22,9 +22,3 @@ wget --no-check-certificate \
|
||||
-O /home/vagrant/.ssh/authorized_keys
|
||||
chmod 0600 /home/vagrant/.ssh/authorized_keys
|
||||
chown -R vagrant /home/vagrant/.ssh
|
||||
|
||||
# disable apparmor - tor will not work with raspiblitz customization
|
||||
mkdir -p /etc/default/grub.d
|
||||
echo 'GRUB_CMDLINE_LINUX_DEFAULT="$GRUB_CMDLINE_LINUX_DEFAULT apparmor=0"' \
|
||||
| tee /etc/default/grub.d/apparmor.cfg
|
||||
update-grub
|
||||
|
@ -5,12 +5,12 @@ echo "************* Vagrant Provisioning ********************"
|
||||
echo 'Syncing local code with RaspiBlitzVM'
|
||||
|
||||
# make sure the lastest sync script is in place
|
||||
cp /vagrant/home.admin/XXsyncScripts.sh /home/admin/XXsyncScripts.sh
|
||||
cp /vagrant/home.admin/config.scripts/blitz.github.sh /home/admin/config.scripts/blitz.github.sh
|
||||
|
||||
# execute 'patch' command to sync laptop with VM
|
||||
/home/admin/XXsyncScripts.sh -run
|
||||
/home/admin/config.scripts/blitz.github.sh -run
|
||||
|
||||
source <(/home/admin/config.scripts/internet.sh status)
|
||||
source <(/home/admin/config.scripts/internet.sh status local)
|
||||
|
||||
echo
|
||||
echo "************* NEXT ********************"
|
||||
|
@ -1,13 +1,13 @@
|
||||
|
||||
# ⚡️ RaspiBlitz-on-DietPi ⚡️
|
||||
# For the Odroid HC1 / HC2 / XU3 / XU4
|
||||
# For the Odroid HC1 / HC2 / XU3 / XU4 / MC1
|
||||
|
||||

|
||||
|
||||
## There are 3 options provided:
|
||||
* a trusted fully prebuilt SDcard image
|
||||
* Automated building process.
|
||||
* Build your own SDcard from the image downloaded from [Dietpi.com](dietpi.com#download)
|
||||
* Build your own SDcard from the image downloaded from [dietpi.com](https://dietpi.com/#download)
|
||||
---
|
||||
### Download the fully prebuilt RaspiBlitz-on-DietPi SDcard image
|
||||
|
||||
@ -30,15 +30,15 @@ The setup continues with the [RaspiBlitz Setup Process](https://github.com/rootz
|
||||
---
|
||||
### The automated building process:
|
||||
|
||||
1) Download the DietPi image for the Odroid HC1 / HC2 / XU3 / XU4:
|
||||
https://dietpi.com/downloads/images/DietPi_OdroidXU4-ARMv7-Stretch.7z
|
||||
1) Download the DietPi image for the Odroid HC1 / HC2 / XU3 / XU4 / MC1:
|
||||
https://dietpi.com/downloads/images/DietPi_OdroidXU4-ARMv7-Buster.7z
|
||||
2) Burn it to the SD card with [Etcher](https://www.balena.io/etcher/)
|
||||
|
||||
3) Right click and download the following two files: [DietPi.txt](https://raw.githubusercontent.com/rootzoll/raspiblitz/master/alternative.platforms/dietpi/boot/dietpi.txt), [Automation_Custom_Script.sh](https://raw.githubusercontent.com/rootzoll/raspiblitz/dev/alternative.platforms/dietpi/boot/Automation_Custom_Script.sh)
|
||||
3) Right click and download the following two files: [dietpi.txt](https://raw.githubusercontent.com/rootzoll/raspiblitz/master/alternative.platforms/dietpi/boot/dietpi.txt), [Automation_Custom_Script.sh](https://raw.githubusercontent.com/rootzoll/raspiblitz/dev/alternative.platforms/dietpi/boot/Automation_Custom_Script.sh)
|
||||
|
||||
4) Copy them to the /boot directory of the DietPi SDcard
|
||||
|
||||
[DietPi.txt](https://raw.githubusercontent.com/rootzoll/raspiblitz/master/alternative.platforms/dietpi/boot/dietpi.txt): Overwrites the default dietpi.txt. Modified the settings to automate the DietPi setup. (see the details [here](https://github.com/rootzoll/raspiblitz/tree/dev/alternative.platforms/dietpi#excerpts-from-the-customized-dietpitxt))
|
||||
[dietpi.txt](https://raw.githubusercontent.com/rootzoll/raspiblitz/master/alternative.platforms/dietpi/boot/dietpi.txt): Overwrites the default dietpi.txt. Modified the settings to automate the DietPi setup. (see the details [here](https://github.com/rootzoll/raspiblitz/tree/dev/alternative.platforms/dietpi#excerpts-from-the-customized-dietpitxt))
|
||||
|
||||
[Automation_Custom_Script.sh](https://raw.githubusercontent.com/rootzoll/raspiblitz/dev/alternative.platforms/dietpi/boot/Automation_Custom_Script.sh): Runs after DietPi installation is completed. Contains the link to download and run the build_sdcard.sh from the dev branch of @rootzoll.
|
||||
(Optionally open the file with a text editor and uncomment (remove the `#` from the front of) the line with the branch you want to build the SDcard from.)
|
||||
@ -53,14 +53,6 @@ https://dietpi.com/downloads/images/DietPi_OdroidXU4-ARMv7-Stretch.7z
|
||||
`tail -n1000 -f /tmp/DietPi-Update/dietpi-update.log` - follow the dietpi-update process
|
||||
`tail -n1000 -f /var/tmp/dietpi/logs/dietpi-automation_custom_script.log` follow the output of the build_sdcard.sh
|
||||
|
||||
Starting from a v6.14 DietPi image is causing a bootloop after the first restart. See the issue: https://github.com/MichaIng/DietPi/issues/2495. This will be sorted out once a new image version is uploaded for the Odroids to dietpi.com.
|
||||
To get past it:
|
||||
* Log in with root after the first restart (when the loop is ongoing - without any output to the HDMI screen)
|
||||
* CTRL+C, run `dietpi-update` and update
|
||||
* `reboot` once finished
|
||||
* from then the Automation_Custom_Script.sh is carrying on
|
||||
|
||||
|
||||
6) When the setup is finished log in as `admin`:
|
||||
`ssh admin@[IP-OF-RASPIBLITZ]`
|
||||
password: `raspiblitz`
|
||||
@ -71,12 +63,8 @@ password: `raspiblitz`
|
||||
|
||||
### Build your own DietPi image:
|
||||
|
||||
Watch out this is an ardous process.
|
||||
Updating from a v6.14 DietPi image is causing a bootloop after the first restart. See the issue: https://github.com/MichaIng/DietPi/issues/2495.
|
||||
This will be sorted out once a new image version is uploaded for the Odroids to dietpi.com
|
||||
|
||||
* For the Odroid HC1 / HC2 / XU3 / XU4 the start is this image:
|
||||
https://dietpi.com/downloads/images/DietPi_OdroidXU4-ARMv7-Stretch.7z
|
||||
* For the Odroid HC1 / HC2 / XU3 / XU4 / MC1 the start is this image:
|
||||
https://dietpi.com/downloads/images/DietPi_OdroidXU4-ARMv7-Buster.7z
|
||||
* Burn it to the SD with [Etcher](https://www.balena.io/etcher/)
|
||||
|
||||
* Insert the SD card, connect the HDD, the network cable and power supply to boot up the Odroid:
|
||||
@ -84,50 +72,19 @@ https://dietpi.com/downloads/images/DietPi_OdroidXU4-ARMv7-Stretch.7z
|
||||
* In the desktop terminal on Linux / MacOS or Putty on Windows:
|
||||
`ssh root@[IP-OF-DIETPI]`
|
||||
password: `dietpi`
|
||||
Getting started with DietPi: https://dietpi.com/phpbb/viewtopic.php?f=8&t=9#p9
|
||||
Getting started with DietPi: https://dietpi.com/docs/install/#4-first-logon-on-dietpi
|
||||
|
||||
* Ok > Cancel > Cancel
|
||||
automatic apt update & apt upgrade and asks to reboot
|
||||

|
||||
|
||||
* Log back in:
|
||||
`ssh root@[IP-OF-DIETPI]`
|
||||
password: `dietpi`
|
||||
* after the update the ssh keys might change:
|
||||
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
|
||||
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||
run (can be copied from the terminal output):
|
||||
`ssh-keygen -f "/home/[your-linux-username]/.ssh/known_hosts" -R "dietpi.IP"`
|
||||
`ssh root@[IP-OF-DIETPI]`
|
||||
yes >
|
||||
password: `dietpi`
|
||||
|
||||
* At this point if the DietPi OS was not updated from 6.14 it does not manage to save settings going forward.
|
||||
Exit the software installer (press Tab to jump to Exit)
|
||||

|
||||
|
||||
* in the bash prompt run:
|
||||
`dietpi-update`
|
||||
Ok > Cancel the recovery point
|
||||
update > Opt out of survey > Ok
|
||||
Reboots
|
||||
|
||||
* Log back in:
|
||||
`ssh root@[IP-OF-DIETPI]`
|
||||
password: `dietpi`
|
||||
* In the DietPi software menu install fail2ban and make OpenSSH server the default SSH server.
|
||||
Ok > Cancel > Cancel
|
||||
Search `fail2ban` > Space to select > Enter
|
||||
SSH server > switch from Dropbear to the OpenSSH-server
|
||||
Install > Ok
|
||||
Opt out of survey > Ok
|
||||
Reboots again
|
||||
|
||||
* Log back in:
|
||||
`ssh root@[IP-OF-DIETPI]`
|
||||
password: `dietpi`
|
||||
Changing the SSH server will change the SSH keys again. To clear:
|
||||
Changing the SSH server will change the SSH keys. To clear:
|
||||
`ssh-keygen -f "/home/[your-linux-username]/.ssh/known_hosts" -R "dietpi.IP"`
|
||||
|
||||
|
||||
@ -135,7 +92,7 @@ Changing the SSH server will change the SSH keys again. To clear:
|
||||
|
||||
* Run this command to build from the master branch of @rootzoll:
|
||||
`wget https://raw.githubusercontent.com/rootzoll/raspiblitz/dev/build_sdcard.sh && sudo bash build_sdcard.sh`
|
||||
This will take a couple minutes depending on your internet ceonnection and the processing power of the SBC.
|
||||
This will take a couple minutes depending on your internet connection and the processing power of the SBC.
|
||||
|
||||
* Format of the command to build the SDcard from an alternative branch:
|
||||
`wget https://raw.githubusercontent.com/[GITHUB-USERNAME]/raspiblitz/[BRANCH]/build_sdcard.sh && sudo bash build_sdcard.sh [BRANCH] [GITHUB-USERNAME]`
|
||||
|
@ -87,7 +87,7 @@ During the RaspiBlitz setup process:
|
||||
`sudo tail -n100 /mnt/hdd/bitcoin/debug.log` - shows the last 100 lines
|
||||
`sudo systemctl status lnd` - status of the lnd service
|
||||
`sudo journalctl -f -u lnd`
|
||||
`./home/admin/XXdebugLogs.sh` - debug log collection on the RaspiBlitz
|
||||
`debug` - debug log collection on the RaspiBlitz
|
||||
|
||||
---
|
||||
|
||||
|
@ -21,7 +21,7 @@ if [ ${isDietPi} -gt 0 ]; then
|
||||
fi
|
||||
if [ "${baseimage}" = "?" ]; then
|
||||
cat /etc/os-release 2>/dev/null
|
||||
echo "!!! FAIL !!!"
|
||||
echo "# FAIL #"
|
||||
echo "Base Image cannot be detected or is not supported."
|
||||
exit 1
|
||||
else
|
||||
@ -55,7 +55,7 @@ if [ "${CHOICE}" = "GPIO" ]; then
|
||||
sudo apt-mark hold raspberrypi-bootloader
|
||||
sudo ./LCD35-show
|
||||
else
|
||||
sudo rm -rf /etc/X11/xorg.conf.d/40-libinput.conf
|
||||
sudo rm -rf /etc/X11/xorg.conf.d/40-libinput.conf 2>/dev/null
|
||||
sudo mkdir /etc/X11/xorg.conf.d
|
||||
sudo cp ./usr/tft35a-overlay.dtb /boot/overlays/
|
||||
sudo cp ./usr/tft35a-overlay.dtb /boot/overlays/tft35a.dtbo
|
||||
@ -79,7 +79,7 @@ elif [ "${CHOICE}" = "HDMI" ]; then
|
||||
sudo chmod -R 755 LCD-show
|
||||
cd LCD-show/
|
||||
#sudo ./MPI3508-show
|
||||
sudo rm -rf /etc/X11/xorg.conf.d/40-libinput.conf
|
||||
sudo rm -rf /etc/X11/xorg.conf.d/40-libinput.conf 2>/dev/null
|
||||
|
||||
if [ "${baseimage}" != "dietpi" ]; then
|
||||
sudo cp -rf ./boot/config-35-480X320.txt /boot/config.txt
|
||||
|
1583
build_sdcard.sh
Executable file → Normal file
@ -1,9 +0,0 @@
|
||||
# Raspiblitz Case: Standard
|
||||
|
||||
This is a raspiblitz case prototype. The standard file (Raspiblitz_standard.stl) should be modified to fit your HDD.
|
||||
|
||||
#### To Do
|
||||
|
||||
* Update the HDD container to fit the standard HDD model from the raspiblitz amazon buylist. (Toshiba HDTB420EK3AA 2TB Canvio Basics 2.5-Inch USB 3.0 Portable External Hard Drive - Black)
|
||||
|
||||
* Add a cool lightning bolt to improve the design.
|
272
ci/README.md
Normal file
@ -0,0 +1,272 @@
|
||||
<!-- omit in toc -->
|
||||
# Automated builds
|
||||
|
||||
<details>
|
||||
<summary>Table of Contents</summary>
|
||||
|
||||
- [Ready made images for arm64-rpi](#ready-made-images-for-arm64-rpi)
|
||||
- [Ready made images for amd64 (x86)](#ready-made-images-for-amd64-x86)
|
||||
- [Write the image to a disk connected with USB](#write-the-image-to-a-disk-connected-with-usb)
|
||||
- [Prepare the disk](#prepare-the-disk)
|
||||
- [Option 1 - rite the .qcow2 file directly to disk with `qemu-image dd`](#option-1---rite-the-qcow2-file-directly-to-disk-with-qemu-image-dd)
|
||||
- [Option 2 - convert the .qcow2 volume to a raw disk image](#option-2---convert-the-qcow2-volume-to-a-raw-disk-image)
|
||||
- [The first boot](#the-first-boot)
|
||||
- [Lean image with Gnome desktop (default image)](#lean-image-with-gnome-desktop-default-image)
|
||||
- [Extend the root partition (optional - recommended)](#extend-the-root-partition-optional---recommended)
|
||||
- [Add wifi driver (optional)](#add-wifi-driver-optional)
|
||||
- [Local build](#local-build)
|
||||
- [Generate an arm64-rpi image](#generate-an-arm64-rpi-image)
|
||||
- [Generate an amd64 image](#generate-an-amd64-image)
|
||||
- [amd64-lean-desktop-uefi-image](#amd64-lean-desktop-uefi-image)
|
||||
- [amd64-lean-server-legacyboot-image](#amd64-lean-server-legacyboot-image)
|
||||
- [Notes for the lean server image without Gnome desktop](#notes-for-the-lean-server-image-without-gnome-desktop)
|
||||
- [After the boot](#after-the-boot)
|
||||
- [Connect to wifi from the command line (optional)](#connect-to-wifi-from-the-command-line-optional)
|
||||
- [Add Gnome desktop to the server image (optional)](#add-gnome-desktop-to-the-server-image-optional)
|
||||
- [Fatpack images](#fatpack-images)
|
||||
- [Workflow notes](#workflow-notes)
|
||||
- [VNC](#vnc)
|
||||
- [Packer settings](#packer-settings)
|
||||
- [Flashing](#flashing)
|
||||
|
||||
</details>
|
||||
|
||||
## Ready made images for arm64-rpi
|
||||
* The images are built in GitHub actions
|
||||
* To see the downloadable artifacts will need to log in to GitHub
|
||||
* Find the latest successful build of the default amd64 image:
|
||||
https://github.com/raspiblitz/raspiblitz/actions/workflows/arm64-rpi-lean-image.yml?query=workflow%3Aarm64-rpi-lean-image-build+is%3Asuccess+branch%3Adev
|
||||
* unpack the artifact to the same directory
|
||||
```
|
||||
unzip ./raspiblitz-arm64-rpi-image-*.zip
|
||||
```
|
||||
* The resulting `raspiblitz-arm64-rpi-lean.img.gz` can be written to an SDcard directly with Balena Etcher
|
||||
|
||||
|
||||
## Ready made images for amd64 (x86)
|
||||
* The images are built in GitHub actions
|
||||
* To see the downloadable artifacts will need to log in to GitHub
|
||||
* Find the latest successful build of the default amd64 image:
|
||||
https://github.com/rootzoll/raspiblitz/actions/workflows/amd64-lean-image.yml?query=workflow%3Aamd64-lean-image-build+branch%3Adev+is%3Asuccess++
|
||||
```
|
||||
# unpack the artifact to the same directory
|
||||
unzip ./raspiblitz-amd64-image-*.zip
|
||||
# unpack the image
|
||||
gzip -dkv raspiblitz-amd64-debian-lean.qcow2.gz
|
||||
# install qemu-utils
|
||||
sudo apt install -y qemu-utils
|
||||
```
|
||||
### Write the image to a disk connected with USB
|
||||
|
||||
#### Prepare the disk
|
||||
* identify the connected disk with `lsblk` e.g., `/dev/sdk`
|
||||
* set the disk variable
|
||||
```
|
||||
# identify the USB connected disk
|
||||
lsblk
|
||||
# set the disk variable
|
||||
disk=/dev/sdk
|
||||
```
|
||||
* clean the existing partitions:
|
||||
```
|
||||
# unmount all partitions
|
||||
sudo umount ${disk}*
|
||||
# wipe the partition table
|
||||
sudo wipefs --all ${disk}
|
||||
```
|
||||
|
||||
#### Option 1 - rite the .qcow2 file directly to disk with `qemu-image dd`
|
||||
* requires less disk space - the .qcow2 volume is 8.1 GB
|
||||
```
|
||||
sudo qemu-img dd if=./raspiblitz-amd64-debian-lean.qcow2 of=${disk} bs=4M
|
||||
```
|
||||
|
||||
#### Option 2 - convert the .qcow2 volume to a raw disk image
|
||||
* the raw .img is 30GB
|
||||
```
|
||||
# convert
|
||||
qemu-img convert ./raspiblitz-amd64-debian-lean.qcow2 ./raspiblitz-amd64-debian-lean.img
|
||||
```
|
||||
* identify the connected disk with `lsblk` e.g., `/dev/sdk`
|
||||
* use [Balena Etcher](https://www.balena.io/etcher/)
|
||||
* or `dd` to write the .img to disk
|
||||
```
|
||||
sudo dd if=./raspiblitz-amd64-debian-lean.img of=${disk} bs=4M status=progress
|
||||
```
|
||||
|
||||
### The first boot
|
||||
#### Lean image with Gnome desktop (default image)
|
||||
* log in on screen:
|
||||
* username: `admin`
|
||||
* password: `raspiblitz`
|
||||
* start a terminal for guidance
|
||||
* alternatively connect with ssh over the LAN with the same username and password
|
||||
|
||||
#### Extend the root partition (optional - recommended)
|
||||
* The default image is 30GB. The partition can be extended to the full size of the disk.
|
||||
* The lvm partition can be extended while mounted so this step can be done later as well while the system is running.
|
||||
* CLI (recommended)
|
||||
```
|
||||
# identify the USB connected disk
|
||||
lsblk
|
||||
df -h
|
||||
# select the disk carefully
|
||||
disk="/dev/sde"
|
||||
# resize the extended partition to the full size of the disk
|
||||
sudo parted ${disk} -- resizepart 2 100%
|
||||
# resize the lvm partition to the full size of the disk
|
||||
sudo parted ${disk} -- resizepart 5 100%
|
||||
# extend the physical volume to size of the lvm partition
|
||||
sudo pvresize ${disk}5
|
||||
# extend the root lvm to the full free space and resize the filesystem
|
||||
sudo lvextend -r -l +100%FREE /dev/mapper/raspiblitz--amd64--vg-root
|
||||
```
|
||||
* GUI with GParted
|
||||
```
|
||||
# install
|
||||
sudo apt install gparted
|
||||
# start the gparted GUI
|
||||
sudo gparted
|
||||
# resize the extended partition to the full size of the disk
|
||||
# extend the lvm to the full free space and resize the filesystem (extends the swap space by default)
|
||||
# in CLI: extend the root lvm
|
||||
sudo lvextend -r -l +100%FREE /dev/mapper/raspiblitz--amd64--vg-root
|
||||
```
|
||||
|
||||
#### Add wifi driver (optional)
|
||||
* as in https://wiki.debian.org/iwlwifi
|
||||
* add the component `non-free` after `deb http://deb.debian.org/debian bullseye main` in `/etc/apt/sources.list`
|
||||
* install the wifi driver for the mentioned cards:
|
||||
```
|
||||
sudo apt update && sudo apt install firmware-iwlwifi
|
||||
```
|
||||
* alternatively download the deb package from: http://ftp.debian.org/debian/pool/non-free-firmware/f/firmware-nonfree/firmware-iwlwifi_20230210-5_all.deb
|
||||
* install with:
|
||||
```
|
||||
sudo dpkg -i firmware-iwlwifi_20230210-5_all.deb
|
||||
```
|
||||
|
||||
## Local build
|
||||
with the [Makefile](https://github.com/rootzoll/raspiblitz/blob/dev/Makefile)
|
||||
* needs ~20 GB free space
|
||||
* tested on:
|
||||
* Ubuntu Live (jammy)
|
||||
* Debian Bullseye Desktop
|
||||
* Preparation:
|
||||
```
|
||||
# change to a mountpoint with sufficient space (check with 'df -h')
|
||||
cd $HOME/
|
||||
# switch to root
|
||||
sudo su
|
||||
# install git and make
|
||||
apt update && apt install -y git make
|
||||
# download the repo (or your fork)
|
||||
git clone https://github.com/rootzoll/raspiblitz
|
||||
cd raspiblitz
|
||||
# checkout the desired branch
|
||||
git checkout dev
|
||||
```
|
||||
|
||||
### Generate an arm64-rpi image
|
||||
* The workflow locally and in github actions generates a .img raw format image for the Raspberry Pi.
|
||||
```
|
||||
make arm64-rpi-lean-image
|
||||
```
|
||||
* find the image and sha256 hashes in the `ci/arm64-rpi/packer-builder-arm` directory
|
||||
* the .img.gz file can be written to an SDcard directly with Balena Etcher
|
||||
|
||||
### Generate an amd64 image
|
||||
* The workflow locally and in github actions generates a .qcow2 format amd64 image.
|
||||
* When finished find the compressed .qcow2 image and sha256 hashes in the `ci/amd64/builds` directory
|
||||
|
||||
#### amd64-lean-desktop-uefi-image
|
||||
* lean image, Gnome desktop, UEFI boot
|
||||
* Tested with
|
||||
* written to disk and booted with UEFI
|
||||
```
|
||||
make amd64-lean-desktop-uefi-image
|
||||
```
|
||||
|
||||
#### amd64-lean-server-legacyboot-image
|
||||
* lean image, no desktop (cli only), legacy boot for old computers
|
||||
* Tested with
|
||||
* libvirt / virsh / virt-manager (https://virt-manager.org/)
|
||||
* written to disk and booted with legacy boot (non-UEFI / CSM mode)
|
||||
```
|
||||
make amd64-lean-server-legacyboot-image
|
||||
```
|
||||
|
||||
## Notes for the lean server image without Gnome desktop
|
||||
### After the boot
|
||||
* press any key to get to a login prompt after the splash screen
|
||||
* username: `admin`
|
||||
* password: `raspiblitz`
|
||||
|
||||
### Connect to wifi from the command line (optional)
|
||||
* if the wifi driver is included in the FOSS Debian distro
|
||||
* in the command line run the network manager interface to connect:
|
||||
```
|
||||
sudo nmtui
|
||||
```
|
||||
|
||||
#### Add Gnome desktop to the server image (optional)
|
||||
* Connect to the internet (easiest to plug in a LAN cable - use a USB - LAN adapter if have no port)
|
||||
```
|
||||
apt install gnome
|
||||
systemctl start gdm
|
||||
```
|
||||
|
||||
## Fatpack images
|
||||
* can open a browser and go to:
|
||||
* http://localhost
|
||||
* can also open the WebUI on another computer
|
||||
* Find the the RaspiBlitz_IP in your router dashboard, in the terminal prompt or with `hostname -I`
|
||||
* open: http://RaspiBlitz_IP
|
||||
|
||||
## Workflow notes
|
||||
The github workflow files are the equivalent of the Makefile commands run locally.
|
||||
The local repo owner (`GITHUB_ACTOR`) and branch (`GITHUB_HEAD_REF`) is picked up.
|
||||
The build_sdcard.sh is downloaded from the source branch and built with the options pack=[lean|fatpack] to set fatpack=[0|1].
|
||||
|
||||
The github workflow is running the job in an ubuntu-22.04 image.
|
||||
|
||||
The amd64 image is built with running a qemu VM
|
||||
* installs the base OS (Debian)
|
||||
* connects with ssh and runs the scripts including the build_sdcard.sh
|
||||
|
||||
The arm64-rpi image generation runs in Docker in github actions and without Docker locally.
|
||||
* the base image (RaspberryOS) is started in the qemu VM
|
||||
* Packer runs the build_sdcard.sh directly in the VM
|
||||
|
||||
After the image is built (and there is no exit with errors) the next steps are:
|
||||
* compute checksum of the qemu/raw image
|
||||
* compress the image with gzip
|
||||
* compute checksum of the compressed image
|
||||
* (in github actions: upload the artifacts in one .zip file)
|
||||
|
||||
### VNC
|
||||
* can follow the setup locally in VNC with the port stated in the first part of the logs eg: `Found available VNC port: 5900 on IP: 127.0.0.1`
|
||||
|
||||
### Packer settings
|
||||
* `disk_size` / `image_size` - the size op the raw image. The .qcow2 file is compressed.
|
||||
* `template` - image filename
|
||||
* `output_directory` - directory under builds where the image will be placed
|
||||
* the `pi` user is given passwordless sudo access and used for the image setup
|
||||
* use `file_checksum` instead of `file_checksum_url`. The image must be downloaded and verified with PGP manually to fill the field:
|
||||
```
|
||||
# image
|
||||
wget https://downloads.raspberrypi.org/raspios_arm64/images/raspios_arm64-2022-09-26/2022-09-22-raspios-bullseye-arm64.img.xz
|
||||
# signature
|
||||
wget https://downloads.raspberrypi.org/raspios_arm64/images/raspios_arm64-2022-09-26/2022-09-22-raspios-bullseye-arm64.img.xz.sig
|
||||
# hash
|
||||
wget https://downloads.raspberrypi.org/raspios_arm64/images/raspios_arm64-2022-09-26/2022-09-22-raspios-bullseye-arm64.img.xz.sha256
|
||||
|
||||
curl https://www.raspberrypi.org/raspberrypi_downloads.gpg.key | gpg --import
|
||||
|
||||
sha256sum -c 2022-09-22-raspios-bullseye-arm64.img.xz.sha256 && \
|
||||
gpg --verify 2022-09-22-raspios-bullseye-arm64.img.xz.sig
|
||||
|
||||
cat 2022-09-22-raspios-bullseye-arm64.img.xz.sha256
|
||||
```
|
||||
### Flashing
|
||||
* using `qemu-img dd bs=4M if=raspiblitz-amd64-debian-lean.qcow2 of=/dev/sdd` changed the UUID so it won't boot without editing GRUB
|
4
ci/amd64/_common/env.sh
Normal file
@ -0,0 +1,4 @@
|
||||
#!/bin/sh
|
||||
|
||||
echo "# Display the environment variables"
|
||||
env
|
20
ci/amd64/_common/sshd.sh
Normal file
@ -0,0 +1,20 @@
|
||||
#!/bin/sh -eux
|
||||
|
||||
SSHD_CONFIG="/etc/ssh/sshd_config"
|
||||
|
||||
# ensure that there is a trailing newline before attempting to concatenate
|
||||
sed -i -e '$a\' "$SSHD_CONFIG"
|
||||
|
||||
USEDNS="UseDNS no"
|
||||
if grep -q -E "^[[:space:]]*UseDNS" "$SSHD_CONFIG"; then
|
||||
sed -i "s/^\s*UseDNS.*/${USEDNS}/" "$SSHD_CONFIG"
|
||||
else
|
||||
echo "$USEDNS" >>"$SSHD_CONFIG"
|
||||
fi
|
||||
|
||||
GSSAPI="GSSAPIAuthentication no"
|
||||
if grep -q -E "^[[:space:]]*GSSAPIAuthentication" "$SSHD_CONFIG"; then
|
||||
sed -i "s/^\s*GSSAPIAuthentication.*/${GSSAPI}/" "$SSHD_CONFIG"
|
||||
else
|
||||
echo "$GSSAPI" >>"$SSHD_CONFIG"
|
||||
fi
|
115
ci/amd64/debian/build.amd64-debian.pkr.hcl
Normal file
@ -0,0 +1,115 @@
|
||||
variable "iso_name" { default = "debian-12.6.0-amd64-netinst.iso" }
|
||||
variable "iso_checksum" { default = "ade3a4acc465f59ca2496344aab72455945f3277a52afc5a2cae88cdc370fa12" }
|
||||
|
||||
variable "pack" { default = "lean" }
|
||||
variable "github_user" { default = "raspiblitz" }
|
||||
variable "branch" { default = "dev" }
|
||||
variable "desktop" { default = "none" }
|
||||
|
||||
variable "boot" { default = "uefi" }
|
||||
variable "preseed_file" { default = "preseed.cfg" }
|
||||
variable "hostname" { default = "raspiblitz-amd64" }
|
||||
|
||||
variable "disk_size" { default = "30000" }
|
||||
variable "memory" { default = "4096" }
|
||||
variable "cpus" { default = "4" }
|
||||
|
||||
locals {
|
||||
name_template = "${var.hostname}-debian-${var.pack}"
|
||||
bios_file = var.boot == "uefi" ? "OVMF.fd" : "bios-256k.bin"
|
||||
boot_command = var.boot == "uefi" ? [
|
||||
"<wait><wait><wait>c<wait><wait><wait>",
|
||||
"linux /install.amd/vmlinuz ",
|
||||
"auto=true ",
|
||||
"url=http://{{ .HTTPIP }}:{{ .HTTPPort }}/${var.preseed_file} ",
|
||||
"hostname=${var.hostname} ",
|
||||
"domain=${var.hostname}.local ",
|
||||
"interface=auto ",
|
||||
"vga=788 noprompt quiet --<enter>",
|
||||
"initrd /install.amd/initrd.gz<enter>",
|
||||
"boot<enter>"
|
||||
] : [
|
||||
"<esc><wait>install <wait>",
|
||||
"<wait><wait><wait><wait><wait><wait><wait><wait><wait><wait><wait><wait><wait><wait><wait><wait> preseed/url=http://{{ .HTTPIP }}:{{ .HTTPPort }}/${var.preseed_file} <wait>",
|
||||
"debian-installer=en_US.UTF-8 <wait>",
|
||||
"auto <wait>",
|
||||
"locale=en_US.UTF-8 <wait>",
|
||||
"kbd-chooser/method=us <wait>",
|
||||
"keyboard-configuration/xkb-keymap=us <wait>",
|
||||
"netcfg/get_hostname=${var.hostname} <wait>",
|
||||
"netcfg/get_domain=${var.hostname}.local <wait>",
|
||||
"fb=false <wait>",
|
||||
"debconf/frontend=noninteractive <wait>",
|
||||
"console-setup/ask_detect=false <wait>",
|
||||
"console-keymaps-at/keymap=us <wait>",
|
||||
"grub-installer/bootdev=default <wait>",
|
||||
"<enter><wait>"
|
||||
]
|
||||
}
|
||||
|
||||
source "qemu" "debian" {
|
||||
boot_command = local.boot_command
|
||||
boot_wait = "5s"
|
||||
cpus = var.cpus
|
||||
disk_size = var.disk_size
|
||||
http_directory = "./http"
|
||||
iso_checksum = var.iso_checksum
|
||||
iso_url = "https://cdimage.debian.org/cdimage/release/current/amd64/iso-cd/${var.iso_name}"
|
||||
memory = var.memory
|
||||
output_directory = "../builds/${local.name_template}-qemu"
|
||||
shutdown_command = "echo 'raspiblitz' | sudo /sbin/shutdown -hP now"
|
||||
ssh_password = "raspiblitz"
|
||||
ssh_port = 22
|
||||
ssh_timeout = "10000s"
|
||||
ssh_username = "pi"
|
||||
format = "qcow2"
|
||||
vm_name = "${local.name_template}.qcow2"
|
||||
headless = false
|
||||
vnc_bind_address = "127.0.0.1"
|
||||
vnc_port_max = 5900
|
||||
vnc_port_min = 5900
|
||||
qemuargs = [
|
||||
["-m", var.memory],
|
||||
["-bios", local.bios_file],
|
||||
["-display", "none"]
|
||||
]
|
||||
}
|
||||
|
||||
build {
|
||||
description = "Can't use variables here yet!"
|
||||
sources = ["source.qemu.debian"]
|
||||
|
||||
provisioner "shell" {
|
||||
environment_vars = [
|
||||
"HOME_DIR=/home/pi",
|
||||
"github_user=${var.github_user}",
|
||||
"branch=${var.branch}",
|
||||
"pack=${var.pack}",
|
||||
"desktop=${var.desktop}"
|
||||
]
|
||||
|
||||
execute_command = "echo 'raspiblitz' | {{.Vars}} sudo -S -E sh -eux '{{.Path}}'"
|
||||
expect_disconnect = true
|
||||
scripts = [
|
||||
"./../_common/env.sh",
|
||||
"./scripts/update.sh",
|
||||
"./../_common/sshd.sh",
|
||||
"./scripts/networking.sh",
|
||||
"./scripts/sudoers.sh",
|
||||
"./scripts/systemd.sh",
|
||||
"./scripts/build.raspiblitz.sh",
|
||||
"./scripts/cleanup.sh"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
packer {
|
||||
required_version = ">= 1.7.0, < 2.0.0"
|
||||
|
||||
required_plugins {
|
||||
qemu = {
|
||||
source = "github.com/hashicorp/qemu"
|
||||
version = ">= 1.0.0, < 2.0.0"
|
||||
}
|
||||
}
|
||||
}
|
72
ci/amd64/debian/http/preseed.cfg
Normal file
@ -0,0 +1,72 @@
|
||||
# https://github.com/chef/bento/blob/main/packer_templates/http/debian/preseed.cfg
|
||||
# https://www.debian.org/releases/stable/example-preseed.txt
|
||||
# https://github.com/tylert/packer-build/blob/master/source/debian/12_bookworm/base-uefi.preseed
|
||||
# variables: https://github.com/tylert/packer-build/blob/master/source/debian/12_bookworm/base-uefi.pkr.hcl
|
||||
|
||||
# Locale Setup
|
||||
d-i debian-installer/language string en
|
||||
d-i debian-installer/country string US
|
||||
d-i debian-installer/locale string en_US.UTF-8
|
||||
# d-i localechooser/supported-locales multiselect en_CA.UTF-8 fr_CA.UTF-8 zh_CN.UTF-8
|
||||
# d-i pkgsel/install-language-support boolean true
|
||||
|
||||
# Keyboard Setup
|
||||
d-i keyboard-configuration/xkb-keymap select us
|
||||
|
||||
# Clock Setup
|
||||
# d-i time/zone string Canada/Eastern
|
||||
d-i time/zone string UTC
|
||||
d-i clock-setup/utc boolean true
|
||||
# set above to false if making a bootable USB to run on same system as Windows
|
||||
|
||||
# Network Setup
|
||||
d-i netcfg/get_hostname string raspiblitz-amd64
|
||||
d-i netcfg/get_domain string
|
||||
# https://bugs.launchpad.net/ubuntu/+source/netcfg/+bug/713385
|
||||
d-i netcfg/choose_interface select auto
|
||||
# make sure you also add "interface=auto" to your boot command too
|
||||
# https://bugs.launchpad.net/ubuntu/+source/netcfg/+bug/713385
|
||||
|
||||
# User Setup
|
||||
d-i passwd/root-login boolean false
|
||||
d-i passwd/root-password-again password raspiblitz
|
||||
d-i passwd/root-password password raspiblitz
|
||||
d-i passwd/user-fullname string pi
|
||||
d-i passwd/user-uid string 1000
|
||||
d-i passwd/user-password password raspiblitz
|
||||
d-i passwd/user-password-again password raspiblitz
|
||||
d-i passwd/username string pi
|
||||
|
||||
# Package Setup
|
||||
d-i hw-detect/load_firmware boolean false
|
||||
d-i hw-detect/load_media boolean false
|
||||
apt-cdrom-setup apt-setup/cdrom/set-first boolean false
|
||||
d-i mirror/country string manual
|
||||
d-i mirror/http/hostname string httpredir.debian.org
|
||||
d-i mirror/http/directory string /debian
|
||||
d-i mirror/http/proxy string
|
||||
d-i apt-setup/contrib boolean true
|
||||
d-i apt-setup/non-free boolean true
|
||||
|
||||
tasksel tasksel/first multiselect ssh-server, standard
|
||||
d-i pkgsel/include string sudo bzip2 acpid cryptsetup zlib1g-dev wget curl dkms fuse make nfs-common net-tools cifs-utils rsync
|
||||
d-i pkgsel/install-language-support boolean false
|
||||
d-i pkgsel/update-policy select none
|
||||
d-i pkgsel/upgrade select full-upgrade
|
||||
|
||||
popularity-contest popularity-contest/participate boolean false
|
||||
|
||||
# Drive setup
|
||||
d-i partman-auto-lvm/guided_size string max
|
||||
d-i partman-auto/choose_recipe select atomic
|
||||
d-i partman-auto/method string lvm
|
||||
d-i partman-lvm/confirm boolean true
|
||||
d-i partman-lvm/confirm_nooverwrite boolean true
|
||||
d-i partman-lvm/device_remove_lvm boolean true
|
||||
d-i partman/choose_partition select finish
|
||||
d-i partman/confirm boolean true
|
||||
d-i partman/confirm_nooverwrite boolean true
|
||||
d-i partman/confirm_write_new_label boolean true
|
||||
|
||||
# Final Setup
|
||||
d-i finish-install/reboot_in_progress note
|
19
ci/amd64/debian/scripts/build.raspiblitz.sh
Normal file
@ -0,0 +1,19 @@
|
||||
#!/bin/sh -eux
|
||||
|
||||
echo 'Download the build_sdcard.sh script ...'
|
||||
wget https://raw.githubusercontent.com/${github_user}/raspiblitz/${branch}/build_sdcard.sh
|
||||
|
||||
if [ ${pack} = "fatpack" ]; then
|
||||
fatpack="1"
|
||||
else
|
||||
fatpack="0"
|
||||
fi
|
||||
|
||||
if [ "${desktop}" = "gnome" ]; then
|
||||
echo 'Add Gnome desktop'
|
||||
export DEBIAN_FRONTEND=none
|
||||
sudo apt install gnome -y
|
||||
fi
|
||||
|
||||
echo 'Build RaspiBlitz ...'
|
||||
bash build_sdcard.sh -f ${fatpack} -u ${github_user} -b ${branch} -d headless -t false -w off -i false
|
55
ci/amd64/debian/scripts/cleanup.sh
Normal file
@ -0,0 +1,55 @@
|
||||
#!/bin/sh -eux
|
||||
|
||||
echo "remove linux-headers"
|
||||
dpkg --list \
|
||||
| awk '{ print $2 }' \
|
||||
| grep 'linux-headers' \
|
||||
| xargs apt-get -y purge;
|
||||
|
||||
echo "remove specific Linux kernels, such as linux-image-4.9.0-13-amd64 but keeps the current kernel and does not touch the virtual packages"
|
||||
dpkg --list \
|
||||
| awk '{ print $2 }' \
|
||||
| grep 'linux-image-[234].*' \
|
||||
| grep -v `uname -r` \
|
||||
| xargs apt-get -y purge;
|
||||
|
||||
echo "remove linux-source package"
|
||||
dpkg --list \
|
||||
| awk '{ print $2 }' \
|
||||
| grep linux-source \
|
||||
| xargs apt-get -y purge;
|
||||
|
||||
echo "remove obsolete networking packages"
|
||||
apt-get -y purge ppp pppconfig pppoeconf;
|
||||
|
||||
echo "remove popularity-contest package"
|
||||
apt-get -y purge popularity-contest;
|
||||
|
||||
echo "remove installation-report package"
|
||||
apt-get -y purge installation-report;
|
||||
|
||||
echo "autoremoving packages and cleaning apt data"
|
||||
apt-get -y autoremove;
|
||||
apt-get -y clean;
|
||||
|
||||
echo "remove /var/cache"
|
||||
find /var/cache -type f -exec rm -rf {} \;
|
||||
|
||||
echo "truncate any logs that have built up during the install"
|
||||
find /var/log -type f -exec truncate --size=0 {} \;
|
||||
|
||||
echo "blank netplan machine-id (DUID) so machines get unique ID generated on boot"
|
||||
truncate -s 0 /etc/machine-id
|
||||
|
||||
echo "remove the contents of /tmp and /var/tmp"
|
||||
rm -rf /tmp/* /var/tmp/*
|
||||
|
||||
echo "force a new random seed to be generated"
|
||||
rm -f /var/lib/systemd/random-seed
|
||||
|
||||
echo "delete the SSH keys (will be recreated on the first boot)"
|
||||
rm -f /etc/ssh/ssh_host_*
|
||||
|
||||
echo "clear the history so our install isn't there"
|
||||
rm -f /root/.wget-hsts
|
||||
export HISTSIZE=0
|
14
ci/amd64/debian/scripts/networking.sh
Normal file
@ -0,0 +1,14 @@
|
||||
#!/bin/sh -eux
|
||||
|
||||
# Disable Predictable Network Interface names and use eth0
|
||||
sed -i 's/en[[:alnum:]]*/eth0/g' /etc/network/interfaces
|
||||
sed -i 's/GRUB_CMDLINE_LINUX="\(.*\)"/GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0 \1"/g' /etc/default/grub
|
||||
update-grub
|
||||
|
||||
# Adding a 2 sec delay to the interface up, to make the dhclient happy
|
||||
echo "pre-up sleep 2" >>/etc/network/interfaces
|
||||
|
||||
# needed for resolvconf installed in build_sdcard.sh
|
||||
apt-get install resolvconf -y
|
||||
echo 'nameserver 1.1.1.1' >/etc/resolv.conf
|
||||
echo 'nameserver 8.8.8.8' >>/etc/resolv.conf
|
9
ci/amd64/debian/scripts/sudoers.sh
Normal file
@ -0,0 +1,9 @@
|
||||
#!/bin/sh -eux
|
||||
|
||||
# Only add the secure path line if it is not already present
|
||||
grep -q 'secure_path' /etc/sudoers \
|
||||
|| sed -i -e '/Defaults\s\+env_reset/a Defaults\tsecure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"' /etc/sudoers;
|
||||
|
||||
# Set up password-less sudo for the pi user
|
||||
echo 'pi ALL=(ALL) NOPASSWD:ALL' >/etc/sudoers.d/99_pi;
|
||||
chmod 440 /etc/sudoers.d/99_pi;
|
4
ci/amd64/debian/scripts/systemd.sh
Normal file
@ -0,0 +1,4 @@
|
||||
#!/bin/sh -eux
|
||||
|
||||
# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=751636
|
||||
apt-get install libpam-systemd
|
19
ci/amd64/debian/scripts/update.sh
Normal file
@ -0,0 +1,19 @@
|
||||
#!/bin/sh -eux
|
||||
|
||||
arch="$(uname -r | sed 's/^.*[0-9]\{1,\}\.[0-9]\{1,\}\.[0-9]\{1,\}\(-[0-9]\{1,2\}\)-//')"
|
||||
debian_version="$(lsb_release -r | awk '{print $2}')"
|
||||
major_version="$(echo $debian_version | awk -F. '{print $1}')"
|
||||
|
||||
# Disable systemd apt timers/services
|
||||
systemctl stop apt-daily.timer
|
||||
systemctl stop apt-daily-upgrade.timer
|
||||
systemctl disable apt-daily.timer
|
||||
systemctl disable apt-daily-upgrade.timer
|
||||
systemctl mask apt-daily.service
|
||||
systemctl mask apt-daily-upgrade.service
|
||||
systemctl daemon-reload
|
||||
|
||||
## leave update and upgrade to the build_sdcard.sh
|
||||
#apt-get update
|
||||
#apt-get -y upgrade linux-image-$arch
|
||||
#apt-get -y install linux-headers-$(uname -r)
|
33
ci/amd64/packer.build.amd64-debian.sh
Normal file
@ -0,0 +1,33 @@
|
||||
#!/bin/bash -e
|
||||
|
||||
sudo apt-get update
|
||||
|
||||
# install packer
|
||||
if ! packer version 2>/dev/null; then
|
||||
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
|
||||
sudo apt-add-repository -y "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
|
||||
sudo apt-get update
|
||||
echo -e "\nInstalling packer..."
|
||||
sudo apt-get install -y packer
|
||||
else
|
||||
echo "# Packer is installed"
|
||||
fi
|
||||
|
||||
# install qemu
|
||||
echo "# Install qemu ..."
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y qemu-system
|
||||
|
||||
# set vars
|
||||
echo "# Setting the variables: $*"
|
||||
source ../set_variables.sh
|
||||
set_variables "$@"
|
||||
|
||||
# Build the image
|
||||
echo "# Build the image ..."
|
||||
cd debian
|
||||
packer init -upgrade .
|
||||
command="PACKER_LOG=1 packer build ${vars} -only=qemu packer.build.amd64-debian.hcl"
|
||||
echo "# Running: $command"
|
||||
if [ ${#vars} -eq 0 ];then exit 1;fi
|
||||
PACKER_LOG=1 packer build ${vars} -only=qemu.debian build.amd64-debian.pkr.hcl || exit 1
|
78
ci/arm64-rpi/build.arm64-rpi.pkr.hcl
Normal file
@ -0,0 +1,78 @@
|
||||
variable "pack" { default = "lean" }
|
||||
variable "github_user" { default = "raspiblitz" }
|
||||
variable "branch" { default = "dev" }
|
||||
variable "image_link" { default = "https://downloads.raspberrypi.org/raspios_arm64/images/raspios_arm64-2024-03-15/2024-03-15-raspios-bookworm-arm64.img.xz" }
|
||||
variable "image_checksum" { default = "7e53a46aab92051d523d7283c080532bebb52ce86758629bf1951be9b4b0560f" }
|
||||
variable "image_size" { default = "20G" }
|
||||
|
||||
source "arm" "raspiblitz-arm64-rpi" {
|
||||
file_checksum_type = "sha256"
|
||||
file_checksum = var.image_checksum
|
||||
file_target_extension = "xz"
|
||||
file_unarchive_cmd = ["xz", "--decompress", "$ARCHIVE_PATH"]
|
||||
file_urls = [var.image_link]
|
||||
image_build_method = "resize"
|
||||
image_chroot_env = ["PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin"]
|
||||
image_partitions {
|
||||
filesystem = "vfat"
|
||||
mountpoint = "/boot"
|
||||
name = "boot"
|
||||
size = "256M"
|
||||
start_sector = "8192"
|
||||
type = "c"
|
||||
}
|
||||
image_partitions {
|
||||
filesystem = "ext4"
|
||||
mountpoint = "/"
|
||||
name = "root"
|
||||
size = "0"
|
||||
start_sector = "532480"
|
||||
type = "83"
|
||||
}
|
||||
image_path = "raspiblitz-arm64-rpi-${var.pack}.img"
|
||||
image_size = var.image_size
|
||||
image_type = "dos"
|
||||
qemu_binary_destination_path = "/usr/bin/qemu-arm-static"
|
||||
qemu_binary_source_path = "/usr/bin/qemu-arm-static"
|
||||
}
|
||||
|
||||
build {
|
||||
sources = ["source.arm.raspiblitz-arm64-rpi"]
|
||||
|
||||
provisioner "shell" {
|
||||
inline = [
|
||||
"echo 'nameserver 1.1.1.1' > /etc/resolv.conf",
|
||||
"echo 'nameserver 8.8.8.8' >> /etc/resolv.conf",
|
||||
"echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections",
|
||||
"apt-get update",
|
||||
"apt-get install -y sudo wget",
|
||||
"apt-get -y autoremove",
|
||||
"apt-get -y clean",
|
||||
"touch /boot/ssh",
|
||||
"echo 'pi:$6$TE7HmruYY9EaNiKP$Vz0inJ6gaoJgJvQrC5z/HMDRMTN2jKhiEnG83tc1Jsw7lli5MYdeA83g3NOVCsBaTVW4mUBiT/1ZRWYdofVQX0' > /boot/userconf"
|
||||
]
|
||||
}
|
||||
|
||||
provisioner "shell" {
|
||||
environment_vars = [
|
||||
"github_user=${var.github_user}",
|
||||
"branch=${var.branch}",
|
||||
"pack=${var.pack}"
|
||||
]
|
||||
script = "./build.raspiblitz.sh"
|
||||
}
|
||||
|
||||
provisioner "shell" {
|
||||
inline = [
|
||||
"echo '# delete the SSH keys (will be recreated on the first boot)'",
|
||||
"rm -f /etc/ssh/ssh_host_*",
|
||||
"echo 'OK'",
|
||||
]
|
||||
}
|
||||
|
||||
provisioner "shell" {
|
||||
inline = [
|
||||
"if [ \"${var.pack}\" = \"base\" ]; then echo 'Adding stop file to /boot/'; touch /boot/stop; fi"
|
||||
]
|
||||
}
|
||||
}
|
18
ci/arm64-rpi/build.raspiblitz.sh
Normal file
@ -0,0 +1,18 @@
|
||||
#!/bin/sh -eux
|
||||
|
||||
echo 'Download the build_sdcard.sh script ...'
|
||||
wget https://raw.githubusercontent.com/${github_user}/raspiblitz/${branch}/build_sdcard.sh
|
||||
|
||||
if [ "${pack}" = "fatpack" ]; then
|
||||
fatpack="1"
|
||||
display="lcd"
|
||||
else
|
||||
fatpack="0"
|
||||
display="headless"
|
||||
fi
|
||||
|
||||
# make /dev/shm world writable for qemu
|
||||
sudo chmod 777 /dev/shm
|
||||
|
||||
echo 'Build RaspiBlitz ...'
|
||||
bash build_sdcard.sh -f ${fatpack} -u ${github_user} -b ${branch} -t false -w off -i false -d ${display}
|
72
ci/arm64-rpi/packer.build.arm64-rpi.local.sh
Normal file
@ -0,0 +1,72 @@
|
||||
#!/bin/bash -e
|
||||
|
||||
echo -e "\n# Install dependencies with apt"
|
||||
if [ "$(uname -n)" = "ubuntu" ]; then
|
||||
sudo add-apt-repository -y universe
|
||||
fi
|
||||
|
||||
# Install dependencies
|
||||
# needed on Ubuntu Live ('lsb_release -cs': jammy)
|
||||
sudo apt install -y qemu-user-static || exit 1
|
||||
|
||||
# from https://github.com/mkaczanowski/packer-builder-arm/blob/master/docker/Dockerfile
|
||||
sudo apt install -y \
|
||||
wget \
|
||||
curl \
|
||||
ca-certificates \
|
||||
dosfstools \
|
||||
fdisk \
|
||||
gdisk \
|
||||
kpartx \
|
||||
libarchive-tools \
|
||||
parted \
|
||||
psmisc \
|
||||
qemu-utils \
|
||||
sudo \
|
||||
xz-utils || exit 1
|
||||
|
||||
echo -e "\n# Install Packer..."
|
||||
if ! packer version 2>/dev/null; then
|
||||
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
|
||||
sudo apt-add-repository -y "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
|
||||
sudo apt-get update -y && sudo apt-get install packer -y || exit 1
|
||||
else
|
||||
echo "# Packer is installed"
|
||||
fi
|
||||
|
||||
echo -e "\n# Install Go"
|
||||
export PATH=$PATH:/usr/local/go/bin
|
||||
# https://go.dev/dl/
|
||||
GOVERSION="1.20.6"
|
||||
GOHASH="b945ae2bb5db01a0fb4786afde64e6fbab50b67f6fa0eb6cfa4924f16a7ff1eb"
|
||||
if ! go version 2>/dev/null | grep "${GOVERSION}"; then
|
||||
wget --progress=bar:force https://go.dev/dl/go${GOVERSION}.linux-amd64.tar.gz
|
||||
echo "${GOHASH} go${GOVERSION}.linux-amd64.tar.gz" | sha256sum -c - || exit 1
|
||||
sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go${GOVERSION}.linux-amd64.tar.gz
|
||||
sudo rm -rf go${GOVERSION}.linux-amd64.tar.gz
|
||||
else
|
||||
echo "# Go ${GOVERSION} is installed"
|
||||
fi
|
||||
|
||||
echo -e "\n# Download the packer-builder-arm plugin"
|
||||
git clone https://github.com/mkaczanowski/packer-builder-arm
|
||||
cd packer-builder-arm
|
||||
# https://github.com/mkaczanowski/packer-builder-arm/releases
|
||||
git reset --hard "v1.0.7"
|
||||
echo -e "\n# Build the packer-builder-arm plugin"
|
||||
go mod download
|
||||
go build || exit 1
|
||||
|
||||
# set vars
|
||||
echo "# Setting the variables: $*"
|
||||
# running from the ci/arm64-rpi/packer-builder-arm directory
|
||||
source ../../set_variables.sh
|
||||
set_variables "$@"
|
||||
|
||||
cp ../build.arm64-rpi.pkr.hcl ./
|
||||
cp ../build.raspiblitz.sh ./
|
||||
|
||||
echo -e "\n# Build the image"
|
||||
command="packer build ${vars} build.arm64-rpi.pkr.hcl"
|
||||
echo "# Running: $command"
|
||||
$command || exit 1
|
15
ci/arm64-rpi/packer.build.arm64-rpi.sh
Normal file
@ -0,0 +1,15 @@
|
||||
#!/bin/bash -e
|
||||
|
||||
# set vars
|
||||
echo "# Setting the variables: $*"
|
||||
source ../set_variables.sh
|
||||
set_variables "$@"
|
||||
|
||||
# build the image in docker
|
||||
echo -e "\nBuild the image..."
|
||||
# from https://hub.docker.com/r/mkaczanowski/packer-builder-arm/tags
|
||||
command="docker run --rm --privileged -v /dev:/dev -v ${PWD}:/build \
|
||||
mkaczanowski/packer-builder-arm@sha256:0ff8ce0cf33e37be6c351c8bcb2643835c7f3525b7f591808b91c04238d45695 \
|
||||
build ${vars} build.arm64-rpi.pkr.hcl"
|
||||
echo "# Running: $command"
|
||||
$command || exit 1
|
300
ci/packer.sh
Normal file
@ -0,0 +1,300 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
#########################################################################
|
||||
# script to trigger packer image build on a debian LIVE system
|
||||
# see FAQ.dev.md for instructions
|
||||
##########################################################################
|
||||
|
||||
# YOUR REPO (REPLACE WITH YOUR OWN FORK IF NEEDED)
|
||||
REPO="https://github.com/raspiblitz/raspiblitz"
|
||||
|
||||
# folders to store the build results
|
||||
BUILDFOLDER="images"
|
||||
|
||||
# check if started with sudo
|
||||
if [ "$EUID" -ne 0 ]; then
|
||||
echo "error='run as root / may use sudo'"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# usage info
|
||||
echo "packer.sh [BRANCH] [arm|x86] [min|fat] [?lastcommithash]"
|
||||
echo "Build RaspiBlitz install images on a Debian LIVE system"
|
||||
echo "From repo (change in script is needed):"
|
||||
echo $REPO
|
||||
echo "Results will be stored in:"
|
||||
echo $BUILDFOLDER
|
||||
echo "Start this script in the root of an writable 128GB NTFS formatted USB drive."
|
||||
|
||||
# check if internet is available
|
||||
if ping -c 1 "1.1.1.1" &> /dev/null; then
|
||||
echo "# checking internet"
|
||||
else
|
||||
echo "error='script needs internet connection to run'"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# get parameters
|
||||
if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then
|
||||
|
||||
# by input
|
||||
read -p "Press ENTER to continue or CTRL+C to exit"
|
||||
read -p "Enter the branch to build: " BRANCH
|
||||
read -p "Enter the architecture to build (arm|x86): " ARCH
|
||||
read -p "Enter the type to build (min|fat): " TYPE
|
||||
read -p "Enter the last commit hash to check (optional): " COMMITHASH
|
||||
|
||||
else
|
||||
|
||||
# by command line
|
||||
BRANCH=$1
|
||||
ARCH=$2
|
||||
TYPE=$3
|
||||
COMMITHASH=$4
|
||||
|
||||
fi
|
||||
|
||||
# check if branch is set
|
||||
if [ ${#BRANCH} -eq 0 ]; then
|
||||
echo "error='branch not set'"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# check if arch is set
|
||||
if [ ${#ARCH} -eq 0 ]; then
|
||||
echo "error='ARCH not set'"
|
||||
exit 1
|
||||
fi
|
||||
if [ "$ARCH" != "arm" ] && [ "$ARCH" != "x86" ]; then
|
||||
echo "error='ARCH not supported'"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# check if type is set
|
||||
if [ ${#TYPE} -eq 0 ]; then
|
||||
echo "error='TYPE not set'"
|
||||
exit 1
|
||||
fi
|
||||
if [ "$TYPE" != "min" ] && [ "$TYPE" != "fat" ]; then
|
||||
echo "error='TYPE not supported'"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# install git and make
|
||||
apt update && apt install -y git make
|
||||
|
||||
# clean old repo
|
||||
rm -rf raspiblitz 2>/dev/null
|
||||
|
||||
# download the repo
|
||||
git clone $REPO
|
||||
if [ $? -gt 0 ]; then
|
||||
echo "# REPO: ${REPO}"
|
||||
echo "error='git clone failed'"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cd raspiblitz
|
||||
|
||||
# checkout the desired branch
|
||||
git checkout $BRANCH
|
||||
if [ $? -gt 0 ]; then
|
||||
cd ..
|
||||
rm -rf raspiblitz 2>/dev/null
|
||||
echo "# BRANCH: ${BRANCH}"
|
||||
echo "error='git checkout BRANCH failed'"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# check commit hash if set
|
||||
if [ ${#COMMITHASH} -gt 0 ]; then
|
||||
echo "# CHECKING COMMITHASH"
|
||||
actualCOMMITHASH=$(git log -1 --format=%H)
|
||||
echo "# actual(${actualCOMMITHASH}) ?= wanted(${COMMITHASH})"
|
||||
matches=$(echo "${actualCOMMITHASH}" | grep -c "${COMMITHASH}")
|
||||
if [ ${matches} -eq 0 ]; then
|
||||
cd ..
|
||||
rm -rf raspiblitz 2>/dev/null
|
||||
echo "error='COMMITHASH of branch does not match'"
|
||||
exit 1
|
||||
fi
|
||||
echo "# COMMITHASH CHECK OK"
|
||||
else
|
||||
echo "# NO COMMITHASH CHECK"
|
||||
fi
|
||||
|
||||
# make sure make build runs thru
|
||||
safedir=$(realpath ./ci/arm64-rpi/packer-builder-arm)
|
||||
echo "# Setting safe.directory to: ${safedir}"
|
||||
git config --global --add safe.directory "${safedir}"
|
||||
|
||||
# get code version
|
||||
codeVersion=$(cat ./home.admin/_version.info | grep 'codeVersion="' | cut -d'"' -f2)
|
||||
if [ ${#codeVersion} -eq 0 ]; then
|
||||
echo "error='codeVersion not found'"
|
||||
exit 1
|
||||
fi
|
||||
echo "# RaspiBlitz Version: ${codeVersion}"
|
||||
|
||||
# get date as string formatted like YEAR-MONTH-DAY
|
||||
dateString=$(date +%Y-%m-%d)
|
||||
echo "# Date: ${dateString}"
|
||||
|
||||
if [ "${ARCH}" == "arm" ] && [ "${TYPE}" == "min" ]; then
|
||||
PACKERTARGET="arm64-rpi-lean-image"
|
||||
PACKERBUILDPATH="./raspiblitz/ci/arm64-rpi/packer-builder-arm/raspiblitz-arm64-rpi-lean.img"
|
||||
PACKERFINALFILE="raspiblitz-min-v${codeVersion}-${dateString}.img"
|
||||
elif [ "${ARCH}" == "arm" ] && [ "${TYPE}" == "fat" ]; then
|
||||
PACKERTARGET="arm64-rpi-fatpack-image"
|
||||
PACKERBUILDPATH="./raspiblitz/ci/arm64-rpi/packer-builder-arm/TODO" #TODO
|
||||
PACKERFINALFILE="raspiblitz-fat-v${codeVersion}-${dateString}.img"
|
||||
elif [ "${ARCH}" == "x86" ] && [ "${TYPE}" == "min" ]; then
|
||||
PACKERTARGET="amd64-lean-server-legacyboot-image"
|
||||
PACKERBUILDPATH="./raspiblitz/ci/amd64/builds/raspiblitz-amd64-debian-lean-qemu/raspiblitz-amd64-debian-lean.qcow2"
|
||||
PACKERFINALFILE="raspiblitz-amd64-min-v${codeVersion}-${dateString}.qcow2"
|
||||
else
|
||||
echo "error='$ARCH-$TYPE not supported'"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "# PACKER TARGET: ${PACKERTARGET}"
|
||||
echo "# PACKER BUILD PATH: ${PACKERBUILDPATH}"
|
||||
echo "# PACKER FINAL FILE: ${PACKERFINALFILE}"
|
||||
|
||||
# check if file already exists
|
||||
if [ -f "./${BUILDFOLDER}/${PACKERFINALFILE}.img.gz" ]; then
|
||||
echo "error='image already exists'"
|
||||
echo "# delete ./${BUILDFOLDER}/${PACKERFINALFILE}.img.gz (and all .sha256 & .sig) before trying again"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# prevent monitor to go to sleep during long non-interactive build
|
||||
xset s off
|
||||
gsettings set org.gnome.desktop.screensaver idle-activation-enabled false
|
||||
|
||||
echo "# BUILDING '${PACKERTARGET}' ###########################################"
|
||||
make $PACKERTARGET
|
||||
|
||||
# check if build was successful
|
||||
if [ $? -gt 0 ]; then
|
||||
echo "# BUILDING FAILED ###########################################"
|
||||
echo "# Check the output above for errors."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "# BUILDING SUCCESS ###########################################"
|
||||
|
||||
echo "# moving build to timestamped folder ./${BUILDFOLDER}"
|
||||
cd ..
|
||||
mkdir "${BUILDFOLDER}" 2>/dev/null
|
||||
|
||||
#check that Build folder exists
|
||||
if [ ! -d "./${BUILDFOLDER}" ]; then
|
||||
echo "# FAILED CREATING BUILD FOLDER: ./${BUILDFOLDER}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# move .gz file to build folder
|
||||
mv "${PACKERBUILDPATH}.gz" "./${BUILDFOLDER}/${PACKERFINALFILE}.gz"
|
||||
if [ $? -gt 0 ]; then
|
||||
echo "# FAILED MOVING .gz"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# move gz.sha256 file to build folder
|
||||
mv "${PACKERBUILDPATH}.gz.sha256" "./${BUILDFOLDER}/${PACKERFINALFILE}.gz.sha256"
|
||||
if [ $? -gt 0 ]; then
|
||||
echo "# FAILED MOVING .gz.sha256"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# move sha256 file to build folder
|
||||
mv "${PACKERBUILDPATH}.sha256" "./${BUILDFOLDER}/${PACKERFINALFILE}.sha256"
|
||||
if [ $? -gt 0 ]; then
|
||||
echo "# FAILED MOVING .sha256"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# special handling for qcow2
|
||||
if [ "${ARCH}" == "x86" ]; then
|
||||
echo "# decompressing qcow2"
|
||||
gunzip "./${BUILDFOLDER}/${PACKERFINALFILE}.gz"
|
||||
echo "# converting qcow2 to raw"
|
||||
qemu-img convert -f qcow2 -O raw "./${BUILDFOLDER}/${PACKERFINALFILE}.qcow2" "./${BUILDFOLDER}/${PACKERFINALFILE}.img"
|
||||
if [ $? -gt 0 ]; then
|
||||
echo "# FAILED CONVERTING qcow2 to raw"
|
||||
exit 1
|
||||
fi
|
||||
echo "# compressing raw"
|
||||
gzip -9 "./${BUILDFOLDER}/${PACKERFINALFILE}.img"
|
||||
if [ $? -gt 0 ]; then
|
||||
echo "# FAILED COMPRESSING raw"
|
||||
exit 1
|
||||
fi
|
||||
echo "# removing raw"
|
||||
rm "./${BUILDFOLDER}/${PACKERFINALFILE}.img"
|
||||
if [ $? -gt 0 ]; then
|
||||
echo "# FAILED REMOVING raw"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
echo "# clean up"
|
||||
rm -rf ./../raspiblitz 2>/dev/null
|
||||
|
||||
echo "# SIGN & SECURE IMAGE ###########################################"
|
||||
echo
|
||||
|
||||
# security check that internet is cut
|
||||
echo "# MANUAL ACTION NEEDED:"
|
||||
echo "# Cut the connection to the internet before signing the image."
|
||||
echo
|
||||
echo "# Press RETURN to continue..."
|
||||
read -r -p "" key
|
||||
if ping -c 1 "1.1.1.1" &> /dev/null; then
|
||||
echo "# FAIL - Internet connection is up - EXITING SCRIPT"
|
||||
exit 1
|
||||
else
|
||||
echo "# OK - Internet connection is cut"
|
||||
fi
|
||||
echo
|
||||
|
||||
# Note down the SHA256 checksum of the image
|
||||
echo "# MANUAL ACTION NEEDED:"
|
||||
echo "# Note down the SHA256 checksum of the image:"
|
||||
echo
|
||||
cat ./${BUILDFOLDER}/${PACKERFINALFILE}.gz.sha256
|
||||
echo
|
||||
echo "# Press RETURN to continue..."
|
||||
read -r -p "" key
|
||||
|
||||
# import the signer keys
|
||||
echo "# MANUAL ACTION NEEDED:"
|
||||
echo "# Keep this terminal open and the 128GB stick connected."
|
||||
echo "# Additionalley connect and unlock the USB device with the signer keys."
|
||||
echo "# Open in Filemanager and use right-click 'Open in Termonal' and run:"
|
||||
echo "# sudo gpg --import ./sub.key"
|
||||
echo "# Close that second terminal and remove USB device with signer keys."
|
||||
echo
|
||||
echo "# Press RETURN to continue..."
|
||||
read -r -p "" key
|
||||
|
||||
# signing instructions
|
||||
echo "# MANUAL ACTION NEEDED:"
|
||||
echo "# Please wait infront of the screen until the signing process is asks you for the password."
|
||||
echo
|
||||
cd "${BUILDFOLDER}"
|
||||
gpg --output ${PACKERFINALFILE}.gz.sig --detach-sign ${PACKERFINALFILE}.gz
|
||||
if [ $? -gt 0 ]; then
|
||||
echo "# !!!!!!! SIGNING FAILED - redo manual before closing this terminbal !!!!!!!"
|
||||
echo "gpg --output ${PACKERFINALFILE}.gz.sig --detach-sign ${PACKERFINALFILE}.gz"
|
||||
else
|
||||
echo "# OK Signing successful."
|
||||
fi
|
||||
|
||||
# last notes
|
||||
echo
|
||||
echo "Close this terminal and eject your 128GB usb device."
|
||||
echo "Have fun with your build image on it under:"
|
||||
echo "${BUILDFOLDER}/${PACKERFINALFILE}.gz"
|
75
ci/set_variables.sh
Executable file
@ -0,0 +1,75 @@
|
||||
#!/bin/bash
|
||||
|
||||
function set_variables() {
|
||||
|
||||
declare -A params
|
||||
while (("$#")); do
|
||||
case "$1" in
|
||||
--pack)
|
||||
params[pack]="$2"
|
||||
shift 2
|
||||
;;
|
||||
--github_user)
|
||||
params[github_user]="$2"
|
||||
shift 2
|
||||
;;
|
||||
--branch)
|
||||
params[branch]="$2"
|
||||
shift 2
|
||||
;;
|
||||
# arm64-rpi
|
||||
--image_link)
|
||||
params[image_link]="$2"
|
||||
shift 2
|
||||
;;
|
||||
# arm64-rpi
|
||||
--image_checksum)
|
||||
params[image_checksum]="$2"
|
||||
shift 2
|
||||
;;
|
||||
# amd64
|
||||
# preseed.cfg
|
||||
--preseed_file)
|
||||
params[preseed_file]="$2"
|
||||
shift 2
|
||||
;;
|
||||
# amd64
|
||||
# uefi | bios
|
||||
--boot)
|
||||
params[boot]="$2"
|
||||
shift 2
|
||||
;;
|
||||
# amd64
|
||||
# none | gnome
|
||||
--desktop)
|
||||
params[desktop]="$2"
|
||||
shift 2
|
||||
;;
|
||||
--image_size)
|
||||
params[image_size]="$2"
|
||||
shift 2
|
||||
;;
|
||||
--)
|
||||
shift
|
||||
break
|
||||
;;
|
||||
*)
|
||||
echo "Error: Invalid argument"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Reset the global vars string
|
||||
vars=""
|
||||
# Iterate over all keys in the params array
|
||||
for key in "${!params[@]}"; do
|
||||
# If the value for this key is not empty, add it to vars
|
||||
if [ -n "${params[$key]}" ]; then
|
||||
vars="$vars -var $key=${params[$key]}"
|
||||
fi
|
||||
done
|
||||
|
||||
export vars
|
||||
|
||||
}
|
@ -1,7 +1,58 @@
|
||||
#!/bin/bash
|
||||
|
||||
# load code software version
|
||||
source /home/admin/_version.info
|
||||
source <(/home/admin/_cache.sh get \
|
||||
state \
|
||||
setupPhase \
|
||||
network \
|
||||
chain \
|
||||
lightning \
|
||||
codeVersion \
|
||||
hostname \
|
||||
undervoltageReports \
|
||||
hdd_used_info \
|
||||
internet_localip \
|
||||
internet_public_ip_clean \
|
||||
internet_rx \
|
||||
internet_tx \
|
||||
system_ram_available_mb \
|
||||
system_ram_mb \
|
||||
system_ups_status \
|
||||
system_ups_battery \
|
||||
system_cpu_load \
|
||||
system_up_text \
|
||||
system_temp_celsius \
|
||||
system_temp_fahrenheit \
|
||||
runBehindTor \
|
||||
ups \
|
||||
ElectRS \
|
||||
BTCRPCexplorer \
|
||||
joinmarket \
|
||||
blitzapi \
|
||||
)
|
||||
|
||||
# PARAMETER 1: forcing view on a given network
|
||||
PARAMETER_CHAIN=$2
|
||||
if [ "${PARAMETER_CHAIN}" == "mainnet" ]; then
|
||||
chain="main"
|
||||
fi
|
||||
if [ "${PARAMETER_CHAIN}" == "testnet" ]; then
|
||||
chain="test"
|
||||
fi
|
||||
if [ "${PARAMETER_CHAIN}" == "signet" ]; then
|
||||
chain="sig"
|
||||
fi
|
||||
|
||||
# PARAMETER 2: forcing view on a lightning implementation
|
||||
PARAMETER_LIGHTNING=$1
|
||||
if [ "${PARAMETER_LIGHTNING}" == "lnd" ]; then
|
||||
lightning="lnd"
|
||||
fi
|
||||
if [ "${PARAMETER_LIGHTNING}" == "cl" ]; then
|
||||
lightning="cl"
|
||||
fi
|
||||
if [ "${PARAMETER_LIGHTNING}" == "none" ]; then
|
||||
lightning=""
|
||||
fi
|
||||
|
||||
# set colors
|
||||
color_red='\033[0;31m'
|
||||
@ -10,324 +61,280 @@ color_amber='\033[0;33m'
|
||||
color_yellow='\033[1;93m'
|
||||
color_gray='\033[0;37m'
|
||||
|
||||
## get basic info
|
||||
source /home/admin/raspiblitz.info 2>/dev/null
|
||||
source /mnt/hdd/raspiblitz.conf 2>/dev/null
|
||||
|
||||
## get HDD/SSD info
|
||||
source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status)
|
||||
hdd="${hddUsedInfo}"
|
||||
|
||||
## get internet info
|
||||
source <(sudo /home/admin/config.scripts/internet.sh status)
|
||||
cleanip=$(echo "${publicIP}" | tr -d '[]')
|
||||
# generate netprefix
|
||||
netprefix=${chain:0:1}
|
||||
if [ "${netprefix}" == "m" ]; then
|
||||
netprefix=""
|
||||
fi
|
||||
|
||||
## get UPS info
|
||||
source <(/home/admin/config.scripts/blitz.ups.sh status)
|
||||
upsInfo=""
|
||||
if [ "${upsStatus}" = "ONLINE" ]; then
|
||||
upsInfo="${color_gray}${upsBattery}"
|
||||
if [ "${system_ups_status}" = "ONLINE" ]; then
|
||||
upsInfo="${color_gray}${system_ups_battery}"
|
||||
fi
|
||||
if [ "${upsStatus}" = "ONBATT" ]; then
|
||||
upsInfo="${color_red}${upsBattery}"
|
||||
if [ "${system_ups_status}" = "ONBATT" ]; then
|
||||
upsInfo="${color_red}${system_ups_battery}"
|
||||
fi
|
||||
if [ "${upsStatus}" = "SHUTTING DOWN" ]; then
|
||||
if [ "${system_ups_status}" = "SHUTTING DOWN" ]; then
|
||||
upsInfo="${color_red}DOWN"
|
||||
fi
|
||||
|
||||
# check hostname
|
||||
if [ ${#hostname} -eq 0 ]; then hostname="raspiblitz"; fi
|
||||
|
||||
# for oldnodes
|
||||
if [ ${#network} -eq 0 ]; then
|
||||
network="bitcoin"
|
||||
litecoinActive=$(sudo ls /mnt/hdd/litecoin/litecoin.conf 2>/dev/null | grep -c 'litecoin.conf')
|
||||
if [ ${litecoinActive} -eq 1 ]; then
|
||||
network="litecoin"
|
||||
else
|
||||
network=`sudo cat /home/admin/.network 2>/dev/null`
|
||||
fi
|
||||
if [ ${#network} -eq 0 ]; then
|
||||
network="bitcoin"
|
||||
fi
|
||||
fi
|
||||
|
||||
# for oldnodes
|
||||
if [ ${#chain} -eq 0 ]; then
|
||||
chain="test"
|
||||
isMainChain=$(sudo cat /mnt/hdd/${network}/${network}.conf 2>/dev/null | grep "#testnet=1" -c)
|
||||
if [ ${isMainChain} -gt 0 ];then
|
||||
chain="main"
|
||||
fi
|
||||
network="bitcoin"
|
||||
chain="main"
|
||||
fi
|
||||
|
||||
# set datadir
|
||||
bitcoin_dir="/home/bitcoin/.${network}"
|
||||
lnd_dir="/home/bitcoin/.lnd"
|
||||
lnd_macaroon_dir="/home/bitcoin/.lnd/data/chain/${network}/${chain}net"
|
||||
|
||||
# get uptime & load
|
||||
load=$(w | head -n 1 | cut -d 'v' -f2 | cut -d ':' -f2)
|
||||
|
||||
# get CPU temp - no measurement in a VM
|
||||
cpu=0
|
||||
if [ -d "/sys/class/thermal/thermal_zone0/" ]; then
|
||||
cpu=$(cat /sys/class/thermal/thermal_zone0/temp)
|
||||
fi
|
||||
tempC=$((cpu/1000))
|
||||
tempF=$(((tempC * 18 + 325) / 10))
|
||||
|
||||
# get memory
|
||||
ram_avail=$(free -m | grep Mem | awk '{ print $7 }')
|
||||
ram=$(printf "%sM / %sM" "${ram_avail}" "$(free -m | grep Mem | awk '{ print $2 }')")
|
||||
|
||||
if [ ${ram_avail} -lt 50 ]; then
|
||||
# ram info string
|
||||
ram=$(printf "%sM / %sM" "${system_ram_available_mb}" "${system_ram_mb}")
|
||||
if [ "${system_ram_available_mb}" != "" ] && [ ${system_ram_available_mb} -lt 50 ]; then
|
||||
color_ram="${color_red}\e[7m"
|
||||
else
|
||||
color_ram=${color_green}
|
||||
fi
|
||||
|
||||
# Bitcoin blockchain
|
||||
btc_path=$(command -v ${network}-cli)
|
||||
blockInfo="-"
|
||||
if [ -n ${btc_path} ]; then
|
||||
btc_title=$network
|
||||
blockchaininfo="$(${network}-cli -datadir=${bitcoin_dir} getblockchaininfo 2>/dev/null)"
|
||||
if [ ${#blockchaininfo} -gt 0 ]; then
|
||||
btc_title="${btc_title} (${chain}net)"
|
||||
|
||||
# get sync status
|
||||
block_chain="$(${network}-cli -datadir=${bitcoin_dir} getblockcount 2>/dev/null)"
|
||||
block_verified="$(echo "${blockchaininfo}" | jq -r '.blocks')"
|
||||
block_diff=$(expr ${block_chain} - ${block_verified})
|
||||
blockInfo="${block_verified}/${block_chain}"
|
||||
|
||||
progress="$(echo "${blockchaininfo}" | jq -r '.verificationprogress')"
|
||||
sync_percentage=$(echo $progress | awk '{printf( "%.2f%%", 100 * $1)}')
|
||||
|
||||
if [ ${block_diff} -eq 0 ]; then # fully synced
|
||||
sync="OK"
|
||||
sync_color="${color_green}"
|
||||
sync_behind=" "
|
||||
elif [ ${block_diff} -eq 1 ]; then # fully synced
|
||||
sync="OK"
|
||||
sync_color="${color_green}"
|
||||
sync_behind="-1 block"
|
||||
elif [ ${block_diff} -le 10 ]; then # <= 2 blocks behind
|
||||
sync=""
|
||||
sync_color="${color_red}"
|
||||
sync_behind="-${block_diff} blocks"
|
||||
else
|
||||
sync=""
|
||||
sync_color="${color_red}"
|
||||
sync_behind="${sync_percentage}"
|
||||
fi
|
||||
|
||||
# get last known block
|
||||
last_block="$(${network}-cli -datadir=${bitcoin_dir} getblockcount 2>/dev/null)"
|
||||
if [ ! -z "${last_block}" ]; then
|
||||
btc_line2="${btc_line2} ${color_gray}(block ${last_block})"
|
||||
fi
|
||||
|
||||
# get mem pool transactions
|
||||
mempool="$(${network}-cli -datadir=${bitcoin_dir} getmempoolinfo 2>/dev/null | jq -r '.size')"
|
||||
|
||||
else
|
||||
btc_line2="${color_red}NOT RUNNING\t\t"
|
||||
fi
|
||||
fi
|
||||
|
||||
# get IP address & port
|
||||
networkInfo=$(${network}-cli -datadir=${bitcoin_dir} getnetworkinfo 2>/dev/null)
|
||||
local_ip="${localip}" # from internet.sh
|
||||
public_ip="${cleanip}"
|
||||
public_port="$(echo ${networkInfo} | jq -r '.localaddresses [0] .port')"
|
||||
if [ "${public_port}" = "null" ]; then
|
||||
if [ "${chain}" = "test" ]; then
|
||||
public_port="18333"
|
||||
else
|
||||
public_port="8333"
|
||||
fi
|
||||
fi
|
||||
|
||||
# check if RTL web interface is installed
|
||||
webinterfaceInfo=""
|
||||
runningRTL=$(sudo ls /etc/systemd/system/RTL.service 2>/dev/null | grep -c 'RTL.service')
|
||||
if [ ${runningRTL} -eq 1 ]; then
|
||||
webinterfaceInfo="Web admin --> ${color_green}http://${local_ip}:3000"
|
||||
fi
|
||||
|
||||
# CHAIN NETWORK
|
||||
public_addr_pre="Public "
|
||||
public_addr="??"
|
||||
# Tor info string
|
||||
torInfo=""
|
||||
# Version
|
||||
networkVersion=$(${network}-cli -datadir=${bitcoin_dir} -version 2>/dev/null | cut -d ' ' -f6)
|
||||
# TOR or IP
|
||||
networkInfo=$(${network}-cli -datadir=${bitcoin_dir} getnetworkinfo)
|
||||
networkConnections=$(echo ${networkInfo} | jq -r '.connections')
|
||||
networkConnectionsInfo="${color_green}${networkConnections} ${color_gray}connections"
|
||||
|
||||
if [ "${runBehindTor}" = "on" ]; then
|
||||
|
||||
# TOR address
|
||||
onionAddress=$(echo ${networkInfo} | jq -r '.localaddresses [0] .address')
|
||||
networkConnectionsInfo="${color_green}${networkConnections} ${color_gray}peers"
|
||||
public_addr="${onionAddress}:${public_port}"
|
||||
public=""
|
||||
public_color="${color_green}"
|
||||
torInfo="+ Tor"
|
||||
|
||||
else
|
||||
|
||||
# IP address
|
||||
networkConnectionsInfo="${color_green}${networkConnections} ${color_gray}connections"
|
||||
public_addr="${publicIP}:${public_port}"
|
||||
public_check=$(nc -z -w6 ${cleanip} ${public_port} 2>/dev/null; echo $?)
|
||||
if [ $public_check = "0" ] || [ "${ipv6}" == "on" ] ; then
|
||||
public=""
|
||||
# only set yellow/normal because netcat can only say that the port is open - not that it points to this device for sure
|
||||
public_color="${color_amber}"
|
||||
else
|
||||
public=""
|
||||
public_color="${color_red}"
|
||||
fi
|
||||
|
||||
# DynDomain
|
||||
if [ ${#dynDomain} -gt 0 ]; then
|
||||
|
||||
#check if dynamic domain resolves to correct IP
|
||||
ipOfDynDNS=$(getent hosts ${dynDomain} | awk '{ print $1 }')
|
||||
if [ "${ipOfDynDNS}:${public_port}" != "${public_addr}" ]; then
|
||||
public_color="${color_red}"
|
||||
else
|
||||
public_color="${color_amber}"
|
||||
fi
|
||||
|
||||
# replace IP display with dynDN
|
||||
public_addr_pre="DynDN "
|
||||
public_addr="${dynDomain}"
|
||||
fi
|
||||
|
||||
if [ ${#public_addr} -gt 25 ]; then
|
||||
# if a IPv6 address dont show peers to save space
|
||||
networkConnectionsInfo=""
|
||||
fi
|
||||
|
||||
if [ ${#public_addr} -gt 35 ]; then
|
||||
# if a LONG IPv6 address dont show "Public" in front to save space
|
||||
public_addr_pre=""
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
# LIGHTNING NETWORK
|
||||
#######################
|
||||
# BITCOIN INFO
|
||||
|
||||
# get block data - use meta on cache to call dynamic variable name
|
||||
source <(/home/admin/_cache.sh meta btc_${chain}net_blocks_headers)
|
||||
btc_blocks_headers="${value}"
|
||||
source <(/home/admin/_cache.sh meta btc_${chain}net_blocks_verified)
|
||||
btc_blocks_verified="${value}"
|
||||
source <(/home/admin/_cache.sh meta btc_${chain}net_blocks_behind)
|
||||
btc_blocks_behind="${value}"
|
||||
source <(/home/admin/_cache.sh meta btc_${chain}net_sync_percentage)
|
||||
if [ "${value}" != "" ]; then
|
||||
sync_percentage="${value}%"
|
||||
fi
|
||||
|
||||
# construct blockinfo string
|
||||
if [ "${btc_blocks_behind}" == "" ]; then
|
||||
sync="WAIT"
|
||||
sync_color="${color_yellow}"
|
||||
elif [ ${btc_blocks_behind} -lt 2 ]; then
|
||||
sync="OK"
|
||||
sync_color="${color_green}"
|
||||
else
|
||||
sync=""
|
||||
sync_color="${color_red}"
|
||||
fi
|
||||
blockInfo="Blocks ${btc_blocks_verified}/${btc_blocks_headers} ${color_gray}Sync ${sync_color}${sync}"
|
||||
if [ "${btc_blocks_headers}" == "" ]; then
|
||||
blockInfo="${color_red}Not Started | Not Ready Yet | No Data${color_gray}"
|
||||
fi
|
||||
|
||||
# get address data - use meta on cache to call dynamic variable name
|
||||
source <(/home/admin/_cache.sh meta btc_${chain}net_version)
|
||||
networkVersion="${value} "
|
||||
source <(/home/admin/_cache.sh meta btc_${chain}net_peers)
|
||||
btc_peers=${value}
|
||||
if [ "${btc_peers}" == "" ]; then
|
||||
networkConnectionsInfo=""
|
||||
elif [ ${btc_peers} -gt 0 ]; then
|
||||
networkConnectionsInfo="${color_green}${btc_peers} ${color_gray}peers"
|
||||
else
|
||||
networkConnectionsInfo="${color_red}${btc_peers} ${color_gray}peers"
|
||||
fi
|
||||
|
||||
#######################
|
||||
# LIGHTNING INFO
|
||||
|
||||
# default values
|
||||
ln_alias=${hostname}
|
||||
ln_baseInfo="-"
|
||||
ln_channelInfo="\n"
|
||||
ln_external="\n"
|
||||
ln_alias="${hostname}"
|
||||
ln_publicColor=""
|
||||
ln_port=$(sudo cat /mnt/hdd/lnd/lnd.conf | grep "^listen=*" | cut -f2 -d':')
|
||||
if [ ${#ln_port} -eq 0 ]; then
|
||||
ln_port="9735"
|
||||
fi
|
||||
ln_feeReport=""
|
||||
ln_peersInfo=""
|
||||
ln_version=""
|
||||
ln_publicColor="${color_green}"
|
||||
|
||||
wallet_unlocked=$(sudo tail -n 1 /mnt/hdd/lnd/logs/${network}/${chain}net/lnd.log 2> /dev/null | grep -c unlock)
|
||||
if [ "$wallet_unlocked" -gt 0 ] ; then
|
||||
alias_color="${color_red}"
|
||||
ln_alias="Wallet Locked"
|
||||
else
|
||||
ln_getInfo=$(sudo -u bitcoin /usr/local/bin/lncli --macaroonpath=${lnd_macaroon_dir}/readonly.macaroon --tlscertpath=${lnd_dir}/tls.cert getinfo 2>/dev/null)
|
||||
ln_external=$(echo "${ln_getInfo}" | grep "uris" -A 1 | tr -d '\n' | cut -d '"' -f4)
|
||||
ln_tor=$(echo "${ln_external}" | grep -c ".onion")
|
||||
if [ ${ln_tor} -eq 1 ]; then
|
||||
ln_publicColor="${color_green}"
|
||||
else
|
||||
public_check=$(nc -z -w6 ${public_ip} ${ln_port} 2>/dev/null; echo $?)
|
||||
if [ $public_check = "0" ] || [ "${ipv6}" == "on" ]; then
|
||||
# only set yellow/normal because netcat can only say that the port is open - not that it points to this device for sure
|
||||
ln_publicColor="${color_amber}"
|
||||
else
|
||||
ln_publicColor="${color_red}"
|
||||
if [ "${lightning}" != "" ]; then
|
||||
|
||||
source <(/home/admin/_cache.sh meta ln_${lightning}_${chain}net_version)
|
||||
ln_version="${value}"
|
||||
|
||||
# get alias
|
||||
source <(/home/admin/_cache.sh meta ln_${lightning}_${chain}net_alias)
|
||||
if [ "${value}" != "" ]; then
|
||||
ln_alias="${value}"
|
||||
fi
|
||||
fi
|
||||
alias_color="${color_grey}"
|
||||
ln_sync=$(echo "${ln_getInfo}" | grep "synced_to_chain" | grep "true" -c)
|
||||
ln_version=$(echo "${ln_getInfo}" | jq -r '.version' | cut -d' ' -f1)
|
||||
if [ ${ln_sync} -eq 0 ]; then
|
||||
if [ ${#ln_getInfo} -eq 0 ]; then
|
||||
ln_baseInfo="${color_red} Not Started | Not Ready Yet"
|
||||
|
||||
# consider tor address green for public
|
||||
# when not Tor use yellow because not sure if public
|
||||
if [ "${runBehindTor}" != "on" ]; then
|
||||
ln_publicColor="${color_yellow}"
|
||||
fi
|
||||
|
||||
# get the public address/URI
|
||||
source <(/home/admin/_cache.sh meta ln_${lightning}_${chain}net_address)
|
||||
ln_external="${value}"
|
||||
|
||||
source <(/home/admin/_cache.sh meta ln_${lightning}_${chain}net_peers)
|
||||
if [ "${value}" != "" ]; then
|
||||
ln_peersInfo="${color_green}${value} ${color_gray}peers"
|
||||
fi
|
||||
|
||||
source <(/home/admin/_cache.sh meta ln_${lightning}_${chain}net_ready)
|
||||
ln_ready="${value}"
|
||||
source <(/home/admin/_cache.sh meta ln_${lightning}_${chain}net_sync_chain)
|
||||
ln_sync="${value}"
|
||||
source <(/home/admin/_cache.sh meta ln_${lightning}_${chain}net_locked)
|
||||
ln_locked="${value}"
|
||||
source <(/home/admin/_cache.sh meta ln_${lightning}_${chain}net_recovery_mode)
|
||||
ln_recovery_mode="${value}"
|
||||
source <(/home/admin/_cache.sh meta ln_${lightning}_${chain}net_recovery_done)
|
||||
ln_recovery_done="${value}"
|
||||
|
||||
# lightning is still starting
|
||||
if [ "${ln_ready}" != "1" ]; then
|
||||
|
||||
ln_baseInfo="\n ${color_red}Not Started | Not Ready Yet | No Data"
|
||||
ln_peersInfo=""
|
||||
|
||||
# lightning is still syncing
|
||||
elif [ "${ln_locked}" == "1" ]; then
|
||||
|
||||
ln_baseInfo="${color_amber}Wallet Locked"
|
||||
ln_peersInfo=""
|
||||
|
||||
# lightning is still syncing
|
||||
elif [ "${ln_recovery_mode}" == "1" ] && [ "${ln_recovery_done}" == "0" ]; then
|
||||
|
||||
ln_baseInfo="${color_amber}Rescanning transactions"
|
||||
ln_peersInfo=""
|
||||
|
||||
# lightning is still syncing
|
||||
elif [ "${ln_sync}" != "1" ]; then
|
||||
|
||||
source <(/home/admin/_cache.sh meta ln_${lightning}_${chain}net_sync_progress)
|
||||
ln_syncprogress="${value}"
|
||||
ln_baseInfo="${color_amber}Scanning blocks: ${ln_syncprogress}"
|
||||
ln_peersInfo=""
|
||||
|
||||
# OK lightning is ready - get more details
|
||||
else
|
||||
|
||||
# create fee report
|
||||
if [ "${lightning}" == "lnd" ]; then
|
||||
source <(/home/admin/_cache.sh meta ln_${lightning}_${chain}net_fees_daily)
|
||||
ln_dailyfees="${value}"
|
||||
source <(/home/admin/_cache.sh meta ln_${lightning}_${chain}net_fees_weekly)
|
||||
ln_weeklyfees="${value}"
|
||||
source <(/home/admin/_cache.sh meta ln_${lightning}_${chain}net_fees_month)
|
||||
ln_monthlyfees="${value}"
|
||||
ln_feeReport="Fee Report (D-W-M): ${color_green}${ln_dailyfees}-${ln_weeklyfees}-${ln_monthlyfees} ${color_gray}${netprefix}sat"
|
||||
else
|
||||
ln_baseInfo="${color_amber} Waiting for Chain Sync"
|
||||
source <(/home/admin/_cache.sh meta ln_${lightning}_${chain}net_fees_total)
|
||||
ln_totalfees="${value}"
|
||||
ln_feeReport="Fee Report: ${color_green}${ln_totalfees} ${color_gray}${netprefix}msat"
|
||||
fi
|
||||
else
|
||||
ln_walletbalance="$(sudo -u bitcoin /usr/local/bin/lncli --macaroonpath=${lnd_macaroon_dir}/readonly.macaroon --tlscertpath=${lnd_dir}/tls.cert walletbalance | jq -r '.confirmed_balance')" 2>/dev/null
|
||||
ln_walletbalance_wait="$(sudo -u bitcoin /usr/local/bin/lncli --macaroonpath=${lnd_macaroon_dir}/readonly.macaroon --tlscertpath=${lnd_dir}/tls.cert walletbalance | jq -r '.unconfirmed_balance')" 2>/dev/null
|
||||
if [ "${ln_walletbalance_wait}" = "0" ]; then ln_walletbalance_wait=""; fi
|
||||
if [ ${#ln_walletbalance_wait} -gt 0 ]; then ln_walletbalance_wait="(+${ln_walletbalance_wait})"; fi
|
||||
ln_channelbalance="$(sudo -u bitcoin /usr/local/bin/lncli --macaroonpath=${lnd_macaroon_dir}/readonly.macaroon --tlscertpath=${lnd_dir}/tls.cert channelbalance | jq -r '.balance')" 2>/dev/null
|
||||
ln_channelbalance_pending="$(sudo -u bitcoin /usr/local/bin/lncli --macaroonpath=${lnd_macaroon_dir}/readonly.macaroon --tlscertpath=${lnd_dir}/tls.cert channelbalance | jq -r '.pending_open_balance')" 2>/dev/null
|
||||
if [ "${ln_channelbalance_pending}" = "0" ]; then ln_channelbalance_pending=""; fi
|
||||
if [ ${#ln_channelbalance_pending} -gt 0 ]; then ln_channelbalance_pending=" (+${ln_channelbalance_pending})"; fi
|
||||
ln_channels_online="$(echo "${ln_getInfo}" | jq -r '.num_active_channels')" 2>/dev/null
|
||||
ln_channels_total="$(sudo -u bitcoin /usr/local/bin/lncli --macaroonpath=${lnd_macaroon_dir}/readonly.macaroon --tlscertpath=${lnd_dir}/tls.cert listchannels | jq '.[] | length')" 2>/dev/null
|
||||
ln_baseInfo="${color_gray}wallet ${ln_walletbalance} sat ${ln_walletbalance_wait}"
|
||||
ln_peers="$(echo "${ln_getInfo}" | jq -r '.num_peers')" 2>/dev/null
|
||||
ln_channelInfo="${ln_channels_online}/${ln_channels_total} Channels ${ln_channelbalance} sat${ln_channelbalance_pending}"
|
||||
ln_peersInfo="${color_green}${ln_peers} ${color_gray}peers"
|
||||
ln_dailyfees="$(sudo -u bitcoin /usr/local/bin/lncli --macaroonpath=${lnd_macaroon_dir}/readonly.macaroon --tlscertpath=${lnd_dir}/tls.cert feereport | jq -r '.day_fee_sum')" 2>/dev/null
|
||||
ln_weeklyfees="$(sudo -u bitcoin /usr/local/bin/lncli --macaroonpath=${lnd_macaroon_dir}/readonly.macaroon --tlscertpath=${lnd_dir}/tls.cert feereport | jq -r '.week_fee_sum')" 2>/dev/null
|
||||
ln_monthlyfees="$(sudo -u bitcoin /usr/local/bin/lncli --macaroonpath=${lnd_macaroon_dir}/readonly.macaroon --tlscertpath=${lnd_dir}/tls.cert feereport | jq -r '.month_fee_sum')" 2>/dev/null
|
||||
ln_feeReport="Fee Report (D-W-M): ${color_green}${ln_dailyfees}-${ln_weeklyfees}-${ln_monthlyfees} ${color_gray}sat"
|
||||
|
||||
# on-chain wallet info
|
||||
ln_pendingonchain=""
|
||||
source <(/home/admin/_cache.sh meta ln_${lightning}_${chain}net_wallet_onchain_pending)
|
||||
ln_onchain_pending="${value}"
|
||||
if [ "${ln_onchain_pending}" != "" ] && [ ${ln_onchain_pending} -gt 0 ]; then ln_pendingonchain=" (+${ln_onchain_pending})"; fi
|
||||
source <(/home/admin/_cache.sh meta ln_${lightning}_${chain}net_wallet_onchain_balance)
|
||||
ln_walletbalance=$(printf "%'d" "${value}")
|
||||
ln_baseInfo="${color_gray}Wallet ${ln_walletbalance} ${netprefix}sat ${ln_pendingonchain}"
|
||||
|
||||
# channel pending info
|
||||
ln_channelbalance_pending=""
|
||||
source <(/home/admin/_cache.sh meta ln_${lightning}_${chain}net_wallet_channels_pending)
|
||||
ln_channels_pending="${value}"
|
||||
if [ "${ln_channels_pending}" != "" ] && [ ${ln_channels_pending} -gt 0 ]; then ln_channelbalance_pending=" (+${ln_channels_pending})"; fi
|
||||
|
||||
# get channel infos
|
||||
source <(/home/admin/_cache.sh meta ln_${lightning}_${chain}net_wallet_channels_balance)
|
||||
ln_channels_balance=$(printf "%'d" "${value}")
|
||||
source <(/home/admin/_cache.sh meta ln_${lightning}_${chain}net_channels_active)
|
||||
ln_channels_online="${value}"
|
||||
source <(/home/admin/_cache.sh meta ln_${lightning}_${chain}net_channels_total)
|
||||
ln_channels_total="${value}"
|
||||
|
||||
# construct channel info string
|
||||
ln_channelInfo="${ln_channels_online}/${ln_channels_total} Channels ${ln_channels_balance} ${netprefix}sat${ln_channelbalance_pending}"
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
# show JoinMarket stats in place of the LND URI only if the Yield Generator is running
|
||||
|
||||
source /home/joinmarket/joinin.conf 2>/dev/null
|
||||
if [ "${joinmarket}" = "on" ] && [ $(sudo -u joinmarket pgrep -f "python yg-privacyenhanced.py $YGwallet --wallet-password-stdin" 2>/dev/null | wc -l) -gt 2 ]; then
|
||||
JMstats=$(mktemp 2>/dev/null)
|
||||
sudo -u joinmarket /home/joinmarket/info.stats.sh > $JMstats
|
||||
JMstatsL1=$(sed -n 1p < "$JMstats")
|
||||
JMstatsL2=$(sed -n 2p < "$JMstats")
|
||||
JMstatsL3=$(sed -n 3p < "$JMstats")
|
||||
JMstatsL4=$(sed -n 4p < "$JMstats")
|
||||
lastLine="\
|
||||
${color_yellow}
|
||||
${color_yellow}${ln_publicColor}${ln_external}${color_gray}"
|
||||
|
||||
if [ "${joinmarket}" = "on" ];then
|
||||
# show JoinMarket stats in place of the LND URI only if the Yield Generator is running
|
||||
if [ "$(sudo -u joinmarket pgrep -f "yg-privacyenhanced.py" 2>/dev/null | wc -l)" -gt 2 ] || \
|
||||
[ "$(curl -ksX GET https://127.0.0.1:28183/api/v1/session | jq .maker_running 2>/dev/null)" = true ]; then
|
||||
|
||||
trap 'rm -f "$JMstats"' EXIT
|
||||
JMstats=$(mktemp -p /dev/shm)
|
||||
sudo -u joinmarket /home/joinmarket/info.stats.sh > $JMstats
|
||||
JMstatsL1=$(sed -n 1p < "$JMstats")
|
||||
JMstatsL2=$(sed -n 2p < "$JMstats")
|
||||
JMstatsL3=$(sed -n 3p < "$JMstats")
|
||||
JMstatsL4=$(sed -n 4p < "$JMstats")
|
||||
lastLine="\
|
||||
${color_gray}
|
||||
${color_gray} ╦╔╦╗ ${color_gray}$JMstatsL1
|
||||
${color_gray} ║║║║ ${color_gray}$JMstatsL2
|
||||
${color_gray} ╚╝╩ ╩ ${color_gray}$JMstatsL3
|
||||
${color_gray} ◎=◎=◎=◎=◎ ${color_gray}$JMstatsL4"
|
||||
else
|
||||
lastLine="\
|
||||
${color_yellow}
|
||||
${color_yellow}${ln_publicColor}${ln_external}${color_gray}"
|
||||
fi
|
||||
fi
|
||||
|
||||
sleep 5
|
||||
if [ "${lightning}" == "cl" ]; then
|
||||
LNline="CLN ${color_green}${ln_version} ${ln_baseInfo}"
|
||||
elif [ "${lightning}" == "lnd" ]; then
|
||||
LNline="LND ${color_green}${ln_version} ${ln_baseInfo}"
|
||||
fi
|
||||
|
||||
## get uptime and current date & time
|
||||
uptime=$(uptime --pretty)
|
||||
datetime=$(date -R)
|
||||
LNinfo=" + Lightning Network"
|
||||
if [ "${lightning}" == "" ] || [ "${lightning}" == "none" ]; then
|
||||
LNinfo=""
|
||||
fi
|
||||
|
||||
webuiinfo=""
|
||||
source <(/home/admin/_cache.sh meta ln_${lightning}_${chain}net_recovery_done)
|
||||
if [ "${blitzapi}" == "on" ]; then
|
||||
webuiinfo="Web Admin --> http://${internet_localip}"
|
||||
fi
|
||||
|
||||
datetime=$(date +"%d %b %T %z")
|
||||
datetime="${datetime} up ${system_up_text}"
|
||||
|
||||
stty sane
|
||||
sleep 1
|
||||
clear
|
||||
|
||||
printf "
|
||||
${color_yellow}
|
||||
${color_yellow}
|
||||
${color_yellow}
|
||||
${color_yellow} ${color_amber}%s ${color_green} ${ln_alias} ${upsInfo}
|
||||
${color_yellow} ${color_gray}${network^} Fullnode + Lightning Network ${torInfo}
|
||||
${color_yellow} ${color_gray}${network^} Fullnode${LNinfo} ${torInfo}
|
||||
${color_yellow} ,/ ${color_yellow}%s
|
||||
${color_yellow} ,'/ ${color_gray}%s
|
||||
${color_yellow} ,' / ${color_gray}%s, temp %s°C %s°F
|
||||
${color_yellow} ,' /_____, ${color_gray}Free Mem ${color_ram}${ram} ${color_gray} HDDuse ${color_hdd}%s${color_gray}
|
||||
${color_yellow} .'____ ,' ${color_gray}SSH admin@${color_green}${local_ip}${color_gray} d${network_rx} u${network_tx}
|
||||
${color_yellow} / ,' ${color_gray}${webinterfaceInfo}
|
||||
${color_yellow} / ,' ${color_gray}${network} ${color_green}${networkVersion} ${color_gray}${chain}net ${networkConnectionsInfo}
|
||||
${color_yellow} /,' ${color_gray}Blocks ${blockInfo} ${color_gray}Sync ${sync_color}${sync} %s
|
||||
${color_yellow} ,' /_____ ${color_gray}Free Mem ${color_ram}${ram} ${color_gray} HDD ${color_hdd}%s${color_gray}
|
||||
${color_yellow},'_____ ,' ${color_gray}SSH admin@${internet_localip}${color_gray} d${internet_rx} u${internet_tx}
|
||||
${color_yellow} / ,' ${color_gray}${webuiinfo}
|
||||
${color_yellow} / ,' ${color_gray}${network} ${color_green}${networkVersion}${color_gray}${chain}net ${networkConnectionsInfo}
|
||||
${color_yellow} /,' ${color_gray}${blockInfo} %s
|
||||
${color_yellow} /' ${color_gray}
|
||||
${color_yellow} ${color_gray}LND ${color_green}${ln_version} ${ln_baseInfo}
|
||||
${color_yellow} ${color_gray}${LNline}
|
||||
${color_yellow} ${color_gray}${ln_channelInfo} ${ln_peersInfo}
|
||||
${color_yellow} ${color_gray}${ln_feeReport}
|
||||
$lastLine
|
||||
@ -335,8 +342,8 @@ $lastLine
|
||||
"RaspiBlitz v${codeVersion}" \
|
||||
"-------------------------------------------" \
|
||||
"Refreshed: ${datetime}" \
|
||||
"CPU load${load##up*, }" "${tempC}" "${tempF}" \
|
||||
"${hdd}" "${sync_percentage}"
|
||||
"CPU load${system_cpu_load##up*, }" "${system_temp_celsius}" "${system_temp_fahrenheit}" \
|
||||
"${hdd_used_info}" "${sync_percentage}"
|
||||
|
||||
if [ ${#undervoltageReports} -gt 0 ] && [ "${undervoltageReports}" != "0" ]; then
|
||||
echo "${undervoltageReports} undervoltage reports - run 'Hardware Test' in menu"
|
||||
@ -344,86 +351,38 @@ elif [ ${#ups} -gt 1 ] && [ "${upsStatus}" = "n/a" ]; then
|
||||
echo "UPS service activated but not running"
|
||||
else
|
||||
|
||||
# cheching status of apps and display if in sync or problems
|
||||
# checking status of apps and display if in sync or problems
|
||||
appInfoLine=""
|
||||
|
||||
# Electrum Server - electrs
|
||||
if [ "${ElectRS}" = "on" ]; then
|
||||
fileFlagExists=$(sudo ls /mnt/hdd/app-storage/electrs/initial-sync.done 2>/dev/null | grep -c 'initial-sync.done')
|
||||
if [ "${ElectRS}" == "on" ] && [ $fileFlagExists -eq 0 ]; then
|
||||
error=""
|
||||
source <(sudo /home/admin/config.scripts/bonus.electrs.sh status 2>/dev/null)
|
||||
source <(/home/admin/config.scripts/bonus.electrs.sh status-sync 2>/dev/null)
|
||||
if [ ${#infoSync} -gt 0 ]; then
|
||||
appInfoLine="Electrum: ${infoSync}"
|
||||
fi
|
||||
fi
|
||||
|
||||
# BTC RPC EXPLORER
|
||||
if [ "${BTCRPCexplorer}" = "on" ]; then
|
||||
# Electrum Server - fulcrum
|
||||
fileFlagExists=$(sudo ls /mnt/hdd/app-storage/fulcrum/initial-sync.done 2>/dev/null | grep -c 'initial-sync.done')
|
||||
if [ "${fulcrum}" == "on" ] && [ $fileFlagExists -eq 0 ]; then
|
||||
error=""
|
||||
source <(sudo /home/admin/config.scripts/bonus.btc-rpc-explorer.sh status 2>/dev/null)
|
||||
if [ ${#error} -gt 0 ]; then
|
||||
appInfoLine="ERROR BTC-RPC-Explorer: ${error} (try restart)"
|
||||
elif [ "${isIndexed}" = "0" ]; then
|
||||
appInfoLine="BTC-RPC-Explorer: ${indexInfo}"
|
||||
source <(/home/admin/config.scripts/bonus.fulcrum.sh status-sync 2>/dev/null)
|
||||
if [ ${#infoSync} -gt 0 ]; then
|
||||
appInfoLine="Fulcrum: ${infoSync}"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Transaction Index
|
||||
source <(/home/admin/config.scripts/network.txindex.sh status)
|
||||
if [ "${txindex}" == "1" ] && [ "${isIndexed}" != "1" ]; then
|
||||
appInfoLine="Transaction Index: ${indexInfo}"
|
||||
fi
|
||||
|
||||
if [ ${#appInfoLine} -gt 0 ]; then
|
||||
echo "${appInfoLine}"
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
# if running as user "pi":
|
||||
# - write results to a JSON file on RAM disk
|
||||
# - update info.html file
|
||||
if [ "${EUID}" = "$(id -u pi)" ]; then
|
||||
|
||||
json_ln_baseInfo=$(echo "${ln_baseInfo}" | cut -c 11-)
|
||||
|
||||
cat <<EOF > /var/cache/raspiblitz/info.json
|
||||
{
|
||||
"uptime": "${uptime}",
|
||||
"datetime": "${datetime}",
|
||||
"codeVersion": "${codeVersion}",
|
||||
"hostname": "${hostname}",
|
||||
"network": "${network}",
|
||||
"torInfo": "${torInfo}",
|
||||
"load": "${load}",
|
||||
"tempC": "${tempC}",
|
||||
"tempF": "${tempF}",
|
||||
"ram": "${ram}",
|
||||
"hddUsedInfo": "${hddUsedInfo}",
|
||||
"local_ip": "${local_ip}",
|
||||
"network_rx": "${network_rx}",
|
||||
"network_tx": "${network_tx}",
|
||||
"runningRTL": "${runningRTL}",
|
||||
"networkVersion": "${networkVersion}",
|
||||
"chain": "${chain}",
|
||||
"progress": "${progress}",
|
||||
"sync_percentage": "${sync_percentage}",
|
||||
"public_addr_pre": "${public_addr_pre}",
|
||||
"public_addr": "${public_addr}",
|
||||
"public": "${public}",
|
||||
"networkConnections": "${networkConnections}",
|
||||
"mempool": "${mempool}",
|
||||
"ln_sync": "${ln_sync}",
|
||||
"ln_version": "${ln_version}",
|
||||
"ln_baseInfo": "${json_ln_baseInfo}",
|
||||
"ln_peers": "${ln_peers}",
|
||||
"ln_channelInfo": "${ln_channelInfo}",
|
||||
"ln_external": "${ln_external}"
|
||||
}
|
||||
EOF
|
||||
|
||||
# use Jinja2 and apply json data to template to produce static html file
|
||||
templateExists=$(sudo ls /var/cache/raspiblitz/info.json 2>/dev/null | grep -c 'info.json')
|
||||
if [ ${templateExists} -gt 0 ]; then
|
||||
res=$(/usr/local/bin/j2 /var/www/blitzweb/info/info.j2 /var/cache/raspiblitz/info.json -o /var/cache/raspiblitz/info.html)
|
||||
if ! [ $? -eq 0 ]; then
|
||||
echo "an error occured.. maybe JSON syntax is wrong..!"
|
||||
echo "${res}"
|
||||
fi
|
||||
fi
|
||||
|
||||
fi
|
||||
# EOF
|
||||
|
@ -18,8 +18,10 @@ function usage() {
|
||||
|
||||
# Default Values
|
||||
verbose=0
|
||||
pause=12
|
||||
pause=3
|
||||
|
||||
# this is used by touchscreen and command 'status'
|
||||
# TODO: remove on v1.8
|
||||
while [[ "$1" == -* ]]; do
|
||||
case "$1" in
|
||||
-h|--help)
|
||||
@ -62,8 +64,8 @@ configFile="/mnt/hdd/raspiblitz.conf"
|
||||
infoFile="/home/admin/raspiblitz.info"
|
||||
|
||||
# check that user is pi
|
||||
if [ "$USER" != "pi" ]; then
|
||||
echo "plz run as user pi --> su pi"
|
||||
if [ "$USER" != "pi" ] && [ "$USER" != "root" ]; then
|
||||
echo "plz run as user pi or with sudo"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@ -82,244 +84,59 @@ while :
|
||||
# CHECK BASIC DATA
|
||||
###########################
|
||||
|
||||
# get the local network IP to be displayed on the lCD
|
||||
source <(sudo /home/admin/config.scripts/internet.sh status)
|
||||
|
||||
# waiting for IP in general
|
||||
if [ ${#localip} -eq 0 ]; then
|
||||
l1="Waiting for Network ...\n"
|
||||
l2="Not able to get local IP.\n"
|
||||
l3="LAN cable connected? WIFI lost?\n"
|
||||
dialog --backtitle "RaspiBlitz ${codeVersion}" --infobox "$l1$l2$l3" 5 40
|
||||
sleep 3
|
||||
continue
|
||||
fi
|
||||
|
||||
# waiting for Internet connection
|
||||
if [ ${online} -eq 0 ]; then
|
||||
l1="Waiting for Internet ...\n"
|
||||
l2="Local Network seems OK but no Internet.\n"
|
||||
l3="Is router still online?\n"
|
||||
dialog --backtitle "RaspiBlitz ${codeVersion} ${localip}" --infobox "$l1$l2$l3" 5 45
|
||||
sleep 3
|
||||
continue
|
||||
fi
|
||||
|
||||
# get config info if already available (with state value)
|
||||
source ${infoFile}
|
||||
configExists=$(ls ${configFile} 2>/dev/null | grep -c '.conf')
|
||||
|
||||
configExists=$(ls "${configFile}" 2>/dev/null | grep -c '.conf')
|
||||
if [ ${configExists} -eq 1 ]; then
|
||||
source ${configFile}
|
||||
source <(/home/admin/config.scripts/network.aliases.sh getvars)
|
||||
fi
|
||||
|
||||
# reboot info
|
||||
if [ "${state}" = "reboot" ]; then
|
||||
dialog --backtitle "RaspiBlitz ${codeVersion}" --infobox "Waiting for Reboot ..." 3 30
|
||||
sleep 20
|
||||
continue
|
||||
fi
|
||||
if [ "${setupPhase}" != "done" ] || [ "${state}" == "reboot" ] || [ "${state}" == "shutdown" ] || [ "${state}" == "copytarget" ] || [ "${state}" == "copysource" ]; then
|
||||
|
||||
# shutdown info
|
||||
if [ "${state}" = "shutdown" ]; then
|
||||
dialog --backtitle "RaspiBlitz ${codeVersion}" --infobox "Waiting for Shutdown ..." 3 30
|
||||
sleep 20
|
||||
continue
|
||||
fi
|
||||
|
||||
# waiting for DHCP in general
|
||||
if [ "${state}" = "noDHCP" ]; then
|
||||
l1="Waiting for DHCP ...\n"
|
||||
l2="Not able to get local IP.\n"
|
||||
l3="Check you router if constant.\n"
|
||||
dialog --backtitle "RaspiBlitz ${codeVersion} (${localip})" --infobox "$l1$l2$l3" 5 40
|
||||
# show status info during boot & setup & repair on LCD
|
||||
if [ "${state}" == "" ]; then
|
||||
state="nostate"
|
||||
fi
|
||||
/home/admin/setup.scripts/eventInfoWait.sh "${state}" "${message}" lcd
|
||||
sleep 1
|
||||
continue
|
||||
|
||||
fi
|
||||
|
||||
# if no information available from files - set default
|
||||
if [ ${#setupStep} -eq 0 ]; then
|
||||
setupStep=0
|
||||
fi
|
||||
# if lightning is syncing or scanning
|
||||
source <(/home/admin/_cache.sh get \
|
||||
lightning \
|
||||
ln_default_locked \
|
||||
btc_default_synced \
|
||||
btc_default_online \
|
||||
btc_default_sync_initialblockdownload \
|
||||
btc_default_blocks_behind \
|
||||
)
|
||||
|
||||
# before setup even started
|
||||
if [ ${setupStep} -eq 0 ]; then
|
||||
|
||||
# check for internet connection
|
||||
online=$(ping 1.0.0.1 -c 1 -W 2 | grep -c '1 received')
|
||||
if [ ${online} -eq 0 ]; then
|
||||
# re-test with other server
|
||||
online=$(ping 8.8.8.8 -c 1 -W 2 | grep -c '1 received')
|
||||
fi
|
||||
if [ ${online} -eq 0 ]; then
|
||||
# re-test with other server
|
||||
online=$(ping 208.67.222.222 -c 1 -W 2 | grep -c '1 received')
|
||||
fi
|
||||
|
||||
if [ ${online} -eq 0 ]; then
|
||||
message="no internet connection"
|
||||
|
||||
# when in presync - get more info on progress
|
||||
elif [ "${state}" = "presync" ]; then
|
||||
blockchaininfo="$(sudo -u root bitcoin-cli --conf=/home/admin/assets/bitcoin.conf getblockchaininfo 2>/dev/null)"
|
||||
message="starting"
|
||||
if [ ${#blockchaininfo} -gt 0 ]; then
|
||||
message="$(echo "${blockchaininfo}" | jq -r '.verificationprogress')"
|
||||
message=$(echo $message | awk '{printf( "%.2f%%", 100 * $1)}')
|
||||
fi
|
||||
|
||||
# when old data - improve message
|
||||
elif [ "${state}" = "sdtoosmall" ]; then
|
||||
message="SDCARD TOO SMALL - min 16GB"
|
||||
|
||||
# when no HDD - improve message
|
||||
elif [ "${state}" = "noHDD" ]; then
|
||||
message="Connect external HDD/SSD"
|
||||
fi
|
||||
|
||||
# setup process has not started yet
|
||||
l1="Login to your RaspiBlitz with:\n"
|
||||
l2="ssh admin@${localip}\n"
|
||||
l3="Use password: raspiblitz\n"
|
||||
|
||||
if [ "${state}" = "recovering" ]; then
|
||||
l1="Recovering please wait ..\n"
|
||||
fi
|
||||
|
||||
boxwidth=$((${#localip} + 24))
|
||||
sleep 3
|
||||
dialog --backtitle "RaspiBlitz ${codeVersion} (${state}) - ${message}" --infobox "$l1$l2$l3" 5 ${boxwidth}
|
||||
sleep 5
|
||||
continue
|
||||
fi
|
||||
|
||||
# check if recovering/upgrade is running
|
||||
if [ "${state}" = "recovering" ]; then
|
||||
if [ ${#message} -eq 0 ]; then
|
||||
message="Setup in Progress"
|
||||
fi
|
||||
l1="Upgrade/Recover/Provision\n"
|
||||
l2="---> ${message}\n"
|
||||
l3="Please keep running until reboot."
|
||||
boxwidth=$((${#localip} + 28))
|
||||
dialog --backtitle "RaspiBlitz ${codeVersion} (${state}) ${setupStep} ${localip}" --infobox "$l1$l2$l3" 5 ${boxwidth}
|
||||
sleep 3
|
||||
continue
|
||||
fi
|
||||
|
||||
# if freshly recovered
|
||||
recoveredInfoExists=$(sudo ls /home/admin/recover.flag 2>/dev/null | grep -c '.flag')
|
||||
if [ ${recoveredInfoExists} -gt 0 ]; then
|
||||
l1="FINAL RECOVER LOGIN NEEDED:\n"
|
||||
l2="ssh admin@${localip}\n"
|
||||
l3="Use password: raspiblitz\n"
|
||||
boxwidth=$((${#localip} + 28))
|
||||
dialog --backtitle "RaspiBlitz ${codeVersion} (${state})" --infobox "$l1$l2$l3" 5 ${boxwidth}
|
||||
if [ "${lightning}" != "" ] && [ "${lightning}" != "none" ] && [ "${ln_default_locked}" == "1" ]; then
|
||||
/home/admin/setup.scripts/eventInfoWait.sh "walletlocked" "" lcd
|
||||
sleep 3
|
||||
continue
|
||||
fi
|
||||
|
||||
# if re-indexing
|
||||
if [ "${state}" = "reindex" ]; then
|
||||
l1="REINDEXING BLOCKCHAIN\n"
|
||||
l2="To monitor & detect finish:\n"
|
||||
l3="ssh admin@${localip}\n"
|
||||
boxwidth=$((${#localip} + 28))
|
||||
dialog --backtitle "RaspiBlitz ${codeVersion} (${state})" --infobox "$l1$l2$l3" 5 ${boxwidth}
|
||||
# when lightning is active - show sync until ln_default_sync_initial_done
|
||||
if [ "${lightning}" != "" ] && [ "${lightning}" != "none" ] && [ "${ln_default_sync_initial_done}" == "0" ]; then
|
||||
/home/admin/setup.scripts/eventBlockchainSync.sh lcd
|
||||
sleep 3
|
||||
continue
|
||||
fi
|
||||
|
||||
# when setup is in progress - password has been changed
|
||||
if [ ${setupStep} -lt 100 ]; then
|
||||
l1="Login to your RaspiBlitz with:\n"
|
||||
l2="ssh admin@${localip}\n"
|
||||
l3="Use your Password A\n"
|
||||
boxwidth=$((${#localip} + 24))
|
||||
# when btc not online or not synced - show sync screen
|
||||
if [ "${btc_default_synced}" != "1" ] || [ "${btc_default_online}" != "1" ]; then
|
||||
/home/admin/setup.scripts/eventBlockchainSync.sh lcd
|
||||
sleep 3
|
||||
dialog --backtitle "RaspiBlitz ${codeVersion} ${localip} - Welcome (${setupStep})" --infobox "$l1$l2$l3" 5 ${boxwidth}
|
||||
sleep 7
|
||||
continue
|
||||
fi
|
||||
|
||||
###########################
|
||||
# DISPLAY AFTER SETUP
|
||||
###########################
|
||||
|
||||
if [ "${state}" = "repair" ]; then
|
||||
l1="Repair Mode\n"
|
||||
l2="ssh admin@${localip}\n"
|
||||
l3="Use password: PasswordA\n"
|
||||
boxwidth=$((${#localip} + 28))
|
||||
dialog --backtitle "RaspiBlitz ${codeVersion} (${state}) ${setupStep} ${localip}" --infobox "$l1$l2$l3" 5 ${boxwidth}
|
||||
sleep 3
|
||||
continue
|
||||
fi
|
||||
|
||||
if [ "${state}" = "reboot" ]; then
|
||||
l1="Reboot needed.\n"
|
||||
l2="ssh admin@${localip}\n"
|
||||
l3="Use password: PasswordA\n"
|
||||
boxwidth=$((${#localip} + 28))
|
||||
dialog --backtitle "RaspiBlitz ${codeVersion} (${state}) ${setupStep} ${localip}" --infobox "$l1$l2$l3" 5 ${boxwidth}
|
||||
sleep 3
|
||||
continue
|
||||
fi
|
||||
|
||||
if [ "${state}" = "retorrent" ]; then
|
||||
l1="Repair Mode- TORRENT\n"
|
||||
l2="ssh admin@${localip}\n"
|
||||
l3="Use password: PasswordA\n"
|
||||
boxwidth=$((${#localip} + 28))
|
||||
dialog --backtitle "RaspiBlitz ${codeVersion} (${state}) ${setupStep} ${localip}" --infobox "$l1$l2$l3" 5 ${boxwidth}
|
||||
sleep 3
|
||||
continue
|
||||
fi
|
||||
|
||||
if [ "${state}" = "recopy" ]; then
|
||||
l1="Repair Mode - COPY\n"
|
||||
l2="ssh admin@${localip}\n"
|
||||
l3="Use password: PasswordA\n"
|
||||
boxwidth=$((${#localip} + 28))
|
||||
dialog --backtitle "RaspiBlitz ${codeVersion} (${state}) ${setupStep} ${localip}" --infobox "$l1$l2$l3" 5 ${boxwidth}
|
||||
sleep 3
|
||||
continue
|
||||
fi
|
||||
|
||||
if [ "${state}" = "copystation" ]; then
|
||||
l1="COPY STATION MODE\n"
|
||||
l2="${message}"
|
||||
dialog --backtitle "RaspiBlitz ${codeVersion} ${localip}" --infobox "$l1$l2" 6 56
|
||||
sleep 2
|
||||
continue
|
||||
fi
|
||||
|
||||
# if LND is syncing or scanning
|
||||
lndSynced=$(sudo -u bitcoin /usr/local/bin/lncli --chain=${network} --network=${chain}net getinfo 2>/dev/null | jq -r '.synced_to_chain' | grep -c true)
|
||||
if [ ${lndSynced} -eq 0 ]; then
|
||||
/home/admin/80scanLND.sh
|
||||
sleep 20
|
||||
continue
|
||||
fi
|
||||
|
||||
# perform config check
|
||||
configCheck=$(/home/admin/config.scripts/blitz.configcheck.py)
|
||||
if [ $? -eq 0 ]; then
|
||||
configValid=1
|
||||
# echo "Config Valid!"
|
||||
else
|
||||
configValid=0
|
||||
# echo "Config Not Valid!"
|
||||
l1="POTENTIAL CONFIG ERROR FOUND\n"
|
||||
l2="ssh admin@${localip}\n"
|
||||
l3="use Password A\n"
|
||||
l4="Run on Terminal command: check"
|
||||
dialog --backtitle "RaspiBlitz ${codeVersion} cfg-err ${localip}" --infobox "$l1$l2$l3$l4" 6 50
|
||||
sleep 20
|
||||
continue
|
||||
fi
|
||||
|
||||
# no special case - show status display
|
||||
/home/admin/00infoBlitz.sh
|
||||
/home/admin/00infoBlitz.sh ${chain}net $lightning
|
||||
sleep 5
|
||||
|
||||
done
|
||||
|
@ -2,15 +2,9 @@
|
||||
|
||||
echo "Starting the main menu ..."
|
||||
|
||||
# CONFIGFILE - configuration of RaspiBlitz
|
||||
configFile="/mnt/hdd/raspiblitz.conf"
|
||||
|
||||
# INFOFILE - state data from bootstrap
|
||||
infoFile="/home/admin/raspiblitz.info"
|
||||
|
||||
# MAIN MENU AFTER SETUP
|
||||
source ${infoFile}
|
||||
source ${configFile}
|
||||
source /home/admin/raspiblitz.info
|
||||
source /mnt/hdd/raspiblitz.conf
|
||||
|
||||
# FUNCTIONS
|
||||
|
||||
@ -38,134 +32,155 @@ confirmation()
|
||||
}
|
||||
|
||||
# get the local network IP to be displayed on the LCD
|
||||
source <(/home/admin/config.scripts/internet.sh status local)
|
||||
source <(/home/admin/_cache.sh get internet_localip)
|
||||
|
||||
if [ ${chain} = test ];then
|
||||
netprefix="t"
|
||||
elif [ ${chain} = sig ];then
|
||||
netprefix="s"
|
||||
elif [ ${chain} = main ];then
|
||||
netprefix=""
|
||||
fi
|
||||
|
||||
# BASIC MENU INFO
|
||||
HEIGHT=19
|
||||
WIDTH=64
|
||||
CHOICE_HEIGHT=12
|
||||
WIDTH=66
|
||||
BACKTITLE="RaspiBlitz"
|
||||
TITLE=""
|
||||
MENU="Choose one of the following options:"
|
||||
OPTIONS=()
|
||||
plus=""
|
||||
if [ "${runBehindTor}" = "on" ]; then
|
||||
plus=" / TOR"
|
||||
plus="/ tor"
|
||||
fi
|
||||
if [ ${#dynDomain} -gt 0 ]; then
|
||||
plus="${plus} / ${dynDomain}"
|
||||
plus="/ ${dynDomain} ${plus}"
|
||||
fi
|
||||
BACKTITLE="${localip} / ${hostname} / ${network} / ${chain}${plus}"
|
||||
|
||||
if [ "${rtlWebinterface}" == "on" ]; then
|
||||
TITLE="Webinterface: http://${localip}:3000"
|
||||
fi
|
||||
|
||||
# Put Activated Apps on top
|
||||
if [ "${rtlWebinterface}" == "on" ]; then
|
||||
OPTIONS+=(RTL "RTL Web Node Manager")
|
||||
HEIGHT=$((HEIGHT+1))
|
||||
CHOICE_HEIGHT=$((CHOICE_HEIGHT+1))
|
||||
fi
|
||||
if [ "${BTCPayServer}" == "on" ]; then
|
||||
OPTIONS+=(BTCPAY "BTCPay Server Info")
|
||||
HEIGHT=$((HEIGHT+1))
|
||||
CHOICE_HEIGHT=$((CHOICE_HEIGHT+1))
|
||||
fi
|
||||
if [ "${lit}" == "on" ]; then
|
||||
OPTIONS+=(LIT "LIT (loop, pool, faraday)")
|
||||
HEIGHT=$((HEIGHT+1))
|
||||
CHOICE_HEIGHT=$((CHOICE_HEIGHT+1))
|
||||
fi
|
||||
if [ "${ElectRS}" == "on" ]; then
|
||||
OPTIONS+=(ELECTRS "Electrum Rust Server")
|
||||
HEIGHT=$((HEIGHT+1))
|
||||
CHOICE_HEIGHT=$((CHOICE_HEIGHT+1))
|
||||
fi
|
||||
if [ "${BTCRPCexplorer}" == "on" ]; then
|
||||
OPTIONS+=(EXPLORE "BTC RPC Explorer")
|
||||
HEIGHT=$((HEIGHT+1))
|
||||
CHOICE_HEIGHT=$((CHOICE_HEIGHT+1))
|
||||
fi
|
||||
if [ "${LNBits}" == "on" ]; then
|
||||
OPTIONS+=(LNBITS "LNbits Server")
|
||||
HEIGHT=$((HEIGHT+1))
|
||||
CHOICE_HEIGHT=$((CHOICE_HEIGHT+1))
|
||||
fi
|
||||
if [ "${lndmanage}" == "on" ]; then
|
||||
OPTIONS+=(LNDMANAGE "LND Manage Script")
|
||||
HEIGHT=$((HEIGHT+1))
|
||||
CHOICE_HEIGHT=$((CHOICE_HEIGHT+1))
|
||||
fi
|
||||
if [ "${loop}" == "on" ]; then
|
||||
OPTIONS+=(LOOP "Loop In/Out Service")
|
||||
HEIGHT=$((HEIGHT+1))
|
||||
CHOICE_HEIGHT=$((CHOICE_HEIGHT+1))
|
||||
fi
|
||||
if [ "${mempoolExplorer}" == "on" ]; then
|
||||
OPTIONS+=(MEMPOOL "Mempool Space")
|
||||
HEIGHT=$((HEIGHT+1))
|
||||
CHOICE_HEIGHT=$((CHOICE_HEIGHT+1))
|
||||
fi
|
||||
if [ "${specter}" == "on" ]; then
|
||||
OPTIONS+=(SPECTER "Cryptoadvance Specter")
|
||||
HEIGHT=$((HEIGHT+1))
|
||||
CHOICE_HEIGHT=$((CHOICE_HEIGHT+1))
|
||||
fi
|
||||
if [ "${joinmarket}" == "on" ]; then
|
||||
OPTIONS+=(JMARKET "JoinMarket")
|
||||
HEIGHT=$((HEIGHT+1))
|
||||
CHOICE_HEIGHT=$((CHOICE_HEIGHT+1))
|
||||
fi
|
||||
if [ "${faraday}" == "on" ]; then
|
||||
OPTIONS+=(FARADAY "Faraday Channel Management")
|
||||
HEIGHT=$((HEIGHT+1))
|
||||
CHOICE_HEIGHT=$((CHOICE_HEIGHT+1))
|
||||
fi
|
||||
if [ "${bos}" == "on" ]; then
|
||||
OPTIONS+=(BOS "Balance of Satoshis")
|
||||
HEIGHT=$((HEIGHT+1))
|
||||
CHOICE_HEIGHT=$((CHOICE_HEIGHT+1))
|
||||
fi
|
||||
if [ "${pyblock}" == "on" ]; then
|
||||
OPTIONS+=(PYBLOCK "PyBlock")
|
||||
HEIGHT=$((HEIGHT+1))
|
||||
CHOICE_HEIGHT=$((CHOICE_HEIGHT+1))
|
||||
fi
|
||||
if [ "${thunderhub}" == "on" ]; then
|
||||
OPTIONS+=(THUB "ThunderHub")
|
||||
HEIGHT=$((HEIGHT+1))
|
||||
CHOICE_HEIGHT=$((CHOICE_HEIGHT+1))
|
||||
fi
|
||||
if [ "${zerotier}" == "on" ]; then
|
||||
OPTIONS+=(ZEROTIER "ZeroTier")
|
||||
HEIGHT=$((HEIGHT+1))
|
||||
CHOICE_HEIGHT=$((CHOICE_HEIGHT+1))
|
||||
fi
|
||||
if [ "${pool}" == "on" ]; then
|
||||
OPTIONS+=(POOL "Lightning Pool")
|
||||
HEIGHT=$((HEIGHT+1))
|
||||
CHOICE_HEIGHT=$((CHOICE_HEIGHT+1))
|
||||
fi
|
||||
if [ "${sphinxrelay}" == "on" ]; then
|
||||
OPTIONS+=(SPHINX "Sphinx Chat Relay")
|
||||
HEIGHT=$((HEIGHT+1))
|
||||
CHOICE_HEIGHT=$((CHOICE_HEIGHT+1))
|
||||
fi
|
||||
if [ "${chantools}" == "on" ]; then
|
||||
OPTIONS+=(CHANTOOLS "ChannelTools (Fund Rescue)")
|
||||
HEIGHT=$((HEIGHT+1))
|
||||
CHOICE_HEIGHT=$((CHOICE_HEIGHT+1))
|
||||
fi
|
||||
if [ "${circuitbreaker}" == "on" ]; then
|
||||
OPTIONS+=(CIRCUIT "Circuitbreaker (LND firewall)")
|
||||
HEIGHT=$((HEIGHT+1))
|
||||
CHOICE_HEIGHT=$((CHOICE_HEIGHT+1))
|
||||
if [ ${#lightning} -gt 0 ]; then
|
||||
plus="/ ${lightning} ${plus}"
|
||||
fi
|
||||
BACKTITLE="${internet_localip} / ${hostname} / ${network} ${plus}"
|
||||
|
||||
# Basic Options
|
||||
OPTIONS+=(INFO "RaspiBlitz Status Screen")
|
||||
OPTIONS+=(LIGHTNING "LND Wallet Options")
|
||||
|
||||
# if LND is active
|
||||
if [ "${lightning}" == "lnd" ] || [ "${lnd}" == "on" ]; then
|
||||
OPTIONS+=(LND "LND Wallet Options")
|
||||
fi
|
||||
|
||||
# if Core Lightning is active
|
||||
if [ "${lightning}" == "cl" ] || [ "${cl}" == "on" ]; then
|
||||
OPTIONS+=(CLN "Core Lightning Wallet Options")
|
||||
fi
|
||||
|
||||
# Activated Apps/Services
|
||||
if [ "${rtlWebinterface}" == "on" ]; then
|
||||
OPTIONS+=(LRTL "LND RTL Webinterface")
|
||||
fi
|
||||
if [ "${crtlWebinterface}" == "on" ]; then
|
||||
OPTIONS+=(CRTL "Core Lightning RTL Webinterface")
|
||||
fi
|
||||
if [ "${BTCPayServer}" == "on" ]; then
|
||||
OPTIONS+=(BTCPAY "BTCPay Server Info")
|
||||
fi
|
||||
if [ "${lit}" == "on" ]; then
|
||||
OPTIONS+=(LIT "LIT (loop, pool, faraday)")
|
||||
fi
|
||||
if [ "${lndg}" == "on" ]; then
|
||||
OPTIONS+=(LNDG "LNDg (auto-rebalance, auto-fees)")
|
||||
fi
|
||||
if [ "${ElectRS}" == "on" ]; then
|
||||
OPTIONS+=(ELECTRS "Electrum Rust Server")
|
||||
fi
|
||||
if [ "${fulcrum}" == "on" ]; then
|
||||
OPTIONS+=(FULCRUM "Fulcrum Electrum Server")
|
||||
fi
|
||||
if [ "${BTCRPCexplorer}" == "on" ]; then
|
||||
OPTIONS+=(EXPLORE "BTC RPC Explorer")
|
||||
fi
|
||||
if [ "${LNBits}" == "on" ]; then
|
||||
if [ "${LNBitsFunding}" == "lnd" ] || [ "${LNBitsFunding}" == "tlnd" ] || [ "${LNBitsFunding}" == "slnd" ] || [ "${LNBitsFunding}" == "" ]; then
|
||||
OPTIONS+=(LNBITS "LNbits on LND")
|
||||
elif [ "${LNBitsFunding}" == "cl" ] || [ "${LNBitsFunding}" == "tcl" ] || [ "${LNBitsFunding}" == "scl" ]; then
|
||||
OPTIONS+=(LNBITS "LNbits on Core Lightning")
|
||||
fi
|
||||
fi
|
||||
if [ "${lndmanage}" == "on" ]; then
|
||||
OPTIONS+=(LNDMANAGE "LND Manage Script")
|
||||
fi
|
||||
if [ "${loop}" == "on" ]; then
|
||||
OPTIONS+=(LOOP "Loop In/Out Service")
|
||||
fi
|
||||
if [ "${lndk}" == "on" ]; then
|
||||
OPTIONS+=(LNDK "LND BOLT 12 privacy")
|
||||
fi
|
||||
if [ "${mempoolExplorer}" == "on" ]; then
|
||||
OPTIONS+=(MEMPOOL "Mempool Space")
|
||||
fi
|
||||
if [ "${specter}" == "on" ]; then
|
||||
OPTIONS+=(SPECTER "Specter Desktop")
|
||||
fi
|
||||
if [ "${joinmarket}" == "on" ]; then
|
||||
OPTIONS+=(JM "JoinMarket with JoininBox")
|
||||
fi
|
||||
if [ "${jam}" == "on" ]; then
|
||||
OPTIONS+=(JAM "Jam (JoinMarket WebUI)")
|
||||
fi
|
||||
if [ "${faraday}" == "on" ]; then
|
||||
OPTIONS+=(FARADAY "Faraday Channel Management")
|
||||
fi
|
||||
if [ "${bos}" == "on" ]; then
|
||||
OPTIONS+=(BOS "Balance of Satoshis")
|
||||
fi
|
||||
#if [ "${lnproxy}" == "on" ]; then
|
||||
# OPTIONS+=(LNPROXY "lnproxy server")
|
||||
#fi
|
||||
if [ "${pyblock}" == "on" ]; then
|
||||
OPTIONS+=(PYBLOCK "PyBlock")
|
||||
fi
|
||||
if [ "${thunderhub}" == "on" ]; then
|
||||
OPTIONS+=(THUB "ThunderHub")
|
||||
fi
|
||||
if [ "${zerotier}" == "on" ]; then
|
||||
OPTIONS+=(ZEROTIER "ZeroTier")
|
||||
fi
|
||||
if [ "${pool}" == "on" ]; then
|
||||
OPTIONS+=(POOL "Lightning Pool")
|
||||
fi
|
||||
if [ "${sphinxrelay}" == "on" ]; then
|
||||
OPTIONS+=(SPHINX "Sphinx Chat Relay")
|
||||
fi
|
||||
if [ "${helipad}" == "on" ]; then
|
||||
OPTIONS+=(HELIPAD "Helipad Boostagram reader")
|
||||
fi
|
||||
if [ "${chantools}" == "on" ]; then
|
||||
OPTIONS+=(CHANTOOLS "ChannelTools (Fund Rescue)")
|
||||
fi
|
||||
if [ "${circuitbreaker}" == "on" ]; then
|
||||
OPTIONS+=(CIRCUITBREAKER "Circuitbreaker (LND firewall)")
|
||||
fi
|
||||
if [ "${squeaknode}" == "on" ]; then
|
||||
OPTIONS+=(SQUEAKNODE "Squeaknode")
|
||||
fi
|
||||
if [ "${lightningtipbot}" == "on" ]; then
|
||||
OPTIONS+=(LIGHTNINGTIPBOT "Show LightningTipBot details")
|
||||
fi
|
||||
if [ "${fints}" == "on" ]; then
|
||||
OPTIONS+=(FINTS "Show FinTS/HBCI details")
|
||||
fi
|
||||
if [ "${labelbase}" == "on" ]; then
|
||||
OPTIONS+=(LABELBASE "Labelbase (UTXO labeling)")
|
||||
fi
|
||||
|
||||
# dont offer to switch to "testnet view for now" - so no wswitch back to mainnet needed
|
||||
#if [ ${chain} != "main" ]; then
|
||||
# OPTIONS+=(MAINNET "Mainnet Service Options")
|
||||
#fi
|
||||
|
||||
if [ "${testnet}" == "on" ]; then
|
||||
OPTIONS+=(TESTNETS "Testnet/Signet Options")
|
||||
fi
|
||||
|
||||
OPTIONS+=(SETTINGS "Node Settings & Options")
|
||||
OPTIONS+=(SERVICES "Additional Apps & Services")
|
||||
OPTIONS+=(SYSTEM "Monitoring & Configuration")
|
||||
@ -175,8 +190,6 @@ OPTIONS+=(PASSWORD "Change Passwords")
|
||||
|
||||
if [ "${touchscreen}" == "1" ]; then
|
||||
OPTIONS+=(SCREEN "Touchscreen Calibration")
|
||||
HEIGHT=$((HEIGHT+1))
|
||||
CHOICE_HEIGHT=$((CHOICE_HEIGHT+1))
|
||||
fi
|
||||
|
||||
# final Options
|
||||
@ -185,6 +198,8 @@ OPTIONS+=(UPDATE "Check/Prepare RaspiBlitz Update")
|
||||
OPTIONS+=(REBOOT "Reboot RaspiBlitz")
|
||||
OPTIONS+=(OFF "PowerOff RaspiBlitz")
|
||||
|
||||
CHOICE_HEIGHT=$(("${#OPTIONS[@]}/2+1"))
|
||||
HEIGHT=$((CHOICE_HEIGHT+6))
|
||||
CHOICE=$(dialog --clear \
|
||||
--backtitle "$BACKTITLE" \
|
||||
--title "$TITLE" \
|
||||
@ -198,49 +213,48 @@ CHOICE=$(dialog --clear \
|
||||
case $CHOICE in
|
||||
INFO)
|
||||
echo "Gathering Information (please wait) ..."
|
||||
walletLocked=$(lncli getinfo 2>&1 | grep -c "Wallet is encrypted")
|
||||
if [ ${walletLocked} -eq 0 ]; then
|
||||
while :
|
||||
do
|
||||
while :
|
||||
do
|
||||
|
||||
# show the same info as on LCD screen
|
||||
/home/admin/00infoBlitz.sh
|
||||
# show the same info as on LCD screen
|
||||
/home/admin/00infoBlitz.sh ${chain}net ${lightning}
|
||||
|
||||
# wait 6 seconds for user exiting loop
|
||||
# wait 6 seconds for user exiting loop
|
||||
echo ""
|
||||
echo -en "Screen is updating in a loop .... press 'x' now to get back to menu."
|
||||
read -n 1 -t 6 keyPressed
|
||||
echo -en "\rGathering information to update info ... please wait. \n"
|
||||
|
||||
# check if user wants to abort session
|
||||
if [ "${keyPressed}" = "x" ]; then
|
||||
echo ""
|
||||
echo -en "Screen is updating in a loop .... press 'x' now to get back to menu."
|
||||
read -n 1 -t 6 keyPressed
|
||||
echo -en "\rGathering information to update info ... please wait. \n"
|
||||
|
||||
# check if user wants to abort session
|
||||
if [ "${keyPressed}" = "x" ]; then
|
||||
echo ""
|
||||
echo "Returning to menu ....."
|
||||
sleep 4
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
else
|
||||
/home/admin/00raspiblitz.sh
|
||||
exit 0
|
||||
fi
|
||||
echo "Returning to menu ....."
|
||||
sleep 4
|
||||
break
|
||||
fi
|
||||
done
|
||||
;;
|
||||
LIGHTNING)
|
||||
/home/admin/99lightningMenu.sh
|
||||
LND)
|
||||
/home/admin/99lndMenu.sh
|
||||
;;
|
||||
CLN)
|
||||
/home/admin/99clMenu.sh ${chain}net
|
||||
;;
|
||||
CONNECT)
|
||||
/home/admin/99connectMenu.sh
|
||||
;;
|
||||
SYSTEM)
|
||||
/home/admin/99systemMenu.sh
|
||||
/home/admin/99systemMenu.sh ${chain}net
|
||||
;;
|
||||
SCREEN)
|
||||
dialog --title 'Touchscreen Calibration' --msgbox 'Choose OK and then follow the instructions on touchscreen for calibration.\n\nBest is to use a stylus for accurate touchscreen interaction.' 9 48
|
||||
/home/admin/config.scripts/blitz.touchscreen.sh calibrate
|
||||
;;
|
||||
RTL)
|
||||
/home/admin/config.scripts/bonus.rtl.sh menu
|
||||
LRTL)
|
||||
/home/admin/config.scripts/bonus.rtl.sh menu lnd mainnet
|
||||
;;
|
||||
CRTL)
|
||||
/home/admin/config.scripts/bonus.rtl.sh menu cl mainnet
|
||||
;;
|
||||
BTCPAY)
|
||||
/home/admin/config.scripts/bonus.btcpayserver.sh menu
|
||||
@ -251,32 +265,44 @@ case $CHOICE in
|
||||
ELECTRS)
|
||||
/home/admin/config.scripts/bonus.electrs.sh menu
|
||||
;;
|
||||
FULCRUM)
|
||||
/home/admin/config.scripts/bonus.fulcrum.sh menu
|
||||
;;
|
||||
LIT)
|
||||
/home/admin/config.scripts/bonus.lit.sh menu
|
||||
;;
|
||||
LNDG)
|
||||
/home/admin/config.scripts/bonus.lndg.sh menu
|
||||
;;
|
||||
LNBITS)
|
||||
/home/admin/config.scripts/bonus.lnbits.sh menu
|
||||
;;
|
||||
LNDMANAGE)
|
||||
/home/admin/config.scripts/bonus.lndmanage.sh menu
|
||||
;;
|
||||
LOOP)
|
||||
/home/admin/config.scripts/bonus.loop.sh menu
|
||||
LNDK)
|
||||
/home/admin/config.scripts/bonus.lndk.sh menu
|
||||
;;
|
||||
LIGHTNINGTIPBOT)
|
||||
/home/admin/config.scripts/bonus.lightningtipbot.sh menu
|
||||
;;
|
||||
MEMPOOL)
|
||||
/home/admin/config.scripts/bonus.mempool.sh menu
|
||||
;;
|
||||
SPECTER)
|
||||
/home/admin/config.scripts/bonus.cryptoadvance-specter.sh menu
|
||||
/home/admin/config.scripts/bonus.specter.sh menu
|
||||
;;
|
||||
JMARKET)
|
||||
sudo /home/admin/config.scripts/bonus.joinmarket.sh menu
|
||||
JM)
|
||||
/home/admin/config.scripts/bonus.joinmarket.sh menu
|
||||
;;
|
||||
FARADAY)
|
||||
sudo /home/admin/config.scripts/bonus.faraday.sh menu
|
||||
JAM)
|
||||
/home/admin/config.scripts/bonus.jam.sh menu
|
||||
;;
|
||||
BOS)
|
||||
sudo /home/admin/config.scripts/bonus.bos.sh menu
|
||||
;;
|
||||
LNPROXY)
|
||||
sudo /home/admin/config.scripts/bonus.lnproxy.sh menu
|
||||
;;
|
||||
PYBLOCK)
|
||||
sudo /home/admin/config.scripts/bonus.pyblock.sh menu
|
||||
@ -287,18 +313,33 @@ case $CHOICE in
|
||||
ZEROTIER)
|
||||
sudo /home/admin/config.scripts/bonus.zerotier.sh menu
|
||||
;;
|
||||
POOL)
|
||||
sudo /home/admin/config.scripts/bonus.pool.sh menu
|
||||
;;
|
||||
SPHINX)
|
||||
sudo /home/admin/config.scripts/bonus.sphinxrelay.sh menu
|
||||
;;
|
||||
HELIPAD)
|
||||
sudo /home/admin/config.scripts/bonus.helipad.sh menu
|
||||
;;
|
||||
SQUEAKNODE)
|
||||
/home/admin/config.scripts/bonus.squeaknode.sh menu
|
||||
;;
|
||||
ITCHYSATS)
|
||||
sudo /home/admin/config.scripts/bonus.itchysats.sh menu
|
||||
;;
|
||||
CHANTOOLS)
|
||||
sudo /home/admin/config.scripts/bonus.chantools.sh menu
|
||||
;;
|
||||
CIRCUIT)
|
||||
CIRCUITBREAKER)
|
||||
sudo /home/admin/config.scripts/bonus.circuitbreaker.sh menu
|
||||
;;
|
||||
;;
|
||||
LABELBASE)
|
||||
sudo /home/admin/config.scripts/bonus.labelbase.sh menu
|
||||
;;
|
||||
FINTS)
|
||||
sudo /home/admin/config.scripts/bonus.fints.sh menu
|
||||
;;
|
||||
TESTNETS)
|
||||
/home/admin/00parallelChainsMenu.sh
|
||||
;;
|
||||
SUBSCRIBE)
|
||||
/home/admin/config.scripts/blitz.subscriptions.py
|
||||
;;
|
||||
@ -310,55 +351,49 @@ case $CHOICE in
|
||||
;;
|
||||
REPAIR)
|
||||
/home/admin/98repairMenu.sh
|
||||
if [ $? -eq 99 ]; then
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
PASSWORD)
|
||||
sudo /home/admin/config.scripts/blitz.setpassword.sh
|
||||
sudo /home/admin/config.scripts/blitz.passwords.sh set
|
||||
;;
|
||||
UPDATE)
|
||||
/home/admin/99updateMenu.sh
|
||||
;;
|
||||
REBOOT)
|
||||
clear
|
||||
confirmation "Are you sure?" "Reboot" "Cancel" true 7 40
|
||||
confirmationReboot=$?
|
||||
if [ $confirmationReboot -eq 0 ]; then
|
||||
clear
|
||||
confirmation "Are you sure?" "Reboot" "Cancel" true 7 40
|
||||
confirmationReboot=$?
|
||||
if [ $confirmationReboot -eq 0 ]; then
|
||||
clear
|
||||
echo ""
|
||||
sudo /home/admin/XXshutdown.sh reboot
|
||||
exit 0
|
||||
fi
|
||||
sudo /home/admin/config.scripts/blitz.shutdown.sh reboot
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
OFF)
|
||||
clear
|
||||
confirmation "Are you sure?" "PowerOff" "Cancel" true 7 40
|
||||
confirmationShutdown=$?
|
||||
if [ $confirmationShutdown -eq 0 ]; then
|
||||
clear
|
||||
confirmation "Are you sure?" "PowerOff" "Cancel" true 7 40
|
||||
confirmationShutdown=$?
|
||||
if [ $confirmationShutdown -eq 0 ]; then
|
||||
clear
|
||||
echo ""
|
||||
sudo /home/admin/XXshutdown.sh
|
||||
exit 0
|
||||
fi
|
||||
sudo /home/admin/config.scripts/blitz.shutdown.sh
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
DELETE)
|
||||
sudo /home/admin/XXcleanHDD.sh
|
||||
sudo /home/admin/XXshutdown.sh reboot
|
||||
exit 0
|
||||
sudo /home/admin/config.scripts/blitz.shutdown.sh reboot
|
||||
exit 1
|
||||
;;
|
||||
*)
|
||||
clear
|
||||
echo "***********************************"
|
||||
echo "* RaspiBlitz Commandline"
|
||||
echo "* Here be dragons .. have fun :)"
|
||||
echo "***********************************"
|
||||
echo "Bitcoin command line options: bitcoin-cli help"
|
||||
echo "LND command line options: lncli -h"
|
||||
echo "Back to main menu use command: raspiblitz"
|
||||
echo
|
||||
exit 0
|
||||
exit 1
|
||||
esac
|
||||
|
||||
# go into loop - start script from beginning to load config/sate fresh
|
||||
/home/admin/00mainMenu.sh
|
||||
# forward exit code of submenu to outside loop
|
||||
# 0 = continue loop / everything else = break loop and exit to terminal
|
||||
exitCodeOfSubmenu=$?
|
||||
if [ "${exitCodeOfSubmenu}" != "0" ]; then
|
||||
echo "# submenu signaled exit code '${exitCodeOfSubmenu}' --> forward to outside loop"
|
||||
fi
|
||||
exit ${exitCodeOfSubmenu}
|
||||
|
69
home.admin/00parallelChainsMenu.sh
Normal file
@ -0,0 +1,69 @@
|
||||
#!/bin/bash
|
||||
|
||||
# For now just list all testnet/signet options available
|
||||
# injecting specific perspectives can be done later
|
||||
|
||||
source /home/admin/raspiblitz.info
|
||||
source /mnt/hdd/raspiblitz.conf
|
||||
|
||||
# BASIC MENU INFO
|
||||
WIDTH=64
|
||||
BACKTITLE="RaspiBlitz"
|
||||
TITLE=" Testnet/Signet Options "
|
||||
MENU="Choose one of the following options:"
|
||||
OPTIONS=()
|
||||
plus=""
|
||||
|
||||
if [ "${testnet}" == "on" ]; then
|
||||
OPTIONS+=(tSYS "TESTNET Monitoring & Configuration")
|
||||
if [ "${lightning}" == "lnd" ] || [ "${lnd}" == "on" ]; then OPTIONS+=(tLND "TESTNET LND Wallet Options"); fi
|
||||
if [ "${lightning}" == "cl" ] || [ "${cl}" == "on" ]; then OPTIONS+=(tCL "TESTNET Core Lightning Wallet Options"); fi
|
||||
fi
|
||||
|
||||
# just an optical splitter - ignored on select
|
||||
OPTIONS+=(--- "----------------------------------")
|
||||
|
||||
if [ "${signet}" == "on" ]; then
|
||||
OPTIONS+=(sSYS "SIGNET Monitoring & Configuration")
|
||||
if [ "${lightning}" == "cl" ] || [ "${cl}" == "on" ]; then OPTIONS+=(sCL "SIGNET Core Lightning Wallet Options"); fi
|
||||
fi
|
||||
|
||||
# DONT OFFER SERVICES FOR TESTNET RIGHT NOW
|
||||
# OPTIONS+=(RTL "RTL Web Node Manager for LND ${CHAIN}")
|
||||
# OPTIONS+=(SERVICES "Additional Apps & Services on ${CHAIN}")
|
||||
|
||||
# MAYBE LATER
|
||||
# OPTIONS+=(CONNECT "Connect Apps & Show Credentials")
|
||||
|
||||
CHOICE_HEIGHT=$(("${#OPTIONS[@]}/2+1"))
|
||||
HEIGHT=$((CHOICE_HEIGHT+6))
|
||||
CHOICE=$(dialog --clear \
|
||||
--backtitle "$BACKTITLE" \
|
||||
--title "$TITLE" \
|
||||
--ok-label "Select" \
|
||||
--cancel-label "Back" \
|
||||
--menu "$MENU" \
|
||||
$HEIGHT $WIDTH $CHOICE_HEIGHT \
|
||||
"${OPTIONS[@]}" \
|
||||
2>&1 >/dev/tty)
|
||||
|
||||
case $CHOICE in
|
||||
tSYS)
|
||||
/home/admin/99systemMenu.sh testnet
|
||||
;;
|
||||
sSYS)
|
||||
/home/admin/99systemMenu.sh signet
|
||||
;;
|
||||
tLND)
|
||||
/home/admin/99lndMenu.sh testnet
|
||||
;;
|
||||
sLND)
|
||||
/home/admin/99lndMenu.sh signet
|
||||
;;
|
||||
tCL)
|
||||
/home/admin/99clMenu.sh testnet
|
||||
;;
|
||||
sCL)
|
||||
/home/admin/99clMenu.sh signet
|
||||
;;
|
||||
esac
|
158
home.admin/00parallelMainnetServices.sh
Normal file
@ -0,0 +1,158 @@
|
||||
#!/bin/bash
|
||||
|
||||
# get raspiblitz config
|
||||
echo "get raspiblitz config"
|
||||
source /home/admin/raspiblitz.info
|
||||
source /mnt/hdd/raspiblitz.conf
|
||||
|
||||
CHAIN=mainnet
|
||||
|
||||
# for testnet
|
||||
echo "services default values"
|
||||
if [ ${#rtlWebinterface} -eq 0 ]; then rtlWebinterface="off"; fi
|
||||
if [ ${#lnd} -eq 0 ]; then lnd="off"; fi
|
||||
if [ ${#cl} -eq 0 ]; then cl="off"; fi
|
||||
if [ ${#crtlWebinterface} -eq 0 ]; then crtlWebinterface="off"; fi
|
||||
|
||||
# show select dialog
|
||||
echo "run dialog ..."
|
||||
|
||||
OPTIONS=()
|
||||
OPTIONS+=(l "LND on $CHAIN" ${lnd})
|
||||
OPTIONS+=(r "RTL for LND $CHAIN" ${rtlWebinterface})
|
||||
OPTIONS+=(c "Core Lightning on $CHAIN" ${cl})
|
||||
OPTIONS+=(t "RTL for CL on $CHAIN" ${crtlWebinterface})
|
||||
|
||||
CHOICES=$(dialog --title ' Additional Services ' \
|
||||
--checklist ' use spacebar to activate/de-activate ' \
|
||||
12 45 5 "${OPTIONS[@]}" 2>&1 >/dev/tty)
|
||||
|
||||
dialogcancel=$?
|
||||
echo "done dialog"
|
||||
clear
|
||||
|
||||
# check if user canceled dialog
|
||||
echo "dialogcancel(${dialogcancel})"
|
||||
if [ ${dialogcancel} -eq 1 ]; then
|
||||
echo "user canceled"
|
||||
exit 0
|
||||
elif [ ${dialogcancel} -eq 255 ]; then
|
||||
echo "ESC pressed"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
needsReboot=0
|
||||
anychange=0
|
||||
|
||||
# lnd process choice
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "l")
|
||||
if [ ${check} -eq 1 ]; then choice="on"; fi
|
||||
if [ "${lnd}" != "${choice}" ]; then
|
||||
echo "# LND on $CHAIN Setting changed .."
|
||||
anychange=1
|
||||
/home/admin/config.scripts/lnd.install.sh ${choice} $CHAIN
|
||||
errorOnInstall=$?
|
||||
if [ "${choice}" = "on" ]; then
|
||||
if [ ${errorOnInstall} -eq 0 ]; then
|
||||
echo "# Successfully installed LND on $CHAIN"
|
||||
else
|
||||
l1="# FAIL on LND on $CHAIN install #"
|
||||
l2="# Try manual install on terminal after reboot with:"
|
||||
l3="/home/admin/config.scripts/lnd.install.sh on $CHAIN"
|
||||
dialog --title 'FAIL' --msgbox "${l1}\n${l2}\n${l3}" 7 65
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo "# LND on $CHAIN Setting unchanged."
|
||||
fi
|
||||
|
||||
# cl process choice
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "c")
|
||||
if [ ${check} -eq 1 ]; then choice="on"; fi
|
||||
if [ "${cl}" != "${choice}" ]; then
|
||||
echo "# CL on $CHAIN Setting changed .."
|
||||
anychange=1
|
||||
/home/admin/config.scripts/cl.install.sh ${choice} $CHAIN
|
||||
errorOnInstall=$?
|
||||
if [ "${choice}" = "on" ]; then
|
||||
if [ ${errorOnInstall} -eq 0 ]; then
|
||||
echo "# Successfully installed CL on $CHAIN"
|
||||
# for mainnet only
|
||||
# generate wallet from seedwords
|
||||
/home/admin/config.scripts/cl.hsmtool.sh new $CHAIN
|
||||
else
|
||||
l1="# FAIL on CL on $CHAIN install #"
|
||||
l2="# Try manual install on terminal after reboot with:"
|
||||
l3="/home/admin/config.scripts/cl.install.sh on $CHAIN"
|
||||
dialog --title 'FAIL' --msgbox "${l1}\n${l2}\n${l3}" 7 65
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo "# CL on $CHAIN Setting unchanged."
|
||||
fi
|
||||
|
||||
# RTL process choice
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "r")
|
||||
if [ ${check} -eq 1 ]; then choice="on"; fi
|
||||
if [ "${rtlWebinterface}" != "${choice}" ]; then
|
||||
echo "# RTL for LND $CHAIN Setting changed .."
|
||||
anychange=1
|
||||
/home/admin/config.scripts/bonus.rtl.sh ${choice} lnd $CHAIN
|
||||
errorOnInstall=$?
|
||||
if [ "${choice}" = "on" ]; then
|
||||
if [ ${errorOnInstall} -eq 0 ]; then
|
||||
sudo systemctl start RTL
|
||||
echo "# waiting 10 secs .."
|
||||
sleep 10
|
||||
/home/admin/config.scripts/bonus.rtl.sh menu lnd $CHAIN
|
||||
else
|
||||
l1="# FAIL on RTL for LND $CHAIN install #"
|
||||
l2="# Try manual install on terminal after reboot with:"
|
||||
l3="/home/admin/config.scripts/bonus.rtl.sh on lnd $CHAIN"
|
||||
dialog --title 'FAIL' --msgbox "${l1}\n${l2}\n${l3}" 7 65
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo "# RTL for LND $CHAIN Setting unchanged."
|
||||
fi
|
||||
|
||||
# cRTL process choice
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "t")
|
||||
if [ ${check} -eq 1 ]; then choice="on"; fi
|
||||
if [ "${crtlWebinterface}" != "${choice}" ]; then
|
||||
echo "RTL for CL $CHAIN Setting changed .."
|
||||
anychange=1
|
||||
/home/admin/config.scripts/bonus.rtl.sh ${choice} cl $CHAIN
|
||||
errorOnInstall=$?
|
||||
if [ "${choice}" = "on" ]; then
|
||||
if [ ${errorOnInstall} -eq 0 ]; then
|
||||
sudo systemctl start cRTL
|
||||
echo "waiting 10 secs .."
|
||||
sleep 10
|
||||
/home/admin/config.scripts/bonus.rtl.sh menu cl $CHAIN
|
||||
else
|
||||
l1="# FAIL on RTL for CL $CHAIN install #"
|
||||
l2="Try manual install on terminal after reboot with:"
|
||||
l3="/home/admin/config.scripts/bonus.rtl.sh on cl $CHAIN"
|
||||
dialog --title 'FAIL' --msgbox "${l1}\n${l2}\n${l3}" 7 65
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo "RTL for CL $CHAIN Setting unchanged."
|
||||
fi
|
||||
|
||||
if [ ${anychange} -eq 0 ]; then
|
||||
dialog --msgbox "NOTHING CHANGED!\nUse Spacebar to check/uncheck services." 8 58
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ ${needsReboot} -eq 1 ]; then
|
||||
sleep 2
|
||||
dialog --pause "OK. System will reboot to activate changes." 8 58 8
|
||||
clear
|
||||
echo "rebooting .. (please wait)"
|
||||
# stop bitcoind
|
||||
sudo -u bitcoin ${network}-cli stop
|
||||
sleep 4
|
||||
sudo /home/admin/config.scripts/blitz.shutdown.sh reboot
|
||||
fi
|
155
home.admin/00parallelTestnetServices.sh
Normal file
@ -0,0 +1,155 @@
|
||||
#!/bin/bash
|
||||
|
||||
# get raspiblitz config
|
||||
echo "get raspiblitz config"
|
||||
source /home/admin/raspiblitz.info
|
||||
source /mnt/hdd/raspiblitz.conf
|
||||
|
||||
CHAIN=testnet
|
||||
|
||||
# for testnet
|
||||
echo "services default values"
|
||||
if [ ${#trtlWebinterface} -eq 0 ]; then trtlWebinterface="off"; fi
|
||||
if [ ${#tlnd} -eq 0 ]; then tlnd="off"; fi
|
||||
if [ ${#tcrtlWebinterface} -eq 0 ]; then tcrtlWebinterface="off"; fi
|
||||
if [ ${#tcl} -eq 0 ]; then tcl="off"; fi
|
||||
|
||||
# show select dialog
|
||||
echo "run dialog ..."
|
||||
|
||||
OPTIONS=()
|
||||
OPTIONS+=(l "LND on $CHAIN" ${tlnd})
|
||||
OPTIONS+=(r "RTL for LND $CHAIN" ${trtlWebinterface})
|
||||
OPTIONS+=(c "Core Lightning on $CHAIN" ${tcl})
|
||||
OPTIONS+=(t "RTL for CL on $CHAIN" ${tcrtlWebinterface})
|
||||
|
||||
CHOICES=$(dialog --title ' Additional Services ' \
|
||||
--checklist ' use spacebar to activate/de-activate ' \
|
||||
12 45 5 "${OPTIONS[@]}" 2>&1 >/dev/tty)
|
||||
|
||||
dialogcancel=$?
|
||||
echo "done dialog"
|
||||
clear
|
||||
|
||||
# check if user canceled dialog
|
||||
echo "dialogcancel(${dialogcancel})"
|
||||
if [ ${dialogcancel} -eq 1 ]; then
|
||||
echo "user canceled"
|
||||
exit 0
|
||||
elif [ ${dialogcancel} -eq 255 ]; then
|
||||
echo "ESC pressed"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
needsReboot=0
|
||||
anychange=0
|
||||
|
||||
# tlnd process choice
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "l")
|
||||
if [ ${check} -eq 1 ]; then choice="on"; fi
|
||||
if [ "${tlnd}" != "${choice}" ]; then
|
||||
echo "# LND on $CHAIN Setting changed .."
|
||||
anychange=1
|
||||
/home/admin/config.scripts/lnd.install.sh ${choice} $CHAIN
|
||||
errorOnInstall=$?
|
||||
if [ "${choice}" = "on" ]; then
|
||||
if [ ${errorOnInstall} -eq 0 ]; then
|
||||
echo "# Successfully installed LND on $CHAIN"
|
||||
else
|
||||
l1="# FAIL on LND on $CHAIN install #"
|
||||
l2="# Try manual install on terminal after reboot with:"
|
||||
l3="/home/admin/config.scripts/lnd.install.sh on $CHAIN"
|
||||
dialog --title 'FAIL' --msgbox "${l1}\n${l2}\n${l3}" 7 65
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo "# LND on $CHAIN Setting unchanged."
|
||||
fi
|
||||
|
||||
# tcl process choice
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "c")
|
||||
if [ ${check} -eq 1 ]; then choice="on"; fi
|
||||
if [ "${tcl}" != "${choice}" ]; then
|
||||
echo "# CL on $CHAIN Setting changed .."
|
||||
anychange=1
|
||||
/home/admin/config.scripts/cl.install.sh ${choice} $CHAIN
|
||||
errorOnInstall=$?
|
||||
if [ "${choice}" = "on" ]; then
|
||||
if [ ${errorOnInstall} -eq 0 ]; then
|
||||
echo "# Successfully installed CL on $CHAIN"
|
||||
else
|
||||
l1="# FAIL on CL on $CHAIN install #"
|
||||
l2="# Try manual install on terminal after reboot with:"
|
||||
l3="/home/admin/config.scripts/cl.install.sh on $CHAIN"
|
||||
dialog --title 'FAIL' --msgbox "${l1}\n${l2}\n${l3}" 7 65
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo "# CL on $CHAIN Setting unchanged."
|
||||
fi
|
||||
|
||||
# tRTL process choice
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "r")
|
||||
if [ ${check} -eq 1 ]; then choice="on"; fi
|
||||
if [ "${trtlWebinterface}" != "${choice}" ]; then
|
||||
echo "# RTL for LND $CHAIN Setting changed .."
|
||||
anychange=1
|
||||
/home/admin/config.scripts/bonus.rtl.sh ${choice} lnd $CHAIN
|
||||
errorOnInstall=$?
|
||||
if [ "${choice}" = "on" ]; then
|
||||
if [ ${errorOnInstall} -eq 0 ]; then
|
||||
sudo systemctl start tRTL
|
||||
echo "# waiting 10 secs .."
|
||||
sleep 10
|
||||
/home/admin/config.scripts/bonus.rtl.sh menu lnd $CHAIN
|
||||
else
|
||||
l1="# FAIL on RTL for LND $CHAIN install #"
|
||||
l2="# Try manual install on terminal after reboot with:"
|
||||
l3="/home/admin/config.scripts/bonus.rtl.sh on lnd $CHAIN"
|
||||
dialog --title 'FAIL' --msgbox "${l1}\n${l2}\n${l3}" 7 65
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo "# RTL for LND $CHAIN Setting unchanged."
|
||||
fi
|
||||
|
||||
# ctRTL process choice
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "t")
|
||||
if [ ${check} -eq 1 ]; then choice="on"; fi
|
||||
if [ "${tcrtlWebinterface}" != "${choice}" ]; then
|
||||
echo "RTL for CL $CHAIN Setting changed .."
|
||||
anychange=1
|
||||
/home/admin/config.scripts/bonus.rtl.sh ${choice} cl $CHAIN
|
||||
errorOnInstall=$?
|
||||
if [ "${choice}" = "on" ]; then
|
||||
if [ ${errorOnInstall} -eq 0 ]; then
|
||||
sudo systemctl start tcRTL
|
||||
echo "waiting 10 secs .."
|
||||
sleep 10
|
||||
/home/admin/config.scripts/bonus.rtl.sh menu cl $CHAIN
|
||||
else
|
||||
l1="# FAIL on RTL for CL $CHAIN install #"
|
||||
l2="Try manual install on terminal after reboot with:"
|
||||
l3="/home/admin/config.scripts/bonus.rtl.sh on cl $CHAIN"
|
||||
dialog --title 'FAIL' --msgbox "${l1}\n${l2}\n${l3}" 7 65
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo "RTL for CL $CHAIN Setting unchanged."
|
||||
fi
|
||||
|
||||
if [ ${anychange} -eq 0 ]; then
|
||||
dialog --msgbox "NOTHING CHANGED!\nUse Spacebar to check/uncheck services." 8 58
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ ${needsReboot} -eq 1 ]; then
|
||||
sleep 2
|
||||
dialog --pause "OK. System will reboot to activate changes." 8 58 8
|
||||
clear
|
||||
echo "rebooting .. (please wait)"
|
||||
# stop bitcoind
|
||||
sudo -u bitcoin ${network}-cli stop
|
||||
sleep 4
|
||||
sudo /home/admin/config.scripts/blitz.shutdown.sh reboot
|
||||
fi
|
@ -1,112 +1,34 @@
|
||||
#!/bin/bash
|
||||
echo "For debug logs CTRL+C and: tail -n1000 -f raspiblitz.log"
|
||||
echo "or call the command 'debug' to see bigger report."
|
||||
echo "Starting the main menu ..."
|
||||
|
||||
#######################################
|
||||
# SSH USER INTERFACE
|
||||
# gets called when user logins per SSH
|
||||
# or calls 'raspiblitz' on the terminal
|
||||
#######################################
|
||||
echo "Starting SSH user interface ... (please wait)"
|
||||
|
||||
# CONFIGFILE - configuration of RaspiBlitz
|
||||
configFile="/mnt/hdd/raspiblitz.conf"
|
||||
source /mnt/hdd/raspiblitz.conf 2>/dev/null
|
||||
|
||||
# INFOFILE - state data from bootstrap
|
||||
infoFile="/home/admin/raspiblitz.info"
|
||||
source ${infoFile}
|
||||
|
||||
# use blitz.datadrive.sh to analyse HDD situation
|
||||
source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status)
|
||||
if [ "${error}" != "" ]; then
|
||||
echo "# FAIL blitz.datadrive.sh status --> ${error}"
|
||||
echo "# Please report issue to the raspiblitz github."
|
||||
# check that basic system phase/state information is available
|
||||
if [ "${setupPhase}" == "" ] || [ "${state}" == "" ]; then
|
||||
echo "setupPhase(${setupPhase}) state(${state})"
|
||||
echo "FAIL: ${infoFile} does not exist or missing state."
|
||||
echo "Check logs & bootstrap.service for errors and report to devs."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# check if HDD is connected
|
||||
if [ "${isMounted}" == "0" ] && [ ${#hddCandidate} -eq 0 ]; then
|
||||
echo "***********************************************************"
|
||||
echo "WARNING: NO HDD FOUND -> Shutdown, connect HDD and restart."
|
||||
echo "***********************************************************"
|
||||
vagrant=$(df | grep -c "/vagrant")
|
||||
if [ ${vagrant} -gt 0 ]; then
|
||||
echo "To connect a HDD data disk to your VagrantVM:"
|
||||
echo "- shutdown VM with command: off"
|
||||
echo "- open your VirtualBox GUI and select RaspiBlitzVM"
|
||||
echo "- change the 'mass storage' settings"
|
||||
echo "- add a second 'Primary Slave' drive to the already existing controller"
|
||||
echo "- close VirtualBox GUI and run: vagrant up & vagrant ssh"
|
||||
echo "***********************************************************"
|
||||
echo "You can either create a new dynamic VDI with around 900GB or download"
|
||||
echo "a VDI with a presynced blockchain to speed up setup. If you dont have 900GB"
|
||||
echo "space on your laptop you can store the VDI file on an external drive."
|
||||
echo "***********************************************************"
|
||||
fi
|
||||
exit
|
||||
fi
|
||||
|
||||
# check if HDD is from another fullnode OS and offer migration
|
||||
if [ "${hddGotMigrationData}" != "" ] && [ "${hddGotMigrationData}" != "none" ]; then
|
||||
nodenameUpperCase=$(echo "${hddGotMigrationData}" | tr "[a-z]" "[A-Z]")
|
||||
whiptail --title " ${nodenameUpperCase} --> RASPIBLITZ " --yes-button "Start Migration" --no-button "Ignore" --yesno "RaspiBlitz found data from ${nodenameUpperCase}
|
||||
|
||||
You can migrate your blockchain & LND data (funds & channels) over to RaspiBlitz.
|
||||
|
||||
Please make sure to have your ${nodenameUpperCase} seed words & static channel backup file (just in case). Also any data of additional apps you had installed on ${nodenameUpperCase} might get lost.
|
||||
|
||||
Do you want to start migration to RaspiBlitz now?
|
||||
" 16 58
|
||||
if [ $? -eq 0 ]; then
|
||||
err=""
|
||||
echo "**************************************************"
|
||||
echo "MIGRATION FROM ${nodenameUpperCase} TO RASPIBLITZ"
|
||||
echo "**************************************************"
|
||||
echo "- started ..."
|
||||
source <(sudo /home/admin/config.scripts/blitz.migration.sh migration-${hddGotMigrationData})
|
||||
if [ "${err}" != "" ]; then
|
||||
echo "MIGRATION FAILED: ${err}"
|
||||
echo "Format data disk on laptop & recover funds with fresh sd card using seed words + static channel backup."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# if free space is lower than 100GB (100000000) delete backup files
|
||||
if [ "${hddDataFreeKB}" != "" ] && [ ${hddDataFreeKB} -lt 407051412 ]; then
|
||||
echo "- free space of data disk is low ... deleting 'backup_migration'"
|
||||
sudo rm -R /mnt/hdd/backup_migration
|
||||
else
|
||||
echo "- old data of ${nodenameUpperCase} can be found in '/mnt/hdd/backup_migration'"
|
||||
fi
|
||||
sleep 3
|
||||
|
||||
# kick into reboot
|
||||
echo "******************************************************"
|
||||
echo "OK MIGRATION --> will now reboot and update/recover"
|
||||
echo "******************************************************"
|
||||
sudo shutdown -h -r now
|
||||
sleep 100
|
||||
exit 0
|
||||
else
|
||||
echo "******************************************************"
|
||||
echo "MIGRATION SKIPPED ... starting fresh RaspiBlitz Setup"
|
||||
echo "******************************************************"
|
||||
sleep 6
|
||||
fi
|
||||
fi
|
||||
|
||||
# check data from _bootstrap.sh that was running on device setup
|
||||
bootstrapInfoExists=$(ls $infoFile | grep -c '.info')
|
||||
if [ ${bootstrapInfoExists} -eq 0 ]; then
|
||||
echo "***********************************************************"
|
||||
echo "WARNING: NO raspiblitz.info FOUND -> bootstrap not running?"
|
||||
echo "***********************************************************"
|
||||
exit
|
||||
fi
|
||||
|
||||
# load the data from the info file (will get produced on every startup)
|
||||
source ${infoFile}
|
||||
|
||||
if [ "${state}" = "recovering" ]; then
|
||||
echo "***********************************************************"
|
||||
echo "WARNING: bootstrap still updating - close SSH, login later"
|
||||
echo "To monitor progress --> tail -n1000 -f raspiblitz.log"
|
||||
echo "***********************************************************"
|
||||
# special state: copysource
|
||||
if [ "${state}" = "stop" ]; then
|
||||
echo "OK ready for manual provision - run 'release' at the end."
|
||||
exit
|
||||
fi
|
||||
|
||||
# special state: copysource
|
||||
if [ "${state}" = "copysource" ]; then
|
||||
echo "***********************************************************"
|
||||
echo "INFO: You lost connection during copying the blockchain"
|
||||
@ -117,354 +39,329 @@ if [ "${state}" = "copysource" ]; then
|
||||
exit
|
||||
fi
|
||||
|
||||
# check if copy blockchain over LAN to this RaspiBlitz was running
|
||||
source <(/home/admin/config.scripts/blitz.copyblockchain.sh status)
|
||||
# special state: copytarget
|
||||
source <(/home/admin/config.scripts/blitz.copychain.sh status)
|
||||
if [ "${copyInProgress}" = "1" ]; then
|
||||
echo "Detected interrupted COPY blochain process ..."
|
||||
/home/admin/50copyHDD.sh
|
||||
/home/admin/config.scripts/blitz.copychain.sh target
|
||||
exit
|
||||
fi
|
||||
|
||||
# signal that after bootstrap recover user dialog is needed
|
||||
recoveredInfoExists=$(sudo ls /home/admin/recover.flag 2>/dev/null | grep -c '.flag')
|
||||
if [ ${recoveredInfoExists} -gt 0 ]; then
|
||||
echo "System recovered - needs final user settings"
|
||||
/home/admin/20recoverDialog.sh
|
||||
exit 1
|
||||
fi
|
||||
#####################################
|
||||
# SSH MENU LOOP
|
||||
# this loop runs until user exits or
|
||||
# an error drops user to terminal
|
||||
#####################################
|
||||
|
||||
# signal that a reindex was triggered
|
||||
if [ "${state}" = "reindex" ]; then
|
||||
echo "Re-Index in progress ... start monitoring:"
|
||||
/home/admin/config.scripts/network.reindex.sh
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# singal that copstation is running
|
||||
if [ "${state}" = "copystation" ]; then
|
||||
echo "Copy Station is Runnning ..."
|
||||
echo "reboot to return to normal"
|
||||
sudo /home/admin/XXcopyStation.sh
|
||||
exit
|
||||
fi
|
||||
|
||||
# if state=ready -> setup is done or started
|
||||
if [ "${state}" = "ready" ]; then
|
||||
configExists=$(ls ${configFile} | grep -c '.conf')
|
||||
if [ ${configExists} -eq 1 ]; then
|
||||
echo "loading config data"
|
||||
source ${configFile}
|
||||
else
|
||||
echo "setup still in progress - setupStep(${setupStep})"
|
||||
fi
|
||||
fi
|
||||
|
||||
## default menu settings
|
||||
# to fit the main menu without scrolling:
|
||||
HEIGHT=13
|
||||
WIDTH=64
|
||||
CHOICE_HEIGHT=6
|
||||
BACKTITLE="RaspiBlitz"
|
||||
TITLE=""
|
||||
MENU="Choose one of the following options:"
|
||||
OPTIONS=()
|
||||
|
||||
# check if RTL web interface is installed
|
||||
runningRTL=$(sudo ls /etc/systemd/system/RTL.service 2>/dev/null | grep -c 'RTL.service')
|
||||
|
||||
# function to use later
|
||||
waitUntilChainNetworkIsReady()
|
||||
{
|
||||
source ${configFile}
|
||||
echo "checking ${network}d - please wait .."
|
||||
echo "can take longer if device was off or first time"
|
||||
|
||||
# check for error on network
|
||||
sudo -u bitcoin ${network}-cli -datadir=/home/bitcoin/.${network} getblockchaininfo 1>/dev/null 2>error.tmp
|
||||
clienterror=`cat error.tmp`
|
||||
rm error.tmp
|
||||
|
||||
# check for missing blockchain data
|
||||
if [ "${network}" = "bitcoin" ]; then
|
||||
if [ "${chain}" = "main" ]; then
|
||||
minSize=210000000000
|
||||
else
|
||||
minSize=27000000000
|
||||
fi
|
||||
elif [ "${network}" = "litecoin" ]; then
|
||||
if [ "${chain}" = "main" ]; then
|
||||
minSize=20000000000
|
||||
else
|
||||
minSize=27000000000
|
||||
fi
|
||||
else
|
||||
minSize=210000000000000
|
||||
fi
|
||||
isSyncing=$(sudo ls -la /mnt/hdd/${network}/blocks/.selfsync 2>/dev/null | grep -c '.selfsync')
|
||||
blockchainsize=$(sudo du -shbc /mnt/hdd/${network}/ 2>/dev/null | head -n1 | awk '{print $1;}')
|
||||
if [ ${#blockchainsize} -gt 0 ]; then
|
||||
if [ ${blockchainsize} -lt ${minSize} ]; then
|
||||
if [ ${isSyncing} -eq 0 ]; then
|
||||
echo "blockchainsize(${blockchainsize})"
|
||||
echo "Missing Blockchain Data (<${minSize}) ..."
|
||||
clienterror="missing blockchain"
|
||||
sleep 3
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ ${#clienterror} -gt 0 ]; then
|
||||
#echo "clienterror(${clienterror})"
|
||||
|
||||
# analyse LOGS for possible reindex
|
||||
reindex=$(sudo cat /mnt/hdd/${network}/debug.log 2>/dev/null | grep -c 'Please restart with -reindex or -reindex-chainstate to recover')
|
||||
if [ ${reindex} -gt 0 ]; then
|
||||
# dismiss if its just a date thing
|
||||
futureBlock=$(sudo tail /mnt/hdd/${network}/debug.log 2>/dev/null | grep "Please restart with -reindex or -reindex-chainstate to recover" | grep -c "block database contains a block which appears to be from the future")
|
||||
if [ ${futureBlock} -gt 0 ]; then
|
||||
blockchainBroken=0
|
||||
echo "-> Ignore reindex - its just a future block"
|
||||
fi
|
||||
if [ ${isSyncing} -gt 0 ]; then
|
||||
reindex=0
|
||||
fi
|
||||
fi
|
||||
if [ ${reindex} -gt 0 ] || [ "${clienterror}" = "missing blockchain" ]; then
|
||||
|
||||
if [ ${reindex} -gt 0 ]; then
|
||||
echo "!! DETECTED NEED FOR RE-INDEX in debug.log ... starting repair options."
|
||||
sudo sed -i "s/^state=.*/state=repair/g" /home/admin/raspiblitz.info
|
||||
sleep 3
|
||||
fi
|
||||
|
||||
whiptail --title "Blockchain not Complete" --yes-button "DELETE+REPAIR" --no-button "Continue Sync" --yesno "Your blockchain data is not complete (yet).
|
||||
|
||||
You can try to sync the chain further but if your stuck
|
||||
this can be due to power problems or a failing HDD.
|
||||
For more info see: https://raspiblitz.org -> FAQ
|
||||
|
||||
If you choose to DELETE+REPAIR the old blockchain gets
|
||||
deleted but your Lightning funds & channel not be touched.
|
||||
|
||||
How do you want to continue?
|
||||
" 15 65
|
||||
if [ $? -eq 0 ]; then
|
||||
#delete+repair
|
||||
clear
|
||||
echo "***********************************************************"
|
||||
echo "DELETE+REPAIR blockchain ..."
|
||||
echo "***********************************************************"
|
||||
/home/admin/XXcleanHDD.sh -blockchain -force
|
||||
/home/admin/98repairBlockchain.sh
|
||||
/home/admin/00raspiblitz.sh
|
||||
exit
|
||||
else
|
||||
# ignore - just delete blockchain logfile
|
||||
clear
|
||||
echo "***********************************************************"
|
||||
echo "CONTINUE SYNC blockchain ..."
|
||||
echo "***********************************************************"
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
# let 80scanLND script to the info to use
|
||||
/home/admin/80scanLND.sh
|
||||
if [ $? -gt 0 ]; then
|
||||
echo "${network} error: ${clienterror}"
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
|
||||
while :
|
||||
do
|
||||
|
||||
locked=$(sudo -u bitcoin /usr/local/bin/lncli --chain=${network} --network=${chain}net getinfo 2>&1 | grep -c unlock)
|
||||
if [ ${locked} -gt 0 ]; then
|
||||
uptime=$(awk '{printf("%d\n",$1 + 0.5)}' /proc/uptime)
|
||||
if [ "${autoUnlock}" == "on" ] && [ ${uptime} -lt 300 ]; then
|
||||
# give autounlock 5 min after startup to react
|
||||
sleep 1
|
||||
else
|
||||
# check how many times LND was restarted
|
||||
source <(sudo /home/admin/config.scripts/blitz.statusscan.sh)
|
||||
if [ ${startcountLightning} -lt 4 ]; then
|
||||
/home/admin/config.scripts/lnd.unlock.sh
|
||||
echo "Starting up Wallet ... (10sec)"
|
||||
sleep 5
|
||||
sleep 5
|
||||
echo "please wait ... update to next screen can be slow"
|
||||
else
|
||||
/home/admin/80scanLND.sh lightning-error
|
||||
sudo rm /home/admin/systemd.lightning.log
|
||||
echo "(exit after too much restarts/unlocks - restart to try again)"
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
lndSynced=$(sudo -u bitcoin /usr/local/bin/lncli --chain=${network} --network=${chain}net getinfo 2>/dev/null | jq -r '.synced_to_chain' | grep -c true)
|
||||
if [ ${lndSynced} -eq 0 ]; then
|
||||
/home/admin/80scanLND.sh
|
||||
if [ $? -gt 0 ]; then
|
||||
exit 0
|
||||
fi
|
||||
else
|
||||
# everything is ready - return from loop
|
||||
return
|
||||
fi
|
||||
sleep 5
|
||||
done
|
||||
# listen to CTRL-c & CTRL-z to break loop
|
||||
quit() {
|
||||
echo "SIGINT or SIGTERM received, exiting..."
|
||||
kill -9 $$
|
||||
}
|
||||
trap quit INT
|
||||
trap quit TERM
|
||||
|
||||
if [ ${#setupStep} -eq 0 ]; then
|
||||
echo "WARN: no setup step found in raspiblitz.info"
|
||||
setupStep=0
|
||||
fi
|
||||
if [ ${setupStep} -eq 0 ]; then
|
||||
echo "# start ssh menu loop"
|
||||
# put some values on higher scan rate for 10 minute
|
||||
/home/admin/_cache.sh focus ln_default_ready 2 600 >/dev/null
|
||||
/home/admin/_cache.sh focus ln_default_locked 2 600 >/dev/null
|
||||
/home/admin/_cache.sh focus btc_default_synced 2 600 >/dev/null
|
||||
|
||||
echo "# starting ssh menu loop ... "
|
||||
exitMenuLoop=0
|
||||
doneIBD=0
|
||||
while [ ${exitMenuLoop} -eq 0 ]
|
||||
do
|
||||
|
||||
# start setup
|
||||
BACKTITLE="RaspiBlitz - Setup"
|
||||
TITLE="⚡ Welcome to your RaspiBlitz ⚡"
|
||||
MENU="\nChoose how you want to setup your RaspiBlitz: \n "
|
||||
OPTIONS+=(BITCOIN "Setup BITCOIN and Lightning (DEFAULT)" \
|
||||
LITECOIN "Setup LITECOIN and Lightning (EXPERIMENTAL)" \
|
||||
MIGRATION "Upload a Migration File from old RaspiBlitz" )
|
||||
HEIGHT=12
|
||||
#####################################
|
||||
# Access fresh system info on every loop
|
||||
|
||||
elif [ ${setupStep} -lt 100 ]; then
|
||||
# refresh system state information
|
||||
source <(/home/admin/_cache.sh get \
|
||||
systemscan_runtime \
|
||||
state \
|
||||
setupPhase \
|
||||
btc_default_synced \
|
||||
ln_default_sync_chain \
|
||||
ln_default_locked \
|
||||
ln_default_ready \
|
||||
ln_default_sync_initial_done \
|
||||
message \
|
||||
network \
|
||||
chain \
|
||||
lightning \
|
||||
internet_localip
|
||||
)
|
||||
|
||||
# continue setup
|
||||
BACKTITLE="${hostname} / ${network} / ${chain}"
|
||||
TITLE="⚡ Welcome to your RaspiBlitz ⚡"
|
||||
MENU="\nThe setup process is not finished yet: \n "
|
||||
OPTIONS+=(CONTINUE "Continue Setup of your RaspiBlitz")
|
||||
HEIGHT=10
|
||||
|
||||
else
|
||||
|
||||
# check if LND needs re-setup
|
||||
source <(sudo /home/admin/config.scripts/lnd.check.sh basic-setup)
|
||||
if [ "${wallet}" == "0" ] || [ "${macaroon}" == "0" ] || [ "${config}" == "0" ] || [ "${tls}" == "0" ]; then
|
||||
echo "WARN: LND needs re-setup"
|
||||
/home/admin/70initLND.sh
|
||||
exit 0
|
||||
# background.scan is not ready yet
|
||||
if [ "${systemscan_runtime}" == "" ]; then
|
||||
echo "# background.scan not ready yet ... (please wait)"
|
||||
sleep 4
|
||||
continue
|
||||
fi
|
||||
|
||||
# wait all is synced and ready
|
||||
waitUntilChainNetworkIsReady
|
||||
#####################################
|
||||
# ALWAYS: Handle System States
|
||||
#####################################
|
||||
|
||||
# check if there is a channel.backup to activate
|
||||
gotSCB=$(ls /home/admin/channel.backup 2>/dev/null | grep -c 'channel.backup')
|
||||
if [ ${gotSCB} -eq 1 ]; then
|
||||
############################
|
||||
# Wallet Unlock
|
||||
|
||||
echo "*** channel.backup Recovery ***"
|
||||
lncli --chain=${network} restorechanbackup --multi_file=/home/admin/channel.backup 2>/home/admin/.error.tmp
|
||||
error=`cat /home/admin/.error.tmp`
|
||||
rm /home/admin/.error.tmp 2>/dev/null
|
||||
if [ "${state}" == "ready" ] && [ "${setupPhase}" == "done" ] && [ "${ln_default_locked}" == "1" ]; then
|
||||
|
||||
if [ ${#error} -gt 0 ]; then
|
||||
|
||||
# output error message
|
||||
echo ""
|
||||
echo "!!! FAIL !!! SOMETHING WENT WRONG:"
|
||||
echo "${error}"
|
||||
|
||||
# check if its possible to give background info on the error
|
||||
notMachtingSeed=$(echo $error | grep -c 'unable to unpack chan backup')
|
||||
if [ ${notMachtingSeed} -gt 0 ]; then
|
||||
echo "--> ERROR BACKGROUND:"
|
||||
echo "The WORD SEED is not matching the channel.backup file."
|
||||
echo "Either there was an error in the word seed list or"
|
||||
echo "or the channel.backup file is from another RaspiBlitz."
|
||||
echo
|
||||
fi
|
||||
|
||||
# basic info on error
|
||||
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
|
||||
echo
|
||||
echo "You can try after full setup to restore channel.backup file again with:"
|
||||
echo "lncli --chain=${network} restorechanbackup --multi_file=/home/admin/channel.backup"
|
||||
echo
|
||||
echo "Press ENTER to continue for now ..."
|
||||
read key
|
||||
else
|
||||
mv /home/admin/channel.backup /home/admin/channel.backup.done
|
||||
dialog --title " OK channel.backup IMPORT " --msgbox "
|
||||
LND accepted the channel.backup file you uploaded.
|
||||
It will now take around a hour until you can see,
|
||||
if LND was able to recover funds from your channels.
|
||||
" 9 56
|
||||
# unlock lnd
|
||||
if [ "${lightning}" == "lnd" ]; then
|
||||
/home/admin/config.scripts/lnd.unlock.sh
|
||||
fi
|
||||
|
||||
|
||||
# unlock c-lightning
|
||||
if [ "${lightning}" == "cl" ]; then
|
||||
/home/admin/config.scripts/cl.hsmtool.sh unlock ${chain}net
|
||||
sleep 5
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
# check if DNS is working (if not it will trigger dialog)
|
||||
sudo /home/admin/config.scripts/internet.dns.sh test
|
||||
#####################################
|
||||
# SETUP MENU
|
||||
#####################################
|
||||
|
||||
#forward to main menu
|
||||
/home/admin/00mainMenu.sh
|
||||
exit 0
|
||||
# when is needed & bootstrap process signals that it waits for user dialog
|
||||
if [ "${setupPhase}" != "done" ] && [ "${state}" == "waitsetup" ]; then
|
||||
# push user to main menu
|
||||
echo "# controlSetupDialog.sh"
|
||||
/home/admin/setup.scripts/controlSetupDialog.sh
|
||||
# use the exit code from setup menu as signal if menu loop should exited
|
||||
# 0 = continue loop / everything else = break loop and exit to terminal
|
||||
exitMenuLoop=$?
|
||||
if [ "${exitMenuLoop}" != "0" ]; then break; fi
|
||||
fi
|
||||
|
||||
#####################################
|
||||
# SETUP DONE DIALOGS
|
||||
#####################################
|
||||
|
||||
# when is needed & bootstrap process signals that it waits for user dialog
|
||||
if [ "${setupPhase}" != "done" ] && [ "${state}" == "waitfinal" ]; then
|
||||
# push to final setup gui dialogs
|
||||
#echo "# controlFinalDialog.sh"
|
||||
/home/admin/setup.scripts/controlFinalDialog.sh
|
||||
# exit because controller will reboot at the end
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# exit loop/script in case if system shutting down
|
||||
if [ "${state}" == "reboot" ] || [ "${state}" == "shutdown" ]; then
|
||||
dialog --pause " Prepare Reboot ..." 8 58 4
|
||||
clear
|
||||
echo "***********************************************************"
|
||||
echo "RaspiBlitz going to ${state}"
|
||||
echo "***********************************************************"
|
||||
if [ "${state}" == "reboot" ]; then
|
||||
echo "SSH again into system with:"
|
||||
echo "ssh admin@${internet_localip}"
|
||||
echo "Use your password A"
|
||||
echo "***********************************************************"
|
||||
fi
|
||||
sleep 10
|
||||
exit 0
|
||||
fi
|
||||
|
||||
#####################################
|
||||
# MAKE SURE BLOCKCHAIN/LN IS SYNC
|
||||
#####################################
|
||||
if [ "${setupPhase}" == "done" ] && [ "${state}" == "ready" ]; then
|
||||
if [ "${lightning}" = "cl" ]; then
|
||||
if [ "${btc_default_synced}" != "1" ] || [ "${ln_default_ready}" == "0" ] || [ "${ln_default_sync_chain}" == "0" ]; then
|
||||
/home/admin/setup.scripts/eventBlockchainSync.sh ssh
|
||||
sleep 3
|
||||
continue
|
||||
fi
|
||||
elif [ "${lightning}" = "lnd" ]; then
|
||||
if [ "${btc_default_synced}" != "1" ] || [ "${ln_default_ready}" == "0" ] || [ "${ln_default_sync_chain}" == "0" ] || [ "${ln_default_sync_initial_done}" == "0" ]; then
|
||||
/home/admin/setup.scripts/eventBlockchainSync.sh ssh
|
||||
sleep 3
|
||||
continue
|
||||
fi
|
||||
else
|
||||
if [ "${btc_default_synced}" != "1" ]; then
|
||||
/home/admin/setup.scripts/eventBlockchainSync.sh ssh
|
||||
sleep 3
|
||||
continue
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
#####################################
|
||||
# SCB ACTIVATION
|
||||
#####################################
|
||||
|
||||
# when setup is done & state is ready .. check for SCB activation
|
||||
if [ "${setupPhase}" == "done" ] && [ "${state}" == "ready" ]; then
|
||||
|
||||
# check if there is a channel.backup to activate
|
||||
gotSCB=$(ls /home/admin/channel.backup 2>/dev/null | grep -c 'channel.backup')
|
||||
if [ "${gotSCB}" == "1" ]; then
|
||||
|
||||
clear
|
||||
echo
|
||||
echo "*** channel.backup Recovery ***"
|
||||
echo "Running ... (please wait)"
|
||||
lncli --chain=${network} restorechanbackup --multi_file=/home/admin/channel.backup 2>/home/admin/.error.tmp
|
||||
error=`cat /home/admin/.error.tmp`
|
||||
rm /home/admin/.error.tmp 2>/dev/null
|
||||
|
||||
if [ ${#error} -gt 0 ]; then
|
||||
|
||||
# output error message
|
||||
echo ""
|
||||
echo "# FAIL # SOMETHING WENT WRONG:"
|
||||
echo "${error}"
|
||||
|
||||
# check if its possible to give background info on the error
|
||||
notMachtingSeed=$(echo $error | grep -c 'unable to unpack chan backup')
|
||||
if [ ${notMachtingSeed} -gt 0 ]; then
|
||||
echo "--> ERROR BACKGROUND:"
|
||||
echo "The WORD SEED is not matching the channel.backup file."
|
||||
echo "Either there was an error in the word seed list or"
|
||||
echo "or the channel.backup file is from another RaspiBlitz."
|
||||
echo
|
||||
fi
|
||||
|
||||
# basic info on error
|
||||
echo "#################"
|
||||
echo "To try upload of channel.backup again:"
|
||||
echo "MAINMENU > REPAIR > REPAIR-LND > RETRYSCB"
|
||||
echo
|
||||
echo "Press ENTER to continue for now ..."
|
||||
rm /home/admin/channel.backup
|
||||
read key
|
||||
else
|
||||
rm /home/admin/channel.backup
|
||||
dialog --title " OK Static-Channel-Backup IMPORT " --msgbox "
|
||||
LND accepted the channel.backup file you uploaded.
|
||||
It can now take up to an hour until you can see,
|
||||
if LND was able to recover funds from your channels.
|
||||
|
||||
If you dont see any pending on-chain incoming funds
|
||||
within the next hour or you still missing funds, you
|
||||
can always retry the upload again under:
|
||||
MAINMENU > REPAIR > REPAIR-LND > RETRYSCB
|
||||
" 14 58
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
#####################################
|
||||
# MAIN MENU or BLOCKCHAIN SYNC
|
||||
#####################################
|
||||
|
||||
# when setup is done & state is ready .. jump to main menu
|
||||
if [ "${setupPhase}" == "done" ] && [ "${state}" == "ready" ]; then
|
||||
# MAIN MENU
|
||||
# remove higher scan rate on values
|
||||
/home/admin/_cache.sh focus ln_default_locked -1
|
||||
/home/admin/_cache.sh focus btc_default_synced -1
|
||||
echo "# 00mainMenu.sh"
|
||||
/home/admin/00mainMenu.sh
|
||||
# use the exit code from main menu as signal if menu loop should exited
|
||||
# 0 = continue loop / everything else = break loop and exit to terminal
|
||||
exitMenuLoop=$?
|
||||
if [ "${exitMenuLoop}" != "0" ]; then break; fi
|
||||
fi
|
||||
|
||||
#####################################
|
||||
# DURING SETUP: Handle System States
|
||||
#####################################
|
||||
|
||||
if [ "${setupPhase}" != "done" ]; then
|
||||
|
||||
#echo "# DURING SETUP: Handle System State (${state})"
|
||||
|
||||
# for all critical errors (admin info & exit)
|
||||
if [ "${state}" == "error" ] || [ "${state}" == "errorHDD" ]; then
|
||||
clear
|
||||
echo "###########################################################"
|
||||
echo "# /home/admin/raspiblitz.log"
|
||||
cat /home/admin/raspiblitz.log
|
||||
if [ "${state}" == "errorHDD" ]; then
|
||||
# print some debug detail info on HDD/SSD error
|
||||
echo "###########################################################"
|
||||
echo "# blitz.datadrive.sh status"
|
||||
sudo /home/admin/config.scripts/blitz.datadrive.sh status
|
||||
fi
|
||||
if [ "${message}" == "_provision.setup.sh fail" ]; then
|
||||
echo "# /home/admin/raspiblitz.provision-setup.log"
|
||||
cat /home/admin/raspiblitz.provision-setup.log
|
||||
fi
|
||||
echo "***********************************************************"
|
||||
echo "ERROR - please report to development team"
|
||||
echo "***********************************************************"
|
||||
echo "state(${state}) message(${message})"
|
||||
echo "https://github.com/rootzoll/raspiblitz#support"
|
||||
echo "command to shutdown --> off"
|
||||
exit 1
|
||||
elif [ "${state}" == "" ]; then
|
||||
echo "state(${state}) message(${message})"
|
||||
else
|
||||
# every other state just push as event to SSH frontend
|
||||
/home/admin/setup.scripts/eventInfoWait.sh "${state}" "${message}"
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
done
|
||||
|
||||
echo "# menu loop received exit code ${exitMenuLoop} --> exit to terminal"
|
||||
echo
|
||||
echo " -==@@@====@===-- --===@====@@@==- "
|
||||
echo " -@@=====-----=-===@@=====@@=====-----=====@@- -==@- "
|
||||
echo " -@@------==---------@@@@@=--------==------@@- --=@@@@= "
|
||||
echo " @@=------======-----@@@-----======------=@@=@@===@@= "
|
||||
echo " =@@=---------=======@@@=======-----===@@@==- =@@- "
|
||||
echo " -=@@==@@=----------=@@@@@@@@@=----==@@@==-- -=@@- "
|
||||
echo " -@@@=----=@@===--====@@@@@@@@@@@@@@@@=-- -=@@@@= "
|
||||
echo " =@@=--------@@@@@@@@@@@@@@@@@@@@@=-- -@@=---=@@- "
|
||||
echo " -@@=-------=@@@=====@@@@@@@@@@=-- =@@=-------@@@ "
|
||||
echo " =@@=-------=@@====@@@@@@@@==- -=@@@@=--------=@@- "
|
||||
echo " =@@---------@@==@@@@@@==- -=@@@=@@@---------=@@ "
|
||||
echo " -@@=--------=@@@@@@=- -@@@@@@@@@@=---------=@@ "
|
||||
echo " @@=-------@@@@@@@@@=- =@@@===@@@@=@@@@--------@@- "
|
||||
echo " -@@=------@@====@@@=@@@=- -=@@@======@@====@@@-------=@@ "
|
||||
echo " -@@------@@@====@@@====@@@=- =@@@======@@@=====@@=------=@@ "
|
||||
echo " -@@------=@@====@@@@@=====@@@=- -=@@@=@@@@@@===@@@=------=@@ "
|
||||
echo " -@@-------@@@=@@@@@@@@@@@@@@@=- -=@@@@@@@@=@@@=-------=@@ "
|
||||
echo " @@=-------=@@@@@@@@@@@@@@@= -=@@@=@@@@=--------@@= "
|
||||
echo " -@@--------=@@======@@@@- -=@@@@@@=--------=@@ "
|
||||
echo " =@@--------@@@===@@@=- --=@@@@@@=@@@--------=@@- "
|
||||
echo " =@@--------@@@@@@=- -==@@@@@=====@@@--------=@@- "
|
||||
echo " =@@=-------@@@= -==@@@@@@@=====@@@@=--------=@@- "
|
||||
echo " -@@=----=@@- -==@@@@@@@@@@@@@@@@@==---------=@@= "
|
||||
echo " =@@==@@- -==@@@@@=========@@@@@=-----------=@@@- "
|
||||
echo " -@@=- --=@@@==-=@@@@@@@@@@@@@=-------------=@@=- "
|
||||
echo " -@@= --=@@@==----------=======-------------==@@@= "
|
||||
echo " -@@=-==@==-=@@@===------------------------==@@@@= "
|
||||
echo " =@@@@==- -==@@@@@======----======@@@@@=-- "
|
||||
echo " =@@=-- --===@@@@@@@@@@@===-- "
|
||||
echo
|
||||
echo "***********************************"
|
||||
echo "* RaspiBlitz Commandline"
|
||||
echo "* Here be dragons .. have fun :)"
|
||||
echo "***********************************"
|
||||
if [ "${setupPhase}" == "done" ]; then
|
||||
echo "Bitcoin command line options: ${network}-cli help"
|
||||
if [ "${lightning}" == "lnd" ]; then
|
||||
echo "LND command line options: lncli -h"
|
||||
fi
|
||||
if [ "${lightning}" == "cl" ]; then
|
||||
echo "Core Lightning command line options: lightning-cli help"
|
||||
fi
|
||||
else
|
||||
echo "Your setup is not finished."
|
||||
echo "For setup logs: cat raspiblitz.log"
|
||||
echo "or call the command 'debug' to see bigger report."
|
||||
fi
|
||||
|
||||
CHOICE=$(dialog --clear \
|
||||
--backtitle "$BACKTITLE" \
|
||||
--title "$TITLE" \
|
||||
--menu "$MENU" \
|
||||
$HEIGHT $WIDTH $CHOICE_HEIGHT \
|
||||
"${OPTIONS[@]}" \
|
||||
2>&1 >/dev/tty)
|
||||
|
||||
clear
|
||||
case $CHOICE in
|
||||
CLOSE)
|
||||
exit 1;
|
||||
;;
|
||||
BITCOIN)
|
||||
# set network info
|
||||
sed -i "s/^network=.*/network=bitcoin/g" ${infoFile}
|
||||
sed -i "s/^chain=.*/chain=main/g" ${infoFile}
|
||||
###### OPTIMIZE IF RAM >1GB
|
||||
kbSizeRAM=$(cat /proc/meminfo | grep "MemTotal" | sed 's/[^0-9]*//g')
|
||||
if [ ${kbSizeRAM} -gt 1500000 ]; then
|
||||
echo "Detected RAM >1GB --> optimizing ${network}.conf"
|
||||
sudo sed -i "s/^dbcache=.*/dbcache=512/g" /home/admin/assets/bitcoin.conf
|
||||
sudo sed -i "s/^maxmempool=.*/maxmempool=300/g" /home/admin/assets/bitcoin.conf
|
||||
fi
|
||||
/home/admin/10setupBlitz.sh
|
||||
exit 1;
|
||||
;;
|
||||
LITECOIN)
|
||||
/home/admin/config.scripts/blitz.litecoin.sh on
|
||||
/home/admin/10setupBlitz.sh
|
||||
exit 1;
|
||||
;;
|
||||
MANUAL)
|
||||
echo "************************************************************************************"
|
||||
echo "PLEASE go to RaspiBlitz FAQ:"
|
||||
echo "https://github.com/rootzoll/raspiblitz"
|
||||
echo "And check: How can I recover my coins from a failing RaspiBlitz?"
|
||||
echo "************************************************************************************"
|
||||
exit 0
|
||||
;;
|
||||
MIGRATION)
|
||||
sudo /home/admin/config.scripts/blitz.migration.sh "import-gui"
|
||||
# on error clean & repeat
|
||||
if [ "$?" = "1" ]; then
|
||||
echo
|
||||
echo "# clean and unmount for next try"
|
||||
sudo rm -f ${defaultZipPath}/raspiblitz-*.tar.gz 2>/dev/null
|
||||
sudo umount /mnt/hdd 2>/dev/null
|
||||
sudo umount /mnt/storage 2>/dev/null
|
||||
sudo umount /mnt/temp 2>/dev/null
|
||||
sleep 2
|
||||
/home/admin/00raspiblitz.sh
|
||||
fi
|
||||
exit 0
|
||||
;;
|
||||
CONTINUE)
|
||||
/home/admin/10setupBlitz.sh
|
||||
exit 1;
|
||||
;;
|
||||
esac
|
||||
echo "Blitz command line options: blitzhelp"
|
||||
echo "Back to menus use command: raspiblitz"
|
||||
echo
|
||||
exit 0
|
||||
|
@ -6,34 +6,50 @@ source /home/admin/raspiblitz.info
|
||||
source /mnt/hdd/raspiblitz.conf
|
||||
|
||||
echo "services default values"
|
||||
if [ ${#autoPilot} -eq 0 ]; then autoPilot="off"; fi
|
||||
if [ ${#autoUnlock} -eq 0 ]; then autoUnlock="off"; fi
|
||||
if [ ${#runBehindTor} -eq 0 ]; then runBehindTor="off"; fi
|
||||
if [ ${#chain} -eq 0 ]; then chain="main"; fi
|
||||
if [ ${#autoNatDiscovery} -eq 0 ]; then autoNatDiscovery="off"; fi
|
||||
if [ ${#networkUPnP} -eq 0 ]; then networkUPnP="off"; fi
|
||||
if [ ${#touchscreen} -eq 0 ]; then touchscreen=0; fi
|
||||
if [ ${#lcdrotate} -eq 0 ]; then lcdrotate=0; fi
|
||||
if [ ${#zerotier} -eq 0 ]; then zerotier="off"; fi
|
||||
if [ ${#circuitbreaker} -eq 0 ]; then circuitbreaker="off"; fi
|
||||
if [ ${#clboss} -eq 0 ]; then clboss="off"; fi
|
||||
if [ ${#clEncryptedHSM} -eq 0 ]; then clEncryptedHSM="off"; fi
|
||||
if [ ${#clAutoUnlock} -eq 0 ]; then clAutoUnlock="off"; fi
|
||||
if [ ${#clWatchtowerClient} -eq 0 ]; then clWatchtowerClient="off"; fi
|
||||
if [ ${#blitzapi} -eq 0 ]; then blitzapi="off"; fi
|
||||
|
||||
echo "map dropboxbackup to on/off"
|
||||
DropboxBackup="off"
|
||||
if [ ${#dropboxBackupTarget} -gt 0 ]; then DropboxBackup="on"; fi
|
||||
echo "# map LND to on/off"
|
||||
lndNode="off"
|
||||
if [ "${lightning}" == "lnd" ] || [ "${lnd}" == "on" ]; then
|
||||
lndNode="on"
|
||||
fi
|
||||
|
||||
echo "map localbackup to on/off"
|
||||
echo "# map CL to on/off"
|
||||
clNode="off"
|
||||
if [ "${lightning}" == "cl" ] || [ "${cl}" == "on" ]; then
|
||||
clNode="on"
|
||||
fi
|
||||
|
||||
echo "# map nextcloudbackup to on/off"
|
||||
NextcloudBackup="off"
|
||||
if [ $nextcloudBackupServer ] && [ $nextcloudBackupUser ] && [ $nextcloudBackupPassword ]; then NextcloudBackup="on"; fi
|
||||
|
||||
echo "# map localbackup to on/off"
|
||||
LocalBackup="off"
|
||||
if [ ${#localBackupDeviceUUID} -gt 0 ] && [ "${localBackupDeviceUUID}" != "off" ]; then LocalBackup="on"; fi
|
||||
|
||||
echo "map zerotier to on/off"
|
||||
echo "# map zerotier to on/off"
|
||||
zerotierSwitch="off"
|
||||
if [ "${zerotier}" != "off" ]; then zerotierSwitch="on"; fi
|
||||
|
||||
echo "map chain to on/off"
|
||||
chainValue="off"
|
||||
if [ "${chain}" = "test" ]; then chainValue="on"; fi
|
||||
echo "# map parallel testnets to on/off"
|
||||
parallelTestnets="off"
|
||||
if [ "${testnet}" == "on" ] || [ "${signet}" == "on" ]; then
|
||||
parallelTestnets="on"
|
||||
fi
|
||||
|
||||
echo "map domain to on/off"
|
||||
echo "# map domain to on/off"
|
||||
domainValue="off"
|
||||
dynDomainMenu='DynamicDNS'
|
||||
if [ ${#dynDomain} -gt 0 ]; then
|
||||
@ -41,181 +57,127 @@ if [ ${#dynDomain} -gt 0 ]; then
|
||||
dynDomainMenu="${dynDomain}"
|
||||
fi
|
||||
|
||||
echo "map lcdrotate to on/off"
|
||||
echo "# map lcdrotate to on/off"
|
||||
lcdrotateMenu='off'
|
||||
if [ ${lcdrotate} -gt 0 ]; then
|
||||
lcdrotateMenu='on'
|
||||
fi
|
||||
|
||||
echo "map touchscreen to on/off"
|
||||
echo "# map touchscreen to on/off"
|
||||
touchscreenMenu='off'
|
||||
if [ ${touchscreen} -gt 0 ]; then
|
||||
touchscreenMenu='on'
|
||||
fi
|
||||
|
||||
echo "check autopilot by lnd.conf"
|
||||
lndAutoPilotOn=$(sudo cat /mnt/hdd/lnd/lnd.conf | grep -c 'autopilot.active=1')
|
||||
if [ ${lndAutoPilotOn} -eq 1 ]; then
|
||||
autoPilot="on"
|
||||
else
|
||||
autoPilot="off"
|
||||
echo "# map clboss to on/off"
|
||||
clbossMenu='off'
|
||||
if [ "${clboss}" == "on" ]; then
|
||||
clbossMenu='on'
|
||||
fi
|
||||
|
||||
echo "map keysend to on/off"
|
||||
keysend="on"
|
||||
source <(sudo /home/admin/config.scripts/lnd.keysend.sh status)
|
||||
if [ ${keysendOn} -eq 0 ]; then
|
||||
keysend="off"
|
||||
echo "# map clEncryptedHSM to on/off"
|
||||
clEncryptedHSMMenu='off'
|
||||
if [ "${clEncryptedHSM}" == "on" ]; then
|
||||
clEncryptedHSMMenu='on'
|
||||
fi
|
||||
|
||||
echo "# map clAutoUnlock to on/off"
|
||||
clAutoUnlockMenu='off'
|
||||
if [ "${clAutoUnlock}" == "on" ]; then
|
||||
clAutoUnlockMenu='on'
|
||||
fi
|
||||
|
||||
echo "# map clWatchtowerClient to on/off"
|
||||
clWatchtowerClientMenu='off'
|
||||
if [ "${clWatchtowerClient}" == "on" ]; then
|
||||
clWatchtowerClientMenu='on'
|
||||
fi
|
||||
|
||||
# show select dialog
|
||||
echo "run dialog ..."
|
||||
|
||||
|
||||
# BASIC MENU INFO
|
||||
HEIGHT=19 # add 6 to CHOICE_HEIGHT + MENU lines
|
||||
WIDTH=45
|
||||
CHOICE_HEIGHT=11 # 1 line / OPTIONS
|
||||
OPTIONS=()
|
||||
|
||||
OPTIONS+=(t 'Run behind TOR' ${runBehindTor})
|
||||
OPTIONS+=(A 'Blitz API + WebUI' ${blitzapi})
|
||||
|
||||
# LCD options (only when running with LCD screen)
|
||||
if [ "${displayClass}" == "lcd" ]; then
|
||||
OPTIONS+=(s 'Touchscreen' ${touchscreenMenu})
|
||||
OPTIONS+=(r 'LCD Rotate' ${lcdrotateMenu})
|
||||
# OPTIONS+=(s 'Touchscreen (experimental)' ${touchscreenMenu})
|
||||
OPTIONS+=(r 'LCD Rotate' ${lcdrotateMenu})
|
||||
fi
|
||||
OPTIONS+=(a 'Channel Autopilot' ${autoPilot})
|
||||
OPTIONS+=(k 'Accept Keysend' ${keysend})
|
||||
OPTIONS+=(n 'Testnet' ${chainValue})
|
||||
OPTIONS+=(c 'Circuitbreaker (LND firewall)' ${circuitbreaker})
|
||||
OPTIONS+=(u 'LND Auto-Unlock' ${autoUnlock})
|
||||
OPTIONS+=(d 'StaticChannelBackup on DropBox' ${DropboxBackup})
|
||||
OPTIONS+=(e 'StaticChannelBackup on USB Drive' ${LocalBackup})
|
||||
|
||||
# Important basic options
|
||||
OPTIONS+=(t 'Run behind Tor' ${runBehindTor})
|
||||
OPTIONS+=(z 'ZeroTier' ${zerotierSwitch})
|
||||
|
||||
if [ ${#runBehindTor} -eq 0 ] || [ "${runBehindTor}" = "off" ]; then
|
||||
OPTIONS+=(y ${dynDomainMenu} ${domainValue})
|
||||
OPTIONS+=(b 'BTC UPnP (AutoNAT)' ${networkUPnP})
|
||||
OPTIONS+=(l 'LND UPnP (AutoNAT)' ${autoNatDiscovery})
|
||||
fi
|
||||
OPTIONS+=(b 'BTC UPnP (AutoNAT)' ${networkUPnP})
|
||||
fi
|
||||
OPTIONS+=(p 'Parallel Testnet/Signet' ${parallelTestnets})
|
||||
|
||||
CHOICES=$(dialog \
|
||||
--title ' Node Settings & Options ' \
|
||||
--checklist ' use spacebar to activate/de-activate ' \
|
||||
$HEIGHT $WIDTH $CHOICE_HEIGHT \
|
||||
"${OPTIONS[@]}" 2>&1 >/dev/tty)
|
||||
|
||||
# Lightning options (only LND and/or CLN)
|
||||
if [ "${lndNode}" == "on" ] || [ "${clNode}" == "on" ]; then
|
||||
OPTIONS+=(x 'SCB/Emergency-Backup on Nextcloud' ${NextcloudBackup})
|
||||
OPTIONS+=(e 'SCB/Emergency-Backup USB Drive' ${LocalBackup})
|
||||
fi
|
||||
|
||||
# LND & options (only when running LND)
|
||||
OPTIONS+=(m 'LND LIGHTNING LABS NODE' ${lndNode})
|
||||
if [ "${lndNode}" == "on" ]; then
|
||||
OPTIONS+=(c '-LND Circuitbreaker (firewall)' ${circuitbreaker})
|
||||
OPTIONS+=(u '-LND Auto-Unlock' ${autoUnlock})
|
||||
fi
|
||||
|
||||
# Core Lightning & options/PlugIns
|
||||
OPTIONS+=(n 'CL CORE LIGHTNING NODE' ${clNode})
|
||||
if [ "${clNode}" == "on" ]; then
|
||||
OPTIONS+=(o '-CL CLBOSS Automatic Node Manager' ${clbossMenu})
|
||||
OPTIONS+=(h '-CL Wallet Encryption' ${clEncryptedHSMMenu})
|
||||
OPTIONS+=(w '-CL Watchtower Client' ${clWatchtowerClientMenu})
|
||||
if [ "${clEncryptedHSM}" == "on" ]; then
|
||||
OPTIONS+=(q '-CL Auto-Unlock' ${clAutoUnlockMenu})
|
||||
fi
|
||||
fi
|
||||
|
||||
CHOICE_HEIGHT=$(("${#OPTIONS[@]}/2+1"))
|
||||
HEIGHT=$((CHOICE_HEIGHT+6))
|
||||
CHOICES=$(dialog --title ' Node Settings & Options ' --checklist ' use spacebar to activate/de-activate ' $HEIGHT 55 $CHOICE_HEIGHT "${OPTIONS[@]}" 2>&1 >/dev/tty)
|
||||
dialogcancel=$?
|
||||
echo "done dialog"
|
||||
clear
|
||||
|
||||
# check if user canceled dialog
|
||||
echo "dialogcancel(${dialogcancel})"
|
||||
echo "dialogcancel(${dialogcancel}) (${CHOICE_HEIGHT})"
|
||||
if [ ${dialogcancel} -eq 1 ]; then
|
||||
echo "user canceled"
|
||||
exit 1
|
||||
exit 0
|
||||
elif [ ${dialogcancel} -eq 255 ]; then
|
||||
echo "ESC pressed"
|
||||
exit 1
|
||||
exit 0
|
||||
fi
|
||||
|
||||
needsReboot=0
|
||||
anychange=0
|
||||
|
||||
# TESTNET process choice - KEEP FIRST IN ORDER
|
||||
choice="main"; check=$(echo "${CHOICES}" | grep -c "n")
|
||||
if [ ${check} -eq 1 ]; then choice="test"; fi
|
||||
if [ "${chain}" != "${choice}" ]; then
|
||||
if [ "${network}" = "litecoin" ] && [ "${choice}"="test" ]; then
|
||||
dialog --title 'FAIL' --msgbox 'Litecoin-Testnet not available.' 5 25
|
||||
elif [ "${BTCRPCexplorer}" = "on" ]; then
|
||||
dialog --title 'NOTICE' --msgbox 'Please turn off BTC-RPC-Explorer FIRST\nbefore changing testnet.' 6 45
|
||||
exit 1
|
||||
elif [ "${BTCPayServer}" = "on" ]; then
|
||||
dialog --title 'NOTICE' --msgbox 'Please turn off BTC-Pay-Server FIRST\nbefore changing testnet.' 6 45
|
||||
exit 1
|
||||
elif [ "${ElectRS}" = "on" ]; then
|
||||
dialog --title 'NOTICE' --msgbox 'Please turn off Electrum-Rust-Server FIRST\nbefore changing testnet.' 6 48
|
||||
exit 1
|
||||
elif [ "${loop}" = "on" ]; then
|
||||
dialog --title 'NOTICE' --msgbox 'Please turn off Loop-Service FIRST\nbefore changing testnet.' 6 48
|
||||
exit 1
|
||||
else
|
||||
echo "Testnet Setting changed .."
|
||||
anychange=1
|
||||
sudo /home/admin/config.scripts/network.chain.sh ${choice}net
|
||||
walletExists=$(sudo ls /mnt/hdd/lnd/data/chain/${network}/${choice}net/wallet.db 2>/dev/null | grep -c 'wallet.db')
|
||||
if [ ${walletExists} -eq 0 ]; then
|
||||
echo "Need to creating a new wallet ... wait 20secs"
|
||||
sudo systemctl start lnd
|
||||
sleep 20
|
||||
tryAgain=1
|
||||
while [ ${tryAgain} -eq 1 ]
|
||||
do
|
||||
echo "****************************************************************************"
|
||||
echo "Creating a new LND Wallet for ${network}/${choice}net"
|
||||
echo "****************************************************************************"
|
||||
echo "A) For 'Wallet Password' use your PASSWORD C --> !! minimum 8 characters !!"
|
||||
echo "B) Answer 'n' because you don't have a 'cipher seed mnemonic' (24 words) yet"
|
||||
echo "C) For 'passphrase' to encrypt your 'cipher seed' use PASSWORD D (optional)"
|
||||
echo "****************************************************************************"
|
||||
sudo -u bitcoin /usr/local/bin/lncli --chain=${network} --network=${chain}net create 2>error.out
|
||||
error=`sudo cat error.out`
|
||||
if [ ${#error} -eq 0 ]; then
|
||||
sleep 2
|
||||
# WIN
|
||||
tryAgain=0
|
||||
echo "!!! Make sure to write down the 24 words (cipher seed mnemonic) !!!"
|
||||
echo "If you are ready. Press ENTER."
|
||||
else
|
||||
# FAIL
|
||||
tryAgain=1
|
||||
echo "!!! FAIL ---> SOMETHING WENT WRONG !!!"
|
||||
echo "${error}"
|
||||
echo "Press ENTER to retry ... or CTRL-c to EXIT"
|
||||
fi
|
||||
read key
|
||||
done
|
||||
echo "Check for Macaroon .. (10sec)"
|
||||
sleep 10
|
||||
macaroonExists=$(sudo ls /home/bitcoin/.lnd/data/chain/${network}/${choice}net/admin.macaroon | grep -c 'admin.macaroon')
|
||||
if [ ${macaroonExists} -eq 0 ]; then
|
||||
echo "*** PLEASE UNLOCK your wallet with PASSWORD C to create macaroon"
|
||||
lncli unlock 2>/dev/null
|
||||
sleep 6
|
||||
fi
|
||||
macaroonExists=$(sudo ls /home/bitcoin/.lnd/data/chain/${network}/${choice}net/admin.macaroon | grep -c 'admin.macaroon')
|
||||
if [ ${macaroonExists} -eq 0 ]; then
|
||||
echo "FAIL --> Was not able to create macaroon"
|
||||
echo "Please report problem."
|
||||
exit 1
|
||||
fi
|
||||
echo "stopping lnd again"
|
||||
sleep 5
|
||||
sudo systemctl stop lnd
|
||||
fi
|
||||
|
||||
echo "Update Admin Macaroon"
|
||||
sudo rm -r /home/admin/.lnd/data/chain/${network}/${choice}net 2>/dev/null
|
||||
sudo mkdir /home/admin/.lnd/data/chain/${network}/${choice}net
|
||||
sudo cp /home/bitcoin/.lnd/data/chain/${network}/${choice}net/admin.macaroon /home/admin/.lnd/data/chain/${network}/${choice}net
|
||||
sudo chown -R admin:admin /home/admin/.lnd/
|
||||
|
||||
needsReboot=1
|
||||
# Blitz API + webUI process choice
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "A")
|
||||
if [ ${check} -eq 1 ]; then choice="on"; fi
|
||||
if [ "${blitzapi}" != "${choice}" ]; then
|
||||
echo "Blitz API + webUI settings changed .."
|
||||
anychange=1
|
||||
sudo /home/admin/config.scripts/blitz.web.api.sh ${choice} DEFAULT
|
||||
sudo /home/admin/config.scripts/blitz.web.ui.sh ${choice} DEFAULT
|
||||
errorOnInstall=$?
|
||||
if [ "${choice}" = "on" ]; then
|
||||
whiptail --title " Installed Blitz API + webUI" --msgbox "\
|
||||
The Blitz API + webUI was installed.\n
|
||||
See the status screen for more info.\n
|
||||
" 10 35
|
||||
fi
|
||||
else
|
||||
echo "Testnet Setting unchanged."
|
||||
fi
|
||||
|
||||
# AUTOPILOT process choice
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "a")
|
||||
if [ ${check} -eq 1 ]; then choice="on"; fi
|
||||
if [ "${autoPilot}" != "${choice}" ]; then
|
||||
echo "Autopilot Setting changed .."
|
||||
anychange=1
|
||||
sudo /home/admin/config.scripts/lnd.autopilot.sh ${choice}
|
||||
needsReboot=1
|
||||
else
|
||||
echo "Autopilot Setting unchanged."
|
||||
echo "Blitz API + webUI Setting unchanged."
|
||||
fi
|
||||
|
||||
# Dynamic Domain
|
||||
@ -251,61 +213,38 @@ else
|
||||
echo "BTC UPnP Setting unchanged."
|
||||
fi
|
||||
|
||||
# AutoNAT
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "l")
|
||||
if [ ${check} -eq 1 ]; then choice="on"; fi
|
||||
if [ "${autoNatDiscovery}" != "${choice}" ]; then
|
||||
echo "AUTO NAT Setting changed .."
|
||||
anychange=1
|
||||
if [ "${choice}" = "on" ]; then
|
||||
echo "Starting autoNAT ..."
|
||||
/home/admin/config.scripts/lnd.autonat.sh on
|
||||
autoNatDiscovery="on"
|
||||
needsReboot=1
|
||||
else
|
||||
echo "Stopping autoNAT ..."
|
||||
/home/admin/config.scripts/lnd.autonat.sh off
|
||||
autoNatDiscovery="off"
|
||||
needsReboot=1
|
||||
fi
|
||||
else
|
||||
echo "LND AUTONAT Setting unchanged."
|
||||
fi
|
||||
|
||||
# TOR process choice
|
||||
# Tor process choice
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "t")
|
||||
if [ ${check} -eq 1 ]; then choice="on"; fi
|
||||
if [ "${runBehindTor}" != "${choice}" ]; then
|
||||
echo "TOR Setting changed .."
|
||||
echo "Tor Setting changed .."
|
||||
|
||||
# special actions if TOR is turned on
|
||||
# special actions if Tor is turned on
|
||||
if [ "${choice}" = "on" ]; then
|
||||
|
||||
# inform user about privacy risk
|
||||
whiptail --title " PRIVACY NOTICE " --msgbox "
|
||||
RaspiBlitz will now install/activate TOR & after reboot run behind it.
|
||||
RaspiBlitz will now install/activate Tor & after reboot run behind it.
|
||||
|
||||
Please keep in mind that thru your LND node id & your previous IP history with your internet provider your lightning node could still be linked to your personal id even when running behind TOR. To unlink you from that IP history its recommended that after the switch/reboot to TOR you also use the REPAIR > RESET-LND option to create a fresh LND wallet. That might involve closing all channels & move your funds out of RaspiBlitz before that RESET-LND.
|
||||
Please keep in mind that thru your LND node id & your previous IP history with your internet provider your lightning node could still be linked to your personal id even when running behind Tor. To unlink you from that IP history its recommended that after the switch/reboot to Tor you also use the REPAIR > RESET-LND option to create a fresh LND wallet. That might involve closing all channels & move your funds out of RaspiBlitz before that RESET-LND.
|
||||
" 16 76
|
||||
|
||||
# make sure AutoNAT & UPnP is off
|
||||
/home/admin/config.scripts/lnd.autonat.sh off
|
||||
/home/admin/config.scripts/network.upnp.sh off
|
||||
fi
|
||||
|
||||
# change TOR
|
||||
# change Tor
|
||||
anychange=1
|
||||
sudo /home/admin/config.scripts/internet.tor.sh ${choice}
|
||||
sudo /home/admin/config.scripts/tor.network.sh ${choice}
|
||||
needsReboot=1
|
||||
|
||||
else
|
||||
echo "TOR Setting unchanged."
|
||||
echo "Tor Setting unchanged."
|
||||
fi
|
||||
|
||||
# LND Auto-Unlock
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "u")
|
||||
if [ ${check} -eq 1 ]; then choice="on"; fi
|
||||
if [ "${autoUnlock}" != "${choice}" ]; then
|
||||
if [ "${autoUnlock}" != "${choice}" ] && [ "${lndNode}" == "on" ]; then
|
||||
echo "LND Autounlock Setting changed .."
|
||||
anychange=1
|
||||
sudo /home/admin/config.scripts/lnd.autounlock.sh ${choice}
|
||||
@ -313,7 +252,7 @@ if [ "${autoUnlock}" != "${choice}" ]; then
|
||||
l1="AUTO-UNLOCK IS NOW OFF"
|
||||
if [ "${choice}" = "on" ]; then
|
||||
l1="AUTO-UNLOCK IS NOW ACTIVE"
|
||||
fi
|
||||
fi
|
||||
dialog --title 'OK' --msgbox "\n${l1}\n" 9 50
|
||||
needsReboot=1
|
||||
fi
|
||||
@ -348,10 +287,10 @@ else
|
||||
echo "Touchscreen Setting unchanged."
|
||||
fi
|
||||
|
||||
# circuitbreaker
|
||||
# LND circuitbreaker
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "c")
|
||||
if [ ${check} -eq 1 ]; then choice="on"; fi
|
||||
if [ "${circuitbreaker}" != "${choice}" ]; then
|
||||
if [ "${circuitbreaker}" != "${choice}" ] && [ "${lndNode}" == "on" ]; then
|
||||
echo "Circuitbreaker Setting changed .."
|
||||
anychange=1
|
||||
sudo /home/admin/config.scripts/bonus.circuitbreaker.sh ${choice}
|
||||
@ -359,20 +298,20 @@ else
|
||||
echo "Circuitbreaker Setting unchanged."
|
||||
fi
|
||||
|
||||
# DropBox process choice
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "d")
|
||||
# Nextcloud process choice
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "x")
|
||||
if [ ${check} -eq 1 ]; then choice="on"; fi
|
||||
if [ "${DropboxBackup}" != "${choice}" ]; then
|
||||
echo "DropBox Setting changed .."
|
||||
if [ "${NextcloudBackup}" != "${choice}" ]; then
|
||||
echo "Nextcloud Setting changed .."
|
||||
anychange=1
|
||||
sudo -u admin /home/admin/config.scripts/dropbox.upload.sh ${choice}
|
||||
sudo -u admin /home/admin/config.scripts/nextcloud.upload.sh ${choice}
|
||||
if [ "${choice}" = "on" ]; then
|
||||
# doing initial upload so that user can see result
|
||||
source /mnt/hdd/raspiblitz.conf
|
||||
sudo /home/admin/config.scripts/dropbox.upload.sh upload ${dropboxBackupTarget} /mnt/hdd/lnd/data/chain/${network}/${chain}net/channel.backup
|
||||
sudo /home/admin/config.scripts/nextcloud.upload.sh upload /mnt/hdd/lnd/data/chain/${network}/${chain}net/channel.backup
|
||||
fi
|
||||
else
|
||||
echo "Dropbox backup setting unchanged."
|
||||
echo "Nextcloud backup setting unchanged."
|
||||
fi
|
||||
|
||||
# LocalBackup process choice
|
||||
@ -386,19 +325,6 @@ else
|
||||
echo "BackupdDevice setting unchanged."
|
||||
fi
|
||||
|
||||
# Keysend process choice
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "k")
|
||||
if [ ${check} -eq 1 ]; then choice="on"; fi
|
||||
if [ "${keysend}" != "${choice}" ]; then
|
||||
echo "keysend setting changed .."
|
||||
anychange=1
|
||||
needsReboot=1
|
||||
sudo -u admin /home/admin/config.scripts/lnd.keysend.sh ${choice}
|
||||
dialog --msgbox "Accept Keysend is now ${choice} after Reboot." 5 46
|
||||
else
|
||||
echo "keysend setting unchanged."
|
||||
fi
|
||||
|
||||
# ZeroTier process choice
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "z")
|
||||
if [ ${check} -eq 1 ]; then choice="on"; fi
|
||||
@ -406,23 +332,182 @@ if [ "${zerotierSwitch}" != "${choice}" ]; then
|
||||
echo "zerotier setting changed .."
|
||||
anychange=1
|
||||
error=""
|
||||
source <(sudo -u admin /home/admin/config.scripts/bonus.zerotier.sh ${choice})
|
||||
if [ "${choice}" == "on" ]; then
|
||||
if [ ${#error} -eq 0 ]; then
|
||||
dialog --msgbox "Your RaspiBlitz joined the ZeroTier network." 6 46
|
||||
else
|
||||
if [ "${error}" != "cancel" ]; then
|
||||
dialog --msgbox "ZeroTier Error:\n${error}" 8 46
|
||||
fi
|
||||
fi
|
||||
else
|
||||
sudo -u admin /home/admin/config.scripts/bonus.zerotier.sh ${choice}
|
||||
if [ "${choice}" != "on" ]; then
|
||||
dialog --msgbox "ZeroTier is now OFF." 5 46
|
||||
fi
|
||||
|
||||
|
||||
else
|
||||
echo "ZeroTier setting unchanged."
|
||||
fi
|
||||
|
||||
# LND choice
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "m")
|
||||
if [ ${check} -eq 1 ]; then choice="on"; fi
|
||||
if [ "${lndNode}" != "${choice}" ]; then
|
||||
anychange=1
|
||||
echo "# LND NODE Setting changed .."
|
||||
if [ "${choice}" = "on" ]; then
|
||||
echo "# turning ON"
|
||||
/home/admin/config.scripts/lnd.install.sh on mainnet initwallet
|
||||
sudo /home/admin/config.scripts/lnd.install.sh display-seed mainnet delete
|
||||
if [ "${testnet}" == "on" ]; then
|
||||
/home/admin/config.scripts/lnd.install.sh on testnet initwallet
|
||||
fi
|
||||
if [ "${signet}" == "on" ]; then
|
||||
/home/admin/config.scripts/lnd.install.sh on signet initwallet
|
||||
fi
|
||||
else
|
||||
echo "# turning OFF"
|
||||
/home/admin/config.scripts/lnd.install.sh off mainnet
|
||||
/home/admin/config.scripts/lnd.install.sh off testnet
|
||||
/home/admin/config.scripts/lnd.install.sh off signet
|
||||
fi
|
||||
else
|
||||
echo "LND NODE setting unchanged."
|
||||
fi
|
||||
|
||||
# CL choice
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "n")
|
||||
if [ ${check} -eq 1 ]; then choice="on"; fi
|
||||
if [ "${clNode}" != "${choice}" ]; then
|
||||
anychange=1
|
||||
echo "# Core Lightning NODE Setting changed .."
|
||||
if [ "${choice}" = "on" ]; then
|
||||
echo "# turning ON"
|
||||
/home/admin/config.scripts/cl.install.sh on mainnet
|
||||
# generate wallet from seedwords or just display (write to dev/null to not write seed words to logs)
|
||||
echo "Generating CL wallet seedwords .."
|
||||
/home/admin/config.scripts/cl.hsmtool.sh new mainnet noninteractive
|
||||
if [ "${testnet}" == "on" ]; then
|
||||
# no seed for testnet
|
||||
echo "Turn on CL testnet .."
|
||||
/home/admin/config.scripts/cl.install.sh on testnet
|
||||
fi
|
||||
if [ "${signet}" == "on" ]; then
|
||||
# no seed for signet
|
||||
echo "Turn on CL signet .."
|
||||
/home/admin/config.scripts/cl.install.sh on signet
|
||||
fi
|
||||
|
||||
else
|
||||
echo "# turning OFF"
|
||||
/home/admin/config.scripts/cl.install.sh off mainnet
|
||||
/home/admin/config.scripts/cl.install.sh off testnet
|
||||
/home/admin/config.scripts/cl.install.sh off signet
|
||||
fi
|
||||
else
|
||||
echo "Core Lightning NODE setting unchanged."
|
||||
fi
|
||||
|
||||
# CLBOSS process choice
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "o")
|
||||
if [ ${check} -eq 1 ]; then choice="on"; fi
|
||||
if [ "${clboss}" != "${choice}" ] && [ "${clNode}" == "on" ]; then
|
||||
echo "CLBOSS Setting changed .."
|
||||
anychange=1
|
||||
if [ ${choice} = on ]; then
|
||||
if /home/admin/config.scripts/cl-plugin.clboss.sh info; then
|
||||
sudo /home/admin/config.scripts/cl-plugin.clboss.sh on
|
||||
else
|
||||
echo "CLBOSS install was cancelled."
|
||||
sleep 2
|
||||
fi
|
||||
else
|
||||
sudo /home/admin/config.scripts/cl-plugin.clboss.sh off
|
||||
fi
|
||||
needsReboot=0
|
||||
else
|
||||
echo "CLBOSS Setting unchanged."
|
||||
fi
|
||||
|
||||
# clEncryptedHSM process choice
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "h")
|
||||
if [ ${check} -eq 1 ]; then choice="on"; fi
|
||||
if [ "${clEncryptedHSM}" != "${choice}" ] && [ "${clNode}" == "on" ]; then
|
||||
echo "clEncryptedHSM Setting changed .."
|
||||
anychange=1
|
||||
if [ "${choice}" == "on" ]; then
|
||||
sudo /home/admin/config.scripts/cl.hsmtool.sh encrypt mainnet
|
||||
else
|
||||
/home/admin/config.scripts/cl.hsmtool.sh decrypt mainnet
|
||||
fi
|
||||
needsReboot=0
|
||||
else
|
||||
echo "clEncryptedHSM Setting unchanged."
|
||||
fi
|
||||
|
||||
# clAutoUnlock process choice
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "q")
|
||||
if [ ${check} -eq 1 ]; then choice="on"; fi
|
||||
if [ "${clAutoUnlock}" != "${choice}" ] && [ "${clNode}" == "on" ]; then
|
||||
echo "clAutoUnlock Setting changed .."
|
||||
anychange=1
|
||||
if [ "${choice}" == "on" ]; then
|
||||
/home/admin/config.scripts/cl.hsmtool.sh autounlock-on mainnet
|
||||
else
|
||||
/home/admin/config.scripts/cl.hsmtool.sh autounlock-off mainnet
|
||||
fi
|
||||
needsReboot=0
|
||||
else
|
||||
echo "clAutoUnlock Setting unchanged."
|
||||
fi
|
||||
|
||||
# clWatchtowerClient process choice
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "w")
|
||||
if [ ${check} -eq 1 ]; then choice="on"; fi
|
||||
if [ "${clWatchtowerClient}" != "${choice}" ] && [ "${clNode}" == "on" ]; then
|
||||
echo "CL WATCHTOWER CLIENT Setting changed .."
|
||||
anychange=1
|
||||
|
||||
if [ ${choice} = on ]; then
|
||||
if /home/admin/config.scripts/cl-plugin.watchtower-client.sh info; then
|
||||
sudo /home/admin/config.scripts/cl-plugin.watchtower-client.sh on
|
||||
else
|
||||
echo "CL WATCHTOWER CLIENT install was cancelled."
|
||||
sleep 2
|
||||
fi
|
||||
else
|
||||
sudo /home/admin/config.scripts/cl-plugin.watchtower-client.sh off
|
||||
fi
|
||||
needsReboot=0
|
||||
else
|
||||
echo "CL WATCHTOWER CLIENT Setting unchanged."
|
||||
fi
|
||||
|
||||
# parallel testnet process choice
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "p")
|
||||
if [ ${check} -eq 1 ]; then choice="on"; fi
|
||||
if [ "${testnet}" != "${choice}" ] || \
|
||||
[ "${signet}" != "${choice}" ]; then
|
||||
echo "# Parallel Testnets Setting changed .."
|
||||
anychange=1
|
||||
if [ "${choice}" = "on" ]; then
|
||||
/home/admin/config.scripts/bitcoin.install.sh on testnet
|
||||
/home/admin/config.scripts/bitcoin.install.sh on signet
|
||||
if [ "${lightning}" == "lnd" ] || [ "${lnd}" == "on" ]; then
|
||||
/home/admin/config.scripts/lnd.install.sh on testnet initwallet
|
||||
/home/admin/config.scripts/lnd.install.sh on signet initwallet
|
||||
fi
|
||||
if [ "${lightning}" == "cl" ] || [ "${cl}" == "on" ]; then
|
||||
/home/admin/config.scripts/cl.install.sh on testnet
|
||||
/home/admin/config.scripts/cl.install.sh on signet
|
||||
fi
|
||||
else
|
||||
# just turn all lightning testnets off (even if not on before)
|
||||
/home/admin/config.scripts/lnd.install.sh off testnet
|
||||
/home/admin/config.scripts/lnd.install.sh off signet
|
||||
/home/admin/config.scripts/cl.install.sh off testnet
|
||||
/home/admin/config.scripts/cl.install.sh off signet
|
||||
/home/admin/config.scripts/bitcoin.install.sh off testnet
|
||||
/home/admin/config.scripts/bitcoin.install.sh off signet
|
||||
fi
|
||||
# make sure to reboot - nodes that people activate testnets can take a reboot
|
||||
needsReboot=1
|
||||
else
|
||||
echo "# Testnet Setting unchanged."
|
||||
fi
|
||||
|
||||
if [ ${anychange} -eq 0 ]; then
|
||||
dialog --msgbox "NOTHING CHANGED!\nUse Spacebar to check/uncheck services." 8 58
|
||||
exit 0
|
||||
@ -436,5 +521,5 @@ if [ ${needsReboot} -eq 1 ]; then
|
||||
# stop bitcoind
|
||||
sudo -u bitcoin ${network}-cli stop
|
||||
sleep 4
|
||||
sudo /home/admin/XXshutdown.sh reboot
|
||||
sudo /home/admin/config.scripts/blitz.shutdown.sh reboot
|
||||
fi
|
||||
|
@ -1,18 +1,21 @@
|
||||
#!/bin/bash
|
||||
|
||||
|
||||
# get raspiblitz config
|
||||
echo "get raspiblitz config"
|
||||
source /home/admin/raspiblitz.info
|
||||
source /mnt/hdd/raspiblitz.conf
|
||||
|
||||
echo "services default values"
|
||||
if [ ${#runBehindTor} -eq 0 ]; then runBehindTor="off"; fi
|
||||
if [ ${#rtlWebinterface} -eq 0 ]; then rtlWebinterface="off"; fi
|
||||
if [ ${#crtlWebinterface} -eq 0 ]; then crtlWebinterface="off"; fi
|
||||
if [ ${#BTCRPCexplorer} -eq 0 ]; then BTCRPCexplorer="off"; fi
|
||||
if [ ${#specter} -eq 0 ]; then specter="off"; fi
|
||||
if [ ${#BTCPayServer} -eq 0 ]; then BTCPayServer="off"; fi
|
||||
if [ ${#ElectRS} -eq 0 ]; then ElectRS="off"; fi
|
||||
if [ ${#lndmanage} -eq 0 ]; then lndmanage="off"; fi
|
||||
if [ ${#joinmarket} -eq 0 ]; then joinmarket="off"; fi
|
||||
if [ ${#jam} -eq 0 ]; then jam="off"; fi
|
||||
if [ ${#LNBits} -eq 0 ]; then LNBits="off"; fi
|
||||
if [ ${#mempoolExplorer} -eq 0 ]; then mempoolExplorer="off"; fi
|
||||
if [ ${#bos} -eq 0 ]; then bos="off"; fi
|
||||
@ -20,32 +23,62 @@ if [ ${#pyblock} -eq 0 ]; then pyblock="off"; fi
|
||||
if [ ${#thunderhub} -eq 0 ]; then thunderhub="off"; fi
|
||||
if [ ${#sphinxrelay} -eq 0 ]; then sphinxrelay="off"; fi
|
||||
if [ ${#lit} -eq 0 ]; then lit="off"; fi
|
||||
if [ ${#lndg} -eq 0 ]; then lndg="off"; fi
|
||||
if [ ${#whitepaper} -eq 0 ]; then whitepaper="off"; fi
|
||||
if [ ${#chantools} -eq 0 ]; then chantools="off"; fi
|
||||
if [ ${#helipad} -eq 0 ]; then helipad="off"; fi
|
||||
if [ ${#lightningtipbot} -eq 0 ]; then lightningtipbot="off"; fi
|
||||
if [ ${#fints} -eq 0 ]; then fints="off"; fi
|
||||
if [ ${#lndk} -eq 0 ]; then lndk="off"; fi
|
||||
if [ ${#labelbase} -eq 0 ]; then labelbase="off"; fi
|
||||
|
||||
# show select dialog
|
||||
echo "run dialog ..."
|
||||
|
||||
OPTIONS=()
|
||||
OPTIONS+=(e 'Electrum Rust Server' ${ElectRS})
|
||||
OPTIONS+=(r 'RTL Webinterface' ${rtlWebinterface})
|
||||
OPTIONS+=(t 'ThunderHub' ${thunderhub})
|
||||
OPTIONS+=(l 'LIT (loop, pool, faraday)' ${lit})
|
||||
OPTIONS+=(p 'BTCPayServer' ${BTCPayServer})
|
||||
OPTIONS+=(i 'LNbits' ${LNBits})
|
||||
OPTIONS+=(b 'BTC-RPC-Explorer' ${BTCRPCexplorer})
|
||||
OPTIONS+=(s 'Cryptoadvance Specter' ${specter})
|
||||
OPTIONS+=(a 'Mempool Space' ${mempoolExplorer})
|
||||
OPTIONS+=(j 'JoinMarket' ${joinmarket})
|
||||
OPTIONS+=(o 'Balance of Satoshis' ${bos})
|
||||
OPTIONS+=(x 'Sphinx-Relay' ${sphinxrelay})
|
||||
OPTIONS+=(y 'PyBLOCK' ${pyblock})
|
||||
OPTIONS+=(c 'ChannelTools (Fund Rescue)' ${chantools})
|
||||
OPTIONS+=(w 'Download Bitcoin Whitepaper' ${whitepaper})
|
||||
|
||||
CHOICES=$(dialog --title ' Additional Services ' \
|
||||
# just available for BTC
|
||||
if [ "${network}" == "bitcoin" ]; then
|
||||
OPTIONS+=(ea 'BTC Electrum Rust Server' ${ElectRS})
|
||||
OPTIONS+=(pa 'BTC PayServer' ${BTCPayServer})
|
||||
OPTIONS+=(ba 'BTC RPC-Explorer' ${BTCRPCexplorer})
|
||||
OPTIONS+=(sa 'BTC Specter Desktop' ${specter})
|
||||
OPTIONS+=(aa 'BTC Mempool Space' ${mempoolExplorer})
|
||||
OPTIONS+=(ja 'BTC JoinMarket+JoininBox menu' ${joinmarket})
|
||||
OPTIONS+=(za 'BTC Jam (JoinMarket WebUI)' ${jam})
|
||||
OPTIONS+=(wa 'BTC Download Bitcoin Whitepaper' ${whitepaper})
|
||||
OPTIONS+=(ls 'BTC Labelbase' ${labelbase})
|
||||
fi
|
||||
|
||||
# available for both LND & c-lightning
|
||||
if [ "${lnd}" == "on" ] || [ "${cl}" == "on" ]; then
|
||||
OPTIONS+=(ia 'LNbits (Lightning Accounts)' ${LNBits})
|
||||
OPTIONS+=(ga 'LightningTipBot' ${lightningtipbot})
|
||||
fi
|
||||
|
||||
# just available for LND
|
||||
if [ "${lightning}" == "lnd" ] || [ "${lnd}" == "on" ]; then
|
||||
OPTIONS+=(ra 'LND RTL Webinterface' ${rtlWebinterface})
|
||||
OPTIONS+=(ta 'LND ThunderHub' ${thunderhub})
|
||||
OPTIONS+=(la 'LND LIT (loop, pool, faraday)' ${lit})
|
||||
OPTIONS+=(gb 'LND LNDg (auto-rebalance, auto-fees)' ${lndg})
|
||||
OPTIONS+=(oa 'LND Balance of Satoshis' ${bos})
|
||||
OPTIONS+=(ya 'LND PyBLOCK' ${pyblock})
|
||||
OPTIONS+=(ha 'LND ChannelTools (Fund Rescue)' ${chantools})
|
||||
OPTIONS+=(fa 'LND Helipad Boostagram reader' ${helipad})
|
||||
OPTIONS+=(lb 'LND LNDK (experimental BOLT 12)' ${lndk})
|
||||
fi
|
||||
|
||||
# just available for CL
|
||||
if [ "${lightning}" == "cl" ] || [ "${cl}" == "on" ]; then
|
||||
OPTIONS+=(ca 'Core Lightning RTL Webinterface' ${crtlWebinterface})
|
||||
fi
|
||||
|
||||
OPTIONS+=(fn 'FinTS/HBCI Interface (experimental)' ${fints})
|
||||
|
||||
CHOICES=$(dialog --title ' Additional Mainnet Services ' \
|
||||
--checklist ' use spacebar to activate/de-activate ' \
|
||||
22 45 15 "${OPTIONS[@]}" 2>&1 >/dev/tty)
|
||||
27 55 20 "${OPTIONS[@]}" 2>&1 >/dev/tty)
|
||||
|
||||
dialogcancel=$?
|
||||
echo "done dialog"
|
||||
@ -55,42 +88,68 @@ clear
|
||||
echo "dialogcancel(${dialogcancel})"
|
||||
if [ ${dialogcancel} -eq 1 ]; then
|
||||
echo "user canceled"
|
||||
exit 1
|
||||
exit 0
|
||||
elif [ ${dialogcancel} -eq 255 ]; then
|
||||
echo "ESC pressed"
|
||||
exit 1
|
||||
exit 0
|
||||
fi
|
||||
|
||||
needsReboot=0
|
||||
anychange=0
|
||||
|
||||
# RTL process choice
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "r")
|
||||
# RTL process choice (LND)
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "ra")
|
||||
if [ ${check} -eq 1 ]; then choice="on"; fi
|
||||
|
||||
if [ "${rtlWebinterface}" != "${choice}" ]; then
|
||||
echo "RTL Webinterface Setting changed .."
|
||||
echo "RTL-lnd Webinterface Setting changed .."
|
||||
anychange=1
|
||||
/home/admin/config.scripts/bonus.rtl.sh ${choice}
|
||||
/home/admin/config.scripts/bonus.rtl.sh ${choice} lnd mainnet
|
||||
errorOnInstall=$?
|
||||
if [ "${choice}" = "on" ]; then
|
||||
if [ ${errorOnInstall} -eq 0 ]; then
|
||||
sudo systemctl start RTL
|
||||
echo "waiting 10 secs .."
|
||||
sleep 10
|
||||
/home/admin/config.scripts/bonus.rtl.sh menu
|
||||
/home/admin/config.scripts/bonus.rtl.sh menu lnd mainnet
|
||||
else
|
||||
l1="!!! FAIL on RTL install !!!"
|
||||
l1="# FAIL on RTL lnd install #"
|
||||
l2="Try manual install on terminal after reboot with:"
|
||||
l3="/home/admin/config.scripts/bonus.rtl.sh on"
|
||||
l3="/home/admin/config.scripts/bonus.rtl.sh on lnd mainnet"
|
||||
dialog --title 'FAIL' --msgbox "${l1}\n${l2}\n${l3}" 7 65
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo "RTL Webinterface Setting unchanged."
|
||||
echo "RTL-lnd Webinterface Setting unchanged."
|
||||
fi
|
||||
|
||||
# RTL process choice (Core Lightning)
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "ca")
|
||||
if [ ${check} -eq 1 ]; then choice="on"; fi
|
||||
if [ "${crtlWebinterface}" != "${choice}" ]; then
|
||||
echo "RTL-cl Webinterface Setting changed .."
|
||||
anychange=1
|
||||
/home/admin/config.scripts/bonus.rtl.sh ${choice} cl mainnet
|
||||
errorOnInstall=$?
|
||||
if [ "${choice}" = "on" ]; then
|
||||
if [ ${errorOnInstall} -eq 0 ]; then
|
||||
sudo systemctl start RTL
|
||||
echo "waiting 10 secs .."
|
||||
sleep 10
|
||||
/home/admin/config.scripts/bonus.rtl.sh menu cl mainnet
|
||||
else
|
||||
l1="# FAIL on RTL Core Lightning install #"
|
||||
l2="Try manual install on terminal after reboot with:"
|
||||
l3="/home/admin/config.scripts/bonus.rtl.sh on cl mainnet"
|
||||
dialog --title 'FAIL' --msgbox "${l1}\n${l2}\n${l3}" 7 65
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo "RTL-cl Webinterface Setting unchanged."
|
||||
fi
|
||||
|
||||
# BTC-RPC-Explorer process choice
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "b")
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "ba")
|
||||
if [ ${check} -eq 1 ]; then choice="on"; fi
|
||||
if [ "${BTCRPCexplorer}" != "${choice}" ]; then
|
||||
echo "RTL Webinterface Setting changed .."
|
||||
@ -99,7 +158,7 @@ if [ "${BTCRPCexplorer}" != "${choice}" ]; then
|
||||
errorOnInstall=$?
|
||||
if [ "${choice}" = "on" ]; then
|
||||
if [ ${errorOnInstall} -eq 0 ]; then
|
||||
sudo sytemctl start btc-rpc-explorer
|
||||
sudo systemctl start btc-rpc-explorer
|
||||
whiptail --title " Installed BTC-RPC-Explorer " --msgbox "\
|
||||
The txindex may need to be created before BTC-RPC-Explorer can be active.\n
|
||||
This can take ~7 hours on a RPi4 with SSD. Monitor the progress on the LCD.\n
|
||||
@ -107,7 +166,7 @@ When finished use the new 'EXPLORE' entry in Main Menu for more info.\n
|
||||
" 14 50
|
||||
needsReboot=1
|
||||
else
|
||||
l1="!!! FAIL on BTC-RPC-Explorer install !!!"
|
||||
l1="# FAIL on BTC-RPC-Explorer install #"
|
||||
l2="Try manual install on terminal after reboot with:"
|
||||
l3="/home/admin/config.scripts/bonus.btc-rpc-explorer.sh on"
|
||||
dialog --title 'FAIL' --msgbox "${l1}\n${l2}\n${l3}" 7 65
|
||||
@ -117,31 +176,31 @@ else
|
||||
echo "BTC-RPC-Explorer Setting unchanged."
|
||||
fi
|
||||
|
||||
# cryptoadvance Specter process choice
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "s")
|
||||
# Specter Desktop process choice
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "sa")
|
||||
if [ ${check} -eq 1 ]; then choice="on"; fi
|
||||
if [ "${specter}" != "${choice}" ]; then
|
||||
echo "Cryptoadvance Specter Setting changed .."
|
||||
echo "Specter Desktop Setting changed .."
|
||||
anychange=1
|
||||
/home/admin/config.scripts/bonus.cryptoadvance-specter.sh ${choice}
|
||||
/home/admin/config.scripts/bonus.specter.sh ${choice}
|
||||
errorOnInstall=$?
|
||||
if [ "${choice}" = "on" ]; then
|
||||
if [ ${errorOnInstall} -eq 0 ]; then
|
||||
sudo systemctl start cryptoadvance-specter
|
||||
/home/admin/config.scripts/bonus.cryptoadvance-specter.sh menu
|
||||
sudo systemctl start specter
|
||||
/home/admin/config.scripts/bonus.specter.sh menu
|
||||
else
|
||||
l1="!!! FAIL on Cryptoadvance Specter install !!!"
|
||||
l1="# FAIL on Specter Desktop install #"
|
||||
l2="Try manual install on terminal after reboot with:"
|
||||
l3="/home/admin/config.scripts/bonus.cryptoadvance-specter.sh on"
|
||||
l3="/home/admin/config.scripts/bonus.specter.sh on"
|
||||
dialog --title 'FAIL' --msgbox "${l1}\n${l2}\n${l3}" 7 65
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo "Cryptoadvance Specter Setting unchanged."
|
||||
echo "Specter Desktop Setting unchanged."
|
||||
fi
|
||||
|
||||
# ElectRS process choice
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "e")
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "ea")
|
||||
if [ ${check} -eq 1 ]; then choice="on"; fi
|
||||
if [ "${ElectRS}" != "${choice}" ]; then
|
||||
echo "ElectRS Setting changed .."
|
||||
@ -166,9 +225,9 @@ The index database needs to be created before Electrum Server can be used.\n
|
||||
This can take hours/days depending on your RaspiBlitz. Monitor the progress on the LCD.\n
|
||||
When finished use the new 'ELECTRS' entry in Main Menu for more info.\n
|
||||
" 14 50
|
||||
needsReboot=1
|
||||
needsReboot=0
|
||||
else
|
||||
l1="!!! FAIL on ElectRS install !!!"
|
||||
l1="# FAIL on ElectRS install #"
|
||||
l2="Try manual install on terminal after reboot with:"
|
||||
l3="/home/admin/config.scripts/bonus.electrs.sh on"
|
||||
dialog --title 'FAIL' --msgbox "${l1}\n${l2}\n${l3}" 7 65
|
||||
@ -191,7 +250,7 @@ else
|
||||
fi
|
||||
|
||||
# BTCPayServer process choice
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "p")
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "pa")
|
||||
if [ ${check} -eq 1 ]; then choice="on"; fi
|
||||
if [ "${BTCPayServer}" != "${choice}" ]; then
|
||||
echo "BTCPayServer setting changed .."
|
||||
@ -227,7 +286,7 @@ else
|
||||
fi
|
||||
|
||||
# LNDMANAGE process choice
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "m")
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "ab")
|
||||
if [ ${check} -eq 1 ]; then choice="on"; fi
|
||||
if [ "${lndmanage}" != "${choice}" ]; then
|
||||
echo "lndmanage Setting changed .."
|
||||
@ -242,7 +301,7 @@ else
|
||||
fi
|
||||
|
||||
# CHANTOOLS process choice
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "c")
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "ha")
|
||||
if [ ${check} -eq 1 ]; then choice="on"; fi
|
||||
if [ "${chantools}" != "${choice}" ]; then
|
||||
echo "chantools Setting changed .."
|
||||
@ -257,7 +316,7 @@ else
|
||||
fi
|
||||
|
||||
# Balance of Satoshis process choice
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "o")
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "oa")
|
||||
if [ ${check} -eq 1 ]; then choice="on"; fi
|
||||
if [ "${bos}" != "${choice}" ]; then
|
||||
echo "Balance of Satoshis Setting changed .."
|
||||
@ -272,7 +331,7 @@ else
|
||||
fi
|
||||
|
||||
# PyBLOCK process choice
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "y")
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "ya")
|
||||
if [ ${check} -eq 1 ]; then choice="on"; fi
|
||||
if [ "${pyblock}" != "${choice}" ]; then
|
||||
echo "PyBLOCK Setting changed .."
|
||||
@ -287,7 +346,7 @@ else
|
||||
fi
|
||||
|
||||
# thunderhub process choice
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "t")
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "ta")
|
||||
if [ ${check} -eq 1 ]; then choice="on"; fi
|
||||
if [ "${thunderhub}" != "${choice}" ]; then
|
||||
echo "ThunderHub Setting changed .."
|
||||
@ -301,7 +360,7 @@ if [ "${thunderhub}" != "${choice}" ]; then
|
||||
sleep 10
|
||||
/home/admin/config.scripts/bonus.thunderhub.sh menu
|
||||
else
|
||||
l1="!!! FAIL on ThunderHub install !!!"
|
||||
l1="# FAIL on ThunderHub install #"
|
||||
l2="Try manual install on terminal after reboot with:"
|
||||
l3="/home/admin/config.scripts/bonus.thunderhub.sh on"
|
||||
dialog --title 'FAIL' --msgbox "${l1}\n${l2}\n${l3}" 7 65
|
||||
@ -312,12 +371,12 @@ else
|
||||
fi
|
||||
|
||||
# LNbits process choice
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "i")
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "ia")
|
||||
if [ ${check} -eq 1 ]; then choice="on"; fi
|
||||
if [ "${LNBits}" != "${choice}" ]; then
|
||||
echo "LNbits Setting changed .."
|
||||
anychange=1
|
||||
sudo -u admin /home/admin/config.scripts/bonus.lnbits.sh ${choice}
|
||||
sudo -u admin /home/admin/config.scripts/bonus.lnbits.sh ${choice} ${lightning}
|
||||
if [ "${choice}" = "on" ]; then
|
||||
sudo systemctl start lnbits
|
||||
sudo -u admin /home/admin/config.scripts/bonus.lnbits.sh menu
|
||||
@ -326,8 +385,23 @@ else
|
||||
echo "LNbits setting unchanged."
|
||||
fi
|
||||
|
||||
# LightningTipBot process choice
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "ga")
|
||||
if [ ${check} -eq 1 ]; then choice="on"; fi
|
||||
if [ "${lightningtipbot}" != "${choice}" ]; then
|
||||
echo "LightningTipBot Setting changed .."
|
||||
anychange=1
|
||||
sudo -u admin /home/admin/config.scripts/bonus.lightningtipbot.sh ${choice}
|
||||
if [ "${choice}" = "on" ]; then
|
||||
sudo systemctl start lightningtipbot
|
||||
sudo -u admin /home/admin/config.scripts/bonus.lightningtipbot.sh menu
|
||||
fi
|
||||
else
|
||||
echo "LightningTipBot setting unchanged."
|
||||
fi
|
||||
|
||||
# LIT (Lightning Terminal)
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "l")
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "la")
|
||||
if [ ${check} -eq 1 ]; then choice="on"; fi
|
||||
if [ "${lit}" != "${choice}" ]; then
|
||||
echo "LIT Setting changed .."
|
||||
@ -341,27 +415,74 @@ else
|
||||
echo "LIT setting unchanged."
|
||||
fi
|
||||
|
||||
# Sphinx Relay
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "x")
|
||||
# LNDg
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "gb")
|
||||
if [ ${check} -eq 1 ]; then choice="on"; fi
|
||||
if [ "${sphinxrelay}" != "${choice}" ]; then
|
||||
echo "Sphinx-Relay Setting changed .."
|
||||
if [ "${lndg}" != "${choice}" ]; then
|
||||
echo "LNDg Setting changed .."
|
||||
anychange=1
|
||||
sudo -u admin /home/admin/config.scripts/bonus.sphinxrelay.sh ${choice}
|
||||
databasechoice=""
|
||||
isDatabase=$(sudo ls /mnt/hdd/app-data/lndg/data/db.sqlite3 2>/dev/null | grep -c 'db.sqlite3')
|
||||
if ! [ ${isDatabase} -eq 0 ]; then
|
||||
if [ "${choice}" = "off" ]; then
|
||||
whiptail --title "Delete LNDg Database?" \
|
||||
--yes-button "Keep Database" \
|
||||
--no-button "Delete Database" \
|
||||
--yesno "LNDg is getting uninstalled. If you keep the database, you will be able to reuse the data should you choose to re-install. Do you wish to keep the database?" 10 80
|
||||
if [ $? -eq 1 ]; then
|
||||
databasechoice="deletedatabase"
|
||||
fi
|
||||
else
|
||||
whiptail --title "Use Existing LNDg Database?" \
|
||||
--yes-button "Use existing database" \
|
||||
--no-button "Start a new database" \
|
||||
--yesno "LNDg is getting installed, and there is an existing database. You may use the existing database, which will include your old password and all of your old data, or you may start with a clean database. Do you wish to use the existing database?" 10 110
|
||||
if [ $? -eq 1 ]; then
|
||||
databasechoice="deletedatabase"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
sudo -u admin /home/admin/config.scripts/bonus.lndg.sh ${choice} ${databasechoice}
|
||||
if [ "${choice}" = "on" ]; then
|
||||
echo "Giving service 1 minute to start up ... (please wait) ..."
|
||||
sleep 60
|
||||
whiptail --title " Installed Sphinx Server" --msgbox "\
|
||||
Sphinx Server was installed.\n
|
||||
Use the new 'SPHINX' entry in Main Menu for more info.\n
|
||||
" 10 35
|
||||
sudo -u admin /home/admin/config.scripts/bonus.lndg.sh menu
|
||||
fi
|
||||
else
|
||||
echo "Sphinx Relay unchanged."
|
||||
echo "LNDg unchanged."
|
||||
fi
|
||||
|
||||
# Helipad
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "fa")
|
||||
if [ ${check} -eq 1 ]; then choice="on"; fi
|
||||
if [ "${helipad}" != "${choice}" ]; then
|
||||
echo "Helipad setting changed .."
|
||||
anychange=1
|
||||
sudo -u admin /home/admin/config.scripts/bonus.helipad.sh ${choice}
|
||||
if [ "${choice}" = "on" ]; then
|
||||
sudo systemctl start helipad
|
||||
sudo -u admin /home/admin/config.scripts/bonus.helipad.sh menu
|
||||
fi
|
||||
else
|
||||
echo "Helipad setting unchanged."
|
||||
fi
|
||||
|
||||
# LNDK
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "lb")
|
||||
if [ ${check} -eq 1 ]; then choice="on"; fi
|
||||
if [ "${lndk}" != "${choice}" ]; then
|
||||
echo "LNDK Setting changed .."
|
||||
anychange=1
|
||||
sudo -u admin /home/admin/config.scripts/bonus.lndk.sh ${choice}
|
||||
if [ "${choice}" = "on" ]; then
|
||||
whiptail --title " Installed LNDK" --msgbox "\
|
||||
LNDK was installed.\n
|
||||
" 10 45
|
||||
fi
|
||||
else
|
||||
echo "LNDK Setting unchanged."
|
||||
fi
|
||||
|
||||
# JoinMarket process choice
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "j")
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "ja")
|
||||
if [ ${check} -eq 1 ]; then choice="on"; fi
|
||||
if [ "${joinmarket}" != "${choice}" ]; then
|
||||
echo "JoinMarket setting changed .."
|
||||
@ -389,8 +510,37 @@ else
|
||||
echo "JoinMarket not changed."
|
||||
fi
|
||||
|
||||
# Jam process choice
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "za")
|
||||
if [ ${check} -eq 1 ]; then choice="on"; fi
|
||||
if [ "${jam}" != "${choice}" ]; then
|
||||
echo "Jam setting changed .."
|
||||
# check if TOR is installed
|
||||
source /mnt/hdd/raspiblitz.conf
|
||||
if [ "${choice}" = "on" ] && [ "${runBehindTor}" = "off" ]; then
|
||||
whiptail --title " Use Tor with Jam" --msgbox "\
|
||||
It is highly recommended to use Tor with Jam.\n
|
||||
Please activate TOR in SERVICES first.\n
|
||||
Then try activating Jam again in SERVICES.\n
|
||||
" 13 42
|
||||
else
|
||||
anychange=1
|
||||
sudo /home/admin/config.scripts/bonus.jam.sh ${choice}
|
||||
errorOnInstall=$?
|
||||
if [ "${choice}" = "on" ]; then
|
||||
if [ ${errorOnInstall} -eq 0 ]; then
|
||||
sudo /home/admin/config.scripts/bonus.jam.sh menu
|
||||
else
|
||||
whiptail --title 'FAIL' --msgbox "Jam installation is cancelled\nTry again from the menu or install from the terminal with:\nsudo /home/admin/config.scripts/bonus.jam.sh on" 9 65
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo "Jam not changed."
|
||||
fi
|
||||
|
||||
# Mempool process choice
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "a")
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "aa")
|
||||
if [ ${check} -eq 1 ]; then choice="on"; fi
|
||||
if [ "${mempoolExplorer}" != "${choice}" ]; then
|
||||
echo "Mempool Explorer settings changed .."
|
||||
@ -406,7 +556,7 @@ This can take ~7 hours on a RPi4 with SSD. Monitor the progress on the LCD.\n
|
||||
When finished use the new 'MEMPOOL' entry in Main Menu for more info.\n
|
||||
" 14 50
|
||||
else
|
||||
l1="!!! FAIL on Mempool Explorer install !!!"
|
||||
l1="# FAIL on Mempool Explorer install #"
|
||||
l2="Try manual install on terminal after reboot with:"
|
||||
l3="/home/admin/config.scripts/bonus.mempool.sh on"
|
||||
dialog --title 'FAIL' --msgbox "${l1}\n${l2}\n${l3}" 7 65
|
||||
@ -417,7 +567,7 @@ else
|
||||
fi
|
||||
|
||||
# Whitepaper process choice
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "w")
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "wa")
|
||||
if [ ${check} -eq 1 ]; then choice="on"; fi
|
||||
if [ "${whitepaper}" != "${choice}" ]; then
|
||||
echo "Whitepaper setting changed .."
|
||||
@ -431,6 +581,32 @@ else
|
||||
echo "Whitepaper setting unchanged."
|
||||
fi
|
||||
|
||||
# labelbase process choice
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "ls")
|
||||
if [ ${check} -eq 1 ]; then choice="on"; fi
|
||||
if [ "${labelbase}" != "${choice}" ]; then
|
||||
echo "Labelbase setting changed .."
|
||||
anychange=1
|
||||
sudo -u admin /home/admin/config.scripts/bonus.labelbase.sh ${choice}
|
||||
source /mnt/hdd/raspiblitz.conf
|
||||
if [ "${labelbase}" = "on" ]; then
|
||||
sudo -u admin /home/admin/config.scripts/bonus.labelbase.sh menu
|
||||
fi
|
||||
else
|
||||
echo "Labelbase setting unchanged."
|
||||
fi
|
||||
|
||||
# fints process choice
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "fn")
|
||||
if [ ${check} -eq 1 ]; then choice="on"; fi
|
||||
if [ "${fints}" != "${choice}" ]; then
|
||||
echo "fints setting changed .."
|
||||
anychange=1
|
||||
sudo -u admin /home/admin/config.scripts/bonus.fints.sh ${choice}
|
||||
else
|
||||
echo "fints setting unchanged."
|
||||
fi
|
||||
|
||||
if [ ${anychange} -eq 0 ]; then
|
||||
dialog --msgbox "NOTHING CHANGED!\nUse Spacebar to check/uncheck services." 8 58
|
||||
exit 0
|
||||
@ -444,5 +620,5 @@ if [ ${needsReboot} -eq 1 ]; then
|
||||
# stop bitcoind
|
||||
sudo -u bitcoin ${network}-cli stop
|
||||
sleep 4
|
||||
sudo /home/admin/XXshutdown.sh reboot
|
||||
sudo /home/admin/config.scripts/blitz.shutdown.sh reboot
|
||||
fi
|
||||
|
@ -1,267 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# CHECK WHAT IS ALREADY WORKING
|
||||
# check list from top down - so ./10setupBlitz.sh
|
||||
# and re-enters the setup process at the correct spot
|
||||
# in case it got interrupted
|
||||
echo "checking setup script"
|
||||
|
||||
# INFOFILE on SD - state data from bootstrap & setup
|
||||
infoFile="/home/admin/raspiblitz.info"
|
||||
source ${infoFile}
|
||||
|
||||
echo "network(${network})"
|
||||
echo "chain(${chain})"
|
||||
echo "setupStep(${setupStep})"
|
||||
|
||||
if [ ${#network} -eq 0 ]; then
|
||||
echo "FAIL: Something is wrong. There is no value for network in ${infoFile}."
|
||||
echo "Should be at least default value. EXIT"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# if no setup step in info file init with 0
|
||||
if [ ${#setupStep} -eq 0 ];then
|
||||
echo "Init setupStep=0"
|
||||
echo "setupStep=0" >> ${infoFile}
|
||||
setupStep=0
|
||||
fi
|
||||
|
||||
# check if LND needs re-setup
|
||||
if [ ${setupStep} -gt 79 ];then
|
||||
source <(sudo /home/admin/config.scripts/lnd.check.sh basic-setup)
|
||||
if [ ${wallet} -eq 0 ] || [ ${macaroon} -eq 0 ] || [ ${config} -eq 0 ] || [ ${tls} -eq 0 ]; then
|
||||
echo "WARN: LND needs re-setup"
|
||||
sudo /home/admin/70initLND.sh
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
|
||||
# if setup if ready --> REBOOT
|
||||
if [ ${setupStep} -gt 89 ];then
|
||||
echo "FINISH by setupstep(${setupStep})"
|
||||
sleep 3
|
||||
sudo /home/admin/90finishSetup.sh
|
||||
sudo /home/admin/95finalSetup.sh
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# check if lightning is running
|
||||
lndRunning=$(systemctl status lnd.service 2>/dev/null | grep -c running)
|
||||
if [ ${lndRunning} -eq 1 ]; then
|
||||
|
||||
echo "LND is running ..."
|
||||
sleep 1
|
||||
|
||||
# check if LND wallet exists and if locked
|
||||
walletExists=$(sudo ls /mnt/hdd/lnd/data/chain/${network}/${chain}net/wallet.db 2>/dev/null | grep wallet.db -c)
|
||||
walletLocked=0
|
||||
# only when a wallet exists - it can be locked
|
||||
if [ ${walletExists} -eq 1 ];then
|
||||
echo "lnd wallet exists ... checking if locked"
|
||||
sleep 2
|
||||
walletLocked=$(sudo -u bitcoin /usr/local/bin/lncli getinfo 2>&1 | grep -c unlock)
|
||||
fi
|
||||
if [ ${walletLocked} -gt 0 ]; then
|
||||
# LND wallet is locked
|
||||
/home/admin/config.scripts/lnd.unlock.sh
|
||||
/home/admin/10setupBlitz.sh
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# check if blockchain still syncing (during sync sometimes CLI returns with error at this point)
|
||||
chainInfo=$(sudo -u bitcoin ${network}-cli getblockchaininfo 2>/dev/null | grep 'initialblockdownload')
|
||||
chainSyncing=1
|
||||
if [ ${#chainInfo} -gt 0 ];then
|
||||
echo "check chaininfo"
|
||||
chainSyncing=$(echo "${chainInfo}" | grep "true" -c)
|
||||
else
|
||||
echo "chaininfo is zero"
|
||||
fi
|
||||
if [ ${chainSyncing} -eq 1 ]; then
|
||||
echo "Sync Chain ..."
|
||||
sleep 3
|
||||
/home/admin/70initLND.sh
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# check if lnd is scanning blockchain
|
||||
lndInfo=$(sudo -u bitcoin /usr/local/bin/lncli --chain=${network} getinfo 2>/dev/null | grep "synced_to_chain")
|
||||
lndSyncing=1
|
||||
if [ ${#lndInfo} -gt 0 ];then
|
||||
lndSyncing=$(echo "${chainInfo}" | grep "false" -c)
|
||||
fi
|
||||
if [ ${lndSyncing} -eq 1 ]; then
|
||||
echo "Sync LND ..."
|
||||
sleep 3
|
||||
/home/admin/70initLND.sh
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# if unlocked, blockchain synced and LND synced to chain .. finisch Setup
|
||||
echo "FINSIH ... "
|
||||
sleep 3
|
||||
sudo /home/admin/90finishSetup.sh
|
||||
sudo /home/admin/95finalSetup.sh
|
||||
exit 0
|
||||
|
||||
fi #end - when lighting is running
|
||||
|
||||
# check if bitcoin is running
|
||||
bitcoinRunning=$(systemctl status ${network}d.service 2>/dev/null | grep -c running)
|
||||
if [ ${bitcoinRunning} -eq 0 ]; then
|
||||
# double check
|
||||
seconds=120
|
||||
if [ ${setupStep} -lt 60 ]; then
|
||||
seconds=10
|
||||
fi
|
||||
dialog --pause " Double checking for ${network}d - please wait .." 8 58 ${seconds}
|
||||
clear
|
||||
bitcoinRunning=$(${network}-cli getblockchaininfo 2>/dev/null | grep "initialblockdownload" -c)
|
||||
else
|
||||
echo "${network} is running"
|
||||
fi
|
||||
if [ ${bitcoinRunning} -eq 1 ]; then
|
||||
echo "OK - ${network}d is running"
|
||||
echo "Next step run Lightning"
|
||||
/home/admin/70initLND.sh
|
||||
exit 1
|
||||
else
|
||||
echo "${network} still not running"
|
||||
fi #end - when bitcoin is running
|
||||
|
||||
# --- so neither bitcoin or lnd or running yet --> find the earlier step in the setup process:
|
||||
|
||||
# use blitz.datadrive.sh to analyse HDD situation
|
||||
source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status ${network})
|
||||
if [ ${#error} -gt 0 ]; then
|
||||
echo "# FAIL blitz.datadrive.sh status --> ${error}"
|
||||
echo "# Please report issue to the raspiblitz github."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# check if HDD is auto-mounted
|
||||
if [ ${isMounted} -eq 1 ]; then
|
||||
|
||||
# FAILSAFE: check if raspiblitz.conf is available
|
||||
configExists=$(ls /mnt/hdd/raspiblitz.conf | grep -c '.conf')
|
||||
if [ ${configExists} -eq 0 ]; then
|
||||
echo ""
|
||||
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
|
||||
echo "FAIL: /mnt/hdd/raspiblitz.conf should exists at this point, but not found!"
|
||||
echo "Please report to: https://github.com/rootzoll/raspiblitz/issues/293"
|
||||
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
|
||||
echo "Press ENTER to EXIT."
|
||||
read key
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# are there any signs of blockchain data and activity
|
||||
# setup running with admin user, but has no permission to read /mnt/hdd/bitcoin/blocks/, sudo needed
|
||||
blockchainDataExists=$(sudo ls /mnt/hdd/${network}/blocks 2>/dev/null | grep -c '.dat')
|
||||
configExists=$(sudo ls /mnt/hdd/${network}/${network}.conf | grep -c '.conf')
|
||||
|
||||
if [ ${blockchainDataExists} -gt 0 ]; then
|
||||
if [ ${configExists} -eq 1 ]; then
|
||||
/home/admin/XXdebugLogs.sh
|
||||
echo "UNKOWN STATE - there is blockain data config, but blockchain service is not running"
|
||||
echo "It seems that something went wrong during sync/download/copy of the blockchain."
|
||||
echo "Or something with the config is not correct."
|
||||
echo "Sometimes a reboot helps - use command: restart"
|
||||
echo "Or try to repair blockchain - use command: repair"
|
||||
exit 1
|
||||
else
|
||||
echo "Got mounted blockchain, but no config and running service yet --> finish HDD"
|
||||
/home/admin/60finishHDD.sh
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# HDD is empty - get Blockchain
|
||||
|
||||
# detect hardware version of RaspberryPi
|
||||
# https://www.unixtutorial.org/command-to-confirm-raspberry-pi-model
|
||||
raspberryPi=$(cat /proc/device-tree/model | cut -d " " -f 3 | sed 's/[^0-9]*//g')
|
||||
if [ ${#raspberryPi} -eq 0 ]; then
|
||||
raspberryPi=0
|
||||
fi
|
||||
|
||||
# Bitcoin on older/weak RaspberryPi3 (LEGACY)
|
||||
if [ ${network} = "bitcoin" ] && [ ${raspberryPi} -eq 3 ]; then
|
||||
echo "Bitcoin-RP3 Options"
|
||||
menuitem=$(dialog --clear --beep --backtitle "RaspiBlitz" --title " Getting the Blockchain " \
|
||||
--menu "You need a copy of the Bitcoin Blockchain - choose method:" 13 75 5 \
|
||||
C "COPY --> Copy from laptop/node over LAN (±6hours)" \
|
||||
S "SYNC --> Selfvalidate all Blocks (VERY SLOW ±2month)" 2>&1 >/dev/tty)
|
||||
|
||||
# Bitcoin on stronger RaspberryPi4 (new DEFAULT)
|
||||
elif [ ${network} = "bitcoin" ]; then
|
||||
echo "Bitcoin-RP4 Options"
|
||||
menuitem=$(dialog --clear --beep --backtitle "RaspiBlitz" --title " Getting the Blockchain " \
|
||||
--menu "You need a copy of the Bitcoin Blockchain - choose method:" 13 75 5 \
|
||||
S "SYNC --> Selfvalidate all Blocks (DEFAULT ±2days)" \
|
||||
C "COPY --> Copy from laptop/node over LAN (±6hours)" 2>&1 >/dev/tty)
|
||||
|
||||
# Litecoin
|
||||
elif [ ${network} = "litecoin" ]; then
|
||||
echo "Litecoin Options"
|
||||
menuitem=$(dialog --clear --beep --backtitle "RaspiBlitz" --title " Getting the Blockchain " \
|
||||
--menu "You need a copy of the Litecoin Blockchain:" 13 75 4 \
|
||||
S "SYNC --> Selfvalidate all Blocks (±1day)" 2>&1 >/dev/tty)
|
||||
|
||||
# error
|
||||
else
|
||||
echo "FAIL Unkown network(${network})"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# set SetupState
|
||||
sudo sed -i "s/^setupStep=.*/setupStep=50/g" ${infoFile}
|
||||
|
||||
clear
|
||||
case $menuitem in
|
||||
C)
|
||||
/home/admin/50copyHDD.sh
|
||||
;;
|
||||
S)
|
||||
/home/admin/50syncHDD.sh
|
||||
/home/admin/10setupBlitz.sh
|
||||
;;
|
||||
*)
|
||||
echo "Use 'raspiblitz' command to return to setup ..."
|
||||
;;
|
||||
esac
|
||||
exit 1
|
||||
|
||||
fi # end HDD is already auto-mountes
|
||||
|
||||
|
||||
# --- the HDD is not auto-mounted --> very early stage of setup
|
||||
|
||||
# if the script is called for the first time
|
||||
if [ ${setupStep} -eq 0 ]; then
|
||||
# run initial user dialog
|
||||
/home/admin/20setupDialog.sh
|
||||
fi
|
||||
|
||||
# if the script is called for the first time
|
||||
if [ ${setupStep} -eq 20 ]; then
|
||||
# run initial user dialog
|
||||
/home/admin/30initHDD.sh
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# the HDD is already ext4 formated and cointains blockchain data
|
||||
if [ "${hddFormat}" = "ext4" ] || [ "${hddFormat}" = "btrfs" ]; then
|
||||
if [ ${hddGotBlockchain} -eq 1 ]; then
|
||||
echo "HDD was already initialized/prepared"
|
||||
echo "Now needs to be mounted"
|
||||
/home/admin/40addHDD.sh
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# the HDD had no init yet
|
||||
echo "init HDD ..."
|
||||
/home/admin/30initHDD.sh
|
||||
exit 1
|
@ -1,127 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
## get basic info
|
||||
source /home/admin/raspiblitz.info
|
||||
source /mnt/hdd/raspiblitz.conf
|
||||
|
||||
# show password info dialog
|
||||
resetAlsoPasswordB=$(sudo cat /mnt/hdd/bitcoin/bitcoin.conf 2>/dev/null | grep -c "rpcpassword=passwordB")
|
||||
resetAlsoPasswordC=$(sudo ls /mnt/hdd/passwordc.flag 2>/dev/null | grep -c ".flag")
|
||||
|
||||
if [ ${resetAlsoPasswordC} -gt 0 ]; then
|
||||
|
||||
# password A + B + C
|
||||
dialog --backtitle "RaspiBlitz - Migration Setup" --msgbox "Your migration to RaspiBlitz is almost done.
|
||||
|
||||
You need to set a new Password A, B & C:
|
||||
A) Main User Password (SSH, WebUI, ..)
|
||||
B) RPC & APP Password (Additional Apps, ..)
|
||||
C) Lightning Wallet Unlock Password
|
||||
|
||||
Follow Password Rules: Minimal of 8 chars,
|
||||
no spaces and only special characters - or .
|
||||
Write them down & store them in a safe place.
|
||||
" 17 52
|
||||
|
||||
# call set password a script
|
||||
sudo /home/admin/config.scripts/blitz.setpassword.sh a
|
||||
dialog --backtitle "RaspiBlitz" --msgbox "OK - password A was set\nfor all users pi, admin, root & bitcoin" 6 52
|
||||
|
||||
sudo /home/admin/config.scripts/blitz.setpassword.sh b
|
||||
dialog --backtitle "RaspiBlitz" --msgbox "OK - password B was set\nit will be used by additional apps you install." 6 52
|
||||
|
||||
oldPasswordC=$(sudo cat /mnt/hdd/passwordc.flag)
|
||||
sudo /home/admin/config.scripts/blitz.setpassword.sh c $oldPasswordC
|
||||
if [ "$?" != "0" ]; then
|
||||
dialog --backtitle "RaspiBlitz - Setup" --msgbox "Please write down your Password C:\n${oldPasswordC}" 10 52
|
||||
else
|
||||
dialog --backtitle "RaspiBlitz" --msgbox "OK - password C was set\nuse it to unlock your Lightning Wallet after restarts." 8 52
|
||||
fi
|
||||
|
||||
elif [ ${resetAlsoPasswordB} -gt 0 ]; then
|
||||
|
||||
# password A + B
|
||||
dialog --backtitle "RaspiBlitz - Migration Setup" --msgbox "Your migration to RaspiBlitz is almost done.
|
||||
|
||||
You need to set a new Password A & B:
|
||||
A) Main User Password (SSH, WebUI, ..)
|
||||
B) RPC & APP Password (Additional Apps, ..)
|
||||
|
||||
Passwords C (for your Lightning wallet) stays to the password you set before.
|
||||
|
||||
Follow Password Rules: Minimal of 8 chars,
|
||||
no spaces and only special characters - or .
|
||||
Write them down & store them in a safe place.
|
||||
" 17 52
|
||||
|
||||
# call set password a script
|
||||
sudo /home/admin/config.scripts/blitz.setpassword.sh a
|
||||
dialog --backtitle "RaspiBlitz" --msgbox "OK - password A was set\nfor all users pi, admin, root & bitcoin" 6 52
|
||||
|
||||
sudo /home/admin/config.scripts/blitz.setpassword.sh b
|
||||
dialog --backtitle "RaspiBlitz" --msgbox "OK - password B was set\nit will be used by additional apps you install." 6 52
|
||||
|
||||
else
|
||||
|
||||
# just password A
|
||||
dialog --backtitle "RaspiBlitz - Recover Setup" --msgbox "Your previous RaspiBlitz config was recovered.
|
||||
|
||||
You need to set a new Password A:
|
||||
A) Master User Password
|
||||
|
||||
Passwords B & C stay as before.
|
||||
|
||||
Follow Password Rules: Minimal of 8 chars,
|
||||
no spaces and only special characters - or .
|
||||
Write them down & store them in a safe place.
|
||||
" 14 52
|
||||
|
||||
# call set password a script
|
||||
sudo /home/admin/config.scripts/blitz.setpassword.sh a
|
||||
|
||||
# sucess info dialog
|
||||
dialog --backtitle "RaspiBlitz" --msgbox "OK - password A was set\nfor all users pi, admin, root & bitcoin" 6 52
|
||||
|
||||
fi
|
||||
|
||||
# activate lnd & bitcoin service
|
||||
echo "Enabling Services"
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable lnd.service
|
||||
sudo systemctl enable ${network}d.service
|
||||
if [ "${rtlWebinterface}" = "on" ]; then
|
||||
sudo systemctl enable RTL
|
||||
fi
|
||||
if [ "${loop}" = "on" ]; then
|
||||
sudo systemctl enable loopd
|
||||
fi
|
||||
if [ "${BTCRPCexplorer}" = "on" ]; then
|
||||
sudo systemctl enable btc-rpc-explorer
|
||||
fi
|
||||
if [ "${ElectRS}" = "on" ]; then
|
||||
sudo systemctl enable electrs
|
||||
fi
|
||||
|
||||
# remove flag that freshly recovered
|
||||
sudo rm /home/admin/recover.flag
|
||||
|
||||
# when auto-unlock is activated then Password C is needed to be restored on SD card
|
||||
if [ "${autoUnlock}" = "on" ]; then
|
||||
|
||||
# reset auto-unlock feature
|
||||
dialog --backtitle "RaspiBlitz - Setup" --msgbox "You had the Auto-Unlock feature enabled.
|
||||
|
||||
In the next dialog you need to re-enter your
|
||||
ACTUAL/OLD Password C to re-activate the
|
||||
Auto-Unlock feature. Enter a empty password
|
||||
to deactivate the Auto-Unlock feature.
|
||||
" 10 52
|
||||
echo "Activating Auto-Unlock (please wait) .."
|
||||
sudo /home/admin/config.scripts/lnd.autounlock.sh on
|
||||
dialog --backtitle "RaspiBlitz" --pause " FINAL REBOOT IS NEEDED." 8 52 5
|
||||
|
||||
else
|
||||
dialog --backtitle "RaspiBlitz" --pause " OK - Passwords set.\n FINAL REBOOT IS NEEDED." 9 52 5
|
||||
fi
|
||||
|
||||
sudo /home/admin/XXshutdown.sh reboot
|
@ -1,90 +0,0 @@
|
||||
#!/bin/bash
|
||||
_temp=$(mktemp -p /dev/shm/)
|
||||
|
||||
## get basic info
|
||||
source /home/admin/raspiblitz.info 2>/dev/null
|
||||
|
||||
###################
|
||||
# CHECK IF DNS NEEDS SETTING DURING SETUP
|
||||
# https://github.com/rootzoll/raspiblitz/issues/787
|
||||
###################
|
||||
sudo /home/admin/config.scripts/internet.dns.sh test
|
||||
|
||||
###################
|
||||
# ENTER NAME
|
||||
###################
|
||||
|
||||
# welcome and ask for name of RaspiBlitz
|
||||
result=""
|
||||
while [ ${#result} -eq 0 ]
|
||||
do
|
||||
l1="Please enter the name of your new RaspiBlitz:\n"
|
||||
l2="one word, keep characters basic & not too long"
|
||||
dialog --backtitle "RaspiBlitz - Setup (${network}/${chain})" --inputbox "$l1$l2" 11 52 2>$_temp
|
||||
result=$( cat $_temp | tr -dc '[:alnum:]-.' | tr -d ' ' )
|
||||
shred -u $_temp
|
||||
echo "processing ..."
|
||||
sleep 3
|
||||
done
|
||||
|
||||
# set lightning alias
|
||||
sed -i "s/^alias=.*/alias=${result}/g" /home/admin/assets/lnd.${network}.conf
|
||||
|
||||
# store hostname for later - to be set right before the next reboot
|
||||
# work around - because without a reboot the hostname seems not updates in the whole system
|
||||
valueExistsInInfoFile=$(sudo cat /home/admin/raspiblitz.info | grep -c "hostname=")
|
||||
if [ ${valueExistsInInfoFile} -eq 0 ]; then
|
||||
# add
|
||||
echo "hostname=${result}" >> /home/admin/raspiblitz.info
|
||||
else
|
||||
# update
|
||||
sed -i "s/^hostname=.*/hostname=${result}/g" /home/admin/raspiblitz.info
|
||||
fi
|
||||
|
||||
###################
|
||||
# ENTER PASSWORDS
|
||||
###################
|
||||
|
||||
# show password info dialog
|
||||
dialog --backtitle "RaspiBlitz - Setup (${network}/${chain})" --msgbox "RaspiBlitz uses 4 different passwords.
|
||||
Referenced as password A, B, C and D.
|
||||
|
||||
A) Master User Password
|
||||
B) Blockchain RPC Password
|
||||
C) LND Wallet Password
|
||||
D) LND Seed Password
|
||||
|
||||
Choose now 4 new passwords - all min 8 chars,
|
||||
no spaces and only special characters - or .
|
||||
Write them down & store them in a safe place.
|
||||
" 15 52
|
||||
|
||||
# call set password a script
|
||||
sudo /home/admin/config.scripts/blitz.setpassword.sh a
|
||||
|
||||
# sucess info dialog
|
||||
dialog --backtitle "RaspiBlitz" --msgbox "OK - password A was set\nfor all users pi, admin, root & bitcoin" 6 52
|
||||
|
||||
# call set password b script
|
||||
sudo /home/admin/config.scripts/blitz.setpassword.sh b
|
||||
|
||||
# success info dialog
|
||||
dialog --backtitle "RaspiBlitz" --msgbox "OK - RPC password changed \n\nNow starting the Setup of your RaspiBlitz." 7 52
|
||||
|
||||
###################
|
||||
# TOR BY DEFAULT
|
||||
# https://github.com/rootzoll/raspiblitz/issues/592
|
||||
#
|
||||
###################
|
||||
echo "runBehindTor=on" >> /home/admin/raspiblitz.info
|
||||
#whiptail --title ' Privacy Level - How do you want to run your node? ' --yes-button='Public IP' --no-button='TOR NETWORK' --yesno "Running your Lightning node with your Public IP is common and faster, but might reveal your personal identity and location.\n
|
||||
#You can better protect your privacy with running your lightning node as a TOR Hidden Service from the start, but it can make it harder to connect with other non-TOR nodes and remote mobile apps later on.
|
||||
# " 12 75
|
||||
#if [ $? -eq 1 ]; then
|
||||
# echo "runBehindTor=on" >> /home/admin/raspiblitz.info
|
||||
#fi
|
||||
|
||||
# set SetupState
|
||||
sudo sed -i "s/^setupStep=.*/setupStep=20/g" /home/admin/raspiblitz.info
|
||||
|
||||
clear
|
@ -1,136 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
## get basic info
|
||||
source /home/admin/raspiblitz.info
|
||||
|
||||
clear
|
||||
echo ""
|
||||
echo "# *** 30initHDD.sh ***"
|
||||
echo
|
||||
echo "# --> Checking HDD/SSD status..."
|
||||
|
||||
# use blitz.datadrive.sh to analyse HDD situation
|
||||
source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status ${network})
|
||||
if [ ${#error} -gt 0 ]; then
|
||||
echo "# FAIL blitz.datadrive.sh status --> ${error}"
|
||||
echo "# Please report issue to the raspiblitz github."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# check if HDD is mounted (secure against formatting a mounted disk with data)
|
||||
echo "isMounted=${isMounted}"
|
||||
if [ ${isMounted} -eq 1 ]; then
|
||||
echo "# FAIL HDD/SSD is mounted - please unmount and call ./30initHDD.sh again"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# check if HDD contains old RaspiBlitz data (secure against wrongly formatting)
|
||||
echo "hddRaspiData=${hddRaspiData}"
|
||||
if [ ${hddRaspiData} -eq 1 ]; then
|
||||
echo "# FAIL HDD/SSD contains old data - please delete manual and call ./30initHDD.sh again"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# check if there is a HDD connectecd to use as data drive
|
||||
echo "hddCandidate=${hddCandidate}"
|
||||
if [ ${#hddCandidate} -eq 0 ]; then
|
||||
echo "# FAIL please connect a HDD and call ./30initHDD.sh again"
|
||||
exit 1
|
||||
fi
|
||||
echo "OK"
|
||||
|
||||
# check minimal size of data drive needed
|
||||
echo
|
||||
echo "# --> Check HDD/SSD for Size ..."
|
||||
# bitcoin: 400 GB
|
||||
# litecoin: 120 GB
|
||||
minSize=400
|
||||
if [ "${network}" = "litecoin" ]; then
|
||||
minSize=120
|
||||
fi
|
||||
if [ ${hddGigaBytes} -lt ${minSize} ]; then
|
||||
echo "# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
|
||||
echo "# WARNING: HDD is too small"
|
||||
echo "# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
|
||||
echo ""
|
||||
echo "# HDD was detected with the size of ${hddGigaBytes} GB"
|
||||
echo "# For ${network} at least ${minSize} GB is needed"
|
||||
echo ""
|
||||
echo "# If you want to change to a bigger HDD:"
|
||||
echo "# * Unplug power of RaspiBlitz"
|
||||
echo "# * Make a fresh SD card again"
|
||||
echo "# * Start again with bigger HDD"
|
||||
exit 1
|
||||
fi
|
||||
echo " OK"
|
||||
|
||||
# format drive if it does not have any blockchain or blitz data on it
|
||||
# to be sure that HDD has no faulty partions, etc.
|
||||
echo
|
||||
echo "# --> Check HDD/SSD for Blockchain ..."
|
||||
echo "# hddGotBlockchain=${hddGotBlockchain}"
|
||||
raidSizeGB=$(echo "${raidCandidate[0]}" | cut -d " " -f 2)
|
||||
echo "# raidCandidates=${raidCandidates}"
|
||||
echo "# raidSizeGB=${raidSizeGB}"
|
||||
if [ "${hddGotBlockchain}" == "" ] || [ ${hddGotBlockchain} -eq 0 ]; then
|
||||
|
||||
format="ext4"
|
||||
|
||||
# test feature: if there is a USB stick as a raid connected, then format in BTRFS an not in EXT4
|
||||
if [ ${raidCandidates} -eq 1 ] && [ ${raidSizeGB} -gt 14 ]; then
|
||||
|
||||
echo
|
||||
echo "# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
|
||||
echo "# EXPERIMENTAL FEATURE: BTRFS + RAID"
|
||||
echo "# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
|
||||
echo "# You connected an extra USB thumb drive to your RaspiBlitz."
|
||||
echo "# This activates the exterimental feature of running BTRFS"
|
||||
echo "# instead of EXT4 and is still unstable but needs testing."
|
||||
echo "# PRESS ENTER to continue with BTRFS+RAID setup or press"
|
||||
echo "# CTRL+C, remove device & call ./30initHDD.sh again."
|
||||
read key
|
||||
format="btrfs"
|
||||
|
||||
# check that raid cadidate is big enough
|
||||
# a 32GB drive gets shown with 28GB in mby tests
|
||||
if [ ${raidSizeGB} -lt 27 ]; then
|
||||
echo "# FAIL the raid device needs to be at least a 32GB thumb drive."
|
||||
echo "# Please remove or replace and call ./30initHDD.sh again"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
elif [ ${raidCandidates} -gt 1 ]; then
|
||||
echo "# FAIL more then one USB raid drive candidate connected."
|
||||
echo "# Please max one extra usb drive and the call ./30initHDD.sh again"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
# now partition/format HDD
|
||||
echo
|
||||
if (whiptail --title "FORMAT HDD/SSD" --yesno "The connected hard drive needs to get formatted.\nIMPORTANT: This will delete all data on that drive." 8 56); then
|
||||
clear
|
||||
echo "# --> Formatting HDD/SSD ..."
|
||||
source <(sudo /home/admin/config.scripts/blitz.datadrive.sh format ${format} ${hddCandidate})
|
||||
if [ ${#error} -gt 0 ]; then
|
||||
echo "# FAIL blitz.datadrive.sh format --> ${error}"
|
||||
echo "# Please report issue to the raspiblitz github."
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
clear
|
||||
echo "# Not formatting the HDD/SSD - Setup Process stopped."
|
||||
echo "# Rearrange your hardware and restart with a fresh sd card again."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
fi
|
||||
echo "# OK"
|
||||
|
||||
# set SetupState
|
||||
sudo sed -i "s/^setupStep=.*/setupStep=30/g" /home/admin/raspiblitz.info
|
||||
|
||||
# automatically now add the HDD to the system
|
||||
./40addHDD.sh
|
||||
|
||||
|
@ -1,165 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
## get basic info
|
||||
source /home/admin/raspiblitz.info
|
||||
|
||||
echo ""
|
||||
echo "# *** 40addHDD.sh ***"
|
||||
|
||||
# use blitz.datadrive.sh to analyse HDD situation
|
||||
source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status ${network})
|
||||
if [ ${#error} -gt 0 ]; then
|
||||
echo "FAIL blitz.datadrive.sh status --> ${error}"
|
||||
echo "Please report issue to the raspiblitz github."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# temp mount
|
||||
if [ "$hddFormat" == "btrfs" ]; then
|
||||
source <(sudo /home/admin/config.scripts/blitz.datadrive.sh tempmount ${hddCandidate})
|
||||
else
|
||||
source <(sudo /home/admin/config.scripts/blitz.datadrive.sh tempmount ${hddPartitionCandidate})
|
||||
fi
|
||||
|
||||
if [ ${#error} -gt 0 ]; then
|
||||
echo "FAIL blitz.datadrive.sh tempmount --> ${error}"
|
||||
echo "Please report issue to the raspiblitz github."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# linking drives/directories
|
||||
echo
|
||||
echo "# --> Linking drives/directories"
|
||||
echo "# hddCandidate='${hddCandidate}'"
|
||||
echo "# hddPartitionCandidate='${hddPartitionCandidate}'"
|
||||
source <(sudo /home/admin/config.scripts/blitz.datadrive.sh link)
|
||||
if [ ${#error} -gt 0 ]; then
|
||||
echo "FAIL blitz.datadrive.sh link --> ${error}"
|
||||
echo "Please report issue to the raspiblitz github."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# adding drives to fstab for permanent mount
|
||||
echo
|
||||
echo "# --> Adding the data drive to OS ..."
|
||||
echo "# hddCandidate='${hddCandidate}'"
|
||||
echo "# hddPartitionCandidate='${hddPartitionCandidate}'"
|
||||
echo "# hddFormat='${hddFormat}'"
|
||||
if [ "$hddFormat" == "btrfs" ]; then
|
||||
source <(sudo /home/admin/config.scripts/blitz.datadrive.sh fstab ${hddCandidate})
|
||||
else
|
||||
source <(sudo /home/admin/config.scripts/blitz.datadrive.sh fstab ${hddPartitionCandidate})
|
||||
fi
|
||||
|
||||
if [ ${#error} -gt 0 ]; then
|
||||
echo "FAIL blitz.datadrive.sh fstab --> ${error}"
|
||||
echo "Please report issue to the raspiblitz github."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# adding RAID drive
|
||||
echo "# isBTRFS=${isBTRFS}"
|
||||
echo "# raidCandidates=${raidCandidates}"
|
||||
if [ ${isBTRFS} -eq 1 ] && [ ${raidCandidates} -eq 1 ]; then
|
||||
|
||||
# example string: 'sdb 28 GB SanDisk'
|
||||
raidDevice=$(echo "${raidCandidate[0]}" | cut -d " " -f 1)
|
||||
raidSizeGB=$(echo "${raidCandidate[0]}" | cut -d " " -f 2)
|
||||
|
||||
echo
|
||||
echo "# --> Adding Raid Drive ..."
|
||||
echo "# raidDevice='${raidDevice}'"
|
||||
echo "# raidSizeGB=${raidSizeGB}"
|
||||
source <(sudo /home/admin/config.scripts/blitz.datadrive.sh raid on ${raidDevice})
|
||||
if [ ${#error} -gt 0 ]; then
|
||||
echo "# FAIL blitz.datadrive.sh raid on --> ${error}"
|
||||
echo "# Please report issue to the raspiblitz github."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
# init the RASPIBLITZ Config
|
||||
echo
|
||||
echo "# --> Init raspiblitz.conf ..."
|
||||
configFile="/mnt/hdd/raspiblitz.conf"
|
||||
configExists=$(sudo ls ${configFile} 2>/dev/null | grep -c 'raspiblitz.conf')
|
||||
if [ ${configExists} -eq 1 ]; then
|
||||
|
||||
# config exists - nothing much to do
|
||||
echo "# config file already exists on HDD/SSD"
|
||||
sudo chmod 777 ${configFile}
|
||||
|
||||
else
|
||||
|
||||
# create file and use init values from raspiblitz.info
|
||||
echo "# CREATING new ${configFile}"
|
||||
source /home/admin/_version.info
|
||||
echo "# RASPIBLITZ CONFIG FILE" > /home/admin/raspiblitz.conf
|
||||
echo "raspiBlitzVersion='${codeVersion}'" >> /home/admin/raspiblitz.conf
|
||||
echo "network=${network}" >> /home/admin/raspiblitz.conf
|
||||
echo "chain=${chain}" >> /home/admin/raspiblitz.conf
|
||||
echo "hostname=${hostname}" >> /home/admin/raspiblitz.conf
|
||||
echo "displayClass=${displayClass}" >> /home/admin/raspiblitz.conf
|
||||
echo "displayType=${displayType}" >> /home/admin/raspiblitz.conf
|
||||
echo "lcdrotate=1" >> /home/admin/raspiblitz.conf
|
||||
|
||||
sudo mv /home/admin/raspiblitz.conf $configFile
|
||||
sudo chown root:root ${configFile}
|
||||
sudo chmod 777 ${configFile}
|
||||
sleep 3
|
||||
|
||||
# try to determine publicIP and make sure its in raspiblitz.conf
|
||||
# https://github.com/rootzoll/raspiblitz/issues/312#issuecomment-462675101
|
||||
/home/admin/config.scripts/internet.sh update-publicip
|
||||
|
||||
fi
|
||||
|
||||
# link ssh directory from SD card to HDD
|
||||
echo "# --> SSH key settings"
|
||||
echo "# copying SSH pub keys to HDD"
|
||||
sudo cp -r /etc/ssh /mnt/hdd/ssh
|
||||
# just copy dont link anymore
|
||||
# see: https://github.com/rootzoll/raspiblitz/issues/1798
|
||||
#sudo rm -rf /etc/ssh
|
||||
#sudo ln -s /mnt/hdd/ssh /etc/ssh
|
||||
#sudo /home/admin/config.scripts/blitz.systemd.sh update-sshd
|
||||
echo "# OK"
|
||||
echo ""
|
||||
|
||||
# set SetupState
|
||||
sudo sed -i "s/^setupStep=.*/setupStep=40/g" /home/admin/raspiblitz.info
|
||||
|
||||
# check if HDD contains a blockchain to work with
|
||||
echo "hddGotBlockchain=${hddGotBlockchain}"
|
||||
if [ ${hddGotBlockchain} -eq 1 ]; then
|
||||
|
||||
echo "# Looks like the HDD is prepared with the Blockchain."
|
||||
|
||||
# ask user if prepared blockchain is to use or self-validate
|
||||
whiptail --title ' Use Blockchain from HDD/SSD? ' --yes-button='Continue' --no-button='DELETE' --yesno "
|
||||
On the HDD/SSD Blockchain data was found.\n
|
||||
Continue if you trust that data to be valid.\n
|
||||
If you dont trust that data you can now choose to delete it - but keep in mind that this can add multiple days of waiting time to your setup process to regain or self-validate the initial blockchain data.
|
||||
" 14 75
|
||||
if [ $? -eq 1 ]; then
|
||||
# DELETE
|
||||
echo "# Deleting old blockchain data .."
|
||||
sudo rm -R /mnt/hdd/bitcoin 2>/dev/null
|
||||
sudo rm -R /mnt/hdd/litecoin 2>/dev/null
|
||||
# HDD is now empty - let setupBlitz - display next options
|
||||
echo "# HDD now empty --> follow further setup"
|
||||
./10setupBlitz.sh
|
||||
else
|
||||
# CONTINUE
|
||||
echo "# Continuing with finishing the system setup ..."
|
||||
./60finishHDD.sh
|
||||
fi
|
||||
|
||||
else
|
||||
|
||||
# HDD is empty - let setupBlitz - display next options
|
||||
echo "# HDD empty --> follow further setup"
|
||||
./10setupBlitz.sh
|
||||
|
||||
fi
|
@ -1,256 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
## get basic info
|
||||
source /home/admin/raspiblitz.info
|
||||
|
||||
# get local ip
|
||||
localip=$(ip addr | grep 'state UP' -A2 | egrep -v 'docker0|veth' | grep 'eth0\|wlan0\|enp0' | tail -n1 | awk '{print $2}' | cut -f1 -d'/')
|
||||
|
||||
# Basic Options
|
||||
OPTIONS=(WINDOWS "Windows" \
|
||||
MACOS "Apple MacOSX" \
|
||||
LINUX "Linux" \
|
||||
BLITZ "RaspiBlitz"
|
||||
)
|
||||
|
||||
CHOICE=$(dialog --clear --title " Copy Blockchain from another laptop/node over LAN " --menu "\nWhich system is running on the other laptop/node you want to copy the blockchain from?\n " 14 60 9 "${OPTIONS[@]}" 2>&1 >/dev/tty)
|
||||
|
||||
clear
|
||||
case $CHOICE in
|
||||
MACOS) echo "Steve";;
|
||||
LINUX) echo "Linus";;
|
||||
WINDOWS) echo "Bill";;
|
||||
BLITZ) echo "Satoshi";;
|
||||
*) exit 1;;
|
||||
esac
|
||||
|
||||
# additional prep if this is used to replace corrupted blockchain
|
||||
if [ "${setupStep}" = "100" ]; then
|
||||
# make sure services are not running
|
||||
echo "stopping services ..."
|
||||
sudo systemctl stop background
|
||||
sudo systemctl stop lnd
|
||||
sudo systemctl stop bitcoind
|
||||
sudo cp -f /mnt/hdd/bitcoin/bitcoin.conf /home/admin/assets/bitcoin.conf
|
||||
else
|
||||
# make sure bitcoind is not running
|
||||
sudo systemctl stop background <2 /dev/null
|
||||
sudo systemctl stop bitcoind <2 /dev/null
|
||||
fi
|
||||
|
||||
# check if old blockchain data exists
|
||||
hasOldBlockchainData=0
|
||||
sizeBlocks=$(sudo du -s /mnt/hdd/bitcoin/blocks 2>/dev/null | tr -dc '[0-9]')
|
||||
if [ ${#sizeBlocks} -gt 0 ] && [ ${sizeBlocks} -gt 0 ]; then
|
||||
hasOldBlockchainData=1
|
||||
fi
|
||||
sizeChainstate=$(sudo du -s /mnt/hdd/bitcoin/chainstate 2>/dev/null | tr -dc '[0-9]')
|
||||
if [ ${#sizeChainstate} -gt 0 ] && [ ${sizeChainstate} -gt 0 ]; then
|
||||
hasOldBlockchainData=1
|
||||
fi
|
||||
|
||||
if [ ${hasOldBlockchainData} -eq 1 ] && [ "$1" != "stop-after-script" ]; then
|
||||
dialog --title " Old Blockchain Data Found " --yesno "\nDo you want to delete the existing blockchain data now?" 7 60
|
||||
response=$?
|
||||
echo "response(${response})"
|
||||
if [ "${response}" = "1" ]; then
|
||||
echo "OK - keep old blockchain - just try to repair by copying over it"
|
||||
sleep 3
|
||||
else
|
||||
echo "OK - delete old blockchain"
|
||||
sudo rm -rfv /mnt/hdd/bitcoin/blocks/* 2>/dev/null
|
||||
sudo rm -rfv /mnt/hdd/bitcoin/chainstate/* 2>/dev/null
|
||||
sleep 3
|
||||
fi
|
||||
fi
|
||||
|
||||
# make sure /mnt/hdd/bitcoin exists
|
||||
sudo mkdir /mnt/hdd/bitcoin 2>/dev/null
|
||||
|
||||
# allow all users write to it
|
||||
sudo chmod 777 /mnt/hdd/bitcoin
|
||||
|
||||
echo
|
||||
clear
|
||||
if [ "${CHOICE}" = "WINDOWS" ]; then
|
||||
echo "****************************************************************************"
|
||||
echo "Instructions to COPY/TRANSFER SYNCED BLOCKCHAIN from a WINDOWS computer"
|
||||
echo "****************************************************************************"
|
||||
echo ""
|
||||
echo "ON YOUR WINDOWS COMPUTER download and validate the blockchain with the Bitcoin"
|
||||
echo "Core wallet software (>=0.17.1) from: bitcoincore.org/en/download"
|
||||
echo "If the Bitcoin Blockchain is synced up - make sure that your Windows computer &"
|
||||
echo "your RaspiBlitz are in the same local network."
|
||||
echo ""
|
||||
echo "Open a fresh terminal on your Windows computer & change into the directory that"
|
||||
echo "contains the blockchain data - should see folders named 'blocks' & 'chainstate'"
|
||||
echo "there. Normally on Windows thats: C:\Users\YourUserName\Appdata\Roaming\Bitcoin"
|
||||
echo "Make sure that the Bitcoin Core Wallet is not running in the background anymore."
|
||||
echo ""
|
||||
echo "COPY, PASTE & EXECUTE the following command on your Windows computer terminal:"
|
||||
echo "scp -r ./chainstate ./blocks bitcoin@${localip}:/mnt/hdd/bitcoin"
|
||||
echo ""
|
||||
echo "If asked for a password use PASSWORD A (or 'raspiblitz')."
|
||||
fi
|
||||
if [ "${CHOICE}" = "MACOS" ]; then
|
||||
echo "****************************************************************************"
|
||||
echo "Instructions to COPY/TRANSFER SYNCED BLOCKCHAIN from a MacOSX computer"
|
||||
echo "****************************************************************************"
|
||||
echo ""
|
||||
echo "ON YOUR MacOSX COMPUTER download and validate the blockchain with the Bitcoin"
|
||||
echo "Core wallet software (>=0.17.1) from: bitcoincore.org/en/download"
|
||||
echo "If the Bitcoin Blockchain is synced up - make sure that your MacOSX computer &"
|
||||
echo "your RaspiBlitz are in the same local network."
|
||||
echo ""
|
||||
echo "Open a fresh terminal on your MacOSX computer and change into the directory that"
|
||||
echo "contains the blockchain data - should see folders named 'blocks' & 'chainstate'"
|
||||
echo "there. Normally on MacOSX thats: cd ~/Library/Application Support/Bitcoin/"
|
||||
echo "Make sure that the Bitcoin Core Wallet is not running in the background anymore."
|
||||
echo ""
|
||||
echo "COPY, PASTE & EXECUTE the following command on your MacOSX terminal:"
|
||||
echo "sudo rsync -avhW --progress ./chainstate ./blocks bitcoin@${localip}:/mnt/hdd/bitcoin"
|
||||
echo ""
|
||||
echo "You will be asked for passwords. First can be the user password of your MacOSX"
|
||||
echo "computer and the last is the PASSWORD A (or 'raspiblitz') of this RaspiBlitz."
|
||||
fi
|
||||
if [ "${CHOICE}" = "LINUX" ]; then
|
||||
echo "****************************************************************************"
|
||||
echo "Instructions to COPY/TRANSFER SYNCED BLOCKCHAIN from a LINUX computer"
|
||||
echo "****************************************************************************"
|
||||
echo ""
|
||||
echo "ON YOUR LINUX COMPUTER download and validate the blockchain with the Bitcoin"
|
||||
echo "Core wallet software (>=0.17.1) from: bitcoincore.org/en/download"
|
||||
echo "If the Bitcoin Blockchain is synced up - make sure that your Linux computer &"
|
||||
echo "your RaspiBlitz are in the same local network."
|
||||
echo ""
|
||||
echo "Open a fresh terminal on your Linux computer and change into the directory that"
|
||||
echo "contains the blockchain data - should see folders named 'blocks' & 'chainstate'"
|
||||
echo "there. Normally on Linux thats: cd ~/.bitcoin/"
|
||||
echo "Make sure that the Bitcoin Core Wallet is not running in the background anymore."
|
||||
echo ""
|
||||
echo "COPY, PASTE & EXECUTE the following command on your Linux terminal:"
|
||||
echo "sudo rsync -avhW --progress ./chainstate ./blocks bitcoin@${localip}:/mnt/hdd/bitcoin"
|
||||
echo ""
|
||||
echo "You will be asked for passwords. First can be the user password of your Linux"
|
||||
echo "computer and the last is the PASSWORD A (or 'raspiblitz') of this RaspiBlitz."
|
||||
fi
|
||||
if [ "${CHOICE}" = "BLITZ" ]; then
|
||||
echo "****************************************************************************"
|
||||
echo "Instructions to COPY/TRANSFER SYNCED BLOCKCHAIN from another RaspiBlitz"
|
||||
echo "****************************************************************************"
|
||||
echo ""
|
||||
echo "The other RaspiBlitz needs a minimum version of 1.6 (if lower, update first)."
|
||||
echo "Make sure that the other RaspiBlitz is on the same local network."
|
||||
echo ""
|
||||
echo "Open a fresh terminal and login per SSH into that other RaspiBlitz."
|
||||
echo "Once in the main menu go: MAINMENU > REPAIR > COPY-SOURCE"
|
||||
echo "Follow the given instructions ..."
|
||||
echo ""
|
||||
echo "The LOCAL IP of this target RaspiBlitz is: ${localip}"
|
||||
fi
|
||||
echo ""
|
||||
echo "It can take multiple hours until transfer is complete - be patient."
|
||||
echo "****************************************************************************"
|
||||
echo "PRESS ENTER if transfers is done OR if you want to choose another option."
|
||||
sleep 2
|
||||
read key
|
||||
|
||||
# make quick check if data is there
|
||||
anyDataAtAll=0
|
||||
quickCheckOK=1
|
||||
count=$(sudo find /mnt/hdd/bitcoin/ -iname *.dat -type f | wc -l)
|
||||
if [ ${count} -gt 0 ]; then
|
||||
echo "Found data in /mnt/hdd/bitcoin/blocks"
|
||||
anyDataAtAll=1
|
||||
fi
|
||||
if [ ${count} -lt 300 ]; then
|
||||
echo "FAIL: transfer seems invalid - less then 300 .dat files (${count})"
|
||||
quickCheckOK=0
|
||||
fi
|
||||
count=$(sudo find /mnt/hdd/bitcoin/ -iname *.ldb -type f | wc -l)
|
||||
if [ ${count} -gt 0 ]; then
|
||||
echo "Found data in /mnt/hdd/bitcoin/chainstate"
|
||||
anyDataAtAll=1
|
||||
fi
|
||||
if [ ${count} -lt 700 ]; then
|
||||
echo "FAIL: transfer seems invalid - less then 700 .ldb files (${count})"
|
||||
quickCheckOK=0
|
||||
fi
|
||||
|
||||
echo "*********************************************"
|
||||
echo "QUICK CHECK RESULT"
|
||||
echo "*********************************************"
|
||||
|
||||
# just if any data transferred ..
|
||||
if [ ${anyDataAtAll} -eq 1 ]; then
|
||||
|
||||
# data was invalid - ask user to keep?
|
||||
if [ ${quickCheckOK} -eq 0 ]; then
|
||||
|
||||
echo "FAIL -> DATA seems incomplete."
|
||||
|
||||
else
|
||||
|
||||
echo "OK -> DATA LOOKS GOOD :D"
|
||||
sudo rm /mnt/hdd/bitcoin/debug.log 2>/dev/null
|
||||
|
||||
fi
|
||||
|
||||
else
|
||||
|
||||
echo "CANCEL -> NO DATA was copied."
|
||||
quickCheckOK=0
|
||||
|
||||
fi
|
||||
echo "*********************************************"
|
||||
|
||||
# if started with parameter "stop-after-script" - quit here
|
||||
if [ "$1" == "stop-after-script" ]; then
|
||||
echo "DONE Copy"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# if started after intial setup - quit here
|
||||
if [ "${setupStep}" = "100" ]; then
|
||||
sudo cp /home/admin/assets/bitcoin.conf /mnt/hdd/bitcoin/bitcoin.conf
|
||||
sudo systemctl enable bitcoind
|
||||
echo "DONE - rebooting: sudo shutdown -r now"
|
||||
sudo shutdown -r now
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# REACT ON QUICK CHECK DURING INITAL SETUP
|
||||
|
||||
if [ ${quickCheckOK} -eq 0 ]; then
|
||||
|
||||
echo "*********************************************"
|
||||
echo "There seems to be an invalid transfer."
|
||||
|
||||
echo "Wait 5 secs ..."
|
||||
sleep 5
|
||||
|
||||
dialog --title " INVALID TRANSFER - TRY AGAIN?" --yesno "Quickcheck shows the data you transferred is invalid/incomplete. Maybe transfere was interrupted and not completed.\n\nDo you want retry/proceed the copy process?" 8 70
|
||||
response=$?
|
||||
echo "response(${response})"
|
||||
if [ "${response}" == "0" ]; then
|
||||
/home/admin/50copyHDD.sh
|
||||
exit 0
|
||||
fi
|
||||
|
||||
dialog --title " INVALID TRANSFER - DELETE DATA?" --yesno "Quickcheck shows the data you transferred is invalid/incomplete. This can lead further RaspiBlitz setup to get stuck in error state.\nDo you want to reset/delete data?" 8 60
|
||||
response=$?
|
||||
echo "response(${response})"
|
||||
case $response in
|
||||
1) quickCheckOK=1 ;;
|
||||
esac
|
||||
|
||||
fi
|
||||
|
||||
if [ ${quickCheckOK} -eq 0 ]; then
|
||||
echo "Deleting invalid Data ... "
|
||||
sudo rm -rf /mnt/hdd/bitcoin
|
||||
sleep 2
|
||||
fi
|
||||
|
||||
# setup script will decide the next logical step
|
||||
/home/admin/10setupBlitz.sh
|
@ -1,98 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
## get basic info
|
||||
source /home/admin/raspiblitz.info
|
||||
|
||||
# only show warning when bitcoin
|
||||
if [ "$network" = "bitcoin" ]; then
|
||||
|
||||
# detect hardware version of RaspberryPi
|
||||
# https://www.unixtutorial.org/command-to-confirm-raspberry-pi-model
|
||||
raspberryPi=$(cat /proc/device-tree/model | cut -d " " -f 3 | sed 's/[^0-9]*//g')
|
||||
if [ ${#raspberryPi} -eq 0 ]; then
|
||||
raspberryPi=0
|
||||
fi
|
||||
echo "RaspberryPi Model Version: ${raspberryPi}"
|
||||
if [ ${raspberryPi} -lt 4 ]; then
|
||||
# raspberryPi 3 and lower
|
||||
msg=" This old RaspberryPi has very limited CPU power.\n"
|
||||
msg="$msg To sync & validate the complete blockchain\n"
|
||||
msg="$msg can take multiple days - even weeks\n"
|
||||
msg="$msg Its recommended to use another option.\n"
|
||||
msg="$msg \n"
|
||||
msg="$msg So do you really want start syncing now?"
|
||||
dialog --title " WARNING " --yesno "${msg}" 11 57
|
||||
response=$?
|
||||
case $response in
|
||||
0) echo "--> OK";;
|
||||
1) exit 1;;
|
||||
255) exit 1;;
|
||||
esac
|
||||
fi
|
||||
fi
|
||||
|
||||
# ask if really sync behind TOR
|
||||
# if [ "${runBehindTor}" = "on" ]; then
|
||||
# whiptail --title ' Sync Blockchain from behind TOR? ' --yes-button='Public-Sync' --no-button='TOR-Sync' --yesno "You decided to run your node behind TOR and validate the blockchain with your RaspiBlitz - thats good. But downloading the complete blockchain thru TOR can add some extra time (maybe a day) to the process and adds a heavy load on the TOR network.\n
|
||||
#Your RaspiBlitz can just run the initial blockchain download with your public IP (Public-Sync) but keep your Lighting node safe behind TOR.
|
||||
#It would speed up the self-validation while not revealing your Lightning node identity. But for most privacy choose (TOR-Sync).
|
||||
# " 15 76
|
||||
# if [ $? -eq 0 ]; then
|
||||
# # set flag to not run bitcoin behind TOR during IDB
|
||||
# echo "ibdBehindTor=off" >> /home/admin/raspiblitz.info
|
||||
# fi
|
||||
#fi
|
||||
|
||||
echo "**********************************"
|
||||
echo "Dont Trust, verify - starting sync"
|
||||
echo "**********************************"
|
||||
echo ""
|
||||
sleep 3
|
||||
|
||||
|
||||
echo "*** Optimizing RAM for Sync ***"
|
||||
|
||||
kbSizeRAM=$(cat /proc/meminfo | grep "MemTotal" | sed 's/[^0-9]*//g')
|
||||
echo "dont forget to reduce dbcache once IBD is done" > "/home/admin/selfsync.flag"
|
||||
# RP4 4GB
|
||||
if [ ${kbSizeRAM} -gt 3500000 ]; then
|
||||
echo "Detected RAM >=4GB --> optimizing ${network}.conf"
|
||||
sudo sed -i "s/^dbcache=.*/dbcache=3072/g" /home/admin/assets/${network}.conf
|
||||
# RP4 2GB
|
||||
elif [ ${kbSizeRAM} -gt 1500000 ]; then
|
||||
echo "Detected RAM >=2GB --> optimizing ${network}.conf"
|
||||
sudo sed -i "s/^dbcache=.*/dbcache=1536/g" /home/admin/assets/${network}.conf
|
||||
# RP3/4 1GB
|
||||
else
|
||||
echo "Detected RAM <=1GB --> optimizing ${network}.conf"
|
||||
sudo sed -i "s/^dbcache=.*/dbcache=512/g" /home/admin/assets/${network}.conf
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "*** Activating Blockain Sync ***"
|
||||
|
||||
sudo mkdir /mnt/hdd/${network} 2>/dev/null
|
||||
sudo /home/admin/XXcleanHDD.sh -blockchain -force
|
||||
sudo -u bitcoin mkdir /mnt/hdd/${network}/blocks 2>/dev/null
|
||||
sudo -u bitcoin mkdir /mnt/hdd/${network}/chainstate 2>/dev/null
|
||||
|
||||
# set so that 10raspiblitz.sh has a flag to see that resync is running
|
||||
sudo touch /mnt/hdd/${network}/blocks/.selfsync
|
||||
sudo sed -i "s/^state=.*/state=sync/g" /home/admin/raspiblitz.info
|
||||
|
||||
echo "OK - sync is activated"
|
||||
|
||||
if [ "${setupStep}" = "100" ]; then
|
||||
|
||||
# start servives
|
||||
echo "reboot needed: shutdown -r now"
|
||||
|
||||
else
|
||||
|
||||
# set SetupState
|
||||
sudo sed -i "s/^setupStep=.*/setupStep=50/g" /home/admin/raspiblitz.info
|
||||
|
||||
# continue setup
|
||||
./60finishHDD.sh
|
||||
|
||||
fi
|
@ -1,89 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
## get basic info
|
||||
source /home/admin/raspiblitz.info
|
||||
source /mnt/hdd/raspiblitz.conf
|
||||
|
||||
echo ""
|
||||
echo "*** 60finishHDD.sh ***"
|
||||
|
||||
# use blitz.datadrive.sh to analyse HDD situation
|
||||
source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status ${network})
|
||||
if [ ${#error} -gt 0 ]; then
|
||||
echo "# FAIL blitz.datadrive.sh status --> ${error}"
|
||||
echo "# Please report issue to the raspiblitz github."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# check that data drive is mounted
|
||||
if [ ${isMounted} -eq 0 ]; then
|
||||
echo "# FAIL - HDD is not mounted."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
###### COPY BASIC NETWORK CONFIG
|
||||
|
||||
echo ""
|
||||
echo "*** Prepare ${network} ***"
|
||||
sudo cp /home/admin/assets/${network}.conf /mnt/hdd/${network}/${network}.conf
|
||||
sudo mkdir /home/admin/.${network} 2>/dev/null
|
||||
sudo cp /home/admin/assets/${network}.conf /home/admin/.${network}/${network}.conf
|
||||
|
||||
# make sure all files are linked correct
|
||||
sudo /home/admin/config.scripts/blitz.datadrive.sh link
|
||||
|
||||
# BLITZ WEB SERVICE
|
||||
/home/admin/config.scripts/blitz.web.sh on
|
||||
|
||||
###### ACTIVATE TOR IF SET DURING SETUP
|
||||
if [ "${runBehindTor}" = "on" ]; then
|
||||
|
||||
echo "runBehindTor --> ON"
|
||||
sudo /home/admin/config.scripts/internet.tor.sh on
|
||||
|
||||
# but if IBD is allowed to be public switch off TOR just fro bitcoin
|
||||
# until IBD is done. background service will after that switch TOR on
|
||||
if [ "${ibdBehindTor}" = "off" ]; then
|
||||
echo "ibdBehindTor --> OFF"
|
||||
sudo /home/admin/config.scripts/internet.tor.sh btcconf-off
|
||||
else
|
||||
echo "ibdBehindTor --> ON"
|
||||
fi
|
||||
|
||||
else
|
||||
echo "runBehindTor --> OFF"
|
||||
fi
|
||||
|
||||
###### START NETWORK SERVICE
|
||||
echo ""
|
||||
echo "*** Start ${network} ***"
|
||||
echo "- This can take a while .."
|
||||
sudo cp /home/admin/assets/${network}d.service /etc/systemd/system/${network}d.service
|
||||
#sudo chmod +x /etc/systemd/system/${network}d.service
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable ${network}d.service
|
||||
sudo systemctl start ${network}d.service
|
||||
|
||||
# check if bitcoin has started
|
||||
bitcoinRunning=0
|
||||
loopcount=0
|
||||
while [ ${bitcoinRunning} -eq 0 ]
|
||||
do
|
||||
>&2 echo "# (${loopcount}/200) checking if ${network}d is running ... "
|
||||
bitcoinRunning=$(${network}-cli getblockchaininfo 2>/dev/null | grep "initialblockdownload" -c)
|
||||
sleep 2
|
||||
sync
|
||||
loopcount=$(($loopcount +1))
|
||||
if [ ${loopcount} -gt 200 ]; then
|
||||
/home/admin/XXdebugLogs.sh
|
||||
echo "***********************************"
|
||||
echo "FAIL: ${network} failed to start :("
|
||||
echo "Get support or try again the command: raspiblitz"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
# set SetupState
|
||||
sudo sed -i "s/^setupStep=.*/setupStep=60/g" /home/admin/raspiblitz.info
|
||||
|
||||
./10setupBlitz.sh
|
@ -1,489 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
## get basic info
|
||||
source /home/admin/raspiblitz.info
|
||||
source /mnt/hdd/raspiblitz.conf
|
||||
|
||||
echo ""
|
||||
echo "*** 70initLND.sh ***"
|
||||
|
||||
# CHECK #########
|
||||
|
||||
echo "*** Check Basic Config ***"
|
||||
if [ ${#network} -eq 0 ]; then
|
||||
echo "FAIL - missing: network"
|
||||
exit 1
|
||||
fi
|
||||
if [ ${#chain} -eq 0 ]; then
|
||||
echo "FAIL - missing: chain"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# CHECK #########
|
||||
|
||||
echo "*** Check ${network} Running ***"
|
||||
bitcoinRunning=$(systemctl status ${network}d.service 2>/dev/null | grep -c running)
|
||||
if [ ${bitcoinRunning} -eq 0 ]; then
|
||||
bitcoinRunning=$(sudo -u bitcoin ${network}-cli -datadir=/home/bitcoin/.${network} getblockchaininfo | grep -c verificationprogress)
|
||||
fi
|
||||
if [ ${bitcoinRunning} -eq 0 ]; then
|
||||
whiptail --title "70initLND - WARNING" --yes-button "Retry" --no-button "EXIT+Logs" --yesno "Service ${network}d is not running." 8 50
|
||||
if [ $? -eq 0 ]; then
|
||||
/home/admin/70initLND.sh
|
||||
else
|
||||
/home/admin/XXdebugLogs.sh
|
||||
fi
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# CHECK #########
|
||||
|
||||
echo "*** Check ${network} Responding *** (can take a while)"
|
||||
chainIsReady=0
|
||||
loopCount=0
|
||||
while [ ${chainIsReady} -eq 0 ]
|
||||
do
|
||||
loopCount=$(($loopCount +1))
|
||||
result=$(sudo -u bitcoin ${network}-cli -datadir=/home/bitcoin/.${network} getblockchaininfo 2>error.out)
|
||||
error=$(cat error.out)
|
||||
rm error.out
|
||||
if [ ${#error} -gt 0 ]; then
|
||||
if [ ${loopCount} -gt 33 ]; then
|
||||
echo "*** TAKES LONGER THEN EXCEPTED ***"
|
||||
date +%s
|
||||
echo "result(${result})"
|
||||
echo "error(${error})"
|
||||
testnetAdd=""
|
||||
if [ "${chain}" = "test" ]; then
|
||||
testnetAdd="testnet3/"
|
||||
fi
|
||||
sudo tail -n 5 /mnt/hdd/${network}/${testnetAdd}debug.log
|
||||
echo "If you see an error -28 relax, just give it some time."
|
||||
echo "Waiting 1 minute and then trying again ..."
|
||||
sleep 60
|
||||
else
|
||||
echo "(${loopCount}/33) still waiting .."
|
||||
sleep 10
|
||||
fi
|
||||
else
|
||||
echo "OK - chainnetwork is working"
|
||||
echo ""
|
||||
chainIsReady=1
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
# CHECK #########
|
||||
|
||||
echo "*** Check LND Config ***"
|
||||
configExists=$( sudo ls /mnt/hdd/lnd/lnd.conf 2>/dev/null | grep -c lnd.conf )
|
||||
if [ ${configExists} -eq 0 ]; then
|
||||
echo "Creating LND config ..."
|
||||
sudo mkdir /mnt/hdd/lnd 2> /dev/null
|
||||
sudo chown -R bitcoin:bitcoin /mnt/hdd/lnd
|
||||
sudo cp /home/admin/assets/lnd.${network}.conf /mnt/hdd/lnd/lnd.conf
|
||||
sudo chown bitcoin:bitcoin /mnt/hdd/lnd/lnd.conf
|
||||
if [ -d /home/bitcoin/.lnd ]; then
|
||||
echo "OK - LND config written"
|
||||
else
|
||||
echo "FAIL - Was not able to setup LND"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo "OK - exists"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
###### Init LND service & start
|
||||
|
||||
echo "*** Init LND Service & Start ***"
|
||||
lndRunning=$(sudo systemctl status lnd.service 2>/dev/null | grep -c running)
|
||||
if [ ${lndRunning} -eq 0 ]; then
|
||||
|
||||
echo "stopping lnd .."
|
||||
sudo systemctl stop lnd 2>/dev/null
|
||||
sudo systemctl disable lnd 2>/dev/null
|
||||
|
||||
sed -i "5s/.*/Wants=${network}d.service/" /home/admin/assets/lnd.service
|
||||
sed -i "6s/.*/After=${network}d.service/" /home/admin/assets/lnd.service
|
||||
sudo cp /home/admin/assets/lnd.service /etc/systemd/system/lnd.service
|
||||
#sudo chmod +x /etc/systemd/system/lnd.service
|
||||
|
||||
###### ACTIVATE TOR IF SET DURING SETUP
|
||||
if [ "${runBehindTor}" = "on" ]; then
|
||||
echo "TOR was selected"
|
||||
sudo /home/admin/config.scripts/internet.tor.sh lndconf-on
|
||||
else
|
||||
echo "TOR was not selected"
|
||||
fi
|
||||
|
||||
echo "Starting LND Service ..."
|
||||
sudo systemctl enable lnd
|
||||
sudo systemctl start lnd
|
||||
|
||||
echo ""
|
||||
echo "waiting ."
|
||||
sleep 10
|
||||
echo "waiting .."
|
||||
sleep 10
|
||||
echo "waiting ..."
|
||||
sleep 10
|
||||
dialog --pause " Starting LND - please wait .." 8 58 90
|
||||
fi
|
||||
|
||||
###### Check LND starting
|
||||
|
||||
while [ ${lndRunning} -eq 0 ]
|
||||
do
|
||||
lndRunning=$(sudo systemctl status lnd.service | grep -c running)
|
||||
if [ ${lndRunning} -eq 0 ]; then
|
||||
date +%s
|
||||
echo "LND not ready yet ... waiting another 60 seconds."
|
||||
echo "If this takes too long (more then 10min total) --> CTRL+c and report Problem"
|
||||
sleep 60
|
||||
fi
|
||||
done
|
||||
echo "OK - LND is running"
|
||||
echo ""
|
||||
|
||||
###### Check LND health/fails (to be extended)
|
||||
fail=""
|
||||
tlsExists=$(sudo ls /mnt/hdd/lnd/tls.cert 2>/dev/null | grep -c "tls.cert")
|
||||
if [ ${tlsExists} -eq 0 ]; then
|
||||
fail="LND was starting, but missing /mnt/hdd/lnd/tls.cert"
|
||||
fi
|
||||
if [ ${#fail} -gt 0 ]; then
|
||||
whiptail --title "70initLND - WARNING" --yes-button "Retry" --no-button "EXIT+Logs" --yesno "${fail}" 8 50
|
||||
if [ $? -eq 0 ]; then
|
||||
/home/admin/70initLND.sh
|
||||
else
|
||||
/home/admin/XXdebugLogs.sh
|
||||
fi
|
||||
exit 1
|
||||
fi
|
||||
|
||||
###### Instructions on Creating/Restoring LND Wallet
|
||||
walletExists=$(sudo ls /mnt/hdd/lnd/data/chain/${network}/${chain}net/wallet.db 2>/dev/null | grep wallet.db -c)
|
||||
echo "walletExists(${walletExists})"
|
||||
sleep 2
|
||||
if [ ${walletExists} -eq 0 ]; then
|
||||
|
||||
# UI: Ask if user wants NEW wallet or RECOVER a wallet
|
||||
OPTIONS=(NEW "Setup a brand new Lightning Node (DEFAULT)" \
|
||||
OLD "I had an old Node I want to recover/restore")
|
||||
CHOICE=$(dialog --backtitle "RaspiBlitz" --clear --title "LND Setup" --menu "LND Data & Wallet" 11 60 6 "${OPTIONS[@]}" 2>&1 >/dev/tty)
|
||||
echo "choice($CHOICE)"
|
||||
|
||||
if [ "${CHOICE}" == "NEW" ]; then
|
||||
|
||||
############################
|
||||
# NEW WALLET
|
||||
############################
|
||||
|
||||
# let user enter password c
|
||||
sudo shred -u /var/cache/raspiblitz/.pass.tmp 2>/dev/null
|
||||
sudo touch /var/cache/raspiblitz/.pass.tmp
|
||||
sudo chown admin:admin /var/cache/raspiblitz/.pass.tmp
|
||||
sudo /home/admin/config.scripts/blitz.setpassword.sh x "Set your Password C for the LND Wallet Unlock" /var/cache/raspiblitz/.pass.tmp
|
||||
passwordC=$(sudo cat /var/cache/raspiblitz/.pass.tmp)
|
||||
sudo shred -u /var/cache/raspiblitz/.pass.tmp 2>/dev/null
|
||||
|
||||
# make sure passwordC is set
|
||||
if [ ${#passwordC} -eq 0 ]; then
|
||||
/home/admin/70initLND.sh
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# generate wallet with seed and set passwordC
|
||||
clear
|
||||
echo "Generating new Wallet ...."
|
||||
sudo touch /var/cache/raspiblitz/.seed.tmp
|
||||
sudo chown admin:admin /var/cache/raspiblitz/.seed.tmp
|
||||
python3 /home/admin/config.scripts/lnd.initwallet.py new ${passwordC} > /var/cache/raspiblitz/.seed.tmp
|
||||
source /var/cache/raspiblitz/.seed.tmp
|
||||
sudo shred -u /var/cache/raspiblitz/.seed.tmp 2>/dev/null
|
||||
|
||||
# in case of error - retry
|
||||
if [ ${#err} -gt 0 ]; then
|
||||
whiptail --title "lnd.initwallet.py - ERROR" --msgbox "${err}" 8 50
|
||||
/home/admin/70initLND.sh
|
||||
exit 1
|
||||
else
|
||||
if [ ${#seedwords} -eq 0 ]; then
|
||||
echo "FAIL!! -> MISSING seedwords data - but also no err data ?!?"
|
||||
echo "CHECK output data above - PRESS ENTER to restart 70initLND.sh"
|
||||
read key
|
||||
/home/admin/70initLND.sh
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ ${#seedwords6x4} -eq 0 ]; then
|
||||
seedwords6x4="${seedwords}"
|
||||
fi
|
||||
|
||||
ack=0
|
||||
while [ ${ack} -eq 0 ]
|
||||
do
|
||||
whiptail --title "IMPORTANT SEED WORDS - PLEASE WRITE DOWN" --msgbox "LND Wallet got created. Store these numbered words in a safe location:\n\n${seedwords6x4}" 12 76
|
||||
whiptail --title "Please Confirm" --yes-button "Show Again" --no-button "CONTINUE" --yesno " Are you sure that you wrote down the word list?" 8 55
|
||||
if [ $? -eq 1 ]; then
|
||||
ack=1
|
||||
fi
|
||||
done
|
||||
|
||||
if [ ${setupStep} -lt 100 ]; then
|
||||
sudo sed -i "s/^setupStep=.*/setupStep=65/g" /home/admin/raspiblitz.info
|
||||
fi
|
||||
|
||||
echo "waiting ."
|
||||
sleep 10
|
||||
|
||||
else
|
||||
|
||||
############################
|
||||
# RECOVER OLD WALLET
|
||||
############################
|
||||
|
||||
OPTIONS=(LNDRESCUE "LND tar.gz-Backupfile (BEST)" \
|
||||
SEED+SCB "Seed & channel.backup file (OK)" \
|
||||
ONLYSEED "Only Seed Word List (FALLBACK)")
|
||||
CHOICE=$(dialog --backtitle "RaspiBlitz" --clear --title "RECOVER LND DATA & WALLET" --menu "Data you have to recover from?" 11 60 6 "${OPTIONS[@]}" 2>&1 >/dev/tty)
|
||||
|
||||
# LND RESCUE
|
||||
if [ "${CHOICE}" == "LNDRESCUE" ]; then
|
||||
sudo /home/admin/config.scripts/lnd.rescue.sh restore
|
||||
echo ""
|
||||
echo "PRESS ENTER to continue."
|
||||
read key
|
||||
/home/admin/70initLND.sh
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# WARNING ON ONLY SEED
|
||||
if [ "${CHOICE}" == "ONLYSEED" ]; then
|
||||
|
||||
# let people know about the difference between SEED & SEED+SCB
|
||||
whiptail --title "IMPORTANT INFO" --yes-button "Continue" --no-button "Go Back" --yesno "
|
||||
Using JUST SEED WORDS will only recover your on-chain funds.
|
||||
To also try to recover the open channel funds you need the
|
||||
channel.backup file (since RaspiBlitz v1.2 / LND 0.6-beta)
|
||||
or having a complete LND rescue-backup from your old node.
|
||||
" 11 65
|
||||
if [ $? -eq 1 ]; then
|
||||
/home/admin/70initLND.sh
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# IF SEED and SCB - make user upload channel.backup file now
|
||||
# and it will get automated activated after syns are ready
|
||||
# TODO: later activate directly with call to lnd.iniwallet.py
|
||||
if [ "${CHOICE}" == "SEED+SCB" ]; then
|
||||
|
||||
# let lnd.rescue script do the upload process
|
||||
/home/admin/config.scripts/lnd.rescue.sh scb-up
|
||||
|
||||
# check exit code of script
|
||||
if [ $? -eq 1 ]; then
|
||||
echo "USER CANCEL --> back to menu"
|
||||
/home/admin/70initLND.sh
|
||||
exit 1
|
||||
else
|
||||
clear
|
||||
echo "channel.backup will get checked/activated after blockchain/lightning is synced"
|
||||
sleep 2
|
||||
echo "NEXT --> Set password for new LND wallet"
|
||||
sleep 3
|
||||
fi
|
||||
fi
|
||||
|
||||
clear
|
||||
|
||||
# let user enter password c
|
||||
sudo shred -u /var/cache/raspiblitz/.pass.tmp 2>/dev/null
|
||||
sudo touch /var/cache/raspiblitz/.pass.tmp
|
||||
sudo chown admin:admin /var/cache/raspiblitz/.pass.tmp
|
||||
sudo /home/admin/config.scripts/blitz.setpassword.sh x "Set your Password C for the LND Wallet Unlock" /var/cache/raspiblitz/.pass.tmp
|
||||
passwordC=$(sudo cat /var/cache/raspiblitz/.pass.tmp)
|
||||
sudo shred -u /var/cache/raspiblitz/.pass.tmp 2>/dev/null
|
||||
|
||||
# get seed word list
|
||||
if [ "${CHOICE}" == "SEED+SCB" ] || [ "${CHOICE}" == "ONLYSEED" ]; then
|
||||
|
||||
wordsCorrect=0
|
||||
while [ ${wordsCorrect} -eq 0 ]
|
||||
do
|
||||
# dialog to enter
|
||||
sudo touch /var/cache/raspiblitz/.seed.tmp
|
||||
sudo chown admin:admin /var/cache/raspiblitz/.seed.tmp
|
||||
dialog --backtitle "RaspiBlitz - LND Recover" --inputbox "Please enter/paste the SEED WORD LIST:\n(just the words, seperated by spaces, in correct order as numbered)" 9 78 2>/var/cache/raspiblitz/.seed.tmp
|
||||
wordstring=$( cat /var/cache/raspiblitz/.seed.tmp | sed 's/[^a-zA-Z0-9 ]//g' )
|
||||
shred -u /var/cache/raspiblitz/.seed.tmp
|
||||
echo "processing ... ${wordstring}"
|
||||
|
||||
# check correct number of words
|
||||
wordcount=$(echo "${wordstring}" | wc -w)
|
||||
if [ ${wordcount} -eq 24 ]; then
|
||||
echo "OK - 24 words"
|
||||
wordsCorrect=1
|
||||
else
|
||||
whiptail --title " WARNING " \
|
||||
--yes-button "Try Again" \
|
||||
--no-button "Cancel" \
|
||||
--yesno "
|
||||
The word list has ${wordcount} words. But it must be 24.
|
||||
Please check your list and try again.
|
||||
|
||||
Best is to write words in external editor
|
||||
and then copy and paste them into dialog.
|
||||
|
||||
The Word list should look like this:
|
||||
wordone wordtweo wordthree ...
|
||||
|
||||
" 16 52
|
||||
|
||||
if [ $? -eq 1 ]; then
|
||||
/home/admin/70initLND.sh
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
# ask if seed was protected by password D
|
||||
passwordD=""
|
||||
dialog --title "SEED PASSWORD" --yes-button "No extra Password" --no-button "Yes" --yesno "
|
||||
Are your seed words protected by an extra password?
|
||||
|
||||
During wallet creation LND offers to set an extra password
|
||||
to protect the seed words. Most users did not set this.
|
||||
" 11 65
|
||||
if [ $? -eq 1 ]; then
|
||||
sudo shred -u /var/cache/raspiblitz/.pass.tmp 2>/dev/null
|
||||
sudo touch /var/cache/raspiblitz/.pass.tmp
|
||||
sudo chown admin:admin /var/cache/raspiblitz/.pass.tmp
|
||||
sudo /home/admin/config.scripts/blitz.setpassword.sh x "Enter extra Password D" /var/cache/raspiblitz/.pass.tmp empty-allowed
|
||||
passwordD=$(sudo cat /var/cache/raspiblitz/.pass.tmp)
|
||||
sudo shred -u /var/cache/raspiblitz/.pass.tmp 2>/dev/null
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
# FOR NOW: let channel.backup file get activated by lncli after syncs
|
||||
# LATER: make different call to lnd.initwallet.py
|
||||
if [ "${CHOICE}" == "SEED+SCB" ] || [ "${CHOICE}" == "ONLYSEED" ]; then
|
||||
|
||||
# trigger wallet recovery
|
||||
source <(python3 /home/admin/config.scripts/lnd.initwallet.py seed ${passwordC} "${wordstring}" ${passwordD} 2>/dev/null)
|
||||
|
||||
# check if wallet was created for real
|
||||
if [ ${#err} -eq 0 ]; then
|
||||
walletExists=$(sudo ls /mnt/hdd/lnd/data/chain/${network}/${chain}net/wallet.db 2>/dev/null | grep wallet.db -c)
|
||||
if [ ${walletExists} -eq 0 ]; then
|
||||
err="Was not able to create wallet (unknown error)."
|
||||
fi
|
||||
fi
|
||||
|
||||
# set fundRecovery=1 in raspiblitz.info
|
||||
sed -i "s/^fundRecovery=.*/fundRecovery=1/g" /home/admin/raspiblitz.info
|
||||
|
||||
# user feedback
|
||||
if [ ${#err} -eq 0 ]; then
|
||||
dialog --title " SUCCESS " --msgbox "
|
||||
Looks good :) LND was able to recover the wallet.
|
||||
|
||||
IMPORTANT: LND needs now to scan the blockchain
|
||||
for your funds - this can take some extra time.
|
||||
" 10 60
|
||||
clear
|
||||
|
||||
else
|
||||
whiptail --title " FAIL " --msgbox "
|
||||
Something went wrong - see info below:
|
||||
|
||||
${err}
|
||||
${errMore}
|
||||
" 13 72
|
||||
clear
|
||||
echo "Restarting LND Wallet Setup .."
|
||||
sleep 2
|
||||
echo
|
||||
/home/admin/70initLND.sh
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
fi # END OLD WALLET
|
||||
|
||||
else
|
||||
echo "OK - LND wallet already exists."
|
||||
fi
|
||||
|
||||
|
||||
echo "waiting .."
|
||||
sleep 10
|
||||
dialog --pause " Waiting for LND - please wait .." 8 58 45
|
||||
|
||||
############################
|
||||
# Copy LND macaroons to admin
|
||||
############################
|
||||
|
||||
clear
|
||||
echo ""
|
||||
echo "*** Copy LND Macaroons to user admin ***"
|
||||
|
||||
# check if macaroon exists and if not try to unlock LND wallet first
|
||||
macaroonExists=$(sudo -u bitcoin ls -la /home/bitcoin/.lnd/data/chain/${network}/${chain}net/admin.macaroon 2>/dev/null | grep -c admin.macaroon)
|
||||
if [ ${macaroonExists} -eq 0 ]; then
|
||||
/home/admin/config.scripts/lnd.unlock.sh
|
||||
sleep 3
|
||||
fi
|
||||
|
||||
# check if macaroon exists now - if not fail
|
||||
macaroonExists=$(sudo -u bitcoin ls -la /home/bitcoin/.lnd/data/chain/${network}/${chain}net/admin.macaroon 2>/dev/null | grep -c admin.macaroon)
|
||||
if [ ${macaroonExists} -eq 0 ]; then
|
||||
sudo -u bitcoin ls -la /home/bitcoin/.lnd/data/chain/${network}/${chain}net/admin.macaroon
|
||||
echo ""
|
||||
echo "FAIL - LND Macaroons not created"
|
||||
echo "Please check the following LND issue:"
|
||||
echo "https://github.com/lightningnetwork/lnd/issues/890"
|
||||
echo "You may want try again with starting ./70initLND.sh"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# copy macaroons to all needed users
|
||||
sudo /home/admin/config.scripts/lnd.credentials.sh sync
|
||||
echo "OK - LND Macaroons created and copied"
|
||||
echo ""
|
||||
|
||||
###### Unlock Wallet (if needed)
|
||||
echo "*** Check Wallet Lock ***"
|
||||
locked=$(sudo tail -n 1 /mnt/hdd/lnd/logs/${network}/${chain}net/lnd.log 2>/dev/null | grep -c unlock)
|
||||
if [ ${locked} -gt 0 ]; then
|
||||
echo "OK - Wallet is locked ... starting unlocking dialog"
|
||||
/home/admin/config.scripts/lnd.unlock.sh
|
||||
else
|
||||
echo "OK - Wallet is already unlocked"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
if [ ${setupStep} -lt 100 ]; then
|
||||
|
||||
# set SetupState (scan is done - so its 80%)
|
||||
sudo sed -i "s/^setupStep=.*/setupStep=80/g" /home/admin/raspiblitz.info
|
||||
|
||||
###### finishSetup
|
||||
sudo /home/admin/90finishSetup.sh
|
||||
sudo /home/admin/95finalSetup.sh
|
||||
|
||||
else
|
||||
|
||||
# its important that RaspiBlitz dont get rebooted
|
||||
# before LND rescan is finished
|
||||
whiptail --title "RESET DONE" --msgbox "
|
||||
OK LND Reset is done.
|
||||
You may now give it
|
||||
extra time to rescan.
|
||||
" 10 25
|
||||
|
||||
fi
|
@ -1,274 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
source /home/admin/_version.info
|
||||
source /home/admin/raspiblitz.info
|
||||
source /mnt/hdd/raspiblitz.conf
|
||||
|
||||
# all system/service info gets detected by blitz.statusscan.sh
|
||||
source <(sudo /home/admin/config.scripts/blitz.statusscan.sh)
|
||||
source <(sudo /home/admin/config.scripts/internet.sh status)
|
||||
|
||||
# when admin and no other error found run LND setup check
|
||||
if [ "$USER" == "admin" ] && [ ${#lndErrorFull} -eq 0 ]; then
|
||||
lndErrorFull=$(sudo /home/admin/config.scripts/lnd.check.sh basic-setup | grep "err=" | tail -1)
|
||||
fi
|
||||
|
||||
# set follow up info different for LCD and ADMIN
|
||||
adminStr="ssh admin@${localip} ->Password A"
|
||||
if [ "$USER" == "admin" ]; then
|
||||
adminStr="Use CTRL+c to EXIT to Terminal"
|
||||
fi
|
||||
|
||||
# waiting for Internet connection
|
||||
if [ "${state}" = "nointernet" ]; then
|
||||
l1="Waiting for Internet ...\n"
|
||||
l2="Please check infrastructure:\n"
|
||||
l3="Router online? Network connected?\n"
|
||||
dialog --backtitle "RaspiBlitz ${codeVersion} ${localip}" --infobox "$l1$l2$l3" 5 45
|
||||
sleep 3
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# bitcoin errors always first
|
||||
if [ ${bitcoinActive} -eq 0 ] || [ ${#bitcoinErrorFull} -gt 0 ] || [ "${1}" == "blockchain-error" ]; then
|
||||
|
||||
####################
|
||||
# Copy Blockchain Source Mode
|
||||
# https://github.com/rootzoll/raspiblitz/issues/1081
|
||||
####################
|
||||
|
||||
if [ "${state}" = "copysource" ]; then
|
||||
l1="Copy Blockchain Source Modus\n"
|
||||
l2="May needs restart node when done.\n"
|
||||
l3="Restart from Terminal: restart"
|
||||
dialog --backtitle "RaspiBlitz ${codeVersion} (${state}) ${localIP}" --infobox "$l1$l2$l3" 5 45
|
||||
sleep 3
|
||||
exit 1
|
||||
fi
|
||||
|
||||
####################
|
||||
# On Bitcoin Error
|
||||
####################
|
||||
|
||||
height=6
|
||||
width=43
|
||||
title="Blockchain Info"
|
||||
|
||||
if [ ${#bitcoinErrorShort} -eq 0 ]; then
|
||||
bitcoinErrorShort="Initial Startup - Please Wait"
|
||||
fi
|
||||
|
||||
if [ "$USER" != "admin" ]; then
|
||||
|
||||
if [ ${uptime} -gt 600 ]; then
|
||||
if [ ${uptime} -gt 1000 ] || [ ${#bitcoinErrorFull} -gt 0 ] || [ "${1}" == "blockchain-error" ]; then
|
||||
infoStr=" The ${network}d service is NOT RUNNING!\n ${bitcoinErrorShort}\n Login for more details & options:"
|
||||
else
|
||||
infoStr=" The ${network}d service is running:\n ${bitcoinErrorShort}\n Login with SSH for more details:"
|
||||
fi
|
||||
else
|
||||
infoStr=" The ${network}d service is starting:\n ${bitcoinErrorShort}\n Login with SSH for more details:"
|
||||
fi
|
||||
|
||||
else
|
||||
|
||||
# output when user login in as admin and bitcoind is not running
|
||||
if [ ${uptime} -lt 600 ]; then
|
||||
infoStr=" The ${network}d service is starting:\n ${bitcoinErrorShort}\n Please wait at least 10min ..."
|
||||
elif [[ "${bitcoinErrorFull}" == *"error code: -28"* ]]; then
|
||||
infoStr=" The ${network}d service is warming up:\n ${bitcoinErrorShort}\n Please wait ..."
|
||||
elif [ ${#bitcoinErrorFull} -gt 0 ] || [ "${bitcoinErrorShort}" == "Error found in Logs" ] || [ "${1}" == "blockchain-error" ]; then
|
||||
clear
|
||||
echo ""
|
||||
echo "*****************************************"
|
||||
echo "* The ${network}d service is not running."
|
||||
echo "*****************************************"
|
||||
echo "If you just started some config/setup, this might be OK."
|
||||
echo
|
||||
if [ ${startcountBlockchain} -gt 1 ]; then
|
||||
echo "${startcountBlockchain} RESTARTS DETECTED - ${network}d might be in a error loop"
|
||||
cat /home/admin/systemd.blockchain.log | grep "ERROR" | tail -n -1
|
||||
echo
|
||||
fi
|
||||
if [ ${#bitcoinErrorFull} -gt 0 ]; then
|
||||
echo "More Error Detail:"
|
||||
echo ${bitcoinErrorFull}
|
||||
echo
|
||||
fi
|
||||
|
||||
echo "POSSIBLE OPTIONS:"
|
||||
source <(/home/admin/config.scripts/network.txindex.sh status)
|
||||
if [ "${txindex}" == "1" ]; then
|
||||
echo "-> Use command 'repair' and then choose 'DELETE-INDEX' to try rebuilding transaction index."
|
||||
fi
|
||||
echo "-> Use command 'repair' and then choose 'RESET-CHAIN' to try downloading new blockchain."
|
||||
echo "-> Use command 'debug' for more log output you can use for getting support."
|
||||
echo "-> Use command 'menu' to open main menu."
|
||||
echo "-> Have you tried to turn it off and on again? Use command 'restart'"
|
||||
echo ""
|
||||
exit 1
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
# LND errors second
|
||||
elif [ ${lndActive} -eq 0 ] || [ ${#lndErrorFull} -gt 0 ] || [ "${1}" == "lightning-error" ]; then
|
||||
|
||||
####################
|
||||
# On LND Error
|
||||
####################
|
||||
|
||||
height=6
|
||||
width=43
|
||||
title="Lightning Info"
|
||||
if [ ${uptime} -gt 600 ] || [ "${1}" == "lightning-error" ]; then
|
||||
if [ ${#lndErrorShort} -gt 0 ]; then
|
||||
height=6
|
||||
lndErrorShort=" ${lndErrorShort}\n"
|
||||
fi
|
||||
if [ ${lndActive} -eq 0 ]; then
|
||||
infoStr=" The LND service is not running.\n${lndErrorShort} Login for more details:"
|
||||
else
|
||||
infoStr=" The LND service is running with error.\n${lndErrorShort} Login for more details:"
|
||||
fi
|
||||
if [ "$USER" == "admin" ]; then
|
||||
clear
|
||||
echo ""
|
||||
echo "****************************************"
|
||||
if [ ${lndActive} -eq 0 ]; then
|
||||
echo "* The LND service is not running."
|
||||
else
|
||||
echo "* The LND service is running with error."
|
||||
fi
|
||||
echo "****************************************"
|
||||
echo "If you just started some config/setup, this might be OK."
|
||||
echo
|
||||
if [ ${startcountLightning} -gt 1 ]; then
|
||||
echo "${startcountLightning} RESTARTS DETECTED - LND might be in a error loop"
|
||||
cat /home/admin/systemd.lightning.log | grep "ERROR" | tail -n -1
|
||||
fi
|
||||
sudo journalctl -u lnd -b --no-pager -n14 | grep "lnd\["
|
||||
sudo /home/admin/config.scripts/lnd.check.sh basic-setup | grep "err="
|
||||
if [ ${#lndErrorFull} -gt 0 ]; then
|
||||
echo "More Error Detail:"
|
||||
echo ${lndErrorFull}
|
||||
fi
|
||||
echo
|
||||
echo "-> Use command 'repair' and then choose 'BACKUP-LND' to make a just in case backup."
|
||||
echo "-> Use command 'debug' for more log output you can use for getting support."
|
||||
echo "-> Use command 'menu' to open main menu."
|
||||
echo "-> Have you tried to turn it off and on again? Use command 'restart'"
|
||||
echo ""
|
||||
exit 1
|
||||
else
|
||||
source <(sudo /home/admin/config.scripts/lnd.check.sh basic-setup)
|
||||
if [ ${wallet} -eq 0 ] || [ ${macaroon} -eq 0 ] || [ ${config} -eq 0 ] || [ ${tls} -eq 0 ]; then
|
||||
infoStr=" The LND service needs RE-SETUP.\n Login with SSH to continue:"
|
||||
fi
|
||||
fi
|
||||
else
|
||||
infoStr=" The LND service is starting.\n Login for more details:"
|
||||
if [ "$USER" == "admin" ]; then
|
||||
infoStr=" The LND service is starting.\n Please wait up to 5min ..."
|
||||
fi
|
||||
fi
|
||||
|
||||
# if LND wallet is locked
|
||||
elif [ ${walletLocked} -gt 0 ]; then
|
||||
|
||||
height=5
|
||||
width=43
|
||||
|
||||
if [ "${autoUnlock}" = "on" ]; then
|
||||
title="Auto Unlock"
|
||||
infoStr=" Waiting for Wallet Auto-Unlock.\n Please wait up to 5min ..."
|
||||
else
|
||||
|
||||
if [ "$USER" == "admin" ]; then
|
||||
/home/admin/config.scripts/lnd.unlock.sh
|
||||
else
|
||||
title="Action Required"
|
||||
infoStr=" LND WALLET IS LOCKED !!!\n"
|
||||
if [ "${rtlWebinterface}" = "on" ]; then
|
||||
height=6
|
||||
infoStr="${infoStr} Browser: http://${localip}:3000\n PasswordB=login / PasswordC=unlock"
|
||||
else
|
||||
infoStr="${infoStr} Please use SSH to unlock:"
|
||||
fi
|
||||
if [ ${startcountLightning} -gt 1 ]; then
|
||||
width=45
|
||||
height=$((height+3))
|
||||
infoStr=" LIGHTNING RESTARTED - login for details\n${infoStr}"
|
||||
adminStr="${adminStr}\n or choose 'INFO' in main menu\n or type 'raspiblitz' on terminal"
|
||||
fi
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
else
|
||||
|
||||
####################
|
||||
# Sync Progress
|
||||
####################
|
||||
|
||||
# check number of peers
|
||||
source <(sudo -u admin /home/admin/config.scripts/network.monitor.sh peer-status)
|
||||
|
||||
# basic dialog info
|
||||
height=6
|
||||
width=45
|
||||
title="Node is Syncing"
|
||||
actionString="Please wait - this can take some time"
|
||||
|
||||
# formatting BLOCKCHAIN SYNC PROGRESS
|
||||
if [ ${#syncProgress} -eq 0 ]; then
|
||||
if [ ${startcountBlockchain} -lt 2 ]; then
|
||||
syncProgress="waiting"
|
||||
else
|
||||
syncProgress="${startcountBlockchain} restarts"
|
||||
actionString="Login with SSH for more details:"
|
||||
fi
|
||||
elif [ ${#syncProgress} -lt 6 ]; then
|
||||
syncProgress=" ${syncProgress} % ${peers} peers"
|
||||
else
|
||||
syncProgress="${syncProgress} % ${peers} peers"
|
||||
fi
|
||||
|
||||
# formatting LIGHTNING SCAN PROGRESS
|
||||
if [ ${#scanProgress} -eq 0 ]; then
|
||||
|
||||
# in case of LND RPC is not ready yet
|
||||
if [ ${scanTimestamp} -eq -2 ]; then
|
||||
|
||||
scanProgress="prepare sync"
|
||||
|
||||
# in case LND restarting >2
|
||||
elif [ ${startcountLightning} -gt 2 ]; then
|
||||
|
||||
scanProgress="${startcountLightning} restarts"
|
||||
actionString="Login with SSH for more details:"
|
||||
|
||||
# check if a specific error can be identified for restarts
|
||||
lndSetupErrorCount=$(sudo /home/admin/config.scripts/lnd.check.sh basic-setup | grep -c "err=")
|
||||
if [ ${lndSetupErrorCount} -gt 0 ]; then
|
||||
scanProgress="possible error"
|
||||
fi
|
||||
|
||||
# unkown cases
|
||||
else
|
||||
scanProgress="waiting"
|
||||
fi
|
||||
|
||||
elif [ ${#scanProgress} -lt 6 ]; then
|
||||
scanProgress=" ${scanProgress} % ${lndPeers} peers"
|
||||
else
|
||||
scanProgress="${scanProgress} % ${lndPeers} peers"
|
||||
fi
|
||||
|
||||
# setting info string
|
||||
infoStr=" Blockchain Progress : ${syncProgress}\n Lightning Progress : ${scanProgress}\n ${actionString}"
|
||||
|
||||
fi
|
||||
|
||||
# display info to user
|
||||
dialog --title " ${title} " --backtitle "RaspiBlitz ${codeVersion} ${hostname} / ${network} / ${chain} / ${tempCelsius}°C" --infobox "${infoStr}\n ${adminStr}" ${height} ${width}
|
@ -1,65 +0,0 @@
|
||||
#!/bin/bash
|
||||
echo ""
|
||||
|
||||
# add bonus scripts (auto install deactivated to reduce third party repos)
|
||||
/home/admin/91addBonus.sh
|
||||
|
||||
###### SWAP File
|
||||
source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status)
|
||||
if [ ${isSwapExternal} -eq 0 ]; then
|
||||
|
||||
echo "No external SWAP found - creating ... "
|
||||
sudo /home/admin/config.scripts/blitz.datadrive.sh swap on
|
||||
|
||||
else
|
||||
echo "SWAP already OK"
|
||||
fi
|
||||
|
||||
####### FIREWALL - just install (not configure)
|
||||
echo ""
|
||||
echo "*** Setting and Activating Firewall ***"
|
||||
echo "deny incoming connection on other ports"
|
||||
sudo ufw default deny incoming
|
||||
echo "allow outgoing connections"
|
||||
sudo ufw default allow outgoing
|
||||
echo "allow: ssh"
|
||||
sudo ufw allow ssh
|
||||
echo "allow: bitcoin testnet"
|
||||
sudo ufw allow 18333 comment 'bitcoin testnet'
|
||||
echo "allow: bitcoin mainnet"
|
||||
sudo ufw allow 8333 comment 'bitcoin mainnet'
|
||||
echo "allow: litecoin mainnet"
|
||||
sudo ufw allow 9333 comment 'litecoin mainnet'
|
||||
echo 'allow: lightning testnet'
|
||||
sudo ufw allow 19735 comment 'lightning testnet'
|
||||
echo "allow: lightning mainnet"
|
||||
sudo ufw allow 9735 comment 'lightning mainnet'
|
||||
echo "allow: lightning gRPC"
|
||||
sudo ufw allow 10009 comment 'lightning gRPC'
|
||||
echo "allow: lightning REST API"
|
||||
sudo ufw allow 8080 comment 'lightning REST API'
|
||||
echo "allow: transmission"
|
||||
sudo ufw allow 49200:49250/tcp comment 'rtorrent'
|
||||
echo "allow: public web HTTP"
|
||||
sudo ufw allow from any to any port 80 comment 'allow public web HTTP'
|
||||
echo "allow: local web admin HTTPS"
|
||||
sudo ufw allow from 10.0.0.0/8 to any port 443 comment 'allow local LAN HTTPS'
|
||||
sudo ufw allow from 172.16.0.0/12 to any port 443 comment 'allow local LAN HTTPS'
|
||||
sudo ufw allow from 192.168.0.0/16 to any port 443 comment 'allow local LAN HTTPS'
|
||||
echo "open firewall for auto nat discover (see issue #129)"
|
||||
sudo ufw allow proto udp from 10.0.0.0/8 port 1900 to any comment 'allow local LAN SSDP for UPnP discovery'
|
||||
sudo ufw allow proto udp from 172.16.0.0/12 port 1900 to any comment 'allow local LAN SSDP for UPnP discovery'
|
||||
sudo ufw allow proto udp from 192.168.0.0/16 port 1900 to any comment 'allow local LAN SSDP for UPnP discovery'
|
||||
echo "enable lazy firewall"
|
||||
sudo ufw --force enable
|
||||
echo ""
|
||||
|
||||
# update system
|
||||
echo ""
|
||||
echo "*** Update System ***"
|
||||
sudo apt-mark hold raspberrypi-bootloader
|
||||
sudo apt-get update -y
|
||||
echo "OK - System is now up to date"
|
||||
|
||||
# mark setup is done
|
||||
sudo sed -i "s/^setupStep=.*/setupStep=100/g" /home/admin/raspiblitz.info
|
@ -1,12 +0,0 @@
|
||||
|
||||
mkdir /home/admin/tmpScriptDL
|
||||
cd /home/admin/tmpScriptDL
|
||||
echo "installing bash completion for bitcoin-cli and lncli"
|
||||
wget https://raw.githubusercontent.com/bitcoin/bitcoin/master/contrib/bitcoin-cli.bash-completion
|
||||
wget https://raw.githubusercontent.com/lightningnetwork/lnd/master/contrib/lncli.bash-completion
|
||||
sudo cp *.bash-completion /etc/bash_completion.d/
|
||||
echo "OK - bash completion available after next login"
|
||||
echo "type \"bitcoin-cli getblockch\", press [Tab] → bitcoin-cli getblockchaininfo"
|
||||
rm -r /home/admin/tmpScriptDL
|
||||
|
||||
cd
|
@ -1,50 +0,0 @@
|
||||
#!/bin/bash
|
||||
echo ""
|
||||
|
||||
# load setup config
|
||||
source /home/admin/raspiblitz.info
|
||||
|
||||
# in case the config already exists
|
||||
source /mnt/hdd/raspiblitz.conf 2>/dev/null
|
||||
|
||||
# load version
|
||||
source /home/admin/_version.info
|
||||
|
||||
# show info to user
|
||||
sudo sed -i "s/^state=.*/state=reboot/g" /home/admin/raspiblitz.info
|
||||
dialog --backtitle "RaspiBlitz - Setup" --title " RaspiBlitz Setup is done :) " --msgbox "
|
||||
After reboot RaspiBlitz
|
||||
needs to be unlocked and
|
||||
sync with the network.
|
||||
|
||||
Press OK for a final reboot.
|
||||
" 10 42
|
||||
|
||||
# let migration/init script do the rest
|
||||
/home/admin/_bootstrap.migration.sh
|
||||
|
||||
# copy logfile to analyse setup
|
||||
cp $logFile /home/admin/raspiblitz.setup.log
|
||||
|
||||
# set the name of the node
|
||||
echo "Setting the Name/Alias/Hostname .."
|
||||
sudo /home/admin/config.scripts/lnd.setname.sh ${hostname}
|
||||
|
||||
# expanding the root of the sd card
|
||||
if [ "${baseimage}" = "raspbian" ] || [ "${baseimage}" = "raspios_arm64" ]; then
|
||||
sudo raspi-config --expand-rootfs
|
||||
sudo sed -i "s/^fsexpanded=.*/fsexpanded=1/g" /home/admin/raspiblitz.info
|
||||
elif [ "${baseimage}" = "armbian" ]; then
|
||||
sudo /usr/lib/armbian/armbian-resize-filesystem start
|
||||
sudo sed -i "s/^fsexpanded=.*/fsexpanded=1/g" /home/admin/raspiblitz.info
|
||||
fi
|
||||
|
||||
# mark setup is done
|
||||
sudo sed -i "s/^setupStep=.*/setupStep=100/g" /home/admin/raspiblitz.info
|
||||
|
||||
clear
|
||||
echo "Setup done. Rebooting now."
|
||||
sudo -u bitcoin ${network}-cli stop
|
||||
|
||||
sleep 3
|
||||
sudo /home/admin/XXshutdown.sh reboot
|
@ -4,21 +4,29 @@
|
||||
source /home/admin/raspiblitz.info
|
||||
source /mnt/hdd/raspiblitz.conf
|
||||
|
||||
if [ "$1" = "-h" ] || [ "$1" = "-help" ];then
|
||||
echo "Usage:"
|
||||
echo "97addMobileWallet.sh <lnd|cl> <mainnet|testnet|signet>"
|
||||
echo "defaults from the configs are:"
|
||||
echo "ligthning=${lightning}"
|
||||
echo "chain=${chain}"
|
||||
fi
|
||||
|
||||
source <(/home/admin/config.scripts/network.aliases.sh getvars $1 $2)
|
||||
|
||||
|
||||
justLocal=1
|
||||
aks4IP2TOR=0
|
||||
|
||||
# if TOR is activated then outside reach is possible (no notice)
|
||||
if [ "${runBehindTor}" = "on" ]; then
|
||||
echo "# runBehindTor ON"
|
||||
justLocal=0
|
||||
aks4IP2TOR=1
|
||||
fi
|
||||
|
||||
# if dynDomain is set connect from outside is possible (no notice)
|
||||
if [ ${#dynDomain} -gt 0 ]; then
|
||||
echo "# dynDomain ON"
|
||||
justLocal=0
|
||||
aks4IP2TOR=0
|
||||
fi
|
||||
|
||||
# if sshtunnel to 10009/8080 then outside reach is possible (no notice)
|
||||
@ -26,19 +34,14 @@ isForwarded=$(echo ${sshtunnel} | grep -c "10009<")
|
||||
if [ ${isForwarded} -gt 0 ]; then
|
||||
echo "# forward 10009 ON"
|
||||
justLocal=0
|
||||
aks4IP2TOR=0
|
||||
fi
|
||||
|
||||
isForwarded=$(echo ${sshtunnel} | grep -c "8080<")
|
||||
if [ ${isForwarded} -gt 0 ]; then
|
||||
echo "# forward 8080 ON"
|
||||
justLocal=0
|
||||
aks4IP2TOR=0
|
||||
fi
|
||||
|
||||
# echo "# justLocal(${justLocal})"
|
||||
# echo "# aks4IP2TOR(${aks4IP2TOR})"
|
||||
# read key
|
||||
|
||||
# check if dynamic domain is set
|
||||
if [ ${justLocal} -eq 1 ]; then
|
||||
whiptail --title " Just Local Network? " --yesno "If you want to connect with your RaspiBlitz
|
||||
@ -63,99 +66,38 @@ For full support switch to mainnet.
|
||||
" 9 55
|
||||
fi
|
||||
|
||||
# fuction to call for wallets that support TOR
|
||||
connect="ip"
|
||||
choose_IP_or_TOR()
|
||||
{
|
||||
whiptail --title " How to Connect? " \
|
||||
--yes-button "TOR" \
|
||||
--no-button "IP/Domain" \
|
||||
--yesno "The mobile wallet you selected supports TOR.\nDo you want to connect over TOR to your RaspiBlitz or fallback to Domain/IP?" 9 60
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "# yes-button -> TOR"
|
||||
connect="tor"
|
||||
else
|
||||
echo "# no-button -> IP"
|
||||
connect="ip"
|
||||
fi
|
||||
}
|
||||
# function to call for wallets that support TOR
|
||||
OPTIONS=()
|
||||
|
||||
# fuction to if already activated or user wants to activate IP2TOR
|
||||
# needs parameter: #1 "LND-REST-API" or "LND-GRPC-API"
|
||||
ip2tor=""
|
||||
checkIP2TOR()
|
||||
{
|
||||
|
||||
# check if IP2TOR service is already available
|
||||
error=""
|
||||
ip2tor=""
|
||||
source <(/home/admin/config.scripts/blitz.subscriptions.ip2tor.py subscription-by-service $1)
|
||||
if [ ${#error} -eq 0 ]; then
|
||||
ip2tor="$1"
|
||||
fi
|
||||
|
||||
#echo "# ip2tor(${ip2tor})"
|
||||
#echo "# aks4IP2TOR(${aks4IP2TOR})"
|
||||
#read key
|
||||
|
||||
# if IP2TOR is not already available:
|
||||
# and the checks from avove showed there is SSH forwarding / dynDNS
|
||||
# then ask user if IP2TOR subscription is wanted
|
||||
if [ ${#ip2tor} -eq 0 ] && [ ${aks4IP2TOR} -eq 1 ]; then
|
||||
whiptail --title " Want to use a IP2TOR Bridge? " --yes-button "Go To Shop" --no-button "No Thanks" --yesno "It can be hard to connect to your RaspiBlitz when away from home.\n\nDo you like to subscribe to a IP2TOR bridge service (that will give you a public IP while hidden behind TOR) and make it more easy to connect your mobile wallet?" 12 60
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "# yes-button -> Send To Shop"
|
||||
port="10009"
|
||||
toraddress=$(sudo cat /mnt/hdd/tor/lndrpc10009/hostname)
|
||||
if [ "$1" == "LND-REST-API" ]; then
|
||||
port="8080"
|
||||
toraddress=$(sudo cat /mnt/hdd/tor/lndrest8080/hostname)
|
||||
fi
|
||||
|
||||
userHasActiveChannels=$(sudo -u bitcoin lncli listchannels | grep -c '"active": true')
|
||||
if [ ${userHasActiveChannels} -gt 0 ]; then
|
||||
sudo -u admin /home/admin/config.scripts/blitz.subscriptions.ip2tor.py create-ssh-dialog "$1" "$toraddress" "$port"
|
||||
else
|
||||
whiptail --title " Lightning not Ready " --msgbox "\nYou need at least one active Lightning channel.\n\nPlease make sure that your node is funded and\nyou have a confirmed and active channel running.\nThen try again to connect the mobile wallet." 13 52
|
||||
exit 0
|
||||
fi
|
||||
clear
|
||||
fi
|
||||
fi
|
||||
|
||||
# check again if IP2TOR service is now already available
|
||||
error=""
|
||||
source <(/home/admin/config.scripts/blitz.subscriptions.ip2tor.py subscription-by-service "$1")
|
||||
if [ ${#error} -eq 0 ]; then
|
||||
ip2tor="$1"
|
||||
fi
|
||||
}
|
||||
|
||||
# Also Zap-Android deactivated for now - see: https://github.com/rootzoll/raspiblitz/issues/2198#issuecomment-822808428
|
||||
#OPTIONS=(ZAP_ANDROID "Zap Wallet (Android)" \
|
||||
# ZAP_IOS "Zap Wallet (iOS)" \
|
||||
OPTIONS=(ZEUS_IOS "Zeus Wallet (iOS)" \
|
||||
ZEUS_ANDROID "Zeus Wallet (Android)" \
|
||||
SPHINX "Sphinx Chat (Android or iOS)"
|
||||
)
|
||||
|
||||
# add SEND MANY APP
|
||||
OPTIONS+=(SENDMANY_ANDROID "SendMany (Android)")
|
||||
|
||||
# Additinal Options with TOR
|
||||
if [ "${runBehindTor}" = "on" ]; then
|
||||
OPTIONS+=(FULLY_NODED "Fully Noded (IOS+TOR)")
|
||||
if [ "${lightning}" == "lnd" ] || [ "${lnd}" == "on" ]; then
|
||||
OPTIONS+=(ZEUS_IOS "Zeus to LND (iOS)")
|
||||
OPTIONS+=(ZEUS_ANDROID "Zeus to LND (Android)")
|
||||
OPTIONS+=(ZAP_IOS "Zap to LND (iOS)")
|
||||
OPTIONS+=(ZAP_ANDROID "Zap/Bitbanana to LND (Android)")
|
||||
OPTIONS+=(SPHINX "Sphinx Chat to LND (Android/iOS)")
|
||||
OPTIONS+=(SENDMANY_ANDROID "SendMany to LND (Android)")
|
||||
OPTIONS+=(FULLYNODED_LND "Fully Noded to LND REST (iOS+Tor)")
|
||||
fi
|
||||
|
||||
CHOICE=$(whiptail --clear --title "Choose Mobile Wallet" --menu "" 14 50 8 "${OPTIONS[@]}" 2>&1 >/dev/tty)
|
||||
if [ "${lightning}" == "cl" ] || [ "${cl}" == "on" ]; then
|
||||
OPTIONS+=(ZEUS_CLREST "Zeus to Core LightningREST (Android or iOS)")
|
||||
OPTIONS+=(FULLYNODED_CL "Fully Noded to CL REST (iOS+Tor)")
|
||||
fi
|
||||
|
||||
/home/admin/config.scripts/blitz.display.sh hide
|
||||
# Additional Options with Tor
|
||||
if [ "${runBehindTor}" = "on" ]; then
|
||||
OPTIONS+=(FULLYNODED_BTC "Fully Noded to bitcoinRPC (iOS+Tor)")
|
||||
fi
|
||||
|
||||
CHOICE=$(whiptail --clear --title "Choose Mobile Wallet" --menu "" 18 75 12 "${OPTIONS[@]}" 2>&1 >/dev/tty)
|
||||
|
||||
sudo /home/admin/config.scripts/blitz.display.sh hide
|
||||
|
||||
clear
|
||||
echo "creating install info ..."
|
||||
case $CHOICE in
|
||||
CLOSE)
|
||||
exit 1;
|
||||
exit 0;
|
||||
;;
|
||||
SPHINX)
|
||||
if [ "${sphinxrelay}" != "on" ]; then
|
||||
@ -173,75 +115,46 @@ case $CHOICE in
|
||||
fi
|
||||
# make pairing thru sphinx relay script
|
||||
/home/admin/config.scripts/bonus.sphinxrelay.sh menu
|
||||
exit 1;
|
||||
exit 0;
|
||||
;;
|
||||
ZAP_IOS)
|
||||
appstoreLink="https://apps.apple.com/us/app/zap-bitcoin-lightning-wallet/id1406311960"
|
||||
#/home/admin/config.scripts/blitz.display.sh qr ${appstoreLink}
|
||||
#whiptail --title "Install Testflight and Zap on your iOS device" \
|
||||
# --yes-button "continue" \
|
||||
# --no-button "link as QR code" \
|
||||
# --yesno "Search for 'Zap Bitcoin' in Apple Appstore for basic version\nOr join public beta test for latest features:\n${appstoreLink}\n\nJoin testing and follow ALL instructions.\n\nWhen installed and started -> continue" 11 65
|
||||
# if [ $? -eq 1 ]; then
|
||||
# /home/admin/config.scripts/blitz.display.sh qr-console ${appstoreLink}
|
||||
#fi
|
||||
|
||||
/home/admin/config.scripts/blitz.display.sh image /home/admin/raspiblitz/pictures/app_zap.png
|
||||
sudo /home/admin/config.scripts/blitz.display.sh image /home/admin/raspiblitz/pictures/app_zap.png
|
||||
whiptail --title "Install Fully Noded on your iOS device" \
|
||||
--yes-button "Continue" \
|
||||
--no-button "StoreLink" \
|
||||
--yesno "Open the Apple App Store on your mobile phone.\n\nSearch for --> 'Zap Bitcoin'\n\nCheck that logo is like on LCD & author: Zap Technologies LLC\nWhen app is installed and started --> Continue." 12 65
|
||||
if [ $? -eq 1 ]; then
|
||||
/home/admin/config.scripts/blitz.display.sh qr ${appstoreLink}
|
||||
sudo /home/admin/config.scripts/blitz.display.sh qr ${appstoreLink}
|
||||
whiptail --title " App Store Link " --msgbox "\
|
||||
To install app open the following link:\n
|
||||
${appstoreLink}\n
|
||||
Or scan the qr code on the LCD with your mobile phone.
|
||||
" 11 70
|
||||
fi
|
||||
/home/admin/config.scripts/blitz.display.sh hide
|
||||
checkIP2TOR LND-GRPC-API
|
||||
see https://github.com/rootzoll/raspiblitz/issues/1001#issuecomment-634580257
|
||||
if [ ${#ip2tor} -eq 0 ]; then
|
||||
choose_IP_or_TOR
|
||||
fi
|
||||
/home/admin/config.scripts/bonus.lndconnect.sh zap-ios ${connect}
|
||||
exit 1;
|
||||
sudo /home/admin/config.scripts/blitz.display.sh hide
|
||||
/home/admin/config.scripts/bonus.lndconnect.sh zap-ios tor
|
||||
exit 0;
|
||||
;;
|
||||
ZAP_ANDROID)
|
||||
appstoreLink="https://play.google.com/store/apps/details?id=zapsolutions.zap"
|
||||
/home/admin/config.scripts/blitz.display.sh image /home/admin/raspiblitz/pictures/app_zap.png
|
||||
whiptail --title "Install Zap on your Android Phone" \
|
||||
whiptail --title "Install Zap/Bitbanana on your Android Phone" \
|
||||
--yes-button "Continue" \
|
||||
--no-button "StoreLink" \
|
||||
--yesno "Open the Android Play Store on your mobile phone.\n\nSearch for --> 'zap bitcoin app'\n\nCheck that logo is like on LCD and author is: Zap\nWhen app is installed and started --> Continue." 12 65
|
||||
if [ $? -eq 1 ]; then
|
||||
/home/admin/config.scripts/blitz.display.sh qr ${appstoreLink}
|
||||
whiptail --title " App Store Link " --msgbox "\
|
||||
To install app open the following link:\n
|
||||
${appstoreLink}\n
|
||||
Or scan the qr code on the LCD with your mobile phone.
|
||||
" 11 70
|
||||
fi
|
||||
/home/admin/config.scripts/blitz.display.sh hide
|
||||
checkIP2TOR LND-GRPC-API
|
||||
if [ ${#ip2tor} -eq 0 ]; then
|
||||
choose_IP_or_TOR
|
||||
fi
|
||||
/home/admin/config.scripts/bonus.lndconnect.sh zap-android ${connect}
|
||||
exit 1;
|
||||
--yesno "Open the Android Play Store on your mobile phone.\n\nSearch for --> 'bitbanana' (for updated fork)\nSearch for --> 'zap bitcoin app' (for original)\n\nWhen app is installed and started --> Continue." 12 65
|
||||
/home/admin/config.scripts/bonus.lndconnect.sh zap-android tor
|
||||
exit 0;
|
||||
;;
|
||||
SENDMANY_ANDROID)
|
||||
|
||||
# check if keysend is activated first
|
||||
source <(/home/admin/config.scripts/lnd.keysend.sh status)
|
||||
keysendOn=$(cat /mnt/hdd/lnd/lnd.conf | grep -c '^accept-keysend=1')
|
||||
if [ "${keysendOn}" == "0" ]; then
|
||||
whiptail --title " KEYSEND NEEDED " --msgbox "
|
||||
whiptail --title " LND KEYSEND NEEDED " --msgbox "
|
||||
To use the chat feature of the SendMany app, you need to activate the Keysend feature first.
|
||||
|
||||
Please go to MAINMENU > SERVICES and activate KEYSEND first.
|
||||
Please go to MAINMENU > SYSTEM > LNDCONF and set accept-keysend=1 first.
|
||||
" 12 65
|
||||
exit 1
|
||||
exit 0
|
||||
fi
|
||||
|
||||
appstoreLink="https://github.com/fusion44/sendmany/releases"
|
||||
@ -250,65 +163,122 @@ Please go to MAINMENU > SERVICES and activate KEYSEND first.
|
||||
--no-button "Link as QR code" \
|
||||
--yesno "Download & install the SendMany APK (armeabi-v7) from GitHub:\n\n${appstoreLink}\n\nEasiest way to scan QR code on LCD and download/install.\n\nWhen installed and started -> continue." 13 65
|
||||
if [ $? -eq 1 ]; then
|
||||
/home/admin/config.scripts/blitz.display.sh qr ${appstoreLink}
|
||||
sudo /home/admin/config.scripts/blitz.display.sh qr ${appstoreLink}
|
||||
/home/admin/config.scripts/blitz.display.sh qr-console ${appstoreLink}
|
||||
fi
|
||||
/home/admin/config.scripts/blitz.display.sh hide
|
||||
checkIP2TOR LND-GRPC-API
|
||||
/home/admin/config.scripts/bonus.lndconnect.sh sendmany-android ${connect}
|
||||
exit 1;
|
||||
sudo /home/admin/config.scripts/blitz.display.sh hide
|
||||
/home/admin/config.scripts/bonus.lndconnect.sh sendmany-android ip
|
||||
exit 0;
|
||||
;;
|
||||
ZEUS_IOS)
|
||||
appstoreLink="https://testflight.apple.com/join/gpVFzEHN"
|
||||
/home/admin/config.scripts/blitz.display.sh image /home/admin/raspiblitz/pictures/app_zeus.png
|
||||
whiptail --title "Install Testflight and Zeus on your iOS device" \
|
||||
appstoreLink="https://apps.apple.com/us/app/zeus-ln/id1456038895"
|
||||
sudo /home/admin/config.scripts/blitz.display.sh image /home/admin/raspiblitz/pictures/app_zeus.png
|
||||
whiptail --title "Install Zeus on your iOS device" \
|
||||
--yes-button "Continue" \
|
||||
--no-button "Link as QR Code" \
|
||||
--yesno "At the moment this app is in public beta testing.\nFirst open Apple Apstore, search & install 'TestFlight' app.\n\nThen open the following link on your mobile:\n${appstoreLink}\n\nUse 'Open In TestFlight' option of your mobile browser.\nWhen Zeus is installed and started --> Continue." 14 65
|
||||
--no-button "Link as QRcode" \
|
||||
--yesno "Open the Apple App Store on your mobile phone.\n\nSearch for --> 'zeus ln'\n\nCheck that logo is like on LCD and author is: Zeus LN LLC\nWhen the app is installed and started --> Continue." 12 65
|
||||
if [ $? -eq 1 ]; then
|
||||
/home/admin/config.scripts/blitz.display.sh qr ${appstoreLink}
|
||||
sudo /home/admin/config.scripts/blitz.display.sh qr ${appstoreLink}
|
||||
/home/admin/config.scripts/blitz.display.sh qr-console ${appstoreLink}
|
||||
fi
|
||||
/home/admin/config.scripts/blitz.display.sh hide
|
||||
sudo /home/admin/config.scripts/blitz.display.sh hide
|
||||
/home/admin/config.scripts/bonus.lndconnect.sh zeus-ios tor
|
||||
exit 1;
|
||||
exit 0;
|
||||
;;
|
||||
ZEUS_ANDROID)
|
||||
appstoreLink="https://play.google.com/store/apps/details?id=app.zeusln.zeus"
|
||||
/home/admin/config.scripts/blitz.display.sh image /home/admin/raspiblitz/pictures/app_zeus.png
|
||||
sudo /home/admin/config.scripts/blitz.display.sh image /home/admin/raspiblitz/pictures/app_zeus.png
|
||||
whiptail --title "Install Zeus on your Android Phone" \
|
||||
--yes-button "Continue" \
|
||||
--no-button "StoreLink" \
|
||||
--yesno "Open the Android Play Store on your mobile phone.\n\nSearch for --> 'zeus bitcoin app'\n\nCheck that logo is like on LCD and author is: Evan Kaloudis\nWhen app is installed and started --> Continue." 12 65
|
||||
--yesno "Open the Android Play Store on your mobile phone.\n\nSearch for --> 'zeus ln'\n\nCheck that logo is like on LCD and author is: Evan Kaloudis\nWhen app is installed and started --> Continue." 12 65
|
||||
if [ $? -eq 1 ]; then
|
||||
/home/admin/config.scripts/blitz.display.sh qr ${appstoreLink}
|
||||
sudo /home/admin/config.scripts/blitz.display.sh qr ${appstoreLink}
|
||||
whiptail --title " App Store Link " --msgbox "\
|
||||
To install app open the following link:\n
|
||||
${appstoreLink}\n
|
||||
Or scan the qr code on the LCD with your mobile phone.
|
||||
" 11 70
|
||||
fi
|
||||
/home/admin/config.scripts/blitz.display.sh hide
|
||||
sudo /home/admin/config.scripts/blitz.display.sh hide
|
||||
/home/admin/config.scripts/bonus.lndconnect.sh zeus-android tor
|
||||
exit 1;
|
||||
exit 0;
|
||||
;;
|
||||
FULLY_NODED)
|
||||
|
||||
FULLYNODED_BTC)
|
||||
appstoreLink="https://apps.apple.com/us/app/fully-noded/id1436425586"
|
||||
/home/admin/config.scripts/blitz.display.sh image /home/admin/raspiblitz/pictures/app_fullynoded.png
|
||||
sudo /home/admin/config.scripts/blitz.display.sh image /home/admin/raspiblitz/pictures/app_fullynoded.png
|
||||
whiptail --title "Install Fully Noded on your iOS device" \
|
||||
--yes-button "Continue" \
|
||||
--no-button "StoreLink" \
|
||||
--yesno "Open the Apple App Store on your mobile phone.\n\nSearch for --> 'fully noded'\n\nCheck that logo is like on LCD and author is: Denton LLC\nWhen app is installed and started --> Continue." 12 65
|
||||
if [ $? -eq 1 ]; then
|
||||
/home/admin/config.scripts/blitz.display.sh qr ${appstoreLink}
|
||||
sudo /home/admin/config.scripts/blitz.display.sh qr ${appstoreLink}
|
||||
whiptail --title " App Store Link " --msgbox "\
|
||||
To install app open the following link:\n
|
||||
${appstoreLink}\n
|
||||
Or scan the qr code on the LCD with your mobile phone.
|
||||
" 11 70
|
||||
fi
|
||||
/home/admin/config.scripts/blitz.display.sh hide
|
||||
sudo /home/admin/config.scripts/blitz.display.sh hide
|
||||
/home/admin/config.scripts/bonus.fullynoded.sh
|
||||
exit 1;
|
||||
exit 0;
|
||||
;;
|
||||
|
||||
FULLYNODED_LND)
|
||||
appstoreLink="https://apps.apple.com/us/app/fully-noded/id1436425586"
|
||||
sudo /home/admin/config.scripts/blitz.display.sh image /home/admin/raspiblitz/pictures/app_fullynoded.png
|
||||
whiptail --title "Install Fully Noded on your iOS device" \
|
||||
--yes-button "Continue" \
|
||||
--no-button "StoreLink" \
|
||||
--yesno "Open the Apple App Store on your mobile phone.\n\nSearch for --> 'fully noded'\n\nCheck that logo is like on LCD and author is: Denton LLC\nWhen app is installed and started --> Continue." 12 65
|
||||
if [ $? -eq 1 ]; then
|
||||
sudo /home/admin/config.scripts/blitz.display.sh qr ${appstoreLink}
|
||||
whiptail --title " App Store Link " --msgbox "\
|
||||
To install app open the following link:\n
|
||||
${appstoreLink}\n
|
||||
Or scan the qr code on the LCD with your mobile phone.
|
||||
" 11 70
|
||||
fi
|
||||
sudo /home/admin/config.scripts/blitz.display.sh hide
|
||||
/home/admin/config.scripts/bonus.lndconnect.sh fullynoded-lnd tor
|
||||
exit 0;
|
||||
;;
|
||||
|
||||
FULLYNODED_CL)
|
||||
if [ ! -L /home/bitcoin/cl-plugins-enabled/c-lightning-http-plugin ];then
|
||||
/home/admin/config.scripts/cl-plugin.http.sh on
|
||||
fi
|
||||
appstoreLink="https://apps.apple.com/us/app/fully-noded/id1436425586"
|
||||
sudo /home/admin/config.scripts/blitz.display.sh image /home/admin/raspiblitz/pictures/app_fullynoded.png
|
||||
whiptail --title "Install Fully Noded on your iOS device" \
|
||||
--yes-button "Continue" \
|
||||
--no-button "StoreLink" \
|
||||
--yesno "Open the Apple App Store on your mobile phone.\n\nSearch for --> 'fully noded'\n\nCheck that logo is like on LCD and author is: Denton LLC\nWhen app is installed and started --> Continue." 12 65
|
||||
if [ $? -eq 1 ]; then
|
||||
sudo /home/admin/config.scripts/blitz.display.sh qr ${appstoreLink}
|
||||
whiptail --title " App Store Link " --msgbox "\
|
||||
To install app open the following link:\n
|
||||
${appstoreLink}\n
|
||||
Or scan the qr code on the LCD with your mobile phone.
|
||||
" 11 70
|
||||
fi
|
||||
sudo /home/admin/config.scripts/blitz.display.sh hide
|
||||
/home/admin/config.scripts/cl-plugin.http.sh connect
|
||||
exit 0;
|
||||
;;
|
||||
|
||||
ZEUS_CLREST)
|
||||
sudo /home/admin/config.scripts/blitz.display.sh image /home/admin/raspiblitz/pictures/app_zeus.png
|
||||
whiptail --title "Install Zeus on your Android or iOS Phone" \
|
||||
--yes-button "Continue" \
|
||||
--no-button "Cancel" \
|
||||
--yesno "Open the https://zeusln.app/ on your mobile phone to find the App Store link or binary for your phone.\n\nWhen the app is installed and started --> Continue." 12 65
|
||||
if [ $? -eq 1 ]; then
|
||||
exit 0
|
||||
fi
|
||||
sudo /home/admin/config.scripts/blitz.display.sh hide
|
||||
/home/admin/config.scripts/cl.rest.sh connect
|
||||
exit 0;
|
||||
;;
|
||||
esac
|
||||
|
@ -17,23 +17,21 @@ clear
|
||||
if [ "${CHOICE}" = "COPY" ]; then
|
||||
echo "Starting COPY ..."
|
||||
sudo sed -i "s/^state=.*/state=recopy/g" /home/admin/raspiblitz.info
|
||||
/home/admin/50copyHDD.sh
|
||||
/home/admin/config.scripts/blitz.copychain.sh target
|
||||
sudo sed -i "s/^state=.*/state=na/g" /home/admin/raspiblitz.info
|
||||
|
||||
elif [ "${CHOICE}" = "RESYNC" ]; then
|
||||
echo "Starting RESYNC ..."
|
||||
/home/admin/50syncHDD.sh
|
||||
#TODO #FIXME
|
||||
# /home/admin/50syncHDD.sh
|
||||
dialog --pause "OK. System will reboot to activate changes." 8 58 8
|
||||
clear
|
||||
echo "rebooting .. (please wait)"
|
||||
sudo /home/admin/XXshutdown.sh reboot
|
||||
|
||||
elif [ "${CHOICE}" = "REINDEX" ]; then
|
||||
echo "Starting REINDEX ..."
|
||||
sudo /home/admin/config.scripts/network.reindex.sh
|
||||
sudo /home/admin/config.scripts/blitz.shutdown.sh reboot
|
||||
|
||||
elif [ "${CHOICE}" = "BACKUP" ]; then
|
||||
sudo /home/admin/config.scripts/lnd.rescue.sh backup
|
||||
/home/admin/config.scripts/lnd.compact.sh interactive
|
||||
sudo /home/admin/config.scripts/lnd.backup.sh lnd-export-gui
|
||||
echo "PRESS ENTER to continue."
|
||||
read key
|
||||
|
||||
|
@ -6,32 +6,51 @@ source /mnt/hdd/raspiblitz.conf
|
||||
|
||||
askBackupCopy()
|
||||
{
|
||||
whiptail --title "LND Data Backup" --yes-button "Backup" --no-button "Skip" --yesno "
|
||||
whiptail --title "Lightning Data Backup" --yes-button "Backup" --no-button "Skip" --yesno "
|
||||
Before deleting your data, do you want
|
||||
to make a backup of all your LND Data
|
||||
and download that file to your laptop?
|
||||
to make a backup of all your Lightning Data
|
||||
and download the file(s) to your laptop?
|
||||
|
||||
Download LND Data Backup now?
|
||||
Download Lightning Data Backup now?
|
||||
" 12 44
|
||||
if [ $? -eq 0 ]; then
|
||||
clear
|
||||
echo "*************************************"
|
||||
echo "* PREPARING LND BACKUP DOWNLOAD"
|
||||
echo "*************************************"
|
||||
echo "please wait .."
|
||||
sleep 2
|
||||
/home/admin/config.scripts/lnd.rescue.sh backup
|
||||
echo
|
||||
echo "PRESS ENTER to continue once you are done downloading."
|
||||
read key
|
||||
if [ "${lightning}" == "lnd" ] || [ "${lnd}" = "on" ]; then
|
||||
clear
|
||||
echo "***********************************"
|
||||
echo "* PREPARING THE LND BACKUP DOWNLOAD"
|
||||
echo "***********************************"
|
||||
echo "please wait .."
|
||||
/home/admin/config.scripts/lnd.compact.sh interactive
|
||||
/home/admin/config.scripts/lnd.backup.sh lnd-export-gui
|
||||
echo
|
||||
echo "PRESS ENTER to continue once you're done downloading."
|
||||
read key
|
||||
fi
|
||||
if [ "${lightning}" == "cl" ] || [ "${cl}" = "on" ]; then
|
||||
clear
|
||||
echo "**********************************************"
|
||||
echo "* PREPARING THE CORE LIGHTNING BACKUP DOWNLOAD"
|
||||
echo "**********************************************"
|
||||
echo "please wait .."
|
||||
/home/admin/config.scripts/cl.backup.sh cl-export-gui
|
||||
echo
|
||||
echo "PRESS ENTER to continue once you're done downloading."
|
||||
read key
|
||||
fi
|
||||
else
|
||||
clear
|
||||
echo "*************************************"
|
||||
echo "* JUST MAKING BACKUP TO SD CARD"
|
||||
echo "* JUST MAKING A BACKUP TO THE SD CARD"
|
||||
echo "*************************************"
|
||||
echo "please wait .."
|
||||
sleep 2
|
||||
/home/admin/config.scripts/lnd.rescue.sh backup no-download
|
||||
if [ "${lightning}" == "lnd" ] || [ "${lnd}" = "on" ]; then
|
||||
/home/admin/config.scripts/lnd.backup.sh lnd-export
|
||||
fi
|
||||
if [ "${lightning}" == "cl" ] || [ "${cl}" = "on" ]; then
|
||||
/home/admin/config.scripts/cl.backup.sh cl-export
|
||||
fi
|
||||
sleep 3
|
||||
fi
|
||||
}
|
||||
|
||||
@ -46,156 +65,74 @@ RaspiBlitz image to your SD card.
|
||||
" 12 40
|
||||
}
|
||||
|
||||
copyHost()
|
||||
{
|
||||
clear
|
||||
echo
|
||||
echo "# *** Copy Blockchain Source Modus ***"
|
||||
# get status of txindex
|
||||
source <(sudo /home/admin/config.scripts/network.txindex.sh status)
|
||||
|
||||
echo "# get IP of RaspiBlitz to copy to ..."
|
||||
targetIP=$(whiptail --inputbox "\nPlease enter the LOCAL IP of the\nRaspiBlitz to copy Blockchain to:" 10 38 "" --title " Target IP " --backtitle "RaspiBlitz - Copy Blockchain" 3>&1 1>&2 2>&3)
|
||||
targetIP=$(echo "${targetIP[0]}")
|
||||
localIP=$(ip addr | grep 'state UP' -A2 | egrep -v 'docker0|veth' | grep 'eth0\|wlan0\|enp0' | tail -n1 | awk '{print $2}' | cut -f1 -d'/')
|
||||
if [ ${#targetIP} -eq 0 ]; then
|
||||
return
|
||||
fi
|
||||
if [ "${localIP}" == "${targetIP}" ]; then
|
||||
whiptail --msgbox "Dont type in the local IP of this RaspiBlitz,\nthe LOCAL IP of the other RaspiBlitz is needed." 8 54 "" --title " Testing Target IP " --backtitle "RaspiBlitz - Copy Blockchain"
|
||||
return
|
||||
fi
|
||||
canPingIP=$(ping ${targetIP} -c 1 | grep -c "1 received")
|
||||
if [ ${canPingIP} -eq 0 ]; then
|
||||
whiptail --msgbox "Was not able to contact/ping: ${targetIP}\n\n- check if IP of target RaspiBlitz is correct.\n- check to be on the same local network.\n- try again ..." 11 58 "" --title " Testing Target IP " --backtitle "RaspiBlitz - Copy Blockchain"
|
||||
return
|
||||
fi
|
||||
|
||||
echo "# get Password of RaspiBlitz to copy to ..."
|
||||
targetPassword=$(whiptail --passwordbox "\nPlease enter the PASSWORD A of the\nRaspiBlitz to copy Blockchain to:" 10 38 "" --title "Target Password" --backtitle "RaspiBlitz - Copy Blockchain" 3>&1 1>&2 2>&3)
|
||||
if [ ${#targetPassword} -eq 0 ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
sudo rm /root/.ssh/known_hosts 2>/dev/null
|
||||
canLogin=$(sudo sshpass -p "${targetPassword}" ssh -t -o StrictHostKeyChecking=no bitcoin@${targetIP} "echo 'working'" 2>/dev/null | grep -c 'working')
|
||||
if [ ${canLogin} -eq 0 ]; then
|
||||
whiptail --msgbox "Password was not working for IP: ${targetIP}\n\n- check thats the correct IP for correct RaspiBlitz\n- check that you used PASSWORD A and had no typo\n- If you tried too often, wait 1h try again" 11 58 "" --title " Testing Target Password " --backtitle "RaspiBlitz - Copy Blockchain"
|
||||
return
|
||||
fi
|
||||
|
||||
echo "# stopping services ..."
|
||||
sudo systemctl stop background
|
||||
sudo systemctl stop lnd
|
||||
sudo systemctl stop ${network}d
|
||||
sudo systemctl disable ${network}d
|
||||
sleep 5
|
||||
sudo systemctl stop bitcoind 2>/dev/null
|
||||
|
||||
clear
|
||||
echo
|
||||
echo "# Starting copy over LAN (around 4-6 hours) ..."
|
||||
sed -i "s/^state=.*/state=copysource/g" /home/admin/raspiblitz.info
|
||||
cd /mnt/hdd/${network}
|
||||
|
||||
# transfere beginning flag
|
||||
date +%s > /home/admin/copy_begin.time
|
||||
sudo sshpass -p "${targetPassword}" rsync -avhW -e 'ssh -o StrictHostKeyChecking=no -p 22' /home/admin/copy_begin.time bitcoin@${targetIP}:/mnt/hdd/bitcoin
|
||||
sudo rm -f /home/admin/copy_begin.time
|
||||
|
||||
# repeat the syncing of directories until
|
||||
# a) there are no files left to transfere (be robust against failing connections, etc)
|
||||
# b) the user hits a key to break loop after report
|
||||
|
||||
|
||||
while :
|
||||
do
|
||||
|
||||
# transfere blockchain data
|
||||
rm -f ./transferred.rsync
|
||||
sudo sshpass -p "${targetPassword}" rsync -avhW -e 'ssh -o StrictHostKeyChecking=no -p 22' --info=progress2 --log-file=./transferred.rsync ./chainstate ./blocks bitcoin@${targetIP}:/mnt/hdd/bitcoin
|
||||
|
||||
# check result
|
||||
# the idea is even after successfull transfer the loop will run a second time
|
||||
# but on the second time there will be no files transfered (log lines are below 4)
|
||||
# thats the signal that its done
|
||||
linesInLogFile=$(wc -l ./transferred.rsync | cut -d " " -f 1)
|
||||
if [ ${linesInLogFile} -lt 4 ]; then
|
||||
echo ""
|
||||
echo "OK all files transfered. DONE"
|
||||
sleep 2
|
||||
break
|
||||
fi
|
||||
|
||||
# wait 20 seconds for user exiting loop
|
||||
echo ""
|
||||
echo -en "OK on sync loop done ... will test in another if all was transferred."
|
||||
echo -en "PRESS X TO MANUALLY FINISH SYNCING"
|
||||
read -n 1 -t 6 keyPressed
|
||||
if [ "${keyPressed}" = "x" ]; then
|
||||
echo ""
|
||||
echo "Ending Sync ..."
|
||||
sleep 2
|
||||
break
|
||||
fi
|
||||
|
||||
done
|
||||
|
||||
# transfere end flag
|
||||
sed -i "s/^state=.*/state=/g" /home/admin/raspiblitz.info
|
||||
date +%s > /home/admin/copy_end.time
|
||||
sudo sshpass -p "${targetPassword}" rsync -avhW -e 'ssh -o StrictHostKeyChecking=no -p 22' /home/admin/copy_end.time bitcoin@${targetIP}:/mnt/hdd/bitcoin
|
||||
sudo rm -f /home/admin/copy_end.time
|
||||
|
||||
echo "# start services again ..."
|
||||
sudo systemctl enable ${network}d
|
||||
sudo systemctl start ${network}d
|
||||
sudo systemctl start lnd
|
||||
sudo systemctl start background
|
||||
|
||||
echo "# show final message"
|
||||
whiptail --msgbox "OK - Copy Process Finished.\n\nNow check on the target RaspiBlitz if it was sucessful." 10 40 "" --title " DONE " --backtitle "RaspiBlitz - Copy Blockchain"
|
||||
|
||||
}
|
||||
|
||||
# when called with parameter "sourcemode"
|
||||
if [ "$1" == "sourcemode" ]; then
|
||||
copyHost
|
||||
raspiblitz
|
||||
exit 0
|
||||
OPTIONS=()
|
||||
#OPTIONS+=(HARDWARE "Run Hardwaretest")
|
||||
OPTIONS+=(SOFTWARE "Run Softwaretest (DebugReport)")
|
||||
if [ "${lightning}" == "lnd" ] || [ "${lnd}" == "on" ]; then
|
||||
OPTIONS+=(REPAIR-LND "Repair/Backup LND")
|
||||
fi
|
||||
if [ "${lightning}" == "cl" ] || [ "${cl}" == "on" ]; then
|
||||
OPTIONS+=(REPAIR-CL "Repair/Backup Core Lightning")
|
||||
fi
|
||||
OPTIONS+=(MIGRATION "Migrate Blitz Data to new Hardware")
|
||||
OPTIONS+=(COPY-SOURCE "Copy Blockchain Source Modus")
|
||||
if [ "${txindex}" == "1" ]; then
|
||||
OPTIONS+=(DELETE-INDEX "Reindex Bitcoin Transaction-Index")
|
||||
elif [ "${indexByteSize}" != "0" ]; then
|
||||
OPTIONS+=(DELETE-INDEX "Delete Bitcoin Transaction-Index")
|
||||
fi
|
||||
OPTIONS+=(REINDEX-UTXO "Redindex Just Bitcoin Chainstate (Fast)")
|
||||
OPTIONS+=(REINDEX-FULL "Redindex Full Bitcoin Blockchain (Slow)")
|
||||
OPTIONS+=(RESET-CHAIN "Delete Blockchain & Re-Download")
|
||||
OPTIONS+=(RESET-HDD "Delete HDD Data but keep Blockchain")
|
||||
OPTIONS+=(RESET-ALL "Delete HDD completely to start fresh")
|
||||
OPTIONS+=(DELETE-ELEC "Delete Electrum Index")
|
||||
|
||||
# Basic Options
|
||||
#OPTIONS=(HARDWARE "Run Hardwaretest" \
|
||||
OPTIONS=(SOFTWARE "Run Softwaretest (DebugReport)" \
|
||||
BACKUP-LND "Backup your LND data (Rescue-File)" \
|
||||
MIGRATION "Migrate Blitz Data to new Hardware" \
|
||||
COPY-SOURCE "Copy Blockchain Source Modus" \
|
||||
RESET-CHAIN "Delete Blockchain & Re-Download" \
|
||||
RESET-LND "Delete LND & start new node/wallet" \
|
||||
RESET-HDD "Delete HDD Data but keep Blockchain" \
|
||||
RESET-ALL "Delete HDD completly to start fresh" \
|
||||
DELETE-ELEC "Delete Electrum Index" \
|
||||
DELETE-INDEX "Delete Bitcoin Transaction-Index"
|
||||
)
|
||||
|
||||
CHOICE=$(whiptail --clear --title "Repair Options" --menu "" 18 62 11 "${OPTIONS[@]}" 2>&1 >/dev/tty)
|
||||
CHOICE=$(whiptail --clear --title "Repair Options" --menu "" 19 62 12 "${OPTIONS[@]}" 2>&1 >/dev/tty)
|
||||
|
||||
clear
|
||||
case $CHOICE in
|
||||
# HARDWARE)
|
||||
# ;;
|
||||
SOFTWARE)
|
||||
sudo /home/admin/XXdebugLogs.sh
|
||||
echo "Generating debug logs. Be patient, this should take maximum 2 minutes .."
|
||||
sudo rm /var/cache/raspiblitz/debug.log 2>/dev/null
|
||||
/home/admin/config.scripts/blitz.debug.sh > /var/cache/raspiblitz/debug.log
|
||||
echo "Redacting .."
|
||||
/home/admin/config.scripts/blitz.debug.sh redact /var/cache/raspiblitz/debug.log
|
||||
sudo chmod 640 /var/cache/raspiblitz/debug.log
|
||||
sudo chown root:sudo /var/cache/raspiblitz/debug.log
|
||||
cat /var/cache/raspiblitz/debug.log
|
||||
echo
|
||||
echo "Press ENTER to return to main menu."
|
||||
read key
|
||||
;;
|
||||
BACKUP-LND)
|
||||
sudo /home/admin/config.scripts/lnd.rescue.sh backup
|
||||
REPAIR-LND)
|
||||
/home/admin/99lndRepairMenu.sh
|
||||
echo
|
||||
echo "Press ENTER when your backup download is done to shutdown."
|
||||
echo "Press ENTER to return to main menu."
|
||||
read key
|
||||
;;
|
||||
REPAIR-CL)
|
||||
/home/admin/99clRepairMenu.sh
|
||||
echo
|
||||
echo "Press ENTER to return to main menu."
|
||||
read key
|
||||
/home/admin/XXshutdown.sh
|
||||
;;
|
||||
MIGRATION)
|
||||
if [ "${cl}" == "on" ] || [ "${cl}" == "1" ] && [ "${clEncryptedHSM}" != "on" ] ; then
|
||||
dialog \
|
||||
--title "Encrypt the Core Lightning wallet" \
|
||||
--msgbox "\nWill proceed to encrypt and lock the Core Lightning wallet to prevent it from starting automatically after the backup" 9 55
|
||||
sudo /home/admin/config.scripts/cl.hsmtool.sh encrypt mainnet
|
||||
fi
|
||||
if [ "${clAutoUnlock}" = "on" ]; then
|
||||
/home/admin/config.scripts/cl.hsmtool.sh autounlock-off mainnet
|
||||
fi
|
||||
/home/admin/config.scripts/cl.hsmtool.sh lock mainnet
|
||||
sudo /home/admin/config.scripts/blitz.migration.sh "export-gui"
|
||||
echo "Press ENTER to return to main menu."
|
||||
read key
|
||||
@ -206,37 +143,6 @@ case $CHOICE in
|
||||
echo "For reboot type: sudo shutdown -r now"
|
||||
exit 1;
|
||||
;;
|
||||
RESET-LND)
|
||||
askBackupCopy
|
||||
# ask for a new name so that network analysis has harder time to connect new node id with old
|
||||
result=""
|
||||
while [ ${#result} -eq 0 ]
|
||||
do
|
||||
_temp=$(mktemp -p /dev/shm/)
|
||||
l1="Please enter the new name of your LND node:\n"
|
||||
l2="different name is better for a fresh identity\n"
|
||||
l3="one word, keep characters basic & not too long"
|
||||
dialog --backtitle "RaspiBlitz - Setup (${network}/${chain})" --inputbox "$l1$l2$l3" 13 52 2>$_temp
|
||||
result=$( cat $_temp | tr -dc '[:alnum:]-.' | tr -d ' ' )
|
||||
shred -u $_temp
|
||||
echo "processing ..."
|
||||
sleep 3
|
||||
done
|
||||
|
||||
# make sure host is named like in the raspiblitz config
|
||||
echo "Setting the Name/Alias/Hostname .."
|
||||
sudo /home/admin/config.scripts/lnd.setname.sh ${result}
|
||||
sudo sed -i "s/^hostname=.*/hostname=${result}/g" /mnt/hdd/raspiblitz.conf
|
||||
|
||||
echo "stopping lnd ..."
|
||||
sudo systemctl stop lnd
|
||||
sudo rm -r /mnt/hdd/lnd
|
||||
/home/admin/70initLND.sh
|
||||
|
||||
# go back to main menu (and show)
|
||||
/home/admin/00raspiblitz.sh
|
||||
exit 1;
|
||||
;;
|
||||
RESET-HDD)
|
||||
askBackupCopy
|
||||
/home/admin/XXcleanHDD.sh
|
||||
@ -253,14 +159,24 @@ case $CHOICE in
|
||||
;;
|
||||
DELETE-ELEC)
|
||||
/home/admin/config.scripts/bonus.electrs.sh off deleteindex
|
||||
exit 1;
|
||||
exit 0;
|
||||
;;
|
||||
DELETE-INDEX)
|
||||
/home/admin/config.scripts/network.txindex.sh delete
|
||||
exit 1;
|
||||
exit 0;
|
||||
;;
|
||||
REINDEX-UTXO)
|
||||
/home/admin/config.scripts/network.reindex.sh reindex-chainstate mainnet
|
||||
exit 0;
|
||||
;;
|
||||
REINDEX-FULL)
|
||||
/home/admin/config.scripts/network.reindex.sh reindex mainnet
|
||||
exit 0;
|
||||
;;
|
||||
COPY-SOURCE)
|
||||
copyHost
|
||||
/home/admin/config.scripts/blitz.copychain.sh source
|
||||
/home/admin/config.scripts/lnd.unlock.sh
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
123
home.admin/99clMenu.sh
Normal file
@ -0,0 +1,123 @@
|
||||
#!/bin/bash
|
||||
|
||||
# get raspiblitz config
|
||||
echo "# get raspiblitz config"
|
||||
source /home/admin/raspiblitz.info
|
||||
source /mnt/hdd/raspiblitz.conf
|
||||
|
||||
source <(/home/admin/config.scripts/network.aliases.sh getvars cl $1)
|
||||
|
||||
# make sure the CL wallet is unlocked
|
||||
/home/admin/config.scripts/cl.hsmtool.sh unlock ${CHAIN}
|
||||
|
||||
# BASIC MENU INFO
|
||||
WIDTH=64
|
||||
BACKTITLE="RaspiBlitz"
|
||||
TITLE=" Core Lightning Options (${CHAIN})"
|
||||
MENU=""
|
||||
OPTIONS=()
|
||||
OPTIONS+=(FUNDING "Fund the Core Lightning wallet onchain")
|
||||
OPTIONS+=(PEERING "Connect to a peer")
|
||||
OPTIONS+=(CHANNEL "Open a channel with peer")
|
||||
OPTIONS+=(SEND "Pay an invoice / payment request")
|
||||
OPTIONS+=(RECEIVE "Create an invoice / payment request")
|
||||
OPTIONS+=(SUMMARY "Information about this node")
|
||||
OPTIONS+=(NAME "Change the name / alias of the node")
|
||||
ln_getInfo=$($lightningcli_alias getinfo 2>/dev/null)
|
||||
ln_channels_online="$(echo "${ln_getInfo}" | jq -r '.num_active_channels')" 2>/dev/null
|
||||
cl_num_inactive_channels="$(echo "${ln_getInfo}" | jq -r '.num_inactive_channels')" 2>/dev/null
|
||||
openChannels=$((ln_channels_online+cl_num_inactive_channels))
|
||||
if [ ${#openChannels} -gt 0 ] && [ ${openChannels} -gt 0 ]; then
|
||||
OPTIONS+=(SUEZ "Visualize channels")
|
||||
OPTIONS+=(CLOSEALL "Close all open channels on $CHAIN")
|
||||
fi
|
||||
OPTIONS+=(CASHOUT "Withdraw all funds onchain ($CHAIN)")
|
||||
OPTIONS+=(SEED "Show Wallet Seed Words")
|
||||
if [ "${clWatchtowerClient}" == "on" ] && [ "${CHAIN}" == "mainnet" ]; then
|
||||
OPTIONS+=(WATCHTOWER "Watchtower Client Options")
|
||||
fi
|
||||
OPTIONS+=(REPAIR-CL "Repair options for Core Lightning")
|
||||
if [ "${lightning}" != "cl" ] && [ "${CHAIN}" == "mainnet" ]; then
|
||||
OPTIONS+=(SWITCHLN "Use Core Lightning as default")
|
||||
fi
|
||||
|
||||
CHOICE_HEIGHT=$(("${#OPTIONS[@]}/2+1"))
|
||||
HEIGHT=$((CHOICE_HEIGHT+6))
|
||||
CHOICE=$(dialog --clear \
|
||||
--backtitle "$BACKTITLE" \
|
||||
--title "$TITLE" \
|
||||
--ok-label "Select" \
|
||||
--cancel-label "Main menu" \
|
||||
--menu "$MENU" \
|
||||
$HEIGHT $WIDTH $CHOICE_HEIGHT \
|
||||
"${OPTIONS[@]}" \
|
||||
2>&1 >/dev/tty)
|
||||
|
||||
case $CHOICE in
|
||||
SUMMARY)
|
||||
clear
|
||||
/home/admin/config.scripts/cl-plugin.summars.sh $CHAIN
|
||||
echo "Press ENTER to return to main menu."
|
||||
read key
|
||||
;;
|
||||
PEERING)
|
||||
/home/admin/BBconnectPeer.sh cl $CHAIN
|
||||
;;
|
||||
FUNDING)
|
||||
/home/admin/BBfundWallet.sh cl $CHAIN
|
||||
;;
|
||||
CASHOUT)
|
||||
/home/admin/BBcashoutWallet.sh cl $CHAIN
|
||||
;;
|
||||
CHANNEL)
|
||||
/home/admin/BBopenChannel.sh cl $CHAIN
|
||||
;;
|
||||
SEND)
|
||||
/home/admin/BBpayInvoice.sh cl $CHAIN
|
||||
;;
|
||||
RECEIVE)
|
||||
/home/admin/BBcreateInvoice.sh cl $CHAIN
|
||||
;;
|
||||
SEED)
|
||||
sudo /home/admin/config.scripts/cl.install.sh display-seed $CHAIN
|
||||
;;
|
||||
NAME)
|
||||
sudo /home/admin/config.scripts/cl.setname.sh $CHAIN
|
||||
;;
|
||||
WATCHTOWER)
|
||||
/home/admin/config.scripts/cl-plugin.watchtower-client.sh info
|
||||
;;
|
||||
SUEZ)
|
||||
clear
|
||||
if [ ! -f /home/bitcoin/suez/suez ];then
|
||||
/home/admin/config.scripts/bonus.suez.sh on
|
||||
fi
|
||||
cd /home/bitcoin/suez || exit 1
|
||||
echo
|
||||
sudo -u bitcoin poetry run /home/bitcoin/suez/suez --client=c-lightning --client-args=--conf=${CLCONF}
|
||||
echo
|
||||
echo "Press ENTER to return to main menu."
|
||||
read key
|
||||
;;
|
||||
CLOSEALL)
|
||||
/home/admin/BBcloseAllChannels.sh cl $CHAIN
|
||||
echo "Press ENTER to return to main menu."
|
||||
read key
|
||||
;;
|
||||
REPAIR-CL)
|
||||
/home/admin/99clRepairMenu.sh $CHAIN
|
||||
;;
|
||||
SWITCHLN)
|
||||
clear
|
||||
echo
|
||||
# setting value in the raspiblitz.conf
|
||||
/home/admin/config.scripts/blitz.conf.sh set lightning "cl"
|
||||
sudo systemctl restart blitzapi 2>/dev/null
|
||||
echo "# OK - lightning=cl is set in /mnt/hdd/raspiblitz.conf"
|
||||
echo
|
||||
echo "Press ENTER to return to main menu."
|
||||
read key
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
224
home.admin/99clRepairMenu.sh
Normal file
@ -0,0 +1,224 @@
|
||||
#!/bin/bash
|
||||
|
||||
# get raspiblitz config
|
||||
echo "# get raspiblitz config"
|
||||
source /home/admin/raspiblitz.info
|
||||
source /mnt/hdd/raspiblitz.conf
|
||||
|
||||
source <(/home/admin/config.scripts/network.aliases.sh getvars cl $1)
|
||||
|
||||
sudo mkdir /var/cache/raspiblitz/temp 2>/dev/null
|
||||
|
||||
|
||||
function clRescan() {
|
||||
trap 'rm -f "$_temp"' EXIT
|
||||
_temp=$(mktemp -p /dev/shm/)
|
||||
dialog --backtitle "Choose the new gap limit" \
|
||||
--title "Enter the rescan depth or blockheight (-)" \
|
||||
--inputbox "
|
||||
Enter the number of blocks to rescan from the current tip
|
||||
or use a negative number for the absolute blockheight to scan from.
|
||||
|
||||
If left empty will start to rescan from the block 700000 (-700000).
|
||||
" 12 71 2> "$_temp"
|
||||
BLOCK=$(cat "$_temp")
|
||||
if [ ${#BLOCK} -eq 0 ]; then
|
||||
BLOCK="-700000"
|
||||
fi
|
||||
sudo /home/admin/config.scripts/cl.backup.sh "${CHAIN}" recoverymode on "${BLOCK}"
|
||||
sudo systemctl restart ${netprefix}lightningd
|
||||
}
|
||||
|
||||
function resetWallet() {
|
||||
echo "# Delete ${CLCONF}"
|
||||
sudo rm -f ${CLCONF}
|
||||
echo "# Delete and recreate /home/bitcoin/.lightning/${CLNETWORK}"
|
||||
sudo rm -rf /home/bitcoin/.lightning/${CLNETWORK}
|
||||
sudo -u bitcoin mkdir /home/bitcoin/.lightning/${CLNETWORK}
|
||||
}
|
||||
|
||||
# BASIC MENU INFO
|
||||
WIDTH=64
|
||||
BACKTITLE="RaspiBlitz"
|
||||
TITLE="Core Lightning repair options for $CHAIN"
|
||||
MENU=""
|
||||
OPTIONS=()
|
||||
|
||||
if [ "$(eval echo \$${netprefix}clEncryptedHSM)" = "off" ];then
|
||||
OPTIONS+=(ENCRYPT "Encrypt the hsm_secret")
|
||||
elif [ "$(eval echo \$${netprefix}clEncryptedHSM)" = "on" ];then
|
||||
OPTIONS+=(PASSWORD_C "Change the hsm_secret encryption password")
|
||||
OPTIONS+=(DECRYPT "Decrypt the hsm_secret")
|
||||
if [ ! -f "/home/bitcoin/.${netprefix}cl.pw" ]; then
|
||||
OPTIONS+=(AUTOUNLOCK-ON "Auto-decrypt the hsm_secret after boot")
|
||||
else
|
||||
OPTIONS+=(AUTOUNLOCK-OFF "Do not auto-decrypt the hsm_secret after boot")
|
||||
fi
|
||||
fi
|
||||
OPTIONS+=(BACKUP "Full backup (hsm_secret + lightningd.sqlite3)")
|
||||
OPTIONS+=(RESET "Reset the wallet and create new")
|
||||
OPTIONS+=(FILERESTORE "Restore from a rescue file")
|
||||
OPTIONS+=(SEEDRESTORE "Restore from a seed (onchain funds only)")
|
||||
OPTIONS+=(RESCAN "Rescan for onchain funds from a given block")
|
||||
|
||||
CHOICE_HEIGHT=$(("${#OPTIONS[@]}/2+1"))
|
||||
HEIGHT=$((CHOICE_HEIGHT+6))
|
||||
CHOICE=$(dialog --clear \
|
||||
--backtitle "$BACKTITLE" \
|
||||
--title "$TITLE" \
|
||||
--ok-label "Select" \
|
||||
--cancel-label "Main menu" \
|
||||
--menu "$MENU" \
|
||||
$HEIGHT $WIDTH $CHOICE_HEIGHT \
|
||||
"${OPTIONS[@]}" \
|
||||
2>&1 >/dev/tty)
|
||||
|
||||
case $CHOICE in
|
||||
ENCRYPT)
|
||||
sudo /home/admin/config.scripts/cl.hsmtool.sh encrypt $CHAIN
|
||||
source /mnt/hdd/raspiblitz.conf
|
||||
;;
|
||||
|
||||
DECRYPT)
|
||||
/home/admin/config.scripts/cl.hsmtool.sh decrypt $CHAIN
|
||||
source /mnt/hdd/raspiblitz.conf
|
||||
;;
|
||||
|
||||
PASSWORD_C)
|
||||
/home/admin/config.scripts/cl.hsmtool.sh change-password $CHAIN
|
||||
;;
|
||||
|
||||
AUTOUNLOCK-ON)
|
||||
/home/admin/config.scripts/cl.hsmtool.sh autounlock-on $CHAIN
|
||||
;;
|
||||
|
||||
AUTOUNLOCK-OFF)
|
||||
/home/admin/config.scripts/cl.hsmtool.sh autounlock-off $CHAIN
|
||||
;;
|
||||
|
||||
BACKUP)
|
||||
if [ "${cl}" == "on" ] || [ "${cl}" == "1" ] && [ "${clEncryptedHSM}" != "on" ]; then
|
||||
dialog \
|
||||
--title "Encrypt the Core Lightning wallet" \
|
||||
--msgbox "
|
||||
Will proceed to encrypt and lock the Core Lightning wallet to prevent it from starting automatically after the backup.
|
||||
Save this password as it will be needed to restore the backup (same as the Password C for CLN)." 10 55
|
||||
sudo /home/admin/config.scripts/cl.hsmtool.sh encrypt mainnet
|
||||
fi
|
||||
if [ "${clAutoUnlock}" = "on" ]; then
|
||||
/home/admin/config.scripts/cl.hsmtool.sh autounlock-off mainnet
|
||||
fi
|
||||
/home/admin/config.scripts/cl.hsmtool.sh lock mainnet
|
||||
## from dialogLightningWallet.sh
|
||||
_temp="/var/cache/raspiblitz/temp/.temp.tmp"
|
||||
clear
|
||||
/home/admin/config.scripts/cl.backup.sh cl-export-gui production $_temp
|
||||
source $_temp 2>/dev/null
|
||||
sudo rm $_temp 2>/dev/null
|
||||
echo
|
||||
echo "Press ENTER when finished downloading."
|
||||
read key
|
||||
;;
|
||||
|
||||
RESET)
|
||||
# backup
|
||||
## from dialogLightningWallet.sh
|
||||
_temp="/var/cache/raspiblitz/temp/.temp.tmp"
|
||||
clear
|
||||
/home/admin/config.scripts/cl.backup.sh cl-export-gui production $_temp
|
||||
source $_temp 2>/dev/null
|
||||
sudo rm $_temp 2>/dev/null
|
||||
echo
|
||||
echo "The rescue file is stored on the SDcard named cl-rescue.*.tar.gz just in case."
|
||||
echo
|
||||
echo "The next step will overwrite the old Core Lightning $CHAIN wallet"
|
||||
echo "Press ENTER to continue or CTRL+C to abort"
|
||||
read key
|
||||
|
||||
resetWallet
|
||||
|
||||
# make sure the new hsm_secret is treated as unencrypted and clear autounlock
|
||||
/home/admin/config.scripts/blitz.conf.sh set ${netprefix}clEncryptedHSM "off"
|
||||
/home/admin/config.scripts/blitz.conf.sh set ${netprefix}clAutoUnlock "off"
|
||||
# new
|
||||
/home/admin/config.scripts/cl.hsmtool.sh new $CHAIN
|
||||
# create config
|
||||
/home/admin/config.scripts/cl.install.sh on $CHAIN
|
||||
# set the lightningd service file on each active network
|
||||
if [ "${cl}" == "on" ] || [ "${cl}" == "1" ]; then
|
||||
/home/admin/config.scripts/cl.install-service.sh mainnet
|
||||
fi
|
||||
if [ "${tcl}" == "on" ] || [ "${tcl}" == "1" ]; then
|
||||
/home/admin/config.scripts/cl.install-service.sh testnet
|
||||
fi
|
||||
if [ "${scl}" == "on" ] || [ "${scl}" == "1" ]; then
|
||||
/home/admin/config.scripts/cl.install-service.sh signet
|
||||
fi
|
||||
;;
|
||||
|
||||
FILERESTORE)
|
||||
# backup
|
||||
## from dialogLightningWallet.sh
|
||||
_temp="/var/cache/raspiblitz/temp/.temp.tmp"
|
||||
clear
|
||||
/home/admin/config.scripts/cl.backup.sh cl-export-gui production $_temp
|
||||
source $_temp 2>/dev/null
|
||||
sudo rm $_temp 2>/dev/null
|
||||
echo
|
||||
echo "The rescue file is stored on the SDcard named cl-rescue.*.tar.gz just in case."
|
||||
echo
|
||||
echo "The next step will overwrite the old Core Lightning $CHAIN wallet"
|
||||
echo "Press ENTER to continue or CTRL+C to abort"
|
||||
read key
|
||||
|
||||
resetWallet
|
||||
|
||||
# import file
|
||||
_temp="/var/cache/raspiblitz/temp/.temp.tmp"
|
||||
clear
|
||||
/home/admin/config.scripts/cl.backup.sh cl-import-gui production $_temp
|
||||
source $_temp 2>/dev/null
|
||||
sudo rm $_temp 2>/dev/null
|
||||
;;
|
||||
|
||||
SEEDRESTORE)
|
||||
# backup
|
||||
## from dialogLightningWallet.sh
|
||||
_temp="/var/cache/raspiblitz/temp/.temp.tmp"
|
||||
clear
|
||||
/home/admin/config.scripts/cl.backup.sh cl-export-gui production $_temp
|
||||
source $_temp 2>/dev/null
|
||||
sudo rm $_temp 2>/dev/null
|
||||
echo
|
||||
echo "The rescue file is stored on the SDcard named cl-rescue.*.tar.gz just in case."
|
||||
echo
|
||||
echo "The next step will overwrite the old Core Lightning $CHAIN wallet"
|
||||
echo "Press ENTER to continue or CTRL+C to abort"
|
||||
read key
|
||||
|
||||
resetWallet
|
||||
|
||||
# import seed
|
||||
_temp="/var/cache/raspiblitz/.temp.tmp"
|
||||
/home/admin/config.scripts/cl.backup.sh seed-import-gui $_temp
|
||||
source $_temp
|
||||
/home/admin/config.scripts/cl.hsmtool.sh seed-force "$CHAIN" "${seedWords}"
|
||||
sudo rm $_temp 2>/dev/null
|
||||
if ! sudo ls /home/bitcoin/.lightning/${CLNETWORK}/hsm_secret 2>/dev/null; then
|
||||
echo "# There was no hsm_secret created - exiting"
|
||||
exit 15
|
||||
fi
|
||||
# regenerate config
|
||||
/home/admin/config.scripts/cl.hsmtool.sh autounlock-off
|
||||
/home/admin/config.scripts/cl.hsmtool.sh decrypt
|
||||
/home/admin/config.scripts/cl.install.sh on $CHAIN
|
||||
|
||||
clRescan
|
||||
;;
|
||||
|
||||
RESCAN)
|
||||
clRescan
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
@ -5,13 +5,12 @@ echo "get raspiblitz config"
|
||||
source /home/admin/raspiblitz.info
|
||||
source /mnt/hdd/raspiblitz.conf
|
||||
|
||||
# get the local network IP to be displayed on the LCD
|
||||
source <(/home/admin/config.scripts/internet.sh status local)
|
||||
source <(/home/admin/_cache.sh get internet_localip internet_localiprange)
|
||||
localIP="${internet_localip}"
|
||||
localIPrange="${internet_localiprange}"
|
||||
|
||||
# BASIC MENU INFO
|
||||
HEIGHT=12
|
||||
WIDTH=64
|
||||
CHOICE_HEIGHT=6
|
||||
BACKTITLE="RaspiBlitz"
|
||||
TITLE="Connect Options"
|
||||
MENU=""
|
||||
@ -20,20 +19,27 @@ OPTIONS=()
|
||||
OPTIONS+=(MOBILE "Connect Mobile Wallet")
|
||||
if [ "${ElectRS}" == "on" ]; then
|
||||
OPTIONS+=(ELECTRS "Electrum Rust Server")
|
||||
HEIGHT=$((HEIGHT+1))
|
||||
CHOICE_HEIGHT=$((CHOICE_HEIGHT+1))
|
||||
fi
|
||||
if [ "${BTCPayServer}" == "on" ]; then
|
||||
OPTIONS+=(BTCPAY "Show LND connection string")
|
||||
HEIGHT=$((HEIGHT+1))
|
||||
CHOICE_HEIGHT=$((CHOICE_HEIGHT+1))
|
||||
if [ "${BTCPayServer}" == "on" ] && [ "${lnd}" = "on" ]; then
|
||||
OPTIONS+=(BTCPAY-LND "Show LND connection string")
|
||||
fi
|
||||
if [ "${BTCPayServer}" == "on" ] && [ "${cl}" = "on" ]; then
|
||||
OPTIONS+=(BTCPAY-CLN "Show CLN connection string")
|
||||
fi
|
||||
OPTIONS+=(${network}RPC "Connect Specter Desktop or JoinMarket")
|
||||
OPTIONS+=(BISQ "Connect Bisq to this node")
|
||||
OPTIONS+=(EXPORT "Get Macaroons and TLS.cert")
|
||||
OPTIONS+=(RESET "Recreate LND Macaroons & tls.cert")
|
||||
OPTIONS+=(SYNC "Sync Macaroons & tls.cert with Apps/Users")
|
||||
if [ "${lightning}" == "lnd" ] || [ "${lnd}" == "on" ]; then
|
||||
OPTIONS+=(ALBY "Connect Alby to this node")
|
||||
OPTIONS+=(EXPORT "Get Macaroons and TLS.cert")
|
||||
OPTIONS+=(RESET "Recreate LND Macaroons & tls.cert")
|
||||
OPTIONS+=(SYNC "Sync Macaroons & tls.cert with Apps/Users")
|
||||
fi
|
||||
if [ -f /mnt/hdd/app-data/selfsignedcert/selfsigned.cert ]; then
|
||||
OPTIONS+=(RESET-TLS "Reset the self-signed TLS certificate")
|
||||
fi
|
||||
|
||||
CHOICE_HEIGHT=$(("${#OPTIONS[@]}/2+1"))
|
||||
HEIGHT=$((CHOICE_HEIGHT+6))
|
||||
CHOICE=$(dialog --clear \
|
||||
--backtitle "$BACKTITLE" \
|
||||
--title "$TITLE" \
|
||||
@ -50,24 +56,35 @@ case $CHOICE in
|
||||
/home/admin/97addMobileWallet.sh;;
|
||||
ELECTRS)
|
||||
/home/admin/config.scripts/bonus.electrs.sh menu;;
|
||||
BTCPAY)
|
||||
BTCPAY-LND)
|
||||
/home/admin/config.scripts/lnd.export.sh btcpay
|
||||
echo "Press ENTER to return to main menu."
|
||||
read key
|
||||
exit 0;;
|
||||
BTCPAY-CLN)
|
||||
/home/admin/config.scripts/bonus.btcpayserver.sh cln-lightning-rpc-access
|
||||
echo "Press ENTER to return to main menu."
|
||||
read key
|
||||
exit 0;;
|
||||
RESET)
|
||||
sudo /home/admin/config.scripts/lnd.credentials.sh reset
|
||||
sudo /home/admin/config.scripts/lnd.credentials.sh sync
|
||||
sudo /home/admin/XXshutdown.sh reboot
|
||||
sudo /home/admin/config.scripts/lnd.credentials.sh reset "${chain:-main}net"
|
||||
sudo /home/admin/config.scripts/blitz.shutdown.sh reboot
|
||||
exit 0;;
|
||||
SYNC)
|
||||
sudo /home/admin/config.scripts/lnd.credentials.sh sync
|
||||
sudo /home/admin/config.scripts/lnd.credentials.sh sync "${chain:-main}net"
|
||||
echo "Press ENTER to return to main menu."
|
||||
read key
|
||||
exit 0;;
|
||||
EXPORT)
|
||||
sudo /home/admin/config.scripts/lnd.export.sh
|
||||
exit 0;;
|
||||
RESET-TLS)
|
||||
sudo /home/admin/config.scripts/internetselfsignedcert.sh reset
|
||||
exit 0;;
|
||||
ALBY)
|
||||
/home/admin/config.scripts/bonus.alby.sh
|
||||
exit 0;
|
||||
;;
|
||||
|
||||
BISQ)
|
||||
OPTIONS=()
|
||||
@ -78,7 +95,7 @@ case $CHOICE in
|
||||
if [ $(grep -c "peerbloomfilters=1" < /mnt/hdd/bitcoin/bitcoin.conf) -gt 0 ]&&\
|
||||
[ $(grep -c Bisq < /etc/tor/torrc) -gt 0 ];then
|
||||
OPTIONS+=(SHOWBISQ "Show the Hidden Service to connect Bisq")
|
||||
OPTIONS+=(REMOVEBISQ "Remove the Hidden Service for bisq")
|
||||
OPTIONS+=(REMOVEBISQ "Remove the Hidden Service for Bisq")
|
||||
fi
|
||||
CHOICE=$(dialog --clear \
|
||||
--backtitle "" \
|
||||
@ -105,12 +122,12 @@ case $CHOICE in
|
||||
if [ $(grep -c Bisq < /etc/tor/torrc) -eq 0 ];then
|
||||
echo "# Creating the Hidden Service for Bisq"
|
||||
echo "
|
||||
# Hidden Service for Bisq (bitcoin RPC v2)
|
||||
# Hidden Service for Bisq (bitcoin P2P v3)
|
||||
HiddenServiceDir /mnt/hdd/tor/bisq
|
||||
HiddenServiceVersion 2
|
||||
HiddenServiceVersion 3
|
||||
HiddenServicePort 8333 127.0.0.1:8333" | sudo tee -a /etc/tor/torrc
|
||||
echo "# Restarting Tor"
|
||||
sudo systemctl restart tor
|
||||
echo "# Reloading Tor"
|
||||
sudo systemctl reload tor@default
|
||||
sleep 10
|
||||
TOR_ADDRESS=$(sudo cat /mnt/hdd/tor/bisq/hostname)
|
||||
if [ -z "$TOR_ADDRESS" ]; then
|
||||
@ -137,7 +154,7 @@ HiddenServicePort 8333 127.0.0.1:8333" | sudo tee -a /etc/tor/torrc
|
||||
REMOVEBISQ)
|
||||
sudo sed -i '/Bisq/{N;N;N;d}' /etc/tor/torrc
|
||||
echo "# Restarting Tor"
|
||||
sudo systemctl restart tor;;
|
||||
sudo systemctl reload tor@default;;
|
||||
SHOWBISQ)
|
||||
clear
|
||||
TOR_ADDRESS=$(sudo cat /mnt/hdd/tor/bisq/hostname)
|
||||
@ -163,15 +180,10 @@ HiddenServicePort 8333 127.0.0.1:8333" | sudo tee -a /etc/tor/torrc
|
||||
# have this to signal that selection went wrong
|
||||
BITCOINRPCPORT=0
|
||||
fi
|
||||
echo "# Running on ${chain}net"
|
||||
echo "# Running on ${chain:-main}net"
|
||||
echo
|
||||
localIPrange=$(ip addr | grep 'state UP' -A2 | grep -E -v 'docker0|veth' |\
|
||||
grep 'eth0\|wlan0\|enp0' | tail -n1 | awk '{print $2}' |\
|
||||
awk -F. '{print $1"."$2"."$3".0/24"}')
|
||||
localIP=$(ip addr | grep 'state UP' -A2 | grep -E -v 'docker0|veth' |\
|
||||
grep 'eth0\|wlan0\|enp0' | tail -n1 | awk '{print $2}' | cut -f1 -d'/')
|
||||
allowIPrange=$(grep -c "rpcallowip=$localIPrange" < /mnt/hdd/${network}/${network}.conf)
|
||||
bindIP=$(grep -c "rpcbind=$localIP" < /mnt/hdd/${network}/${network}.conf)
|
||||
bindIP=$(grep -c "${chain:-main}.rpcbind=$localIP" < /mnt/hdd/${network}/${network}.conf)
|
||||
rpcTorService=$(grep -c "HiddenServicePort ${BITCOINRPCPORT} 127.0.0.1:${BITCOINRPCPORT}" < /etc/tor/torrc)
|
||||
TorRPCaddress=$(sudo cat /mnt/hdd/tor/bitcoin${BITCOINRPCPORT}/hostname)
|
||||
|
||||
@ -229,17 +241,17 @@ HiddenServicePort 8333 127.0.0.1:8333" | sudo tee -a /etc/tor/torrc
|
||||
|
||||
case $CHOICE in
|
||||
ADDRPCLAN)
|
||||
clear
|
||||
clear
|
||||
echo "# Make sure the bitcoind wallet is on"
|
||||
/home/admin/config.scripts/network.wallet.sh on
|
||||
|
||||
|
||||
restartCore=0
|
||||
if [ $allowIPrange -eq 0 ]; then
|
||||
echo "rpcallowip=$localIPrange" | sudo tee -a /mnt/hdd/${network}/${network}.conf
|
||||
restartCore=1
|
||||
fi
|
||||
if [ $bindIP -eq 0 ]; then
|
||||
echo "rpcbind=$localIP" | sudo tee -a /mnt/hdd/${network}/${network}.conf
|
||||
echo "${chain}.rpcbind=$localIP" | sudo tee -a /mnt/hdd/${network}/${network}.conf
|
||||
restartCore=1
|
||||
fi
|
||||
if [ $restartCore = 1 ];then
|
||||
@ -257,7 +269,7 @@ HiddenServicePort 8333 127.0.0.1:8333" | sudo tee -a /etc/tor/torrc
|
||||
clear
|
||||
echo "# Make sure the bitcoind wallet is on"
|
||||
/home/admin/config.scripts/network.wallet.sh on
|
||||
/home/admin/config.scripts/internet.hiddenservice.sh bitcoin${BITCOINRPCPORT} ${BITCOINRPCPORT} ${BITCOINRPCPORT}
|
||||
/home/admin/config.scripts/tor.onion-service.sh bitcoin${BITCOINRPCPORT} ${BITCOINRPCPORT} ${BITCOINRPCPORT}
|
||||
echo
|
||||
echo "The address of the local node is: $TorRPCaddress"
|
||||
echo
|
||||
@ -270,7 +282,7 @@ HiddenServicePort 8333 127.0.0.1:8333" | sudo tee -a /etc/tor/torrc
|
||||
CREDENTIALS)
|
||||
clear
|
||||
showRPCcredentials
|
||||
echo
|
||||
echo
|
||||
echo "Press ENTER to return to the menu."
|
||||
read key
|
||||
;;
|
||||
@ -278,7 +290,7 @@ HiddenServicePort 8333 127.0.0.1:8333" | sudo tee -a /etc/tor/torrc
|
||||
# remove old entry
|
||||
sudo sed -i "/# Hidden Service for BITCOIN RPC (mainnet, testnet, signet)/,/^\s*$/{d}" /etc/tor/torrc
|
||||
# remove Hidden Service
|
||||
/home/admin/config.scripts/internet.hiddenservice.sh off bitcoin${BITCOINRPCPORT}
|
||||
/home/admin/config.scripts/tor.onion-service.sh off bitcoin${BITCOINRPCPORT}
|
||||
sudo ufw deny from $localIPrange to any port ${BITCOINRPCPORT}
|
||||
restartCore=0
|
||||
if [ $allowIPrange -gt 0 ]; then
|
||||
@ -286,7 +298,7 @@ HiddenServicePort 8333 127.0.0.1:8333" | sudo tee -a /etc/tor/torrc
|
||||
restartCore=1
|
||||
fi
|
||||
if [ $bindIP -gt 0 ]; then
|
||||
sudo sed -i "/^rpcbind=$localIP/d" /mnt/hdd/${network}/${network}.conf
|
||||
sudo sed -i "/^${chain}.rpcbind=$localIP/d" /mnt/hdd/${network}/${network}.conf
|
||||
restartCore=1
|
||||
fi
|
||||
if [ $restartCore = 1 ];then
|
||||
|
@ -1,116 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# get raspiblitz config
|
||||
echo "get raspiblitz config"
|
||||
source /home/admin/raspiblitz.info
|
||||
source /mnt/hdd/raspiblitz.conf
|
||||
|
||||
# get the local network IP to be displayed on the LCD
|
||||
source <(/home/admin/config.scripts/internet.sh status local)
|
||||
|
||||
# BASIC MENU INFO
|
||||
HEIGHT=13
|
||||
WIDTH=64
|
||||
CHOICE_HEIGHT=7
|
||||
BACKTITLE="RaspiBlitz"
|
||||
TITLE="Lightning Options"
|
||||
MENU=""
|
||||
OPTIONS=()
|
||||
|
||||
OPTIONS+=(FUNDING "Fund your LND Wallet")
|
||||
OPTIONS+=(PEERING "Connect to a Peer")
|
||||
OPTIONS+=(CHANNEL "Open a Channel with Peer")
|
||||
OPTIONS+=(SEND "Pay an Invoice/PaymentRequest")
|
||||
OPTIONS+=(RECEIVE "Create Invoice/PaymentRequest")
|
||||
|
||||
if [ "${chain}" = "main" ]; then
|
||||
OPTIONS+=(lnbalance "Detailed Wallet Balances")
|
||||
OPTIONS+=(lnchannels "Lightning Channel List")
|
||||
OPTIONS+=(lnfwdreport "Lightning Forwarding Events Report")
|
||||
HEIGHT=$((HEIGHT+3))
|
||||
CHOICE_HEIGHT=$((CHOICE_HEIGHT+3))
|
||||
fi
|
||||
|
||||
OPTIONS+=(NAME "Change Name/Alias of Node")
|
||||
|
||||
openChannels=$(sudo -u bitcoin /usr/local/bin/lncli --chain=${network} --network=${chain}net listchannels 2>/dev/null | jq '.[] | length')
|
||||
if [ ${#openChannels} -gt 0 ] && [ ${openChannels} -gt 0 ]; then
|
||||
OPTIONS+=(CLOSEALL "Close all open Channels")
|
||||
HEIGHT=$((HEIGHT+1))
|
||||
CHOICE_HEIGHT=$((CHOICE_HEIGHT+1))
|
||||
fi
|
||||
|
||||
OPTIONS+=(CASHOUT "Remove Funds from LND")
|
||||
|
||||
CHOICE=$(dialog --clear \
|
||||
--backtitle "$BACKTITLE" \
|
||||
--title "$TITLE" \
|
||||
--ok-label "Select" \
|
||||
--cancel-label "Main menu" \
|
||||
--menu "$MENU" \
|
||||
$HEIGHT $WIDTH $CHOICE_HEIGHT \
|
||||
"${OPTIONS[@]}" \
|
||||
2>&1 >/dev/tty)
|
||||
|
||||
case $CHOICE in
|
||||
lnbalance)
|
||||
clear
|
||||
echo "*** YOUR SATOSHI BALANCES ***"
|
||||
/home/admin/config.scripts/lnd.balance.sh ${network}
|
||||
echo "Press ENTER to return to main menu."
|
||||
read key
|
||||
;;
|
||||
lnchannels)
|
||||
clear
|
||||
echo "*** YOUR LIGHTNING CHANNELS ***"
|
||||
echo ""
|
||||
echo "Capacity -> total sats in the channel (their side + your side)"
|
||||
echo "Commit-Fee -> the fee that's charged if either side of the channel closes"
|
||||
echo "Balance-Local -> sats on your side of the channel (outbound liquidity)"
|
||||
echo "Balance-Remote -> sats on their side of the channel (inbound liquidity)"
|
||||
echo "Fee-Base -> fixed fee (in millisatoshis) per forwarding on channel"
|
||||
echo "Fee-PerMil -> amount based fee (millisatoshis per 1 satoshi) on forwarding"
|
||||
/home/admin/config.scripts/lnd.channels.sh ${network}
|
||||
echo "Press ENTER to return to main menu."
|
||||
read key
|
||||
;;
|
||||
lnfwdreport)
|
||||
/home/admin/config.scripts/lnd.fwdreport.sh -menu
|
||||
echo "Press ENTER to return to main menu."
|
||||
read key
|
||||
;;
|
||||
PEERING)
|
||||
/home/admin/BBconnectPeer.sh
|
||||
;;
|
||||
FUNDING)
|
||||
/home/admin/BBfundWallet.sh
|
||||
;;
|
||||
CASHOUT)
|
||||
/home/admin/BBcashoutWallet.sh
|
||||
;;
|
||||
CHANNEL)
|
||||
/home/admin/BBopenChannel.sh
|
||||
;;
|
||||
SEND)
|
||||
/home/admin/BBpayInvoice.sh
|
||||
;;
|
||||
RECEIVE)
|
||||
/home/admin/BBcreateInvoice.sh
|
||||
;;
|
||||
NAME)
|
||||
sudo /home/admin/config.scripts/lnd.setname.sh
|
||||
noreboot=$?
|
||||
if [ "${noreboot}" = "0" ]; then
|
||||
sudo -u bitcoin ${network}-cli stop
|
||||
echo "Press ENTER to Reboot."
|
||||
read key
|
||||
sudo /home/admin/XXshutdown.sh reboot
|
||||
exit 0
|
||||
fi
|
||||
;;
|
||||
CLOSEALL)
|
||||
/home/admin/BBcloseAllChannels.sh
|
||||
echo "Press ENTER to return to main menu."
|
||||
read key
|
||||
;;
|
||||
esac
|
156
home.admin/99lndMenu.sh
Normal file
@ -0,0 +1,156 @@
|
||||
#!/bin/bash
|
||||
|
||||
# get raspiblitz config
|
||||
echo "get raspiblitz config"
|
||||
source /home/admin/raspiblitz.info
|
||||
source /mnt/hdd/raspiblitz.conf
|
||||
|
||||
source <(/home/admin/config.scripts/network.aliases.sh getvars lnd $1)
|
||||
|
||||
# make sure lnd wallet is unlocked
|
||||
/home/admin/config.scripts/lnd.unlock.sh chain-unlock ${CHAIN}
|
||||
|
||||
# BASIC MENU INFO
|
||||
WIDTH=64
|
||||
BACKTITLE="RaspiBlitz"
|
||||
TITLE=" LND Lightning Options (${CHAIN}) "
|
||||
MENU=""
|
||||
OPTIONS=()
|
||||
|
||||
OPTIONS+=(FUNDING "Fund your LND Wallet")
|
||||
OPTIONS+=(PEERING "Connect to a Peer")
|
||||
OPTIONS+=(CHANNEL "Open a Channel with Peer")
|
||||
OPTIONS+=(SEND "Pay an Invoice/PaymentRequest")
|
||||
OPTIONS+=(RECEIVE "Create Invoice/PaymentRequest")
|
||||
OPTIONS+=(XPUB "Show OnChain xPubs")
|
||||
|
||||
if [ "${chain}" = "main" ]; then
|
||||
OPTIONS+=(lnbalance "Detailed Wallet Balances")
|
||||
OPTIONS+=(lnchannels "Lightning Channel List")
|
||||
OPTIONS+=(lnfwdreport "Lightning Forwarding Events Report")
|
||||
fi
|
||||
|
||||
OPTIONS+=(NAME "Change Name/Alias of Node")
|
||||
|
||||
openChannels=$($lncli_alias listchannels 2>/dev/null | jq '.[] | length')
|
||||
if [ ${#openChannels} -gt 0 ] && [ ${openChannels} -gt 0 ]; then
|
||||
OPTIONS+=(SUEZ "Visualize channels")
|
||||
OPTIONS+=(CLOSEALL "Close all open Channels on $CHAIN")
|
||||
fi
|
||||
|
||||
OPTIONS+=(CASHOUT "Withdraw all funds from LND on $CHAIN")
|
||||
|
||||
if [ "${lightning}" != "lnd" ]; then
|
||||
OPTIONS+=(SWITCHLN "Use LND as default")
|
||||
fi
|
||||
|
||||
CHOICE_HEIGHT=$(("${#OPTIONS[@]}/2+1"))
|
||||
HEIGHT=$((CHOICE_HEIGHT+6))
|
||||
CHOICE=$(dialog --clear \
|
||||
--backtitle "$BACKTITLE" \
|
||||
--title "$TITLE" \
|
||||
--ok-label "Select" \
|
||||
--cancel-label "Main menu" \
|
||||
--menu "$MENU" \
|
||||
$HEIGHT $WIDTH $CHOICE_HEIGHT \
|
||||
"${OPTIONS[@]}" \
|
||||
2>&1 >/dev/tty)
|
||||
|
||||
case $CHOICE in
|
||||
lnbalance)
|
||||
clear
|
||||
echo "*** YOUR SATOSHI BALANCES ***"
|
||||
/home/admin/config.scripts/lnd.balance.sh ${network}
|
||||
echo "Press ENTER to return to main menu."
|
||||
read key
|
||||
;;
|
||||
lnchannels)
|
||||
clear
|
||||
echo "*** YOUR LIGHTNING CHANNELS ***"
|
||||
echo ""
|
||||
echo "Capacity -> total sats in the channel (their side + your side)"
|
||||
echo "Commit-Fee -> the fee that's charged if either side of the channel closes"
|
||||
echo "Balance-Local -> sats on your side of the channel (outbound liquidity)"
|
||||
echo "Balance-Remote -> sats on their side of the channel (inbound liquidity)"
|
||||
echo "Fee-Base -> fixed fee (in millisatoshis) per forwarding on channel"
|
||||
echo "Fee-PerMil -> amount based fee (millisatoshis per 1 satoshi) on forwarding"
|
||||
/home/admin/config.scripts/lnd.channels.sh ${network}
|
||||
echo "Press ENTER to return to main menu."
|
||||
read key
|
||||
;;
|
||||
lnfwdreport)
|
||||
/home/admin/config.scripts/lnd.fwdreport.sh -menu
|
||||
echo "Press ENTER to return to main menu."
|
||||
read key
|
||||
;;
|
||||
PEERING)
|
||||
/home/admin/BBconnectPeer.sh lnd $CHAIN
|
||||
;;
|
||||
FUNDING)
|
||||
/home/admin/BBfundWallet.sh lnd $CHAIN
|
||||
;;
|
||||
CASHOUT)
|
||||
/home/admin/BBcashoutWallet.sh lnd $CHAIN
|
||||
;;
|
||||
CHANNEL)
|
||||
/home/admin/BBopenChannel.sh lnd $CHAIN
|
||||
;;
|
||||
SEND)
|
||||
/home/admin/BBpayInvoice.sh lnd $CHAIN
|
||||
;;
|
||||
RECEIVE)
|
||||
/home/admin/BBcreateInvoice.sh lnd $CHAIN
|
||||
;;
|
||||
NAME)
|
||||
sudo /home/admin/config.scripts/lnd.setname.sh $CHAIN
|
||||
noreboot=$?
|
||||
if [ "${noreboot}" = "0" ]; then
|
||||
sudo -u bitcoin ${network}-cli stop
|
||||
echo "Press ENTER to Reboot."
|
||||
read key
|
||||
sudo /home/admin/config.scripts/blitz.shutdown.sh reboot
|
||||
exit 0
|
||||
fi
|
||||
;;
|
||||
SUEZ)
|
||||
clear
|
||||
if [ ! -f /home/bitcoin/suez/suez ];then
|
||||
/home/admin/config.scripts/bonus.suez.sh on
|
||||
fi
|
||||
cd /home/bitcoin/suez || exit 1
|
||||
sudo -u bitcoin poetry run /home/bitcoin/suez/suez \
|
||||
--client-args=-n=${CHAIN} \
|
||||
--client-args=--rpcserver=localhost:1${L2rpcportmod}009
|
||||
echo
|
||||
echo "Press ENTER to return to main menu."
|
||||
read key
|
||||
;;
|
||||
CLOSEALL)
|
||||
/home/admin/BBcloseAllChannels.sh lnd $CHAIN
|
||||
echo "Press ENTER to return to main menu."
|
||||
read key
|
||||
;;
|
||||
SWITCHLN)
|
||||
clear
|
||||
echo
|
||||
# setting value in raspi blitz config
|
||||
/home/admin/config.scripts/blitz.conf.sh set lightning "lnd"
|
||||
sudo systemctl restart blitzapi 2>/dev/null
|
||||
echo "# OK - lightning=lnd is set in /mnt/hdd/raspiblitz.conf"
|
||||
echo
|
||||
echo "Press ENTER to return to main menu."
|
||||
read key
|
||||
;;
|
||||
XPUB)
|
||||
clear
|
||||
echo "LND wallet xPubs => $lncli_alias wallet accounts list --name default"
|
||||
echo
|
||||
$lncli_alias wallet accounts list --name default | grep --color=never .*,
|
||||
echo
|
||||
echo "EXPERIMENTAL - DONT USE FOR SERIOUS FUND RECEIVING YET"
|
||||
echo "Report your experience to: https://github.com/rootzoll/raspiblitz/issues/2192"
|
||||
echo
|
||||
echo "Press ENTER to return to main menu."
|
||||
read key
|
||||
|
||||
esac
|
522
home.admin/99lndRepairMenu.sh
Normal file
@ -0,0 +1,522 @@
|
||||
#!/bin/bash
|
||||
|
||||
# get raspiblitz config
|
||||
echo "# get raspiblitz config"
|
||||
source /home/admin/raspiblitz.info
|
||||
source /mnt/hdd/raspiblitz.conf
|
||||
|
||||
source <(/home/admin/config.scripts/network.aliases.sh getvars lnd $1)
|
||||
|
||||
sudo mkdir /var/cache/raspiblitz/temp 2>/dev/null
|
||||
|
||||
askLNDbackupCopy()
|
||||
{
|
||||
whiptail --title "LND Data Backup" --yes-button "Backup" --no-button "Skip" --yesno "
|
||||
Before deleting your data, do you want
|
||||
to make a backup of all your LND Data
|
||||
and download the file(s) to your laptop?
|
||||
|
||||
Download LND Data Backup now?
|
||||
" 12 44
|
||||
if [ $? -eq 0 ]; then
|
||||
clear
|
||||
echo "***********************************"
|
||||
echo "* PREPARING THE LND BACKUP DOWNLOAD"
|
||||
echo "***********************************"
|
||||
echo "please wait .."
|
||||
/home/admin/config.scripts/lnd.compact.sh interactive
|
||||
/home/admin/config.scripts/lnd.backup.sh lnd-export-gui
|
||||
echo
|
||||
echo "PRESS ENTER to continue once you're done downloading."
|
||||
read key
|
||||
else
|
||||
clear
|
||||
echo "*************************************"
|
||||
echo "* JUST MAKING A BACKUP TO THE SD CARD"
|
||||
echo "*************************************"
|
||||
echo "please wait .."
|
||||
sleep 2
|
||||
/home/admin/config.scripts/lnd.backup.sh lnd-export
|
||||
sleep 3
|
||||
fi
|
||||
}
|
||||
|
||||
getpasswordC() # from dialogPasswords.sh
|
||||
{
|
||||
# temp file for password results
|
||||
_temp="/var/cache/raspiblitz/temp/.temp.tmp"
|
||||
sudo /home/admin/config.scripts/blitz.passwords.sh set x "PASSWORD C - Lightning Wallet Password" $_temp
|
||||
passwordC=$(sudo cat $_temp)
|
||||
sudo rm $_temp
|
||||
dialog --backtitle "RaspiBlitz - Setup" --msgbox "\nThanks - Password C accepted.\n\nAlways use this password to \nunlock your Lightning Wallet." 10 34
|
||||
}
|
||||
|
||||
lndHealthCheck()
|
||||
{
|
||||
# check that lnd started
|
||||
lndRunning=0
|
||||
loopcount=0
|
||||
while [ ${lndRunning} -eq 0 ]
|
||||
do
|
||||
lndRunning=$(systemctl status ${netprefix}lnd.service | grep -c running)
|
||||
if [ ${lndRunning} -eq 0 ]; then
|
||||
date +%s
|
||||
echo "LND not ready yet ... waiting another 60 seconds."
|
||||
sleep 10
|
||||
fi
|
||||
loopcount=$(($loopcount +1))
|
||||
if [ ${loopcount} -gt 100 ]; then
|
||||
echo "lnd-start-fail" "lnd service not getting to running status" "sudo systemctl status ${netprefix}lnd.service | grep -c running --> ${lndRunning}"
|
||||
exit 8
|
||||
fi
|
||||
done
|
||||
echo "OK - LND is running"
|
||||
sleep 10
|
||||
|
||||
# Check LND health/fails (to be extended)
|
||||
tlsExists=$(ls /mnt/hdd/lnd/tls.cert 2>/dev/null | grep -c "tls.cert")
|
||||
if [ ${tlsExists} -eq 0 ]; then
|
||||
echo "lnd-no-tls" "lnd not created TLS cert" "no /mnt/hdd/lnd/tls.cert"
|
||||
exit 9
|
||||
fi
|
||||
}
|
||||
|
||||
syncAndCheckLND() # from _provision.setup.sh
|
||||
{
|
||||
# make sure all directories are linked
|
||||
sudo /home/admin/config.scripts/blitz.datadrive.sh link
|
||||
|
||||
# check if now a config exists
|
||||
configLinkedCorrectly=$(ls /home/bitcoin/.lnd/${netprefix}lnd.conf | grep -c "${netprefix}lnd.conf")
|
||||
if [ "${configLinkedCorrectly}" != "1" ]; then
|
||||
echo "lnd-link-broken" "link /home/bitcoin/.lnd/${netprefix}lnd.conf broken" ""
|
||||
exit 7
|
||||
fi
|
||||
|
||||
# Init LND service & start
|
||||
echo "*** Init LND Service & Start ***"
|
||||
/home/admin/_cache.sh set message "LND Testrun"
|
||||
|
||||
# just in case
|
||||
sudo systemctl stop ${netprefix}lnd 2>/dev/null
|
||||
sudo systemctl disable ${netprefix}lnd 2>/dev/null
|
||||
|
||||
# copy lnd service - note the same service is created with 'lnd.install.sh on mainnet'
|
||||
sudo cp /home/admin/assets/lnd.service /etc/systemd/system/lnd.service
|
||||
|
||||
# start lnd up
|
||||
echo "Starting LND Service ..."
|
||||
sudo systemctl enable ${netprefix}lnd
|
||||
sudo systemctl start ${netprefix}lnd
|
||||
echo "Starting LND Service ... executed"
|
||||
|
||||
if [ $(sudo -u bitcoin ls /mnt/hdd/lnd/data/chain/bitcoin/${chain}net/wallet.db 2>/dev/null | grep -c wallet.db) -gt 0 ]; then
|
||||
echo "# OK, there is an LND wallet present"
|
||||
else
|
||||
echo "lnd-no-wallet" "there is no LND wallet present" "/mnt/hdd/lnd/data/chain/bitcoin/${chain}net/wallet.db --> missing"
|
||||
exit 13
|
||||
fi
|
||||
# sync macaroons & TLS to other users
|
||||
echo "*** Copy LND Macaroons to user admin ***"
|
||||
/home/admin/_cache.sh set message "LND Credentials"
|
||||
|
||||
# check if macaroon exists now - if not fail
|
||||
attempt=0
|
||||
while [ $(sudo -u bitcoin ls -la /home/bitcoin/.lnd/data/chain/${network}/${chain}net/admin.macaroon 2>/dev/null | grep -c admin.macaroon) -eq 0 ]; do
|
||||
echo "Waiting 2 mins for LND to create macaroons ... (${attempt}0s)"
|
||||
sleep 10
|
||||
attempt=$((attempt+1))
|
||||
if [ $attempt -eq 12 ];then
|
||||
/home/admin/config.scripts/blitz.error.sh _provision.setup.sh "lnd-no-macaroons" "lnd did not create macaroons" "/home/bitcoin/.lnd/data/chain/${network}/${chain}net/admin.macaroon --> missing"
|
||||
exit 14
|
||||
fi
|
||||
done
|
||||
|
||||
# now sync macaroons & TLS to other users
|
||||
sudo /home/admin/config.scripts/lnd.credentials.sh sync ${chain}net
|
||||
|
||||
# make a final lnd check
|
||||
source <(/home/admin/config.scripts/lnd.check.sh basic-setup "${chain}net")
|
||||
if [ "${err}" != "" ]; then
|
||||
echo
|
||||
echo "lnd-check-error" "lnd.check.sh basic-setup ${chain}net with error" "/home/admin/config.scripts/lnd.check.sh basic-setup ${chain}net --> ${err}"
|
||||
echo
|
||||
# exit 15
|
||||
fi
|
||||
}
|
||||
|
||||
function restoreFromSeed()
|
||||
{
|
||||
askLNDbackupCopy
|
||||
|
||||
## from dialogLightningWallet.sh
|
||||
# let people know about the difference between SEED & SEED+SCB
|
||||
whiptail --title "IMPORTANT INFO" --yes-button "ENTER SEED" --no-button "Go Back" --yesno "
|
||||
Using JUST SEED WORDS will only recover your on-chain funds.
|
||||
To also try to recover the open channel funds you need the
|
||||
channel.backup file (since RaspiBlitz v1.2 / LND 0.6-beta)
|
||||
or having a complete LND rescue-backup from your old node.
|
||||
" 11 65
|
||||
|
||||
# start seed input and get results
|
||||
_temp="/var/cache/raspiblitz/.temp.tmp"
|
||||
/home/admin/config.scripts/lnd.backup.sh seed-import-gui $_temp
|
||||
source $_temp 2>/dev/null
|
||||
sudo rm $_temp 2>/dev/null
|
||||
|
||||
# if user canceled the seed input
|
||||
if [ "${seedWords}" == "" ]; then
|
||||
# signal cancel to the calling script by exit code (4 = exit on seedwords)
|
||||
exit 4
|
||||
fi
|
||||
|
||||
getpasswordC
|
||||
|
||||
removeLNDwallet
|
||||
|
||||
# creates fresh lnd.conf without an alias
|
||||
/home/admin/config.scripts/lnd.install.sh on $CHAIN
|
||||
sudo systemctl start ${netprefix}lnd
|
||||
lndHealthCheck
|
||||
|
||||
# from _provison.setup.sh
|
||||
# create wallet
|
||||
# WALLET --> SEED
|
||||
if [ "${seedWords}" != "" ]; then
|
||||
echo "WALLET --> SEED"
|
||||
/home/admin/_cache.sh set message "LND Wallet (SEED)"
|
||||
source <(/home/admin/config.scripts/lnd.initwallet.py seed "${chain}net" "${passwordC}" "${seedWords}" "${seedPassword}")
|
||||
if [ "${err}" != "" ]; then
|
||||
echo "lnd-wallet-seed" "lnd.initwallet.py seed returned error" "/home/admin/config.scripts/lnd.initwallet.py seed ${chain}net ... --> ${err} + ${errMore}"
|
||||
exit 12
|
||||
fi
|
||||
fi
|
||||
|
||||
syncAndCheckLND
|
||||
}
|
||||
|
||||
function restoreSCB()
|
||||
{
|
||||
# import SCB and get results
|
||||
_temp="/var/cache/raspiblitz/.temp.tmp"
|
||||
# 'production' to use passwordA
|
||||
/home/admin/config.scripts/lnd.backup.sh scb-import-gui production $_temp
|
||||
source $_temp 2>/dev/null
|
||||
sudo rm $_temp 2>/dev/null
|
||||
|
||||
# if user canceled the upload
|
||||
if ! ls -la /home/admin/channel.backup; then
|
||||
echo "# signal cancel to the calling script by exit code (5 = exit on scb)"
|
||||
exit 5
|
||||
fi
|
||||
|
||||
echo
|
||||
echo "The next step will attempt to trigger all online peers to force close the channels."
|
||||
echo "Restoring the channel.backup can be repeated until all the channels are force closed."
|
||||
echo
|
||||
echo "Make sure to enter the Raspiblitz menu to trigger the next step."
|
||||
echo "If menu does not open automatically - use command: raspiblitz"
|
||||
echo "Press ENTER to continue or CTRL+C to abort"
|
||||
read key
|
||||
|
||||
### --> DEACTIVATED BECAUSE when a file is placed at /home/admin/channel.backup
|
||||
### it will now automatically trigger a Static-Channel-Backup procedure after lnd recoverymode is done
|
||||
#
|
||||
# # WALLET --> SEED + SCB
|
||||
# if ls -la /home/admin/channel.backup; then
|
||||
#
|
||||
# # LND was restarted so need to unlock
|
||||
# echo "WALLET --> UNLOCK WALLET - SCAN 0"
|
||||
# /home/admin/_cache.sh set message "LND Wallet Unlock - scan 0"
|
||||
# source <(/home/admin/config.scripts/lnd.initwallet.py unlock "${chain}net" "${passwordC}" 0)
|
||||
# if [ "${err}" != "" ]; then
|
||||
# echo "lnd-wallet-unlock" "lnd.initwallet.py unlock returned error" "/home/admin/config.scripts/lnd.initwallet.py unlock ${chain}net ... --> ${err} + ${errMore}"
|
||||
# if [ "${errMore}" = "wallet already unlocked, WalletUnlocker service is no longer available" ]; then
|
||||
# echo "The wallet is already unlocked, continue."
|
||||
# else
|
||||
# exit 11
|
||||
# fi
|
||||
# fi
|
||||
#
|
||||
# echo "WALLET --> SEED + SCB "
|
||||
# /home/admin/_cache.sh set message "LND Wallet (SEED & SCB)"
|
||||
# macaroonPath="/home/admin/.lnd/data/chain/${network}/${chain}net/admin.macaroon"
|
||||
# source <(/home/admin/config.scripts/lnd.initwallet.py scb ${chain}net "/home/admin/channel.backup" "${macaroonPath}")
|
||||
# if [ "${err}" != "" ]; then
|
||||
# echo "lnd-wallet-seed+scb" "lnd.initwallet.py scb returned error" "/home/admin/config.scripts/lnd.initwallet.py scb ${chain}net ... --> ${err} + ${errMore}"
|
||||
# while [ $(echo "${errMore}" | grep -c "RPC server is in the process of starting up") -gt 0 ]; do
|
||||
# echo "# ${errMore}"
|
||||
# echo "# waiting 10 seconds (${counter})"
|
||||
# counter=$((counter+1))
|
||||
# if [ ${counter} -eq 60 ]; then
|
||||
# echo "# Giving up after 10 minutes"
|
||||
# echo
|
||||
# echo "lnd-wallet-seed+scb" "lnd.initwallet.py scb returned error" "/home/admin/config.scripts/lnd.initwallet.py scb ${chain}net ... --> ${err} + ${errMore}"
|
||||
# echo
|
||||
# echo "The SCB recovery is not possible now - use the RETRYSCB option the REPAIR-LND menu after LND is synced."
|
||||
# echo "Can repeat the SCB recovery until all peers have force closed the channels to this node."
|
||||
# echo
|
||||
# echo "# ${netprefix}lnd error logs:"
|
||||
# sudo journalctl -u ${netprefix}lnd
|
||||
# echo
|
||||
# echo "# ${netprefix}lnd logs:"
|
||||
# sudo tail /home/bitcoin/.lnd/logs/bitcoin/${CHAIN}/lnd.log
|
||||
# exit 12
|
||||
# fi
|
||||
# sleep 10
|
||||
# source <(/home/admin/config.scripts/lnd.initwallet.py scb ${chain}net "/home/admin/channel.backup" "${macaroonPath}")
|
||||
# done
|
||||
#
|
||||
# fi
|
||||
# fi
|
||||
#
|
||||
# syncAndCheckLND
|
||||
|
||||
}
|
||||
|
||||
function removeLNDwallet
|
||||
{
|
||||
clear
|
||||
echo
|
||||
echo "The next step WILL REMOVE the old LND wallet on ${CHAIN}"
|
||||
echo "Press ENTER to continue or CTRL+C to abort"
|
||||
read key
|
||||
echo "# Stopping lnd on ${CHAIN} ..."
|
||||
sudo systemctl stop ${netprefix}lnd
|
||||
sudo systemctl disable ${netprefix}lnd
|
||||
echo "Reset wallet on ${CHAIN}"
|
||||
sudo rm -f /home/bitcoin/.lnd/${netprefix}lnd.conf
|
||||
sudo rm -f /home/bitcoin/.lnd/${netprefix}v3_onion_private_key
|
||||
sudo rm -f /mnt/hdd/lnd/data/chain/${network}/${CHAIN}/wallet.db
|
||||
sudo rm -f /home/bitcoin/.lnd/data/graph/${CHAIN}/channel.db
|
||||
sudo rm -f /home/bitcoin/.lnd/data/graph/${CHAIN}/sphinxreplay.db
|
||||
|
||||
sudo rm -rf /mnt/hdd/lnd/data/chain/${network}/${CHAIN}
|
||||
sudo rm -rf /home/bitcoin/.lnd/logs/${network}/${CHAIN}
|
||||
sudo rm -rf /home/bitcoin/.lnd/data/graph/${CHAIN}
|
||||
sudo rm -rf home/bitcoin/.lnd/data/watchtower/${CHAIN}
|
||||
}
|
||||
|
||||
# BASIC MENU INFO
|
||||
WIDTH=64
|
||||
BACKTITLE="RaspiBlitz"
|
||||
TITLE="LND repair options for $CHAIN"
|
||||
MENU=""
|
||||
OPTIONS=()
|
||||
if [ "${chain}" = "main" ]; then
|
||||
OPTIONS+=(COMPACT "Compact the LND channel.db")
|
||||
OPTIONS+=(GETSCB "Download channel.backup (StaticChannelBackup)")
|
||||
fi
|
||||
OPTIONS+=(BACKUP-LND "Backup your LND data (Rescue-File)")
|
||||
OPTIONS+=(RESET-LND "Delete LND & start new node/wallet")
|
||||
OPTIONS+=(LNDRESCUE "Restore from a rescue file")
|
||||
OPTIONS+=(SEED+SCB "Restore from a seed and channel.backup")
|
||||
OPTIONS+=(RETRYSCB "Retry closing channels with the channel.backup")
|
||||
OPTIONS+=(ONLYSEED "Restore from a seed (onchain funds only)")
|
||||
OPTIONS+=(RESCAN "Rescan the blockchain to recover onchain funds")
|
||||
|
||||
CHOICE_HEIGHT=$(("${#OPTIONS[@]}/2+1"))
|
||||
HEIGHT=$((CHOICE_HEIGHT+6))
|
||||
CHOICE=$(dialog --clear \
|
||||
--backtitle "$BACKTITLE" \
|
||||
--title "$TITLE" \
|
||||
--ok-label "Select" \
|
||||
--cancel-label "Main menu" \
|
||||
--menu "$MENU" \
|
||||
$HEIGHT $WIDTH $CHOICE_HEIGHT \
|
||||
"${OPTIONS[@]}" \
|
||||
2>&1 >/dev/tty)
|
||||
|
||||
case $CHOICE in
|
||||
|
||||
COMPACT)
|
||||
/home/admin/config.scripts/lnd.compact.sh interactive
|
||||
echo "# Starting ${netprefix}lnd.service ..."
|
||||
sudo systemctl start lnd
|
||||
echo
|
||||
echo "Press ENTER to return to main menu."
|
||||
read key
|
||||
;;
|
||||
GETSCB)
|
||||
/home/admin/config.scripts/lnd.backup.sh scb-export-gui
|
||||
;;
|
||||
BACKUP-LND)
|
||||
/home/admin/config.scripts/lnd.compact.sh interactive
|
||||
sudo /home/admin/config.scripts/lnd.backup.sh ${netprefix}lnd-export-gui
|
||||
echo
|
||||
echo "Press ENTER when your backup download is done to shutdown."
|
||||
read key
|
||||
sudo /home/admin/config.scripts/blitz.shutdown.sh
|
||||
;;
|
||||
RESET-LND)
|
||||
askLNDbackupCopy
|
||||
# ask for a new name so that network analysis has harder time to connect new node id with old
|
||||
result=""
|
||||
while [ ${#result} -eq 0 ]
|
||||
do
|
||||
trap 'rm -f "$_temp"' EXIT
|
||||
_temp=$(mktemp -p /dev/shm/)
|
||||
l1="Please enter the name of your new LND node:\n"
|
||||
l2="different name is better for a fresh identity\n"
|
||||
l3="one word, use up to 32 basic characters"
|
||||
dialog --backtitle "RaspiBlitz - Setup (${network}/${chain})" --inputbox "$l1$l2$l3" 13 52 2>$_temp
|
||||
result=$( cat $_temp | tr -dc '[:alnum:]-.' | tr -d ' ' )
|
||||
echo "processing ..."
|
||||
sleep 3
|
||||
done
|
||||
|
||||
removeLNDwallet
|
||||
|
||||
# create wallet
|
||||
/home/admin/config.scripts/lnd.install.sh on ${chain}net initwallet
|
||||
# display and delete the seed for ${chain}net
|
||||
sudo /home/admin/config.scripts/lnd.install.sh display-seed ${chain}net delete
|
||||
|
||||
#TODO the new hostname is not taken into account on init (user can change set the lnd name in menu later)
|
||||
# make sure host is named like in the raspiblitz config
|
||||
# echo "Setting the Name/Alias/Hostname .."
|
||||
sudo /home/admin/config.scripts/lnd.setname.sh ${chain}net "${result}"
|
||||
# /home/admin/config.scripts/blitz.conf.sh set hostname "${result}"
|
||||
|
||||
syncAndCheckLND
|
||||
|
||||
echo "Press ENTER to return to main menu."
|
||||
read key
|
||||
# go back to main menu (and show)
|
||||
/home/admin/00raspiblitz.sh
|
||||
exit 0
|
||||
;;
|
||||
|
||||
LNDRESCUE)
|
||||
askLNDbackupCopy
|
||||
|
||||
#removeAllLNDwallets
|
||||
clear
|
||||
echo
|
||||
echo "The next step WILL REMOVE the old LND wallets on ALL CHAINS"
|
||||
echo "Press ENTER to continue or CTRL+C to abort"
|
||||
read key
|
||||
echo "# Stopping lnd on mainnet ..."
|
||||
sudo systemctl stop lnd
|
||||
# don' t want to set CL as default if running parallel
|
||||
#/home/admin/config.scripts/lnd.install.sh off mainnet
|
||||
if [ "${tlnd}" == "on" ];then
|
||||
/home/admin/config.scripts/lnd.install.sh off testnet
|
||||
fi
|
||||
if [ "${slnd}" == "on" ];then
|
||||
/home/admin/config.scripts/lnd.install.sh off signet
|
||||
fi
|
||||
echo "Reset wallet"
|
||||
sudo rm -r /mnt/hdd/lnd
|
||||
|
||||
## from dialogLightningWallet.sh
|
||||
# import file
|
||||
# run upload dialog and get result
|
||||
_temp="/var/cache/raspiblitz/temp/.temp.tmp"
|
||||
/home/admin/config.scripts/lnd.backup.sh lnd-import-gui production $_temp
|
||||
source $_temp 2>/dev/null
|
||||
sudo rm $_temp 2>/dev/null
|
||||
|
||||
/home/admin/config.scripts/lnd.install.sh on ${CHAIN}
|
||||
sudo systemctl start ${netprefix}lnd
|
||||
|
||||
syncAndCheckLND
|
||||
|
||||
echo "Press ENTER to return to main menu."
|
||||
read key
|
||||
# go back to main menu (and show)
|
||||
/home/admin/00raspiblitz.sh
|
||||
exit 0
|
||||
;;
|
||||
|
||||
ONLYSEED)
|
||||
|
||||
restoreFromSeed
|
||||
|
||||
echo "Set lnd recovery mode & restart ..."
|
||||
sudo /home/admin/config.scripts/lnd.backup.sh "${chain}net" recoverymode on
|
||||
sudo systemctl restart ${netprefix}lnd
|
||||
sleep 3
|
||||
|
||||
echo "# Unlock wallet ..."
|
||||
/home/admin/config.scripts/lnd.unlock.sh "${CHAIN}"
|
||||
|
||||
echo
|
||||
echo "System will now go thru rescan for on-chain funds"
|
||||
echo "Press ENTER to return to main menu."
|
||||
read key
|
||||
# go back to main menu (and show)
|
||||
/home/admin/00raspiblitz.sh
|
||||
exit 0
|
||||
;;
|
||||
|
||||
SEED+SCB)
|
||||
|
||||
restoreFromSeed
|
||||
restoreSCB
|
||||
|
||||
echo "Set lnd recovery mode & restart ..."
|
||||
sudo /home/admin/config.scripts/lnd.backup.sh "${chain}net" recoverymode on
|
||||
sudo systemctl restart ${netprefix}lnd
|
||||
sleep 3
|
||||
|
||||
echo "# Unlock wallet ..."
|
||||
/home/admin/config.scripts/lnd.unlock.sh "${CHAIN}"
|
||||
|
||||
echo
|
||||
echo "System will now go thru rescan for on-chain funds and when done"
|
||||
echo "the Static-Channel-Backup will trigger to recover off-chain funds."
|
||||
echo "Press ENTER to return to main menu."
|
||||
read key
|
||||
|
||||
# go back to main menu (and show)
|
||||
/home/admin/00raspiblitz.sh
|
||||
exit 0
|
||||
;;
|
||||
|
||||
RETRYSCB)
|
||||
|
||||
restoreSCB
|
||||
|
||||
# go back to main menu (and show)
|
||||
/home/admin/00raspiblitz.sh
|
||||
|
||||
exit 0
|
||||
;;
|
||||
|
||||
RESCAN)
|
||||
clear
|
||||
|
||||
source <(sudo /home/admin/config.scripts/lnd.backup.sh "${CHAIN}" recoverymode status)
|
||||
if [ "${recoverymode}" == "0" ]; then
|
||||
|
||||
echo "Putting lnd back in recoverymode."
|
||||
sudo /home/admin/config.scripts/lnd.backup.sh "${CHAIN}" recoverymode on
|
||||
echo "Restarting lnd ..."
|
||||
sudo systemctl restart ${netprefix}lnd
|
||||
sleep 3
|
||||
|
||||
else
|
||||
|
||||
echo "lnd already in recoverymode."
|
||||
|
||||
fi
|
||||
|
||||
echo "# Unlock wallet ..."
|
||||
/home/admin/config.scripts/lnd.unlock.sh "${CHAIN}"
|
||||
|
||||
echo
|
||||
echo "To show the scanning progress in the background will follow the lnd.log with:"
|
||||
echo "'sudo tail -n 30 -f /mnt/hdd/lnd/logs/${network}/${chain}net/lnd.log'"
|
||||
echo
|
||||
echo "Press ENTER to continue"
|
||||
echo "use CTRL+C any time to exit .. then use the command 'raspiblitz' to return to the menu"
|
||||
echo "(the rescan will continue in the background)"
|
||||
echo "#######################################################################################"
|
||||
read key
|
||||
sudo tail -n 30 -f /mnt/hdd/lnd/logs/${network}/${chain}net/lnd.log
|
||||
;;
|
||||
|
||||
esac
|
||||
|
||||
exit 0
|
@ -5,28 +5,42 @@ echo "get raspiblitz config"
|
||||
source /home/admin/raspiblitz.info
|
||||
source /mnt/hdd/raspiblitz.conf
|
||||
|
||||
# source <(/home/admin/config.scripts/network.aliases.sh getvars <lnd|cl> <mainnet|testnet|signet>)
|
||||
source <(/home/admin/config.scripts/network.aliases.sh getvars cl $1)
|
||||
|
||||
# BASIC MENU INFO
|
||||
HEIGHT=12 # add 6 to CHOICE_HEIGHT + MENU lines
|
||||
WIDTH=64
|
||||
CHOICE_HEIGHT=6 # 1 line / OPTIONS
|
||||
BACKTITLE="RaspiBlitz"
|
||||
TITLE="System Options"
|
||||
TITLE=" ${CHAIN} System Options "
|
||||
MENU="" # adds lines to HEIGHT
|
||||
OPTIONS=() # adds lines to HEIGHt + CHOICE_HEIGHT
|
||||
|
||||
OPTIONS+=(${network}LOG "Monitor the debug.log")
|
||||
OPTIONS+=(${network}CONF "Edit the bitcoin.conf")
|
||||
OPTIONS+=(LNDLOG "Monitor the lnd.log")
|
||||
OPTIONS+=(LNDCONF "Edit the lnd.conf")
|
||||
OPTIONS+=(BTOP "Monitor system resources with btop")
|
||||
OPTIONS+=(TIME "Set Timezone")
|
||||
|
||||
if [ "${runBehindTor}" == "on" ]; then
|
||||
OPTIONS+=(${network}LOG "Monitor the debug.log for ${CHAIN}")
|
||||
OPTIONS+=(${network}CONF "Edit the bitcoin.conf")
|
||||
|
||||
if grep "^${netprefix}lnd=on" /mnt/hdd/raspiblitz.conf;then
|
||||
OPTIONS+=(LNDLOG "Monitor the lnd.log for ${CHAIN}")
|
||||
OPTIONS+=(LNDCONF "Edit the lnd.conf for ${CHAIN}")
|
||||
fi
|
||||
|
||||
if grep "^${netprefix}cl=on" /mnt/hdd/raspiblitz.conf;then
|
||||
OPTIONS+=(CLLOG "Monitor the CL log for ${CHAIN}")
|
||||
OPTIONS+=(CLCONF "Edit the CL config for ${CHAIN}")
|
||||
fi
|
||||
|
||||
if [ "${runBehindTor}" == "on" ] && [ "${netprefix}" == "" ]; then
|
||||
OPTIONS+=(TORLOG "Monitor the Tor Service with Nyx")
|
||||
OPTIONS+=(TORRC "Edit the Tor Configuration")
|
||||
HEIGHT=$((HEIGHT+2))
|
||||
CHOICE_HEIGHT=$((CHOICE_HEIGHT+2))
|
||||
fi
|
||||
|
||||
OPTIONS+=(CUSTOMLOG "Monitor a custom service")
|
||||
OPTIONS+=(CUSTOMRESTART "Restart a custom service")
|
||||
|
||||
CHOICE_HEIGHT=$(("${#OPTIONS[@]}/2+1"))
|
||||
HEIGHT=$((CHOICE_HEIGHT+6))
|
||||
CHOICE=$(dialog --clear \
|
||||
--backtitle "$BACKTITLE" \
|
||||
--title "$TITLE" \
|
||||
@ -38,27 +52,44 @@ CHOICE=$(dialog --clear \
|
||||
2>&1 >/dev/tty)
|
||||
|
||||
case $CHOICE in
|
||||
BTOP)
|
||||
if ! btop -v; then
|
||||
sudo apt install -y btop
|
||||
fi
|
||||
# run as root to allow signal sending to any process
|
||||
sudo btop
|
||||
;;
|
||||
TIME)
|
||||
sudo /home/admin/config.scripts/blitz.time.sh choose-timezone
|
||||
;;
|
||||
${network}LOG)
|
||||
if [ ${CHAIN} = signet ]; then
|
||||
bitcoinlogpath="/mnt/hdd/bitcoin/signet/debug.log"
|
||||
elif [ ${CHAIN} = testnet ]; then
|
||||
bitcoinlogpath="/mnt/hdd/bitcoin/testnet3/debug.log"
|
||||
elif [ ${CHAIN} = mainnet ]; then
|
||||
bitcoinlogpath="/mnt/hdd/bitcoin/debug.log"
|
||||
fi
|
||||
clear
|
||||
echo
|
||||
echo "Will follow the /mnt/hdd/${network}/debug.log"
|
||||
echo "running: 'sudo tail -n 30 -f /mnt/hdd/${network}/debug.log'"
|
||||
echo "Will follow the ${bitcoinlogpath}"
|
||||
echo "running: 'sudo tail -n 30 -f ${bitcoinlogpath}'"
|
||||
echo
|
||||
echo "Press ENTER to continue"
|
||||
echo "use CTRL+C any time to abort .. then use command 'raspiblitz' to return to menu"
|
||||
echo "###############################################################################"
|
||||
echo "use CTRL+C any time to abort .. then use the command 'raspiblitz' to return to the menu"
|
||||
echo "#######################################################################################"
|
||||
read key
|
||||
sudo tail -n 30 -f /mnt/hdd/${network}/debug.log;;
|
||||
sudo tail -n 30 -f ${bitcoinlogpath};;
|
||||
${network}CONF)
|
||||
if /home/admin/config.scripts/blitz.setconf.sh "/mnt/hdd/${network}/${network}.conf" "root"
|
||||
then
|
||||
whiptail \
|
||||
--title "Restart" --yes-button "Restart" --no-button "Not now" \
|
||||
--yesno "To apply the new settings ${network}d needs to restart.
|
||||
Do you want to restart ${network}d now?" 10 55
|
||||
--yesno "To apply the new settings ${netprefix}${network}d needs to restart.
|
||||
Do you want to restart ${netprefix}${network}d now?" 10 55
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "# Restarting ${network}d"
|
||||
sudo systemctl restart ${network}d
|
||||
echo "# Restarting ${netprefix}${network}d"
|
||||
sudo systemctl restart ${netprefix}${network}d
|
||||
else
|
||||
echo "# Continue without restarting."
|
||||
fi
|
||||
@ -72,12 +103,12 @@ case $CHOICE in
|
||||
echo "running 'sudo tail -n 30 -f /mnt/hdd/lnd/logs/${network}/${chain}net/lnd.log'"
|
||||
echo
|
||||
echo "Press ENTER to continue"
|
||||
echo "use CTRL+C any time to abort .. then use command 'raspiblitz' to return to menu"
|
||||
echo "###############################################################################"
|
||||
echo "use CTRL+C any time to abort .. then use the command 'raspiblitz' to return to the menu"
|
||||
echo "#######################################################################################"
|
||||
read key
|
||||
sudo tail -n 30 -f /mnt/hdd/lnd/logs/${network}/${chain}net/lnd.log;;
|
||||
LNDCONF)
|
||||
if /home/admin/config.scripts/blitz.setconf.sh "/mnt/hdd/lnd/lnd.conf" "root"
|
||||
if /home/admin/config.scripts/blitz.setconf.sh "/mnt/hdd/lnd/${netprefix}lnd.conf" "root"
|
||||
then
|
||||
whiptail \
|
||||
--title "Restart" --yes-button "Restart" --no-button "Not now" \
|
||||
@ -85,25 +116,52 @@ case $CHOICE in
|
||||
Do you want to restart LND now?" 10 55
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "# Restarting LND"
|
||||
sudo systemctl restart lnd
|
||||
sudo systemctl restart ${netprefix}lnd
|
||||
else
|
||||
echo "# Continue without restarting."
|
||||
fi
|
||||
else
|
||||
echo "# No change made"
|
||||
fi;;
|
||||
fi;;
|
||||
CLLOG)
|
||||
clear
|
||||
echo
|
||||
echo "Will follow the /home/bitcoin/.lightning/${CLNETWORK}/cl.log"
|
||||
echo "running 'sudo tail -n 30 -f /home/bitcoin/.lightning/${CLNETWORK}/cl.log'"
|
||||
echo
|
||||
echo "Press ENTER to continue"
|
||||
echo "use CTRL+C any time to abort .. then use the command 'raspiblitz' to return to the menu"
|
||||
echo "#######################################################################################"
|
||||
read key
|
||||
sudo tail -n 30 -f /home/bitcoin/.lightning/${CLNETWORK}/cl.log;;
|
||||
CLCONF)
|
||||
if /home/admin/config.scripts/blitz.setconf.sh "${CLCONF}" "root"
|
||||
then
|
||||
whiptail \
|
||||
--title "Restart" --yes-button "Restart" --no-button "Not now" \
|
||||
--yesno "To apply the new settings Core Lightning needs to restart.
|
||||
Do you want to restart Core Lightning now?" 0 0
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "# Restarting Core Lightning"
|
||||
sudo systemctl restart ${netprefix}lightningd
|
||||
else
|
||||
echo "# Continue without restarting."
|
||||
fi
|
||||
else
|
||||
echo "# No change made"
|
||||
fi;;
|
||||
TORLOG)
|
||||
sudo -u debian-tor nyx;;
|
||||
TORRC)
|
||||
if /home/admin/config.scripts/blitz.setconf.sh "/etc/tor/torrc" "debian-tor"
|
||||
then
|
||||
whiptail \
|
||||
--title "Restart" --yes-button "Restart" --no-button "Not now" \
|
||||
--yesno "To apply the new settings Tor needs to restart.
|
||||
--title "Reload" --yes-button "Reload" --no-button "Not now" \
|
||||
--yesno "To apply the new settings need to reload Tor.
|
||||
Do you want to restart Tor now?" 10 55
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "# Restarting tor"
|
||||
sudo systemctl restart tor@default
|
||||
sudo systemctl reload tor@default
|
||||
else
|
||||
echo "# Continue without restarting."
|
||||
fi
|
||||
@ -115,9 +173,9 @@ case $CHOICE in
|
||||
echo
|
||||
echo "Example list:
|
||||
btc-rpc-explorer, btcpayserver, circuitbreaker,
|
||||
cryptoadvance-specter, getty@tty1, electrs, litd,
|
||||
specter, getty@tty1, electrs, litd,
|
||||
lnbits, mempool, nbxlorer, nginx, RTL, telegraf,
|
||||
thunderhub, tor@default, tor@lnd, tor
|
||||
thunderhub, tor@default, tor
|
||||
"
|
||||
echo "Type the name of the service you would like to monitor:"
|
||||
read SERVICE
|
||||
@ -125,17 +183,17 @@ thunderhub, tor@default, tor@lnd, tor
|
||||
echo "Will show the logs with:"
|
||||
echo "'sudo journalctl -n 10 -fu $SERVICE'"
|
||||
echo
|
||||
echo "use CTRL+C any time to abort .. then use command 'raspiblitz' to return to menu"
|
||||
echo "###############################################################################"
|
||||
echo "use CTRL+C any time to abort .. then use the command 'raspiblitz' to return to the menu"
|
||||
echo "#######################################################################################"
|
||||
sudo journalctl -n 10 -fu $SERVICE;;
|
||||
CUSTOMRESTART)
|
||||
clear
|
||||
echo
|
||||
echo "Example list:
|
||||
btc-rpc-explorer, btcpayserver, circuitbreaker,
|
||||
cryptoadvance-specter, getty@tty1, electrs, litd,
|
||||
specter, getty@tty1, electrs, litd,
|
||||
lnbits, mempool, nbxlorer, nginx, RTL, telegraf,
|
||||
thunderhub, tor@default, tor@lnd, tor
|
||||
thunderhub, tor@default, tor
|
||||
"
|
||||
echo "Type the name of the service you would like to restart:"
|
||||
read SERVICE
|
||||
@ -150,7 +208,7 @@ thunderhub, tor@default, tor@lnd, tor
|
||||
echo "Will show the logs with:"
|
||||
echo "'sudo journalctl -n 10 -fu $SERVICE'"
|
||||
echo
|
||||
echo "use CTRL+C any time to abort .. then use command 'raspiblitz' to return to menu"
|
||||
echo "###############################################################################"
|
||||
echo "use CTRL+C any time to abort .. then use the command 'raspiblitz' to return to the menu"
|
||||
echo "#######################################################################################"
|
||||
sudo journalctl -n 10 -fu $SERVICE;;
|
||||
esac
|
||||
|