mirror of
https://github.com/RROrg/rr.git
synced 2025-12-15 16:49:35 +08:00
Compare commits
880 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f8c4589f84 | ||
|
|
2883364df3 | ||
|
|
cdcceea395 | ||
|
|
ce9017bae1 | ||
|
|
cfdf7cc3fc | ||
|
|
9a4103f028 | ||
|
|
15e88c0b38 | ||
|
|
2909e46732 | ||
|
|
8e7f50c2e5 | ||
|
|
6093ab1bd4 | ||
|
|
2b0985d276 | ||
|
|
e748c366f2 | ||
|
|
c59f446006 | ||
|
|
d39b0ada77 | ||
|
|
dbc819cdd8 | ||
|
|
9e24063ad7 | ||
|
|
e71d074980 | ||
|
|
3e59779554 | ||
|
|
8a03b1de55 | ||
|
|
08909a6084 | ||
|
|
6f7fd358d6 | ||
|
|
a1734d9a76 | ||
|
|
262559fa06 | ||
|
|
06823ae881 | ||
|
|
569c2506e0 | ||
|
|
4e986fe591 | ||
|
|
3ad6ba68a6 | ||
|
|
0c77bada57 | ||
|
|
03f2cea7f9 | ||
|
|
cb56fa695d | ||
|
|
95235c314e | ||
|
|
b2f7dac7ba | ||
|
|
80d03e0e3c | ||
|
|
4e5edb325a | ||
|
|
a51c5f7c27 | ||
|
|
885c5e4a28 | ||
|
|
12fc9c218d | ||
|
|
9dca1fe830 | ||
|
|
e8dc96a9b3 | ||
|
|
c939661a45 | ||
|
|
4884158996 | ||
|
|
ef6ed60c46 | ||
|
|
2f02843dff | ||
|
|
38caa773d7 | ||
|
|
59112312c6 | ||
|
|
9710c33f35 | ||
|
|
32cfc2b257 | ||
|
|
c1de95e364 | ||
|
|
db85e17b02 | ||
|
|
801c0396a3 | ||
|
|
cac93e6a5c | ||
|
|
5b5fbd501e | ||
|
|
903c292e35 | ||
|
|
0c1b7d6a2e | ||
|
|
2ee5707a84 | ||
|
|
5e8527e6ac | ||
|
|
2c7c35b4a7 | ||
|
|
cdd30e0e5e | ||
|
|
34fb3e1968 | ||
|
|
1b191a4e2b | ||
|
|
c1fe7f7bfe | ||
|
|
c850e8be28 | ||
|
|
9c11315756 | ||
|
|
f2a34edeff | ||
|
|
3320be7a16 | ||
|
|
efd1d3d291 | ||
|
|
bd5e688f7e | ||
|
|
f90478e426 | ||
|
|
ac588eff6c | ||
|
|
6618efbe45 | ||
|
|
506451071d | ||
|
|
84d7425912 | ||
|
|
6f1b3fc9e3 | ||
|
|
5c9d6a4eae | ||
|
|
58fe6a7b13 | ||
|
|
b24e3ca9b4 | ||
|
|
303369f24d | ||
|
|
6eb65cc14e | ||
|
|
065eaa3b28 | ||
|
|
576f65e416 | ||
|
|
cfdcc5aa22 | ||
|
|
bc1209954f | ||
|
|
888eef390a | ||
|
|
749d8e467e | ||
|
|
8c70aa4aa1 | ||
|
|
0f72d932b4 | ||
|
|
7bf872272b | ||
|
|
cdf0e65f7e | ||
|
|
3ddced11e1 | ||
|
|
709e2f87e9 | ||
|
|
654df8c06e | ||
|
|
cea8720380 | ||
|
|
7ef526dfa6 | ||
|
|
f9d09c2bf5 | ||
|
|
95635a893e | ||
|
|
ff0ba9b340 | ||
|
|
a4e770e999 | ||
|
|
7daa08afe0 | ||
|
|
a8c4754fc1 | ||
|
|
c8bafb7ba2 | ||
|
|
a78380f280 | ||
|
|
4264d08471 | ||
|
|
6a6551d537 | ||
|
|
b0ed9d6bc3 | ||
|
|
6e387e5e61 | ||
|
|
1a09dc6083 | ||
|
|
f008216fec | ||
|
|
ce16910392 | ||
|
|
98a910edf1 | ||
|
|
b59def5b16 | ||
|
|
d0e858e8e4 | ||
|
|
c884e86575 | ||
|
|
b4006b110c | ||
|
|
bf9d1ed086 | ||
|
|
6b91aea9be | ||
|
|
28518c6f96 | ||
|
|
52443fdc95 | ||
|
|
0ebbe93faf | ||
|
|
52fdae2210 | ||
|
|
1133fb0ba5 | ||
|
|
0fde0b312b | ||
|
|
6764629b97 | ||
|
|
16b6a486de | ||
|
|
f6260a1c99 | ||
|
|
5bb1930a5a | ||
|
|
22852b009a | ||
|
|
87d690b92c | ||
|
|
723936afd8 | ||
|
|
798e03dfba | ||
|
|
a402fb700f | ||
|
|
1b4ee3b623 | ||
|
|
89ed0fe0b3 | ||
|
|
2a4eb4996d | ||
|
|
2ff44c4b1f | ||
|
|
7304486e93 | ||
|
|
93740dc5b3 | ||
|
|
8a46e1196b | ||
|
|
060f85f09f | ||
|
|
a9f60961cd | ||
|
|
7d5219ae72 | ||
|
|
eb7a015003 | ||
|
|
ac99d1ea51 | ||
|
|
9b9f64e3a2 | ||
|
|
b088ff7a14 | ||
|
|
2fb2d22ecb | ||
|
|
1cd771688f | ||
|
|
5472239066 | ||
|
|
af8aa73d7f | ||
|
|
de93239f97 | ||
|
|
59501a2d4a | ||
|
|
5ce02ba109 | ||
|
|
bc0d1e7b97 | ||
|
|
46db33e6f3 | ||
|
|
d8e4842a6d | ||
|
|
c7299b8158 | ||
|
|
0f332893c1 | ||
|
|
1c59a654ef | ||
|
|
ebfcae7964 | ||
|
|
b9cd466c1c | ||
|
|
1884ca6a61 | ||
|
|
071200ca36 | ||
|
|
d04e08ecd9 | ||
|
|
c3b789dff1 | ||
|
|
8eb61ad518 | ||
|
|
7d96f04fe3 | ||
|
|
a98993613e | ||
|
|
a76d052409 | ||
|
|
4ff26cd6aa | ||
|
|
29226d0e33 | ||
|
|
b63ddabe95 | ||
|
|
6c76070b38 | ||
|
|
906311665b | ||
|
|
997f9a2746 | ||
|
|
76146edf8e | ||
|
|
82130f2442 | ||
|
|
d681b16946 | ||
|
|
f1cc7c20a1 | ||
|
|
1baac66eba | ||
|
|
c88bb0b031 | ||
|
|
7c2c17baf2 | ||
|
|
5e2cb9bb6f | ||
|
|
e6c78ce293 | ||
|
|
647b6024fd | ||
|
|
f70815c117 | ||
|
|
e5f5c64426 | ||
|
|
d39f800863 | ||
|
|
5a1ff80670 | ||
|
|
4f0a4b1a9b | ||
|
|
98f8c8a734 | ||
|
|
ff3231cbb5 | ||
|
|
225492b062 | ||
|
|
4f355a72d3 | ||
|
|
7c0e5ba3e3 | ||
|
|
11a5f4dd7c | ||
|
|
4641c3736c | ||
|
|
e67ce76a88 | ||
|
|
fdbd438efc | ||
|
|
25ff0e9521 | ||
|
|
88a556407d | ||
|
|
996196c608 | ||
|
|
e71136e606 | ||
|
|
d73fa4c63a | ||
|
|
96c59e1df0 | ||
|
|
da2430021c | ||
|
|
af6c762e04 | ||
|
|
529a593b08 | ||
|
|
5ddf7eeb48 | ||
|
|
dbbb5bf839 | ||
|
|
449c81a4c5 | ||
|
|
ad74aaf188 | ||
|
|
4c4ae4e0ff | ||
|
|
72e9d7d657 | ||
|
|
b03b7c2012 | ||
|
|
20ca9b8b4b | ||
|
|
5657c047e3 | ||
|
|
83d62cc8b7 | ||
|
|
7efbd02116 | ||
|
|
7fcb950e19 | ||
|
|
79e1c3bbe4 | ||
|
|
545bc2aed6 | ||
|
|
083c5372d5 | ||
|
|
4802cadd86 | ||
|
|
2f2b9b925c | ||
|
|
4a3339de15 | ||
|
|
f53d019c04 | ||
|
|
9b69ec7211 | ||
|
|
f4c270afda | ||
|
|
6c0818f719 | ||
|
|
7fdd3952a4 | ||
|
|
dec47cec6f | ||
|
|
8c0b6b9648 | ||
|
|
1addd7cd4d | ||
|
|
366e0ad28f | ||
|
|
281c7b697e | ||
|
|
e26dc9d919 | ||
|
|
32f5b16664 | ||
|
|
73d20b59f2 | ||
|
|
9c636e8390 | ||
|
|
4119344e60 | ||
|
|
e2fec1c28f | ||
|
|
01c6fd8b28 | ||
|
|
baaf78f861 | ||
|
|
3dd70abf69 | ||
|
|
668771fcec | ||
|
|
bf44b402f8 | ||
|
|
c3ef9bdb0e | ||
|
|
9f98fc0488 | ||
|
|
6b8339e7fb | ||
|
|
80eb53406e | ||
|
|
a85447aabe | ||
|
|
2433043438 | ||
|
|
d22175afa5 | ||
|
|
523257ef27 | ||
|
|
3ab7cdd3d3 | ||
|
|
c3ae869c42 | ||
|
|
3b1e4ff40b | ||
|
|
c41636090a | ||
|
|
1a639593da | ||
|
|
6a6c147781 | ||
|
|
94133a325f | ||
|
|
c41ba55739 | ||
|
|
e278b79dec | ||
|
|
9ed347f9a5 | ||
|
|
dd5b312c31 | ||
|
|
df27459898 | ||
|
|
3ad5c7e6fa | ||
|
|
404d037dbd | ||
|
|
eeb87463b6 | ||
|
|
7faab1b46d | ||
|
|
2b592cf227 | ||
|
|
02a6b71ab7 | ||
|
|
e1ebf309e9 | ||
|
|
002c6417e3 | ||
|
|
4846e0e815 | ||
|
|
3d5c7a26fa | ||
|
|
b30edf3fc3 | ||
|
|
55a238ac17 | ||
|
|
4168b71f42 | ||
|
|
98ddaa3a75 | ||
|
|
ffb64ffa71 | ||
|
|
5ae9098c11 | ||
|
|
7b4bb1a9f4 | ||
|
|
08251c0763 | ||
|
|
90bce4a843 | ||
|
|
0605583469 | ||
|
|
eaee3f137f | ||
|
|
4c111402c1 | ||
|
|
a38db27e48 | ||
|
|
04eeea5e84 | ||
|
|
c091d0dba0 | ||
|
|
01aaca5e99 | ||
|
|
229c3270a4 | ||
|
|
9761d64501 | ||
|
|
a71f4e89da | ||
|
|
761ce8f670 | ||
|
|
961257bf7b | ||
|
|
a0d47860d3 | ||
|
|
74e0af058e | ||
|
|
f2e334b682 | ||
|
|
99de5d84b2 | ||
|
|
751284fa59 | ||
|
|
197ed21c8e | ||
|
|
71e977e50e | ||
|
|
b24587af11 | ||
|
|
4c0ff61ce2 | ||
|
|
becbfd1ebd | ||
|
|
bcb266c595 | ||
|
|
75e12dd213 | ||
|
|
f22eb1e83b | ||
|
|
4810ce5457 | ||
|
|
95db2dacb7 | ||
|
|
e0c64f829b | ||
|
|
05fbb5918d | ||
|
|
03a51ebd6c | ||
|
|
20945cec49 | ||
|
|
2003b89e53 | ||
|
|
d9919fd1da | ||
|
|
33135b6bcd | ||
|
|
d301e31b87 | ||
|
|
529face186 | ||
|
|
33a3d0b88f | ||
|
|
d2d9728bb3 | ||
|
|
821a3fdc99 | ||
|
|
be59829420 | ||
|
|
d661771021 | ||
|
|
ba20de7e3c | ||
|
|
679f6ad37b | ||
|
|
651ac9eb6a | ||
|
|
55fe8f198d | ||
|
|
1e2a58b37f | ||
|
|
9061cba5f2 | ||
|
|
a96b655d95 | ||
|
|
ead32a8717 | ||
|
|
6fe5bab1c7 | ||
|
|
e57959a984 | ||
|
|
dac404f8ef | ||
|
|
054c65ab09 | ||
|
|
98816c0f88 | ||
|
|
e845414652 | ||
|
|
8d24023401 | ||
|
|
a457d25018 | ||
|
|
41ce279292 | ||
|
|
ea52a34561 | ||
|
|
823b9e9dc9 | ||
|
|
4f9def50eb | ||
|
|
168b6d5138 | ||
|
|
d44ba6504d | ||
|
|
3e41f7ff79 | ||
|
|
b26a40b2c8 | ||
|
|
2354c2148d | ||
|
|
de5d238037 | ||
|
|
feaf837d1d | ||
|
|
bce98ab822 | ||
|
|
6898e5b2fa | ||
|
|
8931af4fe3 | ||
|
|
656596cd57 | ||
|
|
e301265973 | ||
|
|
d1971a7c61 | ||
|
|
e40e47fea7 | ||
|
|
adb91c29e8 | ||
|
|
7af514e5e7 | ||
|
|
40b18cd8d4 | ||
|
|
05c69c06fe | ||
|
|
f401dc2493 | ||
|
|
1e6172c6ec | ||
|
|
cb031c03a1 | ||
|
|
fb4a789607 | ||
|
|
a536eecee3 | ||
|
|
f65eb21930 | ||
|
|
003a6093dd | ||
|
|
e479542dbb | ||
|
|
68993001e3 | ||
|
|
76bb1e06aa | ||
|
|
4fcde1b043 | ||
|
|
cc4e6a0729 | ||
|
|
15e6a09aeb | ||
|
|
42b4201e2f | ||
|
|
e5643ed2bb | ||
|
|
a4a623b3c6 | ||
|
|
3623600ac2 | ||
|
|
31321a4bef | ||
|
|
f330d62bd3 | ||
|
|
018cc29157 | ||
|
|
62b609d2d8 | ||
|
|
3d0feb2b1b | ||
|
|
33154560aa | ||
|
|
e62749022c | ||
|
|
28c4f21e2b | ||
|
|
f6e239ee8e | ||
|
|
2d1f973c12 | ||
|
|
25cdaf5931 | ||
|
|
a91c9a2c96 | ||
|
|
d3e8759ff9 | ||
|
|
fbc24e0517 | ||
|
|
740143089c | ||
|
|
77f32b4929 | ||
|
|
a6a08af551 | ||
|
|
1717c89851 | ||
|
|
6978ef71fb | ||
|
|
29056799aa | ||
|
|
09f061ce43 | ||
|
|
7106ce0ff8 | ||
|
|
47c5f76868 | ||
|
|
00348889b9 | ||
|
|
e058a4ef2a | ||
|
|
c2a4300d40 | ||
|
|
160a51de1a | ||
|
|
119aefe580 | ||
|
|
bd51792de0 | ||
|
|
ae2ab74ae7 | ||
|
|
5bb2dbcf68 | ||
|
|
3a14223c4b | ||
|
|
fe65a5a9a4 | ||
|
|
2a30a405a4 | ||
|
|
2253a503d1 | ||
|
|
a85675595d | ||
|
|
4d7df2f3dc | ||
|
|
0a1416ed1a | ||
|
|
e8d752f1d5 | ||
|
|
3d3b0ef414 | ||
|
|
ae683fc3ea | ||
|
|
177ea5b740 | ||
|
|
1ffbc1d83c | ||
|
|
c75d16eece | ||
|
|
1cbe1d4b27 | ||
|
|
e9f587d156 | ||
|
|
665add89fb | ||
|
|
d249d2efd3 | ||
|
|
7ceeb9d575 | ||
|
|
fac02ba250 | ||
|
|
7617785f2d | ||
|
|
6557a075b7 | ||
|
|
b6f4b01d92 | ||
|
|
3a42b4d426 | ||
|
|
d881618ffb | ||
|
|
5858744171 | ||
|
|
55601dfb43 | ||
|
|
07db075d0a | ||
|
|
a8d945557a | ||
|
|
c18bf474b2 | ||
|
|
2782b499ed | ||
|
|
d94eb9e83c | ||
|
|
3a7d43471a | ||
|
|
bba9424ea6 | ||
|
|
99ad812abe | ||
|
|
858b6601ba | ||
|
|
8bf38db4c5 | ||
|
|
b68bb89762 | ||
|
|
3031cd7436 | ||
|
|
511f941704 | ||
|
|
51c23a2c65 | ||
|
|
907c85edaa | ||
|
|
192b02ff90 | ||
|
|
173f3dd1fc | ||
|
|
244744fa6d | ||
|
|
da2c9102d9 | ||
|
|
dbb694acbe | ||
|
|
e728446653 | ||
|
|
7b643ba725 | ||
|
|
dfb19df959 | ||
|
|
c518576161 | ||
|
|
75db321f20 | ||
|
|
f423c3bc12 | ||
|
|
709d4ed14a | ||
|
|
d9920609b0 | ||
|
|
0bddc88b10 | ||
|
|
9f2f6e6096 | ||
|
|
f791a8a241 | ||
|
|
96158dd475 | ||
|
|
457d8e8103 | ||
|
|
96d3d2b43f | ||
|
|
d47c8acf8d | ||
|
|
15555ad8b5 | ||
|
|
ae01a0291e | ||
|
|
f082150a07 | ||
|
|
c356cc2a4b | ||
|
|
f8ba72cfe7 | ||
|
|
4ca6ec1c8a | ||
|
|
1f3a4d7155 | ||
|
|
da71a5a15a | ||
|
|
7cb1f56ae2 | ||
|
|
4d3af37f74 | ||
|
|
41f4ff2af2 | ||
|
|
9140b5e4a0 | ||
|
|
04c224e05d | ||
|
|
435277edc2 | ||
|
|
086b086043 | ||
|
|
3a39198db2 | ||
|
|
94e8a594b4 | ||
|
|
3596ecd640 | ||
|
|
56585a717b | ||
|
|
82ce77523a | ||
|
|
2e0bd8035e | ||
|
|
9a9e2aa945 | ||
|
|
66eeb8bd8c | ||
|
|
2d7dc80fe6 | ||
|
|
f2523d55de | ||
|
|
d60651774f | ||
|
|
5eecf91404 | ||
|
|
ace5158f04 | ||
|
|
2ba25de442 | ||
|
|
3682eec05c | ||
|
|
09c63ceea8 | ||
|
|
dba2fae99a | ||
|
|
d519bc9a48 | ||
|
|
fc8cb69ed5 | ||
|
|
a354a28ed6 | ||
|
|
2440c04226 | ||
|
|
48418e4979 | ||
|
|
82a73f44f0 | ||
|
|
576c3c1526 | ||
|
|
2439c41d84 | ||
|
|
79225d2a50 | ||
|
|
8767faa6b1 | ||
|
|
5d4bb64c6a | ||
|
|
fca33353a3 | ||
|
|
b557400698 | ||
|
|
1508395ef5 | ||
|
|
2408b49038 | ||
|
|
9915347a11 | ||
|
|
5c1f6a4667 | ||
|
|
42064055e4 | ||
|
|
ae2ce90473 | ||
|
|
1ec0b1893e | ||
|
|
c4b0ff8852 | ||
|
|
21669c607f | ||
|
|
92dd5a5aa8 | ||
|
|
4fb398cec3 | ||
|
|
e9b2b99538 | ||
|
|
6e1c487566 | ||
|
|
05258a47ec | ||
|
|
9c8f533c56 | ||
|
|
6f4cf3ddec | ||
|
|
09a2724c65 | ||
|
|
cc8797d71a | ||
|
|
307a5dc116 | ||
|
|
fda25c32a0 | ||
|
|
7f8faecd11 | ||
|
|
d82c3588d8 | ||
|
|
4ce0b39e06 | ||
|
|
b25475904a | ||
|
|
cd6dd29764 | ||
|
|
450e5e5d78 | ||
|
|
8ad451a7aa | ||
|
|
6e6585b0f9 | ||
|
|
96bb379689 | ||
|
|
569e89b624 | ||
|
|
045377400b | ||
|
|
5dc3447c04 | ||
|
|
d02eae6a09 | ||
|
|
03b2b4af25 | ||
|
|
3e0b0bf8cc | ||
|
|
dc9be69cdd | ||
|
|
1f05e8b2c5 | ||
|
|
58db051c3e | ||
|
|
8eb8b6b13c | ||
|
|
a44a4eb0ab | ||
|
|
d17fa5a09f | ||
|
|
9dba6e5a6f | ||
|
|
46598132fd | ||
|
|
16930fd99f | ||
|
|
e56b1f572f | ||
|
|
933520c464 | ||
|
|
d4b22dcd1d | ||
|
|
9083170bf0 | ||
|
|
bc2c10657f | ||
|
|
2294906e01 | ||
|
|
bcfd2f5a82 | ||
|
|
5b64a2bc2f | ||
|
|
15fbc8bd77 | ||
|
|
e07a3ef514 | ||
|
|
8660fe9b78 | ||
|
|
5632408485 | ||
|
|
16681ab820 | ||
|
|
7234b5d92e | ||
|
|
8e139a5cd1 | ||
|
|
4c011a72b4 | ||
|
|
59e3c94c8d | ||
|
|
4076c8b678 | ||
|
|
7574e190bc | ||
|
|
5251b09599 | ||
|
|
db7f8cb087 | ||
|
|
88b260ea2d | ||
|
|
41ecfac06b | ||
|
|
479cd094be | ||
|
|
d98981970e | ||
|
|
c51285f16d | ||
|
|
6f074c5846 | ||
|
|
4da6bc4ddc | ||
|
|
5fc8befa6c | ||
|
|
f6c0afe4e0 | ||
|
|
b8ea001f34 | ||
|
|
059aeab95d | ||
|
|
84a1392123 | ||
|
|
f04b6a94a7 | ||
|
|
3106944fa3 | ||
|
|
79488740e0 | ||
|
|
41af49280d | ||
|
|
0bc6788c9b | ||
|
|
87d95f75f4 | ||
|
|
70952af68f | ||
|
|
bd5a5a7333 | ||
|
|
98ca113306 | ||
|
|
b1edb595f4 | ||
|
|
0e7f484147 | ||
|
|
7d238f8f49 | ||
|
|
d22e111f60 | ||
|
|
90128eb68b | ||
|
|
0547d2b928 | ||
|
|
56d2213245 | ||
|
|
afd124ce31 | ||
|
|
f5040e6f9c | ||
|
|
f6461ae9a5 | ||
|
|
f881390311 | ||
|
|
ae7c666ed4 | ||
|
|
1cc02dd732 | ||
|
|
9a0d8f691d | ||
|
|
9265e271b7 | ||
|
|
589bb306c8 | ||
|
|
5a114156c2 | ||
|
|
77a06c4211 | ||
|
|
00bafc9eab | ||
|
|
37a2713dba | ||
|
|
5e8dc6417e | ||
|
|
cf8f8f170a | ||
|
|
983de0e13b | ||
|
|
3399f199b9 | ||
|
|
acd3311a75 | ||
|
|
10a9d65b31 | ||
|
|
3971fb2804 | ||
|
|
04a3b98973 | ||
|
|
7de9cf6037 | ||
|
|
799882a584 | ||
|
|
0ee854d5eb | ||
|
|
ea88502f89 | ||
|
|
0f0671792f | ||
|
|
1b7bd9b1e5 | ||
|
|
144499a8c9 | ||
|
|
7ddf9cbcec | ||
|
|
8b869d2224 | ||
|
|
671783a3c9 | ||
|
|
b1fcb40f5d | ||
|
|
07bac01ee2 | ||
|
|
8cb284f49b | ||
|
|
208e8a791b | ||
|
|
d1a498a421 | ||
|
|
71cfb203a1 | ||
|
|
59d829f65d | ||
|
|
43cb096164 | ||
|
|
4c4c8037f5 | ||
|
|
e082a52784 | ||
|
|
0688e9e475 | ||
|
|
a663bbfc62 | ||
|
|
a58f505605 | ||
|
|
8665fb8a1f | ||
|
|
73b9e74c6b | ||
|
|
37787b0271 | ||
|
|
655a05180c | ||
|
|
992b98931f | ||
|
|
d363faca57 | ||
|
|
5d7e305172 | ||
|
|
5b3c31e547 | ||
|
|
245251aaa1 | ||
|
|
f6e497b7e6 | ||
|
|
a4633c8120 | ||
|
|
d1eb3bb469 | ||
|
|
9792feb8a2 | ||
|
|
9c0840b736 | ||
|
|
7b96531de0 | ||
|
|
3e848992ee | ||
|
|
0d20249763 | ||
|
|
e21e5963a2 | ||
|
|
dbf784bc6c | ||
|
|
016f8faaf5 | ||
|
|
bf9f1b919a | ||
|
|
8e449d891f | ||
|
|
72cc3636b5 | ||
|
|
89069391da | ||
|
|
0a4e8c8958 | ||
|
|
5f6a686b14 | ||
|
|
e8f4eb7f16 | ||
|
|
396ec20817 | ||
|
|
88bd72b262 | ||
|
|
8927484406 | ||
|
|
603e959f99 | ||
|
|
a89d0b946f | ||
|
|
051405f7c4 | ||
|
|
22f410fdcb | ||
|
|
f8ac354fd0 | ||
|
|
2503dae2d0 | ||
|
|
d12fe8f163 | ||
|
|
3931f963b1 | ||
|
|
1df5b0956a | ||
|
|
dabab56815 | ||
|
|
39e9454648 | ||
|
|
f6216401da | ||
|
|
7f819e9801 | ||
|
|
e16be2497a | ||
|
|
246a275317 | ||
|
|
6f926725e7 | ||
|
|
a6f231d392 | ||
|
|
bb039b85c6 | ||
|
|
8707787270 | ||
|
|
b9aea34708 | ||
|
|
cb712faa45 | ||
|
|
49376e5e19 | ||
|
|
ec2e5493df | ||
|
|
aedea20265 | ||
|
|
49c2fef305 | ||
|
|
2ecf54f0b4 | ||
|
|
fce0e76221 | ||
|
|
6b65130c3f | ||
|
|
ffb044b0bf | ||
|
|
0efbb8a87d | ||
|
|
7cc8c84855 | ||
|
|
39512fff1c | ||
|
|
22e2f0bd93 | ||
|
|
0194be8871 | ||
|
|
0838a54d57 | ||
|
|
1fc4e97fd6 | ||
|
|
640e73177b | ||
|
|
4bc407b45e | ||
|
|
b77e9fb60b | ||
|
|
e78bfbf48b | ||
|
|
ee98a03a67 | ||
|
|
c71186bd9e | ||
|
|
253e3cfdd3 | ||
|
|
734b913351 | ||
|
|
c031855b06 | ||
|
|
ece3798ddf | ||
|
|
6673d94602 | ||
|
|
a63a57b161 | ||
|
|
584435c6db | ||
|
|
cf95533ca3 | ||
|
|
4a1bd968bf | ||
|
|
149c76f4aa | ||
|
|
e063c07018 | ||
|
|
b4e8b4013e | ||
|
|
02c71b8566 | ||
|
|
7d0cfbc8bf | ||
|
|
f5c14c3350 | ||
|
|
5cce2b4850 | ||
|
|
3a62b5ff09 | ||
|
|
46a86469d6 | ||
|
|
04f58bccdf | ||
|
|
02047d9229 | ||
|
|
3625768487 | ||
|
|
1a2dea5219 | ||
|
|
972982fb44 | ||
|
|
accf626997 | ||
|
|
1a53bc4b3e | ||
|
|
58720a3c70 | ||
|
|
6d9e99e365 | ||
|
|
68ed0a03ae | ||
|
|
613a3b721a | ||
|
|
2d06862db3 | ||
|
|
d5f127d902 | ||
|
|
2f68ae0446 | ||
|
|
39eca5adab | ||
|
|
25e73affee | ||
|
|
cba3c62611 | ||
|
|
fc400fe9e1 | ||
|
|
b20b9bef16 | ||
|
|
19311e0adf | ||
|
|
c3a118df73 | ||
|
|
572e25ecfb | ||
|
|
ab7cee7a86 | ||
|
|
41298a96bf | ||
|
|
d64bd38407 | ||
|
|
00353428fc | ||
|
|
cdf827150c | ||
|
|
f8ddc826f6 | ||
|
|
c67dd5f6e0 | ||
|
|
f015e1b9c9 | ||
|
|
f0ccfc5f7c | ||
|
|
55b7cb1f7e | ||
|
|
75b08bf6c8 | ||
|
|
784220aadb | ||
|
|
0ea5858372 | ||
|
|
0f690d6bcb | ||
|
|
831bc8d3d7 | ||
|
|
a510fc13a7 | ||
|
|
1acccbc049 | ||
|
|
4902b6f0d7 | ||
|
|
4674cfa753 | ||
|
|
48a9551cd0 | ||
|
|
fb4d979332 | ||
|
|
39127d060d | ||
|
|
3147689ce5 | ||
|
|
1bdc5a917f | ||
|
|
202f374860 | ||
|
|
820f0f7a7b | ||
|
|
7983c11e1e | ||
|
|
6c7e719d63 | ||
|
|
8c8945893b | ||
|
|
7be66d9dc8 | ||
|
|
149b3877b1 | ||
|
|
63a065ca16 | ||
|
|
cd46fc3a22 | ||
|
|
9bcb742612 | ||
|
|
c4f8744961 | ||
|
|
c84bd0fdb4 | ||
|
|
710633a121 | ||
|
|
aa19cc64ea | ||
|
|
509a7fadb4 | ||
|
|
37ca3e50d4 | ||
|
|
a0ea21a604 | ||
|
|
4decaea90d | ||
|
|
960068d367 | ||
|
|
21e589d616 | ||
|
|
2e6264da9a | ||
|
|
eded30bb87 | ||
|
|
4507004d2d | ||
|
|
c8ab486fe5 | ||
|
|
233df4526d | ||
|
|
10110164a0 | ||
|
|
7a9bd5c409 | ||
|
|
1202cee287 | ||
|
|
8386787518 | ||
|
|
c801ce8fb6 | ||
|
|
afe4ae4274 | ||
|
|
4049dceb8c | ||
|
|
3e25741a8d | ||
|
|
cb03934cc1 | ||
|
|
c0b261f60f | ||
|
|
ff21a43992 | ||
|
|
1cc3423a9f | ||
|
|
5dd0ca89b1 | ||
|
|
a7552eaf2d | ||
|
|
15bd16e7b1 | ||
|
|
cd90e87889 | ||
|
|
79a5ce2450 | ||
|
|
b9b4ae66bd | ||
|
|
65abc66f84 | ||
|
|
e1366a69d5 | ||
|
|
cd5a2c779b | ||
|
|
2c6f46f90a | ||
|
|
9b5be3cb3c | ||
|
|
2ab0756070 | ||
|
|
c455cbdce1 | ||
|
|
b2d5333056 | ||
|
|
6823d37ef2 | ||
|
|
74bf9de1f4 | ||
|
|
bdb42a9527 | ||
|
|
f76a877fbb | ||
|
|
f040742997 | ||
|
|
33a1b6a8f0 | ||
|
|
01b4595902 | ||
|
|
c2bbadc769 | ||
|
|
57d633f4b9 | ||
|
|
03a98cf7ac | ||
|
|
253cadfd0c | ||
|
|
5deab88476 | ||
|
|
8fc4b4db62 | ||
|
|
7f8a07175c | ||
|
|
75ce5b9d5c | ||
|
|
8563d9e5c8 | ||
|
|
ab04c65782 | ||
|
|
a850f17153 | ||
|
|
d3612d6ec7 | ||
|
|
d2d2f593c4 | ||
|
|
99a667b5d3 | ||
|
|
f18fd3d587 | ||
|
|
503c7324a3 | ||
|
|
0ac83cb309 | ||
|
|
f5ac5ec4ac | ||
|
|
bb3a629058 | ||
|
|
b47171d8b5 | ||
|
|
530f23a88b | ||
|
|
87f265f3ad | ||
|
|
87f0dbb6f1 | ||
|
|
2bce5b0a89 | ||
|
|
4f3cb09f07 | ||
|
|
1a792b7ea6 | ||
|
|
3971f9609f | ||
|
|
e8d9c18088 | ||
|
|
9fe034101a | ||
|
|
08f4198615 | ||
|
|
1d6caa4b44 | ||
|
|
03e4540459 |
6
.gitattributes
vendored
6
.gitattributes
vendored
@ -1 +1,5 @@
|
||||
*.sh eol=lf
|
||||
* text=auto eol=lf
|
||||
*.png binary
|
||||
*.jpg binary
|
||||
*.gif binary
|
||||
*.ico binary
|
||||
|
||||
13
.github/ISSUE_TEMPLATE/bug.md
vendored
13
.github/ISSUE_TEMPLATE/bug.md
vendored
@ -7,10 +7,13 @@ assignees: ''
|
||||
|
||||
---
|
||||
|
||||
请填写以下信息.
|
||||
Please fill in the following information.
|
||||
|
||||
Install ENV: (You can find it in the boot interface.)
|
||||
* DMI:
|
||||
* CPU:
|
||||
* NIC:
|
||||
* NIC: (pid & vid)
|
||||
|
||||
RR version: (You can find it in the update menu.)
|
||||
* RR:
|
||||
@ -26,6 +29,14 @@ Issue:
|
||||
|
||||
logs:
|
||||
|
||||
(## 因为 log中存在 SN/MAC 等一些敏感信息, 当提供完整文件时请自行抹除他们, 当然你也可以发送到我的邮箱. ##)
|
||||
(## Because the log contains some sensitive information such as SN/MAC, please delete them when providing the complete file. Of course, you can also send it to my email. ##)
|
||||
...
|
||||
|
||||
(请先看一下#173、#175、#226 的内容)
|
||||
(Plz review the content of #173, #175, #226 first)
|
||||
...
|
||||
|
||||
(如果你只是说 XXX 不能用, 什么详细信息也不提供, 我也只能说感谢你的反馈.)
|
||||
(If you just say XXX doesn't work without providing any details, I can only say thank you for your feedback.)
|
||||
...
|
||||
|
||||
112
.github/workflows/data.yml
vendored
Normal file
112
.github/workflows/data.yml
vendored
Normal file
@ -0,0 +1,112 @@
|
||||
#
|
||||
# Copyright (C) 2022 Ing <https://github.com/wjz304>
|
||||
#
|
||||
# This is free software, licensed under the MIT License.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
name: Data
|
||||
on:
|
||||
release:
|
||||
types:
|
||||
- created
|
||||
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
push:
|
||||
description: "push"
|
||||
default: false
|
||||
type: boolean
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@main
|
||||
with:
|
||||
ref: main
|
||||
|
||||
- name: Init Env
|
||||
run: |
|
||||
git config --global user.email "github-actions[bot]@users.noreply.github.com"
|
||||
git config --global user.name "github-actions[bot]"
|
||||
sudo timedatectl set-timezone "Asia/Shanghai"
|
||||
|
||||
- name: Get Data
|
||||
run: |
|
||||
REPO="${{ github.server_url }}/${{ github.repository }}"
|
||||
PRERELEASE="true"
|
||||
|
||||
TAG=""
|
||||
for i in {1..3}; do
|
||||
if [ "${PRERELEASE}" = "true" ]; then
|
||||
TAG="$(curl -skL --connect-timeout 10 "${REPO}/tags" | grep "/refs/tags/.*\.zip" | sed -E 's/.*\/refs\/tags\/(.*)\.zip.*$/\1/' | sort -rV | head -1 | sed 's/^[v|V]//g')"
|
||||
else
|
||||
TAG="$(curl -skL --connect-timeout 10 -w "%{url_effective}" -o /dev/null "${REPO}/releases/latest" | awk -F'/' '{print $NF}' | sed 's/^[v|V]//g')"
|
||||
fi
|
||||
rm -f rr-${TAG}.img.zip
|
||||
STATUS=$(curl -kL --connect-timeout 10 -w "%{http_code}" "${REPO}/releases/download/${TAG}/rr-${TAG}.img.zip" -o "rr-${TAG}.img.zip")
|
||||
if [ $? -eq 0 ] && [ ${STATUS:-0} -eq 200 ]; then
|
||||
break
|
||||
else
|
||||
echo "Download failed, retry $i/3"
|
||||
sleep 60
|
||||
fi
|
||||
done
|
||||
if [ ! -f "rr-${TAG}.img.zip" ] || [ ${STATUS:-0} -ne 200 ]; then
|
||||
echo "Download failed after 3 attempts"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
unzip rr-${TAG}.img.zip -d rr rr.img
|
||||
|
||||
sudo apt update
|
||||
sudo apt install -y locales busybox dialog gettext sed gawk jq curl
|
||||
sudo apt install -y python-is-python3 python3-pip libelf-dev qemu-utils cpio xz-utils lz4 lzma bzip2 gzip zstd
|
||||
sudo apt install -y build-essential libtool pkgconf libzstd-dev liblzma-dev libssl-dev # kmodule dependencies
|
||||
|
||||
# Backup the original python3 executable.
|
||||
sudo mv -f "$(realpath $(which python3))/EXTERNALLY-MANAGED" "$(realpath $(which python3))/EXTERNALLY-MANAGED.bak" 2>/dev/null || true
|
||||
sudo pip3 install -U -r scripts/requirements.txt
|
||||
|
||||
. scripts/func.sh "${{ secrets.RRORG }}"
|
||||
|
||||
LOOPX=$(sudo losetup -f)
|
||||
sudo losetup -P "${LOOPX}" "rr/rr.img"
|
||||
rm -rf "/tmp/mnt/p3"
|
||||
mkdir -p "/tmp/mnt/p3"
|
||||
sudo mount "${LOOPX}p3" "/tmp/mnt/p3"
|
||||
unpackInitrd /tmp/mnt/p3/initrd-rr "rr/initrd"
|
||||
|
||||
python3 scripts/func.py getmodels -w "rr/initrd" -j "docs/models.json" -x "docs/models.xlsx"
|
||||
python3 scripts/func.py getpats -w "rr/initrd" -j "docs/pats.json" -x "docs/pats.xlsx"
|
||||
python3 scripts/func.py getaddons -w "/tmp" -j "docs/addons.json" -x "docs/addons.xlsx"
|
||||
python3 scripts/func.py getmodules -w "/tmp" -j "docs/modules.json" -x "docs/modules.xlsx"
|
||||
|
||||
sudo umount "/tmp/mnt/p3"
|
||||
sudo losetup -d "${LOOPX}"
|
||||
rm -rf "/tmp/mnt/p3"
|
||||
|
||||
- name: Upload to Artifacts
|
||||
if: success()
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: docs
|
||||
path: |
|
||||
docs/*.json
|
||||
docs/*.xlsx
|
||||
retention-days: 5
|
||||
|
||||
- name: Check and Push
|
||||
if: success() && (inputs.push == true || github.event.action == 'created')
|
||||
run: |
|
||||
echo "Git push ..."
|
||||
# git checkout main
|
||||
git pull
|
||||
status=$(git status -s | grep -E "docs" | awk '{printf " %s", $2}')
|
||||
if [ -n "${status}" ]; then
|
||||
git add ${status}
|
||||
git commit -m "update $(date +%Y-%m-%d" "%H:%M:%S)"
|
||||
git push -f
|
||||
fi
|
||||
61
.github/workflows/grub.yml
vendored
61
.github/workflows/grub.yml
vendored
@ -1,61 +0,0 @@
|
||||
#
|
||||
# Copyright (C) 2022 Ing <https://github.com/wjz304>
|
||||
#
|
||||
# This is free software, licensed under the MIT License.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
name: Grub
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
push:
|
||||
description: "push"
|
||||
default: false
|
||||
type: boolean
|
||||
jobs:
|
||||
grub:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@main
|
||||
|
||||
- name: Initialization environment
|
||||
run: |
|
||||
git config --global user.email "github-actions[bot]@users.noreply.github.com"
|
||||
git config --global user.name "github-actions[bot]"
|
||||
sudo timedatectl set-timezone "Asia/Shanghai"
|
||||
|
||||
sudo apt update
|
||||
sudo apt install -y build-essential bison flex dosfstools
|
||||
|
||||
- name: Make Grub
|
||||
run: |
|
||||
. scripts/grub.sh "grub-2.06" "i386-pc i386-efi x86_64-efi" "RR"
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: grub
|
||||
path: |
|
||||
grub.img.gz
|
||||
|
||||
- name: Check and Push
|
||||
if: success() && inputs.push == true
|
||||
run: |
|
||||
if [ -f "grub.img.gz" ]; then
|
||||
echo "Copy img ..."
|
||||
mv -f grub.img.gz files/grub.img.gz
|
||||
|
||||
echo "Git push ..."
|
||||
git pull
|
||||
status=$(git status -s | grep -E 'grub.img.gz' | awk '{printf " %s", $2}')
|
||||
if [ -n "${status}" ]; then
|
||||
git add ${status}
|
||||
git commit -m "update $(date +%Y-%m-%d" "%H:%M:%S)"
|
||||
git push -f
|
||||
fi
|
||||
else
|
||||
echo "No change ..."
|
||||
fi
|
||||
301
.github/workflows/issues.yml
vendored
301
.github/workflows/issues.yml
vendored
@ -5,7 +5,7 @@
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
name: Auto Comment
|
||||
name: Issues
|
||||
on:
|
||||
issues:
|
||||
types: [opened, reopened]
|
||||
@ -14,6 +14,9 @@ jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@main
|
||||
|
||||
- name: Init Env
|
||||
run: |
|
||||
git config --global user.email "github-actions[bot]@users.noreply.github.com"
|
||||
@ -21,15 +24,59 @@ jobs:
|
||||
sudo timedatectl set-timezone "Asia/Shanghai"
|
||||
|
||||
- name: Check Issues
|
||||
shell: python
|
||||
run: |
|
||||
if echo "${{ github.event.issue.body }}" | grep -q "ENV"; then
|
||||
echo "FALG=true" >> $GITHUB_ENV
|
||||
else
|
||||
echo "FALG=false" >> $GITHUB_ENV
|
||||
fi
|
||||
# -*- coding: utf-8 -*-
|
||||
import json
|
||||
import os
|
||||
import subprocess
|
||||
|
||||
- name: Create Issues comment
|
||||
if: env.FALG == 'false'
|
||||
def set_env(name, value):
|
||||
subprocess.call(f'echo "{name}<<EOF" >> $GITHUB_ENV', shell=True)
|
||||
subprocess.call(f'echo "{value}" >> $GITHUB_ENV', shell=True)
|
||||
subprocess.call(f'echo "EOF" >> $GITHUB_ENV', shell=True)
|
||||
|
||||
issuetitle = """${{ github.event.issue.title }}"""
|
||||
issuebody = """${{ github.event.issue.body }}"""
|
||||
|
||||
iscustom = 'false'
|
||||
warinfo = 'false'
|
||||
|
||||
fields = {
|
||||
"format": "",
|
||||
"size": "",
|
||||
"template": "",
|
||||
"language": "",
|
||||
"sn": "",
|
||||
"macs": "",
|
||||
"tips": "",
|
||||
"model": "",
|
||||
"version": "",
|
||||
"kernel": "",
|
||||
"addons": "",
|
||||
"modules": ""
|
||||
}
|
||||
|
||||
try:
|
||||
if issuetitle.strip().lower().startswith('custom'):
|
||||
jsonbody = json.loads(issuebody)
|
||||
iscustom = 'true'
|
||||
for k in fields:
|
||||
fields[k] = jsonbody.get(k, "")
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
if iscustom == 'false':
|
||||
if not any(x in issuebody for x in ['DMI', 'CPU', 'NIC']):
|
||||
warinfo = 'true'
|
||||
|
||||
set_env("iscustom", iscustom)
|
||||
set_env("warinfo", warinfo)
|
||||
for k, v in fields.items():
|
||||
set_env(k, v)
|
||||
|
||||
- name: Update Comment Warinfo
|
||||
if: env.warinfo == 'true'
|
||||
uses: actions-cool/issues-helper@v3
|
||||
with:
|
||||
actions: "create-comment"
|
||||
@ -38,12 +85,13 @@ jobs:
|
||||
body: |
|
||||
<img src="https://user-images.githubusercontent.com/5615843/235939097-6798da58-24fd-44cc-9970-c8d2f9609704.jpg" width="400">
|
||||
|
||||
Please fill in the following information.
|
||||
请填写以下信息.
|
||||
Please fill in the following information.
|
||||
|
||||
Install ENV: (You can find it in the boot interface.)
|
||||
* DMI:
|
||||
* CPU:
|
||||
* NIC:
|
||||
* NIC: (pid & vid)
|
||||
|
||||
RR version: (You can find it in the update menu.)
|
||||
* RR:
|
||||
@ -59,7 +107,240 @@ jobs:
|
||||
|
||||
logs:
|
||||
|
||||
(## 因为 log中存在 SN/MAC 等一些敏感信息, 当提供完整文件时请自行抹除他们, 当然你也可以发送到我的邮箱. ##)
|
||||
(## Because the log contains some sensitive information such as SN/MAC, please delete them when providing the complete file. Of course, you can also send it to my email. ##)
|
||||
...
|
||||
|
||||
(请先看一下#173、#175、#226 的内容)
|
||||
(Plz review the content of #173, #175, #226 first)
|
||||
...
|
||||
|
||||
(如果你只是说 XXX 不能用, 什么详细信息也不提供, 我也只能说感谢你的反馈.)
|
||||
(If you just say XXX doesn't work without providing any details, I can only say thank you for your feedback.)
|
||||
...
|
||||
|
||||
emoji: heart
|
||||
|
||||
- name: Update Comment Labels
|
||||
if: env.iscustom == 'true'
|
||||
uses: actions-cool/issues-helper@v3
|
||||
with:
|
||||
actions: 'add-labels'
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
issue-number: ${{ github.event.issue.number }}
|
||||
labels: 'custom,${{ env.model }}'
|
||||
|
||||
- name: Update Comment Building
|
||||
if: env.iscustom == 'true'
|
||||
id: comment
|
||||
uses: actions-cool/issues-helper@v3
|
||||
with:
|
||||
actions: 'create-comment'
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
issue-number: ${{ github.event.issue.number }}
|
||||
body: |
|
||||
Hi @${{ github.event.issue.user.login }}.
|
||||
RR-${{ env.model }} building (Usually about 5 minutes) ...
|
||||
> ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
|
||||
----
|
||||
emoji: heart
|
||||
|
||||
- name: Run Build
|
||||
if: env.iscustom == 'true'
|
||||
run: |
|
||||
# 累了, 毁灭吧!
|
||||
|
||||
sudo apt update
|
||||
sudo apt install -y locales busybox dialog gettext sed gawk jq curl
|
||||
sudo apt install -y python-is-python3 python3-pip libelf-dev qemu-utils dosfstools cpio xz-utils lz4 lzma bzip2 gzip zstd
|
||||
|
||||
. scripts/func.sh "${{ secrets.RRORG }}"
|
||||
|
||||
REPO="${{ github.server_url }}/${{ github.repository }}"
|
||||
PRERELEASE="true"
|
||||
|
||||
TAG=""
|
||||
if [ "${PRERELEASE}" = "true" ]; then
|
||||
TAG="$(curl -skL --connect-timeout 10 "${REPO}/tags" | grep "/refs/tags/.*\.zip" | sed -E 's/.*\/refs\/tags\/(.*)\.zip.*$/\1/' | sort -rV | head -1 | sed 's/^[v|V]//g')"
|
||||
else
|
||||
TAG="$(curl -skL --connect-timeout 10 -w "%{url_effective}" -o /dev/null "${REPO}/releases/latest" | awk -F'/' '{print $NF}' | sed 's/^[v|V]//g')"
|
||||
fi
|
||||
rm -f rr-${TAG}.img.zip
|
||||
STATUS=$(curl -kL --connect-timeout 10 -w "%{http_code}" "${REPO}/releases/download/${TAG}/rr-${TAG}.img.zip" -o "rr-${TAG}.img.zip")
|
||||
if [ $? -ne 0 ] || [ ${STATUS:-0} -ne 200 ]; then
|
||||
echo "Download failed"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
unzip rr-${TAG}.img.zip -d rr rr.img
|
||||
|
||||
echo "TAG=${TAG}" >> $GITHUB_ENV
|
||||
|
||||
case "${{ env.size }}" in
|
||||
2GB)
|
||||
echo "2GB"
|
||||
;;
|
||||
4GB)
|
||||
echo "4GB"
|
||||
resizeImg rr/rr.img +2048M
|
||||
;;
|
||||
8GB)
|
||||
echo "8GB"
|
||||
resizeImg rr/rr.img +6144M
|
||||
;;
|
||||
*)
|
||||
echo "unknown size"
|
||||
;;
|
||||
esac
|
||||
|
||||
LOOPX=$(sudo losetup -f)
|
||||
sudo losetup -P "${LOOPX}" rr/rr.img
|
||||
|
||||
echo "Building..."
|
||||
{
|
||||
echo ". menu.sh"
|
||||
[ -n "${{ env.language }}" ] && echo "echo \"${{ env.language }}.UTF-8\" >/mnt/p1/.locale"
|
||||
[ -n "${{ env.tips }}" ] && echo "echo -e \"${{ env.tips }}\" >/mnt/p3/AddTips"
|
||||
[ -n "${{ env.kernel }}" ] && echo "writeConfigKey \"kernel\" \"${{ env.kernel }}\" \"\${USER_CONFIG_FILE}\""
|
||||
echo "menu.sh modelMenu \"${{ env.model }}\""
|
||||
echo "menu.sh productversMenu \"${{ env.version }}\""
|
||||
[ -n "${{ env.addons }}" ] && {
|
||||
echo "writeConfigKey \"addons\" \"{}\" \"\${USER_CONFIG_FILE}\""
|
||||
IFS=',' read -ra ADDON_ARR <<< "${{ env.addons }}"
|
||||
for A in "${ADDON_ARR[@]}"; do
|
||||
if echo "${A}" | grep -qE '^[^:]+:[^:]+$'; then
|
||||
KEY="$(echo "${A}" | cut -d':' -f1 | xargs)"
|
||||
VAL="$(echo "${A}" | cut -d':' -f2 | xargs)"
|
||||
else
|
||||
KEY="${A}"
|
||||
VAL=""
|
||||
fi
|
||||
echo "writeConfigKey \"addons.\\\"${KEY}\\\"\" \"${VAL}\" \"\${USER_CONFIG_FILE}\""
|
||||
done
|
||||
}
|
||||
[ ! "custom" = "${{ env.kernel }}" ] && [ -n "${{ env.modules }}" ] && {
|
||||
echo "writeConfigKey \"modules\" \"{}\" \"\${USER_CONFIG_FILE}\""
|
||||
echo "mergeConfigModules \"$(echo "${{ env.modules }}" | tr ',' '\n')\" \"\${USER_CONFIG_FILE}\""
|
||||
}
|
||||
echo "menu.sh make"
|
||||
echo "menu.sh cleanCache"
|
||||
[ -n "${{ env.sn }}" ] && echo "writeConfigKey \"sn\" \"${{ env.sn }}\" \"\${USER_CONFIG_FILE}\""
|
||||
[ -n "${{ env.macs }}" ] && {
|
||||
MACS=($(echo "${{ env.macs }}" | sed 's/[:-]//g' | sed 's/.*/\U&/' | sed 's/[;,]/ /g'))
|
||||
[ -n "${MACS[0]}" ] && echo "writeConfigKey \"mac1\" \"${MACS[0]}\" \"\${USER_CONFIG_FILE}\""
|
||||
[ -n "${MACS[1]}" ] && echo "writeConfigKey \"mac2\" \"${MACS[1]}\" \"\${USER_CONFIG_FILE}\""
|
||||
}
|
||||
[ "true" = "${{ env.template }}" ] && {
|
||||
echo "writeConfigKey \"sn\" \"\" \"\${USER_CONFIG_FILE}\""
|
||||
echo "writeConfigKey \"mac1\" \"\" \"\${USER_CONFIG_FILE}\""
|
||||
echo "writeConfigKey \"mac2\" \"\" \"\${USER_CONFIG_FILE}\""
|
||||
}
|
||||
} > build.sh
|
||||
chmod +x build.sh
|
||||
|
||||
docker pull wjz304/rr:${TAG}
|
||||
docker run --rm --privileged -p 7681:7681 -p 7304:7304 -p 7080:7080 -p 7022:22 -v ${PWD}/build.sh:/opt/rr/build.sh wjz304/rr:${TAG} bash build.sh
|
||||
|
||||
sudo losetup --detach "${LOOPX}"
|
||||
|
||||
ls rr -al
|
||||
|
||||
{
|
||||
echo "RR: "
|
||||
echo " VERSION: ${TAG}"
|
||||
echo " CUSTOM: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
||||
echo
|
||||
echo "After the image is written to the disk, it will boot directly into DSM without the need to compile again."
|
||||
echo "Of course, you can also modify the settings yourself."
|
||||
} >README.txt
|
||||
|
||||
case "${{ env.format }}" in
|
||||
ova)
|
||||
echo "OVA"
|
||||
convertova "rr/rr.img" "rr/rr.ova"
|
||||
(cd rr && sha256sum rr.ova >../sha256sum)
|
||||
zip -9 "rr-${{ env.model }}-${TAG}-${{ github.run_id }}.ova.zip" -j rr/rr.ova sha256sum README.txt
|
||||
;;
|
||||
vmx)
|
||||
echo "VMX"
|
||||
convertvmx "rr/rr.img" "rr.vmx" # rr.vmx is a directory
|
||||
(cd rr.vmx && sha256sum * >../sha256sum)
|
||||
zip -9 "rr-${{ env.model }}-${TAG}-${{ github.run_id }}.vmx.zip" -r rr.vmx sha256sum README.txt
|
||||
;;
|
||||
vmdk)
|
||||
echo "VMDK"
|
||||
qemu-img convert rr/rr.img -O vmdk -o 'adapter_type=lsilogic,subformat=monolithicSparse,compat6' rr/rr.vmdk
|
||||
(cd rr && sha256sum rr.vmdk >../sha256sum)
|
||||
zip -9 "rr-${{ env.model }}-${TAG}-${{ github.run_id }}.vmdk.zip" -j rr/rr.vmdk sha256sum README.txt
|
||||
;;
|
||||
flat)
|
||||
echo "FLAT"
|
||||
qemu-img convert rr/rr.img -O vmdk -o 'adapter_type=lsilogic,subformat=monolithicFlat,compat6' rr/rr.vmdk
|
||||
(cd rr && sha256sum rr*.vmdk >../sha256sum)
|
||||
zip -9 "rr-${{ env.model }}-${TAG}-${{ github.run_id }}.flat.zip" -j rr/rr*.vmdk sha256sum README.txt
|
||||
;;
|
||||
vhd)
|
||||
echo "VHD"
|
||||
qemu-img convert rr/rr.img -O vpc rr/rr.vhd
|
||||
createvmc "rr/rr.vhd" "rr/rr.vmc"
|
||||
(cd rr && sha256sum rr.vhd >../sha256sum)
|
||||
zip -9 "rr-${{ env.model }}-${TAG}-${{ github.run_id }}.vhd.zip" -j rr/rr.vmc rr/rr.vhd sha256sum README.txt
|
||||
;;
|
||||
vhdx)
|
||||
echo "VHDX"
|
||||
qemu-img convert rr/rr.img -O vhdx -o subformat=dynamic rr/rr.vhdx
|
||||
(cd rr && sha256sum rr.vhdx >../sha256sum)
|
||||
zip -9 "rr-${{ env.model }}-${TAG}-${{ github.run_id }}.vhdx.zip" -j rr/rr.vhdx sha256sum README.txt
|
||||
;;
|
||||
*)
|
||||
echo "IMG"
|
||||
(cd rr && sha256sum rr.img >../sha256sum)
|
||||
zip -9 "rr-${{ env.model }}-${TAG}-${{ github.run_id }}.img.zip" -j rr/rr.img sha256sum README.txt
|
||||
esac
|
||||
|
||||
- name: Upload to Artifacts
|
||||
if: env.iscustom == 'true' && success()
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: rr-${{ env.model }}-${{ env.TAG }}
|
||||
path: |
|
||||
rr-${{ env.model }}-${{ env.TAG }}*.zip
|
||||
retention-days: 5
|
||||
|
||||
- name: Update Comment Success
|
||||
if: env.iscustom == 'true' && success()
|
||||
uses: actions-cool/issues-helper@v3
|
||||
with:
|
||||
actions: 'update-comment'
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
comment-id: ${{ steps.comment.outputs.comment-id }}
|
||||
update-mode: replace
|
||||
body: |
|
||||
Hi @${{ github.event.issue.user.login }}.
|
||||
RR-${{ env.model }}-${{ env.TAG }} build success, please download the attachment from the below link (Attachments are only kept for 5 days).
|
||||
> ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
|
||||
----
|
||||
emoji: hooray
|
||||
|
||||
- name: Update Comment Fail
|
||||
if: env.iscustom == 'true' && failure()
|
||||
uses: actions-cool/issues-helper@v3
|
||||
with:
|
||||
actions: 'update-comment'
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
comment-id: ${{ steps.comment.outputs.comment-id }}
|
||||
update-mode: replace
|
||||
body: |
|
||||
Hi @${{ github.event.issue.user.login }}.
|
||||
RR-${{ env.model }}-${{ env.TAG }} build failed, please try again.
|
||||
> ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
|
||||
----
|
||||
emoji: confused
|
||||
|
||||
- name: Close Issues
|
||||
if: env.iscustom == 'true'
|
||||
uses: actions-cool/issues-helper@v3
|
||||
with:
|
||||
actions: 'close-issue'
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
issue-number: ${{ github.event.issue.number }}
|
||||
|
||||
206
.github/workflows/main.yml
vendored
206
.github/workflows/main.yml
vendored
@ -1,206 +0,0 @@
|
||||
#
|
||||
# Copyright (C) 2022 Ing <https://github.com/wjz304>
|
||||
#
|
||||
# This is free software, licensed under the MIT License.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
name: Build RR
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
tags:
|
||||
- v*
|
||||
|
||||
release:
|
||||
types: [published]
|
||||
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
version:
|
||||
description: "format %y.%-m.$i or auto"
|
||||
required: false
|
||||
type: string
|
||||
prerelease:
|
||||
description: "pre release"
|
||||
default: false
|
||||
type: boolean
|
||||
br_version:
|
||||
description: "buildroot version"
|
||||
default: "2023.02.x"
|
||||
type: string
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@main
|
||||
with:
|
||||
lfs: 'true'
|
||||
|
||||
# Install dependencies
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
git config --global user.email "github-actions[bot]@users.noreply.github.com"
|
||||
git config --global user.name "github-actions[bot]"
|
||||
|
||||
sudo apt update
|
||||
sudo apt install -y jq cpio gettext
|
||||
|
||||
# calculates the version number and push
|
||||
- name: Calculate version
|
||||
run: |
|
||||
# Calculate version
|
||||
VERSION=""
|
||||
if [[ "${{ github.event_name }}" =~ ^(push|release)$ && "${{ github.ref_type }}" == 'tag' ]]; then
|
||||
VERSION="${{ github.ref_name }}"
|
||||
elif [ -n "${{ inputs.version }}" ]; then
|
||||
if [ "`echo ${{ inputs.version }} | cut -d '.' -f 1,2`" = "`date +'%y.%-m'`" ]; then
|
||||
VERSION="${{ inputs.version }}"
|
||||
else
|
||||
LATEST_TAG="`curl -skL "https://api.github.com/repos/${{ github.repository }}/releases" | jq -r ".[0].tag_name" 2>/dev/null`"
|
||||
if [ -n "${LATEST_TAG}" -a "`echo ${LATEST_TAG} | cut -d '.' -f 1,2`" = "`date +'%y.%-m'`" ]; then # format %y.%-m.$i
|
||||
VERSION="`echo ${LATEST_TAG} | awk -F '.' '{$3=$3+1}1' OFS='.'`"
|
||||
else
|
||||
VERSION="`date +'%y.%-m'`.0"
|
||||
fi
|
||||
fi
|
||||
else
|
||||
VERSION=""
|
||||
fi
|
||||
|
||||
echo "VERSION: ${VERSION}"
|
||||
echo "VERSION=${VERSION}" >> $GITHUB_ENV
|
||||
|
||||
if [ -n "${VERSION}" ]; then
|
||||
# Modify Source File
|
||||
echo "${VERSION}" > VERSION
|
||||
echo "${VERSION}" > files/p1/RR_VERSION
|
||||
sed 's/^RR_VERSION=.*/RR_VERSION="'${VERSION}'"/' -i files/initrd/opt/rr/include/consts.sh
|
||||
|
||||
git checkout main
|
||||
git pull
|
||||
status=$(git status -s | awk '{printf " %s", $2}')
|
||||
if [ -n "${status}" ]; then
|
||||
git add ${status}
|
||||
git commit -m "update $(date +%Y-%m-%d" "%H:%M:%S)"
|
||||
git push -f
|
||||
fi
|
||||
fi
|
||||
|
||||
# Convert po2mo, Get extractor, LKMs, addons and Modules
|
||||
- name: Convert po2mo, Get extractor, LKMs, addons and Modules
|
||||
run: |
|
||||
. scripts/func.sh
|
||||
|
||||
convertpo2mo "files/initrd/opt/rr/lang"
|
||||
getExtractor "files/p3/extractor"
|
||||
getLKMs "files/p3/lkms" ${{ inputs.prerelease }}
|
||||
getAddons "files/p3/addons" ${{ inputs.prerelease }}
|
||||
getModules "files/p3/modules" ${{ inputs.prerelease }}
|
||||
|
||||
echo "OK"
|
||||
|
||||
# Build incremental
|
||||
- name: Build image
|
||||
run: |
|
||||
. scripts/func.sh
|
||||
echo "Create RR image"
|
||||
gzip -dc "files/grub.img.gz" >"rr.img"
|
||||
fdisk -l "rr.img"
|
||||
|
||||
LOOPX=$(sudo losetup -f)
|
||||
sudo losetup -P "${LOOPX}" "rr.img"
|
||||
|
||||
echo "Mounting image file"
|
||||
mkdir -p "/tmp/p1"
|
||||
mkdir -p "/tmp/p3"
|
||||
sudo mount ${LOOPX}p1 "/tmp/p1"
|
||||
sudo mount ${LOOPX}p3 "/tmp/p3"
|
||||
|
||||
echo "Get Buildroot"
|
||||
br_version="${{ inputs.br_version }}"
|
||||
[ -z "${br_version}" ] && br_version="2023.02.x"
|
||||
getBuildroot "${br_version}" "br"
|
||||
[ ! -f "br/bzImage-rr" -o ! -f "br/initrd-rr" ] && return 1
|
||||
|
||||
echo "Repack initrd"
|
||||
cp -f "br/bzImage-rr" "files/p3/bzImage-rr"
|
||||
repackInitrd "br/initrd-rr" "files/initrd" "files/p3/initrd-rr"
|
||||
|
||||
echo "Copying files"
|
||||
sudo cp -Rf "files/p1/"* "/tmp/p1"
|
||||
sudo cp -Rf "files/p3/"* "/tmp/p3"
|
||||
sync
|
||||
|
||||
echo "Unmount image file"
|
||||
sudo umount "/tmp/p1"
|
||||
sudo umount "/tmp/p3"
|
||||
rmdir "/tmp/p1"
|
||||
rmdir "/tmp/p3"
|
||||
|
||||
sudo losetup --detach ${LOOPX}
|
||||
|
||||
echo "Create RR_4GB image"
|
||||
resizeImg "rr.img" "+3072M" "rr_4GB.img"
|
||||
|
||||
# echo "Image Converter"
|
||||
# qemu-img convert -O vmdk rr.img rr-dyn.vmdk
|
||||
# qemu-img convert -O vmdk -o adapter_type=lsilogic rr.img -o subformat=monolithicFlat rr.vmdk
|
||||
|
||||
# Zip image and generate checksum
|
||||
- name: Pack
|
||||
run: |
|
||||
if [ -n "${{ env.VERSION }}" ]; then
|
||||
zip -9 "rr-${{ env.VERSION }}.img.zip" rr.img
|
||||
zip -9 "rr_4GB-${{ env.VERSION }}.img.zip" rr_4GB.img
|
||||
# zip -9 "rr-${{ env.VERSION }}.vmdk-dyn.zip" rr-dyn.vmdk
|
||||
# zip -9 "rr-${{ env.VERSION }}.vmdk-flat.zip" rr.vmdk rr-flat.vmdk
|
||||
else
|
||||
zip -9 "rr.img.zip" rr.img
|
||||
zip -9 "rr_4GB.img.zip" rr_4GB.img
|
||||
fi
|
||||
sha256sum update-list.yml update-check.sh > sha256sum
|
||||
zip -9j update.zip update-list.yml update-check.sh
|
||||
while read F; do
|
||||
if [ -d "${F}" ]; then
|
||||
FTGZ="`basename "${F}"`.tgz"
|
||||
tar -czf "${FTGZ}" -C "${F}" .
|
||||
sha256sum "${FTGZ}" >> sha256sum
|
||||
zip -9j update.zip "${FTGZ}"
|
||||
rm "${FTGZ}"
|
||||
else
|
||||
(cd `dirname ${F}` && sha256sum `basename ${F}`) >> sha256sum
|
||||
zip -9j update.zip "${F}"
|
||||
fi
|
||||
done < <(yq '.replace | explode(.) | to_entries | map([.key])[] | .[]' update-list.yml)
|
||||
zip -9j update.zip sha256sum
|
||||
|
||||
# Upload artifact
|
||||
- name: Upload
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: Images
|
||||
path: |
|
||||
rr.img.zip
|
||||
rr_4GB.img.zip
|
||||
update.zip
|
||||
retention-days: 5
|
||||
|
||||
# Publish a release if is a tag
|
||||
- name: Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
if: env.VERSION != ''
|
||||
with:
|
||||
tag_name: ${{ env.VERSION }}
|
||||
prerelease: ${{ inputs.prerelease }}
|
||||
files: |
|
||||
rr-${{ env.VERSION }}.img.zip
|
||||
rr_4GB-${{ env.VERSION }}.img.zip
|
||||
# rr-${{ env.VERSION }}.vmdk-dyn.zip
|
||||
# rr-${{ env.VERSION }}.vmdk-flat.zip
|
||||
update.zip
|
||||
|
||||
26
.gitignore
vendored
26
.gitignore
vendored
@ -1,14 +1,28 @@
|
||||
!.gitkeep
|
||||
.vscode
|
||||
/rr
|
||||
/rr.env
|
||||
rr*.img
|
||||
rr*.vmdk
|
||||
*.zip
|
||||
.buildroot
|
||||
test*.sh
|
||||
cache
|
||||
*.bak
|
||||
*.o
|
||||
files/initrd/opt/rr/lang/*.mo
|
||||
**.po~
|
||||
**.mo
|
||||
|
||||
downloads.md
|
||||
tests
|
||||
/extractor
|
||||
/br
|
||||
Changelog*
|
||||
sha256sum
|
||||
|
||||
ovftool*
|
||||
OVA*
|
||||
**.ova
|
||||
|
||||
files/mnt/p1/.locale
|
||||
files/mnt/p1/grub_cksum.syno
|
||||
files/mnt/p1/GRUB_VER
|
||||
files/mnt/p1/user-config.yml
|
||||
files/mnt/p2
|
||||
files/mnt/p3
|
||||
files/tmp
|
||||
228
README.md
228
README.md
@ -1,78 +1,174 @@
|
||||
# Redpill Recovery (arpl-i18n)
|
||||
<img src="https://avatars.githubusercontent.com/u/151816514?s=200&v=4" alt="logo" width="140" height="140" align="left" />
|
||||
|
||||
This project is a system for redpill’s preinstallation and recovery environment.
|
||||
<h1>RR: <small>redpill’s preinstallation and recovery environment</small></h1>
|
||||
|
||||
### 组件:
|
||||
<b>https://github.com/wjz304/rr</b>
|
||||
* addons: https://github.com/wjz304/rr-addons
|
||||
* modules: https://github.com/wjz304/rr-modules
|
||||
* rp-lkms: https://github.com/wjz304/rr-lkms
|
||||
[](https://github.com/rrorg/rr/releases/latest)
|
||||
[](https://github.com/rrorg/rr/releases)
|
||||
[](https://rrorg.github.io/rr/)
|
||||
|
||||
### About GPU:
|
||||
* iGPU: https://jim.plus/
|
||||
* vGPU: https://blog.kkk.rs/
|
||||
> The ultimate solution to self-centralized Synology DSM OS on any local machine with any x86/x64 CPU architecture via a single flash of bootload pre-installation process in addition within recovery environment.
|
||||
|
||||
## 说明 - Instructions
|
||||
* [GUIDE](./guide.md)
|
||||
* [About get logs](https://github.com/wjz304/rr/issues/173)
|
||||
* [About not find DSM after "boot the loader"](https://github.com/wjz304/rr/issues/175)
|
||||
* [About DT(Device Tree) and *portcfg/maxdisks](https://github.com/wjz304/rr/issues/226)
|
||||
### 1: Disclaimer
|
||||
|
||||
## 翻译 - Translation
|
||||
* 其他语言的翻译 - Language translation work:
|
||||
```shell
|
||||
# If it does not involve adding or deleting, the following process is not required.
|
||||
sudo apt install gettext
|
||||
git clone https://github.com/wjz304/rr.git
|
||||
cd files/initrd/opt/rr
|
||||
xgettext -L Shell --keyword=TEXT *.sh -o lang/rr.pot
|
||||
sed -i 's/charset=CHARSET/charset=UTF-8/' lang/rr.pot
|
||||
# You need to replace the language you need and translate the po file.
|
||||
msginit -i lang/rr.pot -l zh_CN.UTF-8 -o lang/zh_CN.po
|
||||
# This process will be automatically processed during packaging.
|
||||
msgfmt lang/zh_CN.po -o lang/zh_CN.mo
|
||||
```
|
||||
* I am not proficient in language, and even my English is very poor.
|
||||
Developers who are familiar with various languages are welcome to submit PR.
|
||||
|
||||
* Translation maintenance personnel:
|
||||
* zh_CN: @wjz304
|
||||
* zh_TW: @豪客幫
|
||||
|
||||
## 教程 - Usage
|
||||
* English: https://www.youtube.com/watch?v=VB67_FG5y-E
|
||||
##### `(From: @NETVN82)`
|
||||
* Español: https://www.youtube.com/watch?v=KC6oCcAyoV4
|
||||
##### `(From: @Jay tech 2023)`
|
||||
* 한국어: https://www.youtube.com/watch?v=4O7EfU6MT60
|
||||
##### `(From: @pageinnet)`
|
||||
* ภาษาไทย: https://www.youtube.com/watch?v=4sGrMMEQQ6I
|
||||
##### `(From: @stnology)`
|
||||
* 中文繁體: https://www.youtube.com/watch?v=cW2eRCjtAEs
|
||||
##### `(From: @豪客幫)`
|
||||
* 中文简体: https://www.bilibili.com/video/BV1jk4y1Y7B7
|
||||
##### `(From: http://mi-d.cn)`
|
||||
|
||||
## 免责声明 - Disclaimer
|
||||
* 硬盘有价,数据无价,任何对引导的修改都是有风险的,本人不承担数据丢失的责任。
|
||||
* 本工具仅用作学习交流,严禁用于商业用途。
|
||||
* 硬盘有价,数据无价,任何对引导的修改都是有风险的,本人/组织不承担数据丢失的责任。本工具仅用作学习交流,严禁用于商业用途。
|
||||
----
|
||||
* The hard drive has a price, but the data is priceless. Any modification to the bootloader is risky. I will not be responsible for data loss.
|
||||
* This tool is only for learning and communication, and commercial use is strictly prohibited.
|
||||
* Hardware/hard-drives are priced whilst data are priceless, any user-specific custom modification of the tested & prebuilt bootloader images could potentially cause irreversible data destruction towards your local machine. Us, as (RROrg) are not responsibly liable for damage nor personal loss of any types. The project with its affiliation is released for educational and learning purpose only, commercial application of the software is strictly prohibited.
|
||||
|
||||
|
||||
### 鸣谢 - Credits
|
||||
arpl: https://github.com/fbelavenuto/arpl
|
||||
redpill: https://github.com/RedPill-TTG
|
||||
Framework: https://github.com/buildroot/buildroot
|
||||
### 2: Documentation & FAQ
|
||||
|
||||
## 打赏一下
|
||||
* > ### 作者: Ing
|
||||
* > QQ群1: 21609194 [点击链接加入QQ群](https://qm.qq.com/cgi-bin/qm/qr?k=z5O89os88QEKXCbz-0gwtEz1AeQiCwk3)
|
||||
* > QQ群2: 73119176 [点击链接加入QQ群](https://qm.qq.com/cgi-bin/qm/qr?k=6GFSrSYX2LTd9PD0r0hl_YJZsfLp53Oh)
|
||||
* > QQ频道: redpill2syno [点击链接加入QQ频道](https://pd.qq.com/s/5nmli9qgn)
|
||||
* > TG频道: redpill2syno [点击链接加入TG频道](https://t.me/redpill2syno)
|
||||
* <img src="https://raw.githubusercontent.com/wjz304/wjz304/master/my/20220908134226.jpg" width="400">
|
||||
- [RRManager](https://github.com/T-REX-XP/RRManager)
|
||||
- [rr-tools](https://github.com/RROrg/rr-tools)
|
||||
- [blog](https://rrorg.cn)
|
||||
- [docs](https://rrorg.github.io/rr-docs)
|
||||
- [📣](https://github.com/orgs/RROrg/discussions)
|
||||
|
||||
### 3: Components
|
||||
|
||||
- During the compilation process, you need to connect to the Internet to obtain model and version information and download the corresponding ROM.
|
||||
If you cannot connect to the Internet, please build a pre-compiled bootloader through [RR-CUSTOM](https://rrorg.github.io/rr/).
|
||||
- Models: [models](https://github.com/RROrg/rr/raw/main/docs/models.xlsx)
|
||||
- PATs: [pats](https://github.com/RROrg/rr/raw/main/docs/pats.xlsx)
|
||||
- Addons: [addons](https://github.com/RROrg/rr/raw/main/docs/addons.xlsx)
|
||||
- Modules: [modules](https://github.com/RROrg/rr/raw/main/docs/modules.xlsx)
|
||||
|
||||
- Proxmox VE One Click Install:
|
||||
```
|
||||
curl -fsSL https://github.com/RROrg/rr/raw/refs/heads/main/scripts/pve.sh | bash -s -- --bltype usb
|
||||
|
||||
# Optional Parameters:
|
||||
--onboot <0|1> Enable VM on boot, default 1 (enable)
|
||||
--efi <0|1> Enable UEFI boot, default 1 (enable)
|
||||
--bltype <sata|usb|nvme> Bootloader disk type, default sata
|
||||
--9ppath <path> Set to /path/to/9p to mount 9p share
|
||||
--tag <tag> Image tag, download latest release if not set
|
||||
--img <path> Local image path, use local image if set
|
||||
```
|
||||
|
||||
- Docker Compose:
|
||||
```yml
|
||||
# 请从最新版本中下载 rr.img 文件。
|
||||
# 并将 <path_to_rr.img> 替换为你的 rr.img 文件的实际路径.
|
||||
# Please download the rr.img file from the latest release.
|
||||
# And replace <path_to_rr.img> with the actual path to your rr.img file.
|
||||
|
||||
version: "3.9"
|
||||
services:
|
||||
rr:
|
||||
image: qemux/qemu:latest
|
||||
container_name: rr
|
||||
environment:
|
||||
BOOT: ""
|
||||
RAM_SIZE: "4G" # >= 4G recommended for DSM
|
||||
CPU_CORES: "2"
|
||||
DISK_FMT: "qcow2"
|
||||
DISK_TYPE: "sata"
|
||||
DISK_SIZE: "32G" # data disk size
|
||||
ARGUMENTS: "-device nec-usb-xhci,id=usb0,multifunction=on -drive file=/rr.img,media=disk,format=raw,if=none,id=udisk1 -device usb-storage,bus=usb0.0,port=1,drive=udisk1,bootindex=999,removable=on"
|
||||
devices:
|
||||
- /dev/kvm
|
||||
- /dev/net/tun
|
||||
cap_add:
|
||||
- NET_ADMIN
|
||||
ports:
|
||||
- 5000:5000 # For DSM management
|
||||
- 5001:5001 # For DSM management
|
||||
- 7681:7681 # For RR management
|
||||
- 7304:7304 # For RR management
|
||||
- 7080:7080 # For RR management
|
||||
- 8006:8006 # For QEMU management
|
||||
volumes:
|
||||
- ./rr.img:/rr.img # <path_to_rr.img>:/rr.img
|
||||
- ./data:/storage
|
||||
restart: always
|
||||
stop_grace_period: 2m
|
||||
|
||||
```
|
||||
|
||||
### 4: GPU:
|
||||
|
||||
- vGPU:
|
||||
- [蔚然小站](https://blog.kkk.rs/)
|
||||
- [syno_nvidia_gpu_driver](https://github.com/pdbear/syno_nvidia_gpu_driver/)
|
||||
- iGPU:
|
||||
- [Jim's Blog](https://jim.plus/)
|
||||
- iGPU:
|
||||
- [intel-gpu-i915-backports](https://github.com/MoetaYuko/intel-gpu-i915-backports)
|
||||
|
||||
## 5: Contributing
|
||||
|
||||
* The following is a roughly truncated guide to involve in project localization for internationalization.
|
||||
|
||||
```shell
|
||||
# If deletion nor addition proces of code hunk is not required, comply with the following process
|
||||
sudo apt install gettext
|
||||
git clone https://github.com/rrorg/rr.git
|
||||
cd files/initrd/opt/rr
|
||||
xgettext -L Shell --keyword=TEXT *.sh -o lang/rr.pot
|
||||
sed -i 's/charset=CHARSET/charset=UTF-8/' lang/rr.pot
|
||||
# If you have to replace certain language string of the project, please suggest and modify translation changes within each correlated PO file
|
||||
mkdir -p lang/zh_CN/LC_MESSAGES
|
||||
msginit -i lang/rr.pot -l zh_CN.UTF-8 -o lang/zh_CN/LC_MESSAGES/rr.po
|
||||
# Update translation files
|
||||
for I in $(find lang -path *rr.po); do msgmerge --width=256 -U ${I} lang/rr.pot; done
|
||||
# This formatting process will be automatically conducted during packaging.
|
||||
for I in $(find lang -path *rr.po); do msgfmt ${I} -o ${I/.po/.mo}; done
|
||||
```
|
||||
|
||||
- PRs of new language translations towards the project is welcomed with appreciation.
|
||||
|
||||
- Community maintainers of each supporting list of languages are accredited below.
|
||||
|
||||
- `de_DE`: `@Tim Krämer`: [Tim Krämer](https://tim-kraemer.de)
|
||||
- `en_US`: `@rrorg`
|
||||
- `ja_JP`: `@andatoshiki` & `@toshikidev`
|
||||
- `ko_KR`: `@EXP` : jeong1986
|
||||
- `ru_RU`: `@Alex`: TG
|
||||
- `tr_TR`: `@miraç bahadır öztürk`: miracozturk
|
||||
- `vi_VN`: `@Ngọc Anh Trần`: mr.ngocanhtran
|
||||
- `zh_CN`: `@rrorg`
|
||||
- `zh_HK`: `@rrorg`
|
||||
- `zh_TW`: `@March Fun`: [豪客幫](<https://cyber.suma.tw/>)
|
||||
|
||||
### 6: Acknowledgment & Credits
|
||||
|
||||
- [ARPL](https://github.com/fbelavenuto/arpl): `@fbelavenuto`
|
||||
- Redpill: `@RedPill-TTG` `@pocopico` `@jim3ma` `@fbelavenuto` `@MoetaYuko`
|
||||
- [RedPill-TTG](https://github.com/RedPill-TTG)
|
||||
- [redpill-lkm5](https://github.com/XPEnology-Community/redpill-lkm5)
|
||||
- [linux_dsm_epyc7002](https://github.com/MoetaYuko/linux_dsm_epyc7002)
|
||||
- Framework:
|
||||
- [Buildroot](https://github.com/buildroot/buildroot)
|
||||
- [Eudev](https://github.com/eudev-project/eudev)
|
||||
- [Grub](https://git.savannah.gnu.org/git/grub)
|
||||
- Addons: `@xbl3&@wirgen` `@007revad` `@PeterSuh-Q3` `@jim3ma` `@jinlife`
|
||||
- [synocodectool-patch](https://github.com/xbl3/synocodectool-patch)
|
||||
- [Synology_HDD_db](https://github.com/007revad/Synology_HDD_db)
|
||||
- [nvme-cache](https://github.com/PeterSuh-Q3/tcrp-addons/tree/main/nvme-cache)
|
||||
- [Synology_enable_M2_volume](https://github.com/007revad/Synology_enable_M2_volume)
|
||||
- [synology-installation-with-nvme-disks-only](https://jim.plus/blog/post/jim/synology-installation-with-nvme-disks-only)
|
||||
- [Synology_Photos_Face_Patch](https://github.com/jinlife/Synology_Photos_Face_Patch)
|
||||
- Modules:`@jim3ma` `@MoetaYuko`
|
||||
- [synology-igc](https://github.com/jim3ma/synology-igc)
|
||||
- [intel-gpu-i915-backports](https://github.com/MoetaYuko/intel-gpu-i915-backports)
|
||||
|
||||
### 7: Links & Community
|
||||
|
||||
#### 7.1: Group
|
||||
|
||||
- `QQ群1: 21609194` [`点击加入QQ群`](https://qm.qq.com/q/YTPvSXfeU0)
|
||||
- `QQ群2: 73119176` [`点击加入QQ群`](https://qm.qq.com/q/YV1B0NFvWK)
|
||||
- `QQ群3: 51929774` [`点击加入QQ群`](https://qm.qq.com/q/aVjM3Wb6KY)
|
||||
- `QQ群4: 49756829` [`点击加入QQ群`](https://qm.qq.com/q/9PHzmZDkqI)
|
||||
- `QQ群5: 30267817` [`点击加入QQ群`](https://qm.qq.com/q/6RgVDfOSXe)
|
||||
- `QQ群6: 68640297` [`点击加入QQ群`](https://qm.qq.com/q/PU71eSXAic)
|
||||
- `QQ Channel: RROrg` [`点击加入QQ频道`](https://pd.qq.com/s/aklqb0uij)
|
||||
- `Telegram Channel: RROrg` [`Click to join`](https://t.me/RR_Org)
|
||||
|
||||
### 7: Sponsoring
|
||||
|
||||
- <img src="https://raw.githubusercontent.com/wjz304/wjz304/master/my/buymeacoffee.png" width="700">
|
||||
|
||||
### 8: License
|
||||
|
||||
- [GPL-V3](https://github.com/RROrg/rr/blob/main/LICENSE)
|
||||
|
||||
@ -1,19 +0,0 @@
|
||||
# https://taskfile.dev
|
||||
|
||||
version: "3"
|
||||
|
||||
tasks:
|
||||
build-img:
|
||||
cmds:
|
||||
- ./img-gen.sh
|
||||
|
||||
build-docker-img:
|
||||
dir: docker
|
||||
cmds:
|
||||
- ./build.sh
|
||||
|
||||
compile-kpatch:
|
||||
dir: kpatch
|
||||
cmds:
|
||||
- make clean all
|
||||
- mv kpatch ../files/initrd/opt/rr/
|
||||
882
docs/addons.json
Normal file
882
docs/addons.json
Normal file
@ -0,0 +1,882 @@
|
||||
{
|
||||
"acpid": {
|
||||
"system": false,
|
||||
"description": {
|
||||
"en_US": "ACPI Daemon that handles power button events, fixing power button not shutting down in some environments.",
|
||||
"ar_SA": "برنامج ACPI Daemon الذي يتعامل مع أحداث زر الطاقة، ويصلح عدم إغلاق زر الطاقة في بعض البيئات.",
|
||||
"de_DE": "ACPI Daemon, der die Power-Button-Ereignisse behandelt, um das Problem zu beheben, dass der Power-Button in einigen Umgebungen nicht herunterfährt.",
|
||||
"es_ES": "Demonio ACPI que maneja los eventos del botón de encendido, solucionando el problema de que el botón de encendido no apague en algunos entornos.",
|
||||
"fr_FR": "Démon ACPI qui gère les événements du bouton d'alimentation, corrigeant le problème du bouton d'alimentation qui ne s'éteint pas dans certains environnements.",
|
||||
"ja_JP": "電源ボタンのイベントを処理するACPIデーモンで、一部の環境で電源ボタンがシャットダウンしない問題を修正します.",
|
||||
"ko_KR": "전원 버튼 이벤트를 처리하는 ACPI 데몬, 일부 환경에서 전원 버튼이 종료되지 않는 문제를 해결합니다.",
|
||||
"ru_RU": "Демон ACPI, обрабатывающий события кнопки питания, исправляющий проблему, когда кнопка питания не выключает в некоторых средах.",
|
||||
"th_TH": "ACPI Daemon ที่จัดการกับเหตุการณ์ปุ่มเปิดเครื่อง, แก้ปัญหาปุ่มเปิดเครื่องไม่ปิดเครื่องในบางสภาพแวดล้อม",
|
||||
"tr_TR": "Güç düğmesi olaylarını ele alan ACPI Daemon, bazı ortamlarda güç düğmesinin kapanmamasını düzeltir.",
|
||||
"uk_UA": "Демон ACPI, який обробляє події кнопки живлення, виправляючи проблему, коли кнопка живлення не вимикає в деяких середовищах.",
|
||||
"vi_VN": "ACPI Daemon xử lý các sự kiện nút nguồn, sửa lỗi nút nguồn không tắt máy trong một số môi trường.",
|
||||
"zh_CN": "处理电源按钮事件的 ACPI 守护程序, 解决部分环境下电源按钮无法正常关机的问题.",
|
||||
"zh_HK": "處理電源按鈕事件的 ACPI 守护程序, 解决部分環境下電源按鈕無法正常關機的問題.",
|
||||
"zh_TW": "處理電源按鈕事件的 ACPI 守护程序, 解决部分環境下電源按鈕無法正常關機的問題."
|
||||
}
|
||||
},
|
||||
"addincards": {
|
||||
"system": false,
|
||||
"description": {
|
||||
"en_US": "Remove model restrictions from official Addin cards(M2D20, E10G30-T2, ...).",
|
||||
"ar_SA": "قم بإزالة القيود على النموذج من بعض البطاقات الرسمية (M2D20، E10G30-T2، ...).",
|
||||
"de_DE": "Entfernen Sie Modellbeschränkungen von offiziellen Addin-Karten (M2D20, E10G30-T2, ...).",
|
||||
"es_ES": "Elimine las restricciones de modelo de las tarjetas Addin oficiales (M2D20, E10G30-T2, ...).",
|
||||
"fr_FR": "Supprimez les restrictions de modèle des cartes Addin officielles (M2D20, E10G30-T2, ...).",
|
||||
"ja_JP": "公式の Addin カード(M2D20、E10G30-T2、...)のモデル制限を解除します.",
|
||||
"ko_KR": "공식 Addin 카드(M2D20, E10G30-T2, ...)의 모델 제한을 제거합니다.",
|
||||
"ru_RU": "Удалите ограничения модели официальных карт Addin (M2D20, E10G30-T2, ...).",
|
||||
"th_TH": "ลบข้อจำกัดของโมเดลจากการ์ด Addin ทางการ (M2D20, E10G30-T2, ...)",
|
||||
"tr_TR": "Resmi Addin kartlarından model kısıtlamalarını kaldırın (M2D20, E10G30-T2, ...).",
|
||||
"uk_UA": "Видаліть обмеження моделі офіційних карток Addin (M2D20, E10G30-T2, ...).",
|
||||
"vi_VN": "Xóa các hạn chế mô hình từ các thẻ Addin chính thức (M2D20, E10G30-T2, ...).",
|
||||
"zh_CN": "移除官方 Addin 卡(M2D20, E10G30-T2, ...)对 DSM 型号限制.",
|
||||
"zh_HK": "移除官方 Addin 卡(M2D20, E10G30-T2, ...)对 DSM 型號限制.",
|
||||
"zh_TW": "移除官方 Addin 卡(M2D20, E10G30-T2, ...)对 DSM 型號限制."
|
||||
}
|
||||
},
|
||||
"apppatch": {
|
||||
"system": false,
|
||||
"description": {
|
||||
"en_US": "Fix Synology Photos unable to delete photos under non-genuine SN, close local_display to prevent generating a large number of BrowserMetrics files.",
|
||||
"ar_SA": "إصلاح Synology Photos غير قادر على حذف الصور تحت رقم SN غير الأصلي، إغلاق local_display لمنع إنشاء عدد كبير من ملفات BrowserMetrics.",
|
||||
"de_DE": "Beheben Sie, dass Synology Photos unter einer nicht originalen SN keine Fotos löschen kann, schließen Sie local_display, um zu verhindern, dass eine große Anzahl von BrowserMetrics-Dateien generiert wird.",
|
||||
"es_ES": "Arreglar Synology Photos que no puede eliminar fotos bajo un SN no genuino, cerrar local_display para evitar generar una gran cantidad de archivos BrowserMetrics.",
|
||||
"fr_FR": "Corrigez Synology Photos qui ne peut pas supprimer de photos sous un SN non authentique, fermez local_display pour éviter de générer un grand nombre de fichiers BrowserMetrics.",
|
||||
"ja_JP": "Synology Photos が非正規 SN の下で写真を削除できない問題を修正し、local_display を閉じて大量の BrowserMetrics ファイルが生成されるのを防ぎます。",
|
||||
"ko_KR": "비정품 SN에서 사진을 삭제할 수 없는 Synology Photos를 수정하고 local_display를 닫아 많은 BrowserMetrics 파일이 생성되는 것을 방지합니다.",
|
||||
"ru_RU": "Исправление Synology Photos, который не может удалить фотографии под ненастоящим SN, закройте local_display, чтобы предотвратить создание большого количества файлов BrowserMetrics.",
|
||||
"th_TH": "แก้ไข Synology Photos ไม่สามารถลบภาพถ่ายได้เมื่อใช้ SN ไม่จริง และปิด local_display เพื่อป้องกันการสร้างไฟล์ BrowserMetrics เกินจำนวนมาก",
|
||||
"tr_TR": "Synology Photos'ın non-orijinal SN altında fotoğrafı silme yeteneğini düzeltin, local_display'i kapatın ve çok fazla BrowserMetrics dosyası oluşturmaması için.",
|
||||
"uk_UA": "Виправлення Synology Photos, який не може видаляти фотографії під неоригінальним SN, закрийте local_display, щоб уникнути створення великої кількості файлів BrowserMetrics.",
|
||||
"vi_VN": "Sửa lỗi Synology Photos không thể xóa hình ảnh dưới SN không chính xác, đóng local_display để ngăn chặn việc tạo nhiều tệp BrowserMetrics.",
|
||||
"zh_CN": "修复 Synology Photos 在非正版SN下无法删除照片的问题、关闭 local_display 防止生成大量 BrowserMetrics文件。",
|
||||
"zh_HK": "修復 Synology Photos 在非正版SN下無法刪除照片的問題、關閉 local_display 防止生成大量 BrowserMetrics文件。",
|
||||
"zh_TW": "修復 Synology Photos 在非正版SN下無法刪除照片的問題、關閉 local_display 防止生成大量 BrowserMetrics文件。"
|
||||
}
|
||||
},
|
||||
"beep": {
|
||||
"system": false,
|
||||
"description": {
|
||||
"en_US": "Beep at startup and shutdown (requires motherboard with buzzer) Parameters: -m: Mario at startup and AxelF at shutdown",
|
||||
"ar_SA": "صد الصوت عند بدء التشغيل والإغلاق (يتطلب لوحة أم تحتوي على جرس) المعلمات: -m: ماريو عند بدء التشغيل و AxelF عند الإغلاق",
|
||||
"de_DE": "Beim Starten und Herunterfahren piepen (erfordert Mainboard mit Summer) Parameter: -m: Mario beim Starten und AxelF beim Herunterfahren",
|
||||
"es_ES": "Pitido al inicio y apagado (requiere placa base con zumbador) Parámetros: -m: Mario al inicio y AxelF al apagado",
|
||||
"fr_FR": "Bip au démarrage et à l'arrêt (nécessite une carte mère avec buzzer) Paramètres: -m: Mario au démarrage et AxelF à l'arrêt",
|
||||
"ja_JP": "起動時にブザーを鳴らす(ブザーを備えたマザーボードが必要) パラメータ: -m: 起動時にマリオ、シャットダウン時にAxelF",
|
||||
"ko_KR": "시작 및 종료시 소리 울리기(부저가 있는 메인보드 필요) 매개변수: -m: 시작시 Mario 및 종료시 AxelF",
|
||||
"ru_RU": "при запуске и выключении пищать (требуется материнская плата с зуммером) Параметры: -m: Mario при запуске и AxelF при выключении",
|
||||
"th_TH": "เสียงเบี๊ยวเมื่อเริ่มต้นและปิดเครื่อง (ต้องใช้เมนบอร์ดที่มีเสียงเบี๊ยว) พารามิเตอร์: -m: Mario เมื่อเริ่มต้นและ AxelF เมื่อปิดเครื่อง",
|
||||
"tr_TR": "Başlangıç ve kapanışta bip sesi çal (ana kartta hoparlör gerektirir) Parametreler: -m: Başlangıçta Mario ve kapanışta AxelF",
|
||||
"uk_UA": "при запуску та вимкненні пищати (потрібна материнська плата з динаміком) Параметри: -m: Mario при запуску та AxelF при вимкненні",
|
||||
"vi_VN": "Phát ra tiếng bíp khi khởi động và tắt máy (yêu cầu bo mạch chủ có loa) Tham số: -m: Mario khi khởi động và AxelF khi tắt máy",
|
||||
"zh_CN": "在启动和关机时发出哔声(需要主板有蜂鸣器) 参数: -m: 开机 Mario 和 关机 AxelF",
|
||||
"zh_HK": "在啟動和關機時發出哔聲(需要主機有蜂鳴器) 參數: -m: 開機 Mario 和 關機 AxelF",
|
||||
"zh_TW": "在啟動和關機時發出哔聲(需要主機有蜂鳴器) 參數: -m: 開機 Mario 和 關機 AxelF"
|
||||
}
|
||||
},
|
||||
"blockupdate": {
|
||||
"system": true,
|
||||
"description": {
|
||||
"en_US": "Block DSM automatic system update.",
|
||||
"ar_SA": "قفل التحديثات التلقائية منDSM.",
|
||||
"de_DE": "Bloquer les mises à jour automatiques du système DSM.",
|
||||
"es_ES": "Bloquear las actualizaciones automáticas del sistema DSM.",
|
||||
"fr_FR": "Bloquer les mises à jour automatiques du système DSM.",
|
||||
"ja_JP": "DSMの自動更新をブロックします。",
|
||||
"ko_KR": "DSM 자동 업데이트를 차단합니다.",
|
||||
"ru_RU": "Заблокировать автоматические обновления системы DSM.",
|
||||
"th_TH": "บล็อกอัตโนมัติอัปเดตจากDSM",
|
||||
"tr_TR": "DSM otomatik güncellemeleri engelle.",
|
||||
"uk_UA": "Блокувати автоматичні оновлення системи DSM.",
|
||||
"vi_VN": "Khóa tự động cập nhật hệ thống DSM.",
|
||||
"zh_CN": "阻止 DSM 自动系统更新。",
|
||||
"zh_HK": "阻止 DSM 自动系统更新。",
|
||||
"zh_TW": "阻止 DSM 自动系统更新。"
|
||||
}
|
||||
},
|
||||
"bootwait": {
|
||||
"system": true,
|
||||
"description": {
|
||||
"en_US": "This script ensures that the boot process waits for the boot disk (/dev/synoboot) to be available before starting other processes.",
|
||||
"ar_SA": "يضمن هذا البرنامج أن عملية التمهيد تنتظر حتى يصبح القرص المحمل (/dev/synoboot) متاحًا قبل بدء العمليات الأخرى.",
|
||||
"de_DE": "Diese Skript stellt sicher, dass der Startprozess auf das Boot-Laufwerk (/dev/synoboot) wartet, bevorandere Prozesse gestartet werden.",
|
||||
"es_ES": "Este programa garantiza que el proceso de arranque espere hasta que el disco cargado (/dev/synoboot) esté disponible antes de iniciar otros procesos.",
|
||||
"fr_FR": "Le script de démarrage assure que le processus de démarrage attend que le disque de démarrage (/dev/synoboot) soit disponible avant de commencer d'autres processus.",
|
||||
"ja_JP": "ブートディスク (/dev/synoboot) が利用可能になるまでブートプロセスが待機するようにします.",
|
||||
"ko_KR": "이 스크립트는 부팅 프로세스가 부팅 디스크 (/dev/synoboot)가 사용 가능할 때까지 기다리도록 합니다.",
|
||||
"ru_RU": "Этот скрипт гарантирует, что процесс загрузки будет ждать, пока загрузочный диск (/dev/synoboot) не станет доступным, прежде чем запустить другие процессы.",
|
||||
"th_TH": "โปรแกรมนี้จะช่วยให้แน่ใจว่ากระบวนการบูตจะรอจนกว่าดิสก์ที่โหลด (/dev/synoboot) จะพร้อมใช้งานก่อนที่จะเริ่มกระบวนการอื่น",
|
||||
"tr_TR": "Bu program, önyükleme işleminin diğer işlemleri başlatmadan önce yüklenen diskin (/dev/synoboot) kullanılabilir olmasını beklemesini sağlar.",
|
||||
"uk_UA": "Ця програма гарантує, що процес завантаження очікує, поки завантажений диск (/dev/synoboot) стане доступним, перш ніж запускати інші процеси.",
|
||||
"vi_VN": "Chương trình này đảm bảo rằng quá trình khởi động sẽ đợi cho đến khi đĩa được tải (/dev/synoboot) khả dụng trước khi bắt đầu các quá trình khác.",
|
||||
"zh_CN": "此脚本确保启动过程等待引导盘磁盘 (/dev/synoboot) 可用之后再启动其他进程.",
|
||||
"zh_HK": "此腳本確保啟動過程等待引导盤磁碟 (/dev/synoboot) 可用之後再啟動其他進程.",
|
||||
"zh_TW": "此腳本確保啟動過程等待引导盤磁碟 (/dev/synoboot) 可用之後再啟動其他進程."
|
||||
}
|
||||
},
|
||||
"console": {
|
||||
"system": false,
|
||||
"description": {
|
||||
"en_US": "Provides screen console (bash) functionality via framebuffer (fb) to allow debugging on the screen, only supported on models with a graphics driver.",
|
||||
"ar_SA": "يوفر وظيفة وحدة التحكم في الشاشة (bash) عبر framebuffer (fb) للسماح بالتصحيح على الشاشة، مدعوم فقط على النماذج التي تحتوي على برنامج تشغيل الرسومات.",
|
||||
"de_DE": "Bietet Bildschirmkonsolen (bash)-Funktionalität über Framebuffer (fb), um das Debuggen auf dem Bildschirm zu ermöglichen, wird nur auf Modellen mit einem Grafiktreiber unterstützt.",
|
||||
"es_ES": "Proporciona la funcionalidad de la consola (bash) de pantalla a través del framebuffer (fb) para permitir la depuración en la pantalla, solo se admite en los modelos con un controlador gráfico.",
|
||||
"fr_FR": "Fournit une fonctionnalité de console d'écran (bash) via framebuffer (fb) pour permettre le débogage sur l'écran, pris en charge uniquement sur les modèles avec un pilote graphique.",
|
||||
"ja_JP": "グラフィックスドライバを搭載したモデルでのみサポートされる、フレームバッファ (fb) を介した画面コンソール (bash) 機能を提供し、画面上でのデバッグを可能にします.",
|
||||
"ko_KR": "프레임버퍼(fb)를 통해 화면 콘솔(bash) 기능을 제공하여 화면에서 디버깅을 허용하며, 그래픽 드라이버가 있는 모델에서만 지원됩니다.",
|
||||
"ru_RU": "Предоставляет функциональность консоли экрана (bash) через framebuffer (fb) для разрешения отладки на экране, поддерживается только на моделях с графическим драйвером.",
|
||||
"th_TH": "ให้ความสามารถของหน้าจอคอนโซล (bash) ผ่าน framebuffer (fb) เพื่ออนุญาตให้ทำการแก้บั๊กบนหน้าจอ รองรับเฉพาะบนโมเดลที่มีไดรเวอร์กราฟิก",
|
||||
"tr_TR": "Ekran üzerinde hata ayıklamaya izin vermek için framebuffer (fb) aracılığıyla ekran konsolu (bash) işlevselliği sağlar, yalnızca grafik sürücüsü olan modellerde desteklenir.",
|
||||
"uk_UA": "Надає функціональність консолі екрану (bash) через буфер кадру (fb) для дозволу налагодження на екрані, підтримується лише на моделях з графічним драйвером.",
|
||||
"vi_VN": "Cung cấp chức năng màn hình (bash) qua framebuffer (fb) để cho phép kiểm tra trên màn hình, chỉ được hỗ trợ trên các mô hình có trình điều khiển hình ảnh.",
|
||||
"zh_CN": "通过帧缓冲区 (fb) 提供屏幕控制台 (bash) 功能, 以允许在屏幕上进行调试, 仅支持具有显卡驱动程序的型号.",
|
||||
"zh_HK": "透過幀緩衝區 (fb) 提供屏幕控制台 (bash) 功能, 以允許在屏幕上進行調試, 僅支持具有顯卡驅動程序的型號.",
|
||||
"zh_TW": "透過幀緩衝區 (fb) 提供屏幕控制台 (bash) 功能, 以允許在屏幕上進行調試, 僅支持具有顯卡驅動程序的型號."
|
||||
}
|
||||
},
|
||||
"cpuinfo": {
|
||||
"system": false,
|
||||
"description": {
|
||||
"en_US": "Display CPU/GPU/Temperature information in the control panel. (Option -s shows static information)",
|
||||
"ar_SA": "عرض معلومات وحدة المعالجة المركزية / وحدة معالجة الرسومات / درجة الحرارة في لوحة التحكم. (خيار -s يظهر معلومات ثابتة)",
|
||||
"de_DE": "Zeigt CPU/GPU/Temperaturinformationen im Bedienfeld an. (Option -s zeigt statische Informationen)",
|
||||
"es_ES": "Mostrar información de CPU/GPU/Temperatura en el panel de control. (L'option -s affiche des informations statiques))",
|
||||
"fr_FR": "Afficher les informations CPU/GPU/Température dans le panneau de configuration. (L'option -s affiche des informations statiques)))",
|
||||
"ja_JP": "コントロールパネルにCPU/GPU/温度情報を表示します。 (パラメータ -s は静的な情報を表示します)",
|
||||
"ko_KR": "제어판에 CPU/GPU/온도 정보를 표시합니다. (옵션 -s는 정적 정보를 표시합니다)",
|
||||
"ru_RU": "Показать информацию о процессоре/GPU/температуре в панели управления. (Опция -s показывает статическую информацию)",
|
||||
"th_TH": "แสดงข้อมูล CPU/GPU/อุณหภูมิในแผงควบคุม. (ตัวเลือก -s แสดงข้อมูลที่ไม่เปลี่ยนแปลง)",
|
||||
"tr_TR": "Kontrol panelinde CPU/GPU/Sıcaklık bilgilerini görüntüler. (Seçenek -s statik bilgileri gösterir)",
|
||||
"uk_UA": "Показати інформацію про процесор/GPU/температуру в панелі керування. (Опция -s показывает статическую информацию)",
|
||||
"vi_VN": "Hiển thị thông tin CPU/GPU/Nhiệt độ trong bảng điều khiển. (Tùy chọn -s hiển thị thông tin tĩnh)",
|
||||
"zh_CN": "只让控制面板显示正确的CPU/GPU/温度等信息. (参数 -s 显示静态信息)",
|
||||
"zh_HK": "只讓控制面板顯示正確的CPU/GPU/溫度等信息. (参数 -s 顯示靜態信息)",
|
||||
"zh_TW": "只讓控制面板顯示正確的CPU/GPU/温度等信息. (参数 -s 顯示靜態信息)"
|
||||
}
|
||||
},
|
||||
"dbgutils": {
|
||||
"system": false,
|
||||
"description": {
|
||||
"en_US": "Debug utilities, automatically capture all stage boot logs to <loader disk>/p1/logs/.",
|
||||
"ar_SA": "أدوات التصحيح، التقاط جميع سجلات تمهيد المرحلة تلقائيًا إلى <قرص التحميل>/p1/logs/.",
|
||||
"de_DE": "Debug-Dienstprogramme, erfassen Sie automatisch alle Stufenstartprotokolle auf <Loader-Disk>/p1/logs/.",
|
||||
"es_ES": "Utilidades de depuración, captura automáticamente todos los registros de arranque de etapa a <disco de carga>/p1/logs/.",
|
||||
"fr_FR": "Utilitaires de débogage, capture automatiquement tous les journaux de démarrage de la scène à <disque de chargement>/p1/logs/.",
|
||||
"ja_JP": "デバッグユーティリティ、すべてのステージブートログを <ローダーディスク>/p1/logs/ に自動的にキャプチャします.",
|
||||
"ko_KR": "디버그 유틸리티, 모든 스테이지 부팅 로그를 <로더 디스크>/p1/logs/에 자동으로 캡처합니다.",
|
||||
"ru_RU": "Утилиты отладки, автоматически захватывают все журналы загрузки этапа на <загрузочный диск>/p1/logs/.",
|
||||
"th_TH": "เครื่องมือการแก้บั๊ก, จับบันทึกการบูตของขั้นตอนทั้งหมดไปยัง <ดิสก์โหลด>/p1/logs/ โดยอัตโนมัติ",
|
||||
"tr_TR": "Hata ayıklama araçları, tüm aşama başlangıç günlüklerini <yükleme diski>/p1/logs/ dizinine otomatik olarak yakalar.",
|
||||
"uk_UA": "Утиліти відлагодження, автоматично захоплюють всі журнали завантаження етапу на <завантажувальний диск>/p1/logs/.",
|
||||
"vi_VN": "Công cụ gỡ lỗi, tự động chụp tất cả các bản ghi khởi động giai đoạn đến <ổ đĩa tải trọng>/p1/logs/.",
|
||||
"zh_CN": "调试工具, 自动捕获所有阶段启动日志到 <加载器磁盘>/p1/logs/.",
|
||||
"zh_HK": "調試工具, 自動捕獲所有階段啟動日誌到 <加載器磁盤>/p1/logs/.",
|
||||
"zh_TW": "調試工具, 自動捕獲所有階段啟動日誌到 <加載器磁盤>/p1/logs/."
|
||||
}
|
||||
},
|
||||
"disks": {
|
||||
"system": true,
|
||||
"description": {
|
||||
"en_US": "Config disks related setting.",
|
||||
"ar_SA": "قم بتكوين إعدادات القرص.",
|
||||
"de_DE": "Konfiguriere Einstellungen für Festplatten.",
|
||||
"es_ES": "Configurar la configuración relacionada con los discos.",
|
||||
"fr_FR": "Configurer les paramètres relatifs aux disques.",
|
||||
"ja_JP": "ディスク関連の設定を構成します.",
|
||||
"ko_KR": "디스크 관련 설정 구성.",
|
||||
"ru_RU": "Настройка параметров дисков.",
|
||||
"th_TH": "กำหนดค่าที่เกี่ยวข้องกับดิสก์",
|
||||
"tr_TR": "Disklerle ilgili ayarları yapılandırın.",
|
||||
"uk_UA": "Налаштування параметрів дисків.",
|
||||
"vi_VN": "Cấu hình các thiết lập liên quan đến đĩa.",
|
||||
"zh_CN": "配置与磁盘相关的设置.",
|
||||
"zh_HK": "配置與磁碟相關的設定.",
|
||||
"zh_TW": "配置與磁碟相關的設定."
|
||||
}
|
||||
},
|
||||
"eudev": {
|
||||
"system": true,
|
||||
"description": {
|
||||
"en_US": "eudev + kmod automatically loaded modules.",
|
||||
"ar_SA": "eudev + kmod الوحدات المحملة تلقائيًا.",
|
||||
"de_DE": "eudev + kmod automatisch geladene Module.",
|
||||
"es_ES": "eudev + kmod módulos cargados automáticamente.",
|
||||
"fr_FR": "eudev + kmod modules chargés automatiquement.",
|
||||
"ja_JP": "eudev + kmod 自動的にロードされるモジュール.",
|
||||
"ko_KR": "eudev + kmod 자동으로 로드된 모듈.",
|
||||
"ru_RU": "eudev + kmod автоматически загружаемые модули.",
|
||||
"th_TH": "eudev + kmod โมดูลที่โหลดโดยอัตโนมัติ",
|
||||
"tr_TR": "eudev + kmod otomatik olarak yüklenen modüller.",
|
||||
"uk_UA": "eudev + kmod автоматично завантажені модулі.",
|
||||
"vi_VN": "eudev + kmod môdules tải tự động.",
|
||||
"zh_CN": "eudev + kmod 自动加载模块.",
|
||||
"zh_HK": "eudev + kmod 自動加載模塊.",
|
||||
"zh_TW": "eudev + kmod 自動加載模塊."
|
||||
}
|
||||
},
|
||||
"expands": {
|
||||
"system": false,
|
||||
"description": {
|
||||
"en_US": "Expanded miscellaneous, updated usb.map, ca-certificates.crt, etc.",
|
||||
"ar_SA": "متنوعات موسعة، usb.map محدث، ca-certificates.crt، إلخ.",
|
||||
"de_DE": "Erweiterte Diverses, aktualisierte usb.map, ca-certificates.crt, etc.",
|
||||
"es_ES": "Misceláneos ampliados, usb.map actualizado, ca-certificates.crt, etc.",
|
||||
"fr_FR": "Diverses étendues, usb.map mise à jour, ca-certificates.crt, etc.",
|
||||
"ja_JP": "拡張その他、更新された usb.map、ca-certificates.crt など",
|
||||
"ko_KR": "기타 확장, 업데이트 된 usb.map, ca-certificates.crt 등",
|
||||
"ru_RU": "Расширенные разные, обновленная usb.map, ca-certificates.crt и т. Д.",
|
||||
"th_TH": "ขยายหลากหลาย, อัปเดต usb.map, ca-certificates.crt, เป็นต้น",
|
||||
"tr_TR": "Genişletilmiş çeşitli, güncellenmiş usb.map, ca-certificates.crt, vb.",
|
||||
"uk_UA": "Розширені різні, оновлена usb.map, ca-certificates.crt тощо.",
|
||||
"vi_VN": "Mở rộng các loại khác nhau, usb.map được cập nhật, ca-certificates.crt, v.v.",
|
||||
"zh_CN": "扩展杂项, 更新 usb.map, ca-certificates.crt 等.",
|
||||
"zh_HK": "擴展雜項, 更新 usb.map, ca-certificates.crt 等.",
|
||||
"zh_TW": "擴展雜項, 更新 usb.map, ca-certificates.crt 等."
|
||||
}
|
||||
},
|
||||
"hdddb": {
|
||||
"system": false,
|
||||
"description": {
|
||||
"en_US": "Author: 007revad. Add HDD/SSD drives to the DSM database to solve the problem of firmware version not recognized by the disk.",
|
||||
"ar_SA": "المؤلف: (007revad). قم بإضافة بيانات محرك الأقراص الصلبة/SSD إلى قاعدة بيانات DSM لحل مشكلة إصدار البرنامج الثابت لمحرك الأقراص الثابتة غير المعروف.",
|
||||
"de_DE": "Autor: 007revad. Fügen Sie HDD/SSD-Laufwerke zur DSM-Datenbank hinzu, um das Problem zu lösen, dass die Firmware-Version von der Festplatte nicht erkannt wird.",
|
||||
"es_ES": "Autor: 007revad. Agrega discos duros y SSD a la base de datos de DSM para solucionar el problema de que la versión del firmware no sea reconocida por el disco.",
|
||||
"fr_FR": "Auteur: 007revad. Ajoutez des disques durs et SSD à la base de données DSM pour résoudre le problème de reconnaissance de la version du firmware par le disque.",
|
||||
"ja_JP": "作者: 007revad. ディスクのファームウェアバージョンが認識されない問題を解決するために、HDD/SSDドライブをDSMデータベースに追加します.",
|
||||
"ko_KR": "저자: 007revad. 디스크의 펌웨어 버전이 인식되지 않는 문제를 해결하기 위해 HDD/SSD 드라이브를 DSM 데이터베이스에 추가합니다.",
|
||||
"ru_RU": "Автор: 007revad. Добавьте данные жесткого диска/SSD в базу данных DSM, чтобы решить проблему нераспознанной версии прошивки жесткого диска.",
|
||||
"th_TH": "ผู้เขียน: 007revad. เพิ่มฮาร์ดดิสก์และ SSD ลงในฐานข้อมูล DSM เพื่อแก้ปัญหาเวอร์ชันฟิวเวอร์ไม่ได้รับการรับรู้โดยดิสก์",
|
||||
"tr_TR": "Yazar: 007revad. Disk tarafından tanınmayan firmware sürümü sorununu çözmek için HDD/SSD sürücüleri DSM veritabanına ekleyin.",
|
||||
"uk_UA": "Автор: 007revad. Додайте дані диска HDD/SSD до бази даних DSM, щоб вирішити проблему нерозпізнаної версії мікропрограми жорсткого диска.",
|
||||
"vi_VN": "Tác giả: 007revad. Thêm ổ cứng và ổ SSD vào cơ sở dữ liệu DSM để giải quyết vấn đề không nhận diện được phiên bản firmware của ổ cứng.",
|
||||
"zh_CN": "作者: 007revad. 将HDD/SSD驱动器数据添加到DSM数据库中, 以解决硬盘固件版本无法识别的问题.",
|
||||
"zh_HK": "作者: 007revad. 將HDD/SSD驱动器數據添加到DSM數據庫中, 以解決硬碟固件版本無法識別的問題.",
|
||||
"zh_TW": "作者: 007revad. 將HDD/SSD驅動器數據添加到DSM數據庫中, 以解決硬碟固件版本無法識別的問題."
|
||||
}
|
||||
},
|
||||
"i915le10th": {
|
||||
"system": false,
|
||||
"description": {
|
||||
"en_US": "Automatically replace the device ID of i915.ko(apollolake, geminilake), only supporting less 10th. (Parameter VID:PID)",
|
||||
"ar_SA": "استبدل تلقائيًا معرف الجهاز لـ i915.ko (apollolake، geminilake)، والذي يدعم فقط أقل من 10. (معلمة VID:PID)",
|
||||
"de_DE": "Ersetzen Sie automatisch die Geräte-ID von i915.ko (apollolake, geminilake), die nur weniger als 10. unterstützt. (Parameter VID:PID)",
|
||||
"es_ES": "Reemplace automáticamente el ID de dispositivo de i915.ko (apollolake, geminilake), que solo admite menos de 10. (Parámetro VID:PID)",
|
||||
"fr_FR": "Remplacez automatiquement l'ID de périphérique de i915.ko (apollolake, geminilake), ne prenant en charge que moins de 10. (Paramètre VID:PID)",
|
||||
"ja_JP": "i915.ko (apollolake, geminilake) のデバイスIDを自動的に置き換え, 10未満のみをサポートします. (パラメータVID:PID) ",
|
||||
"ko_KR": "i915.ko (apollolake, geminilake) 의 장치 ID를 자동으로 교체하며, 10세 미만만 지원합니다. (파라미터 VID:PID)",
|
||||
"ru_RU": "Автоматическая замена идентификатора устройства i915.ko (apollolake, geminilake), поддерживающего только менее 10. (Параметр VID:PID)",
|
||||
"th_TH": "แทนที่ ID อุปกรณ์ของ i915.ko (apollolake, geminilake) โดยอัตโนมัติ รองรับเฉพาะต่ำกว่า 10 (พารามิเตอร์ VID:PID)",
|
||||
"tr_TR": "i915.ko (apollolake, geminilake) cihaz kimliğini otomatik olarak değiştirir, yalnızca 10. sürümü destekler. (Parametre VID:PID)",
|
||||
"uk_UA": "Автоматично замінює ідентифікатор пристрою i915.ko (apollolake, geminilake), підтримує лише менше 10. (Параметр VID:PID)",
|
||||
"vi_VN": "Tự động thay thế ID thiết bị của i915.ko (apollolake, geminilake), chỉ hỗ trợ ít hơn 10. (Tham số VID:PID)",
|
||||
"zh_CN": "自动替换 i915.ko (apollolake, geminilake) 的设备 ID, 仅支持 10 代以下. (参数VID:PID) ",
|
||||
"zh_HK": "自動替換 i915.ko (apollolake, geminilake) 的設備 ID, 僅支持 10 代以下. (參數VID:PID) ",
|
||||
"zh_TW": "自動替換 i915.ko (apollolake, geminilake) 的設備 ID, 僅支持 10 代以下. (參數VID:PID) "
|
||||
}
|
||||
},
|
||||
"localrss": {
|
||||
"system": true,
|
||||
"description": {
|
||||
"en_US": "Implant RSS into the bootloader so that it can be installed online.",
|
||||
"ar_SA": "زرع RSS في البرنامج الثابت ليمكن تثبيته عبر الإنترنت.",
|
||||
"de_DE": "RSS in den Bootloader einpflanzen, damit er online installiert werden kann.",
|
||||
"es_ES": "Implantar RSS en el cargador de arranque para que se pueda instalar en línea.",
|
||||
"fr_FR": "Implanter RSS dans le chargeur de démarrage pour qu'il puisse être installé en ligne.",
|
||||
"ja_JP": "RSS をブートローダーに埋め込んでオンラインでインストールできるようにします.",
|
||||
"ko_KR": "부트로더에 RSS를 심어 온라인으로 설치할 수 있습니다.",
|
||||
"ru_RU": "Внедрить RSS в загрузчик, чтобы его можно было установить онлайн.",
|
||||
"th_TH": "ฝัง RSS ในโปรแกรมเริ่มต้นเพื่อให้สามารถติดตั้งออนไลน์ได้",
|
||||
"tr_TR": "RSS'i önyükleyiciye yerleştirerek çevrimiçi olarak yükleyebilirsiniz.",
|
||||
"uk_UA": "Внести RSS в завантажувач, щоб його можна було встановити онлайн.",
|
||||
"vi_VN": "Cấy RSS vào trình khởi động để có thể cài đặt trực tuyến.",
|
||||
"zh_CN": "将 RSS 植入到引导加载程序中, 以便可以在线安装.",
|
||||
"zh_HK": "將 RSS 植入到引導加載程序中, 以便可以在線安裝.",
|
||||
"zh_TW": "將 RSS 植入到引導載入程式中, 以便可以在線安裝."
|
||||
}
|
||||
},
|
||||
"lsiutil": {
|
||||
"system": false,
|
||||
"description": {
|
||||
"en_US": "A tool for working with some LSI RAID controllers.",
|
||||
"ar_SA": "أداة للعمل مع بعض تحكمات RAID LSI.",
|
||||
"de_DE": "Ein Werkzeug zum Arbeiten mit einigen LSI RAID Controllern.",
|
||||
"es_ES": "Una herramienta para trabajar con algunos controladores RAID LSI.",
|
||||
"fr_FR": "Un outil pour travailler avec certains contrôleurs RAID LSI.",
|
||||
"ja_JP": "一部の LSI RAID コントローラーと一緒に作業するためのツールです.",
|
||||
"ko_KR": "LSI RAID 컨트롤러와 함께 작업하는 도구입니다.",
|
||||
"ru_RU": "Инструмент для работы с некоторыми контроллерами RAID LSI.",
|
||||
"th_TH": "เครื่องมือสำหรับทำงานกับบางคอนโทรลเลอร์ RAID LSI",
|
||||
"tr_TR": "Bazı LSI RAID denetleyicileriyle çalışmak için bir araç.",
|
||||
"uk_UA": "Інструмент для роботи з деякими контролерами RAID LSI.",
|
||||
"vi_VN": "Một công cụ để làm việc với một số bộ điều khiển RAID LSI.",
|
||||
"zh_CN": "用于处理某些 LSI RAID 控制器的工具.",
|
||||
"zh_HK": "用於處理某些 LSI RAID 控制器的工具.",
|
||||
"zh_TW": "用於處理某些 LSI RAID 控制器的工具."
|
||||
}
|
||||
},
|
||||
"maiyunda": {
|
||||
"system": false,
|
||||
"description": {
|
||||
"en_US": "Control Maiyunda M1S machine RESET button event, press and hold for 3s (release after hearing beeping) reset admin password to maiyunda.com and reset network, press and hold for 9s (release after hearing 3 beeps) reset system (all data will be erased).",
|
||||
"ar_SA": "التحكم في حدث زر إعادة تعيين آلة Maiyunda M1S، اضغط مع الاستمرار لمدة 3 ثوانٍ (افرج بعد سماع صفير) إعادة تعيين كلمة مرور المسؤول إلى maiyunda.com وإعادة تعيين الشبكة، اضغط مع الاستمرار لمدة 9 ثوانٍ (افرج بعد سماع 3 صفير) إعادة تعيين النظام (سيتم مسح جميع البيانات).",
|
||||
"de_DE": "Steuerung des RESET-Tastenereignisses der Maiyunda M1S-Maschine. Bitte ändern Sie den Inhalt der Aufgaben Net-Button-3s, Net-Button-9s, Copy-Button-3s und Copy-Button-9s im Zeitplan.",
|
||||
"es_ES": "Control del evento del botón RESET de la máquina Maiyunda M1S, mantenga presionado durante 3 segundos (suéltelo después de escuchar el pitido) restablezca la contraseña de administrador a maiyunda.com y restablezca la red, mantenga presionado durante 9 segundos (suéltelo después de escuchar 3 pitidos) restablezca el sistema (se borrarán todos los datos).",
|
||||
"fr_FR": "Contrôle de l'événement du bouton RESET de la machine Maiyunda M1S, maintenez enfoncé pendant 3 secondes (relâchez après avoir entendu le bip) réinitialisez le mot de passe administrateur à maiyunda.com et réinitialisez le réseau, maintenez enfoncé pendant 9 secondes (relâchez après avoir entendu 3 bips) réinitialisez le système (toutes les données seront effacées).",
|
||||
"ja_JP": "Maiyunda M1S マシンの RESET ボタン イベントを制御します。3 秒間押し続けて (ビープ音を聞いた後に放す) 管理者パスワードを maiyunda.com にリセットし、ネットワークをリセットします。9 秒間押し続けて (3 回のビープ音を聞いた後に放す) システムをリセットします (すべてのデータが消去されます)。",
|
||||
"ko_KR": "Maiyunda M1S 기계의 RESET 버튼 이벤트를 제어합니다. 3초 동안 누르고 (삐 소리를 들은 후 놓음) 관리자의 비밀번호를 maiyunda.com으로 재설정하고 네트워크를 재설정합니다. 9초 동안 누르고 (3번의 삐 소리를 들은 후 놓음) 시스템을 재설정합니다 (모든 데이터가 지워짐).",
|
||||
"ru_RU": "Управление событием кнопки RESET машины Maiyunda M1S, удерживайте 3 секунды (отпустите после звукового сигнала) сбросьте пароль администратора на maiyunda.com и сбросьте сеть, удерживайте 9 секунд (отпустите после 3 звуковых сигналов) сбросьте систему (все данные будут стерты).",
|
||||
"th_TH": "ควบคุมเหตุการณ์ปุ่ม RESET ของเครื่อง Maiyunda M1S กดค้างไว้ 3 วินาที (ปล่อยหลังจากได้ยินเสียงบี๊บ) รีเซ็ตพาสเวิร์ดผู้ดูแลระบบเป็น maiyunda.com และรีเซ็ตเครือข่าย กดค้างไว้ 9 วินาที (ปล่อยหลังจากได้ยินเสียงบี๊บ 3 ครั้ง) รีเซ็ตระบบ (ข้อมูลทั้งหมดจะถูกลบออก).",
|
||||
"tr_TR": "Maiyunda M1S makinesinin RESET düğmesi olayını kontrol edin, 3 saniye basılı tutun (bip sesi duyduktan sonra bırakın) admin şifresini maiyunda.com olarak sıfırlayın ve ağı sıfırlayın, 9 saniye basılı tutun (3 bip sesi duyduktan sonra bırakın) sistemi sıfırlayın (tüm veriler silinecektir).",
|
||||
"uk_UA": "Контроль події кнопки RESET машини Maiyunda M1S, натискайте та утримуйте 3 секунди (відпустіть після звуку) скинути пароль адміністратора на maiyunda.com і скинути мережу, натискайте та утримуйте 9 секунд (відпустіть після 3 звуків) скинути систему (всі дані будуть стерті).",
|
||||
"vi_VN": "Điều khiển sự kiện nút RESET của máy Maiyunda M1S, nhấn và giữ trong 3 giây (thả ra sau khi nghe tiếng bíp) đặt lại mật khẩu quản trị viên thành maiyunda.com và đặt lại mạng, nhấn và giữ trong 9 giây (thả ra sau khi nghe 3 tiếng bíp) đặt lại hệ thống (tất cả dữ liệu sẽ bị xóa).",
|
||||
"zh_CN": "用于控制 迈云达M1S 机器的 RESET 按钮事件, 按住 3s (听到哔哔哔后松手) 重置 admin 密码为 maiyunda.com 并重置网络, 按住 9s (听到 3次 哔哔哔后松手) 重置系统 (会清空全部数据).",
|
||||
"zh_HK": "用於控制 迈云达M1S 机器的 RESET 按钮事件, 按住 3s (听到哔哔哔后松手) 重置 admin 密码为 maiyunda.com 并重置网络, 按住 9s (听到 3次 哔哔哔后松手) 重置系统 (会清空全部数据).",
|
||||
"zh_TW": "用於控制 迈云达M1S 机器的 RESET 按钮事件, 按住 3s (听到哔哔哔后松手) 重置 admin 密码为 maiyunda.com 并重置网络, 按住 9s (听到 3次 哔哔哔后松手) 重置系统 (会清空全部数据)."
|
||||
}
|
||||
},
|
||||
"misc": {
|
||||
"system": true,
|
||||
"description": {
|
||||
"en_US": "Miscellaneous functions. (A collection of some necessary modifications.)",
|
||||
"ar_SA": "وظائف متنوعة. (مجموعة من بعض التعديلات الضرورية.)",
|
||||
"de_DE": "Verschiedene Funktionen. (Eine Sammlung einiger notwendiger Änderungen.)",
|
||||
"es_ES": "Funciones variadas. (Una colección de algunas modificaciones necesarias.)",
|
||||
"fr_FR": "Fonctions diverses. (Une collection de certaines modifications nécessaires.)",
|
||||
"ja_JP": "その他の機能. (いくつかの必要な変更の集まり.)",
|
||||
"ko_KR": "기타 기능. (일부 필요한 수정의 집합.)",
|
||||
"ru_RU": "Различные функции. (Набор некоторых необходимых изменений.)",
|
||||
"th_TH": "ฟังก์ชันเบ็ดเสร็จ. (ชุดของการปรับเปลี่ยนบางอย่างที่จำเป็น.)",
|
||||
"tr_TR": "Çeşitli iş levler. (Bazı gereksiz değişikliklerin bir koleksiyonu.)",
|
||||
"uk_UA": "Різноманітні функції. (Колекція деяких необхідних модифікацій.)",
|
||||
"vi_VN": "Các chức năng khác nhau. (Một bộ sửa đổi cần thiết.)",
|
||||
"zh_CN": "杂项功能. (一些必要的修改的集合.)",
|
||||
"zh_HK": "雜項功能. (一些必要的修改的集合.)",
|
||||
"zh_TW": "雜項功能. (一些必要的修改的集合.)"
|
||||
}
|
||||
},
|
||||
"monitor": {
|
||||
"system": false,
|
||||
"description": {
|
||||
"en_US": "Monitor Power Management (Only supports graphics card drivers).",
|
||||
"ar_SA": "إدارة الطاقة للمراقبة(يدعم فقط برامج تشغيل بطاقة الرسومات).",
|
||||
"de_DE": "Überwachung der Energieverwaltung (nur unterstützt Graphikkartendrivers).",
|
||||
"es_ES": "Monitoreo de la gestión de energía (solo admite controladores de tarjeta gráfica).",
|
||||
"fr_FR": "Surveillance de la gestion de l'alimentation (seulement les pilotes de carte graphique sont pris en charge).",
|
||||
"ja_JP": "電源管理の監視 (グラフィックスカードドライバーのみサポート)。",
|
||||
"ko_KR": "모니터 전원 관리 (그래픽 카드 드라이버만 지원)。",
|
||||
"ru_RU": "Мониторинг управления питанием (только поддерживает драйверы графических карт).",
|
||||
"th_TH": "การตรวจสอบการบริหารจัดการพลังงาน (แค่สนับสนุนไดรเวอร์การทำงานของการ์ดราฟิก).",
|
||||
"tr_TR": "Monitör Güç Yönetimi (grafik kart sürücüsü destekliyor).",
|
||||
"uk_UA": "Моніторинг управління живленням (тільки підтримує драйвери графічних карток).",
|
||||
"vi_VN": "Quản lý nguồn điện (chỉ hỗ trợ các driver của card đồ họa).",
|
||||
"zh_CN": "显示器电源管理 (仅支持显卡已驱动的环境)。",
|
||||
"zh_HK": "顯示器電源管理 (僅支持显卡已驅動的环境)。",
|
||||
"zh_TW": "顯示器電源管理 (僅支持显卡已驅動的环境)。"
|
||||
}
|
||||
},
|
||||
"mountloader": {
|
||||
"system": false,
|
||||
"description": {
|
||||
"en_US": "Mount boot disk and upgrade boot script under DSM system, for rr-manager application.",
|
||||
"ar_SA": "تثبيت قرص التمهيد وترقية البرنامج النصي للتمهيد تحت نظام DSM، لتطبيق rr-manager.",
|
||||
"de_DE": "Mounten Sie das Startlaufwerk und aktualisieren Sie das Startskript unter dem DSM-System für die rr-manager-Anwendung.",
|
||||
"es_ES": "Montar el disco de arranque y actualizar el script de arranque en el sistema DSM, para la aplicación rr-manager.",
|
||||
"fr_FR": "Monter le disque de démarrage et mettre à jour le script de démarrage sous le système DSM, pour l'application rr-manager.",
|
||||
"ja_JP": "DSM システムでブート ディスクをマウントし、rr-manager アプリケーション用のブート スクリプトをアップグレードします。",
|
||||
"ko_KR": "DSM 시스템에서 부팅 디스크를 마운트하고 rr-manager 응용 프로그램을 위한 부팅 스크립트를 업그레이드합니다.",
|
||||
"ru_RU": "Подключите загрузочный диск и обновите загрузочный скрипт в системе DSM для приложения rr-manager.",
|
||||
"th_TH": "ในระบบ DSM เมานต์ดิสก์บูตและอัปเกรดสคริปต์บูตสำหรับแอปพลิเคชัน rr-manager",
|
||||
"tr_TR": "DSM sisteminde başlangıç diskini bağlayın ve rr-manager uygulamasında başlangıç betiğini güncelleyin.",
|
||||
"uk_UA": "З'єднати стартовий диск та оновити стартовий скрипт в системі DSM для додатку rr-manager.",
|
||||
"vi_VN": "Đồng bộ hóa đĩa khởi động và cập nhật script khởi động trong hệ thống DSM, cho ứng dụng rr-manager.",
|
||||
"zh_CN": "在 DSM 系统下挂载引导磁盘和升级引导的脚本, 供 rr-manager 应用程序使用.",
|
||||
"zh_HK": "在 DSM 系統下掛載引導磁碟和升級引導的腳本, 供 rr-manager 應用程序使用.",
|
||||
"zh_TW": "在 DSM 系統下掛載引導磁碟和升級引導的腳本, 供 rr-manager 應用程序使用."
|
||||
}
|
||||
},
|
||||
"netfix": {
|
||||
"system": true,
|
||||
"description": {
|
||||
"en_US": "Fix network interface mac.",
|
||||
"ar_SA": "إصلاح عنوان MAC لواجهة الشبكة.",
|
||||
"de_DE": "Netzwerkschnittstellen-MAC beheben.",
|
||||
"es_ES": "Corregir la dirección MAC de la interfaz de red.",
|
||||
"fr_FR": "Corriger l'adresse MAC de l'interface réseau.",
|
||||
"ja_JP": "ネットワークインターフェースのMACアドレスを修正します.",
|
||||
"ko_KR": "네트워크 인터페이스의 MAC 주소를 수정합니다.",
|
||||
"ru_RU": "Исправить MAC-адрес сетевой интерфейса.",
|
||||
"th_TH": "แก้ไขที่อยู่ MAC ของช่องทางเครือข่าย.",
|
||||
"tr_TR": "Netzwerkschnittstellen-MAC beheben.",
|
||||
"uk_UA": "Виправте MAC-адресу сетевого інтерфейсу.",
|
||||
"vi_VN": "Sửa địa chỉ MAC của giao diện mạng.",
|
||||
"zh_CN": "修复网络接口mac地址.",
|
||||
"zh_HK": "修复网络接口mac地址.",
|
||||
"zh_TW": "修复网络接口mac地址."
|
||||
}
|
||||
},
|
||||
"notify": {
|
||||
"system": true,
|
||||
"description": {
|
||||
"en_US": "Add rr notify.",
|
||||
"ar_SA": "إضافة rr notify.",
|
||||
"de_DE": "Füge rr notify hinzu.",
|
||||
"es_ES": "Añadir rr notify.",
|
||||
"fr_FR": "Ajouter rr notify.",
|
||||
"ja_JP": "rr notify を追加します.",
|
||||
"ko_KR": "rr notify 를 추가합니다.",
|
||||
"ru_RU": "Добавить rr notify.",
|
||||
"th_TH": "เพิ่ม rr notify",
|
||||
"tr_TR": "rr notify ekleyin.",
|
||||
"uk_UA": "Додати rr notify.",
|
||||
"vi_VN": "Thêm rr notify.",
|
||||
"zh_CN": "添加 rr notify.",
|
||||
"zh_HK": "添加 rr notify.",
|
||||
"zh_TW": "新增 rr notify."
|
||||
}
|
||||
},
|
||||
"nvmecache": {
|
||||
"system": false,
|
||||
"description": {
|
||||
"en_US": "Author: PeterSuh-Q3. Enable NVME disk support for DS918+, DS1019+, DS1621xs+, RS1619xs+.",
|
||||
"ar_SA": "المؤلف: PeterSuh-Q3. تمكين دعم القرص NVME لـ DS918+، DS1019+، DS1621xs+، RS1619xs+.",
|
||||
"de_DE": "Autor: PeterSuh-Q3. Aktivieren Sie die Unterstützung für NVME-Laufwerke für DS918+, DS1019+, DS1621xs+, RS1619xs+.",
|
||||
"es_ES": "Autor: PeterSuh-Q3. Habilita el soporte de discos NVME para DS918+, DS1019+, DS1621xs+, RS1619xs+.",
|
||||
"fr_FR": "Auteur: PeterSuh-Q3. Activer la prise en charge des disques NVME pour DS918+, DS1019+, DS1621xs+, RS1619xs+.",
|
||||
"ja_JP": "作者: PeterSuh-Q3. DS918+、DS1019+、DS1621xs+、RS1619xs+ で NVME ディスクのサポートを有効にします.",
|
||||
"ko_KR": "작성자: PeterSuh-Q3. DS918+, DS1019+, DS1621xs+, RS1619xs+에서 NVME 디스크 지원 활성화.",
|
||||
"ru_RU": "Автор: PeterSuh-Q3. Включите поддержку дисков NVME для DS918+, DS1019+, DS1621xs+, RS1619xs+.",
|
||||
"th_TH": "ผู้เขียน: PeterSuh-Q3. เปิดใช้งานการสนับสนุนดิสก์ NVME สำหรับ DS918+, DS1019+, DS1621xs+, RS1619xs+",
|
||||
"tr_TR": "Yazar: PeterSuh-Q3. DS918+, DS1019+, DS1621xs+, RS1619xs+ için NVME disk desteğini etkinleştirin.",
|
||||
"uk_UA": "Автор: PeterSuh-Q3. Увімкніть підтримку дисків NVME для DS918+, DS1019+, DS1621xs+, RS1619xs+.",
|
||||
"vi_VN": "Tác giả: PeterSuh-Q3. Bật hỗ trợ đĩa NVME cho DS918+, DS1019+, DS1621xs+, RS1619xs+.",
|
||||
"zh_CN": "作者: PeterSuh-Q3. 启用 DS918+、DS1019+、DS1621xs+、RS1619xs+ 的 NVME 硬盘支持.",
|
||||
"zh_HK": "作者: PeterSuh-Q3. 啟用 DS918+、DS1019+、DS1621xs+、RS1619xs+ 的 NVME 硬碟支援.",
|
||||
"zh_TW": "作者: PeterSuh-Q3. 啟用 DS918+、DS1019+、DS1621xs+、RS1619xs+ 的 NVME 硬碟支援."
|
||||
}
|
||||
},
|
||||
"nvmesystem": {
|
||||
"system": false,
|
||||
"description": {
|
||||
"en_US": "Author: jim3ma. Install system on NVME disk (can't contain any SATA disk during installation, only supports DT mdoels).",
|
||||
"ar_SA": "المؤلف: jim3ma. تثبيت نظام على القرص NVME (لا يمكن أن يحتوي على أي قرص SATA أثناء التثبيت ، يدعم فقط DT).",
|
||||
"de_DE": "Autor: jim3ma. Installieren Sie das System auf einem NVME-Disk (kann keine SATA-Disk während der Installation enthalten, unterstützt nur DT-Modell).",
|
||||
"es_ES": "Autor: jim3ma. Instalar el sistema en un disco NVME (no puede contener ninguna unidad SATA durante la instalación, solo admite modelos DT).",
|
||||
"fr_FR": "Auteur: jim3ma. Installez le système sur un disque NVME (ne peut contenir aucune unité SATA pendant l'installation, ne prend que les modèles DT).",
|
||||
"ja_JP": "著者: jim3ma. NVME ディスクにシステムをインストール (インストール中に SATA ディスクを含めることはできません、DT モデルのみをサポートします).",
|
||||
"ko_KR": "저자: jim3ma. NVME 디스크에 시스템을 설치 (설치 중에 SATA 디스크를 포함할 수 없으며, DT 모델만 지원합니다).",
|
||||
"ru_RU": "Автор: jim3ma. Установить систему на диск NVME (не может содержать SATA-диск во время установки, поддерживает только модели DT).",
|
||||
"th_TH": "ผู้เขียน: jim3ma. ติดตั้งระบบบนแผง NVME (ไม่สามารถมีหน่วย SATA ในระหว่างการติดตั้งได้ และเฉพาะโมเดล DT เท่านั้น).",
|
||||
"tr_TR": "Yazar: jim3ma. NVME disk üzerine sistem yükleyin (kurulum sırasında herhangi bir SATA disk içeremez, yalnızca DT modellerini destekler).",
|
||||
"uk_UA": "Автор: jim3ma. Установить систему на диск NVME (не может содержать SATA-диск во время установки, поддерживает только модели DT).",
|
||||
"vi_VN": "Người tạo: jim3ma. Cài đặt hệ thống trên NVME (không thể chứa đĩa SATA trong quá trình cài đặt, chỉ hỗ trợ mô hình DT).",
|
||||
"zh_CN": "作者: jim3ma. 在 NVME 盘上安装系统 (在安装过程中不能包含 SATA 盘,仅支持 DT 型号).",
|
||||
"zh_HK": "作者: jim3ma. 在 NVME 盤上安裝系統 (在安裝過程中不能包含 SATA 盤,僅支持 DT 模型).",
|
||||
"zh_TW": "作者: jim3ma. 在 NVME 盤上安裝系統 (在安裝過程中不能包含 SATA 盤,僅支持 DT 模型)."
|
||||
}
|
||||
},
|
||||
"nvmevolume": {
|
||||
"system": false,
|
||||
"description": {
|
||||
"en_US": "Author: 007revad & PeterSuh-Q3. Allow creation of storage pools and volumes from Storage Manager through NVME disks.",
|
||||
"ar_SA": "المؤلف: (007revad) وPeterSuh-Q3. تمكين إنشاء مجموعات تخزين ومساحات تخزين من مネージャ التخزين من خلال قرص NVME.",
|
||||
"de_DE": "Autor: 007revad & PeterSuh-Q3. Erlaubt die Erstellung von Speicherpools und Volumen über den Speicher-Manager über NVME-Disks.",
|
||||
"es_ES": "Autor: 007revad & PeterSuh-Q3. Permite la creación de grupos de almacenamiento y volúmenes a través del Administrador de almacenamiento a través de discos NVME.",
|
||||
"fr_FR": "Auteur: 007revad & PeterSuh-Q3. Permet la création de pools de stockage et de volumes à partir du gestionnaire de stockage à travers les disques NVME.",
|
||||
"ja_JP": "作者: 007revad & PeterSuh-Q3. Storage Manager から NVME ディスクからストレージ プールとボリュームを作成できるようにします.",
|
||||
"ko_KR": "작성자: 007revad & PeterSuh-Q3. Storage Manager의 NVME 디스크에서 스토리지 풀 및 볼륨을 생성할 수 있습니다.",
|
||||
"ru_RU": "Автор: 007revad & PeterSuh-Q3. Позволяет создавать пулы носителей и тома из дисков NVME из Storage Manager.",
|
||||
"th_TH": "ผู้เขียน: 007revad & PeterSuh-Q3 สร้างกลุ่มจัดเก็บและพื้นที่จัดเก็บจาก Storage Manager ผ่านดิสก์ NVME",
|
||||
"tr_TR": "Yazar: 007revad ve PeterSuh-Q3. Storage Manager'dan NVME disklerden depolama havuzları ve birimleri oluşturulmasına olanak tanır.",
|
||||
"uk_UA": "Автор: 007revad & PeterSuh-Q3. Дозволяє створювати пули зберігання та томи з дисків NVME за допомогою Storage Manager.",
|
||||
"vi_VN": "tác giả: 007revad & PeterSuh-Q3. Cho phép tạo khối lưu trữ và khối từ Quản lý lưu trữ thông qua đĩa NVME.",
|
||||
"zh_CN": "作者: 007revad & PeterSuh-Q3. 允许从存储管理器中通过 NVME 磁盘创建存储池和卷.",
|
||||
"zh_HK": "作者: 007revad & PeterSuh-Q3. 允許從儲存管理器中透過 NVME 磁碟建立儲存池和磁碟區.",
|
||||
"zh_TW": "作者: 007revad & PeterSuh-Q3. 允許從儲存管理器中透過 NVME 磁碟建立儲存池和磁碟區."
|
||||
}
|
||||
},
|
||||
"powersched": {
|
||||
"system": false,
|
||||
"description": {
|
||||
"en_US": "A program to configure the RTC according to the DSM power plan, so that the RTC (scheduled power on/off) can work properly.",
|
||||
"ar_SA": "برنامج لتكوين RTC وفقًا لخطة الطاقة DSM، بحيث يمكن لـ RTC (تشغيل/إيقاف الطاقة المجدول) العمل بشكل صحيح.",
|
||||
"de_DE": "Ein Programm zum Konfigurieren des RTC gemäß dem DSM-Energieplan, damit der RTC (geplantes Ein-/Ausschalten) ordnungsgemäß funktionieren kann.",
|
||||
"es_ES": "Un programa para configurar el RTC de acuerdo con el plan de energía de DSM, de modo que el RTC (programado encendido/apagado) pueda funcionar correctamente.",
|
||||
"fr_FR": "Un programme pour configurer le RTC selon le plan d'alimentation DSM, de sorte que le RTC (mise sous tension/arrêt programmée) puisse fonctionner correctement.",
|
||||
"ja_JP": "DSM 電源計画に従って RTC を構成するプログラムです. これにより RTC (予約電源オン/オフ) が正常に動作します.",
|
||||
"ko_KR": "DSM 전원 계획에 따라 RTC를 구성하여 RTC(예약 전원/전원 끄기)이 정상적으로 작동하도록합니다.",
|
||||
"ru_RU": "Программа для настройки RTC в соответствии с планом питания DSM, чтобы RTC (запланированное включение/выключение) могло работать правильно.",
|
||||
"th_TH": "โปรแกรมสำหรับกำหนดค่า RTC ตามแผนไฟ DSM โดย RTC (เปิด/ปิดไฟตามกำหนดเวลา) สามารถทำงานได้อย่างถูกต้อง",
|
||||
"tr_TR": "DSM güç planına göre RTC'yi yapılandırmak için bir program, böylece RTC (zamanlanmış güç açma/kapama) düzgün çalışabilir.",
|
||||
"uk_UA": "Програма для налаштування RTC відповідно до плану живлення DSM, щоб RTC (заплановане ввімкнення/вимкнення) працювало належним чином.",
|
||||
"vi_VN": "Chương trình để cấu hình RTC theo kế hoạch nguồn DSM, để RTC (bật/tắt theo lịch trình) có thể hoạt động đúng cách.",
|
||||
"zh_CN": "根据 DSM 电源计划配置 RTC 的程序, 使 RTC(定时开关机) 可以正常工作.",
|
||||
"zh_HK": "根據 DSM 電源計劃配置 RTC 的程式, 使 RTC(定時開關機) 可以正常工作.",
|
||||
"zh_TW": "根據 DSM 電源計劃配置 RTC 的程式, 使 RTC(定時開關機) 可以正常工作."
|
||||
}
|
||||
},
|
||||
"reboottoloader": {
|
||||
"system": false,
|
||||
"description": {
|
||||
"en_US": "Add a script to restart to RR in the DSM scheduled task, making it easy to access RR with not have a screen and keyboard.",
|
||||
"ar_SA": "أضف سكريبت لإعادة التشغيل إلى RR في المهمة المجدولة DSM، مما يجعل من السهل الوصول إلى RR بدون وجود شاشة ولوحة مفاتيح.",
|
||||
"de_DE": "Fügt einen Skript zum Neustart zu RR in der DSM geplanten Aufgabe, so dass es einfach, RR mit nicht haben einen Bildschirm und Tastatur zugreifen.",
|
||||
"es_ES": "Agregue un script para reiniciar a RR en la tarea programada de DSM, lo que facilita el acceso a RR sin tener una pantalla y un teclado.",
|
||||
"fr_FR": "Ajoutez un script pour redémarrer à RR dans la tâche planifiée DSM, ce qui rend facile d'accéder à RR avec ne pas avoir un écran et un clavier.",
|
||||
"ja_JP": "DSM のスケジュールされたタスクで RR に再起動するスクリプトを追加し、画面とキーボードがない RR に簡単にアクセスできるようにします.",
|
||||
"ko_KR": "DSM 예약 된 작업에서 RR로 재시작하는 스크립트를 추가하여 화면과 키보드가없는 RR에 쉽게 액세스 할 수 있습니다.",
|
||||
"ru_RU": "Добавьте сценарий для перезапуска в RR в запланированной задаче DSM, что облегчает доступ к RR без наличия экрана и клавиатуры.",
|
||||
"th_TH": "เพิ่มสคริปต์เพื่อรีสตาร์ทไปยัง RR ในงานที่ตั้งเวลา DSM ทำให้สามารถเข้าถึง RR ได้อย่างง่ายโดยไม่มีหน้าจอและคีย์บอร์ด",
|
||||
"tr_TR": "DSM planlanmış görevinde RR'ye yeniden başlatmak için bir betik ekleyerek, ekrana ve klavyeye sahip olmadan RR'ye erişmeyi kolaylaştırır.",
|
||||
"uk_UA": "Додайте сценарій для перезапуску в RR в запланованому завданні DSM, що полегшує доступ до RR без наявності екрана та клавіатури.",
|
||||
"vi_VN": "Thêm một tập lệnh để khởi động lại RR trong nhiệm vụ được lên lịch DSM, làm cho nó dễ dàng truy cập RR với không có màn hình và bàn phím.",
|
||||
"zh_CN": "在 DSM 计划任务中添加一个脚本以重新启动到 RR, 这使得很容易访问 RR 而不需要屏幕和键盘.",
|
||||
"zh_HK": "在 DSM 計劃任務中添加一個腳本以重新啟動到 RR, 這使得很容易訪問 RR 而不需要屏幕和鍵盤.",
|
||||
"zh_TW": "在 DSM 計劃任務中添加一個腳本以重新啟動到 RR, 這使得很容易訪問 RR 而不需要屏幕和鍵盤."
|
||||
}
|
||||
},
|
||||
"redpill": {
|
||||
"system": true,
|
||||
"description": {
|
||||
"en_US": "Delay redpill.",
|
||||
"ar_SA": "تأخير redpill.",
|
||||
"de_DE": "Verzögere redpill.",
|
||||
"es_ES": "Retrasar redpill.",
|
||||
"fr_FR": "Retarder redpill.",
|
||||
"ja_JP": "ディレイredpill.",
|
||||
"ko_KR": "지연 redpill.",
|
||||
"ru_RU": "Задержка redpill.",
|
||||
"th_TH": "เลื่อน redpill.",
|
||||
"tr_TR": "Redpill'i geciktir.",
|
||||
"uk_UA": "Затримка redpill.",
|
||||
"vi_VN": "Trì hoãn redpill.",
|
||||
"zh_CN": "延迟 redpill.",
|
||||
"zh_HK": "延遲 redpill.",
|
||||
"zh_TW": "延遲 redpill."
|
||||
}
|
||||
},
|
||||
"remotefs": {
|
||||
"system": false,
|
||||
"description": {
|
||||
"en_US": "Author: jinlife. This patch will allow remote NFS/CIFS shared folder be used in VideoStation, AudioStation and Photos etc.",
|
||||
"ar_SA": "المؤلف: jinlife. سيسمح هذا التصحيح باستخدام مجلد مشترك بروتوكول NFS/CIFS عن بُعد في VideoStation و AudioStation و Photos وما إلى ذلك.",
|
||||
"de_DE": "Autor: jinlife. Dieser Patch ermöglicht es, dass ein entfernter NFS/CIFS-Freigabeordner in VideoStation, AudioStation und Photos usw. verwendet wird.",
|
||||
"es_ES": "Autor: jinlife. Este parche permitirá que la carpeta compartida remota NFS/CIFS se utilice en VideoStation, AudioStation y Photos, etc.",
|
||||
"fr_FR": "Auteur: jinlife. Ce correctif permettra à un dossier partagé NFS/CIFS distant d'être utilisé dans VideoStation, AudioStation et Photos, etc.",
|
||||
"ja_JP": "作者: jinlife. このパッチにより、リモート NFS/CIFS 共有フォルダを VideoStation、AudioStation、Photos などで使用できます.",
|
||||
"ko_KR": "작성자: jinlife. 이 패치를 사용하면 VideoStation, AudioStation 및 사진 등에서 원격 NFS/CIFS 공유 폴더를 사용할 수 있습니다.",
|
||||
"ru_RU": "Автор: jinlife. Этот патч позволит использовать удаленную общую папку NFS/CIFS в VideoStation, AudioStation и Photos и т. д.",
|
||||
"th_TH": "ผู้เขียน: jinlife. แพตช์นี้จะทำให้โฟลเดอร์ที่แชร์ระยะไกลแบบ NFS/CIFS ใช้ได้ใน VideoStation, AudioStation และ Photos เป็นต้น",
|
||||
"tr_TR": "Yazar: jinlife. Bu yama, VideoStation, AudioStation ve Fotoğraflar vb. gibi yerlerde uzak NFS/CIFS paylaşılan klasörün kullanılmasına izin verecektir.",
|
||||
"uk_UA": "Автор: jinlife. Цей патч дозволить використовувати віддалену спільну папку NFS/CIFS в VideoStation, AudioStation та Photos тощо.",
|
||||
"vi_VN": "Tác giả: jinlife. Bản vá này sẽ cho phép thư mục chia sẻ NFS/CIFS từ xa được sử dụng trong VideoStation, AudioStation và Photos v.v..",
|
||||
"zh_CN": "作者: jinlife. 此补丁将允许在 VideoStation、AudioStation 和 Photos 等应用中使用远程 NFS/CIFS 共享文件夹.",
|
||||
"zh_HK": "作者: jinlife. 此補丁將允許在 VideoStation、AudioStation 和 Photos 等應用中使用遠程 NFS/CIFS 共享文件夾.",
|
||||
"zh_TW": "作者: jinlife. 此補丁將允許在 VideoStation、AudioStation 和 Photos 等應用中使用遠程 NFS/CIFS 共享文件夾."
|
||||
}
|
||||
},
|
||||
"revert": {
|
||||
"system": true,
|
||||
"description": {
|
||||
"en_US": "Revert addons modifications.",
|
||||
"ar_SA": "تراجع عن تعديلات الإضافات.",
|
||||
"de_DE": "Addons-Modifikationen rückgängig machen.",
|
||||
"es_ES": "Deshacer las modificaciones de los addons.",
|
||||
"fr_FR": "Annuler les modifications des addons.",
|
||||
"ja_JP": "アドオンの変更を元に戻します.",
|
||||
"ko_KR": "애드온 수정 사항을 되돌립니다.",
|
||||
"ru_RU": "Отменить изменения аддонов.",
|
||||
"th_TH": "ย้อนกลับการปรับแต่งของส่วนเสริม",
|
||||
"tr_TR": "Eklentilerin değişikliklerini geri alın.",
|
||||
"uk_UA": "Скасувати зміни додатків.",
|
||||
"vi_VN": "Hoàn tác các thay đổi của các tiện ích.",
|
||||
"zh_CN": "撤销插件修改.",
|
||||
"zh_HK": "還原插件修改.",
|
||||
"zh_TW": "還原插件修改."
|
||||
}
|
||||
},
|
||||
"sensors": {
|
||||
"system": false,
|
||||
"description": {
|
||||
"en_US": "This script installs the sensors and fancontrol tools for CPU monitoring and fan control, which can be adjusted through the Fancontrol in the scheduled task.",
|
||||
"ar_SA": "هذا البرنامج النصي يقوم بتثبيت أدوات sensors و fancontrol لمراقبة وحدة المعالجة المركزية والتحكم في المروحة، والتي يمكن ضبطها من خلال Fancontrol في المهمة المجدولة.",
|
||||
"de_DE": "Dieses Skript installiert die Werkzeuge sensors und fancontrol zur CPU-Überwachung und Lüftersteuerung, die über Fancontrol in der geplanten Aufgabe angepasst werden können.",
|
||||
"es_ES": "Este script instala las herramientas sensors y fancontrol para la monitorización de la CPU y el control del ventilador, que se pueden ajustar mediante Fancontrol en la tarea programada.",
|
||||
"fr_FR": "Ce script installe les outils sensors et fancontrol pour la surveillance du processeur et le contrôle du ventilateur, qui peuvent être ajustés via Fancontrol dans la tâche planifiée.",
|
||||
"ja_JP": "このスクリプトは、CPU監視とファン制御のためのsensorsおよびfancontrolツールをインストールします。これは、スケジュールされたタスクのFancontrolを介して調整できます。",
|
||||
"ko_KR": "이 스크립트는 CPU 모니터링 및 팬 제어를 위한 sensors 및 fancontrol 도구를 설치합니다. 이는 예약된 작업의 Fancontrol을 통해 조정할 수 있습니다.",
|
||||
"ru_RU": "Этот скрипт устанавливает инструменты sensors и fancontrol для мониторинга ЦП и управления вентилятором, которые можно настроить через Fancontrol в запланированной задаче.",
|
||||
"th_TH": "สคริปต์นี้ติดตั้งเครื่องมือ sensors และ fancontrol สำหรับการตรวจสอบ CPU และการควบคุมพัดลมซึ่งสามารถปรับได้ผ่าน Fancontrol ในงานที่กำหนดเวลา",
|
||||
"tr_TR": "Bu betik, CPU izleme ve fan kontrolü için sensors ve fancontrol araçlarını yük합니다. Bu, planlı görevdeki Fancontrol을 통해 조정할 수 있습니다.",
|
||||
"uk_UA": "Цей скрипт встановлює інструменти sensors і fancontrol для моніторингу ЦП і керування вентилятором, які можна налаштувати через Fancontrol у запланованій задачі.",
|
||||
"vi_VN": "Đoạn mã này cài đặt các công cụ sensors và fancontrol để giám sát CPU và điều khiển quạt, có thể điều chỉnh thông qua Fancontrol trong tác vụ đã lên lịch.",
|
||||
"zh_CN": "此脚本安装 sensors 和 fancontrol 工具, 用于监视 CPU 和风扇控制, 可通过计划任务中 Fancontrol 调整风扇具体参数.",
|
||||
"zh_HK": "此腳本安裝 sensors 和 fancontrol 套件, 用於監視 CPU 和风扇控制, 可通過計劃任務中 Fancontrol 調整風扇具體參數.",
|
||||
"zh_TW": "此腳本安裝 sensors 和 fancontrol 套件, 用於監視 CPU 和风扇控制, 可通過計劃任務中 Fancontrol 調整風扇具體參數."
|
||||
}
|
||||
},
|
||||
"setrootpw": {
|
||||
"system": false,
|
||||
"description": {
|
||||
"en_US": "Set root password and enable ssh/sftp. Please modify PW='' to the desired password in DSM Task Scheduler and run the task.",
|
||||
"ar_SA": "قم بتعيين كلمة مرور root وتمكين ssh/sftp. يرجى تعديل PW='' إلى كلمة المرور المطلوبة في جدول المهام DSM وتشغيل المهمة.",
|
||||
"de_DE": "Legen Sie das Root-Passwort fest und aktivieren Sie ssh/sftp. Bitte ändern Sie PW='' in der DSM-Aufgabenplanung in das gewünschte Passwort und führen Sie die Aufgabe aus.",
|
||||
"es_ES": "Establece la contraseña de root y habilita ssh/sftp. Por favor, modifique PW='' a la contraseña deseada en el Programador de Tareas de DSM y ejecute la tarea.",
|
||||
"fr_FR": "Définissez le mot de passe root et activez ssh/sftp. Veuillez modifier PW='' en le mot de passe souhaité dans le planificateur de tâches DSM et exécutez la tâche.",
|
||||
"ja_JP": "ルートパスワードを設定し、ssh/sftpを有効にします. DSM タスクスケジューラで PW='' を希望のパスワードに変更してタスクを実行してください.",
|
||||
"ko_KR": "루트 암호를 설정하고 ssh/sftp를 활성화합니다. DSM 작업 스케줄러에서 PW=''를 원하는 암호로 수정하고 작업을 실행하십시오.",
|
||||
"ru_RU": "Установите пароль root и включите ssh/sftp. Пожалуйста, измените PW='' на желаемый пароль в планировщике задач DSM и запустите задачу.",
|
||||
"th_TH": "ตั้งรหัสผ่าน root และเปิดใช้งาน ssh/sftp โปรดแก้ไข PW='' เป็นรหัสผ่านที่ต้องการในตัวจัดการงาน DSM และเริ่มการทำงาน",
|
||||
"tr_TR": "Kök parolasını ayarlayın ve ssh/sftp'yi etkinleştirin. Lütfen DSM Görev Zamanlayıcısında PW='''yi istenen parola olarak değiştirin ve görevi çalıştırın.",
|
||||
"uk_UA": "Встановіть пароль root та увімкніть ssh/sftp. Будь ласка, змініть PW='' на бажаний пароль в планувальнику завдань DSM та запустіть завдання.",
|
||||
"vi_VN": "Đặt mật khẩu root và kích hoạt ssh/sftp. Vui lòng sửa đổi PW='' thành mật khẩu mong muốn trong Lịch trình nhiệm vụ DSM và chạy nhiệm vụ.",
|
||||
"zh_CN": "设置 root 密码并启用 ssh/sftp. 请在 DSM 计划任务中将 PW='' 修改为所需的密码并运行该任务.",
|
||||
"zh_HK": "設置 root 密碼並啟用 ssh/sftp. 請在 DSM 計劃任務中將 PW='' 修改為所需的密碼並運行該任務.",
|
||||
"zh_TW": "設置 root 密碼並啟用 ssh/sftp. 請在 DSM 計劃任務中將 PW='' 修改為所需的密碼並執行該任務."
|
||||
}
|
||||
},
|
||||
"smartctl": {
|
||||
"system": false,
|
||||
"description": {
|
||||
"en_US": "Author: Phachd. Fix SMART information on disks on HBA devices.",
|
||||
"ar_SA": "المؤلف: Phachd. إصلاح معلومات SMART على الأقراص على أجهزة HBA.",
|
||||
"de_DE": "Autor: Phachd. Beheben Sie SMART-Informationen auf Festplatten auf HBA-Geräten.",
|
||||
"es_ES": "Autor: Phachd. Corregir la información SMART en discos en dispositivos HBA.",
|
||||
"fr_FR": "Auteur: Phachd. Corriger les informations SMART sur les disques sur les périphériques HBA.",
|
||||
"ja_JP": "作者: Phachd. HBA デバイス上のディスクの SMART 情報を修正します.",
|
||||
"ko_KR": "저자: Phachd. HBA 장치의 디스크에서 SMART 정보를 수정합니다.",
|
||||
"ru_RU": "Автор: Phachd. Исправление информации SMART на дисках на устройствах HBA.",
|
||||
"th_TH": "ผู้เขียน: Phachd. แก้ไขข้อมูล SMART บนดิสก์บนอุปกรณ์ HBA เท่านั้น",
|
||||
"tr_TR": "Yazar: Phachd. HBA cihazlarındaki disklerde SMART bilgilerini düzeltin.",
|
||||
"uk_UA": "Автор: Phachd. Виправлення інформації SMART на дисках на пристроях HBA.",
|
||||
"vi_VN": "Tác giả: Phachd. Sửa thông tin SMART trên ổ đĩa trên các thiết bị HBA.",
|
||||
"zh_CN": "作者: Phachd. 修复 HBA 设备上磁盘的 SMART 信息.",
|
||||
"zh_HK": "作者: Phachd. 修复 HBA 设备上磁盘的 SMART 信息.",
|
||||
"zh_TW": "作者: Phachd. 修复 HBA 设备上磁盘的 SMART 信息."
|
||||
}
|
||||
},
|
||||
"sortnetif": {
|
||||
"system": false,
|
||||
"description": {
|
||||
"en_US": "Sort network interface name.(parameters: empty: sorted by busid; mac1,mac2,...: sorted by macs sequence).",
|
||||
"ar_SA": "فرز اسم واجهة الشبكة.(المعلمات: فارغ: مرتبة حسب busid؛ mac1،mac2،...: مرتبة حسب تسلسل macs).",
|
||||
"de_DE": "Sortiere Netzwerk-Schnittstellen-Namen.(Parameter: leer: sortiert nach Bus-ID; mac1,mac2,...: sortiert nach MACs-Sequenz).",
|
||||
"es_ES": "Ordenar nombre de interfaz de red.(parámetros: vacío: ordenado por busid; mac1,mac2,...: ordenado por secuencia de macs).",
|
||||
"fr_FR": "Trier le nom de l'interface réseau.(paramètres: vide: trié par busid; mac1,mac2,...: trié par séquence de macs).",
|
||||
"ja_JP": "ネットワークインターフェイス名をソートします. (パラメータ: 空: busid でソート; mac1,mac2,...: macs シーケンスでソート).",
|
||||
"ko_KR": "네트워크 인터페이스 이름을 정렬합니다.(매개 변수: 비어 있음: 버스 ID로 정렬; mac1,mac2,...: macs 시퀀스로 정렬).",
|
||||
"ru_RU": "Сортировать имя сетевого интерфейса.(параметры: пусто: сортировка по busid; mac1,mac2,...: сортировка по последовательности macs).",
|
||||
"th_TH": "เรียงลำดับชื่ออินเตอร์เฟซเครือข่าย.(พารามิเตอร์: ว่าง: เรียงลำดับตาม busid; mac1,mac2,...: เรียงลำดับตามลำดับ macs).",
|
||||
"tr_TR": "Ağ arayüz adını sırala.(parametreler: boş: busid'ye göre sıralanmış; mac1,mac2,...: macs sırasına göre sıralanmış).",
|
||||
"uk_UA": "Сортувати ім'я мережевого інтерфейсу.(параметри: порожній: впорядковано за busid; mac1,mac2,...: впорядковано за послідовністю macs).",
|
||||
"vi_VN": "Sắp xếp tên giao diện mạng.(tham số: trống: sắp xếp theo busid; mac1,mac2,...: sắp xếp theo chuỗi macs).",
|
||||
"zh_CN": "对网络接口名称进行排序. (参数: 空: 按 busid 排序; mac1,mac2,...: 按 macs 序列排序).",
|
||||
"zh_HK": "對網絡接口名稱進行排序. (參數: 空: 按 busid 排序; mac1,mac2,...: 按 macs 序列排序).",
|
||||
"zh_TW": "對網路介面名稱進行排序. (參數: 空: 按 busid 排序; mac1,mac2,...: 按 macs 序列排序)."
|
||||
}
|
||||
},
|
||||
"storagepanel": {
|
||||
"system": false,
|
||||
"description": {
|
||||
"en_US": "Change the storage panel disk display (The default is automatic, please see the documentation or '/usr/bin/storagepanel.sh -h' for parameters).",
|
||||
"ar_SA": "تغيير عرض القرص للوحة التخزين (الافتراضي هو التلقائي، يرجى الرجوع إلى الوثائق أو '/usr/bin/storagepanel.sh -h' للحصول على المعلمات).",
|
||||
"de_DE": "Ändern Sie die Speicherplattenanzeige (Standardmäßig ist dies automatisch, bitte lesen Sie die Dokumentation oder '/usr/bin/storagepanel.sh -h' für Parameter).",
|
||||
"es_ES": "Cambie la visualización del disco del panel de almacenamiento (El valor predeterminado es automático, consulte la documentación o '/usr/bin/storagepanel.sh -h' para ver los parámetros).",
|
||||
"fr_FR": "Modifiez l'affichage du disque du panneau de stockage (La valeur par défaut est automatique, veuillez consulter la documentation ou '/usr/bin/storagepanel.sh -h' pour les paramètres).",
|
||||
"ja_JP": "ストレージパネルのディスク表示を変更します (デフォルトは自動です. パラメータについては、ドキュメントまたは '/usr/bin/storagepanel.sh -h' を参照してください).",
|
||||
"ko_KR": "스토리지 패널 디스크 표시를 변경합니다 (기본값은 자동입니다. 매개 변수에 대해서는 문서 또는 '/usr/bin/storagepanel.sh -h'를 참조하십시오).",
|
||||
"ru_RU": "Измените отображение диска панели хранения (По умолчанию это автоматический режим, пожалуйста, ознакомьтесь с документацией или '/usr/bin/storagepanel.sh -h' для параметров).",
|
||||
"th_TH": "เปลี่ยนการแสดงผลของดิสก์ในแผงจัดเก็บ (ค่าเริ่มต้นคืออัตโนมัติ โปรดดูเอกสารหรือ '/usr/bin/storagepanel.sh -h' เพื่อดูพารามิเตอร์)",
|
||||
"tr_TR": "Depolama paneli diski görüntüsünü değiştirin (Varsayılan olarak otomatik, lütfen parametreler için belgeleri veya '/usr/bin/storagepanel.sh -h' bakın).",
|
||||
"uk_UA": "Змініть відображення диска панелі зберігання (За замовчуванням це автоматичний режим, будь ласка, ознайомтеся з документацією або '/usr/bin/storagepanel.sh -h' для параметрів).",
|
||||
"vi_VN": "Thay đổi hiển thị ổ đĩa của bảng lưu trữ (Mặc định là tự động, vui lòng xem tài liệu hoặc '/usr/bin/storagepanel.sh -h' để biết thông số).",
|
||||
"zh_CN": "更改存储面板磁盘显示 (默认为自动, 请参阅文档或 '/usr/bin/storagepanel.sh -h' 了解参数).",
|
||||
"zh_HK": "更改存儲面板磁盤顯示 (默認為自動, 請參閱文檔或 '/usr/bin/storagepanel.sh -h' 了解參數).",
|
||||
"zh_TW": "更改存儲面板磁盤顯示 (默認為自動, 請參閱文檔或 '/usr/bin/storagepanel.sh -h' 了解參數)."
|
||||
}
|
||||
},
|
||||
"synoconfbkp": {
|
||||
"system": false,
|
||||
"description": {
|
||||
"en_US": "Automatically backup system config settings to the bootloader disk(<loader disk>/p1/scbk/) at bootup and shutdown. Parameters: $1 - number of saves, default 7; $2 - file name prefix, default 'bkp'.",
|
||||
"ar_SA": "قم بنسخ احتياطي تلقائيًا لإعدادات تكوين النظام إلى قرص البدء (<قرص البدء>/p1/scbk/) عند التشغيل والإيقاف. المعلمات: $1 - عدد الحفظ، الافتراضي 7؛ $2 - بادئة اسم الملف، الافتراضي 'bkp'.",
|
||||
"de_DE": "Sichert automatisch die Systemkonfigurationseinstellungen auf der Bootloader-Festplatte (<Bootloader-Festplatte>/p1/scbk/) beim Booten und Herunterfahren. Parameter: $1 - Anzahl der Sicherungen, Standard 7; $2 - Dateiname-Präfix, Standard 'bkp'.",
|
||||
"es_ES": "Realiza automáticamente una copia de seguridad de la configuración del sistema en el disco de arranque (<disco de arranque>/p1/scbk/) al arrancar y apagar. Parámetros: $1 - número de copias, por defecto 7; $2 - prefijo del nombre del archivo, por defecto 'bkp'.",
|
||||
"fr_FR": "Sauvegarde automatiquement les paramètres de configuration du système sur le disque de démarrage (<disque de démarrage>/p1/scbk/) au démarrage et à l'arrêt. Paramètres : $1 - nombre de sauvegardes, par défaut 7 ; $2 - préfixe du nom de fichier, par défaut 'bkp'.",
|
||||
"ja_JP": "システム構成設定をブートローダーディスク (<ブートローダーディスク>/p1/scbk/) に自動的にバックアップします. 起動時とシャットダウン時に実行されます. パラメータ: $1 - 保存回数、デフォルト 7; $2 - ファイル名のプレフィックス、デフォルト 'bkp'.",
|
||||
"ko_KR": "시스템 구성 설정을 부트로더 디스크(<부트로더 디스크>/p1/scbk/)에 부팅 및 종료시 자동으로 백업합니다. 매개변수: $1 - 저장 횟수, 기본값 7; $2 - 파일 이름 접두사, 기본값 'bkp'.",
|
||||
"ru_RU": "Автоматическое резервное копирование настроек конфигурации системы на диске загрузчика (<диск загрузчика>/p1/scbk/) при загрузке и выключении. Параметры: $1 - количество сохранений, по умолчанию 7; $2 - префикс имени файла, по умолчанию 'bkp'.",
|
||||
"th_TH": "สำรองข้อมูลการตั้งค่าระบบโดยอัตโนมัติไปยังดิสก์โหลด (<ดิสก์โหลด>/p1/scbk/) ขณะเปิดเครื่องและปิดเครื่อง พารามิเตอร์: $1 - จำนวนการบันทึก, ค่าเริ่มต้น 7; $2 - คำนำหน้าชื่อไฟล์, ค่าเริ่มต้น 'bkp'.",
|
||||
"tr_TR": "Sistem yapılandırma ayarlarını başlatma ve kapatma sırasında önyükleme diski (<önyükleme diski>/p1/scbk/) üzerine otomatik olarak yedekleyin. Parametreler: $1 - kayıt sayısı, varsayılan 7; $2 - dosya adı öneki, varsayılan 'bkp'.",
|
||||
"uk_UA": "Автоматичне резервне копіювання налаштувань конфігурації системи на диску завантажувача (<диск завантажувача>/p1/scbk/) під час завантаження та вимкнення. Параметри: $1 - кількість збережень, за замовчуванням 7; $2 - префікс імені файлу, за замовчуванням 'bkp'.",
|
||||
"vi_VN": "Sao lưu tự động cài đặt cấu hình hệ thống vào ổ đĩa bootloader (<ổ đĩa bootloader>/p1/scbk/) khi khởi động và tắt máy. Tham số: $1 - số lần lưu, mặc định 7; $2 - tiền tố tên tệp, mặc định 'bkp'.",
|
||||
"zh_CN": "在启动和关机时自动备份系统配置设置到引导加载器磁盘 (<引导加载器磁盘>/p1/scbk/). 参数: $1 - 保存次数, 默认 7; $2 - 文件名前缀, 默认 'bkp'.",
|
||||
"zh_HK": "在啟動和關機時自動備份系統設定到引導載入器磁碟 (<引導載入器磁碟>/p1/scbk/). 參數: $1 - 保存次數, 預設 7; $2 - 檔案名稱前綴, 預設 'bkp'.",
|
||||
"zh_TW": "在開機和關機時自動備份系統設定到引導載入器磁碟 (<引導載入器磁碟>/p1/scbk/). 參數: $1 - 保存次數, 預設 7; $2 - 檔案名稱前綴, 預設 'bkp'."
|
||||
}
|
||||
},
|
||||
"tad6s4n10g": {
|
||||
"system": false,
|
||||
"description": {
|
||||
"en_US": "Control TANK TAD6S4N10G machine DTS generation and button events, please modify the content of the Net-Button-3s Net-Button-9s Copy-Button-3s Copy-Button-9s tasks in the scheduled tasks.",
|
||||
"ar_SA": "التحكم في توليد DTS لجهاز TANK TAD6S4N10G وأحداث الأزرار، يرجى تعديل محتوى المهام المجدولة Net-Button-3s Net-Button-9s Copy-Button-3s Copy-Button-9s.",
|
||||
"de_DE": "Steuerung der DTS-Generierung und der Tastenereignisse der TANK TAD6S4N10G-Maschine. Bitte ändern Sie den Inhalt der Aufgaben Net-Button-3s, Net-Button-9s, Copy-Button-3s und Copy-Button-9s im Zeitplan.",
|
||||
"es_ES": "Control de la generación de DTS de la máquina TANK TAD6S4N10G y eventos de botones, por favor modifique el contenido de las tareas programadas Net-Button-3s, Net-Button-9s, Copy-Button-3s y Copy-Button-9s.",
|
||||
"fr_FR": "Contrôle de la génération DTS de la machine TANK TAD6S4N10G et des événements de boutons, veuillez modifier le contenu des tâches planifiées Net-Button-3s, Net-Button-9s, Copy-Button-3s et Copy-Button-9s.",
|
||||
"ja_JP": "Tank TAD6S4N10G マシンの DTS 生成とボタン イベントを制御します。スケジュールされたタスクの Net-Button-3s、Net-Button-9s、Copy-Button-3s、および Copy-Button-9s の内容を変更してください。",
|
||||
"ko_KR": "TANK TAD6S4N10G 기계의 DTS 생성 및 버튼 이벤트를 제어합니다. 예약된 작업의 Net-Button-3s, Net-Button-9s, Copy-Button-3s 및 Copy-Button-9s의 내용을 수정하십시오.",
|
||||
"ru_RU": "Управление генерацией DTS и событиями кнопок машины TANK TAD6S4N10G, пожалуйста, измените содержимое задач Net-Button-3s, Net-Button-9s, Copy-Button-3s и Copy-Button-9s в планировщике.",
|
||||
"th_TH": "ควบคุมการสร้าง DTS ของเครื่อง TANK TAD6S4N10G และเหตุการณ์ปุ่มโปรดแก้ไขเนื้อหาของงานที่กำหนดเวลา Net-Button-3s, Net-Button-9s, Copy-Button-3s และ Copy-Button-9s",
|
||||
"tr_TR": "TANK TAD6S4N10G makinesinin DTS üretimini ve düğme olaylarını kontrol edin, lütfen planlı görevlerdeki Net-Button-3s, Net-Button-9s, Copy-Button-3s ve Copy-Button-9s görevlerinin içeriğini değiştirin.",
|
||||
"uk_UA": "Контроль генерації DTS машини TANK TAD6S4N10G та подій кнопок, будь ласка, змініть вміст запланованих завдань Net-Button-3s, Net-Button-9s, Copy-Button-3s та Copy-Button-9s.",
|
||||
"vi_VN": "Điều khiển việc tạo DTS của máy TANK TAD6S4N10G và sự kiện nút, vui lòng sửa đổi nội dung của các tác vụ đã lên lịch Net-Button-3s, Net-Button-9s, Copy-Button-3s và Copy-Button-9s.",
|
||||
"zh_CN": "用于控制TANK TAD6S4N10G 机器的 DTS 生成 和 按钮事件, 事件内容请自行修改 计划任务中 Net-Button-3s Net-Button-9s Copy-Button-3s Copy-Button-9s 几个任务的内容.",
|
||||
"zh_HK": "用於控制TANK TAD6S4N10G 機器的 DTS 生成 和 按鈕事件, 事件內容請自行修改 計劃任務中 Net-Button-3s Net-Button-9s Copy-Button-3s Copy-Button-9s 幾個任務的內容.",
|
||||
"zh_TW": "用於控制TANK TAD6S4N10G 機器的 DTS 生成 和 按鈕事件, 事件內容請自行修改 計劃任務中 Net-Button-3s Net-Button-9s Copy-Button-3s Copy-Button-9s 幾個任務的內容."
|
||||
}
|
||||
},
|
||||
"trivial": {
|
||||
"system": false,
|
||||
"description": {
|
||||
"en_US": "Miscellaneous functions. (A collection of some unnecessary modifications.)",
|
||||
"ar_SA": "وظائف متنوعة. (مجموعة من بعض التعديلات غير الضرورية.)",
|
||||
"de_DE": "Verschiedene Funktionen. (Eine Sammlung einiger unbedeutender Änderungen.)",
|
||||
"es_ES": "Funciones variadas. (Una colección de algunas modificaciones innecesarias.)",
|
||||
"fr_FR": "Fonctions diverses. (Une collection de certaines modifications inutiles.)",
|
||||
"ja_JP": "その他の機能. (いくつかの不要な変更の集まり.)",
|
||||
"ko_KR": "기타 기능. (일부 불필요한 수정의 집합.)",
|
||||
"ru_RU": "Различные функции. (Набор некоторых ненужных изменений.)",
|
||||
"th_TH": "ฟังก์ชันเบ็ดเสรจ. (ชุดของการปรับเปลี่ยนบางอย่างที่ไม่จำเป็น.)",
|
||||
"tr_TR": "Çeşitli iş levler. (Birkaç gereksiz değişiklik.)",
|
||||
"uk_UA": "Різноманітні функції. (Колекція деяких невимажних модифікацій.)",
|
||||
"vi_VN": "Các chức năng khác nhau. (Một bộ sửa đổi không cần thiết.)",
|
||||
"zh_CN": "杂项功能. (一些不太必要的修改的集合.)",
|
||||
"zh_HK": "雜項功能. (一些不太必要的修改的集合.)",
|
||||
"zh_TW": "雜項功能. (一些不太必要的修改的集合.)"
|
||||
}
|
||||
},
|
||||
"updatenotify": {
|
||||
"system": false,
|
||||
"description": {
|
||||
"en_US": "RR update notification.",
|
||||
"ar_SA": "إشعار تحديث RR.",
|
||||
"de_DE": "RR-Update-Benachrichtigung.",
|
||||
"es_ES": "Notificación de actualización de RR.",
|
||||
"fr_FR": "Notification de mise à jour de RR.",
|
||||
"ja_JP": "RR アップデート通知.",
|
||||
"ko_KR": "RR 업데이트 알림.",
|
||||
"ru_RU": "Уведомление об обновлении RR.",
|
||||
"th_TH": "การแจ้งเตือนการอัปเดต RR",
|
||||
"tr_TR": "RR güncelleme bildirimi.",
|
||||
"uk_UA": "Сповіщення про оновлення RR.",
|
||||
"vi_VN": "Thông báo cập nhật RR.",
|
||||
"zh_CN": "RR 更新通知.",
|
||||
"zh_HK": "RR 更新通知.",
|
||||
"zh_TW": "RR 更新通知."
|
||||
}
|
||||
},
|
||||
"ups": {
|
||||
"system": false,
|
||||
"description": {
|
||||
"en_US": "Author: GXNAS. Force the standby mode to shutdown when UPS power supply. Parameters: -f - Trigger shutdown task before shutdown; -e - Trigger shutdown task before standby mode (not change to shutdown).",
|
||||
"ar_SA": "لمؤلف: GXNAS. فرض إيقاف تشغيل وضع الاستعداد عند انقطاع مصدر طاقة UPS. المعلمات: -f - تشغيل مهمة إيقاف التشغيل قبل إيقاف التشغيل؛ -e - تشغيل مهمة إيقاف التشغيل قبل وضع-e - تشغيل مهمة إيقاف التشغيل قبل وضع الاستعداد (لا يتم التغيير إلى إيقاف التشغيل).",
|
||||
"de_DE": "Autor: GXNAS. Erzwingt das Herunterfahren in den Standby-Modus, wenn die USV-Stromversorgung eingeschaltet ist. Parameter: -f – Herunterfahraufgabe vor dem Herunterfahren auslösen; -e – Herunterfahraufgabe vor dem Standby-Modus auslösen (nicht zum Herunterfahren wechseln).",
|
||||
"es_ES": "Autor: GXNAS. Fuerza el modo de espera para apagar cuando la fuente de alimentación de la UPS. Parámetros: -f - Activar tarea de apagado antes de apagar; -e - Activar tarea de apagado antes del modo de espera (no cambiar a apagado).",
|
||||
"fr_FR": "Auteur: GXNAS. Force le mode veille à s'éteindre lorsque l'alimentation de secours UPS. Paramètres : -f - Déclencher la tâche d'arrêt avant l'arrêt ; -e - Déclencher la tâche d'arrêt avant le mode veille (ne pas passer en mode arrêt).",
|
||||
"ja_JP": "作者: GXNAS. UPS 電源供給時にスタンバイモードをシャットダウンするように強制します. パラメータ: -f - シャットダウン前にシャットダウンタスクをトリガーする; -e - スタンバイモード前にシャットダウンタスクをトリガーする (シャットダウンに変更しない).",
|
||||
"ko_KR": "작성자: GXNAS. UPS 전원 공급 시 대기 모드를 종료하도록 강제합니다. 매개 변수: -f - 종료 전 종료 작업 트리거; -e - 대기 모드 전 종료 작업 트리거 (종료로 변경하지 않음).",
|
||||
"ru_RU": "Автор: GXNAS. Принудительно измените режим ожидания на выключение при включении ИБП. Параметры: -f — запускать задачу завершения работы перед выключением; -e — запускать задачу завершения работы перед переходом в режим ожидания (не изменено на завершение работы).",
|
||||
"th_TH": "ผู้เขียน: GXNAS บังคับให้โหมดสแตนดบายปิดเมื่อมีการจ่ายไฟจาก UPS พารามิเตอร์: -f - เรียกใช้งานงานปิดก่อนปิด; -e - เรียกใช้งานงานปิดก่อนโหมดสแตนดบาย (ไม่เปลี่ยนเป็นปิด)",
|
||||
"tr_TR": "Yazar: GXNAS. UPS'e güç verildiğinde bekleme modunu zorla kapanmaya değiştirin. Parametreler: -f - Kapatmadan önce kapatma görevini tetikle; -e - Bekleme modundan önce kapatma görevini tetikle (kapatma olarak değiştirilmemiştir).",
|
||||
"uk_UA": "Автор: GXNAS. Примусово змінити режим очікування на вимкнення, коли ДБЖ подається живлення. Параметри: -f - запускати завдання завершення роботи перед завершенням роботи;",
|
||||
"vi_VN": "Tác giả: GXNAS. Buộc chế độ chờ tắt khi cấp nguồn UPS. Tham số: -f - Kích hoạt tác vụ tắt máy trước khi tắt máy; -e - Kích hoạt tác vụ tắt máy trước khi chế độ chờ (không chuyển sang tắt máy).",
|
||||
"zh_CN": "作者: GXNAS. 强制将 UPS 供电时的待机模式修改为关机. 參數: -f - 关机前触发关机任务; -e - 待机模式前发关机任务(不修改为关机).",
|
||||
"zh_HK": "作者: GXNAS. 強制將 UPS 供電時的待機模式修改為關機. 參數: -f - 關機前觸發關機任務; -e - 待機模式前發關機任務(不修改為關機).",
|
||||
"zh_TW": "作者: GXNAS. 強制將 UPS 供電時的待機模式修改為關機. 參數: -f - 關機前觸發關機任務; -e - 待機模式前發關機任務(不修改為關機)."
|
||||
}
|
||||
},
|
||||
"virtiofs": {
|
||||
"system": false,
|
||||
"description": {
|
||||
"en_US": "Auto mount virtio9p and virtiofs file systems (effective after rebooting the system after creating the storage space for the first time since it is mounted to the first storage space by default).",
|
||||
"ar_SA": "تلقائيا تركيب أنظمة ملفات virtio9p و virtiofs (تدخل حيز التنفيذ بعد إعادة تشغيل النظام بعد إنشاء مساحة التخزين لأول مرة حيث يتم تركيبها في مساحة التخزين الأولى بشكل افتراضي).",
|
||||
"de_DE": "Installiert virtio9p und virtiofs automatisch (da sie standardmäßig im ersten Speicherplatz gemountet werden, werden sie wirksam, nachdem das System zum ersten Mal installiert und der Speicherplatz erstellt und neu gestartet wurde).",
|
||||
"es_ES": "Installs virtio9p and virtiofs automatically (effective after rebooting the system after creating the storage space for the first time since it is mounted to the first storage space by default).",
|
||||
"fr_FR": "Monte automatiquement les systèmes de fichiers virtio9p et virtiofs (efficace après le redémarrage du système après la création de l'espace de stockage pour la première fois car il est monté sur le premier espace de stockage par défaut).",
|
||||
"ja_JP": "virtio9pおよびvirtiofsファイルシステムを自動的にマウントします(デフォルトで最初のストレージスペースにマウントされるため、システムを再起動して最初にストレージスペースを作成した後に有効になります)。",
|
||||
"ko_KR": "virtio9p 및 virtiofs 파일 시스템을 자동으로 마운트합니다(기본적으로 첫 번째 스토리지 공간에 마운트되므로 시스템을 재부팅한 후 처음으로 스토리지 공간을 만든 후에 적용됨).",
|
||||
"ru_RU": "Автоматически монтирует файловые системы virtio9p и virtiofs (вступает в силу после перезагрузки системы после создания хранилища в первый раз, так как по умолчанию оно монтируется в первое хранилище).",
|
||||
"th_TH": "ติดตั้งระบบไฟล์ virtio9p และ virtiofs โดยอัตโนมัติ (มีผลหลังจากรีบูตระบบหลังจากสร้างพื้นที่จัดเก็บข้อมูลเป็นครั้งแรกเนื่องจากจะถูกเมานต์ไปยังพื้นที่จัดเก็บข้อมูลแรกโดยค่าเริ่มต้น)",
|
||||
"tr_TR": "virtio9p ve virtiofs dosya sistemlerini otomatik olarak bağlar (varsayılan olarak ilk depolama alanına bağlandığından, depolama alanı ilk kez oluşturulduktan sonra sistemi yeniden başlattıktan sonra geçerlidir).",
|
||||
"uk_UA": "Автоматично монтує файлові системи virtio9p та virtiofs (вступає в силу після перезавантаження системи після створення сховища у перший раз, оскільки за замовчуванням воно монтується у перший сховище).",
|
||||
"vi_VN": "Tự động gắn hệ thống tệp virtio9p và virtiofs (có hiệu lực sau khi khởi động lại hệ thống sau khi tạo không gian lưu trữ lần đầu tiên vì nó được gắn vào không gian lưu trữ đầu tiên theo mặc định).",
|
||||
"zh_CN": "自动挂载 virtio9p 和 virtiofs 文件系统(由于默认挂载到第一个存储空间,所以首次安装系统创建存储空间后重启生效).",
|
||||
"zh_HK": "自動掛載 virtio9p 和 virtiofs 文件系統(由於默認掛載到第一個存儲空間,所以首次安裝系統創建存儲空間後重启生效).",
|
||||
"zh_TW": "自動掛載 virtio9p 和 virtiofs 檔案系統(由於預設掛載到第一個儲存空間,所以首次安裝系統建立儲存空間後重新啟動生效)."
|
||||
}
|
||||
},
|
||||
"vmtools": {
|
||||
"system": false,
|
||||
"description": {
|
||||
"en_US": "Automatically install qemu-ga or open-vm-tools according to the environment. (Physical machines are not enabled by default, no need to cancel)",
|
||||
"ar_SA": "تثبيت qemu-ga أو open-vm-tools تلقائيًا وفقًا للبيئة. (لا يتم تمكين الأجهزة المادية بشكل افتراضي، ولا حاجة للإلغاء)",
|
||||
"de_DE": "Installieren Sie qemu-ga oder open-vm-tools automatisch entsprechend der Umgebung. (Physische Maschinen sind standardmäßig nicht aktiviert, keine Notwendigkeit zum Abbrechen)",
|
||||
"es_ES": "Instalar qemu-ga o open-vm-tools automáticamente según la entorno. (Las máquinas físicas no están activadas de forma predeterminada, no es necesario cancelar)",
|
||||
"fr_FR": "Installer automatiquement qemu-ga ou open-vm-tools en fonction de l'environnement. (Les machines physiques ne sont pas activées par défaut, pas besoin d'annuler)",
|
||||
"ja_JP": "環境に応じて qemu-ga または open-vm-tools を自動的にインストールします。 (物理マシンはデフォルトで有効になっていないため、キャンセルする必要はありません)",
|
||||
"ko_KR": "환경에 따라 qemu-ga 또는 open-vm-tools를 자동으로 설치합니다. (물리적 머신은 기본적으로 활성화되지 않으므로 취소할 필요가 없습니다)",
|
||||
"ru_RU": "Автоматическая установка qemu-ga или open-vm-tools в зависимости от окружения. (Физические машины по умолчанию не включены, отменять не нужно)",
|
||||
"th_TH": "ติดตั้ง qemu-ga หรือ open-vm-tools โดยอัตโนมัติตามสภาพแวดล้อม (เครื่องจริงจะไม่เปิดใช้งานตามค่าเริ่มต้น ไม่จำเป็นต้องยกเลิก)",
|
||||
"tr_TR": "Ortamına göre qemu-ga veya open-vm-tools'u otomatik olarak yükleyin. (Fiziksel makineler varsayılan olarak etkinleştirilmez, iptal etmeye gerek yok)",
|
||||
"uk_UA": "Автоматична установка qemu-ga або open-vm-tools відповідно до середовища. (Фізичні машини за замовчуванням не активовані, скасовувати не потрібно)",
|
||||
"vi_VN": " Tự động cài đặt qemu-ga hoặc open-vm-tools theo môi trường. (Máy vật lý không được kích hoạt theo mặc định, không cần hủy bỏ)",
|
||||
"zh_CN": "根据环境自动安装 qemu-ga 或者 open-vm-tools. (物理机默认不会启用, 不需要取消)",
|
||||
"zh_HK": "根据环境自动安装 qemu-ga 或者 open-vm-tools. (物理机默认不会启用, 不需要取消)",
|
||||
"zh_TW": "根據環境自動安裝 qemu-ga 或者 open-vm-tools. (物理機默認不會啟用, 不需要取消)"
|
||||
}
|
||||
},
|
||||
"wireless": {
|
||||
"system": false,
|
||||
"description": {
|
||||
"en_US": "Connect WiFi. Please modify 'IFNAME' 'SSID' 'PASSWD' to the required password in the DSM scheduled task and execute it.",
|
||||
"ar_SA": "قم بتوصيل WiFi. يرجى تعديل 'IFNAME' 'SSID' 'PASSWD' إلى كلمة المرور المطلوبة في مهمة DSM المجدولة وتنفيذها.",
|
||||
"de_DE": "Verbinden Sie WiFi. Bitte ändern Sie 'IFNAME' 'SSID' 'PASSWD' auf das erforderliche Passwort in der DSM geplanten Aufgabe und führen Sie es aus.",
|
||||
"es_ES": "Conecte WiFi. Modifique 'IFNAME' 'SSID' 'PASSWD' a la contraseña requerida en la tarea programada DSM y ejecútela.",
|
||||
"fr_FR": "Connectez-vous au WiFi. Veuillez modifier 'IFNAME' 'SSID' 'PASSWD' au mot de passe requis dans la tâche planifiée DSM et exécutez-la.",
|
||||
"ja_JP": "WiFiに接続してください.DSMの予約タスクで必要なパスワードに 'IFNAME' 'SSID' 'PASSWD' を変更して実行してください.",
|
||||
"ko_KR": "WiFi에 연결하십시오. DSM 예약 작업에서 필요한 암호로 'IFNAME' 'SSID' 'PASSWD'를 수정하고 실행하십시오.",
|
||||
"ru_RU": "Подключитесь к WiFi. Пожалуйста, измените 'IFNAME' 'SSID' 'PASSWD' на требуемый пароль в запланированной задаче DSM и выполните ее.",
|
||||
"th_TH": "เชื่อมต่อ WiFi โปรดแก้ไข 'IFNAME' 'SSID' 'PASSWD' เป็นรหัสผ่านที่ต้องการในงานที่ตั้งเวลา DSM และเริ่มการทำงาน",
|
||||
"tr_TR": "WiFi'ye bağlanın. Lütfen DSM planlanmış görevinde 'IFNAME' 'SSID' 'PASSWD' 'yi gerekli parola için değiştirin ve çalıştırın.",
|
||||
"uk_UA": "Підключіться до WiFi. Будь ласка, змініть 'IFNAME' 'SSID' 'PASSWD' на потрібний пароль у запланованому завданні DSM та виконайте його.",
|
||||
"vi_VN": "Kết nối WiFi. Vui lòng sửa đổi 'IFNAME' 'SSID' 'PASSWD' thành mật khẩu yêu cầu trong tác vụ được lên lịch DSM và thực hiện nó.",
|
||||
"zh_CN": "连接 WiFi. 请在 DSM 计划任务中将 'IFNAME' 'SSID' 'PASSWD' 修改为所需密码并执行它.",
|
||||
"zh_HK": "連接 WiFi. 請在 DSM 計劃任務中將 'IFNAME' 'SSID' 'PASSWD' 修改為所需密碼並執行它.",
|
||||
"zh_TW": "連接 WiFi. 請在 DSM 計劃任務中將 'IFNAME' 'SSID' 'PASSWD' 修改為所需密碼並執行它."
|
||||
}
|
||||
},
|
||||
"wol": {
|
||||
"system": true,
|
||||
"description": {
|
||||
"en_US": "Force enable Wake-on-lan for network devices.",
|
||||
"ar_SA": "قم بتمكين Wake-on-lan بقوة لأجهزة الشبكة.",
|
||||
"de_DE": "Erzwingen Sie Wake-on-lan für Netzwerkgeräte.",
|
||||
"es_ES": "Forzar el Wake-on-lan para dispositivos de red.",
|
||||
"fr_FR": "Forcer l'activation de Wake-on-lan pour les périphériques réseau.",
|
||||
"ja_JP": "ネットワークデバイスの Wake-on-lan を強制的に有効にします.",
|
||||
"ko_KR": "네트워크 장치의 Wake-on-lan을 강제로 활성화합니다.",
|
||||
"ru_RU": "Принудительное включение Wake-on-lan для сетевых устройств.",
|
||||
"th_TH": "บังคับให้ Wake-on-lan ใช้งานสำหรับอุปกรณ์เครือข่าย",
|
||||
"tr_TR": "Ağ cihazları için Wake-on-lan'ı zorla etkinleştirin.",
|
||||
"uk_UA": "Примусове включення Wake-on-lan для мережевих пристроїв.",
|
||||
"vi_VN": "Có;puxáy awake-on-lan cho thiết bị mạng.",
|
||||
"zh_CN": "强制启用网络设备的 Wake-on-lan.",
|
||||
"zh_HK": "強制啟用網絡設備的 Wake-on-lan.",
|
||||
"zh_TW": "強制啟用網路設備的 Wake-on-lan."
|
||||
}
|
||||
}
|
||||
}
|
||||
BIN
docs/addons.xlsx
Normal file
BIN
docs/addons.xlsx
Normal file
Binary file not shown.
76
docs/changelogs.html
Normal file
76
docs/changelogs.html
Normal file
@ -0,0 +1,76 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-Hans-CN" data-color-mode="auto" data-light-theme="light" data-dark-theme="dark"
|
||||
data-a11y-animated-images="system">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<link rel="dns-prefetch" href="https://github.githubassets.com" />
|
||||
<link rel="dns-prefetch" href="https://avatars.githubusercontent.com" />
|
||||
<link rel="dns-prefetch" href="https://github-cloud.s3.amazonaws.com" />
|
||||
<link rel="dns-prefetch" href="https://user-images.githubusercontent.com/" />
|
||||
<link rel="preconnect" href="https://github.githubassets.com" crossorigin />
|
||||
<link rel="preconnect" href="https://avatars.githubusercontent.com" />
|
||||
|
||||
<link crossorigin="anonymous" media="all" rel="stylesheet"
|
||||
href="https://github.githubassets.com/assets/light-0eace2597ca3.css" />
|
||||
<link crossorigin="anonymous" media="all" rel="stylesheet"
|
||||
href="https://github.githubassets.com/assets/dark-a167e256da9c.css" />
|
||||
|
||||
<link crossorigin="anonymous" media="all" rel="stylesheet"
|
||||
href="https://github.githubassets.com/assets/primer-711f412bb361.css" />
|
||||
<link crossorigin="anonymous" media="all" rel="stylesheet"
|
||||
href="https://github.githubassets.com/assets/global-78704364aaba.css" />
|
||||
<style>
|
||||
select,
|
||||
.input-style {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.textarea-style {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.loading-message {
|
||||
text-align: center;
|
||||
}
|
||||
</style>
|
||||
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
|
||||
<script>
|
||||
async function fetchChangelog() {
|
||||
let page = 1;
|
||||
const changelogContainer = document.getElementById('changelog');
|
||||
const loadingMessage = document.createElement('p');
|
||||
loadingMessage.textContent = 'Loading...';
|
||||
loadingMessage.className = 'loading-message';
|
||||
changelogContainer.appendChild(loadingMessage);
|
||||
|
||||
while (true) {
|
||||
const response = await fetch(`https://api.github.com/repos/RROrg/rr/releases?page=${page}&per_page=100`);
|
||||
const releases = await response.json();
|
||||
if ((!response.ok) || (releases.length === 0)) {
|
||||
const errorMessage = document.createElement('p');
|
||||
errorMessage.textContent = releases.message;
|
||||
errorMessage.className = 'error-message';
|
||||
changelogContainer.appendChild(errorMessage);
|
||||
break;
|
||||
}
|
||||
releases.forEach(release => {
|
||||
const releaseElement = document.createElement('div');
|
||||
releaseElement.innerHTML = `<h2><a href="${release.html_url}" target="_blank">${release.name}</a></h2>${marked.parse(release.body)}`;
|
||||
changelogContainer.appendChild(releaseElement);
|
||||
});
|
||||
page++;
|
||||
}
|
||||
|
||||
changelogContainer.removeChild(loadingMessage);
|
||||
}
|
||||
|
||||
document.addEventListener('DOMContentLoaded', fetchChangelog);
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="changelog"></div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@ -1,6 +1,6 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-Hans-CN">
|
||||
<head>
|
||||
<script language="javascript"> location.replace("./disks.html")</script>
|
||||
<script language="javascript"> location.replace("./issues.html")</script>
|
||||
</head>
|
||||
</html>
|
||||
522
docs/issues.html
Normal file
522
docs/issues.html
Normal file
@ -0,0 +1,522 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-Hans-CN" data-color-mode="auto" data-light-theme="light" data-dark-theme="dark"
|
||||
data-a11y-animated-images="system">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<link rel="dns-prefetch" href="https://github.githubassets.com" />
|
||||
<link rel="dns-prefetch" href="https://avatars.githubusercontent.com" />
|
||||
<link rel="dns-prefetch" href="https://github-cloud.s3.amazonaws.com" />
|
||||
<link rel="dns-prefetch" href="https://user-images.githubusercontent.com/" />
|
||||
<link rel="preconnect" href="https://github.githubassets.com" crossorigin />
|
||||
<link rel="preconnect" href="https://avatars.githubusercontent.com" />
|
||||
|
||||
<link crossorigin="anonymous" media="all" rel="stylesheet"
|
||||
href="https://github.githubassets.com/assets/light-0eace2597ca3.css" />
|
||||
<link crossorigin="anonymous" media="all" rel="stylesheet"
|
||||
href="https://github.githubassets.com/assets/dark-a167e256da9c.css" />
|
||||
|
||||
<link crossorigin="anonymous" media="all" rel="stylesheet"
|
||||
href="https://github.githubassets.com/assets/primer-711f412bb361.css" />
|
||||
<link crossorigin="anonymous" media="all" rel="stylesheet"
|
||||
href="https://github.githubassets.com/assets/global-78704364aaba.css" />
|
||||
<style>
|
||||
select,
|
||||
.input-style {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.textarea-style {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#logo {
|
||||
text-align: center;
|
||||
margin: 20px auto !important;
|
||||
}
|
||||
|
||||
#labels {
|
||||
text-align: center;
|
||||
margin: 20px auto !important;
|
||||
height: auto !important;
|
||||
}
|
||||
|
||||
#products {
|
||||
text-align: center;
|
||||
margin: 20px auto !important;
|
||||
height: auto !important;
|
||||
}
|
||||
</style>
|
||||
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
|
||||
<script src="https://polyfill.io/v3/polyfill.min.js"></script>
|
||||
<!-- <script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script> -->
|
||||
<script type="application/javascript">
|
||||
|
||||
var repo = "RROrg/rr"
|
||||
var debug = getUrlParam("debug");
|
||||
|
||||
var _models = {};
|
||||
var _pats = {};
|
||||
var _addons = {};
|
||||
var _modules = {};
|
||||
|
||||
function getUrlParam(paraName) {
|
||||
var url = document.location.toString();
|
||||
var arrObj = url.split("?");
|
||||
if (arrObj.length > 1) {
|
||||
var arrPara = arrObj[1].split("&");
|
||||
var arr;
|
||||
for (var i = 0; i < arrPara.length; i++) {
|
||||
arr = arrPara[i].split("=");
|
||||
if (arr != null && arr[0] == paraName) {
|
||||
return arr[1];
|
||||
}
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
function httpGetAsync(theUrl, callback) {
|
||||
let xmlHttpReq = new XMLHttpRequest();
|
||||
xmlHttpReq.onreadystatechange = function () {
|
||||
if (xmlHttpReq.readyState == 4 && xmlHttpReq.status == 200)
|
||||
callback(xmlHttpReq.responseText);
|
||||
};
|
||||
xmlHttpReq.open("GET", theUrl, true); // true for asynchronous
|
||||
xmlHttpReq.send(null);
|
||||
}
|
||||
|
||||
window.onload = function () {
|
||||
init();
|
||||
}
|
||||
|
||||
function init() {
|
||||
httpGetAsync("https://raw.githubusercontent.com/RROrg/rr/main/docs/models.json", function (result) {
|
||||
_models = JSON.parse(result);
|
||||
httpGetAsync("https://raw.githubusercontent.com/RROrg/rr/main/docs/pats.json", function (result) {
|
||||
_pats = JSON.parse(result);
|
||||
httpGetAsync("https://raw.githubusercontent.com/RROrg/rr/main/docs/addons.json", function (result) {
|
||||
_addons = JSON.parse(result);
|
||||
httpGetAsync("https://raw.githubusercontent.com/RROrg/rr/main/docs/modules.json", function (result) {
|
||||
_modules = JSON.parse(result);
|
||||
$("#model").on("change", changeModel);
|
||||
$("#version").on("change", changeVersion);
|
||||
$("#language").on("change", changeVersion);
|
||||
$("#kernel").on("change", chanageKernel);
|
||||
$('#addons').val("acpid,mountloader,powersched,reboottoloader,trivial,vmtools");
|
||||
if (debug) {
|
||||
$('#sn_item').show();
|
||||
$('#macs_item').show();
|
||||
$('#tips_item').show();
|
||||
} else {
|
||||
$('#sn_item').hide();
|
||||
$('#macs_item').hide();
|
||||
$('#tips_item').hide();
|
||||
}
|
||||
setModels();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function setModels() {
|
||||
var models = [];
|
||||
for (var P in _models) {
|
||||
models = models.concat(_models[P]["models"]);
|
||||
}
|
||||
$("#model")[0].options.length = 0;
|
||||
for (var i = 0; i < models.length; i++) {
|
||||
var model = models[i];
|
||||
$("#model").append(`<option value="${model}">${model}</option>`);
|
||||
}
|
||||
changeModel();
|
||||
}
|
||||
|
||||
function changeModel() {
|
||||
model = $("#model").val();
|
||||
var versions = [];
|
||||
if (model in _pats) {
|
||||
versions = Object.keys(_pats[model]);
|
||||
versions.sort((a, b) => b.localeCompare(a));
|
||||
}
|
||||
$("#version")[0].options.length = 0;
|
||||
for (var i = 0; i < versions.length; i++) {
|
||||
var version = versions[i];
|
||||
$("#version").append(`<option value="${version}">${version}</option>`);
|
||||
}
|
||||
changeproductsimage();
|
||||
changeVersion();
|
||||
}
|
||||
|
||||
function changeproductsimage() {
|
||||
//var model = $("#model").val().replace("#","").replace("+","plus");
|
||||
//$('#products').html(`<img src="https://www.synology.cn/img/products/detail/${model}/heading.png" width="20%">`);
|
||||
var model = $("#model").val().replace("#", "").replace("+", "%2B");
|
||||
$('#products').html(`<img src="https://www.synology.com/api/products/getPhoto?product=${model}&type=img_s&sort=0" width="20%">`);
|
||||
}
|
||||
|
||||
function changeVersion() {
|
||||
createAddonsBtn();
|
||||
createModulesBtn();
|
||||
chanageKernel();
|
||||
}
|
||||
|
||||
function createAddonsBtn() {
|
||||
var language = $("#language").val();
|
||||
var extstr = $('#addons').val().split(",");
|
||||
var idx = 1;
|
||||
var html = `<div class="form-group-body" id="addons_btns">`;
|
||||
for (var ext in _addons) {
|
||||
var dispar = "";
|
||||
if (_addons[ext]["system"] == true) {
|
||||
dispar = "disabled";
|
||||
}
|
||||
var par = "";
|
||||
if (extstr.includes(ext)) {
|
||||
par = "btn-danger";
|
||||
}
|
||||
html += `<button type="button" class="btn btn-primary btn-sm mt-2 ${par}" id="btn_${ext}" ${par} ${dispar} onclick="return onclickextAddon('${ext}')" autofocus="" title="${_addons[ext]["description"][language]}">${ext}</button> `;
|
||||
//if (idx++ % 10 == 0) html += "<br />";
|
||||
}
|
||||
html += `</div>`;
|
||||
$('#addons_btns').html(html);
|
||||
}
|
||||
|
||||
function createModulesBtn() {
|
||||
var model = $("#model").val();
|
||||
var version = $("#version").val().split(".").slice(0, 2).join(".");
|
||||
var platform = "";
|
||||
for (var P in _models) {
|
||||
if (_models[P]["models"].includes(model)) {
|
||||
platform = P + "-" + _models[P]["productvers"][version];
|
||||
break;
|
||||
}
|
||||
}
|
||||
var extstr = [];
|
||||
var idx = 1;
|
||||
var html = `<div class="form-group-body" id="modules_btns">`;
|
||||
for (var ext in _modules[platform]) {
|
||||
extstr.push(ext);
|
||||
var par = "btn-danger";
|
||||
html += `<button type="button" class="btn btn-primary btn-sm mt-2 ${par}" id="btn_${ext}" ${par} onclick="return onclickextModule('${ext}')" autofocus="" title="${_modules[platform][ext]["description"]}">${ext}</button> `;
|
||||
//if (idx++ % 10 == 0) html += "<br />";
|
||||
}
|
||||
html += `</div>`;
|
||||
$('#modules_btns').html(html);
|
||||
if (extstr.length > 0) {
|
||||
$('#modules').val(extstr.join(","));
|
||||
}
|
||||
}
|
||||
|
||||
function chanageKernel() {
|
||||
var model = $("#model").val();
|
||||
var version = $("#version").val().split(".").slice(0, 2).join(".");
|
||||
var kernel = $("#kernel").val();
|
||||
if (model == "SA6400" && version == "7.2") {
|
||||
$("#kernel_item").show();
|
||||
if (kernel == "custom") {
|
||||
$('#modules_item').hide();
|
||||
} else {
|
||||
$('#modules_item').show();
|
||||
}
|
||||
} else {
|
||||
$('#modules_item').show();
|
||||
$("#kernel_item").hide();
|
||||
}
|
||||
}
|
||||
|
||||
function onclickextAddon(ext) {
|
||||
var btnobj = $("#btn_" + ext);
|
||||
var extstr = $('#addons').val().split(",");
|
||||
if (btnobj.hasClass("btn-danger")) {
|
||||
extstr.map((val, i) => {
|
||||
if (val.split(':')[0] === ext) {
|
||||
extstr.splice(i, 1);
|
||||
}
|
||||
});
|
||||
btnobj.removeClass("btn-danger");
|
||||
} else {
|
||||
btnobj.addClass("btn-danger");
|
||||
var param = window.prompt("Please enter parameters (optional):", "");
|
||||
if (param !== null && param.trim() !== "") {
|
||||
extstr.push(ext + ":" + param.trim());
|
||||
} else {
|
||||
extstr.push(ext);
|
||||
}
|
||||
}
|
||||
extstr.map((val, i) => {
|
||||
if (val === "") {
|
||||
extstr.splice(i, 1);
|
||||
}
|
||||
});
|
||||
$('#addons').val(extstr.join(","));
|
||||
}
|
||||
|
||||
function onclickextModule(ext) {
|
||||
var btnobj = $("#btn_" + ext);
|
||||
var extstr = $('#modules').val().split(",");
|
||||
if (btnobj.hasClass("btn-danger")) {
|
||||
extstr.map((val, i) => {
|
||||
if (val === ext) {
|
||||
extstr.splice(i, 1);
|
||||
}
|
||||
});
|
||||
btnobj.removeClass("btn-danger");
|
||||
} else {
|
||||
btnobj.addClass("btn-danger");
|
||||
extstr.push(ext);
|
||||
}
|
||||
extstr.map((val, i) => {
|
||||
if (val === "") {
|
||||
extstr.splice(i, 1);
|
||||
}
|
||||
});
|
||||
$('#modules').val(extstr.join(","));
|
||||
}
|
||||
function createIssues() {
|
||||
var form = document.getElementById("inputs");
|
||||
let formData = new FormData(form);
|
||||
var title = "custom";
|
||||
var body = {};
|
||||
var _parameters = ["title", "format", "size", "template", "language", "model", "version", "kernel", "addons", "modules"];
|
||||
if (debug) {
|
||||
_parameters.push("sn", "macs", "tips");
|
||||
}
|
||||
for (var key in _parameters) {
|
||||
var name = _parameters[key];
|
||||
if ($("#" + name).is(":hidden")) { continue; }
|
||||
if (name == "title") {
|
||||
if ($("#" + name).val()) {
|
||||
title += " " + $("#" + name).val();
|
||||
} else {
|
||||
title += " " + new Date().toISOString().substr(0, 10);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if ($("#" + name).val()) {
|
||||
body[name] = $("#" + name).val();
|
||||
}
|
||||
}
|
||||
|
||||
body = JSON.stringify(body).replace(/\+/g, "%2b");
|
||||
window.location.href = `https://github.com/${repo}/issues/new?title=${title}&body=${body}`;
|
||||
|
||||
}
|
||||
</script>
|
||||
|
||||
<title>RR-CUSTOM</title>
|
||||
<link rel="icon" href="https://avatars.githubusercontent.com/u/151816514?s=200&v=4">
|
||||
</head>
|
||||
|
||||
<body class="logged-in env-production page-responsive" style="word-wrap: break-word">
|
||||
<div class="application-main left-0 text-left p-3 mx-auto container-xl px-3 px-md-4 px-lg-5 mt-4">
|
||||
<pre id="logo" style="
|
||||
display: block;
|
||||
font-family: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas,
|
||||
Liberation Mono, monospace !important;
|
||||
font-size: 12px !important;
|
||||
line-height: 12px !important;
|
||||
margin: 15px 10px;
|
||||
color: red;
|
||||
">
|
||||
██████╗ ██████╗ ██████╗██╗ ██╗███████╗████████╗ ██████╗ ███╗ ███╗
|
||||
██╔══██╗██╔══██╗ ██╔════╝██║ ██║██╔════╝╚══██╔══╝██╔═══██╗████╗ ████║
|
||||
██████╔╝██████╔╝█████╗██║ ██║ ██║███████╗ ██║ ██║ ██║██╔████╔██║
|
||||
██╔══██╗██╔══██╗╚════╝██║ ██║ ██║╚════██║ ██║ ██║ ██║██║╚██╔╝██║
|
||||
██║ ██║██║ ██║ ╚██████╗╚██████╔╝███████║ ██║ ╚██████╔╝██║ ╚═╝ ██║
|
||||
╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚══════╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝
|
||||
|
||||
</pre>
|
||||
<div class="shields" id="labels">
|
||||
<a id="titleA" href="https://github.com/RROrg/rr">
|
||||
<img alt="GitHub Release"
|
||||
src="https://img.shields.io/github/v/release/rrorg/rr?include_prereleases&style=flat-square&label=current">
|
||||
</a>
|
||||
<a id="titleA" href="https://github.com/RROrg/rr">
|
||||
<img alt="GitHub Issues"
|
||||
src="https://img.shields.io/github/issues-closed-raw/rrorg/rr/custom?style=flat-square&label=custom">
|
||||
</a>
|
||||
<a id="titleB" href="./changelogs.html">
|
||||
<img alt="GitHub Release" src="https://img.shields.io/badge/Changelogs-8A2BE2&style=flat">
|
||||
</a>
|
||||
</div>
|
||||
<div class="image" id="products">
|
||||
<img src="https://www.synology.cn/img/products/detail/SA6400/heading.png" width="20%">
|
||||
</div>
|
||||
<div class="form-group mt-1 mb-2" id="title_item">
|
||||
<div class="form-group-header">
|
||||
<label class="color-fg-default text-mono f6">Title: (Please do not delete the "custom " in the title of
|
||||
the issue creation page.)</label>
|
||||
</div>
|
||||
<div class="form-group-body">
|
||||
<input class="form-control input-contrast input-sm" type="text" id="title" name="inputs[title]" value="" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group mt-1 mb-2" id="format_item">
|
||||
<div class="form-group-header">
|
||||
<label class="color-fg-default text-mono f6">Format:</label>
|
||||
</div>
|
||||
<div class="form-group-body">
|
||||
<select class="form-select form-control select-sm input-contrast" id="format" name="inputs[format]" value="">
|
||||
<option selected="selected" value="img">img</option>
|
||||
<option value="ova">ova</option>
|
||||
<option value="vmx">vmx</option>
|
||||
<option value="vmdk">vmdk</option>
|
||||
<option value="flat">flat</option>
|
||||
<option value="vhd">vhd</option>
|
||||
<option value="vhdx">vhdx</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group mt-1 mb-2" id="size_item">
|
||||
<div class="form-group-header">
|
||||
<label class="color-fg-default text-mono f6">Size:</label>
|
||||
</div>
|
||||
<div class="form-group-body">
|
||||
<select class="form-select form-control select-sm input-contrast" id="size" name="inputs[size]" value="">
|
||||
<option value="2GB">2GB</option>
|
||||
<option selected="selected" value="4GB">4GB</option>
|
||||
<option value="8GB">8GB</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group mt-1 mb-2" id="template_item">
|
||||
<div class="form-group-header">
|
||||
<label class="color-fg-default text-mono f6">Template:</label>
|
||||
</div>
|
||||
<div class="form-group-body">
|
||||
<select class="form-select form-control select-sm input-contrast" id="template" name="inputs[template]"
|
||||
value="">
|
||||
<option value="true">true</option>
|
||||
<option selected="selected" value="false">false</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group mt-1 mb-2" id="language_item">
|
||||
<div class="form-group-header">
|
||||
<label class="color-fg-default text-mono f6">Language:</label>
|
||||
</div>
|
||||
<div class="form-group-body">
|
||||
<select class="form-select form-control select-sm input-contrast" id="language" name="inputs[language]"
|
||||
value="">
|
||||
<option value="ar_SA">ar_SA</option>
|
||||
<option value="de_DE">de_DE</option>
|
||||
<option selected="selected" value="en_US">en_US</option>
|
||||
<option value="es_ES">es_ES</option>
|
||||
<option value="fr_FR">fr_FR</option>
|
||||
<option value="ja_JP">ja_JP</option>
|
||||
<option value="ko_KR">ko_KR</option>
|
||||
<option value="ru_RU">ru_RU</option>
|
||||
<option value="th_TH">th_TH</option>
|
||||
<option value="tr_TR">tr_TR</option>
|
||||
<option value="uk_UA">uk_UA</option>
|
||||
<option value="vi_VN">vi_VN</option>
|
||||
<option value="zh_CN">zh_CN</option>
|
||||
<option value="zh_HK">zh_HK</option>
|
||||
<option value="zh_TW">zh_TW</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group mt-1 mb-2" id="sn_item">
|
||||
<div class="form-group-header">
|
||||
<label class="color-fg-default text-mono f6">SN:</label>
|
||||
</div>
|
||||
<div class="form-group-body">
|
||||
<input class="form-control input-contrast input-sm" type="text" id="sn" name="inputs[sn]" value=""></input>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group mt-1 mb-2" id="macs_item">
|
||||
<div class="form-group-header">
|
||||
<label class="color-fg-default text-mono f6">MACs: (Please separate multiple with ','.)</label>
|
||||
</div>
|
||||
<div class="form-group-body">
|
||||
<input class="form-control input-contrast input-sm" type="text" id="macs" name="inputs[macs]" value=""></input>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group mt-1 mb-2" id="tips_item">
|
||||
<div class="form-group-header">
|
||||
<label class="color-fg-default text-mono f6">Tips:</label>
|
||||
</div>
|
||||
<div class="form-group-body">
|
||||
<input class="form-control input-contrast input-sm" type="text" id="tips" name="inputs[tips]" value=""></input>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group mt-1 mb-2" id="model_item">
|
||||
<div class="form-group-header">
|
||||
<label class="color-fg-default text-mono f6">Model:</label>
|
||||
</div>
|
||||
<div class="form-group-body">
|
||||
<select class="form-select form-control select-sm input-contrast" id="model" name="inputs[model]" value="">
|
||||
<option selected="selected" value="SA6400">SA6400</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group mt-1 mb-2" id="version_item">
|
||||
<div class="form-group-header">
|
||||
<label class="color-fg-default text-mono f6">Version:</label>
|
||||
<a href="https://github.com/RROrg/rr/raw/main/docs/pats.xlsx"> Details</a>
|
||||
</div>
|
||||
<div class="form-group-body">
|
||||
<select class="form-select form-control select-sm input-contrast" id="version" name="inputs[version]" value="">
|
||||
<option selected="selected" value="7.2">7.2</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group mt-1 mb-2" id="kernel_item">
|
||||
<div class="form-group-header">
|
||||
<label class="color-fg-default text-mono f6">Kernel: (only "custom" supports Hyper-V, Xen.)</label>
|
||||
</div>
|
||||
<div class="form-group-body">
|
||||
<select class="form-select form-control select-sm input-contrast" id="kernel" name="inputs[kernel]" value="">
|
||||
<option selected="selected" value="official">official</option>
|
||||
<option value="custom">custom</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group mt-1 mb-2" id="addons_item">
|
||||
<div class="form-group-header">
|
||||
<label class="color-fg-default text-mono f6">Addons:</label>
|
||||
<a href="https://github.com/RROrg/rr/raw/main/docs/addons.xlsx"> Details</a>
|
||||
</div>
|
||||
<div class="form-group-body">
|
||||
<textarea class="textarea-style input-contrast input-sm" type="text" id="addons" name="inputs[addons]"
|
||||
disabled></textarea>
|
||||
<div class="form-group-body" id="addons_btns">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group mt-1 mb-2" id="modules_item">
|
||||
<div class="form-group-header">
|
||||
<label class="color-fg-default text-mono f6">Modules:</label>
|
||||
<a href="https://github.com/RROrg/rr/raw/main/docs/modules.xlsx"> Details</a>
|
||||
</div>
|
||||
<div class="form-group-body">
|
||||
<textarea class="textarea-style input-contrast input-sm" type="text" id="modules" name="inputs[modules]"
|
||||
disabled></textarea>
|
||||
<div class="form-group-body" id="modules_btns">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div data-replace-remote-form-target="" class="workflow-dispatch">
|
||||
<form id="inputs">
|
||||
<button type="button" class="btn State--merged" onclick="return createIssues()" autofocus="">
|
||||
Create
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<footer class="footer width-full container-xl mt-3 text-center color-fg-muted">
|
||||
<a aria-label="RROrg" title="GitHub" class="footer-octicon mr-2" href="https://github.com/RROrg">
|
||||
<img class="avatar rounded-2 avatar-user" src="https://avatars.githubusercontent.com/u/151816514?s=88&v=4"
|
||||
width="40" height="40" alt="@RROrg" />
|
||||
</a>
|
||||
<a aria-label="RROrg" title="GitHub" class="footer-octicon mr-2" href="https://github.com/wjz304">
|
||||
<img class="avatar rounded-2 avatar-user" src="https://avatars.githubusercontent.com/u/5615843?s=88&v=4"
|
||||
width="40" height="40" alt="@wjz304" />
|
||||
</a>
|
||||
<span> © 2022 RROrg, Ing, Inc. </span>
|
||||
</footer>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
216
docs/models.json
Normal file
216
docs/models.json
Normal file
@ -0,0 +1,216 @@
|
||||
{
|
||||
"apollolake": {
|
||||
"productvers": {
|
||||
"7.0": "4.4.180",
|
||||
"7.1": "4.4.180",
|
||||
"7.2": "4.4.302",
|
||||
"7.3": "4.4.302"
|
||||
},
|
||||
"models": [
|
||||
"DS1019+",
|
||||
"DS620slim",
|
||||
"DS218+",
|
||||
"DS418play",
|
||||
"DS718+",
|
||||
"DS918+"
|
||||
]
|
||||
},
|
||||
"broadwell": {
|
||||
"productvers": {
|
||||
"7.0": "4.4.180",
|
||||
"7.1": "4.4.180",
|
||||
"7.2": "4.4.302",
|
||||
"7.3": "4.4.302"
|
||||
},
|
||||
"models": [
|
||||
"FS3400",
|
||||
"RS3618xs",
|
||||
"DS3617xs",
|
||||
"DS3617xsII",
|
||||
"FS2017",
|
||||
"RS18017xs+",
|
||||
"RS3617RPxs",
|
||||
"RS3617xs+",
|
||||
"RS4017xs+"
|
||||
]
|
||||
},
|
||||
"broadwellnk": {
|
||||
"productvers": {
|
||||
"7.0": "4.4.180",
|
||||
"7.1": "4.4.180",
|
||||
"7.2": "4.4.302",
|
||||
"7.3": "4.4.302"
|
||||
},
|
||||
"models": [
|
||||
"DS1621xs+",
|
||||
"DS3622xs+",
|
||||
"FS3600",
|
||||
"RS1619xs+",
|
||||
"RS3621RPxs",
|
||||
"RS3621xs+",
|
||||
"RS4021xs+",
|
||||
"SA3400",
|
||||
"SA3600",
|
||||
"DS3018xs",
|
||||
"FS1018"
|
||||
]
|
||||
},
|
||||
"broadwellnkv2": {
|
||||
"productvers": {
|
||||
"7.0": "4.4.180",
|
||||
"7.1": "4.4.180",
|
||||
"7.2": "4.4.302",
|
||||
"7.3": "4.4.302"
|
||||
},
|
||||
"models": [
|
||||
"FS3410",
|
||||
"SA3410",
|
||||
"SA3610"
|
||||
]
|
||||
},
|
||||
"broadwellntbap": {
|
||||
"productvers": {
|
||||
"7.0": "4.4.180",
|
||||
"7.1": "4.4.180",
|
||||
"7.2": "4.4.302",
|
||||
"7.3": "4.4.302"
|
||||
},
|
||||
"models": [
|
||||
"SA3200D",
|
||||
"SA3400D"
|
||||
]
|
||||
},
|
||||
"denverton": {
|
||||
"productvers": {
|
||||
"7.0": "4.4.180",
|
||||
"7.1": "4.4.180",
|
||||
"7.2": "4.4.302",
|
||||
"7.3": "4.4.302"
|
||||
},
|
||||
"models": [
|
||||
"DS1819+",
|
||||
"DS2419+",
|
||||
"DS2419+II",
|
||||
"DVA3219",
|
||||
"DVA3221",
|
||||
"RS820+",
|
||||
"RS820RP+",
|
||||
"DS1618+",
|
||||
"RS2418+",
|
||||
"RS2418RP+",
|
||||
"RS2818RP+"
|
||||
]
|
||||
},
|
||||
"geminilake": {
|
||||
"productvers": {
|
||||
"7.0": "4.4.180",
|
||||
"7.1": "4.4.180",
|
||||
"7.2": "4.4.302",
|
||||
"7.3": "4.4.302"
|
||||
},
|
||||
"models": [
|
||||
"DS1520+",
|
||||
"DS220+",
|
||||
"DS224+",
|
||||
"DS420+",
|
||||
"DS423+",
|
||||
"DS720+",
|
||||
"DS920+",
|
||||
"DVA1622"
|
||||
]
|
||||
},
|
||||
"purley": {
|
||||
"productvers": {
|
||||
"7.0": "4.4.180",
|
||||
"7.1": "4.4.180",
|
||||
"7.2": "4.4.302",
|
||||
"7.3": "4.4.302"
|
||||
},
|
||||
"models": [
|
||||
"HD6500",
|
||||
"FS6400"
|
||||
]
|
||||
},
|
||||
"r1000": {
|
||||
"productvers": {
|
||||
"7.0": "4.4.180",
|
||||
"7.1": "4.4.180",
|
||||
"7.2": "4.4.302",
|
||||
"7.3": "4.4.302"
|
||||
},
|
||||
"models": [
|
||||
"DS1522+",
|
||||
"DS723+",
|
||||
"DS923+",
|
||||
"RS422+"
|
||||
]
|
||||
},
|
||||
"v1000": {
|
||||
"productvers": {
|
||||
"7.0": "4.4.180",
|
||||
"7.1": "4.4.180",
|
||||
"7.2": "4.4.302",
|
||||
"7.3": "4.4.302"
|
||||
},
|
||||
"models": [
|
||||
"DS1621+",
|
||||
"DS1821+",
|
||||
"DS1823xs+",
|
||||
"DS2422+",
|
||||
"FS2500",
|
||||
"RS1221+",
|
||||
"RS1221RP+",
|
||||
"RS2421+",
|
||||
"RS2421RP+",
|
||||
"RS2423+",
|
||||
"RS2423RP+",
|
||||
"RS2821RP+",
|
||||
"RS822+",
|
||||
"RS822RP+"
|
||||
]
|
||||
},
|
||||
"epyc7002": {
|
||||
"productvers": {
|
||||
"7.1": "7.1-5.10.55",
|
||||
"7.2": "7.2-5.10.55",
|
||||
"7.3": "7.3-5.10.55"
|
||||
},
|
||||
"models": [
|
||||
"SA6400"
|
||||
]
|
||||
},
|
||||
"geminilakenk": {
|
||||
"productvers": {
|
||||
"7.1": "7.1-5.10.55",
|
||||
"7.2": "7.2-5.10.55",
|
||||
"7.3": "7.3-5.10.55"
|
||||
},
|
||||
"models": [
|
||||
"DS225+",
|
||||
"DS425+"
|
||||
]
|
||||
},
|
||||
"r1000nk": {
|
||||
"productvers": {
|
||||
"7.1": "7.1-5.10.55",
|
||||
"7.2": "7.2-5.10.55",
|
||||
"7.3": "7.3-5.10.55"
|
||||
},
|
||||
"models": [
|
||||
"DS725+"
|
||||
]
|
||||
},
|
||||
"v1000nk": {
|
||||
"productvers": {
|
||||
"7.1": "7.1-5.10.55",
|
||||
"7.2": "7.2-5.10.55",
|
||||
"7.3": "7.3-5.10.55"
|
||||
},
|
||||
"models": [
|
||||
"DS1525+",
|
||||
"DS1825+",
|
||||
"DS925+",
|
||||
"RS2825RP+"
|
||||
]
|
||||
}
|
||||
}
|
||||
BIN
docs/models.xlsx
Normal file
BIN
docs/models.xlsx
Normal file
Binary file not shown.
41425
docs/modules.json
Normal file
41425
docs/modules.json
Normal file
File diff suppressed because it is too large
Load Diff
BIN
docs/modules.xlsx
Normal file
BIN
docs/modules.xlsx
Normal file
Binary file not shown.
2666
docs/pats.json
Normal file
2666
docs/pats.json
Normal file
File diff suppressed because it is too large
Load Diff
BIN
docs/pats.xlsx
Normal file
BIN
docs/pats.xlsx
Normal file
Binary file not shown.
Binary file not shown.
@ -1,90 +1,124 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Copyright (C) 2022 Ing <https://github.com/wjz304>
|
||||
#
|
||||
# This is free software, licensed under the MIT License.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
# shellcheck disable=SC2034
|
||||
|
||||
set -e
|
||||
[ -z "${WORK_PATH}" -o ! -d "${WORK_PATH}/include" ] && WORK_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
|
||||
|
||||
. ${WORK_PATH}/include/functions.sh
|
||||
[ -z "${WORK_PATH}" ] || [ ! -d "${WORK_PATH}/include" ] && WORK_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
|
||||
|
||||
. "${WORK_PATH}/include/functions.sh"
|
||||
[ -z "${LOADER_DISK}" ] && die "$(TEXT "Loader is not init!")"
|
||||
# Sanity check
|
||||
loaderIsConfigured || die "$(TEXT "Loader is not configured!")"
|
||||
|
||||
# Check if machine has EFI
|
||||
[ -d /sys/firmware/efi ] && EFI=1 || EFI=0
|
||||
# Clear logs for dbgutils addons
|
||||
rm -rf "${PART1_PATH}/logs" /sys/fs/pstore/* >/dev/null 2>&1 || true
|
||||
|
||||
# Check if machine has EFI
|
||||
EFI=$([ -d /sys/firmware/efi ] && echo 1 || echo 0)
|
||||
FBI=$(cat /sys/class/graphics/fb*/name 2>/dev/null | head -1)
|
||||
BUS=$(getBus "${LOADER_DISK}")
|
||||
|
||||
# Print text centralized
|
||||
clear
|
||||
[ -z "${COLUMNS}" ] && COLUMNS=50
|
||||
TITLE="$(printf "$(TEXT "Welcome to %s")" "${RR_TITLE}")"
|
||||
printf "\033[1;44m%*s\n" ${COLUMNS} ""
|
||||
printf "\033[1;44m%*s\033[A\n" ${COLUMNS} ""
|
||||
printf "\033[1;32m%*s\033[0m\n" $(((${#TITLE} + ${COLUMNS}) / 2)) "${TITLE}"
|
||||
printf "\033[1;44m%*s\033[0m\n" ${COLUMNS} ""
|
||||
TITLE="BOOTING:"
|
||||
[ ${EFI} -eq 1 ] && TITLE+=" [UEFI]" || TITLE+=" [BIOS]"
|
||||
[ "${BUS}" = "usb" ] && TITLE+=" [${BUS^^} flashdisk]" || TITLE+=" [${BUS^^} DoM]"
|
||||
printf "\033[1;33m%*s\033[0m\n" $(((${#TITLE} + ${COLUMNS}) / 2)) "${TITLE}"
|
||||
COLUMNS=$(ttysize 2>/dev/null | awk '{print $1}')
|
||||
COLUMNS=${COLUMNS:-80}
|
||||
WTITLE="$(printf "$(TEXT "Welcome to %s")" "${RR_TITLE}${RR_RELEASE:+(${RR_RELEASE})}")"
|
||||
DATE="$(date)"
|
||||
printf "\033[1;44m%*s\n" "${COLUMNS}" ""
|
||||
printf "\033[1;44m%*s\033[A\n" "${COLUMNS}" ""
|
||||
printf "\033[1;31m%*s\033[0m\n" "$(((${#WTITLE} + ${COLUMNS}) / 2))" "${WTITLE}"
|
||||
printf "\033[1;44m%*s\033[A\n" "${COLUMNS}" ""
|
||||
printf "\033[1;32m%*s\033[0m\n" "${COLUMNS}" "${DATE}"
|
||||
|
||||
BTITLE="Boot Type:"
|
||||
BTITLE+="$([ ${EFI} -eq 1 ] && echo " [UEFI]" || echo " [BIOS]")"
|
||||
BTITLE+="$([ "${BUS}" = "usb" ] && echo " [${BUS^^} flashdisk]" || echo " [${BUS^^} DoM]")"
|
||||
printf "\033[1;33m%*s\033[0m\n" $(((${#BTITLE} + ${COLUMNS}) / 2)) "${BTITLE}"
|
||||
|
||||
if [ -f "${PART1_PATH}/.upgraded" ]; then
|
||||
MODEL="$(readConfigKey "model" "${USER_CONFIG_FILE}")"
|
||||
PLATFORM="$(readConfigKey "platform" "${USER_CONFIG_FILE}")"
|
||||
if [ -n "${MODEL}" ] && [ -n "${PLATFORM}" ]; then
|
||||
printf "\033[1;43m%s\033[0m\n" "$(TEXT "Reconfigure after upgrade ...")"
|
||||
PRODUCTVER="$(readConfigKey "productver" "${USER_CONFIG_FILE}")"
|
||||
PATURL="$(readConfigKey "paturl" "${USER_CONFIG_FILE}")"
|
||||
PATSUM="$(readConfigKey "patsum" "${USER_CONFIG_FILE}")"
|
||||
./menu.sh reconfiguringM "${MODEL}" "${PLATFORM}" || {
|
||||
echo -e "$(TEXT "Reconfiguration failed!")"
|
||||
exit 1
|
||||
}
|
||||
if [ -n "${PRODUCTVER}" ] && [ -n "${PATURL}" ]; then
|
||||
./menu.sh reconfiguringV "${PRODUCTVER}" "${PATURL}" "${PATSUM}" || {
|
||||
echo -e "$(TEXT "Reconfiguration failed!")"
|
||||
exit 1
|
||||
}
|
||||
fi
|
||||
fi
|
||||
rm -f "${PART1_PATH}/.upgraded"
|
||||
fi
|
||||
# Check if DSM zImage changed, patch it if necessary
|
||||
ZIMAGE_HASH="$(readConfigKey "zimage-hash" "${USER_CONFIG_FILE}")"
|
||||
if [ -f ${PART1_PATH}/.build -o "$(sha256sum "${ORI_ZIMAGE_FILE}" | awk '{print$1}')" != "${ZIMAGE_HASH}" ]; then
|
||||
echo -e "\033[1;43m$(TEXT "DSM zImage changed")\033[0m"
|
||||
${WORK_PATH}/zimage-patch.sh
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "\033[1;43m$(TEXT "zImage not patched,\nPlease upgrade the bootloader version and try again.\nPatch error:\n")$(<"${LOG_FILE}")\033[0m"
|
||||
if [ -f "${PART1_PATH}/.build" ] || [ "$(sha256sum "${ORI_ZIMAGE_FILE}" | awk '{print $1}')" != "${ZIMAGE_HASH}" ]; then
|
||||
printf "\033[1;43m%s\033[0m\n" "$(TEXT "DSM zImage changed")"
|
||||
${WORK_PATH}/zimage-patch.sh || {
|
||||
printf "\033[1;43m%s\n%s\n%s:\n%s\033[0m\n" "$(TEXT "DSM zImage not patched")" "$(TEXT "Please upgrade the bootloader version and try again.")" "$(TEXT "Error")" "$(cat "${LOG_FILE}")"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
fi
|
||||
|
||||
# Check if DSM ramdisk changed, patch it if necessary
|
||||
RAMDISK_HASH="$(readConfigKey "ramdisk-hash" "${USER_CONFIG_FILE}")"
|
||||
RAMDISK_HASH_CUR="$(sha256sum "${ORI_RDGZ_FILE}" | awk '{print $1}')"
|
||||
if [ -f ${PART1_PATH}/.build -o "${RAMDISK_HASH_CUR}" != "${RAMDISK_HASH}" ]; then
|
||||
echo -e "\033[1;43m$(TEXT "DSM Ramdisk changed")\033[0m"
|
||||
${WORK_PATH}/ramdisk-patch.sh
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "\033[1;43m$(TEXT "Ramdisk not patched,\nPlease upgrade the bootloader version and try again.\nPatch error:\n")$(<"${LOG_FILE}")\033[0m"
|
||||
if [ -f "${PART1_PATH}/.build" ] || [ "$(sha256sum "${ORI_RDGZ_FILE}" | awk '{print $1}')" != "${RAMDISK_HASH}" ]; then
|
||||
printf "\033[1;43m%s\033[0m\n" "$(TEXT "DSM ramdisk changed")"
|
||||
${WORK_PATH}/ramdisk-patch.sh || {
|
||||
printf "\033[1;43m%s\n%s\n%s:\n%s\033[0m\n" "$(TEXT "DSM ramdisk not patched")" "$(TEXT "Please upgrade the bootloader version and try again.")" "$(TEXT "Error")" "$(cat "${LOG_FILE}")"
|
||||
exit 1
|
||||
fi
|
||||
# Update SHA256 hash
|
||||
writeConfigKey "ramdisk-hash" "${RAMDISK_HASH_CUR}" "${USER_CONFIG_FILE}"
|
||||
}
|
||||
fi
|
||||
[ -f ${PART1_PATH}/.build ] && rm -f ${PART1_PATH}/.build
|
||||
[ -f "${PART1_PATH}/.build" ] && rm -f "${PART1_PATH}/.build"
|
||||
|
||||
# Load necessary variables
|
||||
PLATFORM="$(readConfigKey "platform" "${USER_CONFIG_FILE}")"
|
||||
MODEL="$(readConfigKey "model" "${USER_CONFIG_FILE}")"
|
||||
MODELID="$(readConfigKey "modelid" "${USER_CONFIG_FILE}")"
|
||||
PRODUCTVER="$(readConfigKey "productver" "${USER_CONFIG_FILE}")"
|
||||
BUILDNUM="$(readConfigKey "buildnum" "${USER_CONFIG_FILE}")"
|
||||
SMALLNUM="$(readConfigKey "smallnum" "${USER_CONFIG_FILE}")"
|
||||
DT="$(readConfigKey "dt" "${USER_CONFIG_FILE}")"
|
||||
KVER="$(readConfigKey "kver" "${USER_CONFIG_FILE}")"
|
||||
KPRE="$(readConfigKey "kpre" "${USER_CONFIG_FILE}")"
|
||||
KERNEL="$(readConfigKey "kernel" "${USER_CONFIG_FILE}")"
|
||||
LKM="$(readConfigKey "lkm" "${USER_CONFIG_FILE}")"
|
||||
|
||||
DMI="$(dmesg | grep -i "DMI:" | sed 's/\[.*\] DMI: //i')"
|
||||
CPU="$(echo $(cat /proc/cpuinfo | grep 'model name' | uniq | awk -F':' '{print $2}'))"
|
||||
MEM="$(free -m | grep -i mem | awk '{print$2}') MB"
|
||||
MEV="$(virt-what 2>/dev/null | head -1)"
|
||||
DMI="$(dmesg 2>/dev/null | grep -i "DMI:" | head -1 | sed 's/\[.*\] DMI: //i')"
|
||||
CPU="$(awk -F': ' '/model name/ {print $2}' /proc/cpuinfo | uniq)"
|
||||
MEM="$(awk '/MemTotal:/ {printf "%.0f", $2 / 1024}' /proc/meminfo) MB"
|
||||
|
||||
echo -e "$(TEXT "Model:") \033[1;36m${MODEL}\033[0m"
|
||||
echo -e "$(TEXT "Build:") \033[1;36m${PRODUCTVER}(${BUILDNUM}$([ ${SMALLNUM:-0} -ne 0 ] && echo "u${SMALLNUM}"))\033[0m"
|
||||
echo -e "$(TEXT "LKM: ") \033[1;36m${LKM}\033[0m"
|
||||
echo -e "$(TEXT "DMI: ") \033[1;36m${DMI}\033[0m"
|
||||
echo -e "$(TEXT "CPU: ") \033[1;36m${CPU}\033[0m"
|
||||
echo -e "$(TEXT "MEM: ") \033[1;36m${MEM}\033[0m"
|
||||
printf "%s \033[1;36m%s(%s)\033[0m\n" "$(TEXT "Model: ")" "${MODEL}" "${PLATFORM}"
|
||||
printf "%s \033[1;36m%s(%s%s)\033[0m\n" "$(TEXT "Version: ")" "${PRODUCTVER}" "${BUILDNUM}" "$([ ${SMALLNUM:-0} -ne 0 ] && echo "u${SMALLNUM}")"
|
||||
printf "%s \033[1;36m%s\033[0m\n" "$(TEXT "Kernel: ")" "${KERNEL}"
|
||||
printf "%s \033[1;36m%s\033[0m\n" "$(TEXT "LKM: ")" "${LKM}"
|
||||
printf "%s \033[1;36m%s\033[0m\n" "$(TEXT "MEV: ")" "${MEV:-physical}"
|
||||
printf "%s \033[1;36m%s\033[0m\n" "$(TEXT "DMI: ")" "${DMI}"
|
||||
printf "%s \033[1;36m%s\033[0m\n" "$(TEXT "CPU: ")" "${CPU}"
|
||||
printf "%s \033[1;36m%s\033[0m\n" "$(TEXT "MEM: ")" "${MEM}"
|
||||
|
||||
if [ ! -f "${WORK_PATH}/model-configs/${MODEL}.yml" ] || [ -z "$(readModelKey ${MODEL} "productvers.[${PRODUCTVER}]")" ]; then
|
||||
echo -e "\033[1;33m*** $(printf "$(TEXT "The current version of bootloader does not support booting %s-%s, please upgrade and rebuild.")" "${MODEL}" "${PRODUCTVER}") ***\033[0m"
|
||||
exit 1
|
||||
if readConfigMap "addons" "${USER_CONFIG_FILE}" | grep -q nvmesystem; then
|
||||
[ -z "$(ls /dev/nvme* | grep -vE "${LOADER_DISK}[0-9]?$" 2>/dev/null)" ] && printf "\033[1;33m*** %s ***\033[0m\n" "$(TEXT "Notice: Please insert at least one m.2 disk for system installation.")"
|
||||
else
|
||||
[ -z "$(ls /dev/sd* | grep -vE "${LOADER_DISK}[0-9]?$" 2>/dev/null)" ] && printf "\033[1;33m*** %s ***\033[0m\n" "$(TEXT "Notice: Please insert at least one sata disk for system installation.")"
|
||||
fi
|
||||
|
||||
HASATA=0
|
||||
for D in $(lsblk -dpno NAME); do
|
||||
[ "${D}" = "${LOADER_DISK}" ] && continue
|
||||
if [ "$(getBus "${D}")" = "sata" -o "$(getBus "${D}")" = "scsi" ]; then
|
||||
HASATA=1
|
||||
break
|
||||
fi
|
||||
done
|
||||
[ ${HASATA} = "0" ] && echo -e "\033[1;33m*** $(TEXT "Please insert at least one sata/scsi disk for system installation, except for the bootloader disk.") ***\033[0m"
|
||||
if checkBIOS_VT_d && [ "$(echo "${KVER:-4}" | cut -d'.' -f1)" -lt 5 ]; then
|
||||
printf "\033[1;33m*** %s ***\033[0m\n" "$(TEXT "Notice: Please disable Intel(VT-d)/AMD(AMD-Vi) in BIOS/UEFI settings if you encounter a boot failure.")"
|
||||
fi
|
||||
|
||||
VID="$(readConfigKey "vid" "${USER_CONFIG_FILE}")"
|
||||
PID="$(readConfigKey "pid" "${USER_CONFIG_FILE}")"
|
||||
@ -92,166 +126,362 @@ SN="$(readConfigKey "sn" "${USER_CONFIG_FILE}")"
|
||||
MAC1="$(readConfigKey "mac1" "${USER_CONFIG_FILE}")"
|
||||
MAC2="$(readConfigKey "mac2" "${USER_CONFIG_FILE}")"
|
||||
KERNELPANIC="$(readConfigKey "kernelpanic" "${USER_CONFIG_FILE}")"
|
||||
|
||||
NETIFNUM=$(ls /sys/class/net/ | grep eth | wc -l); [ ${NETIFNUM} -lt 2 ] && NETIFNUM=2
|
||||
HDDSORT="$(readConfigKey "hddsort" "${USER_CONFIG_FILE}")"
|
||||
USBASINTERNAL="$(readConfigKey "usbasinternal" "${USER_CONFIG_FILE}")"
|
||||
EMMCBOOT="$(readConfigKey "emmcboot" "${USER_CONFIG_FILE}")"
|
||||
MODBLACKLIST="$(readConfigKey "modblacklist" "${USER_CONFIG_FILE}")"
|
||||
|
||||
declare -A CMDLINE
|
||||
|
||||
# Automatic values
|
||||
CMDLINE['syno_hw_version']="${MODEL}"
|
||||
[ -z "${VID}" ] && VID="0x46f4" # Sanity check
|
||||
[ -z "${PID}" ] && PID="0x0001" # Sanity check
|
||||
CMDLINE['vid']="${VID}"
|
||||
CMDLINE['pid']="${PID}"
|
||||
CMDLINE['syno_hw_version']="${MODELID:-${MODEL}}"
|
||||
CMDLINE['vid']="${VID:-"0x46f4"}" # Sanity check
|
||||
CMDLINE['pid']="${PID:-"0x0001"}" # Sanity check
|
||||
|
||||
if [ -z "${SN}" ]; then
|
||||
SN="$(generateSerial "${MODEL}")"
|
||||
writeConfigKey "sn" "${SN}" "${USER_CONFIG_FILE}"
|
||||
fi
|
||||
CMDLINE['sn']="${SN}"
|
||||
[ -n "${MAC1}" ] && CMDLINE['mac1']="${MAC1}"
|
||||
[ -n "${MAC2}" ] && CMDLINE['mac2']="${MAC2}"
|
||||
CMDLINE['netif_num']="${NETIFNUM}"
|
||||
|
||||
if [ -z "${MAC1}" ]; then
|
||||
if [ -n "${MAC2}" ]; then
|
||||
MAC1=${MAC2}
|
||||
MAC2=""
|
||||
writeConfigKey "mac1" "${MAC1}" "${USER_CONFIG_FILE}"
|
||||
writeConfigKey "mac2" "${MAC2}" "${USER_CONFIG_FILE}"
|
||||
else
|
||||
NETIF_NUM=2
|
||||
MACS="$(generateMacAddress "${MODEL}" ${NETIF_NUM})"
|
||||
for I in $(seq 1 ${NETIF_NUM}); do
|
||||
eval MAC${I}="$(echo ${MACS} | cut -d' ' -f${I})"
|
||||
writeConfigKey "mac${I}" "$(echo ${MACS} | cut -d' ' -f${I})" "${USER_CONFIG_FILE}"
|
||||
done
|
||||
fi
|
||||
fi
|
||||
[ -n "${MAC1}" ] && CMDLINE['mac1']="${MAC1}" && CMDLINE['netif_num']="1"
|
||||
[ -n "${MAC2}" ] && CMDLINE['mac2']="${MAC2}" && CMDLINE['netif_num']="2"
|
||||
|
||||
CMDLINE['skip_vender_mac_interfaces']="$(seq -s, 0 $((${CMDLINE['netif_num']:-1} - 1)))"
|
||||
|
||||
ETHX="$(find /sys/class/net/ -mindepth 1 -maxdepth 1 ! -name lo -exec basename {} \; | sort)"
|
||||
for N in ${ETHX}; do
|
||||
MAC="$(cat "/sys/class/net/${N}/address" 2>/dev/null)" || MAC="00:00:00:00:00:00"
|
||||
BUS="$(ethtool -i "${N}" 2>/dev/null | grep "bus-info" | cut -d' ' -f2)" || BUS="0000:00:00.0"
|
||||
if [ ! "${MAC}" = "00:00:00:00:00:00" ] && [ ! "${BUS}" = "0000:00:00.0" ]; then
|
||||
CMDLINE["R${BUS}"]="${MAC}"
|
||||
fi
|
||||
done
|
||||
|
||||
# set fixed cmdline
|
||||
if grep -q "force_junior" /proc/cmdline; then
|
||||
CMDLINE['force_junior']=""
|
||||
fi
|
||||
if grep -q "recovery" /proc/cmdline; then
|
||||
CMDLINE['force_junior']=""
|
||||
CMDLINE['recovery']=""
|
||||
fi
|
||||
if [ ${EFI} -eq 1 ]; then
|
||||
CMDLINE['withefi']=""
|
||||
else
|
||||
CMDLINE['noefi']=""
|
||||
fi
|
||||
if [ ! "${BUS}" = "usb" ]; then
|
||||
SIZE=$(($(cat /sys/block/${LOADER_DISK/\/dev\//}/size) / 2048 + 10))
|
||||
# Read SATADoM type
|
||||
DOM="$(readModelKey "${MODEL}" "dom")"
|
||||
CMDLINE['synoboot_satadom']="${DOM}"
|
||||
CMDLINE['dom_szmax']="${SIZE}"
|
||||
if [ "$(echo "${KVER:-4}" | cut -d'.' -f1)" -lt 5 ]; then
|
||||
if [ ! "${BUS}" = "usb" ]; then
|
||||
SZ=$(blockdev --getsz "${LOADER_DISK}" 2>/dev/null) # SZ=$(cat /sys/block/${LOADER_DISK/\/dev\//}/size)
|
||||
SS=$(blockdev --getss "${LOADER_DISK}" 2>/dev/null) # SS=$(cat /sys/block/${LOADER_DISK/\/dev\//}/queue/hw_sector_size)
|
||||
SIZE=$((${SZ:-0} * ${SS:-0} / 1024 / 1024 + 10))
|
||||
# Read SATADoM type
|
||||
SATADOM="$(readConfigKey "satadom" "${USER_CONFIG_FILE}")"
|
||||
CMDLINE['synoboot_satadom']="${SATADOM:-2}"
|
||||
CMDLINE['dom_szmax']="${SIZE}"
|
||||
fi
|
||||
CMDLINE["elevator"]="elevator"
|
||||
else
|
||||
CMDLINE["split_lock_detect"]="off"
|
||||
# CMDLINE['module.sig_enforce']="0"
|
||||
# CMDLINE['loadpin.enforce']="0"
|
||||
fi
|
||||
CMDLINE['panic']="${KERNELPANIC:-0}"
|
||||
CMDLINE['console']="ttyS0,115200n8"
|
||||
|
||||
if [ "${DT}" = "true" ]; then
|
||||
CMDLINE["syno_ttyS0"]="serial,0x3f8"
|
||||
CMDLINE["syno_ttyS1"]="serial,0x2f8"
|
||||
else
|
||||
CMDLINE["SMBusHddDynamicPower"]="1"
|
||||
CMDLINE["syno_hdd_detect"]="0"
|
||||
CMDLINE["syno_hdd_powerup_seq"]="0"
|
||||
fi
|
||||
|
||||
CMDLINE["HddHotplug"]="1"
|
||||
CMDLINE["vender_format_version"]="2"
|
||||
CMDLINE['earlyprintk']=""
|
||||
CMDLINE['earlycon']="uart8250,io,0x3f8,115200n8"
|
||||
CMDLINE['console']="ttyS0,115200n8"
|
||||
CMDLINE['consoleblank']="600"
|
||||
# CMDLINE['no_console_suspend']="1"
|
||||
CMDLINE['root']="/dev/md0"
|
||||
CMDLINE['skip_vender_mac_interfaces']="0,1,2,3,4,5,6,7"
|
||||
CMDLINE['loglevel']="15"
|
||||
CMDLINE['log_buf_len']="32M"
|
||||
CMDLINE['rootwait']=""
|
||||
CMDLINE['panic']="${KERNELPANIC:-0}"
|
||||
# CMDLINE['intremap']="off" # no need
|
||||
# CMDLINE['amd_iommu_intr']="legacy" # no need
|
||||
# CMDLINE['split_lock_detect']="off" # check KVER
|
||||
CMDLINE['pcie_aspm']="off"
|
||||
# CMDLINE['intel_pstate']="disable"
|
||||
# CMDLINE['amd_pstate']="disable"
|
||||
# CMDLINE['nox2apic']="" # check platform
|
||||
# CMDLINE['nomodeset']=""
|
||||
CMDLINE['nowatchdog']=""
|
||||
|
||||
# Read cmdline
|
||||
while IFS=': ' read KEY VALUE; do
|
||||
CMDLINE['modprobe.blacklist']="${MODBLACKLIST}"
|
||||
CMDLINE['mev']="${MEV:-physical}"
|
||||
|
||||
if [ "${MEV:-physical}" = "vmware" ]; then
|
||||
CMDLINE['tsc']="reliable"
|
||||
CMDLINE['pmtmr']="0x0"
|
||||
fi
|
||||
|
||||
if [ "${HDDSORT}" = "true" ]; then
|
||||
CMDLINE['hddsort']=""
|
||||
fi
|
||||
if [ "${USBASINTERNAL}" = "true" ]; then
|
||||
CMDLINE['usbasinternal']=""
|
||||
fi
|
||||
|
||||
if echo "apollolake geminilake purley geminilakenk" | grep -wq "${PLATFORM}"; then
|
||||
CMDLINE["nox2apic"]=""
|
||||
fi
|
||||
|
||||
# # Save command line to grubenv RR_CMDLINE= ... nox2apic
|
||||
# if echo "apollolake geminilake purley geminilakenk" | grep -wq "${PLATFORM}"; then
|
||||
# if grep -Eq "^flags.*x2apic.*" /proc/cpuinfo; then
|
||||
# checkCmdline "rr_cmdline" "nox2apic" || addCmdline "rr_cmdline" "nox2apic"
|
||||
# fi
|
||||
# else
|
||||
# checkCmdline "rr_cmdline" "nox2apic" && delCmdline "rr_cmdline" "nox2apic"
|
||||
# fi
|
||||
|
||||
# if [ -n "$(ls /dev/mmcblk* 2>/dev/null)" ] && [ ! "${BUS}" = "mmc" ] && [ ! "${EMMCBOOT}" = "true" ]; then
|
||||
# if ! echo "${CMDLINE['modprobe.blacklist']}" | grep -q "sdhci"; then
|
||||
# [ ! "${CMDLINE['modprobe.blacklist']}" = "" ] && CMDLINE['modprobe.blacklist']+=","
|
||||
# CMDLINE['modprobe.blacklist']+="sdhci,sdhci_pci,sdhci_acpi"
|
||||
# fi
|
||||
# fi
|
||||
if [ "${DT}" = "true" ] && ! echo "purley broadwellnkv2 epyc7002 geminilakenk r1000nk v1000nk" | grep -wq "${PLATFORM}"; then
|
||||
if ! echo "${CMDLINE['modprobe.blacklist']}" | grep -q "mpt3sas"; then
|
||||
[ ! "${CMDLINE['modprobe.blacklist']}" = "" ] && CMDLINE['modprobe.blacklist']+=","
|
||||
CMDLINE['modprobe.blacklist']+="mpt3sas"
|
||||
fi
|
||||
#else
|
||||
# CMDLINE['scsi_mod.scan']="sync" # TODO: redpill panic of vmware scsi? (add to cmdline)
|
||||
fi
|
||||
|
||||
# CMDLINE['kvm.ignore_msrs']="1"
|
||||
# CMDLINE['kvm.report_ignored_msrs']="0"
|
||||
|
||||
if echo "apollolake geminilake geminilakenk" | grep -wq "${PLATFORM}"; then
|
||||
CMDLINE["intel_iommu"]="igfx_off"
|
||||
fi
|
||||
|
||||
if echo "purley broadwellnkv2" | grep -wq "${PLATFORM}"; then
|
||||
CMDLINE["SASmodel"]="1"
|
||||
fi
|
||||
|
||||
SSID="$(cat "${PART1_PATH}/wpa_supplicant.conf" 2>/dev/null | grep 'ssid=' | cut -d'=' -f2 | sed 's/^"//; s/"$//' | xxd -p | tr -d '\n')"
|
||||
PSK="$(cat "${PART1_PATH}/wpa_supplicant.conf" 2>/dev/null | grep 'psk=' | cut -d'=' -f2 | sed 's/^"//; s/"$//' | xxd -p | tr -d '\n')"
|
||||
|
||||
if [ -n "${SSID}" ] && [ -n "${PSK}" ]; then
|
||||
CMDLINE["wpa.ssid"]="${SSID}"
|
||||
CMDLINE["wpa.psk"]="${PSK}"
|
||||
fi
|
||||
|
||||
while IFS=': ' read -r KEY VALUE; do
|
||||
[ -n "${KEY}" ] && CMDLINE["network.${KEY}"]="${VALUE}"
|
||||
done <<<"$(readConfigMap "network" "${USER_CONFIG_FILE}")"
|
||||
|
||||
while IFS=': ' read -r KEY VALUE; do
|
||||
[ -n "${KEY}" ] && CMDLINE["${KEY}"]="${VALUE}"
|
||||
done < <(readModelMap "${MODEL}" "productvers.[${PRODUCTVER}].cmdline")
|
||||
while IFS=': ' read KEY VALUE; do
|
||||
[ -n "${KEY}" ] && CMDLINE["${KEY}"]="${VALUE}"
|
||||
done < <(readConfigMap "cmdline" "${USER_CONFIG_FILE}")
|
||||
done <<<"$(readConfigMap "cmdline" "${USER_CONFIG_FILE}")"
|
||||
|
||||
# Prepare command line
|
||||
CMDLINE_LINE=""
|
||||
for KEY in ${!CMDLINE[@]}; do
|
||||
for KEY in "${!CMDLINE[@]}"; do
|
||||
VALUE="${CMDLINE[${KEY}]}"
|
||||
CMDLINE_LINE+=" ${KEY}"
|
||||
[ -n "${VALUE}" ] && CMDLINE_LINE+="=${VALUE}"
|
||||
done
|
||||
CMDLINE_LINE=$(echo "${CMDLINE_LINE}" | sed 's/^ //') # Remove leading space
|
||||
echo -e "$(TEXT "Cmdline:\n")\033[1;36m${CMDLINE_LINE}\033[0m"
|
||||
CMDLINE_LINE="$(echo "${CMDLINE_LINE}" | sed 's/^ //')" # Remove leading space
|
||||
printf "%s:\n\033[1;36m%s\033[0m\n" "$(TEXT "Cmdline")" "${CMDLINE_LINE}"
|
||||
|
||||
# Check if user wants to modify at this stage
|
||||
function _bootwait() {
|
||||
BOOTWAIT="$(readConfigKey "bootwait" "${USER_CONFIG_FILE}")"
|
||||
[ -z "${BOOTWAIT}" ] && BOOTWAIT=10
|
||||
busybox w 2>/dev/null | awk '{print $1" "$2" "$4" "$5" "$6}' >WB
|
||||
MSG=""
|
||||
while [ ${BOOTWAIT} -gt 0 ]; do
|
||||
sleep 1
|
||||
BOOTWAIT=$((BOOTWAIT - 1))
|
||||
MSG="$(printf "\033[1;33m$(TEXT "%2ds (Changing access(ssh/web) status will interrupt boot)")\033[0m" "${BOOTWAIT}")"
|
||||
printf "\r${MSG}"
|
||||
busybox w 2>/dev/null | awk '{print $1" "$2" "$4" "$5" "$6}' >WC
|
||||
if ! diff WB WC >/dev/null 2>&1; then
|
||||
printf "\r%$((${#MSG} * 2))s\n" " "
|
||||
printf "\r\033[1;33m%s\033[0m\n" "$(TEXT "Access(ssh/web) status has changed and booting is interrupted.")"
|
||||
rm -f WB WC
|
||||
return 1
|
||||
fi
|
||||
if ! ps -p "${PPID}" -o cmd | grep -q "menu.sh" && [ -f "${TMP_PATH}/menu.lock" ]; then
|
||||
printf "\r%$((${#MSG} * 2))s\n" " "
|
||||
printf "\r\033[1;33m%s\033[0m\n" "$(TEXT "Menu opened and booting is interrupted.")"
|
||||
rm -f WB WC
|
||||
return 1
|
||||
fi
|
||||
done
|
||||
rm -f WB WC
|
||||
printf "\r%$((${#MSG} * 2))s\n" " "
|
||||
return 0
|
||||
}
|
||||
|
||||
DIRECT="$(readConfigKey "directboot" "${USER_CONFIG_FILE}")"
|
||||
if [ "${DIRECT}" = "true" ]; then
|
||||
CMDLINE_DIRECT=$(echo ${CMDLINE_LINE} | sed 's/>/\\\\>/g') # Escape special chars
|
||||
grub-editenv ${GRUB_PATH}/grubenv set dsm_cmdline="${CMDLINE_DIRECT}"
|
||||
echo -e "\033[1;33m$(TEXT "Reboot to boot directly in DSM")\033[0m"
|
||||
grub-editenv ${GRUB_PATH}/grubenv set next_entry="direct"
|
||||
reboot
|
||||
if [ "${DIRECT}" = "true" ] || echo "parallels xen" | grep -qw "${MEV:-physical}"; then
|
||||
# grubenv file limit is 1024 bytes.
|
||||
grub-editenv "${USER_RSYSENVFILE}" create
|
||||
grub-editenv "${USER_RSYSENVFILE}" set rr_version="${WTITLE}"
|
||||
grub-editenv "${USER_RSYSENVFILE}" set rr_booting="${BTITLE}"
|
||||
grub-editenv "${USER_RSYSENVFILE}" set dsm_model="${MODEL}(${PLATFORM})"
|
||||
grub-editenv "${USER_RSYSENVFILE}" set dsm_version="${PRODUCTVER}(${BUILDNUM}$([ ${SMALLNUM:-0} -ne 0 ] && echo "u${SMALLNUM}"))"
|
||||
grub-editenv "${USER_RSYSENVFILE}" set dsm_kernel="${KERNEL}"
|
||||
grub-editenv "${USER_RSYSENVFILE}" set dsm_lkm="${LKM}"
|
||||
grub-editenv "${USER_RSYSENVFILE}" set sys_mev="${MEV:-physical}"
|
||||
grub-editenv "${USER_RSYSENVFILE}" set sys_dmi="${DMI}"
|
||||
grub-editenv "${USER_RSYSENVFILE}" set sys_cpu="${CPU}"
|
||||
grub-editenv "${USER_RSYSENVFILE}" set sys_mem="${MEM}"
|
||||
|
||||
CMDLINE_DIRECT=$(echo "${CMDLINE_LINE}" | sed 's/>/\\\\>/g') # Escape special chars
|
||||
grub-editenv "${USER_GRUBENVFILE}" set dsm_cmdline="${CMDLINE_DIRECT}"
|
||||
grub-editenv "${USER_GRUBENVFILE}" set next_entry="direct"
|
||||
|
||||
_bootwait || exit 0
|
||||
|
||||
printf "\033[1;33m%s\033[0m\n" "$(TEXT "Reboot to boot directly in DSM")"
|
||||
[ ! -f "/.dockerenv" ] && reboot
|
||||
exit 0
|
||||
else
|
||||
ETHX=($(ls /sys/class/net/ | grep eth)) # real network cards list
|
||||
echo "$(printf "$(TEXT "Detected %s network cards.")" "${#ETHX[@]}")"
|
||||
echo "$(TEXT "Checking Connect.")"
|
||||
rm -f "${USER_RSYSENVFILE}" 2>/dev/null || true
|
||||
grub-editenv "${USER_GRUBENVFILE}" unset dsm_cmdline
|
||||
grub-editenv "${USER_GRUBENVFILE}" unset next_entry
|
||||
ETHX="$(find /sys/class/net/ -mindepth 1 -maxdepth 1 ! -name lo -exec basename {} \; | sort)"
|
||||
printf "$(TEXT "Detected %s network cards.\n")" "$(echo "${ETHX}" | wc -w)"
|
||||
printf "$(TEXT "Checking Connect.")"
|
||||
COUNT=0
|
||||
BOOTIPWAIT="$(readConfigKey "bootipwait" "${USER_CONFIG_FILE}")"
|
||||
[ -z "${BOOTIPWAIT}" ] && BOOTIPWAIT=10
|
||||
BOOTIPWAIT=${BOOTIPWAIT:-10}
|
||||
while [ ${COUNT} -lt $((${BOOTIPWAIT} + 32)) ]; do
|
||||
hasConnect="false"
|
||||
for N in $(seq 0 $(expr ${#ETHX[@]} - 1)); do
|
||||
if ethtool ${ETHX[${N}]} | grep 'Link detected' | grep -q 'yes'; then
|
||||
echo -en "${ETHX[${N}]} "
|
||||
hasConnect="true"
|
||||
MSG=""
|
||||
for N in ${ETHX}; do
|
||||
if [ "1" = "$(cat "/sys/class/net/${N}/carrier" 2>/dev/null)" ]; then
|
||||
MSG+="${N} "
|
||||
fi
|
||||
done
|
||||
if [ ${hasConnect} = "true" ]; then
|
||||
echo -en "connected.\n"
|
||||
if [ -n "${MSG}" ]; then
|
||||
printf "\r%s%s \n" "${MSG}" "$(TEXT "connected.")"
|
||||
break
|
||||
fi
|
||||
COUNT=$((${COUNT} + 1))
|
||||
echo -n "."
|
||||
COUNT=$((COUNT + 1))
|
||||
printf "."
|
||||
sleep 1
|
||||
done
|
||||
echo "$(TEXT "Waiting IP.(For reference only)")"
|
||||
for N in $(seq 0 $(expr ${#ETHX[@]} - 1)); do
|
||||
if [ ! -f "/.dockerenv" ]; then
|
||||
[ ! -f /var/run/dhcpcd/pid ] && /etc/init.d/S41dhcpcd restart >/dev/null 2>&1 || true
|
||||
fi
|
||||
printf "$(TEXT "Waiting IP.\n")"
|
||||
for N in ${ETHX}; do
|
||||
COUNT=0
|
||||
DRIVER=$(ls -ld /sys/class/net/${ETHX[${N}]}/device/driver 2>/dev/null | awk -F '/' '{print $NF}')
|
||||
echo -en "${ETHX[${N}]}(${DRIVER}): "
|
||||
DRIVER="$(basename "$(realpath "/sys/class/net/${N}/device/driver" 2>/dev/null)" 2>/dev/null)"
|
||||
MAC="$(cat "/sys/class/net/${N}/address" 2>/dev/null)" || MAC="00:00:00:00:00:00"
|
||||
printf "%s(%s): " "${N}" "${MAC}@${DRIVER}"
|
||||
while true; do
|
||||
if ! ip link show ${ETHX[${N}]} | grep -q 'UP'; then
|
||||
echo -en "\r${ETHX[${N}]}(${DRIVER}): $(TEXT "DOWN")\n"
|
||||
if false && [ ! "${N::3}" = "eth" ]; then
|
||||
printf "\r%s(%s): %s\n" "${N}" "${MAC}@${DRIVER}" "$(TEXT "IGNORE (Does not support non-wired network card.)")"
|
||||
break
|
||||
fi
|
||||
if ethtool ${ETHX[${N}]} | grep 'Link detected' | grep -q 'no'; then
|
||||
echo -en "\r${ETHX[${N}]}(${DRIVER}): $(TEXT "NOT CONNECTED")\n"
|
||||
if [ -z "$(cat "/sys/class/net/${N}/carrier" 2>/dev/null)" ]; then
|
||||
printf "\r%s(%s): %s\n" "${N}" "${MAC}@${DRIVER}" "$(TEXT "DOWN")"
|
||||
break
|
||||
fi
|
||||
if [ "0" = "$(cat "/sys/class/net/${N}/carrier" 2>/dev/null)" ]; then
|
||||
printf "\r%s(%s): %s\n" "${N}" "${MAC}@${DRIVER}" "$(TEXT "NOT CONNECTED")"
|
||||
break
|
||||
fi
|
||||
if [ ${COUNT} -eq ${BOOTIPWAIT} ]; then # Under normal circumstances, no errors should occur here.
|
||||
echo -en "\r${ETHX[${N}]}(${DRIVER}): $(TEXT "TIMEOUT (Please check the IP on the router.)")\n"
|
||||
printf "\r%s(%s): %s\n" "${N}" "${MAC}@${DRIVER}" "$(TEXT "TIMEOUT (Please check the IP on the router.)")"
|
||||
break
|
||||
fi
|
||||
COUNT=$((${COUNT} + 1))
|
||||
IP="$(getIP ${ETHX[${N}]})"
|
||||
COUNT=$((COUNT + 1))
|
||||
IP="$(getIP "${N}")"
|
||||
if [ -n "${IP}" ]; then
|
||||
echo -en "\r${ETHX[${N}]}(${DRIVER}): $(printf "$(TEXT "Access \033[1;34mhttp://%s:5000\033[0m to connect the DSM via web.")" "${IP}")\n"
|
||||
if echo "${IP}" | grep -q "^169\.254\."; then
|
||||
printf "\r%s(%s): %s\n" "${N}" "${MAC}@${DRIVER}" "$(TEXT "LINK LOCAL (No DHCP server detected.)")"
|
||||
else
|
||||
printf "\r%s(%s): %s\n" "${N}" "${MAC}@${DRIVER}" "$(printf "$(TEXT "Access \033[1;34mhttp://%s:5000\033[0m to connect the DSM via web.")" "${IP}")"
|
||||
fi
|
||||
break
|
||||
fi
|
||||
echo -n "."
|
||||
printf "."
|
||||
sleep 1
|
||||
done
|
||||
done
|
||||
BOOTWAIT="$(readConfigKey "bootwait" "${USER_CONFIG_FILE}")"
|
||||
[ -z "${BOOTWAIT}" ] && BOOTWAIT=10
|
||||
w | awk '{print $1" "$2" "$4" "$5" "$6}' >WB
|
||||
MSG=""
|
||||
while test ${BOOTWAIT} -ge 0; do
|
||||
MSG="$(printf "\033[1;33m$(TEXT "%2ds (Changing access(ssh/web) status will interrupt boot)")\033[0m" "${BOOTWAIT}")"
|
||||
echo -en "\r${MSG}"
|
||||
w | awk '{print $1" "$2" "$4" "$5" "$6}' >WC
|
||||
if ! diff WB WC >/dev/null 2>&1; then
|
||||
echo -en "\r\033[1;33m$(TEXT "access(ssh/web) status has changed and booting is interrupted.")\033[0m\n"
|
||||
rm -f WB WC
|
||||
exit 0
|
||||
fi
|
||||
sleep 1
|
||||
BOOTWAIT=$((BOOTWAIT - 1))
|
||||
done
|
||||
rm -f WB WC
|
||||
echo -en "\r$(printf "%$((${#MSG} * 2))s" " ")\n"
|
||||
|
||||
echo -e "\033[1;37m$(TEXT "Loading DSM kernel...")\033[0m"
|
||||
_bootwait || exit 0
|
||||
|
||||
[ -n "$(cat "${ADD_TIPS_FILE}" 2>/dev/null)" ] && printf "$(TEXT "%s\n")" "$(cat "${ADD_TIPS_FILE}" 2>/dev/null)"
|
||||
printf "\033[1;37m%s\033[0m\n" "$(TEXT "Loading DSM kernel ...")"
|
||||
|
||||
DSMLOGO="$(readConfigKey "dsmlogo" "${USER_CONFIG_FILE}")"
|
||||
if [ "${DSMLOGO}" = "true" -a -c "/dev/fb0" ]; then
|
||||
if [ "${DSMLOGO}" = "true" ] && [ -c "/dev/fb0" ]; then
|
||||
IP="$(getIP)"
|
||||
echo "${IP}" | grep -q "^169\.254\." && IP=""
|
||||
[ -n "${IP}" ] && URL="http://${IP}:5000" || URL="http://find.synology.com/"
|
||||
python ${WORK_PATH}/include/functions.py makeqr -d "${URL}" -l "br" -o "${TMP_PATH}/qrcode.png"
|
||||
[ -f "${TMP_PATH}/qrcode.png" ] && echo | fbv -acufi "${TMP_PATH}/qrcode.png" >/dev/null 2>/dev/null || true
|
||||
python3 "${WORK_PATH}/include/functions.py" "makeqr" -d "${URL}" -l "7" -o "${TMP_PATH}/qrcode_boot.png"
|
||||
[ -f "${TMP_PATH}/qrcode_boot.png" ] && echo | fbv -acufi "${TMP_PATH}/qrcode_boot.png" >/dev/null 2>&1 || true
|
||||
fi
|
||||
|
||||
# Executes DSM kernel via KEXEC
|
||||
KVER=$(readModelKey "${MODEL}" "productvers.[${PRODUCTVER}].kver")
|
||||
if [ "${KVER:0:1}" = "3" -a ${EFI} -eq 1 ]; then
|
||||
echo -e "\033[1;33m$(TEXT "Warning, running kexec with --noefi param, strange things will happen!!")\033[0m"
|
||||
kexec --noefi -l "${MOD_ZIMAGE_FILE}" --initrd "${MOD_RDGZ_FILE}" --command-line="${CMDLINE_LINE}" >"${LOG_FILE}" 2>&1 || dieLog
|
||||
else
|
||||
kexec -l "${MOD_ZIMAGE_FILE}" --initrd "${MOD_RDGZ_FILE}" --command-line="${CMDLINE_LINE}" >"${LOG_FILE}" 2>&1 || dieLog
|
||||
KEXECARGS="-a"
|
||||
if [ "$(echo "${KVER:-4}" | cut -d'.' -f1)" -lt 4 ] && [ ${EFI} -eq 1 ]; then
|
||||
printf "\033[1;33m%s\033[0m\n" "$(TEXT "Warning, running kexec with --noefi param, strange things will happen!!")"
|
||||
KEXECARGS+=" --noefi"
|
||||
fi
|
||||
echo -e "\033[1;37m$(TEXT "Booting...")\033[0m"
|
||||
for T in $(w | grep -v "TTY" | awk -F' ' '{print $2}'); do
|
||||
echo -e "\n\033[1;43m$(TEXT "[This interface will not be operational. Please wait a few minutes.\nFind DSM via http://find.synology.com/ or Synology Assistant and connect.]")\033[0m\n" >"/dev/${T}" 2>/dev/null || true
|
||||
kexec ${KEXECARGS} -l "${MOD_ZIMAGE_FILE}" --initrd "${MOD_RDGZ_FILE}" --command-line="${CMDLINE_LINE} kexecboot" >"${LOG_FILE}" 2>&1 || dieLog
|
||||
|
||||
printf "\033[1;37m%s\033[0m\n" "$(TEXT "Booting ...")"
|
||||
# show warning message
|
||||
for T in $(busybox w 2>/dev/null | grep -v 'TTY' | awk '{print $2}'); do
|
||||
if [ -w "/dev/${T}" ]; then
|
||||
echo -e "\n\033[1;43m$(TEXT "Interface not operational. Wait a few minutes.\nFind DSM via http://find.synology.com/ or Synology Assistant.")\033[0m\n" >"/dev/${T}" 2>/dev/null || true
|
||||
fi
|
||||
done
|
||||
KERNELWAY="$(readConfigKey "kernelway" "${USER_CONFIG_FILE}")"
|
||||
[ "${KERNELWAY}" = "kexec" ] && kexec -f -e || poweroff
|
||||
|
||||
if [ ! -f "/.dockerenv" ]; then
|
||||
# Disconnect wireless
|
||||
lsmod | grep -q iwlwifi && for F in /sys/class/net/wlan*; do
|
||||
[ ! -e "${F}" ] && continue
|
||||
connectwlanif "$(basename "${F}")" 0 2>/dev/null
|
||||
done
|
||||
# Unload all network drivers
|
||||
# for F in $(realpath /sys/class/net/*/device/driver); do [ ! -e "${F}" ] && continue; rmmod -f "$(basename ${F})" 2>/dev/null || true; done
|
||||
|
||||
# Unload all graphics drivers
|
||||
# for D in $(lsmod | grep -E '^(nouveau|amdgpu|radeon|i915)' | awk '{print $1}'); do rmmod -f "${D}" 2>/dev/null || true; done
|
||||
# for I in $(find /sys/devices -name uevent -exec bash -c 'cat {} 2>/dev/null | grep -Eq "PCI_CLASS=0?30[0|1|2]00" && dirname {}' \;); do
|
||||
# [ -e ${I}/reset ] && cat "${I}/vendor" >/dev/null | grep -iq 0x10de && echo 1 >${I}/reset || true # Proc open nvidia driver when booting
|
||||
# done
|
||||
|
||||
# Reboot
|
||||
KERNELWAY="$(readConfigKey "kernelway" "${USER_CONFIG_FILE}")"
|
||||
[ "${KERNELWAY}" = "kexec" ] && kexec -e || poweroff
|
||||
fi
|
||||
exit 0
|
||||
fi
|
||||
|
||||
@ -1,16 +1,22 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Copyright (C) 2022 Ing <https://github.com/wjz304>
|
||||
#
|
||||
# This is free software, licensed under the MIT License.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
read_u8() {
|
||||
dd if=$1 bs=1 skip=$(($2)) count=1 2>/dev/null | od -An -tu1 | grep -Eo '[0-9]+'
|
||||
dd if="${1}" bs=1 skip="$((${2}))" count=1 2>/dev/null | od -An -tu1 | grep -Eo '[0-9]+'
|
||||
}
|
||||
read_u32() {
|
||||
dd if=$1 bs=1 skip=$(($2)) count=4 2>/dev/null | od -An -tu4 | grep -Eo '[0-9]+'
|
||||
dd if="${1}" bs=1 skip="$((${2}))" count=4 2>/dev/null | od -An -tu4 | grep -Eo '[0-9]+'
|
||||
}
|
||||
|
||||
set -x
|
||||
setup_size=$(read_u8 $1 0x1f1)
|
||||
payload_offset=$(read_u32 $1 0x248)
|
||||
payload_length=$(read_u32 $1 0x24c)
|
||||
inner_pos=$((($setup_size + 1) * 512))
|
||||
setup_size=$(read_u8 "${1}" 0x1f1)
|
||||
payload_offset=$(read_u32 "${1}" 0x248)
|
||||
payload_length=$(read_u32 "${1}" 0x24c)
|
||||
inner_pos=$(((setup_size + 1) * 512))
|
||||
|
||||
tail -c+$(($inner_pos + 1)) $1 | tail -c+$(($payload_offset + 1)) | head -c $(($payload_length)) | head -c $(($payload_length - 4)) | unlzma >$2
|
||||
tail -c+$((inner_pos + 1)) "${1}" | tail -c+$((payload_offset + 1)) | head -c "${payload_length}" | head -c $((payload_length - 4)) | unlzma >"${2}"
|
||||
|
||||
@ -1,42 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Calculate the amount of space needed to run the kernel, including room for
|
||||
# the .bss and .brk sections.
|
||||
#
|
||||
# Usage:
|
||||
# objdump -h a.out | sh calc_run_size.sh
|
||||
|
||||
NUM='\([0-9a-fA-F]*[ \t]*\)'
|
||||
OUT=$(sed -n 's/^[ \t0-9]*.b[sr][sk][ \t]*'"${NUM}${NUM}${NUM}${NUM}"'.*/\1\4/p')
|
||||
if [ -z "$OUT" ]; then
|
||||
echo "Never found .bss or .brk file offset" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
OUT=$(echo ${OUT# })
|
||||
sizeA=$(printf "%d" 0x${OUT%% *})
|
||||
OUT=${OUT#* }
|
||||
offsetA=$(printf "%d" 0x${OUT%% *})
|
||||
OUT=${OUT#* }
|
||||
sizeB=$(printf "%d" 0x${OUT%% *})
|
||||
OUT=${OUT#* }
|
||||
offsetB=$(printf "%d" 0x${OUT%% *})
|
||||
|
||||
run_size=$((${offsetA} + ${sizeA} + ${sizeB}))
|
||||
|
||||
# BFD linker shows the same file offset in ELF.
|
||||
if [ "${offsetA}" -ne "${offsetB}" ]; then
|
||||
# Gold linker shows them as consecutive.
|
||||
endB=$((${offsetB} + ${sizeB}))
|
||||
if [ "$endB" != "$run_size" ]; then
|
||||
printf "sizeA: 0x%x\n" ${sizeA} >&2
|
||||
printf "offsetA: 0x%x\n" ${offsetA} >&2
|
||||
printf "sizeB: 0x%x\n" ${sizeB} >&2
|
||||
printf "offsetB: 0x%x\n" ${offsetB} >&2
|
||||
echo ".bss and .brk are non-contiguous" >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
printf "%d\n" ${run_size}
|
||||
exit 0
|
||||
@ -1 +0,0 @@
|
||||
kmod
|
||||
60
files/initrd/opt/rr/extract-vmlinux
Executable file
60
files/initrd/opt/rr/extract-vmlinux
Executable file
@ -0,0 +1,60 @@
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
# ----------------------------------------------------------------------
|
||||
# extract-vmlinux - Extract uncompressed vmlinux from a kernel image
|
||||
#
|
||||
# Inspired from extract-ikconfig
|
||||
# (c) 2009,2010 Dick Streefland <dick@streefland.net>
|
||||
#
|
||||
# (c) 2011 Corentin Chary <corentin.chary@gmail.com>
|
||||
#
|
||||
# ----------------------------------------------------------------------
|
||||
|
||||
check_vmlinux() {
|
||||
# Use readelf to check if it's a valid ELF
|
||||
# TODO: find a better to way to check that it's really vmlinux
|
||||
# and not just an elf
|
||||
readelf -h $1 >/dev/null 2>&1 || return 1
|
||||
|
||||
cat $1
|
||||
exit 0
|
||||
}
|
||||
|
||||
try_decompress() {
|
||||
# The obscure use of the "tr" filter is to work around older versions of
|
||||
# "grep" that report the byte offset of the line instead of the pattern.
|
||||
|
||||
# Try to find the header ($1) and decompress from here
|
||||
for pos in $(tr "$1\n$2" "\n$2=" <"$img" | grep -abo "^$2"); do
|
||||
pos=${pos%%:*}
|
||||
tail -c+$pos "$img" | $3 >$tmp 2>/dev/null
|
||||
check_vmlinux $tmp
|
||||
done
|
||||
}
|
||||
|
||||
# Check invocation:
|
||||
me=${0##*/}
|
||||
img=$1
|
||||
if [ $# -ne 1 ] || [ ! -s "$img" ]; then
|
||||
echo "Usage: $me <kernel-image>" >&2
|
||||
exit 2
|
||||
fi
|
||||
|
||||
# Prepare temp files:
|
||||
tmp=$(mktemp /tmp/vmlinux-XXX)
|
||||
trap "rm -f $tmp" 0
|
||||
|
||||
# That didn't work, so retry after decompression.
|
||||
try_decompress '\037\213\010' xy gunzip
|
||||
try_decompress '\3757zXZ\000' abcde unxz
|
||||
try_decompress 'BZh' xy bunzip2
|
||||
try_decompress '\135\0\0\0' xxx unlzma
|
||||
try_decompress '\211\114\132' xy 'lzop -d'
|
||||
try_decompress '\002!L\030' xxx 'lz4 -d'
|
||||
try_decompress '(\265/\375' xxx unzstd
|
||||
|
||||
# Finally check for uncompressed images or objects:
|
||||
check_vmlinux $img
|
||||
|
||||
# Bail out:
|
||||
echo "$me: Cannot find vmlinux." >&2
|
||||
BIN
files/initrd/opt/rr/grub.img.gz
Normal file
BIN
files/initrd/opt/rr/grub.img.gz
Normal file
Binary file not shown.
34
files/initrd/opt/rr/helper.sh
Executable file
34
files/initrd/opt/rr/helper.sh
Executable file
@ -0,0 +1,34 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Copyright (C) 2022 Ing <https://github.com/wjz304>
|
||||
#
|
||||
# This is free software, licensed under the MIT License.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
# shellcheck disable=SC2059
|
||||
|
||||
[ -z "${WORK_PATH}" ] || [ ! -d "${WORK_PATH}/include" ] && WORK_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
|
||||
|
||||
. "${WORK_PATH}/include/functions.sh"
|
||||
|
||||
# lock
|
||||
exec 911>"${TMP_PATH}/helper.lock"
|
||||
flock -n 911 || {
|
||||
MSG="$(TEXT "Another instance is already running.")"
|
||||
dialog --colors --aspect 50 --title "$(TEXT "Online Assistance")" --msgbox "${MSG}" 0 0
|
||||
exit 1
|
||||
}
|
||||
trap 'flock -u 911; rm -f "${TMP_PATH}/helper.lock"' EXIT INT TERM HUP
|
||||
|
||||
{
|
||||
printf "$(TEXT "Closing this window or press 'ctrl + c' to exit the assistance.")\n"
|
||||
printf "$(TEXT "Please give the following link to the helper. (Click to open and copy)")\n"
|
||||
printf " 👇\n"
|
||||
sshx -q --name "RR-Helper" 2>&1
|
||||
[ $? -ne 0 ] && while true; do sleep 1; done
|
||||
} | dialog --colors --aspect 50 --title "$(TEXT "Online Assistance")" --progressbox "$(TEXT "Notice: Please keep this window open.")" 20 100 2>&1
|
||||
|
||||
clear
|
||||
echo -e "$(TEXT "Call \033[1;32mmenu.sh\033[0m to return to menu")"
|
||||
"${WORK_PATH}/init.sh"
|
||||
390
files/initrd/opt/rr/i915ids
Normal file
390
files/initrd/opt/rr/i915ids
Normal file
@ -0,0 +1,390 @@
|
||||
# INTEL_I810_IDS
|
||||
80867121
|
||||
80867123
|
||||
80867125
|
||||
# INTEL_I815_IDS
|
||||
80861132
|
||||
# INTEL_I830_IDS
|
||||
80863577
|
||||
# INTEL_I845G_IDS
|
||||
80862562
|
||||
# INTEL_I85X_IDS
|
||||
80863582
|
||||
8086358e
|
||||
# INTEL_I865G_IDS
|
||||
80862572
|
||||
# INTEL_I915G_IDS
|
||||
80862582
|
||||
8086258a
|
||||
# INTEL_I915GM_IDS
|
||||
80862592
|
||||
# INTEL_I945G_IDS
|
||||
80862772
|
||||
# INTEL_I945GM_IDS
|
||||
808627a2
|
||||
808627ae
|
||||
# INTEL_I965G_IDS
|
||||
80862972
|
||||
80862982
|
||||
80862992
|
||||
808629a2
|
||||
# INTEL_G33_IDS
|
||||
808629b2
|
||||
808629c2
|
||||
808629d2
|
||||
# INTEL_I965GM_IDS
|
||||
80862a02
|
||||
80862a12
|
||||
# INTEL_GM45_IDS
|
||||
80862a42
|
||||
# INTEL_G45_IDS
|
||||
80862e02
|
||||
80862e12
|
||||
80862e22
|
||||
80862e32
|
||||
80862e42
|
||||
80862e92
|
||||
# INTEL_PINEVIEW_G_IDS
|
||||
8086a001
|
||||
# INTEL_PINEVIEW_M_IDS
|
||||
8086a011
|
||||
# INTEL_IRONLAKE_D_IDS
|
||||
80860042
|
||||
# INTEL_IRONLAKE_M_IDS
|
||||
80860046
|
||||
# INTEL_SNB_D_GT1_IDS
|
||||
80860102
|
||||
8086010A
|
||||
# INTEL_SNB_D_GT2_IDS
|
||||
80860112
|
||||
80860122
|
||||
# INTEL_SNB_M_GT1_IDS
|
||||
80860106
|
||||
# INTEL_SNB_M_GT2_IDS
|
||||
80860116
|
||||
80860126
|
||||
# INTEL_IVB_M_GT1_IDS
|
||||
80860156
|
||||
# INTEL_IVB_M_GT2_IDS
|
||||
80860166
|
||||
# INTEL_IVB_D_GT1_IDS
|
||||
80860152
|
||||
8086015a
|
||||
# INTEL_IVB_D_GT2_IDS
|
||||
80860162
|
||||
8086016a
|
||||
# INTEL_HSW_ULT_GT1_IDS
|
||||
80860A02
|
||||
80860A06
|
||||
80860A0A
|
||||
80860A0B
|
||||
# INTEL_HSW_ULX_GT1_IDS
|
||||
80860A0E
|
||||
# INTEL_HSW_GT1_IDS
|
||||
80860402
|
||||
80860406
|
||||
8086040A
|
||||
8086040B
|
||||
8086040E
|
||||
80860C02
|
||||
80860C06
|
||||
80860C0A
|
||||
80860C0B
|
||||
80860C0E
|
||||
80860D02
|
||||
80860D06
|
||||
80860D0A
|
||||
80860D0B
|
||||
80860D0E
|
||||
# INTEL_HSW_ULT_GT2_IDS
|
||||
80860A12
|
||||
80860A16
|
||||
80860A1A
|
||||
80860A1B
|
||||
# INTEL_HSW_ULX_GT2_IDS
|
||||
80860A1E
|
||||
# INTEL_HSW_GT2_IDS
|
||||
80860412
|
||||
80860416
|
||||
8086041A
|
||||
8086041B
|
||||
8086041E
|
||||
80860C12
|
||||
80860C16
|
||||
80860C1A
|
||||
80860C1B
|
||||
80860C1E
|
||||
80860D12
|
||||
80860D16
|
||||
80860D1A
|
||||
80860D1B
|
||||
80860D1E
|
||||
# INTEL_HSW_ULT_GT3_IDS
|
||||
80860A22
|
||||
80860A26
|
||||
80860A2A
|
||||
80860A2B
|
||||
80860A2E
|
||||
# INTEL_HSW_GT3_IDS
|
||||
80860422
|
||||
80860426
|
||||
8086042A
|
||||
8086042B
|
||||
8086042E
|
||||
80860C22
|
||||
80860C26
|
||||
80860C2A
|
||||
80860C2B
|
||||
80860C2E
|
||||
80860D22
|
||||
80860D26
|
||||
80860D2A
|
||||
80860D2B
|
||||
80860D2E
|
||||
# INTEL_VLV_IDS
|
||||
80860f30
|
||||
80860f31
|
||||
80860f32
|
||||
80860f33
|
||||
# INTEL_BDW_ULT_GT1_IDS
|
||||
80861606
|
||||
8086160B
|
||||
# INTEL_BDW_ULX_GT1_IDS
|
||||
8086160E
|
||||
# INTEL_BDW_GT1_IDS
|
||||
80861602
|
||||
8086160A
|
||||
8086160D
|
||||
# INTEL_BDW_ULT_GT2_IDS
|
||||
80861616
|
||||
8086161B
|
||||
# INTEL_BDW_ULX_GT2_IDS
|
||||
8086161E
|
||||
# INTEL_BDW_GT2_IDS
|
||||
80861612
|
||||
8086161A
|
||||
8086161D
|
||||
# INTEL_BDW_ULT_GT3_IDS
|
||||
80861626
|
||||
8086162B
|
||||
# INTEL_BDW_ULX_GT3_IDS
|
||||
8086162E
|
||||
# INTEL_BDW_GT3_IDS
|
||||
80861622
|
||||
8086162A
|
||||
8086162D
|
||||
# INTEL_BDW_ULT_RSVD_IDS
|
||||
80861636
|
||||
8086163B
|
||||
# INTEL_BDW_ULX_RSVD_IDS
|
||||
8086163E
|
||||
# INTEL_BDW_RSVD_IDS
|
||||
80861632
|
||||
8086163A
|
||||
8086163D
|
||||
# INTEL_CHV_IDS
|
||||
808622b0
|
||||
808622b1
|
||||
808622b2
|
||||
808622b3
|
||||
# INTEL_SKL_ULT_GT1_IDS
|
||||
80861906
|
||||
80861913~
|
||||
# INTEL_SKL_ULX_GT1_IDS
|
||||
8086190E
|
||||
80861915~
|
||||
# INTEL_SKL_GT1_IDS
|
||||
80861902
|
||||
8086190A
|
||||
8086190B
|
||||
80861917~
|
||||
# INTEL_SKL_ULT_GT2_IDS
|
||||
80861916
|
||||
80861921
|
||||
# INTEL_SKL_ULX_GT2_IDS
|
||||
8086191E
|
||||
# INTEL_SKL_GT2_IDS
|
||||
80861912
|
||||
8086191A
|
||||
8086191B
|
||||
8086191D
|
||||
# INTEL_SKL_ULT_GT3_IDS
|
||||
80861923
|
||||
80861926
|
||||
80861927
|
||||
# INTEL_SKL_GT3_IDS
|
||||
8086192A
|
||||
8086192B
|
||||
8086192D
|
||||
# INTEL_SKL_GT4_IDS
|
||||
80861932
|
||||
8086193A
|
||||
8086193B
|
||||
8086193D
|
||||
# INTEL_BXT_IDS
|
||||
80860A84
|
||||
80861A84
|
||||
80861A85
|
||||
80865A84
|
||||
80865A85
|
||||
# INTEL_GLK_IDS
|
||||
80863184
|
||||
80863185
|
||||
# INTEL_KBL_ULT_GT1_IDS
|
||||
80865906
|
||||
80865913
|
||||
# INTEL_KBL_ULX_GT1_IDS
|
||||
8086590E
|
||||
80865915
|
||||
# INTEL_KBL_GT1_IDS
|
||||
80865902
|
||||
80865908
|
||||
8086590A
|
||||
8086590B
|
||||
# INTEL_KBL_ULT_GT2_IDS
|
||||
80865916
|
||||
80865921
|
||||
# INTEL_KBL_ULX_GT2_IDS
|
||||
8086591E
|
||||
# INTEL_KBL_GT2_IDS
|
||||
80865912
|
||||
80865917
|
||||
8086591A
|
||||
8086591B
|
||||
8086591D
|
||||
# INTEL_KBL_ULT_GT3_IDS
|
||||
80865926
|
||||
# INTEL_KBL_GT3_IDS
|
||||
80865923
|
||||
80865927
|
||||
# INTEL_KBL_GT4_IDS
|
||||
8086593B
|
||||
# INTEL_AML_KBL_GT2_IDS
|
||||
8086591C
|
||||
808687C0
|
||||
# INTEL_AML_CFL_GT2_IDS
|
||||
808687CA
|
||||
# INTEL_CML_GT1_IDS
|
||||
80869BA2
|
||||
80869BA4
|
||||
80869BA5
|
||||
80869BA8
|
||||
# INTEL_CML_U_GT1_IDS
|
||||
80869B21
|
||||
80869BAA
|
||||
80869BAC
|
||||
# INTEL_CML_GT2_IDS
|
||||
80869BC2
|
||||
80869BC4
|
||||
80869BC5
|
||||
80869BC6
|
||||
80869BC8
|
||||
80869BE6
|
||||
80869BF6
|
||||
# INTEL_CML_U_GT2_IDS
|
||||
80869B41
|
||||
80869BCA
|
||||
80869BCC
|
||||
# INTEL_CFL_S_GT1_IDS
|
||||
80863E90
|
||||
80863E93
|
||||
80863E99
|
||||
# INTEL_CFL_S_GT2_IDS
|
||||
80863E91
|
||||
80863E92
|
||||
80863E96
|
||||
80863E98
|
||||
80863E9A
|
||||
# INTEL_CFL_H_GT1_IDS
|
||||
80863E9C
|
||||
# INTEL_CFL_H_GT2_IDS
|
||||
80863E94
|
||||
80863E9B
|
||||
# INTEL_CFL_U_GT2_IDS
|
||||
80863EA9
|
||||
# INTEL_CFL_U_GT3_IDS
|
||||
80863EA5
|
||||
80863EA6
|
||||
80863EA7
|
||||
80863EA8
|
||||
# INTEL_WHL_U_GT1_IDS
|
||||
80863EA1
|
||||
80863EA4
|
||||
# INTEL_WHL_U_GT2_IDS
|
||||
80863EA0
|
||||
80863EA3
|
||||
# INTEL_WHL_U_GT3_IDS
|
||||
80863EA2
|
||||
# INTEL_CNL_PORT_F_IDS
|
||||
80865A44
|
||||
80865A4C
|
||||
80865A54
|
||||
80865A5C
|
||||
# INTEL_CNL_IDS
|
||||
80865A40
|
||||
80865A41
|
||||
80865A42
|
||||
80865A49
|
||||
80865A4A
|
||||
80865A50
|
||||
80865A51
|
||||
80865A52
|
||||
80865A59
|
||||
80865A5A
|
||||
# INTEL_ICL_PORT_F_IDS
|
||||
80868A50
|
||||
80868A52
|
||||
80868A53
|
||||
80868A54
|
||||
80868A56
|
||||
80868A57
|
||||
80868A58
|
||||
80868A59
|
||||
80868A5A
|
||||
80868A5B
|
||||
80868A5C
|
||||
80868A70
|
||||
80868A71
|
||||
# INTEL_ICL_11_IDS
|
||||
80868A51
|
||||
80868A5D
|
||||
# INTEL_EHL_IDS
|
||||
80864500~
|
||||
80864541
|
||||
80864551
|
||||
80864555
|
||||
80864557
|
||||
80864570~
|
||||
80864571
|
||||
# INTEL_JSL_IDS
|
||||
80864E51
|
||||
80864E55
|
||||
80864E57
|
||||
80864E61
|
||||
80864E71
|
||||
# INTEL_TGL_12_GT1_IDS
|
||||
80869A60
|
||||
80869A68
|
||||
80869A70
|
||||
# INTEL_TGL_12_GT2_IDS
|
||||
80869A40
|
||||
80869A49
|
||||
80869A59
|
||||
80869A78
|
||||
80869AC0
|
||||
80869AC9
|
||||
80869AD9
|
||||
80869AF8
|
||||
# INTEL_RKL_IDS
|
||||
80864C80
|
||||
80864C8A
|
||||
80864C8B
|
||||
80864C8C
|
||||
80864C90
|
||||
80864C9A
|
||||
# INTEL_DG1_IDS
|
||||
80864905
|
||||
80864906~
|
||||
80864907~
|
||||
80864908~
|
||||
80864909~
|
||||
@ -1,17 +1,53 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Copyright (C) 2022 Ing <https://github.com/wjz304>
|
||||
#
|
||||
# This is free software, licensed under the MIT License.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
# shellcheck disable=SC2115,SC2155
|
||||
|
||||
###############################################################################
|
||||
# Return list of available addons
|
||||
# 1 - Platform
|
||||
# 2 - Kernel Version
|
||||
function availableAddons() {
|
||||
while read D; do
|
||||
if [ -z "${1}" ] || [ -z "${2}" ]; then
|
||||
echo ""
|
||||
return 1
|
||||
fi
|
||||
while read -r D; do
|
||||
[ ! -f "${D}/manifest.yml" ] && continue
|
||||
ADDON=$(basename ${D})
|
||||
local ADDON=$(basename "${D}")
|
||||
checkAddonExist "${ADDON}" "${1}" "${2}" || continue
|
||||
SYSTEM=$(readConfigKey "system" "${D}/manifest.yml")
|
||||
local SYSTEM=$(readConfigKey "system" "${D}/manifest.yml")
|
||||
[ "${SYSTEM}" = "true" ] && continue
|
||||
DESC="$(readConfigKey "description" "${D}/manifest.yml")"
|
||||
echo -e "${ADDON}\t${DESC}"
|
||||
done < <(find "${ADDONS_PATH}" -maxdepth 1 -type d | sort)
|
||||
local LOCALE="${LC_ALL%%.*}"
|
||||
local DESC=""
|
||||
[ -z "${DESC}" ] && DESC="$(readConfigKey "description.${LOCALE:-"en_US"}" "${D}/manifest.yml")"
|
||||
[ -z "${DESC}" ] && DESC="$(readConfigKey "description.en_US" "${D}/manifest.yml")"
|
||||
[ -z "${DESC}" ] && DESC="$(readConfigKey "description" "${D}/manifest.yml")"
|
||||
|
||||
DESC="$(echo "${DESC}" | tr -d '\n\r\t\\' | sed "s/\"/'/g")"
|
||||
echo "${ADDON} \"${DESC:-"unknown"}\""
|
||||
done <<<"$(find "${ADDONS_PATH}" -maxdepth 1 -type d 2>/dev/null | sort)"
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# Read Addon Key
|
||||
# 1 - Addon
|
||||
# 2 - key
|
||||
function readAddonKey() {
|
||||
if [ -z "${1}" ] || [ -z "${2}" ]; then
|
||||
echo ""
|
||||
return 1
|
||||
fi
|
||||
if [ ! -f "${ADDONS_PATH}/${1}/manifest.yml" ]; then
|
||||
echo ""
|
||||
return 1
|
||||
fi
|
||||
readConfigKey "${2}" "${ADDONS_PATH}/${1}/manifest.yml"
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
@ -21,6 +57,9 @@ function availableAddons() {
|
||||
# 3 - Kernel Version
|
||||
# Return ERROR if not exists
|
||||
function checkAddonExist() {
|
||||
if [ -z "${1}" ] || [ -z "${2}" ] || [ -z "${3}" ]; then
|
||||
return 1 # ERROR
|
||||
fi
|
||||
# First check generic files
|
||||
if [ -f "${ADDONS_PATH}/${1}/all.tgz" ]; then
|
||||
return 0 # OK
|
||||
@ -35,25 +74,41 @@ function checkAddonExist() {
|
||||
###############################################################################
|
||||
# Install Addon into ramdisk image
|
||||
# 1 - Addon id
|
||||
# 2 - Platform
|
||||
# 3 - Kernel Version
|
||||
# Return ERROR if not installed
|
||||
function installAddon() {
|
||||
ADDON="${1}"
|
||||
if [ -z "${1}" ]; then
|
||||
echo "ERROR: installAddon: Addon not defined"
|
||||
return 1
|
||||
fi
|
||||
local ADDON="${1}"
|
||||
mkdir -p "${TMP_PATH}/${ADDON}"
|
||||
HAS_FILES=0
|
||||
local HAS_FILES=0
|
||||
# First check generic files
|
||||
if [ -f "${ADDONS_PATH}/${ADDON}/all.tgz" ]; then
|
||||
tar -zxf "${ADDONS_PATH}/${ADDON}/all.tgz" -C "${TMP_PATH}/${ADDON}"
|
||||
tar -zxf "${ADDONS_PATH}/${ADDON}/all.tgz" -C "${TMP_PATH}/${ADDON}" 2>"${LOG_FILE}"
|
||||
if [ $? -ne 0 ]; then
|
||||
return 1
|
||||
fi
|
||||
HAS_FILES=1
|
||||
fi
|
||||
# Now check specific platform files
|
||||
if [ -f "${ADDONS_PATH}/${ADDON}/${PLATFORM}-${KVER}.tgz" ]; then
|
||||
tar -zxf "${ADDONS_PATH}/${ADDON}/${PLATFORM}-${KVER}.tgz" -C "${TMP_PATH}/${ADDON}"
|
||||
if [ -f "${ADDONS_PATH}/${ADDON}/${2}-${3}.tgz" ]; then
|
||||
tar -zxf "${ADDONS_PATH}/${ADDON}/${2}-${3}.tgz" -C "${TMP_PATH}/${ADDON}" 2>"${LOG_FILE}"
|
||||
if [ $? -ne 0 ]; then
|
||||
return 1
|
||||
fi
|
||||
HAS_FILES=1
|
||||
fi
|
||||
# If has files to copy, copy it, else return error
|
||||
[ ${HAS_FILES} -ne 1 ] && return 1
|
||||
cp -f "${TMP_PATH}/${ADDON}/install.sh" "${RAMDISK_PATH}/addons/${ADDON}.sh" 2>"${LOG_FILE}" || dieLog
|
||||
if [ ${HAS_FILES} -ne 1 ]; then
|
||||
echo "ERROR: installAddon: ${ADDON} addon not found" >"${LOG_FILE}"
|
||||
return 1
|
||||
fi
|
||||
cp -f "${TMP_PATH}/${ADDON}/install.sh" "${RAMDISK_PATH}/addons/${ADDON}.sh" 2>"${LOG_FILE}"
|
||||
chmod +x "${RAMDISK_PATH}/addons/${ADDON}.sh"
|
||||
[ -d ${TMP_PATH}/${ADDON}/root ] && (cp -rnf "${TMP_PATH}/${ADDON}/root/"* "${RAMDISK_PATH}/" 2>"${LOG_FILE}" || dieLog)
|
||||
[ -d "${TMP_PATH}/${ADDON}/root" ] && cp -rnf "${TMP_PATH}/${ADDON}/root/"* "${RAMDISK_PATH}/" 2>"${LOG_FILE}"
|
||||
rm -rf "${TMP_PATH}/${ADDON}"
|
||||
return 0
|
||||
}
|
||||
@ -61,27 +116,19 @@ function installAddon() {
|
||||
###############################################################################
|
||||
# Untar an addon to correct path
|
||||
# 1 - Addon file path
|
||||
# Return name of addon on sucess or empty on error
|
||||
# Return name of addon on success or empty on error
|
||||
function untarAddon() {
|
||||
if [ -z "${1}" ]; then
|
||||
echo ""
|
||||
return 1
|
||||
fi
|
||||
rm -rf "${TMP_PATH}/addon"
|
||||
mkdir -p "${TMP_PATH}/addon"
|
||||
tar -xaf "${1}" -C "${TMP_PATH}/addon" || return
|
||||
ADDON=$(readConfigKey "name" "${TMP_PATH}/addon/manifest.yml")
|
||||
[ -z "${ADDON}" ] && return
|
||||
tar -xaf "${1}" -C "${TMP_PATH}/addon" || return 1
|
||||
local ADDON=$(readConfigKey "name" "${TMP_PATH}/addon/manifest.yml")
|
||||
[ -z "${ADDON}" ] && return 1
|
||||
rm -rf "${ADDONS_PATH}/${ADDON}"
|
||||
mv -f "${TMP_PATH}/addon" "${ADDONS_PATH}/${ADDON}"
|
||||
echo "${ADDON}"
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# Detect if has new local plugins to install/reinstall
|
||||
function updateAddons() {
|
||||
for F in $(ls ${PART3_PATH}/*.addon 2>/dev/null); do
|
||||
ADDON=$(basename "${F}" | sed 's|.addon||')
|
||||
rm -rf "${ADDONS_PATH}/${ADDON}"
|
||||
mkdir -p "${ADDONS_PATH}/${ADDON}"
|
||||
echo "Installing ${F} to ${ADDONS_PATH}/${ADDON}"
|
||||
tar -xaf "${F}" -C "${ADDONS_PATH}/${ADDON}"
|
||||
rm -f "${F}"
|
||||
done
|
||||
return 0
|
||||
}
|
||||
|
||||
@ -1,9 +1,17 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Copyright (C) 2022 Ing <https://github.com/wjz304>
|
||||
#
|
||||
# This is free software, licensed under the MIT License.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
###############################################################################
|
||||
# Delete a key in config file
|
||||
# 1 - Path of Key
|
||||
# 2 - Path of yaml config file
|
||||
function deleteConfigKey() {
|
||||
yq eval 'del(.'${1}')' --inplace "${2}"
|
||||
yq eval "del(.${1})" --inplace "${2}" 2>/dev/null
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
@ -12,7 +20,8 @@ function deleteConfigKey() {
|
||||
# 2 - Value
|
||||
# 3 - Path of yaml config file
|
||||
function writeConfigKey() {
|
||||
[ "${2}" = "{}" ] && yq eval '.'${1}' = {}' --inplace "${3}" || yq eval '.'${1}' = "'"${2}"'"' --inplace "${3}"
|
||||
local value="${2}"
|
||||
[ "${value}" = "{}" ] && yq eval ".${1} = {}" --inplace "${3}" 2>/dev/null || yq eval ".${1} = \"${value}\"" --inplace "${3}" 2>/dev/null
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
@ -21,8 +30,27 @@ function writeConfigKey() {
|
||||
# 2 - Path of yaml config file
|
||||
# Return Value
|
||||
function readConfigKey() {
|
||||
RESULT=$(yq eval '.'${1}' | explode(.)' "${2}")
|
||||
[ "${RESULT}" == "null" ] && echo "" || echo ${RESULT}
|
||||
local result
|
||||
result=$(yq eval ".${1} | explode(.)" "${2}" 2>/dev/null)
|
||||
[ "${result}" = "null" ] && echo "" || echo "${result}"
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# Write to yaml config file
|
||||
# 1 - Modules
|
||||
# 2 - Path of yaml config file
|
||||
function mergeConfigModules() {
|
||||
# Error: bad file '-': cannot index array with '8139cp' (strconv.ParseInt: parsing "8139cp": invalid syntax)
|
||||
# When the first key is a pure number, yq will not process it as a string by default. The current solution is to insert a placeholder key.
|
||||
local MS ML XF
|
||||
MS="RRORG\n${1// /\\n}"
|
||||
ML="$(echo -en "${MS}" | awk '{print "modules."$1":"}')"
|
||||
XF=$(mktemp 2>/dev/null)
|
||||
XF=${XF:-/tmp/tmp.XXXXXXXXXX}
|
||||
echo -en "${ML}" | yq -p p -o y >"${XF}"
|
||||
deleteConfigKey "modules.\"RRORG\"" "${XF}"
|
||||
yq eval-all --inplace '. as $item ireduce ({}; . * $item)' --inplace "${2}" "${XF}" 2>/dev/null
|
||||
rm -f "${XF}"
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
@ -40,7 +68,7 @@ function initConfigKey() {
|
||||
# 2 - Path of yaml config file
|
||||
# Returns map of values
|
||||
function readConfigMap() {
|
||||
yq eval '.'${1}' | explode(.) | to_entries | map([.key, .value] | join(": ")) | .[]' "${2}"
|
||||
yq eval ".${1} | explode(.) | to_entries | map([.key, .value] | join(\": \")) | .[]" "${2}" 2>/dev/null
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
@ -49,7 +77,7 @@ function readConfigMap() {
|
||||
# 2 - Path of yaml config file
|
||||
# Returns array/map of values
|
||||
function readConfigArray() {
|
||||
yq eval '.'${1}'[]' "${2}"
|
||||
yq eval ".${1}[]" "${2}" 2>/dev/null
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
@ -58,5 +86,13 @@ function readConfigArray() {
|
||||
# 2 - Path of yaml config file
|
||||
# Returns array of values
|
||||
function readConfigEntriesArray() {
|
||||
yq eval '.'${1}' | explode(.) | to_entries | map([.key])[] | .[]' "${2}"
|
||||
yq eval ".${1} | explode(.) | to_entries | map([.key])[] | .[]" "${2}" 2>/dev/null
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# Check yaml config file
|
||||
# 1 - Path of yaml config file
|
||||
# Returns error information
|
||||
function checkConfigFile() {
|
||||
yq eval "${1}" 2>&1
|
||||
}
|
||||
|
||||
@ -1,30 +1,48 @@
|
||||
RR_VERSION="23.11.1"
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Copyright (C) 2022 Ing <https://github.com/wjz304>
|
||||
#
|
||||
# This is free software, licensed under the MIT License.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
# shellcheck disable=SC2034
|
||||
|
||||
RR_VERSION="25.12.0"
|
||||
RR_RELEASE=""
|
||||
RR_TITLE="RR v${RR_VERSION}"
|
||||
|
||||
# Define paths
|
||||
|
||||
PART1_PATH="/mnt/p1"
|
||||
PART2_PATH="/mnt/p2"
|
||||
PART3_PATH="/mnt/p3"
|
||||
DSMROOT_PATH="/mnt/dsmroot"
|
||||
TMP_PATH="/tmp"
|
||||
# CHROOT_PATH: Defined during PC debugging.
|
||||
PART1_PATH="${CHROOT_PATH}/mnt/p1"
|
||||
PART2_PATH="${CHROOT_PATH}/mnt/p2"
|
||||
PART3_PATH="${CHROOT_PATH}/mnt/p3"
|
||||
TMP_PATH="${CHROOT_PATH}/tmp"
|
||||
|
||||
UNTAR_PAT_PATH="${TMP_PATH}/pat"
|
||||
RAMDISK_PATH="${TMP_PATH}/ramdisk"
|
||||
LOG_FILE="${TMP_PATH}/log.txt"
|
||||
|
||||
USER_GRUB_CONFIG="${PART1_PATH}/boot/grub/grub.cfg"
|
||||
USER_GRUBENVFILE="${PART1_PATH}/boot/grub/grubenv"
|
||||
USER_RSYSENVFILE="${PART1_PATH}/boot/grub/rsysenv"
|
||||
USER_CONFIG_FILE="${PART1_PATH}/user-config.yml"
|
||||
GRUB_PATH="${PART1_PATH}/boot/grub"
|
||||
USER_LOCALE_FILE="${PART1_PATH}/.locale"
|
||||
|
||||
ORI_ZIMAGE_FILE="${PART2_PATH}/zImage"
|
||||
ORI_RDGZ_FILE="${PART2_PATH}/rd.gz"
|
||||
|
||||
RR_BZIMAGE_FILE="${PART3_PATH}/bzImage-rr"
|
||||
RR_RAMDISK_FILE="${PART3_PATH}/initrd-rr"
|
||||
RR_RAMUSER_FILE="${PART3_PATH}/initrd-rru"
|
||||
MC_RAMDISK_FILE="${PART3_PATH}/microcode.img"
|
||||
MOD_ZIMAGE_FILE="${PART3_PATH}/zImage-dsm"
|
||||
MOD_RDGZ_FILE="${PART3_PATH}/initrd-dsm"
|
||||
ADD_TIPS_FILE="${PART3_PATH}/AddTips"
|
||||
|
||||
LKM_PATH="${PART3_PATH}/lkms"
|
||||
CKS_PATH="${PART3_PATH}/cks"
|
||||
LKMS_PATH="${PART3_PATH}/lkms"
|
||||
ADDONS_PATH="${PART3_PATH}/addons"
|
||||
MODULES_PATH="${PART3_PATH}/modules"
|
||||
USER_UP_PATH="${PART3_PATH}/users"
|
||||
SCRIPTS_PATH="${PART3_PATH}/scripts"
|
||||
|
||||
@ -5,58 +5,334 @@
|
||||
# This is free software, licensed under the MIT License.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
# This script is a CLI to RR.
|
||||
#
|
||||
# # Backup the original python3 executable.
|
||||
# sudo mv -f "$(realpath $(which python3))/EXTERNALLY-MANAGED" "$(realpath $(which python3))/EXTERNALLY-MANAGED.bak" 2>/dev/null || true
|
||||
# sudo pip3 install -U click requests requests-toolbelt qrcode[pil] beautifulsoup4
|
||||
|
||||
import os, click
|
||||
|
||||
WORK_PATH = os.path.abspath(os.path.dirname(__file__))
|
||||
|
||||
|
||||
@click.group()
|
||||
def cli():
|
||||
"""
|
||||
The CLI is a commands to arpl.
|
||||
The CLI is a commands to RR.
|
||||
"""
|
||||
pass
|
||||
|
||||
|
||||
def mutually_exclusive_options(ctx, param, value):
|
||||
other_option = "file" if param.name == "data" else "data"
|
||||
if value is not None and ctx.params.get(other_option) is not None:
|
||||
raise click.UsageError(f"Illegal usage: `{param.name}` is mutually exclusive with `{other_option}`.")
|
||||
return value
|
||||
|
||||
|
||||
def validate_required_param(ctx, param, value):
|
||||
if not value and "file" not in ctx.params and "data" not in ctx.params:
|
||||
raise click.MissingParameter(param_decls=[param.name])
|
||||
return value
|
||||
|
||||
|
||||
def __fullversion(ver):
|
||||
arr = ver.split('-')
|
||||
a, b, c = (arr[0].split('.') + ['0', '0', '0'])[:3]
|
||||
d = arr[1] if len(arr) > 1 else '00000'
|
||||
e = arr[2] if len(arr) > 2 else '0'
|
||||
return f'{a}.{b}.{c}-{d}-{e}'
|
||||
|
||||
|
||||
@cli.command()
|
||||
@click.option('-d', "--data", type=str, required=True, help="The data of QRCode.")
|
||||
@click.option('-l', "--location", type=str, required=True, help="The location of QRCode. (tl, tr, bl, br, mid)")
|
||||
@click.option('-o', "--output", type=str, required=True, help="The output file of QRCode.")
|
||||
def makeqr(data, location, output):
|
||||
@click.option("-d", "--data", type=str, callback=mutually_exclusive_options, is_eager=True, help="The data of QRCode.")
|
||||
@click.option("-f", "--file", type=str, callback=mutually_exclusive_options, is_eager=True, help="The file of QRCode.")
|
||||
@click.option("--validate", is_flag=True, callback=validate_required_param, expose_value=False, is_eager=True)
|
||||
@click.option("-l", "--location", type=click.IntRange(0, 7), required=True, help="The location of QRCode. (range 0<=x<=7)")
|
||||
@click.option("-o", "--output", type=str, required=True, help="The output file of QRCode.")
|
||||
def makeqr(data, file, location, output):
|
||||
"""
|
||||
Generate a QRCode.
|
||||
"""
|
||||
import qrcode
|
||||
from PIL import Image
|
||||
qr = qrcode.QRCode(version=1, box_size=10, error_correction=qrcode.constants.ERROR_CORRECT_H, border=4)
|
||||
qr.add_data(data)
|
||||
qr.make(fit=True)
|
||||
img = qr.make_image(fill_color="purple", back_color="white")
|
||||
img = img.convert("RGBA")
|
||||
pixels = img.load()
|
||||
for i in range(img.size[0]):
|
||||
for j in range(img.size[1]):
|
||||
if pixels[i, j] == (255, 255, 255, 255):
|
||||
pixels[i, j] = (255, 255, 255, 0)
|
||||
|
||||
if os.path.exists(os.path.join(WORK_PATH, "logo.png")):
|
||||
icon = Image.open(os.path.join(WORK_PATH, "logo.png"))
|
||||
icon = icon.convert("RGBA")
|
||||
img.paste(icon.resize((int(img.size[0] / 5), int(img.size[1] / 5))), (int((img.size[0] - int(img.size[0] / 5)) / 2), int((img.size[1] - int(img.size[1] / 5)) / 2)))
|
||||
|
||||
alpha = Image.new("RGBA", (img.size[0] * 4, img.size[1] * 3), (0, 0, 0, 0))
|
||||
if location == "tl":
|
||||
loc = (0, 0)
|
||||
elif location == "tr":
|
||||
loc = (alpha.size[0] - img.size[0], 0)
|
||||
elif location == "bl":
|
||||
loc = (0, alpha.size[1] - img.size[1])
|
||||
elif location == "br":
|
||||
loc = (alpha.size[0] - img.size[0], alpha.size[1] - img.size[1])
|
||||
else: # elif location == "mid":
|
||||
loc = (int((alpha.size[0] - img.size[0]) / 2), int((alpha.size[1] - img.size[1]) / 2))
|
||||
try:
|
||||
import fcntl, struct
|
||||
import qrcode
|
||||
from PIL import Image
|
||||
|
||||
alpha.paste(img, loc)
|
||||
alpha.save(output)
|
||||
FBIOGET_VSCREENINFO = 0x4600
|
||||
FBIOPUT_VSCREENINFO = 0x4601
|
||||
FBIOGET_FSCREENINFO = 0x4602
|
||||
FBDEV = "/dev/fb0"
|
||||
|
||||
if data:
|
||||
qr = qrcode.QRCode(version=1, box_size=10, error_correction=qrcode.constants.ERROR_CORRECT_H, border=4)
|
||||
qr.add_data(data)
|
||||
qr.make(fit=True)
|
||||
img = qr.make_image(fill_color="purple", back_color="white").convert("RGBA")
|
||||
pixels = img.load()
|
||||
for i in range(img.size[0]):
|
||||
for j in range(img.size[1]):
|
||||
if pixels[i, j] == (255, 255, 255, 255):
|
||||
pixels[i, j] = (255, 255, 255, 0)
|
||||
|
||||
logo_path = os.path.join(WORK_PATH, "logo.png")
|
||||
if os.path.exists(logo_path):
|
||||
icon = Image.open(logo_path).convert("RGBA")
|
||||
img.paste(icon.resize((img.size[0] // 5, img.size[1] // 5)), ((img.size[0] - img.size[0] // 5) // 2, (img.size[1] - img.size[1] // 5) // 2))
|
||||
|
||||
elif file:
|
||||
img = Image.open(file)
|
||||
# img = img.convert("RGBA")
|
||||
# pixels = img.load()
|
||||
# for i in range(img.size[0]):
|
||||
# for j in range(img.size[1]):
|
||||
# if pixels[i, j] == (255, 255, 255, 255):
|
||||
# pixels[i, j] = (255, 255, 255, 0)
|
||||
else:
|
||||
raise click.UsageError("Either data or file must be provided.")
|
||||
|
||||
with open(FBDEV, "rb") as fb:
|
||||
vi = fcntl.ioctl(fb, FBIOGET_VSCREENINFO, bytes(160))
|
||||
res = struct.unpack("I" * 40, vi)
|
||||
xres, yres = res[0], res[1] if res[0] and res[1] else (1920, 1080)
|
||||
|
||||
img = img.resize((xres // 8, xres // 8))
|
||||
alpha = Image.new("RGBA", (xres, yres), (0, 0, 0, 0))
|
||||
loc = (img.size[0] * location, alpha.size[1] - img.size[1])
|
||||
alpha.paste(img, loc)
|
||||
alpha.save(output)
|
||||
|
||||
except Exception as e:
|
||||
click.echo(f"Error: {e}")
|
||||
|
||||
|
||||
@cli.command()
|
||||
@click.option("-p", "--platforms", type=str, help="The platforms of Syno.")
|
||||
def getmodels(platforms=None):
|
||||
"""
|
||||
Get Syno Models.
|
||||
"""
|
||||
import re, json, requests, urllib3
|
||||
from requests.adapters import HTTPAdapter
|
||||
from requests.packages.urllib3.util.retry import Retry # type: ignore
|
||||
|
||||
adapter = HTTPAdapter(max_retries=Retry(total=3, backoff_factor=1, status_forcelist=[500, 502, 503, 504]))
|
||||
session = requests.Session()
|
||||
session.mount("http://", adapter)
|
||||
session.mount("https://", adapter)
|
||||
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
|
||||
|
||||
PS = platforms.lower().replace(",", " ").split() if platforms else []
|
||||
|
||||
models = []
|
||||
try:
|
||||
url = "http://update7.synology.com/autoupdate/genRSS.php?include_beta=1"
|
||||
#url = "https://update7.synology.com/autoupdate/genRSS.php?include_beta=1"
|
||||
|
||||
req = session.get(url, timeout=10, verify=False)
|
||||
req.encoding = "utf-8"
|
||||
p = re.compile(r"<mUnique>(.*?)</mUnique>.*?<mLink>(.*?)</mLink>", re.MULTILINE | re.DOTALL)
|
||||
data = p.findall(req.text)
|
||||
for item in data:
|
||||
if not "DSM" in item[1]:
|
||||
continue
|
||||
arch = item[0].split("_")[1]
|
||||
name = item[1].split("/")[-1].split("_")[1].replace("%2B", "+")
|
||||
if PS and arch.lower() not in PS:
|
||||
continue
|
||||
if not any(m["name"] == name for m in models):
|
||||
models.append({"name": name, "arch": arch})
|
||||
|
||||
models.sort(key=lambda k: (k["arch"], k["name"]))
|
||||
|
||||
except Exception as e:
|
||||
# click.echo(f"Error: {e}")
|
||||
pass
|
||||
|
||||
print(json.dumps(models, indent=4))
|
||||
|
||||
|
||||
@cli.command()
|
||||
@click.option("-p", "--platforms", type=str, help="The platforms of Syno.")
|
||||
def getmodelsbykb(platforms=None):
|
||||
"""
|
||||
Get Syno Models.
|
||||
"""
|
||||
import re, json, requests, urllib3
|
||||
from bs4 import BeautifulSoup
|
||||
from requests.adapters import HTTPAdapter
|
||||
from requests.packages.urllib3.util.retry import Retry # type: ignore
|
||||
|
||||
adapter = HTTPAdapter(max_retries=Retry(total=3, backoff_factor=1, status_forcelist=[500, 502, 503, 504]))
|
||||
session = requests.Session()
|
||||
session.mount("http://", adapter)
|
||||
session.mount("https://", adapter)
|
||||
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
|
||||
|
||||
PS = platforms.lower().replace(",", " ").split() if platforms else []
|
||||
|
||||
models = []
|
||||
try:
|
||||
url = "https://kb.synology.com/en-us/DSM/tutorial/What_kind_of_CPU_does_my_NAS_have"
|
||||
#url = "https://kb.synology.cn/zh-cn/DSM/tutorial/What_kind_of_CPU_does_my_NAS_have"
|
||||
|
||||
req = session.get(url, timeout=10, verify=False)
|
||||
req.encoding = "utf-8"
|
||||
bs = BeautifulSoup(req.text, "html.parser")
|
||||
p = re.compile(r"data: (.*?),$", re.MULTILINE | re.DOTALL)
|
||||
data = json.loads(p.search(bs.find("script", string=p).prettify()).group(1))
|
||||
model = "(.*?)" # (.*?): all, FS6400: one
|
||||
p = re.compile(r"<td>{}<\/td><td>(.*?)<\/td><td>(.*?)<\/td><td>(.*?)<\/td><td>(.*?)<\/td><td>(.*?)<\/td><td>(.*?)<\/td>".format(model), re.MULTILINE | re.DOTALL)
|
||||
it = p.finditer(data["preload"]["content"].replace("\n", "").replace("\t", ""))
|
||||
for i in it:
|
||||
d = i.groups()
|
||||
if len(d) == 6:
|
||||
d = model + d
|
||||
if PS and d[5].lower() not in PS:
|
||||
continue
|
||||
models.append({"name": d[0].split("<br")[0], "arch": d[5].lower()})
|
||||
except Exception as e:
|
||||
# click.echo(f"Error: {e}")
|
||||
pass
|
||||
|
||||
models.sort(key=lambda x: (x["arch"], x["name"]))
|
||||
print(json.dumps(models, indent=4))
|
||||
|
||||
|
||||
@cli.command()
|
||||
@click.option("-m", "--model", type=str, required=True, help="The model of Syno.")
|
||||
@click.option("-v", "--version", type=str, required=True, help="The version of Syno.")
|
||||
def getpats4mv(model, version):
|
||||
import json, requests, urllib3
|
||||
from requests.adapters import HTTPAdapter
|
||||
from requests.packages.urllib3.util.retry import Retry # type: ignore
|
||||
|
||||
adapter = HTTPAdapter(max_retries=Retry(total=3, backoff_factor=1, status_forcelist=[500, 502, 503, 504]))
|
||||
session = requests.Session()
|
||||
session.mount("http://", adapter)
|
||||
session.mount("https://", adapter)
|
||||
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
|
||||
|
||||
pats = {}
|
||||
try:
|
||||
urlInfo = "https://www.synology.com/api/support/findDownloadInfo?lang=en-us"
|
||||
urlSteps = "https://www.synology.com/api/support/findUpgradeSteps?"
|
||||
#urlInfo = "https://www.synology.cn/api/support/findDownloadInfo?lang=zh-cn"
|
||||
#urlSteps = "https://www.synology.cn/api/support/findUpgradeSteps?"
|
||||
|
||||
major = f"&major={version.split('.')[0]}" if len(version.split('.')) > 0 else ""
|
||||
minor = f"&minor={version.split('.')[1]}" if len(version.split('.')) > 1 else ""
|
||||
req = session.get(f"{urlInfo}&product={model.replace('+', '%2B')}{major}{minor}", timeout=10, verify=False)
|
||||
req.encoding = "utf-8"
|
||||
data = json.loads(req.text)
|
||||
|
||||
build_ver = data['info']['system']['detail'][0]['items'][0]['build_ver']
|
||||
build_num = data['info']['system']['detail'][0]['items'][0]['build_num']
|
||||
buildnano = data['info']['system']['detail'][0]['items'][0]['nano']
|
||||
V = __fullversion(f"{build_ver}-{build_num}-{buildnano}")
|
||||
if V not in pats:
|
||||
pats[V] = {
|
||||
'url': data['info']['system']['detail'][0]['items'][0]['files'][0]['url'].split('?')[0],
|
||||
'sum': data['info']['system']['detail'][0]['items'][0]['files'][0].get('checksum', '0' * 32)
|
||||
}
|
||||
|
||||
from_ver = min(I['build'] for I in data['info']['pubVers'])
|
||||
|
||||
for I in data['info']['productVers']:
|
||||
if not I['version'].startswith(version):
|
||||
continue
|
||||
if not major or not minor:
|
||||
majorTmp = f"&major={I['version'].split('.')[0]}" if len(I['version'].split('.')) > 0 else ""
|
||||
minorTmp = f"&minor={I['version'].split('.')[1]}" if len(I['version'].split('.')) > 1 else ""
|
||||
reqTmp = session.get(f"{urlInfo}&product={model.replace('+', '%2B')}{majorTmp}{minorTmp}", timeout=10, verify=False)
|
||||
reqTmp.encoding = "utf-8"
|
||||
dataTmp = json.loads(reqTmp.text)
|
||||
|
||||
build_ver = dataTmp['info']['system']['detail'][0]['items'][0]['build_ver']
|
||||
build_num = dataTmp['info']['system']['detail'][0]['items'][0]['build_num']
|
||||
buildnano = dataTmp['info']['system']['detail'][0]['items'][0]['nano']
|
||||
V = __fullversion(f"{build_ver}-{build_num}-{buildnano}")
|
||||
if V not in pats:
|
||||
pats[V] = {
|
||||
'url': dataTmp['info']['system']['detail'][0]['items'][0]['files'][0]['url'].split('?')[0],
|
||||
'sum': dataTmp['info']['system']['detail'][0]['items'][0]['files'][0].get('checksum', '0' * 32)
|
||||
}
|
||||
|
||||
for J in I['versions']:
|
||||
to_ver = J['build']
|
||||
reqSteps = session.get(f"{urlSteps}&product={model.replace('+', '%2B')}&from_ver={from_ver}&to_ver={to_ver}", timeout=10, verify=False)
|
||||
if reqSteps.status_code != 200:
|
||||
continue
|
||||
reqSteps.encoding = "utf-8"
|
||||
dataSteps = json.loads(reqSteps.text)
|
||||
for S in dataSteps['upgrade_steps']:
|
||||
if not S.get('full_patch') or not S['build_ver'].startswith(version):
|
||||
continue
|
||||
V = __fullversion(f"{S['build_ver']}-{S['build_num']}-{S['nano']}")
|
||||
if V not in pats:
|
||||
reqPat = session.head(S['files'][0]['url'].split('?')[0], timeout=10, verify=False)
|
||||
if reqPat.status_code == 403:
|
||||
continue
|
||||
pats[V] = {
|
||||
'url': S['files'][0]['url'].split('?')[0],
|
||||
'sum': S['files'][0].get('checksum', '0' * 32)
|
||||
}
|
||||
except Exception as e:
|
||||
# click.echo(f"Error: {e}")
|
||||
pass
|
||||
|
||||
pats = {k: pats[k] for k in sorted(pats.keys(), reverse=True)}
|
||||
print(json.dumps(pats, indent=4))
|
||||
|
||||
|
||||
@cli.command()
|
||||
@click.option("-p", "--models", type=str, help="The models of Syno.")
|
||||
def getpats(models=None):
|
||||
import re, json, requests, urllib3
|
||||
from bs4 import BeautifulSoup
|
||||
from requests.adapters import HTTPAdapter
|
||||
from requests.packages.urllib3.util.retry import Retry # type: ignore
|
||||
|
||||
adapter = HTTPAdapter(max_retries=Retry(total=3, backoff_factor=1, status_forcelist=[500, 502, 503, 504]))
|
||||
session = requests.Session()
|
||||
session.mount("http://", adapter)
|
||||
session.mount("https://", adapter)
|
||||
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
|
||||
|
||||
MS = models.lower().replace(",", " ").split() if models else []
|
||||
|
||||
pats = {}
|
||||
try:
|
||||
req = session.get('https://archive.synology.com/download/Os/DSM', timeout=10, verify=False)
|
||||
req.encoding = 'utf-8'
|
||||
bs = BeautifulSoup(req.text, 'html.parser')
|
||||
p = re.compile(r"(.*?)-(.*?)", re.MULTILINE | re.DOTALL)
|
||||
l = bs.find_all('a', string=p)
|
||||
for i in l:
|
||||
ver = i.attrs['href'].split('/')[-1]
|
||||
if not ver.startswith('7'):
|
||||
continue
|
||||
req = session.get(f'https://archive.synology.com{i.attrs["href"]}', timeout=10, verify=False)
|
||||
req.encoding = 'utf-8'
|
||||
bs = BeautifulSoup(req.text, 'html.parser')
|
||||
p = re.compile(r"DSM_(.*?)_(.*?).pat", re.MULTILINE | re.DOTALL)
|
||||
data = bs.find_all('a', string=p)
|
||||
for item in data:
|
||||
rels = p.search(item.attrs['href'])
|
||||
if rels:
|
||||
model, _ = rels.groups()
|
||||
model = model.replace('%2B', '+')
|
||||
if MS and model.lower() not in MS:
|
||||
continue
|
||||
if model not in pats:
|
||||
pats[model] = {}
|
||||
pats[model][__fullversion(ver)] = item.attrs['href']
|
||||
except Exception as e:
|
||||
# click.echo(f"Error: {e}")
|
||||
pass
|
||||
|
||||
print(json.dumps(pats, indent=4))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
@ -1,52 +1,50 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Copyright (C) 2022 Ing <https://github.com/wjz304>
|
||||
#
|
||||
# This is free software, licensed under the MIT License.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
[ -z "${WORK_PATH}" -o ! -d "${WORK_PATH}/include" ] && WORK_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")/../" >/dev/null 2>&1 && pwd)"
|
||||
[ -z "${WORK_PATH}" ] || [ ! -d "${WORK_PATH}/include" ] && WORK_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")/../" >/dev/null 2>&1 && pwd)"
|
||||
|
||||
. ${WORK_PATH}/include/consts.sh
|
||||
. ${WORK_PATH}/include/configFile.sh
|
||||
. ${WORK_PATH}/include/i18n.sh
|
||||
. "${WORK_PATH}/include/consts.sh"
|
||||
. "${WORK_PATH}/include/configFile.sh"
|
||||
. "${WORK_PATH}/include/i18n.sh"
|
||||
|
||||
###############################################################################
|
||||
# Read key value from model config file
|
||||
# 1 - Model
|
||||
# 2 - Key
|
||||
# Return Value
|
||||
function readModelKey() {
|
||||
readConfigKey "${2}" "${WORK_PATH}/model-configs/${1}.yml"
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# Read Entries as map(key=value) from model config
|
||||
# 1 - Model
|
||||
# 2 - Path of key
|
||||
# Returns map of values
|
||||
function readModelMap() {
|
||||
readConfigMap "${2}" "${WORK_PATH}/model-configs/${1}.yml"
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# Read an array from model config
|
||||
# 1 - Model
|
||||
# 2 - Path of key
|
||||
# Returns array/map of values
|
||||
function readModelArray() {
|
||||
readConfigArray "${2}" "${WORK_PATH}/model-configs/${1}.yml"
|
||||
# Check loader disk
|
||||
function checkBootLoader() {
|
||||
while read -r KNAME RO; do
|
||||
[ -z "${KNAME}" ] && continue
|
||||
[ "${RO}" = "0" ] && continue
|
||||
hdparm -r0 "${KNAME}" >/dev/null 2>&1 || true
|
||||
done <<<"$(lsblk -pno KNAME,RO 2>/dev/null)"
|
||||
[ ! -w "${PART1_PATH}" ] && return 1
|
||||
[ ! -w "${PART2_PATH}" ] && return 1
|
||||
[ ! -w "${PART3_PATH}" ] && return 1
|
||||
type awk >/dev/null 2>&1 || return 1
|
||||
type cut >/dev/null 2>&1 || return 1
|
||||
type sed >/dev/null 2>&1 || return 1
|
||||
type tar >/dev/null 2>&1 || return 1
|
||||
return 0
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# Check if loader is fully configured
|
||||
# Returns 1 if not
|
||||
function loaderIsConfigured() {
|
||||
SN="$(readConfigKey "sn" "${USER_CONFIG_FILE}")"
|
||||
[ -z "${SN}" ] && return 1
|
||||
[ ! -f "${MOD_ZIMAGE_FILE}" ] && return 1
|
||||
[ ! -f "${MOD_RDGZ_FILE}" ] && return 1
|
||||
[ -z "$(readConfigKey "zimage-hash" "${USER_CONFIG_FILE}")" ] && return 1
|
||||
[ -z "$(readConfigKey "ramdisk-hash" "${USER_CONFIG_FILE}")" ] && return 1
|
||||
return 0 # OK
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# Just show error message and dies
|
||||
function die() {
|
||||
echo -e "\033[1;41m$@\033[0m"
|
||||
echo -e "\033[1;41m${*}\033[0m"
|
||||
exit 1
|
||||
}
|
||||
|
||||
@ -60,32 +58,48 @@ function dieLog() {
|
||||
exit 1
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# Check if an item exists in an array
|
||||
# 1 - Item
|
||||
# 2.. - Array
|
||||
# Return 0 if exists
|
||||
function arrayExistItem() {
|
||||
local ITEM="${1}"
|
||||
shift
|
||||
for i in "$@"; do
|
||||
[ "${i}" = "${ITEM}" ] && return 0
|
||||
done
|
||||
return 1
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# Generate a number with 6 digits from 1 to 30000
|
||||
function random() {
|
||||
printf "%06d" $((${RANDOM} % 30000 + 1))
|
||||
printf "%06d" $((RANDOM % 30000 + 1))
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# Generate a hexa number from 0x00 to 0xFF
|
||||
# Generate a hex number from 0x00 to 0xFF
|
||||
function randomhex() {
|
||||
printf "&02X" "$((${RANDOM} % 255 + 1))"
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# Generate a random letter
|
||||
function generateRandomLetter() {
|
||||
for i in A B C D E F G H J K L M N P Q R S T V W X Y Z; do
|
||||
echo ${i}
|
||||
done | sort -R | tail -1
|
||||
printf "%02X" $((RANDOM % 255 + 1))
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# Generate a random digit (0-9A-Z)
|
||||
function generateRandomValue() {
|
||||
for i in 0 1 2 3 4 5 6 7 8 9 A B C D E F G H J K L M N P Q R S T V W X Y Z; do
|
||||
echo ${i}
|
||||
done | sort -R | tail -1
|
||||
function genRandomDigit() {
|
||||
echo {0..9} | tr ' ' '\n' | sort -R | head -1
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# Generate a random letter
|
||||
function genRandomLetter() {
|
||||
echo {A..Z} | tr ' ' '\n' | grep -v '[IO]' | sort -R | head -1
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# Generate a random digit (0-9A-Z)
|
||||
function genRandomValue() {
|
||||
echo {0..9} {A..Z} | tr ' ' '\n' | grep -v '[IO]' | sort -R | head -1
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
@ -93,17 +107,21 @@ function generateRandomValue() {
|
||||
# 1 - Model
|
||||
# Returns serial number
|
||||
function generateSerial() {
|
||||
SERIAL="$(readModelArray "${1}" "serial.prefix" | sort -R | tail -1)"
|
||||
SERIAL+=$(readModelKey "${1}" "serial.middle")
|
||||
case "$(readModelKey "${1}" "serial.suffix")" in
|
||||
local PREFIX MIDDLE SUFFIX SERIAL
|
||||
PREFIX="$(readConfigArray "${1}.prefix" "${WORK_PATH}/serialnumber.yml" 2>/dev/null | sort -R | head -1)"
|
||||
MIDDLE="$(readConfigArray "${1}.middle" "${WORK_PATH}/serialnumber.yml" 2>/dev/null | sort -R | head -1)"
|
||||
SUFFIX="$(readConfigKey "${1}.suffix" "${WORK_PATH}/serialnumber.yml" 2>/dev/null)"
|
||||
|
||||
SERIAL="${PREFIX:-"0000"}${MIDDLE:-"XXX"}"
|
||||
case "${SUFFIX:-"alpha"}" in
|
||||
numeric)
|
||||
SERIAL+=$(random)
|
||||
SERIAL+="$(random)"
|
||||
;;
|
||||
alpha)
|
||||
SERIAL+=$(generateRandomLetter)$(generateRandomValue)$(generateRandomValue)$(generateRandomValue)$(generateRandomValue)$(generateRandomLetter)
|
||||
SERIAL+="$(genRandomLetter)$(genRandomValue)$(genRandomValue)$(genRandomValue)$(genRandomValue)$(genRandomLetter)"
|
||||
;;
|
||||
esac
|
||||
echo ${SERIAL}
|
||||
echo "${SERIAL}"
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
@ -112,87 +130,88 @@ function generateSerial() {
|
||||
# 2 - number
|
||||
# Returns serial number
|
||||
function generateMacAddress() {
|
||||
PRE="$(readModelArray "${1}" "serial.macpre")"
|
||||
SUF="$(printf '%02x%02x%02x' $((${RANDOM} % 256)) $((${RANDOM} % 256)) $((${RANDOM} % 256)))"
|
||||
local MACPRE MACSUF NUM MACS
|
||||
MACPRE="$(readConfigArray "${1}.macpre" "${WORK_PATH}/serialnumber.yml" 2>/dev/null)"
|
||||
MACSUF="$(printf '%02x%02x%02x' $((RANDOM % 256)) $((RANDOM % 256)) $((RANDOM % 256)))"
|
||||
NUM=${2:-1}
|
||||
MACS=""
|
||||
for I in $(seq 1 ${NUM}); do
|
||||
printf '%06x%06x' $((0x${PRE:-"001132"})) $(($((0x${SUF})) + ${I}))
|
||||
[ ${I} -lt ${NUM} ] && printf ' '
|
||||
MACS+="$(printf '%06x%06x' $((0x${MACPRE:-"001132"})) $((0x${MACSUF} + I)))"
|
||||
[ ${I} -lt ${NUM} ] && MACS+=" "
|
||||
done
|
||||
echo "${MACS}"
|
||||
return 0
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# Validate a serial number for a model
|
||||
# 1 - Model
|
||||
# 2 - Serial number to test
|
||||
# Returns 1 if serial number is valid
|
||||
# Returns 1 if serial number is invalid
|
||||
function validateSerial() {
|
||||
PREFIX=$(readModelArray "${1}" "serial.prefix")
|
||||
MIDDLE=$(readModelKey "${1}" "serial.middle")
|
||||
S=${2:0:4}
|
||||
P=${2:4:3}
|
||||
local PREFIX MIDDLE SUFFIX P M S L
|
||||
PREFIX="$(readConfigArray "${1}.prefix" "${WORK_PATH}/serialnumber.yml" 2>/dev/null)"
|
||||
MIDDLE="$(readConfigArray "${1}.middle" "${WORK_PATH}/serialnumber.yml" 2>/dev/null)"
|
||||
SUFFIX="$(readConfigKey "${1}.suffix" "${WORK_PATH}/serialnumber.yml" 2>/dev/null)"
|
||||
P=${2:0:4}
|
||||
M=${2:4:3}
|
||||
S=${2:7}
|
||||
L=${#2}
|
||||
if [ ${L} -ne 13 ]; then
|
||||
echo 0
|
||||
return
|
||||
return 1
|
||||
fi
|
||||
echo "${PREFIX}" | grep -q "${S}"
|
||||
if [ $? -eq 1 ]; then
|
||||
echo 0
|
||||
return
|
||||
if ! arrayExistItem ${P} ${PREFIX}; then
|
||||
return 1
|
||||
fi
|
||||
if [ "${MIDDLE}" != "${P}" ]; then
|
||||
echo 0
|
||||
return
|
||||
if ! arrayExistItem ${M} ${MIDDLE}; then
|
||||
return 1
|
||||
fi
|
||||
echo 1
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# Check if a item exists into array
|
||||
# 1 - Item
|
||||
# 2.. - Array
|
||||
# Return 0 if exists
|
||||
function arrayExistItem() {
|
||||
EXISTS=1
|
||||
ITEM="${1}"
|
||||
shift
|
||||
for i in "$@"; do
|
||||
[ "${i}" = "${ITEM}" ] || continue
|
||||
EXISTS=0
|
||||
break
|
||||
done
|
||||
return ${EXISTS}
|
||||
case "${SUFFIX:-"alpha"}" in
|
||||
numeric)
|
||||
if ! echo "${S}" | grep -q "^[0-9]\{6\}$"; then
|
||||
return 1
|
||||
fi
|
||||
;;
|
||||
alpha)
|
||||
if ! echo "${S}" | grep -q "^[A-Z][0-9][0-9][0-9][0-9][A-Z]$"; then
|
||||
return 1
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
return 0
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# Get values in .conf K=V file
|
||||
# 1 - key
|
||||
# 2 - file
|
||||
# 1 - file
|
||||
# 2 - key
|
||||
function _get_conf_kv() {
|
||||
grep "${1}" "${2}" | sed "s|^${1}=\"\(.*\)\"$|\1|g"
|
||||
grep "^${2}=" "${1}" 2>/dev/null | cut -d'=' -f2- | sed 's/^"//;s/"$//' 2>/dev/null
|
||||
return $?
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# Replace/remove/add values in .conf K=V file
|
||||
# 1 - name
|
||||
# 2 - new_val
|
||||
# 3 - path
|
||||
# 1 - file
|
||||
# 2 - key
|
||||
# 3 - value
|
||||
function _set_conf_kv() {
|
||||
# Delete
|
||||
if [ -z "${2}" ]; then
|
||||
sed -i "${3}" -e "s/^${1}=.*$//"
|
||||
if [ -z "${3}" ]; then
|
||||
sed -i "/^${2}=/d" "${1}" 2>/dev/null
|
||||
return $?
|
||||
fi
|
||||
|
||||
# Replace
|
||||
if grep -q "^${1}=" "${3}"; then
|
||||
sed -i "${3}" -e "s\"^${1}=.*\"${1}=\\\"${2}\\\"\""
|
||||
if grep -q "^${2}=" "${1}" 2>/dev/null; then
|
||||
sed -i "s#^${2}=.*#${2}=\"${3}\"#" "${1}" 2>/dev/null
|
||||
return $?
|
||||
fi
|
||||
|
||||
# Add if doesn't exist
|
||||
echo "${1}=\"${2}\"" >>"${3}"
|
||||
mkdir -p "$(dirname "${1}" 2>/dev/null)" 2>/dev/null
|
||||
echo "${2}=\"${3}\"" >>"${1}" 2>/dev/null
|
||||
return $?
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
@ -200,12 +219,24 @@ function _set_conf_kv() {
|
||||
# @ - url list
|
||||
function _get_fastest() {
|
||||
local speedlist=""
|
||||
for I in $@; do
|
||||
speed=$(ping -c 1 -W 5 ${I} 2>/dev/null | awk '/time=/ {print $7}' | cut -d '=' -f 2)
|
||||
speedlist+="${I} ${speed:-999}\n"
|
||||
done
|
||||
fastest="$(echo -e "${speedlist}" | tr -s '\n' | sort -k2n | head -1 | awk '{print $1}')"
|
||||
echo "${fastest}"
|
||||
if type ping >/dev/null 2>&1; then
|
||||
for I in "$@"; do
|
||||
speed=$(LC_ALL=C ping -c 1 -W 5 "${I}" 2>/dev/null | awk -F'[= ]' '/time=/ {for(i=1;i<=NF;i++) if ($i=="time") print $(i+1)}')
|
||||
speedlist+="${I} ${speed:-999}\n" # Assign default value 999 if speed is empty
|
||||
done
|
||||
else
|
||||
for I in "$@"; do
|
||||
speed=$(curl -skL -m 10 --connect-timeout 10 -w '%{time_total}' "${I}" -o /dev/null)
|
||||
speed=$(awk "BEGIN {print (${speed:-0.999} * 1000)}")
|
||||
speedlist+="${I} ${speed:-999}\n" # Assign default value 999 if speed is empty
|
||||
done
|
||||
fi
|
||||
local fastest
|
||||
fastest="$(echo -e "${speedlist}" | tr -s '\n' | awk '$2 != "999"' | sort -k2n | head -1)"
|
||||
URL="$(echo "${fastest}" | awk '{print $1}')"
|
||||
SPD="$(echo "${fastest}" | awk '{print $2}')" # It is a float type
|
||||
echo "${URL:-${1}}"
|
||||
[ "$(echo "${SPD:-999}" | cut -d'.' -f1)" -ge 999 ] && return 1 || return 0
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
@ -213,136 +244,265 @@ function _get_fastest() {
|
||||
# @1 -mac1,mac2,mac3...
|
||||
function _sort_netif() {
|
||||
ETHLIST=""
|
||||
ETHX=$(ls /sys/class/net/ | grep eth) # real network cards list
|
||||
for ETH in ${ETHX}; do
|
||||
MAC="$(cat /sys/class/net/${ETH}/address | sed 's/://g' | tr '[:upper:]' '[:lower:]')"
|
||||
BUS=$(ethtool -i ${ETH} | grep bus-info | awk '{print $2}')
|
||||
for F in /sys/class/net/eth*; do
|
||||
[ ! -e "${F}" ] && continue
|
||||
local ETH MAC BUS
|
||||
ETH="$(basename "${F}")"
|
||||
MAC="$(cat "/sys/class/net/${ETH}/address" 2>/dev/null | sed 's/://g; s/.*/\L&/')"
|
||||
BUS="$(ethtool -i "${ETH}" 2>/dev/null | grep bus-info | cut -d' ' -f2)"
|
||||
ETHLIST="${ETHLIST}${BUS} ${MAC} ${ETH}\n"
|
||||
done
|
||||
|
||||
ETHLISTTMPM=""
|
||||
ETHLISTTMPB="$(echo -e "${ETHLIST}" | sort)"
|
||||
if [ -n "${1}" ]; then
|
||||
MACS=$(echo "${1}" | sed 's/://g' | tr '[:upper:]' '[:lower:]' | tr ',' ' ')
|
||||
ETHLISTTMPC=""
|
||||
ETHLISTTMPF=""
|
||||
|
||||
MACS="$(echo "${1}" | sed 's/://g; s/,/ /g; s/.*/\L&/')"
|
||||
for MACX in ${MACS}; do
|
||||
ETHLISTTMPC="${ETHLISTTMPC}$(echo -e "${ETHLIST}" | grep "${MACX}")\n"
|
||||
ETHLISTTMPM="${ETHLISTTMPM}$(echo -e "${ETHLISTTMPB}" | grep "${MACX}")\n"
|
||||
ETHLISTTMPB="$(echo -e "${ETHLISTTMPB}" | grep -v "${MACX}")\n"
|
||||
done
|
||||
|
||||
while read -r BUS MAC ETH; do
|
||||
[ -z "${MAC}" ] && continue
|
||||
if echo "${MACS}" | grep -q "${MAC}"; then continue; fi
|
||||
ETHLISTTMPF="${ETHLISTTMPF}${BUS} ${MAC} ${ETH}\n"
|
||||
done <<EOF
|
||||
$(echo -e ${ETHLIST} | sort)
|
||||
EOF
|
||||
ETHLIST="${ETHLISTTMPC}${ETHLISTTMPF}"
|
||||
else
|
||||
ETHLIST="$(echo -e "${ETHLIST}" | sort)"
|
||||
fi
|
||||
ETHLIST="$(echo -e "${ETHLIST}" | grep -v '^$')"
|
||||
|
||||
echo -e "${ETHLIST}" >${TMP_PATH}/ethlist
|
||||
# cat ${TMP_PATH}/ethlist
|
||||
ETHLIST="$(echo -e "${ETHLISTTMPM}${ETHLISTTMPB}" | grep -v '^$')"
|
||||
ETHSEQ="$(echo -e "${ETHLIST}" | awk '{print $3}' | sed 's/eth//g')"
|
||||
ETHNUM="$(echo -e "${ETHLIST}" | wc -l)"
|
||||
|
||||
# echo "${ETHSEQ}"
|
||||
# sort
|
||||
IDX=0
|
||||
while true; do
|
||||
# cat ${TMP_PATH}/ethlist
|
||||
[ ${IDX} -ge $(wc -l <${TMP_PATH}/ethlist) ] && break
|
||||
ETH=$(cat ${TMP_PATH}/ethlist | sed -n "$((${IDX} + 1))p" | awk '{print $3}')
|
||||
# echo "ETH: ${ETH}"
|
||||
if [ -n "${ETH}" ] && [ ! "${ETH}" = "eth${IDX}" ]; then
|
||||
# echo "change ${ETH} <=> eth${IDX}"
|
||||
ip link set dev eth${IDX} down
|
||||
ip link set dev ${ETH} down
|
||||
sleep 1
|
||||
ip link set dev eth${IDX} name ethN
|
||||
ip link set dev ${ETH} name eth${IDX}
|
||||
ip link set dev ethN name ${ETH}
|
||||
sleep 1
|
||||
ip link set dev eth${IDX} up
|
||||
ip link set dev ${ETH} up
|
||||
sleep 1
|
||||
sed -i "s/eth${IDX}/ethN/" ${TMP_PATH}/ethlist
|
||||
sed -i "s/${ETH}/eth${IDX}/" ${TMP_PATH}/ethlist
|
||||
sed -i "s/ethN/${ETH}/" ${TMP_PATH}/ethlist
|
||||
sleep 1
|
||||
fi
|
||||
IDX=$((${IDX} + 1))
|
||||
done
|
||||
|
||||
rm -f ${TMP_PATH}/ethlist
|
||||
if [ ! "${ETHSEQ}" = "$(seq 0 $((${ETHNUM:0} - 1)))" ]; then
|
||||
/etc/init.d/S41dhcpcd stop >/dev/null 2>&1
|
||||
/etc/init.d/S40network stop >/dev/null 2>&1
|
||||
for i in $(seq 0 $((${ETHNUM:0} - 1))); do
|
||||
ip link set dev "eth${i}" name "tmp${i}"
|
||||
done
|
||||
I=0
|
||||
for i in ${ETHSEQ}; do
|
||||
ip link set dev "tmp${i}" name "eth${I}"
|
||||
I=$((I + 1))
|
||||
done
|
||||
/etc/init.d/S40network start >/dev/null 2>&1
|
||||
/etc/init.d/S41dhcpcd start >/dev/null 2>&1
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# get bus of disk
|
||||
# 1 - device path
|
||||
function getBus() {
|
||||
BUS=""
|
||||
# usb/ata(sata/ide)/scsi
|
||||
[ -z "${BUS}" ] && BUS=$(udevadm info --query property --name "${1}" 2>/dev/null | grep ID_BUS | cut -d= -f2 | sed 's/ata/sata/')
|
||||
# usb/sata(sata/ide)/nvme
|
||||
[ -z "${BUS}" ] && BUS=$(lsblk -dpno KNAME,TRAN 2>/dev/null | grep "${1}" | awk '{print $2}')
|
||||
# usb/scsi(sata/ide)/virtio(scsi/virtio)/nvme
|
||||
[ -z "${BUS}" ] && BUS=$(lsblk -dpno KNAME,SUBSYSTEMS 2>/dev/null | grep "${1}" | awk -F':' '{print $(NF-1)}')
|
||||
local BUS=""
|
||||
[ -f "/.dockerenv" ] && BUS="docker"
|
||||
# usb/ata(ide)/sata/sas/spi(scsi)/virtio/mmc/nvme
|
||||
[ -z "${BUS}" ] && BUS=$(lsblk -dpno KNAME,TRAN 2>/dev/null | grep "${1} " | awk '{print $2}' | sed 's/^ata$/ide/' | sed 's/^spi$/scsi/') #Spaces are intentional
|
||||
# usb/scsi(ide/sata/sas)/virtio/mmc/nvme/vmbus/xen(xvd)
|
||||
[ -z "${BUS}" ] && BUS=$(lsblk -dpno KNAME,SUBSYSTEMS 2>/dev/null | grep "${1} " | awk '{split($2,a,":"); if(length(a)>1) print a[length(a)-1]}' | sed 's/_host//' | sed 's/^.*xen.*$/xen/') # Spaces are intentional
|
||||
[ -z "${BUS}" ] && BUS="unknown"
|
||||
echo "${BUS}"
|
||||
return 0
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# get IP
|
||||
# 1 - ethN
|
||||
function getIP() {
|
||||
IP=""
|
||||
if [ -n "${1}" -a -d "/sys/class/net/${1}" ]; then
|
||||
IP=$(ip route show dev ${1} 2>/dev/null | sed -n 's/.* via .* src \(.*\) metric .*/\1/p')
|
||||
[ -z "${IP}" ] && IP=$(ip addr show ${1} | grep -E "inet .* eth" | awk '{print $2}' | cut -f1 -d'/' | head -1)
|
||||
local IP=""
|
||||
if [ -n "${1}" ] && [ -d "/sys/class/net/${1}" ]; then
|
||||
IP=$(ip addr show "${1}" scope global 2>/dev/null | grep -E "inet .* eth" | awk '{print $2}' | cut -d'/' -f1 | head -1)
|
||||
[ -z "${IP}" ] && IP=$(ip route show dev "${1}" 2>/dev/null | sed -n 's/.* via .* src \(.*\) metric .*/\1/p' | head -1)
|
||||
else
|
||||
IP=$(ip route show 2>/dev/null | sed -n 's/.* via .* src \(.*\) metric .*/\1/p' | head -1)
|
||||
[ -z "${IP}" ] && IP=$(ip addr show | grep -E "inet .* eth" | awk '{print $2}' | cut -f1 -d'/' | head -1)
|
||||
IP=$(ip addr show scope global 2>/dev/null | grep -E "inet .* eth" | awk '{print $2}' | cut -d'/' -f1 | head -1)
|
||||
[ -z "${IP}" ] && IP=$(ip route show 2>/dev/null | sed -n 's/.* via .* src \(.*\) metric .*/\1/p' | head -1)
|
||||
fi
|
||||
echo "${IP}"
|
||||
return 0
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# get logo of model
|
||||
# 1 - model
|
||||
function getLogo() {
|
||||
MODEL="${1}"
|
||||
local MODEL="${1}"
|
||||
local fastest
|
||||
local STATUS
|
||||
|
||||
rm -f "${PART3_PATH}/logo.png"
|
||||
fastest=$(_get_fastest "www.synology.com" "www.synology.cn")
|
||||
STATUS=$(curl -skL -w "%{http_code}" "https://${fastest}/api/products/getPhoto?product=${MODEL/+/%2B}&type=img_s&sort=0" -o "${PART3_PATH}/logo.png")
|
||||
if [ $? -ne 0 -o ${STATUS} -ne 200 -o -f "${PART3_PATH}/logo.png" ]; then
|
||||
convert -rotate 180 "${PART3_PATH}/logo.png" "${PART3_PATH}/logo.png" 2>/dev/null
|
||||
magick montage "${PART3_PATH}/logo.png" -background 'none' -tile '3x3' -geometry '350x210' "${PART3_PATH}/logo.png" 2>/dev/null
|
||||
convert -rotate 180 "${PART3_PATH}/logo.png" "${PART3_PATH}/logo.png" 2>/dev/null
|
||||
|
||||
fastest="$(_get_fastest "www.synology.com" "www.synology.cn")"
|
||||
STATUS=$(curl -skL --connect-timeout 10 -w "%{http_code}" "https://${fastest}/api/products/getPhoto?product=${MODEL/+/%2B}&type=img_s&sort=0" -o "${PART3_PATH}/logo.png")
|
||||
if [ $? -ne 0 ] || [ "${STATUS:-0}" -ne 200 ] || [ ! -f "${PART3_PATH}/logo.png" ]; then
|
||||
return 1
|
||||
fi
|
||||
convert -rotate 180 "${PART3_PATH}/logo.png" "${PART3_PATH}/logo.png" 2>/dev/null
|
||||
magick montage "${PART3_PATH}/logo.png" -background 'none' -tile '3x3' -geometry '350x210' "${PART3_PATH}/logo.png" 2>/dev/null
|
||||
convert -rotate 180 "${PART3_PATH}/logo.png" "${PART3_PATH}/logo.png" 2>/dev/null
|
||||
return 0
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# check Cmdline
|
||||
# 1 - key name
|
||||
# 2 - key string
|
||||
function checkCmdline() {
|
||||
grub-editenv "${USER_GRUBENVFILE}" list 2>/dev/null | grep -q "^${1}=\"\?${2}\"\?"
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# set Cmdline
|
||||
# 1 - key name
|
||||
# 2 - key string
|
||||
function setCmdline() {
|
||||
[ -z "${1}" ] && return 1
|
||||
if [ -n "${2}" ]; then
|
||||
grub-editenv "${USER_GRUBENVFILE}" set "${1}=${2}"
|
||||
else
|
||||
grub-editenv "${USER_GRUBENVFILE}" unset "${1}"
|
||||
fi
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# Find and mount the DSM root filesystem
|
||||
# (based on pocopico's TCRP code)
|
||||
function findAndMountDSMRoot() {
|
||||
[ $(mount | grep -i "${DSMROOT_PATH}" | wc -l) -gt 0 ] && return 0
|
||||
dsmrootdisk="$(blkid | grep -i linux_raid_member | grep -E "/dev/.*1:" | head -1 | awk -F ":" '{print $1}')"
|
||||
[ -z "${dsmrootdisk}" ] && return -1
|
||||
[ ! -d "${DSMROOT_PATH}" ] && mkdir -p "${DSMROOT_PATH}"
|
||||
[ $(mount | grep -i "${DSMROOT_PATH}" | wc -l) -eq 0 ] && mount -t ext4 "${dsmrootdisk}" "${DSMROOT_PATH}"
|
||||
if [ $(mount | grep -i "${DSMROOT_PATH}" | wc -l) -eq 0 ]; then
|
||||
echo "Failed to mount"
|
||||
return -1
|
||||
# add Cmdline
|
||||
# 1 - key name
|
||||
# 2 - key string
|
||||
function addCmdline() {
|
||||
local CMDLINE
|
||||
CMDLINE="$(grub-editenv "${USER_GRUBENVFILE}" list 2>/dev/null | grep "^${1}=" | cut -d'=' -f2- | sed 's/^"//;s/"$//')"
|
||||
[ -n "${CMDLINE}" ] && CMDLINE="${CMDLINE} ${2}" || CMDLINE="${2}"
|
||||
setCmdline "${1}" "${CMDLINE}"
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# del Cmdline
|
||||
# 1 - key name
|
||||
# 2 - key string
|
||||
function delCmdline() {
|
||||
local CMDLINE
|
||||
CMDLINE="$(grub-editenv "${USER_GRUBENVFILE}" list 2>/dev/null | grep "^${1}=" | cut -d'=' -f2- | sed 's/^"//;s/"$//')"
|
||||
CMDLINE="$(echo "${CMDLINE}" | sed "s/[ \t]*${2}//; s/^[ \t]*//;s/[ \t]*$//")"
|
||||
setCmdline "${1}" "${CMDLINE}"
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# check CPU Intel(VT-d)/AMD(AMD-Vi)
|
||||
function checkCPU_VT_d() {
|
||||
lsmod | grep -q msr || modprobe msr 2>/dev/null
|
||||
if grep -q "GenuineIntel" /proc/cpuinfo 2>/dev/null; then
|
||||
VT_D_ENABLED=$(rdmsr 0x3a 2>/dev/null)
|
||||
[ "$((${VT_D_ENABLED:-0x0} & 0x5))" -eq $((0x5)) ] && return 0
|
||||
elif grep -q "AuthenticAMD" /proc/cpuinfo 2>/dev/null; then
|
||||
IOMMU_ENABLED=$(rdmsr 0xC0010114 2>/dev/null)
|
||||
[ "$((${IOMMU_ENABLED:-0x0} & 0x1))" -eq $((0x1)) ] && return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# check BIOS Intel(VT-d)/AMD(AMD-Vi)
|
||||
function checkBIOS_VT_d() {
|
||||
if grep -q "GenuineIntel" /proc/cpuinfo 2>/dev/null; then
|
||||
dmesg 2>/dev/null | grep -iq "DMAR-IR.*DRHD base" && return 0
|
||||
elif grep -q "AuthenticAMD" /proc/cpuinfo 2>/dev/null; then
|
||||
# TODO: need check
|
||||
dmesg 2>/dev/null | grep -iq "AMD-Vi.*enabled" && return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# Rebooting
|
||||
# 1 - mode
|
||||
function rebootTo() {
|
||||
local MODES="config recovery junior uefi memtest"
|
||||
if [ -z "${1}" ] || ! echo "${MODES}" | grep -wq "${1}"; then exit 1; fi
|
||||
# echo "Rebooting to ${1} mode"
|
||||
GRUBPATH="$(dirname "$(find "${PART1_PATH}/" -name grub.cfg 2>/dev/null | head -1)")"
|
||||
[ -z "${GRUBPATH}" ] && exit 1
|
||||
ENVFILE="${GRUBPATH}/grubenv"
|
||||
[ ! -f "${ENVFILE}" ] && grub-editenv "${ENVFILE}" create
|
||||
grub-editenv "${ENVFILE}" set next_entry="${1}"
|
||||
reboot
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# connect wlanif
|
||||
# 1 netif name
|
||||
# 2 enable/disable (1/0)
|
||||
function connectwlanif() {
|
||||
[ -z "${1}" ] || [ ! -d "/sys/class/net/${1}" ] && return 1
|
||||
if [ "${2}" = "0" ]; then
|
||||
if [ -f "/var/run/wpa_supplicant.pid.${1}" ]; then
|
||||
kill -9 "$(cat /var/run/wpa_supplicant.pid.${1})"
|
||||
rm -f "/var/run/wpa_supplicant.pid.${1}"
|
||||
fi
|
||||
else
|
||||
local CONF
|
||||
CONF="$([ -f "${PART1_PATH}/wpa_supplicant.conf" ] && echo "${PART1_PATH}/wpa_supplicant.conf" || echo "")"
|
||||
[ -z "${CONF}" ] && return 2
|
||||
[ -f "/var/run/wpa_supplicant.pid.${1}" ] && return 0
|
||||
wpa_supplicant -i "${1}" -c "${CONF}" -qq -B -P "/var/run/wpa_supplicant.pid.${1}" >/dev/null 2>&1
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# Rebooting
|
||||
function rebootTo() {
|
||||
[ "${1}" != "junior" -a "${1}" != "config" ] && exit 1
|
||||
# echo "Rebooting to ${1} mode"
|
||||
GRUBPATH="$(dirname $(find ${PART1_PATH}/ -name grub.cfg | head -1))"
|
||||
ENVFILE="${GRUBPATH}/grubenv"
|
||||
[ ! -f "${ENVFILE}" ] && grub-editenv ${ENVFILE} create
|
||||
grub-editenv ${ENVFILE} set next_entry="${1}"
|
||||
reboot
|
||||
# Find and mount the DSM root filesystem
|
||||
function findDSMRoot() {
|
||||
local DSMROOTS=""
|
||||
[ -z "${DSMROOTS}" ] && DSMROOTS="$(mdadm --detail --scan 2>/dev/null | grep -v "INACTIVE-ARRAY" | grep -E "name=SynologyNAS:0|name=DiskStation:0|name=SynologyNVR:0|name=BeeStation:0" | awk '{print $2}' | uniq)"
|
||||
[ -z "${DSMROOTS}" ] && DSMROOTS="$(lsblk -pno KNAME,PARTN,FSTYPE,FSVER,LABEL | grep -E "sd[a-z]{1,2}1" | grep -w "linux_raid_member" | grep "0.9" | awk '{print $1}')"
|
||||
echo "${DSMROOTS}"
|
||||
return 0
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# check and fix the DSM root partition
|
||||
# 1 - DSM root path
|
||||
function fixDSMRootPart() {
|
||||
if mdadm --detail "${1}" 2>/dev/null | grep -i "State" | grep -iEq "active|FAILED|Not Started"; then
|
||||
mdadm --stop "${1}" >/dev/null 2>&1
|
||||
mdadm --assemble --scan >/dev/null 2>&1
|
||||
T="$(blkid -o value -s TYPE "${1}" 2>/dev/null | sed 's/linux_raid_member/ext4/')"
|
||||
if [ "${T}" = "btrfs" ]; then
|
||||
btrfs check --readonly "${1}" >/dev/null 2>&1
|
||||
else
|
||||
fsck "${1}" >/dev/null 2>&1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# Copy DSM files to the boot partition
|
||||
# 1 - DSM root path
|
||||
function copyDSMFiles() {
|
||||
if [ -f "${1}/VERSION" ] && [ -f "${1}/grub_cksum.syno" ] && [ -f "${1}/GRUB_VER" ] && [ -f "${1}/zImage" ] && [ -f "${1}/rd.gz" ]; then
|
||||
# Remove old model files
|
||||
rm -f "${PART1_PATH}/grub_cksum.syno" "${PART1_PATH}/GRUB_VER" "${PART2_PATH}/grub_cksum.syno" "${PART2_PATH}/GRUB_VER"
|
||||
rm -f "${ORI_ZIMAGE_FILE}" "${ORI_RDGZ_FILE}"
|
||||
# Remove old build files
|
||||
rm -f "${MOD_ZIMAGE_FILE}" "${MOD_RDGZ_FILE}" >/dev/null
|
||||
# Copy new model files
|
||||
cp -f "${1}/grub_cksum.syno" "${PART1_PATH}"
|
||||
cp -f "${1}/GRUB_VER" "${PART1_PATH}"
|
||||
cp -f "${1}/grub_cksum.syno" "${PART2_PATH}"
|
||||
cp -f "${1}/GRUB_VER" "${PART2_PATH}"
|
||||
cp -f "${1}/zImage" "${ORI_ZIMAGE_FILE}"
|
||||
cp -f "${1}/rd.gz" "${ORI_RDGZ_FILE}"
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# Send a webhook notification
|
||||
# 1 - webhook url
|
||||
# 2 - message (optional)
|
||||
function sendWebhook() {
|
||||
local URL="${1}"
|
||||
local MSGT="Notification from ${RR_TITLE}${RR_RELEASE:+(${RR_RELEASE})}"
|
||||
local MSGC="${2:-"test at $(date +'%Y-%m-%d %H:%M:%S')"}"
|
||||
|
||||
[ -z "${URL}" ] && return 1
|
||||
|
||||
curl -skL -X POST -H "Content-Type: application/json" -d "{\"title\":\"${MSGT}\", \"text\":\"${MSGC}\"}" "${URL}" >/dev/null 2>&1
|
||||
return $?
|
||||
}
|
||||
|
||||
@ -1,19 +1,22 @@
|
||||
[ -z "${WORK_PATH}" -o ! -d "${WORK_PATH}/include" ] && WORK_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")/../" >/dev/null 2>&1 && pwd)"
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Copyright (C) 2022 Ing <https://github.com/wjz304>
|
||||
#
|
||||
# This is free software, licensed under the MIT License.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
if [ -d "/usr/share/locale" ]; then
|
||||
if [ $(ls ${WORK_PATH}/lang/*.mo 2>/dev/null | wc -l) -gt 0 ]; then
|
||||
for F in $(ls ${WORK_PATH}/lang/*.mo); do
|
||||
install "${F}" "/usr/share/locale/$(basename "${F}" .mo)/LC_MESSAGES/rr.mo"
|
||||
done
|
||||
[ -z "${WORK_PATH}" ] || [ ! -d "${WORK_PATH}/include" ] && WORK_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")/../" >/dev/null 2>&1 && pwd)"
|
||||
|
||||
type gettext >/dev/null 2>&1 && alias TEXT='gettext "rr"' || alias TEXT='echo'
|
||||
shopt -s expand_aliases
|
||||
|
||||
[ -d "${WORK_PATH}/lang" ] && export TEXTDOMAINDIR="${WORK_PATH}/lang"
|
||||
[ -f "${PART1_PATH}/.locale" ] && LC_ALL="$(cat "${PART1_PATH}/.locale")" && export LC_ALL="${LC_ALL}"
|
||||
|
||||
if [ -f "${PART1_PATH}/.timezone" ]; then
|
||||
TIMEZONE="$(cat "${PART1_PATH}/.timezone")"
|
||||
if [ -f "/usr/share/zoneinfo/right/${TIMEZONE}" ]; then
|
||||
ln -sf "/usr/share/zoneinfo/right/${TIMEZONE}" /etc/localtime
|
||||
fi
|
||||
|
||||
if [ -f ${PART1_PATH}/.locale ]; then
|
||||
export LANG="$(cat ${PART1_PATH}/.locale)"
|
||||
fi
|
||||
|
||||
alias TEXT='gettext "rr"'
|
||||
shopt -s expand_aliases
|
||||
else
|
||||
alias TEXT='echo'
|
||||
shopt -s expand_aliases
|
||||
fi
|
||||
fi
|
||||
|
||||
@ -1,23 +1,154 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Copyright (C) 2022 Ing <https://github.com/wjz304>
|
||||
#
|
||||
# This is free software, licensed under the MIT License.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
###############################################################################
|
||||
# Unpack modules from a tgz file
|
||||
# 1 - Platform
|
||||
# 2 - Kernel Version
|
||||
# 3 - dummy path
|
||||
function unpackModules() {
|
||||
local PLATFORM=${1}
|
||||
local PKVER=${2}
|
||||
local UNPATH=${3:-"${TMP_PATH}/modules"}
|
||||
local KERNEL
|
||||
KERNEL="$(readConfigKey "kernel" "${USER_CONFIG_FILE}")"
|
||||
|
||||
rm -rf "${UNPATH}"
|
||||
mkdir -p "${UNPATH}"
|
||||
if [ "${KERNEL}" = "custom" ]; then
|
||||
tar -zxf "${CKS_PATH}/modules-${PLATFORM}-${PKVER}.tgz" -C "${UNPATH}"
|
||||
else
|
||||
tar -zxf "${MODULES_PATH}/${PLATFORM}-${PKVER}.tgz" -C "${UNPATH}"
|
||||
fi
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# Packag modules to a tgz file
|
||||
# 1 - Platform
|
||||
# 2 - Kernel Version
|
||||
# 3 - dummy path
|
||||
function packagModules() {
|
||||
local PLATFORM=${1}
|
||||
local PKVER=${2}
|
||||
local UNPATH=${3:-"${TMP_PATH}/modules"}
|
||||
local KERNEL
|
||||
KERNEL="$(readConfigKey "kernel" "${USER_CONFIG_FILE}")"
|
||||
|
||||
if [ "${KERNEL}" = "custom" ]; then
|
||||
tar -zcf "${CKS_PATH}/modules-${PLATFORM}-${PKVER}.tgz" -C "${UNPATH}" .
|
||||
else
|
||||
tar -zcf "${MODULES_PATH}/${PLATFORM}-${PKVER}.tgz" -C "${UNPATH}" .
|
||||
fi
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# Return list of all modules available
|
||||
# 1 - Platform
|
||||
# 2 - Kernel Version
|
||||
function getAllModules() {
|
||||
PLATFORM=${1}
|
||||
KVER=${2}
|
||||
# Unzip modules for temporary folder
|
||||
rm -rf "${TMP_PATH}/modules"
|
||||
mkdir -p "${TMP_PATH}/modules"
|
||||
tar -zxf "${MODULES_PATH}/${PLATFORM}-${KVER}.tgz" -C "${TMP_PATH}/modules"
|
||||
# Get list of all modules
|
||||
for F in $(ls ${TMP_PATH}/modules/*.ko); do
|
||||
X=$(basename ${F})
|
||||
M=${X:0:-3}
|
||||
DESC=$(modinfo ${F} | awk -F':' '/description:/{ print $2}' | awk '{sub(/^[ ]+/,""); print}')
|
||||
[ -z "${DESC}" ] && DESC="${X}"
|
||||
echo "${M} \"${DESC}\""
|
||||
local PLATFORM=${1}
|
||||
local PKVER=${2}
|
||||
|
||||
if [ -z "${PLATFORM}" ] || [ -z "${PKVER}" ]; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
UNPATH="${TMP_PATH}/modules"
|
||||
unpackModules "${PLATFORM}" "${PKVER}" "${UNPATH}"
|
||||
|
||||
for D in "" "update"; do
|
||||
for F in ${UNPATH}/${D:+${D}/}*.ko; do
|
||||
[ ! -e "${F}" ] && continue
|
||||
local N DESC
|
||||
N="$(basename "${F}" .ko)"
|
||||
DESC="$(modinfo -F description "${F}" 2>/dev/null)"
|
||||
DESC="$(echo "${DESC}" | tr -d '\n\r\t\\' | sed "s/\"/'/g")"
|
||||
echo "${D:+${D}/}${N} \"${DESC:-${D:+${D}/}${N}}\""
|
||||
done
|
||||
done
|
||||
rm -rf "${TMP_PATH}/modules"
|
||||
rm -rf "${UNPATH}"
|
||||
}
|
||||
|
||||
function getLoadedModules() {
|
||||
local PLATFORM=${1}
|
||||
local PKVER=${2}
|
||||
|
||||
if [ -z "${PLATFORM}" ] || [ -z "${PKVER}" ]; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
UNPATH="${TMP_PATH}/lib/modules/$(uname -r)"
|
||||
unpackModules "${PLATFORM}" "${PKVER}" "${UNPATH}"
|
||||
depmod -a -b "${TMP_PATH}" >/dev/null 2>&1
|
||||
|
||||
ALL_KO=$(
|
||||
find /sys/devices -name modalias -exec cat {} \; | while read -r modalias; do
|
||||
modprobe -d "${TMP_PATH}" --resolve-alias "${modalias}" 2>/dev/null
|
||||
done | sort -u
|
||||
)
|
||||
rm -rf "${UNPATH}"
|
||||
|
||||
ALL_DEPS=""
|
||||
for M in ${ALL_KO}; do
|
||||
ALL_DEPS="${ALL_DEPS} $(getdepends "${PLATFORM}" "${PKVER}" "${M}")"
|
||||
done
|
||||
|
||||
echo "${ALL_DEPS}" | tr ' ' '\n' | grep -v '^$' | sort -u
|
||||
return 0
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# Return list of all modules available
|
||||
# 1 - Platform
|
||||
# 2 - Kernel Version
|
||||
# 3 - Module list
|
||||
function installModules() {
|
||||
local PLATFORM=${1}
|
||||
local PKVER=${2}
|
||||
|
||||
if [ -z "${PLATFORM}" ] || [ -z "${PKVER}" ]; then
|
||||
echo "ERROR: installModules: Platform or Kernel Version not defined" >"${LOG_FILE}"
|
||||
return 1
|
||||
fi
|
||||
local MLIST ODP KERNEL
|
||||
shift 2
|
||||
MLIST="${*}"
|
||||
|
||||
UNPATH="${TMP_PATH}/modules"
|
||||
unpackModules "${PLATFORM}" "${PKVER}" "${UNPATH}"
|
||||
|
||||
ODP="$(readConfigKey "odp" "${USER_CONFIG_FILE}")"
|
||||
for D in "" "update"; do
|
||||
for F in ${UNPATH}/${D:+${D}/}*.ko; do
|
||||
[ ! -e "${F}" ] && continue
|
||||
M=$(basename "${F}")
|
||||
[ "${ODP}" = "true" ] && [ -f "${RAMDISK_PATH}/usr/lib/modules/${D:+${D}/}${M}" ] && continue # TODO: check if module is already loaded
|
||||
if echo "${MLIST}" | grep -wq "${D:+${D}/}$(basename "${M}" .ko)"; then
|
||||
mkdir -p "${RAMDISK_PATH}/usr/lib/modules/${D:+${D}/}"
|
||||
cp -f "${F}" "${RAMDISK_PATH}/usr/lib/modules/${D:+${D}/}${M}" 2>"${LOG_FILE}"
|
||||
else
|
||||
rm -f "${RAMDISK_PATH}/usr/lib/modules/${D:+${D}/}${M}" 2>"${LOG_FILE}"
|
||||
fi
|
||||
done
|
||||
done
|
||||
rm -rf "${UNPATH}"
|
||||
|
||||
mkdir -p "${RAMDISK_PATH}/usr/lib/firmware"
|
||||
KERNEL=$(readConfigKey "kernel" "${USER_CONFIG_FILE}")
|
||||
if [ "${KERNEL}" = "custom" ]; then
|
||||
tar -zxf "${CKS_PATH}/firmware.tgz" -C "${RAMDISK_PATH}/usr/lib/firmware" 2>"${LOG_FILE}"
|
||||
else
|
||||
tar -zxf "${MODULES_PATH}/firmware.tgz" -C "${RAMDISK_PATH}/usr/lib/firmware" 2>"${LOG_FILE}"
|
||||
fi
|
||||
if [ $? -ne 0 ]; then
|
||||
return 1
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
@ -26,15 +157,21 @@ function getAllModules() {
|
||||
# 2 - Kernel Version
|
||||
# 3 - ko file
|
||||
function addToModules() {
|
||||
PLATFORM=${1}
|
||||
KVER=${2}
|
||||
KOFILE=${3}
|
||||
# Unzip modules for temporary folder
|
||||
rm -rf "${TMP_PATH}/modules"
|
||||
mkdir -p "${TMP_PATH}/modules"
|
||||
tar -zxf "${MODULES_PATH}/${PLATFORM}-${KVER}.tgz" -C "${TMP_PATH}/modules"
|
||||
cp -f ${KOFILE} ${TMP_PATH}/modules
|
||||
tar -zcf "${MODULES_PATH}/${PLATFORM}-${KVER}.tgz" -C "${TMP_PATH}/modules" .
|
||||
local PLATFORM=${1}
|
||||
local PKVER=${2}
|
||||
local KOFILE=${3}
|
||||
|
||||
if [ -z "${PLATFORM}" ] || [ -z "${PKVER}" ] || [ -z "${KOFILE}" ]; then
|
||||
echo ""
|
||||
return 1
|
||||
fi
|
||||
|
||||
UNPATH="${TMP_PATH}/modules"
|
||||
unpackModules "${PLATFORM}" "${PKVER}" "${UNPATH}"
|
||||
|
||||
cp -f "${KOFILE}" "${UNPATH}"
|
||||
|
||||
packagModules "${PLATFORM}" "${PKVER}" "${UNPATH}"
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
@ -43,15 +180,21 @@ function addToModules() {
|
||||
# 2 - Kernel Version
|
||||
# 3 - ko name
|
||||
function delToModules() {
|
||||
PLATFORM=${1}
|
||||
KVER=${2}
|
||||
KONAME=${3}
|
||||
# Unzip modules for temporary folder
|
||||
rm -rf "${TMP_PATH}/modules"
|
||||
mkdir -p "${TMP_PATH}/modules"
|
||||
tar -zxf "${MODULES_PATH}/${PLATFORM}-${KVER}.tgz" -C "${TMP_PATH}/modules"
|
||||
rm -f ${TMP_PATH}/modules/${KONAME}
|
||||
tar -zcf "${MODULES_PATH}/${PLATFORM}-${KVER}.tgz" -C "${TMP_PATH}/modules" .
|
||||
local PLATFORM=${1}
|
||||
local PKVER=${2}
|
||||
local KONAME=${3}
|
||||
|
||||
if [ -z "${PLATFORM}" ] || [ -z "${PKVER}" ] || [ -z "${KONAME}" ]; then
|
||||
echo ""
|
||||
return 1
|
||||
fi
|
||||
|
||||
UNPATH="${TMP_PATH}/modules"
|
||||
unpackModules "${PLATFORM}" "${PKVER}" "${UNPATH}"
|
||||
|
||||
rm -f "${UNPATH}/${KONAME}"
|
||||
|
||||
packagModules "${PLATFORM}" "${PKVER}" "${UNPATH}"
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
@ -61,24 +204,31 @@ function delToModules() {
|
||||
# 3 - ko name
|
||||
function getdepends() {
|
||||
function _getdepends() {
|
||||
if [ -f "${TMP_PATH}/modules/${1}.ko" ]; then
|
||||
depends=($(modinfo "${TMP_PATH}/modules/${1}.ko" | grep depends: | awk -F: '{print $2}' | awk '$1=$1' | sed 's/,/ /g'))
|
||||
if [ ${#depends[*]} -gt 0 ]; then
|
||||
for k in ${depends[@]}; do
|
||||
if [ -f "${UNPATH}/${1}.ko" ]; then
|
||||
local depends
|
||||
depends="$(modinfo -F depends "${UNPATH}/${1}.ko" 2>/dev/null | sed 's/,/\n/g')"
|
||||
if [ "$(echo "${depends}" | wc -w)" -gt 0 ]; then
|
||||
for k in ${depends}; do
|
||||
echo "${k}"
|
||||
_getdepends "${k}"
|
||||
done
|
||||
fi
|
||||
fi
|
||||
}
|
||||
PLATFORM=${1}
|
||||
KVER=${2}
|
||||
KONAME=${3}
|
||||
# Unzip modules for temporary folder
|
||||
rm -rf "${TMP_PATH}/modules"
|
||||
mkdir -p "${TMP_PATH}/modules"
|
||||
tar -zxf "${MODULES_PATH}/${PLATFORM}-${KVER}.tgz" -C "${TMP_PATH}/modules"
|
||||
DPS=($(_getdepends ${KONAME} | tr ' ' '\n' | sort -u))
|
||||
echo ${DPS[@]}
|
||||
rm -rf "${TMP_PATH}/modules"
|
||||
|
||||
local PLATFORM=${1}
|
||||
local PKVER=${2}
|
||||
local KONAME=${3}
|
||||
|
||||
if [ -z "${PLATFORM}" ] || [ -z "${PKVER}" ] || [ -z "${KONAME}" ]; then
|
||||
echo ""
|
||||
return 1
|
||||
fi
|
||||
|
||||
UNPATH="${TMP_PATH}/modules"
|
||||
unpackModules "${PLATFORM}" "${PKVER}" "${UNPATH}"
|
||||
|
||||
_getdepends "${KONAME}" | sort -u
|
||||
echo "${KONAME}"
|
||||
rm -rf "${UNPATH}"
|
||||
}
|
||||
|
||||
@ -1,31 +1,54 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Copyright (C) 2022 Ing <https://github.com/wjz304>
|
||||
#
|
||||
# This is free software, licensed under the MIT License.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
set -e
|
||||
[ -z "${WORK_PATH}" -o ! -d "${WORK_PATH}/include" ] && WORK_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
|
||||
[ -z "${WORK_PATH}" ] || [ ! -d "${WORK_PATH}/include" ] && WORK_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
|
||||
|
||||
. ${WORK_PATH}/include/functions.sh
|
||||
. ${WORK_PATH}/include/addons.sh
|
||||
. "${WORK_PATH}/include/functions.sh"
|
||||
. "${WORK_PATH}/include/addons.sh"
|
||||
|
||||
if type vmware-toolbox-cmd >/dev/null 2>&1; then
|
||||
if [ "Disable" = "$(vmware-toolbox-cmd timesync status 2>/dev/null)" ]; then
|
||||
vmware-toolbox-cmd timesync enable >/dev/null 2>&1 || true
|
||||
fi
|
||||
if [ "Enabled" = "$(vmware-toolbox-cmd timesync status 2>/dev/null)" ]; then
|
||||
vmware-toolbox-cmd timesync disable >/dev/null 2>&1 || true
|
||||
fi
|
||||
fi
|
||||
|
||||
[ -z "${LOADER_DISK}" ] && die "$(TEXT "Loader is not init!")"
|
||||
checkBootLoader || die "$(TEXT "The loader is corrupted, please rewrite it!")"
|
||||
|
||||
# Shows title
|
||||
clear
|
||||
[ -z "${COLUMNS}" ] && COLUMNS=50
|
||||
TITLE="$(printf "$(TEXT "Welcome to %s")" "${RR_TITLE}")"
|
||||
printf "\033[1;44m%*s\n" ${COLUMNS} ""
|
||||
printf "\033[1;44m%*s\033[A\n" ${COLUMNS} ""
|
||||
printf "\033[1;32m%*s\033[0m\n" $(((${#TITLE} + ${COLUMNS}) / 2)) "${TITLE}"
|
||||
printf "\033[1;44m%*s\033[0m\n" ${COLUMNS} ""
|
||||
COLUMNS=$(ttysize 2>/dev/null | awk '{print $1}')
|
||||
COLUMNS=${COLUMNS:-80}
|
||||
TITLE="$(printf "$(TEXT "Welcome to %s")" "${RR_TITLE}${RR_RELEASE:+(${RR_RELEASE})}")"
|
||||
DATE="$(date)"
|
||||
printf "\033[1;44m%*s\n" "${COLUMNS}" ""
|
||||
printf "\033[1;44m%*s\033[A\n" "${COLUMNS}" ""
|
||||
printf "\033[1;31m%*s\033[0m\n" "$(((${#TITLE} + ${COLUMNS}) / 2))" "${TITLE}"
|
||||
printf "\033[1;44m%*s\033[A\n" "${COLUMNS}" ""
|
||||
printf "\033[1;32m%*s\033[0m\n" "${COLUMNS}" "${DATE}"
|
||||
|
||||
# Get first MAC address
|
||||
ETHX=($(ls /sys/class/net/ | grep eth)) # real network cards list
|
||||
ETHX="$(find /sys/class/net/ -mindepth 1 -maxdepth 1 ! -name lo -exec basename {} \; | sort)"
|
||||
# No network devices
|
||||
[ ${#ETHX[@]} -le 0 ] && die "$(TEXT "Network devices not found!")"
|
||||
[ "$(echo "${ETHX}" | wc -w)" -le 0 ] && die "$(TEXT "Network devices not found! Please re execute init.sh after connecting to the network!")"
|
||||
|
||||
# If user config file not exists, initialize it
|
||||
if [ ! -f "${USER_CONFIG_FILE}" ]; then
|
||||
touch "${USER_CONFIG_FILE}"
|
||||
fi
|
||||
|
||||
initConfigKey "kernel" "official" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "rd-compressed" "false" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "satadom" "2" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "lkm" "prod" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "dsmlogo" "true" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "directboot" "false" "${USER_CONFIG_FILE}"
|
||||
@ -36,16 +59,22 @@ initConfigKey "kernelway" "power" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "kernelpanic" "5" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "odp" "false" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "hddsort" "false" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "usbasinternal" "false" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "emmcboot" "false" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "platform" "" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "model" "" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "modelid" "" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "productver" "" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "buildnum" "" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "smallnum" "" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "dt" "" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "kver" "" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "kpre" "" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "paturl" "" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "patsum" "" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "sn" "" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "mac1" "" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "mac2" "" "${USER_CONFIG_FILE}"
|
||||
# initConfigKey "maxdisks" "" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "layout" "qwerty" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "keymap" "" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "zimage-hash" "" "${USER_CONFIG_FILE}"
|
||||
@ -53,41 +82,71 @@ initConfigKey "ramdisk-hash" "" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "cmdline" "{}" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "synoinfo" "{}" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "addons" "{}" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "addons.misc" "" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "addons.acpid" "" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "addons.reboottoloader" "" "${USER_CONFIG_FILE}"
|
||||
if [ -z "$(readConfigMap "addons" "${USER_CONFIG_FILE}")" ]; then
|
||||
initConfigKey "addons.acpid" "" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "addons.trivial" "" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "addons.vmtools" "" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "addons.monitor" "" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "addons.mountloader" "" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "addons.powersched" "" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "addons.reboottoloader" "" "${USER_CONFIG_FILE}"
|
||||
fi
|
||||
initConfigKey "modules" "{}" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "modblacklist" "evbug,cdc_ether" "${USER_CONFIG_FILE}"
|
||||
|
||||
# _sort_netif "$(readConfigKey "addons.sortnetif" "${USER_CONFIG_FILE}")"
|
||||
|
||||
for ETH in ${ETHX[@]}; do
|
||||
MACR="$(cat /sys/class/net/${ETH}/address | sed 's/://g')"
|
||||
IPR="$(readConfigKey "network.${MACR}" "${USER_CONFIG_FILE}")"
|
||||
if [ -n "${IPR}" ]; then
|
||||
ip addr add ${IPC}/24 dev ${ETH}
|
||||
sleep 1
|
||||
if [ ! -f "/.dockerenv" ]; then
|
||||
if arrayExistItem "sortnetif:" "$(readConfigMap "addons" "${USER_CONFIG_FILE}")"; then
|
||||
_sort_netif "$(readConfigKey "addons.sortnetif" "${USER_CONFIG_FILE}")"
|
||||
fi
|
||||
ethtool -s ${ETH} wol g 2>/dev/null
|
||||
done
|
||||
for N in ${ETHX}; do
|
||||
MACR="$(cat "/sys/class/net/${N}/address" 2>/dev/null | sed 's/://g')"
|
||||
IPR="$(readConfigKey "network.${MACR}" "${USER_CONFIG_FILE}")"
|
||||
if [ -n "${IPR}" ]; then
|
||||
if [ ! "1" = "$(cat "/sys/class/net/${N}/carrier" 2>/dev/null)" ]; then
|
||||
ip link set "${N}" up 2>/dev/null || true
|
||||
fi
|
||||
IFS='/' read -r -a IPRA <<<"${IPR}"
|
||||
ip addr flush dev "${N}" 2>/dev/null || true
|
||||
ip addr add "${IPRA[0]}/${IPRA[1]:-"255.255.255.0"}" dev "${N}" 2>/dev/null || true
|
||||
if [ -n "${IPRA[2]}" ]; then
|
||||
ip route add default via "${IPRA[2]}" dev "${N}" 2>/dev/null || true
|
||||
fi
|
||||
if [ -n "${IPRA[3]:-${IPRA[2]}}" ]; then
|
||||
sed -i "/nameserver ${IPRA[3]:-${IPRA[2]}}/d" /etc/resolv.conf
|
||||
echo "nameserver ${IPRA[3]:-${IPRA[2]}}" >>/etc/resolv.conf
|
||||
fi
|
||||
sleep 1
|
||||
fi
|
||||
[ "${N::4}" = "wlan" ] && connectwlanif "${N}" 1 && sleep 1
|
||||
[ "${N::3}" = "eth" ] && ethtool -s "${N}" wol g 2>/dev/null || true
|
||||
# [ "${N::3}" = "eth" ] && ethtool -K ${N} rxhash off 2>/dev/null || true
|
||||
done
|
||||
fi
|
||||
|
||||
# Get the VID/PID if we are in USB
|
||||
VID="0x46f4"
|
||||
PID="0x0001"
|
||||
TYPE="DoM"
|
||||
BUS=$(getBus "${LOADER_DISK}")
|
||||
|
||||
BUSLIST="usb sata sas scsi nvme mmc ide virtio vmbus xen docker"
|
||||
if [ "${BUS}" = "usb" ]; then
|
||||
VID="0x$(udevadm info --query property --name ${LOADER_DISK} | grep ID_VENDOR_ID | cut -d= -f2)"
|
||||
PID="0x$(udevadm info --query property --name ${LOADER_DISK} | grep ID_MODEL_ID | cut -d= -f2)"
|
||||
elif [ "${BUS}" != "sata" -a "${BUS}" != "scsi" -a "${BUS}" != "nvme" ]; then
|
||||
die "$(TEXT "Loader disk neither USB or SATA/SCSI/NVME DoM")"
|
||||
VID="0x$(udevadm info --query property --name "${LOADER_DISK}" 2>/dev/null | grep "ID_VENDOR_ID" | cut -d= -f2)"
|
||||
PID="0x$(udevadm info --query property --name "${LOADER_DISK}" 2>/dev/null | grep "ID_MODEL_ID" | cut -d= -f2)"
|
||||
[ "${VID}" = "0x" ] || [ "${PID}" = "0x" ] && die "$(TEXT "The loader disk does not support the current USB Portable Hard Disk.")"
|
||||
TYPE="flashdisk"
|
||||
elif [ "${BUS}" = "docker" ]; then
|
||||
TYPE="PC"
|
||||
elif ! echo "${BUSLIST}" | grep -wq "${BUS}"; then
|
||||
die "$(printf "$(TEXT "The loader disk does not support the current %s, only %s DoM is supported.")" "${BUS}" "${BUSLIST// /\/}")"
|
||||
fi
|
||||
|
||||
# Save variables to user config file
|
||||
writeConfigKey "vid" ${VID} "${USER_CONFIG_FILE}"
|
||||
writeConfigKey "pid" ${PID} "${USER_CONFIG_FILE}"
|
||||
writeConfigKey "vid" "${VID}" "${USER_CONFIG_FILE}"
|
||||
writeConfigKey "pid" "${PID}" "${USER_CONFIG_FILE}"
|
||||
|
||||
# Inform user
|
||||
echo -e "$(TEXT "Loader disk:") \033[1;32m${LOADER_DISK}\033[0m (\033[1;32m${BUS^^} flashdisk\033[0m)"
|
||||
printf "%s \033[1;32m%s (%s %s)\033[0m\n" "$(TEXT "Loader disk:")" "${LOADER_DISK}" "${BUS^^}" "${TYPE}"
|
||||
|
||||
# Load keymap name
|
||||
LAYOUT="$(readConfigKey "layout" "${USER_CONFIG_FILE}")"
|
||||
@ -95,98 +154,135 @@ KEYMAP="$(readConfigKey "keymap" "${USER_CONFIG_FILE}")"
|
||||
|
||||
# Loads a keymap if is valid
|
||||
if [ -f "/usr/share/keymaps/i386/${LAYOUT}/${KEYMAP}.map.gz" ]; then
|
||||
echo -e "$(TEXT "Loading keymap") \033[1;32m${LAYOUT}/${KEYMAP}\033[0m"
|
||||
printf "%s \033[1;32m%s/%s\033[0m\n" "$(TEXT "Loading keymap:")" "${LAYOUT}" "${KEYMAP}"
|
||||
zcat "/usr/share/keymaps/i386/${LAYOUT}/${KEYMAP}.map.gz" | loadkeys
|
||||
fi
|
||||
|
||||
# Decide if boot automatically
|
||||
BOOT=1
|
||||
if ! loaderIsConfigured; then
|
||||
echo -e "\033[1;33m$(TEXT "Loader is not configured!")\033[0m"
|
||||
printf "\033[1;33m%s\033[0m\n" "$(TEXT "Loader is not configured!")"
|
||||
BOOT=0
|
||||
elif grep -q "IWANTTOCHANGETHECONFIG" /proc/cmdline; then
|
||||
echo -e "\033[1;33m$(TEXT "User requested edit settings.")\033[0m"
|
||||
printf "\033[1;33m%s\033[0m\n" "$(TEXT "User requested edit settings.")"
|
||||
BOOT=0
|
||||
elif [ -f "/.dockerenv" ]; then
|
||||
printf "\033[1;33m%s\033[0m\n" "$(TEXT "Docker edit settings.")"
|
||||
BOOT=0
|
||||
fi
|
||||
|
||||
# If is to boot automatically, do it
|
||||
if [ ${BOOT} -eq 1 ]; then
|
||||
boot.sh && exit 0
|
||||
"${WORK_PATH}/boot.sh" && exit 0
|
||||
fi
|
||||
|
||||
HTTP=$(grep -i '^HTTP_PORT=' /etc/rrorg.conf 2>/dev/null | cut -d'=' -f2)
|
||||
DUFS=$(grep -i '^DUFS_PORT=' /etc/rrorg.conf 2>/dev/null | cut -d'=' -f2)
|
||||
TTYD=$(grep -i '^TTYD_PORT=' /etc/rrorg.conf 2>/dev/null | cut -d'=' -f2)
|
||||
|
||||
# Wait for an IP
|
||||
echo "$(printf "$(TEXT "Detected %s network cards.")" "${#ETHX[@]}")"
|
||||
echo "$(TEXT "Checking Connect.")"
|
||||
printf "$(TEXT "Detected %s network cards.\n")" "$(echo "${ETHX}" | wc -w)"
|
||||
printf "$(TEXT "Checking Connect.")"
|
||||
COUNT=0
|
||||
while [ ${COUNT} -lt 30 ]; do
|
||||
hasConnect="false"
|
||||
for N in $(seq 0 $(expr ${#ETHX[@]} - 1)); do
|
||||
if ethtool ${ETHX[${N}]} | grep 'Link detected' | grep -q 'yes'; then
|
||||
echo -en "${ETHX[${N}]} "
|
||||
hasConnect="true"
|
||||
MSG=""
|
||||
for N in ${ETHX}; do
|
||||
if [ "1" = "$(cat "/sys/class/net/${N}/carrier" 2>/dev/null)" ]; then
|
||||
MSG+="${N} "
|
||||
fi
|
||||
done
|
||||
if [ "${hasConnect}" = "true" ]; then
|
||||
echo -en "connected.\n"
|
||||
if [ -n "${MSG}" ]; then
|
||||
printf "\r%s%s \n" "${MSG}" "$(TEXT "connected.")"
|
||||
break
|
||||
fi
|
||||
COUNT=$((${COUNT} + 1))
|
||||
echo -n "."
|
||||
COUNT=$((COUNT + 1))
|
||||
printf "."
|
||||
sleep 1
|
||||
done
|
||||
echo "$(TEXT "Waiting IP.")"
|
||||
for N in $(seq 0 $(expr ${#ETHX[@]} - 1)); do
|
||||
|
||||
if [ ! -f "/.dockerenv" ]; then
|
||||
[ ! -f /var/run/dhcpcd/pid ] && /etc/init.d/S41dhcpcd restart >/dev/null 2>&1 || true
|
||||
fi
|
||||
|
||||
printf "$(TEXT "Waiting IP.\n")"
|
||||
for N in ${ETHX}; do
|
||||
COUNT=0
|
||||
DRIVER=$(ls -ld /sys/class/net/${ETHX[${N}]}/device/driver 2>/dev/null | awk -F '/' '{print $NF}')
|
||||
echo -en "${ETHX[${N}]}(${DRIVER}): "
|
||||
DRIVER="$(basename "$(realpath "/sys/class/net/${N}/device/driver" 2>/dev/null)" 2>/dev/null)"
|
||||
MAC="$(cat "/sys/class/net/${N}/address" 2>/dev/null)" || MAC="00:00:00:00:00:00"
|
||||
printf "%s(%s): " "${N}" "${MAC}@${DRIVER}"
|
||||
while true; do
|
||||
if ! ip link show ${ETHX[${N}]} | grep -q 'UP'; then
|
||||
echo -en "\r${ETHX[${N}]}(${DRIVER}): $(TEXT "DOWN")\n"
|
||||
if [ -z "$(cat "/sys/class/net/${N}/carrier" 2>/dev/null)" ]; then
|
||||
printf "\r%s(%s): %s\n" "${N}" "${MAC}@${DRIVER}" "$(TEXT "DOWN")"
|
||||
break
|
||||
fi
|
||||
if ethtool ${ETHX[${N}]} | grep 'Link detected' | grep -q 'no'; then
|
||||
echo -en "\r${ETHX[${N}]}(${DRIVER}): $(TEXT "NOT CONNECTED")\n"
|
||||
if [ "0" = "$(cat "/sys/class/net/${N}/carrier" 2>/dev/null)" ]; then
|
||||
printf "\r%s(%s): %s\n" "${N}" "${MAC}@${DRIVER}" "$(TEXT "NOT CONNECTED")"
|
||||
break
|
||||
fi
|
||||
if [ ${COUNT} -eq 15 ]; then
|
||||
echo -en "\r${ETHX[${N}]}(${DRIVER}): $(TEXT "TIMEOUT (Please check the IP on the router.)")\n"
|
||||
if [ ${COUNT} -eq 15 ]; then # Under normal circumstances, no errors should occur here.
|
||||
printf "\r%s(%s): %s\n" "${N}" "${MAC}@${DRIVER}" "$(TEXT "TIMEOUT (Please check the IP on the router.)")"
|
||||
break
|
||||
fi
|
||||
COUNT=$((${COUNT} + 1))
|
||||
IP="$(getIP ${ETHX[${N}]})"
|
||||
COUNT=$((COUNT + 1))
|
||||
IP="$(getIP "${N}")"
|
||||
if [ -n "${IP}" ]; then
|
||||
echo -en "\r${ETHX[${N}]}(${DRIVER}): $(printf "$(TEXT "Access \033[1;34mhttp://%s:7681\033[0m to configure the loader via web terminal.")" "${IP}")\n"
|
||||
if echo "${IP}" | grep -q "^169\.254\."; then
|
||||
printf "\r%s(%s): %s\n" "${N}" "${MAC}@${DRIVER}" "$(TEXT "LINK LOCAL (No DHCP server detected.)")"
|
||||
else
|
||||
printf "\r%s(%s): %s\n" "${N}" "${MAC}@${DRIVER}" "$(printf "$(TEXT "Access \033[1;34mhttp://%s:%d\033[0m to configure the loader via web terminal.")" "${IP}" "${TTYD:-7681}")"
|
||||
fi
|
||||
break
|
||||
fi
|
||||
echo -n "."
|
||||
printf "."
|
||||
sleep 1
|
||||
done
|
||||
done
|
||||
|
||||
# Inform user
|
||||
echo
|
||||
echo -e "$(TEXT "Call \033[1;32mmenu.sh\033[0m to configure loader")"
|
||||
echo
|
||||
echo -e "$(TEXT "User config is on") \033[1;32m${USER_CONFIG_FILE}\033[0m"
|
||||
echo -e "$(TEXT "Default SSH Root password is") \033[1;31mrr\033[0m"
|
||||
echo
|
||||
printf "\n"
|
||||
printf "$(TEXT "Call \033[1;32minit.sh\033[0m to re get init info\n")"
|
||||
printf "$(TEXT "Call \033[1;32mmenu.sh\033[0m to configure loader\n")"
|
||||
printf "\n"
|
||||
[ -n "$(cat "${ADD_TIPS_FILE}" 2>/dev/null)" ] && printf "$(TEXT "%s\n")" "$(cat "${ADD_TIPS_FILE}" 2>/dev/null)"
|
||||
printf "$(TEXT "User config is on \033[1;32m%s\033[0m\n")" "${USER_CONFIG_FILE}"
|
||||
printf "$(TEXT "HTTP: \033[1;34mhttp://%s:%d\033[0m\n")" "rr" "${HTTP:-7080}"
|
||||
printf "$(TEXT "DUFS: \033[1;34mhttp://%s:%d\033[0m\n")" "rr" "${DUFS:-7304}"
|
||||
printf "$(TEXT "TTYD: \033[1;34mhttp://%s:%d\033[0m\n")" "rr" "${TTYD:-7681}"
|
||||
printf "\n"
|
||||
if [ -f "/etc/shadow-" ]; then
|
||||
printf "$(TEXT "SSH port is \033[1;31m%d\033[0m, The \033[1;31mroot\033[0m password has been changed\n")" "22"
|
||||
else
|
||||
printf "$(TEXT "SSH port is \033[1;31m%d\033[0m, The \033[1;31mroot\033[0m password is \033[1;31m%s\033[0m\n")" "22" "rr"
|
||||
fi
|
||||
printf "\n"
|
||||
|
||||
DSMLOGO="$(readConfigKey "dsmlogo" "${USER_CONFIG_FILE}")"
|
||||
if [ "${DSMLOGO}" = "true" -a -c "/dev/fb0" ]; then
|
||||
if [ "${DSMLOGO}" = "true" ] && [ -c "/dev/fb0" ] && [ ! -f "/.dockerenv" ]; then
|
||||
IP="$(getIP)"
|
||||
[ -n "${IP}" ] && URL="http://${IP}:7681" || URL="http://arpl:7681/"
|
||||
python ${WORK_PATH}/include/functions.py makeqr -d "${URL}" -l "bl" -o "${TMP_PATH}/qrcode.png"
|
||||
[ -f "${TMP_PATH}/qrcode.png" ] && echo | fbv -acufi "${TMP_PATH}/qrcode.png" >/dev/null 2>/dev/null || true
|
||||
echo "${IP}" | grep -q "^169\.254\." && IP=""
|
||||
[ -n "${IP}" ] && URL="http://${IP}:${TTYD:-7681}" || URL="http://rr:${TTYD:-7681}"
|
||||
python3 "${WORK_PATH}/include/functions.py" makeqr -d "${URL}" -l "0" -o "${TMP_PATH}/qrcode_init.png"
|
||||
[ -f "${TMP_PATH}/qrcode_init.png" ] && echo | fbv -acufi "${TMP_PATH}/qrcode_init.png" >/dev/null 2>&1 || true
|
||||
fi
|
||||
WEBHOOKURL="$(readConfigKey "webhookurl" "${USER_CONFIG_FILE}")"
|
||||
if [ -n "${WEBHOOKURL}" ] && [ ! -f "${TMP_PATH}/WebhookSent" ] && [ ! -f "/.dockerenv" ]; then
|
||||
DMI="$(dmesg 2>/dev/null | grep -i "DMI:" | head -1 | sed 's/\[.*\] DMI: //i')"
|
||||
IP="$(getIP)"
|
||||
echo "${IP}" | grep -q "^169\.254\." && IP=""
|
||||
[ -n "${IP}" ] && URL="http://${IP}:${TTYD:-7681}" || URL="http://rr:${TTYD:-7681}"
|
||||
sendWebhook "${WEBHOOKURL}" "{\"RR\":\"${RR_TITLE}${RR_RELEASE:+(${RR_RELEASE})}\", \"DATE\":\"$(date +'%Y-%m-%d %H:%M:%S')\", \"DMI\":\"${DMI}\", \"URL\":\"${URL}\"}"
|
||||
touch "${TMP_PATH}/WebhookSent"
|
||||
fi
|
||||
|
||||
# Check memory
|
||||
RAM=$(free -m | awk '/Mem:/{print$2}')
|
||||
if [ ${RAM} -le 3500 ]; then
|
||||
echo -e "\033[1;33m$(TEXT "You have less than 4GB of RAM, if errors occur in loader creation, please increase the amount of memory.")\033[0m\n"
|
||||
RAM="$(awk '/MemTotal:/ {printf "%.0f", $2 / 1024}' /proc/meminfo 2>/dev/null)"
|
||||
if [ "${RAM:-0}" -le 3500 ]; then
|
||||
printf "\033[1;33m%s\033[0m\n" "$(TEXT "You have less than 4GB of RAM, if errors occur in loader creation, please increase the amount of memory.")"
|
||||
fi
|
||||
|
||||
mkdir -p "${CKS_PATH}"
|
||||
mkdir -p "${LKMS_PATH}"
|
||||
mkdir -p "${ADDONS_PATH}"
|
||||
mkdir -p "${LKM_PATH}"
|
||||
mkdir -p "${MODULES_PATH}"
|
||||
|
||||
updateAddons
|
||||
exit 0
|
||||
|
||||
Binary file not shown.
Binary file not shown.
1762
files/initrd/opt/rr/lang/ar_SA/LC_MESSAGES/rr.po
Normal file
1762
files/initrd/opt/rr/lang/ar_SA/LC_MESSAGES/rr.po
Normal file
File diff suppressed because it is too large
Load Diff
1763
files/initrd/opt/rr/lang/de_DE/LC_MESSAGES/rr.po
Normal file
1763
files/initrd/opt/rr/lang/de_DE/LC_MESSAGES/rr.po
Normal file
File diff suppressed because it is too large
Load Diff
1762
files/initrd/opt/rr/lang/en_US/LC_MESSAGES/rr.po
Normal file
1762
files/initrd/opt/rr/lang/en_US/LC_MESSAGES/rr.po
Normal file
File diff suppressed because it is too large
Load Diff
1763
files/initrd/opt/rr/lang/es_ES/LC_MESSAGES/rr.po
Normal file
1763
files/initrd/opt/rr/lang/es_ES/LC_MESSAGES/rr.po
Normal file
File diff suppressed because it is too large
Load Diff
1763
files/initrd/opt/rr/lang/fr_FR/LC_MESSAGES/rr.po
Normal file
1763
files/initrd/opt/rr/lang/fr_FR/LC_MESSAGES/rr.po
Normal file
File diff suppressed because it is too large
Load Diff
1762
files/initrd/opt/rr/lang/ja_JP/LC_MESSAGES/rr.po
Normal file
1762
files/initrd/opt/rr/lang/ja_JP/LC_MESSAGES/rr.po
Normal file
File diff suppressed because it is too large
Load Diff
1762
files/initrd/opt/rr/lang/ko_KR/LC_MESSAGES/rr.po
Normal file
1762
files/initrd/opt/rr/lang/ko_KR/LC_MESSAGES/rr.po
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
1762
files/initrd/opt/rr/lang/ru_RU/LC_MESSAGES/rr.po
Normal file
1762
files/initrd/opt/rr/lang/ru_RU/LC_MESSAGES/rr.po
Normal file
File diff suppressed because it is too large
Load Diff
1763
files/initrd/opt/rr/lang/th_TH/LC_MESSAGES/rr.po
Normal file
1763
files/initrd/opt/rr/lang/th_TH/LC_MESSAGES/rr.po
Normal file
File diff suppressed because it is too large
Load Diff
1762
files/initrd/opt/rr/lang/tr_TR/LC_MESSAGES/rr.po
Normal file
1762
files/initrd/opt/rr/lang/tr_TR/LC_MESSAGES/rr.po
Normal file
File diff suppressed because it is too large
Load Diff
1763
files/initrd/opt/rr/lang/uk_UA/LC_MESSAGES/rr.po
Normal file
1763
files/initrd/opt/rr/lang/uk_UA/LC_MESSAGES/rr.po
Normal file
File diff suppressed because it is too large
Load Diff
1763
files/initrd/opt/rr/lang/vi_VN/LC_MESSAGES/rr.po
Normal file
1763
files/initrd/opt/rr/lang/vi_VN/LC_MESSAGES/rr.po
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
1762
files/initrd/opt/rr/lang/zh_CN/LC_MESSAGES/rr.po
Normal file
1762
files/initrd/opt/rr/lang/zh_CN/LC_MESSAGES/rr.po
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
1762
files/initrd/opt/rr/lang/zh_HK/LC_MESSAGES/rr.po
Normal file
1762
files/initrd/opt/rr/lang/zh_HK/LC_MESSAGES/rr.po
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
1762
files/initrd/opt/rr/lang/zh_TW/LC_MESSAGES/rr.po
Normal file
1762
files/initrd/opt/rr/lang/zh_TW/LC_MESSAGES/rr.po
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,73 +0,0 @@
|
||||
id: "DS1019+"
|
||||
synoinfo: &synoinfo
|
||||
support_disk_compatibility: "no"
|
||||
support_memory_compatibility: "no"
|
||||
support_led_brightness_adjustment: "no"
|
||||
support_leds_lp3943: "no"
|
||||
support_syno_hybrid_raid:
|
||||
supportraidgroup:
|
||||
maxlanport: "8"
|
||||
netif_seq: "0 1 2 3 4 5 6 7"
|
||||
buzzeroffen: "0xffff"
|
||||
cmdline: &cmdline
|
||||
HddHotplug: 0
|
||||
syno_hdd_detect: 0
|
||||
syno_hdd_powerup_seq: 0
|
||||
vender_format_version: 2
|
||||
elevator: elevator
|
||||
patch: &patch
|
||||
- "ramdisk-etc-rc-*.patch"
|
||||
- "ramdisk-init-script-v4-*.patch"
|
||||
- "ramdisk-post-init-script-*.patch"
|
||||
- "ramdisk-disable-root-pwd-*.patch"
|
||||
- "ramdisk-disable-disabled-ports-*.patch"
|
||||
platform: "apollolake"
|
||||
unique: "synology_apollolake_1019+"
|
||||
serial:
|
||||
prefix:
|
||||
- "1850"
|
||||
- "1880"
|
||||
middle: "QXR"
|
||||
suffix: "numeric"
|
||||
flags:
|
||||
- "movbe"
|
||||
dom: 2
|
||||
dt: false
|
||||
disks: 4
|
||||
beta: false
|
||||
productvers:
|
||||
"6.2":
|
||||
kver: "4.4.59"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.0":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.1":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.2":
|
||||
kver: "4.4.302"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
@ -1,70 +0,0 @@
|
||||
id: "DS1520+"
|
||||
synoinfo: &synoinfo
|
||||
support_disk_compatibility: "no"
|
||||
support_memory_compatibility: "no"
|
||||
support_led_brightness_adjustment: "no"
|
||||
support_syno_hybrid_raid:
|
||||
supportraidgroup:
|
||||
maxlanport: "8"
|
||||
netif_seq: "0 1 2 3 4 5 6 7"
|
||||
buzzeroffen: "0xffff"
|
||||
cmdline: &cmdline
|
||||
intel_iommu: "igfx_off"
|
||||
synoboot2:
|
||||
HddEnableDynamicPower: 1
|
||||
vender_format_version: 2
|
||||
syno_ttyS0: "serial,0x3f8"
|
||||
syno_ttyS1: "serial,0x2f8"
|
||||
elevator: elevator
|
||||
patch: &patch
|
||||
- "ramdisk-etc-rc-*.patch"
|
||||
- "ramdisk-init-script-v4-*.patch"
|
||||
- "ramdisk-post-init-script-*.patch"
|
||||
- "ramdisk-disable-root-pwd-*.patch"
|
||||
platform: "geminilake"
|
||||
unique: "synology_geminilake_1520+"
|
||||
serial:
|
||||
prefix:
|
||||
- "2060"
|
||||
middle: "RYR"
|
||||
suffix: "alpha"
|
||||
dom: 2
|
||||
dt: true
|
||||
disks: 6
|
||||
beta: true
|
||||
productvers:
|
||||
"6.2":
|
||||
kver: "4.4.59"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.0":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.1":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.2":
|
||||
kver: "4.4.302"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
@ -1,52 +0,0 @@
|
||||
id: "DS1522+"
|
||||
synoinfo: &synoinfo
|
||||
support_disk_compatibility: "no"
|
||||
support_memory_compatibility: "no"
|
||||
support_led_brightness_adjustment: "no"
|
||||
support_syno_hybrid_raid:
|
||||
supportraidgroup:
|
||||
maxlanport: "8"
|
||||
netif_seq: "0 1 2 3 4 5 6 7"
|
||||
buzzeroffen: "0xffff"
|
||||
cmdline: &cmdline
|
||||
synoboot2:
|
||||
SMBusHddDynamicPower: 1
|
||||
vender_format_version: 2
|
||||
syno_ttyS0: "serial,0x3f8"
|
||||
syno_ttyS1: "serial,0x2f8"
|
||||
elevator: elevator
|
||||
patch: &patch
|
||||
- "ramdisk-etc-rc-*.patch"
|
||||
- "ramdisk-init-script-v4-*.patch"
|
||||
- "ramdisk-post-init-script-*.patch"
|
||||
- "ramdisk-disable-root-pwd-*.patch"
|
||||
platform: "r1000"
|
||||
unique: "synology_r1000_1522+"
|
||||
serial:
|
||||
prefix:
|
||||
- "2270"
|
||||
middle: "TRR"
|
||||
suffix: "alpha"
|
||||
macpre: 9009d0
|
||||
dom: 2
|
||||
dt: true
|
||||
disks: 5
|
||||
beta: true
|
||||
productvers:
|
||||
"7.1":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.2":
|
||||
kver: "4.4.302"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
@ -1,71 +0,0 @@
|
||||
id: "DS1621+"
|
||||
synoinfo: &synoinfo
|
||||
support_disk_compatibility: "no"
|
||||
support_memory_compatibility: "no"
|
||||
support_led_brightness_adjustment: "no"
|
||||
support_syno_hybrid_raid:
|
||||
supportraidgroup:
|
||||
maxlanport: "8"
|
||||
netif_seq: "0 1 2 3 4 5 6 7"
|
||||
cmdline: &cmdline
|
||||
HddHotplug: 0
|
||||
synoboot2:
|
||||
syno_hdd_detect: 0
|
||||
syno_hdd_powerup_seq: 0
|
||||
SMBusHddDynamicPower: 1
|
||||
vender_format_version: 2
|
||||
syno_ttyS0: "serial,0x3f8"
|
||||
syno_ttyS1: "serial,0x2f8"
|
||||
elevator: elevator
|
||||
patch: &patch
|
||||
- "ramdisk-etc-rc-*.patch"
|
||||
- "ramdisk-init-script-v4-*.patch"
|
||||
- "ramdisk-post-init-script-*.patch"
|
||||
- "ramdisk-disable-root-pwd-*.patch"
|
||||
platform: "v1000"
|
||||
unique: "synology_v1000_1621+"
|
||||
serial:
|
||||
prefix:
|
||||
- "2080"
|
||||
middle: "S7R"
|
||||
suffix: "alpha"
|
||||
dom: 2
|
||||
dt: true
|
||||
disks: 6
|
||||
beta: true
|
||||
productvers:
|
||||
"6.2":
|
||||
kver: "4.4.59"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.0":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.1":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.2":
|
||||
kver: "4.4.302"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
@ -1,70 +0,0 @@
|
||||
id: "DS1621xs+"
|
||||
synoinfo: &synoinfo
|
||||
support_disk_compatibility: "no"
|
||||
support_memory_compatibility: "no"
|
||||
support_led_brightness_adjustment: "no"
|
||||
support_bde_internal_10g: "no"
|
||||
support_oob_ctl: "no"
|
||||
support_syno_hybrid_raid:
|
||||
supportraidgroup:
|
||||
maxlanport: "8"
|
||||
netif_seq: "0 1 2 3 4 5 6 7"
|
||||
cmdline: &cmdline
|
||||
HddHotplug: 0
|
||||
syno_hdd_detect: 0
|
||||
syno_hdd_powerup_seq: 0
|
||||
vender_format_version: 2
|
||||
elevator: elevator
|
||||
patch: &patch
|
||||
- "ramdisk-etc-rc-*.patch"
|
||||
- "ramdisk-init-script-v4-*.patch"
|
||||
- "ramdisk-post-init-script-*.patch"
|
||||
- "ramdisk-disable-root-pwd-*.patch"
|
||||
- "ramdisk-disable-disabled-ports-*.patch"
|
||||
platform: "broadwellnk"
|
||||
unique: "synology_broadwellnk_1621xs+"
|
||||
serial:
|
||||
prefix:
|
||||
- "2070"
|
||||
middle: "RVR"
|
||||
suffix: "alpha"
|
||||
dom: 1
|
||||
dt: false
|
||||
disks: 6
|
||||
beta: false
|
||||
productvers:
|
||||
"6.2":
|
||||
kver: "4.4.59"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.0":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.1":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.2":
|
||||
kver: "4.4.302"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
@ -1,69 +0,0 @@
|
||||
id: "DS1819+"
|
||||
synoinfo: &synoinfo
|
||||
support_disk_compatibility: "no"
|
||||
support_memory_compatibility: "no"
|
||||
support_led_brightness_adjustment: "no"
|
||||
support_bde_internal_10g: "no"
|
||||
support_syno_hybrid_raid:
|
||||
supportraidgroup:
|
||||
maxlanport: "8"
|
||||
netif_seq: "0 1 2 3 4 5 6 7"
|
||||
cmdline: &cmdline
|
||||
HddHotplug: 0
|
||||
syno_hdd_detect: 0
|
||||
syno_hdd_powerup_seq: 0
|
||||
vender_format_version: 2
|
||||
elevator: elevator
|
||||
patch: &patch
|
||||
- "ramdisk-etc-rc-*.patch"
|
||||
- "ramdisk-init-script-v4-*.patch"
|
||||
- "ramdisk-post-init-script-*.patch"
|
||||
- "ramdisk-disable-root-pwd-*.patch"
|
||||
- "ramdisk-disable-disabled-ports-*.patch"
|
||||
platform: "denverton"
|
||||
unique: "synology_denverton_1819+"
|
||||
serial:
|
||||
prefix:
|
||||
- "1890"
|
||||
middle: "R5R"
|
||||
suffix: "alpha"
|
||||
dom: 2
|
||||
dt: false
|
||||
disks: 8
|
||||
beta: true
|
||||
productvers:
|
||||
"6.2":
|
||||
kver: "4.4.59"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.0":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.1":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.2":
|
||||
kver: "4.4.302"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
@ -1,71 +0,0 @@
|
||||
id: "DS1821+"
|
||||
synoinfo: &synoinfo
|
||||
support_disk_compatibility: "no"
|
||||
support_memory_compatibility: "no"
|
||||
support_led_brightness_adjustment: "no"
|
||||
support_syno_hybrid_raid:
|
||||
supportraidgroup:
|
||||
maxlanport: "8"
|
||||
netif_seq: "0 1 2 3 4 5 6 7"
|
||||
cmdline: &cmdline
|
||||
HddHotplug: 0
|
||||
synoboot2:
|
||||
syno_hdd_detect: 0
|
||||
syno_hdd_powerup_seq: 0
|
||||
SMBusHddDynamicPower: 1
|
||||
vender_format_version: 2
|
||||
syno_ttyS0: "serial,0x3f8"
|
||||
syno_ttyS1: "serial,0x2f8"
|
||||
elevator: elevator
|
||||
patch: &patch
|
||||
- "ramdisk-etc-rc-*.patch"
|
||||
- "ramdisk-init-script-v4-*.patch"
|
||||
- "ramdisk-post-init-script-*.patch"
|
||||
- "ramdisk-disable-root-pwd-*.patch"
|
||||
platform: "v1000"
|
||||
unique: "synology_v1000_1821+"
|
||||
serial:
|
||||
prefix:
|
||||
- "2110"
|
||||
middle: "SKR"
|
||||
suffix: "alpha"
|
||||
dom: 2
|
||||
dt: true
|
||||
disks: 8
|
||||
beta: false
|
||||
productvers:
|
||||
"6.2":
|
||||
kver: "4.4.59"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.0":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.1":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.2":
|
||||
kver: "4.4.302"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
@ -1,51 +0,0 @@
|
||||
id: "DS1823xs+"
|
||||
synoinfo: &synoinfo
|
||||
support_disk_compatibility: "no"
|
||||
support_memory_compatibility: "no"
|
||||
support_led_brightness_adjustment: "no"
|
||||
support_syno_hybrid_raid:
|
||||
supportraidgroup:
|
||||
maxlanport: "8"
|
||||
netif_seq: "0 1 2 3 4 5 6 7"
|
||||
cmdline: &cmdline
|
||||
synoboot2:
|
||||
syno_hdd_detect: 0
|
||||
SMBusHddDynamicPower: 1
|
||||
vender_format_version: 2
|
||||
syno_ttyS0: "serial,0x3f8"
|
||||
syno_ttyS1: "serial,0x2f8"
|
||||
elevator: elevator
|
||||
patch: &patch
|
||||
- "ramdisk-etc-rc-*.patch"
|
||||
- "ramdisk-init-script-v4-*.patch"
|
||||
- "ramdisk-post-init-script-*.patch"
|
||||
- "ramdisk-disable-root-pwd-*.patch"
|
||||
platform: "v1000"
|
||||
unique: "synology_v1000_1823xs+"
|
||||
serial:
|
||||
prefix:
|
||||
- "2280"
|
||||
middle: "V5R"
|
||||
suffix: "alpha"
|
||||
dom: 2
|
||||
dt: true
|
||||
disks: 12
|
||||
beta: false
|
||||
productvers:
|
||||
"7.1":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.2":
|
||||
kver: "4.4.302"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
@ -1,70 +0,0 @@
|
||||
id: "DS220+"
|
||||
synoinfo: &synoinfo
|
||||
support_disk_compatibility: "no"
|
||||
support_memory_compatibility: "no"
|
||||
support_led_brightness_adjustment: "no"
|
||||
support_syno_hybrid_raid:
|
||||
supportraidgroup:
|
||||
maxlanport: "8"
|
||||
netif_seq: "0 1 2 3 4 5 6 7"
|
||||
buzzeroffen: "0xffff"
|
||||
cmdline: &cmdline
|
||||
intel_iommu: "igfx_off"
|
||||
synoboot2:
|
||||
HddEnableDynamicPower: 1
|
||||
vender_format_version: 2
|
||||
syno_ttyS0: "serial,0x3f8"
|
||||
syno_ttyS1: "serial,0x2f8"
|
||||
elevator: elevator
|
||||
patch: &patch
|
||||
- "ramdisk-etc-rc-*.patch"
|
||||
- "ramdisk-init-script-v4-*.patch"
|
||||
- "ramdisk-post-init-script-*.patch"
|
||||
- "ramdisk-disable-root-pwd-*.patch"
|
||||
platform: "geminilake"
|
||||
unique: "synology_geminilake_220+"
|
||||
serial:
|
||||
prefix:
|
||||
- "0000"
|
||||
middle: "XXX"
|
||||
suffix: "alpha"
|
||||
dom: 2
|
||||
dt: true
|
||||
disks: 2
|
||||
beta: true
|
||||
productvers:
|
||||
"6.2":
|
||||
kver: "4.4.59"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.0":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.1":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.2":
|
||||
kver: "4.4.302"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
@ -1,43 +0,0 @@
|
||||
id: "DS423+"
|
||||
synoinfo: &synoinfo
|
||||
support_disk_compatibility: "no"
|
||||
support_memory_compatibility: "no"
|
||||
support_led_brightness_adjustment: "no"
|
||||
support_syno_hybrid_raid:
|
||||
supportraidgroup:
|
||||
maxlanport: "8"
|
||||
netif_seq: "0 1 2 3 4 5 6 7"
|
||||
buzzeroffen: "0xffff"
|
||||
cmdline: &cmdline
|
||||
intel_iommu: "igfx_off"
|
||||
synoboot2:
|
||||
HddEnableDynamicPower: 1
|
||||
vender_format_version: 2
|
||||
syno_ttyS0: "serial,0x3f8"
|
||||
syno_ttyS1: "serial,0x2f8"
|
||||
elevator: elevator
|
||||
patch: &patch
|
||||
- "ramdisk-etc-rc-*.patch"
|
||||
- "ramdisk-init-script-v4-*.patch"
|
||||
- "ramdisk-post-init-script-*.patch"
|
||||
- "ramdisk-disable-root-pwd-*.patch"
|
||||
platform: "geminilake"
|
||||
unique: "synology_geminilake_423+"
|
||||
serial:
|
||||
prefix:
|
||||
- "2350"
|
||||
middle: "WBR"
|
||||
suffix: "alpha"
|
||||
dom: 2
|
||||
dt: true
|
||||
disks: 2
|
||||
beta: false
|
||||
productvers:
|
||||
"7.2":
|
||||
kver: "4.4.302"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
@ -1,69 +0,0 @@
|
||||
id: "DS2419+"
|
||||
synoinfo: &synoinfo
|
||||
support_disk_compatibility: "no"
|
||||
support_memory_compatibility: "no"
|
||||
support_led_brightness_adjustment: "no"
|
||||
support_bde_internal_10g: "no"
|
||||
support_syno_hybrid_raid:
|
||||
supportraidgroup:
|
||||
maxlanport: "8"
|
||||
netif_seq: "0 1 2 3 4 5 6 7"
|
||||
cmdline: &cmdline
|
||||
HddHotplug: 0
|
||||
syno_hdd_detect: 0
|
||||
syno_hdd_powerup_seq: 0
|
||||
vender_format_version: 2
|
||||
elevator: elevator
|
||||
patch: &patch
|
||||
- "ramdisk-etc-rc-*.patch"
|
||||
- "ramdisk-init-script-v4-*.patch"
|
||||
- "ramdisk-post-init-script-*.patch"
|
||||
- "ramdisk-disable-root-pwd-*.patch"
|
||||
- "ramdisk-disable-disabled-ports-*.patch"
|
||||
platform: "denverton"
|
||||
unique: "synology_denverton_2419+"
|
||||
serial:
|
||||
prefix:
|
||||
- "1880"
|
||||
middle: "QZA"
|
||||
suffix: "alpha"
|
||||
dom: 2
|
||||
dt: false
|
||||
disks: 8
|
||||
beta: true
|
||||
productvers:
|
||||
"6.2":
|
||||
kver: "4.4.59"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.0":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.1":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.2":
|
||||
kver: "4.4.302"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
@ -1,61 +0,0 @@
|
||||
id: "DS2422+"
|
||||
synoinfo: &synoinfo
|
||||
support_disk_compatibility: "no"
|
||||
support_memory_compatibility: "no"
|
||||
support_led_brightness_adjustment: "no"
|
||||
support_syno_hybrid_raid:
|
||||
supportraidgroup:
|
||||
maxlanport: "8"
|
||||
netif_seq: "0 1 2 3 4 5 6 7"
|
||||
cmdline: &cmdline
|
||||
synoboot2:
|
||||
syno_hdd_detect: 0
|
||||
SMBusHddDynamicPower: 1
|
||||
vender_format_version: 2
|
||||
syno_ttyS0: "serial,0x3f8"
|
||||
syno_ttyS1: "serial,0x2f8"
|
||||
elevator: elevator
|
||||
patch: &patch
|
||||
- "ramdisk-etc-rc-*.patch"
|
||||
- "ramdisk-init-script-v4-*.patch"
|
||||
- "ramdisk-post-init-script-*.patch"
|
||||
- "ramdisk-disable-root-pwd-*.patch"
|
||||
platform: "v1000"
|
||||
unique: "synology_v1000_2422+"
|
||||
serial:
|
||||
prefix:
|
||||
- "2140"
|
||||
- "2180"
|
||||
middle: "SLR"
|
||||
suffix: "alpha"
|
||||
dom: 2
|
||||
dt: true
|
||||
disks: 12
|
||||
beta: false
|
||||
productvers:
|
||||
"7.0":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.1":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.2":
|
||||
kver: "4.4.302"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
@ -1,62 +0,0 @@
|
||||
id: "DS3615xs"
|
||||
synoinfo: &synoinfo
|
||||
support_disk_compatibility: "no"
|
||||
support_memory_compatibility: "no"
|
||||
support_led_brightness_adjustment: "no"
|
||||
support_syno_hybrid_raid:
|
||||
supportraidgroup:
|
||||
maxlanport: "8"
|
||||
netif_seq: "0 1 2 3 4 5 6 7"
|
||||
cmdline: &cmdline
|
||||
HddHotplug: 0
|
||||
syno_hdd_detect: 0
|
||||
syno_hdd_powerup_seq: 0
|
||||
vender_format_version: 2
|
||||
elevator: elevator
|
||||
patch: &patch
|
||||
- "ramdisk-etc-rc-*.patch"
|
||||
- "ramdisk-init-script-v4-*.patch"
|
||||
- "ramdisk-post-init-script-*.patch"
|
||||
- "ramdisk-disable-root-pwd-*.patch"
|
||||
- "ramdisk-disable-disabled-ports-*.patch"
|
||||
platform: "bromolow"
|
||||
unique: "synology_bromolow_3615xs"
|
||||
serial:
|
||||
prefix:
|
||||
- "1130"
|
||||
- "1230"
|
||||
- "1330"
|
||||
- "1430"
|
||||
middle: "LWN"
|
||||
suffix: "numeric"
|
||||
dom: 1
|
||||
dt: false
|
||||
disks: 12
|
||||
beta: true
|
||||
productvers:
|
||||
"6.2":
|
||||
kver: "3.10.105"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.0":
|
||||
kver: "3.10.108"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.1":
|
||||
kver: "3.10.108"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
@ -1,71 +0,0 @@
|
||||
id: "DS3617xs"
|
||||
synoinfo: &synoinfo
|
||||
support_disk_compatibility: "no"
|
||||
support_memory_compatibility: "no"
|
||||
support_led_brightness_adjustment: "no"
|
||||
support_syno_hybrid_raid:
|
||||
supportraidgroup:
|
||||
maxlanport: "8"
|
||||
netif_seq: "0 1 2 3 4 5 6 7"
|
||||
cmdline: &cmdline
|
||||
HddHotplug: 0
|
||||
syno_hdd_detect: 0
|
||||
syno_hdd_powerup_seq: 0
|
||||
vender_format_version: 2
|
||||
elevator: elevator
|
||||
patch: &patch
|
||||
- "ramdisk-etc-rc-*.patch"
|
||||
- "ramdisk-init-script-v4-*.patch"
|
||||
- "ramdisk-post-init-script-*.patch"
|
||||
- "ramdisk-disable-root-pwd-*.patch"
|
||||
- "ramdisk-disable-disabled-ports-*.patch"
|
||||
platform: "broadwell"
|
||||
unique: "synology_broadwell_3617xs"
|
||||
serial:
|
||||
prefix:
|
||||
- "1130"
|
||||
- "1230"
|
||||
- "1330"
|
||||
- "1430"
|
||||
middle: "ODN"
|
||||
suffix: "numeric"
|
||||
dom: 1
|
||||
dt: false
|
||||
disks: 12
|
||||
beta: true
|
||||
productvers:
|
||||
"6.2":
|
||||
kver: "3.10.105"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.0":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.1":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.2":
|
||||
kver: "4.4.302"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
@ -1,61 +0,0 @@
|
||||
id: "DS3622xs+"
|
||||
synoinfo: &synoinfo
|
||||
support_disk_compatibility: "no"
|
||||
support_memory_compatibility: "no"
|
||||
support_led_brightness_adjustment: "no"
|
||||
support_bde_internal_10g: "no"
|
||||
support_oob_ctl: "no"
|
||||
support_syno_hybrid_raid:
|
||||
supportraidgroup:
|
||||
maxlanport: "8"
|
||||
netif_seq: "0 1 2 3 4 5 6 7"
|
||||
cmdline: &cmdline
|
||||
HddHotplug: 0
|
||||
syno_hdd_detect: 0
|
||||
syno_hdd_powerup_seq: 0
|
||||
vender_format_version: 2
|
||||
elevator: elevator
|
||||
patch: &patch
|
||||
- "ramdisk-etc-rc-*.patch"
|
||||
- "ramdisk-init-script-v4-*.patch"
|
||||
- "ramdisk-post-init-script-*.patch"
|
||||
- "ramdisk-disable-root-pwd-*.patch"
|
||||
- "ramdisk-disable-disabled-ports-*.patch"
|
||||
platform: "broadwellnk"
|
||||
unique: "synology_broadwellnk_3622xs+"
|
||||
serial:
|
||||
prefix:
|
||||
- "2150"
|
||||
middle: "SQR"
|
||||
suffix: "alpha"
|
||||
dom: 1
|
||||
dt: false
|
||||
disks: 12
|
||||
beta: false
|
||||
productvers:
|
||||
"7.0":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.1":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.2":
|
||||
kver: "4.4.302"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
@ -1,52 +0,0 @@
|
||||
id: "DS423+"
|
||||
synoinfo: &synoinfo
|
||||
support_disk_compatibility: "no"
|
||||
support_memory_compatibility: "no"
|
||||
support_led_brightness_adjustment: "no"
|
||||
support_syno_hybrid_raid:
|
||||
supportraidgroup:
|
||||
maxlanport: "8"
|
||||
netif_seq: "0 1 2 3 4 5 6 7"
|
||||
buzzeroffen: "0xffff"
|
||||
cmdline: &cmdline
|
||||
intel_iommu: "igfx_off"
|
||||
synoboot2:
|
||||
HddEnableDynamicPower: 1
|
||||
vender_format_version: 2
|
||||
syno_ttyS0: "serial,0x3f8"
|
||||
syno_ttyS1: "serial,0x2f8"
|
||||
elevator: elevator
|
||||
patch: &patch
|
||||
- "ramdisk-etc-rc-*.patch"
|
||||
- "ramdisk-init-script-v4-*.patch"
|
||||
- "ramdisk-post-init-script-*.patch"
|
||||
- "ramdisk-disable-root-pwd-*.patch"
|
||||
platform: "geminilake"
|
||||
unique: "synology_geminilake_423+"
|
||||
serial:
|
||||
prefix:
|
||||
- "22A0"
|
||||
middle: "VKR"
|
||||
suffix: "alpha"
|
||||
dom: 2
|
||||
dt: true
|
||||
disks: 4
|
||||
beta: false
|
||||
productvers:
|
||||
"7.1":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.2":
|
||||
kver: "4.4.302"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
@ -1,72 +0,0 @@
|
||||
id: "DS718+"
|
||||
synoinfo: &synoinfo
|
||||
support_disk_compatibility: "no"
|
||||
support_memory_compatibility: "no"
|
||||
support_led_brightness_adjustment: "no"
|
||||
support_leds_lp3943: "no"
|
||||
support_syno_hybrid_raid:
|
||||
supportraidgroup:
|
||||
maxlanport: "8"
|
||||
netif_seq: "0 1 2 3 4 5 6 7"
|
||||
buzzeroffen: "0xffff"
|
||||
cmdline: &cmdline
|
||||
HddHotplug: 0
|
||||
syno_hdd_detect: 0
|
||||
syno_hdd_powerup_seq: 0
|
||||
vender_format_version: 2
|
||||
elevator: elevator
|
||||
patch: &patch
|
||||
- "ramdisk-etc-rc-*.patch"
|
||||
- "ramdisk-init-script-v4-*.patch"
|
||||
- "ramdisk-post-init-script-*.patch"
|
||||
- "ramdisk-disable-root-pwd-*.patch"
|
||||
- "ramdisk-disable-disabled-ports-*.patch"
|
||||
platform: "apollolake"
|
||||
unique: "synology_apollolake_718+"
|
||||
serial:
|
||||
prefix:
|
||||
- "1930"
|
||||
middle: "PEN"
|
||||
suffix: "numeric"
|
||||
flags:
|
||||
- "movbe"
|
||||
dom: 2
|
||||
dt: false
|
||||
disks: 4
|
||||
beta: true
|
||||
productvers:
|
||||
"6.2":
|
||||
kver: "4.4.59"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.0":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.1":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.2":
|
||||
kver: "4.4.302"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
@ -1,71 +0,0 @@
|
||||
id: "DS720+"
|
||||
synoinfo: &synoinfo
|
||||
support_disk_compatibility: "no"
|
||||
support_memory_compatibility: "no"
|
||||
support_led_brightness_adjustment: "no"
|
||||
support_syno_hybrid_raid:
|
||||
supportraidgroup:
|
||||
maxlanport: "8"
|
||||
netif_seq: "0 1 2 3 4 5 6 7"
|
||||
buzzeroffen: "0xffff"
|
||||
cmdline: &cmdline
|
||||
intel_iommu: "igfx_off"
|
||||
synoboot2:
|
||||
HddEnableDynamicPower: 1
|
||||
vender_format_version: 2
|
||||
syno_ttyS0: "serial,0x3f8"
|
||||
syno_ttyS1: "serial,0x2f8"
|
||||
elevator: elevator
|
||||
patch: &patch
|
||||
- "ramdisk-etc-rc-*.patch"
|
||||
- "ramdisk-init-script-v4-*.patch"
|
||||
- "ramdisk-post-init-script-*.patch"
|
||||
- "ramdisk-disable-root-pwd-*.patch"
|
||||
platform: "geminilake"
|
||||
unique: "synology_geminilake_720+"
|
||||
serial:
|
||||
prefix:
|
||||
- "2010"
|
||||
- "2110"
|
||||
middle: "QWR"
|
||||
suffix: "alpha"
|
||||
dom: 2
|
||||
dt: true
|
||||
disks: 2
|
||||
beta: true
|
||||
productvers:
|
||||
"6.2":
|
||||
kver: "4.4.59"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.0":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.1":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.2":
|
||||
kver: "4.4.302"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
@ -1,51 +0,0 @@
|
||||
id: "DS723+"
|
||||
synoinfo: &synoinfo
|
||||
support_disk_compatibility: "no"
|
||||
support_memory_compatibility: "no"
|
||||
support_led_brightness_adjustment: "no"
|
||||
support_syno_hybrid_raid:
|
||||
supportraidgroup:
|
||||
maxlanport: "8"
|
||||
netif_seq: "0 1 2 3 4 5 6 7"
|
||||
buzzeroffen: "0xffff"
|
||||
cmdline: &cmdline
|
||||
synoboot2:
|
||||
SMBusHddDynamicPower: 1
|
||||
vender_format_version: 2
|
||||
syno_ttyS0: "serial,0x3f8"
|
||||
syno_ttyS1: "serial,0x2f8"
|
||||
elevator: elevator
|
||||
patch: &patch
|
||||
- "ramdisk-etc-rc-*.patch"
|
||||
- "ramdisk-init-script-v4-*.patch"
|
||||
- "ramdisk-post-init-script-*.patch"
|
||||
- "ramdisk-disable-root-pwd-*.patch"
|
||||
platform: "r1000"
|
||||
unique: "synology_r1000_723+"
|
||||
serial:
|
||||
prefix:
|
||||
- "2270"
|
||||
middle: "TQR"
|
||||
suffix: "alpha"
|
||||
dom: 2
|
||||
dt: true
|
||||
disks: 2
|
||||
beta: true
|
||||
productvers:
|
||||
"7.1":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.2":
|
||||
kver: "4.4.302"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
@ -1,71 +0,0 @@
|
||||
id: "DS916+"
|
||||
synoinfo: &synoinfo
|
||||
support_disk_compatibility: "no"
|
||||
support_memory_compatibility: "no"
|
||||
support_led_brightness_adjustment: "no"
|
||||
support_syno_hybrid_raid:
|
||||
supportraidgroup:
|
||||
maxlanport: "8"
|
||||
netif_seq: "0 1 2 3 4 5 6 7"
|
||||
cmdline: &cmdline
|
||||
HddHotplug: 0
|
||||
syno_hdd_detect: 0
|
||||
syno_hdd_powerup_seq: 0
|
||||
vender_format_version: 2
|
||||
elevator: elevator
|
||||
patch: &patch
|
||||
- "ramdisk-etc-rc-*.patch"
|
||||
- "ramdisk-init-script-v4-*.patch"
|
||||
- "ramdisk-post-init-script-*.patch"
|
||||
- "ramdisk-disable-root-pwd-*.patch"
|
||||
- "ramdisk-disable-disabled-ports-*.patch"
|
||||
platform: "braswell"
|
||||
unique: "synology_braswell_916+"
|
||||
serial:
|
||||
prefix:
|
||||
- "1130"
|
||||
- "1230"
|
||||
- "1330"
|
||||
- "1430"
|
||||
middle: "NZN"
|
||||
suffix: "numeric"
|
||||
dom: 2
|
||||
dt: false
|
||||
disks: 4
|
||||
beta: true
|
||||
productvers:
|
||||
"6.2":
|
||||
kver: "3.10.105"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.0":
|
||||
kver: "3.10.108"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.1":
|
||||
kver: "3.10.108"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.2":
|
||||
kver: "3.10.108"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
@ -1,72 +0,0 @@
|
||||
id: "DS918+"
|
||||
synoinfo: &synoinfo
|
||||
support_disk_compatibility: "no"
|
||||
support_memory_compatibility: "no"
|
||||
support_led_brightness_adjustment: "no"
|
||||
support_leds_lp3943: "no"
|
||||
support_syno_hybrid_raid:
|
||||
supportraidgroup:
|
||||
maxlanport: "8"
|
||||
netif_seq: "0 1 2 3 4 5 6 7"
|
||||
buzzeroffen: "0xffff"
|
||||
cmdline: &cmdline
|
||||
HddHotplug: 0
|
||||
syno_hdd_detect: 0
|
||||
syno_hdd_powerup_seq: 0
|
||||
vender_format_version: 2
|
||||
elevator: elevator
|
||||
patch: &patch
|
||||
- "ramdisk-etc-rc-*.patch"
|
||||
- "ramdisk-init-script-v4-*.patch"
|
||||
- "ramdisk-post-init-script-*.patch"
|
||||
- "ramdisk-disable-root-pwd-*.patch"
|
||||
- "ramdisk-disable-disabled-ports-*.patch"
|
||||
platform: "apollolake"
|
||||
unique: "synology_apollolake_918+"
|
||||
serial:
|
||||
prefix:
|
||||
- "1910"
|
||||
middle: "PDN"
|
||||
suffix: "numeric"
|
||||
flags:
|
||||
- "movbe"
|
||||
dom: 2
|
||||
dt: false
|
||||
disks: 4
|
||||
beta: false
|
||||
productvers:
|
||||
"6.2":
|
||||
kver: "4.4.59"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.0":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.1":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.2":
|
||||
kver: "4.4.302"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
@ -1,73 +0,0 @@
|
||||
id: "DS920+"
|
||||
synoinfo: &synoinfo
|
||||
support_disk_compatibility: "no"
|
||||
support_memory_compatibility: "no"
|
||||
support_led_brightness_adjustment: "no"
|
||||
support_syno_hybrid_raid:
|
||||
supportraidgroup:
|
||||
maxlanport: "8"
|
||||
netif_seq: "0 1 2 3 4 5 6 7"
|
||||
buzzeroffen: "0xffff"
|
||||
cmdline: &cmdline
|
||||
intel_iommu: "igfx_off"
|
||||
synoboot2:
|
||||
HddEnableDynamicPower: 1
|
||||
vender_format_version: 2
|
||||
syno_ttyS0: "serial,0x3f8"
|
||||
syno_ttyS1: "serial,0x2f8"
|
||||
elevator: elevator
|
||||
patch: &patch
|
||||
- "ramdisk-etc-rc-*.patch"
|
||||
- "ramdisk-init-script-v4-*.patch"
|
||||
- "ramdisk-post-init-script-*.patch"
|
||||
- "ramdisk-disable-root-pwd-*.patch"
|
||||
platform: "geminilake"
|
||||
unique: "synology_geminilake_920+"
|
||||
serial:
|
||||
prefix:
|
||||
- "2030"
|
||||
- "2040"
|
||||
- "20C0"
|
||||
- "2150"
|
||||
middle: "SBR"
|
||||
suffix: "alpha"
|
||||
dom: 2
|
||||
dt: true
|
||||
disks: 4
|
||||
beta: false
|
||||
productvers:
|
||||
"6.2":
|
||||
kver: "4.4.59"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.0":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.1":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.2":
|
||||
kver: "4.4.302"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
@ -1,52 +0,0 @@
|
||||
id: "DS923+"
|
||||
synoinfo: &synoinfo
|
||||
support_disk_compatibility: "no"
|
||||
support_memory_compatibility: "no"
|
||||
support_led_brightness_adjustment: "no"
|
||||
support_syno_hybrid_raid:
|
||||
supportraidgroup:
|
||||
maxlanport: "8"
|
||||
netif_seq: "0 1 2 3 4 5 6 7"
|
||||
buzzeroffen: "0xffff"
|
||||
cmdline: &cmdline
|
||||
synoboot2:
|
||||
SMBusHddDynamicPower: 1
|
||||
vender_format_version: 2
|
||||
syno_ttyS0: "serial,0x3f8"
|
||||
syno_ttyS1: "serial,0x2f8"
|
||||
elevator: elevator
|
||||
patch: &patch
|
||||
- "ramdisk-etc-rc-*.patch"
|
||||
- "ramdisk-init-script-v4-*.patch"
|
||||
- "ramdisk-post-init-script-*.patch"
|
||||
- "ramdisk-disable-root-pwd-*.patch"
|
||||
platform: "r1000"
|
||||
unique: "synology_r1000_923+"
|
||||
serial:
|
||||
prefix:
|
||||
- "2270"
|
||||
middle: "TQR"
|
||||
suffix: "alpha"
|
||||
macpre: 9009d0
|
||||
dom: 2
|
||||
dt: true
|
||||
disks: 4
|
||||
beta: false
|
||||
productvers:
|
||||
"7.1":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.2":
|
||||
kver: "4.4.302"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
@ -1,55 +0,0 @@
|
||||
id: "DVA1622"
|
||||
synoinfo: &synoinfo
|
||||
support_disk_compatibility: "no"
|
||||
support_memory_compatibility: "no"
|
||||
support_led_brightness_adjustment: "no"
|
||||
support_syno_hybrid_raid:
|
||||
supportraidgroup:
|
||||
maxlanport: "8"
|
||||
netif_seq: "0 1 2 3 4 5 6 7"
|
||||
buzzeroffen: "0xffff"
|
||||
cmdline: &cmdline
|
||||
intel_iommu: "igfx_off"
|
||||
synoboot2:
|
||||
HddEnableDynamicPower: 1
|
||||
vender_format_version: 2
|
||||
syno_ttyS0: "serial,0x3f8"
|
||||
syno_ttyS1: "serial,0x2f8"
|
||||
elevator: elevator
|
||||
patch: &patch
|
||||
- "ramdisk-etc-rc-*.patch"
|
||||
- "ramdisk-init-script-v4-*.patch"
|
||||
- "ramdisk-post-init-script-*.patch"
|
||||
- "ramdisk-disable-root-pwd-*.patch"
|
||||
platform: "geminilake"
|
||||
unique: "synology_geminilake_dva1622"
|
||||
serial:
|
||||
prefix:
|
||||
- "2030"
|
||||
- "2040"
|
||||
- "20C0"
|
||||
- "2150"
|
||||
middle: "UBR"
|
||||
suffix: "alpha"
|
||||
dom: 2
|
||||
dt: true
|
||||
disks: 2
|
||||
beta: false
|
||||
productvers:
|
||||
"7.1":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.2":
|
||||
kver: "4.4.302"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
@ -1,72 +0,0 @@
|
||||
id: "DVA3219"
|
||||
synoinfo: &synoinfo
|
||||
support_disk_compatibility: "no"
|
||||
support_memory_compatibility: "no"
|
||||
support_led_brightness_adjustment: "no"
|
||||
support_bde_internal_10g: "no"
|
||||
support_syno_hybrid_raid:
|
||||
supportraidgroup:
|
||||
maxlanport: "8"
|
||||
netif_seq: "0 1 2 3 4 5 6 7"
|
||||
cmdline: &cmdline
|
||||
HddHotplug: 0
|
||||
syno_hdd_detect: 0
|
||||
syno_hdd_powerup_seq: 0
|
||||
vender_format_version: 2
|
||||
elevator: elevator
|
||||
patch: &patch
|
||||
- "ramdisk-etc-rc-*.patch"
|
||||
- "ramdisk-init-script-v4-*.patch"
|
||||
- "ramdisk-post-init-script-*.patch"
|
||||
- "ramdisk-disable-root-pwd-*.patch"
|
||||
- "ramdisk-disable-disabled-ports-*.patch"
|
||||
platform: "denverton"
|
||||
unique: "synology_denverton_dva3219"
|
||||
serial:
|
||||
prefix:
|
||||
- "1930"
|
||||
- "1940"
|
||||
middle: "RFR"
|
||||
suffix: "alpha"
|
||||
flags:
|
||||
- "movbe"
|
||||
dom: 2
|
||||
dt: false
|
||||
disks: 4
|
||||
beta: true
|
||||
productvers:
|
||||
"6.2":
|
||||
kver: "4.4.59"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.0":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.1":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.2":
|
||||
kver: "4.4.302"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
@ -1,74 +0,0 @@
|
||||
id: "DVA3221"
|
||||
synoinfo: &synoinfo
|
||||
support_disk_compatibility: "no"
|
||||
support_memory_compatibility: "no"
|
||||
support_led_brightness_adjustment: "no"
|
||||
support_bde_internal_10g: "no"
|
||||
support_syno_hybrid_raid:
|
||||
supportraidgroup:
|
||||
maxlanport: "8"
|
||||
netif_seq: "0 1 2 3 4 5 6 7"
|
||||
cmdline: &cmdline
|
||||
HddHotplug: 0
|
||||
syno_hdd_detect: 0
|
||||
syno_hdd_powerup_seq: 0
|
||||
vender_format_version: 2
|
||||
elevator: elevator
|
||||
patch: &patch
|
||||
- "ramdisk-etc-rc-*.patch"
|
||||
- "ramdisk-init-script-v4-*.patch"
|
||||
- "ramdisk-post-init-script-*.patch"
|
||||
- "ramdisk-disable-root-pwd-*.patch"
|
||||
- "ramdisk-disable-disabled-ports-*.patch"
|
||||
platform: "denverton"
|
||||
unique: "synology_denverton_dva3221"
|
||||
serial:
|
||||
prefix:
|
||||
- "2030"
|
||||
- "2040"
|
||||
- "20C0"
|
||||
- "2150"
|
||||
middle: "SJR"
|
||||
suffix: "alpha"
|
||||
flags:
|
||||
- "movbe"
|
||||
dom: 2
|
||||
dt: false
|
||||
disks: 4
|
||||
beta: false
|
||||
productvers:
|
||||
"6.2":
|
||||
kver: "4.4.59"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.0":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.1":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.2":
|
||||
kver: "4.4.302"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
@ -1,60 +0,0 @@
|
||||
id: "FS2500"
|
||||
synoinfo: &synoinfo
|
||||
support_disk_compatibility: "no"
|
||||
support_memory_compatibility: "no"
|
||||
support_led_brightness_adjustment: "no"
|
||||
support_syno_hybrid_raid:
|
||||
supportraidgroup:
|
||||
maxlanport: "8"
|
||||
netif_seq: "0 1 2 3 4 5 6 7"
|
||||
cmdline: &cmdline
|
||||
intel_iommu: "igfx_off"
|
||||
synoboot2:
|
||||
SMBusHddDynamicPower: 1
|
||||
vender_format_version: 2
|
||||
syno_ttyS0: "serial,0x3f8"
|
||||
syno_ttyS1: "serial,0x2f8"
|
||||
elevator: elevator
|
||||
patch: &patch
|
||||
- "ramdisk-etc-rc-*.patch"
|
||||
- "ramdisk-init-script-v4-*.patch"
|
||||
- "ramdisk-post-init-script-*.patch"
|
||||
- "ramdisk-disable-root-pwd-*.patch"
|
||||
platform: "v1000"
|
||||
unique: "synology_v1000_fs2500"
|
||||
serial:
|
||||
prefix:
|
||||
- "1960"
|
||||
middle: "PSN"
|
||||
suffix: "numeric"
|
||||
dom: 2
|
||||
dt: true
|
||||
disks: 12
|
||||
beta: true
|
||||
productvers:
|
||||
"7.0":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.1":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.2":
|
||||
kver: "4.4.302"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
@ -1,68 +0,0 @@
|
||||
id: "FS3017"
|
||||
synoinfo: &synoinfo
|
||||
support_disk_compatibility: "no"
|
||||
support_memory_compatibility: "no"
|
||||
support_led_brightness_adjustment: "no"
|
||||
support_syno_hybrid_raid:
|
||||
supportraidgroup:
|
||||
maxlanport: "8"
|
||||
netif_seq: "0 1 2 3 4 5 6 7"
|
||||
buzzeroffen: "0xffff"
|
||||
cmdline: &cmdline
|
||||
synoboot2:
|
||||
SMBusHddDynamicPower: 1
|
||||
vender_format_version: 2
|
||||
elevator: elevator
|
||||
patch: &patch
|
||||
- "ramdisk-etc-rc-*.patch"
|
||||
- "ramdisk-init-script-v4-*.patch"
|
||||
- "ramdisk-post-init-script-*.patch"
|
||||
- "ramdisk-disable-root-pwd-*.patch"
|
||||
- "ramdisk-disable-disabled-ports-*.patch"
|
||||
platform: "grantley"
|
||||
unique: "synology_grantley_fs3017"
|
||||
serial:
|
||||
prefix:
|
||||
- "1650"
|
||||
middle: "O8N"
|
||||
suffix: "numeric"
|
||||
dom: 1
|
||||
dt: false
|
||||
disks: 24
|
||||
beta: true
|
||||
productvers:
|
||||
"6.2":
|
||||
kver: "3.10.105"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.0":
|
||||
kver: "3.10.108"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.1":
|
||||
kver: "3.10.108"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.2":
|
||||
kver: "3.10.108"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
@ -1,72 +0,0 @@
|
||||
id: "FS6400"
|
||||
synoinfo: &synoinfo
|
||||
support_disk_compatibility: "no"
|
||||
support_memory_compatibility: "no"
|
||||
support_led_brightness_adjustment: "no"
|
||||
support_syno_hybrid_raid:
|
||||
supportraidgroup:
|
||||
supportsas: "no"
|
||||
supportsas_v2: "yes"
|
||||
maxlanport: "8"
|
||||
netif_seq: "0 1 2 3 4 5 6 7"
|
||||
buzzeroffen: "0xffff"
|
||||
cmdline: &cmdline
|
||||
synoboot2:
|
||||
SMBusHddDynamicPower: 1
|
||||
vender_format_version: 2
|
||||
syno_ttyS0: "serial,0x3f8"
|
||||
syno_ttyS1: "serial,0x2f8"
|
||||
elevator: elevator
|
||||
modprobe.blacklist: mpt3sas
|
||||
patch: &patch
|
||||
- "ramdisk-etc-rc-*.patch"
|
||||
- "ramdisk-init-script-v4-*.patch"
|
||||
- "ramdisk-post-init-script-*.patch"
|
||||
- "ramdisk-disable-root-pwd-*.patch"
|
||||
platform: "purley"
|
||||
unique: "synology_purley_fs6400"
|
||||
serial:
|
||||
prefix:
|
||||
- "1960"
|
||||
middle: "PSN"
|
||||
suffix: "numeric"
|
||||
dom: 2
|
||||
dt: true
|
||||
disks: 24
|
||||
beta: true
|
||||
productvers:
|
||||
"6.2":
|
||||
kver: "4.4.59"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.0":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.1":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.2":
|
||||
kver: "4.4.302"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
@ -1,72 +0,0 @@
|
||||
id: "HD6500"
|
||||
synoinfo: &synoinfo
|
||||
support_disk_compatibility: "no"
|
||||
support_memory_compatibility: "no"
|
||||
support_led_brightness_adjustment: "no"
|
||||
support_syno_hybrid_raid:
|
||||
supportraidgroup:
|
||||
supportsas: "no"
|
||||
supportsas_v2: "yes"
|
||||
maxlanport: "8"
|
||||
netif_seq: "0 1 2 3 4 5 6 7"
|
||||
buzzeroffen: "0xffff"
|
||||
cmdline: &cmdline
|
||||
synoboot2:
|
||||
SMBusHddDynamicPower: 1
|
||||
vender_format_version: 2
|
||||
syno_ttyS0: "serial,0x3f8"
|
||||
syno_ttyS1: "serial,0x2f8"
|
||||
elevator: elevator
|
||||
modprobe.blacklist: mpt3sas
|
||||
patch: &patch
|
||||
- "ramdisk-etc-rc-*.patch"
|
||||
- "ramdisk-init-script-v4-*.patch"
|
||||
- "ramdisk-post-init-script-*.patch"
|
||||
- "ramdisk-disable-root-pwd-*.patch"
|
||||
platform: "purley"
|
||||
unique: "synology_purley_hd6500"
|
||||
serial:
|
||||
prefix:
|
||||
- "0000"
|
||||
middle: "XXX"
|
||||
suffix: "numeric"
|
||||
dom: 2
|
||||
dt: true
|
||||
disks: 24
|
||||
beta: true
|
||||
productvers:
|
||||
"6.2":
|
||||
kver: "4.4.59"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.0":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.1":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.2":
|
||||
kver: "4.4.302"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
@ -1,72 +0,0 @@
|
||||
id: "RS1221+"
|
||||
synoinfo: &synoinfo
|
||||
support_disk_compatibility: "no"
|
||||
support_memory_compatibility: "no"
|
||||
support_led_brightness_adjustment: "no"
|
||||
support_bde_internal_10g: "no"
|
||||
support_syno_hybrid_raid:
|
||||
supportraidgroup:
|
||||
maxlanport: "8"
|
||||
netif_seq: "0 1 2 3 4 5 6 7"
|
||||
cmdline: &cmdline
|
||||
HddHotplug: 0
|
||||
synoboot2:
|
||||
syno_hdd_detect: 0
|
||||
syno_hdd_powerup_seq: 0
|
||||
SMBusHddDynamicPower: 1
|
||||
vender_format_version: 2
|
||||
syno_ttyS0: "serial,0x3f8"
|
||||
syno_ttyS1: "serial,0x2f8"
|
||||
elevator: elevator
|
||||
patch: &patch
|
||||
- "ramdisk-etc-rc-*.patch"
|
||||
- "ramdisk-init-script-v4-*.patch"
|
||||
- "ramdisk-post-init-script-*.patch"
|
||||
- "ramdisk-disable-root-pwd-*.patch"
|
||||
platform: "v1000"
|
||||
unique: "synology_v1000_rs1221+"
|
||||
serial:
|
||||
prefix:
|
||||
- "20B0"
|
||||
middle: "RWR"
|
||||
suffix: "alpha"
|
||||
dom: 2
|
||||
dt: true
|
||||
disks: 8
|
||||
beta: true
|
||||
productvers:
|
||||
"6.2":
|
||||
kver: "4.4.59"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.0":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.1":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.2":
|
||||
kver: "4.4.302"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
@ -1,69 +0,0 @@
|
||||
id: "RS1619xs+"
|
||||
synoinfo: &synoinfo
|
||||
support_disk_compatibility: "no"
|
||||
support_memory_compatibility: "no"
|
||||
support_led_brightness_adjustment: "no"
|
||||
support_bde_internal_10g: "no"
|
||||
support_syno_hybrid_raid:
|
||||
supportraidgroup:
|
||||
maxlanport: "8"
|
||||
netif_seq: "0 1 2 3 4 5 6 7"
|
||||
cmdline: &cmdline
|
||||
HddHotplug: 0
|
||||
syno_hdd_detect: 0
|
||||
syno_hdd_powerup_seq: 0
|
||||
vender_format_version: 2
|
||||
elevator: elevator
|
||||
patch: &patch
|
||||
- "ramdisk-etc-rc-*.patch"
|
||||
- "ramdisk-init-script-v4-*.patch"
|
||||
- "ramdisk-post-init-script-*.patch"
|
||||
- "ramdisk-disable-root-pwd-*.patch"
|
||||
- "ramdisk-disable-disabled-ports-*.patch"
|
||||
platform: "broadwellnk"
|
||||
unique: "synology_broadwellnk_rs1619xs+"
|
||||
serial:
|
||||
prefix:
|
||||
- "1920"
|
||||
middle: "QPR"
|
||||
suffix: "alpha"
|
||||
dom: 2
|
||||
dt: false
|
||||
disks: 4
|
||||
beta: true
|
||||
productvers:
|
||||
"6.2":
|
||||
kver: "4.4.59"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.0":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.1":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.2":
|
||||
kver: "4.4.302"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
@ -1,51 +0,0 @@
|
||||
id: "RS2423+"
|
||||
synoinfo: &synoinfo
|
||||
support_disk_compatibility: "no"
|
||||
support_memory_compatibility: "no"
|
||||
support_led_brightness_adjustment: "no"
|
||||
support_syno_hybrid_raid:
|
||||
supportraidgroup:
|
||||
maxlanport: "8"
|
||||
netif_seq: "0 1 2 3 4 5 6 7"
|
||||
cmdline: &cmdline
|
||||
synoboot2:
|
||||
syno_hdd_detect: 0
|
||||
SMBusHddDynamicPower: 1
|
||||
vender_format_version: 2
|
||||
syno_ttyS0: "serial,0x3f8"
|
||||
syno_ttyS1: "serial,0x2f8"
|
||||
elevator: elevator
|
||||
patch: &patch
|
||||
- "ramdisk-etc-rc-*.patch"
|
||||
- "ramdisk-init-script-v4-*.patch"
|
||||
- "ramdisk-post-init-script-*.patch"
|
||||
- "ramdisk-disable-root-pwd-*.patch"
|
||||
platform: "v1000"
|
||||
unique: "synology_v1000_rs2423+"
|
||||
serial:
|
||||
prefix:
|
||||
- "0000"
|
||||
middle: "XXX"
|
||||
suffix: "alpha"
|
||||
dom: 2
|
||||
dt: true
|
||||
disks: 24
|
||||
beta: false
|
||||
productvers:
|
||||
"7.1":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.2":
|
||||
kver: "4.4.302"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
@ -1,54 +0,0 @@
|
||||
id: "RS2423RP+"
|
||||
synoinfo: &synoinfo
|
||||
support_disk_compatibility: "no"
|
||||
support_memory_compatibility: "no"
|
||||
support_led_brightness_adjustment: "no"
|
||||
support_leds_atmega1608: "no"
|
||||
support_leds_lp3943: "no"
|
||||
supportadt7490: "no"
|
||||
support_syno_hybrid_raid:
|
||||
supportraidgroup:
|
||||
maxlanport: "8"
|
||||
netif_seq: "0 1 2 3 4 5 6 7"
|
||||
cmdline: &cmdline
|
||||
synoboot2:
|
||||
syno_hdd_detect: 0
|
||||
SMBusHddDynamicPower: 1
|
||||
vender_format_version: 2
|
||||
syno_ttyS0: "serial,0x3f8"
|
||||
syno_ttyS1: "serial,0x2f8"
|
||||
elevator: elevator
|
||||
patch: &patch
|
||||
- "ramdisk-etc-rc-*.patch"
|
||||
- "ramdisk-init-script-v4-*.patch"
|
||||
- "ramdisk-post-init-script-*.patch"
|
||||
- "ramdisk-disable-root-pwd-*.patch"
|
||||
platform: "v1000"
|
||||
unique: "synology_v1000_rs2423rp+"
|
||||
serial:
|
||||
prefix:
|
||||
- "0000"
|
||||
middle: "XXX"
|
||||
suffix: "alpha"
|
||||
dom: 2
|
||||
dt: true
|
||||
disks: 24
|
||||
beta: true
|
||||
productvers:
|
||||
"7.1":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.2":
|
||||
kver: "4.4.302"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
@ -1,59 +0,0 @@
|
||||
id: "RS3413xs+"
|
||||
synoinfo: &synoinfo
|
||||
support_disk_compatibility: "no"
|
||||
support_memory_compatibility: "no"
|
||||
support_led_brightness_adjustment: "no"
|
||||
support_syno_hybrid_raid:
|
||||
supportraidgroup:
|
||||
maxlanport: "8"
|
||||
netif_seq: "0 1 2 3 4 5 6 7"
|
||||
cmdline: &cmdline
|
||||
HddHotplug: 0
|
||||
syno_hdd_detect: 0
|
||||
syno_hdd_powerup_seq: 0
|
||||
vender_format_version: 2
|
||||
elevator: elevator
|
||||
patch: &patch
|
||||
- "ramdisk-etc-rc-*.patch"
|
||||
- "ramdisk-init-script-v4-*.patch"
|
||||
- "ramdisk-post-init-script-*.patch"
|
||||
- "ramdisk-disable-root-pwd-*.patch"
|
||||
- "ramdisk-disable-disabled-ports-*.patch"
|
||||
platform: "bromolow"
|
||||
unique: "synology_bromolow_rs3413xs+"
|
||||
serial:
|
||||
prefix:
|
||||
- "0000"
|
||||
middle: "XXX"
|
||||
suffix: "numeric"
|
||||
dom: 1
|
||||
dt: false
|
||||
disks: 16
|
||||
beta: true
|
||||
productvers:
|
||||
"6.2":
|
||||
kver: "3.10.105"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.0":
|
||||
kver: "3.10.108"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.1":
|
||||
kver: "3.10.108"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
@ -1,69 +0,0 @@
|
||||
id: "RS3618xs"
|
||||
synoinfo: &synoinfo
|
||||
support_disk_compatibility: "no"
|
||||
support_memory_compatibility: "no"
|
||||
support_led_brightness_adjustment: "no"
|
||||
supportssdcache: "no"
|
||||
support_syno_hybrid_raid:
|
||||
supportraidgroup:
|
||||
maxlanport: "8"
|
||||
netif_seq: "0 1 2 3 4 5 6 7"
|
||||
cmdline: &cmdline
|
||||
HddHotplug: 0
|
||||
syno_hdd_detect: 0
|
||||
syno_hdd_powerup_seq: 0
|
||||
vender_format_version: 2
|
||||
elevator: elevator
|
||||
patch: &patch
|
||||
- "ramdisk-etc-rc-*.patch"
|
||||
- "ramdisk-init-script-v4-*.patch"
|
||||
- "ramdisk-post-init-script-*.patch"
|
||||
- "ramdisk-disable-root-pwd-*.patch"
|
||||
- "ramdisk-disable-disabled-ports-*.patch"
|
||||
platform: "broadwell"
|
||||
unique: "synology_broadwell_rs3618xs"
|
||||
serial:
|
||||
prefix:
|
||||
- "0000"
|
||||
middle: "XXX"
|
||||
suffix: "alpha"
|
||||
dom: 2
|
||||
dt: false
|
||||
disks: 12
|
||||
beta: true
|
||||
productvers:
|
||||
"6.2":
|
||||
kver: "3.10.105"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.0":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.1":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.2":
|
||||
kver: "4.4.302"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
@ -1,69 +0,0 @@
|
||||
id: "RS3621xs+"
|
||||
synoinfo: &synoinfo
|
||||
support_disk_compatibility: "no"
|
||||
support_memory_compatibility: "no"
|
||||
support_led_brightness_adjustment: "no"
|
||||
support_bde_internal_10g: "no"
|
||||
support_syno_hybrid_raid:
|
||||
supportraidgroup:
|
||||
maxlanport: "8"
|
||||
netif_seq: "0 1 2 3 4 5 6 7"
|
||||
cmdline: &cmdline
|
||||
HddHotplug: 0
|
||||
syno_hdd_detect: 0
|
||||
syno_hdd_powerup_seq: 0
|
||||
vender_format_version: 2
|
||||
elevator: elevator
|
||||
patch: &patch
|
||||
- "ramdisk-etc-rc-*.patch"
|
||||
- "ramdisk-init-script-v4-*.patch"
|
||||
- "ramdisk-post-init-script-*.patch"
|
||||
- "ramdisk-disable-root-pwd-*.patch"
|
||||
- "ramdisk-disable-disabled-ports-*.patch"
|
||||
platform: "broadwellnk"
|
||||
unique: "synology_broadwellnk_rs3621xs+"
|
||||
serial:
|
||||
prefix:
|
||||
- "20A0"
|
||||
middle: "SZR"
|
||||
suffix: "alpha"
|
||||
dom: 2
|
||||
dt: false
|
||||
disks: 12
|
||||
beta: true
|
||||
productvers:
|
||||
"6.2":
|
||||
kver: "4.4.59"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.0":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.1":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.2":
|
||||
kver: "4.4.302"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
@ -1,70 +0,0 @@
|
||||
id: "RS4021xs+"
|
||||
synoinfo: &synoinfo
|
||||
support_disk_compatibility: "no"
|
||||
support_memory_compatibility: "no"
|
||||
support_led_brightness_adjustment: "no"
|
||||
support_bde_internal_10g: "no"
|
||||
support_syno_hybrid_raid:
|
||||
supportraidgroup:
|
||||
maxlanport: "8"
|
||||
netif_seq: "0 1 2 3 4 5 6 7"
|
||||
cmdline: &cmdline
|
||||
HddHotplug: 0
|
||||
syno_hdd_detect: 0
|
||||
syno_hdd_powerup_seq: 0
|
||||
vender_format_version: 2
|
||||
elevator: elevator
|
||||
patch: &patch
|
||||
- "ramdisk-etc-rc-*.patch"
|
||||
- "ramdisk-init-script-v4-*.patch"
|
||||
- "ramdisk-post-init-script-*.patch"
|
||||
- "ramdisk-disable-root-pwd-*.patch"
|
||||
- "ramdisk-disable-disabled-ports-*.patch"
|
||||
platform: "broadwellnk"
|
||||
unique: "synology_broadwellnk_rs4021xs+"
|
||||
serial:
|
||||
prefix:
|
||||
- "2160"
|
||||
middle: "T2R"
|
||||
suffix: "alpha"
|
||||
macpre: 9009d0
|
||||
dom: 2
|
||||
dt: false
|
||||
disks: 16
|
||||
beta: true
|
||||
productvers:
|
||||
"6.2":
|
||||
kver: "4.4.59"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.0":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.1":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.2":
|
||||
kver: "4.4.302"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
@ -1,71 +0,0 @@
|
||||
id: "SA3200D"
|
||||
synoinfo: &synoinfo
|
||||
support_disk_compatibility: "no"
|
||||
support_memory_compatibility: "no"
|
||||
support_led_brightness_adjustment: "no"
|
||||
support_bde_internal_10g: "no"
|
||||
support_syno_hybrid_raid:
|
||||
supportraidgroup:
|
||||
maxlanport: "8"
|
||||
netif_seq: "0 1 2 3 4 5 6 7"
|
||||
cmdline: &cmdline
|
||||
HddHotplug: 0
|
||||
synoboot2:
|
||||
syno_hdd_detect: 0
|
||||
syno_hdd_powerup_seq: 0
|
||||
SMBusHddDynamicPower: 1
|
||||
vender_format_version: 2
|
||||
elevator: elevator
|
||||
patch: &patch
|
||||
- "ramdisk-etc-rc-*.patch"
|
||||
- "ramdisk-init-script-v4-*.patch"
|
||||
- "ramdisk-post-init-script-*.patch"
|
||||
- "ramdisk-disable-root-pwd-*.patch"
|
||||
- "ramdisk-disable-disabled-ports-*.patch"
|
||||
platform: "broadwellntbap"
|
||||
unique: "synology_broadwellntbap_sa3200d"
|
||||
serial:
|
||||
prefix:
|
||||
- "19A0"
|
||||
middle: "S4R"
|
||||
suffix: "alpha"
|
||||
dom: 1
|
||||
dt: false
|
||||
disks: 12
|
||||
beta: true
|
||||
productvers:
|
||||
"6.2":
|
||||
kver: "4.4.59"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.0":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.1":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.2":
|
||||
kver: "4.4.302"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
@ -1,71 +0,0 @@
|
||||
id: "SA3400"
|
||||
synoinfo: &synoinfo
|
||||
support_disk_compatibility: "no"
|
||||
support_memory_compatibility: "no"
|
||||
support_led_brightness_adjustment: "no"
|
||||
support_bde_internal_10g: "no"
|
||||
support_syno_hybrid_raid:
|
||||
supportraidgroup:
|
||||
maxlanport: "8"
|
||||
netif_seq: "0 1 2 3 4 5 6 7"
|
||||
cmdline: &cmdline
|
||||
HddHotplug: 0
|
||||
synoboot2:
|
||||
syno_hdd_detect: 0
|
||||
syno_hdd_powerup_seq: 0
|
||||
SMBusHddDynamicPower: 1
|
||||
vender_format_version: 2
|
||||
elevator: elevator
|
||||
patch: &patch
|
||||
- "ramdisk-etc-rc-*.patch"
|
||||
- "ramdisk-init-script-v4-*.patch"
|
||||
- "ramdisk-post-init-script-*.patch"
|
||||
- "ramdisk-disable-root-pwd-*.patch"
|
||||
- "ramdisk-disable-disabled-ports-*.patch"
|
||||
platform: "broadwellnk"
|
||||
unique: "synology_broadwellnk_sa3400"
|
||||
serial:
|
||||
prefix:
|
||||
- "1920"
|
||||
middle: "RJR"
|
||||
suffix: "alpha"
|
||||
dom: 1
|
||||
dt: false
|
||||
disks: 12
|
||||
beta: true
|
||||
productvers:
|
||||
"6.2":
|
||||
kver: "4.4.59"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.0":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.1":
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
|
||||
"7.2":
|
||||
kver: "4.4.302"
|
||||
rd-compressed: false
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
patch: *patch
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user